feat: add config for kanban columns

This commit is contained in:
2026-07-18 09:33:51 +05:00
parent f382632b2b
commit 1fbf020c80
9 changed files with 155 additions and 36 deletions
+26 -1
View File
@@ -11,9 +11,12 @@ import {
} from "@/kanban/messages";
import { KanbanOutboundMessage } from "@/kanban/outboundMessages";
import { appError, AppErrorVariant } from "@/error";
import { getProjectConfigPath } from "@/model/projectConfig";
import { LocatedTask, TaskLocation, TaskScope } from "@/model/taskLocation";
import { TaskStatus, TASK_STATUS_META, TASK_STATUS_ORDER } from "@/model/taskStatus";
import { IConfigProvider, ITaskRepository } from "@/ports";
import { IConfigProvider, IFileSystem, ITaskRepository } from "@/ports";
import { loadProjectConfig } from "@/commands/loadProjectConfig";
import { serializeProjectConfig } from "@/projectConfig/serializeProjectConfig";
import { presentError } from "@/ui/presentError";
import { TASK_SCOPE_LABELS } from "@/ui/taskLabels";
import { createKanbanNonce, getTaskKanbanHtml } from "./taskKanbanHtml";
@@ -21,6 +24,7 @@ import { createKanbanNonce, getTaskKanbanHtml } from "./taskKanbanHtml";
export type TaskKanbanDeps = {
repo: ITaskRepository;
config: IConfigProvider;
fs: IFileSystem;
onTasksMutated?: () => void;
};
@@ -85,6 +89,8 @@ export class TaskKanbanPanel {
async reloadTasks(): Promise<void> {
if (this.#disposed) return;
await this.#loadShownHiddenColumns();
const locations = resolveTaskLocations(this.#deps.config);
const result = await listLocatedTasks(this.#deps.repo, locations);
@@ -100,6 +106,24 @@ export class TaskKanbanPanel {
this.#postState();
}
async #loadShownHiddenColumns(): Promise<void> {
const folderPath = this.#deps.config.getProjectTaskPath();
const loaded = await loadProjectConfig(this.#deps.fs, folderPath);
if (loaded.isErr()) return;
this.#shownHiddenColumns = loaded.value.config.shownHiddenColumns as TaskStatus[];
}
async #saveShownHiddenColumns(): Promise<void> {
const folderPath = this.#deps.config.getProjectTaskPath();
if (!folderPath) return;
const loaded = await loadProjectConfig(this.#deps.fs, folderPath);
if (loaded.isErr()) return;
const config = { ...loaded.value.config, shownHiddenColumns: this.#shownHiddenColumns };
const content = serializeProjectConfig(config);
const path = getProjectConfigPath(folderPath);
await this.#deps.fs.writeFile(path, content);
}
async #onMessage(raw: unknown): Promise<void> {
const parsed = parseKanbanInboundMessage(raw);
if (parsed.isErr()) {
@@ -208,6 +232,7 @@ export class TaskKanbanPanel {
this.#shownHiddenColumns.push(status);
}
this.#postState();
void this.#saveShownHiddenColumns();
}
async #pickLocationForCreate(): Promise<TaskLocation | undefined> {