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 { useActions, useSelector } from './services/state/store'; import { Routes, Route, Navigate } from 'react-router-dom'; 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, Divider } from '@douyinfe/semi-ui'; import VersionBanner from './components/version/VersionBanner.jsx'; import Listings from './views/listings/Listings.jsx'; import Navigation from './components/navigation/Navigation.jsx'; import { Layout } from '@douyinfe/semi-ui'; import FredyFooter from './components/footer/FredyFooter.jsx'; import ProcessingTimes from './views/jobs/ProcessingTimes.jsx'; export default function FredyApp() { const actions = useActions(); const [loading, setLoading] = React.useState(true); const currentUser = useSelector((state) => state.user.currentUser); const versionUpdate = useSelector((state) => state.versionUpdate.versionUpdate); const settings = useSelector((state) => state.generalSettings.settings); const processingTimes = useSelector((state) => state.jobs.processingTimes); useEffect(() => { async function init() { await actions.user.getCurrentUser(); if (!needsLogin()) { await actions.provider.getProvider(); await actions.jobs.getJobs(); await actions.jobs.getProcessingTimes(); await actions.jobs.getSharableUserList(); await actions.notificationAdapter.getAdapter(); await actions.generalSettings.getGeneralSettings(); await actions.versionUpdate.getVersionUpdate(); } setLoading(false); } init(); }, [currentUser?.userId]); const needsLogin = () => { return currentUser == null || Object.keys(currentUser).length === 0; }; const isAdmin = () => currentUser != null && currentUser.isAdmin; const { Footer, Sider, Content } = Layout; return loading ? null : needsLogin() ? ( } /> } /> ) : ( {versionUpdate?.newVersion && } {settings.demoMode && ( <> > )} {settings.analyticsEnabled === null && !settings.demoMode && } {processingTimes != null && } } /> } /> } /> } /> } /> } /> {/* Permission-aware routes */} } /> } /> } /> } /> } /> ); } FredyApp.displayName = 'FredyApp';