You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.4 KiB
TypeScript
128 lines
3.4 KiB
TypeScript
// SPDX-FileCopyrightText: © 2017 EteSync Authors
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import * as React from "react";
|
|
import { useSelector, useDispatch } from "react-redux";
|
|
import { Route, Switch, Redirect, useHistory } from "react-router";
|
|
|
|
import moment from "moment";
|
|
import "moment/locale/en-gb";
|
|
|
|
import { routeResolver } from "./App";
|
|
|
|
import AppBarOverride from "./widgets/AppBarOverride";
|
|
import LoadingIndicator from "./widgets/LoadingIndicator";
|
|
import Container from "./widgets/Container";
|
|
import ContactsMain from "./Contacts/Main";
|
|
import CalendarsMain from "./Calendars/Main";
|
|
import TasksMain from "./Tasks/Main";
|
|
import CollectionsMain from "./Collections/Main";
|
|
|
|
import Settings from "./Settings";
|
|
import Debug from "./Debug";
|
|
|
|
import { SyncManager } from "./sync/SyncManager";
|
|
|
|
import { StoreState } from "./store";
|
|
import { performSync } from "./store/actions";
|
|
import { useCredentials } from "./credentials";
|
|
import PimNavigationTabs from "./Pim/NavigationTabs";
|
|
import { PageNotFoundRoute } from "./PageNotFound";
|
|
|
|
export default function SyncGate() {
|
|
const etebase = useCredentials();
|
|
const settings = useSelector((state: StoreState) => state.settings);
|
|
const dispatch = useDispatch();
|
|
const [loading, setLoading] = React.useState(true);
|
|
|
|
// Doing this so we refresh on route changes
|
|
useHistory();
|
|
|
|
React.useEffect(() => {
|
|
(async () => {
|
|
const syncManager = SyncManager.getManager(etebase!);
|
|
const sync = syncManager.sync();
|
|
dispatch(performSync(sync));
|
|
await sync;
|
|
setLoading(false);
|
|
})();
|
|
}, []);
|
|
|
|
if (loading) {
|
|
return (<LoadingIndicator style={{ display: "block", margin: "40px auto" }} />);
|
|
}
|
|
|
|
// FIXME: Shouldn't be here
|
|
moment.locale(settings.locale);
|
|
|
|
return (
|
|
<Switch>
|
|
<Route
|
|
path={routeResolver.getRoute("home")}
|
|
exact
|
|
render={() => (
|
|
<Redirect to={routeResolver.getRoute("pim")} />
|
|
)}
|
|
/>
|
|
<Route
|
|
path={routeResolver.getRoute("pim")}
|
|
>
|
|
<AppBarOverride title="EteSync" />
|
|
<Switch>
|
|
<Route
|
|
path={routeResolver.getRoute("pim")}
|
|
exact
|
|
>
|
|
<Redirect to={routeResolver.getRoute("pim.events")} />
|
|
</Route>
|
|
<Route
|
|
path={routeResolver.getRoute("pim.contacts")}
|
|
>
|
|
<PimNavigationTabs value="contacts" />
|
|
<Container>
|
|
<ContactsMain />
|
|
</Container>
|
|
</Route>
|
|
<Route
|
|
path={routeResolver.getRoute("pim.events")}
|
|
>
|
|
<PimNavigationTabs value="events" />
|
|
<Container>
|
|
<CalendarsMain />
|
|
</Container>
|
|
</Route>
|
|
<Route
|
|
path={routeResolver.getRoute("pim.tasks")}
|
|
>
|
|
<PimNavigationTabs value="tasks" />
|
|
<Container>
|
|
<TasksMain />
|
|
</Container>
|
|
</Route>
|
|
<PageNotFoundRoute container />
|
|
</Switch>
|
|
</Route>
|
|
<Route
|
|
path={routeResolver.getRoute("collections")}
|
|
>
|
|
<CollectionsMain />
|
|
</Route>
|
|
<Route
|
|
path={routeResolver.getRoute("settings")}
|
|
exact
|
|
render={() => (
|
|
<Settings />
|
|
)}
|
|
/>
|
|
<Route
|
|
path={routeResolver.getRoute("debug")}
|
|
exact
|
|
render={() => (
|
|
<Debug />
|
|
)}
|
|
/>
|
|
<PageNotFoundRoute container />
|
|
</Switch>
|
|
);
|
|
}
|