Skip to content

Conversation

@anmolsinghbhatia
Copy link
Collaborator

@anmolsinghbhatia anmolsinghbhatia commented Dec 29, 2025

Description

This PR includes navigation preference enhancements.

Type of Change

  • Improvement

Summary by CodeRabbit

  • New Features

    • Navigation preferences are now server-persisted, ensuring your settings are maintained across all devices and sessions for a consistent experience.
  • Bug Fixes

    • Improved header and breadcrumb rendering logic to correctly display based on the selected navigation mode (accordion vs tabbed layouts).

✏️ Tip: You can customize this high-level summary in your review settings.

@anmolsinghbhatia anmolsinghbhatia self-assigned this Dec 29, 2025
Copilot AI review requested due to automatic review settings December 29, 2025 14:49
@makeplane
Copy link

makeplane bot commented Dec 29, 2025

Linked to Plane Work Item(s)

This comment was auto-generated by Plane

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 29, 2025

📝 Walkthrough

Walkthrough

This PR transitions project navigation preferences from localStorage-based management to API/store-driven persistence, updates navigation mode enum values to uppercase ("ACCORDION" and "TABBED"), extends the workspace service with user property endpoints, and enhances the workspace store with preference state management.

Changes

Cohort / File(s) Summary
Navigation Mode Enum Updates
apps/web/core/types/navigation-preferences.ts, apps/web/core/components/navigation/customize-navigation-dialog.tsx, apps/web/core/components/workspace/sidebar/projects-list-item.tsx, apps/web/ce/components/common/extended-app-header.tsx, apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/header.tsx, apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/layout.tsx, apps/web/ce/components/breadcrumbs/common.tsx
Systematic replacement of lowercase string literals ("accordion", "horizontal") with uppercase equivalents ("ACCORDION", "TABBED") throughout navigation mode comparisons and type definitions.
Project Navigation Preferences Refactoring
apps/web/core/hooks/use-navigation-preferences.ts, apps/web/core/store/workspace/index.ts, apps/web/core/layouts/auth-layout/workspace-wrapper.tsx
Migration from localStorage-based preference storage to server/store-driven approach. Hook now uses API calls via workspace store; store adds new state management with fetch and update actions; wrapper component extends data fetching to include project navigation preferences.
Service and Type Layer Additions
apps/web/core/services/workspace.service.ts, packages/types/src/view-props.ts, apps/web/core/constants/fetch-keys.ts
Added new IWorkspaceUserPropertiesResponse interface extending issue filters with navigation properties; introduced fetchWorkspaceFilters and patchWorkspaceFilters service methods for workspace-scoped user properties; added WORKSPACE_PROJECT_NAVIGATION_PREFERENCES cache key constant.

Sequence Diagram(s)

sequenceDiagram
    participant UI as UI Component
    participant Hook as useNavigationPreferences
    participant Store as WorkspaceStore
    participant Service as WorkspaceService
    participant API as Backend API

    rect rgb(200, 220, 255)
    Note over UI,API: Fetch Project Navigation Preferences
    UI->>Hook: Call useNavigationPreferences(workspaceSlug)
    Hook->>Store: getProjectNavigationPreferences(workspaceSlug)
    
    alt Preferences cached in store
        Store-->>Hook: Return cached preferences
    else Preferences not cached
        Store->>Service: fetchWorkspaceFilters(workspaceSlug)
        Service->>API: GET /api/workspaces/{slug}/user-properties/
        API-->>Service: IWorkspaceUserPropertiesResponse
        Service-->>Store: Store in projectNavigationPreferencesMap
        Store-->>Hook: Return preferences
    end
    
    Hook-->>UI: Return computed preferences + updaters
    end

    rect rgb(220, 255, 220)
    Note over UI,API: Update Navigation Mode
    UI->>Hook: Call updateNavigationMode(mode)
    Hook->>Store: updateProjectNavigationPreferences(workspaceSlug, {navigation_control_preference: mode})
    Store->>Store: Optimistic update of local state
    Store->>Service: patchWorkspaceFilters(workspaceSlug, data)
    Service->>API: PATCH /api/workspaces/{slug}/user-properties/
    
    alt Update succeeds
        API-->>Service: Updated IWorkspaceUserPropertiesResponse
        Service-->>Store: Confirm update
        Store-->>Hook: Return promise resolved
    else Update fails
        API-->>Service: Error
        Service-->>Store: Rollback state
        Store-->>Hook: Return promise rejected
    end
    
    Hook-->>UI: Update complete
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

  • #8245: Adjusts layout and spacing of navigation mode radio options in the customize-navigation-dialog component, which is also modified in this PR for enum value updates.

Suggested reviewers

  • vamsikrishnamathala

Poem

🐰 Hop-hop, the modes dance in uppercase bright,
From localStorage's confines to the API's light,
Preferences now sync'd on a distant server,
Navigation choices—what a marvelous occurrence!
ACCORDION and TABBED, no longer shy,
The workspace store watches them fly!

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Description check ❓ Inconclusive The description is minimal and lacks required details about the specific changes, test scenarios, and technical impact of this substantial refactoring. Expand the description with specific details about enum changes, localStorage migration, the new server-based preference system, affected components, and test scenarios.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately reflects the main change—converting navigation modes from lowercase to uppercase enums and refactoring preference storage to server-based persistence.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore-navigation-preference-enhancements

📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8d479ac and 2ab2e73.

📒 Files selected for processing (13)
  • apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/header.tsx
  • apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/layout.tsx
  • apps/web/ce/components/breadcrumbs/common.tsx
  • apps/web/ce/components/common/extended-app-header.tsx
  • apps/web/core/components/navigation/customize-navigation-dialog.tsx
  • apps/web/core/components/workspace/sidebar/projects-list-item.tsx
  • apps/web/core/constants/fetch-keys.ts
  • apps/web/core/hooks/use-navigation-preferences.ts
  • apps/web/core/layouts/auth-layout/workspace-wrapper.tsx
  • apps/web/core/services/workspace.service.ts
  • apps/web/core/store/workspace/index.ts
  • apps/web/core/types/navigation-preferences.ts
  • packages/types/src/view-props.ts
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{ts,tsx,mts,cts}

📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)

**/*.{ts,tsx,mts,cts}: Use const type parameters for more precise literal inference in TypeScript 5.0+
Use the satisfies operator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicit is return types in filter/check functions
Use NoInfer<T> utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing in switch(true) blocks for control flow analysis (TypeScript 5.3+)
Rely on narrowing from direct boolean comparisons for type guards
Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Use constant indices to narrow object/array properties (TypeScript 5.5+)
Use standard ECMAScript decorators (Stage 3) instead of legacy experimentalDecorators
Use using declarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Use with { type: "json" } for import attributes; avoid deprecated assert syntax (TypeScript 5.3/5.8+)
Use import type explicitly when importing types to ensure they are erased during compilation, respecting verbatimModuleSyntax flag
Use .ts, .mts, .cts extensions in import type statements (TypeScript 5.2+)
Use import type { Type } from "mod" with { "resolution-mode": "import" } for specific module resolution contexts (TypeScript 5.3+)
Use new iterator methods (map, filter, etc.) if targeting modern environments (TypeScript 5.6+)
Utilize new Set methods like union, intersection, etc., when available (TypeScript 5.5+)
Use Object.groupBy / Map.groupBy standard methods for grouping instead of external libraries (TypeScript 5.4+)
Use Promise.withResolvers() for creating promises with exposed resolve/reject functions (TypeScript 5.7+)
Use copying array methods (toSorted, toSpliced, with) for immutable array operations (TypeScript 5.2+)
Avoid accessing instance fields via super in classes (TypeScript 5....

Files:

  • apps/web/ce/components/common/extended-app-header.tsx
  • packages/types/src/view-props.ts
  • apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/header.tsx
  • apps/web/core/types/navigation-preferences.ts
  • apps/web/core/components/navigation/customize-navigation-dialog.tsx
  • apps/web/core/layouts/auth-layout/workspace-wrapper.tsx
  • apps/web/core/constants/fetch-keys.ts
  • apps/web/core/services/workspace.service.ts
  • apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/layout.tsx
  • apps/web/core/components/workspace/sidebar/projects-list-item.tsx
  • apps/web/ce/components/breadcrumbs/common.tsx
  • apps/web/core/store/workspace/index.ts
  • apps/web/core/hooks/use-navigation-preferences.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Enable TypeScript strict mode and ensure all files are fully typed

Files:

  • apps/web/ce/components/common/extended-app-header.tsx
  • packages/types/src/view-props.ts
  • apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/header.tsx
  • apps/web/core/types/navigation-preferences.ts
  • apps/web/core/components/navigation/customize-navigation-dialog.tsx
  • apps/web/core/layouts/auth-layout/workspace-wrapper.tsx
  • apps/web/core/constants/fetch-keys.ts
  • apps/web/core/services/workspace.service.ts
  • apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/layout.tsx
  • apps/web/core/components/workspace/sidebar/projects-list-item.tsx
  • apps/web/ce/components/breadcrumbs/common.tsx
  • apps/web/core/store/workspace/index.ts
  • apps/web/core/hooks/use-navigation-preferences.ts
**/*.{js,jsx,ts,tsx,json,css}

📄 CodeRabbit inference engine (AGENTS.md)

Use Prettier with Tailwind plugin for code formatting, run pnpm fix:format

Files:

  • apps/web/ce/components/common/extended-app-header.tsx
  • packages/types/src/view-props.ts
  • apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/header.tsx
  • apps/web/core/types/navigation-preferences.ts
  • apps/web/core/components/navigation/customize-navigation-dialog.tsx
  • apps/web/core/layouts/auth-layout/workspace-wrapper.tsx
  • apps/web/core/constants/fetch-keys.ts
  • apps/web/core/services/workspace.service.ts
  • apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/layout.tsx
  • apps/web/core/components/workspace/sidebar/projects-list-item.tsx
  • apps/web/ce/components/breadcrumbs/common.tsx
  • apps/web/core/store/workspace/index.ts
  • apps/web/core/hooks/use-navigation-preferences.ts
**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{js,jsx,ts,tsx}: Use ESLint with shared config across packages, adhering to max warnings limits per package
Use camelCase for variable and function names, PascalCase for components and types
Use try-catch with proper error types and log errors appropriately

Files:

  • apps/web/ce/components/common/extended-app-header.tsx
  • packages/types/src/view-props.ts
  • apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/header.tsx
  • apps/web/core/types/navigation-preferences.ts
  • apps/web/core/components/navigation/customize-navigation-dialog.tsx
  • apps/web/core/layouts/auth-layout/workspace-wrapper.tsx
  • apps/web/core/constants/fetch-keys.ts
  • apps/web/core/services/workspace.service.ts
  • apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/layout.tsx
  • apps/web/core/components/workspace/sidebar/projects-list-item.tsx
  • apps/web/ce/components/breadcrumbs/common.tsx
  • apps/web/core/store/workspace/index.ts
  • apps/web/core/hooks/use-navigation-preferences.ts
🧠 Learnings (6)
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Sidebar menu items should use transparent backgrounds with hover states like `hover:bg-layer-1-hover` rather than base layer backgrounds, maintaining visual lightness while providing hover feedback

Applied to files:

  • apps/web/ce/components/common/extended-app-header.tsx
  • apps/web/core/components/workspace/sidebar/projects-list-item.tsx
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Avoid `enum`s if the project prefers erasable syntax, using `const` objects or unions instead (TypeScript 5.8+)

Applied to files:

  • apps/web/core/types/navigation-preferences.ts
  • apps/web/core/components/navigation/customize-navigation-dialog.tsx
  • apps/web/core/components/workspace/sidebar/projects-list-item.tsx
📚 Learning: 2025-12-12T15:20:36.542Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-12T15:20:36.542Z
Learning: Applies to **/package.json : Use `workspace:*` for internal packages and `catalog:` for external dependencies in imports

Applied to files:

  • apps/web/core/layouts/auth-layout/workspace-wrapper.tsx
  • apps/web/core/constants/fetch-keys.ts
  • apps/web/core/store/workspace/index.ts
📚 Learning: 2025-12-12T15:20:36.542Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-12T15:20:36.542Z
Learning: Applies to **/*.{js,jsx,ts,tsx} : Use camelCase for variable and function names, PascalCase for components and types

Applied to files:

  • apps/web/core/components/workspace/sidebar/projects-list-item.tsx
📚 Learning: 2025-06-18T09:46:08.566Z
Learnt from: prateekshourya29
Repo: makeplane/plane PR: 7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.

Applied to files:

  • apps/web/ce/components/breadcrumbs/common.tsx
📚 Learning: 2025-12-12T15:20:36.542Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-12T15:20:36.542Z
Learning: Applies to packages/shared-state/**/*.{ts,tsx} : Maintain MobX stores in `packages/shared-state` using reactive patterns

Applied to files:

  • apps/web/core/store/workspace/index.ts
🧬 Code graph analysis (4)
apps/web/core/layouts/auth-layout/workspace-wrapper.tsx (3)
apps/admin/core/hooks/store/use-workspace.tsx (1)
  • useWorkspace (6-10)
apps/space/core/store/publish/publish.store.ts (1)
  • workspaceSlug (93-95)
apps/web/core/constants/fetch-keys.ts (1)
  • WORKSPACE_PROJECT_NAVIGATION_PREFERENCES (86-87)
apps/web/core/constants/fetch-keys.ts (1)
apps/space/core/store/publish/publish.store.ts (1)
  • workspaceSlug (93-95)
apps/web/core/services/workspace.service.ts (1)
packages/types/src/view-props.ts (1)
  • IWorkspaceUserPropertiesResponse (197-201)
apps/web/core/store/workspace/index.ts (1)
packages/types/src/view-props.ts (1)
  • IWorkspaceUserPropertiesResponse (197-201)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: CodeQL analysis (javascript-typescript)
  • GitHub Check: Agent
  • GitHub Check: Build packages
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (17)
apps/web/core/constants/fetch-keys.ts (1)

86-87: LGTM! Consistent with existing patterns.

The new fetch key follows the established naming convention and implementation pattern used by other workspace preference keys in this file.

packages/types/src/view-props.ts (1)

197-201: LGTM! Well-structured type definition.

The new interface appropriately extends IIssueFiltersResponse and introduces workspace-level navigation preferences with clear types. The comment explaining the derived show_limited_projects field is helpful for future developers.

apps/web/core/services/workspace.service.ts (1)

402-419: LGTM! Methods follow established service patterns.

Both new methods adhere to the existing WorkspaceService implementation patterns with consistent error handling and appropriate type signatures. The use of Partial<IWorkspaceUserPropertiesResponse> for the PATCH payload is a good practice for allowing partial updates.

Ensure the backend endpoints (/api/workspaces/{workspaceSlug}/user-properties/) are implemented and return data matching the IWorkspaceUserPropertiesResponse interface.

apps/web/ce/components/breadcrumbs/common.tsx (1)

15-15: LGTM! Consistent with navigation mode standardization.

The condition correctly uses the new uppercase "TABBED" literal, aligning with the PR's migration to uppercase navigation mode values.

apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/header.tsx (1)

33-33: LGTM! Aligned with navigation mode updates.

The conditional rendering now correctly checks for "TABBED" mode, consistent with the codebase-wide migration to uppercase navigation mode tokens.

apps/web/ce/components/common/extended-app-header.tsx (1)

19-19: LGTM! Correct uppercase literal usage.

The condition properly uses the uppercase "ACCORDION" token, maintaining the same logic while aligning with the standardized navigation mode values.

apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/layout.tsx (1)

26-26: LGTM! Consistent navigation mode check.

The rendering guard correctly uses the uppercase "TABBED" value, ensuring the header displays in the appropriate navigation mode.

apps/web/core/components/workspace/sidebar/projects-list-item.tsx (1)

258-271: LGTM! Complete migration to uppercase tokens.

All three occurrences of the navigation mode comparison have been correctly updated to use the uppercase "ACCORDION" literal, ensuring consistency across the click handling, mode derivation, and highlight logic.

apps/web/core/types/navigation-preferences.ts (2)

14-14: LGTM! String union type follows project conventions.

The type uses uppercase string literals ("ACCORDION" | "TABBED") which aligns with the IWorkspaceUserPropertiesResponse interface in packages/types/src/view-props.ts. Using a string union instead of an enum follows the coding guidelines for erasable syntax.


56-60: Default preferences correctly updated to match the new type.

The default value aligns with the new uppercase token convention.

apps/web/core/components/navigation/customize-navigation-dialog.tsx (1)

264-296: LGTM! Navigation mode radio buttons correctly use uppercase tokens.

The radio button values ("ACCORDION", "TABBED"), checked comparisons, and onChange handlers are all consistently updated to use the new uppercase tokens matching TProjectNavigationMode.

apps/web/core/layouts/auth-layout/workspace-wrapper.tsx (1)

117-122: LGTM! SWR hook follows existing patterns.

The new SWR hook for fetching project navigation preferences correctly follows the same pattern as WORKSPACE_STATES (lines 104-108), using only workspaceSlug as the condition. The SWR options are consistent with other fetches in this component.

apps/web/core/hooks/use-navigation-preferences.ts (2)

114-131: Consider edge case when navigation_project_limit is explicitly 0.

When navigation_project_limit is 0 (meaning "don't show limited projects"), the computed limitedProjectsCount will use the default value (10) due to the condition limit > 0 ? limit : DEFAULT_PROJECT_PREFERENCES.limitedProjectsCount. This preserves the last count for when the user toggles the feature back on, which appears intentional.

However, the condition at line 118 (storePreferences.navigation_project_limit !== undefined) will still be true when the value is 0, entering this branch. The logic works correctly since showLimitedProjects is derived from limit > 0. Just noting this for clarity.


134-170: Async update functions rely on caller for error handling.

The update functions (updateNavigationMode, updateShowLimitedProjects, updateLimitedProjectsCount) are async and call updateProjectNavigationPreferences which throws on failure. The store handles rollback, but errors propagate to callers. This is acceptable since the store logs errors and the UI can handle failures gracefully through the optimistic update pattern.

apps/web/core/store/workspace/index.ts (3)

334-337: LGTM! Computed getter correctly uses computedFn.

The getProjectNavigationPreferences method uses computedFn from mobx-utils for memoization, consistent with the existing getNavigationPreferences pattern.


339-377: Well-implemented optimistic update pattern with proper rollback.

The fetchProjectNavigationPreferences and updateProjectNavigationPreferences methods follow the established patterns in this store:

  • Optimistic updates for responsive UI
  • Cloning state before update for rollback capability
  • Proper error logging and re-throwing for upstream handling
  • Consistent use of runInAction for MobX state mutations

83-107: MobX observables correctly registered.

The new projectNavigationPreferencesMap is properly registered as an observable, and the new action methods (fetchProjectNavigationPreferences, updateProjectNavigationPreferences) are correctly marked as actions in makeObservable.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
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 migrates navigation preferences from local storage to API-based storage and standardizes navigation mode values to uppercase. The changes enable workspace-level persistence of project navigation preferences including navigation mode (accordion/tabbed) and project limit settings.

  • Migrates project navigation preferences from browser local storage to workspace user properties API
  • Changes navigation mode values from lowercase ("accordion", "horizontal") to uppercase ("ACCORDION", "TABBED") for consistency
  • Adds new store methods and API endpoints for fetching and updating project navigation preferences

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
packages/types/src/view-props.ts Defines new IWorkspaceUserPropertiesResponse interface extending issue filters with navigation preferences
apps/web/core/types/navigation-preferences.ts Updates TProjectNavigationMode type to use uppercase values and updates defaults
apps/web/core/store/workspace/index.ts Adds project navigation preferences map and implements fetch/update methods with optimistic updates
apps/web/core/services/workspace.service.ts Adds API service methods for fetching and patching workspace user properties
apps/web/core/layouts/auth-layout/workspace-wrapper.tsx Integrates fetching of project navigation preferences on workspace load
apps/web/core/hooks/use-navigation-preferences.ts Refactors hook to use API-based preferences instead of local storage with fallback to defaults
apps/web/core/constants/fetch-keys.ts Adds SWR cache key constant for project navigation preferences
apps/web/core/components/workspace/sidebar/projects-list-item.tsx Updates navigation mode comparisons to use uppercase values
apps/web/core/components/navigation/customize-navigation-dialog.tsx Updates radio button values and handlers to use uppercase navigation modes
apps/web/ce/components/common/extended-app-header.tsx Updates navigation mode comparison to use uppercase value
apps/web/ce/components/breadcrumbs/common.tsx Updates navigation mode comparison to use uppercase value
apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/layout.tsx Updates navigation mode comparison to use uppercase value
apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/header.tsx Updates navigation mode comparison to use uppercase value

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

@pushya22 pushya22 merged commit 8663382 into preview Dec 30, 2025
17 of 18 checks passed
@pushya22 pushya22 deleted the chore-navigation-preference-enhancements branch December 30, 2025 07:52
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.

4 participants