import React, { useState } from "react"; import { useNavigate } from "react-router-dom"; import { ArrowIcon } from "../../icons/ExportCommonIcons"; import { toggleTheme } from "../../../utils/theme"; import useVersionHistoryStore, { useShortcutStore, useVersionStore, } from "../../../store/builder/store"; import { useSubModuleStore } from "../../../store/useModuleStore"; import { generateUniqueId } from "../../../functions/generateUniqueId"; interface MenuBarProps { setOpenMenu: (isOpen: boolean) => void; } interface MenuItem { label: string; onClick?: string; shortcut?: string; submenu?: MenuItem[]; action?: () => void; } const MenuBar: React.FC = ({ setOpenMenu }) => { const userName = localStorage.getItem("userName") ?? "Anonymous"; const navigate = useNavigate(); const [activeMenu, setActiveMenu] = useState(null); const [activeSubMenu, setActiveSubMenu] = useState(null); const [selectedItems, setSelectedItems] = useState>( {} ); const { setVersionHistory } = useVersionHistoryStore(); 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 = () => { localStorage.clear(); navigate("/"); }; function handleShotcutsHelper() { setShowShortcuts(!showShortcuts); } const menus: Record = { File: [ { label: "New File", shortcut: "Ctrl + N" }, { label: "Open Local File", shortcut: "Ctrl + O" }, { label: "Save Version", action: () => { const versionStore = useVersionStore.getState(); const versionCount = versionStore.versions.length; const newVersion = { id: generateUniqueId(), versionLabel: `v${versionCount + 1}.0`, timestamp: `${new Date().toLocaleTimeString("en-US", { hour: "numeric", minute: "2-digit", hour12: true, })} ${new Date().toLocaleDateString("en-US", { year: "numeric", month: "long", day: "2-digit", })}`, savedBy: userName, }; console.log("newVersion: ", newVersion); versionStore.addVersion(newVersion); }, }, { 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;