fix: lazy load plugin detail view

reduces main js size by 400kb
This commit is contained in:
Jannis Mattheis 2025-08-04 11:29:25 +02:00
parent 01c4566ee5
commit 6ad4477f4b
1 changed files with 19 additions and 2 deletions

View File

@ -11,7 +11,6 @@ import * as config from '../config';
import Applications from '../application/Applications'; import Applications from '../application/Applications';
import Clients from '../client/Clients'; import Clients from '../client/Clients';
import Plugins from '../plugin/Plugins'; import Plugins from '../plugin/Plugins';
import PluginDetailView from '../plugin/PluginDetailView';
import Login from '../user/Login'; import Login from '../user/Login';
import Messages from '../message/Messages'; import Messages from '../message/Messages';
import Users from '../user/Users'; import Users from '../user/Users';
@ -19,6 +18,7 @@ import {observer} from 'mobx-react';
import {ConnectionErrorBanner} from '../common/ConnectionErrorBanner'; import {ConnectionErrorBanner} from '../common/ConnectionErrorBanner';
import {useStores} from '../stores'; import {useStores} from '../stores';
import {SnackbarProvider} from 'notistack'; import {SnackbarProvider} from 'notistack';
import LoadingSpinner from '../common/LoadingSpinner';
const useStyles = makeStyles()((theme: Theme) => ({ const useStyles = makeStyles()((theme: Theme) => ({
content: { content: {
@ -128,7 +128,13 @@ const Layout = observer(() => {
<Route path="/plugins" element={authed(<Plugins />)} /> <Route path="/plugins" element={authed(<Plugins />)} />
<Route <Route
path="/plugins/:id" path="/plugins/:id"
element={authed(<PluginDetailView />)} element={authed(
<Lazy
component={() =>
import('../plugin/PluginDetailView')
}
/>
)}
/> />
</Routes> </Routes>
</main> </main>
@ -146,6 +152,17 @@ const Layout = observer(() => {
); );
}); });
// eslint-disable-next-line
const Lazy = ({component}: {component: () => Promise<{default: React.ComponentType<any>}>}) => {
const Component = React.lazy(component);
return (
<React.Suspense fallback={<LoadingSpinner />}>
<Component />
</React.Suspense>
);
};
const RequireAuth: React.FC<React.PropsWithChildren<{loggedIn: boolean}>> = ({ const RequireAuth: React.FC<React.PropsWithChildren<{loggedIn: boolean}>> = ({
children, children,
loggedIn, loggedIn,