mirror of
https://github.com/Sonny93/my-links.git
synced 2025-12-08 22:53:25 +00:00
59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import { router } from '@inertiajs/react';
|
|
import { ColorSchemeScript, MantineProvider } from '@mantine/core';
|
|
import '@mantine/core/styles.css';
|
|
import '@mantine/spotlight/styles.css';
|
|
import dayjs from 'dayjs';
|
|
import { ReactNode, useEffect } from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import '../styles/index.css';
|
|
|
|
const TRANSITION_IN_CLASS = '__transition_fadeIn';
|
|
const TRANSITION_OUT_CLASS = '__transition_fadeOut';
|
|
|
|
export default function BaseLayout({ children }: { children: ReactNode }) {
|
|
const { i18n } = useTranslation();
|
|
dayjs.locale(i18n.language);
|
|
|
|
const findAppElement = () => document.getElementById('app');
|
|
|
|
const flipClass = (addClass: string, removeClass: string) => {
|
|
const appElement = findAppElement();
|
|
if (appElement) {
|
|
appElement.classList.add(addClass);
|
|
appElement.classList.remove(removeClass);
|
|
}
|
|
};
|
|
|
|
const canTransition = (currentLocation: URL, newLocation: URL) =>
|
|
currentLocation.pathname !== newLocation.pathname;
|
|
|
|
useEffect(() => {
|
|
const currentLocation = new URL(window.location.href);
|
|
|
|
const removeStartEventListener = router.on(
|
|
'start',
|
|
(event) =>
|
|
canTransition(currentLocation, event.detail.visit.url) &&
|
|
flipClass(TRANSITION_OUT_CLASS, TRANSITION_IN_CLASS)
|
|
);
|
|
const removefinishEventListener = router.on(
|
|
'finish',
|
|
(event) =>
|
|
canTransition(currentLocation, event.detail.visit.url) &&
|
|
flipClass(TRANSITION_IN_CLASS, TRANSITION_OUT_CLASS)
|
|
);
|
|
|
|
return () => {
|
|
removeStartEventListener();
|
|
removefinishEventListener();
|
|
};
|
|
}, []);
|
|
|
|
return (
|
|
<>
|
|
<ColorSchemeScript />
|
|
<MantineProvider>{children}</MantineProvider>
|
|
</>
|
|
);
|
|
}
|