Files
2026-08-24 11:09:03 +00:00

4.9 KiB
Raw Permalink Blame History

id, title, status, wave, depends_on, plan, spec
id title status wave depends_on plan spec
05-nav-availability Decouple left-panel nav visibility from the enabled toggle done 4
01-enabled-hooks
04-hide-disabled-setting
plan.md ../../specs/integrations/requirements/enable-disable-toggle.md

Task 05: Decouple left-panel nav visibility from the enabled toggle

  • Acceptance:
    1. useNavAvailability() returns true for a configured integration that is disabled when hideDisabled is false (the default), and false for the same integration when hideDisabled is true.
    2. useNavAvailability() returns false for an unconfigured integration regardless of enabled/hideDisabled.
    3. apps/web/hooks/use-nav-availability.test.ts and apps/web/components/integrations/integrations-menu.test.ts pass with updated mocks, and cover both new cases from criteria 1-2 in a table-driven test over the five nav-gated keys.
  • Verification: cd apps && pnpm --filter @kandev/web test -- hooks/use-nav-availability components/integrations/integrations-menu
  • Files likely touched:
    • apps/web/hooks/use-nav-availability.ts
    • apps/web/hooks/use-nav-availability.test.ts
    • apps/web/components/integrations/integrations-menu.test.ts
  • Dependencies: 01-enabled-hooks, 04-hide-disabled-setting.
  • Parallelism: sequential.
  • Inputs: spec Scenarios, plan Task 05 derivation formula, use-jira-availability.ts's/use-linear-availability.ts's existing useJiraAuthed/useLinearAuthed exports.
  • Output contract: summary, files changed, exact test command run and its output, blockers/risks, task/plan status update.

Results

  • useNavAvailability now computes, for each of the five nav-gated keys, configured && (!hideDisabled || enabled):
    • configured reuses the exact pre-existing signals unchanged for azure-devops (useAzureDevOpsAvailable), github (getGitHubIntegrationStatus(...).ready), and gitlab (useGitLabAvailable) — none of these three had an "enabled" toggle before this feature, so their "configured" signal already meant exactly what this task needs.
    • configured for jira/linear switched from useJiraAvailable/ useLinearAvailable (the old combined enabled+authed signal) to the already-existing, enabled-agnostic useJiraAuthed/useLinearAuthed.
    • enabled comes from the five useXEnabled() hooks (three new from Task 01, two pre-existing: useJiraEnabled/useLinearEnabled).
    • hideDisabled comes from Task 04's useHideDisabledIntegrationsInNav().
    • Confirmed useJiraAvailable/useLinearAvailable themselves were not touched — every other consumer (import bars, Kanban external-link buttons, task-top-bar buttons, workspaces-group.tsx's settings tree) keeps importing and using them exactly as before; only this file's imports changed.
  • Rewrote use-nav-availability.test.ts: renamed the Jira/Linear mocks to jiraAuthed/linearAuthed (matching the new import), added a controllable useGitHubStatus mock (previously hardcoded to unconfigured) so GitHub's configured axis is also testable, added enabled-hook mocks for all five keys (default true) and a hideDisabled mock (default false), and replaced the single Jira-only decoupling test with a describe.each table over all five AvailabilityKeys × 4 cases each (unconfigured-hides-regardless, disabled-stays-visible-by-default, disabled-hidden-when-hideDisabled-on, enabled-stays-visible-when-hideDisabled-on).
  • Updated integrations-menu.test.ts: renamed its Jira/Linear mocks the same way (useJiraAvailable→useJiraAuthed, param names jiraAvailable/linearAvailable→jiraConfigured/linearConfigured), and added fixed enabled: true / hideDisabled: false stub mocks for the five new hooks useNavAvailability now transitively calls — this suite never exercises the decoupling itself (that's use-nav-availability.test.ts's job), so every existing assertion keeps passing unchanged.
  • Commands:
    • cd apps && pnpm --filter @kandev/web test -- hooks/use-nav-availability components/integrations/integrations-menu → Test Files 2 passed (2), Tests 20 passed (20) (26 after the later table-driven expansion — see below).
    • cd apps/web && pnpm run typecheck → one error caught and fixed (a leftover incorrect GitHubStatus stub shape in the rewritten test file — corrected to match the real type's fields), then clean.
    • Follow-up (post-review): expanded the single Jira-only decoupling test into the five-key describe.each table described above. Rerun: Test Files 1 passed (1), Tests 26 passed (26) for hooks/use-nav-availability alone.
  • Files changed: the three files listed under "Files likely touched".
  • Blockers/risks: none. Explicitly verified no other useJiraAvailable/ useLinearAvailable consumer was touched (see spec Out-of-scope).