import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import moduleCanvasImage from '@/assets/module-canvas-neon.jpg'; import moduleGameImage from '@/assets/module-game.jpg'; import moduleLearningImage from '@/assets/module-learning.jpg'; import moduleRobotImage from '@/assets/module-robot.jpg'; import logoWordmarkSource from '@/assets/makelore-wordmark-source.png'; import { UserProfileDialog } from '@/components/profile/UserProfileDialog'; import { useCurrentUserProfile } from '@/hooks/use-current-user-profile'; import { aiModules, isAiModuleAllowed, type AiModuleId } from '@/lib/ai-modules'; import { getAuthUserDisplayName } from '@/lib/auth-user-display'; import { cn } from '@/lib/utils'; import { useAuthStore } from '@/stores/auth'; import { getUserProfileDisplayName } from '@/stores/user-profile'; const moduleSelectionContent: Record = { programming: { label: 'Code 编程', image: moduleGameImage, imageAlt: '游戏创作工作台' }, painting: { label: 'Canvas 设计', image: moduleCanvasImage, imageAlt: '数位板设计创作' }, learning: { label: 'Learning 学习', image: moduleLearningImage, imageAlt: '数学科技宇宙' }, robot: { label: 'Robot 机器', image: moduleRobotImage, imageAlt: '青少年管理机器人硬件与设备绑定' }, }; export function ModuleSelection({ authRequired = true }: { authRequired?: boolean }) { const navigate = useNavigate(); const authUser = useAuthStore((state) => state.user); const moduleAccess = useAuthStore((state) => state.moduleAccess); const authenticated = useAuthStore((state) => state.isAuthenticated()); const { userProfile, profileRequired, profileSyncError, } = useCurrentUserProfile(authRequired); const [profileDialogOpen, setProfileDialogOpen] = useState(false); const userDisplayName = getUserProfileDisplayName(userProfile) || getAuthUserDisplayName(authUser); const [dismissedSyncError, setDismissedSyncError] = useState(null); const profileDialogShouldBeOpen = profileDialogOpen || profileRequired || Boolean(profileSyncError && dismissedSyncError !== profileSyncError); const openModule = (route: string | null, enabled: boolean) => { if (!route || !enabled) return; if (authRequired && !authenticated) { navigate('/login'); return; } navigate(route); }; return (
Makelore

{userDisplayName ? `${userDisplayName},欢迎回来!` : '欢迎回来!'}

今天,想创作什么?

{aiModules.map((module) => { const content = moduleSelectionContent[module.id]; const enabledByPolicy = isAiModuleAllowed(module.id, moduleAccess); const enabled = module.enabled && enabledByPolicy; return ( ); })}
{ if (open) { setDismissedSyncError(null); setProfileDialogOpen(true); return; } if (profileSyncError) setDismissedSyncError(profileSyncError); setProfileDialogOpen(false); }} />
); } export default ModuleSelection;