Files
2022-12-09 08:36:26 -06:00

95 lines
2.6 KiB
JavaScript

import React, { Fragment, useEffect } from 'react';
import PropTypes from 'prop-types';
import { get } from 'lodash';
import reduxConnect from '../redux/utils/connect';
import { Route, Redirect, Switch } from 'react-router-dom';
import App from '../components/App/App';
import SearchTab from '../components/App/TabsContent/SearchTab/SearchTab';
import ShareTab from '../components/App/TabsContent/ShareTab/ShareTab';
import AnalyzeTab from '../components/App/TabsContent/AnalyzeNewTab/AnalyzeTab';
import UserPlans from '../components/App/Account/Plans/UserPlans';
import UpgradePlanModal from '../components/App/Account/Plans/UpgradePlanModal';
function AuthenticatedRoute(props) {
const {
common: { base, auth },
match,
history,
actions
} = props;
const { isAuthPending, token: isLoggedIn, user } = auth;
const isMaster = user && user.role === 'ROLE_MASTER_USER';
const activeTab = match.params && match.params.activeTab;
const allowAnalytics = get(user, [
'restrictions',
'permissions',
'analytics'
]);
useEffect(() => {
if (!isAuthPending && !isLoggedIn) {
history.push('/auth/login');
return;
}
}, [isAuthPending, isLoggedIn]);
const activeTabDetails = base.tabs[activeTab];
let subTabs = activeTabDetails && activeTabDetails.items;
if (subTabs) {
subTabs = subTabs.filter((tab) => {
return !tab.masterOnly || auth.user.role === 'ROLE_MASTER_USER';
});
}
if (!isAuthPending && !isLoggedIn) {
return null;
}
return (
<App>
<Fragment>
<Switch>
<Route path="/app/search">
<SearchTab activeTabName={activeTab} subTabs={subTabs} />
</Route>
<Route path="/app/analyze">
<AnalyzeTab
activeTabName={activeTab}
subTabs={subTabs}
allowAnalytics={allowAnalytics}
/>
</Route>
<Route path="/app/share">
<ShareTab
activeTabName={activeTab}
subTabs={subTabs}
isMaster={isMaster}
/>
</Route>
<Route path="/app/plans">
<UserPlans />
</Route>
<Redirect to="/app/search/search" />
</Switch>
<UpgradePlanModal
isModalOpen={base.isUpgradeVisible}
toggle={actions.toggleUpgradeModal}
/>
</Fragment>
</App>
);
}
AuthenticatedRoute.propTypes = {
actions: PropTypes.object.isRequired,
common: PropTypes.object.isRequired,
match: PropTypes.object.isRequired,
history: PropTypes.object.isRequired
};
export default reduxConnect('common', ['common'])(AuthenticatedRoute);