From 73f0910d91ffa7afaeb0df47a902cb1b4e3a645a Mon Sep 17 00:00:00 2001 From: koplenov Date: Sun, 5 Apr 2026 05:41:23 +0300 Subject: [PATCH] link menus to windows --- src/App.tsx | 126 +++++++++++++++---------------------- src/cases/CybersecMenu.tsx | 18 ++++-- 2 files changed, 65 insertions(+), 79 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index d33cabe..3629e06 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,91 +1,69 @@ import React, { useState } from 'react'; -// import Day1Desktop from './Day1Desktop'; -import MainApp from './MainApp'; -import ChatterboxTTS from './components/deepfake/ChatterboxTTS'; +import CybersecMenu from './cases/CybersecMenu'; import Case1Desktop from './cases/Case1Desktop'; import Case2Desktop from './cases/Case2Desktop'; import Case3Desktop from './cases/Case3Desktop'; import Case4Desktop from './cases/Case4Desktop'; +import ChatterboxTTS from './components/deepfake/ChatterboxTTS'; import MyQuize from './components/MyQuize'; import CyberSecurityArticle from './components/CyberSecurityArticle'; export type WallpaperType = 'xp' | 'win7' | 'win10'; - +type OverlayType = 'case1' | 'case2' | 'case3' | 'case4' | 'deepfake' | 'quiz' | 'wiki' | null; const App: React.FC = () => { -// const [day1Complete, setDay1Complete] = useState(false); -// if (!day1Complete) { -// return setDay1Complete(true)} />; -// } - // return + const [overlay, setOverlay] = useState(null); - const [showCase1, setShowCase1] = useState(false); - const [showCase2, setShowCase2] = useState(false); - const [showCase3, setShowCase3] = useState(false); - const [showCase4, setShowCase4] = useState(false); - const [showWiki, setShowWiki] = useState(false); - const [showQuiz, setShowQuiz] = useState(false); - const [showDeepfake, setDeepfake] = useState(false); + const close = () => setOverlay(null); - return (
-

Хайо

- - - - - - - - {showWiki && ( -
- ; -
- )} - {showCase1 && ( -
- setShowCase1(false)} />; -
- )} - {showCase2 && ( -
- setShowCase2(false)} />; -
- )} - {showCase3 && ( -
- setShowCase3(false)} />; -
- )} - {showCase4 && ( -
- setShowCase4(false)} />; -
- )} - - {showQuiz && ( -
- ; -
- )} - {showDeepfake && ( -
- ; -
- )} -
); + const handleSelectLevel = (level: number | string) => { + const map: Record = { + 1: 'case1', + 2: 'case2', + 3: 'case3', + 4: 'case4', + 'deepfake': 'deepfake', + }; + setTimeout(() => setOverlay(map[level] ?? null), 1200); + }; + + return ( +
+ setTimeout(() => setOverlay('wiki'), 1200)} + onOpenQuiz={() => setTimeout(() => setOverlay('quiz'), 1200)} + /> + + {overlay && ( +
+
+ +
+ + {overlay === 'case1' && } + {overlay === 'case2' && } + {overlay === 'case3' && } + {overlay === 'case4' && } + {overlay === 'deepfake' && } + {overlay === 'quiz' && } + {overlay === 'wiki' && } +
+
+ )} +
+ ); }; -/* -const App: React.FC = () => { -// const [day1Complete, setDay1Complete] = useState(false); - -// if (!day1Complete) { - // return setDay1Complete(true)} />; -// } - // return -// return ; - return ; -};*/ - export default App; diff --git a/src/cases/CybersecMenu.tsx b/src/cases/CybersecMenu.tsx index 73fcfbf..7c985cf 100644 --- a/src/cases/CybersecMenu.tsx +++ b/src/cases/CybersecMenu.tsx @@ -8,7 +8,13 @@ interface Notification { removing: boolean; } -const CybersecMenu: React.FC = () => { +interface CybersecMenuProps { + onSelectLevel?: (level: number | string) => void; + onOpenWiki?: () => void; + onOpenQuiz?: () => void; +} + +const CybersecMenu: React.FC = ({ onSelectLevel, onOpenWiki, onOpenQuiz }) => { const canvasRef = useRef(null); const animFrameRef = useRef(0); const smokeOffsetRef = useRef(0); @@ -36,16 +42,18 @@ const CybersecMenu: React.FC = () => { 'deepfake': 'Voice deepfake – AI-generated speech', }; showNotification(`>> LEVEL ${level} SELECTED`, levelNames[level]); - }, [showNotification]); + onSelectLevel?.(level); + }, [showNotification, onSelectLevel]); const openWiki = useCallback(() => { showNotification('>> ACCESSING WIKI', 'Security knowledge base loading...'); - }, [showNotification]); + onOpenWiki?.(); + }, [showNotification, onOpenWiki]); const openQuiz = useCallback(() => { showNotification('>> INITIATING QUIZ', 'Test your skills module loading...'); - - }, [showNotification]); + onOpenQuiz?.(); + }, [showNotification, onOpenQuiz]); // Keyboard navigation useEffect(() => {