// TaskEditView.jsx — Workspace task detail editor. // Uses the same Material icons + status overlays as the rest of the product // (MIcon + StatusOverlay are defined in Pipeline.jsx and exposed on window). const TEV_TREE = [ { id: 'g1', kind: 'folder', label: 'Component integration tests with real SignalR (3 of 3)', expanded: true, folderStatus: 'pulse-amber', children: [ { id: 't1', kind: 'Extension', label: 'Add broadcast-trigger helper method', overlay: 'check-green' }, { id: 't2', kind: 'Extension', label: 'Create SignalRIntegrationCompon...', overlay: 'check-green' }, { id: 't3', kind: 'Extension', label: 'Implement MergeQueuePanel SignalR tests', overlay: 'pulse-amber', selected: true }, { id: 't4', kind: 'Description', label: 'Update SignalR testing documentation', overlay: 'dot-blue' }, ], }, { id: 'g2', kind: 'folder', label: 'Git-based workflows', expanded: true, folderStatus: 'dot-purple', children: [ { id: 't5', kind: 'Extension', label: 'Add manual workflow refresh button', overlay: 'check-green' }, { id: 't6', kind: 'Extension', label: 'Build per-project workflow rollouts', overlay: 'dot-blue' }, { id: 't7', kind: 'Extension', label: 'Create webhook handler for workflows', overlay: 'pulse-amber' }, { id: 't8', kind: 'BugReport', label: 'Fix workflow file loader race', overlay: 'error-red' }, { id: 't9', kind: 'Extension', label: 'Implement workflow validation', overlay: 'dot-purple' }, { id: 't10', kind: 'Extension', label: 'Remove workflow create/update legacy', overlay: 'x-gray' }, { id: 't11', kind: 'Extension', label: 'Update workflow settings UI', overlay: 'dot-blue' }, ], }, { id: 'g3', kind: 'folder', label: 'Ideas', expanded: true, folderStatus: 'dot-blue', children: [ { id: 't13', kind: 'Extension', label: 'Feedback & Bug Report System', overlay: 'dot-purple' }, { id: 't14', kind: 'LocalOffer', label: 'Idea Inbox — rapid feature capture', overlay: 'dot-purple' }, { id: 't15', kind: 'Extension', label: 'Static Site Generation', overlay: 'dot-blue' }, { id: 't16', kind: 'Extension', label: 'Wizard Framework & New Project flow', overlay: 'pulse-amber' }, ], }, { id: 'g4', kind: 'folder', label: 'Infrastructure', expanded: true, folderStatus: 'check-green', children: [ { id: 'sg1', kind: 'folder', label: 'Activate Containerized Workflows', expanded: true, folderStatus: 'pulse-amber', children: [ { id: 't18', kind: 'Extension', label: 'Add runs_on to a workflow', overlay: 'check-green' }, ], }, ], }, ]; function TevTreeRow({ node, depth = 0 }) { const [expanded, setExpanded] = React.useState(node.expanded ?? false); const isFolder = node.kind === 'folder'; const isLeaf = !node.children; return ( <>
!isLeaf && setExpanded((x) => !x)} > {!isLeaf ? ( ) : ( )} {isFolder ? : } {node.overlay ? : null} {isFolder && node.folderStatus ? : null} {node.label}
{!isLeaf && expanded && (
{node.children.map((c) => ( ))}
)} ); } function TaskEditView({ embedded = false, initialTab = 'content' }) { const [mode, setMode] = React.useState('edit'); const [tab, setTab] = React.useState(initialTab); const [execOpen, setExecOpen] = React.useState(false); React.useEffect(() => { if (!execOpen) return; const onDoc = (e) => { if (!e.target.closest('.tev-exec-wrap')) setExecOpen(false); }; document.addEventListener('click', onDoc); return () => document.removeEventListener('click', onDoc); }, [execOpen]); return (
{!embedded && (
SourceWeaver / SourceWeaver / Component integration tests with real SignalR (3 of 3) / Implement MergeQueuePanel SignalR tests
)}
{tab === 'activity' ? (
) : (
Implement MergeQueuePanel SignalR tests
{execOpen && (
Workflows
+ Add workflow…
)}
# Implement MergeQueuePanel SignalR tests
## Overview
Create a proof-of-concept test class demonstrating real SignalR testing by covering MergeQueuePanel component scenarios. This validates the complete testing chain: render component → trigger server state change → verify broadcast-driven re-render within timeout.
## Technical Decisions
  • Target MergeQueuePanel component (chosen due to history of hub-driven refresh bugs)
  • Minimum 2 tests as specified
  • Use seeded queue state for test setup
  • Test state changes via endpoint triggers (enqueue/approve/retry operations)
  • All assertions must use bounded timeout pattern
## Scope
In scope:
  • New test class using SignalRIntegrationComponentTestBase
)}
); } Object.assign(window, { TaskEditView });