diff --git a/packages/insomnia/src/ui/index.tsx b/packages/insomnia/src/ui/index.tsx
index 3e5b67543a..a6b0a04dd9 100644
--- a/packages/insomnia/src/ui/index.tsx
+++ b/packages/insomnia/src/ui/index.tsx
@@ -44,7 +44,6 @@ const Debug = lazy(() => import('./routes/debug'));
const Design = lazy(() => import('./routes/design'));
const MockServer = lazy(() => import('./routes/mock-server'));
const Environments = lazy(() => import('./routes/environments'));
-const Runner = lazy(() => import('./routes/runner'));
initializeSentry();
initializeLogging();
@@ -321,7 +320,7 @@ async function renderApp() {
),
children: [
{
- path: `${ACTIVITY_DEBUG}`,
+ path: `${ACTIVITY_DEBUG}/*`,
loader: async (...args) =>
(await import('./routes/debug')).loader(
...args,
@@ -464,10 +463,7 @@ async function renderApp() {
(
await import('./routes/runner')
).collectionRunnerStatusLoader(...args),
- element:
- }>
-
- ,
+ element: ,
action: async (...args) =>
(
await import('./routes/runner')
@@ -705,6 +701,7 @@ async function renderApp() {
children: [
{
index: true,
+ element: ,
loader: async (...args) =>
(
await import('./routes/test-suite')
diff --git a/packages/insomnia/src/ui/routes/debug.tsx b/packages/insomnia/src/ui/routes/debug.tsx
index 690f3d625a..7d5cb3b725 100644
--- a/packages/insomnia/src/ui/routes/debug.tsx
+++ b/packages/insomnia/src/ui/routes/debug.tsx
@@ -31,8 +31,9 @@ import {
type LoaderFunction,
type NavigateFunction,
NavLink,
- Outlet,
redirect,
+ Route,
+ Routes,
useFetcher,
useFetchers,
useNavigate,
@@ -112,6 +113,7 @@ import type {
WebSocketRequestLoaderData,
} from './request';
import { useRootLoaderData } from './root';
+import Runner from './runner';
import type { Child, WorkspaceLoaderData } from './workspace';
export interface GrpcMessage {
@@ -1114,62 +1116,76 @@ export const Debug: FC = () => {
-
-
- {workspaceId ? (
-
- {isRequestGroupId(requestGroupId) && (
-
- )}
- {isGrpcRequestId(requestId) && grpcState && (
-
- )}
- {isWebSocketRequestId(requestId) && (
-
- )}
- {isRequestId(requestId) && (
- {
- setPastedCurl(text);
- setPasteCurlModalOpen(true);
- }}
- />
- )}
- {Boolean(!requestId && !requestGroupId) && }
- {isRequestSettingsModalOpen && activeRequest && (
- setIsRequestSettingsModalOpen(false)}
- />
- )}
-
- ) : null}
-
- {
- activeRequest ? (<>
-
-
-
- {activeRequest && isGrpcRequest(activeRequest) && grpcState && (
-
- )}
- {isRealtimeRequest && (
-
- )}
- {activeRequest && isRequest(activeRequest) && !isRealtimeRequest && (
-
- )}
-
-
- >) : null
- }
-
+
+
+
+
+ {workspaceId ? (
+
+ {isRequestGroupId(requestGroupId) && (
+
+ )}
+ {isGrpcRequestId(requestId) && grpcState && (
+
+ )}
+ {isWebSocketRequestId(requestId) && (
+
+ )}
+ {isRequestId(requestId) && (
+ {
+ setPastedCurl(text);
+ setPasteCurlModalOpen(true);
+ }}
+ />
+ )}
+ {Boolean(!requestId && !requestGroupId) && }
+ {isRequestSettingsModalOpen && activeRequest && (
+ setIsRequestSettingsModalOpen(false)}
+ />
+ )}
+
+ ) : null}
+
+ {
+ activeRequest ? (<>
+
+
+
+ {activeRequest && isGrpcRequest(activeRequest) && grpcState && (
+
+ )}
+ {isRealtimeRequest && (
+
+ )}
+ {activeRequest && isRequest(activeRequest) && !isRealtimeRequest && (
+
+ )}
+
+
+ >) : null
+ }
+ >
+ }
+ />
+
+ }
+ />
+
diff --git a/packages/insomnia/src/ui/routes/request.tsx b/packages/insomnia/src/ui/routes/request.tsx
index 09190c8e8f..de085eacef 100644
--- a/packages/insomnia/src/ui/routes/request.tsx
+++ b/packages/insomnia/src/ui/routes/request.tsx
@@ -244,7 +244,9 @@ export const deleteRequestAction: ActionFunction = async ({ request, params }) =
invariant(workspaceMeta, 'Workspace meta not found');
if (workspaceMeta.activeRequestId === id) {
await models.workspaceMeta.updateByParentId(workspaceId, { activeRequestId: null });
- return redirect(`/organization/${organizationId}/project/${projectId}/workspace/${workspaceId}/debug`);
+ if (request.url.includes(id)) {
+ return redirect(`/organization/${organizationId}/project/${projectId}/workspace/${workspaceId}/debug`);
+ }
}
return null;
};
diff --git a/packages/insomnia/src/ui/routes/runner.tsx b/packages/insomnia/src/ui/routes/runner.tsx
index 4e899ae377..3816b5c817 100644
--- a/packages/insomnia/src/ui/routes/runner.tsx
+++ b/packages/insomnia/src/ui/routes/runner.tsx
@@ -2,7 +2,7 @@ import type { RequestContext } from 'insomnia-sdk';
import porderedJSON from 'json-order';
import React, { type FC, useCallback, useEffect, useMemo, useState } from 'react';
import { Button, Checkbox, DropIndicator, GridList, GridListItem, type GridListItemProps, Heading, type Key, Tab, TabList, TabPanel, Tabs, Toolbar, TooltipTrigger, useDragAndDrop } from 'react-aria-components';
-import { Panel, PanelGroup, PanelResizeHandle } from 'react-resizable-panels';
+import { Panel, PanelResizeHandle } from 'react-resizable-panels';
import { type ActionFunction, redirect, useNavigate, useParams, useRouteLoaderData, useSearchParams, useSubmit } from 'react-router-dom';
import { useInterval } from 'react-use';
@@ -216,11 +216,15 @@ export const Runner: FC<{}> = () => {
const [requestIds, setRequestIds] = useLocalStorage(`runner:requestIds:${workspaceId}`, { defaultValue: requestRows.map(item => item.id) });
useEffect(() => {
+ const areRequestsSameLength = requestIds.length === requestRows.length;
+ const areRequestIdsMatching = requestRows.map(requestRow => requestRow.id).every(id => requestIds.includes(id));
+ const areRequestsSynced = areRequestsSameLength && areRequestIdsMatching;
+
// request was added or removed
- if (requestIds.length !== requestRows.length) {
- const newRequest = requestRows.find(item => !requestIds.includes(item.id));
- if (newRequest) {
- setRequestIds([...requestIds, newRequest.id]);
+ if (!areRequestsSynced) {
+ const newRequests = requestRows.filter(item => !requestIds.includes(item.id));
+ if (newRequests.length > 0) {
+ setRequestIds([...requestIds, ...newRequests.map(item => item.id)]);
} else {
setRequestIds(requestIds.filter(key => requestRows.map(r => r.id).includes(key)));
}
@@ -439,10 +443,7 @@ export const Runner: FC<{}> = () => {
const disabledKeys = useMemo(() => isRunning ? requestIds : [], [isRunning, requestIds]);
const isDisabled = isRunning || selectedRequestIds.size === 0;
return (
-
-
-
-
+ <>
@@ -787,9 +788,7 @@ export const Runner: FC<{}> = () => {
-
-
-
+ >
);
};