import { Image, StudyGuideModal } from '@/components' import { cn, getBackgroundImage, getPublicPath, getStaticImage } from '@/lib/utils' import { useMemo } from 'react' import { useNavigate, useParams } from 'react-router-dom' import { LOBBY_COLUMNS, LOBBY_LAYOUT, LOBBY_TIMELINE } from './lobby.config' import { useNieerStore } from '@/store/nieerStore' import { useDialogReducer } from './useDialogReducer' import DialogLayer from './DialogLayer' import { BADGE_CONFIG, getAllPlacesCompleted, getBadgeUnlockedMap, getGuideSceneId, getPlaceCompletionMap, getUnlockVideoSrcForScene, getUnlockedByIdMap, } from './reflectionProgress' const starName = 'nieer' const NieerReflection = () => { const navigate = useNavigate() const { moduleName } = useParams<{ moduleName: string }>() const debugLobby = new URLSearchParams(window.location.search).get('debugLobby') === '1' const visitedReflectionCursors = useNieerStore((state) => state.visitedReflectionCursors) const markReflectionCursorVisited = useNieerStore((state) => state.markReflectionCursorVisited) const setReflectionWork = useNieerStore((state) => state.setReflectionWork) const hasSeenReflectionGuide = useNieerStore((state) => state.hasSeenReflectionGuide) const markReflectionGuideSeen = useNieerStore((state) => state.markReflectionGuideSeen) const showGuideModal = !hasSeenReflectionGuide const { state: dialogState, openScene, enterUnlock, handleShare, finishBadgeVideo, close, } = useDialogReducer(markReflectionCursorVisited, setReflectionWork) const placeCompletion = useMemo( () => getPlaceCompletionMap(visitedReflectionCursors), [visitedReflectionCursors] ) const unlockedById = useMemo(() => getUnlockedByIdMap(placeCompletion), [placeCompletion]) const badgeUnlocked = useMemo(() => getBadgeUnlockedMap(placeCompletion), [placeCompletion]) const guideSceneId = useMemo(() => getGuideSceneId(placeCompletion), [placeCompletion]) const allPlacesCompleted = useMemo( () => getAllPlacesCompleted(placeCompletion), [placeCompletion] ) const handleResultShare = (sceneId: number, payload?: Record) => { handleShare({ payload, unlockVideoSrc: getUnlockVideoSrcForScene(sceneId, visitedReflectionCursors), }) } if (!moduleName) return null return (
navigate(`/${moduleName}/${starName}/home`)} />
琴弦 {LOBBY_COLUMNS.map((scene) => { const isUnlocked = unlockedById[scene.id as keyof typeof unlockedById] const isCompleted = placeCompletion[scene.id as keyof typeof placeCompletion] const iconSrc = isCompleted ? scene.icon : scene.iconBw const isClickable = isUnlocked || scene.id === guideSceneId const showGuideState = !allPlacesCompleted && scene.id === guideSceneId return ( ) })}
{LOBBY_TIMELINE.map((item) => { if (item.type === 'single') { return (
{item.label}
) } return (
{item.withLine && } {item.label} {item.withLine && }
) })}
{BADGE_CONFIG.map((badge) => { const isLit = badgeUnlocked[badge.id as keyof typeof badgeUnlocked] return (
徽章底板 {isLit && ( {`徽章${badge.id}`} )}
) })}
旅行箱 navigate(`/${moduleName}/${starName}/reflection/box`)} /> {debugLobby && (
)} {`同学你好,欢迎来到“跨越时空·体悟”学习模块! 请登陆“时空回溯・亲历时代”体验仓,下一站:1936年,上海。 请带上你的旅行包,穿越时空解锁6个国歌故事,集齐精神徽章,绘制属于你的国歌精神图谱吧~时空门已开,请出发吧!`}
) } export default NieerReflection