@burdenoff/microfe-bigconsole 2026.924.2 → 2026.925.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.
Files changed (134) hide show
  1. package/dist/bigconsole/BigConsoleRoot.js +94 -84
  2. package/dist/bigconsole/BigConsoleRoot.js.map +1 -1
  3. package/dist/bigconsole/BigConsoleRoutes.js +137 -138
  4. package/dist/bigconsole/BigConsoleRoutes.js.map +1 -1
  5. package/dist/bigconsole/assistant/previewController.js +7 -7
  6. package/dist/bigconsole/components/DrilldownDashboardRenderer.js +17 -17
  7. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +32 -32
  8. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +52 -52
  9. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
  10. package/dist/bigconsole/components/dashboard/DashboardCanvas.js +7 -7
  11. package/dist/bigconsole/components/dashboard/DashboardStatusPill.js +53 -0
  12. package/dist/bigconsole/components/dashboard/DashboardStatusPill.js.map +1 -0
  13. package/dist/bigconsole/components/dashboard/DashboardToolbar.js +60 -60
  14. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +21 -21
  15. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +30 -30
  16. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +36 -36
  17. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +34 -34
  18. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +38 -38
  19. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
  20. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +121 -121
  21. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
  22. package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js +22 -22
  23. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +46 -46
  24. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js +53 -53
  25. package/dist/bigconsole/components/dashboard/TemplatePicker/TemplatePicker.js +1 -1
  26. package/dist/bigconsole/components/dashboard/WidgetPalette.js +47 -47
  27. package/dist/bigconsole/components/dashboard/index.js +1 -0
  28. package/dist/bigconsole/components/datasink/CacheTTLSelector.js +35 -35
  29. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +18 -18
  30. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +20 -20
  31. package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js +30 -29
  32. package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js.map +1 -1
  33. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js +48 -48
  34. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +126 -114
  35. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
  36. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +35 -35
  37. package/dist/bigconsole/components/overview/DashboardGuide.js +214 -0
  38. package/dist/bigconsole/components/overview/DashboardGuide.js.map +1 -0
  39. package/dist/bigconsole/components/overview/DataHealthCard.js +97 -0
  40. package/dist/bigconsole/components/overview/DataHealthCard.js.map +1 -0
  41. package/dist/bigconsole/components/overview/OverviewQuickActions.js +32 -0
  42. package/dist/bigconsole/components/overview/OverviewQuickActions.js.map +1 -0
  43. package/dist/bigconsole/components/overview/OverviewStatCard.js +57 -0
  44. package/dist/bigconsole/components/overview/OverviewStatCard.js.map +1 -0
  45. package/dist/bigconsole/components/overview/RecentDashboardsPanel.js +107 -0
  46. package/dist/bigconsole/components/overview/RecentDashboardsPanel.js.map +1 -0
  47. package/dist/bigconsole/components/overview/dashboardGuideSteps.js +119 -0
  48. package/dist/bigconsole/components/overview/dashboardGuideSteps.js.map +1 -0
  49. package/dist/bigconsole/components/overview/index.js +8 -0
  50. package/dist/bigconsole/components/overview/overviewModel.js +119 -0
  51. package/dist/bigconsole/components/overview/overviewModel.js.map +1 -0
  52. package/dist/bigconsole/components/overview/useOverviewData.js +48 -0
  53. package/dist/bigconsole/components/overview/useOverviewData.js.map +1 -0
  54. package/dist/bigconsole/components/parser/DataSinkSelector.js +40 -40
  55. package/dist/bigconsole/components/parser/ImportParserDialog.js +127 -127
  56. package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
  57. package/dist/bigconsole/components/parser/ParserSelector.js +51 -51
  58. package/dist/bigconsole/components/preview/AiPreviewContent.js +5 -5
  59. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +32 -32
  60. package/dist/bigconsole/components/preview/AiPreviewPanel.js +37 -37
  61. package/dist/bigconsole/components/widgets/ActionConfigDialog.js +13 -13
  62. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +70 -70
  63. package/dist/bigconsole/components/widgets/PropertiesPanel.js +28 -28
  64. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +25 -25
  65. package/dist/bigconsole/components/widgets/chart/ChartConfig.js +48 -48
  66. package/dist/bigconsole/components/widgets/comments/WidgetComments.js +46 -46
  67. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +61 -61
  68. package/dist/bigconsole/components/widgets/form/FormWidget.js +36 -36
  69. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +42 -42
  70. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +25 -25
  71. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +21 -21
  72. package/dist/bigconsole/components/widgets/list/ListConfig.js +30 -30
  73. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +38 -38
  74. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +9 -9
  75. package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js +9 -9
  76. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +49 -49
  77. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +39 -39
  78. package/dist/bigconsole/components/widgets/table/TableConfig.js +73 -73
  79. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +64 -64
  80. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +10 -10
  81. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +68 -68
  82. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
  83. package/dist/bigconsole/hooks/useDataSinkOperations.js +92 -89
  84. package/dist/bigconsole/hooks/useDataSinkOperations.js.map +1 -1
  85. package/dist/bigconsole/hooks/useImportDataSink.js +96 -91
  86. package/dist/bigconsole/hooks/useImportDataSink.js.map +1 -1
  87. package/dist/bigconsole/pages/AdminPage.js +136 -136
  88. package/dist/bigconsole/pages/DashboardBuilderPage.js +10 -10
  89. package/dist/bigconsole/pages/DashboardViewPage.js +61 -61
  90. package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
  91. package/dist/bigconsole/pages/DashboardsPage.js +327 -348
  92. package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
  93. package/dist/bigconsole/pages/DataParsersPage.js +5 -5
  94. package/dist/bigconsole/pages/DataSinkBuilderPage.js +82 -80
  95. package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
  96. package/dist/bigconsole/pages/DataSinkViewPage.js +83 -83
  97. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  98. package/dist/bigconsole/pages/DataSinksPage.js +11 -11
  99. package/dist/bigconsole/pages/DataSourcesPage.js +5 -5
  100. package/dist/bigconsole/pages/InsightsPage.js +315 -315
  101. package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
  102. package/dist/bigconsole/pages/OverviewPage.js +244 -0
  103. package/dist/bigconsole/pages/OverviewPage.js.map +1 -0
  104. package/dist/bigconsole/pages/ParserBuilderPage.js +5 -5
  105. package/dist/bigconsole/pages/ParserViewPage.js +98 -98
  106. package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
  107. package/dist/bigconsole/pages/PipelineBuilderPage.js +8 -8
  108. package/dist/bigconsole/pages/PipelineViewPage.js +46 -46
  109. package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
  110. package/dist/bigconsole/pages/PipelinesPage.js +80 -80
  111. package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
  112. package/dist/bigconsole/pages/SettingsPage.js +70 -70
  113. package/dist/bigconsole/pages/WidgetDemoPage.js +42 -42
  114. package/dist/bigconsole/pages/WorkflowViewPage.js +200 -200
  115. package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
  116. package/dist/bigconsole/pages/WorkflowsPage.js +78 -78
  117. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  118. package/dist/bigconsole/providers/BigConsoleQuotaProvider.js +36 -35
  119. package/dist/bigconsole/providers/BigConsoleQuotaProvider.js.map +1 -1
  120. package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js +34 -34
  121. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js +79 -79
  122. package/dist/bigconsole/renderers/adapters/CustomRenderer.js +46 -46
  123. package/dist/bigconsole/utils/createDialogParam.js +14 -0
  124. package/dist/bigconsole/utils/createDialogParam.js.map +1 -0
  125. package/dist/bigconsole/utils/quota.js +51 -23
  126. package/dist/bigconsole/utils/quota.js.map +1 -1
  127. package/dist/generated/global-operations.js +1 -1
  128. package/dist/generated/wspace-operations.js +285 -222
  129. package/dist/generated/wspace-operations.js.map +1 -1
  130. package/dist/shared/hooks/useTr.js +10 -7
  131. package/dist/shared/hooks/useTr.js.map +1 -1
  132. package/package.json +1 -1
  133. package/dist/bigconsole/pages/HomePage.js +0 -318
  134. package/dist/bigconsole/pages/HomePage.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overviewModel.js","names":[],"sources":["../../../../src/bigconsole/components/overview/overviewModel.ts"],"sourcesContent":["/**\n * Overview model — pure data shaping for the BigConsole Overview page.\n *\n * No React, no Apollo: everything here takes the GraphQL `data` shapes (or\n * `undefined` while a section is loading / not permitted) and returns what the\n * page renders. Structural input types keep this module independent of the\n * generated operation types so it is unit-testable without codegen.\n */\n\nimport type { DashboardListStatus } from '../../hooks/useDashboardOperations';\n\n// ============================================================================\n// Limits\n// ============================================================================\n\n/** Recent dashboards requested for the emphasis panel. */\nexport const RECENT_DASHBOARDS_LIMIT = 5;\n\n/** Errored / stale sinks requested per status for the data health card. */\nexport const DATA_HEALTH_ROW_LIMIT = 5;\n\n// ============================================================================\n// Input shapes (structural subsets of the generated query types)\n// ============================================================================\n\nexport interface OverviewDashboardNode {\n id: string;\n name: string;\n description?: string | null;\n status: string;\n widgetCount: number;\n updatedAt: string;\n}\n\nexport interface OverviewDashboardsData {\n listDashboards: {\n totalCount: number;\n edges: Array<{ node: OverviewDashboardNode }>;\n };\n}\n\nexport interface OverviewDataSinkNode {\n id: string;\n name?: string | null;\n key: string;\n lastRefreshedAt?: string | null;\n}\n\ninterface CountOnlyConnection {\n totalCount: number;\n}\n\ninterface DataSinkNodeConnection extends CountOnlyConnection {\n edges: Array<{ node: OverviewDataSinkNode }>;\n}\n\nexport interface OverviewDataSinksData {\n all: CountOnlyConnection;\n ready: CountOnlyConnection;\n errored: DataSinkNodeConnection;\n stale: DataSinkNodeConnection;\n}\n\n// ============================================================================\n// Dashboards\n// ============================================================================\n\nexport interface RecentDashboard {\n id: string;\n name: string;\n description: string | null;\n status: DashboardListStatus;\n widgetCount: number;\n updatedAt: string;\n}\n\nexport interface DashboardsSummary {\n /** Total dashboards the caller can read; `undefined` until loaded. */\n total: number | undefined;\n /** Most recently updated dashboards, newest first. */\n recent: RecentDashboard[];\n /** The dashboard the guide deep-links into (newest), if any. */\n latest: RecentDashboard | null;\n}\n\n/** Normalise the API enum to the list-status union the UI renders. */\nexport function toDashboardListStatus(status: string | null | undefined): DashboardListStatus {\n switch (status) {\n case 'PUBLISHED':\n return 'PUBLISHED';\n case 'ARCHIVED':\n return 'ARCHIVED';\n default:\n return 'DRAFT';\n }\n}\n\nexport function summarizeDashboards(data: OverviewDashboardsData | null | undefined): DashboardsSummary {\n if (!data) {\n return { total: undefined, recent: [], latest: null };\n }\n\n const recent = data.listDashboards.edges.slice(0, RECENT_DASHBOARDS_LIMIT).map(({ node }) => ({\n id: node.id,\n name: node.name,\n description: node.description?.trim() ? node.description.trim() : null,\n status: toDashboardListStatus(node.status),\n widgetCount: Math.max(0, node.widgetCount ?? 0),\n updatedAt: node.updatedAt,\n }));\n\n return {\n total: data.listDashboards.totalCount,\n recent,\n latest: recent[0] ?? null,\n };\n}\n\n// ============================================================================\n// Data sinks\n// ============================================================================\n\nexport type DataSinkAttentionStatus = 'error' | 'stale';\n\nexport interface DataSinkHealthRow {\n id: string;\n /** Display name — the sink name, or its key when the name is empty. */\n name: string;\n status: DataSinkAttentionStatus;\n lastRefreshedAt: string | null;\n}\n\nexport interface DataSinkSummary {\n /** Total data sinks; `undefined` until loaded. */\n total: number | undefined;\n /** Sinks in the `ready` state; `undefined` until loaded. */\n ready: number | undefined;\n /** Errored + stale sinks; `undefined` until loaded. */\n attentionCount: number | undefined;\n /**\n * Rows for the health card: errored sinks, then stale ones. Each status\n * contributes at most `limit` sinks in server order (by key); within a\n * status the rows are shown oldest refresh first.\n */\n rows: DataSinkHealthRow[];\n /** Sinks needing attention that are not listed in `rows`. */\n hiddenCount: number;\n}\n\nfunction toTimestamp(value: string | null): number {\n if (!value) return Number.NEGATIVE_INFINITY;\n const parsed = Date.parse(value);\n return Number.isNaN(parsed) ? Number.NEGATIVE_INFINITY : parsed;\n}\n\nfunction toHealthRows(connection: DataSinkNodeConnection, status: DataSinkAttentionStatus): DataSinkHealthRow[] {\n return connection.edges\n .map(({ node }) => ({\n id: node.id,\n name: node.name?.trim() ? node.name.trim() : node.key,\n status,\n lastRefreshedAt: node.lastRefreshedAt ?? null,\n }))\n .sort((a, b) => toTimestamp(a.lastRefreshedAt) - toTimestamp(b.lastRefreshedAt));\n}\n\nexport function summarizeDataSinks(\n data: OverviewDataSinksData | null | undefined,\n limit: number = DATA_HEALTH_ROW_LIMIT\n): DataSinkSummary {\n if (!data) {\n return { total: undefined, ready: undefined, attentionCount: undefined, rows: [], hiddenCount: 0 };\n }\n\n const attentionCount = data.errored.totalCount + data.stale.totalCount;\n const seen = new Set<string>();\n const rows = [...toHealthRows(data.errored, 'error'), ...toHealthRows(data.stale, 'stale')]\n .filter((row) => {\n if (seen.has(row.id)) return false;\n seen.add(row.id);\n return true;\n })\n .slice(0, Math.max(0, limit));\n\n return {\n total: data.all.totalCount,\n ready: data.ready.totalCount,\n attentionCount,\n rows,\n hiddenCount: Math.max(0, attentionCount - rows.length),\n };\n}\n\n// ============================================================================\n// Guide default state\n// ============================================================================\n\nexport interface GuideDefaultInput {\n permissionsLoading: boolean;\n dashboardsAllowed: boolean;\n dashboardsLoading: boolean;\n dashboardsTotal: number | undefined;\n dashboardsFailed: boolean;\n}\n\n/**\n * Decide whether the dashboard guide starts expanded.\n *\n * Returns `null` while the answer is still unknown (permissions or the first\n * dashboards response pending) so the page can keep the guide collapsed\n * without flashing. Once known: expanded for a workspace with no dashboards,\n * or when the caller cannot see dashboards / the query failed (the guide is the\n * most useful thing on the page then); collapsed otherwise.\n */\nexport function resolveGuideDefaultExpanded(input: GuideDefaultInput): boolean | null {\n if (input.permissionsLoading) return null;\n if (!input.dashboardsAllowed || input.dashboardsFailed) return true;\n if (input.dashboardsTotal === undefined) return input.dashboardsLoading ? null : true;\n return input.dashboardsTotal === 0;\n}\n\n// ============================================================================\n// Relative time\n// ============================================================================\n\nexport type RelativeTime =\n { unit: 'justNow' } | { unit: 'minutes' | 'hours' | 'days'; count: number } | { unit: 'date'; date: Date };\n\nconst MINUTE_MS = 60_000;\nconst HOUR_MS = 60 * MINUTE_MS;\nconst DAY_MS = 24 * HOUR_MS;\n\n/** Bucket a timestamp relative to `now` (future timestamps read as \"just now\"). */\nexport function toRelativeTime(iso: string, now: Date): RelativeTime | null {\n const time = Date.parse(iso);\n if (Number.isNaN(time)) return null;\n\n const diff = now.getTime() - time;\n if (diff < MINUTE_MS) return { unit: 'justNow' };\n if (diff < HOUR_MS) return { unit: 'minutes', count: Math.floor(diff / MINUTE_MS) };\n if (diff < DAY_MS) return { unit: 'hours', count: Math.floor(diff / HOUR_MS) };\n if (diff < 7 * DAY_MS) return { unit: 'days', count: Math.floor(diff / DAY_MS) };\n return { unit: 'date', date: new Date(time) };\n}\n\nexport type OverviewTranslate = (key: string, fallback: string, params?: Record<string, string | number>) => string;\n\nfunction relativeTimeFormatter(locale: string): Intl.RelativeTimeFormat {\n try {\n return new Intl.RelativeTimeFormat(locale, { numeric: 'always', style: 'short' });\n } catch {\n // Unknown locale tag — fall back to the runtime default.\n return new Intl.RelativeTimeFormat(undefined, { numeric: 'always', style: 'short' });\n }\n}\n\nfunction dateFormatter(locale: string, includeYear: boolean): Intl.DateTimeFormat {\n const options: Intl.DateTimeFormatOptions = {\n month: 'short',\n day: 'numeric',\n year: includeYear ? 'numeric' : undefined,\n };\n try {\n return new Intl.DateTimeFormat(locale, options);\n } catch {\n return new Intl.DateTimeFormat(undefined, options);\n }\n}\n\n/**\n * Human \"updated …\" text for a timestamp, meant to be embedded mid-sentence\n * (\"Updated {{time}}\"): relative for the last week, a short locale date after\n * that. Relative values use `Intl.RelativeTimeFormat`, so plural forms are\n * correct in every locale. Returns `null` for an unparseable timestamp.\n */\nexport function formatRelativeTime(iso: string, now: Date, tr: OverviewTranslate, locale: string): string | null {\n const relative = toRelativeTime(iso, now);\n if (!relative) return null;\n\n switch (relative.unit) {\n case 'justNow':\n return tr('bigconsole.overview.time.justNow', 'just now');\n case 'minutes':\n return relativeTimeFormatter(locale).format(-relative.count, 'minute');\n case 'hours':\n return relativeTimeFormatter(locale).format(-relative.count, 'hour');\n case 'days':\n return relativeTimeFormatter(locale).format(-relative.count, 'day');\n case 'date':\n return dateFormatter(locale, relative.date.getFullYear() !== now.getFullYear()).format(relative.date);\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { useBigConsoleOverviewDashboardsQuery as e, useBigConsoleOverviewDataSinksQuery as t } from "../../../generated/wspace-operations.js";
2
+ import { BIGCONSOLE_PERMISSIONS as n } from "../../../constants/permissions.js";
3
+ import "./overviewModel.js";
4
+ import { useCallback as r } from "react";
5
+ import { usePermissions as i } from "@burdenoff/fe-libs/shared/providers/shell";
6
+ //#region src/bigconsole/components/overview/useOverviewData.ts
7
+ function a() {}
8
+ function o() {
9
+ let { hasPermission: o, isLoading: s } = i(), c = !s && o(n.DASHBOARD_READ), l = !s && o(n.DATASINK_READ), u = e({
10
+ variables: { first: 5 },
11
+ skip: !c,
12
+ fetchPolicy: "cache-and-network",
13
+ notifyOnNetworkStatusChange: !0
14
+ }), d = t({
15
+ variables: { attentionFirst: 5 },
16
+ skip: !l,
17
+ fetchPolicy: "cache-and-network",
18
+ notifyOnNetworkStatusChange: !0
19
+ }), { refetch: f } = u, { refetch: p } = d, m = r(() => {
20
+ c && f().catch(a);
21
+ }, [c, f]), h = r(() => {
22
+ l && p().catch(a);
23
+ }, [l, p]), g = r(() => {
24
+ m(), h();
25
+ }, [m, h]);
26
+ return {
27
+ permissionsLoading: s,
28
+ dashboards: {
29
+ allowed: c,
30
+ data: c ? u.data : void 0,
31
+ loading: c && u.loading,
32
+ error: c ? u.error : void 0,
33
+ refetch: m
34
+ },
35
+ dataSinks: {
36
+ allowed: l,
37
+ data: l ? d.data : void 0,
38
+ loading: l && d.loading,
39
+ error: l ? d.error : void 0,
40
+ refetch: h
41
+ },
42
+ refetchAll: g
43
+ };
44
+ }
45
+ //#endregion
46
+ export { o as useOverviewData };
47
+
48
+ //# sourceMappingURL=useOverviewData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOverviewData.js","names":[],"sources":["../../../../src/bigconsole/components/overview/useOverviewData.ts"],"sourcesContent":["/**\n * useOverviewData Hook\n *\n * Loads the BigConsole Overview's two data sections — dashboards and data\n * sinks — each as its own operation gated on its own read permission.\n *\n * Why two operations: the gateway checks `@rbac` per top-level field and rejects\n * the entire operation when any check fails, so a combined query would blank\n * every section (and raise a permission toast) for a user who can read\n * dashboards but not data sinks. Queries skip until the permission set has\n * resolved; both fire in the same render and share one batched POST to the\n * workspace gateway.\n */\n\nimport { useCallback } from 'react';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { BIGCONSOLE_PERMISSIONS } from '../../../constants/permissions';\nimport {\n useBigConsoleOverviewDashboardsQuery,\n useBigConsoleOverviewDataSinksQuery,\n type BigConsoleOverviewDashboardsQuery,\n type BigConsoleOverviewDataSinksQuery,\n} from '../../../generated/wspace-operations';\nimport { DATA_HEALTH_ROW_LIMIT, RECENT_DASHBOARDS_LIMIT } from './overviewModel';\n\nexport interface OverviewSectionState<TData> {\n /** The caller holds the read permission for this section. */\n allowed: boolean;\n data: TData | undefined;\n /** A request (initial load or refetch) is in flight. */\n loading: boolean;\n error: { message: string } | undefined;\n refetch: () => void;\n}\n\nexport interface UseOverviewDataResult {\n permissionsLoading: boolean;\n dashboards: OverviewSectionState<BigConsoleOverviewDashboardsQuery>;\n dataSinks: OverviewSectionState<BigConsoleOverviewDataSinksQuery>;\n /** Refetch every permitted section (the page's Refresh action). */\n refetchAll: () => void;\n}\n\nfunction ignoreRefetchRejection(): void {\n // A failed refetch is surfaced through the query's `error` state; nothing\n // else to do with the rejected promise.\n}\n\nexport function useOverviewData(): UseOverviewDataResult {\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const canReadDashboards = !permissionsLoading && hasPermission(BIGCONSOLE_PERMISSIONS.DASHBOARD_READ);\n const canReadDataSinks = !permissionsLoading && hasPermission(BIGCONSOLE_PERMISSIONS.DATASINK_READ);\n\n const dashboardsQuery = useBigConsoleOverviewDashboardsQuery({\n variables: { first: RECENT_DASHBOARDS_LIMIT },\n skip: !canReadDashboards,\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true,\n });\n\n const dataSinksQuery = useBigConsoleOverviewDataSinksQuery({\n variables: { attentionFirst: DATA_HEALTH_ROW_LIMIT },\n skip: !canReadDataSinks,\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true,\n });\n\n const { refetch: refetchDashboardsQuery } = dashboardsQuery;\n const { refetch: refetchDataSinksQuery } = dataSinksQuery;\n\n const refetchDashboards = useCallback(() => {\n if (!canReadDashboards) return;\n refetchDashboardsQuery().catch(ignoreRefetchRejection);\n }, [canReadDashboards, refetchDashboardsQuery]);\n\n const refetchDataSinks = useCallback(() => {\n if (!canReadDataSinks) return;\n refetchDataSinksQuery().catch(ignoreRefetchRejection);\n }, [canReadDataSinks, refetchDataSinksQuery]);\n\n const refetchAll = useCallback(() => {\n refetchDashboards();\n refetchDataSinks();\n }, [refetchDashboards, refetchDataSinks]);\n\n return {\n permissionsLoading,\n dashboards: {\n allowed: canReadDashboards,\n data: canReadDashboards ? dashboardsQuery.data : undefined,\n loading: canReadDashboards && dashboardsQuery.loading,\n error: canReadDashboards ? dashboardsQuery.error : undefined,\n refetch: refetchDashboards,\n },\n dataSinks: {\n allowed: canReadDataSinks,\n data: canReadDataSinks ? dataSinksQuery.data : undefined,\n loading: canReadDataSinks && dataSinksQuery.loading,\n error: canReadDataSinks ? dataSinksQuery.error : undefined,\n refetch: refetchDataSinks,\n },\n refetchAll,\n };\n}\n"],"mappings":";;;;;;AA2CA,SAAS,IAA+B;AAKxC,SAAgB,IAAyC;CACvD,IAAM,EAAE,kBAAe,WAAW,MAAuB,GAAgB,EACnE,IAAoB,CAAC,KAAsB,EAAc,EAAuB,eAAe,EAC/F,IAAmB,CAAC,KAAsB,EAAc,EAAuB,cAAc,EAE7F,IAAkB,EAAqC;EAC3D,WAAW,EAAE,OAAA,GAAgC;EAC7C,MAAM,CAAC;EACP,aAAa;EACb,6BAA6B;EAC9B,CAAC,EAEI,IAAiB,EAAoC;EACzD,WAAW,EAAE,gBAAA,GAAuC;EACpD,MAAM,CAAC;EACP,aAAa;EACb,6BAA6B;EAC9B,CAAC,EAEI,EAAE,SAAS,MAA2B,GACtC,EAAE,SAAS,MAA0B,GAErC,IAAoB,QAAkB;AACrC,OACL,GAAwB,CAAC,MAAM,EAAuB;IACrD,CAAC,GAAmB,EAAuB,CAAC,EAEzC,IAAmB,QAAkB;AACpC,OACL,GAAuB,CAAC,MAAM,EAAuB;IACpD,CAAC,GAAkB,EAAsB,CAAC,EAEvC,IAAa,QAAkB;AAEnC,EADA,GAAmB,EACnB,GAAkB;IACjB,CAAC,GAAmB,EAAiB,CAAC;AAEzC,QAAO;EACL;EACA,YAAY;GACV,SAAS;GACT,MAAM,IAAoB,EAAgB,OAAO,KAAA;GACjD,SAAS,KAAqB,EAAgB;GAC9C,OAAO,IAAoB,EAAgB,QAAQ,KAAA;GACnD,SAAS;GACV;EACD,WAAW;GACT,SAAS;GACT,MAAM,IAAmB,EAAe,OAAO,KAAA;GAC/C,SAAS,KAAoB,EAAe;GAC5C,OAAO,IAAmB,EAAe,QAAQ,KAAA;GACjD,SAAS;GACV;EACD;EACD"}
@@ -6,8 +6,8 @@ import n from "../../hooks/useDataSinkOperations.js";
6
6
  import r from "../datasink/DataSinkStatusBadge.js";
7
7
  import { Fragment as i, memo as a, useCallback as o, useMemo as s, useState as c } from "react";
8
8
  import { Plus as l } from "lucide-react";
9
- import { useI18n as u } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
- import { jsx as d, jsxs as f } from "react/jsx-runtime";
9
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
10
+ import { useI18n as f } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
11
11
  //#region src/bigconsole/components/parser/DataSinkSelector.tsx
12
12
  var p = "sticky top-0 z-[1] bg-bg-sunken px-3 py-1.5 border-y border-[var(--color-border-default)]", m = "text-xs font-semibold uppercase tracking-wide text-text-secondary";
13
13
  function h(e, t) {
@@ -20,19 +20,19 @@ function h(e, t) {
20
20
  let o = Math.floor(a / 24);
21
21
  return o < 7 ? t("bigconsole.parsers.dataSinkSelector.relativeTime.daysAgo", "{{days}}d ago", { days: o }) : n.toLocaleDateString();
22
22
  }
23
- var g = ({ className: e }) => /* @__PURE__ */ d("svg", {
23
+ var g = ({ className: e }) => /* @__PURE__ */ u("svg", {
24
24
  className: e,
25
25
  fill: "none",
26
26
  stroke: "currentColor",
27
27
  viewBox: "0 0 24 24",
28
- children: /* @__PURE__ */ d("path", {
28
+ children: /* @__PURE__ */ u("path", {
29
29
  strokeLinecap: "round",
30
30
  strokeLinejoin: "round",
31
31
  strokeWidth: 2,
32
32
  d: "M19 9l-7 7-7-7"
33
33
  })
34
34
  }), _ = a(function({ value: a, onChange: _, filterStatus: v, placeholder: y, disabled: b = !1, error: x = !1, errorMessage: S }) {
35
- let { t: C } = u(), [w, T] = c(!1), [E, D] = c(""), O = y ?? C("bigconsole.parsers.dataSinkSelector.placeholder", "Select a data source..."), k = e(), { dataSinks: A, loading: j, fetchDataSinks: M } = n({ skipFetch: !1 }), N = s(() => A.filter((e) => {
35
+ let { t: C } = f(), [w, T] = c(!1), [E, D] = c(""), O = y ?? C("bigconsole.parsers.dataSinkSelector.placeholder", "Select a data source..."), k = e(), { dataSinks: A, loading: j, fetchDataSinks: M } = n({ skipFetch: !1 }), N = s(() => A.filter((e) => {
36
36
  if (v && e.status !== v) return !1;
37
37
  if (E) {
38
38
  let t = E.toLowerCase();
@@ -58,10 +58,10 @@ var g = ({ className: e }) => /* @__PURE__ */ d("svg", {
58
58
  }, []), R = o(() => {
59
59
  T(!1), window.open(k("/datasinks/new"), "_blank", "noopener,noreferrer");
60
60
  }, [k]);
61
- return /* @__PURE__ */ f("div", {
61
+ return /* @__PURE__ */ d("div", {
62
62
  className: "relative",
63
63
  children: [
64
- /* @__PURE__ */ f("button", {
64
+ /* @__PURE__ */ d("button", {
65
65
  type: "button",
66
66
  onClick: I,
67
67
  disabled: b,
@@ -80,40 +80,40 @@ var g = ({ className: e }) => /* @__PURE__ */ d("svg", {
80
80
  ${x ? "border-status-error-border" : "border-[var(--color-border-default)]"}
81
81
  ${w ? "border-action-primary-bg ring-2 ring-action-primary-bg/20" : ""}
82
82
  `,
83
- children: [/* @__PURE__ */ d("div", {
83
+ children: [/* @__PURE__ */ u("div", {
84
84
  className: "flex-1 min-w-0",
85
- children: P ? /* @__PURE__ */ f("div", {
85
+ children: P ? /* @__PURE__ */ d("div", {
86
86
  className: "flex min-w-0 items-center gap-2",
87
- children: [/* @__PURE__ */ d(r, {
87
+ children: [/* @__PURE__ */ u(r, {
88
88
  status: P.status,
89
89
  size: "sm",
90
90
  showIcon: !1
91
- }), /* @__PURE__ */ d("span", {
91
+ }), /* @__PURE__ */ u("span", {
92
92
  className: "text-sm text-text-primary truncate",
93
93
  children: P.name || P.key
94
94
  })]
95
- }) : /* @__PURE__ */ d("span", {
95
+ }) : /* @__PURE__ */ u("span", {
96
96
  className: "text-sm text-text-muted",
97
97
  children: O
98
98
  })
99
- }), /* @__PURE__ */ d(g, {
99
+ }), /* @__PURE__ */ u(g, {
100
100
  "aria-hidden": "true",
101
101
  className: `w-4 h-4 shrink-0 text-text-secondary motion-safe:transition-transform ${w ? "transform rotate-180" : ""}`
102
102
  })]
103
103
  }),
104
- x && S && /* @__PURE__ */ d("p", {
104
+ x && S && /* @__PURE__ */ u("p", {
105
105
  className: "mt-1 text-xs text-status-error-text",
106
106
  children: S
107
107
  }),
108
- w && /* @__PURE__ */ f(i, { children: [/* @__PURE__ */ d("div", {
108
+ w && /* @__PURE__ */ d(i, { children: [/* @__PURE__ */ u("div", {
109
109
  className: "fixed inset-0 z-10",
110
110
  onClick: L
111
- }), /* @__PURE__ */ f("div", {
111
+ }), /* @__PURE__ */ d("div", {
112
112
  className: "absolute left-0 right-0 top-full mt-1 z-20 bg-bg-surface border border-[var(--color-border-default)] rounded-md shadow-lg max-h-80 flex flex-col overflow-hidden",
113
113
  children: [
114
- /* @__PURE__ */ d("div", {
114
+ /* @__PURE__ */ u("div", {
115
115
  className: "p-2 border-b border-[var(--color-border-default)]",
116
- children: /* @__PURE__ */ d("input", {
116
+ children: /* @__PURE__ */ u("input", {
117
117
  type: "text",
118
118
  "aria-label": C("bigconsole.parsers.dataSinkSelector.searchPlaceholder", "Search data sources..."),
119
119
  placeholder: C("bigconsole.parsers.dataSinkSelector.searchPlaceholder", "Search data sources..."),
@@ -122,16 +122,16 @@ var g = ({ className: e }) => /* @__PURE__ */ d("svg", {
122
122
  className: "\n w-full min-w-0 min-h-control-md px-3 py-2\n bg-bg-sunken\n border border-[var(--color-border-default)]\n rounded-md\n text-sm text-text-primary\n placeholder:text-text-muted\n focus:outline-none\n focus:border-action-primary-bg\n focus:ring-2\n focus:ring-action-primary-bg/20\n "
123
123
  })
124
124
  }),
125
- /* @__PURE__ */ d("div", {
125
+ /* @__PURE__ */ u("div", {
126
126
  className: "overflow-y-auto flex-1",
127
- children: j ? /* @__PURE__ */ d("div", {
127
+ children: j ? /* @__PURE__ */ u("div", {
128
128
  className: "p-4 text-center text-sm text-text-secondary",
129
129
  children: C("bigconsole.parsers.dataSinkSelector.loading", "Loading data sources...")
130
- }) : N.length === 0 ? /* @__PURE__ */ d("div", {
130
+ }) : N.length === 0 ? /* @__PURE__ */ u("div", {
131
131
  className: "p-4 text-center text-sm text-text-secondary",
132
132
  children: E ? C("bigconsole.parsers.dataSinkSelector.emptySearch", "No matching data sources found") : C("bigconsole.parsers.dataSinkSelector.empty", "No data sources available")
133
- }) : /* @__PURE__ */ f(i, { children: [
134
- /* @__PURE__ */ d("button", {
133
+ }) : /* @__PURE__ */ d(i, { children: [
134
+ /* @__PURE__ */ u("button", {
135
135
  type: "button",
136
136
  onClick: () => F(null),
137
137
  className: `
@@ -142,19 +142,19 @@ var g = ({ className: e }) => /* @__PURE__ */ d("svg", {
142
142
  focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface
143
143
  ${a === null ? "bg-action-primary-bg/10 text-action-primary-bg" : "text-text-secondary"}
144
144
  `,
145
- children: /* @__PURE__ */ d("span", {
145
+ children: /* @__PURE__ */ u("span", {
146
146
  className: "italic",
147
147
  children: C("bigconsole.parsers.dataSinkSelector.none", "None")
148
148
  })
149
149
  }),
150
- /* @__PURE__ */ d("div", {
150
+ /* @__PURE__ */ u("div", {
151
151
  className: p,
152
- children: /* @__PURE__ */ d("span", {
152
+ children: /* @__PURE__ */ u("span", {
153
153
  className: m,
154
154
  children: "Data Sources"
155
155
  })
156
156
  }),
157
- N.map((e) => /* @__PURE__ */ d("button", {
157
+ N.map((e) => /* @__PURE__ */ u("button", {
158
158
  type: "button",
159
159
  onClick: () => F(e.key),
160
160
  className: `
@@ -166,38 +166,38 @@ var g = ({ className: e }) => /* @__PURE__ */ d("svg", {
166
166
  focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface
167
167
  ${a === e.key ? "bg-action-primary-bg/10" : ""}
168
168
  `,
169
- children: /* @__PURE__ */ d("div", {
169
+ children: /* @__PURE__ */ u("div", {
170
170
  className: "flex items-start justify-between gap-2",
171
- children: /* @__PURE__ */ f("div", {
171
+ children: /* @__PURE__ */ d("div", {
172
172
  className: "flex-1 min-w-0",
173
173
  children: [
174
- /* @__PURE__ */ f("div", {
174
+ /* @__PURE__ */ d("div", {
175
175
  className: "flex min-w-0 items-center gap-2 mb-1",
176
- children: [/* @__PURE__ */ d(r, {
176
+ children: [/* @__PURE__ */ u(r, {
177
177
  status: e.status,
178
178
  size: "sm",
179
179
  showIcon: !1
180
- }), /* @__PURE__ */ d("span", {
180
+ }), /* @__PURE__ */ u("span", {
181
181
  className: "text-sm font-medium text-text-primary truncate",
182
182
  children: e.name || e.key
183
183
  })]
184
184
  }),
185
- e.description && /* @__PURE__ */ d("p", {
185
+ e.description && /* @__PURE__ */ u("p", {
186
186
  className: "text-xs text-text-secondary line-clamp-1 mb-1",
187
187
  children: e.description
188
188
  }),
189
- /* @__PURE__ */ f("div", {
189
+ /* @__PURE__ */ d("div", {
190
190
  className: "flex min-w-0 flex-wrap items-center gap-x-2 text-xs text-text-muted",
191
191
  children: [
192
- /* @__PURE__ */ d("span", {
192
+ /* @__PURE__ */ u("span", {
193
193
  className: "min-w-0 truncate font-mono",
194
194
  children: C("bigconsole.parsers.dataSinkSelector.keyLabel", "key: {{key}}", { key: e.key })
195
195
  }),
196
- /* @__PURE__ */ d("span", {
196
+ /* @__PURE__ */ u("span", {
197
197
  "aria-hidden": "true",
198
198
  children: "•"
199
199
  }),
200
- /* @__PURE__ */ d("span", {
200
+ /* @__PURE__ */ u("span", {
201
201
  className: "truncate",
202
202
  children: C("bigconsole.parsers.dataSinkSelector.refreshedLabel", "Refreshed: {{time}}", { time: h(e.lastRefreshedAt, C) })
203
203
  })
@@ -209,13 +209,13 @@ var g = ({ className: e }) => /* @__PURE__ */ d("svg", {
209
209
  }, e.id))
210
210
  ] })
211
211
  }),
212
- /* @__PURE__ */ d("div", {
212
+ /* @__PURE__ */ u("div", {
213
213
  className: "p-2 border-t border-border-default",
214
- children: /* @__PURE__ */ f("button", {
214
+ children: /* @__PURE__ */ d("button", {
215
215
  type: "button",
216
216
  onClick: R,
217
217
  className: "\n w-full flex items-center gap-2\n px-3 py-2\n text-sm font-medium text-action-primary-bg\n rounded-md\n hover:bg-action-primary-bg/10\n transition-colors\n ",
218
- children: [/* @__PURE__ */ d(l, { className: "w-4 h-4" }), C("bigconsole.parsers.dataSinkSelector.createNew", "Create new data source")]
218
+ children: [/* @__PURE__ */ u(l, { className: "w-4 h-4" }), C("bigconsole.parsers.dataSinkSelector.createNew", "Create new data source")]
219
219
  })
220
220
  })
221
221
  ]