diff --git a/apps/client/src/AppRouter.tsx b/apps/client/src/AppRouter.tsx
index 7e787756c..e43683833 100644
--- a/apps/client/src/AppRouter.tsx
+++ b/apps/client/src/AppRouter.tsx
@@ -49,12 +49,12 @@ export default function AppRouter() {
} />
} />
+
} />
- {/*/!* Lower cannot have fallback *!/*/}
+
} />
} />
- } />
{/*/!* Protected Routes *!/*/}
} />
diff --git a/apps/client/src/common/api/db.ts b/apps/client/src/common/api/db.ts
index 2ea617707..27a3b5e50 100644
--- a/apps/client/src/common/api/db.ts
+++ b/apps/client/src/common/api/db.ts
@@ -1,11 +1,5 @@
import axios, { AxiosResponse } from 'axios';
-import {
- DatabaseModel,
- GetInfo,
- MessageResponse,
- ProjectData,
- ProjectFileListResponse,
-} from 'ontime-types';
+import { DatabaseModel, GetInfo, MessageResponse, ProjectData, ProjectFileListResponse } from 'ontime-types';
import { makeCSV, makeTable } from '../../features/cuesheet/cuesheetUtils';
diff --git a/apps/client/src/common/components/navigation-menu/NavigationMenu.module.scss b/apps/client/src/common/components/navigation-menu/NavigationMenu.module.scss
index 264f5137d..2a54aeab4 100644
--- a/apps/client/src/common/components/navigation-menu/NavigationMenu.module.scss
+++ b/apps/client/src/common/components/navigation-menu/NavigationMenu.module.scss
@@ -1,12 +1,11 @@
@use '../../../theme/mixins' as *;
-$menu-bg: $gray-1200;
$menu-hover-bg: $gray-1350;
$menu-focus-bg: $gray-1300;
$icon-color: $ui-white;
$button-bg: $gray-1050;
-$button-size: 48px;
+$button-size: 3rem;
.buttonContainer {
display: flex;
@@ -21,7 +20,7 @@ $button-size: 48px;
position: fixed;
left: 0;
top: 0;
- z-index: 2;
+ z-index: 12;
&.hidden {
opacity: 0;
@@ -29,7 +28,7 @@ $button-size: 48px;
}
.button {
- font-size: 24px;
+ font-size: 1.5rem;
color: $icon-color;
background-color: $button-bg;
width: $button-size;
@@ -44,31 +43,10 @@ $button-size: 48px;
z-index: 3;
}
-.menuContainer {
- top: 0;
- left: 0;
- height: fit-content;
- position: absolute;
- background-color: $menu-bg;
- min-width: 200px;
- border-radius: 0 0 24px 0;
- border-right: 1px solid $border-color-ondark;
-
- box-shadow: $box-shadow-l2;
- padding-bottom: 1rem;
-
- max-height: 100vh;
- overflow-y: auto;
-}
-
-.buttonsContainer {
- margin-top: calc(56px + 1rem);
-}
-
.link {
@include action-link;
justify-content: space-between;
- padding: 0.5rem 1rem;
+ padding: 0.75rem 1.5rem;
&:hover {
background-color: $menu-hover-bg;
diff --git a/apps/client/src/common/components/navigation-menu/NavigationMenu.tsx b/apps/client/src/common/components/navigation-menu/NavigationMenu.tsx
index bb28107bb..d4660ec58 100644
--- a/apps/client/src/common/components/navigation-menu/NavigationMenu.tsx
+++ b/apps/client/src/common/components/navigation-menu/NavigationMenu.tsx
@@ -1,39 +1,36 @@
-import { memo, useEffect, useRef, useState } from 'react';
+import { memo, PropsWithChildren, useEffect, useRef, useState } from 'react';
import { createPortal } from 'react-dom';
-import { Link, useLocation, useSearchParams } from 'react-router-dom';
-import { useDisclosure } from '@chakra-ui/react';
-import { useFullscreen } from '@mantine/hooks';
+import {
+ Drawer,
+ DrawerBody,
+ DrawerCloseButton,
+ DrawerContent,
+ DrawerHeader,
+ DrawerOverlay,
+ useDisclosure,
+} from '@chakra-ui/react';
import { IoApps } from '@react-icons/all-files/io5/IoApps';
-import { IoArrowUp } from '@react-icons/all-files/io5/IoArrowUp';
-import { IoContract } from '@react-icons/all-files/io5/IoContract';
-import { IoExpand } from '@react-icons/all-files/io5/IoExpand';
-import { IoPencilSharp } from '@react-icons/all-files/io5/IoPencilSharp';
-import { IoSwapVertical } from '@react-icons/all-files/io5/IoSwapVertical';
+import { IoSettingsOutline } from '@react-icons/all-files/io5/IoSettingsOutline';
-import { navigatorConstants } from '../../../viewerConfig';
import useClickOutside from '../../hooks/useClickOutside';
-import { useViewOptionsStore } from '../../stores/viewOptions';
-import { isKeyEnter } from '../../utils/keyEvent';
-
-import RenameClientModal from './rename-client-modal/RenameClientModal';
+import { debounce } from '../../utils/debounce';
import style from './NavigationMenu.module.scss';
-function NavigationMenu() {
- const location = useLocation();
+interface NavigationMenuProps {
+ editCallback: () => void;
+}
+
+function NavigationMenu(props: PropsWithChildren) {
+ const { children, editCallback } = props;
- const { fullscreen, toggle } = useFullscreen();
- const { toggleMirror } = useViewOptionsStore();
const [showButton, setShowButton] = useState(false);
- const [searchParams, setSearchParams] = useSearchParams();
- const [showMenu, setShowMenu] = useState(false);
+ const { isOpen, onOpen, onClose } = useDisclosure();
const menuRef = useRef(null);
- useClickOutside(menuRef, () => setShowMenu(false));
+ useClickOutside(menuRef, () => onClose);
- const { isOpen, onOpen, onClose } = useDisclosure();
-
- const toggleMenu = () => setShowMenu((prev) => !prev);
+ const toggleMenu = () => (isOpen ? onClose() : onOpen());
// show on mouse move
useEffect(() => {
@@ -45,98 +42,49 @@ function NavigationMenu() {
}
fadeOut = setTimeout(() => setShowButton(false), 3000);
};
- document.addEventListener('mousemove', setShowMenuTrue);
+
+ const debouncedShowMenu = debounce(setShowMenuTrue, 1000);
+
+ document.addEventListener('mousemove', debouncedShowMenu);
return () => {
- document.removeEventListener('mousemove', setShowMenuTrue);
+ document.removeEventListener('mousemove', debouncedShowMenu);
if (fadeOut) {
clearTimeout(fadeOut);
}
};
}, []);
- const handleFullscreen = () => toggle();
- const handleMirror = () => toggleMirror();
-
- const showEditFormDrawer = () => {
- searchParams.set('edit', 'true');
- setSearchParams(searchParams);
- };
-
return createPortal(