From dfb037edd8723b40b942f110fb00ceea77ee486b Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Tue, 9 Jun 2026 15:05:25 -0700 Subject: [PATCH] FN-6133: fix workflow toolbar toggle accessibility Replace the empty workflow toolbar icon toggle with an accessible text control. - move workflow toolbar collapse/expand handling into shared click and keyboard callbacks - make the expanded toolbar itself clickable while rendering a focusable "Workflow" label in collapsed mode - update toolbar styling and Board tests to cover keyboard toggling, single-workflow cases, and the absence of empty icon buttons Files changed: packages/dashboard/app/components/Board.tsx | 51 ++++++++--- packages/dashboard/app/components/Lane.css | 19 +++- .../app/components/__tests__/Board.test.tsx | 100 +++++++++++++++++++-- 3 files changed, 147 insertions(+), 23 deletions(-) Fusion-Task-Id: FN-6133 Fusion-Task-Lineage: 6dd217a0-ede0-424a-8ab7-cdde39d2b6ce --- packages/dashboard/app/components/Board.tsx | 51 +++++++-- packages/dashboard/app/components/Lane.css | 19 +++- .../app/components/__tests__/Board.test.tsx | 100 ++++++++++++++++-- 3 files changed, 147 insertions(+), 23 deletions(-) diff --git a/packages/dashboard/app/components/Board.tsx b/packages/dashboard/app/components/Board.tsx index 20df923307..9a2211a94c 100644 --- a/packages/dashboard/app/components/Board.tsx +++ b/packages/dashboard/app/components/Board.tsx @@ -4,7 +4,7 @@ import { sortTasksForDisplayColumn } from "./taskSorting"; import { Column } from "./Column"; import "./Lane.css"; import type { ToastType } from "../hooks/useToast"; -import { useState, useMemo, useEffect, useCallback, useRef } from "react"; +import { useState, useMemo, useEffect, useCallback, useRef, type KeyboardEvent, type MouseEvent } from "react"; import { Pencil, Plus } from "lucide-react"; import { fetchWorkflowSteps, fetchBoardWorkflows, promoteTask, type ModelInfo, type BoardWorkflowDefinition, type BoardWorkflowsPayload } from "../api"; import { useBlockerFanout } from "../hooks/useBlockerFanout"; @@ -117,6 +117,23 @@ export function Board({ tasks, projectId, maxConcurrent, onMoveTask, onPauseTask } }, [workflowToolbarCollapsed, projectId]); + const toggleWorkflowToolbarCollapsed = useCallback(() => { + setWorkflowToolbarCollapsed((collapsed) => !collapsed); + }, []); + + const handleWorkflowToolbarKeyDown = useCallback((event: KeyboardEvent) => { + if (event.key === "Enter" || event.key === " ") { + event.preventDefault(); + toggleWorkflowToolbarCollapsed(); + } + }, [toggleWorkflowToolbarCollapsed]); + + const handleExpandedWorkflowToolbarClick = useCallback((event: MouseEvent) => { + if (event.target === event.currentTarget) { + toggleWorkflowToolbarCollapsed(); + } + }, [toggleWorkflowToolbarCollapsed]); + useEffect(() => { recordResumeEvent({ view: "Board", @@ -473,17 +490,29 @@ export function Board({ tasks, projectId, maxConcurrent, onMoveTask, onPauseTask return (
{(workflowOptions.length > 1 || onCreateWorkflow || onOpenWorkflowEditor) && ( -
-