import * as vscode from "vscode"; import { listLocatedTasks } from "@/commands/listLocatedTasks"; import { resolveTaskLocations } from "@/commands/resolveTaskLocations"; import { TaskLocation } from "@/model/taskLocation"; import { IConfigProvider, ITaskRepository } from "@/ports"; import { TaskTreeItem } from "@/views/taskTreeItem"; import { TASK_SCOPE_LABELS, TASK_STATUS_LABELS } from "./taskLabels"; export type TaskRef = { id: string; location: TaskLocation; }; /** * Resolve task id + location from a TreeView item, or QuickPick when * the command is invoked from the Command Palette. */ export async function resolveTaskRef( repo: ITaskRepository, config: IConfigProvider, item?: unknown, ): Promise { if (item instanceof TaskTreeItem) { return { id: item.task.id, location: item.location }; } const locations = resolveTaskLocations(config); if (locations.length === 0) { return undefined; } const result = await listLocatedTasks(repo, locations); if (result.isErr() || result.value.length === 0) { void vscode.window.showInformationMessage("No tasks found"); return undefined; } const picked = await vscode.window.showQuickPick( result.value.map((located) => ({ label: located.task.title, description: `${TASK_SCOPE_LABELS[located.location.scope]} ยท ${TASK_STATUS_LABELS[located.task.status]}`, detail: located.task.priority, ref: { id: located.task.id, location: located.location, } satisfies TaskRef, })), { placeHolder: "Select a task" }, ); return picked?.ref; }