Add app routes and upgrade react-router (#5304)

* upgrade to react-router 16.4

* inline loading indicator svg to avoid foc

* move app and wrappers to routes folder
This commit is contained in:
James Gatz
2022-10-21 11:19:37 +02:00
committed by GitHub
parent 24fe4ce24a
commit adbea24657
10 changed files with 228 additions and 199 deletions

View File

@@ -137,7 +137,7 @@
"react-dom": "^18.2.0",
"react-hook-form": "^7.12.1",
"react-redux": "^7.2.6",
"react-router-dom": "^6.3.0",
"react-router-dom": "^6.4.2",
"react-stately": "^3.17.0",
"react-tabs": "^3.2.3",
"react-use": "^17.2.4",
@@ -4810,6 +4810,15 @@
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@remix-run/router": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.2.tgz",
"integrity": "sha512-GRSOFhJzjGN+d4sKHTMSvNeUPoZiDHWmRnXfzaxrqe7dE/Nzlc8BiMSJdLDESZlndM7jIUrZ/F4yWqVYlI0rwQ==",
"dev": true,
"engines": {
"node": ">=14"
}
},
"node_modules/@repeaterjs/repeater": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz",
@@ -12689,15 +12698,6 @@
"node": ">=12.0.0"
}
},
"node_modules/history": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz",
"integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.7.6"
}
},
"node_modules/hkdf": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/hkdf/-/hkdf-0.0.2.tgz",
@@ -19094,25 +19094,31 @@
}
},
"node_modules/react-router": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz",
"integrity": "sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==",
"version": "6.4.2",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.2.tgz",
"integrity": "sha512-Rb0BAX9KHhVzT1OKhMvCDMw776aTYM0DtkxqUBP8dNBom3mPXlfNs76JNGK8wKJ1IZEY1+WGj+cvZxHVk/GiKw==",
"dev": true,
"dependencies": {
"history": "^5.2.0"
"@remix-run/router": "1.0.2"
},
"engines": {
"node": ">=14"
},
"peerDependencies": {
"react": ">=16.8"
}
},
"node_modules/react-router-dom": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz",
"integrity": "sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==",
"version": "6.4.2",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.2.tgz",
"integrity": "sha512-yM1kjoTkpfjgczPrcyWrp+OuQMyB1WleICiiGfstnQYo/S8hPEEnVjr/RdmlH6yKK4Tnj1UGXFSa7uwAtmDoLQ==",
"dev": true,
"dependencies": {
"history": "^5.2.0",
"react-router": "6.3.0"
"@remix-run/router": "1.0.2",
"react-router": "6.4.2"
},
"engines": {
"node": ">=14"
},
"peerDependencies": {
"react": ">=16.8",
@@ -26028,6 +26034,12 @@
"@react-types/shared": "^3.14.1"
}
},
"@remix-run/router": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.2.tgz",
"integrity": "sha512-GRSOFhJzjGN+d4sKHTMSvNeUPoZiDHWmRnXfzaxrqe7dE/Nzlc8BiMSJdLDESZlndM7jIUrZ/F4yWqVYlI0rwQ==",
"dev": true
},
"@repeaterjs/repeater": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz",
@@ -32251,15 +32263,6 @@
"integrity": "sha512-LKzHqnxr4CrD2YsNoIf/o5nJ09j4yi/GcH5BnYz9UnVpZdS4ucMgvP61TDty5xJcFGRjnH4DpujkS9bHT3hq0Q==",
"dev": true
},
"history": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz",
"integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==",
"dev": true,
"requires": {
"@babel/runtime": "^7.7.6"
}
},
"hkdf": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/hkdf/-/hkdf-0.0.2.tgz",
@@ -37195,22 +37198,22 @@
"dev": true
},
"react-router": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz",
"integrity": "sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==",
"version": "6.4.2",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.2.tgz",
"integrity": "sha512-Rb0BAX9KHhVzT1OKhMvCDMw776aTYM0DtkxqUBP8dNBom3mPXlfNs76JNGK8wKJ1IZEY1+WGj+cvZxHVk/GiKw==",
"dev": true,
"requires": {
"history": "^5.2.0"
"@remix-run/router": "1.0.2"
}
},
"react-router-dom": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz",
"integrity": "sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==",
"version": "6.4.2",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.2.tgz",
"integrity": "sha512-yM1kjoTkpfjgczPrcyWrp+OuQMyB1WleICiiGfstnQYo/S8hPEEnVjr/RdmlH6yKK4Tnj1UGXFSa7uwAtmDoLQ==",
"dev": true,
"requires": {
"history": "^5.2.0",
"react-router": "6.3.0"
"@remix-run/router": "1.0.2",
"react-router": "6.4.2"
}
},
"react-stately": {

View File

@@ -193,7 +193,7 @@
"react-dom": "^18.2.0",
"react-hook-form": "^7.12.1",
"react-redux": "^7.2.6",
"react-router-dom": "^6.3.0",
"react-router-dom": "^6.4.2",
"react-stately": "^3.17.0",
"react-tabs": "^3.2.3",
"react-use": "^17.2.4",

View File

@@ -22,7 +22,17 @@
width: 100%;
"
>
<img src="./ui/images/insomnia-logo.svg" alt="Insomnia">
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<path d="M16 31.1864C24.3873 31.1864 31.1865 24.3872 31.1865 16C31.1865 7.61276 24.3873 0.813559 16 0.813559C7.6128 0.813559 0.813599 7.61276 0.813599 16C0.813599 24.3872 7.6128 31.1864 16 31.1864Z" fill="white"/>
<path d="M16 0C7.16344 0 0 7.16344 0 16C0 24.8366 7.16344 32 16 32C24.8366 32 32 24.8366 32 16C32 7.16344 24.8366 0 16 0ZM16 1.62712C23.9379 1.62712 30.3729 8.06208 30.3729 16C30.3729 23.9379 23.9379 30.3729 16 30.3729C8.06208 30.3729 1.62712 23.9379 1.62712 16C1.62712 8.06208 8.06208 1.62712 16 1.62712Z" fill="#4000BF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.1807 4.61017C22.4712 4.61017 27.5706 9.70957 27.5706 16C27.5706 22.2904 22.4712 27.3898 16.1807 27.3898C9.89029 27.3898 4.79089 22.2904 4.79089 16C4.79089 14.4627 5.09547 12.9965 5.64758 11.6584C6.45373 12.7562 7.75377 13.4689 9.22027 13.4689C11.6666 13.4689 13.6496 11.4858 13.6496 9.03955C13.6496 7.57305 12.937 6.27301 11.8391 5.46687C13.1772 4.91475 14.6434 4.61017 16.1807 4.61017Z" fill="url(#paint0_linear)"/>
<defs>
<linearGradient id="paint0_linear" x1="16.1807" y1="27.3898" x2="16.1807" y2="4.61017" gradientUnits="userSpaceOnUse">
<stop stop-color="#7400E1"/>
<stop offset="1" stop-color="#4000BF"/>
</linearGradient>
</defs>
</svg>
</div>
</div>
<div id="dropdowns-container" style="

View File

@@ -0,0 +1,53 @@
import React from 'react';
export const AppLoadingIndicator = () => (
<div
id="app-loading-indicator"
style={{
position: 'fixed',
top: '0',
left: '0',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
height: '100%',
width: '100%',
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
width={32}
height={32}
viewBox="0 0 32 32"
fill="none"
>
<path
d="M16 31.186c8.387 0 15.186-6.799 15.186-15.186S24.387.814 16 .814.814 7.613.814 16 7.613 31.186 16 31.186z"
fill="#fff"
/>
<path
d="M16 0C7.163 0 0 7.163 0 16s7.163 16 16 16 16-7.163 16-16S24.837 0 16 0zm0 1.627c7.938 0 14.373 6.435 14.373 14.373S23.938 30.373 16 30.373 1.627 23.938 1.627 16 8.062 1.627 16 1.627z"
fill="#4000BF"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M16.18 4.61c6.291 0 11.39 5.1 11.39 11.39 0 6.29-5.099 11.39-11.39 11.39-6.29 0-11.39-5.1-11.39-11.39 0-1.537.305-3.004.858-4.342a4.43 4.43 0 106.192-6.192 11.357 11.357 0 014.34-.856z"
fill="url(#paint0_linear)"
/>
<defs>
<linearGradient
id="paint0_linear"
x1={16.1807}
y1={27.3898}
x2={16.1807}
y2={4.61017}
gradientUnits="userSpaceOnUse"
>
<stop stopColor="#7400E1" />
<stop offset={1} stopColor="#4000BF" />
</linearGradient>
</defs>
</svg>
</div>
);

View File

@@ -1,21 +1,26 @@
// eslint-disable-next-line simple-import-sort/imports
import React from 'react';
import React, { lazy, Suspense } from 'react';
import ReactDOM from 'react-dom/client';
import { Provider } from 'react-redux';
import './rendererListeners';
import { getProductName, isDevelopment } from '../common/constants';
import { ACTIVITY_DEBUG, ACTIVITY_HOME, ACTIVITY_SPEC, ACTIVITY_UNIT_TEST, getProductName, isDevelopment } from '../common/constants';
import { database } from '../common/database';
import { initializeLogging } from '../common/log';
import * as models from '../models';
import { initNewOAuthSession } from '../network/o-auth-2/misc';
import { init as initPlugins } from '../plugins';
import { applyColorScheme } from '../plugins/misc';
import App from './containers/app';
import { init as initStore } from './redux/modules';
import { initializeSentry } from './sentry';
import { MemoryRouter as Router } from 'react-router-dom';
import { createMemoryRouter, RouterProvider } from 'react-router-dom';
import './css/index.less'; // this import must come after `App`. the reason is not yet known.
import Root from './routes/root';
import './css/index.less'; // this import must come after `Root`.
import { AppLoadingIndicator } from './components/app-loading-indicator';
const Project = lazy(() => import('./routes/project'));
const UnitTest = lazy(() => import('./routes/unit-test'));
const Debug = lazy(() => import('./routes/debug'));
const Design = lazy(() => import('./routes/design'));
initializeSentry();
initializeLogging();
@@ -23,6 +28,51 @@ initializeLogging();
document.body.setAttribute('data-platform', process.platform);
document.title = getProductName();
const router = createMemoryRouter(
// @TODO - Investigate file based routing to generate these routes:
[
{
path: '/',
element: <Root />,
errorElement: <div>Error</div>,
children: [
{
path: ACTIVITY_HOME,
element: (
<Suspense fallback={<AppLoadingIndicator />}>
<Project />
</Suspense>
),
},
{
path: ACTIVITY_DEBUG,
element: (
<Suspense fallback={<AppLoadingIndicator />}>
<Debug />
</Suspense>
),
},
{
path: ACTIVITY_SPEC,
element: (
<Suspense fallback={<AppLoadingIndicator />}>
<Design />
</Suspense>
),
},
{
path: ACTIVITY_UNIT_TEST,
element: (
<Suspense fallback={<AppLoadingIndicator />}>
<UnitTest />
</Suspense>
),
},
],
},
]
);
async function renderApp() {
await database.initClient();
@@ -47,10 +97,8 @@ async function renderApp() {
ReactDOM.createRoot(root).render(
<Provider store={store}>
<Router>
<App />
</Router>
</Provider>,
<RouterProvider router={router} />
</Provider>
);
}

View File

@@ -8,6 +8,28 @@ import { getByParentId as getGrpcRequestMetaByParentId } from '../../models/grpc
import * as requestOperations from '../../models/helpers/request-operations';
import { getByParentId as getRequestMetaByParentId } from '../../models/request-meta';
import { isWebSocketRequest } from '../../models/websocket-request';
import { EnvironmentsDropdown } from '../components/dropdowns/environments-dropdown';
import { ErrorBoundary } from '../components/error-boundary';
import { useDocBodyKeyboardShortcuts } from '../components/keydown-binder';
import { showModal } from '../components/modals';
import { AskModal } from '../components/modals/ask-modal';
import { CookiesModal, showCookiesModal } from '../components/modals/cookies-modal';
import { GenerateCodeModal } from '../components/modals/generate-code-modal';
import { PromptModal } from '../components/modals/prompt-modal';
import { RequestSettingsModal } from '../components/modals/request-settings-modal';
import { RequestSwitcherModal } from '../components/modals/request-switcher-modal';
import { WorkspaceEnvironmentsEditModal } from '../components/modals/workspace-environments-edit-modal';
import { PageLayout } from '../components/page-layout';
import { GrpcRequestPane } from '../components/panes/grpc-request-pane';
import { GrpcResponsePane } from '../components/panes/grpc-response-pane';
import { PlaceholderRequestPane } from '../components/panes/placeholder-request-pane';
import { RequestPane } from '../components/panes/request-pane';
import { ResponsePane } from '../components/panes/response-pane';
import { SidebarChildren } from '../components/sidebar/sidebar-children';
import { SidebarFilter } from '../components/sidebar/sidebar-filter';
import { WebSocketRequestPane } from '../components/websockets/websocket-request-pane';
import { WebSocketResponsePane } from '../components/websockets/websocket-response-pane';
import { WorkspacePageHeader } from '../components/workspace-page-header';
import { updateRequestMetaByParentId } from '../hooks/create-request';
import { createRequestGroup } from '../hooks/create-request-group';
import {
@@ -18,28 +40,6 @@ import {
selectSettings,
} from '../redux/selectors';
import { selectSidebarFilter } from '../redux/sidebar-selectors';
import { EnvironmentsDropdown } from './dropdowns/environments-dropdown';
import { ErrorBoundary } from './error-boundary';
import { useDocBodyKeyboardShortcuts } from './keydown-binder';
import { showModal } from './modals';
import { AskModal } from './modals/ask-modal';
import { CookiesModal, showCookiesModal } from './modals/cookies-modal';
import { GenerateCodeModal } from './modals/generate-code-modal';
import { PromptModal } from './modals/prompt-modal';
import { RequestSettingsModal } from './modals/request-settings-modal';
import { RequestSwitcherModal } from './modals/request-switcher-modal';
import { WorkspaceEnvironmentsEditModal } from './modals/workspace-environments-edit-modal';
import { PageLayout } from './page-layout';
import { GrpcRequestPane } from './panes/grpc-request-pane';
import { GrpcResponsePane } from './panes/grpc-response-pane';
import { PlaceholderRequestPane } from './panes/placeholder-request-pane';
import { RequestPane } from './panes/request-pane';
import { ResponsePane } from './panes/response-pane';
import { SidebarChildren } from './sidebar/sidebar-children';
import { SidebarFilter } from './sidebar/sidebar-filter';
import { WebSocketRequestPane } from './websockets/websocket-request-pane';
import { WebSocketResponsePane } from './websockets/websocket-response-pane';
import { WorkspacePageHeader } from './workspace-page-header';
export const WrapperDebug: FC = () => {
const activeEnvironment = useSelector(selectActiveEnvironment);

View File

@@ -9,16 +9,16 @@ import { database } from '../../common/database';
import { debounce } from '../../common/misc';
import { initializeSpectral, isLintError } from '../../common/spectral';
import * as models from '../../models/index';
import { CodeEditor, UnconnectedCodeEditor } from '../components/codemirror/code-editor';
import { DesignEmptyState } from '../components/design-empty-state';
import { ErrorBoundary } from '../components/error-boundary';
import { Notice, NoticeTable } from '../components/notice-table';
import { PageLayout } from '../components/page-layout';
import { SpecEditorSidebar } from '../components/spec-editor/spec-editor-sidebar';
import { WorkspacePageHeader } from '../components/workspace-page-header';
import { superFaint } from '../css/css-in-js';
import { useActiveApiSpecSyncVCSVersion, useGitVCSVersion } from '../hooks/use-vcs-version';
import { selectActiveApiSpec } from '../redux/selectors';
import { CodeEditor, UnconnectedCodeEditor } from './codemirror/code-editor';
import { DesignEmptyState } from './design-empty-state';
import { ErrorBoundary } from './error-boundary';
import { Notice, NoticeTable } from './notice-table';
import { PageLayout } from './page-layout';
import { SpecEditorSidebar } from './spec-editor/spec-editor-sidebar';
import { WorkspacePageHeader } from './workspace-page-header';
const EmptySpaceHelper = styled.div({
...superFaint,

View File

@@ -17,27 +17,27 @@ import { isDesign, Workspace, WorkspaceScopeKeys } from '../../models/workspace'
import { WorkspaceMeta } from '../../models/workspace-meta';
import { MemClient } from '../../sync/git/mem-client';
import { initializeLocalBackendProjectAndMarkForSync } from '../../sync/vcs/initialize-backend-project';
import { VCS } from '../../sync/vcs/vcs';
import { AppHeader } from '../components/app-header';
import { Dropdown } from '../components/base/dropdown/dropdown';
import { DropdownButton } from '../components/base/dropdown/dropdown-button';
import { DropdownDivider } from '../components/base/dropdown/dropdown-divider';
import { DropdownItem } from '../components/base/dropdown/dropdown-item';
import { DashboardSortDropdown } from '../components/dropdowns/dashboard-sort-dropdown';
import { ProjectDropdown } from '../components/dropdowns/project-dropdown';
import { RemoteWorkspacesDropdown } from '../components/dropdowns/remote-workspaces-dropdown';
import { showPrompt } from '../components/modals';
import { PageLayout } from '../components/page-layout';
import { WrapperHomeEmptyStatePane } from '../components/panes/wrapper-home-empty-state-pane';
import { SvgIcon } from '../components/svg-icon';
import { Button } from '../components/themed-button';
import { WorkspaceCard, WorkspaceCardProps } from '../components/workspace-card';
import { useVCS } from '../hooks/use-vcs';
import { cloneGitRepository } from '../redux/modules/git';
import { selectIsLoading, setDashboardSortOrder } from '../redux/modules/global';
import { ForceToWorkspace } from '../redux/modules/helpers';
import { importClipBoard, importFile, importUri } from '../redux/modules/import';
import { activateWorkspace, createWorkspace } from '../redux/modules/workspace';
import { selectActiveProject, selectApiSpecs, selectDashboardSortOrder, selectIsLoggedIn, selectWorkspaceMetas, selectWorkspacesForActiveProject } from '../redux/selectors';
import { AppHeader } from './app-header';
import { Dropdown } from './base/dropdown/dropdown';
import { DropdownButton } from './base/dropdown/dropdown-button';
import { DropdownDivider } from './base/dropdown/dropdown-divider';
import { DropdownItem } from './base/dropdown/dropdown-item';
import { DashboardSortDropdown } from './dropdowns/dashboard-sort-dropdown';
import { ProjectDropdown } from './dropdowns/project-dropdown';
import { RemoteWorkspacesDropdown } from './dropdowns/remote-workspaces-dropdown';
import { showPrompt } from './modals';
import { PageLayout } from './page-layout';
import { WrapperHomeEmptyStatePane } from './panes/wrapper-home-empty-state-pane';
import { SvgIcon } from './svg-icon';
import { Button } from './themed-button';
import { WorkspaceCard, WorkspaceCardProps } from './workspace-card';
const CreateButton = styled(Button).attrs({
variant: 'contained',
@@ -54,10 +54,6 @@ const CardContainer = styled.div({
paddingTop: 'var(--padding-md)',
});
interface Props {
vcs: VCS | null;
}
function orderDashboardCards(orderBy: DashboardSortOrder) {
return (cardA: Pick<WorkspaceCardProps, 'workspace' | 'lastModifiedTimestamp'>, cardB: Pick<WorkspaceCardProps, 'workspace' | 'lastModifiedTimestamp'>) => {
switch (orderBy) {
@@ -150,7 +146,7 @@ const mapWorkspaceToWorkspaceCard = ({
};
};
const WrapperHome: FC<Props> = (({ vcs }) => {
const WrapperHome: FC = (() => {
const sortOrder = useSelector(selectDashboardSortOrder);
const activeProject = useSelector(selectActiveProject);
const isLoggedIn = useSelector(selectIsLoggedIn);
@@ -158,7 +154,7 @@ const WrapperHome: FC<Props> = (({ vcs }) => {
const apiSpecs = useSelector(selectApiSpecs);
const workspaceMetas = useSelector(selectWorkspaceMetas);
const workspacesForActiveProject = useSelector(selectWorkspacesForActiveProject);
const vcs = useVCS({});
const dispatch = useDispatch();
const [filter, setFilter] = useState('');

View File

@@ -1,12 +1,9 @@
import React, { FC, Fragment, lazy, Suspense, useEffect, useState } from 'react';
import React, { Fragment, useEffect, useState } from 'react';
import { useSelector } from 'react-redux';
import { Route, Routes, useNavigate } from 'react-router-dom';
import { Outlet, useNavigate } from 'react-router-dom';
import {
ACTIVITY_DEBUG,
ACTIVITY_HOME,
ACTIVITY_SPEC,
ACTIVITY_UNIT_TEST,
} from '../../common/constants';
import { database as db } from '../../common/database';
import * as models from '../../models';
@@ -51,6 +48,7 @@ import { WorkspaceEnvironmentsEditModal } from '../components/modals/workspace-e
import { WorkspaceSettingsModal } from '../components/modals/workspace-settings-modal';
import { WrapperModal } from '../components/modals/wrapper-modal';
import { Toast } from '../components/toast';
import { AppHooks } from '../containers/app-hooks';
import withDragDropContext from '../context/app/drag-drop-context';
import { GrpcDispatchModalWrapper, GrpcProvider } from '../context/grpc';
import { NunjucksEnabledProvider } from '../context/nunjucks/nunjucks-enabled-context';
@@ -69,50 +67,6 @@ import {
selectIsFinishedBooting,
selectIsLoggedIn,
} from '../redux/selectors';
import { AppHooks } from './app-hooks';
const lazyWithPreload = <T extends FC<any>>(
importFn: () => Promise<{ default: T }>
) => {
const LazyComponent = lazy(importFn);
const preload = () => importFn();
return [LazyComponent, preload] as const;
};
const [WrapperHome, preloadWrapperHome] = lazyWithPreload(
() => import('../components/wrapper-home')
);
const [WrapperDebug, preloadWrapperDebug] = lazyWithPreload(
() => import('../components/wrapper-debug')
);
const [WrapperDesign, preloadWrapperDesign] = lazyWithPreload(
() => import('../components/wrapper-design')
);
const [WrapperUnitTest, preloadWrapperUnitTest] = lazyWithPreload(
() => import('../components/wrapper-unit-test')
);
preloadWrapperHome();
preloadWrapperDebug();
preloadWrapperDesign();
preloadWrapperUnitTest();
const LoadingIndicator = () => (<div
id="app-loading-indicator"
style={{
position: 'fixed',
top: '0',
left: '0',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
height: '100%',
width: '100%',
}}
>
<img src="./ui/images/insomnia-logo.svg" alt="Insomnia" />
</div>);
const ActivityRouter = () => {
const selectedActivity = useSelector(selectActiveActivity);
@@ -296,42 +250,7 @@ const App = () => {
</ErrorBoundary>
</div>
<Routes>
<Route
path="*"
element={
<Suspense fallback={<LoadingIndicator />}>
<WrapperHome
vcs={vcs}
/>
</Suspense>
}
/>
<Route
path={ACTIVITY_UNIT_TEST}
element={
<Suspense fallback={<LoadingIndicator />}>
<WrapperUnitTest />
</Suspense>
}
/>
<Route
path={ACTIVITY_SPEC}
element={
<Suspense fallback={<LoadingIndicator />}>
<WrapperDesign />
</Suspense>
}
/>
<Route
path={ACTIVITY_DEBUG}
element={
<Suspense fallback={<LoadingIndicator />}>
<WrapperDebug />
</Suspense>
}
/>
</Routes>
<Outlet />
<ActivityRouter />
</ErrorBoundary>

View File

@@ -13,24 +13,24 @@ import { isRequestGroup } from '../../models/request-group';
import type { UnitTest } from '../../models/unit-test';
import type { UnitTestSuite } from '../../models/unit-test-suite';
import { getSendRequestCallback } from '../../network/unit-test-feature';
import { Dropdown } from '../components/base/dropdown/dropdown';
import { DropdownButton } from '../components/base/dropdown/dropdown-button';
import { DropdownItem } from '../components/base/dropdown/dropdown-item';
import { Editable } from '../components/base/editable';
import { CodeEditor } from '../components/codemirror/code-editor';
import { ErrorBoundary } from '../components/error-boundary';
import { ListGroup, UnitTestItem, UnitTestResultItem } from '../components/list-group';
import { showAlert, showModal, showPrompt } from '../components/modals';
import { SelectModal } from '../components/modals/select-modal';
import { PageLayout } from '../components/page-layout';
import { EmptyStatePane } from '../components/panes/empty-state-pane';
import type { Child } from '../components/sidebar/sidebar-children';
import { SvgIcon } from '../components/svg-icon';
import { Button } from '../components/themed-button';
import { UnitTestEditable } from '../components/unit-test-editable';
import { WorkspacePageHeader } from '../components/workspace-page-header';
import { selectActiveEnvironment, selectActiveUnitTestResult, selectActiveUnitTests, selectActiveUnitTestSuite, selectActiveUnitTestSuites, selectActiveWorkspace } from '../redux/selectors';
import { selectSidebarChildren } from '../redux/sidebar-selectors';
import { Dropdown } from './base/dropdown/dropdown';
import { DropdownButton } from './base/dropdown/dropdown-button';
import { DropdownItem } from './base/dropdown/dropdown-item';
import { Editable } from './base/editable';
import { CodeEditor } from './codemirror/code-editor';
import { ErrorBoundary } from './error-boundary';
import { ListGroup, UnitTestItem, UnitTestResultItem } from './list-group';
import { showAlert, showModal, showPrompt } from './modals';
import { SelectModal } from './modals/select-modal';
import { PageLayout } from './page-layout';
import { EmptyStatePane } from './panes/empty-state-pane';
import type { Child } from './sidebar/sidebar-children';
import { SvgIcon } from './svg-icon';
import { Button } from './themed-button';
import { UnitTestEditable } from './unit-test-editable';
import { WorkspacePageHeader } from './workspace-page-header';
const HeaderButton = styled(Button)({
'&&': {