drizzle-cube 0.5.8 → 0.6.0
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/README.md +2 -0
- package/dist/adapters/adapters/hono/agent-handler.d.ts +9 -0
- package/dist/adapters/adapters/hono/mcp-handler.d.ts +37 -0
- package/dist/adapters/adapters/mcp-tools-handlers.d.ts +18 -0
- package/dist/adapters/adapters/nextjs/mcp-handler.d.ts +36 -0
- package/dist/adapters/adapters/utils.d.ts +6 -81
- package/dist/adapters/express/index.cjs +1 -1
- package/dist/adapters/express/index.js +50 -50
- package/dist/adapters/fastify/index.cjs +1 -1
- package/dist/adapters/fastify/index.js +78 -78
- package/dist/adapters/google-BOnRIN1w.cjs +2 -0
- package/dist/adapters/{google-CFYljAOF.js → google-CvKM9yVM.js} +83 -71
- package/dist/adapters/{handler-Cx8QYLk6.js → handler-CfgE0JSL.js} +499 -576
- package/dist/adapters/handler-Cn0dOctE.cjs +25 -0
- package/dist/adapters/hono/index.cjs +2 -2
- package/dist/adapters/hono/index.js +205 -175
- package/dist/adapters/locale-DDvZDFVn.js +8114 -0
- package/dist/adapters/locale-ZLUUNUxr.cjs +166 -0
- package/dist/adapters/mcp-tools.cjs +1 -1
- package/dist/adapters/mcp-tools.js +49 -38
- package/dist/adapters/mcp-transport-Chiaj4ll.cjs +40 -0
- package/dist/adapters/mcp-transport-H96VG3WY.js +591 -0
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.js +190 -197
- package/dist/adapters/{openai-BZdAA7Ji.js → openai-cDlFSTk6.js} +60 -58
- package/dist/adapters/openai-vXvLni8v.cjs +1 -0
- package/dist/adapters/{utils-D9JPLmfl.js → utils-BPWZsX7k.js} +1271 -1218
- package/dist/adapters/utils-_whV4fXL.cjs +128 -0
- package/dist/adapters/utils.cjs +1 -1
- package/dist/adapters/utils.js +2 -2
- package/dist/client/charts/ChartLoader.d.ts +2 -16
- package/dist/client/charts/chartComponentRegistry.d.ts +46 -0
- package/dist/client/charts/chartConfigHelpers.d.ts +38 -0
- package/dist/client/charts.js +14 -13
- package/dist/client/chunks/{DashboardEditModal-CjCIAT-J.js → DashboardEditModal-okVfH8ZK.js} +5296 -4544
- package/dist/client/chunks/DashboardEditModal-okVfH8ZK.js.map +1 -0
- package/dist/client/chunks/{RetentionCombinedChart-BPkfcTa8.js → RetentionCombinedChart-BgbDhsPz.js} +10 -10
- package/dist/client/chunks/{RetentionCombinedChart-BPkfcTa8.js.map → RetentionCombinedChart-BgbDhsPz.js.map} +1 -1
- package/dist/client/chunks/{RetentionHeatmap-DGzLzr7h.js → RetentionHeatmap-DjXZaTPq.js} +5 -5
- package/dist/client/chunks/{RetentionHeatmap-DGzLzr7h.js.map → RetentionHeatmap-DjXZaTPq.js.map} +1 -1
- package/dist/client/chunks/analysis-builder-DB88FojM.js +5674 -0
- package/dist/client/chunks/analysis-builder-DB88FojM.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-shared-CYVwSPqt.js → analysis-builder-shared-BVK4TYfR.js} +1578 -1292
- package/dist/client/chunks/analysis-builder-shared-BVK4TYfR.js.map +1 -0
- package/dist/client/chunks/{chart-activity-grid-DmruKPab.js → chart-activity-grid-DX0SJbxs.js} +635 -492
- package/dist/client/chunks/chart-activity-grid-DX0SJbxs.js.map +1 -0
- package/dist/client/chunks/chart-area-of01_62R.js +775 -0
- package/dist/client/chunks/chart-area-of01_62R.js.map +1 -0
- package/dist/client/chunks/chart-bar-BqelQE_I.js +194 -0
- package/dist/client/chunks/chart-bar-BqelQE_I.js.map +1 -0
- package/dist/client/chunks/{chart-box-plot-DYKfyOI8.js → chart-box-plot-kkBixZ27.js} +2 -2
- package/dist/client/chunks/{chart-box-plot-DYKfyOI8.js.map → chart-box-plot-kkBixZ27.js.map} +1 -1
- package/dist/client/chunks/chart-bubble-B2he1--4.js +221 -0
- package/dist/client/chunks/chart-bubble-B2he1--4.js.map +1 -0
- package/dist/client/chunks/{chart-candlestick-Dwc92Mrj.js → chart-candlestick-DZp19Tzh.js} +2 -2
- package/dist/client/chunks/{chart-candlestick-Dwc92Mrj.js.map → chart-candlestick-DZp19Tzh.js.map} +1 -1
- package/dist/client/chunks/chart-config-area-BNigHUy8.js +124 -0
- package/dist/client/chunks/chart-config-area-BNigHUy8.js.map +1 -0
- package/dist/client/chunks/chart-config-bar-DSO_LRTx.js +54 -0
- package/dist/client/chunks/chart-config-bar-DSO_LRTx.js.map +1 -0
- package/dist/client/chunks/{chart-config-box-plot-DJ-dWWXA.js → chart-config-box-plot-oW8axV2q.js} +5 -10
- package/dist/client/chunks/chart-config-box-plot-oW8axV2q.js.map +1 -0
- package/dist/client/chunks/{chart-config-gauge-DSwC04l0.js → chart-config-gauge-Dq-_H9UN.js} +5 -7
- package/dist/client/chunks/chart-config-gauge-Dq-_H9UN.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-delta-D6BIkHL3.js → chart-config-kpi-delta-DSQbvqu_.js} +5 -10
- package/dist/client/chunks/chart-config-kpi-delta-DSQbvqu_.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-number-Bx-V9a62.js → chart-config-kpi-number-EFSWY1We.js} +5 -7
- package/dist/client/chunks/chart-config-kpi-number-EFSWY1We.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-text-CcqC1u-8.js → chart-config-kpi-text-KM3V5X2u.js} +5 -7
- package/dist/client/chunks/chart-config-kpi-text-KM3V5X2u.js.map +1 -0
- package/dist/client/chunks/{chart-config-line-Db3jDsWc.js → chart-config-line-D6jG8PCH.js} +9 -36
- package/dist/client/chunks/chart-config-line-D6jG8PCH.js.map +1 -0
- package/dist/client/chunks/{chart-config-pie-DD4SmRTF.js → chart-config-pie-BhzW-fdn.js} +6 -16
- package/dist/client/chunks/chart-config-pie-BhzW-fdn.js.map +1 -0
- package/dist/client/chunks/{chart-config-radar-CC2XAaGr.js → chart-config-radar-D7REP1q_.js} +6 -16
- package/dist/client/chunks/chart-config-radar-D7REP1q_.js.map +1 -0
- package/dist/client/chunks/{chart-config-radial-bar-DmxKx1R0.js → chart-config-radial-bar-Byx6qOPU.js} +6 -16
- package/dist/client/chunks/chart-config-radial-bar-Byx6qOPU.js.map +1 -0
- package/dist/client/chunks/{chart-config-tree-map-BI-oQStO.js → chart-config-tree-map-DVrvf3yQ.js} +6 -16
- package/dist/client/chunks/chart-config-tree-map-DVrvf3yQ.js.map +1 -0
- package/dist/client/chunks/{chart-config-waterfall-DSnyixbI.js → chart-config-waterfall-DmFeQdIk.js} +5 -10
- package/dist/client/chunks/chart-config-waterfall-DmFeQdIk.js.map +1 -0
- package/dist/client/chunks/{chart-data-table-BO4sXsim.js → chart-data-table-CKauQXme.js} +1046 -1121
- package/dist/client/chunks/chart-data-table-CKauQXme.js.map +1 -0
- package/dist/client/chunks/{chart-funnel-DnWRsmnS.js → chart-funnel-CToKSBaL.js} +184 -222
- package/dist/client/chunks/chart-funnel-CToKSBaL.js.map +1 -0
- package/dist/client/chunks/chart-gauge-DTVezSk7.js +403 -0
- package/dist/client/chunks/chart-gauge-DTVezSk7.js.map +1 -0
- package/dist/client/chunks/chart-heat-map-DTuUl0BR.js +236 -0
- package/dist/client/chunks/chart-heat-map-DTuUl0BR.js.map +1 -0
- package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js +408 -0
- package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js.map +1 -0
- package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js +244 -0
- package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js.map +1 -0
- package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js +185 -0
- package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js.map +1 -0
- package/dist/client/chunks/chart-line-DKgrQA6c.js +101 -0
- package/dist/client/chunks/chart-line-DKgrQA6c.js.map +1 -0
- package/dist/client/chunks/{chart-markdown-dgUetjyM.js → chart-markdown-CV75S_zL.js} +2 -2
- package/dist/client/chunks/{chart-markdown-dgUetjyM.js.map → chart-markdown-CV75S_zL.js.map} +1 -1
- package/dist/client/chunks/{chart-measure-profile-ClfpLs4q.js → chart-measure-profile-Ket8fJyf.js} +7 -7
- package/dist/client/chunks/{chart-measure-profile-ClfpLs4q.js.map → chart-measure-profile-Ket8fJyf.js.map} +1 -1
- package/dist/client/chunks/chart-pie-ByieAX5H.js +119 -0
- package/dist/client/chunks/chart-pie-ByieAX5H.js.map +1 -0
- package/dist/client/chunks/chart-radar-CiSwHWp4.js +138 -0
- package/dist/client/chunks/chart-radar-CiSwHWp4.js.map +1 -0
- package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js +122 -0
- package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js.map +1 -0
- package/dist/client/chunks/{chart-sankey-M3XpO_ah.js → chart-sankey-DjrvKw6K.js} +36 -39
- package/dist/client/chunks/{chart-sankey-M3XpO_ah.js.map → chart-sankey-DjrvKw6K.js.map} +1 -1
- package/dist/client/chunks/chart-scatter-Dd9WFqnS.js +258 -0
- package/dist/client/chunks/chart-scatter-Dd9WFqnS.js.map +1 -0
- package/dist/client/chunks/{chart-sunburst-A_u6lqlS.js → chart-sunburst-leGpuDj7.js} +3 -3
- package/dist/client/chunks/{chart-sunburst-A_u6lqlS.js.map → chart-sunburst-leGpuDj7.js.map} +1 -1
- package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js +323 -0
- package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js.map +1 -0
- package/dist/client/chunks/{chart-waterfall-BuhMoagf.js → chart-waterfall-DyvQReN5.js} +7 -7
- package/dist/client/chunks/{chart-waterfall-BuhMoagf.js.map → chart-waterfall-DyvQReN5.js.map} +1 -1
- package/dist/client/chunks/{charts-core-jRtb0S2M.js → charts-core-DaXSt1Dd.js} +2 -2
- package/dist/client/chunks/{charts-core-jRtb0S2M.js.map → charts-core-DaXSt1Dd.js.map} +1 -1
- package/dist/client/chunks/charts-loader-DdTeCeNo.js +84 -0
- package/dist/client/chunks/charts-loader-DdTeCeNo.js.map +1 -0
- package/dist/client/chunks/{nl-NL-CpVs7ox3.js → nl-NL-2zTAWTej.js} +2 -1
- package/dist/client/chunks/{nl-NL-CpVs7ox3.js.map → nl-NL-2zTAWTej.js.map} +1 -1
- package/dist/client/chunks/retention-ChW9jYdy.js.map +1 -1
- package/dist/client/chunks/{schema-visualization-DE09kQE3.js → schema-visualization-Cb_E9_Gd.js} +12 -12
- package/dist/client/chunks/{schema-visualization-DE09kQE3.js.map → schema-visualization-Cb_E9_Gd.js.map} +1 -1
- package/dist/client/chunks/{useDirtyStateTracking-CoeQbprt.js → useDirtyStateTracking-MbpxH_v6.js} +95 -84
- package/dist/client/chunks/useDirtyStateTracking-MbpxH_v6.js.map +1 -0
- package/dist/client/chunks/{useExplainAI-DlnXWdmz.js → useExplainAI-evnZkjCY.js} +14 -14
- package/dist/client/chunks/{useExplainAI-DlnXWdmz.js.map → useExplainAI-evnZkjCY.js.map} +1 -1
- package/dist/client/chunks/{utils-CTKNaXS8.js → utils-3P6z1vz5.js} +2 -2
- package/dist/client/chunks/{utils-CTKNaXS8.js.map → utils-3P6z1vz5.js.map} +1 -1
- package/dist/client/chunks/{vendor-CPIYyeuD.js → vendor-DSpR0IW6.js} +43 -43
- package/dist/client/chunks/{vendor-CPIYyeuD.js.map → vendor-DSpR0IW6.js.map} +1 -1
- package/dist/client/components/AgenticNotebook/agentChatParts.d.ts +34 -0
- package/dist/client/components/AgenticNotebook/chatMessageParts.d.ts +39 -0
- package/dist/client/components/AgenticNotebook/useAgentChatController.d.ts +25 -0
- package/dist/client/components/AgenticNotebook/useNotebookAutosave.d.ts +12 -0
- package/dist/client/components/AnalysisBuilder/AnalysisQueryPanelParts.d.ts +64 -0
- package/dist/client/components/AnalysisBuilder/AnalysisResultsHeader.d.ts +67 -0
- package/dist/client/components/AnalysisBuilder/BreakdownComparisonToggle.d.ts +13 -0
- package/dist/client/components/AnalysisBuilder/BreakdownRow.d.ts +26 -0
- package/dist/client/components/AnalysisBuilder/DisplayOptionControl.d.ts +10 -0
- package/dist/client/components/AnalysisBuilder/ExecutionPlanPanelParts.d.ts +22 -0
- package/dist/client/components/AnalysisBuilder/FieldSearchResults.d.ts +16 -0
- package/dist/client/components/AnalysisBuilder/FilterValueInput.d.ts +63 -0
- package/dist/client/components/AnalysisBuilder/FlowDepthControls.d.ts +10 -0
- package/dist/client/components/AnalysisBuilder/FlowVisualizationPicker.d.ts +7 -0
- package/dist/client/components/AnalysisBuilder/LegacyBooleanOptions.d.ts +8 -0
- package/dist/client/components/AnalysisBuilder/MetricRow.d.ts +23 -0
- package/dist/client/components/AnalysisBuilder/SortToggleButton.d.ts +13 -0
- package/dist/client/components/AnalysisBuilder/StringArrayInput.d.ts +17 -0
- package/dist/client/components/AnalysisBuilder/filterConfigModalUtils.d.ts +30 -0
- package/dist/client/components/AnalysisBuilder/hooks/useAnalysisBuilderImperativeHandle.d.ts +13 -0
- package/dist/client/components/AnalysisBuilder/hooks/useDragReorder.d.ts +25 -0
- package/dist/client/components/AnalysisBuilder/hooks/useFieldSearchKeyboard.d.ts +11 -0
- package/dist/client/components/AnalysisBuilder/utils/axisConfigUtils.d.ts +23 -0
- package/dist/client/components/AnalysisBuilder/utils/executionPlanMarkdown.d.ts +8 -0
- package/dist/client/components/AnalysisBuilder/utils/fieldUtils.d.ts +5 -0
- package/dist/client/components/AnalysisBuilder/utils/resultsPanelDerive.d.ts +68 -0
- package/dist/client/components/AnalysisBuilder/utils/shareStateUtils.d.ts +68 -0
- package/dist/client/components/AnalysisBuilder/utils/sortUtils.d.ts +7 -0
- package/dist/client/components/DashboardFilters/CompactFilterBarParts.d.ts +26 -0
- package/dist/client/components/DashboardFilters/DashboardFilterConfigModalParts.d.ts +27 -0
- package/dist/client/components/DashboardFilters/DashboardFilterValueInput.d.ts +39 -0
- package/dist/client/components/DashboardFilters/dashboardFilterConfigModalUtils.d.ts +21 -0
- package/dist/client/components/DashboardFilters/useCompactFilterBar.d.ts +19 -0
- package/dist/client/components/DashboardFilters/useDashboardFilterConfigModal.d.ts +69 -0
- package/dist/client/components/DashboardFilters/useDateRangeState.d.ts +19 -0
- package/dist/client/components/DashboardFilters/useFilterDropdowns.d.ts +21 -0
- package/dist/client/components/DashboardFilters/useFilterValueFetch.d.ts +23 -0
- package/dist/client/components/DashboardPortletCard.d.ts +2 -57
- package/dist/client/components/analyticsPortlet/PortletChart.d.ts +31 -0
- package/dist/client/components/analyticsPortlet/PortletChartView.d.ts +35 -0
- package/dist/client/components/analyticsPortlet/PortletStates.d.ts +65 -0
- package/dist/client/components/analyticsPortlet/parsePortletQuery.d.ts +22 -0
- package/dist/client/components/analyticsPortlet/portletRenderState.d.ts +31 -0
- package/dist/client/components/analyticsPortlet/usePortletDebugData.d.ts +37 -0
- package/dist/client/components/analyticsPortlet/usePortletDrillState.d.ts +17 -0
- package/dist/client/components/analyticsPortlet/usePortletQueryResults.d.ts +37 -0
- package/dist/client/components/charts/ActivityGridChart.helpers.d.ts +33 -0
- package/dist/client/components/charts/ActivityGridChart.render.d.ts +31 -0
- package/dist/client/components/charts/AxisFormatControls.d.ts +3 -1
- package/dist/client/components/charts/BarChart.helpers.d.ts +23 -0
- package/dist/client/components/charts/BarSeries.d.ts +29 -0
- package/dist/client/components/charts/BubbleChart.helpers.d.ts +43 -0
- package/dist/client/components/charts/BubbleChart.render.d.ts +21 -0
- package/dist/client/components/charts/ChartStates.d.ts +38 -0
- package/dist/client/components/charts/FunnelChart.helpers.d.ts +25 -0
- package/dist/client/components/charts/FunnelViews.d.ts +16 -0
- package/dist/client/components/charts/HeatMapCanvas.d.ts +25 -0
- package/dist/client/components/charts/HeatMapChart.helpers.d.ts +64 -0
- package/dist/client/components/charts/KpiDelta.helpers.d.ts +20 -0
- package/dist/client/components/charts/KpiNumber.helpers.d.ts +30 -0
- package/dist/client/components/charts/KpiStates.d.ts +19 -0
- package/dist/client/components/charts/ScatterChart.helpers.d.ts +43 -0
- package/dist/client/components/charts/ScatterSeries.d.ts +17 -0
- package/dist/client/components/charts/ScatterTooltip.d.ts +21 -0
- package/dist/client/components/charts/TreeMapChart.helpers.d.ts +37 -0
- package/dist/client/components/charts/TreeMapContent.d.ts +24 -0
- package/dist/client/components/charts/TreeMapLegend.d.ts +13 -0
- package/dist/client/components/charts/cartesianChartHelpers.d.ts +126 -0
- package/dist/client/components/charts/chartAxisResolution.d.ts +32 -0
- package/dist/client/components/charts/chartScaffolding.d.ts +77 -0
- package/dist/client/components/charts/gaugeChartHelpers.d.ts +36 -0
- package/dist/client/components/charts/kpiTextHelpers.d.ts +46 -0
- package/dist/client/components/charts/radarChartHelpers.d.ts +14 -0
- package/dist/client/components/charts/radialBarChartHelpers.d.ts +22 -0
- package/dist/client/components/charts/useChartDimensions.d.ts +20 -0
- package/dist/client/components/charts/useKpiDimensions.d.ts +30 -0
- package/dist/client/components/dashboard/DashboardEditBar.d.ts +5 -0
- package/dist/client/components/dashboard/LayoutModeToggle.d.ts +10 -0
- package/dist/client/components/dashboardPortletCard/FilterFieldChip.d.ts +12 -0
- package/dist/client/components/dashboardPortletCard/PortletCardHeader.d.ts +43 -0
- package/dist/client/components/dashboardPortletCard/cardStyles.d.ts +33 -0
- package/dist/client/components/dashboardPortletCard/filterField.d.ts +12 -0
- package/dist/client/components/dashboardPortletCard/propsEqual.d.ts +55 -0
- package/dist/client/components/dashboardPortletCard/usePortletCardActions.d.ts +16 -0
- package/dist/client/components/portletAnalysisModal/saveValidation.d.ts +8 -0
- package/dist/client/components/shared/dateRangeUtils.d.ts +40 -0
- package/dist/client/components/shared/filterDisplayUtils.d.ts +10 -0
- package/dist/client/components/shared/filterItem/FilterDateRangeSelector.d.ts +17 -0
- package/dist/client/components/shared/filterItem/FilterFieldDropdown.d.ts +16 -0
- package/dist/client/components/shared/filterItem/dateRangeSync.d.ts +14 -0
- package/dist/client/components/shared/filterItem/fieldVisuals.d.ts +5 -0
- package/dist/client/components/shared/filterValueSelector/FilterValueInputs.d.ts +55 -0
- package/dist/client/components/shared/filterValueSelector/useFilterValueSelectorState.d.ts +25 -0
- package/dist/client/components/shared/queryFieldUtils.d.ts +21 -0
- package/dist/client/components/shared/utils.d.ts +4 -43
- package/dist/client/components.js +3 -3
- package/dist/client/hooks/agentChatStream.d.ts +39 -0
- package/dist/client/hooks/analysisQueryExecutionModes.d.ts +133 -0
- package/dist/client/hooks/drillNavigation.d.ts +25 -0
- package/dist/client/hooks.js +3 -3
- package/dist/client/icons.js +2 -2
- package/dist/client/index.js +816 -669
- package/dist/client/index.js.map +1 -1
- package/dist/client/providers.js +3 -3
- package/dist/client/schema.js +1 -1
- package/dist/client/shared/chartConfigBuilders.d.ts +18 -0
- package/dist/client/shared/components/QueryAnalysisPanel.sections.d.ts +41 -0
- package/dist/client/shared/queryTransforms.d.ts +20 -0
- package/dist/client/shared/utils.d.ts +2 -4
- package/dist/client/stores/optionsToAnalysisConfig.d.ts +17 -0
- package/dist/client/styles.css +1 -1
- package/dist/client/utils/axisValueFormatting.d.ts +32 -0
- package/dist/client/utils/timeValueFormatting.d.ts +32 -0
- package/dist/client/utils.js +6 -6
- package/dist/client-bundle-stats.html +1 -1
- package/dist/mcp-app/mcp-app.html +55 -55
- package/dist/server/google-BOnRIN1w.cjs +2 -0
- package/dist/server/{google-CFYljAOF.js → google-CvKM9yVM.js} +83 -71
- package/dist/server/index.cjs +179 -211
- package/dist/server/index.js +6330 -6458
- package/dist/server/{openai-BZdAA7Ji.js → openai-cDlFSTk6.js} +60 -58
- package/dist/server/openai-vXvLni8v.cjs +1 -0
- package/dist/server/server/adapters/base-adapter.d.ts +80 -35
- package/dist/server/server/adapters/databend-adapter.d.ts +8 -59
- package/dist/server/server/adapters/duckdb-adapter.d.ts +5 -59
- package/dist/server/server/adapters/mysql-adapter.d.ts +13 -70
- package/dist/server/server/adapters/postgres-adapter.d.ts +1 -65
- package/dist/server/server/adapters/snowflake-adapter.d.ts +5 -68
- package/dist/server/server/adapters/sqlite-adapter.d.ts +12 -32
- package/dist/server/server/adapters/window-function-builder.d.ts +11 -0
- package/dist/server/server/agent/chart-validation.d.ts +0 -5
- package/dist/server/server/agent/handler-steps.d.ts +37 -0
- package/dist/server/server/ai/discovery-helpers.d.ts +29 -0
- package/dist/server/server/ai/discovery.d.ts +4 -0
- package/dist/server/server/ai/suggestion-helpers.d.ts +33 -0
- package/dist/server/server/ai/suggestion.d.ts +0 -3
- package/dist/server/server/ai/validation-helpers.d.ts +21 -0
- package/dist/server/server/ai/validation.d.ts +0 -3
- package/dist/server/server/builders/analysis-utils.d.ts +106 -0
- package/dist/server/server/builders/cte-builder.d.ts +46 -0
- package/dist/server/server/builders/date-time-builder.d.ts +5 -0
- package/dist/server/server/builders/date-time-helpers.d.ts +34 -0
- package/dist/server/server/builders/filter-builder.d.ts +2 -0
- package/dist/server/server/builders/filter-operators.d.ts +23 -0
- package/dist/server/server/builders/flow-query-builder.d.ts +46 -19
- package/dist/server/server/builders/funnel-query-builder.d.ts +16 -5
- package/dist/server/server/builders/group-by-builder.d.ts +11 -0
- package/dist/server/server/builders/measure-builder.d.ts +43 -0
- package/dist/server/server/builders/retention-query-builder.d.ts +12 -14
- package/dist/server/server/cache-utils.d.ts +25 -5
- package/dist/server/server/compiler-metadata.d.ts +11 -0
- package/dist/server/server/compiler.d.ts +8 -14
- package/dist/server/server/cube-utils.d.ts +29 -4
- package/dist/server/server/execution/annotation-builder.d.ts +12 -0
- package/dist/server/server/execution/filter-cache-preloader.d.ts +19 -0
- package/dist/server/server/execution/mode-router.d.ts +25 -0
- package/dist/server/server/execution/query-result-cache.d.ts +21 -0
- package/dist/server/server/execution/result-post-processor.d.ts +10 -0
- package/dist/server/server/executor.d.ts +33 -30
- package/dist/server/server/executors/explain-utils.d.ts +28 -0
- package/dist/server/server/explain/explain-tree.d.ts +20 -0
- package/dist/server/server/filter-cache.d.ts +2 -2
- package/dist/server/server/gap-filler.d.ts +6 -0
- package/dist/server/server/index.d.ts +3 -1
- package/dist/server/server/logical-plan/cte-planner-helpers.d.ts +37 -0
- package/dist/server/server/logical-plan/cte-planner.d.ts +104 -0
- package/dist/server/server/logical-plan/filter-propagation.d.ts +44 -0
- package/dist/server/server/logical-plan/index.d.ts +6 -1
- package/dist/server/server/logical-plan/join-planner.d.ts +27 -0
- package/dist/server/server/logical-plan/logical-planner.d.ts +7 -200
- package/dist/server/server/logical-plan/optimiser.d.ts +3 -1
- package/dist/server/server/logical-plan/plan-analysis-reporter.d.ts +59 -0
- package/dist/server/server/logical-plan/planner-utils.d.ts +20 -0
- package/dist/server/server/logical-plan/types.d.ts +17 -9
- package/dist/server/server/measure-classification.d.ts +40 -0
- package/dist/server/server/physical-plan/drizzle-plan-builder.d.ts +21 -21
- package/dist/server/server/physical-plan/drizzle-sql-builder.d.ts +11 -0
- package/dist/server/server/physical-plan/processors/index.d.ts +2 -0
- package/dist/server/server/physical-plan/processors/keys-dedup-processor.d.ts +13 -0
- package/dist/server/server/physical-plan/processors/multi-fact-processor.d.ts +13 -0
- package/dist/server/server/physical-plan/processors/shared.d.ts +5 -0
- package/dist/server/server/query-handlers.d.ts +79 -0
- package/dist/server/server/query-modes.d.ts +28 -0
- package/dist/server/server/query-validator.d.ts +9 -0
- package/dist/server/server/resolvers/calculated-measure-resolver.d.ts +5 -0
- package/dist/server/server/resolvers/join-path-resolver.d.ts +6 -0
- package/dist/server/server/sql-format.d.ts +11 -0
- package/dist/server/server/types/cube.d.ts +18 -4
- package/dist/server/server/types/flow.d.ts +6 -5
- package/dist/server/server/types/index.d.ts +1 -1
- package/dist/server/server/types/validation.d.ts +14 -0
- package/package.json +11 -4
- package/dist/adapters/google-DUlXeeDA.cjs +0 -2
- package/dist/adapters/handler-CzbCuS6_.cjs +0 -25
- package/dist/adapters/locale-BPB7flIG.js +0 -8249
- package/dist/adapters/locale-tIMrNcCr.cjs +0 -198
- package/dist/adapters/mcp-transport-C2QzXm6h.cjs +0 -40
- package/dist/adapters/mcp-transport-D0B3S1tB.js +0 -579
- package/dist/adapters/openai-D_U4V0kT.cjs +0 -1
- package/dist/adapters/utils-KV37IBIv.cjs +0 -128
- package/dist/client/chunks/DashboardEditModal-CjCIAT-J.js.map +0 -1
- package/dist/client/chunks/analysis-builder-MuMIzoRq.js +0 -5367
- package/dist/client/chunks/analysis-builder-MuMIzoRq.js.map +0 -1
- package/dist/client/chunks/analysis-builder-shared-CYVwSPqt.js.map +0 -1
- package/dist/client/chunks/chart-activity-grid-DmruKPab.js.map +0 -1
- package/dist/client/chunks/chart-area-DHCPM4Em.js +0 -450
- package/dist/client/chunks/chart-area-DHCPM4Em.js.map +0 -1
- package/dist/client/chunks/chart-bar-KddciGDv.js +0 -271
- package/dist/client/chunks/chart-bar-KddciGDv.js.map +0 -1
- package/dist/client/chunks/chart-bubble-CfqiB538.js +0 -273
- package/dist/client/chunks/chart-bubble-CfqiB538.js.map +0 -1
- package/dist/client/chunks/chart-config-area-Bq_UsW3x.js +0 -101
- package/dist/client/chunks/chart-config-area-Bq_UsW3x.js.map +0 -1
- package/dist/client/chunks/chart-config-bar-_JEGZnAu.js +0 -95
- package/dist/client/chunks/chart-config-bar-_JEGZnAu.js.map +0 -1
- package/dist/client/chunks/chart-config-box-plot-DJ-dWWXA.js.map +0 -1
- package/dist/client/chunks/chart-config-gauge-DSwC04l0.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-delta-D6BIkHL3.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-number-Bx-V9a62.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-text-CcqC1u-8.js.map +0 -1
- package/dist/client/chunks/chart-config-line-Db3jDsWc.js.map +0 -1
- package/dist/client/chunks/chart-config-pie-DD4SmRTF.js.map +0 -1
- package/dist/client/chunks/chart-config-radar-CC2XAaGr.js.map +0 -1
- package/dist/client/chunks/chart-config-radial-bar-DmxKx1R0.js.map +0 -1
- package/dist/client/chunks/chart-config-tree-map-BI-oQStO.js.map +0 -1
- package/dist/client/chunks/chart-config-waterfall-DSnyixbI.js.map +0 -1
- package/dist/client/chunks/chart-data-table-BO4sXsim.js.map +0 -1
- package/dist/client/chunks/chart-funnel-DnWRsmnS.js.map +0 -1
- package/dist/client/chunks/chart-gauge-CgMeqeGb.js +0 -424
- package/dist/client/chunks/chart-gauge-CgMeqeGb.js.map +0 -1
- package/dist/client/chunks/chart-heat-map-DcGm9SWK.js +0 -231
- package/dist/client/chunks/chart-heat-map-DcGm9SWK.js.map +0 -1
- package/dist/client/chunks/chart-kpi-delta-C2wKPqCb.js +0 -343
- package/dist/client/chunks/chart-kpi-delta-C2wKPqCb.js.map +0 -1
- package/dist/client/chunks/chart-kpi-number-gWYF44ol.js +0 -322
- package/dist/client/chunks/chart-kpi-number-gWYF44ol.js.map +0 -1
- package/dist/client/chunks/chart-kpi-text-DIYtJtk4.js +0 -149
- package/dist/client/chunks/chart-kpi-text-DIYtJtk4.js.map +0 -1
- package/dist/client/chunks/chart-line-9BEGN5Ti.js +0 -433
- package/dist/client/chunks/chart-line-9BEGN5Ti.js.map +0 -1
- package/dist/client/chunks/chart-pie-BjAIhyOi.js +0 -172
- package/dist/client/chunks/chart-pie-BjAIhyOi.js.map +0 -1
- package/dist/client/chunks/chart-radar-Dgkcl2bN.js +0 -154
- package/dist/client/chunks/chart-radar-Dgkcl2bN.js.map +0 -1
- package/dist/client/chunks/chart-radial-bar-DdWJjAhK.js +0 -148
- package/dist/client/chunks/chart-radial-bar-DdWJjAhK.js.map +0 -1
- package/dist/client/chunks/chart-scatter-DaHYP_OL.js +0 -255
- package/dist/client/chunks/chart-scatter-DaHYP_OL.js.map +0 -1
- package/dist/client/chunks/chart-tree-map-uiwUU4nb.js +0 -298
- package/dist/client/chunks/chart-tree-map-uiwUU4nb.js.map +0 -1
- package/dist/client/chunks/useDirtyStateTracking-CoeQbprt.js.map +0 -1
- package/dist/server/google-DUlXeeDA.cjs +0 -2
- package/dist/server/openai-D_U4V0kT.cjs +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./vendor-
|
|
2
|
-
import {
|
|
3
|
-
import { A as u,
|
|
4
|
-
import { a as
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { n as
|
|
10
|
-
import
|
|
11
|
-
import { Fragment as
|
|
1
|
+
import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./vendor-DSpR0IW6.js";
|
|
2
|
+
import { k as s, u as c, v as l } from "./chart-data-table-CKauQXme.js";
|
|
3
|
+
import { A as u, S as d, T as f, _ as p, _t as m, d as h, et as g, g as _, gt as v, l as y, u as b, v as x, x as S, y as C } from "./DashboardEditModal-okVfH8ZK.js";
|
|
4
|
+
import { a as w, s as T, t as E } from "./retention-ChW9jYdy.js";
|
|
5
|
+
import { P as D, z as ee } from "./chart-activity-grid-DX0SJbxs.js";
|
|
6
|
+
import { A as O, D as k, O as te, S as ne, T as A, a as re, d as ie, k as ae, l as oe, n as se, r as ce, s as le } from "./useDirtyStateTracking-MbpxH_v6.js";
|
|
7
|
+
import { a as ue, i as de } from "./useExplainAI-evnZkjCY.js";
|
|
8
|
+
import { r as fe, s as j } from "./chart-funnel-CToKSBaL.js";
|
|
9
|
+
import { n as M } from "./charts-core-DaXSt1Dd.js";
|
|
10
|
+
import N, { createContext as P, memo as F, useCallback as I, useContext as pe, useEffect as L, useMemo as R, useRef as z, useState as B } from "react";
|
|
11
|
+
import { Fragment as V, jsx as H, jsxs as U } from "react/jsx-runtime";
|
|
12
12
|
//#region src/shared/date-utils.ts
|
|
13
|
-
function
|
|
13
|
+
function me(e) {
|
|
14
14
|
let t = /* @__PURE__ */ new Date(), n = e.toLowerCase().trim(), r = t.getUTCFullYear(), i = t.getUTCMonth(), a = t.getUTCDate(), o = t.getUTCDay();
|
|
15
15
|
if (n === "today") {
|
|
16
16
|
let e = new Date(t);
|
|
@@ -123,7 +123,7 @@ function de(e) {
|
|
|
123
123
|
}
|
|
124
124
|
return null;
|
|
125
125
|
}
|
|
126
|
-
function
|
|
126
|
+
function W(e) {
|
|
127
127
|
if (Array.isArray(e)) {
|
|
128
128
|
if (e.length < 2) return null;
|
|
129
129
|
let t = new Date(e[0]), n = new Date(e[1]);
|
|
@@ -132,12 +132,12 @@ function fe(e) {
|
|
|
132
132
|
end: n
|
|
133
133
|
});
|
|
134
134
|
}
|
|
135
|
-
return
|
|
135
|
+
return me(e);
|
|
136
136
|
}
|
|
137
|
-
function
|
|
137
|
+
function he(e) {
|
|
138
138
|
return e.toISOString().split("T")[0];
|
|
139
139
|
}
|
|
140
|
-
function
|
|
140
|
+
function ge(e, t) {
|
|
141
141
|
let n = t.getTime() - e.getTime(), r = Math.ceil(n / (1e3 * 60 * 60 * 24)), i = new Date(e);
|
|
142
142
|
i.setUTCDate(i.getUTCDate() - 1), i.setUTCHours(23, 59, 59, 999);
|
|
143
143
|
let a = new Date(i);
|
|
@@ -148,27 +148,27 @@ function me(e, t) {
|
|
|
148
148
|
}
|
|
149
149
|
//#endregion
|
|
150
150
|
//#region src/client/components/AnalysisBuilder/utils/filterUtils.ts
|
|
151
|
-
function
|
|
151
|
+
function _e(e, t) {
|
|
152
152
|
for (let n of e) if ("type" in n && "filters" in n) {
|
|
153
|
-
let e =
|
|
153
|
+
let e = _e(n.filters, t);
|
|
154
154
|
if (e) return e;
|
|
155
155
|
} else if ("member" in n) {
|
|
156
156
|
let e = n;
|
|
157
157
|
if (e.member === t && e.operator === "inDateRange" && e.dateRange) return { dateRange: e.dateRange };
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
|
-
function
|
|
161
|
-
let n =
|
|
160
|
+
function ve(e, t) {
|
|
161
|
+
let n = _e(t, e);
|
|
162
162
|
if (!n?.dateRange) return;
|
|
163
|
-
let r =
|
|
163
|
+
let r = W(n.dateRange);
|
|
164
164
|
if (!r) return;
|
|
165
|
-
let i =
|
|
166
|
-
return [[
|
|
165
|
+
let i = ge(r.start, r.end);
|
|
166
|
+
return [[he(r.start), he(r.end)], [he(i.start), he(i.end)]];
|
|
167
167
|
}
|
|
168
|
-
function
|
|
168
|
+
function ye(e, t) {
|
|
169
169
|
return e.reduce((e, n) => {
|
|
170
170
|
if ("type" in n && "filters" in n) {
|
|
171
|
-
let r = n, i =
|
|
171
|
+
let r = n, i = ye(r.filters, t);
|
|
172
172
|
i.length > 0 && e.push({
|
|
173
173
|
type: r.type,
|
|
174
174
|
filters: i
|
|
@@ -182,10 +182,10 @@ function _e(e, t) {
|
|
|
182
182
|
}
|
|
183
183
|
//#endregion
|
|
184
184
|
//#region src/client/components/AnalysisBuilder/utils/queryUtils.ts
|
|
185
|
-
function
|
|
185
|
+
function G(e, t, n, r, i = !1, a) {
|
|
186
186
|
let o = t.filter((e) => e.isTimeDimension && e.enableComparison).map((e) => e.field), s = n;
|
|
187
|
-
if (!i) for (let e of o) s =
|
|
188
|
-
s = s.filter((e) =>
|
|
187
|
+
if (!i) for (let e of o) s = ye(s, e);
|
|
188
|
+
s = s.filter((e) => g(e));
|
|
189
189
|
let c = {
|
|
190
190
|
measures: e.map((e) => e.field),
|
|
191
191
|
dimensions: t.filter((e) => !e.isTimeDimension).map((e) => e.field),
|
|
@@ -195,7 +195,7 @@ function ve(e, t, n, r, i = !1, a) {
|
|
|
195
195
|
granularity: e.granularity || "day"
|
|
196
196
|
};
|
|
197
197
|
if (e.enableComparison) {
|
|
198
|
-
let r =
|
|
198
|
+
let r = ve(e.field, n);
|
|
199
199
|
r && (t.compareDateRange = r);
|
|
200
200
|
}
|
|
201
201
|
return t;
|
|
@@ -218,122 +218,324 @@ function K() {
|
|
|
218
218
|
};
|
|
219
219
|
}
|
|
220
220
|
//#endregion
|
|
221
|
+
//#region src/client/components/AnalysisBuilder/filterConfigModalUtils.ts
|
|
222
|
+
function q(e, t, n, r) {
|
|
223
|
+
if (!t || n === 0) return { type: "none" };
|
|
224
|
+
switch (e) {
|
|
225
|
+
case "ArrowDown": return {
|
|
226
|
+
type: "highlight",
|
|
227
|
+
index: r < n - 1 ? r + 1 : 0
|
|
228
|
+
};
|
|
229
|
+
case "ArrowUp": return {
|
|
230
|
+
type: "highlight",
|
|
231
|
+
index: r > 0 ? r - 1 : n - 1
|
|
232
|
+
};
|
|
233
|
+
case "Enter": return r >= 0 && r < n ? {
|
|
234
|
+
type: "select",
|
|
235
|
+
index: r
|
|
236
|
+
} : { type: "none" };
|
|
237
|
+
case "Escape": return { type: "close" };
|
|
238
|
+
default: return { type: "none" };
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
//#endregion
|
|
242
|
+
//#region src/client/components/AnalysisBuilder/FilterValueInput.tsx
|
|
243
|
+
var J = l("close"), be = l("chevronDown");
|
|
244
|
+
function xe({ filter: e, dateRange: t }) {
|
|
245
|
+
let { t: n } = D(), { rangeType: r, numberValue: i, label: a, isOpen: o, onToggle: s, onRangeTypeChange: c, onNumberValueChange: l, onCustomStartDate: u, onCustomEndDate: d, onOpen: f } = t;
|
|
246
|
+
return /* @__PURE__ */ U("div", {
|
|
247
|
+
className: "dc:space-y-2",
|
|
248
|
+
children: [
|
|
249
|
+
/* @__PURE__ */ U("div", {
|
|
250
|
+
className: "dc:relative",
|
|
251
|
+
children: [/* @__PURE__ */ U("button", {
|
|
252
|
+
onClick: () => {
|
|
253
|
+
f(), s(!o);
|
|
254
|
+
},
|
|
255
|
+
className: "dc:w-full dc:flex dc:items-center dc:justify-between dc:text-left dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
|
|
256
|
+
children: [/* @__PURE__ */ H("span", {
|
|
257
|
+
className: "dc:truncate",
|
|
258
|
+
children: a
|
|
259
|
+
}), /* @__PURE__ */ H(be, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${o ? "dc:rotate-180" : ""}` })]
|
|
260
|
+
}), o && /* @__PURE__ */ H("div", {
|
|
261
|
+
className: "dc:absolute dc:z-[60] dc:left-0 dc:right-0 dc:mt-1 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:max-h-48 dc:overflow-y-auto",
|
|
262
|
+
children: ae.map((e) => /* @__PURE__ */ H("button", {
|
|
263
|
+
onClick: () => c(e.value),
|
|
264
|
+
className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:text-sm hover:bg-dc-surface-hover ${e.value === r ? "bg-dc-primary/10 text-dc-primary" : "text-dc-text"}`,
|
|
265
|
+
children: n(e.label)
|
|
266
|
+
}, e.value))
|
|
267
|
+
})]
|
|
268
|
+
}),
|
|
269
|
+
te(r) && /* @__PURE__ */ U("div", {
|
|
270
|
+
className: "dc:flex dc:items-center dc:gap-2",
|
|
271
|
+
children: [/* @__PURE__ */ H("input", {
|
|
272
|
+
type: "number",
|
|
273
|
+
min: "1",
|
|
274
|
+
max: "1000",
|
|
275
|
+
value: i,
|
|
276
|
+
onChange: (e) => l(Math.max(1, parseInt(e.target.value) || 1)),
|
|
277
|
+
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text dc:w-20"
|
|
278
|
+
}), /* @__PURE__ */ H("span", {
|
|
279
|
+
className: "dc:text-sm text-dc-text-muted",
|
|
280
|
+
children: r.replace("last_n_", "")
|
|
281
|
+
})]
|
|
282
|
+
}),
|
|
283
|
+
r === "custom" && /* @__PURE__ */ U("div", {
|
|
284
|
+
className: "dc:flex dc:items-center dc:gap-2",
|
|
285
|
+
children: [
|
|
286
|
+
/* @__PURE__ */ H("input", {
|
|
287
|
+
type: "date",
|
|
288
|
+
value: Array.isArray(e.dateRange) ? e.dateRange[0] : "",
|
|
289
|
+
onChange: u,
|
|
290
|
+
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-2 dc:py-2 bg-dc-surface text-dc-text"
|
|
291
|
+
}),
|
|
292
|
+
/* @__PURE__ */ H("span", {
|
|
293
|
+
className: "dc:text-sm text-dc-text-muted",
|
|
294
|
+
children: n("filter.modal.dateTo")
|
|
295
|
+
}),
|
|
296
|
+
/* @__PURE__ */ H("input", {
|
|
297
|
+
type: "date",
|
|
298
|
+
value: Array.isArray(e.dateRange) ? e.dateRange[1] : "",
|
|
299
|
+
onChange: d,
|
|
300
|
+
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-2 dc:py-2 bg-dc-surface text-dc-text"
|
|
301
|
+
})
|
|
302
|
+
]
|
|
303
|
+
})
|
|
304
|
+
]
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
function Se({ filter: e, combo: t }) {
|
|
308
|
+
let { t: n } = D(), { options: r, loading: i, error: a, highlightedIndex: o, listRef: s, onSelect: c } = t;
|
|
309
|
+
return i ? /* @__PURE__ */ H("div", {
|
|
310
|
+
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
|
|
311
|
+
children: n("filter.modal.loading")
|
|
312
|
+
}) : a ? /* @__PURE__ */ U("div", {
|
|
313
|
+
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-error",
|
|
314
|
+
children: [n("filter.modal.errorPrefix"), String(a)]
|
|
315
|
+
}) : r.length === 0 ? /* @__PURE__ */ H("div", {
|
|
316
|
+
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
|
|
317
|
+
children: n("filter.modal.noValues")
|
|
318
|
+
}) : /* @__PURE__ */ H("div", {
|
|
319
|
+
ref: s,
|
|
320
|
+
className: "dc:max-h-40 dc:overflow-y-auto",
|
|
321
|
+
children: r.map((t, n) => {
|
|
322
|
+
let r = e.values?.includes(t);
|
|
323
|
+
return /* @__PURE__ */ U("button", {
|
|
324
|
+
onClick: (e) => c(t, e),
|
|
325
|
+
className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:text-sm dc:transition-colors ${n === o ? "bg-dc-surface-hover" : ""} ${r ? "bg-dc-primary/10 text-dc-primary" : "text-dc-text hover:bg-dc-surface-hover"}`,
|
|
326
|
+
children: [String(t), r && /* @__PURE__ */ H("span", {
|
|
327
|
+
className: "dc:float-right",
|
|
328
|
+
children: "✓"
|
|
329
|
+
})]
|
|
330
|
+
}, `${t}-${n}`);
|
|
331
|
+
})
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
function Ce({ filter: e, operatorMeta: t, combo: n }) {
|
|
335
|
+
let { t: r } = D(), { isOpen: i, loading: a, searchText: o, onSearchTextChange: s, onHighlightedIndexChange: c, onRemove: l, onKeyDown: u, onOpen: d } = n;
|
|
336
|
+
return /* @__PURE__ */ U("div", {
|
|
337
|
+
className: "dc:space-y-2",
|
|
338
|
+
children: [
|
|
339
|
+
e.values && e.values.length > 0 && /* @__PURE__ */ H("div", {
|
|
340
|
+
className: "dc:flex dc:flex-wrap dc:gap-1.5",
|
|
341
|
+
children: e.values.map((e, t) => /* @__PURE__ */ U("span", {
|
|
342
|
+
className: "dc:inline-flex dc:items-center dc:gap-1 bg-dc-primary/10 text-dc-primary dc:text-sm dc:px-2 dc:py-1 dc:rounded",
|
|
343
|
+
children: [/* @__PURE__ */ H("span", {
|
|
344
|
+
className: "dc:max-w-[150px] dc:truncate",
|
|
345
|
+
children: String(e)
|
|
346
|
+
}), /* @__PURE__ */ H("button", {
|
|
347
|
+
onClick: () => l(e),
|
|
348
|
+
className: "hover:text-dc-danger",
|
|
349
|
+
children: /* @__PURE__ */ H(J, { className: "dc:w-3.5 dc:h-3.5" })
|
|
350
|
+
})]
|
|
351
|
+
}, t))
|
|
352
|
+
}),
|
|
353
|
+
/* @__PURE__ */ U("div", {
|
|
354
|
+
className: "dc:relative",
|
|
355
|
+
children: [/* @__PURE__ */ U("button", {
|
|
356
|
+
onClick: () => {
|
|
357
|
+
d();
|
|
358
|
+
},
|
|
359
|
+
className: "dc:w-full dc:flex dc:items-center dc:justify-between dc:text-left dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
|
|
360
|
+
children: [/* @__PURE__ */ H("span", {
|
|
361
|
+
className: "text-dc-text-muted dc:truncate",
|
|
362
|
+
children: r(a ? "filter.modal.loading" : "filter.modal.selectValue")
|
|
363
|
+
}), /* @__PURE__ */ H(be, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${i ? "dc:rotate-180" : ""}` })]
|
|
364
|
+
}), i && /* @__PURE__ */ U("div", {
|
|
365
|
+
className: "dc:absolute dc:z-[60] dc:left-0 dc:right-0 dc:mt-1 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:max-h-56 dc:overflow-hidden",
|
|
366
|
+
children: [/* @__PURE__ */ H("div", {
|
|
367
|
+
className: "dc:p-2 dc:border-b border-dc-border",
|
|
368
|
+
children: /* @__PURE__ */ H("input", {
|
|
369
|
+
type: "text",
|
|
370
|
+
value: o,
|
|
371
|
+
onChange: (e) => {
|
|
372
|
+
s(e.target.value), c(-1);
|
|
373
|
+
},
|
|
374
|
+
onKeyDown: u,
|
|
375
|
+
placeholder: r("filter.modal.search"),
|
|
376
|
+
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text",
|
|
377
|
+
autoFocus: !0
|
|
378
|
+
})
|
|
379
|
+
}), /* @__PURE__ */ H(Se, {
|
|
380
|
+
filter: e,
|
|
381
|
+
combo: n
|
|
382
|
+
})]
|
|
383
|
+
})]
|
|
384
|
+
}),
|
|
385
|
+
t?.supportsMultipleValues && /* @__PURE__ */ H("p", {
|
|
386
|
+
className: "dc:text-xs text-dc-text-muted",
|
|
387
|
+
children: r("filter.modal.multiSelectHint")
|
|
388
|
+
})
|
|
389
|
+
]
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
function we({ field: e, dateRange: t, combo: n, inputs: r }) {
|
|
393
|
+
let { t: i } = D(), { filter: a, operatorMeta: o, shouldShowDateRange: s, shouldShowComboBox: c } = e, { onBetweenStart: l, onBetweenEnd: u, onDate: d, onDirect: f } = r;
|
|
394
|
+
return o?.requiresValues ? s ? /* @__PURE__ */ H(xe, {
|
|
395
|
+
filter: a,
|
|
396
|
+
dateRange: t
|
|
397
|
+
}) : a.operator === "between" || a.operator === "notBetween" ? /* @__PURE__ */ U("div", {
|
|
398
|
+
className: "dc:flex dc:items-center dc:gap-2",
|
|
399
|
+
children: [
|
|
400
|
+
/* @__PURE__ */ H("input", {
|
|
401
|
+
type: "number",
|
|
402
|
+
value: a.values?.[0] ?? "",
|
|
403
|
+
onChange: l,
|
|
404
|
+
placeholder: i("filter.modal.min"),
|
|
405
|
+
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
406
|
+
}),
|
|
407
|
+
/* @__PURE__ */ H("span", {
|
|
408
|
+
className: "dc:text-sm text-dc-text-muted",
|
|
409
|
+
children: i("filter.modal.to")
|
|
410
|
+
}),
|
|
411
|
+
/* @__PURE__ */ H("input", {
|
|
412
|
+
type: "number",
|
|
413
|
+
value: a.values?.[1] ?? "",
|
|
414
|
+
onChange: u,
|
|
415
|
+
placeholder: i("filter.modal.max"),
|
|
416
|
+
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
417
|
+
})
|
|
418
|
+
]
|
|
419
|
+
}) : o?.valueType === "date" ? /* @__PURE__ */ H("input", {
|
|
420
|
+
type: "date",
|
|
421
|
+
value: a.values?.[0] || "",
|
|
422
|
+
onChange: d,
|
|
423
|
+
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
424
|
+
}) : o?.valueType === "number" ? /* @__PURE__ */ H("input", {
|
|
425
|
+
type: "number",
|
|
426
|
+
value: a.values?.[0] ?? "",
|
|
427
|
+
onChange: f,
|
|
428
|
+
placeholder: i("filter.modal.enterNumber"),
|
|
429
|
+
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
430
|
+
}) : c ? /* @__PURE__ */ H(Ce, {
|
|
431
|
+
filter: a,
|
|
432
|
+
operatorMeta: o,
|
|
433
|
+
combo: n
|
|
434
|
+
}) : /* @__PURE__ */ H("input", {
|
|
435
|
+
type: "text",
|
|
436
|
+
value: a.values?.[0] ?? "",
|
|
437
|
+
onChange: f,
|
|
438
|
+
placeholder: i("filter.modal.enterValue"),
|
|
439
|
+
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text placeholder-dc-text-muted"
|
|
440
|
+
}) : /* @__PURE__ */ H("div", {
|
|
441
|
+
className: "dc:text-sm text-dc-text-muted dc:italic dc:py-2",
|
|
442
|
+
children: i("filter.modal.noValueRequired")
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
//#endregion
|
|
221
446
|
//#region src/client/components/AnalysisBuilder/FilterConfigModal.tsx
|
|
222
|
-
var
|
|
223
|
-
function
|
|
224
|
-
let { t: a } =
|
|
447
|
+
var Te = l("close"), Ee = l("chevronDown"), De = l("dimension"), Oe = l("timeDimension"), ke = l("measure");
|
|
448
|
+
function Ae({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i }) {
|
|
449
|
+
let { t: a } = D(), [o, s] = B(e), [c, l] = B(!1), [u, d] = B(!1), [f, p] = B(!1), [m, h] = B("this_month"), [g, v] = B(1), [y, b] = B(""), [S, w] = B(null), [T, E] = B(-1), ee = z(null), ne = z(null), re = se(y, 300), ie = x(o.member, t), oe = ie?.field.type || "string", le = oe === "time", ue = ie?.fieldType === "measure", de = ie?.fieldType === "dimension", fe = C(o.member, t), j = O[o.operator], M = k(oe), N = le && o.operator === "inDateRange", P = I(() => [
|
|
225
450
|
"equals",
|
|
226
451
|
"notEquals",
|
|
227
452
|
"in",
|
|
228
453
|
"notIn"
|
|
229
|
-
].includes(o.operator) &&
|
|
454
|
+
].includes(o.operator) && de && !le, [
|
|
230
455
|
o.operator,
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
])(), { values:
|
|
234
|
-
|
|
456
|
+
de,
|
|
457
|
+
le
|
|
458
|
+
])(), { values: F, loading: pe, error: me, searchValues: W } = ce(o.member, P);
|
|
459
|
+
L(() => {
|
|
235
460
|
if (!i) {
|
|
236
|
-
|
|
461
|
+
w(null);
|
|
237
462
|
return;
|
|
238
463
|
}
|
|
239
464
|
let e = i.getBoundingClientRect(), t = e.top, n = window.innerHeight - e.bottom, r = t > 500 || t > n, a = Math.max(16, Math.min(e.left, window.innerWidth - 400 - 16));
|
|
240
|
-
|
|
465
|
+
w(r ? {
|
|
241
466
|
bottom: window.innerHeight - e.top + 8,
|
|
242
467
|
left: a
|
|
243
468
|
} : {
|
|
244
469
|
top: e.bottom + 8,
|
|
245
470
|
left: a
|
|
246
471
|
});
|
|
247
|
-
}, [i]),
|
|
472
|
+
}, [i]), L(() => {
|
|
248
473
|
let e = (e) => {
|
|
249
|
-
|
|
474
|
+
ee.current && !ee.current.contains(e.target) && (l(!1), d(!1), p(!1));
|
|
250
475
|
};
|
|
251
476
|
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
252
|
-
}, []),
|
|
253
|
-
|
|
477
|
+
}, []), L(() => {
|
|
478
|
+
u && P && W && W("", !0), u || E(-1);
|
|
254
479
|
}, [
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
]),
|
|
259
|
-
if (
|
|
260
|
-
let e =
|
|
480
|
+
u,
|
|
481
|
+
P,
|
|
482
|
+
W
|
|
483
|
+
]), L(() => {
|
|
484
|
+
if (T >= 0 && ne.current) {
|
|
485
|
+
let e = ne.current.children[T];
|
|
261
486
|
e && e.scrollIntoView({ block: "nearest" });
|
|
262
487
|
}
|
|
263
|
-
}, [
|
|
264
|
-
|
|
488
|
+
}, [T]), L(() => {
|
|
489
|
+
u && P && W && re !== void 0 && W(re);
|
|
265
490
|
}, [
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
]),
|
|
271
|
-
if (!
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
S(`last_n_${n}`), ee(parseInt(t) || 1);
|
|
277
|
-
} else if (t) {
|
|
278
|
-
let [, e] = t;
|
|
279
|
-
S(`last_n_${e === "day" ? "days" : e === "week" ? "weeks" : e === "month" ? "months" : e === "quarter" ? "quarters" : "years"}`), ee(1);
|
|
280
|
-
} else {
|
|
281
|
-
let e = !1;
|
|
282
|
-
for (let t of _) if (t.value !== "custom" && !f(t.value) && m(t.value) === o.dateRange) {
|
|
283
|
-
S(t.value), e = !0;
|
|
284
|
-
break;
|
|
285
|
-
}
|
|
286
|
-
e || S("custom");
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}, [o.dateRange, I]);
|
|
290
|
-
let fe = R((e) => {
|
|
491
|
+
re,
|
|
492
|
+
u,
|
|
493
|
+
P,
|
|
494
|
+
W
|
|
495
|
+
]), L(() => {
|
|
496
|
+
if (!N) return;
|
|
497
|
+
let e = _(o.dateRange);
|
|
498
|
+
e && (h(e.rangeType), e.numberValue !== void 0 && v(e.numberValue));
|
|
499
|
+
}, [o.dateRange, N]);
|
|
500
|
+
let he = I((e) => {
|
|
291
501
|
s({
|
|
292
502
|
member: o.member,
|
|
293
503
|
operator: e,
|
|
294
504
|
values: []
|
|
295
505
|
}), l(!1);
|
|
296
|
-
}, [o.member]),
|
|
506
|
+
}, [o.member]), ge = I((e, t) => {
|
|
297
507
|
let n = t?.shiftKey ?? !1, r = o.values || [];
|
|
298
|
-
|
|
508
|
+
j?.supportsMultipleValues ? (r.includes(e) ? s({
|
|
299
509
|
...o,
|
|
300
510
|
values: r.filter((t) => t !== e)
|
|
301
511
|
}) : s({
|
|
302
512
|
...o,
|
|
303
513
|
values: [...r, e]
|
|
304
|
-
}), n ||
|
|
514
|
+
}), n || d(!1)) : (s({
|
|
305
515
|
...o,
|
|
306
516
|
values: [e]
|
|
307
|
-
}),
|
|
308
|
-
}, [o,
|
|
517
|
+
}), d(!1)), b(""), E(-1);
|
|
518
|
+
}, [o, j?.supportsMultipleValues]), _e = I((e) => {
|
|
309
519
|
let t = (o.values || []).filter((t) => t !== e);
|
|
310
520
|
s({
|
|
311
521
|
...o,
|
|
312
522
|
values: t
|
|
313
523
|
});
|
|
314
|
-
}, [o]),
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
e.preventDefault(), k((e) => e > 0 ? e - 1 : L.length - 1);
|
|
321
|
-
break;
|
|
322
|
-
case "Enter":
|
|
323
|
-
e.preventDefault(), O >= 0 && O < L.length && pe(L[O], { shiftKey: e.shiftKey });
|
|
324
|
-
break;
|
|
325
|
-
case "Escape":
|
|
326
|
-
e.preventDefault(), h(!1), k(-1);
|
|
327
|
-
break;
|
|
524
|
+
}, [o]), ve = I((e) => {
|
|
525
|
+
let t = q(e.key, u, F.length, T);
|
|
526
|
+
if (t.type !== "none") {
|
|
527
|
+
if (e.preventDefault(), t.type === "highlight") return E(t.index);
|
|
528
|
+
if (t.type === "select") return ge(F[t.index], { shiftKey: e.shiftKey });
|
|
529
|
+
d(!1), E(-1);
|
|
328
530
|
}
|
|
329
531
|
}, [
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
]),
|
|
532
|
+
u,
|
|
533
|
+
F,
|
|
534
|
+
T,
|
|
535
|
+
ge
|
|
536
|
+
]), ye = I((e) => {
|
|
335
537
|
let t = e.target.value;
|
|
336
|
-
if (
|
|
538
|
+
if (j?.valueType === "number") {
|
|
337
539
|
let e = parseFloat(t);
|
|
338
540
|
isNaN(e) ? (t === "" || t === "-") && s({
|
|
339
541
|
...o,
|
|
@@ -346,241 +548,110 @@ function xe({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
|
|
|
346
548
|
...o,
|
|
347
549
|
values: t ? [t] : []
|
|
348
550
|
});
|
|
349
|
-
}, [o,
|
|
551
|
+
}, [o, j?.valueType]), G = I((e) => {
|
|
350
552
|
let t = parseFloat(e.target.value), n = [isNaN(t) ? "" : t, (o.values?.length >= 2 ? o.values : ["", ""])[1]].filter((e) => e !== "");
|
|
351
553
|
s({
|
|
352
554
|
...o,
|
|
353
555
|
values: n
|
|
354
556
|
});
|
|
355
|
-
}, [o]),
|
|
557
|
+
}, [o]), K = I((e) => {
|
|
356
558
|
let t = parseFloat(e.target.value), n = [(o.values?.length >= 2 ? o.values : ["", ""])[0], isNaN(t) ? "" : t].filter((e) => e !== "");
|
|
357
559
|
s({
|
|
358
560
|
...o,
|
|
359
561
|
values: n
|
|
360
562
|
});
|
|
361
|
-
}, [o]),
|
|
563
|
+
}, [o]), J = I((e) => {
|
|
362
564
|
let t = e.target.value;
|
|
363
565
|
s({
|
|
364
566
|
...o,
|
|
365
567
|
values: t ? [t] : []
|
|
366
568
|
});
|
|
367
|
-
}, [o]),
|
|
368
|
-
|
|
569
|
+
}, [o]), be = I((e) => {
|
|
570
|
+
h(e), p(!1);
|
|
369
571
|
let t;
|
|
370
572
|
if (e === "custom") {
|
|
371
573
|
let e = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
372
574
|
t = [e, e];
|
|
373
|
-
} else t =
|
|
575
|
+
} else t = te(e) ? A(e, g) : A(e);
|
|
374
576
|
s({
|
|
375
577
|
...o,
|
|
376
578
|
dateRange: t
|
|
377
579
|
});
|
|
378
|
-
}, [o,
|
|
379
|
-
if (
|
|
380
|
-
let t = m
|
|
580
|
+
}, [o, g]), xe = I((e) => {
|
|
581
|
+
if (v(e), te(m)) {
|
|
582
|
+
let t = A(m, e);
|
|
381
583
|
s({
|
|
382
584
|
...o,
|
|
383
585
|
dateRange: t
|
|
384
586
|
});
|
|
385
587
|
}
|
|
386
|
-
}, [o,
|
|
588
|
+
}, [o, m]), Se = I((e) => {
|
|
387
589
|
let t = e.target.value, n = (Array.isArray(o.dateRange) ? o.dateRange : [o.dateRange || "", ""])[1] || t;
|
|
388
590
|
s({
|
|
389
591
|
...o,
|
|
390
592
|
dateRange: [t, n]
|
|
391
593
|
});
|
|
392
|
-
}, [o]),
|
|
594
|
+
}, [o]), Ce = I((e) => {
|
|
393
595
|
let t = e.target.value, n = (Array.isArray(o.dateRange) ? o.dateRange : ["", o.dateRange || ""])[0] || t;
|
|
394
596
|
s({
|
|
395
597
|
...o,
|
|
396
598
|
dateRange: [n, t]
|
|
397
599
|
});
|
|
398
|
-
}, [o]),
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
className: "dc:text-sm text-dc-text-muted",
|
|
446
|
-
children: a("filter.modal.dateTo")
|
|
447
|
-
}),
|
|
448
|
-
/* @__PURE__ */ W("input", {
|
|
449
|
-
type: "date",
|
|
450
|
-
value: Array.isArray(o.dateRange) ? o.dateRange[1] : "",
|
|
451
|
-
onChange: we,
|
|
452
|
-
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-2 dc:py-2 bg-dc-surface text-dc-text"
|
|
453
|
-
})
|
|
454
|
-
]
|
|
455
|
-
})
|
|
456
|
-
]
|
|
457
|
-
}) : o.operator === "between" || o.operator === "notBetween" ? /* @__PURE__ */ G("div", {
|
|
458
|
-
className: "dc:flex dc:items-center dc:gap-2",
|
|
459
|
-
children: [
|
|
460
|
-
/* @__PURE__ */ W("input", {
|
|
461
|
-
type: "number",
|
|
462
|
-
value: o.values?.[0] ?? "",
|
|
463
|
-
onChange: _e,
|
|
464
|
-
placeholder: a("filter.modal.min"),
|
|
465
|
-
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
466
|
-
}),
|
|
467
|
-
/* @__PURE__ */ W("span", {
|
|
468
|
-
className: "dc:text-sm text-dc-text-muted",
|
|
469
|
-
children: a("filter.modal.to")
|
|
470
|
-
}),
|
|
471
|
-
/* @__PURE__ */ W("input", {
|
|
472
|
-
type: "number",
|
|
473
|
-
value: o.values?.[1] ?? "",
|
|
474
|
-
onChange: ve,
|
|
475
|
-
placeholder: a("filter.modal.max"),
|
|
476
|
-
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
477
|
-
})
|
|
478
|
-
]
|
|
479
|
-
}) : F?.valueType === "date" ? /* @__PURE__ */ W("input", {
|
|
480
|
-
type: "date",
|
|
481
|
-
value: o.values?.[0] || "",
|
|
482
|
-
onChange: K,
|
|
483
|
-
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
484
|
-
}) : F?.valueType === "number" ? /* @__PURE__ */ W("input", {
|
|
485
|
-
type: "number",
|
|
486
|
-
value: o.values?.[0] ?? "",
|
|
487
|
-
onChange: ge,
|
|
488
|
-
placeholder: a("filter.modal.enterNumber"),
|
|
489
|
-
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
490
|
-
}) : le ? /* @__PURE__ */ G("div", {
|
|
491
|
-
className: "dc:space-y-2",
|
|
492
|
-
children: [
|
|
493
|
-
o.values && o.values.length > 0 && /* @__PURE__ */ W("div", {
|
|
494
|
-
className: "dc:flex dc:flex-wrap dc:gap-1.5",
|
|
495
|
-
children: o.values.map((e, t) => /* @__PURE__ */ G("span", {
|
|
496
|
-
className: "dc:inline-flex dc:items-center dc:gap-1 bg-dc-primary/10 text-dc-primary dc:text-sm dc:px-2 dc:py-1 dc:rounded",
|
|
497
|
-
children: [/* @__PURE__ */ W("span", {
|
|
498
|
-
className: "dc:max-w-[150px] dc:truncate",
|
|
499
|
-
children: String(e)
|
|
500
|
-
}), /* @__PURE__ */ W("button", {
|
|
501
|
-
onClick: () => me(e),
|
|
502
|
-
className: "hover:text-dc-danger",
|
|
503
|
-
children: /* @__PURE__ */ W(q, { className: "dc:w-3.5 dc:h-3.5" })
|
|
504
|
-
})]
|
|
505
|
-
}, t))
|
|
506
|
-
}),
|
|
507
|
-
/* @__PURE__ */ G("div", {
|
|
508
|
-
className: "dc:relative",
|
|
509
|
-
children: [/* @__PURE__ */ G("button", {
|
|
510
|
-
onClick: () => {
|
|
511
|
-
l(!1), v(!1), h(!p);
|
|
512
|
-
},
|
|
513
|
-
className: "dc:w-full dc:flex dc:items-center dc:justify-between dc:text-left dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
|
|
514
|
-
children: [/* @__PURE__ */ W("span", {
|
|
515
|
-
className: "text-dc-text-muted dc:truncate",
|
|
516
|
-
children: a(ue ? "filter.modal.loading" : "filter.modal.selectValue")
|
|
517
|
-
}), /* @__PURE__ */ W(J, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${p ? "dc:rotate-180" : ""}` })]
|
|
518
|
-
}), p && /* @__PURE__ */ G("div", {
|
|
519
|
-
className: "dc:absolute dc:z-[60] dc:left-0 dc:right-0 dc:mt-1 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:max-h-56 dc:overflow-hidden",
|
|
520
|
-
children: [/* @__PURE__ */ W("div", {
|
|
521
|
-
className: "dc:p-2 dc:border-b border-dc-border",
|
|
522
|
-
children: /* @__PURE__ */ W("input", {
|
|
523
|
-
type: "text",
|
|
524
|
-
value: w,
|
|
525
|
-
onChange: (e) => {
|
|
526
|
-
te(e.target.value), k(-1);
|
|
527
|
-
},
|
|
528
|
-
onKeyDown: he,
|
|
529
|
-
placeholder: a("filter.modal.search"),
|
|
530
|
-
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text",
|
|
531
|
-
autoFocus: !0
|
|
532
|
-
})
|
|
533
|
-
}), /* @__PURE__ */ W("div", {
|
|
534
|
-
ref: j,
|
|
535
|
-
className: "dc:max-h-40 dc:overflow-y-auto",
|
|
536
|
-
children: ue ? /* @__PURE__ */ W("div", {
|
|
537
|
-
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
|
|
538
|
-
children: a("filter.modal.loading")
|
|
539
|
-
}) : B ? /* @__PURE__ */ G("div", {
|
|
540
|
-
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-error",
|
|
541
|
-
children: [a("filter.modal.errorPrefix"), B]
|
|
542
|
-
}) : L.length === 0 ? /* @__PURE__ */ W("div", {
|
|
543
|
-
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
|
|
544
|
-
children: a("filter.modal.noValues")
|
|
545
|
-
}) : L.map((e, t) => {
|
|
546
|
-
let n = o.values?.includes(e);
|
|
547
|
-
return /* @__PURE__ */ G("button", {
|
|
548
|
-
onClick: (t) => pe(e, t),
|
|
549
|
-
className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:text-sm dc:transition-colors ${t === O ? "bg-dc-surface-hover" : ""} ${n ? "bg-dc-primary/10 text-dc-primary" : "text-dc-text hover:bg-dc-surface-hover"}`,
|
|
550
|
-
children: [String(e), n && /* @__PURE__ */ W("span", {
|
|
551
|
-
className: "dc:float-right",
|
|
552
|
-
children: "✓"
|
|
553
|
-
})]
|
|
554
|
-
}, `${e}-${t}`);
|
|
555
|
-
})
|
|
556
|
-
})]
|
|
557
|
-
})]
|
|
558
|
-
}),
|
|
559
|
-
F?.supportsMultipleValues && /* @__PURE__ */ W("p", {
|
|
560
|
-
className: "dc:text-xs text-dc-text-muted",
|
|
561
|
-
children: a("filter.modal.multiSelectHint")
|
|
562
|
-
})
|
|
563
|
-
]
|
|
564
|
-
}) : /* @__PURE__ */ W("input", {
|
|
565
|
-
type: "text",
|
|
566
|
-
value: o.values?.[0] ?? "",
|
|
567
|
-
onChange: ge,
|
|
568
|
-
placeholder: a("filter.modal.enterValue"),
|
|
569
|
-
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text placeholder-dc-text-muted"
|
|
570
|
-
}) : /* @__PURE__ */ W("div", {
|
|
571
|
-
className: "dc:text-sm text-dc-text-muted dc:italic dc:py-2",
|
|
572
|
-
children: a("filter.modal.noValueRequired")
|
|
573
|
-
});
|
|
574
|
-
return /* @__PURE__ */ W(U, { children: /* @__PURE__ */ W("div", {
|
|
575
|
-
className: `dc:fixed dc:inset-0 bg-dc-overlay dc:z-50 ${E ? "" : "dc:flex dc:items-center dc:justify-center dc:p-4"}`,
|
|
600
|
+
}, [o]), Ae = a(M.find((e) => e.operator === o.operator)?.label || o.operator), je = a(ae.find((e) => e.value === m)?.label || "filter.modal.selectRange"), Me = {
|
|
601
|
+
filter: o,
|
|
602
|
+
operatorMeta: j,
|
|
603
|
+
shouldShowDateRange: N,
|
|
604
|
+
shouldShowComboBox: P
|
|
605
|
+
}, Ne = {
|
|
606
|
+
rangeType: m,
|
|
607
|
+
numberValue: g,
|
|
608
|
+
label: je,
|
|
609
|
+
isOpen: f,
|
|
610
|
+
onToggle: p,
|
|
611
|
+
onRangeTypeChange: be,
|
|
612
|
+
onNumberValueChange: xe,
|
|
613
|
+
onCustomStartDate: Se,
|
|
614
|
+
onCustomEndDate: Ce,
|
|
615
|
+
onOpen: I(() => {
|
|
616
|
+
l(!1), d(!1);
|
|
617
|
+
}, [])
|
|
618
|
+
}, Pe = {
|
|
619
|
+
isOpen: u,
|
|
620
|
+
options: F,
|
|
621
|
+
loading: pe,
|
|
622
|
+
error: me,
|
|
623
|
+
searchText: y,
|
|
624
|
+
highlightedIndex: T,
|
|
625
|
+
listRef: ne,
|
|
626
|
+
onSearchTextChange: b,
|
|
627
|
+
onHighlightedIndexChange: E,
|
|
628
|
+
onSelect: ge,
|
|
629
|
+
onRemove: _e,
|
|
630
|
+
onKeyDown: ve,
|
|
631
|
+
onOpen: I(() => {
|
|
632
|
+
l(!1), p(!1), d((e) => !e);
|
|
633
|
+
}, [])
|
|
634
|
+
}, Fe = R(() => ({
|
|
635
|
+
onBetweenStart: G,
|
|
636
|
+
onBetweenEnd: K,
|
|
637
|
+
onDate: J,
|
|
638
|
+
onDirect: ye
|
|
639
|
+
}), [
|
|
640
|
+
G,
|
|
641
|
+
K,
|
|
642
|
+
J,
|
|
643
|
+
ye
|
|
644
|
+
]), Ie = le ? Oe : ue ? ke : De;
|
|
645
|
+
return /* @__PURE__ */ H(V, { children: /* @__PURE__ */ H("div", {
|
|
646
|
+
className: `dc:fixed dc:inset-0 bg-dc-overlay dc:z-50 ${S ? "" : "dc:flex dc:items-center dc:justify-center dc:p-4"}`,
|
|
576
647
|
onClick: r,
|
|
577
|
-
children: /* @__PURE__ */
|
|
578
|
-
ref:
|
|
579
|
-
className:
|
|
648
|
+
children: /* @__PURE__ */ U("div", {
|
|
649
|
+
ref: ee,
|
|
650
|
+
className: S ? "bg-dc-surface rounded-lg border border-dc-border" : "bg-dc-surface rounded-lg border border-dc-border max-w-md w-full",
|
|
580
651
|
style: {
|
|
581
|
-
...
|
|
652
|
+
...S ? {
|
|
582
653
|
position: "fixed",
|
|
583
|
-
...
|
|
654
|
+
...S,
|
|
584
655
|
maxWidth: "400px",
|
|
585
656
|
width: "100%"
|
|
586
657
|
} : {},
|
|
@@ -588,66 +659,71 @@ function xe({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
|
|
|
588
659
|
},
|
|
589
660
|
onClick: (e) => e.stopPropagation(),
|
|
590
661
|
children: [
|
|
591
|
-
/* @__PURE__ */
|
|
662
|
+
/* @__PURE__ */ U("div", {
|
|
592
663
|
className: "dc:flex dc:items-center dc:justify-between dc:p-4 dc:border-b border-dc-border",
|
|
593
|
-
children: [/* @__PURE__ */
|
|
664
|
+
children: [/* @__PURE__ */ H("h2", {
|
|
594
665
|
className: "dc:text-lg dc:font-semibold text-dc-text",
|
|
595
666
|
children: a("filter.modal.title")
|
|
596
|
-
}), /* @__PURE__ */
|
|
667
|
+
}), /* @__PURE__ */ H("button", {
|
|
597
668
|
onClick: r,
|
|
598
669
|
className: "dc:p-1 text-dc-text-muted hover:text-dc-text dc:transition-colors",
|
|
599
|
-
children: /* @__PURE__ */
|
|
670
|
+
children: /* @__PURE__ */ H(Te, { className: "dc:w-5 dc:h-5" })
|
|
600
671
|
})]
|
|
601
672
|
}),
|
|
602
|
-
/* @__PURE__ */
|
|
673
|
+
/* @__PURE__ */ U("div", {
|
|
603
674
|
className: "dc:p-4 dc:space-y-4",
|
|
604
675
|
children: [
|
|
605
|
-
/* @__PURE__ */
|
|
676
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
|
|
606
677
|
className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
|
|
607
678
|
children: a("filter.modal.fieldLabel")
|
|
608
|
-
}), /* @__PURE__ */
|
|
679
|
+
}), /* @__PURE__ */ U("div", {
|
|
609
680
|
className: "dc:flex dc:items-center dc:gap-2 dc:p-3 bg-dc-surface-secondary dc:rounded",
|
|
610
|
-
children: [/* @__PURE__ */
|
|
681
|
+
children: [/* @__PURE__ */ H(Ie, { className: "dc:w-5 dc:h-5 text-dc-filter-text" }), /* @__PURE__ */ H("span", {
|
|
611
682
|
className: "dc:text-sm dc:font-medium text-dc-text",
|
|
612
|
-
children:
|
|
683
|
+
children: fe
|
|
613
684
|
})]
|
|
614
685
|
})] }),
|
|
615
|
-
/* @__PURE__ */
|
|
686
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
|
|
616
687
|
className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
|
|
617
688
|
children: a("filter.modal.operatorLabel")
|
|
618
|
-
}), /* @__PURE__ */
|
|
689
|
+
}), /* @__PURE__ */ U("div", {
|
|
619
690
|
className: "dc:relative",
|
|
620
|
-
children: [/* @__PURE__ */
|
|
691
|
+
children: [/* @__PURE__ */ U("button", {
|
|
621
692
|
onClick: () => {
|
|
622
|
-
|
|
693
|
+
d(!1), p(!1), l(!c);
|
|
623
694
|
},
|
|
624
695
|
className: "dc:w-full dc:flex dc:items-center dc:justify-between dc:text-left dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
|
|
625
|
-
children: [/* @__PURE__ */
|
|
696
|
+
children: [/* @__PURE__ */ H("span", {
|
|
626
697
|
className: "dc:truncate",
|
|
627
|
-
children:
|
|
628
|
-
}), /* @__PURE__ */
|
|
629
|
-
}), c && /* @__PURE__ */
|
|
698
|
+
children: Ae
|
|
699
|
+
}), /* @__PURE__ */ H(Ee, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${c ? "dc:rotate-180" : ""}` })]
|
|
700
|
+
}), c && /* @__PURE__ */ H("div", {
|
|
630
701
|
className: "dc:absolute dc:z-[60] dc:left-0 dc:right-0 dc:mt-1 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:max-h-48 dc:overflow-y-auto",
|
|
631
|
-
children:
|
|
632
|
-
onClick: () =>
|
|
702
|
+
children: M.map((e) => /* @__PURE__ */ H("button", {
|
|
703
|
+
onClick: () => he(e.operator),
|
|
633
704
|
className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:text-sm hover:bg-dc-surface-hover ${e.operator === o.operator ? "bg-dc-primary/10 text-dc-primary" : "text-dc-text"}`,
|
|
634
705
|
children: a(e.label)
|
|
635
706
|
}, e.operator))
|
|
636
707
|
})]
|
|
637
708
|
})] }),
|
|
638
|
-
/* @__PURE__ */
|
|
709
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
|
|
639
710
|
className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
|
|
640
711
|
children: a("filter.modal.valueLabel")
|
|
641
|
-
}),
|
|
712
|
+
}), /* @__PURE__ */ H(we, {
|
|
713
|
+
field: Me,
|
|
714
|
+
dateRange: Ne,
|
|
715
|
+
combo: Pe,
|
|
716
|
+
inputs: Fe
|
|
717
|
+
})] })
|
|
642
718
|
]
|
|
643
719
|
}),
|
|
644
|
-
/* @__PURE__ */
|
|
720
|
+
/* @__PURE__ */ U("div", {
|
|
645
721
|
className: "dc:flex dc:items-center dc:justify-end dc:gap-2 dc:p-4 dc:border-t border-dc-border",
|
|
646
|
-
children: [/* @__PURE__ */
|
|
722
|
+
children: [/* @__PURE__ */ H("button", {
|
|
647
723
|
onClick: r,
|
|
648
724
|
className: "dc:px-4 dc:py-2 dc:text-sm dc:font-medium text-dc-text-secondary hover:text-dc-text dc:transition-colors",
|
|
649
725
|
children: a("common.actions.cancel")
|
|
650
|
-
}), /* @__PURE__ */
|
|
726
|
+
}), /* @__PURE__ */ H("button", {
|
|
651
727
|
onClick: () => n(o),
|
|
652
728
|
className: "dc:px-4 dc:py-2 dc:text-sm dc:font-medium text-dc-primary-content bg-dc-primary hover:bg-dc-primary-hover dc:rounded dc:transition-colors",
|
|
653
729
|
children: a("common.actions.save")
|
|
@@ -659,47 +735,47 @@ function xe({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
|
|
|
659
735
|
}
|
|
660
736
|
//#endregion
|
|
661
737
|
//#region src/client/components/AnalysisBuilder/AnalysisFilterItem.tsx
|
|
662
|
-
var
|
|
663
|
-
function
|
|
664
|
-
let { t: i } =
|
|
665
|
-
return /* @__PURE__ */
|
|
738
|
+
var je = l("close"), Me = l("dimension"), Ne = l("timeDimension"), Pe = l("measure");
|
|
739
|
+
function Fe({ filter: e, schema: t, onRemove: n, onUpdate: r }) {
|
|
740
|
+
let { t: i } = D(), [a, o] = B(!1), s = z(null), c = x(e.member, t), l = (c?.field.type || "string") === "time", u = c?.fieldType === "measure", d = C(e.member, t), f = O[e.operator], p = f?.label ? i(f.label) : e.operator, m = Ie(e, f, i), h = l ? Ne : u ? Pe : Me;
|
|
741
|
+
return /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ U("div", {
|
|
666
742
|
className: "dc:flex dc:items-start dc:gap-2 dc:px-2 dc:py-1.5 bg-dc-surface-secondary dc:rounded-lg dc:group hover:bg-dc-surface-tertiary dc:transition-all dc:duration-150 dc:w-full",
|
|
667
743
|
children: [
|
|
668
|
-
/* @__PURE__ */
|
|
669
|
-
className: `dc:w-6 dc:h-6 dc:flex dc:items-center dc:justify-center dc:rounded ${l ? "bg-dc-time-dimension" :
|
|
670
|
-
children:
|
|
744
|
+
/* @__PURE__ */ H("span", {
|
|
745
|
+
className: `dc:w-6 dc:h-6 dc:flex dc:items-center dc:justify-center dc:rounded ${l ? "bg-dc-time-dimension" : u ? "bg-dc-measure" : "bg-dc-dimension"} ${l ? "text-dc-time-dimension-text" : u ? "text-dc-measure-text" : "text-dc-dimension-text"} dc:flex-shrink-0 dc:mt-0.5`,
|
|
746
|
+
children: h && /* @__PURE__ */ H(h, { className: "dc:w-4 dc:h-4" })
|
|
671
747
|
}),
|
|
672
|
-
/* @__PURE__ */
|
|
748
|
+
/* @__PURE__ */ H("button", {
|
|
673
749
|
ref: s,
|
|
674
750
|
onClick: () => o(!0),
|
|
675
751
|
className: "dc:flex-1 dc:min-w-0 dc:text-left",
|
|
676
|
-
title: `${
|
|
677
|
-
children: /* @__PURE__ */
|
|
752
|
+
title: `${d} ${p} ${m}`,
|
|
753
|
+
children: /* @__PURE__ */ U("div", {
|
|
678
754
|
className: "dc:text-sm text-dc-text dc:break-words",
|
|
679
755
|
children: [
|
|
680
|
-
/* @__PURE__ */
|
|
756
|
+
/* @__PURE__ */ H("span", {
|
|
681
757
|
className: "dc:font-medium",
|
|
682
|
-
children:
|
|
758
|
+
children: d
|
|
683
759
|
}),
|
|
684
|
-
/* @__PURE__ */
|
|
760
|
+
/* @__PURE__ */ H("span", {
|
|
685
761
|
className: "text-dc-text-muted dc:mx-1",
|
|
686
|
-
children:
|
|
762
|
+
children: p
|
|
687
763
|
}),
|
|
688
|
-
/* @__PURE__ */
|
|
764
|
+
/* @__PURE__ */ H("span", {
|
|
689
765
|
className: "text-dc-primary",
|
|
690
|
-
children:
|
|
766
|
+
children: m
|
|
691
767
|
})
|
|
692
768
|
]
|
|
693
769
|
})
|
|
694
770
|
}),
|
|
695
|
-
/* @__PURE__ */
|
|
771
|
+
/* @__PURE__ */ H("button", {
|
|
696
772
|
onClick: n,
|
|
697
773
|
className: "dc:p-1 text-dc-text-muted hover:text-dc-danger dc:opacity-100 dc:sm:opacity-0 dc:sm:group-hover:opacity-100 dc:transition-opacity dc:flex-shrink-0 dc:mt-0.5",
|
|
698
774
|
title: i("filter.removeButton.title"),
|
|
699
|
-
children:
|
|
775
|
+
children: je && /* @__PURE__ */ H(je, { className: "dc:w-4 dc:h-4" })
|
|
700
776
|
})
|
|
701
777
|
]
|
|
702
|
-
}), a && /* @__PURE__ */
|
|
778
|
+
}), a && /* @__PURE__ */ H(Ae, {
|
|
703
779
|
filter: e,
|
|
704
780
|
schema: t,
|
|
705
781
|
onSave: (e) => {
|
|
@@ -709,7 +785,7 @@ function Ee({ filter: e, schema: t, onRemove: n, onUpdate: r }) {
|
|
|
709
785
|
anchorElement: s.current
|
|
710
786
|
})] });
|
|
711
787
|
}
|
|
712
|
-
function
|
|
788
|
+
function Ie(e, t, n) {
|
|
713
789
|
if (!t?.requiresValues) return "";
|
|
714
790
|
if (e.dateRange) return Array.isArray(e.dateRange) ? `${e.dateRange[0]} to ${e.dateRange[1]}` : e.dateRange;
|
|
715
791
|
let r = e.values || [];
|
|
@@ -717,34 +793,34 @@ function De(e, t, n) {
|
|
|
717
793
|
}
|
|
718
794
|
//#endregion
|
|
719
795
|
//#region src/client/components/AnalysisBuilder/AnalysisFilterGroup.tsx
|
|
720
|
-
var
|
|
721
|
-
function
|
|
796
|
+
var Le = l("add"), Re = l("close");
|
|
797
|
+
function ze(e) {
|
|
722
798
|
return "member" in e && typeof e.member == "string";
|
|
723
799
|
}
|
|
724
|
-
function
|
|
800
|
+
function Be(e) {
|
|
725
801
|
return "type" in e && (e.type === "and" || e.type === "or");
|
|
726
802
|
}
|
|
727
|
-
function
|
|
728
|
-
let { t: s } =
|
|
729
|
-
|
|
803
|
+
function Ve({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, depth: a = 0, hideRemoveButton: o = !1 }) {
|
|
804
|
+
let { t: s } = D(), [c, l] = B(!1), u = z(null);
|
|
805
|
+
L(() => {
|
|
730
806
|
let e = (e) => {
|
|
731
807
|
u.current && !u.current.contains(e.target) && l(!1);
|
|
732
808
|
};
|
|
733
809
|
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
734
810
|
}, []);
|
|
735
|
-
let d =
|
|
811
|
+
let d = I(() => {
|
|
736
812
|
let t = e.type === "and" ? "or" : "and";
|
|
737
813
|
n({
|
|
738
814
|
...e,
|
|
739
815
|
type: t
|
|
740
816
|
});
|
|
741
|
-
}, [e, n]), f =
|
|
817
|
+
}, [e, n]), f = I((t, r) => {
|
|
742
818
|
let i = [...e.filters];
|
|
743
819
|
i[t] = r, n({
|
|
744
820
|
...e,
|
|
745
821
|
filters: i
|
|
746
822
|
});
|
|
747
|
-
}, [e, n]), p =
|
|
823
|
+
}, [e, n]), p = I((t) => {
|
|
748
824
|
let i = e.filters.filter((e, n) => n !== t);
|
|
749
825
|
i.length === 0 ? r() : n({
|
|
750
826
|
...e,
|
|
@@ -755,7 +831,7 @@ function Me({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
|
|
|
755
831
|
n,
|
|
756
832
|
r,
|
|
757
833
|
a
|
|
758
|
-
]), m =
|
|
834
|
+
]), m = I((t) => {
|
|
759
835
|
let r = {
|
|
760
836
|
type: t,
|
|
761
837
|
filters: []
|
|
@@ -764,23 +840,23 @@ function Me({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
|
|
|
764
840
|
...e,
|
|
765
841
|
filters: [...e.filters, r]
|
|
766
842
|
}), l(!1);
|
|
767
|
-
}, [e, n]), h =
|
|
843
|
+
}, [e, n]), h = I(() => {
|
|
768
844
|
i([]), l(!1);
|
|
769
|
-
}, [i]), g =
|
|
845
|
+
}, [i]), g = I((e) => (t = []) => {
|
|
770
846
|
i([e, ...t]);
|
|
771
847
|
}, [i]), _ = () => a % 2 == 0 ? "border-dc-border" : "border-dc-border dark:border-dc-border", v = () => e.type === "and" ? "bg-dc-info-bg/50" : "bg-dc-warning-bg/50", y = e.filters.length, b = s(y === 1 ? "filter.group.condition" : "filter.group.conditions");
|
|
772
|
-
return /* @__PURE__ */
|
|
848
|
+
return /* @__PURE__ */ U("div", {
|
|
773
849
|
className: `dc:border ${_()} dc:rounded-lg bg-dc-surface dc:w-full`,
|
|
774
|
-
children: [/* @__PURE__ */
|
|
850
|
+
children: [/* @__PURE__ */ U("div", {
|
|
775
851
|
className: `dc:flex dc:items-center dc:justify-between dc:px-2 dc:py-1.5 dc:border-b border-dc-border/50 dc:rounded-t-lg ${v()}`,
|
|
776
|
-
children: [/* @__PURE__ */
|
|
852
|
+
children: [/* @__PURE__ */ U("div", {
|
|
777
853
|
className: "dc:flex dc:items-center dc:gap-2",
|
|
778
|
-
children: [/* @__PURE__ */
|
|
854
|
+
children: [/* @__PURE__ */ H("button", {
|
|
779
855
|
onClick: d,
|
|
780
856
|
className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-semibold dc:rounded dc:transition-colors ${e.type === "and" ? "bg-dc-info-bg text-dc-info dc:hover:opacity-80" : "bg-dc-warning-bg text-dc-warning dc:hover:opacity-80"}`,
|
|
781
857
|
title: `Click to switch to ${e.type === "and" ? "OR" : "AND"}`,
|
|
782
858
|
children: e.type.toUpperCase()
|
|
783
|
-
}), /* @__PURE__ */
|
|
859
|
+
}), /* @__PURE__ */ U("span", {
|
|
784
860
|
className: "dc:text-xs text-dc-text-muted",
|
|
785
861
|
children: [
|
|
786
862
|
y,
|
|
@@ -788,61 +864,61 @@ function Me({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
|
|
|
788
864
|
b
|
|
789
865
|
]
|
|
790
866
|
})]
|
|
791
|
-
}), /* @__PURE__ */
|
|
867
|
+
}), /* @__PURE__ */ U("div", {
|
|
792
868
|
className: "dc:flex dc:items-center dc:gap-1",
|
|
793
|
-
children: [/* @__PURE__ */
|
|
869
|
+
children: [/* @__PURE__ */ U("div", {
|
|
794
870
|
className: "dc:relative",
|
|
795
871
|
ref: u,
|
|
796
|
-
children: [/* @__PURE__ */
|
|
872
|
+
children: [/* @__PURE__ */ H("button", {
|
|
797
873
|
onClick: () => l(!c),
|
|
798
874
|
className: "dc:p-1 text-dc-text-secondary hover:text-dc-primary hover:bg-dc-surface-hover dc:rounded dc:transition-colors",
|
|
799
875
|
title: "Add condition",
|
|
800
|
-
children: /* @__PURE__ */
|
|
801
|
-
}), c && /* @__PURE__ */
|
|
876
|
+
children: /* @__PURE__ */ H(Le, { className: "dc:w-4 dc:h-4" })
|
|
877
|
+
}), c && /* @__PURE__ */ U("div", {
|
|
802
878
|
className: "dc:absolute dc:right-0 dc:mt-1 dc:z-40 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:py-1 dc:min-w-[120px]",
|
|
803
879
|
children: [
|
|
804
|
-
/* @__PURE__ */
|
|
880
|
+
/* @__PURE__ */ H("button", {
|
|
805
881
|
onClick: h,
|
|
806
882
|
className: "dc:w-full dc:text-left dc:px-3 dc:py-1.5 dc:text-xs text-dc-text hover:bg-dc-surface-hover",
|
|
807
883
|
children: s("filter.group.addFilter")
|
|
808
884
|
}),
|
|
809
|
-
/* @__PURE__ */
|
|
885
|
+
/* @__PURE__ */ H("button", {
|
|
810
886
|
onClick: () => m("and"),
|
|
811
887
|
className: "dc:w-full dc:text-left dc:px-3 dc:py-1.5 dc:text-xs text-dc-text hover:bg-dc-surface-hover",
|
|
812
888
|
children: s("filter.group.addAndGroup")
|
|
813
889
|
}),
|
|
814
|
-
/* @__PURE__ */
|
|
890
|
+
/* @__PURE__ */ H("button", {
|
|
815
891
|
onClick: () => m("or"),
|
|
816
892
|
className: "dc:w-full dc:text-left dc:px-3 dc:py-1.5 dc:text-xs text-dc-text hover:bg-dc-surface-hover",
|
|
817
893
|
children: s("filter.group.addOrGroup")
|
|
818
894
|
})
|
|
819
895
|
]
|
|
820
896
|
})]
|
|
821
|
-
}), !o && /* @__PURE__ */
|
|
897
|
+
}), !o && /* @__PURE__ */ H("button", {
|
|
822
898
|
onClick: r,
|
|
823
899
|
className: "dc:p-1 text-dc-text-muted hover:text-dc-danger dc:transition-colors",
|
|
824
900
|
title: s("filter.group.removeGroup"),
|
|
825
|
-
children: /* @__PURE__ */
|
|
901
|
+
children: /* @__PURE__ */ H(Re, { className: "dc:w-4 dc:h-4" })
|
|
826
902
|
})]
|
|
827
903
|
})]
|
|
828
|
-
}), /* @__PURE__ */
|
|
904
|
+
}), /* @__PURE__ */ H("div", {
|
|
829
905
|
className: "dc:p-1.5 dc:flex dc:flex-wrap dc:gap-2",
|
|
830
|
-
children: e.filters.length === 0 ? /* @__PURE__ */
|
|
906
|
+
children: e.filters.length === 0 ? /* @__PURE__ */ U("div", {
|
|
831
907
|
className: "dc:text-center dc:py-3",
|
|
832
|
-
children: [/* @__PURE__ */
|
|
908
|
+
children: [/* @__PURE__ */ H("p", {
|
|
833
909
|
className: "dc:text-xs text-dc-text-muted dc:mb-1",
|
|
834
910
|
children: s("filter.group.empty")
|
|
835
|
-
}), /* @__PURE__ */
|
|
911
|
+
}), /* @__PURE__ */ H("button", {
|
|
836
912
|
onClick: () => i([]),
|
|
837
913
|
className: "dc:text-xs text-dc-primary dc:hover:underline",
|
|
838
914
|
children: s("filter.group.addFilterLink")
|
|
839
915
|
})]
|
|
840
|
-
}) : e.filters.map((e, n) =>
|
|
916
|
+
}) : e.filters.map((e, n) => ze(e) ? /* @__PURE__ */ H(Fe, {
|
|
841
917
|
filter: e,
|
|
842
918
|
schema: t,
|
|
843
919
|
onUpdate: (e) => f(n, e),
|
|
844
920
|
onRemove: () => p(n)
|
|
845
|
-
}, `filter-${n}`) :
|
|
921
|
+
}, `filter-${n}`) : Be(e) ? /* @__PURE__ */ H(Ve, {
|
|
846
922
|
group: e,
|
|
847
923
|
schema: t,
|
|
848
924
|
onUpdate: (e) => f(n, e),
|
|
@@ -855,28 +931,28 @@ function Me({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
|
|
|
855
931
|
}
|
|
856
932
|
//#endregion
|
|
857
933
|
//#region src/client/components/AnalysisBuilder/AnalysisFilterSection.tsx
|
|
858
|
-
var
|
|
859
|
-
function
|
|
934
|
+
var He = l("add");
|
|
935
|
+
function Ue(e) {
|
|
860
936
|
return "member" in e && typeof e.member == "string";
|
|
861
937
|
}
|
|
862
|
-
function
|
|
938
|
+
function We(e) {
|
|
863
939
|
return "type" in e && (e.type === "and" || e.type === "or");
|
|
864
940
|
}
|
|
865
|
-
function
|
|
941
|
+
function Ge(e) {
|
|
866
942
|
let t = 0;
|
|
867
|
-
for (let n of e)
|
|
943
|
+
for (let n of e) Ue(n) ? t++ : We(n) && (t += Ge(n.filters));
|
|
868
944
|
return t;
|
|
869
945
|
}
|
|
870
|
-
function
|
|
946
|
+
function Ke(e) {
|
|
871
947
|
let t = [];
|
|
872
|
-
for (let n of e)
|
|
948
|
+
for (let n of e) Ue(n) ? t.push(n.member) : We(n) && t.push(...Ke(n.filters));
|
|
873
949
|
return t;
|
|
874
950
|
}
|
|
875
|
-
function
|
|
876
|
-
if (t.length === 0) return e.length === 0 ? [n] : e.length === 1 &&
|
|
951
|
+
function qe(e, t, n) {
|
|
952
|
+
if (t.length === 0) return e.length === 0 ? [n] : e.length === 1 && Ue(e[0]) ? [{
|
|
877
953
|
type: "and",
|
|
878
954
|
filters: [e[0], n]
|
|
879
|
-
}] : e.length === 1 &&
|
|
955
|
+
}] : e.length === 1 && We(e[0]) ? [{
|
|
880
956
|
...e[0],
|
|
881
957
|
filters: [...e[0].filters, n]
|
|
882
958
|
}] : [{
|
|
@@ -884,38 +960,38 @@ function Re(e, t, n) {
|
|
|
884
960
|
filters: [...e, n]
|
|
885
961
|
}];
|
|
886
962
|
let [r, ...i] = t, a = [...e], o = a[r];
|
|
887
|
-
return
|
|
963
|
+
return We(o) && (i.length === 0 ? a[r] = {
|
|
888
964
|
...o,
|
|
889
965
|
filters: [...o.filters, n]
|
|
890
966
|
} : a[r] = {
|
|
891
967
|
...o,
|
|
892
|
-
filters:
|
|
968
|
+
filters: qe(o.filters, i, n)
|
|
893
969
|
}), a;
|
|
894
970
|
}
|
|
895
|
-
function
|
|
896
|
-
let { t: a } =
|
|
971
|
+
function Je({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dimensionsOnly: i = !1 }) {
|
|
972
|
+
let { t: a } = D(), [o, s] = B(!1), [c, l] = B(!1), u = z([]), d = Ge(e), f = I((e) => {
|
|
897
973
|
e.preventDefault(), e.stopPropagation(), l(!0);
|
|
898
|
-
}, []),
|
|
974
|
+
}, []), m = I((e) => {
|
|
899
975
|
e.preventDefault(), e.stopPropagation(), l(!1);
|
|
900
|
-
}, []), h =
|
|
976
|
+
}, []), h = I((e) => {
|
|
901
977
|
e.preventDefault(), e.stopPropagation(), l(!1);
|
|
902
978
|
try {
|
|
903
979
|
let t = JSON.parse(e.dataTransfer.getData("text/plain"));
|
|
904
980
|
t.field && r && r(t.field);
|
|
905
981
|
} catch {}
|
|
906
|
-
}, [r]), g =
|
|
982
|
+
}, [r]), g = Ke(e), _ = I((t, r, i) => {
|
|
907
983
|
let a = t.type === "time", o = a ? "inDateRange" : "equals", c = {
|
|
908
984
|
member: t.name,
|
|
909
985
|
operator: o,
|
|
910
986
|
values: []
|
|
911
987
|
};
|
|
912
|
-
a && o === "inDateRange" && (c.dateRange =
|
|
913
|
-
}, [e, n]), v =
|
|
988
|
+
a && o === "inDateRange" && (c.dateRange = A("this_month")), n(qe(e, u.current, c)), s(!1), u.current = [];
|
|
989
|
+
}, [e, n]), v = I((t, r) => {
|
|
914
990
|
let i = [...e];
|
|
915
991
|
i[t] = r, n(i);
|
|
916
|
-
}, [e, n]), y =
|
|
992
|
+
}, [e, n]), y = I((t) => {
|
|
917
993
|
let r = e.filter((e, n) => n !== t);
|
|
918
|
-
if (r.length === 1 &&
|
|
994
|
+
if (r.length === 1 && We(r[0])) {
|
|
919
995
|
let e = r[0];
|
|
920
996
|
if (e.filters.length === 1) {
|
|
921
997
|
n([e.filters[0]]);
|
|
@@ -923,20 +999,20 @@ function ze({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
|
|
|
923
999
|
}
|
|
924
1000
|
}
|
|
925
1001
|
n(r);
|
|
926
|
-
}, [e, n]), b =
|
|
1002
|
+
}, [e, n]), b = I(() => {
|
|
927
1003
|
n([]);
|
|
928
|
-
}, [n]), x =
|
|
1004
|
+
}, [n]), x = I(() => {
|
|
929
1005
|
u.current = [], s(!0);
|
|
930
|
-
}, []), S =
|
|
1006
|
+
}, []), S = I((e) => (t = []) => {
|
|
931
1007
|
u.current = [...e, ...t], s(!0);
|
|
932
1008
|
}, []), C = (n, r, i = []) => {
|
|
933
1009
|
let a = [...i, r];
|
|
934
|
-
return
|
|
1010
|
+
return Ue(n) ? /* @__PURE__ */ H(Fe, {
|
|
935
1011
|
filter: n,
|
|
936
1012
|
schema: t,
|
|
937
1013
|
onUpdate: (e) => v(r, e),
|
|
938
1014
|
onRemove: () => y(r)
|
|
939
|
-
}, `filter-${a.join("-")}`) :
|
|
1015
|
+
}, `filter-${a.join("-")}`) : We(n) ? /* @__PURE__ */ H(Ve, {
|
|
940
1016
|
group: n,
|
|
941
1017
|
schema: t,
|
|
942
1018
|
onUpdate: (e) => v(r, e),
|
|
@@ -945,21 +1021,21 @@ function ze({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
|
|
|
945
1021
|
hideRemoveButton: e.length === 1
|
|
946
1022
|
}, `group-${a.join("-")}`) : null;
|
|
947
1023
|
};
|
|
948
|
-
return /* @__PURE__ */
|
|
949
|
-
/* @__PURE__ */
|
|
1024
|
+
return /* @__PURE__ */ U("div", { children: [
|
|
1025
|
+
/* @__PURE__ */ U("button", {
|
|
950
1026
|
onClick: x,
|
|
951
1027
|
className: "dc:flex dc:items-center dc:justify-between dc:mb-3 dc:w-full dc:py-1 dc:px-2 dc:-ml-2 dc:rounded-lg hover:bg-dc-primary/10 dc:transition-colors dc:group",
|
|
952
1028
|
title: "Add filter",
|
|
953
|
-
children: [/* @__PURE__ */
|
|
1029
|
+
children: [/* @__PURE__ */ U(M, { children: [a("analysis.sections.filters"), d > 0 && /* @__PURE__ */ U("span", {
|
|
954
1030
|
className: "dc:ml-1.5 dc:text-xs dc:font-normal text-dc-text-muted dc:normal-case dc:tracking-normal",
|
|
955
1031
|
children: [
|
|
956
1032
|
"(",
|
|
957
1033
|
d,
|
|
958
1034
|
")"
|
|
959
1035
|
]
|
|
960
|
-
})] }), /* @__PURE__ */
|
|
1036
|
+
})] }), /* @__PURE__ */ U("div", {
|
|
961
1037
|
className: "dc:flex dc:items-center dc:gap-2",
|
|
962
|
-
children: [d > 0 && /* @__PURE__ */
|
|
1038
|
+
children: [d > 0 && /* @__PURE__ */ H("span", {
|
|
963
1039
|
role: "button",
|
|
964
1040
|
tabIndex: 0,
|
|
965
1041
|
onClick: (e) => {
|
|
@@ -970,23 +1046,23 @@ function ze({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
|
|
|
970
1046
|
},
|
|
971
1047
|
className: "dc:text-xs text-dc-text-muted hover:text-dc-error dc:underline dc:cursor-pointer",
|
|
972
1048
|
children: a("filter.section.clearAll")
|
|
973
|
-
}), /* @__PURE__ */
|
|
1049
|
+
}), /* @__PURE__ */ H(He, { className: "dc:w-5 dc:h-5 text-dc-text-secondary group-hover:text-dc-primary dc:transition-colors" })]
|
|
974
1050
|
})]
|
|
975
1051
|
}),
|
|
976
|
-
/* @__PURE__ */
|
|
1052
|
+
/* @__PURE__ */ H("div", {
|
|
977
1053
|
onDragOver: r ? f : void 0,
|
|
978
|
-
onDragLeave: r ?
|
|
1054
|
+
onDragLeave: r ? m : void 0,
|
|
979
1055
|
onDrop: r ? h : void 0,
|
|
980
1056
|
className: `dc:p-2 dc:-mx-2 dc:rounded-lg dc:border-2 dc:border-dashed dc:transition-all ${c ? "border-dc-primary bg-dc-primary/5" : "border-transparent"}`,
|
|
981
|
-
children: e.length === 0 ? /* @__PURE__ */
|
|
1057
|
+
children: e.length === 0 ? /* @__PURE__ */ H("p", {
|
|
982
1058
|
className: `dc:text-sm ${c ? "text-dc-primary dc:font-medium" : "text-dc-text-muted"}`,
|
|
983
1059
|
children: a(c ? "filter.section.dropHint" : "filter.section.empty")
|
|
984
|
-
}) : /* @__PURE__ */
|
|
1060
|
+
}) : /* @__PURE__ */ H("div", {
|
|
985
1061
|
className: "dc:flex dc:flex-wrap dc:gap-2",
|
|
986
1062
|
children: e.map((e, t) => C(e, t))
|
|
987
1063
|
})
|
|
988
1064
|
}),
|
|
989
|
-
/* @__PURE__ */
|
|
1065
|
+
/* @__PURE__ */ H(p, {
|
|
990
1066
|
isOpen: o,
|
|
991
1067
|
onClose: () => {
|
|
992
1068
|
s(!1), u.current = [];
|
|
@@ -999,138 +1075,34 @@ function ze({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
|
|
|
999
1075
|
] });
|
|
1000
1076
|
}
|
|
1001
1077
|
//#endregion
|
|
1002
|
-
//#region src/client/shared/chartDefaults.ts
|
|
1003
|
-
function Be(e) {
|
|
1004
|
-
return e.isTimeDimension;
|
|
1005
|
-
}
|
|
1006
|
-
function Ve(e) {
|
|
1007
|
-
return e.find(Be);
|
|
1008
|
-
}
|
|
1009
|
-
function He(e) {
|
|
1010
|
-
return e.find((e) => !e.isTimeDimension);
|
|
1011
|
-
}
|
|
1012
|
-
function Ue(e) {
|
|
1013
|
-
return e.filter((e) => !e.isTimeDimension);
|
|
1014
|
-
}
|
|
1015
|
-
function We(e) {
|
|
1016
|
-
return e.filter(Be);
|
|
1017
|
-
}
|
|
1018
|
-
function Ge(e, t) {
|
|
1019
|
-
return {
|
|
1020
|
-
measureCount: e.length,
|
|
1021
|
-
dimensionCount: t.length,
|
|
1022
|
-
timeDimensionCount: We(t).length
|
|
1023
|
-
};
|
|
1024
|
-
}
|
|
1025
|
-
function Ke(e, t, n) {
|
|
1026
|
-
let r = l[e];
|
|
1027
|
-
return !r || !r.isAvailable ? { available: !0 } : r.isAvailable(Ge(t, n));
|
|
1028
|
-
}
|
|
1029
|
-
function qe(e, t) {
|
|
1030
|
-
let n = Object.keys(l), r = {};
|
|
1031
|
-
for (let i of n) r[i] = Ke(i, e, t);
|
|
1032
|
-
return r;
|
|
1033
|
-
}
|
|
1034
|
-
function Je(e, t, n) {
|
|
1035
|
-
if (Ke(n, e, t).available || e.length === 0 && t.length === 0) return n;
|
|
1036
|
-
let r = We(t).length > 0, i = Ue(t).length > 0, a = e.length > 0;
|
|
1037
|
-
return r && a ? "line" : i && a ? "bar" : a && !i && !r ? "kpiNumber" : "table";
|
|
1038
|
-
}
|
|
1039
|
-
function Ye(e, t, n) {
|
|
1040
|
-
let r = Je(e, t, n);
|
|
1041
|
-
return {
|
|
1042
|
-
chartType: r,
|
|
1043
|
-
chartConfig: Xe(r, e, t)
|
|
1044
|
-
};
|
|
1045
|
-
}
|
|
1046
|
-
function Xe(e, t, n) {
|
|
1047
|
-
let r = Ve(n), i = He(n), a = Ue(n), o = n;
|
|
1048
|
-
switch (e) {
|
|
1049
|
-
case "line":
|
|
1050
|
-
case "area": return {
|
|
1051
|
-
xAxis: r ? [r.field] : i ? [i.field] : [],
|
|
1052
|
-
yAxis: t.map((e) => e.field),
|
|
1053
|
-
series: a.length > 1 ? [a[1].field] : i && r ? [i.field] : []
|
|
1054
|
-
};
|
|
1055
|
-
case "bar": return {
|
|
1056
|
-
xAxis: i ? [i.field] : r ? [r.field] : [],
|
|
1057
|
-
yAxis: t.map((e) => e.field),
|
|
1058
|
-
series: a.length > 1 ? [a[1].field] : r && i ? [r.field] : []
|
|
1059
|
-
};
|
|
1060
|
-
case "pie": return {
|
|
1061
|
-
xAxis: i ? [i.field] : [],
|
|
1062
|
-
yAxis: t.length > 0 ? [t[0].field] : []
|
|
1063
|
-
};
|
|
1064
|
-
case "scatter": return t.length >= 2 ? {
|
|
1065
|
-
xAxis: [t[0].field],
|
|
1066
|
-
yAxis: [t[1].field],
|
|
1067
|
-
series: i ? [i.field] : []
|
|
1068
|
-
} : {
|
|
1069
|
-
xAxis: o.length > 0 ? [o[0].field] : [],
|
|
1070
|
-
yAxis: t.length > 0 ? [t[0].field] : [],
|
|
1071
|
-
series: a.length > 1 ? [a[1].field] : []
|
|
1072
|
-
};
|
|
1073
|
-
case "bubble": return {
|
|
1074
|
-
xAxis: t.length > 0 ? [t[0].field] : [],
|
|
1075
|
-
yAxis: t.length > 1 ? [t[1].field] : [],
|
|
1076
|
-
sizeField: t.length > 2 ? t[2].field : t.length > 1 ? t[1].field : void 0,
|
|
1077
|
-
series: i ? [i.field] : r ? [r.field] : []
|
|
1078
|
-
};
|
|
1079
|
-
case "radar":
|
|
1080
|
-
case "radialBar":
|
|
1081
|
-
case "treemap": return {
|
|
1082
|
-
xAxis: i ? [i.field] : [],
|
|
1083
|
-
yAxis: t.length > 0 ? [t[0].field] : []
|
|
1084
|
-
};
|
|
1085
|
-
case "activityGrid": return {
|
|
1086
|
-
dateField: r ? [r.field] : [],
|
|
1087
|
-
valueField: t.length > 0 ? [t[0].field] : []
|
|
1088
|
-
};
|
|
1089
|
-
case "kpiNumber":
|
|
1090
|
-
case "kpiDelta":
|
|
1091
|
-
case "kpiText": return { yAxis: t.length > 0 ? [t[0].field] : [] };
|
|
1092
|
-
case "table": return { xAxis: [...n.map((e) => e.field), ...t.map((e) => e.field)] };
|
|
1093
|
-
case "markdown": return {};
|
|
1094
|
-
default: return {
|
|
1095
|
-
xAxis: o.length > 0 ? [o[0].field] : [],
|
|
1096
|
-
yAxis: t.map((e) => e.field)
|
|
1097
|
-
};
|
|
1098
|
-
}
|
|
1099
|
-
}
|
|
1100
|
-
function Ze(e, t, n, r) {
|
|
1101
|
-
if (r && Ke(n, e, t).available) return null;
|
|
1102
|
-
let i = Je(e, t, n);
|
|
1103
|
-
return i === n ? null : i;
|
|
1104
|
-
}
|
|
1105
|
-
//#endregion
|
|
1106
1078
|
//#region src/client/components/AnalysisBuilder/ExplainAIPanel.tsx
|
|
1107
|
-
function
|
|
1079
|
+
function Y(e) {
|
|
1108
1080
|
return typeof e == "string" ? e : typeof e == "object" && e ? JSON.stringify(e) : String(e ?? "");
|
|
1109
1081
|
}
|
|
1110
|
-
var
|
|
1082
|
+
var Ye = {
|
|
1111
1083
|
good: "bg-dc-success-bg text-dc-success border-dc-success",
|
|
1112
1084
|
warning: "bg-dc-warning-bg text-dc-warning border-dc-warning",
|
|
1113
1085
|
critical: "bg-dc-danger-bg text-dc-error border-dc-error"
|
|
1114
|
-
},
|
|
1086
|
+
}, Xe = {
|
|
1115
1087
|
critical: "bg-dc-danger-bg text-dc-error",
|
|
1116
1088
|
warning: "bg-dc-warning-bg text-dc-warning",
|
|
1117
1089
|
suggestion: "bg-dc-accent-bg text-dc-accent"
|
|
1118
|
-
},
|
|
1090
|
+
}, Ze = {
|
|
1119
1091
|
high: "text-dc-error",
|
|
1120
1092
|
medium: "text-dc-warning",
|
|
1121
1093
|
low: "text-dc-text-muted"
|
|
1122
1094
|
};
|
|
1123
|
-
function
|
|
1124
|
-
let { t: n } =
|
|
1095
|
+
function Qe({ assessment: e, reason: t }) {
|
|
1096
|
+
let { t: n } = D(), r = {
|
|
1125
1097
|
good: n("explainAI.assessment.good"),
|
|
1126
1098
|
warning: n("explainAI.assessment.warning"),
|
|
1127
1099
|
critical: n("explainAI.assessment.critical")
|
|
1128
1100
|
};
|
|
1129
|
-
return /* @__PURE__ */
|
|
1130
|
-
className: `dc:p-4 dc:rounded-lg dc:border ${
|
|
1131
|
-
children: [/* @__PURE__ */
|
|
1101
|
+
return /* @__PURE__ */ U("div", {
|
|
1102
|
+
className: `dc:p-4 dc:rounded-lg dc:border ${Ye[e]}`,
|
|
1103
|
+
children: [/* @__PURE__ */ H("div", {
|
|
1132
1104
|
className: "dc:flex dc:items-center dc:gap-2 dc:mb-1",
|
|
1133
|
-
children: /* @__PURE__ */
|
|
1105
|
+
children: /* @__PURE__ */ U("span", {
|
|
1134
1106
|
className: "dc:font-semibold dc:uppercase dc:text-base",
|
|
1135
1107
|
children: [
|
|
1136
1108
|
e === "good" && "✓ ",
|
|
@@ -1139,33 +1111,33 @@ function nt({ assessment: e, reason: t }) {
|
|
|
1139
1111
|
r[e]
|
|
1140
1112
|
]
|
|
1141
1113
|
})
|
|
1142
|
-
}), /* @__PURE__ */
|
|
1114
|
+
}), /* @__PURE__ */ H("p", {
|
|
1143
1115
|
className: "dc:text-sm",
|
|
1144
|
-
children:
|
|
1116
|
+
children: Y(t)
|
|
1145
1117
|
})]
|
|
1146
1118
|
});
|
|
1147
1119
|
}
|
|
1148
|
-
function
|
|
1149
|
-
return /* @__PURE__ */
|
|
1120
|
+
function $e({ issue: e }) {
|
|
1121
|
+
return /* @__PURE__ */ U("div", {
|
|
1150
1122
|
className: "dc:flex dc:items-start dc:gap-2 dc:py-2",
|
|
1151
|
-
children: [/* @__PURE__ */
|
|
1152
|
-
className: `dc:text-sm ${
|
|
1123
|
+
children: [/* @__PURE__ */ U("span", {
|
|
1124
|
+
className: `dc:text-sm ${Ze[e.severity]}`,
|
|
1153
1125
|
children: [
|
|
1154
1126
|
e.severity === "high" && "●",
|
|
1155
1127
|
e.severity === "medium" && "○",
|
|
1156
1128
|
e.severity === "low" && "○"
|
|
1157
1129
|
]
|
|
1158
|
-
}), /* @__PURE__ */
|
|
1130
|
+
}), /* @__PURE__ */ H("span", {
|
|
1159
1131
|
className: "dc:text-sm text-dc-text-secondary",
|
|
1160
|
-
children:
|
|
1132
|
+
children: Y(e.description)
|
|
1161
1133
|
})]
|
|
1162
1134
|
});
|
|
1163
1135
|
}
|
|
1164
|
-
function
|
|
1165
|
-
let { t } =
|
|
1166
|
-
return
|
|
1136
|
+
function et({ text: e }) {
|
|
1137
|
+
let { t } = D(), [n, r] = N.useState(!1), i = N.useRef(null);
|
|
1138
|
+
return N.useEffect(() => () => {
|
|
1167
1139
|
i.current && clearTimeout(i.current);
|
|
1168
|
-
}, []), /* @__PURE__ */
|
|
1140
|
+
}, []), /* @__PURE__ */ H("button", {
|
|
1169
1141
|
onClick: async () => {
|
|
1170
1142
|
try {
|
|
1171
1143
|
await navigator.clipboard.writeText(e), r(!0), i.current && clearTimeout(i.current), i.current = setTimeout(() => r(!1), 2e3);
|
|
@@ -1178,104 +1150,104 @@ function it({ text: e }) {
|
|
|
1178
1150
|
children: t(n ? "explainAI.copied" : "explainAI.copy")
|
|
1179
1151
|
});
|
|
1180
1152
|
}
|
|
1181
|
-
function
|
|
1182
|
-
let { t } =
|
|
1153
|
+
function tt({ rec: e }) {
|
|
1154
|
+
let { t } = D(), n = {
|
|
1183
1155
|
index: t("explainAI.type.index"),
|
|
1184
1156
|
table: t("explainAI.type.table"),
|
|
1185
1157
|
cube: t("explainAI.type.cube"),
|
|
1186
1158
|
general: t("explainAI.type.general")
|
|
1187
1159
|
};
|
|
1188
|
-
return /* @__PURE__ */
|
|
1160
|
+
return /* @__PURE__ */ U("div", {
|
|
1189
1161
|
className: "dc:p-4 dc:border border-dc-border dc:rounded-lg bg-dc-surface",
|
|
1190
1162
|
children: [
|
|
1191
|
-
/* @__PURE__ */
|
|
1163
|
+
/* @__PURE__ */ U("div", {
|
|
1192
1164
|
className: "dc:flex dc:items-center dc:gap-2 dc:mb-2",
|
|
1193
|
-
children: [/* @__PURE__ */
|
|
1194
|
-
className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-medium dc:rounded ${
|
|
1165
|
+
children: [/* @__PURE__ */ H("span", {
|
|
1166
|
+
className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-medium dc:rounded ${Xe[e.severity]}`,
|
|
1195
1167
|
children: n[e.type]
|
|
1196
|
-
}), /* @__PURE__ */
|
|
1168
|
+
}), /* @__PURE__ */ H("h5", {
|
|
1197
1169
|
className: "dc:font-medium text-dc-text",
|
|
1198
|
-
children:
|
|
1170
|
+
children: Y(e.title)
|
|
1199
1171
|
})]
|
|
1200
1172
|
}),
|
|
1201
|
-
/* @__PURE__ */
|
|
1173
|
+
/* @__PURE__ */ H("p", {
|
|
1202
1174
|
className: "dc:text-sm text-dc-text-secondary dc:mb-3",
|
|
1203
|
-
children:
|
|
1175
|
+
children: Y(e.description)
|
|
1204
1176
|
}),
|
|
1205
|
-
e.sql && /* @__PURE__ */
|
|
1177
|
+
e.sql && /* @__PURE__ */ H("div", {
|
|
1206
1178
|
className: "dc:mt-2",
|
|
1207
|
-
children: /* @__PURE__ */
|
|
1179
|
+
children: /* @__PURE__ */ H(u, {
|
|
1208
1180
|
code: e.sql,
|
|
1209
1181
|
language: "sql",
|
|
1210
|
-
headerRight: /* @__PURE__ */
|
|
1182
|
+
headerRight: /* @__PURE__ */ H(et, { text: e.sql })
|
|
1211
1183
|
})
|
|
1212
1184
|
}),
|
|
1213
|
-
e.cubeCode && /* @__PURE__ */
|
|
1185
|
+
e.cubeCode && /* @__PURE__ */ U("div", {
|
|
1214
1186
|
className: "dc:mt-2",
|
|
1215
|
-
children: [e.cubeName && /* @__PURE__ */
|
|
1187
|
+
children: [e.cubeName && /* @__PURE__ */ H("p", {
|
|
1216
1188
|
className: "dc:text-xs text-dc-text-muted dc:mb-1",
|
|
1217
1189
|
children: t("explainAI.addToCube", { cubeName: e.cubeName })
|
|
1218
|
-
}), /* @__PURE__ */
|
|
1190
|
+
}), /* @__PURE__ */ U("div", {
|
|
1219
1191
|
className: "dc:relative",
|
|
1220
|
-
children: [/* @__PURE__ */
|
|
1192
|
+
children: [/* @__PURE__ */ H("pre", {
|
|
1221
1193
|
className: "dc:p-3 dc:text-xs bg-dc-surface-secondary dc:rounded dc:overflow-x-auto dc:font-mono text-dc-text",
|
|
1222
1194
|
children: e.cubeCode
|
|
1223
|
-
}), /* @__PURE__ */
|
|
1195
|
+
}), /* @__PURE__ */ H("div", {
|
|
1224
1196
|
className: "dc:absolute dc:top-1 dc:right-1",
|
|
1225
|
-
children: /* @__PURE__ */
|
|
1197
|
+
children: /* @__PURE__ */ H(et, { text: e.cubeCode })
|
|
1226
1198
|
})]
|
|
1227
1199
|
})]
|
|
1228
1200
|
}),
|
|
1229
|
-
e.estimatedImpact && /* @__PURE__ */
|
|
1201
|
+
e.estimatedImpact && /* @__PURE__ */ U("p", {
|
|
1230
1202
|
className: "dc:text-xs text-dc-text-muted dc:mt-2",
|
|
1231
1203
|
children: [
|
|
1232
|
-
/* @__PURE__ */
|
|
1204
|
+
/* @__PURE__ */ H("strong", { children: t("explainAI.expectedImpact") }),
|
|
1233
1205
|
" ",
|
|
1234
|
-
|
|
1206
|
+
Y(e.estimatedImpact)
|
|
1235
1207
|
]
|
|
1236
1208
|
})
|
|
1237
1209
|
]
|
|
1238
1210
|
});
|
|
1239
1211
|
}
|
|
1240
|
-
function
|
|
1241
|
-
let { t: r } =
|
|
1242
|
-
return
|
|
1212
|
+
function nt({ analysis: e, onClose: t, onClear: n }) {
|
|
1213
|
+
let { t: r } = D(), i = t || n;
|
|
1214
|
+
return N.useEffect(() => {
|
|
1243
1215
|
let e = (e) => {
|
|
1244
1216
|
e.key === "Escape" && i && i();
|
|
1245
1217
|
};
|
|
1246
1218
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
1247
|
-
}, [i]),
|
|
1219
|
+
}, [i]), N.useEffect(() => (document.body.style.overflow = "hidden", () => {
|
|
1248
1220
|
document.body.style.overflow = "";
|
|
1249
|
-
}), []), /* @__PURE__ */
|
|
1221
|
+
}), []), /* @__PURE__ */ U("div", {
|
|
1250
1222
|
className: "dc:fixed dc:inset-0 dc:z-50 dc:flex dc:items-center dc:justify-center dc:p-4 bg-black/50",
|
|
1251
|
-
children: [/* @__PURE__ */
|
|
1223
|
+
children: [/* @__PURE__ */ H("div", {
|
|
1252
1224
|
className: "dc:absolute dc:inset-0",
|
|
1253
1225
|
onClick: i,
|
|
1254
1226
|
"aria-hidden": "true"
|
|
1255
|
-
}), /* @__PURE__ */
|
|
1227
|
+
}), /* @__PURE__ */ U("div", {
|
|
1256
1228
|
className: "dc:relative dc:w-full dc:max-w-4xl dc:max-h-[90vh] bg-dc-surface dc:rounded-lg dc:shadow-xl dc:flex dc:flex-col",
|
|
1257
1229
|
children: [
|
|
1258
|
-
/* @__PURE__ */
|
|
1230
|
+
/* @__PURE__ */ U("div", {
|
|
1259
1231
|
className: "dc:flex dc:items-center dc:justify-between dc:px-6 dc:py-4 dc:border-b border-dc-border dc:flex-shrink-0",
|
|
1260
|
-
children: [/* @__PURE__ */
|
|
1232
|
+
children: [/* @__PURE__ */ U("div", {
|
|
1261
1233
|
className: "dc:flex dc:items-center dc:gap-3",
|
|
1262
|
-
children: [/* @__PURE__ */
|
|
1234
|
+
children: [/* @__PURE__ */ H("span", {
|
|
1263
1235
|
className: "dc:text-lg",
|
|
1264
1236
|
children: "✨"
|
|
1265
|
-
}), /* @__PURE__ */
|
|
1237
|
+
}), /* @__PURE__ */ H("h3", {
|
|
1266
1238
|
className: "dc:text-lg dc:font-semibold text-dc-text",
|
|
1267
1239
|
children: r("explainAI.title")
|
|
1268
1240
|
})]
|
|
1269
|
-
}), /* @__PURE__ */
|
|
1241
|
+
}), /* @__PURE__ */ H("button", {
|
|
1270
1242
|
onClick: i,
|
|
1271
1243
|
className: "dc:p-2 dc:rounded-lg hover:bg-dc-surface-hover text-dc-text-secondary hover:text-dc-text dc:transition-colors",
|
|
1272
1244
|
"aria-label": "Close",
|
|
1273
|
-
children: /* @__PURE__ */
|
|
1245
|
+
children: /* @__PURE__ */ H("svg", {
|
|
1274
1246
|
className: "dc:w-5 dc:h-5",
|
|
1275
1247
|
fill: "none",
|
|
1276
1248
|
stroke: "currentColor",
|
|
1277
1249
|
viewBox: "0 0 24 24",
|
|
1278
|
-
children: /* @__PURE__ */
|
|
1250
|
+
children: /* @__PURE__ */ H("path", {
|
|
1279
1251
|
strokeLinecap: "round",
|
|
1280
1252
|
strokeLinejoin: "round",
|
|
1281
1253
|
strokeWidth: 2,
|
|
@@ -1284,50 +1256,50 @@ function ot({ analysis: e, onClose: t, onClear: n }) {
|
|
|
1284
1256
|
})
|
|
1285
1257
|
})]
|
|
1286
1258
|
}),
|
|
1287
|
-
/* @__PURE__ */
|
|
1259
|
+
/* @__PURE__ */ U("div", {
|
|
1288
1260
|
className: "dc:flex-1 dc:overflow-y-auto dc:px-6 dc:py-4 dc:space-y-6",
|
|
1289
1261
|
children: [
|
|
1290
|
-
/* @__PURE__ */
|
|
1262
|
+
/* @__PURE__ */ H(Qe, {
|
|
1291
1263
|
assessment: e.assessment,
|
|
1292
1264
|
reason: e.assessmentReason
|
|
1293
1265
|
}),
|
|
1294
|
-
/* @__PURE__ */
|
|
1266
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h4", {
|
|
1295
1267
|
className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
|
|
1296
1268
|
children: r("explainAI.summary")
|
|
1297
|
-
}), /* @__PURE__ */
|
|
1269
|
+
}), /* @__PURE__ */ H("p", {
|
|
1298
1270
|
className: "text-dc-text",
|
|
1299
|
-
children:
|
|
1271
|
+
children: Y(e.summary)
|
|
1300
1272
|
})] }),
|
|
1301
|
-
e.queryUnderstanding && /* @__PURE__ */
|
|
1273
|
+
e.queryUnderstanding && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h4", {
|
|
1302
1274
|
className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
|
|
1303
1275
|
children: r("explainAI.queryAnalysis")
|
|
1304
|
-
}), /* @__PURE__ */
|
|
1276
|
+
}), /* @__PURE__ */ H("p", {
|
|
1305
1277
|
className: "text-dc-text-secondary",
|
|
1306
|
-
children:
|
|
1278
|
+
children: Y(e.queryUnderstanding)
|
|
1307
1279
|
})] }),
|
|
1308
|
-
e.issues && e.issues.length > 0 && /* @__PURE__ */
|
|
1280
|
+
e.issues && e.issues.length > 0 && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h4", {
|
|
1309
1281
|
className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
|
|
1310
1282
|
children: r("explainAI.issuesFound", { count: e.issues.length })
|
|
1311
|
-
}), /* @__PURE__ */
|
|
1283
|
+
}), /* @__PURE__ */ H("div", {
|
|
1312
1284
|
className: "dc:space-y-1 bg-dc-surface-secondary dc:rounded-lg dc:p-3",
|
|
1313
|
-
children: e.issues.map((e, t) => /* @__PURE__ */
|
|
1285
|
+
children: e.issues.map((e, t) => /* @__PURE__ */ H($e, { issue: e }, t))
|
|
1314
1286
|
})] }),
|
|
1315
|
-
e.recommendations && e.recommendations.length > 0 && /* @__PURE__ */
|
|
1287
|
+
e.recommendations && e.recommendations.length > 0 && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h4", {
|
|
1316
1288
|
className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-3",
|
|
1317
1289
|
children: r("explainAI.recommendations", { count: e.recommendations.length })
|
|
1318
|
-
}), /* @__PURE__ */
|
|
1290
|
+
}), /* @__PURE__ */ H("div", {
|
|
1319
1291
|
className: "dc:space-y-4",
|
|
1320
|
-
children: e.recommendations.map((e, t) => /* @__PURE__ */
|
|
1292
|
+
children: e.recommendations.map((e, t) => /* @__PURE__ */ H(tt, { rec: e }, t))
|
|
1321
1293
|
})] }),
|
|
1322
|
-
(!e.recommendations || e.recommendations.length === 0) && /* @__PURE__ */
|
|
1294
|
+
(!e.recommendations || e.recommendations.length === 0) && /* @__PURE__ */ H("div", {
|
|
1323
1295
|
className: "text-dc-text-muted dc:italic dc:p-4 bg-dc-surface-secondary dc:rounded-lg",
|
|
1324
1296
|
children: r("explainAI.noRecommendations")
|
|
1325
1297
|
})
|
|
1326
1298
|
]
|
|
1327
1299
|
}),
|
|
1328
|
-
/* @__PURE__ */
|
|
1300
|
+
/* @__PURE__ */ U("div", {
|
|
1329
1301
|
className: "dc:flex dc:items-center dc:justify-between dc:px-6 dc:py-3 dc:border-t border-dc-border dc:flex-shrink-0 bg-dc-surface-secondary",
|
|
1330
|
-
children: [e._meta && /* @__PURE__ */
|
|
1302
|
+
children: [e._meta && /* @__PURE__ */ U("div", {
|
|
1331
1303
|
className: "dc:text-xs text-dc-text-muted",
|
|
1332
1304
|
children: [
|
|
1333
1305
|
r("explainAI.modelLabel"),
|
|
@@ -1335,7 +1307,7 @@ function ot({ analysis: e, onClose: t, onClear: n }) {
|
|
|
1335
1307
|
e._meta.model,
|
|
1336
1308
|
e._meta.usingUserKey && ` ${r("explainAI.usingUserKey")}`
|
|
1337
1309
|
]
|
|
1338
|
-
}), /* @__PURE__ */
|
|
1310
|
+
}), /* @__PURE__ */ H("button", {
|
|
1339
1311
|
onClick: i,
|
|
1340
1312
|
className: "dc:px-4 dc:py-2 dc:text-sm dc:font-medium dc:rounded-lg bg-dc-primary text-white hover:bg-dc-primary-hover dc:transition-colors",
|
|
1341
1313
|
children: r("common.actions.close")
|
|
@@ -1346,142 +1318,332 @@ function ot({ analysis: e, onClose: t, onClear: n }) {
|
|
|
1346
1318
|
});
|
|
1347
1319
|
}
|
|
1348
1320
|
//#endregion
|
|
1321
|
+
//#region src/client/shared/chartConfigBuilders.ts
|
|
1322
|
+
var rt = (e) => e.map((e) => e.field), it = (e) => e.length > 0 ? [e[0].field] : [];
|
|
1323
|
+
function at(e) {
|
|
1324
|
+
let { metrics: t, timeDimension: n, dimension: r, dimensions: i } = e;
|
|
1325
|
+
return {
|
|
1326
|
+
xAxis: n ? [n.field] : r ? [r.field] : [],
|
|
1327
|
+
yAxis: rt(t),
|
|
1328
|
+
series: i.length > 1 ? [i[1].field] : r && n ? [r.field] : []
|
|
1329
|
+
};
|
|
1330
|
+
}
|
|
1331
|
+
function ot(e) {
|
|
1332
|
+
let { metrics: t, timeDimension: n, dimension: r, dimensions: i } = e;
|
|
1333
|
+
return {
|
|
1334
|
+
xAxis: r ? [r.field] : n ? [n.field] : [],
|
|
1335
|
+
yAxis: rt(t),
|
|
1336
|
+
series: i.length > 1 ? [i[1].field] : n && r ? [n.field] : []
|
|
1337
|
+
};
|
|
1338
|
+
}
|
|
1339
|
+
function st(e) {
|
|
1340
|
+
let { metrics: t, dimension: n } = e;
|
|
1341
|
+
return {
|
|
1342
|
+
xAxis: n ? [n.field] : [],
|
|
1343
|
+
yAxis: it(t)
|
|
1344
|
+
};
|
|
1345
|
+
}
|
|
1346
|
+
function ct(e) {
|
|
1347
|
+
let { metrics: t, breakdowns: n, dimension: r, dimensions: i } = e;
|
|
1348
|
+
return t.length >= 2 ? {
|
|
1349
|
+
xAxis: [t[0].field],
|
|
1350
|
+
yAxis: [t[1].field],
|
|
1351
|
+
series: r ? [r.field] : []
|
|
1352
|
+
} : {
|
|
1353
|
+
xAxis: n.length > 0 ? [n[0].field] : [],
|
|
1354
|
+
yAxis: it(t),
|
|
1355
|
+
series: i.length > 1 ? [i[1].field] : []
|
|
1356
|
+
};
|
|
1357
|
+
}
|
|
1358
|
+
function lt(e) {
|
|
1359
|
+
let { metrics: t, timeDimension: n, dimension: r } = e;
|
|
1360
|
+
return {
|
|
1361
|
+
xAxis: t.length > 0 ? [t[0].field] : [],
|
|
1362
|
+
yAxis: t.length > 1 ? [t[1].field] : [],
|
|
1363
|
+
sizeField: t.length > 2 ? t[2].field : t.length > 1 ? t[1].field : void 0,
|
|
1364
|
+
series: r ? [r.field] : n ? [n.field] : []
|
|
1365
|
+
};
|
|
1366
|
+
}
|
|
1367
|
+
function ut(e) {
|
|
1368
|
+
let { metrics: t, dimension: n } = e;
|
|
1369
|
+
return {
|
|
1370
|
+
xAxis: n ? [n.field] : [],
|
|
1371
|
+
yAxis: it(t)
|
|
1372
|
+
};
|
|
1373
|
+
}
|
|
1374
|
+
function dt(e) {
|
|
1375
|
+
let { metrics: t, timeDimension: n } = e;
|
|
1376
|
+
return {
|
|
1377
|
+
dateField: n ? [n.field] : [],
|
|
1378
|
+
valueField: it(t)
|
|
1379
|
+
};
|
|
1380
|
+
}
|
|
1381
|
+
function ft(e) {
|
|
1382
|
+
return { yAxis: it(e.metrics) };
|
|
1383
|
+
}
|
|
1384
|
+
function pt(e) {
|
|
1385
|
+
let { metrics: t, breakdowns: n } = e;
|
|
1386
|
+
return { xAxis: [...n.map((e) => e.field), ...t.map((e) => e.field)] };
|
|
1387
|
+
}
|
|
1388
|
+
function mt() {
|
|
1389
|
+
return {};
|
|
1390
|
+
}
|
|
1391
|
+
function ht(e) {
|
|
1392
|
+
let { metrics: t, breakdowns: n } = e;
|
|
1393
|
+
return {
|
|
1394
|
+
xAxis: n.length > 0 ? [n[0].field] : [],
|
|
1395
|
+
yAxis: rt(t)
|
|
1396
|
+
};
|
|
1397
|
+
}
|
|
1398
|
+
var gt = {
|
|
1399
|
+
line: at,
|
|
1400
|
+
area: at,
|
|
1401
|
+
bar: ot,
|
|
1402
|
+
pie: st,
|
|
1403
|
+
scatter: ct,
|
|
1404
|
+
bubble: lt,
|
|
1405
|
+
radar: ut,
|
|
1406
|
+
radialBar: ut,
|
|
1407
|
+
treemap: ut,
|
|
1408
|
+
activityGrid: dt,
|
|
1409
|
+
kpiNumber: ft,
|
|
1410
|
+
kpiDelta: ft,
|
|
1411
|
+
kpiText: ft,
|
|
1412
|
+
table: pt,
|
|
1413
|
+
markdown: mt
|
|
1414
|
+
};
|
|
1415
|
+
function _t(e) {
|
|
1416
|
+
return gt[e] || ht;
|
|
1417
|
+
}
|
|
1418
|
+
//#endregion
|
|
1419
|
+
//#region src/client/shared/chartDefaults.ts
|
|
1420
|
+
function vt(e) {
|
|
1421
|
+
return e.isTimeDimension;
|
|
1422
|
+
}
|
|
1423
|
+
function yt(e) {
|
|
1424
|
+
return e.find(vt);
|
|
1425
|
+
}
|
|
1426
|
+
function bt(e) {
|
|
1427
|
+
return e.find((e) => !e.isTimeDimension);
|
|
1428
|
+
}
|
|
1429
|
+
function xt(e) {
|
|
1430
|
+
return e.filter((e) => !e.isTimeDimension);
|
|
1431
|
+
}
|
|
1432
|
+
function St(e) {
|
|
1433
|
+
return e.filter(vt);
|
|
1434
|
+
}
|
|
1435
|
+
function Ct(e, t) {
|
|
1436
|
+
return {
|
|
1437
|
+
measureCount: e.length,
|
|
1438
|
+
dimensionCount: t.length,
|
|
1439
|
+
timeDimensionCount: St(t).length
|
|
1440
|
+
};
|
|
1441
|
+
}
|
|
1442
|
+
function wt(e, t, n) {
|
|
1443
|
+
let r = c[e];
|
|
1444
|
+
return !r || !r.isAvailable ? { available: !0 } : r.isAvailable(Ct(t, n));
|
|
1445
|
+
}
|
|
1446
|
+
function Tt(e, t) {
|
|
1447
|
+
let n = Object.keys(c), r = {};
|
|
1448
|
+
for (let i of n) r[i] = wt(i, e, t);
|
|
1449
|
+
return r;
|
|
1450
|
+
}
|
|
1451
|
+
function Et(e, t, n) {
|
|
1452
|
+
if (wt(n, e, t).available || e.length === 0 && t.length === 0) return n;
|
|
1453
|
+
let r = St(t).length > 0, i = xt(t).length > 0, a = e.length > 0;
|
|
1454
|
+
return r && a ? "line" : i && a ? "bar" : a && !i && !r ? "kpiNumber" : "table";
|
|
1455
|
+
}
|
|
1456
|
+
function Dt(e, t, n) {
|
|
1457
|
+
let r = Et(e, t, n);
|
|
1458
|
+
return {
|
|
1459
|
+
chartType: r,
|
|
1460
|
+
chartConfig: Ot(r, e, t)
|
|
1461
|
+
};
|
|
1462
|
+
}
|
|
1463
|
+
function Ot(e, t, n) {
|
|
1464
|
+
return _t(e)({
|
|
1465
|
+
metrics: t,
|
|
1466
|
+
breakdowns: n,
|
|
1467
|
+
timeDimension: yt(n),
|
|
1468
|
+
dimension: bt(n),
|
|
1469
|
+
dimensions: xt(n)
|
|
1470
|
+
});
|
|
1471
|
+
}
|
|
1472
|
+
function kt(e, t, n, r) {
|
|
1473
|
+
if (r && wt(n, e, t).available) return null;
|
|
1474
|
+
let i = Et(e, t, n);
|
|
1475
|
+
return i === n ? null : i;
|
|
1476
|
+
}
|
|
1477
|
+
//#endregion
|
|
1478
|
+
//#region src/client/components/AnalysisBuilder/ExecutionPlanPanelParts.tsx
|
|
1479
|
+
function At({ title: e, height: t, className: n, children: r }) {
|
|
1480
|
+
return /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H("h4", {
|
|
1481
|
+
className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2",
|
|
1482
|
+
children: e
|
|
1483
|
+
}), /* @__PURE__ */ H("div", {
|
|
1484
|
+
className: n,
|
|
1485
|
+
style: { height: t },
|
|
1486
|
+
children: r
|
|
1487
|
+
})] });
|
|
1488
|
+
}
|
|
1489
|
+
function jt({ sql: e, sqlLoading: t, sqlError: n, sqlPlaceholder: r, formattedSql: i, title: a, height: o, headerRight: s }) {
|
|
1490
|
+
let { t: c } = D();
|
|
1491
|
+
return t ? /* @__PURE__ */ H(At, {
|
|
1492
|
+
title: a,
|
|
1493
|
+
height: o,
|
|
1494
|
+
className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm dc:animate-pulse",
|
|
1495
|
+
children: c("results.debug.loadingSql")
|
|
1496
|
+
}) : n ? /* @__PURE__ */ H(At, {
|
|
1497
|
+
title: a,
|
|
1498
|
+
height: o,
|
|
1499
|
+
className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
|
|
1500
|
+
children: n.message
|
|
1501
|
+
}) : e ? /* @__PURE__ */ H(u, {
|
|
1502
|
+
code: i,
|
|
1503
|
+
language: "sql",
|
|
1504
|
+
title: a,
|
|
1505
|
+
height: o,
|
|
1506
|
+
headerRight: s
|
|
1507
|
+
}) : /* @__PURE__ */ H(At, {
|
|
1508
|
+
title: a,
|
|
1509
|
+
height: o,
|
|
1510
|
+
className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm",
|
|
1511
|
+
children: r
|
|
1512
|
+
});
|
|
1513
|
+
}
|
|
1514
|
+
function Mt({ summary: e }) {
|
|
1515
|
+
let { t } = D();
|
|
1516
|
+
return /* @__PURE__ */ U("div", {
|
|
1517
|
+
className: "dc:flex dc:flex-wrap dc:items-center dc:gap-2",
|
|
1518
|
+
children: [
|
|
1519
|
+
/* @__PURE__ */ H("span", {
|
|
1520
|
+
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-accent text-white dc:rounded",
|
|
1521
|
+
children: e.database.toUpperCase()
|
|
1522
|
+
}),
|
|
1523
|
+
e.hasSequentialScans && /* @__PURE__ */ H("span", {
|
|
1524
|
+
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-warning-bg text-dc-warning dc:border border-dc-warning dc:rounded",
|
|
1525
|
+
children: t("debug.sequentialScans")
|
|
1526
|
+
}),
|
|
1527
|
+
e.usedIndexes.length > 0 && /* @__PURE__ */ H("span", {
|
|
1528
|
+
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-success-bg text-dc-success dc:border border-dc-success dc:rounded",
|
|
1529
|
+
children: t(e.usedIndexes.length === 1 ? "debug.indexesUsed" : "debug.indexesUsedPlural", { count: e.usedIndexes.length })
|
|
1530
|
+
}),
|
|
1531
|
+
e.executionTime !== void 0 && /* @__PURE__ */ H("span", {
|
|
1532
|
+
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
|
|
1533
|
+
children: t("debug.executionTime", { time: e.executionTime.toFixed(2) })
|
|
1534
|
+
}),
|
|
1535
|
+
e.planningTime !== void 0 && /* @__PURE__ */ H("span", {
|
|
1536
|
+
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
|
|
1537
|
+
children: t("debug.planningTime", { time: e.planningTime.toFixed(2) })
|
|
1538
|
+
}),
|
|
1539
|
+
e.totalCost !== void 0 && /* @__PURE__ */ H("span", {
|
|
1540
|
+
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
|
|
1541
|
+
children: t("debug.cost", { cost: e.totalCost.toFixed(2) })
|
|
1542
|
+
})
|
|
1543
|
+
]
|
|
1544
|
+
});
|
|
1545
|
+
}
|
|
1546
|
+
function Nt({ explainLoading: e, explainError: t, explainResult: n, useAnalyze: r, aiButton: i }) {
|
|
1547
|
+
let { t: a } = D();
|
|
1548
|
+
return e ? /* @__PURE__ */ H("div", {
|
|
1549
|
+
className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm dc:animate-pulse",
|
|
1550
|
+
children: a(r ? "debug.explainRunningAnalyze" : "debug.explainRunningBasic")
|
|
1551
|
+
}) : t ? /* @__PURE__ */ U("div", {
|
|
1552
|
+
className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
|
|
1553
|
+
children: [
|
|
1554
|
+
/* @__PURE__ */ H("strong", { children: a("debug.explainError") }),
|
|
1555
|
+
" ",
|
|
1556
|
+
t.message
|
|
1557
|
+
]
|
|
1558
|
+
}) : n ? /* @__PURE__ */ U("div", {
|
|
1559
|
+
className: "dc:space-y-3",
|
|
1560
|
+
children: [
|
|
1561
|
+
/* @__PURE__ */ H(Mt, { summary: n.summary }),
|
|
1562
|
+
n.summary.usedIndexes.length > 0 && /* @__PURE__ */ U("div", {
|
|
1563
|
+
className: "dc:text-xs text-dc-text-muted",
|
|
1564
|
+
children: [
|
|
1565
|
+
/* @__PURE__ */ H("strong", { children: a("debug.indexes") }),
|
|
1566
|
+
" ",
|
|
1567
|
+
n.summary.usedIndexes.join(", ")
|
|
1568
|
+
]
|
|
1569
|
+
}),
|
|
1570
|
+
/* @__PURE__ */ H(u, {
|
|
1571
|
+
code: n.raw,
|
|
1572
|
+
language: "sql",
|
|
1573
|
+
title: a("debug.executionPlanTitle", { database: n.summary.database }),
|
|
1574
|
+
height: "16rem",
|
|
1575
|
+
headerRight: i
|
|
1576
|
+
})
|
|
1577
|
+
]
|
|
1578
|
+
}) : null;
|
|
1579
|
+
}
|
|
1580
|
+
//#endregion
|
|
1349
1581
|
//#region src/client/components/AnalysisBuilder/ExecutionPlanPanel.tsx
|
|
1350
|
-
var
|
|
1351
|
-
let { t: v } =
|
|
1582
|
+
var Pt = F(function({ sql: e, sqlLoading: t = !1, sqlError: n, sqlPlaceholder: r = "Add metrics to generate SQL", explainResult: i, explainLoading: a = !1, explainHasRun: o = !1, explainError: s, runExplain: c, aiAnalysis: l, aiAnalysisLoading: u = !1, aiAnalysisError: d, runAIAnalysis: f, clearAIAnalysis: p, enableAI: m = !1, query: h, title: g = "Generated SQL", height: _ = "16rem" }) {
|
|
1583
|
+
let { t: v } = D(), [y, b] = B(!1), [x, S] = B(!1), C = e ? e.sql + (e.params && e.params.length > 0 ? "\n\n-- Parameters:\n" + JSON.stringify(e.params, null, 2) : "") : "", w = () => {
|
|
1352
1584
|
f && i && h && (f(i, h), S(!0));
|
|
1353
|
-
},
|
|
1585
|
+
}, T = () => {
|
|
1354
1586
|
S(!1);
|
|
1355
|
-
},
|
|
1356
|
-
onClick:
|
|
1587
|
+
}, E = m && i ? /* @__PURE__ */ H("button", {
|
|
1588
|
+
onClick: w,
|
|
1357
1589
|
disabled: u,
|
|
1358
1590
|
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium dc:rounded bg-dc-accent text-white hover:bg-dc-accent-hover dc:disabled:opacity-50 dc:disabled:cursor-not-allowed dc:flex dc:items-center dc:gap-1",
|
|
1359
|
-
children: u ? /* @__PURE__ */
|
|
1591
|
+
children: u ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H("span", {
|
|
1360
1592
|
className: "dc:animate-spin",
|
|
1361
1593
|
children: "⟳"
|
|
1362
|
-
}), v("debug.aiAnalyzing")] }) : /* @__PURE__ */
|
|
1594
|
+
}), v("debug.aiAnalyzing")] }) : /* @__PURE__ */ H(V, { children: `✨ ${v("debug.aiAnalysis")}` })
|
|
1363
1595
|
}) : null;
|
|
1364
|
-
return /* @__PURE__ */
|
|
1596
|
+
return /* @__PURE__ */ U("div", {
|
|
1365
1597
|
className: "dc:space-y-3",
|
|
1366
1598
|
children: [
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
children: v("results.debug.loadingSql")
|
|
1374
|
-
})] }) : n ? /* @__PURE__ */ G(U, { children: [/* @__PURE__ */ W("h4", {
|
|
1375
|
-
className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2",
|
|
1376
|
-
children: g
|
|
1377
|
-
}), /* @__PURE__ */ W("div", {
|
|
1378
|
-
className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
|
|
1379
|
-
style: { height: _ },
|
|
1380
|
-
children: n.message
|
|
1381
|
-
})] }) : e ? /* @__PURE__ */ W(j, {
|
|
1382
|
-
code: C,
|
|
1383
|
-
language: "sql",
|
|
1599
|
+
/* @__PURE__ */ H(jt, {
|
|
1600
|
+
sql: e,
|
|
1601
|
+
sqlLoading: t,
|
|
1602
|
+
sqlError: n,
|
|
1603
|
+
sqlPlaceholder: r,
|
|
1604
|
+
formattedSql: C,
|
|
1384
1605
|
title: g,
|
|
1385
1606
|
height: _,
|
|
1386
|
-
headerRight: /* @__PURE__ */
|
|
1607
|
+
headerRight: /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ U("label", {
|
|
1387
1608
|
className: "dc:flex dc:items-center dc:gap-1 dc:text-xs text-dc-text-secondary dc:cursor-pointer",
|
|
1388
|
-
children: [/* @__PURE__ */
|
|
1609
|
+
children: [/* @__PURE__ */ H("input", {
|
|
1389
1610
|
type: "checkbox",
|
|
1390
1611
|
checked: y,
|
|
1391
1612
|
onChange: (e) => b(e.target.checked),
|
|
1392
1613
|
className: "dc:w-3 dc:h-3 dc:rounded border-dc-border text-dc-accent focus:ring-dc-accent"
|
|
1393
1614
|
}), v("debug.explainIncludeTiming")]
|
|
1394
|
-
}), /* @__PURE__ */
|
|
1615
|
+
}), /* @__PURE__ */ H("button", {
|
|
1395
1616
|
onClick: () => c({ analyze: y }),
|
|
1396
1617
|
disabled: a,
|
|
1397
1618
|
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium dc:rounded dc:border border-dc-border bg-dc-surface hover:bg-dc-surface-hover text-dc-text-secondary hover:text-dc-text dc:transition-colors dc:disabled:opacity-50 dc:disabled:cursor-not-allowed",
|
|
1398
1619
|
children: v(a ? "debug.explainRunning" : "debug.explainPlan")
|
|
1399
1620
|
})] })
|
|
1400
|
-
})
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
})
|
|
1408
|
-
|
|
1409
|
-
className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm dc:animate-pulse",
|
|
1410
|
-
children: v(y ? "debug.explainRunningAnalyze" : "debug.explainRunningBasic")
|
|
1411
|
-
}) : s ? /* @__PURE__ */ G("div", {
|
|
1412
|
-
className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
|
|
1413
|
-
children: [
|
|
1414
|
-
/* @__PURE__ */ W("strong", { children: v("debug.explainError") }),
|
|
1415
|
-
" ",
|
|
1416
|
-
s.message
|
|
1417
|
-
]
|
|
1418
|
-
}) : i ? /* @__PURE__ */ G("div", {
|
|
1419
|
-
className: "dc:space-y-3",
|
|
1420
|
-
children: [
|
|
1421
|
-
/* @__PURE__ */ G("div", {
|
|
1422
|
-
className: "dc:flex dc:flex-wrap dc:items-center dc:gap-2",
|
|
1423
|
-
children: [
|
|
1424
|
-
/* @__PURE__ */ W("span", {
|
|
1425
|
-
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-accent text-white dc:rounded",
|
|
1426
|
-
children: i.summary.database.toUpperCase()
|
|
1427
|
-
}),
|
|
1428
|
-
i.summary.hasSequentialScans && /* @__PURE__ */ W("span", {
|
|
1429
|
-
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-warning-bg text-dc-warning dc:border border-dc-warning dc:rounded",
|
|
1430
|
-
children: v("debug.sequentialScans")
|
|
1431
|
-
}),
|
|
1432
|
-
i.summary.usedIndexes.length > 0 && /* @__PURE__ */ W("span", {
|
|
1433
|
-
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-success-bg text-dc-success dc:border border-dc-success dc:rounded",
|
|
1434
|
-
children: v(i.summary.usedIndexes.length === 1 ? "debug.indexesUsed" : "debug.indexesUsedPlural", { count: i.summary.usedIndexes.length })
|
|
1435
|
-
}),
|
|
1436
|
-
i.summary.executionTime !== void 0 && /* @__PURE__ */ W("span", {
|
|
1437
|
-
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
|
|
1438
|
-
children: v("debug.executionTime", { time: i.summary.executionTime.toFixed(2) })
|
|
1439
|
-
}),
|
|
1440
|
-
i.summary.planningTime !== void 0 && /* @__PURE__ */ W("span", {
|
|
1441
|
-
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
|
|
1442
|
-
children: v("debug.planningTime", { time: i.summary.planningTime.toFixed(2) })
|
|
1443
|
-
}),
|
|
1444
|
-
i.summary.totalCost !== void 0 && /* @__PURE__ */ W("span", {
|
|
1445
|
-
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
|
|
1446
|
-
children: v("debug.cost", { cost: i.summary.totalCost.toFixed(2) })
|
|
1447
|
-
})
|
|
1448
|
-
]
|
|
1449
|
-
}),
|
|
1450
|
-
i.summary.usedIndexes.length > 0 && /* @__PURE__ */ G("div", {
|
|
1451
|
-
className: "dc:text-xs text-dc-text-muted",
|
|
1452
|
-
children: [
|
|
1453
|
-
/* @__PURE__ */ W("strong", { children: v("debug.indexes") }),
|
|
1454
|
-
" ",
|
|
1455
|
-
i.summary.usedIndexes.join(", ")
|
|
1456
|
-
]
|
|
1457
|
-
}),
|
|
1458
|
-
/* @__PURE__ */ W(j, {
|
|
1459
|
-
code: i.raw,
|
|
1460
|
-
language: "sql",
|
|
1461
|
-
title: v("debug.executionPlanTitle", { database: i.summary.database }),
|
|
1462
|
-
height: "16rem",
|
|
1463
|
-
headerRight: te
|
|
1464
|
-
})
|
|
1465
|
-
]
|
|
1466
|
-
}) : null }),
|
|
1467
|
-
d && /* @__PURE__ */ G("div", {
|
|
1621
|
+
}),
|
|
1622
|
+
o && /* @__PURE__ */ H("div", { children: /* @__PURE__ */ H(Nt, {
|
|
1623
|
+
explainLoading: a,
|
|
1624
|
+
explainError: s,
|
|
1625
|
+
explainResult: i,
|
|
1626
|
+
useAnalyze: y,
|
|
1627
|
+
aiButton: E
|
|
1628
|
+
}) }),
|
|
1629
|
+
d && /* @__PURE__ */ U("div", {
|
|
1468
1630
|
className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
|
|
1469
1631
|
children: [
|
|
1470
|
-
/* @__PURE__ */
|
|
1632
|
+
/* @__PURE__ */ H("strong", { children: v("debug.aiAnalysisError") }),
|
|
1471
1633
|
" ",
|
|
1472
1634
|
d.message
|
|
1473
1635
|
]
|
|
1474
1636
|
}),
|
|
1475
|
-
x && l && /* @__PURE__ */
|
|
1637
|
+
x && l && /* @__PURE__ */ H(nt, {
|
|
1476
1638
|
analysis: l,
|
|
1477
|
-
onClose:
|
|
1639
|
+
onClose: T
|
|
1478
1640
|
})
|
|
1479
1641
|
]
|
|
1480
1642
|
});
|
|
1481
1643
|
});
|
|
1482
1644
|
//#endregion
|
|
1483
1645
|
//#region src/client/adapters/queryModeAdapter.ts
|
|
1484
|
-
function
|
|
1646
|
+
function Ft() {
|
|
1485
1647
|
return {
|
|
1486
1648
|
metrics: [],
|
|
1487
1649
|
breakdowns: [],
|
|
@@ -1492,10 +1654,10 @@ function ct() {
|
|
|
1492
1654
|
validationError: null
|
|
1493
1655
|
};
|
|
1494
1656
|
}
|
|
1495
|
-
function
|
|
1657
|
+
function It(e) {
|
|
1496
1658
|
return e.map((e) => e.field);
|
|
1497
1659
|
}
|
|
1498
|
-
function
|
|
1660
|
+
function Lt(e, t) {
|
|
1499
1661
|
let n = [], r = [];
|
|
1500
1662
|
for (let i of e) if (i.isTimeDimension) {
|
|
1501
1663
|
let e = {
|
|
@@ -1503,7 +1665,7 @@ function ut(e, t) {
|
|
|
1503
1665
|
granularity: i.granularity || "day"
|
|
1504
1666
|
};
|
|
1505
1667
|
if (i.enableComparison) {
|
|
1506
|
-
let n =
|
|
1668
|
+
let n = ve(i.field, t);
|
|
1507
1669
|
n && (e.compareDateRange = n);
|
|
1508
1670
|
}
|
|
1509
1671
|
r.push(e);
|
|
@@ -1513,31 +1675,31 @@ function ut(e, t) {
|
|
|
1513
1675
|
timeDimensions: r
|
|
1514
1676
|
};
|
|
1515
1677
|
}
|
|
1516
|
-
function
|
|
1517
|
-
let { dimensions: t, timeDimensions: n } =
|
|
1518
|
-
measures:
|
|
1678
|
+
function Rt(e) {
|
|
1679
|
+
let { dimensions: t, timeDimensions: n } = Lt(e.breakdowns, e.filters), r = {
|
|
1680
|
+
measures: It(e.metrics),
|
|
1519
1681
|
dimensions: t
|
|
1520
1682
|
};
|
|
1521
1683
|
return n.length > 0 && (r.timeDimensions = n), e.filters.length > 0 && (r.filters = e.filters), e.order && Object.keys(e.order).length > 0 && (r.order = e.order), e.limit != null && (r.limit = e.limit), r;
|
|
1522
1684
|
}
|
|
1523
|
-
function
|
|
1685
|
+
function zt(e) {
|
|
1524
1686
|
return e.map((e, t) => ({
|
|
1525
|
-
id:
|
|
1687
|
+
id: S(),
|
|
1526
1688
|
field: e,
|
|
1527
|
-
label:
|
|
1689
|
+
label: d(t)
|
|
1528
1690
|
}));
|
|
1529
1691
|
}
|
|
1530
|
-
function
|
|
1692
|
+
function Bt(e) {
|
|
1531
1693
|
let t = [];
|
|
1532
1694
|
if (e.dimensions) for (let n of e.dimensions) t.push({
|
|
1533
|
-
id:
|
|
1695
|
+
id: S(),
|
|
1534
1696
|
field: n,
|
|
1535
1697
|
isTimeDimension: !1
|
|
1536
1698
|
});
|
|
1537
1699
|
if (e.timeDimensions) for (let n of e.timeDimensions) {
|
|
1538
1700
|
let e = !!(n.compareDateRange && n.compareDateRange.length > 0);
|
|
1539
1701
|
t.push({
|
|
1540
|
-
id:
|
|
1702
|
+
id: S(),
|
|
1541
1703
|
field: n.dimension,
|
|
1542
1704
|
granularity: n.granularity,
|
|
1543
1705
|
isTimeDimension: !0,
|
|
@@ -1546,10 +1708,10 @@ function pt(e) {
|
|
|
1546
1708
|
}
|
|
1547
1709
|
return t;
|
|
1548
1710
|
}
|
|
1549
|
-
function
|
|
1711
|
+
function Vt(e) {
|
|
1550
1712
|
return {
|
|
1551
|
-
metrics:
|
|
1552
|
-
breakdowns:
|
|
1713
|
+
metrics: zt(e.measures || []),
|
|
1714
|
+
breakdowns: Bt(e),
|
|
1553
1715
|
filters: e.filters || [],
|
|
1554
1716
|
order: e.order,
|
|
1555
1717
|
limit: e.limit,
|
|
@@ -1557,14 +1719,14 @@ function mt(e) {
|
|
|
1557
1719
|
validationError: null
|
|
1558
1720
|
};
|
|
1559
1721
|
}
|
|
1560
|
-
function
|
|
1722
|
+
function Ht(e) {
|
|
1561
1723
|
return typeof e == "object" && !!e && "queries" in e && Array.isArray(e.queries);
|
|
1562
1724
|
}
|
|
1563
1725
|
var X = {
|
|
1564
1726
|
type: "query",
|
|
1565
1727
|
createInitial() {
|
|
1566
1728
|
return {
|
|
1567
|
-
queryStates: [
|
|
1729
|
+
queryStates: [Ft()],
|
|
1568
1730
|
activeQueryIndex: 0,
|
|
1569
1731
|
mergeStrategy: "concat"
|
|
1570
1732
|
};
|
|
@@ -1584,22 +1746,22 @@ var X = {
|
|
|
1584
1746
|
load(e) {
|
|
1585
1747
|
if (e.analysisType !== "query") throw Error(`Cannot load ${e.analysisType} config with query adapter`);
|
|
1586
1748
|
let t = e;
|
|
1587
|
-
if (
|
|
1588
|
-
let e = t.query, n = e.queries.map(
|
|
1589
|
-
return n.length === 0 && n.push(
|
|
1749
|
+
if (Ht(t.query)) {
|
|
1750
|
+
let e = t.query, n = e.queries.map(Vt);
|
|
1751
|
+
return n.length === 0 && n.push(Ft()), {
|
|
1590
1752
|
queryStates: n,
|
|
1591
1753
|
activeQueryIndex: 0,
|
|
1592
1754
|
mergeStrategy: e.mergeStrategy || "concat"
|
|
1593
1755
|
};
|
|
1594
1756
|
}
|
|
1595
1757
|
return {
|
|
1596
|
-
queryStates: [
|
|
1758
|
+
queryStates: [Vt(t.query)],
|
|
1597
1759
|
activeQueryIndex: 0,
|
|
1598
1760
|
mergeStrategy: "concat"
|
|
1599
1761
|
};
|
|
1600
1762
|
},
|
|
1601
1763
|
save(e, t, n) {
|
|
1602
|
-
let r = e.queryStates.map(
|
|
1764
|
+
let r = e.queryStates.map(Rt), i = r.length === 1 && e.mergeStrategy === "concat" ? r[0] : {
|
|
1603
1765
|
queries: r,
|
|
1604
1766
|
mergeStrategy: e.mergeStrategy
|
|
1605
1767
|
};
|
|
@@ -1640,36 +1802,36 @@ var X = {
|
|
|
1640
1802
|
}
|
|
1641
1803
|
};
|
|
1642
1804
|
}
|
|
1643
|
-
}, Z = /* @__PURE__ */ new Map(),
|
|
1644
|
-
function
|
|
1645
|
-
|
|
1805
|
+
}, Z = /* @__PURE__ */ new Map(), Ut = !1;
|
|
1806
|
+
function Wt() {
|
|
1807
|
+
Ut ||= (Z.has("query") || Z.set("query", X), Z.has("funnel") || Z.set("funnel", h), Z.has("flow") || Z.set("flow", b), Z.has("retention") || Z.set("retention", y), !0);
|
|
1646
1808
|
}
|
|
1647
1809
|
var Q = {
|
|
1648
1810
|
register(e) {
|
|
1649
1811
|
Z.has(e.type) && console.warn(`[adapterRegistry] Overwriting existing adapter for type: ${e.type}`), Z.set(e.type, e);
|
|
1650
1812
|
},
|
|
1651
1813
|
get(e) {
|
|
1652
|
-
|
|
1814
|
+
Wt();
|
|
1653
1815
|
let t = Z.get(e);
|
|
1654
1816
|
if (!t) throw Error(`[adapterRegistry] No adapter registered for type: ${e}. Available types: ${Array.from(Z.keys()).join(", ") || "none"}`);
|
|
1655
1817
|
return t;
|
|
1656
1818
|
},
|
|
1657
1819
|
has(e) {
|
|
1658
|
-
return
|
|
1820
|
+
return Wt(), Z.has(e);
|
|
1659
1821
|
},
|
|
1660
1822
|
getRegisteredTypes() {
|
|
1661
|
-
return
|
|
1823
|
+
return Wt(), Array.from(Z.keys());
|
|
1662
1824
|
},
|
|
1663
1825
|
clear() {
|
|
1664
|
-
Z.clear(),
|
|
1826
|
+
Z.clear(), Ut = !1;
|
|
1665
1827
|
}
|
|
1666
|
-
},
|
|
1828
|
+
}, Gt = () => ({
|
|
1667
1829
|
analysisType: "query",
|
|
1668
1830
|
charts: {
|
|
1669
1831
|
query: X.getDefaultChartConfig(),
|
|
1670
|
-
funnel:
|
|
1671
|
-
flow:
|
|
1672
|
-
retention:
|
|
1832
|
+
funnel: h.getDefaultChartConfig(),
|
|
1833
|
+
flow: b.getDefaultChartConfig(),
|
|
1834
|
+
retention: y.getDefaultChartConfig()
|
|
1673
1835
|
},
|
|
1674
1836
|
activeViews: {
|
|
1675
1837
|
query: "chart",
|
|
@@ -1679,8 +1841,8 @@ var Q = {
|
|
|
1679
1841
|
},
|
|
1680
1842
|
userManuallySelectedChart: !1,
|
|
1681
1843
|
localPaletteName: "default"
|
|
1682
|
-
}),
|
|
1683
|
-
...
|
|
1844
|
+
}), Kt = (e, t, n) => ({
|
|
1845
|
+
...Gt(),
|
|
1684
1846
|
setAnalysisType: (t) => {
|
|
1685
1847
|
e((e) => {
|
|
1686
1848
|
let n = { ...e.charts };
|
|
@@ -1893,12 +2055,12 @@ var Q = {
|
|
|
1893
2055
|
...u
|
|
1894
2056
|
});
|
|
1895
2057
|
}
|
|
1896
|
-
}),
|
|
2058
|
+
}), qt = () => ({
|
|
1897
2059
|
queryStates: [K()],
|
|
1898
2060
|
activeQueryIndex: 0,
|
|
1899
2061
|
mergeStrategy: "concat"
|
|
1900
|
-
}),
|
|
1901
|
-
...
|
|
2062
|
+
}), Jt = (e, t, n) => ({
|
|
2063
|
+
...qt(),
|
|
1902
2064
|
setQueryStates: (t) => e({ queryStates: t }),
|
|
1903
2065
|
updateQueryState: (t, n) => e((e) => {
|
|
1904
2066
|
let r = [...e.queryStates];
|
|
@@ -1928,9 +2090,9 @@ var Q = {
|
|
|
1928
2090
|
}),
|
|
1929
2091
|
addMetric: (t, n) => e((e) => {
|
|
1930
2092
|
let r = e.activeQueryIndex, i = [...e.queryStates], a = i[r] || K(), o = {
|
|
1931
|
-
id:
|
|
2093
|
+
id: S(),
|
|
1932
2094
|
field: t,
|
|
1933
|
-
label: n ||
|
|
2095
|
+
label: n || d(a.metrics.length)
|
|
1934
2096
|
};
|
|
1935
2097
|
return i[r] = {
|
|
1936
2098
|
...a,
|
|
@@ -1953,9 +2115,9 @@ var Q = {
|
|
|
1953
2115
|
};
|
|
1954
2116
|
else {
|
|
1955
2117
|
let e = {
|
|
1956
|
-
id:
|
|
2118
|
+
id: S(),
|
|
1957
2119
|
field: t,
|
|
1958
|
-
label:
|
|
2120
|
+
label: d(i.metrics.length)
|
|
1959
2121
|
};
|
|
1960
2122
|
r[n] = {
|
|
1961
2123
|
...i,
|
|
@@ -1975,7 +2137,7 @@ var Q = {
|
|
|
1975
2137
|
let i = e.activeQueryIndex, a = [...e.queryStates], o = a[i] || K();
|
|
1976
2138
|
if (n && o.breakdowns.some((e) => e.isTimeDimension)) return e;
|
|
1977
2139
|
let s = {
|
|
1978
|
-
id:
|
|
2140
|
+
id: S(),
|
|
1979
2141
|
field: t,
|
|
1980
2142
|
isTimeDimension: n,
|
|
1981
2143
|
granularity: n ? r || "month" : void 0
|
|
@@ -2002,7 +2164,7 @@ var Q = {
|
|
|
2002
2164
|
else {
|
|
2003
2165
|
if (n && o.breakdowns.some((e) => e.isTimeDimension)) return e;
|
|
2004
2166
|
let s = {
|
|
2005
|
-
id:
|
|
2167
|
+
id: S(),
|
|
2006
2168
|
field: t,
|
|
2007
2169
|
isTimeDimension: n,
|
|
2008
2170
|
granularity: n ? r || "month" : void 0
|
|
@@ -2050,7 +2212,7 @@ var Q = {
|
|
|
2050
2212
|
member: l.field,
|
|
2051
2213
|
operator: "inDateRange",
|
|
2052
2214
|
values: [],
|
|
2053
|
-
dateRange:
|
|
2215
|
+
dateRange: A("last_n_months", 3)
|
|
2054
2216
|
};
|
|
2055
2217
|
s[c] = {
|
|
2056
2218
|
...s[c],
|
|
@@ -2139,11 +2301,11 @@ var Q = {
|
|
|
2139
2301
|
},
|
|
2140
2302
|
buildCurrentQuery: () => {
|
|
2141
2303
|
let e = t(), n = e.queryStates[e.activeQueryIndex] || K();
|
|
2142
|
-
return
|
|
2304
|
+
return G(n.metrics, n.breakdowns, n.filters, n.order, !1, n.limit);
|
|
2143
2305
|
},
|
|
2144
2306
|
buildAllQueries: () => {
|
|
2145
2307
|
let e = t(), n = e.queryStates[0]?.breakdowns || [];
|
|
2146
|
-
return e.queryStates.map((t, r) =>
|
|
2308
|
+
return e.queryStates.map((t, r) => G(t.metrics, e.mergeStrategy === "merge" && r > 0 ? n : t.breakdowns, t.filters, t.order, !1, t.limit));
|
|
2147
2309
|
},
|
|
2148
2310
|
buildMultiQueryConfig: () => {
|
|
2149
2311
|
let e = t();
|
|
@@ -2156,18 +2318,18 @@ var Q = {
|
|
|
2156
2318
|
queryLabels: n.map((e, t) => `Q${t + 1}`)
|
|
2157
2319
|
};
|
|
2158
2320
|
}
|
|
2159
|
-
}),
|
|
2321
|
+
}), Yt = () => ({
|
|
2160
2322
|
funnelCube: null,
|
|
2161
2323
|
funnelSteps: [],
|
|
2162
2324
|
activeFunnelStepIndex: 0,
|
|
2163
2325
|
funnelTimeDimension: null,
|
|
2164
2326
|
funnelBindingKey: null,
|
|
2165
2327
|
stepTimeToConvert: []
|
|
2166
|
-
}),
|
|
2167
|
-
...
|
|
2328
|
+
}), Xt = (e, t, n) => ({
|
|
2329
|
+
...Yt(),
|
|
2168
2330
|
addFunnelStep: () => e((e) => {
|
|
2169
2331
|
let t = e.funnelSteps[e.funnelSteps.length - 1], n = {
|
|
2170
|
-
id:
|
|
2332
|
+
id: S(),
|
|
2171
2333
|
name: `Step ${e.funnelSteps.length + 1}`,
|
|
2172
2334
|
cube: e.funnelCube || "",
|
|
2173
2335
|
filters: t?.filters ? JSON.parse(JSON.stringify(t.filters)) : [],
|
|
@@ -2232,7 +2394,7 @@ var Q = {
|
|
|
2232
2394
|
let e = t();
|
|
2233
2395
|
return e.analysisType !== "funnel" || !e.funnelBindingKey || !e.funnelTimeDimension || e.funnelSteps.length < 2 ? !1 : e.funnelSteps.filter((e) => e.cube && e.name).length >= 2;
|
|
2234
2396
|
}
|
|
2235
|
-
}),
|
|
2397
|
+
}), Zt = () => ({
|
|
2236
2398
|
flowCube: null,
|
|
2237
2399
|
flowBindingKey: null,
|
|
2238
2400
|
flowTimeDimension: null,
|
|
@@ -2244,8 +2406,8 @@ var Q = {
|
|
|
2244
2406
|
stepsAfter: 3,
|
|
2245
2407
|
eventDimension: null,
|
|
2246
2408
|
joinStrategy: "auto"
|
|
2247
|
-
}),
|
|
2248
|
-
...
|
|
2409
|
+
}), Qt = (e, t, n) => ({
|
|
2410
|
+
...Zt(),
|
|
2249
2411
|
setFlowCube: (t) => e(() => ({
|
|
2250
2412
|
flowCube: t,
|
|
2251
2413
|
flowBindingKey: null,
|
|
@@ -2315,8 +2477,8 @@ var Q = {
|
|
|
2315
2477
|
joinStrategy: e.joinStrategy
|
|
2316
2478
|
} };
|
|
2317
2479
|
}
|
|
2318
|
-
}),
|
|
2319
|
-
|
|
2480
|
+
}), $t = () => ({ ...w }), en = (e, t, n) => ({
|
|
2481
|
+
...$t(),
|
|
2320
2482
|
setRetentionCube: (t) => e(() => ({
|
|
2321
2483
|
retentionCube: t,
|
|
2322
2484
|
retentionTimeDimension: null,
|
|
@@ -2391,22 +2553,22 @@ var Q = {
|
|
|
2391
2553
|
warnings: r
|
|
2392
2554
|
};
|
|
2393
2555
|
}
|
|
2394
|
-
}),
|
|
2556
|
+
}), tn = {
|
|
2395
2557
|
isOpen: !1,
|
|
2396
2558
|
userPrompt: "",
|
|
2397
2559
|
isGenerating: !1,
|
|
2398
2560
|
error: null,
|
|
2399
2561
|
hasGeneratedQuery: !1,
|
|
2400
2562
|
previousState: null
|
|
2401
|
-
},
|
|
2563
|
+
}, nn = () => ({
|
|
2402
2564
|
activeTab: "query",
|
|
2403
2565
|
activeView: "chart",
|
|
2404
2566
|
displayLimit: 100,
|
|
2405
2567
|
showFieldModal: !1,
|
|
2406
2568
|
fieldModalMode: "metrics",
|
|
2407
|
-
aiState:
|
|
2408
|
-
}),
|
|
2409
|
-
...
|
|
2569
|
+
aiState: tn
|
|
2570
|
+
}), rn = (e, t, n) => ({
|
|
2571
|
+
...nn(),
|
|
2410
2572
|
setActiveTab: (t) => e({ activeTab: t }),
|
|
2411
2573
|
setActiveView: (t) => e((e) => ({
|
|
2412
2574
|
activeView: t,
|
|
@@ -2490,19 +2652,19 @@ var Q = {
|
|
|
2490
2652
|
displayConfig: t.displayConfig
|
|
2491
2653
|
}
|
|
2492
2654
|
},
|
|
2493
|
-
aiState: { ...
|
|
2655
|
+
aiState: { ...tn }
|
|
2494
2656
|
};
|
|
2495
2657
|
})
|
|
2496
2658
|
});
|
|
2497
2659
|
//#endregion
|
|
2498
|
-
//#region src/client/stores/
|
|
2499
|
-
function
|
|
2660
|
+
//#region src/client/stores/optionsToAnalysisConfig.ts
|
|
2661
|
+
function an(e) {
|
|
2500
2662
|
let t = e.filters ? [...e.filters] : [], n = e.timeDimensions || [], r = [...(e.dimensions || []).map((e) => ({
|
|
2501
|
-
id:
|
|
2663
|
+
id: S(),
|
|
2502
2664
|
field: e,
|
|
2503
2665
|
isTimeDimension: !1
|
|
2504
2666
|
})), ...n.map((e) => ({
|
|
2505
|
-
id:
|
|
2667
|
+
id: S(),
|
|
2506
2668
|
field: e.dimension,
|
|
2507
2669
|
granularity: e.granularity,
|
|
2508
2670
|
isTimeDimension: !0,
|
|
@@ -2530,118 +2692,114 @@ function jt(e) {
|
|
|
2530
2692
|
return {
|
|
2531
2693
|
...K(),
|
|
2532
2694
|
metrics: (e.measures || []).map((e, t) => ({
|
|
2533
|
-
id:
|
|
2695
|
+
id: S(),
|
|
2534
2696
|
field: e,
|
|
2535
|
-
label:
|
|
2697
|
+
label: d(t)
|
|
2536
2698
|
})),
|
|
2537
2699
|
breakdowns: r,
|
|
2538
2700
|
filters: i,
|
|
2539
2701
|
order: e.order
|
|
2540
2702
|
};
|
|
2541
2703
|
}
|
|
2542
|
-
function
|
|
2704
|
+
function on(e) {
|
|
2543
2705
|
return "queries" in e && Array.isArray(e.queries);
|
|
2544
2706
|
}
|
|
2545
|
-
function
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
displayConfig: e.initialChartConfig.displayConfig || t.displayConfig
|
|
2618
|
-
};
|
|
2619
|
-
return X.save({
|
|
2620
|
-
queryStates: [K()],
|
|
2621
|
-
activeQueryIndex: 0,
|
|
2622
|
-
mergeStrategy: "concat"
|
|
2623
|
-
}, { query: n }, e.initialActiveView || "chart");
|
|
2624
|
-
}
|
|
2625
|
-
return e.initialActiveView ? X.save({
|
|
2707
|
+
function sn(e, t) {
|
|
2708
|
+
let n = e.getDefaultChartConfig();
|
|
2709
|
+
return {
|
|
2710
|
+
chartType: t?.chartType || n.chartType,
|
|
2711
|
+
chartConfig: t?.chartConfig || n.chartConfig,
|
|
2712
|
+
displayConfig: t?.displayConfig || n.displayConfig
|
|
2713
|
+
};
|
|
2714
|
+
}
|
|
2715
|
+
function cn(e) {
|
|
2716
|
+
return e.initialActiveView || "chart";
|
|
2717
|
+
}
|
|
2718
|
+
function ln(e) {
|
|
2719
|
+
let t = sn(h, e.initialChartConfig), n = e.initialFunnelState ?? {};
|
|
2720
|
+
return h.save({
|
|
2721
|
+
funnelCube: n.funnelCube ?? null,
|
|
2722
|
+
funnelSteps: n.funnelSteps || [],
|
|
2723
|
+
activeFunnelStepIndex: 0,
|
|
2724
|
+
funnelTimeDimension: n.funnelTimeDimension ?? null,
|
|
2725
|
+
funnelBindingKey: n.funnelBindingKey ?? null
|
|
2726
|
+
}, { funnel: t }, cn(e));
|
|
2727
|
+
}
|
|
2728
|
+
function un(e) {
|
|
2729
|
+
let t = sn(b, e.initialChartConfig), n = e.initialFlowState ?? {};
|
|
2730
|
+
return b.save({
|
|
2731
|
+
flowCube: n.flowCube ?? null,
|
|
2732
|
+
flowBindingKey: n.flowBindingKey ?? null,
|
|
2733
|
+
flowTimeDimension: n.flowTimeDimension ?? null,
|
|
2734
|
+
startingStep: n.startingStep || {
|
|
2735
|
+
name: "",
|
|
2736
|
+
filters: []
|
|
2737
|
+
},
|
|
2738
|
+
stepsBefore: n.stepsBefore ?? 3,
|
|
2739
|
+
stepsAfter: n.stepsAfter ?? 3,
|
|
2740
|
+
eventDimension: n.eventDimension ?? null,
|
|
2741
|
+
joinStrategy: n.joinStrategy ?? "auto"
|
|
2742
|
+
}, { flow: t }, cn(e));
|
|
2743
|
+
}
|
|
2744
|
+
function dn(e) {
|
|
2745
|
+
let t = sn(y, e.initialChartConfig), n = e.initialRetentionState ?? {}, r = T(E);
|
|
2746
|
+
return y.save({
|
|
2747
|
+
retentionCube: n.retentionCube ?? null,
|
|
2748
|
+
retentionBindingKey: n.retentionBindingKey ?? null,
|
|
2749
|
+
retentionTimeDimension: n.retentionTimeDimension ?? null,
|
|
2750
|
+
retentionDateRange: n.retentionDateRange ?? r,
|
|
2751
|
+
retentionCohortFilters: n.retentionCohortFilters || [],
|
|
2752
|
+
retentionActivityFilters: n.retentionActivityFilters || [],
|
|
2753
|
+
retentionBreakdowns: n.retentionBreakdowns || [],
|
|
2754
|
+
retentionViewGranularity: n.retentionViewGranularity ?? "week",
|
|
2755
|
+
retentionPeriods: n.retentionPeriods ?? 12,
|
|
2756
|
+
retentionType: n.retentionType ?? "classic"
|
|
2757
|
+
}, { retention: t }, cn(e));
|
|
2758
|
+
}
|
|
2759
|
+
function fn(e, t) {
|
|
2760
|
+
let n, r = "concat";
|
|
2761
|
+
on(t) ? (n = t.queries.map(an), t.mergeStrategy && (r = t.mergeStrategy)) : n = [an(t)];
|
|
2762
|
+
let i = sn(X, e.initialChartConfig);
|
|
2763
|
+
return X.save({
|
|
2764
|
+
queryStates: n,
|
|
2765
|
+
activeQueryIndex: 0,
|
|
2766
|
+
mergeStrategy: r
|
|
2767
|
+
}, { query: i }, cn(e));
|
|
2768
|
+
}
|
|
2769
|
+
function pn(e) {
|
|
2770
|
+
let t = sn(X, e.initialChartConfig);
|
|
2771
|
+
return X.save({
|
|
2772
|
+
queryStates: [K()],
|
|
2773
|
+
activeQueryIndex: 0,
|
|
2774
|
+
mergeStrategy: "concat"
|
|
2775
|
+
}, { query: t }, cn(e));
|
|
2776
|
+
}
|
|
2777
|
+
function mn(e) {
|
|
2778
|
+
return X.save({
|
|
2626
2779
|
queryStates: [K()],
|
|
2627
2780
|
activeQueryIndex: 0,
|
|
2628
2781
|
mergeStrategy: "concat"
|
|
2629
|
-
}, { query: X.getDefaultChartConfig() }, e.initialActiveView)
|
|
2782
|
+
}, { query: X.getDefaultChartConfig() }, e.initialActiveView);
|
|
2783
|
+
}
|
|
2784
|
+
function hn(e) {
|
|
2785
|
+
return e.initialAnalysisType === "funnel" && e.initialFunnelState ? ln(e) : e.initialAnalysisType === "flow" && e.initialFlowState ? un(e) : e.initialAnalysisType === "retention" && e.initialRetentionState ? dn(e) : e.initialQuery ? fn(e, e.initialQuery) : e.initialChartConfig ? pn(e) : e.initialActiveView ? mn(e) : null;
|
|
2630
2786
|
}
|
|
2631
|
-
|
|
2787
|
+
//#endregion
|
|
2788
|
+
//#region src/client/stores/analysisBuilderStore.tsx
|
|
2789
|
+
function gn(e, t) {
|
|
2632
2790
|
return {
|
|
2633
2791
|
reset: () => {
|
|
2634
2792
|
e({
|
|
2635
|
-
...
|
|
2636
|
-
...
|
|
2637
|
-
...
|
|
2638
|
-
...
|
|
2639
|
-
|
|
2793
|
+
...Gt(),
|
|
2794
|
+
...qt(),
|
|
2795
|
+
...Yt(),
|
|
2796
|
+
...Zt(),
|
|
2797
|
+
...$t(),
|
|
2640
2798
|
charts: {
|
|
2641
2799
|
query: X.getDefaultChartConfig(),
|
|
2642
|
-
funnel:
|
|
2643
|
-
flow:
|
|
2644
|
-
retention:
|
|
2800
|
+
funnel: h.getDefaultChartConfig(),
|
|
2801
|
+
flow: b.getDefaultChartConfig(),
|
|
2802
|
+
retention: y.getDefaultChartConfig()
|
|
2645
2803
|
},
|
|
2646
2804
|
activeViews: {
|
|
2647
2805
|
query: "chart",
|
|
@@ -2654,28 +2812,28 @@ function Pt(e, t) {
|
|
|
2654
2812
|
clearCurrentMode: () => e((e) => {
|
|
2655
2813
|
switch (e.analysisType) {
|
|
2656
2814
|
case "funnel": return {
|
|
2657
|
-
...
|
|
2815
|
+
...Yt(),
|
|
2658
2816
|
charts: {
|
|
2659
2817
|
...e.charts,
|
|
2660
|
-
funnel:
|
|
2818
|
+
funnel: h.getDefaultChartConfig()
|
|
2661
2819
|
}
|
|
2662
2820
|
};
|
|
2663
2821
|
case "flow": return {
|
|
2664
|
-
...
|
|
2822
|
+
...Zt(),
|
|
2665
2823
|
charts: {
|
|
2666
2824
|
...e.charts,
|
|
2667
|
-
flow:
|
|
2825
|
+
flow: b.getDefaultChartConfig()
|
|
2668
2826
|
}
|
|
2669
2827
|
};
|
|
2670
2828
|
case "retention": return {
|
|
2671
|
-
|
|
2829
|
+
...$t(),
|
|
2672
2830
|
charts: {
|
|
2673
2831
|
...e.charts,
|
|
2674
|
-
retention:
|
|
2832
|
+
retention: y.getDefaultChartConfig()
|
|
2675
2833
|
}
|
|
2676
2834
|
};
|
|
2677
2835
|
default: return {
|
|
2678
|
-
...
|
|
2836
|
+
...qt(),
|
|
2679
2837
|
userManuallySelectedChart: !1,
|
|
2680
2838
|
charts: {
|
|
2681
2839
|
...e.charts,
|
|
@@ -2701,15 +2859,15 @@ function Pt(e, t) {
|
|
|
2701
2859
|
}
|
|
2702
2860
|
};
|
|
2703
2861
|
}
|
|
2704
|
-
function
|
|
2705
|
-
let r =
|
|
2706
|
-
...
|
|
2707
|
-
...
|
|
2708
|
-
...
|
|
2709
|
-
...
|
|
2710
|
-
...
|
|
2711
|
-
...
|
|
2712
|
-
...
|
|
2862
|
+
function _n(n = {}) {
|
|
2863
|
+
let r = hn(n), o = (e, t, n) => ({
|
|
2864
|
+
...Kt(e, t, n),
|
|
2865
|
+
...Jt(e, t, n),
|
|
2866
|
+
...Xt(e, t, n),
|
|
2867
|
+
...Qt(e, t, n),
|
|
2868
|
+
...en(e, t, n),
|
|
2869
|
+
...rn(e, t, n),
|
|
2870
|
+
...gn(e, t)
|
|
2713
2871
|
});
|
|
2714
2872
|
if (n.disableLocalStorage) {
|
|
2715
2873
|
let t = a()(i(e(o), { name: "AnalysisBuilderStore (no-persist)" }));
|
|
@@ -2718,10 +2876,10 @@ function Ft(n = {}) {
|
|
|
2718
2876
|
return a()(i(e(t(o, {
|
|
2719
2877
|
name: n.storageKey || "drizzle-cube-analysis-builder-v3",
|
|
2720
2878
|
partialize: (e) => e.saveWorkspace(),
|
|
2721
|
-
merge: (e, t) => e &&
|
|
2879
|
+
merge: (e, t) => e && m(e) ? {
|
|
2722
2880
|
...t,
|
|
2723
2881
|
_persistedWorkspace: e
|
|
2724
|
-
} : e &&
|
|
2882
|
+
} : e && v(e) ? {
|
|
2725
2883
|
...t,
|
|
2726
2884
|
_persistedConfig: e
|
|
2727
2885
|
} : r ? {
|
|
@@ -2744,10 +2902,10 @@ function Ft(n = {}) {
|
|
|
2744
2902
|
}
|
|
2745
2903
|
})), { name: "AnalysisBuilderStore" }));
|
|
2746
2904
|
}
|
|
2747
|
-
var
|
|
2748
|
-
function
|
|
2749
|
-
let u =
|
|
2750
|
-
return u.current ||=
|
|
2905
|
+
var vn = P(null);
|
|
2906
|
+
function yn({ children: e, initialQuery: t, initialChartConfig: n, disableLocalStorage: r, storageKey: i, initialAnalysisType: a, initialFunnelState: o, initialFlowState: s, initialRetentionState: c, initialActiveView: l }) {
|
|
2907
|
+
let u = z(null);
|
|
2908
|
+
return u.current ||= _n({
|
|
2751
2909
|
initialQuery: t,
|
|
2752
2910
|
initialChartConfig: n,
|
|
2753
2911
|
disableLocalStorage: r,
|
|
@@ -2757,22 +2915,22 @@ function Lt({ children: e, initialQuery: t, initialChartConfig: n, disableLocalS
|
|
|
2757
2915
|
initialFlowState: s,
|
|
2758
2916
|
initialRetentionState: c,
|
|
2759
2917
|
initialActiveView: l
|
|
2760
|
-
}), /* @__PURE__ */
|
|
2918
|
+
}), /* @__PURE__ */ H(vn.Provider, {
|
|
2761
2919
|
value: u.current,
|
|
2762
2920
|
children: e
|
|
2763
2921
|
});
|
|
2764
2922
|
}
|
|
2765
2923
|
function $(e) {
|
|
2766
|
-
let t =
|
|
2924
|
+
let t = pe(vn);
|
|
2767
2925
|
if (!t) throw Error("useAnalysisBuilderStore must be used within AnalysisBuilderStoreProvider");
|
|
2768
2926
|
return r(t, e);
|
|
2769
2927
|
}
|
|
2770
|
-
function
|
|
2771
|
-
let e =
|
|
2928
|
+
function bn() {
|
|
2929
|
+
let e = pe(vn);
|
|
2772
2930
|
if (!e) throw Error("useAnalysisBuilderStoreApi must be used within AnalysisBuilderStoreProvider");
|
|
2773
2931
|
return e;
|
|
2774
2932
|
}
|
|
2775
|
-
var
|
|
2933
|
+
var xn = (e) => e.queryStates[e.activeQueryIndex] || K(), Sn = (e) => xn(e).metrics, Cn = (e) => xn(e).breakdowns, wn = (e) => xn(e).filters, Tn = (e) => {
|
|
2776
2934
|
let t = e.charts[e.analysisType];
|
|
2777
2935
|
return t ? {
|
|
2778
2936
|
chartType: t.chartType,
|
|
@@ -2787,18 +2945,18 @@ var zt = (e) => e.queryStates[e.activeQueryIndex] || K(), Bt = (e) => zt(e).metr
|
|
|
2787
2945
|
showTooltip: !0
|
|
2788
2946
|
}
|
|
2789
2947
|
};
|
|
2790
|
-
},
|
|
2948
|
+
}, En = (e) => ({
|
|
2791
2949
|
activeTab: e.activeTab,
|
|
2792
2950
|
activeView: e.activeView,
|
|
2793
2951
|
displayLimit: e.displayLimit,
|
|
2794
2952
|
showFieldModal: e.showFieldModal,
|
|
2795
2953
|
fieldModalMode: e.fieldModalMode
|
|
2796
|
-
}),
|
|
2954
|
+
}), Dn = (e) => ({
|
|
2797
2955
|
queryStates: e.queryStates,
|
|
2798
2956
|
activeQueryIndex: e.activeQueryIndex,
|
|
2799
2957
|
mergeStrategy: e.mergeStrategy,
|
|
2800
2958
|
isMultiQueryMode: e.analysisType === "query" && e.queryStates.length > 1
|
|
2801
|
-
}),
|
|
2959
|
+
}), On = (e) => ({
|
|
2802
2960
|
funnelCube: e.funnelCube,
|
|
2803
2961
|
funnelSteps: e.funnelSteps,
|
|
2804
2962
|
activeFunnelStepIndex: e.activeFunnelStepIndex,
|
|
@@ -2809,16 +2967,16 @@ var zt = (e) => e.queryStates[e.activeQueryIndex] || K(), Bt = (e) => zt(e).metr
|
|
|
2809
2967
|
});
|
|
2810
2968
|
//#endregion
|
|
2811
2969
|
//#region src/client/utils/multiQueryValidation.ts
|
|
2812
|
-
function
|
|
2970
|
+
function kn(e) {
|
|
2813
2971
|
return e.timeDimensions || [];
|
|
2814
2972
|
}
|
|
2815
|
-
function
|
|
2973
|
+
function An(e) {
|
|
2816
2974
|
let t = [];
|
|
2817
2975
|
if (e.length < 2) return t;
|
|
2818
|
-
let n =
|
|
2976
|
+
let n = kn(e[0]);
|
|
2819
2977
|
if (n.length === 0) return t;
|
|
2820
2978
|
for (let r = 1; r < e.length; r++) {
|
|
2821
|
-
let i =
|
|
2979
|
+
let i = kn(e[r]);
|
|
2822
2980
|
if (i.length === 0 && n.length > 0) {
|
|
2823
2981
|
t.push({
|
|
2824
2982
|
type: "missing_time_dimension",
|
|
@@ -2844,7 +3002,7 @@ function Jt(e) {
|
|
|
2844
3002
|
}
|
|
2845
3003
|
return t;
|
|
2846
3004
|
}
|
|
2847
|
-
function
|
|
3005
|
+
function jn(e, t) {
|
|
2848
3006
|
let n = [];
|
|
2849
3007
|
if (e.length < 2 || t.length === 0) return n;
|
|
2850
3008
|
for (let r = 0; r < e.length; r++) {
|
|
@@ -2858,7 +3016,7 @@ function Yt(e, t) {
|
|
|
2858
3016
|
}
|
|
2859
3017
|
return n;
|
|
2860
3018
|
}
|
|
2861
|
-
function
|
|
3019
|
+
function Mn(e) {
|
|
2862
3020
|
let t = [];
|
|
2863
3021
|
if (e.length < 2) return t;
|
|
2864
3022
|
let n = /* @__PURE__ */ new Map();
|
|
@@ -2877,7 +3035,7 @@ function Xt(e) {
|
|
|
2877
3035
|
affectedMeasures: r
|
|
2878
3036
|
}), t;
|
|
2879
3037
|
}
|
|
2880
|
-
function
|
|
3038
|
+
function Nn(e) {
|
|
2881
3039
|
let t = [];
|
|
2882
3040
|
if (e.length < 2) return t;
|
|
2883
3041
|
let n = e.map((e) => e.timeDimensions?.[0]?.dateRange);
|
|
@@ -2887,39 +3045,45 @@ function Zt(e) {
|
|
|
2887
3045
|
message: "Queries have different date ranges - some data points may be missing in merged results"
|
|
2888
3046
|
}), t;
|
|
2889
3047
|
}
|
|
2890
|
-
function
|
|
3048
|
+
function Pn(e, t, n = []) {
|
|
2891
3049
|
let r = [], i = [];
|
|
2892
3050
|
return e.length < 2 ? {
|
|
2893
3051
|
isValid: !0,
|
|
2894
3052
|
errors: r,
|
|
2895
3053
|
warnings: i
|
|
2896
|
-
} : (i.push(...
|
|
3054
|
+
} : (i.push(...Mn(e)), i.push(...Nn(e)), t === "merge" && (r.push(...An(e)), n.length > 0 && r.push(...jn(e, n))), {
|
|
2897
3055
|
isValid: r.length === 0,
|
|
2898
3056
|
errors: r,
|
|
2899
3057
|
warnings: i
|
|
2900
3058
|
});
|
|
2901
3059
|
}
|
|
2902
|
-
function
|
|
2903
|
-
return
|
|
3060
|
+
function Fn(e) {
|
|
3061
|
+
return (e.measures?.length || 0) + (e.dimensions?.length || 0) + (e.timeDimensions?.length || 0);
|
|
2904
3062
|
}
|
|
2905
|
-
function
|
|
3063
|
+
function In(e) {
|
|
3064
|
+
return e.filter((e) => Fn(e) > 0).length >= 2;
|
|
3065
|
+
}
|
|
3066
|
+
function Ln(e, t) {
|
|
3067
|
+
return `${e} ${t}${e === 1 ? "" : "s"}`;
|
|
3068
|
+
}
|
|
3069
|
+
function Rn(e) {
|
|
2906
3070
|
if (e.isValid && e.warnings.length === 0) return "Configuration is valid";
|
|
2907
3071
|
let t = [];
|
|
2908
|
-
return e.errors.length > 0 && t.push(
|
|
3072
|
+
return e.errors.length > 0 && t.push(Ln(e.errors.length, "error")), e.warnings.length > 0 && t.push(Ln(e.warnings.length, "warning")), t.join(", ");
|
|
2909
3073
|
}
|
|
2910
3074
|
//#endregion
|
|
2911
3075
|
//#region src/client/hooks/useAnalysisQueryBuilder.ts
|
|
2912
|
-
function
|
|
2913
|
-
let e = $((e) => e.queryStates), t = $((e) => e.activeQueryIndex), n = $((e) => e.mergeStrategy), r = $((e) => e.setActiveQueryIndex), i = $((e) => e.setMergeStrategy), a = $((e) => e.addQuery), o = $((e) => e.removeQuery), s = $((e) => e.getCurrentState), c = $((e) => e.getMergeKeys), l = $((e) => e.isMultiQueryMode), u = s(), d = l(), f = c(), p =
|
|
3076
|
+
function zn() {
|
|
3077
|
+
let e = $((e) => e.queryStates), t = $((e) => e.activeQueryIndex), n = $((e) => e.mergeStrategy), r = $((e) => e.setActiveQueryIndex), i = $((e) => e.setMergeStrategy), a = $((e) => e.addQuery), o = $((e) => e.removeQuery), s = $((e) => e.getCurrentState), c = $((e) => e.getMergeKeys), l = $((e) => e.isMultiQueryMode), u = s(), d = l(), f = c(), p = R(() => {
|
|
2914
3078
|
let n = e[t] || u;
|
|
2915
|
-
return
|
|
3079
|
+
return G(n.metrics, n.breakdowns, n.filters, n.order, !1, n.limit);
|
|
2916
3080
|
}, [
|
|
2917
3081
|
e,
|
|
2918
3082
|
t,
|
|
2919
3083
|
u
|
|
2920
|
-
]), m =
|
|
3084
|
+
]), m = R(() => {
|
|
2921
3085
|
let t = e[0]?.breakdowns || [];
|
|
2922
|
-
return e.map((e, r) =>
|
|
3086
|
+
return e.map((e, r) => G(e.metrics, n === "merge" && r > 0 ? t : e.breakdowns, e.filters, e.order, !1, e.limit));
|
|
2923
3087
|
}, [e, n]);
|
|
2924
3088
|
return {
|
|
2925
3089
|
queryState: u,
|
|
@@ -2930,7 +3094,7 @@ function tn() {
|
|
|
2930
3094
|
mergeKeys: f,
|
|
2931
3095
|
currentQuery: p,
|
|
2932
3096
|
allQueries: m,
|
|
2933
|
-
multiQueryConfig:
|
|
3097
|
+
multiQueryConfig: R(() => {
|
|
2934
3098
|
if (e.length <= 1) return null;
|
|
2935
3099
|
let t = m.filter((e) => e.measures && e.measures.length > 0 || e.dimensions && e.dimensions.length > 0 || e.timeDimensions && e.timeDimensions.length > 0);
|
|
2936
3100
|
return t.length < 2 ? null : {
|
|
@@ -2945,13 +3109,13 @@ function tn() {
|
|
|
2945
3109
|
n,
|
|
2946
3110
|
f
|
|
2947
3111
|
]),
|
|
2948
|
-
multiQueryValidation:
|
|
3112
|
+
multiQueryValidation: R(() => d ? Pn(m, n, f || []) : null, [
|
|
2949
3113
|
d,
|
|
2950
3114
|
m,
|
|
2951
3115
|
n,
|
|
2952
3116
|
f
|
|
2953
3117
|
]),
|
|
2954
|
-
isValidQuery:
|
|
3118
|
+
isValidQuery: R(() => p.measures && p.measures.length > 0 || p.dimensions && p.dimensions.length > 0 || p.timeDimensions && p.timeDimensions.length > 0, [p]),
|
|
2955
3119
|
setActiveQueryIndex: r,
|
|
2956
3120
|
setMergeStrategy: i,
|
|
2957
3121
|
addQuery: a,
|
|
@@ -2960,10 +3124,10 @@ function tn() {
|
|
|
2960
3124
|
}
|
|
2961
3125
|
//#endregion
|
|
2962
3126
|
//#region src/client/hooks/useAnalysisCombinedFields.ts
|
|
2963
|
-
function
|
|
3127
|
+
function Bn(e) {
|
|
2964
3128
|
let { queryState: t, queryStates: n, isMultiQueryMode: r, mergeStrategy: i, activeQueryIndex: a } = e;
|
|
2965
3129
|
return {
|
|
2966
|
-
combinedMetrics:
|
|
3130
|
+
combinedMetrics: R(() => {
|
|
2967
3131
|
if (!r) return t.metrics;
|
|
2968
3132
|
let e = /* @__PURE__ */ new Set(), i = [];
|
|
2969
3133
|
for (let t = 0; t < n.length; t++) {
|
|
@@ -2982,7 +3146,7 @@ function nn(e) {
|
|
|
2982
3146
|
n,
|
|
2983
3147
|
t.metrics
|
|
2984
3148
|
]),
|
|
2985
|
-
combinedBreakdowns:
|
|
3149
|
+
combinedBreakdowns: R(() => {
|
|
2986
3150
|
if (!r) return t.breakdowns;
|
|
2987
3151
|
let e = /* @__PURE__ */ new Set(), i = [];
|
|
2988
3152
|
for (let t of n) for (let n of t.breakdowns) e.has(n.field) || (e.add(n.field), i.push(n));
|
|
@@ -2992,7 +3156,7 @@ function nn(e) {
|
|
|
2992
3156
|
n,
|
|
2993
3157
|
t.breakdowns
|
|
2994
3158
|
]),
|
|
2995
|
-
effectiveBreakdowns:
|
|
3159
|
+
effectiveBreakdowns: R(() => i === "merge" && a > 0 ? n[0]?.breakdowns || [] : t.breakdowns, [
|
|
2996
3160
|
i,
|
|
2997
3161
|
a,
|
|
2998
3162
|
n,
|
|
@@ -3001,158 +3165,276 @@ function nn(e) {
|
|
|
3001
3165
|
};
|
|
3002
3166
|
}
|
|
3003
3167
|
//#endregion
|
|
3168
|
+
//#region src/client/hooks/analysisQueryExecutionModes.ts
|
|
3169
|
+
function Vn(e) {
|
|
3170
|
+
return e.isRetentionMode ? "retention" : e.isFlowMode ? "flow" : e.isFunnelMode ? "funnel" : e.isMultiMode ? "multi" : "single";
|
|
3171
|
+
}
|
|
3172
|
+
function Hn(e, t) {
|
|
3173
|
+
return t[e];
|
|
3174
|
+
}
|
|
3175
|
+
function Un(e) {
|
|
3176
|
+
return {
|
|
3177
|
+
funnelExecutedQueries: e.isFunnelMode && e.funnelExecutedQueries && e.funnelExecutedQueries.length > 0 ? e.funnelExecutedQueries : null,
|
|
3178
|
+
funnelServerQuery: e.isFunnelMode ? e.funnelServerQuery : null,
|
|
3179
|
+
funnelDebugData: e.isFunnelMode ? e.funnelDebugData : null,
|
|
3180
|
+
flowServerQuery: e.isFlowMode ? e.flowServerQuery : null,
|
|
3181
|
+
flowChartData: e.isFlowMode ? e.flowData : null,
|
|
3182
|
+
flowDebugData: e.isFlowMode ? e.flowDebugData : null,
|
|
3183
|
+
retentionServerQuery: e.isRetentionMode ? e.retentionServerQuery : null,
|
|
3184
|
+
retentionChartData: e.isRetentionMode ? e.retentionChartData : null,
|
|
3185
|
+
retentionDebugData: e.isRetentionMode ? e.retentionDebugData : null
|
|
3186
|
+
};
|
|
3187
|
+
}
|
|
3188
|
+
function Wn(e) {
|
|
3189
|
+
return {
|
|
3190
|
+
single: !e.isValidQuery || !e.isSingleMode,
|
|
3191
|
+
multi: !e.hasMultiQueryConfig || !e.isMultiMode,
|
|
3192
|
+
funnel: !e.isFunnelMode || !e.hasFunnelConfig && !e.hasServerFunnelQuery,
|
|
3193
|
+
flow: !e.isFlowMode || !e.hasServerFlowQuery,
|
|
3194
|
+
retention: !e.isRetentionMode || !e.hasServerRetentionQuery,
|
|
3195
|
+
dryRun: !!(!e.isValidQuery || e.isFunnelMode || e.isFlowMode || e.isRetentionMode)
|
|
3196
|
+
};
|
|
3197
|
+
}
|
|
3198
|
+
function Gn(e) {
|
|
3199
|
+
let { hasResults: t, initialData: n, isValidQuery: r, isLoading: i, isFetching: a, error: o } = e;
|
|
3200
|
+
return n && n.length > 0 && !t ? "success" : r ? i && !t ? "loading" : a && t ? "refreshing" : o ? "error" : t ? "success" : "idle" : "idle";
|
|
3201
|
+
}
|
|
3202
|
+
function Kn(e) {
|
|
3203
|
+
return e.isRetentionMode && e.retentionChartData ? e.retentionChartData.rows.map((e) => ({
|
|
3204
|
+
"Retention.period": `P${e.period}`,
|
|
3205
|
+
"Retention.rate": e.retentionRate,
|
|
3206
|
+
"Retention.retained": e.retainedUsers,
|
|
3207
|
+
"Retention.cohortSize": e.cohortSize,
|
|
3208
|
+
"Retention.segment": e.breakdownValue || "All Users"
|
|
3209
|
+
})) : e.isFlowMode && e.flowData ? [e.flowData] : e.isFunnelMode && e.funnelChartData ? e.funnelChartData : e.isMultiMode && e.multiData ? e.multiData : e.singleRawData ? e.singleRawData : e.initialData && e.initialData.length > 0 ? e.initialData : null;
|
|
3210
|
+
}
|
|
3211
|
+
//#endregion
|
|
3004
3212
|
//#region src/client/hooks/useAnalysisQueryExecution.ts
|
|
3005
|
-
function
|
|
3006
|
-
let { currentQuery: t, allQueries: n, multiQueryConfig: r, isMultiQueryMode: i, isValidQuery: a, initialData: o, mergeStrategy: s, funnelBindingKey: c, isFunnelModeEnabled: l, analysisType: u, serverFunnelQuery: d, serverFlowQuery: f, serverRetentionQuery:
|
|
3007
|
-
|
|
3008
|
-
|
|
3213
|
+
function qn(e) {
|
|
3214
|
+
let { currentQuery: t, allQueries: n, multiQueryConfig: r, isMultiQueryMode: i, isValidQuery: a, initialData: o, mergeStrategy: s, funnelBindingKey: c, isFunnelModeEnabled: l, analysisType: u, serverFunnelQuery: d, serverFlowQuery: f, serverRetentionQuery: p, retentionValidation: m } = e, { getFieldLabel: h } = ee(), g = u === "funnel" || l, _ = u === "flow", v = u === "retention", y = u === "query" && i, b = u === "query" && !i, x = u === "funnel" && !!d, S = Vn({
|
|
3215
|
+
isRetentionMode: v,
|
|
3216
|
+
isFlowMode: _,
|
|
3217
|
+
isFunnelMode: g,
|
|
3218
|
+
isMultiMode: y
|
|
3219
|
+
}), C = R(() => x || !g || !c || n.length < 2 ? null : fe(n, c), [
|
|
3220
|
+
x,
|
|
3221
|
+
g,
|
|
3009
3222
|
c,
|
|
3010
3223
|
n
|
|
3011
|
-
]),
|
|
3012
|
-
|
|
3224
|
+
]), w = Wn({
|
|
3225
|
+
isValidQuery: a,
|
|
3226
|
+
isSingleMode: b,
|
|
3227
|
+
isMultiMode: y,
|
|
3228
|
+
isFunnelMode: g,
|
|
3229
|
+
isFlowMode: _,
|
|
3230
|
+
isRetentionMode: v,
|
|
3231
|
+
hasMultiQueryConfig: !!r,
|
|
3232
|
+
hasFunnelConfig: !!C,
|
|
3233
|
+
hasServerFunnelQuery: !!d,
|
|
3234
|
+
hasServerFlowQuery: !!f,
|
|
3235
|
+
hasServerRetentionQuery: !!p
|
|
3236
|
+
}), T = ne(t, {
|
|
3237
|
+
skip: w.single,
|
|
3013
3238
|
debounceMs: 300
|
|
3014
|
-
}),
|
|
3015
|
-
skip:
|
|
3239
|
+
}), E = ie(r, {
|
|
3240
|
+
skip: w.multi,
|
|
3016
3241
|
debounceMs: 300
|
|
3017
|
-
}),
|
|
3018
|
-
skip:
|
|
3242
|
+
}), D = oe(C, {
|
|
3243
|
+
skip: w.funnel,
|
|
3019
3244
|
debounceMs: 300,
|
|
3020
|
-
prebuiltServerQuery:
|
|
3021
|
-
}),
|
|
3022
|
-
skip:
|
|
3245
|
+
prebuiltServerQuery: x ? d : void 0
|
|
3246
|
+
}), O = le(f ?? null, {
|
|
3247
|
+
skip: w.flow,
|
|
3023
3248
|
debounceMs: 300
|
|
3024
|
-
}),
|
|
3025
|
-
skip:
|
|
3249
|
+
}), k = re(p ?? null, {
|
|
3250
|
+
skip: w.retention,
|
|
3026
3251
|
debounceMs: 300,
|
|
3027
|
-
getFieldLabel:
|
|
3028
|
-
}),
|
|
3252
|
+
getFieldLabel: h
|
|
3253
|
+
}), te = de({
|
|
3029
3254
|
queries: i ? n : [t],
|
|
3030
3255
|
isMultiQueryMode: i,
|
|
3031
|
-
skip:
|
|
3032
|
-
}),
|
|
3033
|
-
|
|
3256
|
+
skip: w.dryRun
|
|
3257
|
+
}), A = ue(D.serverQuery, { skip: !g || !D.serverQuery }), ae = ue(O.serverQuery, { skip: !_ || !O.serverQuery }), se = ue(p, { skip: !v || !p }), ce = Hn(S, {
|
|
3258
|
+
retention: k.isLoading || k.isDebouncing,
|
|
3259
|
+
flow: O.isLoading || O.isDebouncing,
|
|
3260
|
+
funnel: D.isExecuting || D.isDebouncing,
|
|
3261
|
+
multi: E.isLoading,
|
|
3262
|
+
single: T.isLoading
|
|
3263
|
+
}), j = Hn(S, {
|
|
3264
|
+
retention: k.isFetching,
|
|
3265
|
+
flow: O.isFetching,
|
|
3266
|
+
funnel: D.isExecuting,
|
|
3267
|
+
multi: E.isFetching,
|
|
3268
|
+
single: T.isFetching
|
|
3269
|
+
}), M = Hn(S, {
|
|
3270
|
+
retention: k.error,
|
|
3271
|
+
flow: O.error,
|
|
3272
|
+
funnel: D.error,
|
|
3273
|
+
multi: E.error,
|
|
3274
|
+
single: T.error
|
|
3275
|
+
}), N = !!(T.debouncedQuery || E.debouncedConfig || !D.isDebouncing || !O.isDebouncing || !k.isDebouncing), P = I((e) => {
|
|
3276
|
+
switch (S) {
|
|
3277
|
+
case "retention":
|
|
3278
|
+
k.execute(e);
|
|
3279
|
+
break;
|
|
3280
|
+
case "flow":
|
|
3281
|
+
O.refetch(e);
|
|
3282
|
+
break;
|
|
3283
|
+
case "funnel":
|
|
3284
|
+
D.execute(e);
|
|
3285
|
+
break;
|
|
3286
|
+
case "multi":
|
|
3287
|
+
E.refetch(e);
|
|
3288
|
+
break;
|
|
3289
|
+
default: T.refetch(e);
|
|
3290
|
+
}
|
|
3034
3291
|
}, [
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
|
|
3292
|
+
S,
|
|
3293
|
+
k,
|
|
3294
|
+
O,
|
|
3295
|
+
D,
|
|
3038
3296
|
E,
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
|
|
3047
|
-
|
|
3297
|
+
T
|
|
3298
|
+
]), F = R(() => Gn({
|
|
3299
|
+
hasResults: Hn(S, {
|
|
3300
|
+
retention: k.chartData,
|
|
3301
|
+
flow: O.data,
|
|
3302
|
+
funnel: D.chartData,
|
|
3303
|
+
multi: E.data,
|
|
3304
|
+
single: T.rawData
|
|
3305
|
+
}),
|
|
3306
|
+
initialData: o,
|
|
3307
|
+
isValidQuery: a,
|
|
3308
|
+
isLoading: ce,
|
|
3309
|
+
isFetching: j,
|
|
3310
|
+
error: M
|
|
3311
|
+
}), [
|
|
3048
3312
|
a,
|
|
3049
|
-
|
|
3050
|
-
|
|
3051
|
-
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
|
|
3056
|
-
|
|
3313
|
+
ce,
|
|
3314
|
+
j,
|
|
3315
|
+
M,
|
|
3316
|
+
T.rawData,
|
|
3317
|
+
E.data,
|
|
3318
|
+
D.chartData,
|
|
3319
|
+
O.data,
|
|
3320
|
+
k.chartData,
|
|
3057
3321
|
o,
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
|
|
3061
|
-
|
|
3062
|
-
|
|
3063
|
-
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3322
|
+
S
|
|
3323
|
+
]), pe = R(() => Kn({
|
|
3324
|
+
isRetentionMode: v,
|
|
3325
|
+
isFlowMode: _,
|
|
3326
|
+
isFunnelMode: g,
|
|
3327
|
+
isMultiMode: y,
|
|
3328
|
+
retentionChartData: k.chartData,
|
|
3329
|
+
flowData: O.data,
|
|
3330
|
+
funnelChartData: D.chartData,
|
|
3331
|
+
multiData: E.data,
|
|
3332
|
+
singleRawData: T.rawData,
|
|
3333
|
+
initialData: o
|
|
3334
|
+
}), [
|
|
3335
|
+
T.rawData,
|
|
3336
|
+
E.data,
|
|
3337
|
+
D.chartData,
|
|
3338
|
+
O.data,
|
|
3339
|
+
k.chartData,
|
|
3074
3340
|
o,
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
]),
|
|
3080
|
-
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
]),
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
3093
|
-
|
|
3094
|
-
|
|
3095
|
-
|
|
3341
|
+
y,
|
|
3342
|
+
g,
|
|
3343
|
+
_,
|
|
3344
|
+
v
|
|
3345
|
+
]), L = R(() => g && D.stepResults ? D.stepResults.map((e) => e.data) : !y || !E.perQueryData ? null : E.perQueryData, [
|
|
3346
|
+
y,
|
|
3347
|
+
g,
|
|
3348
|
+
E.perQueryData,
|
|
3349
|
+
D.stepResults
|
|
3350
|
+
]), { funnelExecutedQueries: z, funnelServerQuery: B, funnelDebugData: V, flowServerQuery: H, flowChartData: U, flowDebugData: me, retentionServerQuery: W, retentionChartData: he, retentionDebugData: ge } = Un({
|
|
3351
|
+
isFunnelMode: g,
|
|
3352
|
+
isFlowMode: _,
|
|
3353
|
+
isRetentionMode: v,
|
|
3354
|
+
funnelExecutedQueries: D.executedQueries,
|
|
3355
|
+
funnelServerQuery: D.serverQuery,
|
|
3356
|
+
funnelDebugData: A.debugData,
|
|
3357
|
+
flowServerQuery: O.serverQuery,
|
|
3358
|
+
flowData: O.data,
|
|
3359
|
+
flowDebugData: ae.debugData,
|
|
3360
|
+
retentionServerQuery: p ?? null,
|
|
3361
|
+
retentionChartData: k.chartData,
|
|
3362
|
+
retentionDebugData: se.debugData
|
|
3363
|
+
}), _e = R(() => Hn(S, {
|
|
3364
|
+
retention: k.needsRefresh,
|
|
3365
|
+
flow: O.needsRefresh,
|
|
3366
|
+
funnel: D.needsRefresh,
|
|
3367
|
+
multi: !1,
|
|
3368
|
+
single: T.needsRefresh
|
|
3369
|
+
}), [
|
|
3370
|
+
S,
|
|
3371
|
+
k.needsRefresh,
|
|
3372
|
+
O.needsRefresh,
|
|
3373
|
+
D.needsRefresh,
|
|
3374
|
+
T.needsRefresh
|
|
3375
|
+
]), ve = R(() => {
|
|
3376
|
+
if (b && T.warnings) return T.warnings;
|
|
3377
|
+
}, [b, T.warnings]);
|
|
3096
3378
|
return {
|
|
3097
|
-
executionStatus:
|
|
3098
|
-
executionResults:
|
|
3099
|
-
perQueryResults:
|
|
3100
|
-
isLoading:
|
|
3101
|
-
isFetching:
|
|
3102
|
-
error:
|
|
3103
|
-
debugDataPerQuery:
|
|
3104
|
-
hasDebounced:
|
|
3105
|
-
refetch:
|
|
3379
|
+
executionStatus: F,
|
|
3380
|
+
executionResults: pe,
|
|
3381
|
+
perQueryResults: L,
|
|
3382
|
+
isLoading: ce,
|
|
3383
|
+
isFetching: j,
|
|
3384
|
+
error: M,
|
|
3385
|
+
debugDataPerQuery: te.debugDataPerQuery,
|
|
3386
|
+
hasDebounced: N,
|
|
3387
|
+
refetch: P,
|
|
3106
3388
|
funnelExecutedQueries: z,
|
|
3107
|
-
funnelServerQuery:
|
|
3108
|
-
funnelDebugData:
|
|
3109
|
-
flowServerQuery:
|
|
3110
|
-
flowChartData:
|
|
3111
|
-
flowDebugData:
|
|
3112
|
-
retentionServerQuery:
|
|
3113
|
-
retentionChartData:
|
|
3114
|
-
retentionDebugData:
|
|
3115
|
-
retentionValidation:
|
|
3116
|
-
needsRefresh:
|
|
3117
|
-
warnings:
|
|
3389
|
+
funnelServerQuery: B,
|
|
3390
|
+
funnelDebugData: V,
|
|
3391
|
+
flowServerQuery: H,
|
|
3392
|
+
flowChartData: U,
|
|
3393
|
+
flowDebugData: me,
|
|
3394
|
+
retentionServerQuery: W,
|
|
3395
|
+
retentionChartData: he,
|
|
3396
|
+
retentionDebugData: ge,
|
|
3397
|
+
retentionValidation: m ?? null,
|
|
3398
|
+
needsRefresh: _e,
|
|
3399
|
+
warnings: ve
|
|
3118
3400
|
};
|
|
3119
3401
|
}
|
|
3120
3402
|
//#endregion
|
|
3121
3403
|
//#region src/client/hooks/useAnalysisChartDefaults.ts
|
|
3122
|
-
function
|
|
3123
|
-
let { externalColorPalette: t, combinedMetrics: r, combinedBreakdowns: i, hasDebounced: a } = e, o = $((e) => e.analysisType), { chartType: s, chartConfig: c, displayConfig: l } = $(n(
|
|
3124
|
-
if (o === "funnel")
|
|
3404
|
+
function Jn(e) {
|
|
3405
|
+
let { externalColorPalette: t, combinedMetrics: r, combinedBreakdowns: i, hasDebounced: a } = e, o = $((e) => e.analysisType), { chartType: s, chartConfig: c, displayConfig: l } = $(n(Tn)), u = $((e) => e.userManuallySelectedChart), d = $((e) => e.localPaletteName), p = $((e) => e.setChartTypeManual), m = $((e) => e.setChartConfig), h = $((e) => e.setDisplayConfig), g = $((e) => e.setFunnelChartType), _ = $((e) => e.setFunnelChartConfig), v = $((e) => e.setFunnelDisplayConfig), y = $((e) => e.setLocalPaletteName), b = $((e) => e.setUserManuallySelectedChart), x = I((e) => {
|
|
3406
|
+
if (o === "funnel") g(e);
|
|
3125
3407
|
else {
|
|
3126
|
-
|
|
3127
|
-
let { chartConfig: t } =
|
|
3128
|
-
|
|
3408
|
+
p(e);
|
|
3409
|
+
let { chartConfig: t } = Dt(r, i, e);
|
|
3410
|
+
m(t);
|
|
3129
3411
|
}
|
|
3130
3412
|
}, [
|
|
3131
3413
|
o,
|
|
3132
3414
|
r,
|
|
3133
3415
|
i,
|
|
3134
|
-
h,
|
|
3135
|
-
f,
|
|
3136
|
-
p
|
|
3137
|
-
]), x = R((e) => {
|
|
3138
|
-
o === "funnel" ? g(e) : p(e);
|
|
3139
|
-
}, [
|
|
3140
|
-
o,
|
|
3141
3416
|
g,
|
|
3142
|
-
p
|
|
3143
|
-
|
|
3417
|
+
p,
|
|
3418
|
+
m
|
|
3419
|
+
]), S = I((e) => {
|
|
3144
3420
|
o === "funnel" ? _(e) : m(e);
|
|
3145
3421
|
}, [
|
|
3146
3422
|
o,
|
|
3147
3423
|
_,
|
|
3148
3424
|
m
|
|
3149
|
-
]), C =
|
|
3425
|
+
]), C = I((e) => {
|
|
3426
|
+
o === "funnel" ? v(e) : h(e);
|
|
3427
|
+
}, [
|
|
3428
|
+
o,
|
|
3429
|
+
v,
|
|
3430
|
+
h
|
|
3431
|
+
]), w = R(() => Tt(r, i), [r, i]), T = R(() => t ? Array.isArray(t) && typeof t[0] == "string" ? {
|
|
3150
3432
|
name: "custom",
|
|
3151
3433
|
label: "Custom",
|
|
3152
3434
|
colors: t,
|
|
3153
3435
|
gradient: t
|
|
3154
|
-
} : t :
|
|
3155
|
-
return
|
|
3436
|
+
} : t : f(d), [t, d]), E = z("");
|
|
3437
|
+
return L(() => {
|
|
3156
3438
|
if (!a || r.length === 0 && i.length === 0) return;
|
|
3157
3439
|
let e = JSON.stringify({
|
|
3158
3440
|
metrics: r.map((e) => e.field),
|
|
@@ -3161,22 +3443,22 @@ function an(e) {
|
|
|
3161
3443
|
isTime: e.isTimeDimension
|
|
3162
3444
|
}))
|
|
3163
3445
|
});
|
|
3164
|
-
if (e ===
|
|
3165
|
-
|
|
3166
|
-
let t =
|
|
3446
|
+
if (e === E.current) return;
|
|
3447
|
+
E.current = e;
|
|
3448
|
+
let t = kt(r, i, s, u);
|
|
3167
3449
|
if (t) {
|
|
3168
|
-
let { chartConfig: e } =
|
|
3169
|
-
|
|
3450
|
+
let { chartConfig: e } = Dt(r, i, t);
|
|
3451
|
+
x(t), S(e), b(!1);
|
|
3170
3452
|
} else if (r.length > 0 || i.length > 0) {
|
|
3171
3453
|
if (s === "table") {
|
|
3172
3454
|
let e = [...i.map((e) => e.field), ...r.map((e) => e.field)], t = Array.isArray(c.xAxis) ? c.xAxis : [], n = e.filter((e) => !t.includes(e));
|
|
3173
|
-
n.length > 0 &&
|
|
3455
|
+
n.length > 0 && S({
|
|
3174
3456
|
...c,
|
|
3175
3457
|
xAxis: [...t, ...n]
|
|
3176
3458
|
});
|
|
3177
3459
|
} else if (!c.xAxis?.length && !c.yAxis?.length && !c.series?.length) {
|
|
3178
|
-
let { chartConfig: e } =
|
|
3179
|
-
|
|
3460
|
+
let { chartConfig: e } = Dt(r, i, s);
|
|
3461
|
+
S(e);
|
|
3180
3462
|
}
|
|
3181
3463
|
}
|
|
3182
3464
|
}, [
|
|
@@ -3186,27 +3468,27 @@ function an(e) {
|
|
|
3186
3468
|
s,
|
|
3187
3469
|
u,
|
|
3188
3470
|
c,
|
|
3189
|
-
b,
|
|
3190
3471
|
x,
|
|
3191
|
-
|
|
3472
|
+
S,
|
|
3473
|
+
b
|
|
3192
3474
|
]), {
|
|
3193
3475
|
chartType: s,
|
|
3194
3476
|
chartConfig: c,
|
|
3195
3477
|
displayConfig: l,
|
|
3196
|
-
colorPalette:
|
|
3478
|
+
colorPalette: T,
|
|
3197
3479
|
localPaletteName: d,
|
|
3198
|
-
chartAvailability:
|
|
3480
|
+
chartAvailability: w,
|
|
3199
3481
|
userManuallySelectedChart: u,
|
|
3200
|
-
setChartType:
|
|
3201
|
-
setChartConfig:
|
|
3202
|
-
setDisplayConfig:
|
|
3203
|
-
setLocalPaletteName:
|
|
3482
|
+
setChartType: x,
|
|
3483
|
+
setChartConfig: S,
|
|
3484
|
+
setDisplayConfig: C,
|
|
3485
|
+
setLocalPaletteName: y
|
|
3204
3486
|
};
|
|
3205
3487
|
}
|
|
3206
3488
|
//#endregion
|
|
3207
3489
|
//#region src/client/hooks/useAnalysisUIState.ts
|
|
3208
|
-
function
|
|
3209
|
-
let e = $((e) => e.activeTab), t = $((e) => e.activeView), n = $((e) => e.displayLimit), r = $((e) => e.showFieldModal), i = $((e) => e.fieldModalMode), a = $((e) => e.userManuallySelectedChart), o = $((e) => e.setActiveTab), s = $((e) => e.setActiveView), c = $((e) => e.setDisplayLimit), l = $((e) => e.closeFieldModal), [u, d] =
|
|
3490
|
+
function Yn() {
|
|
3491
|
+
let e = $((e) => e.activeTab), t = $((e) => e.activeView), n = $((e) => e.displayLimit), r = $((e) => e.showFieldModal), i = $((e) => e.fieldModalMode), a = $((e) => e.userManuallySelectedChart), o = $((e) => e.setActiveTab), s = $((e) => e.setActiveView), c = $((e) => e.setDisplayLimit), l = $((e) => e.closeFieldModal), [u, d] = B(0);
|
|
3210
3492
|
return {
|
|
3211
3493
|
activeTab: e,
|
|
3212
3494
|
activeView: t,
|
|
@@ -3224,42 +3506,42 @@ function on() {
|
|
|
3224
3506
|
}
|
|
3225
3507
|
//#endregion
|
|
3226
3508
|
//#region src/client/utils/shareUtils.ts
|
|
3227
|
-
var
|
|
3228
|
-
function
|
|
3229
|
-
return (0,
|
|
3509
|
+
var Xn = o(), Zn = 1800, Qn = "share=";
|
|
3510
|
+
function $n(e) {
|
|
3511
|
+
return (0, Xn.compressToEncodedURIComponent)(JSON.stringify(e));
|
|
3230
3512
|
}
|
|
3231
|
-
function
|
|
3513
|
+
function er(e) {
|
|
3232
3514
|
try {
|
|
3233
|
-
let t = (0,
|
|
3515
|
+
let t = (0, Xn.decompressFromEncodedURIComponent)(e);
|
|
3234
3516
|
if (!t) return null;
|
|
3235
3517
|
let n = JSON.parse(t);
|
|
3236
|
-
return
|
|
3518
|
+
return v(n) ? n : (console.warn("[shareUtils] Invalid AnalysisConfig in share URL"), null);
|
|
3237
3519
|
} catch {
|
|
3238
3520
|
return null;
|
|
3239
3521
|
}
|
|
3240
3522
|
}
|
|
3241
|
-
function
|
|
3242
|
-
let t =
|
|
3523
|
+
function tr(e) {
|
|
3524
|
+
let t = $n(e);
|
|
3243
3525
|
return {
|
|
3244
|
-
ok: t.length <=
|
|
3526
|
+
ok: t.length <= Zn,
|
|
3245
3527
|
size: t.length,
|
|
3246
|
-
maxSize:
|
|
3528
|
+
maxSize: Zn
|
|
3247
3529
|
};
|
|
3248
3530
|
}
|
|
3249
|
-
function
|
|
3250
|
-
let t =
|
|
3251
|
-
if (t.length <=
|
|
3531
|
+
function nr(e) {
|
|
3532
|
+
let t = $n(e);
|
|
3533
|
+
if (t.length <= Zn) return {
|
|
3252
3534
|
encoded: t,
|
|
3253
3535
|
queryOnly: !1
|
|
3254
3536
|
};
|
|
3255
|
-
let n =
|
|
3537
|
+
let n = $n({
|
|
3256
3538
|
version: e.version,
|
|
3257
3539
|
analysisType: e.analysisType,
|
|
3258
3540
|
activeView: e.activeView,
|
|
3259
3541
|
charts: {},
|
|
3260
3542
|
query: e.query
|
|
3261
3543
|
});
|
|
3262
|
-
return n.length <=
|
|
3544
|
+
return n.length <= Zn ? {
|
|
3263
3545
|
encoded: n,
|
|
3264
3546
|
queryOnly: !0
|
|
3265
3547
|
} : {
|
|
@@ -3267,40 +3549,40 @@ function pn(e) {
|
|
|
3267
3549
|
queryOnly: !0
|
|
3268
3550
|
};
|
|
3269
3551
|
}
|
|
3270
|
-
function
|
|
3271
|
-
let { encoded: t } =
|
|
3272
|
-
return t ? `${window.location.origin}${window.location.pathname}#${
|
|
3552
|
+
function rr(e) {
|
|
3553
|
+
let { encoded: t } = nr(e);
|
|
3554
|
+
return t ? `${window.location.origin}${window.location.pathname}#${Qn}${t}` : null;
|
|
3273
3555
|
}
|
|
3274
|
-
function
|
|
3556
|
+
function ir() {
|
|
3275
3557
|
if (typeof window > "u") return null;
|
|
3276
3558
|
let e = window.location.hash;
|
|
3277
|
-
return !e || !e.startsWith(`#${
|
|
3559
|
+
return !e || !e.startsWith(`#${Qn}`) ? null : e.slice(7);
|
|
3278
3560
|
}
|
|
3279
|
-
function
|
|
3561
|
+
function ar() {
|
|
3280
3562
|
if (typeof window > "u") return;
|
|
3281
3563
|
let e = new URL(window.location.href);
|
|
3282
3564
|
e.hash = "", window.history.replaceState(null, "", e.toString());
|
|
3283
3565
|
}
|
|
3284
|
-
function
|
|
3285
|
-
let e =
|
|
3286
|
-
return e ?
|
|
3566
|
+
function or() {
|
|
3567
|
+
let e = ir();
|
|
3568
|
+
return e ? er(e) : null;
|
|
3287
3569
|
}
|
|
3288
3570
|
//#endregion
|
|
3289
3571
|
//#region src/client/hooks/useAnalysisInitialization.ts
|
|
3290
|
-
function
|
|
3291
|
-
let { currentQuery: t, isValidQuery: n, chartType: r, chartConfig: i, displayConfig: a, onQueryChange: o, onChartConfigChange: s } = e, c = $((e) => e.load), l =
|
|
3292
|
-
|
|
3572
|
+
function sr(e) {
|
|
3573
|
+
let { currentQuery: t, isValidQuery: n, chartType: r, chartConfig: i, displayConfig: a, onQueryChange: o, onChartConfigChange: s } = e, c = $((e) => e.load), l = z(!1);
|
|
3574
|
+
L(() => {
|
|
3293
3575
|
if (l.current) return;
|
|
3294
3576
|
l.current = !0;
|
|
3295
|
-
let e =
|
|
3296
|
-
e && (c(e),
|
|
3297
|
-
}, [c]),
|
|
3577
|
+
let e = or();
|
|
3578
|
+
e && (c(e), ar());
|
|
3579
|
+
}, [c]), L(() => {
|
|
3298
3580
|
o && n && o(t);
|
|
3299
3581
|
}, [
|
|
3300
3582
|
t,
|
|
3301
3583
|
n,
|
|
3302
3584
|
o
|
|
3303
|
-
]),
|
|
3585
|
+
]), L(() => {
|
|
3304
3586
|
s && s({
|
|
3305
3587
|
chartType: r,
|
|
3306
3588
|
chartConfig: i,
|
|
@@ -3315,99 +3597,99 @@ function vn(e) {
|
|
|
3315
3597
|
}
|
|
3316
3598
|
//#endregion
|
|
3317
3599
|
//#region src/client/hooks/useAnalysisBuilderHook.ts
|
|
3318
|
-
function
|
|
3319
|
-
let { initialData: t, externalColorPalette: n, onQueryChange: r, onChartConfigChange: i } = e, { features: a } =
|
|
3320
|
-
queryState:
|
|
3321
|
-
queryStates:
|
|
3322
|
-
isMultiQueryMode:
|
|
3323
|
-
mergeStrategy:
|
|
3324
|
-
activeQueryIndex:
|
|
3325
|
-
}), u = $((e) => e.funnelBindingKey), d = $((e) => e.analysisType), f = $((e) => e.funnelCube), p = $((e) => e.funnelSteps), m = $((e) => e.activeFunnelStepIndex), h = $((e) => e.funnelTimeDimension), g =
|
|
3600
|
+
function cr(e = {}) {
|
|
3601
|
+
let { initialData: t, externalColorPalette: n, onQueryChange: r, onChartConfigChange: i } = e, { features: a } = s(), o = bn(), c = zn(), l = Bn({
|
|
3602
|
+
queryState: c.queryState,
|
|
3603
|
+
queryStates: c.queryStates,
|
|
3604
|
+
isMultiQueryMode: c.isMultiQueryMode,
|
|
3605
|
+
mergeStrategy: c.mergeStrategy,
|
|
3606
|
+
activeQueryIndex: c.activeQueryIndex
|
|
3607
|
+
}), u = $((e) => e.funnelBindingKey), d = $((e) => e.analysisType), f = $((e) => e.funnelCube), p = $((e) => e.funnelSteps), m = $((e) => e.activeFunnelStepIndex), h = $((e) => e.funnelTimeDimension), g = R(() => d !== "funnel" || !u?.dimension || !h || !p || p.length < 2 ? !1 : p.every((e) => e.filters.length > 0), [
|
|
3326
3608
|
d,
|
|
3327
3609
|
u,
|
|
3328
3610
|
h,
|
|
3329
3611
|
p
|
|
3330
|
-
]), _ = $((e) => e.charts.funnel?.chartType) || "funnel", v = $((e) => e.charts.funnel?.chartConfig), y =
|
|
3612
|
+
]), _ = $((e) => e.charts.funnel?.chartType) || "funnel", v = $((e) => e.charts.funnel?.chartConfig), y = R(() => v || {}, [v]), b = $((e) => e.flowCube), x = $((e) => e.flowBindingKey), S = $((e) => e.flowTimeDimension), C = $((e) => e.eventDimension), w = $((e) => e.startingStep), T = $((e) => e.stepsBefore), E = $((e) => e.stepsAfter), D = $((e) => e.joinStrategy), ee = $((e) => e.charts.flow?.displayConfig), O = R(() => ee || {
|
|
3331
3613
|
showLegend: !0,
|
|
3332
3614
|
showGrid: !0,
|
|
3333
3615
|
showTooltip: !0
|
|
3334
|
-
}, [
|
|
3616
|
+
}, [ee]), k = $((e) => e.charts.flow?.chartType) || "sankey", te = $((e) => e.buildFunnelQueryFromSteps), ne = R(() => d === "funnel" ? te() : null, [
|
|
3335
3617
|
d,
|
|
3336
|
-
|
|
3618
|
+
te,
|
|
3337
3619
|
p
|
|
3338
|
-
]), A = $((e) => e.buildFlowQuery),
|
|
3620
|
+
]), A = $((e) => e.buildFlowQuery), re = R(() => d === "flow" ? A() : null, [
|
|
3339
3621
|
d,
|
|
3340
3622
|
A,
|
|
3341
3623
|
b,
|
|
3342
3624
|
x,
|
|
3343
3625
|
S,
|
|
3344
3626
|
C,
|
|
3345
|
-
ee,
|
|
3346
3627
|
w,
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3628
|
+
T,
|
|
3629
|
+
E,
|
|
3630
|
+
k,
|
|
3631
|
+
D
|
|
3632
|
+
]), ie = $((e) => e.retentionCube), ae = $((e) => e.retentionBindingKey), oe = $((e) => e.retentionTimeDimension), se = $((e) => e.retentionDateRange), ce = $((e) => e.retentionCohortFilters), le = $((e) => e.retentionActivityFilters), ue = $((e) => e.retentionBreakdowns), de = $((e) => e.retentionViewGranularity), fe = $((e) => e.retentionPeriods), j = $((e) => e.retentionType), M = $((e) => e.buildRetentionQuery), N = $((e) => e.getRetentionValidation), P = $((e) => e.charts.retention?.displayConfig), F = $((e) => e.setRetentionCube), pe = $((e) => e.setRetentionBindingKey), L = $((e) => e.setRetentionTimeDimension), B = $((e) => e.setRetentionDateRange), V = $((e) => e.setRetentionCohortFilters), H = $((e) => e.setRetentionActivityFilters), U = $((e) => e.setRetentionBreakdowns), me = $((e) => e.addRetentionBreakdown), W = $((e) => e.removeRetentionBreakdown), he = $((e) => e.setRetentionViewGranularity), ge = $((e) => e.setRetentionPeriods), _e = $((e) => e.setRetentionType), ve = R(() => d === "retention" ? M() : null, [
|
|
3351
3633
|
d,
|
|
3352
|
-
I,
|
|
3353
3634
|
M,
|
|
3354
|
-
|
|
3355
|
-
|
|
3356
|
-
re,
|
|
3635
|
+
ie,
|
|
3636
|
+
ae,
|
|
3357
3637
|
oe,
|
|
3358
3638
|
se,
|
|
3359
|
-
|
|
3639
|
+
ue,
|
|
3640
|
+
de,
|
|
3641
|
+
fe,
|
|
3642
|
+
j,
|
|
3360
3643
|
ce,
|
|
3361
|
-
|
|
3362
|
-
|
|
3363
|
-
]), ve = B(() => d === "retention" ? le() : null, [
|
|
3644
|
+
le
|
|
3645
|
+
]), ye = R(() => d === "retention" ? N() : null, [
|
|
3364
3646
|
d,
|
|
3365
|
-
le,
|
|
3366
|
-
M,
|
|
3367
3647
|
N,
|
|
3368
|
-
|
|
3369
|
-
|
|
3370
|
-
|
|
3648
|
+
ie,
|
|
3649
|
+
ae,
|
|
3650
|
+
oe,
|
|
3651
|
+
se
|
|
3652
|
+
]), G = R(() => d === "retention" ? ve !== null : d === "flow" ? re !== null : d === "funnel" ? ne !== null : c.isValidQuery ?? !1, [
|
|
3371
3653
|
d,
|
|
3372
|
-
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
]),
|
|
3377
|
-
currentQuery:
|
|
3378
|
-
allQueries:
|
|
3379
|
-
multiQueryConfig:
|
|
3380
|
-
isMultiQueryMode:
|
|
3381
|
-
isValidQuery:
|
|
3654
|
+
ve,
|
|
3655
|
+
re,
|
|
3656
|
+
ne,
|
|
3657
|
+
c.isValidQuery
|
|
3658
|
+
]), K = qn({
|
|
3659
|
+
currentQuery: c.currentQuery,
|
|
3660
|
+
allQueries: c.allQueries,
|
|
3661
|
+
multiQueryConfig: c.multiQueryConfig,
|
|
3662
|
+
isMultiQueryMode: c.isMultiQueryMode,
|
|
3663
|
+
isValidQuery: G,
|
|
3382
3664
|
initialData: t,
|
|
3383
|
-
mergeStrategy:
|
|
3665
|
+
mergeStrategy: c.mergeStrategy,
|
|
3384
3666
|
funnelBindingKey: u,
|
|
3385
3667
|
isFunnelModeEnabled: g,
|
|
3386
3668
|
analysisType: d,
|
|
3387
|
-
serverFunnelQuery:
|
|
3388
|
-
serverFlowQuery:
|
|
3389
|
-
serverRetentionQuery:
|
|
3390
|
-
retentionValidation:
|
|
3391
|
-
}),
|
|
3669
|
+
serverFunnelQuery: ne,
|
|
3670
|
+
serverFlowQuery: re,
|
|
3671
|
+
serverRetentionQuery: ve,
|
|
3672
|
+
retentionValidation: ye
|
|
3673
|
+
}), q = Jn({
|
|
3392
3674
|
externalColorPalette: n,
|
|
3393
3675
|
combinedMetrics: l.combinedMetrics,
|
|
3394
3676
|
combinedBreakdowns: l.combinedBreakdowns,
|
|
3395
|
-
hasDebounced:
|
|
3396
|
-
}),
|
|
3397
|
-
|
|
3398
|
-
currentQuery:
|
|
3399
|
-
isValidQuery:
|
|
3400
|
-
chartType:
|
|
3401
|
-
chartConfig:
|
|
3402
|
-
displayConfig:
|
|
3677
|
+
hasDebounced: K.hasDebounced
|
|
3678
|
+
}), J = Yn();
|
|
3679
|
+
sr({
|
|
3680
|
+
currentQuery: c.currentQuery,
|
|
3681
|
+
isValidQuery: c.isValidQuery ?? !1,
|
|
3682
|
+
chartType: q.chartType,
|
|
3683
|
+
chartConfig: q.chartConfig,
|
|
3684
|
+
displayConfig: q.displayConfig,
|
|
3403
3685
|
onQueryChange: r,
|
|
3404
3686
|
onChartConfigChange: i
|
|
3405
3687
|
});
|
|
3406
|
-
let
|
|
3688
|
+
let be = $((e) => e.openMetricsModal), xe = $((e) => e.addMetric), Se = $((e) => e.removeMetric), Ce = $((e) => e.toggleMetric), we = $((e) => e.reorderMetrics), Te = $((e) => e.openBreakdownsModal), Ee = $((e) => e.addBreakdown), De = $((e) => e.removeBreakdown), Oe = $((e) => e.toggleBreakdown), ke = $((e) => e.setBreakdownGranularity), Ae = $((e) => e.toggleBreakdownComparison), je = $((e) => e.reorderBreakdowns), Me = $((e) => e.setFilters), Ne = $((e) => e.dropFieldToFilter), Pe = $((e) => e.setOrder), Fe = $((e) => e.setLimit), Ie = $((e) => e.clearQuery), Le = $((e) => e.clearCurrentMode), Re = $((e) => e.setFunnelBindingKey), ze = $((e) => e.setAnalysisType), Be = $((e) => e.setFunnelCube), Ve = $((e) => e.addFunnelStep), He = $((e) => e.removeFunnelStep), Ue = $((e) => e.updateFunnelStep), We = $((e) => e.setActiveFunnelStepIndex), Ge = $((e) => e.reorderFunnelSteps), Ke = $((e) => e.setFunnelTimeDimension), qe = $((e) => e.charts.funnel?.displayConfig), Je = R(() => qe || {
|
|
3407
3689
|
showLegend: !0,
|
|
3408
3690
|
showGrid: !0,
|
|
3409
3691
|
showTooltip: !0
|
|
3410
|
-
}, [
|
|
3692
|
+
}, [qe]), Y = $((e) => e.setFunnelDisplayConfig), Ye = $((e) => e.setFlowCube), Xe = $((e) => e.setFlowBindingKey), Ze = $((e) => e.setFlowTimeDimension), Qe = $((e) => e.setEventDimension), $e = $((e) => e.setStartingStepName), et = $((e) => e.setStartingStepFilters), tt = $((e) => e.setStepsBefore), nt = $((e) => e.setStepsAfter), rt = $((e) => e.setJoinStrategy), it = I((e) => {
|
|
3411
3693
|
o.setState((t) => ({ charts: {
|
|
3412
3694
|
...t.charts,
|
|
3413
3695
|
flow: {
|
|
@@ -3419,7 +3701,7 @@ function yn(e = {}) {
|
|
|
3419
3701
|
displayConfig: e
|
|
3420
3702
|
}
|
|
3421
3703
|
} }));
|
|
3422
|
-
}, [o]), at =
|
|
3704
|
+
}, [o]), at = I((e) => {
|
|
3423
3705
|
o.setState((t) => ({ charts: {
|
|
3424
3706
|
...t.charts,
|
|
3425
3707
|
retention: {
|
|
@@ -3431,9 +3713,9 @@ function yn(e = {}) {
|
|
|
3431
3713
|
displayConfig: e
|
|
3432
3714
|
}
|
|
3433
3715
|
} }));
|
|
3434
|
-
}, [o]), ot = $((e) => e.aiState), st = $((e) => e.openAI), ct = $((e) => e.closeAI), lt = $((e) => e.setAIPrompt), ut = $((e) => e.setAIGenerating), dt = $((e) => e.setAIError), ft = $((e) => e.setAIHasGeneratedQuery), pt = $((e) => e.saveAIPreviousState), mt = $((e) => e.restoreAIPreviousState), ht =
|
|
3435
|
-
|
|
3436
|
-
|
|
3716
|
+
}, [o]), ot = $((e) => e.aiState), st = $((e) => e.openAI), ct = $((e) => e.closeAI), lt = $((e) => e.setAIPrompt), ut = $((e) => e.setAIGenerating), dt = $((e) => e.setAIError), ft = $((e) => e.setAIHasGeneratedQuery), pt = $((e) => e.saveAIPreviousState), mt = $((e) => e.restoreAIPreviousState), ht = z("idle"), gt = G, _t = $((e) => e.getValidation), vt = R(() => _t(), [
|
|
3717
|
+
_t,
|
|
3718
|
+
c.queryStates,
|
|
3437
3719
|
d,
|
|
3438
3720
|
p,
|
|
3439
3721
|
u,
|
|
@@ -3442,19 +3724,23 @@ function yn(e = {}) {
|
|
|
3442
3724
|
x,
|
|
3443
3725
|
S,
|
|
3444
3726
|
C,
|
|
3445
|
-
ee,
|
|
3446
3727
|
w,
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
|
|
3728
|
+
T,
|
|
3729
|
+
E,
|
|
3730
|
+
D
|
|
3731
|
+
]), yt = I((e, t) => {
|
|
3732
|
+
d === "retention" && t === "dimension" ? me({ field: e.name }) : Oe(e.name, t === "timeDimension");
|
|
3451
3733
|
}, [
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3734
|
+
d,
|
|
3735
|
+
me,
|
|
3736
|
+
Oe
|
|
3737
|
+
]), bt = I((e, t, n, r) => {
|
|
3738
|
+
J.fieldModalMode === "metrics" && t === "measure" ? Ce(e.name) : J.fieldModalMode === "breakdown" && yt(e, t), r || J.closeFieldModal();
|
|
3739
|
+
}, [
|
|
3740
|
+
J,
|
|
3741
|
+
Ce,
|
|
3742
|
+
yt
|
|
3743
|
+
]), xt = I(async () => {
|
|
3458
3744
|
if (a?.aiEndpoint) {
|
|
3459
3745
|
pt(), ut(!0), dt(null);
|
|
3460
3746
|
try {
|
|
@@ -3471,15 +3757,15 @@ function yn(e = {}) {
|
|
|
3471
3757
|
ut,
|
|
3472
3758
|
dt,
|
|
3473
3759
|
ft
|
|
3474
|
-
]),
|
|
3760
|
+
]), St = I(() => {
|
|
3475
3761
|
ct(), ft(!1);
|
|
3476
|
-
}, [ct, ft]),
|
|
3762
|
+
}, [ct, ft]), Ct = I(() => {
|
|
3477
3763
|
mt(), ct();
|
|
3478
|
-
}, [mt, ct]),
|
|
3764
|
+
}, [mt, ct]), wt = I(async () => {
|
|
3479
3765
|
ht.current = "copied", setTimeout(() => {
|
|
3480
3766
|
ht.current = "idle";
|
|
3481
3767
|
}, 2e3);
|
|
3482
|
-
}, []),
|
|
3768
|
+
}, []), Tt = I(() => {
|
|
3483
3769
|
let e = o.getState();
|
|
3484
3770
|
return e.analysisType === "funnel" ? e.buildFunnelQueryFromSteps() || e.buildCurrentQuery() : e.queryStates.length > 1 ? {
|
|
3485
3771
|
queries: e.buildAllQueries(),
|
|
@@ -3489,34 +3775,34 @@ function yn(e = {}) {
|
|
|
3489
3775
|
funnelBindingKey: e.funnelBindingKey,
|
|
3490
3776
|
stepTimeToConvert: e.stepTimeToConvert
|
|
3491
3777
|
} : e.buildCurrentQuery();
|
|
3492
|
-
}, [o]),
|
|
3778
|
+
}, [o]), Et = I(() => {
|
|
3493
3779
|
let e = o.getState(), t = e.charts[e.analysisType];
|
|
3494
3780
|
return t ? {
|
|
3495
3781
|
chartType: t.chartType,
|
|
3496
3782
|
chartConfig: t.chartConfig,
|
|
3497
3783
|
displayConfig: t.displayConfig
|
|
3498
3784
|
} : {
|
|
3499
|
-
chartType:
|
|
3500
|
-
chartConfig:
|
|
3501
|
-
displayConfig:
|
|
3785
|
+
chartType: q.chartType,
|
|
3786
|
+
chartConfig: q.chartConfig,
|
|
3787
|
+
displayConfig: q.displayConfig
|
|
3502
3788
|
};
|
|
3503
3789
|
}, [
|
|
3504
3790
|
o,
|
|
3505
|
-
|
|
3506
|
-
|
|
3507
|
-
|
|
3508
|
-
]),
|
|
3791
|
+
q.chartType,
|
|
3792
|
+
q.chartConfig,
|
|
3793
|
+
q.displayConfig
|
|
3794
|
+
]), Dt = I(() => o.getState().analysisType, [o]);
|
|
3509
3795
|
return {
|
|
3510
|
-
queryState:
|
|
3511
|
-
queryStates:
|
|
3512
|
-
activeQueryIndex:
|
|
3513
|
-
mergeStrategy:
|
|
3514
|
-
isMultiQueryMode:
|
|
3515
|
-
mergeKeys:
|
|
3516
|
-
currentQuery:
|
|
3517
|
-
allQueries:
|
|
3518
|
-
multiQueryConfig:
|
|
3519
|
-
multiQueryValidation:
|
|
3796
|
+
queryState: c.queryState,
|
|
3797
|
+
queryStates: c.queryStates,
|
|
3798
|
+
activeQueryIndex: c.activeQueryIndex,
|
|
3799
|
+
mergeStrategy: c.mergeStrategy,
|
|
3800
|
+
isMultiQueryMode: c.isMultiQueryMode,
|
|
3801
|
+
mergeKeys: c.mergeKeys,
|
|
3802
|
+
currentQuery: c.currentQuery,
|
|
3803
|
+
allQueries: c.allQueries,
|
|
3804
|
+
multiQueryConfig: c.multiQueryConfig,
|
|
3805
|
+
multiQueryValidation: c.multiQueryValidation,
|
|
3520
3806
|
funnelBindingKey: u,
|
|
3521
3807
|
isFunnelModeEnabled: g,
|
|
3522
3808
|
analysisType: d,
|
|
@@ -3526,62 +3812,62 @@ function yn(e = {}) {
|
|
|
3526
3812
|
funnelTimeDimension: h,
|
|
3527
3813
|
funnelChartType: _,
|
|
3528
3814
|
funnelChartConfig: y,
|
|
3529
|
-
funnelDisplayConfig:
|
|
3815
|
+
funnelDisplayConfig: Je,
|
|
3530
3816
|
flowCube: b,
|
|
3531
3817
|
flowBindingKey: x,
|
|
3532
3818
|
flowTimeDimension: S,
|
|
3533
3819
|
eventDimension: C,
|
|
3534
|
-
startingStep:
|
|
3535
|
-
stepsBefore:
|
|
3536
|
-
stepsAfter:
|
|
3537
|
-
joinStrategy:
|
|
3538
|
-
flowDisplayConfig:
|
|
3539
|
-
retentionCube:
|
|
3540
|
-
retentionBindingKey:
|
|
3541
|
-
retentionTimeDimension:
|
|
3542
|
-
retentionDateRange:
|
|
3543
|
-
retentionCohortFilters:
|
|
3544
|
-
retentionActivityFilters:
|
|
3545
|
-
retentionBreakdowns:
|
|
3546
|
-
retentionViewGranularity:
|
|
3547
|
-
retentionPeriods:
|
|
3548
|
-
retentionType:
|
|
3549
|
-
retentionDisplayConfig:
|
|
3550
|
-
executionStatus:
|
|
3551
|
-
executionResults:
|
|
3552
|
-
perQueryResults:
|
|
3553
|
-
isLoading:
|
|
3554
|
-
isFetching:
|
|
3555
|
-
error:
|
|
3556
|
-
isValidQuery:
|
|
3557
|
-
debugDataPerQuery:
|
|
3558
|
-
needsRefresh:
|
|
3559
|
-
warnings:
|
|
3560
|
-
funnelExecutedQueries:
|
|
3561
|
-
funnelServerQuery:
|
|
3562
|
-
funnelDebugData:
|
|
3563
|
-
flowServerQuery:
|
|
3564
|
-
flowDebugData:
|
|
3565
|
-
retentionServerQuery:
|
|
3566
|
-
retentionDebugData:
|
|
3567
|
-
retentionChartData:
|
|
3568
|
-
retentionValidation:
|
|
3569
|
-
chartType:
|
|
3570
|
-
chartConfig:
|
|
3571
|
-
displayConfig:
|
|
3572
|
-
colorPalette:
|
|
3573
|
-
localPaletteName:
|
|
3574
|
-
chartAvailability:
|
|
3820
|
+
startingStep: w,
|
|
3821
|
+
stepsBefore: T,
|
|
3822
|
+
stepsAfter: E,
|
|
3823
|
+
joinStrategy: D,
|
|
3824
|
+
flowDisplayConfig: O,
|
|
3825
|
+
retentionCube: ie,
|
|
3826
|
+
retentionBindingKey: ae,
|
|
3827
|
+
retentionTimeDimension: oe,
|
|
3828
|
+
retentionDateRange: se,
|
|
3829
|
+
retentionCohortFilters: ce,
|
|
3830
|
+
retentionActivityFilters: le,
|
|
3831
|
+
retentionBreakdowns: ue,
|
|
3832
|
+
retentionViewGranularity: de,
|
|
3833
|
+
retentionPeriods: fe,
|
|
3834
|
+
retentionType: j,
|
|
3835
|
+
retentionDisplayConfig: P,
|
|
3836
|
+
executionStatus: K.executionStatus,
|
|
3837
|
+
executionResults: K.executionResults,
|
|
3838
|
+
perQueryResults: K.perQueryResults,
|
|
3839
|
+
isLoading: K.isLoading,
|
|
3840
|
+
isFetching: K.isFetching,
|
|
3841
|
+
error: K.error,
|
|
3842
|
+
isValidQuery: G,
|
|
3843
|
+
debugDataPerQuery: K.debugDataPerQuery,
|
|
3844
|
+
needsRefresh: K.needsRefresh,
|
|
3845
|
+
warnings: K.warnings,
|
|
3846
|
+
funnelExecutedQueries: K.funnelExecutedQueries,
|
|
3847
|
+
funnelServerQuery: K.funnelServerQuery,
|
|
3848
|
+
funnelDebugData: K.funnelDebugData,
|
|
3849
|
+
flowServerQuery: K.flowServerQuery,
|
|
3850
|
+
flowDebugData: K.flowDebugData,
|
|
3851
|
+
retentionServerQuery: K.retentionServerQuery,
|
|
3852
|
+
retentionDebugData: K.retentionDebugData,
|
|
3853
|
+
retentionChartData: K.retentionChartData,
|
|
3854
|
+
retentionValidation: K.retentionValidation,
|
|
3855
|
+
chartType: q.chartType,
|
|
3856
|
+
chartConfig: q.chartConfig,
|
|
3857
|
+
displayConfig: q.displayConfig,
|
|
3858
|
+
colorPalette: q.colorPalette,
|
|
3859
|
+
localPaletteName: q.localPaletteName,
|
|
3860
|
+
chartAvailability: q.chartAvailability,
|
|
3575
3861
|
combinedMetrics: l.combinedMetrics,
|
|
3576
3862
|
combinedBreakdowns: l.combinedBreakdowns,
|
|
3577
3863
|
effectiveBreakdowns: l.effectiveBreakdowns,
|
|
3578
|
-
activeTab:
|
|
3579
|
-
activeView:
|
|
3580
|
-
displayLimit:
|
|
3581
|
-
showFieldModal:
|
|
3582
|
-
fieldModalMode:
|
|
3583
|
-
activeTableIndex:
|
|
3584
|
-
userManuallySelectedChart:
|
|
3864
|
+
activeTab: J.activeTab,
|
|
3865
|
+
activeView: J.activeView,
|
|
3866
|
+
displayLimit: J.displayLimit,
|
|
3867
|
+
showFieldModal: J.showFieldModal,
|
|
3868
|
+
fieldModalMode: J.fieldModalMode,
|
|
3869
|
+
activeTableIndex: J.activeTableIndex,
|
|
3870
|
+
userManuallySelectedChart: J.userManuallySelectedChart,
|
|
3585
3871
|
aiState: {
|
|
3586
3872
|
isOpen: ot.isOpen,
|
|
3587
3873
|
userPrompt: ot.userPrompt,
|
|
@@ -3590,39 +3876,39 @@ function yn(e = {}) {
|
|
|
3590
3876
|
hasGeneratedQuery: ot.hasGeneratedQuery
|
|
3591
3877
|
},
|
|
3592
3878
|
shareButtonState: ht.current,
|
|
3593
|
-
canShare:
|
|
3594
|
-
adapterValidation:
|
|
3879
|
+
canShare: gt,
|
|
3880
|
+
adapterValidation: vt,
|
|
3595
3881
|
actions: {
|
|
3596
|
-
setActiveQueryIndex:
|
|
3597
|
-
setMergeStrategy:
|
|
3598
|
-
openMetricsModal:
|
|
3599
|
-
addMetric:
|
|
3600
|
-
removeMetric:
|
|
3601
|
-
toggleMetric:
|
|
3602
|
-
reorderMetrics:
|
|
3603
|
-
openBreakdownsModal:
|
|
3604
|
-
addBreakdown:
|
|
3605
|
-
removeBreakdown:
|
|
3606
|
-
toggleBreakdown:
|
|
3607
|
-
setBreakdownGranularity:
|
|
3608
|
-
toggleBreakdownComparison:
|
|
3609
|
-
reorderBreakdowns:
|
|
3610
|
-
setFilters:
|
|
3611
|
-
dropFieldToFilter:
|
|
3612
|
-
setOrder:
|
|
3613
|
-
setLimit:
|
|
3614
|
-
addQuery:
|
|
3615
|
-
removeQuery:
|
|
3616
|
-
setFunnelBindingKey:
|
|
3617
|
-
setAnalysisType:
|
|
3618
|
-
setFunnelCube:
|
|
3619
|
-
addFunnelStep:
|
|
3620
|
-
removeFunnelStep:
|
|
3621
|
-
updateFunnelStep:
|
|
3622
|
-
setActiveFunnelStepIndex:
|
|
3623
|
-
reorderFunnelSteps:
|
|
3624
|
-
setFunnelTimeDimension:
|
|
3625
|
-
setFunnelDisplayConfig:
|
|
3882
|
+
setActiveQueryIndex: c.setActiveQueryIndex,
|
|
3883
|
+
setMergeStrategy: c.setMergeStrategy,
|
|
3884
|
+
openMetricsModal: be,
|
|
3885
|
+
addMetric: xe,
|
|
3886
|
+
removeMetric: Se,
|
|
3887
|
+
toggleMetric: Ce,
|
|
3888
|
+
reorderMetrics: we,
|
|
3889
|
+
openBreakdownsModal: Te,
|
|
3890
|
+
addBreakdown: Ee,
|
|
3891
|
+
removeBreakdown: De,
|
|
3892
|
+
toggleBreakdown: Oe,
|
|
3893
|
+
setBreakdownGranularity: ke,
|
|
3894
|
+
toggleBreakdownComparison: Ae,
|
|
3895
|
+
reorderBreakdowns: je,
|
|
3896
|
+
setFilters: Me,
|
|
3897
|
+
dropFieldToFilter: Ne,
|
|
3898
|
+
setOrder: Pe,
|
|
3899
|
+
setLimit: Fe,
|
|
3900
|
+
addQuery: c.addQuery,
|
|
3901
|
+
removeQuery: c.removeQuery,
|
|
3902
|
+
setFunnelBindingKey: Re,
|
|
3903
|
+
setAnalysisType: ze,
|
|
3904
|
+
setFunnelCube: Be,
|
|
3905
|
+
addFunnelStep: Ve,
|
|
3906
|
+
removeFunnelStep: He,
|
|
3907
|
+
updateFunnelStep: Ue,
|
|
3908
|
+
setActiveFunnelStepIndex: We,
|
|
3909
|
+
reorderFunnelSteps: Ge,
|
|
3910
|
+
setFunnelTimeDimension: Ke,
|
|
3911
|
+
setFunnelDisplayConfig: Y,
|
|
3626
3912
|
setFlowCube: Ye,
|
|
3627
3913
|
setFlowBindingKey: Xe,
|
|
3628
3914
|
setFlowTimeDimension: Ze,
|
|
@@ -3633,48 +3919,48 @@ function yn(e = {}) {
|
|
|
3633
3919
|
setStepsAfter: nt,
|
|
3634
3920
|
setJoinStrategy: rt,
|
|
3635
3921
|
setFlowDisplayConfig: it,
|
|
3636
|
-
setRetentionCube:
|
|
3637
|
-
setRetentionBindingKey:
|
|
3638
|
-
setRetentionTimeDimension:
|
|
3639
|
-
setRetentionDateRange:
|
|
3640
|
-
setRetentionCohortFilters:
|
|
3641
|
-
setRetentionActivityFilters:
|
|
3642
|
-
setRetentionBreakdowns:
|
|
3643
|
-
addRetentionBreakdown:
|
|
3644
|
-
removeRetentionBreakdown:
|
|
3645
|
-
setRetentionViewGranularity:
|
|
3646
|
-
setRetentionPeriods:
|
|
3647
|
-
setRetentionType:
|
|
3922
|
+
setRetentionCube: F,
|
|
3923
|
+
setRetentionBindingKey: pe,
|
|
3924
|
+
setRetentionTimeDimension: L,
|
|
3925
|
+
setRetentionDateRange: B,
|
|
3926
|
+
setRetentionCohortFilters: V,
|
|
3927
|
+
setRetentionActivityFilters: H,
|
|
3928
|
+
setRetentionBreakdowns: U,
|
|
3929
|
+
addRetentionBreakdown: me,
|
|
3930
|
+
removeRetentionBreakdown: W,
|
|
3931
|
+
setRetentionViewGranularity: he,
|
|
3932
|
+
setRetentionPeriods: ge,
|
|
3933
|
+
setRetentionType: _e,
|
|
3648
3934
|
setRetentionDisplayConfig: at,
|
|
3649
|
-
setChartType:
|
|
3650
|
-
setChartConfig:
|
|
3651
|
-
setDisplayConfig:
|
|
3652
|
-
setLocalPaletteName:
|
|
3653
|
-
setActiveTab:
|
|
3654
|
-
setActiveView:
|
|
3655
|
-
setDisplayLimit:
|
|
3656
|
-
closeFieldModal:
|
|
3657
|
-
setActiveTableIndex:
|
|
3935
|
+
setChartType: q.setChartType,
|
|
3936
|
+
setChartConfig: q.setChartConfig,
|
|
3937
|
+
setDisplayConfig: q.setDisplayConfig,
|
|
3938
|
+
setLocalPaletteName: q.setLocalPaletteName,
|
|
3939
|
+
setActiveTab: J.setActiveTab,
|
|
3940
|
+
setActiveView: J.setActiveView,
|
|
3941
|
+
setDisplayLimit: J.setDisplayLimit,
|
|
3942
|
+
closeFieldModal: J.closeFieldModal,
|
|
3943
|
+
setActiveTableIndex: J.setActiveTableIndex,
|
|
3658
3944
|
openAI: st,
|
|
3659
3945
|
closeAI: ct,
|
|
3660
3946
|
setAIPrompt: lt,
|
|
3661
|
-
generateAI:
|
|
3662
|
-
acceptAI:
|
|
3663
|
-
cancelAI:
|
|
3664
|
-
share:
|
|
3665
|
-
clearQuery:
|
|
3666
|
-
clearCurrentMode:
|
|
3667
|
-
refetch:
|
|
3668
|
-
handleFieldSelected:
|
|
3947
|
+
generateAI: xt,
|
|
3948
|
+
acceptAI: St,
|
|
3949
|
+
cancelAI: Ct,
|
|
3950
|
+
share: wt,
|
|
3951
|
+
clearQuery: Ie,
|
|
3952
|
+
clearCurrentMode: Le,
|
|
3953
|
+
refetch: K.refetch,
|
|
3954
|
+
handleFieldSelected: bt
|
|
3669
3955
|
},
|
|
3670
|
-
getQueryConfig:
|
|
3671
|
-
getChartConfig:
|
|
3672
|
-
getAnalysisType:
|
|
3956
|
+
getQueryConfig: Tt,
|
|
3957
|
+
getChartConfig: Et,
|
|
3958
|
+
getAnalysisType: Dt
|
|
3673
3959
|
};
|
|
3674
3960
|
}
|
|
3675
3961
|
//#endregion
|
|
3676
3962
|
//#region src/client/utils/funnelValidation.ts
|
|
3677
|
-
function
|
|
3963
|
+
function lr(e, t) {
|
|
3678
3964
|
let n = [];
|
|
3679
3965
|
if (!t?.cubes) return n;
|
|
3680
3966
|
if (typeof e.dimension == "string") {
|
|
@@ -3698,7 +3984,7 @@ function bn(e, t) {
|
|
|
3698
3984
|
}
|
|
3699
3985
|
return n;
|
|
3700
3986
|
}
|
|
3701
|
-
function
|
|
3987
|
+
function ur(e) {
|
|
3702
3988
|
let t = [];
|
|
3703
3989
|
for (let n = 0; n < e.length; n++) {
|
|
3704
3990
|
let r = e[n], i = r.query;
|
|
@@ -3710,17 +3996,17 @@ function xn(e) {
|
|
|
3710
3996
|
}
|
|
3711
3997
|
return t;
|
|
3712
3998
|
}
|
|
3713
|
-
function
|
|
3999
|
+
function dr(e, t) {
|
|
3714
4000
|
if (typeof e.dimension == "string") return !0;
|
|
3715
|
-
let n =
|
|
4001
|
+
let n = j(t);
|
|
3716
4002
|
return n ? e.dimension.some((e) => e.cube === n) : !1;
|
|
3717
4003
|
}
|
|
3718
|
-
function
|
|
4004
|
+
function fr(e, t) {
|
|
3719
4005
|
let n = [];
|
|
3720
4006
|
for (let r = 0; r < t.length; r++) {
|
|
3721
4007
|
let i = t[r];
|
|
3722
|
-
if (!
|
|
3723
|
-
let e =
|
|
4008
|
+
if (!dr(e, i.query)) {
|
|
4009
|
+
let e = j(i.query) || "unknown";
|
|
3724
4010
|
n.push({
|
|
3725
4011
|
type: "cross_cube",
|
|
3726
4012
|
message: `Step ${r + 1} uses cube "${e}" but no binding key mapping exists for it`,
|
|
@@ -3730,26 +4016,26 @@ function Cn(e, t) {
|
|
|
3730
4016
|
}
|
|
3731
4017
|
return n;
|
|
3732
4018
|
}
|
|
3733
|
-
function
|
|
4019
|
+
function pr(e) {
|
|
3734
4020
|
return e ? /^P(?:\d+Y)?(?:\d+M)?(?:\d+W)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$/.test(e) ? null : {
|
|
3735
4021
|
type: "time_window",
|
|
3736
4022
|
message: `Invalid time window format "${e}". Expected ISO 8601 duration (e.g., P7D, PT1H)`
|
|
3737
4023
|
} : null;
|
|
3738
4024
|
}
|
|
3739
|
-
function
|
|
4025
|
+
function mr(e, t) {
|
|
3740
4026
|
let n = [], r = [];
|
|
3741
4027
|
e.steps.length < 2 && n.push({
|
|
3742
4028
|
type: "general",
|
|
3743
4029
|
message: "Funnel requires at least 2 steps"
|
|
3744
|
-
}), e.bindingKey?.dimension ? (n.push(...
|
|
4030
|
+
}), e.bindingKey?.dimension ? (n.push(...lr(e.bindingKey, t)), n.push(...fr(e.bindingKey, e.steps))) : n.push({
|
|
3745
4031
|
type: "binding_key",
|
|
3746
4032
|
message: "Binding key dimension is required"
|
|
3747
|
-
}), n.push(...
|
|
4033
|
+
}), n.push(...ur(e.steps));
|
|
3748
4034
|
for (let t = 0; t < e.steps.length; t++) {
|
|
3749
|
-
let r = e.steps[t], i =
|
|
4035
|
+
let r = e.steps[t], i = pr(r.timeToConvert);
|
|
3750
4036
|
i && (i.stepIndex = t, n.push(i));
|
|
3751
4037
|
}
|
|
3752
|
-
let i =
|
|
4038
|
+
let i = pr(e.globalTimeWindow);
|
|
3753
4039
|
return i && n.push(i), e.steps.length > 5 && r.push({
|
|
3754
4040
|
type: "general",
|
|
3755
4041
|
message: "Funnels with more than 5 steps may have reduced performance"
|
|
@@ -3759,7 +4045,7 @@ function Tn(e, t) {
|
|
|
3759
4045
|
warnings: r
|
|
3760
4046
|
};
|
|
3761
4047
|
}
|
|
3762
|
-
function
|
|
4048
|
+
function hr(e, t) {
|
|
3763
4049
|
return t < 2 ? {
|
|
3764
4050
|
isValid: !1,
|
|
3765
4051
|
message: "Add at least 2 steps for funnel"
|
|
@@ -3768,7 +4054,7 @@ function En(e, t) {
|
|
|
3768
4054
|
message: "Select a binding key dimension"
|
|
3769
4055
|
} : { isValid: !0 };
|
|
3770
4056
|
}
|
|
3771
|
-
function
|
|
4057
|
+
function gr(e) {
|
|
3772
4058
|
if (!e?.cubes) return [];
|
|
3773
4059
|
let t = [];
|
|
3774
4060
|
for (let n of e.cubes) if (n.dimensions) for (let e of n.dimensions) (e.type === "string" || e.type === "number") && t.push({
|
|
@@ -3778,7 +4064,7 @@ function Dn(e) {
|
|
|
3778
4064
|
});
|
|
3779
4065
|
return t;
|
|
3780
4066
|
}
|
|
3781
|
-
function
|
|
4067
|
+
function _r(e) {
|
|
3782
4068
|
if (!e?.dimension) return "Select binding key...";
|
|
3783
4069
|
if (typeof e.dimension == "string") return e.dimension.split(".")[1] || e.dimension;
|
|
3784
4070
|
if (e.dimension.length > 0) {
|
|
@@ -3788,6 +4074,6 @@ function On(e) {
|
|
|
3788
4074
|
return "Select binding key...";
|
|
3789
4075
|
}
|
|
3790
4076
|
//#endregion
|
|
3791
|
-
export {
|
|
4077
|
+
export { Dn as A, yn as C, wn as D, xn as E, nt as F, Je as I, $ as M, bn as N, On as O, Pt as P, An as S, Tn as T, Mn as _, fr as a, jn as b, cr as c, er as d, rr as f, Nn as g, or as h, lr as i, En as j, Sn as k, $n as l, ir as m, _r as n, mr as o, tr as p, hr as r, ur as s, gr as t, nr as u, Rn as v, Cn as w, Pn as x, In as y };
|
|
3792
4078
|
|
|
3793
|
-
//# sourceMappingURL=analysis-builder-shared-
|
|
4079
|
+
//# sourceMappingURL=analysis-builder-shared-BVK4TYfR.js.map
|