import { useEffect } from 'react' import { getBackgroundImage, getStaticImage } from '@/lib/utils' import { useNavigate, useParams } from 'react-router-dom' import { Image } from '@/components' import { getUserDefine } from '@/lib/utils/api-common' import { useLuxunStore, LUXUN_LESSON_ID, LUXUN_KEY } from '@/store/luxunStore' const deserializeVisitedExhibits = ( data: Record | undefined ): Record> => { if (!data || typeof data !== 'object') return {} const visitedExhibits: Record> = {} for (const [place, exhibits] of Object.entries(data)) { visitedExhibits[place] = new Set(Array.isArray(exhibits) ? exhibits : []) } return visitedExhibits } const Luxun = () => { const navigate = useNavigate() const { moduleName } = useParams<{ moduleName: string }>() // starName 固定为 luxun const starName = 'luxun' const lastVisitedPlace = useLuxunStore((state) => state.lastVisitedPlace) const reflectionRoute = useLuxunStore((state) => state.reflectionRoute) useEffect(() => { ;(async () => { try { const raw = await getUserDefine(LUXUN_LESSON_ID, LUXUN_KEY) if (!raw) return const data = JSON.parse(raw) as { visitedExhibits?: Record lastVisitedPlace?: string | null reflectionRoute?: string } useLuxunStore.setState((prev) => ({ ...prev, visitedExhibits: deserializeVisitedExhibits(data.visitedExhibits), lastVisitedPlace: data.lastVisitedPlace !== undefined ? data.lastVisitedPlace : prev.lastVisitedPlace, reflectionRoute: data.reflectionRoute && ['reflection', 'reflection2', 'reflection3'].includes(data.reflectionRoute) ? data.reflectionRoute : (prev.reflectionRoute ?? 'reflection'), })) } catch (error) { console.error('Failed to load Luxun store', error) } })() }, []) if (!moduleName) { return null } return (
navigate(`/entrance/${moduleName}`)} />
{/* 对话 */} navigate(`/${moduleName}/${starName}/${lastVisitedPlace || 'place1'}`)} /> {/* 体悟 */} navigate(`/${moduleName}/${starName}/${reflectionRoute || 'reflection'}`)} /> {/* 内化 */} navigate(`/${moduleName}/${starName}/internalization`)} />
) } export default Luxun