import React, { useEffect } from 'react'; import InsufficientPermission from './components/permission/InsufficientPermission'; import PermissionAwareRoute from './components/permission/PermissionAwareRoute'; import GeneralSettings from './views/generalSettings/GeneralSettings'; import JobMutation from './views/jobs/mutation/JobMutation'; import UserMutator from './views/user/mutation/UserMutator'; import JobInsight from './views/jobs/insights/JobInsight.jsx'; import { useDispatch, useSelector } from 'react-redux'; import { Routes, Route, Navigate } from 'react-router-dom'; import Logout from './components/logout/Logout'; import Logo from './components/logo/Logo'; import Menu from './components/menu/Menu'; import Login from './views/login/Login'; import Users from './views/user/Users'; import Jobs from './views/jobs/Jobs'; import './App.less'; import TrackingModal from './components/tracking/TrackingModal.jsx'; import { Banner } from '@douyinfe/semi-ui'; export default function FredyApp() { const dispatch = useDispatch(); const [loading, setLoading] = React.useState(true); const currentUser = useSelector((state) => state.user.currentUser); const settings = useSelector((state) => state.generalSettings.settings); useEffect(() => { async function init() { await dispatch.user.getCurrentUser(); if (!needsLogin()) { await dispatch.provider.getProvider(); await dispatch.jobs.getJobs(); await dispatch.jobs.getProcessingTimes(); await dispatch.notificationAdapter.getAdapter(); await dispatch.generalSettings.getGeneralSettings(); } setLoading(false); } init(); }, [currentUser?.userId]); const needsLogin = () => { return currentUser == null || Object.keys(currentUser).length === 0; }; const isAdmin = () => currentUser != null && currentUser.isAdmin; const login = () => ( } /> } /> ); return loading ? null : needsLogin() ? ( login() ) : (
{settings.demoMode && ( <>
)} {settings.analyticsEnabled === null && !settings.demoMode && } } /> } /> } /> } /> } /> {/* Permission-aware routes */} } /> } /> } /> } /> } />
); } FredyApp.displayName = 'FredyApp';