Skip to content

Fix: New navigation sidebar UI issues#9958

Draft
cwangsmv wants to merge 7 commits into
developfrom
fix/ia-nav-ui-notes-issues
Draft

Fix: New navigation sidebar UI issues#9958
cwangsmv wants to merge 7 commits into
developfrom
fix/ia-nav-ui-notes-issues

Conversation

@cwangsmv
Copy link
Copy Markdown
Contributor

@cwangsmv cwangsmv commented May 26, 2026

Changes

  • Improve the UI effects for pinned request, empty node and collection/workspace dropdown
  • Support workspace re-order by drag & drop and limit the workspace types that can be moved between projects
  • Support toggle sidebar in application menu and shortcut
  • Fix racing issue when nav between nodes very quickly
  • Fix duplicate workspace modal did not hide issue
  • Fix filtering issue when there's no matching nodes

INS-2605

Copilot AI review requested due to automatic review settings May 26, 2026 09:32
@cwangsmv cwangsmv marked this pull request as draft May 26, 2026 09:32
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 26, 2026

✅ Circular References Report

Generated at: 2026-05-27T03:00:07.762Z
Status: ✅ NO CHANGE

Summary

Metric Base (develop) PR Change
Total Circular References 19 19 0 (0.00%)
Click to view all circular references in PR (19)
insomnia-inso/src/db/models/types.ts -> insomnia-inso/src/db/types.ts
insomnia-scripting-environment/src/objects/index.ts -> insomnia-scripting-environment/src/objects/collection.ts -> insomnia-scripting-environment/src/objects/response.ts -> insomnia/src/network/network.ts
insomnia-scripting-environment/src/objects/index.ts -> insomnia-scripting-environment/src/objects/collection.ts -> insomnia-scripting-environment/src/objects/response.ts -> insomnia/src/network/network.ts -> insomnia/src/network/cancellation.ts
insomnia-scripting-environment/src/objects/index.ts -> insomnia-scripting-environment/src/objects/collection.ts -> insomnia-scripting-environment/src/objects/response.ts -> insomnia/src/network/network.ts -> insomnia/src/network/cancellation.ts -> insomnia/src/script-executor.ts
insomnia-scripting-environment/src/objects/index.ts -> insomnia-scripting-environment/src/objects/collection.ts -> insomnia-scripting-environment/src/objects/response.ts -> insomnia/src/network/network.ts -> insomnia/src/network/cancellation.ts -> insomnia/src/script-executor.ts -> insomnia/src/scripting/require-interceptor.ts
insomnia-scripting-environment/src/objects/index.ts -> insomnia-scripting-environment/src/objects/collection.ts -> insomnia-scripting-environment/src/objects/response.ts -> insomnia/src/network/network.ts -> insomnia/src/network/concurrency.ts
insomnia/src/network/network.ts -> insomnia/src/common/render.ts
insomnia/src/network/network.ts -> insomnia/src/common/render.ts -> insomnia/src/templating/index.ts -> insomnia/src/plugins/index.ts -> insomnia/src/plugins/context/app.ts -> insomnia/src/templating/types.ts -> insomnia/src/plugins/context/network.ts
insomnia/src/network/network.ts -> insomnia/src/main/network/get-auth-header.ts -> insomnia/src/main/network/o-auth-2/get-token.ts
insomnia/src/plugins/index.ts -> insomnia/src/plugins/context/app.ts -> insomnia/src/templating/types.ts -> insomnia/src/plugins/context/store.ts
insomnia/src/plugins/index.ts -> insomnia/src/plugins/misc.ts
insomnia/src/templating/base-extension-worker.ts -> insomnia/src/templating/worker.ts
insomnia/src/templating/index.ts -> insomnia/src/templating/base-extension.ts
insomnia/src/templating/types.ts -> insomnia/src/plugins/context/network.ts
insomnia/src/templating/types.ts -> insomnia/src/templating/utils.ts
insomnia/src/ui/components/settings/import-export.tsx -> insomnia/src/ui/components/modals/export-requests-modal.tsx
insomnia/src/ui/components/tabs/tab-list.tsx -> insomnia/src/ui/components/tabs/tab.tsx
insomnia/src/ui/components/templating/tag-editor-arg-sub-form.tsx -> insomnia/src/ui/components/templating/external-vault/external-vault-form.tsx
insomnia/src/ui/components/viewers/response-viewer.tsx -> insomnia/src/ui/components/viewers/response-multipart-viewer.tsx
Click to view all circular references in base branch (19)
insomnia-inso/src/db/models/types.ts -> insomnia-inso/src/db/types.ts
insomnia-scripting-environment/src/objects/index.ts -> insomnia-scripting-environment/src/objects/collection.ts -> insomnia-scripting-environment/src/objects/response.ts -> insomnia/src/network/network.ts
insomnia-scripting-environment/src/objects/index.ts -> insomnia-scripting-environment/src/objects/collection.ts -> insomnia-scripting-environment/src/objects/response.ts -> insomnia/src/network/network.ts -> insomnia/src/network/cancellation.ts
insomnia-scripting-environment/src/objects/index.ts -> insomnia-scripting-environment/src/objects/collection.ts -> insomnia-scripting-environment/src/objects/response.ts -> insomnia/src/network/network.ts -> insomnia/src/network/cancellation.ts -> insomnia/src/script-executor.ts
insomnia-scripting-environment/src/objects/index.ts -> insomnia-scripting-environment/src/objects/collection.ts -> insomnia-scripting-environment/src/objects/response.ts -> insomnia/src/network/network.ts -> insomnia/src/network/cancellation.ts -> insomnia/src/script-executor.ts -> insomnia/src/scripting/require-interceptor.ts
insomnia-scripting-environment/src/objects/index.ts -> insomnia-scripting-environment/src/objects/collection.ts -> insomnia-scripting-environment/src/objects/response.ts -> insomnia/src/network/network.ts -> insomnia/src/network/concurrency.ts
insomnia/src/network/network.ts -> insomnia/src/common/render.ts
insomnia/src/network/network.ts -> insomnia/src/common/render.ts -> insomnia/src/templating/index.ts -> insomnia/src/plugins/index.ts -> insomnia/src/plugins/context/app.ts -> insomnia/src/templating/types.ts -> insomnia/src/plugins/context/network.ts
insomnia/src/network/network.ts -> insomnia/src/main/network/get-auth-header.ts -> insomnia/src/main/network/o-auth-2/get-token.ts
insomnia/src/plugins/index.ts -> insomnia/src/plugins/context/app.ts -> insomnia/src/templating/types.ts -> insomnia/src/plugins/context/store.ts
insomnia/src/plugins/index.ts -> insomnia/src/plugins/misc.ts
insomnia/src/templating/base-extension-worker.ts -> insomnia/src/templating/worker.ts
insomnia/src/templating/index.ts -> insomnia/src/templating/base-extension.ts
insomnia/src/templating/types.ts -> insomnia/src/plugins/context/network.ts
insomnia/src/templating/types.ts -> insomnia/src/templating/utils.ts
insomnia/src/ui/components/settings/import-export.tsx -> insomnia/src/ui/components/modals/export-requests-modal.tsx
insomnia/src/ui/components/tabs/tab-list.tsx -> insomnia/src/ui/components/tabs/tab.tsx
insomnia/src/ui/components/templating/tag-editor-arg-sub-form.tsx -> insomnia/src/ui/components/templating/external-vault/external-vault-form.tsx
insomnia/src/ui/components/viewers/response-viewer.tsx -> insomnia/src/ui/components/viewers/response-multipart-viewer.tsx

Analysis

No Change: This PR does not introduce or remove any circular references.


This report was generated automatically by comparing against the develop branch.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses multiple UX and behavior issues introduced with the new project navigation sidebar, including workspace drag/drop behavior, pinned/empty-node visuals, sidebar toggling, and preventing stale navigations during rapid node switching.

Changes:

  • Prevent stale/overlapping navigations by ignoring outdated async tab builds.
  • Add workspace reordering (local/manual) + restrict which workspace scopes can be moved across projects.
  • Centralize sidebar toggle handling (menu/shortcut/main-process event) and adjust several sidebar UI details (pinned section, empty nodes, dropdowns).

Reviewed changes

Copilot reviewed 16 out of 17 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
packages/insomnia/src/ui/hooks/use-insomnia-tab.ts Adds a navigation “generation” guard to avoid stale async navigations.
packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/workspace-node.tsx Minor prop ordering/formatting for workspace node props.
packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/use-sidebar-drag-and-drop.tsx Adds cross-project scope restrictions and introduces a callback for workspace reordering.
packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/request-node.tsx Adjusts pinned request UI and removes toggle button for pinned rows.
packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/project-node.tsx Switches to new sidebar-specific project dropdown and wires workspace sort props.
packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/project-navigation-sidebar.tsx Implements workspace sorting/reordering state, pinned section behavior tweaks, and filtering adjustments.
packages/insomnia/src/ui/components/sidebar/project-navigation-sidebar/empty-node.tsx Updates empty-node spacing/typography and “Create” button visuals.
packages/insomnia/src/ui/components/modals/workspace-duplicate-modal.tsx Navigates after duplicate via fetcher result and closes modal accordingly.
packages/insomnia/src/ui/components/dropdowns/sidebar-workspace-dropdown.tsx Fixes className spacing when concatenating optional item className.
packages/insomnia/src/ui/components/dropdowns/sidebar-project-dropdown.tsx New dropdown providing project actions + workspace sort controls.
packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.move.tsx Changes duplicate/move action to return data instead of redirecting.
packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.test.tsx Removes per-route sidebar toggle shortcut wiring.
packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.spec.tsx Removes per-route sidebar toggle shortcut wiring.
packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.mock-server.tsx Removes per-route sidebar toggle wiring (handled by parent route).
packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.environment.tsx Removes per-route sidebar toggle wiring (handled by parent route).
packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.tsx Removes per-route sidebar toggle shortcut wiring.
packages/insomnia/src/routes/organization.$organizationId.project.$projectId.tsx Centralizes sidebar toggle handling via panel imperative API + keyboard shortcuts.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +446 to +452
// Show pinned collection children when the workspace is expanded
const pinnedCollectionChildren = shouldHideCollectionChildren
? []
: // Filter out pinned requests by pinned attribute. Besides, when there is an active filter, also filter out un-matched requests.
collectionChildren.filter(
child => child.pinned && !(projectNavigationSidebarFilter ? child.hidden : false),
);
Comment on lines +19 to +20
// WhiteList workspace scopes that are allowed to be moved across projects.
const allowCrossProjectDropWorkspaceScope: string[] = [
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 18 out of 19 changed files in this pull request and generated 2 comments.

Comment on lines +360 to +366
sortedWorkspaces = localOrder
? [...workspaces].sort((a, b) => {
const ai = localOrder.indexOf(a._id);
const bi = localOrder.indexOf(b._id);
return (ai === -1 ? Infinity : ai) - (bi === -1 ? Infinity : bi);
})
: [...workspaces].sort((a, b) => sortMethodMap['created-asc'](a, b));
FlatItem,
{ kind: 'workspace' | 'collectionChild' | 'project' | 'emptyFolder' | 'emptyProject' | 'emptyCollection' }
>;
// WhiteList workspace scopes that are allowed to be moved across projects.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants