diff --git a/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx b/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx index a449a853..06821c35 100644 --- a/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx +++ b/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx @@ -244,6 +244,7 @@ const DashboardCanvas: React.FC = ({ {/* Tether lines between branched cards */} ; viewCards: Record; browserCards: Record; @@ -66,6 +67,7 @@ interface DashboardCardLayerProps { } const DashboardCardLayer: React.FC = ({ + dashboardId, cards, viewCards, browserCards, @@ -270,6 +272,7 @@ const DashboardCardLayer: React.FC = ({ ))} {workflowsHub && ( }[] = [ ]; interface Props { + dashboardId: string; cardX: number; cardY: number; cardWidth: number; @@ -126,6 +127,7 @@ function TimeSavedBadge() { } const WorkflowsHubCard: React.FC = ({ + dashboardId, cardX, cardY, cardWidth, cardHeight, cardZOrder = 0, zoom = 1, panX = 0, panY = 0, isSelected = false, isHighlighted = false, multiDragDelta = null, @@ -138,6 +140,11 @@ const WorkflowsHubCard: React.FC = ({ const defaultModel = useAppSelector((s) => s.settings.data.default_model); useEffect(() => { dispatch(fetchPausedState()); }, [dispatch]); + // The hub is the signal "user is looking at workflows now", so load them + // eagerly here instead of waiting on the dashboard's deferred idle fetch + // (which left the calendar blank for ~2s). The thunk's !loading condition + // dedups against that idle dispatch. + useEffect(() => { dispatch(fetchWorkflows(dashboardId)); }, [dashboardId, dispatch]); const togglePaused = useCallback(() => { dispatch(setPausedAll(!paused));