fix: skip unknown status and priority on edit

This commit is contained in:
2026-07-19 07:10:30 +05:00
parent 1382abc26d
commit ad982eb1cc
4 changed files with 26 additions and 6 deletions
+6 -1
View File
@@ -10,6 +10,11 @@ export type TaskPriority = (typeof TaskPriority)[keyof typeof TaskPriority];
export type TaskPriorityMeta = { export type TaskPriorityMeta = {
label: string; label: string;
/**
* Fallback value assigned when the parsed priority is invalid/missing.
* Excluded from editing choices.
*/
fallback?: boolean;
}; };
/** Explicit order for filters / grouping (critical → low → unknown). */ /** Explicit order for filters / grouping (critical → low → unknown). */
@@ -26,7 +31,7 @@ export const TASK_PRIORITY_META: Record<TaskPriority, TaskPriorityMeta> = {
[TaskPriority.HIGH]: { label: "High" }, [TaskPriority.HIGH]: { label: "High" },
[TaskPriority.MEDIUM]: { label: "Medium" }, [TaskPriority.MEDIUM]: { label: "Medium" },
[TaskPriority.LOW]: { label: "Low" }, [TaskPriority.LOW]: { label: "Low" },
[TaskPriority.UNKNOWN]: { label: "Unknown" }, [TaskPriority.UNKNOWN]: { label: "Unknown", fallback: true },
}; };
export function isTaskPriority(value: unknown): value is TaskPriority { export function isTaskPriority(value: unknown): value is TaskPriority {
+6
View File
@@ -15,6 +15,11 @@ export type TaskStatusMeta = {
defaultHidden: boolean; defaultHidden: boolean;
/** Codicon id for tree; adapters wrap in ThemeIcon. */ /** Codicon id for tree; adapters wrap in ThemeIcon. */
icon: string; icon: string;
/**
* Fallback value assigned when the parsed status is invalid/missing.
* Excluded from editing choices; hidden in tree when empty.
*/
fallback?: boolean;
}; };
/** Explicit display / column order (not Object.values). */ /** Explicit display / column order (not Object.values). */
@@ -57,6 +62,7 @@ export const TASK_STATUS_META: Record<TaskStatus, TaskStatusMeta> = {
label: "Unknown", label: "Unknown",
defaultHidden: true, defaultHidden: true,
icon: "question", icon: "question",
fallback: true,
}, },
}; };
+9 -3
View File
@@ -1,4 +1,3 @@
import * as vscode from "vscode";
import { addProjectTag } from "@/commands/addProjectTag"; import { addProjectTag } from "@/commands/addProjectTag";
import { loadProjectConfig } from "@/commands/loadProjectConfig"; import { loadProjectConfig } from "@/commands/loadProjectConfig";
import { resolveTaskLocations } from "@/commands/resolveTaskLocations"; import { resolveTaskLocations } from "@/commands/resolveTaskLocations";
@@ -16,13 +15,16 @@ import {
TASK_LANGUAGE_ID, TASK_LANGUAGE_ID,
} from "@/model/taskFile"; } from "@/model/taskFile";
import { IConfigProvider, IFileSystem } from "@/ports"; import { IConfigProvider, IFileSystem } from "@/ports";
import * as vscode from "vscode";
import { getGitUserName, yamlInlineScalar } from "./getGitUserName"; import { getGitUserName, yamlInlineScalar } from "./getGitUserName";
import { presentError } from "./presentError"; import { presentError } from "./presentError";
import { resolveTaskFolderForPath } from "./resolveTaskFolder"; import { resolveTaskFolderForPath } from "./resolveTaskFolder";
import { import {
TASK_PRIORITY_LABELS, TASK_PRIORITY_LABELS,
TASK_PRIORITY_META,
TASK_PRIORITY_ORDER, TASK_PRIORITY_ORDER,
TASK_STATUS_LABELS, TASK_STATUS_LABELS,
TASK_STATUS_META,
TASK_STATUS_ORDER, TASK_STATUS_ORDER,
} from "./taskLabels"; } from "./taskLabels";
@@ -115,7 +117,9 @@ export async function runEditTaskStatus(uriArg?: string): Promise<void> {
} }
const picked = await vscode.window.showQuickPick( const picked = await vscode.window.showQuickPick(
TASK_STATUS_ORDER.map((status) => ({ TASK_STATUS_ORDER.filter(
(status) => !TASK_STATUS_META[status].fallback,
).map((status) => ({
label: TASK_STATUS_LABELS[status], label: TASK_STATUS_LABELS[status],
description: status, description: status,
status, status,
@@ -137,7 +141,9 @@ export async function runEditTaskPriority(uriArg?: string): Promise<void> {
} }
const picked = await vscode.window.showQuickPick( const picked = await vscode.window.showQuickPick(
TASK_PRIORITY_ORDER.map((priority) => ({ TASK_PRIORITY_ORDER.filter(
(priority) => !TASK_PRIORITY_META[priority].fallback,
).map((priority) => ({
label: TASK_PRIORITY_LABELS[priority], label: TASK_PRIORITY_LABELS[priority],
description: priority, description: priority,
priority, priority,
+5 -2
View File
@@ -1,4 +1,3 @@
import * as vscode from "vscode";
import { listLocatedTasks } from "@/commands/listLocatedTasks"; import { listLocatedTasks } from "@/commands/listLocatedTasks";
import { resolveTaskLocations } from "@/commands/resolveTaskLocations"; import { resolveTaskLocations } from "@/commands/resolveTaskLocations";
import { Task } from "@/model/task"; import { Task } from "@/model/task";
@@ -10,6 +9,7 @@ import {
} from "@/model/taskStatus"; } from "@/model/taskStatus";
import { IConfigProvider, ITaskRepository } from "@/ports"; import { IConfigProvider, ITaskRepository } from "@/ports";
import { TASK_SCOPE_LABELS, TASK_STATUS_LABELS } from "@/ui/taskLabels"; import { TASK_SCOPE_LABELS, TASK_STATUS_LABELS } from "@/ui/taskLabels";
import * as vscode from "vscode";
import { TaskTreeItem } from "./taskTreeItem"; import { TaskTreeItem } from "./taskTreeItem";
class ScopeTreeItem extends vscode.TreeItem { class ScopeTreeItem extends vscode.TreeItem {
@@ -119,7 +119,10 @@ export class TaskTreeProvider implements vscode.TreeDataProvider<vscode.TreeItem
private getStatusGroups(scope: ScopeTreeItem): vscode.TreeItem[] { private getStatusGroups(scope: ScopeTreeItem): vscode.TreeItem[] {
const tasks = scope.locatedTasks.map((item) => item.task); const tasks = scope.locatedTasks.map((item) => item.task);
return TASK_STATUS_ORDER.map((status) => { return TASK_STATUS_ORDER.filter((status) => {
const groupTasks = tasks.filter((t) => t.status === status);
return !(groupTasks.length === 0 && TASK_STATUS_META[status].fallback);
}).map((status) => {
const groupTasks = tasks.filter((t) => t.status === status); const groupTasks = tasks.filter((t) => t.status === status);
return new TaskGroupTreeItem(status, scope.location, groupTasks); return new TaskGroupTreeItem(status, scope.location, groupTasks);
}); });