diff --git a/src/components/vibesuite/MapClient/MapClient.tsx b/src/components/vibesuite/MapClient/MapClient.tsx index 66daebe..05173d7 100644 --- a/src/components/vibesuite/MapClient/MapClient.tsx +++ b/src/components/vibesuite/MapClient/MapClient.tsx @@ -28,6 +28,7 @@ import ArrowUp from '@icons/tools/vibesuite/ArrowUp'; import { GlobalContext } from '@components/Context/GlobalContext'; import Heading from '@components/Heading'; +import LogIn from '@components/LogIn'; import CategoryIcon from '@components/vibesuite/CategoryIcons'; import CategoryNav from '@components/vibesuite/CategoryNav'; import ProgressHeader from '@components/vibesuite/ProgressHeader'; @@ -60,6 +61,7 @@ export default function MapClient({ 'all' | 'learned' | 'not-learned' >('all'); const [panelCloseRequested, setPanelCloseRequested] = useState(false); + const [showLogin, setShowLogin] = useState(false); const sectionRefs = useRef>({}); const searchRowRef = useRef(null); const [showScrollTop, setShowScrollTop] = useState(false); @@ -436,6 +438,8 @@ export default function MapClient({ prevSkillId={prevSkillId} nextSkillId={nextSkillId} requestClose={panelCloseRequested} + isLoggedIn={!!accountData} + onOpenLogin={() => setShowLogin(true)} /> )} @@ -603,6 +607,7 @@ export default function MapClient({ )} + {showLogin && } ); } diff --git a/src/components/vibesuite/SkillDetailPanel/SkillDetailPanel.tsx b/src/components/vibesuite/SkillDetailPanel/SkillDetailPanel.tsx index 440da6a..62c1d11 100644 --- a/src/components/vibesuite/SkillDetailPanel/SkillDetailPanel.tsx +++ b/src/components/vibesuite/SkillDetailPanel/SkillDetailPanel.tsx @@ -75,6 +75,8 @@ export default function SkillDetailPanel({ prevSkillId, nextSkillId, requestClose, + isLoggedIn, + onOpenLogin, }: SkillDetailPanelProps) { const { locale } = useRouter() as TRouter; const t = vibesuiteIntl[locale]; @@ -350,7 +352,13 @@ export default function SkillDetailPanel({ className={cn(styles.toggleBtn, { [styles.toggleBtnUnmark]: isCompleted, })} - onClick={() => onToggle(skill.id, !isCompleted)} + onClick={() => { + if (!isLoggedIn && onOpenLogin) { + onOpenLogin(); + return; + } + onToggle(skill.id, !isCompleted); + }} > {isCompleted ? t.unmarkAsLearned : t.markAsLearned} diff --git a/src/components/vibesuite/SkillDetailPanel/SkillDetailPanel.types.ts b/src/components/vibesuite/SkillDetailPanel/SkillDetailPanel.types.ts index 9da568e..607372f 100644 --- a/src/components/vibesuite/SkillDetailPanel/SkillDetailPanel.types.ts +++ b/src/components/vibesuite/SkillDetailPanel/SkillDetailPanel.types.ts @@ -14,4 +14,6 @@ export type SkillDetailPanelProps = { prevSkillId: string | null; nextSkillId: string | null; requestClose?: boolean; + isLoggedIn?: boolean; + onOpenLogin?: () => void; };