From 863fd4f9c5f3f7881e29a0addade3df5fe694191 Mon Sep 17 00:00:00 2001 From: ciregenz Date: Tue, 16 Jun 2026 03:33:41 -0700 Subject: [PATCH] [eric] share: flush the dashboard layout before export so a just-added app/agent card isn't missed (debounced save was stale) --- .../pages/Dashboard/canvas/DashboardCanvas.tsx | 2 ++ .../pages/Dashboard/canvas/DashboardHeader.tsx | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx b/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx index 74d66f04..f15174f2 100644 --- a/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx +++ b/frontend/src/app/pages/Dashboard/canvas/DashboardCanvas.tsx @@ -180,6 +180,8 @@ const DashboardCanvas: React.FC = ({ cards={cards} viewCards={viewCards} browserCards={browserCards} + notes={notes} + expandedSessionIds={expandedSessionIds} outputs={outputs} dashboardId={dashboardId} canvasActions={canvas.actions} diff --git a/frontend/src/app/pages/Dashboard/canvas/DashboardHeader.tsx b/frontend/src/app/pages/Dashboard/canvas/DashboardHeader.tsx index e1ac5859..8bc684ea 100644 --- a/frontend/src/app/pages/Dashboard/canvas/DashboardHeader.tsx +++ b/frontend/src/app/pages/Dashboard/canvas/DashboardHeader.tsx @@ -6,10 +6,12 @@ import GridViewRoundedIcon from '@mui/icons-material/GridViewRounded'; import LanguageIcon from '@mui/icons-material/Language'; import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; import { useClaudeTokens } from '@/shared/styles/ThemeContext'; +import { useAppDispatch } from '@/shared/hooks'; import DashboardGlyph from './DashboardGlyph'; import ShareButton from '@/app/components/share/ShareButton'; import type { AgentSession } from '@/shared/state/agentsSlice'; -import type { CardPosition, ViewCardPosition, BrowserCardPosition } from '@/shared/state/dashboardLayoutSlice'; +import { saveLayout } from '@/shared/state/dashboardLayoutSlice'; +import type { CardPosition, ViewCardPosition, BrowserCardPosition, NotePosition } from '@/shared/state/dashboardLayoutSlice'; import type { Output } from '@/shared/state/outputsSlice'; import type { CanvasActions } from '../hooks/interaction/useCanvasControls'; import { friendlyStatusLabel } from '@/shared/statusLabel'; @@ -20,6 +22,8 @@ interface DashboardHeaderProps { cards: Record; viewCards: Record; browserCards: Record; + notes: Record; + expandedSessionIds: string[]; outputs: Record; dashboardId: string | undefined; canvasActions: CanvasActions; @@ -41,12 +45,15 @@ const DashboardHeader: React.FC = ({ cards, viewCards, browserCards, + notes, + expandedSessionIds, outputs, dashboardId, canvasActions, onHighlightCard, }) => { const c = useClaudeTokens(); + const dispatch = useAppDispatch(); const [expanded, setExpanded] = useState(false); const containerRef = useRef(null); @@ -158,6 +165,13 @@ const DashboardHeader: React.FC = ({ { + // Layout saves are debounced, so a just-added app/agent card may + // not be on disk yet. The export reads disk, flush the live + // layout now so Share captures the current board, not a stale one. + if (!dashboardId) return; + dispatch(saveLayout({ dashboardId, cards, viewCards, browserCards, notes, expandedSessionIds })); + }} /> )}