2022-01-22 13:35:11 +00:00
|
|
|
import Socketio from "@modules/socketio";
|
|
|
|
import { useNotification } from "@redux/hooks";
|
|
|
|
import { useReduxStore } from "@redux/hooks/base";
|
|
|
|
import { LoadingIndicator, ModalProvider } from "components";
|
|
|
|
import Authentication from "pages/Authentication";
|
|
|
|
import LaunchError from "pages/LaunchError";
|
2021-08-31 16:08:47 +00:00
|
|
|
import React, { FunctionComponent, useEffect } from "react";
|
2021-04-23 16:18:09 +00:00
|
|
|
import { Row } from "react-bootstrap";
|
2021-08-14 12:59:08 +00:00
|
|
|
import { Route, Switch } from "react-router";
|
|
|
|
import { BrowserRouter, Redirect } from "react-router-dom";
|
|
|
|
import { useEffectOnceWhen } from "rooks";
|
2022-01-22 13:35:11 +00:00
|
|
|
import { Environment } from "utilities";
|
|
|
|
import ErrorBoundary from "../components/ErrorBoundary";
|
2021-08-31 16:08:47 +00:00
|
|
|
import Router from "../Router";
|
2021-03-25 14:22:43 +00:00
|
|
|
import Sidebar from "../Sidebar";
|
|
|
|
import Header from "./Header";
|
|
|
|
|
|
|
|
// Sidebar Toggle
|
|
|
|
|
|
|
|
interface Props {}
|
|
|
|
|
|
|
|
const App: FunctionComponent<Props> = () => {
|
2022-01-22 13:35:11 +00:00
|
|
|
const { status } = useReduxStore((s) => s);
|
2021-03-25 14:22:43 +00:00
|
|
|
|
2021-05-09 03:22:24 +00:00
|
|
|
const notify = useNotification("has-update", 10 * 1000);
|
2021-03-25 14:22:43 +00:00
|
|
|
|
|
|
|
// Has any update?
|
2021-08-14 12:59:08 +00:00
|
|
|
useEffectOnceWhen(() => {
|
2021-08-29 16:45:25 +00:00
|
|
|
if (Environment.hasUpdate) {
|
2021-08-14 12:59:08 +00:00
|
|
|
notify({
|
|
|
|
type: "info",
|
|
|
|
message: "A new version of Bazarr is ready, restart is required",
|
|
|
|
// TODO: Restart action
|
|
|
|
});
|
2021-03-25 14:22:43 +00:00
|
|
|
}
|
2022-01-22 13:35:11 +00:00
|
|
|
}, status === "initialized");
|
2021-03-25 14:22:43 +00:00
|
|
|
|
2022-01-22 13:35:11 +00:00
|
|
|
if (status === "unauthenticated") {
|
2021-03-25 14:22:43 +00:00
|
|
|
return <Redirect to="/login"></Redirect>;
|
2022-01-22 13:35:11 +00:00
|
|
|
} else if (status === "uninitialized") {
|
2021-03-25 14:22:43 +00:00
|
|
|
return (
|
|
|
|
<LoadingIndicator>
|
|
|
|
<span>Please wait</span>
|
|
|
|
</LoadingIndicator>
|
|
|
|
);
|
2022-01-22 13:35:11 +00:00
|
|
|
} else if (status === "error") {
|
|
|
|
return <LaunchError>Cannot Initialize Bazarr</LaunchError>;
|
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>
|
2021-08-31 16:08:47 +00:00
|
|
|
<Row noGutters className="header-container">
|
|
|
|
<Header></Header>
|
|
|
|
</Row>
|
|
|
|
<Row noGutters className="flex-nowrap">
|
|
|
|
<Sidebar></Sidebar>
|
|
|
|
<ModalProvider>
|
|
|
|
<Router></Router>
|
|
|
|
</ModalProvider>
|
|
|
|
</Row>
|
2021-08-16 16:46:10 +00:00
|
|
|
</ErrorBoundary>
|
|
|
|
);
|
2021-03-25 14:22:43 +00:00
|
|
|
};
|
|
|
|
|
2021-08-14 12:59:08 +00:00
|
|
|
const MainRouter: FunctionComponent = () => {
|
|
|
|
useEffect(() => {
|
|
|
|
Socketio.initialize();
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
return (
|
2021-08-29 16:45:25 +00:00
|
|
|
<BrowserRouter basename={Environment.baseUrl}>
|
2021-08-14 12:59:08 +00:00
|
|
|
<Switch>
|
|
|
|
<Route exact path="/login">
|
2022-01-22 13:35:11 +00:00
|
|
|
<Authentication></Authentication>
|
2021-08-14 12:59:08 +00:00
|
|
|
</Route>
|
|
|
|
<Route path="/">
|
|
|
|
<App></App>
|
|
|
|
</Route>
|
|
|
|
</Switch>
|
|
|
|
</BrowserRouter>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
2022-01-22 13:35:11 +00:00
|
|
|
export default MainRouter;
|