diff --git a/inertia/mantine/components/dashboard/dashboard_navbar.tsx b/inertia/mantine/components/dashboard/dashboard_navbar.tsx index ec36077..04cb286 100644 --- a/inertia/mantine/components/dashboard/dashboard_navbar.tsx +++ b/inertia/mantine/components/dashboard/dashboard_navbar.tsx @@ -8,6 +8,7 @@ import { NavLink, ScrollArea, Skeleton, + Stack, Text, } from '@mantine/core'; import { useTranslation } from 'react-i18next'; @@ -29,12 +30,17 @@ export function DashboardNavbar({ isOpen, toggle }: DashboardNavbarProps) { variant: 'subtle', color: 'blue', active: true, + styles: { + label: { + fontSize: '16px', + }, + }, }; return ( - Menu + Navigation @@ -52,6 +58,7 @@ export function DashboardNavbar({ isOpen, toggle }: DashboardNavbarProps) { label={t('settings')} leftSection={} variant="subtle" + styles={common.styles} /> } /> - + {t('favorite')} • {0} - {Array(15) - .fill(0) - .map((_, index) => ( - - ))} + + {Array(15) + .fill(0) + .map((_, index) => ( + + ))} + ); diff --git a/inertia/mantine/layouts/_mantine_base_layout.tsx b/inertia/mantine/layouts/_mantine_base_layout.tsx index d84304f..6e28d1e 100644 --- a/inertia/mantine/layouts/_mantine_base_layout.tsx +++ b/inertia/mantine/layouts/_mantine_base_layout.tsx @@ -26,13 +26,24 @@ export default function BaseLayout({ children }: { children: ReactNode }) { } }; + const canTransition = (currentLocation: URL, newLocation: URL) => + currentLocation.pathname !== newLocation.pathname; + useEffect(() => { + const currentLocation = new URL(window.location.href); flipClass(TRANSITION_IN_CLASS, TRANSITION_OUT_CLASS); - router.on('start', () => - flipClass(TRANSITION_OUT_CLASS, TRANSITION_IN_CLASS) + + router.on( + 'start', + (event) => + canTransition(currentLocation, event.detail.visit.url) && + flipClass(TRANSITION_OUT_CLASS, TRANSITION_IN_CLASS) ); - router.on('finish', () => - flipClass(TRANSITION_IN_CLASS, TRANSITION_OUT_CLASS) + router.on( + 'finish', + (event) => + canTransition(currentLocation, event.detail.visit.url) && + flipClass(TRANSITION_IN_CLASS, TRANSITION_OUT_CLASS) ); }, []); diff --git a/inertia/pages/mantine_dashboard.tsx b/inertia/pages/mantine_dashboard.tsx index 70ec81e..36af817 100644 --- a/inertia/pages/mantine_dashboard.tsx +++ b/inertia/pages/mantine_dashboard.tsx @@ -7,13 +7,15 @@ import { Text, } from '@mantine/core'; import { useDisclosure } from '@mantine/hooks'; +import { useEffect } from 'react'; import DashboardProviders from '~/components/dashboard/dashboard_provider'; import LinkItem from '~/components/dashboard/link/link_item'; import { MantineFooter } from '~/components/footer/mantine_footer'; +import useShortcut from '~/hooks/use_shortcut'; +import { DashboardAside } from '~/mantine/components/dashboard/dashboard_aside'; import { DashboardNavbar } from '~/mantine/components/dashboard/dashboard_navbar'; import { MantineDashboardLayout } from '~/mantine/layouts/mantine_dashboard_layout'; import { CollectionWithLinks } from '~/types/app'; -import '../styles/body_overflow_hidden.css'; import classes from './dashboard.module.css'; interface DashboardPageProps { @@ -22,15 +24,29 @@ interface DashboardPageProps { } export default function MantineDashboard(props: Readonly) { - const [openedNavbar, { toggle: toggleNavbar }] = useDisclosure(); - const [openedAside, { toggle: toggleAside }] = useDisclosure(); + const [openedNavbar, { toggle: toggleNavbar, close: closeNavbar }] = + useDisclosure(); + const [openedAside, { toggle: toggleAside, close: closeAside }] = + useDisclosure(); + + useShortcut('ESCAPE_KEY', () => { + closeNavbar(); + closeAside(); + }); + + useEffect(() => { + document.body.style.overflow = 'hidden'; + return () => { + document.body.style.overflow = 'auto'; + }; + }, []); return ( ) { hiddenFrom="sm" size="sm" /> - {props.activeCollection.name} + {props.activeCollection.name} ) { - - - Aside - - - + diff --git a/inertia/styles/body_overflow_hidden.css b/inertia/styles/body_overflow_hidden.css deleted file mode 100644 index d1b79bf..0000000 --- a/inertia/styles/body_overflow_hidden.css +++ /dev/null @@ -1,3 +0,0 @@ -body { - overflow: hidden; -}