@burdenoff/microfe-bigconsole 2026.912.4 → 2026.916.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"useWidgetOperations.js","names":[],"sources":["../../../src/bigconsole/hooks/useWidgetOperations.ts"],"sourcesContent":["/**\n * useWidgetOperations Hook\n *\n * Provides CRUD operations for widgets using GraphQL.\n */\n\nimport { useCallback, useState, useMemo, useEffect } from 'react';\nimport { useApolloClient } from '@apollo/client/react';\nimport type {\n Widget,\n WidgetType,\n WidgetPosition,\n ResponsivePosition,\n ResponsivePositionInput,\n RendererType,\n} from '../types';\nimport { useWidgetStore } from '../store';\nimport { normalizeWidgetTypeForApi, mapFromFederationWidgetType } from '../utils/widgetTypeMapping';\nimport {\n ListWidgetsForPageDocument,\n ListWidgetsByDashboardDocument,\n CreateWidgetDocument,\n UpdateWidgetDocument,\n DeleteWidgetDocument,\n DuplicateWidgetDocument,\n BatchUpdateWidgetPositionsDocument,\n RefreshWidgetDataDocument,\n} from '../../generated/wspace-operations';\nimport { useBigConsoleAnalytics } from './useBigConsoleAnalytics';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface CreateWidgetInput {\n pageId: string;\n dashboardId?: string;\n type: WidgetType;\n title: string;\n description?: string;\n // v2.0: Renderer and template support\n renderer?: RendererType;\n template?: Record<string, unknown> | null;\n // v2.0: Data source fields (DataSink → Parser → Widget)\n dataSinkId?: string;\n datasetId?: string;\n parserId?: string;\n parserRules?: string;\n config?: Record<string, unknown>;\n // Fixed Grid Position (legacy v1.2)\n position: WidgetPosition;\n // Responsive Position (v1.0 spec)\n positionResponsive?: ResponsivePositionInput;\n rowOrder?: number;\n refreshInterval?: number;\n metadata?: Record<string, unknown>;\n}\n\ninterface UpdateWidgetInput {\n id: string;\n title?: string;\n description?: string;\n // v2.0: Renderer and template support\n renderer?: RendererType;\n template?: Record<string, unknown> | null;\n // v2.0: Data source fields (DataSink → Parser → Widget)\n dataSinkId?: string;\n datasetId?: string;\n parserId?: string;\n parserRules?: string;\n config?: Record<string, unknown>;\n // Fixed Grid Position (legacy v1.2)\n position?: WidgetPosition;\n // Responsive Position (v1.0 spec)\n positionResponsive?: ResponsivePositionInput;\n rowOrder?: number;\n refreshInterval?: number | null;\n cacheTTL?: number | null;\n metadata?: Record<string, unknown>;\n}\n\ninterface WidgetOperationsResult {\n // Query state\n loading: boolean;\n error: Error | null;\n widgets: Widget[];\n\n // Operations\n createWidget: (input: CreateWidgetInput) => Promise<Widget | null>;\n updateWidget: (input: UpdateWidgetInput) => Promise<Widget | null>;\n deleteWidget: (id: string) => Promise<boolean>;\n duplicateWidget: (id: string, newPosition?: WidgetPosition, newTitle?: string) => Promise<Widget | null>;\n batchUpdatePositions: (updates: Array<{ id: string; position: WidgetPosition }>) => Promise<boolean>;\n refreshWidgetData: (widgetId: string) => Promise<void>;\n refetch: () => Promise<void>;\n}\n\n// ============================================================================\n// Helper: Normalize widget from GraphQL response\n// ============================================================================\n\nfunction normalizeWidget(widget: Record<string, unknown>): Widget {\n const actions = widget.actions as unknown[] | undefined;\n const metadata = widget.metadata as Record<string, unknown> | undefined;\n const respPos = widget.positionResponsive as Record<string, unknown> | undefined;\n\n // Debug: Log raw widget from GraphQL\n\n // Fixed Grid Position (legacy v1.2)\n const position = (widget.position as WidgetPosition) || {\n x: (widget.positionX as number) ?? 0,\n y: (widget.positionY as number) ?? 0,\n width: (widget.positionWidth as number) ?? 4,\n height: (widget.positionHeight as number) ?? 4,\n };\n\n // Responsive Position (v1.0 spec)\n const positionResponsive: ResponsivePosition | null = respPos\n ? {\n xs: (respPos.xs as number) ?? 12,\n sm: (respPos.sm as number) ?? 6,\n md: (respPos.md as number) ?? 4,\n lg: (respPos.lg as number) ?? 3,\n // xl is optional; fall back to lg when absent (server has no xl tier yet)\n ...(respPos.xl !== undefined && respPos.xl !== null ? { xl: respPos.xl as number } : {}),\n }\n : null;\n\n // Read description from metadata if not directly available\n const description = (widget.description as string) || (metadata?.description as string) || '';\n\n // Get the config object\n const config = (widget.config as Record<string, unknown>) || {};\n\n // Check for stored internal widget type in config (preserves original type like 'gauge', 'progress', etc.)\n // This is needed because multiple internal types map to the same federation type (e.g., gauge -> KPI)\n const internalType = config._internalWidgetType as string | undefined;\n\n return {\n id: widget.id,\n pageId: widget.pageId || 'local',\n dashboardId: widget.dashboardId,\n // Use stored internal type if available, otherwise map from federation type\n type: internalType || mapFromFederationWidgetType((widget.type as string) || 'KPI'),\n title: widget.title || 'Untitled Widget',\n description: description,\n // v2.0: Renderer and template support\n renderer: widget.renderer || 'BIGCONSOLE',\n template: widget.template || null,\n // v2.0: Data source fields (DataSink → Parser → Widget)\n dataSinkId: widget.dataSinkId || null,\n datasetId: widget.datasetId || null,\n parserId: widget.parserId || null,\n parserRules: widget.parserRules || null,\n config: config,\n // Fixed Grid Position (legacy v1.2)\n position,\n positionX: position.x,\n positionY: position.y,\n positionWidth: position.width,\n positionHeight: position.height,\n // Responsive Position (v1.0 spec)\n positionResponsive,\n rowOrder: (widget.rowOrder as number | null) ?? null,\n refreshInterval: widget.refreshInterval,\n lastRefreshedAt: widget.lastRefreshedAt,\n cacheTTL: (widget.cacheTTL as number | null) ?? null,\n metadata: metadata,\n context: widget.context,\n drilldown: widget.drilldown,\n translations: widget.translations || [],\n // v2.0: Widget actions\n actions: actions || [],\n // Include widget data from backend\n data: widget.data || null,\n createdAt: widget.createdAt || new Date().toISOString(),\n updatedAt: widget.updatedAt || new Date().toISOString(),\n } as Widget;\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\ninterface UseWidgetOperationsOptions {\n /** Skip auto-fetching widgets on mount (use when parent already fetches) */\n skipFetch?: boolean;\n}\n\nexport function useWidgetOperations(\n pageId?: string,\n dashboardId?: string,\n options: UseWidgetOperationsOptions = {}\n): WidgetOperationsResult {\n const { skipFetch = false } = options;\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Get Apollo Client from context\n const apolloClient = useApolloClient();\n const emitBigConsoleEvent = useBigConsoleAnalytics();\n\n // Store actions\n const widgetsMap = useWidgetStore((state) => state.widgets);\n const setWidgets = useWidgetStore((state) => state.setWidgets);\n const addWidgetToStore = useWidgetStore((state) => state.addWidget);\n const updateWidgetInStore = useWidgetStore((state) => state.updateWidget);\n const removeWidgetFromStore = useWidgetStore((state) => state.removeWidget);\n\n // Get widgets array from store - memoized\n const widgets = useMemo(() => Array.from(widgetsMap.values()), [widgetsMap]);\n\n // Fetch widgets from backend\n const fetchWidgets = useCallback(async () => {\n if (!pageId && !dashboardId) {\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n\n if (dashboardId) {\n const result = await apolloClient.query<Record<string, unknown>>({\n query: ListWidgetsByDashboardDocument,\n variables: { dashboardId },\n fetchPolicy: 'network-only',\n });\n const widgetsList = (result.data?.listWidgetsByDashboard as Record<string, unknown>[]) || [];\n setWidgets(widgetsList.map(normalizeWidget));\n } else if (pageId) {\n const result = await apolloClient.query<Record<string, unknown>>({\n query: ListWidgetsForPageDocument,\n variables: { pageId },\n fetchPolicy: 'network-only',\n });\n const listResult = result.data?.listWidgets as Record<string, unknown> | undefined;\n const edges = (listResult?.edges as { node: Record<string, unknown> }[]) || [];\n const widgetsList = edges.map((edge: { node: Record<string, unknown> }) => edge.node);\n setWidgets(widgetsList.map(normalizeWidget));\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch widgets');\n setError(error);\n } finally {\n setLoading(false);\n }\n }, [apolloClient, pageId, dashboardId, setWidgets]);\n\n // Fetch on mount and when pageId/dashboardId changes (unless skipFetch is true)\n useEffect(() => {\n if (!skipFetch) {\n fetchWidgets();\n }\n }, [fetchWidgets, skipFetch]);\n\n // Create widget\n const createWidget = useCallback(\n async (input: CreateWidgetInput): Promise<Widget | null> => {\n try {\n setLoading(true);\n setError(null);\n\n // Build mutation input\n // Map internal widget type to federation-accessible type for API calls\n const federationType = normalizeWidgetTypeForApi(input.type);\n\n // Store the original internal widget type in config for proper restoration\n // This is needed because multiple internal types (gauge, progress, text, etc.)\n // map to the same federation type (KPI), but we need to preserve the original\n // type for correct widget rendering\n const configWithInternalType = {\n ...(input.config || {}),\n _internalWidgetType: input.type,\n };\n\n const mutationInput: Record<string, unknown> = {\n pageId: input.pageId,\n type: federationType,\n title: input.title,\n // v2.0: Renderer and template support\n renderer: input.renderer || 'BIGCONSOLE',\n template: input.template || null,\n // v2.0: Data source fields (DataSink → Parser → Widget)\n dataSinkId: input.dataSinkId,\n datasetId: input.datasetId,\n parserId: input.parserId,\n parserRules: input.parserRules,\n config: configWithInternalType,\n // Fixed Grid Position (legacy v1.2)\n position: {\n x: input.position.x,\n y: input.position.y,\n width: input.position.width,\n height: input.position.height,\n },\n refreshInterval: input.refreshInterval,\n metadata: input.metadata,\n };\n\n // Add Responsive Position if provided (v1.0 spec)\n if (input.positionResponsive) {\n mutationInput.positionResponsive = {\n xs: input.positionResponsive.xs ?? 12,\n sm: input.positionResponsive.sm ?? 6,\n md: input.positionResponsive.md ?? 4,\n lg: input.positionResponsive.lg ?? 3,\n };\n }\n\n // Add rowOrder if provided\n if (input.rowOrder !== undefined) {\n mutationInput.rowOrder = input.rowOrder;\n }\n\n emitBigConsoleEvent('bigconsole.widget.create_clicked', {\n dashboardId: input.dashboardId || dashboardId,\n pageId: input.pageId,\n widgetType: input.type,\n });\n\n const result = await apolloClient.mutate<Record<string, unknown>>({\n mutation: CreateWidgetDocument,\n variables: { input: mutationInput },\n });\n\n const createResult = result.data?.createBigConsoleWidget as Record<string, unknown> | undefined;\n if (createResult) {\n const newWidget = normalizeWidget(createResult);\n addWidgetToStore(newWidget);\n emitBigConsoleEvent('bigconsole.widget.created', {\n dashboardId: newWidget.dashboardId || input.dashboardId || dashboardId,\n pageId: newWidget.pageId,\n widgetId: newWidget.id,\n widgetType: newWidget.type,\n });\n return newWidget;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to create widget');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient, addWidgetToStore, dashboardId, emitBigConsoleEvent]\n );\n\n // Update widget\n const updateWidget = useCallback(\n async (input: UpdateWidgetInput): Promise<Widget | null> => {\n try {\n setLoading(true);\n setError(null);\n\n // Get latest widget from store (avoid stale closure)\n const currentWidgetsMap = useWidgetStore.getState().widgets;\n const existingWidget = currentWidgetsMap.get(input.id);\n if (!existingWidget) {\n throw new Error(`Widget not found: ${input.id}`);\n }\n\n const updateInput: Record<string, unknown> = { id: input.id };\n if (input.title !== undefined) updateInput.title = input.title;\n // v2.0: Renderer and template support\n if (input.renderer !== undefined) updateInput.renderer = input.renderer;\n if (input.template !== undefined) updateInput.template = input.template;\n // v2.0: Data source fields (DataSink → Parser → Widget)\n if (input.dataSinkId !== undefined) updateInput.dataSinkId = input.dataSinkId;\n if (input.datasetId !== undefined) updateInput.datasetId = input.datasetId;\n if (input.parserId !== undefined) updateInput.parserId = input.parserId;\n if (input.parserRules !== undefined) updateInput.parserRules = input.parserRules;\n if (input.config !== undefined) updateInput.config = input.config;\n if (input.refreshInterval !== undefined) updateInput.refreshInterval = input.refreshInterval;\n if (input.metadata !== undefined) updateInput.metadata = input.metadata;\n\n // Fixed Grid Position (legacy v1.2)\n if (input.position) {\n updateInput.position = {\n x: input.position.x,\n y: input.position.y,\n width: input.position.width,\n height: input.position.height,\n };\n }\n\n // Responsive Position (v1.0 spec)\n if (input.positionResponsive) {\n updateInput.positionResponsive = {\n xs: input.positionResponsive.xs,\n sm: input.positionResponsive.sm,\n md: input.positionResponsive.md,\n lg: input.positionResponsive.lg,\n };\n }\n\n // Row order\n if (input.rowOrder !== undefined) {\n updateInput.rowOrder = input.rowOrder;\n }\n\n const result = await apolloClient.mutate<Record<string, unknown>>({\n mutation: UpdateWidgetDocument,\n variables: { input: updateInput },\n });\n\n if (result.error) {\n throw result.error;\n }\n\n const updateResult = result.data?.updateBigConsoleWidget as Record<string, unknown> | undefined;\n if (updateResult) {\n const updatedWidget = normalizeWidget(updateResult);\n updateWidgetInStore(input.id, updatedWidget);\n return updatedWidget;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to update widget');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient, updateWidgetInStore]\n );\n\n // Delete widget\n const deleteWidget = useCallback(\n async (id: string): Promise<boolean> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<Record<string, unknown>>({\n mutation: DeleteWidgetDocument,\n variables: { id },\n });\n\n if (result.data?.deleteBigConsoleWidget) {\n removeWidgetFromStore(id);\n return true;\n }\n\n return false;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to delete widget');\n setError(error);\n return false;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient, removeWidgetFromStore]\n );\n\n // Duplicate widget\n const duplicateWidget = useCallback(\n async (id: string, newPosition?: WidgetPosition, newTitle?: string): Promise<Widget | null> => {\n try {\n setLoading(true);\n setError(null);\n\n // Get latest widget from store (avoid stale closure)\n const currentWidgetsMap = useWidgetStore.getState().widgets;\n const existingWidget = currentWidgetsMap.get(id);\n if (!existingWidget) {\n throw new Error(`Widget not found: ${id}`);\n }\n\n emitBigConsoleEvent('bigconsole.widget.duplicate_clicked', {\n dashboardId: existingWidget.dashboardId || dashboardId,\n pageId: existingWidget.pageId,\n sourceWidgetId: id,\n widgetType: existingWidget.type,\n });\n\n const result = await apolloClient.mutate<Record<string, unknown>>({\n mutation: DuplicateWidgetDocument,\n variables: {\n id,\n newPosition: newPosition\n ? {\n x: newPosition.x,\n y: newPosition.y,\n width: newPosition.width,\n height: newPosition.height,\n }\n : undefined,\n newTitle,\n },\n });\n\n if (result.error) {\n throw result.error;\n }\n\n const dupResult = result.data?.duplicateWidget as Record<string, unknown> | undefined;\n if (dupResult) {\n const duplicatedWidget = normalizeWidget(dupResult);\n addWidgetToStore(duplicatedWidget);\n emitBigConsoleEvent('bigconsole.widget.duplicated', {\n dashboardId: duplicatedWidget.dashboardId || existingWidget.dashboardId || dashboardId,\n pageId: duplicatedWidget.pageId,\n widgetId: duplicatedWidget.id,\n sourceWidgetId: id,\n widgetType: duplicatedWidget.type,\n });\n return duplicatedWidget;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to duplicate widget');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient, addWidgetToStore, dashboardId, emitBigConsoleEvent]\n );\n\n // Batch update positions\n const batchUpdatePositions = useCallback(\n async (updates: Array<{ id: string; position: WidgetPosition }>): Promise<boolean> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<Record<string, unknown>>({\n mutation: BatchUpdateWidgetPositionsDocument,\n variables: {\n updates: updates.map((u) => ({\n id: u.id,\n position: {\n x: u.position.x,\n y: u.position.y,\n width: u.position.width,\n height: u.position.height,\n },\n })),\n },\n });\n\n if (result.data?.batchUpdateWidgetPositions) {\n // Update local store with results\n updates.forEach((update) => {\n updateWidgetInStore(update.id, {\n position: update.position,\n positionX: update.position.x,\n positionY: update.position.y,\n positionWidth: update.position.width,\n positionHeight: update.position.height,\n updatedAt: new Date().toISOString(),\n });\n });\n return true;\n }\n\n return false;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to batch update positions');\n setError(error);\n return false;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient, updateWidgetInStore]\n );\n\n // Refresh widget data\n const refreshWidgetData = useCallback(\n async (widgetId: string): Promise<void> => {\n try {\n await apolloClient.mutate<Record<string, unknown>>({\n mutation: RefreshWidgetDataDocument,\n variables: { widgetId },\n });\n } catch (err) {}\n },\n [apolloClient]\n );\n\n // Refetch\n const refetch = useCallback(async (): Promise<void> => {\n await fetchWidgets();\n }, [fetchWidgets]);\n\n return {\n loading,\n error,\n widgets,\n createWidget,\n updateWidget,\n deleteWidget,\n duplicateWidget,\n batchUpdatePositions,\n refreshWidgetData,\n refetch,\n };\n}\n\nexport default useWidgetOperations;\n"],"mappings":"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"}
1
+ {"version":3,"file":"useWidgetOperations.js","names":[],"sources":["../../../src/bigconsole/hooks/useWidgetOperations.ts"],"sourcesContent":["/**\n * useWidgetOperations Hook\n *\n * Provides CRUD operations for widgets using GraphQL.\n */\n\nimport { useCallback, useState, useMemo, useEffect } from 'react';\nimport { useApolloClient } from '@apollo/client/react';\nimport type {\n Widget,\n WidgetType,\n WidgetPosition,\n ResponsivePosition,\n ResponsivePositionInput,\n RendererType,\n} from '../types';\nimport { useWidgetStore } from '../store';\nimport { normalizeWidgetTypeForApi, mapFromFederationWidgetType } from '../utils/widgetTypeMapping';\nimport {\n ListWidgetsForPageDocument,\n ListWidgetsByDashboardDocument,\n CreateWidgetDocument,\n UpdateWidgetDocument,\n DeleteWidgetDocument,\n DuplicateWidgetDocument,\n BatchUpdateWidgetPositionsDocument,\n RefreshWidgetDataDocument,\n} from '../../generated/wspace-operations';\nimport { useBigConsoleAnalytics } from './useBigConsoleAnalytics';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface CreateWidgetInput {\n pageId: string;\n dashboardId?: string;\n type: WidgetType;\n title: string;\n description?: string;\n // v2.0: Renderer and template support\n renderer?: RendererType;\n template?: Record<string, unknown> | null;\n // v2.0: Data source fields (DataSink → Parser → Widget)\n dataSinkId?: string;\n datasetId?: string;\n parserId?: string;\n parserRules?: string;\n config?: Record<string, unknown>;\n // Fixed Grid Position (legacy v1.2)\n position: WidgetPosition;\n // Responsive Position (v1.0 spec)\n positionResponsive?: ResponsivePositionInput;\n rowOrder?: number;\n refreshInterval?: number;\n metadata?: Record<string, unknown>;\n}\n\ninterface UpdateWidgetInput {\n id: string;\n title?: string;\n description?: string;\n // v2.0: Renderer and template support\n renderer?: RendererType;\n template?: Record<string, unknown> | null;\n // v2.0: Data source fields (DataSink → Parser → Widget)\n dataSinkId?: string;\n datasetId?: string;\n parserId?: string;\n parserRules?: string;\n config?: Record<string, unknown>;\n // Fixed Grid Position (legacy v1.2)\n position?: WidgetPosition;\n // Responsive Position (v1.0 spec)\n positionResponsive?: ResponsivePositionInput;\n rowOrder?: number;\n refreshInterval?: number | null;\n cacheTTL?: number | null;\n metadata?: Record<string, unknown>;\n}\n\ninterface WidgetOperationsResult {\n // Query state\n loading: boolean;\n error: Error | null;\n widgets: Widget[];\n\n // Operations\n createWidget: (input: CreateWidgetInput) => Promise<Widget | null>;\n updateWidget: (input: UpdateWidgetInput) => Promise<Widget | null>;\n deleteWidget: (id: string) => Promise<boolean>;\n duplicateWidget: (id: string, newPosition?: WidgetPosition, newTitle?: string) => Promise<Widget | null>;\n batchUpdatePositions: (updates: Array<{ id: string; position: WidgetPosition }>) => Promise<boolean>;\n refreshWidgetData: (widgetId: string) => Promise<void>;\n refetch: () => Promise<void>;\n}\n\n// ============================================================================\n// Helper: Normalize widget from GraphQL response\n// ============================================================================\n\n/**\n * Shape a raw GraphQL widget into the app's `Widget`.\n *\n * ★ Exported (BC0, BOFF-7333) so the AI preview can render widgets from its OWN\n * local state instead of going through this hook, which publishes into the\n * GLOBAL widget store. Opening the preview used to overwrite the widgets an\n * already-open dashboard was showing. Exporting the pure mapper keeps the two\n * paths on one normalisation rather than letting a copy drift.\n */\nexport function normalizeWidget(widget: Record<string, unknown>): Widget {\n const actions = widget.actions as unknown[] | undefined;\n const metadata = widget.metadata as Record<string, unknown> | undefined;\n const respPos = widget.positionResponsive as Record<string, unknown> | undefined;\n\n // Debug: Log raw widget from GraphQL\n\n // Fixed Grid Position (legacy v1.2)\n const position = (widget.position as WidgetPosition) || {\n x: (widget.positionX as number) ?? 0,\n y: (widget.positionY as number) ?? 0,\n width: (widget.positionWidth as number) ?? 4,\n height: (widget.positionHeight as number) ?? 4,\n };\n\n // Responsive Position (v1.0 spec)\n const positionResponsive: ResponsivePosition | null = respPos\n ? {\n xs: (respPos.xs as number) ?? 12,\n sm: (respPos.sm as number) ?? 6,\n md: (respPos.md as number) ?? 4,\n lg: (respPos.lg as number) ?? 3,\n // xl is optional; fall back to lg when absent (server has no xl tier yet)\n ...(respPos.xl !== undefined && respPos.xl !== null ? { xl: respPos.xl as number } : {}),\n }\n : null;\n\n // Read description from metadata if not directly available\n const description = (widget.description as string) || (metadata?.description as string) || '';\n\n // Get the config object\n const config = (widget.config as Record<string, unknown>) || {};\n\n // Check for stored internal widget type in config (preserves original type like 'gauge', 'progress', etc.)\n // This is needed because multiple internal types map to the same federation type (e.g., gauge -> KPI)\n const internalType = config._internalWidgetType as string | undefined;\n\n return {\n id: widget.id,\n pageId: widget.pageId || 'local',\n dashboardId: widget.dashboardId,\n // Use stored internal type if available, otherwise map from federation type\n type: internalType || mapFromFederationWidgetType((widget.type as string) || 'KPI'),\n title: widget.title || 'Untitled Widget',\n description: description,\n // v2.0: Renderer and template support\n renderer: widget.renderer || 'BIGCONSOLE',\n template: widget.template || null,\n // v2.0: Data source fields (DataSink → Parser → Widget)\n dataSinkId: widget.dataSinkId || null,\n datasetId: widget.datasetId || null,\n parserId: widget.parserId || null,\n parserRules: widget.parserRules || null,\n config: config,\n // Fixed Grid Position (legacy v1.2)\n position,\n positionX: position.x,\n positionY: position.y,\n positionWidth: position.width,\n positionHeight: position.height,\n // Responsive Position (v1.0 spec)\n positionResponsive,\n rowOrder: (widget.rowOrder as number | null) ?? null,\n refreshInterval: widget.refreshInterval,\n lastRefreshedAt: widget.lastRefreshedAt,\n cacheTTL: (widget.cacheTTL as number | null) ?? null,\n metadata: metadata,\n context: widget.context,\n drilldown: widget.drilldown,\n translations: widget.translations || [],\n // v2.0: Widget actions\n actions: actions || [],\n // Include widget data from backend\n data: widget.data || null,\n createdAt: widget.createdAt || new Date().toISOString(),\n updatedAt: widget.updatedAt || new Date().toISOString(),\n } as Widget;\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\ninterface UseWidgetOperationsOptions {\n /** Skip auto-fetching widgets on mount (use when parent already fetches) */\n skipFetch?: boolean;\n}\n\nexport function useWidgetOperations(\n pageId?: string,\n dashboardId?: string,\n options: UseWidgetOperationsOptions = {}\n): WidgetOperationsResult {\n const { skipFetch = false } = options;\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Get Apollo Client from context\n const apolloClient = useApolloClient();\n const emitBigConsoleEvent = useBigConsoleAnalytics();\n\n // Store actions\n const widgetsMap = useWidgetStore((state) => state.widgets);\n const setWidgets = useWidgetStore((state) => state.setWidgets);\n const addWidgetToStore = useWidgetStore((state) => state.addWidget);\n const updateWidgetInStore = useWidgetStore((state) => state.updateWidget);\n const removeWidgetFromStore = useWidgetStore((state) => state.removeWidget);\n\n // Get widgets array from store - memoized\n const widgets = useMemo(() => Array.from(widgetsMap.values()), [widgetsMap]);\n\n // Fetch widgets from backend\n const fetchWidgets = useCallback(async () => {\n if (!pageId && !dashboardId) {\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n\n if (dashboardId) {\n const result = await apolloClient.query<Record<string, unknown>>({\n query: ListWidgetsByDashboardDocument,\n variables: { dashboardId },\n fetchPolicy: 'network-only',\n });\n const widgetsList = (result.data?.listWidgetsByDashboard as Record<string, unknown>[]) || [];\n setWidgets(widgetsList.map(normalizeWidget));\n } else if (pageId) {\n const result = await apolloClient.query<Record<string, unknown>>({\n query: ListWidgetsForPageDocument,\n variables: { pageId },\n fetchPolicy: 'network-only',\n });\n const listResult = result.data?.listWidgets as Record<string, unknown> | undefined;\n const edges = (listResult?.edges as { node: Record<string, unknown> }[]) || [];\n const widgetsList = edges.map((edge: { node: Record<string, unknown> }) => edge.node);\n setWidgets(widgetsList.map(normalizeWidget));\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch widgets');\n setError(error);\n } finally {\n setLoading(false);\n }\n }, [apolloClient, pageId, dashboardId, setWidgets]);\n\n // Fetch on mount and when pageId/dashboardId changes (unless skipFetch is true)\n useEffect(() => {\n if (!skipFetch) {\n fetchWidgets();\n }\n }, [fetchWidgets, skipFetch]);\n\n // Create widget\n const createWidget = useCallback(\n async (input: CreateWidgetInput): Promise<Widget | null> => {\n try {\n setLoading(true);\n setError(null);\n\n // Build mutation input\n // Map internal widget type to federation-accessible type for API calls\n const federationType = normalizeWidgetTypeForApi(input.type);\n\n // Store the original internal widget type in config for proper restoration\n // This is needed because multiple internal types (gauge, progress, text, etc.)\n // map to the same federation type (KPI), but we need to preserve the original\n // type for correct widget rendering\n const configWithInternalType = {\n ...(input.config || {}),\n _internalWidgetType: input.type,\n };\n\n const mutationInput: Record<string, unknown> = {\n pageId: input.pageId,\n type: federationType,\n title: input.title,\n // v2.0: Renderer and template support\n renderer: input.renderer || 'BIGCONSOLE',\n template: input.template || null,\n // v2.0: Data source fields (DataSink → Parser → Widget)\n dataSinkId: input.dataSinkId,\n datasetId: input.datasetId,\n parserId: input.parserId,\n parserRules: input.parserRules,\n config: configWithInternalType,\n // Fixed Grid Position (legacy v1.2)\n position: {\n x: input.position.x,\n y: input.position.y,\n width: input.position.width,\n height: input.position.height,\n },\n refreshInterval: input.refreshInterval,\n metadata: input.metadata,\n };\n\n // Add Responsive Position if provided (v1.0 spec)\n if (input.positionResponsive) {\n mutationInput.positionResponsive = {\n xs: input.positionResponsive.xs ?? 12,\n sm: input.positionResponsive.sm ?? 6,\n md: input.positionResponsive.md ?? 4,\n lg: input.positionResponsive.lg ?? 3,\n };\n }\n\n // Add rowOrder if provided\n if (input.rowOrder !== undefined) {\n mutationInput.rowOrder = input.rowOrder;\n }\n\n emitBigConsoleEvent('bigconsole.widget.create_clicked', {\n dashboardId: input.dashboardId || dashboardId,\n pageId: input.pageId,\n widgetType: input.type,\n });\n\n const result = await apolloClient.mutate<Record<string, unknown>>({\n mutation: CreateWidgetDocument,\n variables: { input: mutationInput },\n });\n\n const createResult = result.data?.createBigConsoleWidget as Record<string, unknown> | undefined;\n if (createResult) {\n const newWidget = normalizeWidget(createResult);\n addWidgetToStore(newWidget);\n emitBigConsoleEvent('bigconsole.widget.created', {\n dashboardId: newWidget.dashboardId || input.dashboardId || dashboardId,\n pageId: newWidget.pageId,\n widgetId: newWidget.id,\n widgetType: newWidget.type,\n });\n return newWidget;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to create widget');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient, addWidgetToStore, dashboardId, emitBigConsoleEvent]\n );\n\n // Update widget\n const updateWidget = useCallback(\n async (input: UpdateWidgetInput): Promise<Widget | null> => {\n try {\n setLoading(true);\n setError(null);\n\n // Get latest widget from store (avoid stale closure)\n const currentWidgetsMap = useWidgetStore.getState().widgets;\n const existingWidget = currentWidgetsMap.get(input.id);\n if (!existingWidget) {\n throw new Error(`Widget not found: ${input.id}`);\n }\n\n const updateInput: Record<string, unknown> = { id: input.id };\n if (input.title !== undefined) updateInput.title = input.title;\n // v2.0: Renderer and template support\n if (input.renderer !== undefined) updateInput.renderer = input.renderer;\n if (input.template !== undefined) updateInput.template = input.template;\n // v2.0: Data source fields (DataSink → Parser → Widget)\n if (input.dataSinkId !== undefined) updateInput.dataSinkId = input.dataSinkId;\n if (input.datasetId !== undefined) updateInput.datasetId = input.datasetId;\n if (input.parserId !== undefined) updateInput.parserId = input.parserId;\n if (input.parserRules !== undefined) updateInput.parserRules = input.parserRules;\n if (input.config !== undefined) updateInput.config = input.config;\n if (input.refreshInterval !== undefined) updateInput.refreshInterval = input.refreshInterval;\n if (input.metadata !== undefined) updateInput.metadata = input.metadata;\n\n // Fixed Grid Position (legacy v1.2)\n if (input.position) {\n updateInput.position = {\n x: input.position.x,\n y: input.position.y,\n width: input.position.width,\n height: input.position.height,\n };\n }\n\n // Responsive Position (v1.0 spec)\n if (input.positionResponsive) {\n updateInput.positionResponsive = {\n xs: input.positionResponsive.xs,\n sm: input.positionResponsive.sm,\n md: input.positionResponsive.md,\n lg: input.positionResponsive.lg,\n };\n }\n\n // Row order\n if (input.rowOrder !== undefined) {\n updateInput.rowOrder = input.rowOrder;\n }\n\n const result = await apolloClient.mutate<Record<string, unknown>>({\n mutation: UpdateWidgetDocument,\n variables: { input: updateInput },\n });\n\n if (result.error) {\n throw result.error;\n }\n\n const updateResult = result.data?.updateBigConsoleWidget as Record<string, unknown> | undefined;\n if (updateResult) {\n const updatedWidget = normalizeWidget(updateResult);\n updateWidgetInStore(input.id, updatedWidget);\n return updatedWidget;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to update widget');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient, updateWidgetInStore]\n );\n\n // Delete widget\n const deleteWidget = useCallback(\n async (id: string): Promise<boolean> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<Record<string, unknown>>({\n mutation: DeleteWidgetDocument,\n variables: { id },\n });\n\n if (result.data?.deleteBigConsoleWidget) {\n removeWidgetFromStore(id);\n return true;\n }\n\n return false;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to delete widget');\n setError(error);\n return false;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient, removeWidgetFromStore]\n );\n\n // Duplicate widget\n const duplicateWidget = useCallback(\n async (id: string, newPosition?: WidgetPosition, newTitle?: string): Promise<Widget | null> => {\n try {\n setLoading(true);\n setError(null);\n\n // Get latest widget from store (avoid stale closure)\n const currentWidgetsMap = useWidgetStore.getState().widgets;\n const existingWidget = currentWidgetsMap.get(id);\n if (!existingWidget) {\n throw new Error(`Widget not found: ${id}`);\n }\n\n emitBigConsoleEvent('bigconsole.widget.duplicate_clicked', {\n dashboardId: existingWidget.dashboardId || dashboardId,\n pageId: existingWidget.pageId,\n sourceWidgetId: id,\n widgetType: existingWidget.type,\n });\n\n const result = await apolloClient.mutate<Record<string, unknown>>({\n mutation: DuplicateWidgetDocument,\n variables: {\n id,\n newPosition: newPosition\n ? {\n x: newPosition.x,\n y: newPosition.y,\n width: newPosition.width,\n height: newPosition.height,\n }\n : undefined,\n newTitle,\n },\n });\n\n if (result.error) {\n throw result.error;\n }\n\n const dupResult = result.data?.duplicateWidget as Record<string, unknown> | undefined;\n if (dupResult) {\n const duplicatedWidget = normalizeWidget(dupResult);\n addWidgetToStore(duplicatedWidget);\n emitBigConsoleEvent('bigconsole.widget.duplicated', {\n dashboardId: duplicatedWidget.dashboardId || existingWidget.dashboardId || dashboardId,\n pageId: duplicatedWidget.pageId,\n widgetId: duplicatedWidget.id,\n sourceWidgetId: id,\n widgetType: duplicatedWidget.type,\n });\n return duplicatedWidget;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to duplicate widget');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient, addWidgetToStore, dashboardId, emitBigConsoleEvent]\n );\n\n // Batch update positions\n const batchUpdatePositions = useCallback(\n async (updates: Array<{ id: string; position: WidgetPosition }>): Promise<boolean> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<Record<string, unknown>>({\n mutation: BatchUpdateWidgetPositionsDocument,\n variables: {\n updates: updates.map((u) => ({\n id: u.id,\n position: {\n x: u.position.x,\n y: u.position.y,\n width: u.position.width,\n height: u.position.height,\n },\n })),\n },\n });\n\n if (result.data?.batchUpdateWidgetPositions) {\n // Update local store with results\n updates.forEach((update) => {\n updateWidgetInStore(update.id, {\n position: update.position,\n positionX: update.position.x,\n positionY: update.position.y,\n positionWidth: update.position.width,\n positionHeight: update.position.height,\n updatedAt: new Date().toISOString(),\n });\n });\n return true;\n }\n\n return false;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to batch update positions');\n setError(error);\n return false;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient, updateWidgetInStore]\n );\n\n // Refresh widget data\n const refreshWidgetData = useCallback(\n async (widgetId: string): Promise<void> => {\n try {\n await apolloClient.mutate<Record<string, unknown>>({\n mutation: RefreshWidgetDataDocument,\n variables: { widgetId },\n });\n } catch (err) {}\n },\n [apolloClient]\n );\n\n // Refetch\n const refetch = useCallback(async (): Promise<void> => {\n await fetchWidgets();\n }, [fetchWidgets]);\n\n return {\n loading,\n error,\n widgets,\n createWidget,\n updateWidget,\n deleteWidget,\n duplicateWidget,\n batchUpdatePositions,\n refreshWidgetData,\n refetch,\n };\n}\n\nexport default useWidgetOperations;\n"],"mappings":"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"}
@@ -1853,6 +1853,17 @@ var ut = e`
1853
1853
  }
1854
1854
  }
1855
1855
  `, mt = e`
1856
+ query GetReusableAssistantSandbox($id: ID!, $context: ContextInput!) {
1857
+ getSandbox(id: $id, context: $context) {
1858
+ id
1859
+ name
1860
+ status
1861
+ metadata
1862
+ template
1863
+ createdBy
1864
+ }
1865
+ }
1866
+ `, ht = e`
1856
1867
  query GetActiveSandboxes($context: ContextInput!) {
1857
1868
  getActiveSandboxes(context: $context) {
1858
1869
  id
@@ -1863,7 +1874,7 @@ var ut = e`
1863
1874
  createdBy
1864
1875
  }
1865
1876
  }
1866
- `, ht = e`
1877
+ `, gt = e`
1867
1878
  mutation BatchUpdateWidgetPositions($updates: [WidgetPositionUpdateInput!]!) {
1868
1879
  batchUpdateWidgetPositions(updates: $updates) {
1869
1880
  id
@@ -1871,25 +1882,25 @@ var ut = e`
1871
1882
  updatedAt
1872
1883
  }
1873
1884
  }
1874
- `, gt = e`
1885
+ `, _t = e`
1875
1886
  mutation CreateEventWebhookMapping($input: CreateEventWebhookMappingInput!) {
1876
1887
  createEventWebhookMapping(input: $input) {
1877
1888
  ...EventWebhookMappingFields
1878
1889
  }
1879
1890
  }
1880
- ${D}`, _t = e`
1891
+ ${D}`, vt = e`
1881
1892
  mutation CreateWidget($input: BigConsoleCreateWidgetInput!) {
1882
1893
  createBigConsoleWidget(input: $input) {
1883
1894
  ...WidgetFullFields
1884
1895
  }
1885
1896
  }
1886
- ${P}`, vt = e`
1897
+ ${P}`, yt = e`
1887
1898
  mutation CreateWidgetAction($input: CreateWidgetActionInput!) {
1888
1899
  createWidgetAction(input: $input) {
1889
1900
  ...WidgetActionFields
1890
1901
  }
1891
1902
  }
1892
- ${N}`, yt = e`
1903
+ ${N}`, bt = e`
1893
1904
  mutation CreateWidgetDrilldown($sourceWidgetId: ID!, $targetDashboardId: ID!, $parameterMapping: JSON!, $navigationMode: NavigationMode = SAME_WINDOW) {
1894
1905
  createWidgetDrilldown(
1895
1906
  sourceWidgetId: $sourceWidgetId
@@ -1900,29 +1911,29 @@ var ut = e`
1900
1911
  ...WidgetDrilldownFields
1901
1912
  }
1902
1913
  }
1903
- ${A}`, bt = e`
1914
+ ${A}`, xt = e`
1904
1915
  mutation DeleteEventWebhookMapping($id: ID!) {
1905
1916
  deleteEventWebhookMapping(id: $id)
1906
1917
  }
1907
- `, xt = e`
1918
+ `, St = e`
1908
1919
  mutation DeleteWidget($id: ID!) {
1909
1920
  deleteBigConsoleWidget(id: $id)
1910
1921
  }
1911
- `, St = e`
1922
+ `, Ct = e`
1912
1923
  mutation DeleteWidgetAction($id: ID!) {
1913
1924
  deleteWidgetAction(id: $id)
1914
1925
  }
1915
- `, Ct = e`
1926
+ `, wt = e`
1916
1927
  mutation DeleteWidgetDrilldown($id: ID!) {
1917
1928
  deleteWidgetDrilldown(id: $id)
1918
1929
  }
1919
- `, wt = e`
1930
+ `, Tt = e`
1920
1931
  mutation DuplicateWidget($id: ID!, $newPosition: WidgetPositionInput, $newTitle: String) {
1921
1932
  duplicateWidget(id: $id, newPosition: $newPosition, newTitle: $newTitle) {
1922
1933
  ...WidgetFullFields
1923
1934
  }
1924
1935
  }
1925
- ${P}`, Tt = e`
1936
+ ${P}`, Et = e`
1926
1937
  mutation EmitWidgetEvent($input: EmitWidgetEventInput!) {
1927
1938
  emitWidgetEvent(input: $input) {
1928
1939
  ...EventLogFields
@@ -1940,26 +1951,26 @@ e`
1940
1951
  }
1941
1952
  }
1942
1953
  ${P}`;
1943
- var Et = e`
1954
+ var Dt = e`
1944
1955
  mutation RefreshWidgetData($widgetId: ID!) {
1945
1956
  refreshWidgetData(widgetId: $widgetId) {
1946
1957
  ...WidgetDataFields
1947
1958
  }
1948
1959
  }
1949
- ${M}`, Dt = e`
1960
+ ${M}`, Ot = e`
1950
1961
  mutation ReorderWidgetActions($widgetId: ID!, $actionIds: [ID!]!) {
1951
1962
  reorderWidgetActions(widgetId: $widgetId, actionIds: $actionIds) {
1952
1963
  id
1953
1964
  order
1954
1965
  }
1955
1966
  }
1956
- `, Ot = e`
1967
+ `, kt = e`
1957
1968
  mutation RetryEventDelivery($eventId: ID!) {
1958
1969
  retryEventDelivery(eventId: $eventId) {
1959
1970
  ...EventLogFields
1960
1971
  }
1961
1972
  }
1962
- ${E}`, kt = e`
1973
+ ${E}`, At = e`
1963
1974
  mutation TestWebhookMapping($id: ID!) {
1964
1975
  testWebhookMapping(id: $id) {
1965
1976
  success
@@ -1969,31 +1980,31 @@ var Et = e`
1969
1980
  latencyMs
1970
1981
  }
1971
1982
  }
1972
- `, At = e`
1983
+ `, jt = e`
1973
1984
  mutation ToggleEventWebhookMapping($id: ID!, $isActive: Boolean!) {
1974
1985
  toggleEventWebhookMapping(id: $id, isActive: $isActive) {
1975
1986
  ...EventWebhookMappingFields
1976
1987
  }
1977
1988
  }
1978
- ${D}`, jt = e`
1989
+ ${D}`, Mt = e`
1979
1990
  mutation UpdateEventWebhookMapping($id: ID!, $input: UpdateEventWebhookMappingInput!) {
1980
1991
  updateEventWebhookMapping(id: $id, input: $input) {
1981
1992
  ...EventWebhookMappingFields
1982
1993
  }
1983
1994
  }
1984
- ${D}`, Mt = e`
1995
+ ${D}`, Nt = e`
1985
1996
  mutation UpdateWidget($input: BigConsoleUpdateWidgetInput!) {
1986
1997
  updateBigConsoleWidget(input: $input) {
1987
1998
  ...WidgetFullFields
1988
1999
  }
1989
2000
  }
1990
- ${P}`, Nt = e`
2001
+ ${P}`, $ = e`
1991
2002
  mutation UpdateWidgetAction($input: UpdateWidgetActionInput!) {
1992
2003
  updateWidgetAction(input: $input) {
1993
2004
  ...WidgetActionFields
1994
2005
  }
1995
2006
  }
1996
- ${N}`, $ = e`
2007
+ ${N}`, Pt = e`
1997
2008
  mutation UpdateWidgetDrilldown($id: ID!, $targetDashboardId: ID, $parameterMapping: JSON, $navigationMode: NavigationMode, $enabled: Boolean) {
1998
2009
  updateWidgetDrilldown(
1999
2010
  id: $id
@@ -2032,19 +2043,19 @@ e`
2032
2043
  }
2033
2044
  }
2034
2045
  ${D}`;
2035
- var Pt = e`
2046
+ var Ft = e`
2036
2047
  query GetWidget($id: ID!) {
2037
2048
  getWidget(id: $id) {
2038
2049
  ...WidgetFullFields
2039
2050
  }
2040
2051
  }
2041
- ${P}`, Ft = e`
2052
+ ${P}`, It = e`
2042
2053
  query GetWidgetActions($widgetId: ID!) {
2043
2054
  getWidgetActions(widgetId: $widgetId) {
2044
2055
  ...WidgetActionFields
2045
2056
  }
2046
2057
  }
2047
- ${N}`, It = e`
2058
+ ${N}`, Lt = e`
2048
2059
  query GetWidgetTypes {
2049
2060
  getWidgetTypes {
2050
2061
  ...WidgetTypeInfoFields
@@ -2070,7 +2081,7 @@ e`
2070
2081
  ${A}
2071
2082
  ${j}
2072
2083
  ${M}`;
2073
- var Lt = e`
2084
+ var Rt = e`
2074
2085
  query ListEventLogs($dashboardId: ID, $widgetId: ID, $eventName: String, $status: EventStatus, $first: Int, $after: String) {
2075
2086
  listEventLogs(
2076
2087
  dashboardId: $dashboardId
@@ -2093,7 +2104,7 @@ var Lt = e`
2093
2104
  }
2094
2105
  }
2095
2106
  ${E}
2096
- ${O}`, Rt = e`
2107
+ ${O}`, zt = e`
2097
2108
  query ListEventWebhookMappings($dashboardId: ID, $widgetId: ID, $isActive: Boolean) {
2098
2109
  listEventWebhookMappings(
2099
2110
  dashboardId: $dashboardId
@@ -2121,13 +2132,13 @@ e`
2121
2132
  }
2122
2133
  ${I}
2123
2134
  ${O}`;
2124
- var zt = e`
2135
+ var Bt = e`
2125
2136
  query ListWidgetsByDashboard($dashboardId: ID!, $type: WidgetType) {
2126
2137
  listWidgetsByDashboard(dashboardId: $dashboardId, type: $type) {
2127
2138
  ...WidgetListFields
2128
2139
  }
2129
2140
  }
2130
- ${F}`, Bt = e`
2141
+ ${F}`, Vt = e`
2131
2142
  query ListWidgetsForPage($pageId: ID!, $type: WidgetType) {
2132
2143
  listWidgets(pageId: $pageId, type: $type, first: 100) {
2133
2144
  edges {
@@ -2138,29 +2149,29 @@ var zt = e`
2138
2149
  totalCount
2139
2150
  }
2140
2151
  }
2141
- ${F}`, Vt = e`
2152
+ ${F}`, Ht = e`
2142
2153
  mutation CreateWorkflow($input: CreateWorkflowInput!) {
2143
2154
  createWorkflow(input: $input) {
2144
2155
  ...WorkflowFullFields
2145
2156
  }
2146
2157
  }
2147
- ${B}`, Ht = e`
2158
+ ${B}`, Ut = e`
2148
2159
  mutation DeleteWorkflow($id: ID!) {
2149
2160
  deleteWorkflow(id: $id)
2150
2161
  }
2151
- `, Ut = e`
2162
+ `, Wt = e`
2152
2163
  mutation ExecuteWorkflow($id: ID!, $triggerData: JSON) {
2153
2164
  executeWorkflow(id: $id, triggerData: $triggerData) {
2154
2165
  ...WorkflowFullFields
2155
2166
  }
2156
2167
  }
2157
- ${B}`, Wt = e`
2168
+ ${B}`, Gt = e`
2158
2169
  mutation LinkDataSinkToWorkflow($workflowId: ID!, $input: LinkDataSinkInput!) {
2159
2170
  linkDataSinkToWorkflow(workflowId: $workflowId, input: $input) {
2160
2171
  ...DataSinkWorkflowLinkFields
2161
2172
  }
2162
2173
  }
2163
- ${z}`, Gt = e`
2174
+ ${z}`, Kt = e`
2164
2175
  mutation UnlinkDataSinkFromWorkflow($workflowId: ID!, $dataSinkId: ID!) {
2165
2176
  unlinkDataSinkFromWorkflow(workflowId: $workflowId, dataSinkId: $dataSinkId)
2166
2177
  }
@@ -2172,25 +2183,25 @@ e`
2172
2183
  }
2173
2184
  }
2174
2185
  ${z}`;
2175
- var Kt = e`
2186
+ var qt = e`
2176
2187
  mutation UpdateWorkflow($id: ID!, $input: UpdateWorkflowInput!, $version: Int!) {
2177
2188
  updateWorkflow(id: $id, input: $input, version: $version) {
2178
2189
  ...WorkflowFullFields
2179
2190
  }
2180
2191
  }
2181
- ${B}`, qt = e`
2192
+ ${B}`, Jt = e`
2182
2193
  query GetWorkflow($id: ID!) {
2183
2194
  workflow(id: $id) {
2184
2195
  ...WorkflowFullFields
2185
2196
  }
2186
2197
  }
2187
- ${B}`, Jt = e`
2198
+ ${B}`, Yt = e`
2188
2199
  query GetWorkflowByKey($key: String!) {
2189
2200
  workflowByKey(key: $key) {
2190
2201
  ...WorkflowFullFields
2191
2202
  }
2192
2203
  }
2193
- ${B}`, Yt = e`
2204
+ ${B}`, Xt = e`
2194
2205
  query ListWorkflows($filter: FluidGridsWorkflowFilterInput) {
2195
2206
  workflows(filter: $filter) {
2196
2207
  ...WorkflowListItem
@@ -2198,6 +2209,6 @@ var Kt = e`
2198
2209
  }
2199
2210
  ${V}`;
2200
2211
  //#endregion
2201
- export { Ie as BatchCreateDataSinksDocument, Le as BatchDeleteDataSinksDocument, ht as BatchUpdateWidgetPositionsDocument, Z as CloneDashboardDocument, Q as CreateDashboardDocument, ne as CreateDashboardEmbedPolicyDocument, re as CreateDashboardPageDocument, ie as CreateDashboardViewDocument, Re as CreateDataSinkDocument, gt as CreateEventWebhookMappingDocument, ae as CreateGlobalFilterDocument, Je as CreateParserDocument, tt as CreatePipelineDocument, ut as CreateSandboxDocument, vt as CreateWidgetActionDocument, _t as CreateWidgetDocument, yt as CreateWidgetDrilldownDocument, Vt as CreateWorkflowDocument, Ke as DataSinkDataUpdatedDocument, qe as DataSinkUpdatedDocument, oe as DeleteDashboardDocument, se as DeleteDashboardPageDocument, ce as DeleteDashboardViewDocument, ze as DeleteDataSinkDocument, bt as DeleteEventWebhookMappingDocument, le as DeleteGlobalFilterDocument, Ye as DeleteParserDocument, nt as DeletePipelineDocument, St as DeleteWidgetActionDocument, xt as DeleteWidgetDocument, Ct as DeleteWidgetDrilldownDocument, Ht as DeleteWorkflowDocument, wt as DuplicateWidgetDocument, Tt as EmitWidgetEventDocument, Xe as ExecuteParserDocument, rt as ExecutePipelineDocument, Ut as ExecuteWorkflowDocument, Ee as ExportDashboardDocument, ft as ExtendSandboxTtlDocument, mt as GetActiveSandboxesDocument, De as GetDashboardDocument, Oe as GetDashboardViewDocument, We as GetDataSinkDataDocument, Ue as GetDataSinkDocument, ke as GetDefaultDashboardViewDocument, Qe as GetParserDocument, ot as GetPipelineDocument, st as GetPipelineExecutionDocument, pt as GetSandboxDocument, Ft as GetWidgetActionsDocument, Pt as GetWidgetDocument, It as GetWidgetTypesDocument, Jt as GetWorkflowByKeyDocument, qt as GetWorkflowDocument, ue as ImportDashboardDocument, Be as InvalidateDataSinkCacheDocument, Wt as LinkDataSinkToWorkflowDocument, Ae as ListDashboardEmbedPoliciesDocument, je as ListDashboardSharesDocument, Me as ListDashboardViewsDocument, Ne as ListDashboardsDocument, Ge as ListDataSinksDocument, Lt as ListEventLogsDocument, Rt as ListEventWebhookMappingsDocument, $e as ListParsersDocument, ct as ListPipelineExecutionsDocument, lt as ListPipelinesDocument, Pe as ListSharedWithMeDocument, zt as ListWidgetsByDashboardDocument, Bt as ListWidgetsForPageDocument, Yt as ListWorkflowsDocument, dt as ProxySandboxRequestDocument, de as PublishDashboardEmbedPolicyDocument, Ve as RefreshDataSinkDocument, Et as RefreshWidgetDataDocument, fe as ReorderDashboardPagesDocument, pe as ReorderGlobalFiltersDocument, Dt as ReorderWidgetActionsDocument, Ot as RetryEventDeliveryDocument, me as RevokeAllSharesDocument, he as RevokeDashboardEmbedPolicyDocument, ge as RevokeDashboardShareDocument, _e as RotateDashboardEmbedPolicyDocument, ve as SetDefaultViewDocument, ye as ShareDashboardDocument, et as TestParserExpressionDocument, it as TestPipelineDocument, kt as TestWebhookMappingDocument, At as ToggleEventWebhookMappingDocument, Gt as UnlinkDataSinkFromWorkflowDocument, be as UpdateDashboardDocument, xe as UpdateDashboardEmbedPolicyDocument, Se as UpdateDashboardPageDocument, Ce as UpdateDashboardShareDocument, we as UpdateDashboardViewDocument, He as UpdateDataSinkDocument, jt as UpdateEventWebhookMappingDocument, Te as UpdateGlobalFilterDocument, Ze as UpdateParserDocument, at as UpdatePipelineDocument, Nt as UpdateWidgetActionDocument, Mt as UpdateWidgetDocument, $ as UpdateWidgetDrilldownDocument, Kt as UpdateWorkflowDocument, Fe as ValidateDashboardImportDocument, H as WorkspaceInstalledAppsDocument, W as useCreateEntityCommentMutation, K as useDeleteEntityCommentMutation, X as useGetEntityCommentsQuery, J as useResolveEntityCommentMutation };
2212
+ export { Ie as BatchCreateDataSinksDocument, Le as BatchDeleteDataSinksDocument, gt as BatchUpdateWidgetPositionsDocument, Z as CloneDashboardDocument, Q as CreateDashboardDocument, ne as CreateDashboardEmbedPolicyDocument, re as CreateDashboardPageDocument, ie as CreateDashboardViewDocument, Re as CreateDataSinkDocument, _t as CreateEventWebhookMappingDocument, ae as CreateGlobalFilterDocument, Je as CreateParserDocument, tt as CreatePipelineDocument, ut as CreateSandboxDocument, yt as CreateWidgetActionDocument, vt as CreateWidgetDocument, bt as CreateWidgetDrilldownDocument, Ht as CreateWorkflowDocument, Ke as DataSinkDataUpdatedDocument, qe as DataSinkUpdatedDocument, oe as DeleteDashboardDocument, se as DeleteDashboardPageDocument, ce as DeleteDashboardViewDocument, ze as DeleteDataSinkDocument, xt as DeleteEventWebhookMappingDocument, le as DeleteGlobalFilterDocument, Ye as DeleteParserDocument, nt as DeletePipelineDocument, Ct as DeleteWidgetActionDocument, St as DeleteWidgetDocument, wt as DeleteWidgetDrilldownDocument, Ut as DeleteWorkflowDocument, Tt as DuplicateWidgetDocument, Et as EmitWidgetEventDocument, Xe as ExecuteParserDocument, rt as ExecutePipelineDocument, Wt as ExecuteWorkflowDocument, Ee as ExportDashboardDocument, ft as ExtendSandboxTtlDocument, ht as GetActiveSandboxesDocument, De as GetDashboardDocument, Oe as GetDashboardViewDocument, We as GetDataSinkDataDocument, Ue as GetDataSinkDocument, ke as GetDefaultDashboardViewDocument, Qe as GetParserDocument, ot as GetPipelineDocument, st as GetPipelineExecutionDocument, mt as GetReusableAssistantSandboxDocument, pt as GetSandboxDocument, It as GetWidgetActionsDocument, Ft as GetWidgetDocument, Lt as GetWidgetTypesDocument, Yt as GetWorkflowByKeyDocument, Jt as GetWorkflowDocument, ue as ImportDashboardDocument, Be as InvalidateDataSinkCacheDocument, Gt as LinkDataSinkToWorkflowDocument, Ae as ListDashboardEmbedPoliciesDocument, je as ListDashboardSharesDocument, Me as ListDashboardViewsDocument, Ne as ListDashboardsDocument, Ge as ListDataSinksDocument, Rt as ListEventLogsDocument, zt as ListEventWebhookMappingsDocument, $e as ListParsersDocument, ct as ListPipelineExecutionsDocument, lt as ListPipelinesDocument, Pe as ListSharedWithMeDocument, Bt as ListWidgetsByDashboardDocument, Vt as ListWidgetsForPageDocument, Xt as ListWorkflowsDocument, dt as ProxySandboxRequestDocument, de as PublishDashboardEmbedPolicyDocument, Ve as RefreshDataSinkDocument, Dt as RefreshWidgetDataDocument, fe as ReorderDashboardPagesDocument, pe as ReorderGlobalFiltersDocument, Ot as ReorderWidgetActionsDocument, kt as RetryEventDeliveryDocument, me as RevokeAllSharesDocument, he as RevokeDashboardEmbedPolicyDocument, ge as RevokeDashboardShareDocument, _e as RotateDashboardEmbedPolicyDocument, ve as SetDefaultViewDocument, ye as ShareDashboardDocument, et as TestParserExpressionDocument, it as TestPipelineDocument, At as TestWebhookMappingDocument, jt as ToggleEventWebhookMappingDocument, Kt as UnlinkDataSinkFromWorkflowDocument, be as UpdateDashboardDocument, xe as UpdateDashboardEmbedPolicyDocument, Se as UpdateDashboardPageDocument, Ce as UpdateDashboardShareDocument, we as UpdateDashboardViewDocument, He as UpdateDataSinkDocument, Mt as UpdateEventWebhookMappingDocument, Te as UpdateGlobalFilterDocument, Ze as UpdateParserDocument, at as UpdatePipelineDocument, $ as UpdateWidgetActionDocument, Nt as UpdateWidgetDocument, Pt as UpdateWidgetDrilldownDocument, qt as UpdateWorkflowDocument, Fe as ValidateDashboardImportDocument, H as WorkspaceInstalledAppsDocument, W as useCreateEntityCommentMutation, K as useDeleteEntityCommentMutation, X as useGetEntityCommentsQuery, J as useResolveEntityCommentMutation };
2202
2213
 
2203
2214
  //# sourceMappingURL=wspace-operations.js.map