@burdenoff/microfe-bigconsole 2026.805.3 → 2026.812.2
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.
- package/dist/bigconsole/components/DrilldownDashboardRenderer.js +118 -106
- package/dist/bigconsole/components/DrilldownDashboardRenderer.js.map +1 -1
- package/dist/bigconsole/components/DrilldownModal.js +54 -50
- package/dist/bigconsole/components/DrilldownModal.js.map +1 -1
- package/dist/bigconsole/components/builder/BuilderCanvas.js +2 -2
- package/dist/bigconsole/components/builder/BuilderCanvas.js.map +1 -1
- package/dist/bigconsole/components/builder/BuilderTopbar.js +3 -3
- package/dist/bigconsole/components/builder/BuilderTopbar.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/AdvancedSection.js +24 -25
- package/dist/bigconsole/components/builder/inspector/AdvancedSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/AppearanceSection.js +40 -29
- package/dist/bigconsole/components/builder/inspector/AppearanceSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +135 -97
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/GeneralSection.js +58 -44
- package/dist/bigconsole/components/builder/inspector/GeneralSection.js.map +1 -1
- package/dist/bigconsole/components/common/Section.js +70 -0
- package/dist/bigconsole/components/common/Section.js.map +1 -0
- package/dist/bigconsole/components/common/index.js +2 -0
- package/dist/bigconsole/components/common/sectionStyles.js +42 -0
- package/dist/bigconsole/components/common/sectionStyles.js.map +1 -0
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +209 -193
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js +213 -231
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardGrid.js +12 -18
- package/dist/bigconsole/components/dashboard/DashboardGrid.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js +109 -102
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +81 -70
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js +125 -159
- package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +25 -23
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +3 -3
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +5 -3
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +170 -284
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +147 -151
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/LiveBoardBanner.js +45 -53
- package/dist/bigconsole/components/dashboard/LiveBoardBanner.js.map +1 -1
- package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js +157 -148
- package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js.map +1 -1
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +17 -8
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +101 -95
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js +20 -18
- package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js.map +1 -1
- package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js +26 -58
- package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js.map +1 -1
- package/dist/bigconsole/components/dashboard/WidgetPalette.js +307 -231
- package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js +29 -29
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkCard.js +78 -79
- package/dist/bigconsole/components/datasink/DataSinkCard.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkDataViewer.js +33 -34
- package/dist/bigconsole/components/datasink/DataSinkDataViewer.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +79 -56
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +75 -65
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js +1 -1
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkTableViewer.js +20 -19
- package/dist/bigconsole/components/datasink/DataSinkTableViewer.js.map +1 -1
- package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js +127 -171
- package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +263 -243
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/LinkedParsersPanel.js +65 -66
- package/dist/bigconsole/components/datasink/LinkedParsersPanel.js.map +1 -1
- package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js +121 -127
- package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js.map +1 -1
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +33 -26
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
- package/dist/bigconsole/components/datasink/SetupStateBadge.js +3 -3
- package/dist/bigconsole/components/datasink/SetupStateBadge.js.map +1 -1
- package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js +95 -95
- package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js.map +1 -1
- package/dist/bigconsole/components/parser/DataSinkSelector.js +154 -123
- package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
- package/dist/bigconsole/components/parser/ExpressionEditor.js +3 -3
- package/dist/bigconsole/components/parser/ExpressionEditor.js.map +1 -1
- package/dist/bigconsole/components/parser/ImportParserDialog.js +235 -275
- package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserCard.js +133 -114
- package/dist/bigconsole/components/parser/ParserCard.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserSelector.js +191 -174
- package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserStatusBadge.js +2 -2
- package/dist/bigconsole/components/parser/ParserStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserTypeBadge.js +4 -4
- package/dist/bigconsole/components/parser/ParserTypeBadge.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineCard.js +134 -89
- package/dist/bigconsole/components/pipeline/PipelineCard.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js +77 -64
- package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js +7 -10
- package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewContent.js +31 -32
- package/dist/bigconsole/components/preview/AiPreviewContent.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +152 -106
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewPanel.js +193 -152
- package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
- package/dist/bigconsole/components/preview/previewShared.js +41 -23
- package/dist/bigconsole/components/preview/previewShared.js.map +1 -1
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js +342 -308
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +262 -238
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/PropertiesPanel.js +783 -867
- package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js +7 -5
- package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetHeader.js +7 -8
- package/dist/bigconsole/components/widgets/WidgetHeader.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetRegistry.js +4 -4
- package/dist/bigconsole/components/widgets/WidgetRegistry.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetWrapper.js +8 -7
- package/dist/bigconsole/components/widgets/WidgetWrapper.js.map +1 -1
- package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js +1 -1
- package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +2 -2
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js +11 -5
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js +19 -15
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +154 -102
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/CircularGauge.js +36 -32
- package/dist/bigconsole/components/widgets/gauge/CircularGauge.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +85 -60
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js +64 -35
- package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/LinearGauge.js +46 -45
- package/dist/bigconsole/components/widgets/gauge/LinearGauge.js.map +1 -1
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +35 -24
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js +2 -2
- package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +4 -4
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js +153 -90
- package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/list/ListConfig.js +8 -2
- package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/list/ListItem.js +1 -1
- package/dist/bigconsole/components/widgets/list/ListItem.js.map +1 -1
- package/dist/bigconsole/components/widgets/map-widget/MapWidget.js +1 -1
- package/dist/bigconsole/components/widgets/map-widget/MapWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +14 -4
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js +112 -89
- package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +21 -13
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/index.js +4 -4
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +3 -3
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +34 -25
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/progress/ProgressWidget.js +129 -114
- package/dist/bigconsole/components/widgets/progress/ProgressWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/retention/RetentionWidget.js +3 -3
- package/dist/bigconsole/components/widgets/retention/RetentionWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/EmptyState.js +6 -4
- package/dist/bigconsole/components/widgets/states/EmptyState.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/ErrorState.js +7 -5
- package/dist/bigconsole/components/widgets/states/ErrorState.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/LoadingState.js +5 -4
- package/dist/bigconsole/components/widgets/states/LoadingState.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableConfig.js +10 -4
- package/dist/bigconsole/components/widgets/table/TableConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableHeader.js +1 -1
- package/dist/bigconsole/components/widgets/table/TableHeader.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableWidget.js +1 -1
- package/dist/bigconsole/components/widgets/table/TableWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/text-widget/TextWidget.js +1 -1
- package/dist/bigconsole/components/widgets/text-widget/TextWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js +3 -3
- package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/utils/conditionalFormat.js +2 -2
- package/dist/bigconsole/components/widgets/utils/conditionalFormat.js.map +1 -1
- package/dist/bigconsole/components/widgets/utils/targetProgress.js +13 -0
- package/dist/bigconsole/components/widgets/utils/targetProgress.js.map +1 -0
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +112 -85
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js +28 -20
- package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowCard.js +92 -77
- package/dist/bigconsole/components/workflow/WorkflowCard.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js +70 -51
- package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js +16 -17
- package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js.map +1 -1
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +6 -4
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +360 -338
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
- package/dist/bigconsole/hooks/useModalFocusTrap.js +53 -0
- package/dist/bigconsole/hooks/useModalFocusTrap.js.map +1 -0
- package/dist/bigconsole/pages/DashboardBuilderPage.js +209 -203
- package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardViewPage.js +126 -120
- package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardsPage.js +838 -800
- package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
- package/dist/bigconsole/pages/DataParsersPage.js +263 -315
- package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkBuilderPage.js +301 -341
- package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkViewPage.js +346 -339
- package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinksPage.js +356 -458
- package/dist/bigconsole/pages/DataSinksPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSourcesPage.js +7 -2
- package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
- package/dist/bigconsole/pages/HomePage.js +186 -193
- package/dist/bigconsole/pages/HomePage.js.map +1 -1
- package/dist/bigconsole/pages/InsightsPage.js +887 -740
- package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserBuilderPage.js +679 -637
- package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserViewPage.js +368 -342
- package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineBuilderPage.js +537 -444
- package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineViewPage.js +412 -377
- package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelinesPage.js +248 -298
- package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
- package/dist/bigconsole/pages/WidgetDemoPage.js +251 -153
- package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowViewPage.js +381 -371
- package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowsPage.js +171 -286
- package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import r from "
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
1
|
+
import { Section as e, SectionStack as t } from "./common/Section.js";
|
|
2
|
+
import "./common/index.js";
|
|
3
|
+
import { GetDashboardDocument as n, ListWidgetsByDashboardDocument as r } from "../../generated/wspace-operations.js";
|
|
4
|
+
import { mapFromFederationWidgetType as i } from "../utils/widgetTypeMapping.js";
|
|
5
|
+
import a from "./widgets/WidgetWrapper.js";
|
|
6
|
+
import { memo as o, useEffect as s, useState as c } from "react";
|
|
7
|
+
import { useApolloClient as l } from "@apollo/client/react";
|
|
8
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
7
9
|
//#region src/bigconsole/components/DrilldownDashboardRenderer.tsx
|
|
8
|
-
function
|
|
9
|
-
let
|
|
10
|
+
function f(e, t) {
|
|
11
|
+
let n = t * 4, r = {
|
|
10
12
|
x: 0,
|
|
11
|
-
y:
|
|
13
|
+
y: n,
|
|
12
14
|
width: 12,
|
|
13
15
|
height: 4
|
|
14
|
-
}, a = e.config || {}, o = a._internalWidgetType ||
|
|
16
|
+
}, a = e.config || {}, o = a._internalWidgetType || i(e.type || "KPI");
|
|
15
17
|
return {
|
|
16
18
|
id: e.id ?? "",
|
|
17
19
|
pageId: e.pageId || "",
|
|
@@ -25,9 +27,9 @@ function u(e, t) {
|
|
|
25
27
|
parserId: e.parserId || null,
|
|
26
28
|
parserRules: e.parserRules || null,
|
|
27
29
|
config: a,
|
|
28
|
-
position:
|
|
30
|
+
position: r,
|
|
29
31
|
positionX: 0,
|
|
30
|
-
positionY:
|
|
32
|
+
positionY: n,
|
|
31
33
|
positionWidth: 12,
|
|
32
34
|
positionHeight: 4,
|
|
33
35
|
positionResponsive: e.positionResponsive,
|
|
@@ -45,147 +47,157 @@ function u(e, t) {
|
|
|
45
47
|
updatedAt: e.updatedAt || (/* @__PURE__ */ new Date()).toISOString()
|
|
46
48
|
};
|
|
47
49
|
}
|
|
48
|
-
var
|
|
49
|
-
let
|
|
50
|
-
|
|
51
|
-
if (!
|
|
52
|
-
|
|
50
|
+
var p = o(function({ dashboardId: i, params: a }) {
|
|
51
|
+
let o = l(), [p, h] = c(!0), [g, _] = c(null), [v, y] = c(null), [b, x] = c([]);
|
|
52
|
+
if (s(() => {
|
|
53
|
+
if (!i) {
|
|
54
|
+
h(!1);
|
|
53
55
|
return;
|
|
54
56
|
}
|
|
55
|
-
async function
|
|
56
|
-
|
|
57
|
+
async function e() {
|
|
58
|
+
h(!0), _(null);
|
|
57
59
|
try {
|
|
58
|
-
let
|
|
59
|
-
query:
|
|
60
|
-
variables: { id:
|
|
60
|
+
let e = (await o.query({
|
|
61
|
+
query: n,
|
|
62
|
+
variables: { id: i },
|
|
61
63
|
fetchPolicy: "network-only"
|
|
62
64
|
})).data?.getDashboard;
|
|
63
|
-
if (!
|
|
64
|
-
|
|
65
|
+
if (!e) {
|
|
66
|
+
_("Dashboard not found"), h(!1);
|
|
65
67
|
return;
|
|
66
68
|
}
|
|
67
|
-
let
|
|
69
|
+
let t = e.pages?.edges?.map((e) => ({
|
|
68
70
|
id: e.node.id,
|
|
69
71
|
name: e.node.name || "Page 1"
|
|
70
72
|
})) || [];
|
|
71
|
-
|
|
72
|
-
id:
|
|
73
|
-
name:
|
|
74
|
-
description:
|
|
75
|
-
pages:
|
|
76
|
-
}),
|
|
77
|
-
query:
|
|
78
|
-
variables: { dashboardId:
|
|
73
|
+
y({
|
|
74
|
+
id: e.id,
|
|
75
|
+
name: e.name,
|
|
76
|
+
description: e.description,
|
|
77
|
+
pages: t
|
|
78
|
+
}), x(((await o.query({
|
|
79
|
+
query: r,
|
|
80
|
+
variables: { dashboardId: i },
|
|
79
81
|
fetchPolicy: "network-only"
|
|
80
|
-
})).data?.listWidgetsByDashboard || []).map((e, t) =>
|
|
82
|
+
})).data?.listWidgetsByDashboard || []).map((e, t) => f(e, t)));
|
|
81
83
|
} catch (e) {
|
|
82
|
-
|
|
84
|
+
_(e instanceof Error ? e.message : "Failed to load dashboard");
|
|
83
85
|
} finally {
|
|
84
|
-
|
|
86
|
+
h(!1);
|
|
85
87
|
}
|
|
86
88
|
}
|
|
87
|
-
|
|
88
|
-
}, [
|
|
89
|
+
e();
|
|
90
|
+
}, [i, o]), p) return /* @__PURE__ */ u("div", {
|
|
89
91
|
className: "flex items-center justify-center h-full",
|
|
90
|
-
children: /* @__PURE__ */
|
|
92
|
+
children: /* @__PURE__ */ d("div", {
|
|
91
93
|
className: "flex flex-col items-center gap-3",
|
|
92
|
-
children: [/* @__PURE__ */
|
|
94
|
+
children: [/* @__PURE__ */ u("div", { className: "w-8 h-8 border-2 border-action-primary-bg border-t-transparent rounded-full animate-spin" }), /* @__PURE__ */ u("p", {
|
|
93
95
|
className: "text-sm text-text-secondary",
|
|
94
96
|
children: "Loading dashboard..."
|
|
95
97
|
})]
|
|
96
98
|
})
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
});
|
|
100
|
+
if (g) return /* @__PURE__ */ u("div", {
|
|
101
|
+
className: "flex h-full items-center justify-center",
|
|
102
|
+
role: "alert",
|
|
103
|
+
children: /* @__PURE__ */ u(e, {
|
|
104
|
+
headingLevel: 3,
|
|
105
|
+
tone: "danger",
|
|
106
|
+
className: "w-full max-w-md",
|
|
107
|
+
"data-testid": "drilldown-error",
|
|
108
|
+
title: "Could not load this dashboard",
|
|
109
|
+
description: g,
|
|
110
|
+
icon: /* @__PURE__ */ u("svg", {
|
|
111
|
+
className: "h-icon-md w-icon-md",
|
|
103
112
|
fill: "none",
|
|
104
113
|
stroke: "currentColor",
|
|
105
114
|
viewBox: "0 0 24 24",
|
|
106
|
-
children: /* @__PURE__ */
|
|
115
|
+
children: /* @__PURE__ */ u("path", {
|
|
107
116
|
strokeLinecap: "round",
|
|
108
117
|
strokeLinejoin: "round",
|
|
109
118
|
strokeWidth: 1.5,
|
|
110
119
|
d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
|
|
111
120
|
})
|
|
112
|
-
})
|
|
113
|
-
className: "text-sm text-text-secondary",
|
|
114
|
-
children: m
|
|
115
|
-
})]
|
|
121
|
+
})
|
|
116
122
|
})
|
|
117
|
-
})
|
|
123
|
+
});
|
|
124
|
+
if (!v || b.length === 0) return /* @__PURE__ */ u("div", {
|
|
118
125
|
className: "flex items-center justify-center h-full",
|
|
119
|
-
children: /* @__PURE__ */
|
|
126
|
+
children: /* @__PURE__ */ d("div", {
|
|
120
127
|
className: "flex flex-col items-center gap-3 text-center",
|
|
121
|
-
children: [/* @__PURE__ */
|
|
122
|
-
className: "w-12 h-12 text-text-
|
|
128
|
+
children: [/* @__PURE__ */ u("svg", {
|
|
129
|
+
className: "w-12 h-12 text-text-muted",
|
|
123
130
|
fill: "none",
|
|
124
131
|
stroke: "currentColor",
|
|
125
132
|
viewBox: "0 0 24 24",
|
|
126
|
-
children: /* @__PURE__ */
|
|
133
|
+
children: /* @__PURE__ */ u("path", {
|
|
127
134
|
strokeLinecap: "round",
|
|
128
135
|
strokeLinejoin: "round",
|
|
129
136
|
strokeWidth: 1.5,
|
|
130
137
|
d: "M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z"
|
|
131
138
|
})
|
|
132
|
-
}), /* @__PURE__ */
|
|
139
|
+
}), /* @__PURE__ */ u("p", {
|
|
133
140
|
className: "text-sm text-text-secondary",
|
|
134
|
-
children:
|
|
141
|
+
children: v ? "This dashboard has no widgets" : "Dashboard not found"
|
|
135
142
|
})]
|
|
136
143
|
})
|
|
137
|
-
})
|
|
144
|
+
});
|
|
145
|
+
let S = Object.entries(a).filter(([e]) => !e.startsWith("__"));
|
|
146
|
+
return /* @__PURE__ */ d(t, {
|
|
138
147
|
className: "w-full",
|
|
139
|
-
children: [
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
148
|
+
children: [
|
|
149
|
+
/* @__PURE__ */ u(e, {
|
|
150
|
+
emphasis: "bare",
|
|
151
|
+
padding: "none",
|
|
152
|
+
headingLevel: 3,
|
|
153
|
+
title: v.name,
|
|
154
|
+
description: v.description,
|
|
155
|
+
"data-testid": "drilldown-dashboard-header"
|
|
156
|
+
}),
|
|
157
|
+
S.length > 0 && /* @__PURE__ */ u(e, {
|
|
158
|
+
emphasis: "muted",
|
|
159
|
+
padding: "compact",
|
|
160
|
+
headingLevel: 3,
|
|
161
|
+
title: "Filtered by",
|
|
162
|
+
"data-testid": "drilldown-params",
|
|
163
|
+
bodyClassName: "flex flex-wrap gap-control-gap",
|
|
164
|
+
children: S.map(([e, t]) => /* @__PURE__ */ d("span", {
|
|
165
|
+
className: "inline-flex items-center rounded-pill bg-bg-surface px-2 py-1 text-xs text-text-secondary",
|
|
166
|
+
children: [/* @__PURE__ */ d("span", {
|
|
167
|
+
className: "font-medium text-text-primary",
|
|
168
|
+
children: [e, ":"]
|
|
169
|
+
}), /* @__PURE__ */ u("span", {
|
|
170
|
+
className: "ml-1",
|
|
171
|
+
children: typeof t == "object" && t ? JSON.stringify(t) : String(t)
|
|
172
|
+
})]
|
|
173
|
+
}, e))
|
|
174
|
+
}),
|
|
175
|
+
/* @__PURE__ */ u("div", {
|
|
176
|
+
className: "flex flex-col gap-form-gap",
|
|
177
|
+
children: b.map((e) => {
|
|
178
|
+
let t = e.config?._internalWidgetType, n = e.type;
|
|
179
|
+
return /* @__PURE__ */ u("div", {
|
|
180
|
+
className: "min-w-0 overflow-hidden rounded-card border border-[var(--color-border-subtle)] bg-bg-surface",
|
|
181
|
+
style: n === "LINE_CHART" || n === "chart" || t === "chart" || t === "funnel_chart" ? { height: "clamp(220px, 45vh, 350px)" } : n === "TABLE" || n === "table" || t === "table" || t === "list" || t === "pivot_table" ? {
|
|
182
|
+
minHeight: "min(250px, 40vh)",
|
|
183
|
+
maxHeight: "min(500px, 65vh)"
|
|
184
|
+
} : {
|
|
185
|
+
minHeight: "min(120px, 25vh)",
|
|
186
|
+
maxHeight: "min(300px, 50vh)"
|
|
187
|
+
},
|
|
188
|
+
children: /* @__PURE__ */ u(m, {
|
|
189
|
+
widget: e,
|
|
190
|
+
filterValues: a
|
|
191
|
+
})
|
|
192
|
+
}, e.id);
|
|
162
193
|
})
|
|
163
|
-
]
|
|
164
|
-
}), /* @__PURE__ */ c("div", {
|
|
165
|
-
className: "space-y-4",
|
|
166
|
-
children: v.map((e) => {
|
|
167
|
-
let t = e.config?._internalWidgetType, n = e.type;
|
|
168
|
-
return /* @__PURE__ */ c("div", {
|
|
169
|
-
className: "border border-border-default rounded-lg bg-bg-surface overflow-hidden",
|
|
170
|
-
style: n === "LINE_CHART" || n === "chart" || t === "chart" || t === "funnel_chart" ? { height: "350px" } : n === "TABLE" || n === "table" || t === "table" || t === "list" || t === "pivot_table" ? {
|
|
171
|
-
minHeight: "250px",
|
|
172
|
-
maxHeight: "500px"
|
|
173
|
-
} : {
|
|
174
|
-
minHeight: "120px",
|
|
175
|
-
maxHeight: "300px"
|
|
176
|
-
},
|
|
177
|
-
children: /* @__PURE__ */ c(f, {
|
|
178
|
-
widget: e,
|
|
179
|
-
filterValues: r
|
|
180
|
-
})
|
|
181
|
-
}, e.id);
|
|
182
194
|
})
|
|
183
|
-
|
|
195
|
+
]
|
|
184
196
|
});
|
|
185
|
-
}),
|
|
186
|
-
return /* @__PURE__ */
|
|
197
|
+
}), m = o(function({ widget: e, filterValues: t }) {
|
|
198
|
+
return /* @__PURE__ */ u("div", {
|
|
187
199
|
className: "h-full [&_[data-widget-id]]:border-transparent [&_[data-widget-id]:hover]:border-transparent",
|
|
188
|
-
children: /* @__PURE__ */
|
|
200
|
+
children: /* @__PURE__ */ u(a, {
|
|
189
201
|
widget: e,
|
|
190
202
|
isLoading: !1,
|
|
191
203
|
error: null,
|
|
@@ -194,6 +206,6 @@ var d = i(function({ dashboardId: n, params: r }) {
|
|
|
194
206
|
});
|
|
195
207
|
});
|
|
196
208
|
//#endregion
|
|
197
|
-
export {
|
|
209
|
+
export { p as default };
|
|
198
210
|
|
|
199
211
|
//# sourceMappingURL=DrilldownDashboardRenderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrilldownDashboardRenderer.js","names":[],"sources":["../../../src/bigconsole/components/DrilldownDashboardRenderer.tsx"],"sourcesContent":["/**\n * DrilldownDashboardRenderer Component\n *\n * Renders a dashboard inside the DrilldownModal.\n * Fetches dashboard data and displays widgets with passed parameters.\n */\n\nimport { type FC, memo, useEffect, useState } from 'react';\nimport { useApolloClient } from '@apollo/client/react';\nimport type { Widget } from '../types';\nimport { WidgetWrapper } from './widgets/WidgetWrapper';\nimport { ListWidgetsByDashboardDocument, GetDashboardDocument } from '../../generated/wspace-operations';\nimport { mapFromFederationWidgetType } from '../utils/widgetTypeMapping';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface DrilldownDashboardRendererProps {\n /** Target dashboard ID to render */\n dashboardId: string;\n /** Parameters passed from drilldown (can be used for filtering) */\n params: Record<string, unknown>;\n}\n\ninterface DashboardData {\n id: string;\n name: string;\n description?: string;\n pages: Array<{\n id: string;\n name: string;\n }>;\n}\n\n// ============================================================================\n// Helper: Normalize widget from GraphQL\n// ============================================================================\n\nfunction normalizeWidget(raw: Record<string, unknown>, index: number): Widget {\n // For drilldown modal, stack widgets vertically with compact sizing\n const posX = 0;\n const posY = index * 4; // Stack vertically, 4 row units per widget\n const posW = 12; // Full width\n const posH = 4; // Better height for widget content\n\n const position = { x: posX, y: posY, width: posW, height: posH };\n\n // Get the config object\n const config = (raw.config as Record<string, unknown>) || {};\n\n // Map widget type correctly: check _internalWidgetType first, then map from federation type\n // This is critical — federation types like 'KPI' must be mapped to internal types like 'metric_card'\n const internalType = config._internalWidgetType as string | undefined;\n const widgetType = internalType || mapFromFederationWidgetType((raw.type as string) || 'KPI');\n\n return {\n id: (raw.id as string) ?? '',\n pageId: (raw.pageId as string) || '',\n dashboardId: raw.dashboardId as string | undefined,\n type: widgetType,\n title: (raw.title as string) || 'Untitled Widget',\n renderer: raw.renderer || 'BIGCONSOLE',\n template: raw.template || null,\n dataSinkId: raw.dataSinkId || null,\n datasetId: raw.datasetId || null,\n parserId: raw.parserId || null,\n parserRules: raw.parserRules || null,\n config: config,\n position: position,\n positionX: posX,\n positionY: posY,\n positionWidth: posW,\n positionHeight: posH,\n positionResponsive: raw.positionResponsive as Widget['positionResponsive'],\n rowOrder: (raw.rowOrder as number | null) ?? null,\n refreshInterval: raw.refreshInterval,\n lastRefreshedAt: raw.lastRefreshedAt,\n cacheTTL: (raw.cacheTTL as number | null) ?? null,\n drilldown: raw.drilldown as Widget['drilldown'],\n actions: (raw.actions as Widget['actions']) || [],\n translations: (raw.translations as Widget['translations']) || [],\n metadata: raw.metadata as Record<string, unknown> | undefined,\n context: raw.context,\n // Include widget data from backend (critical for showing real data in modal)\n data: raw.data || null,\n createdAt: (raw.createdAt as string) || new Date().toISOString(),\n updatedAt: (raw.updatedAt as string) || new Date().toISOString(),\n } as Widget;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const DrilldownDashboardRenderer: FC<DrilldownDashboardRendererProps> = memo(\n function DrilldownDashboardRenderer({ dashboardId, params }) {\n const apolloClient = useApolloClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [dashboard, setDashboard] = useState<DashboardData | null>(null);\n const [widgets, setWidgets] = useState<Widget[]>([]);\n\n // Fetch dashboard and widgets — only when dashboardId is provided\n useEffect(() => {\n if (!dashboardId) {\n setLoading(false);\n return;\n }\n\n async function fetchData() {\n setLoading(true);\n setError(null);\n\n try {\n // Fetch dashboard info\n interface DashboardQueryResult {\n getDashboard: {\n id: string;\n name: string;\n description?: string;\n pages?: {\n edges?: Array<{ node: { id: string; name?: string } }>;\n };\n } | null;\n }\n\n const dashboardResult = await apolloClient.query<DashboardQueryResult>({\n query: GetDashboardDocument,\n variables: { id: dashboardId },\n fetchPolicy: 'network-only',\n });\n\n const dashboardData = dashboardResult.data?.getDashboard;\n if (!dashboardData) {\n setError('Dashboard not found');\n setLoading(false);\n return;\n }\n\n // Normalize dashboard\n const pages =\n dashboardData.pages?.edges?.map((edge) => ({\n id: edge.node.id,\n name: edge.node.name || 'Page 1',\n })) || [];\n\n setDashboard({\n id: dashboardData.id,\n name: dashboardData.name,\n description: dashboardData.description,\n pages,\n });\n\n // Fetch widgets for the dashboard\n const widgetsResult = await apolloClient.query<{ listWidgetsByDashboard: Record<string, unknown>[] }>({\n query: ListWidgetsByDashboardDocument,\n variables: { dashboardId },\n fetchPolicy: 'network-only',\n });\n\n const widgetsList = widgetsResult.data?.listWidgetsByDashboard || [];\n setWidgets(widgetsList.map((w, i) => normalizeWidget(w, i)));\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load dashboard');\n } finally {\n setLoading(false);\n }\n }\n\n fetchData();\n }, [dashboardId, apolloClient]);\n\n // Loading state\n if (loading) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"flex flex-col items-center gap-3\">\n <div className=\"w-8 h-8 border-2 border-action-primary-bg border-t-transparent rounded-full animate-spin\" />\n <p className=\"text-sm text-text-secondary\">Loading dashboard...</p>\n </div>\n </div>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"flex flex-col items-center gap-3 text-center max-w-md\">\n <svg className=\"w-12 h-12 text-status-error-text\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n <p className=\"text-sm text-text-secondary\">{error}</p>\n </div>\n </div>\n );\n }\n\n // Empty state\n if (!dashboard || widgets.length === 0) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <svg className=\"w-12 h-12 text-text-tertiary\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z\"\n />\n </svg>\n <p className=\"text-sm text-text-secondary\">\n {dashboard ? 'This dashboard has no widgets' : 'Dashboard not found'}\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"w-full\">\n {/* Dashboard Header */}\n <div className=\"pb-3 mb-4 border-b border-border-default\">\n <h3 className=\"text-lg font-semibold text-text-primary\">{dashboard.name}</h3>\n {dashboard.description && <p className=\"text-sm text-text-secondary mt-1\">{dashboard.description}</p>}\n {/* Show params if present (filter out internal __drilldown metadata) */}\n {Object.keys(params).filter((k) => !k.startsWith('__')).length > 0 && (\n <div className=\"flex flex-wrap gap-2 mt-2\">\n {Object.entries(params)\n .filter(([key]) => !key.startsWith('__'))\n .map(([key, value]) => (\n <span\n key={key}\n className=\"inline-flex items-center px-2 py-1 rounded bg-action-primary-bg/10 text-xs\"\n >\n <span className=\"font-medium text-text-primary\">{key}:</span>\n <span className=\"ml-1 text-action-primary-text\">\n {typeof value === 'object' && value !== null ? JSON.stringify(value) : String(value)}\n </span>\n </span>\n ))}\n </div>\n )}\n </div>\n\n {/* Widgets List - simple vertical layout for modal */}\n <div className=\"space-y-4\">\n {widgets.map((widget) => {\n // Chart widgets (LINE_CHART / chart) need explicit pixel height because\n // Recharts ResponsiveContainer height=\"100%\" requires a parent with\n // a definite height — minHeight alone doesn't work.\n const internalType = (widget.config as Record<string, unknown>)?._internalWidgetType as string | undefined;\n const widgetType = widget.type as string;\n const isChartWidget =\n widgetType === 'LINE_CHART' ||\n widgetType === 'chart' ||\n internalType === 'chart' ||\n internalType === 'funnel_chart';\n const isTableWidget =\n widgetType === 'TABLE' ||\n widgetType === 'table' ||\n internalType === 'table' ||\n internalType === 'list' ||\n internalType === 'pivot_table';\n\n // Charts need explicit height; tables need more space; KPIs auto-size\n const heightStyle = isChartWidget\n ? { height: '350px' }\n : isTableWidget\n ? { minHeight: '250px', maxHeight: '500px' }\n : { minHeight: '120px', maxHeight: '300px' };\n\n return (\n <div\n key={widget.id}\n className=\"border border-border-default rounded-lg bg-bg-surface overflow-hidden\"\n style={heightStyle}\n >\n <WidgetInModal widget={widget} filterValues={params} />\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n);\n\n// ============================================================================\n// Widget In Modal Component\n// ============================================================================\n\ninterface WidgetInModalProps {\n widget: Widget;\n filterValues?: Record<string, unknown>;\n}\n\nconst WidgetInModal: FC<WidgetInModalProps> = memo(function WidgetInModal({ widget, filterValues }) {\n return (\n <div className=\"h-full [&_[data-widget-id]]:border-transparent [&_[data-widget-id]:hover]:border-transparent\">\n <WidgetWrapper widget={widget} isLoading={false} error={null} filterValues={filterValues} />\n </div>\n );\n});\n\nexport default DrilldownDashboardRenderer;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DrilldownDashboardRenderer.js","names":[],"sources":["../../../src/bigconsole/components/DrilldownDashboardRenderer.tsx"],"sourcesContent":["/**\n * DrilldownDashboardRenderer Component\n *\n * Renders a dashboard inside the DrilldownModal.\n * Fetches dashboard data and displays widgets with passed parameters.\n */\n\nimport { type FC, memo, useEffect, useState } from 'react';\nimport { useApolloClient } from '@apollo/client/react';\nimport type { Widget } from '../types';\nimport { WidgetWrapper } from './widgets/WidgetWrapper';\nimport { Section, SectionStack } from './common';\nimport { ListWidgetsByDashboardDocument, GetDashboardDocument } from '../../generated/wspace-operations';\nimport { mapFromFederationWidgetType } from '../utils/widgetTypeMapping';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface DrilldownDashboardRendererProps {\n /** Target dashboard ID to render */\n dashboardId: string;\n /** Parameters passed from drilldown (can be used for filtering) */\n params: Record<string, unknown>;\n}\n\ninterface DashboardData {\n id: string;\n name: string;\n description?: string;\n pages: Array<{\n id: string;\n name: string;\n }>;\n}\n\n// ============================================================================\n// Helper: Normalize widget from GraphQL\n// ============================================================================\n\nfunction normalizeWidget(raw: Record<string, unknown>, index: number): Widget {\n // For drilldown modal, stack widgets vertically with compact sizing\n const posX = 0;\n const posY = index * 4; // Stack vertically, 4 row units per widget\n const posW = 12; // Full width\n const posH = 4; // Better height for widget content\n\n const position = { x: posX, y: posY, width: posW, height: posH };\n\n // Get the config object\n const config = (raw.config as Record<string, unknown>) || {};\n\n // Map widget type correctly: check _internalWidgetType first, then map from federation type\n // This is critical — federation types like 'KPI' must be mapped to internal types like 'metric_card'\n const internalType = config._internalWidgetType as string | undefined;\n const widgetType = internalType || mapFromFederationWidgetType((raw.type as string) || 'KPI');\n\n return {\n id: (raw.id as string) ?? '',\n pageId: (raw.pageId as string) || '',\n dashboardId: raw.dashboardId as string | undefined,\n type: widgetType,\n title: (raw.title as string) || 'Untitled Widget',\n renderer: raw.renderer || 'BIGCONSOLE',\n template: raw.template || null,\n dataSinkId: raw.dataSinkId || null,\n datasetId: raw.datasetId || null,\n parserId: raw.parserId || null,\n parserRules: raw.parserRules || null,\n config: config,\n position: position,\n positionX: posX,\n positionY: posY,\n positionWidth: posW,\n positionHeight: posH,\n positionResponsive: raw.positionResponsive as Widget['positionResponsive'],\n rowOrder: (raw.rowOrder as number | null) ?? null,\n refreshInterval: raw.refreshInterval,\n lastRefreshedAt: raw.lastRefreshedAt,\n cacheTTL: (raw.cacheTTL as number | null) ?? null,\n drilldown: raw.drilldown as Widget['drilldown'],\n actions: (raw.actions as Widget['actions']) || [],\n translations: (raw.translations as Widget['translations']) || [],\n metadata: raw.metadata as Record<string, unknown> | undefined,\n context: raw.context,\n // Include widget data from backend (critical for showing real data in modal)\n data: raw.data || null,\n createdAt: (raw.createdAt as string) || new Date().toISOString(),\n updatedAt: (raw.updatedAt as string) || new Date().toISOString(),\n } as Widget;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const DrilldownDashboardRenderer: FC<DrilldownDashboardRendererProps> = memo(\n function DrilldownDashboardRenderer({ dashboardId, params }) {\n const apolloClient = useApolloClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [dashboard, setDashboard] = useState<DashboardData | null>(null);\n const [widgets, setWidgets] = useState<Widget[]>([]);\n\n // Fetch dashboard and widgets — only when dashboardId is provided\n useEffect(() => {\n if (!dashboardId) {\n setLoading(false);\n return;\n }\n\n async function fetchData() {\n setLoading(true);\n setError(null);\n\n try {\n // Fetch dashboard info\n interface DashboardQueryResult {\n getDashboard: {\n id: string;\n name: string;\n description?: string;\n pages?: {\n edges?: Array<{ node: { id: string; name?: string } }>;\n };\n } | null;\n }\n\n const dashboardResult = await apolloClient.query<DashboardQueryResult>({\n query: GetDashboardDocument,\n variables: { id: dashboardId },\n fetchPolicy: 'network-only',\n });\n\n const dashboardData = dashboardResult.data?.getDashboard;\n if (!dashboardData) {\n setError('Dashboard not found');\n setLoading(false);\n return;\n }\n\n // Normalize dashboard\n const pages =\n dashboardData.pages?.edges?.map((edge) => ({\n id: edge.node.id,\n name: edge.node.name || 'Page 1',\n })) || [];\n\n setDashboard({\n id: dashboardData.id,\n name: dashboardData.name,\n description: dashboardData.description,\n pages,\n });\n\n // Fetch widgets for the dashboard\n const widgetsResult = await apolloClient.query<{ listWidgetsByDashboard: Record<string, unknown>[] }>({\n query: ListWidgetsByDashboardDocument,\n variables: { dashboardId },\n fetchPolicy: 'network-only',\n });\n\n const widgetsList = widgetsResult.data?.listWidgetsByDashboard || [];\n setWidgets(widgetsList.map((w, i) => normalizeWidget(w, i)));\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load dashboard');\n } finally {\n setLoading(false);\n }\n }\n\n fetchData();\n }, [dashboardId, apolloClient]);\n\n // Loading state\n if (loading) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"flex flex-col items-center gap-3\">\n <div className=\"w-8 h-8 border-2 border-action-primary-bg border-t-transparent rounded-full animate-spin\" />\n <p className=\"text-sm text-text-secondary\">Loading dashboard...</p>\n </div>\n </div>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"flex h-full items-center justify-center\" role=\"alert\">\n <Section\n headingLevel={3}\n tone=\"danger\"\n className=\"w-full max-w-md\"\n data-testid=\"drilldown-error\"\n title=\"Could not load this dashboard\"\n description={error}\n icon={\n <svg className=\"h-icon-md w-icon-md\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n }\n />\n </div>\n );\n }\n\n // Empty state\n if (!dashboard || widgets.length === 0) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <svg className=\"w-12 h-12 text-text-muted\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z\"\n />\n </svg>\n <p className=\"text-sm text-text-secondary\">\n {dashboard ? 'This dashboard has no widgets' : 'Dashboard not found'}\n </p>\n </div>\n </div>\n );\n }\n\n const visibleParams = Object.entries(params).filter(([key]) => !key.startsWith('__'));\n\n return (\n <SectionStack className=\"w-full\">\n {/* Which board you drilled into — identity, not content. */}\n <Section\n emphasis=\"bare\"\n padding=\"none\"\n headingLevel={3}\n title={dashboard.name}\n description={dashboard.description}\n data-testid=\"drilldown-dashboard-header\"\n />\n\n {/* The filter context you arrived with: supporting detail, recessed. */}\n {visibleParams.length > 0 && (\n <Section\n emphasis=\"muted\"\n padding=\"compact\"\n headingLevel={3}\n title=\"Filtered by\"\n data-testid=\"drilldown-params\"\n bodyClassName=\"flex flex-wrap gap-control-gap\"\n >\n {visibleParams.map(([key, value]) => (\n <span\n key={key}\n className=\"inline-flex items-center rounded-pill bg-bg-surface px-2 py-1 text-xs text-text-secondary\"\n >\n <span className=\"font-medium text-text-primary\">{key}:</span>\n <span className=\"ml-1\">\n {typeof value === 'object' && value !== null ? JSON.stringify(value) : String(value)}\n </span>\n </span>\n ))}\n </Section>\n )}\n\n {/* Widgets List - simple vertical layout for modal */}\n <div className=\"flex flex-col gap-form-gap\">\n {widgets.map((widget) => {\n // Chart widgets (LINE_CHART / chart) need explicit pixel height because\n // Recharts ResponsiveContainer height=\"100%\" requires a parent with\n // a definite height — minHeight alone doesn't work.\n const internalType = (widget.config as Record<string, unknown>)?._internalWidgetType as string | undefined;\n const widgetType = widget.type as string;\n const isChartWidget =\n widgetType === 'LINE_CHART' ||\n widgetType === 'chart' ||\n internalType === 'chart' ||\n internalType === 'funnel_chart';\n const isTableWidget =\n widgetType === 'TABLE' ||\n widgetType === 'table' ||\n internalType === 'table' ||\n internalType === 'list' ||\n internalType === 'pivot_table';\n\n // Charts need an explicit height (Recharts' ResponsiveContainer needs a\n // definite parent). Clamping against the viewport keeps a 350px chart\n // plus a 500px table from filling a phone screen twice over.\n const heightStyle = isChartWidget\n ? { height: 'clamp(220px, 45vh, 350px)' }\n : isTableWidget\n ? { minHeight: 'min(250px, 40vh)', maxHeight: 'min(500px, 65vh)' }\n : { minHeight: 'min(120px, 25vh)', maxHeight: 'min(300px, 50vh)' };\n\n return (\n <div\n key={widget.id}\n className=\"min-w-0 overflow-hidden rounded-card border border-[var(--color-border-subtle)] bg-bg-surface\"\n style={heightStyle}\n >\n <WidgetInModal widget={widget} filterValues={params} />\n </div>\n );\n })}\n </div>\n </SectionStack>\n );\n }\n);\n\n// ============================================================================\n// Widget In Modal Component\n// ============================================================================\n\ninterface WidgetInModalProps {\n widget: Widget;\n filterValues?: Record<string, unknown>;\n}\n\nconst WidgetInModal: FC<WidgetInModalProps> = memo(function WidgetInModal({ widget, filterValues }) {\n return (\n <div className=\"h-full [&_[data-widget-id]]:border-transparent [&_[data-widget-id]:hover]:border-transparent\">\n <WidgetWrapper widget={widget} isLoading={false} error={null} filterValues={filterValues} />\n </div>\n );\n});\n\nexport default DrilldownDashboardRenderer;\n"],"mappings":"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"}
|
|
@@ -1,49 +1,52 @@
|
|
|
1
1
|
import e from "../store/drilldownStore.js";
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
2
|
+
import { SECTION_FOCUS_RING as t } from "./common/sectionStyles.js";
|
|
3
|
+
import "./common/index.js";
|
|
4
|
+
import { memo as n, useCallback as r, useEffect as i } from "react";
|
|
5
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
4
6
|
//#region src/bigconsole/components/DrilldownModal.tsx
|
|
5
|
-
var
|
|
6
|
-
let
|
|
7
|
-
|
|
8
|
-
}, [
|
|
9
|
-
|
|
10
|
-
}, [
|
|
11
|
-
e.target === e.currentTarget &&
|
|
12
|
-
}, [
|
|
13
|
-
return
|
|
7
|
+
var s = n(function({ renderDashboard: n, onClose: s }) {
|
|
8
|
+
let l = e((e) => e.isOpen), u = e((e) => e.dashboardId), d = e((e) => e.params), f = e((e) => e.history), p = e((e) => e.closeModal), m = e((e) => e.popDrilldown), h = r(() => {
|
|
9
|
+
p(), s?.();
|
|
10
|
+
}, [p, s]), g = r(() => {
|
|
11
|
+
m();
|
|
12
|
+
}, [m]), _ = r((e) => {
|
|
13
|
+
e.target === e.currentTarget && h();
|
|
14
|
+
}, [h]);
|
|
15
|
+
return i(() => {
|
|
14
16
|
let e = (e) => {
|
|
15
|
-
e.key === "Escape" &&
|
|
17
|
+
e.key === "Escape" && l && h();
|
|
16
18
|
};
|
|
17
19
|
return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
|
|
18
|
-
}, [
|
|
20
|
+
}, [l, h]), i(() => (l ? document.body.style.overflow = "hidden" : document.body.style.overflow = "", () => {
|
|
19
21
|
document.body.style.overflow = "";
|
|
20
|
-
}), [
|
|
22
|
+
}), [l]), !l || !u ? null : /* @__PURE__ */ o("div", {
|
|
21
23
|
className: "fixed inset-0 z-50 flex items-center justify-center p-4",
|
|
22
24
|
role: "dialog",
|
|
23
25
|
"aria-modal": "true",
|
|
24
26
|
"aria-labelledby": "drilldown-modal-title",
|
|
25
|
-
onClick:
|
|
26
|
-
children: [/* @__PURE__ */
|
|
27
|
-
className: "relative z-10 w-full max-w-5xl bg-bg-surface
|
|
27
|
+
onClick: _,
|
|
28
|
+
children: [/* @__PURE__ */ a("div", { className: "absolute inset-0 bg-[var(--color-overlay-scrim)] backdrop-blur-sm" }), /* @__PURE__ */ o("div", {
|
|
29
|
+
className: "relative z-10 flex w-full max-w-5xl flex-col overflow-hidden rounded-card bg-bg-surface shadow-[var(--shadow-elevation-3)]",
|
|
28
30
|
style: { maxHeight: "calc(100vh - 2rem)" },
|
|
29
31
|
onClick: (e) => e.stopPropagation(),
|
|
30
32
|
children: [
|
|
31
|
-
/* @__PURE__ */
|
|
32
|
-
className: "flex-shrink-0 flex items-center justify-between
|
|
33
|
-
children: [/* @__PURE__ */
|
|
34
|
-
className: "flex items-center gap-3",
|
|
33
|
+
/* @__PURE__ */ o("div", {
|
|
34
|
+
className: "flex flex-shrink-0 flex-wrap items-center justify-between gap-control-gap border-b border-[var(--color-border-subtle)] px-4 py-3",
|
|
35
|
+
children: [/* @__PURE__ */ o("div", {
|
|
36
|
+
className: "flex min-w-0 items-center gap-3",
|
|
35
37
|
children: [
|
|
36
|
-
|
|
38
|
+
f.length > 0 && /* @__PURE__ */ a("button", {
|
|
37
39
|
type: "button",
|
|
38
|
-
onClick:
|
|
39
|
-
className: "
|
|
40
|
+
onClick: g,
|
|
41
|
+
className: "flex h-control-md w-[var(--size-controlHeight-md)] shrink-0 items-center justify-center rounded-button motion-safe:transition-colors hover:bg-bg-sunken focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface",
|
|
40
42
|
title: "Go back",
|
|
41
|
-
|
|
43
|
+
"aria-label": "Go back",
|
|
44
|
+
children: /* @__PURE__ */ a("svg", {
|
|
42
45
|
className: "w-5 h-5 text-text-secondary",
|
|
43
46
|
fill: "none",
|
|
44
47
|
stroke: "currentColor",
|
|
45
48
|
viewBox: "0 0 24 24",
|
|
46
|
-
children: /* @__PURE__ */
|
|
49
|
+
children: /* @__PURE__ */ a("path", {
|
|
47
50
|
strokeLinecap: "round",
|
|
48
51
|
strokeLinejoin: "round",
|
|
49
52
|
strokeWidth: 2,
|
|
@@ -51,33 +54,34 @@ var o = t(function({ renderDashboard: t, onClose: o }) {
|
|
|
51
54
|
})
|
|
52
55
|
})
|
|
53
56
|
}),
|
|
54
|
-
/* @__PURE__ */
|
|
57
|
+
/* @__PURE__ */ a("h2", {
|
|
55
58
|
id: "drilldown-modal-title",
|
|
56
|
-
className: "text-sm font-
|
|
59
|
+
className: "truncate text-sm font-semibold text-text-primary",
|
|
57
60
|
children: "Drilldown View"
|
|
58
61
|
}),
|
|
59
|
-
|
|
60
|
-
className: "text-xs text-text-
|
|
62
|
+
f.length > 0 && /* @__PURE__ */ o("span", {
|
|
63
|
+
className: "text-xs text-text-muted",
|
|
61
64
|
children: [
|
|
62
65
|
"(",
|
|
63
|
-
|
|
66
|
+
f.length + 1,
|
|
64
67
|
" level",
|
|
65
|
-
|
|
68
|
+
f.length > 0 ? "s" : "",
|
|
66
69
|
" deep)"
|
|
67
70
|
]
|
|
68
71
|
})
|
|
69
72
|
]
|
|
70
|
-
}), /* @__PURE__ */
|
|
73
|
+
}), /* @__PURE__ */ a("button", {
|
|
71
74
|
type: "button",
|
|
72
|
-
onClick:
|
|
73
|
-
className:
|
|
75
|
+
onClick: h,
|
|
76
|
+
className: `flex h-control-md w-[var(--size-controlHeight-md)] shrink-0 items-center justify-center rounded-button motion-safe:transition-colors hover:bg-bg-sunken ${t}`,
|
|
74
77
|
title: "Close (Esc)",
|
|
75
|
-
|
|
78
|
+
"aria-label": "Close drilldown",
|
|
79
|
+
children: /* @__PURE__ */ a("svg", {
|
|
76
80
|
className: "w-5 h-5 text-text-secondary",
|
|
77
81
|
fill: "none",
|
|
78
82
|
stroke: "currentColor",
|
|
79
83
|
viewBox: "0 0 24 24",
|
|
80
|
-
children: /* @__PURE__ */
|
|
84
|
+
children: /* @__PURE__ */ a("path", {
|
|
81
85
|
strokeLinecap: "round",
|
|
82
86
|
strokeLinejoin: "round",
|
|
83
87
|
strokeWidth: 2,
|
|
@@ -86,32 +90,32 @@ var o = t(function({ renderDashboard: t, onClose: o }) {
|
|
|
86
90
|
})
|
|
87
91
|
})]
|
|
88
92
|
}),
|
|
89
|
-
/* @__PURE__ */
|
|
90
|
-
className: "flex-1 overflow-y-auto
|
|
91
|
-
children:
|
|
93
|
+
/* @__PURE__ */ a("div", {
|
|
94
|
+
className: "min-h-0 flex-1 overflow-y-auto bg-bg-sunken p-4",
|
|
95
|
+
children: n ? n(u, d) : /* @__PURE__ */ a(c, {})
|
|
92
96
|
}),
|
|
93
|
-
/* @__PURE__ */
|
|
94
|
-
className: "flex-shrink-0
|
|
95
|
-
children: /* @__PURE__ */
|
|
96
|
-
className: "flex items-center justify-between text-xs text-text-
|
|
97
|
-
children: [/* @__PURE__ */
|
|
97
|
+
/* @__PURE__ */ a("div", {
|
|
98
|
+
className: "flex-shrink-0 border-t border-[var(--color-border-subtle)] px-4 py-2",
|
|
99
|
+
children: /* @__PURE__ */ o("div", {
|
|
100
|
+
className: "flex flex-wrap items-center justify-between gap-x-4 gap-y-1 text-xs text-text-muted",
|
|
101
|
+
children: [/* @__PURE__ */ o("span", { children: [
|
|
98
102
|
"Parameters:",
|
|
99
103
|
" ",
|
|
100
|
-
Object.keys(
|
|
101
|
-
] }), /* @__PURE__ */
|
|
104
|
+
Object.keys(d).filter((e) => !e.startsWith("__")).length > 0 ? Object.keys(d).filter((e) => !e.startsWith("__")).join(", ") : "None"
|
|
105
|
+
] }), /* @__PURE__ */ a("span", { children: "Press Esc to close" })]
|
|
102
106
|
})
|
|
103
107
|
})
|
|
104
108
|
]
|
|
105
109
|
})]
|
|
106
110
|
});
|
|
107
111
|
});
|
|
108
|
-
function
|
|
109
|
-
return /* @__PURE__ */
|
|
112
|
+
function c() {
|
|
113
|
+
return /* @__PURE__ */ a("div", {
|
|
110
114
|
className: "flex items-center justify-center h-full text-sm text-text-secondary",
|
|
111
115
|
children: "Unable to load drilldown content. Please try again."
|
|
112
116
|
});
|
|
113
117
|
}
|
|
114
118
|
//#endregion
|
|
115
|
-
export {
|
|
119
|
+
export { s as default };
|
|
116
120
|
|
|
117
121
|
//# sourceMappingURL=DrilldownModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrilldownModal.js","names":[],"sources":["../../../src/bigconsole/components/DrilldownModal.tsx"],"sourcesContent":["/**\n * DrilldownModal Component\n *\n * Modal overlay for displaying drilldown dashboards.\n * Supports nested drilldowns with back navigation.\n */\n\nimport { type FC, useEffect, useCallback, memo } from 'react';\nimport { useDrilldownStore } from '../store/drilldownStore';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface DrilldownModalProps {\n /** Custom content renderer for the dashboard */\n renderDashboard?: (dashboardId: string, params: Record<string, unknown>) => React.ReactNode;\n /** Called when modal closes */\n onClose?: () => void;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const DrilldownModal: FC<DrilldownModalProps> = memo(function DrilldownModal({ renderDashboard, onClose }) {\n const isOpen = useDrilldownStore((state) => state.isOpen);\n const dashboardId = useDrilldownStore((state) => state.dashboardId);\n const params = useDrilldownStore((state) => state.params);\n const history = useDrilldownStore((state) => state.history);\n const closeModal = useDrilldownStore((state) => state.closeModal);\n const popDrilldown = useDrilldownStore((state) => state.popDrilldown);\n\n // Define handlers before effects that use them\n const handleClose = useCallback(() => {\n closeModal();\n onClose?.();\n }, [closeModal, onClose]);\n\n const handleBack = useCallback(() => {\n popDrilldown();\n }, [popDrilldown]);\n\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n handleClose();\n }\n },\n [handleClose]\n );\n\n // Handle escape key\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n handleClose();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen, handleClose]);\n\n // Prevent body scroll when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [isOpen]);\n\n if (!isOpen || !dashboardId) {\n return null;\n }\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"drilldown-modal-title\"\n onClick={handleBackdropClick}\n >\n {/* Backdrop */}\n <div className=\"absolute inset-0 bg-
|
|
1
|
+
{"version":3,"file":"DrilldownModal.js","names":[],"sources":["../../../src/bigconsole/components/DrilldownModal.tsx"],"sourcesContent":["/**\n * DrilldownModal Component\n *\n * Modal overlay for displaying drilldown dashboards.\n * Supports nested drilldowns with back navigation.\n */\n\nimport { type FC, useEffect, useCallback, memo } from 'react';\nimport { useDrilldownStore } from '../store/drilldownStore';\nimport { SECTION_FOCUS_RING } from './common';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface DrilldownModalProps {\n /** Custom content renderer for the dashboard */\n renderDashboard?: (dashboardId: string, params: Record<string, unknown>) => React.ReactNode;\n /** Called when modal closes */\n onClose?: () => void;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const DrilldownModal: FC<DrilldownModalProps> = memo(function DrilldownModal({ renderDashboard, onClose }) {\n const isOpen = useDrilldownStore((state) => state.isOpen);\n const dashboardId = useDrilldownStore((state) => state.dashboardId);\n const params = useDrilldownStore((state) => state.params);\n const history = useDrilldownStore((state) => state.history);\n const closeModal = useDrilldownStore((state) => state.closeModal);\n const popDrilldown = useDrilldownStore((state) => state.popDrilldown);\n\n // Define handlers before effects that use them\n const handleClose = useCallback(() => {\n closeModal();\n onClose?.();\n }, [closeModal, onClose]);\n\n const handleBack = useCallback(() => {\n popDrilldown();\n }, [popDrilldown]);\n\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n handleClose();\n }\n },\n [handleClose]\n );\n\n // Handle escape key\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n handleClose();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen, handleClose]);\n\n // Prevent body scroll when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [isOpen]);\n\n if (!isOpen || !dashboardId) {\n return null;\n }\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"drilldown-modal-title\"\n onClick={handleBackdropClick}\n >\n {/* Backdrop */}\n <div className=\"absolute inset-0 bg-[var(--color-overlay-scrim)] backdrop-blur-sm\" />\n\n {/* Modal Content - contained within viewport */}\n <div\n className=\"relative z-10 flex w-full max-w-5xl flex-col overflow-hidden rounded-card bg-bg-surface shadow-[var(--shadow-elevation-3)]\"\n style={{ maxHeight: 'calc(100vh - 2rem)' }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header — bare chrome: identity + close, no surface of its own */}\n <div className=\"flex flex-shrink-0 flex-wrap items-center justify-between gap-control-gap border-b border-[var(--color-border-subtle)] px-4 py-3\">\n <div className=\"flex min-w-0 items-center gap-3\">\n {/* Back button */}\n {history.length > 0 && (\n <button\n type=\"button\"\n onClick={handleBack}\n className={`flex h-control-md w-[var(--size-controlHeight-md)] shrink-0 items-center justify-center rounded-button motion-safe:transition-colors hover:bg-bg-sunken ${SECTION_FOCUS_RING}`}\n title=\"Go back\"\n aria-label=\"Go back\"\n >\n <svg className=\"w-5 h-5 text-text-secondary\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n )}\n\n {/* Title */}\n <h2 id=\"drilldown-modal-title\" className=\"truncate text-sm font-semibold text-text-primary\">\n Drilldown View\n </h2>\n\n {/* Breadcrumb indicator */}\n {history.length > 0 && (\n <span className=\"text-xs text-text-muted\">\n ({history.length + 1} level{history.length > 0 ? 's' : ''} deep)\n </span>\n )}\n </div>\n\n {/* Close button */}\n <button\n type=\"button\"\n onClick={handleClose}\n className={`flex h-control-md w-[var(--size-controlHeight-md)] shrink-0 items-center justify-center rounded-button motion-safe:transition-colors hover:bg-bg-sunken ${SECTION_FOCUS_RING}`}\n title=\"Close (Esc)\"\n aria-label=\"Close drilldown\"\n >\n <svg className=\"w-5 h-5 text-text-secondary\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Dashboard Content — the point of the overlay, so it gets the surface\n weight and the chrome around it stays flat. */}\n <div className=\"min-h-0 flex-1 overflow-y-auto bg-bg-sunken p-4\">\n {renderDashboard ? renderDashboard(dashboardId, params) : <DrilldownFallback />}\n </div>\n\n {/* Footer — supporting detail only */}\n <div className=\"flex-shrink-0 border-t border-[var(--color-border-subtle)] px-4 py-2\">\n <div className=\"flex flex-wrap items-center justify-between gap-x-4 gap-y-1 text-xs text-text-muted\">\n <span>\n Parameters:{' '}\n {Object.keys(params).filter((k) => !k.startsWith('__')).length > 0\n ? Object.keys(params)\n .filter((k) => !k.startsWith('__'))\n .join(', ')\n : 'None'}\n </span>\n <span>Press Esc to close</span>\n </div>\n </div>\n </div>\n </div>\n );\n});\n\n// Fallback when no renderDashboard prop is provided (should not happen in normal usage\n// since BigConsoleRoot always passes DrilldownDashboardRenderer).\nfunction DrilldownFallback() {\n return (\n <div className=\"flex items-center justify-center h-full text-sm text-text-secondary\">\n Unable to load drilldown content. Please try again.\n </div>\n );\n}\n\nexport default DrilldownModal;\n"],"mappings":"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"}
|
|
@@ -3,12 +3,12 @@ import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
|
3
3
|
//#region src/bigconsole/components/builder/BuilderCanvas.tsx
|
|
4
4
|
var r = e(function({ palette: e, canvas: r, inspector: i }) {
|
|
5
5
|
return /* @__PURE__ */ n("div", {
|
|
6
|
-
className: "flex min-h-0 min-w-0 flex-1 overflow-hidden",
|
|
6
|
+
className: "flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden md:flex-row",
|
|
7
7
|
"data-testid": "dashboard-editor-panes",
|
|
8
8
|
children: [
|
|
9
9
|
e,
|
|
10
10
|
/* @__PURE__ */ t("main", {
|
|
11
|
-
className: "relative min-w-0 flex-1 overflow-hidden",
|
|
11
|
+
className: "relative min-h-0 min-w-0 flex-1 overflow-hidden",
|
|
12
12
|
children: r
|
|
13
13
|
}),
|
|
14
14
|
i
|