feat: add config for kanban columns
This commit is contained in:
@@ -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> {
|
||||
|
||||
Reference in New Issue
Block a user