101 lines
2.7 KiB
JavaScript
Raw Normal View History

2016-08-18 11:41:13 +02:00
/**
*
2017-08-21 15:12:53 +02:00
* App.js
2016-08-18 11:41:13 +02:00
*
* This component is the skeleton around the actual pages, and should only
* contain code that should be seen on all pages. (e.g. navigation bar)
2016-08-18 11:47:26 +02:00
*
* NOTE: while this component should technically be a stateless functional
* component (SFC), hot reloading does not currently support SFCs. If hot
* reloading is not a neccessity for you then you can refactor it and remove
* the linting exception.
2016-08-18 11:41:13 +02:00
*/
2019-09-09 13:58:07 +02:00
import React, { useEffect, useRef } from 'react';
import PropTypes from 'prop-types';
2017-08-21 15:12:53 +02:00
import { Switch, Route } from 'react-router-dom';
2019-09-09 13:58:07 +02:00
import { connect } from 'react-redux';
import { bindActionCreators, compose } from 'redux';
import { LoadingIndicatorPage, request } from 'strapi-helper-plugin';
2019-04-03 13:05:18 +02:00
import Admin from '../Admin';
import NotFoundPage from '../NotFoundPage';
import NotificationProvider from '../NotificationProvider';
import AppLoader from '../AppLoader';
2016-08-24 15:09:42 +02:00
import styles from './styles.scss';
2019-09-05 16:27:30 +02:00
import AuthPage from '../AuthPage';
2016-08-18 11:41:13 +02:00
2019-09-09 13:58:07 +02:00
import { getDataSucceeded } from './actions';
2019-04-03 13:05:18 +02:00
function App(props) {
2019-09-09 13:58:07 +02:00
const getDataRef = useRef();
getDataRef.current = props.getDataSucceeded;
useEffect(() => {
const getData = async () => {
try {
const requestURL = '/users-permissions/init';
const { hasAdmin } = await request(requestURL, { method: 'GET' });
getDataRef.current(hasAdmin);
} catch (err) {
strapi.notification.error('app.containers.App.notification.error.init');
}
};
getData();
}, [getDataRef]);
return (
<div>
<NotificationProvider />
<AppLoader>
2019-09-09 13:58:07 +02:00
{({ hasAdminUser, shouldLoad }) => {
if (shouldLoad) {
return <LoadingIndicatorPage />;
}
return (
<div className={styles.container}>
<Switch>
2019-09-05 16:27:30 +02:00
<Route
path="/auth/:authType"
render={routerProps => (
2019-09-09 13:58:07 +02:00
<AuthPage
{...props}
{...routerProps}
hasAdminUser={hasAdminUser}
/>
2019-09-05 16:27:30 +02:00
)}
exact
/>
2019-04-03 13:05:18 +02:00
<Route
2019-04-08 19:54:30 +02:00
path="/"
2019-04-03 13:05:18 +02:00
render={router => <Admin {...props} {...router} />}
/>
2019-04-08 19:54:30 +02:00
<Route path="" component={NotFoundPage} />
</Switch>
</div>
);
}}
</AppLoader>
</div>
);
2016-08-18 11:47:26 +02:00
}
2019-09-09 13:58:07 +02:00
App.propTypes = {
getDataSucceeded: PropTypes.func.isRequired,
};
export function mapDispatchToProps(dispatch) {
return bindActionCreators({ getDataSucceeded }, dispatch);
}
const withConnect = connect(
null,
mapDispatchToProps
);
2019-09-09 13:58:07 +02:00
export default compose(withConnect)(App);
2019-09-09 15:27:54 +02:00
export { App };