diff --git a/src/kanban/filterDefaultHiddenStatuses.test.ts b/src/kanban/filterDefaultHiddenStatuses.test.ts new file mode 100644 index 0000000..aca9592 --- /dev/null +++ b/src/kanban/filterDefaultHiddenStatuses.test.ts @@ -0,0 +1,20 @@ +import { describe, expect, it } from "vitest"; +import { TaskStatus } from "@/model/taskStatus"; +import { filterDefaultHiddenStatuses } from "./filterDefaultHiddenStatuses"; + +describe("filterDefaultHiddenStatuses", () => { + it("excludes unknown when no unknown tasks and column not shown", () => { + const result = filterDefaultHiddenStatuses(false, []); + expect(result).not.toContain(TaskStatus.UNKNOWN); + }); + + it("includes unknown when unknown tasks exist", () => { + const result = filterDefaultHiddenStatuses(true, []); + expect(result).toContain(TaskStatus.UNKNOWN); + }); + + it("includes unknown when column is shown even without unknown tasks", () => { + const result = filterDefaultHiddenStatuses(false, [TaskStatus.UNKNOWN]); + expect(result).toContain(TaskStatus.UNKNOWN); + }); +}); diff --git a/src/kanban/filterDefaultHiddenStatuses.ts b/src/kanban/filterDefaultHiddenStatuses.ts new file mode 100644 index 0000000..9554bc0 --- /dev/null +++ b/src/kanban/filterDefaultHiddenStatuses.ts @@ -0,0 +1,16 @@ +import { + TaskStatus, + TASK_STATUS_META, + TASK_STATUS_ORDER, +} from "@/model/taskStatus"; + +export function filterDefaultHiddenStatuses( + hasUnknown: boolean, + shownHiddenColumns: TaskStatus[], +): TaskStatus[] { + return TASK_STATUS_ORDER.filter( + (s) => + TASK_STATUS_META[s].defaultHidden && + (s !== TaskStatus.UNKNOWN || hasUnknown || shownHiddenColumns.includes(TaskStatus.UNKNOWN)), + ); +} diff --git a/src/views/taskKanbanPanel.ts b/src/views/taskKanbanPanel.ts index ccd3c57..e87f3ba 100644 --- a/src/views/taskKanbanPanel.ts +++ b/src/views/taskKanbanPanel.ts @@ -4,6 +4,7 @@ import { listLocatedTasks } from "@/commands/listLocatedTasks"; import { resolveTaskLocations } from "@/commands/resolveTaskLocations"; import { appError, AppErrorVariant } from "@/error"; import { buildKanbanBoard } from "@/kanban/buildKanbanBoard"; +import { filterDefaultHiddenStatuses } from "@/kanban/filterDefaultHiddenStatuses"; import { parseKanbanInboundMessage, type KanbanInboundMessage, @@ -290,10 +291,9 @@ export class TaskKanbanPanel { board, scopeFilter: this.#scopeFilter, shownHiddenColumns: this.#shownHiddenColumns, - defaultHiddenStatuses: TASK_STATUS_ORDER.filter( - (s) => - TASK_STATUS_META[s].defaultHidden && - (s !== TaskStatus.UNKNOWN || hasUnknown), + defaultHiddenStatuses: filterDefaultHiddenStatuses( + hasUnknown, + this.#shownHiddenColumns, ), availableScopes: this.#availableScopes(), dangerStatuses: hasUnknown ? [TaskStatus.UNKNOWN] : [],