2022-05-31 15:49:04 +00:00
|
|
|
import AppNavbar from "@/App/Navbar";
|
2022-03-16 06:26:15 +00:00
|
|
|
import ErrorBoundary from "@/components/ErrorBoundary";
|
2022-05-31 15:49:04 +00:00
|
|
|
import { Layout } from "@/constants";
|
|
|
|
import NavbarProvider from "@/contexts/Navbar";
|
|
|
|
import OnlineProvider from "@/contexts/Online";
|
|
|
|
import { notification } from "@/modules/task";
|
2023-02-10 17:21:09 +00:00
|
|
|
import CriticalError from "@/pages/errors/CriticalError";
|
2022-09-20 20:50:18 +00:00
|
|
|
import { RouterNames } from "@/Router/RouterNames";
|
2022-03-16 06:26:15 +00:00
|
|
|
import { Environment } from "@/utilities";
|
2022-05-31 15:49:04 +00:00
|
|
|
import { AppShell } from "@mantine/core";
|
|
|
|
import { useWindowEvent } from "@mantine/hooks";
|
|
|
|
import { showNotification } from "@mantine/notifications";
|
|
|
|
import { FunctionComponent, useEffect, useState } from "react";
|
|
|
|
import { Outlet, useNavigate } from "react-router-dom";
|
|
|
|
import AppHeader from "./Header";
|
2021-03-25 14:22:43 +00:00
|
|
|
|
2022-03-16 06:26:15 +00:00
|
|
|
const App: FunctionComponent = () => {
|
2022-05-31 15:49:04 +00:00
|
|
|
const navigate = useNavigate();
|
2021-03-25 14:22:43 +00:00
|
|
|
|
2022-05-31 15:49:04 +00:00
|
|
|
const [criticalError, setCriticalError] = useState<string | null>(null);
|
|
|
|
const [navbar, setNavbar] = useState(false);
|
|
|
|
const [online, setOnline] = useState(true);
|
|
|
|
|
|
|
|
useWindowEvent("app-critical-error", ({ detail }) => {
|
|
|
|
setCriticalError(detail.message);
|
|
|
|
});
|
|
|
|
|
2022-08-23 15:13:46 +00:00
|
|
|
useWindowEvent("app-auth-changed", (ev) => {
|
|
|
|
if (!ev.detail.authenticated) {
|
2022-09-20 20:50:18 +00:00
|
|
|
navigate(RouterNames.Auth);
|
2022-08-23 15:13:46 +00:00
|
|
|
}
|
2022-05-31 15:49:04 +00:00
|
|
|
});
|
2021-03-25 14:22:43 +00:00
|
|
|
|
2022-05-31 15:49:04 +00:00
|
|
|
useWindowEvent("app-online-status", ({ detail }) => {
|
|
|
|
setOnline(detail.online);
|
|
|
|
});
|
2021-03-25 14:22:43 +00:00
|
|
|
|
2022-05-31 15:49:04 +00:00
|
|
|
useEffect(() => {
|
2021-08-29 16:45:25 +00:00
|
|
|
if (Environment.hasUpdate) {
|
2022-05-31 15:49:04 +00:00
|
|
|
showNotification(
|
|
|
|
notification.info(
|
|
|
|
"Update available",
|
|
|
|
"A new version of Bazarr is ready, restart is required"
|
|
|
|
)
|
|
|
|
);
|
2021-03-25 14:22:43 +00:00
|
|
|
}
|
2022-05-31 15:49:04 +00:00
|
|
|
}, []);
|
|
|
|
|
|
|
|
if (criticalError !== null) {
|
|
|
|
return <CriticalError message={criticalError}></CriticalError>;
|
2021-03-25 14:22:43 +00:00
|
|
|
}
|
2022-01-22 13:35:11 +00:00
|
|
|
|
2021-08-16 16:46:10 +00:00
|
|
|
return (
|
|
|
|
<ErrorBoundary>
|
2022-05-31 15:49:04 +00:00
|
|
|
<NavbarProvider value={{ showed: navbar, show: setNavbar }}>
|
|
|
|
<OnlineProvider value={{ online, setOnline }}>
|
|
|
|
<AppShell
|
|
|
|
navbarOffsetBreakpoint={Layout.MOBILE_BREAKPOINT}
|
|
|
|
header={<AppHeader></AppHeader>}
|
|
|
|
navbar={<AppNavbar></AppNavbar>}
|
|
|
|
padding={0}
|
|
|
|
fixed
|
|
|
|
>
|
|
|
|
<Outlet></Outlet>
|
|
|
|
</AppShell>
|
|
|
|
</OnlineProvider>
|
|
|
|
</NavbarProvider>
|
2021-08-16 16:46:10 +00:00
|
|
|
</ErrorBoundary>
|
|
|
|
);
|
2021-03-25 14:22:43 +00:00
|
|
|
};
|
|
|
|
|
2022-03-16 06:26:15 +00:00
|
|
|
export default App;
|