1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
import AppNavbar from "@/App/Navbar";
import ErrorBoundary from "@/components/ErrorBoundary";
import { Layout } from "@/constants";
import NavbarProvider from "@/contexts/Navbar";
import OnlineProvider from "@/contexts/Online";
import { notification } from "@/modules/task";
import CriticalError from "@/pages/CriticalError";
import { RouterNames } from "@/Router/RouterNames";
import { Environment } from "@/utilities";
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";
const App: FunctionComponent = () => {
const navigate = useNavigate();
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);
});
useWindowEvent("app-auth-changed", (ev) => {
if (!ev.detail.authenticated) {
navigate(RouterNames.Auth);
}
});
useWindowEvent("app-online-status", ({ detail }) => {
setOnline(detail.online);
});
useEffect(() => {
if (Environment.hasUpdate) {
showNotification(
notification.info(
"Update available",
"A new version of Bazarr is ready, restart is required"
)
);
}
}, []);
if (criticalError !== null) {
return <CriticalError message={criticalError}></CriticalError>;
}
return (
<ErrorBoundary>
<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>
</ErrorBoundary>
);
};
export default App;
|