DocSpace-buildtools/products/ASC.Files/Client/src/App.js
2020-12-08 12:23:36 +03:00

159 lines
4.1 KiB
JavaScript

import React, { Suspense } from "react";
import { connect } from "react-redux";
import { Router, Switch, Redirect, Route } from "react-router-dom";
import Home from "./components/pages/Home";
import DocEditor from "./components/pages/DocEditor";
import Settings from "./components/pages/Settings";
import VersionHistory from "./components/pages/VersionHistory";
import { fetchTreeFolders } from "./store/files/actions";
import config from "../package.json";
import {
store as commonStore,
history,
PrivateRoute,
PublicRoute,
Login,
Error404,
Error520,
Offline,
NavMenu,
Main,
utils,
toastr,
} from "asc-web-common";
const {
setIsLoaded,
getUser,
getPortalSettings,
getModules,
setCurrentProductId,
setCurrentProductHomePage,
getPortalCultures,
getIsAuthenticated,
} = commonStore.auth.actions;
class App extends React.Component {
constructor(props) {
super(props);
this.isEditor = window.location.pathname.indexOf("doceditor") !== -1;
}
componentDidMount() {
const {
setModuleInfo,
getUser,
getPortalSettings,
getModules,
getPortalCultures,
fetchTreeFolders,
setIsLoaded,
getIsAuthenticated,
} = this.props;
setModuleInfo();
getIsAuthenticated().then((isAuthenticated) => {
if (!isAuthenticated) {
utils.updateTempContent();
return setIsLoaded();
} else {
utils.updateTempContent(isAuthenticated);
}
const requests = this.isEditor
? [getUser()]
: [
getUser(),
getPortalSettings(),
getModules(),
getPortalCultures(),
fetchTreeFolders(),
];
Promise.all(requests)
.catch((e) => {
toastr.error(e);
})
.finally(() => {
utils.updateTempContent();
setIsLoaded();
});
});
}
render() {
const { homepage } = this.props;
return navigator.onLine ? (
<Router history={history}>
{!this.isEditor && <NavMenu />}
<Main>
<Suspense fallback={null}>
<Switch>
<Redirect exact from="/" to={`${homepage}`} />
<PrivateRoute
exact
path={`${homepage}/settings/:setting`}
component={Settings}
/>
<Route
exact
path={`${homepage}/doceditor`}
component={DocEditor}
/>
<PrivateRoute
exact
path={`${homepage}/:fileId/history`}
component={VersionHistory}
/>
<PrivateRoute exact path={homepage} component={Home} />
<PrivateRoute path={`${homepage}/filter`} component={Home} />
<PublicRoute
exact
path={[
"/login",
"/login/error=:error",
"/login/confirmed-email=:confirmedEmail",
]}
component={Login}
/>
<PrivateRoute exact path={`/error=:error`} component={Error520} />
<PrivateRoute component={Error404} />
</Switch>
</Suspense>
</Main>
</Router>
) : (
<Offline />
);
}
}
const mapStateToProps = (state) => {
const { settings } = state.auth;
const { homepage } = settings;
return {
homepage: homepage || config.homepage,
};
};
const mapDispatchToProps = (dispatch) => {
return {
getIsAuthenticated: () => getIsAuthenticated(dispatch),
setModuleInfo: () => {
dispatch(setCurrentProductHomePage(config.homepage));
dispatch(setCurrentProductId("e67be73d-f9ae-4ce1-8fec-1880cb518cb4"));
},
getUser: () => getUser(dispatch),
getPortalSettings: () => getPortalSettings(dispatch),
getModules: () => getModules(dispatch),
getPortalCultures: () => getPortalCultures(dispatch),
fetchTreeFolders: () => fetchTreeFolders(dispatch),
setIsLoaded: () => dispatch(setIsLoaded(true)),
};
};
export default connect(mapStateToProps, mapDispatchToProps)(App);