feat(FN-699): auto-expand steps for re-triaged tasks with existing progress

- Auto-expand step list on TaskCard when triage tasks have done/skipped steps
- Update existing triage test to use pending steps for fresh task scenario
- Add tests for re-triaged tasks with completed and skipped steps
This commit is contained in:
gsxdsm
2026-04-02 13:20:22 -07:00
parent b7afe8d55a
commit 3040868824
2 changed files with 57 additions and 3 deletions

View File

@@ -134,7 +134,10 @@ function TaskCardComponent({
const [editTitle, setEditTitle] = useState(task.title || "");
const [editDescription, setEditDescription] = useState(task.description || "");
const [isSaving, setIsSaving] = useState(false);
const [showSteps, setShowSteps] = useState(task.column === "in-progress");
const [showSteps, setShowSteps] = useState(
task.column === "in-progress" ||
(task.column === "triage" && task.steps.some(s => s.status === "done" || s.status === "skipped"))
);
const titleInputRef = useRef<HTMLInputElement>(null);
const descTextareaRef = useRef<HTMLTextAreaElement>(null);

View File

@@ -1653,11 +1653,11 @@ describe("TaskCard steps auto-expand", () => {
expect(toggle.getAttribute("aria-expanded")).toBe("true");
});
it("steps are collapsed by default for 'triage' column tasks", () => {
it("steps are collapsed by default for fresh 'triage' column tasks (no completed steps)", () => {
const task = makeTask({
column: "triage",
steps: [
{ name: "Step 1", status: "done" },
{ name: "Step 1", status: "pending" },
{ name: "Step 2", status: "pending" },
],
});
@@ -1679,6 +1679,57 @@ describe("TaskCard steps auto-expand", () => {
expect(toggle.getAttribute("aria-expanded")).toBe("false");
});
it("steps are auto-expanded for re-triaged tasks with completed steps", () => {
const task = makeTask({
column: "triage",
steps: [
{ name: "Step 1", status: "done" },
{ name: "Step 2", status: "pending" },
],
});
render(
<TaskCard
task={task}
onOpenDetail={vi.fn()}
addToast={noopToast}
/>
);
// Steps should be visible without clicking
expect(screen.getByText("Step 1")).toBeDefined();
expect(screen.getByText("Step 2")).toBeDefined();
// Toggle should show "Hide steps"
const toggle = screen.getByRole("button", { name: /Hide steps/i });
expect(toggle.getAttribute("aria-expanded")).toBe("true");
});
it("steps are auto-expanded for re-triaged tasks with skipped steps", () => {
const task = makeTask({
column: "triage",
steps: [
{ name: "Step 1", status: "skipped" },
{ name: "Step 2", status: "pending" },
],
});
render(
<TaskCard
task={task}
onOpenDetail={vi.fn()}
addToast={noopToast}
/>
);
// Steps should be visible without clicking
expect(screen.getByText("Step 1")).toBeDefined();
expect(screen.getByText("Step 2")).toBeDefined();
const toggle = screen.getByRole("button", { name: /Hide steps/i });
expect(toggle.getAttribute("aria-expanded")).toBe("true");
});
it("steps are collapsed by default for 'todo' column tasks", () => {
const task = makeTask({
column: "todo",