import React, { useState } from "react"; import { useNavigate } from "react-router-dom"; import { ArrowIcon } from "../../icons/ExportCommonIcons"; import { toggleTheme } from "../../../utils/theme"; import { useShortcutStore } from "../../../store/builder/store"; import useModuleStore, { useSubModuleStore } from "../../../store/ui/useModuleStore"; import { useSceneContext } from "../../../modules/scene/sceneContext"; interface MenuBarProps { setOpenMenu: (isOpen: boolean) => void; } interface MenuItem { label: string; onClick?: string; shortcut?: string; submenu?: MenuItem[]; action?: () => void; } const MenuBar: React.FC = ({ setOpenMenu }) => { const navigate = useNavigate(); const [activeMenu, setActiveMenu] = useState(null); const [activeSubMenu, setActiveSubMenu] = useState(null); const [selectedItems, setSelectedItems] = useState>({}); const { versionStore } = useSceneContext(); const { setCreateNewVersion, setVersionHistoryVisible } = versionStore(); const { setActiveModule } = useModuleStore(); const { setSubModule } = useSubModuleStore(); const { showShortcuts, setShowShortcuts } = useShortcutStore(); const savedTheme = localStorage.getItem("theme") ?? "light"; const toggleSelection = (itemName: string) => { setSelectedItems((prev) => ({ ...prev, [itemName]: !prev[itemName], })); }; // functions const handleThemeChange = () => { toggleTheme(); window.location.reload(); }; const handleLogout = () => { const theme = localStorage.getItem("theme") ?? "light"; localStorage.clear(); localStorage.setItem("theme", theme); navigate("/"); }; function handleShotcutsHelper() { setShowShortcuts(!showShortcuts); } function handleVersionCreation() { setCreateNewVersion(true); setVersionHistoryVisible(true); setSubModule("properties"); setActiveModule("builder"); } const menus: Record = { File: [ { label: "New File", shortcut: "Ctrl + N" }, { label: "Open Local File", shortcut: "Ctrl + O" }, { label: "Save Version", shortcut: "Ctrl + Alt + S", action: handleVersionCreation, }, { label: "Make a Copy" }, { label: "Share" }, { label: "Rename" }, { label: "Import" }, { label: "Close File" }, ], Edit: [ { label: "Undo", shortcut: "Ctrl + Z" }, { label: "Redo", shortcut: "Ctrl + Shift + Z" }, { label: "Undo History" }, { label: "Redo History" }, { label: "Find", shortcut: "Ctrl + F" }, { label: "Delete" }, { label: "Select by..." }, { label: "Keymap" }, ], View: [ { label: "Grid" }, { label: "Gizmo", submenu: [{ label: "Visibility" }, { label: "Cube view" }, { label: "Sphere view" }], }, { label: "Zoom" }, { label: "Full Screen", shortcut: "F11" }, ], Help: [ { label: "Shortcuts", shortcut: "Ctrl + Shift + ?", action: handleShotcutsHelper, }, { label: "Manual" }, { label: "Video Tutorials" }, { label: "Report a bug" }, ], }; // render menu item and sub menu item component const renderMenuItem = ({ label, shortcut, action }: MenuItem) => ( ); const renderSubMenu = (submenu: MenuItem[], parentLabel: string) => (
{submenu.map((item) => ( ))}
); return (
setOpenMenu(false)}>
{Object.entries(menus).map(([menu, items]) => ( ) : ( renderMenuItem(item) ) )}
)} ))} {/* Version History */} {/* Theme */} {/* Log out */}
); }; export default MenuBar;