import * as React from 'react'; import { Spinner } from './Common/Spinner'; import useMessages from '../hooks/useMessages'; import useDarkMode from '../../hooks/useDarkMode'; import { WelcomeScreen } from './WelcomeView/WelcomeScreen'; import { useRecoilValue } from 'recoil'; import { DashboardViewSelector, ModeAtom } from '../state'; import { Contents } from './Contents/Contents'; import { Media } from './Media/Media'; import { DataView } from './DataView'; import { Snippets } from './SnippetsView/Snippets'; import { FEATURE_FLAG } from '../../constants'; import { Messenger } from '@estruyf/vscode/dist/client'; import { TaxonomyView } from './TaxonomyView'; import { Route, Routes, useNavigate } from 'react-router-dom'; import { routePaths } from '..'; import { useEffect, useMemo, useState } from 'react'; import { UnknownView } from './UnknownView'; import { ErrorBoundary } from '@sentry/react'; import { ErrorView } from './ErrorView'; import { DashboardMessage } from '../DashboardMessage'; export interface IAppProps { showWelcome: boolean; } export const App: React.FunctionComponent = ({ showWelcome }: React.PropsWithChildren) => { const { loading, pages, settings } = useMessages(); const view = useRecoilValue(DashboardViewSelector); const mode = useRecoilValue(ModeAtom); const [isDevMode, setIsDevMode] = useState(false); const navigate = useNavigate(); useDarkMode(); const viewState: any = Messenger.getState() || {}; const isAllowed = (features: string[], flag: string) => { if (!features || (features.length > 0 && !features.includes(flag))) { return false; } return true; }; const allowDataView = useMemo(() => { return isAllowed(mode?.features || [], FEATURE_FLAG.dashboard.data.view); }, [mode?.features]); const allowTaxonomyView = useMemo(() => { return isAllowed(mode?.features || [], FEATURE_FLAG.dashboard.taxonomy.view); }, [mode?.features]); useEffect(() => { if (view && routePaths[view]) { navigate(routePaths[view]); return; } navigate(routePaths[view]); }, [view]); useEffect(() => { if (window.fmExternal && window.fmExternal.isDevelopment) { setIsDevMode(true); } }, []); if (!settings) { return ; } if (showWelcome || viewState.isWelcomeConfiguring) { return ; } if (!settings.initialized || settings.contentFolders?.length === 0) { return ; } return ( } onError={(error: Error, componentStack: string, eventId: string) => { Messenger.send( DashboardMessage.logError, `Event ID: ${eventId} Message: ${error.message} Stack: ${componentStack}` ); }} >
{ isDevMode && (
Development mode Reload DevTools
) } } /> } /> } /> } /> {allowDataView && } />} {allowTaxonomyView && ( } /> )} } />
); };