drizzle-cube 0.6.2 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/ActivityGridChart.config-BtECymia.cjs +1 -0
- package/dist/adapters/ActivityGridChart.config-CTd5HYjI.js +2 -0
- package/dist/adapters/AreaChart.config-1B8iQnfn.js +2 -0
- package/dist/adapters/AreaChart.config-hnncyQL4.cjs +1 -0
- package/dist/adapters/BarChart.config-C-QCf1rL.cjs +1 -0
- package/dist/adapters/BarChart.config-CFelK1qP.js +2 -0
- package/dist/adapters/BoxPlotChart.config-CD9WEPyF.js +2 -0
- package/dist/adapters/BoxPlotChart.config-DEbLA0BX.cjs +1 -0
- package/dist/adapters/BubbleChart.config-B_M4hzzV.js +2 -0
- package/dist/adapters/BubbleChart.config-dRZZlAke.cjs +1 -0
- package/dist/adapters/CandlestickChart.config-Dsil2Fop.cjs +1 -0
- package/dist/adapters/CandlestickChart.config-fuhyFvob.js +2 -0
- package/dist/adapters/DataTable.config-q2gqBi6t.cjs +1 -0
- package/dist/adapters/DataTable.config-wIQnHX5R.js +2 -0
- package/dist/adapters/FunnelChart.config-Dz710ssx.js +2 -0
- package/dist/adapters/FunnelChart.config-YNP9CeS-.cjs +1 -0
- package/dist/adapters/GaugeChart.config-BG9FcMCn.cjs +1 -0
- package/dist/adapters/GaugeChart.config-CgwniXkd.js +2 -0
- package/dist/adapters/HeatMapChart.config-1zSMXXoN.cjs +1 -0
- package/dist/adapters/HeatMapChart.config-YVEWx6s5.js +2 -0
- package/dist/adapters/KpiDelta.config-BWvYXuFp.cjs +1 -0
- package/dist/adapters/KpiDelta.config-C_dYM64q.js +2 -0
- package/dist/adapters/KpiNumber.config-CXg6toZG.js +2 -0
- package/dist/adapters/KpiNumber.config-CZmV-yU1.cjs +1 -0
- package/dist/adapters/KpiText.config-BY-SJvAF.js +2 -0
- package/dist/adapters/KpiText.config-GSIxy0CE.cjs +1 -0
- package/dist/adapters/LineChart.config-CJtF8SOu.js +2 -0
- package/dist/adapters/LineChart.config-d0y60gw9.cjs +1 -0
- package/dist/adapters/MarkdownChart.config-B6w0spya.cjs +1 -0
- package/dist/adapters/MarkdownChart.config-BuIQcWOn.js +2 -0
- package/dist/adapters/MeasureProfileChart.config-Bo2n5Ae5.cjs +1 -0
- package/dist/adapters/MeasureProfileChart.config-C5d34lsc.js +2 -0
- package/dist/adapters/PieChart.config-CDxfXCIt.cjs +1 -0
- package/dist/adapters/PieChart.config-CuZxQc5m.js +2 -0
- package/dist/adapters/RadarChart.config-DpdVWyh5.cjs +1 -0
- package/dist/adapters/RadarChart.config-KrxwaaGu.js +2 -0
- package/dist/adapters/RadialBarChart.config-DpRZd0FW.js +2 -0
- package/dist/adapters/RadialBarChart.config-faIY4jpE.cjs +1 -0
- package/dist/adapters/RetentionCombinedChart.config-CUnScqnS.cjs +1 -0
- package/dist/adapters/RetentionCombinedChart.config-Dd8FuawP.js +2 -0
- package/dist/adapters/RetentionHeatmap.config-CPd6GeoQ.js +2 -0
- package/dist/adapters/RetentionHeatmap.config-CPlHbLom.cjs +1 -0
- package/dist/adapters/SankeyChart.config-DbIUqi-H.cjs +1 -0
- package/dist/adapters/SankeyChart.config-kzAnW0C7.js +2 -0
- package/dist/adapters/ScatterChart.config-4Okvn27v.js +2 -0
- package/dist/adapters/ScatterChart.config-4f9nNw3e.cjs +1 -0
- package/dist/adapters/SunburstChart.config-BsUQkIM_.js +2 -0
- package/dist/adapters/SunburstChart.config-lvnYkWs7.cjs +1 -0
- package/dist/adapters/TreeMapChart.config-S0qsgAFW.js +2 -0
- package/dist/adapters/TreeMapChart.config-jbwKsTYt.cjs +1 -0
- package/dist/adapters/WaterfallChart.config-CDQ74-pS.cjs +1 -0
- package/dist/adapters/WaterfallChart.config-XdtH-O5g.js +2 -0
- package/dist/adapters/chartConfigHelpers-CcvqrIWF.js +72 -0
- package/dist/adapters/chartConfigHelpers-DHQB-_v5.cjs +1 -0
- package/dist/adapters/compiler-DyyBaLry.cjs +166 -0
- package/dist/adapters/{locale-DDvZDFVn.js → compiler-lG6eNsoI.js} +215 -230
- package/dist/adapters/core/cube-http-handler.d.ts +27 -0
- package/dist/adapters/core/http-port.d.ts +39 -0
- package/dist/adapters/core/index.cjs +1 -0
- package/dist/adapters/core/index.d.ts +11 -0
- package/dist/adapters/core/index.js +2 -0
- package/dist/adapters/core/mcp-handler.d.ts +13 -0
- package/dist/adapters/core/rest-handlers.d.ts +14 -0
- package/dist/adapters/core/security-context.d.ts +17 -0
- package/dist/adapters/core-Bbchr0ui.js +244 -0
- package/dist/adapters/core-F1pCQPde.cjs +1 -0
- package/dist/adapters/express/index.cjs +2 -2
- package/dist/adapters/express/index.js +93 -201
- package/dist/adapters/fastify/index.cjs +2 -2
- package/dist/adapters/fastify/index.js +79 -217
- package/dist/adapters/handler-DRZb2ip6.cjs +25 -0
- package/dist/adapters/{handler-CtaSua-i.js → handler-u8FyzPBT.js} +1572 -1500
- package/dist/adapters/hono/index.cjs +2 -2
- package/dist/adapters/hono/index.js +69 -225
- package/dist/adapters/mcp-tools.cjs +1 -1
- package/dist/adapters/mcp-tools.js +1 -1
- package/dist/adapters/mcp-transport-Bw_zqky2.js +591 -0
- package/dist/adapters/mcp-transport-CNIPoe1i.cjs +40 -0
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.d.ts +18 -9
- package/dist/adapters/nextjs/index.js +186 -289
- package/dist/adapters/nextjs/mcp-handler.d.ts +0 -28
- package/dist/adapters/{openai-D-6l1Y8h.cjs → openai-B4kAJTSD.cjs} +1 -1
- package/dist/adapters/{openai-DTSTMiXL.cjs → openai-Cdf2wWZA.cjs} +1 -1
- package/dist/adapters/{openai-CmVRIbUg.js → openai-CmMzrs1Y.js} +1 -1
- package/dist/adapters/{openai-CtXqeznO.js → openai-DhzGY9R4.js} +1 -1
- package/dist/cjs/adapters/core/cube-http-handler.d.ts +27 -0
- package/dist/cjs/adapters/core/http-port.d.ts +39 -0
- package/dist/cjs/adapters/core/index.d.ts +11 -0
- package/dist/cjs/adapters/core/mcp-handler.d.ts +13 -0
- package/dist/cjs/adapters/core/rest-handlers.d.ts +14 -0
- package/dist/cjs/adapters/core/security-context.d.ts +17 -0
- package/dist/cjs/adapters/nextjs/index.d.ts +18 -9
- package/dist/cjs/adapters/nextjs/mcp-handler.d.ts +0 -28
- package/dist/cjs/client/charts/chartComponentRegistry.d.ts +1 -9
- package/dist/cjs/client/charts/chartConfigRegistry.d.ts +5 -1
- package/dist/cjs/client/charts/chartPlugin.d.ts +1 -2
- package/dist/cjs/client/charts/chartRegistry.d.ts +73 -0
- package/dist/cjs/client/components/AIAssistant/index.d.ts +2 -2
- package/dist/cjs/client/components/AnalysisBuilder/utils/filterUtils.d.ts +4 -10
- package/dist/cjs/client/components/charts/ActivityGridChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/AreaChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/BarChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/BoxPlotChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/BubbleChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/CandlestickChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/DataTable.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/FunnelChart.config.d.ts +5 -0
- package/dist/cjs/client/components/charts/GaugeChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/HeatMapChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/KpiDelta.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/KpiNumber.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/KpiText.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/LineChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/MarkdownChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/MeasureProfileChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/PieChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/RadarChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/RadialBarChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/SankeyChart.config.d.ts +5 -0
- package/dist/cjs/client/components/charts/ScatterChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/SunburstChart.config.d.ts +5 -0
- package/dist/cjs/client/components/charts/TreeMapChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/WaterfallChart.config.d.ts +6 -1
- package/dist/cjs/client/components/shared/utils.d.ts +2 -1
- package/dist/cjs/client/hooks/analysisQueryExecutionModes.d.ts +1 -1
- package/dist/cjs/client/hooks/useAnalysisEffects.d.ts +33 -0
- package/dist/{client/hooks/useAnalysisQueryExecution.d.ts → cjs/client/hooks/useAnalysisQuery.d.ts} +3 -3
- package/dist/cjs/client/hooks/useAnalysisState.d.ts +165 -0
- package/dist/cjs/client/icons/registry.d.ts +0 -6
- package/dist/cjs/client/icons/types.d.ts +5 -0
- package/dist/cjs/client/shared/filters/filterOperations.d.ts +95 -0
- package/dist/cjs/client/shared/filters/index.d.ts +10 -0
- package/dist/cjs/client/shared/filters/operators.d.ts +23 -0
- package/dist/cjs/client/shared/index.d.ts +3 -2
- package/dist/cjs/client/shared/types.d.ts +3 -10
- package/dist/cjs/client/shared/utils.d.ts +1 -59
- package/dist/cjs/client/utils/filterUtils.d.ts +2 -9
- package/dist/cjs/server/logical-plan/logical-plan-builder.d.ts +0 -5
- package/dist/cjs/server/logical-plan/schema-builder.d.ts +19 -0
- package/dist/client/charts/chartComponentRegistry.d.ts +1 -9
- package/dist/client/charts/chartConfigRegistry.d.ts +5 -1
- package/dist/client/charts/chartPlugin.d.ts +1 -2
- package/dist/client/charts/chartRegistry.d.ts +73 -0
- package/dist/client/charts.js +3 -3
- package/dist/client/chunks/{DashboardEditModal-okVfH8ZK.js → DashboardEditModal-Cs1ig1_V.js} +1522 -1121
- package/dist/client/chunks/DashboardEditModal-Cs1ig1_V.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-DB88FojM.js → analysis-builder-B64yaeDe.js} +1609 -1878
- package/dist/client/chunks/analysis-builder-B64yaeDe.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-shared-BVK4TYfR.js → analysis-builder-shared-CD0n2Nb8.js} +1545 -1355
- package/dist/client/chunks/analysis-builder-shared-CD0n2Nb8.js.map +1 -0
- package/dist/client/chunks/{chart-config-activity-grid-D_UX4NHC.js → chart-config-activity-grid-BU_bkvER.js} +1 -11
- package/dist/client/chunks/chart-config-activity-grid-BU_bkvER.js.map +1 -0
- package/dist/client/chunks/{chart-config-area-BNigHUy8.js → chart-config-area-DxwIZ4Uf.js} +1 -5
- package/dist/client/chunks/{chart-config-area-BNigHUy8.js.map → chart-config-area-DxwIZ4Uf.js.map} +1 -1
- package/dist/client/chunks/{chart-config-bar-DSO_LRTx.js → chart-config-bar-Cc8GY9aQ.js} +5 -9
- package/dist/client/chunks/chart-config-bar-Cc8GY9aQ.js.map +1 -0
- package/dist/client/chunks/{chart-config-box-plot-oW8axV2q.js → chart-config-box-plot-Bs8ovYvV.js} +3 -8
- package/dist/client/chunks/chart-config-box-plot-Bs8ovYvV.js.map +1 -0
- package/dist/client/chunks/{chart-config-bubble-gIoqVyjZ.js → chart-config-bubble-BfgY7pt8.js} +1 -11
- package/dist/client/chunks/chart-config-bubble-BfgY7pt8.js.map +1 -0
- package/dist/client/chunks/{chart-config-candlestick-N6DchAA3.js → chart-config-candlestick-jaeNNEtC.js} +1 -11
- package/dist/client/chunks/chart-config-candlestick-jaeNNEtC.js.map +1 -0
- package/dist/client/chunks/{chart-config-data-table-d7VBY-y_.js → chart-config-data-table-CRk0C0rW.js} +1 -4
- package/dist/client/chunks/chart-config-data-table-CRk0C0rW.js.map +1 -0
- package/dist/client/chunks/{chart-config-funnel-DEYMcxsD.js → chart-config-funnel-boT_LNfl.js} +1 -4
- package/dist/client/chunks/chart-config-funnel-boT_LNfl.js.map +1 -0
- package/dist/client/chunks/{chart-config-gauge-Dq-_H9UN.js → chart-config-gauge-C5uJEr97.js} +3 -8
- package/dist/client/chunks/chart-config-gauge-C5uJEr97.js.map +1 -0
- package/dist/client/chunks/{chart-config-heat-map-CfRnRNcw.js → chart-config-heat-map-CCarP44-.js} +1 -11
- package/dist/client/chunks/chart-config-heat-map-CCarP44-.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-delta-DSQbvqu_.js → chart-config-kpi-delta-DYopvwyG.js} +3 -8
- package/dist/client/chunks/chart-config-kpi-delta-DYopvwyG.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-number-EFSWY1We.js → chart-config-kpi-number-BhMdoArB.js} +3 -8
- package/dist/client/chunks/chart-config-kpi-number-BhMdoArB.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-text-KM3V5X2u.js → chart-config-kpi-text-DE6Zdi53.js} +3 -8
- package/dist/client/chunks/chart-config-kpi-text-DE6Zdi53.js.map +1 -0
- package/dist/client/chunks/{chart-config-line-D6jG8PCH.js → chart-config-line-CBfM0Rds.js} +6 -10
- package/dist/client/chunks/chart-config-line-CBfM0Rds.js.map +1 -0
- package/dist/client/chunks/{chart-config-markdown-BtRIe8JN.js → chart-config-markdown-BCDyBI8K.js} +1 -4
- package/dist/client/chunks/chart-config-markdown-BCDyBI8K.js.map +1 -0
- package/dist/client/chunks/{chart-config-measure-profile-DxRGa-zf.js → chart-config-measure-profile-BgQIH1u2.js} +1 -8
- package/dist/client/chunks/chart-config-measure-profile-BgQIH1u2.js.map +1 -0
- package/dist/client/chunks/{chart-config-pie-BhzW-fdn.js → chart-config-pie-ChfFz6DV.js} +5 -9
- package/dist/client/chunks/chart-config-pie-ChfFz6DV.js.map +1 -0
- package/dist/client/chunks/{chart-config-radar-D7REP1q_.js → chart-config-radar-BlAIGnww.js} +5 -9
- package/dist/client/chunks/chart-config-radar-BlAIGnww.js.map +1 -0
- package/dist/client/chunks/{chart-config-radial-bar-Byx6qOPU.js → chart-config-radial-bar-VFerwbCO.js} +5 -9
- package/dist/client/chunks/chart-config-radial-bar-VFerwbCO.js.map +1 -0
- package/dist/client/chunks/{chart-config-sankey-BTnWA7EW.js → chart-config-sankey-BhrDxIgj.js} +1 -4
- package/dist/client/chunks/chart-config-sankey-BhrDxIgj.js.map +1 -0
- package/dist/client/chunks/{chart-config-scatter-DSYTjwRb.js → chart-config-scatter-q_olh54e.js} +1 -11
- package/dist/client/chunks/chart-config-scatter-q_olh54e.js.map +1 -0
- package/dist/client/chunks/{chart-config-sunburst-Bwjtdf7X.js → chart-config-sunburst-BOmkOnKn.js} +1 -4
- package/dist/client/chunks/chart-config-sunburst-BOmkOnKn.js.map +1 -0
- package/dist/client/chunks/{chart-config-tree-map-DVrvf3yQ.js → chart-config-tree-map-BjX88YBY.js} +5 -9
- package/dist/client/chunks/chart-config-tree-map-BjX88YBY.js.map +1 -0
- package/dist/client/chunks/{chart-config-waterfall-DmFeQdIk.js → chart-config-waterfall-QsWXVSoF.js} +3 -8
- package/dist/client/chunks/chart-config-waterfall-QsWXVSoF.js.map +1 -0
- package/dist/client/chunks/{chart-data-table-CKauQXme.js → chart-data-table-D4g5_jfF.js} +1277 -1094
- package/dist/client/chunks/chart-data-table-D4g5_jfF.js.map +1 -0
- package/dist/client/chunks/{chart-kpi-delta-Dn-jjO-2.js → chart-kpi-delta-BvWOt8-D.js} +2 -2
- package/dist/client/chunks/{chart-kpi-delta-Dn-jjO-2.js.map → chart-kpi-delta-BvWOt8-D.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-number-P_WBiO5S.js → chart-kpi-number-xgZmMiQY.js} +3 -3
- package/dist/client/chunks/{chart-kpi-number-P_WBiO5S.js.map → chart-kpi-number-xgZmMiQY.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-text-C-Y4eb5H.js → chart-kpi-text-ZO3eFi7t.js} +2 -2
- package/dist/client/chunks/{chart-kpi-text-C-Y4eb5H.js.map → chart-kpi-text-ZO3eFi7t.js.map} +1 -1
- package/dist/client/chunks/{charts-loader-DdTeCeNo.js → charts-loader-B0DOQMFH.js} +6 -6
- package/dist/client/chunks/{charts-loader-DdTeCeNo.js.map → charts-loader-B0DOQMFH.js.map} +1 -1
- package/dist/client/chunks/{schema-visualization-Cb_E9_Gd.js → schema-visualization-DJPTktM6.js} +2 -2
- package/dist/client/chunks/{schema-visualization-Cb_E9_Gd.js.map → schema-visualization-DJPTktM6.js.map} +1 -1
- package/dist/client/chunks/{useDirtyStateTracking-MbpxH_v6.js → useDirtyStateTracking-BT6zqCFl.js} +250 -591
- package/dist/client/chunks/useDirtyStateTracking-BT6zqCFl.js.map +1 -0
- package/dist/client/chunks/{useExplainAI-evnZkjCY.js → useExplainAI-Dq_meKNN.js} +4 -4
- package/dist/client/chunks/{useExplainAI-evnZkjCY.js.map → useExplainAI-Dq_meKNN.js.map} +1 -1
- package/dist/client/chunks/{utils-3P6z1vz5.js → utils-Cq-j5E5I.js} +2 -2
- package/dist/client/chunks/{utils-3P6z1vz5.js.map → utils-Cq-j5E5I.js.map} +1 -1
- package/dist/client/chunks/{vendor-DSpR0IW6.js → vendor-D4jADu8t.js} +2 -2
- package/dist/client/chunks/{vendor-DSpR0IW6.js.map → vendor-D4jADu8t.js.map} +1 -1
- package/dist/client/components/AIAssistant/index.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/utils/filterUtils.d.ts +4 -10
- package/dist/client/components/charts/ActivityGridChart.config.d.ts +6 -1
- package/dist/client/components/charts/AreaChart.config.d.ts +6 -1
- package/dist/client/components/charts/BarChart.config.d.ts +6 -1
- package/dist/client/components/charts/BoxPlotChart.config.d.ts +6 -1
- package/dist/client/components/charts/BubbleChart.config.d.ts +6 -1
- package/dist/client/components/charts/CandlestickChart.config.d.ts +6 -1
- package/dist/client/components/charts/DataTable.config.d.ts +6 -1
- package/dist/client/components/charts/FunnelChart.config.d.ts +5 -0
- package/dist/client/components/charts/GaugeChart.config.d.ts +6 -1
- package/dist/client/components/charts/HeatMapChart.config.d.ts +6 -1
- package/dist/client/components/charts/KpiDelta.config.d.ts +6 -1
- package/dist/client/components/charts/KpiNumber.config.d.ts +6 -1
- package/dist/client/components/charts/KpiText.config.d.ts +6 -1
- package/dist/client/components/charts/LineChart.config.d.ts +6 -1
- package/dist/client/components/charts/MarkdownChart.config.d.ts +6 -1
- package/dist/client/components/charts/MeasureProfileChart.config.d.ts +6 -1
- package/dist/client/components/charts/PieChart.config.d.ts +6 -1
- package/dist/client/components/charts/RadarChart.config.d.ts +6 -1
- package/dist/client/components/charts/RadialBarChart.config.d.ts +6 -1
- package/dist/client/components/charts/SankeyChart.config.d.ts +5 -0
- package/dist/client/components/charts/ScatterChart.config.d.ts +6 -1
- package/dist/client/components/charts/SunburstChart.config.d.ts +5 -0
- package/dist/client/components/charts/TreeMapChart.config.d.ts +6 -1
- package/dist/client/components/charts/WaterfallChart.config.d.ts +6 -1
- package/dist/client/components/shared/utils.d.ts +2 -1
- package/dist/client/components.js +3 -3
- package/dist/client/hooks/analysisQueryExecutionModes.d.ts +1 -1
- package/dist/client/hooks/useAnalysisEffects.d.ts +33 -0
- package/dist/{cjs/client/hooks/useAnalysisQueryExecution.d.ts → client/hooks/useAnalysisQuery.d.ts} +3 -3
- package/dist/client/hooks/useAnalysisState.d.ts +165 -0
- package/dist/client/hooks.js +3 -3
- package/dist/client/icons/registry.d.ts +0 -6
- package/dist/client/icons/types.d.ts +5 -0
- package/dist/client/icons.js +1 -1
- package/dist/client/index.js +17 -17
- package/dist/client/index.js.map +1 -1
- package/dist/client/providers.js +1 -1
- package/dist/client/schema.js +1 -1
- package/dist/client/shared/filters/filterOperations.d.ts +95 -0
- package/dist/client/shared/filters/index.d.ts +10 -0
- package/dist/client/shared/filters/operators.d.ts +23 -0
- package/dist/client/shared/index.d.ts +3 -2
- package/dist/client/shared/types.d.ts +3 -10
- package/dist/client/shared/utils.d.ts +1 -59
- package/dist/client/utils/filterUtils.d.ts +2 -9
- package/dist/client/utils.js +3 -3
- package/dist/client-bundle-stats.html +1 -1
- package/dist/mcp-app/mcp-app.html +34 -34
- package/dist/server/chartConfigHelpers-CcvqrIWF.js +72 -0
- package/dist/server/chartConfigHelpers-DHQB-_v5.cjs +1 -0
- package/dist/server/index.cjs +68 -68
- package/dist/server/index.js +3899 -3823
- package/dist/server/logical-plan/logical-plan-builder.d.ts +0 -5
- package/dist/server/logical-plan/schema-builder.d.ts +19 -0
- package/dist/server/{openai-D-6l1Y8h.cjs → openai-B4kAJTSD.cjs} +1 -1
- package/dist/server/{openai-DTSTMiXL.cjs → openai-Cdf2wWZA.cjs} +1 -1
- package/dist/server/{openai-CmVRIbUg.js → openai-CmMzrs1Y.js} +1 -1
- package/dist/server/{openai-CtXqeznO.js → openai-DhzGY9R4.js} +1 -1
- package/package.json +13 -3
- package/dist/adapters/handler-OwxSBJH8.cjs +0 -25
- package/dist/adapters/hono/mcp-handler.d.ts +0 -37
- package/dist/adapters/locale-ZLUUNUxr.cjs +0 -166
- package/dist/adapters/mcp-transport-B7ddET3M.cjs +0 -40
- package/dist/adapters/mcp-transport-Dfuj4j4q.js +0 -591
- package/dist/cjs/adapters/hono/mcp-handler.d.ts +0 -37
- package/dist/cjs/client/hooks/useAnalysisAI.d.ts +0 -56
- package/dist/cjs/client/hooks/useAnalysisChartDefaults.d.ts +0 -35
- package/dist/cjs/client/hooks/useAnalysisCombinedFields.d.ts +0 -18
- package/dist/cjs/client/hooks/useAnalysisInitialization.d.ts +0 -25
- package/dist/cjs/client/hooks/useAnalysisQueryBuilder.d.ts +0 -32
- package/dist/cjs/client/hooks/useAnalysisShare.d.ts +0 -18
- package/dist/cjs/client/hooks/useAnalysisUIState.d.ts +0 -24
- package/dist/client/chunks/DashboardEditModal-okVfH8ZK.js.map +0 -1
- package/dist/client/chunks/analysis-builder-DB88FojM.js.map +0 -1
- package/dist/client/chunks/analysis-builder-shared-BVK4TYfR.js.map +0 -1
- package/dist/client/chunks/chart-config-activity-grid-D_UX4NHC.js.map +0 -1
- package/dist/client/chunks/chart-config-bar-DSO_LRTx.js.map +0 -1
- package/dist/client/chunks/chart-config-box-plot-oW8axV2q.js.map +0 -1
- package/dist/client/chunks/chart-config-bubble-gIoqVyjZ.js.map +0 -1
- package/dist/client/chunks/chart-config-candlestick-N6DchAA3.js.map +0 -1
- package/dist/client/chunks/chart-config-data-table-d7VBY-y_.js.map +0 -1
- package/dist/client/chunks/chart-config-funnel-DEYMcxsD.js.map +0 -1
- package/dist/client/chunks/chart-config-gauge-Dq-_H9UN.js.map +0 -1
- package/dist/client/chunks/chart-config-heat-map-CfRnRNcw.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-delta-DSQbvqu_.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-number-EFSWY1We.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-text-KM3V5X2u.js.map +0 -1
- package/dist/client/chunks/chart-config-line-D6jG8PCH.js.map +0 -1
- package/dist/client/chunks/chart-config-markdown-BtRIe8JN.js.map +0 -1
- package/dist/client/chunks/chart-config-measure-profile-DxRGa-zf.js.map +0 -1
- package/dist/client/chunks/chart-config-pie-BhzW-fdn.js.map +0 -1
- package/dist/client/chunks/chart-config-radar-D7REP1q_.js.map +0 -1
- package/dist/client/chunks/chart-config-radial-bar-Byx6qOPU.js.map +0 -1
- package/dist/client/chunks/chart-config-sankey-BTnWA7EW.js.map +0 -1
- package/dist/client/chunks/chart-config-scatter-DSYTjwRb.js.map +0 -1
- package/dist/client/chunks/chart-config-sunburst-Bwjtdf7X.js.map +0 -1
- package/dist/client/chunks/chart-config-tree-map-DVrvf3yQ.js.map +0 -1
- package/dist/client/chunks/chart-config-waterfall-DmFeQdIk.js.map +0 -1
- package/dist/client/chunks/chart-data-table-CKauQXme.js.map +0 -1
- package/dist/client/chunks/useDirtyStateTracking-MbpxH_v6.js.map +0 -1
- package/dist/client/hooks/useAnalysisAI.d.ts +0 -56
- package/dist/client/hooks/useAnalysisChartDefaults.d.ts +0 -35
- package/dist/client/hooks/useAnalysisCombinedFields.d.ts +0 -18
- package/dist/client/hooks/useAnalysisInitialization.d.ts +0 -25
- package/dist/client/hooks/useAnalysisQueryBuilder.d.ts +0 -32
- package/dist/client/hooks/useAnalysisShare.d.ts +0 -18
- package/dist/client/hooks/useAnalysisUIState.d.ts +0 -24
|
@@ -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 { k as s, u as c, v as l } from "./chart-data-table-
|
|
3
|
-
import {
|
|
4
|
-
import { a as
|
|
5
|
-
import { P as
|
|
6
|
-
import {
|
|
7
|
-
import { a as
|
|
8
|
-
import { r as
|
|
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-D4jADu8t.js";
|
|
2
|
+
import { k as s, u as c, v as l, z as u } from "./chart-data-table-D4g5_jfF.js";
|
|
3
|
+
import { C as d, E as f, S as p, _ as m, b as h, bt as g, d as _, g as v, j as y, l as b, nt as x, rt as S, tt as C, u as w, v as T, y as E, yt as D } from "./DashboardEditModal-Cs1ig1_V.js";
|
|
4
|
+
import { a as O, s as k, t as ee } from "./retention-ChW9jYdy.js";
|
|
5
|
+
import { A, D as te, F as ne, I as j, M as re, N as M, O as ie, P as ae, S as oe, T as N, a as P, d as se, j as F, k as I, l as L, n as ce, r as le, s as ue } from "./useDirtyStateTracking-BT6zqCFl.js";
|
|
6
|
+
import { P as R, z as de } from "./chart-activity-grid-DX0SJbxs.js";
|
|
7
|
+
import { a as z, i as fe } from "./useExplainAI-Dq_meKNN.js";
|
|
8
|
+
import { r as pe, s as me } from "./chart-funnel-CToKSBaL.js";
|
|
9
|
+
import { n as he } from "./charts-core-DaXSt1Dd.js";
|
|
10
|
+
import B, { createContext as ge, memo as _e, useCallback as V, useContext as ve, useEffect as H, useMemo as U, useRef as W, useState as G } from "react";
|
|
11
|
+
import { Fragment as K, jsx as q, jsxs as J } from "react/jsx-runtime";
|
|
12
12
|
//#region src/shared/date-utils.ts
|
|
13
|
-
function
|
|
13
|
+
function ye(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 me(e) {
|
|
|
123
123
|
}
|
|
124
124
|
return null;
|
|
125
125
|
}
|
|
126
|
-
function
|
|
126
|
+
function be(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 W(e) {
|
|
|
132
132
|
end: n
|
|
133
133
|
});
|
|
134
134
|
}
|
|
135
|
-
return
|
|
135
|
+
return ye(e);
|
|
136
136
|
}
|
|
137
|
-
function
|
|
137
|
+
function xe(e) {
|
|
138
138
|
return e.toISOString().split("T")[0];
|
|
139
139
|
}
|
|
140
|
-
function
|
|
140
|
+
function Se(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,44 +148,23 @@ function ge(e, t) {
|
|
|
148
148
|
}
|
|
149
149
|
//#endregion
|
|
150
150
|
//#region src/client/components/AnalysisBuilder/utils/filterUtils.ts
|
|
151
|
-
function
|
|
152
|
-
|
|
153
|
-
let e = _e(n.filters, t);
|
|
154
|
-
if (e) return e;
|
|
155
|
-
} else if ("member" in n) {
|
|
156
|
-
let e = n;
|
|
157
|
-
if (e.member === t && e.operator === "inDateRange" && e.dateRange) return { dateRange: e.dateRange };
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
function ve(e, t) {
|
|
161
|
-
let n = _e(t, e);
|
|
151
|
+
function Ce(e, t) {
|
|
152
|
+
let n = F(t, e);
|
|
162
153
|
if (!n?.dateRange) return;
|
|
163
|
-
let r =
|
|
154
|
+
let r = be(n.dateRange);
|
|
164
155
|
if (!r) return;
|
|
165
|
-
let i =
|
|
166
|
-
return [[
|
|
167
|
-
}
|
|
168
|
-
function
|
|
169
|
-
return
|
|
170
|
-
if ("type" in n && "filters" in n) {
|
|
171
|
-
let r = n, i = ye(r.filters, t);
|
|
172
|
-
i.length > 0 && e.push({
|
|
173
|
-
type: r.type,
|
|
174
|
-
filters: i
|
|
175
|
-
});
|
|
176
|
-
} else if ("member" in n) {
|
|
177
|
-
let r = n;
|
|
178
|
-
r.member === t && r.operator === "inDateRange" || e.push(n);
|
|
179
|
-
} else e.push(n);
|
|
180
|
-
return e;
|
|
181
|
-
}, []);
|
|
156
|
+
let i = Se(r.start, r.end);
|
|
157
|
+
return [[xe(r.start), xe(r.end)], [xe(i.start), xe(i.end)]];
|
|
158
|
+
}
|
|
159
|
+
function we(e, t) {
|
|
160
|
+
return ne(e, t, "inDateRange");
|
|
182
161
|
}
|
|
183
162
|
//#endregion
|
|
184
163
|
//#region src/client/components/AnalysisBuilder/utils/queryUtils.ts
|
|
185
|
-
function
|
|
164
|
+
function Te(e, t, n, r, i = !1, a) {
|
|
186
165
|
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) =>
|
|
166
|
+
if (!i) for (let e of o) s = we(s, e);
|
|
167
|
+
s = s.filter((e) => C(e));
|
|
189
168
|
let c = {
|
|
190
169
|
measures: e.map((e) => e.field),
|
|
191
170
|
dimensions: t.filter((e) => !e.isTimeDimension).map((e) => e.field),
|
|
@@ -195,7 +174,7 @@ function G(e, t, n, r, i = !1, a) {
|
|
|
195
174
|
granularity: e.granularity || "day"
|
|
196
175
|
};
|
|
197
176
|
if (e.enableComparison) {
|
|
198
|
-
let r =
|
|
177
|
+
let r = Ce(e.field, n);
|
|
199
178
|
r && (t.compareDateRange = r);
|
|
200
179
|
}
|
|
201
180
|
return t;
|
|
@@ -206,7 +185,7 @@ function G(e, t, n, r, i = !1, a) {
|
|
|
206
185
|
};
|
|
207
186
|
return c.measures?.length === 0 && delete c.measures, c.dimensions?.length === 0 && delete c.dimensions, c.timeDimensions?.length === 0 && delete c.timeDimensions, c;
|
|
208
187
|
}
|
|
209
|
-
function
|
|
188
|
+
function Y() {
|
|
210
189
|
return {
|
|
211
190
|
metrics: [],
|
|
212
191
|
breakdowns: [],
|
|
@@ -219,7 +198,7 @@ function K() {
|
|
|
219
198
|
}
|
|
220
199
|
//#endregion
|
|
221
200
|
//#region src/client/components/AnalysisBuilder/filterConfigModalUtils.ts
|
|
222
|
-
function
|
|
201
|
+
function Ee(e, t, n, r) {
|
|
223
202
|
if (!t || n === 0) return { type: "none" };
|
|
224
203
|
switch (e) {
|
|
225
204
|
case "ArrowDown": return {
|
|
@@ -240,60 +219,60 @@ function q(e, t, n, r) {
|
|
|
240
219
|
}
|
|
241
220
|
//#endregion
|
|
242
221
|
//#region src/client/components/AnalysisBuilder/FilterValueInput.tsx
|
|
243
|
-
var
|
|
244
|
-
function
|
|
245
|
-
let { t: n } =
|
|
246
|
-
return /* @__PURE__ */
|
|
222
|
+
var De = l("close"), Oe = l("chevronDown");
|
|
223
|
+
function ke({ filter: e, dateRange: t }) {
|
|
224
|
+
let { t: n } = R(), { rangeType: r, numberValue: i, label: a, isOpen: o, onToggle: s, onRangeTypeChange: c, onNumberValueChange: l, onCustomStartDate: u, onCustomEndDate: d, onOpen: f } = t;
|
|
225
|
+
return /* @__PURE__ */ J("div", {
|
|
247
226
|
className: "dc:space-y-2",
|
|
248
227
|
children: [
|
|
249
|
-
/* @__PURE__ */
|
|
228
|
+
/* @__PURE__ */ J("div", {
|
|
250
229
|
className: "dc:relative",
|
|
251
|
-
children: [/* @__PURE__ */
|
|
230
|
+
children: [/* @__PURE__ */ J("button", {
|
|
252
231
|
onClick: () => {
|
|
253
232
|
f(), s(!o);
|
|
254
233
|
},
|
|
255
234
|
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__ */
|
|
235
|
+
children: [/* @__PURE__ */ q("span", {
|
|
257
236
|
className: "dc:truncate",
|
|
258
237
|
children: a
|
|
259
|
-
}), /* @__PURE__ */
|
|
260
|
-
}), o && /* @__PURE__ */
|
|
238
|
+
}), /* @__PURE__ */ q(Oe, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${o ? "dc:rotate-180" : ""}` })]
|
|
239
|
+
}), o && /* @__PURE__ */ q("div", {
|
|
261
240
|
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:
|
|
241
|
+
children: m.map((e) => /* @__PURE__ */ q("button", {
|
|
263
242
|
onClick: () => c(e.value),
|
|
264
243
|
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
244
|
children: n(e.label)
|
|
266
245
|
}, e.value))
|
|
267
246
|
})]
|
|
268
247
|
}),
|
|
269
|
-
te(r) && /* @__PURE__ */
|
|
248
|
+
te(r) && /* @__PURE__ */ J("div", {
|
|
270
249
|
className: "dc:flex dc:items-center dc:gap-2",
|
|
271
|
-
children: [/* @__PURE__ */
|
|
250
|
+
children: [/* @__PURE__ */ q("input", {
|
|
272
251
|
type: "number",
|
|
273
252
|
min: "1",
|
|
274
253
|
max: "1000",
|
|
275
254
|
value: i,
|
|
276
255
|
onChange: (e) => l(Math.max(1, parseInt(e.target.value) || 1)),
|
|
277
256
|
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__ */
|
|
257
|
+
}), /* @__PURE__ */ q("span", {
|
|
279
258
|
className: "dc:text-sm text-dc-text-muted",
|
|
280
259
|
children: r.replace("last_n_", "")
|
|
281
260
|
})]
|
|
282
261
|
}),
|
|
283
|
-
r === "custom" && /* @__PURE__ */
|
|
262
|
+
r === "custom" && /* @__PURE__ */ J("div", {
|
|
284
263
|
className: "dc:flex dc:items-center dc:gap-2",
|
|
285
264
|
children: [
|
|
286
|
-
/* @__PURE__ */
|
|
265
|
+
/* @__PURE__ */ q("input", {
|
|
287
266
|
type: "date",
|
|
288
267
|
value: Array.isArray(e.dateRange) ? e.dateRange[0] : "",
|
|
289
268
|
onChange: u,
|
|
290
269
|
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
270
|
}),
|
|
292
|
-
/* @__PURE__ */
|
|
271
|
+
/* @__PURE__ */ q("span", {
|
|
293
272
|
className: "dc:text-sm text-dc-text-muted",
|
|
294
273
|
children: n("filter.modal.dateTo")
|
|
295
274
|
}),
|
|
296
|
-
/* @__PURE__ */
|
|
275
|
+
/* @__PURE__ */ q("input", {
|
|
297
276
|
type: "date",
|
|
298
277
|
value: Array.isArray(e.dateRange) ? e.dateRange[1] : "",
|
|
299
278
|
onChange: d,
|
|
@@ -304,26 +283,26 @@ function xe({ filter: e, dateRange: t }) {
|
|
|
304
283
|
]
|
|
305
284
|
});
|
|
306
285
|
}
|
|
307
|
-
function
|
|
308
|
-
let { t: n } =
|
|
309
|
-
return i ? /* @__PURE__ */
|
|
286
|
+
function Ae({ filter: e, combo: t }) {
|
|
287
|
+
let { t: n } = R(), { options: r, loading: i, error: a, highlightedIndex: o, listRef: s, onSelect: c } = t;
|
|
288
|
+
return i ? /* @__PURE__ */ q("div", {
|
|
310
289
|
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
|
|
311
290
|
children: n("filter.modal.loading")
|
|
312
|
-
}) : a ? /* @__PURE__ */
|
|
291
|
+
}) : a ? /* @__PURE__ */ J("div", {
|
|
313
292
|
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-error",
|
|
314
293
|
children: [n("filter.modal.errorPrefix"), String(a)]
|
|
315
|
-
}) : r.length === 0 ? /* @__PURE__ */
|
|
294
|
+
}) : r.length === 0 ? /* @__PURE__ */ q("div", {
|
|
316
295
|
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
|
|
317
296
|
children: n("filter.modal.noValues")
|
|
318
|
-
}) : /* @__PURE__ */
|
|
297
|
+
}) : /* @__PURE__ */ q("div", {
|
|
319
298
|
ref: s,
|
|
320
299
|
className: "dc:max-h-40 dc:overflow-y-auto",
|
|
321
300
|
children: r.map((t, n) => {
|
|
322
301
|
let r = e.values?.includes(t);
|
|
323
|
-
return /* @__PURE__ */
|
|
302
|
+
return /* @__PURE__ */ J("button", {
|
|
324
303
|
onClick: (e) => c(t, e),
|
|
325
304
|
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__ */
|
|
305
|
+
children: [String(t), r && /* @__PURE__ */ q("span", {
|
|
327
306
|
className: "dc:float-right",
|
|
328
307
|
children: "✓"
|
|
329
308
|
})]
|
|
@@ -331,41 +310,41 @@ function Se({ filter: e, combo: t }) {
|
|
|
331
310
|
})
|
|
332
311
|
});
|
|
333
312
|
}
|
|
334
|
-
function
|
|
335
|
-
let { t: r } =
|
|
336
|
-
return /* @__PURE__ */
|
|
313
|
+
function je({ filter: e, operatorMeta: t, combo: n }) {
|
|
314
|
+
let { t: r } = R(), { isOpen: i, loading: a, searchText: o, onSearchTextChange: s, onHighlightedIndexChange: c, onRemove: l, onKeyDown: u, onOpen: d } = n;
|
|
315
|
+
return /* @__PURE__ */ J("div", {
|
|
337
316
|
className: "dc:space-y-2",
|
|
338
317
|
children: [
|
|
339
|
-
e.values && e.values.length > 0 && /* @__PURE__ */
|
|
318
|
+
e.values && e.values.length > 0 && /* @__PURE__ */ q("div", {
|
|
340
319
|
className: "dc:flex dc:flex-wrap dc:gap-1.5",
|
|
341
|
-
children: e.values.map((e, t) => /* @__PURE__ */
|
|
320
|
+
children: e.values.map((e, t) => /* @__PURE__ */ J("span", {
|
|
342
321
|
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__ */
|
|
322
|
+
children: [/* @__PURE__ */ q("span", {
|
|
344
323
|
className: "dc:max-w-[150px] dc:truncate",
|
|
345
324
|
children: String(e)
|
|
346
|
-
}), /* @__PURE__ */
|
|
325
|
+
}), /* @__PURE__ */ q("button", {
|
|
347
326
|
onClick: () => l(e),
|
|
348
327
|
className: "hover:text-dc-danger",
|
|
349
|
-
children: /* @__PURE__ */
|
|
328
|
+
children: /* @__PURE__ */ q(De, { className: "dc:w-3.5 dc:h-3.5" })
|
|
350
329
|
})]
|
|
351
330
|
}, t))
|
|
352
331
|
}),
|
|
353
|
-
/* @__PURE__ */
|
|
332
|
+
/* @__PURE__ */ J("div", {
|
|
354
333
|
className: "dc:relative",
|
|
355
|
-
children: [/* @__PURE__ */
|
|
334
|
+
children: [/* @__PURE__ */ J("button", {
|
|
356
335
|
onClick: () => {
|
|
357
336
|
d();
|
|
358
337
|
},
|
|
359
338
|
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__ */
|
|
339
|
+
children: [/* @__PURE__ */ q("span", {
|
|
361
340
|
className: "text-dc-text-muted dc:truncate",
|
|
362
341
|
children: r(a ? "filter.modal.loading" : "filter.modal.selectValue")
|
|
363
|
-
}), /* @__PURE__ */
|
|
364
|
-
}), i && /* @__PURE__ */
|
|
342
|
+
}), /* @__PURE__ */ q(Oe, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${i ? "dc:rotate-180" : ""}` })]
|
|
343
|
+
}), i && /* @__PURE__ */ J("div", {
|
|
365
344
|
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__ */
|
|
345
|
+
children: [/* @__PURE__ */ q("div", {
|
|
367
346
|
className: "dc:p-2 dc:border-b border-dc-border",
|
|
368
|
-
children: /* @__PURE__ */
|
|
347
|
+
children: /* @__PURE__ */ q("input", {
|
|
369
348
|
type: "text",
|
|
370
349
|
value: o,
|
|
371
350
|
onChange: (e) => {
|
|
@@ -376,39 +355,39 @@ function Ce({ filter: e, operatorMeta: t, combo: n }) {
|
|
|
376
355
|
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
356
|
autoFocus: !0
|
|
378
357
|
})
|
|
379
|
-
}), /* @__PURE__ */
|
|
358
|
+
}), /* @__PURE__ */ q(Ae, {
|
|
380
359
|
filter: e,
|
|
381
360
|
combo: n
|
|
382
361
|
})]
|
|
383
362
|
})]
|
|
384
363
|
}),
|
|
385
|
-
t?.supportsMultipleValues && /* @__PURE__ */
|
|
364
|
+
t?.supportsMultipleValues && /* @__PURE__ */ q("p", {
|
|
386
365
|
className: "dc:text-xs text-dc-text-muted",
|
|
387
366
|
children: r("filter.modal.multiSelectHint")
|
|
388
367
|
})
|
|
389
368
|
]
|
|
390
369
|
});
|
|
391
370
|
}
|
|
392
|
-
function
|
|
393
|
-
let { t: i } =
|
|
394
|
-
return o?.requiresValues ? s ? /* @__PURE__ */
|
|
371
|
+
function Me({ field: e, dateRange: t, combo: n, inputs: r }) {
|
|
372
|
+
let { t: i } = R(), { filter: a, operatorMeta: o, shouldShowDateRange: s, shouldShowComboBox: c } = e, { onBetweenStart: l, onBetweenEnd: u, onDate: d, onDirect: f } = r;
|
|
373
|
+
return o?.requiresValues ? s ? /* @__PURE__ */ q(ke, {
|
|
395
374
|
filter: a,
|
|
396
375
|
dateRange: t
|
|
397
|
-
}) : a.operator === "between" || a.operator === "notBetween" ? /* @__PURE__ */
|
|
376
|
+
}) : a.operator === "between" || a.operator === "notBetween" ? /* @__PURE__ */ J("div", {
|
|
398
377
|
className: "dc:flex dc:items-center dc:gap-2",
|
|
399
378
|
children: [
|
|
400
|
-
/* @__PURE__ */
|
|
379
|
+
/* @__PURE__ */ q("input", {
|
|
401
380
|
type: "number",
|
|
402
381
|
value: a.values?.[0] ?? "",
|
|
403
382
|
onChange: l,
|
|
404
383
|
placeholder: i("filter.modal.min"),
|
|
405
384
|
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
385
|
}),
|
|
407
|
-
/* @__PURE__ */
|
|
386
|
+
/* @__PURE__ */ q("span", {
|
|
408
387
|
className: "dc:text-sm text-dc-text-muted",
|
|
409
388
|
children: i("filter.modal.to")
|
|
410
389
|
}),
|
|
411
|
-
/* @__PURE__ */
|
|
390
|
+
/* @__PURE__ */ q("input", {
|
|
412
391
|
type: "number",
|
|
413
392
|
value: a.values?.[1] ?? "",
|
|
414
393
|
onChange: u,
|
|
@@ -416,96 +395,96 @@ function we({ field: e, dateRange: t, combo: n, inputs: r }) {
|
|
|
416
395
|
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
396
|
})
|
|
418
397
|
]
|
|
419
|
-
}) : o?.valueType === "date" ? /* @__PURE__ */
|
|
398
|
+
}) : o?.valueType === "date" ? /* @__PURE__ */ q("input", {
|
|
420
399
|
type: "date",
|
|
421
400
|
value: a.values?.[0] || "",
|
|
422
401
|
onChange: d,
|
|
423
402
|
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__ */
|
|
403
|
+
}) : o?.valueType === "number" ? /* @__PURE__ */ q("input", {
|
|
425
404
|
type: "number",
|
|
426
405
|
value: a.values?.[0] ?? "",
|
|
427
406
|
onChange: f,
|
|
428
407
|
placeholder: i("filter.modal.enterNumber"),
|
|
429
408
|
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__ */
|
|
409
|
+
}) : c ? /* @__PURE__ */ q(je, {
|
|
431
410
|
filter: a,
|
|
432
411
|
operatorMeta: o,
|
|
433
412
|
combo: n
|
|
434
|
-
}) : /* @__PURE__ */
|
|
413
|
+
}) : /* @__PURE__ */ q("input", {
|
|
435
414
|
type: "text",
|
|
436
415
|
value: a.values?.[0] ?? "",
|
|
437
416
|
onChange: f,
|
|
438
417
|
placeholder: i("filter.modal.enterValue"),
|
|
439
418
|
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__ */
|
|
419
|
+
}) : /* @__PURE__ */ q("div", {
|
|
441
420
|
className: "dc:text-sm text-dc-text-muted dc:italic dc:py-2",
|
|
442
421
|
children: i("filter.modal.noValueRequired")
|
|
443
422
|
});
|
|
444
423
|
}
|
|
445
424
|
//#endregion
|
|
446
425
|
//#region src/client/components/AnalysisBuilder/FilterConfigModal.tsx
|
|
447
|
-
var
|
|
448
|
-
function
|
|
449
|
-
let { t: a } =
|
|
426
|
+
var Ne = l("close"), Pe = l("chevronDown"), Fe = l("dimension"), Ie = l("timeDimension"), Le = l("measure");
|
|
427
|
+
function Re({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i }) {
|
|
428
|
+
let { t: a } = R(), [o, s] = G(e), [c, l] = G(!1), [u, d] = G(!1), [f, p] = G(!1), [g, _] = G("this_month"), [y, b] = G(1), [C, w] = G(""), [T, D] = G(null), [O, k] = G(-1), ee = W(null), A = W(null), ne = ce(C, 300), j = E(o.member, t), re = j?.field.type || "string", M = re === "time", ie = j?.fieldType === "measure", ae = j?.fieldType === "dimension", oe = h(o.member, t), P = x[o.operator], se = S(re), F = M && o.operator === "inDateRange", I = V(() => [
|
|
450
429
|
"equals",
|
|
451
430
|
"notEquals",
|
|
452
431
|
"in",
|
|
453
432
|
"notIn"
|
|
454
|
-
].includes(o.operator) &&
|
|
433
|
+
].includes(o.operator) && ae && !M, [
|
|
455
434
|
o.operator,
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
])(), { values:
|
|
459
|
-
|
|
435
|
+
ae,
|
|
436
|
+
M
|
|
437
|
+
])(), { values: L, loading: ue, error: de, searchValues: z } = le(o.member, I);
|
|
438
|
+
H(() => {
|
|
460
439
|
if (!i) {
|
|
461
|
-
|
|
440
|
+
D(null);
|
|
462
441
|
return;
|
|
463
442
|
}
|
|
464
443
|
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));
|
|
465
|
-
|
|
444
|
+
D(r ? {
|
|
466
445
|
bottom: window.innerHeight - e.top + 8,
|
|
467
446
|
left: a
|
|
468
447
|
} : {
|
|
469
448
|
top: e.bottom + 8,
|
|
470
449
|
left: a
|
|
471
450
|
});
|
|
472
|
-
}, [i]),
|
|
451
|
+
}, [i]), H(() => {
|
|
473
452
|
let e = (e) => {
|
|
474
453
|
ee.current && !ee.current.contains(e.target) && (l(!1), d(!1), p(!1));
|
|
475
454
|
};
|
|
476
455
|
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
477
|
-
}, []),
|
|
478
|
-
u &&
|
|
456
|
+
}, []), H(() => {
|
|
457
|
+
u && I && z && z("", !0), u || k(-1);
|
|
479
458
|
}, [
|
|
480
459
|
u,
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
]),
|
|
484
|
-
if (
|
|
485
|
-
let e =
|
|
460
|
+
I,
|
|
461
|
+
z
|
|
462
|
+
]), H(() => {
|
|
463
|
+
if (O >= 0 && A.current) {
|
|
464
|
+
let e = A.current.children[O];
|
|
486
465
|
e && e.scrollIntoView({ block: "nearest" });
|
|
487
466
|
}
|
|
488
|
-
}, [
|
|
489
|
-
u &&
|
|
467
|
+
}, [O]), H(() => {
|
|
468
|
+
u && I && z && ne !== void 0 && z(ne);
|
|
490
469
|
}, [
|
|
491
|
-
|
|
470
|
+
ne,
|
|
492
471
|
u,
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
]),
|
|
496
|
-
if (!
|
|
497
|
-
let e =
|
|
498
|
-
e && (
|
|
499
|
-
}, [o.dateRange,
|
|
500
|
-
let
|
|
472
|
+
I,
|
|
473
|
+
z
|
|
474
|
+
]), H(() => {
|
|
475
|
+
if (!F) return;
|
|
476
|
+
let e = v(o.dateRange);
|
|
477
|
+
e && (_(e.rangeType), e.numberValue !== void 0 && b(e.numberValue));
|
|
478
|
+
}, [o.dateRange, F]);
|
|
479
|
+
let fe = V((e) => {
|
|
501
480
|
s({
|
|
502
481
|
member: o.member,
|
|
503
482
|
operator: e,
|
|
504
483
|
values: []
|
|
505
484
|
}), l(!1);
|
|
506
|
-
}, [o.member]),
|
|
485
|
+
}, [o.member]), pe = V((e, t) => {
|
|
507
486
|
let n = t?.shiftKey ?? !1, r = o.values || [];
|
|
508
|
-
|
|
487
|
+
P?.supportsMultipleValues ? (r.includes(e) ? s({
|
|
509
488
|
...o,
|
|
510
489
|
values: r.filter((t) => t !== e)
|
|
511
490
|
}) : s({
|
|
@@ -514,28 +493,28 @@ function Ae({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
|
|
|
514
493
|
}), n || d(!1)) : (s({
|
|
515
494
|
...o,
|
|
516
495
|
values: [e]
|
|
517
|
-
}), d(!1)),
|
|
518
|
-
}, [o,
|
|
496
|
+
}), d(!1)), w(""), k(-1);
|
|
497
|
+
}, [o, P?.supportsMultipleValues]), me = V((e) => {
|
|
519
498
|
let t = (o.values || []).filter((t) => t !== e);
|
|
520
499
|
s({
|
|
521
500
|
...o,
|
|
522
501
|
values: t
|
|
523
502
|
});
|
|
524
|
-
}, [o]),
|
|
525
|
-
let t =
|
|
503
|
+
}, [o]), he = V((e) => {
|
|
504
|
+
let t = Ee(e.key, u, L.length, O);
|
|
526
505
|
if (t.type !== "none") {
|
|
527
|
-
if (e.preventDefault(), t.type === "highlight") return
|
|
528
|
-
if (t.type === "select") return
|
|
529
|
-
d(!1),
|
|
506
|
+
if (e.preventDefault(), t.type === "highlight") return k(t.index);
|
|
507
|
+
if (t.type === "select") return pe(L[t.index], { shiftKey: e.shiftKey });
|
|
508
|
+
d(!1), k(-1);
|
|
530
509
|
}
|
|
531
510
|
}, [
|
|
532
511
|
u,
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
]),
|
|
512
|
+
L,
|
|
513
|
+
O,
|
|
514
|
+
pe
|
|
515
|
+
]), B = V((e) => {
|
|
537
516
|
let t = e.target.value;
|
|
538
|
-
if (
|
|
517
|
+
if (P?.valueType === "number") {
|
|
539
518
|
let e = parseFloat(t);
|
|
540
519
|
isNaN(e) ? (t === "" || t === "-") && s({
|
|
541
520
|
...o,
|
|
@@ -548,110 +527,110 @@ function Ae({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
|
|
|
548
527
|
...o,
|
|
549
528
|
values: t ? [t] : []
|
|
550
529
|
});
|
|
551
|
-
}, [o,
|
|
530
|
+
}, [o, P?.valueType]), ge = V((e) => {
|
|
552
531
|
let t = parseFloat(e.target.value), n = [isNaN(t) ? "" : t, (o.values?.length >= 2 ? o.values : ["", ""])[1]].filter((e) => e !== "");
|
|
553
532
|
s({
|
|
554
533
|
...o,
|
|
555
534
|
values: n
|
|
556
535
|
});
|
|
557
|
-
}, [o]),
|
|
536
|
+
}, [o]), _e = V((e) => {
|
|
558
537
|
let t = parseFloat(e.target.value), n = [(o.values?.length >= 2 ? o.values : ["", ""])[0], isNaN(t) ? "" : t].filter((e) => e !== "");
|
|
559
538
|
s({
|
|
560
539
|
...o,
|
|
561
540
|
values: n
|
|
562
541
|
});
|
|
563
|
-
}, [o]),
|
|
542
|
+
}, [o]), ve = V((e) => {
|
|
564
543
|
let t = e.target.value;
|
|
565
544
|
s({
|
|
566
545
|
...o,
|
|
567
546
|
values: t ? [t] : []
|
|
568
547
|
});
|
|
569
|
-
}, [o]),
|
|
570
|
-
|
|
548
|
+
}, [o]), ye = V((e) => {
|
|
549
|
+
_(e), p(!1);
|
|
571
550
|
let t;
|
|
572
551
|
if (e === "custom") {
|
|
573
552
|
let e = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
574
553
|
t = [e, e];
|
|
575
|
-
} else t = te(e) ?
|
|
554
|
+
} else t = te(e) ? N(e, y) : N(e);
|
|
576
555
|
s({
|
|
577
556
|
...o,
|
|
578
557
|
dateRange: t
|
|
579
558
|
});
|
|
580
|
-
}, [o,
|
|
581
|
-
if (
|
|
582
|
-
let t =
|
|
559
|
+
}, [o, y]), be = V((e) => {
|
|
560
|
+
if (b(e), te(g)) {
|
|
561
|
+
let t = N(g, e);
|
|
583
562
|
s({
|
|
584
563
|
...o,
|
|
585
564
|
dateRange: t
|
|
586
565
|
});
|
|
587
566
|
}
|
|
588
|
-
}, [o,
|
|
567
|
+
}, [o, g]), xe = V((e) => {
|
|
589
568
|
let t = e.target.value, n = (Array.isArray(o.dateRange) ? o.dateRange : [o.dateRange || "", ""])[1] || t;
|
|
590
569
|
s({
|
|
591
570
|
...o,
|
|
592
571
|
dateRange: [t, n]
|
|
593
572
|
});
|
|
594
|
-
}, [o]),
|
|
573
|
+
}, [o]), Se = V((e) => {
|
|
595
574
|
let t = e.target.value, n = (Array.isArray(o.dateRange) ? o.dateRange : ["", o.dateRange || ""])[0] || t;
|
|
596
575
|
s({
|
|
597
576
|
...o,
|
|
598
577
|
dateRange: [n, t]
|
|
599
578
|
});
|
|
600
|
-
}, [o]),
|
|
579
|
+
}, [o]), Ce = a(se.find((e) => e.operator === o.operator)?.label || o.operator), we = a(m.find((e) => e.value === g)?.label || "filter.modal.selectRange"), Te = {
|
|
601
580
|
filter: o,
|
|
602
|
-
operatorMeta:
|
|
603
|
-
shouldShowDateRange:
|
|
604
|
-
shouldShowComboBox:
|
|
605
|
-
},
|
|
606
|
-
rangeType:
|
|
607
|
-
numberValue:
|
|
608
|
-
label:
|
|
581
|
+
operatorMeta: P,
|
|
582
|
+
shouldShowDateRange: F,
|
|
583
|
+
shouldShowComboBox: I
|
|
584
|
+
}, Y = {
|
|
585
|
+
rangeType: g,
|
|
586
|
+
numberValue: y,
|
|
587
|
+
label: we,
|
|
609
588
|
isOpen: f,
|
|
610
589
|
onToggle: p,
|
|
611
|
-
onRangeTypeChange:
|
|
612
|
-
onNumberValueChange:
|
|
613
|
-
onCustomStartDate:
|
|
614
|
-
onCustomEndDate:
|
|
615
|
-
onOpen:
|
|
590
|
+
onRangeTypeChange: ye,
|
|
591
|
+
onNumberValueChange: be,
|
|
592
|
+
onCustomStartDate: xe,
|
|
593
|
+
onCustomEndDate: Se,
|
|
594
|
+
onOpen: V(() => {
|
|
616
595
|
l(!1), d(!1);
|
|
617
596
|
}, [])
|
|
618
|
-
},
|
|
597
|
+
}, De = {
|
|
619
598
|
isOpen: u,
|
|
620
|
-
options:
|
|
621
|
-
loading:
|
|
622
|
-
error:
|
|
623
|
-
searchText:
|
|
624
|
-
highlightedIndex:
|
|
625
|
-
listRef:
|
|
626
|
-
onSearchTextChange:
|
|
627
|
-
onHighlightedIndexChange:
|
|
628
|
-
onSelect:
|
|
629
|
-
onRemove:
|
|
630
|
-
onKeyDown:
|
|
631
|
-
onOpen:
|
|
599
|
+
options: L,
|
|
600
|
+
loading: ue,
|
|
601
|
+
error: de,
|
|
602
|
+
searchText: C,
|
|
603
|
+
highlightedIndex: O,
|
|
604
|
+
listRef: A,
|
|
605
|
+
onSearchTextChange: w,
|
|
606
|
+
onHighlightedIndexChange: k,
|
|
607
|
+
onSelect: pe,
|
|
608
|
+
onRemove: me,
|
|
609
|
+
onKeyDown: he,
|
|
610
|
+
onOpen: V(() => {
|
|
632
611
|
l(!1), p(!1), d((e) => !e);
|
|
633
612
|
}, [])
|
|
634
|
-
},
|
|
635
|
-
onBetweenStart:
|
|
636
|
-
onBetweenEnd:
|
|
637
|
-
onDate:
|
|
638
|
-
onDirect:
|
|
613
|
+
}, Oe = U(() => ({
|
|
614
|
+
onBetweenStart: ge,
|
|
615
|
+
onBetweenEnd: _e,
|
|
616
|
+
onDate: ve,
|
|
617
|
+
onDirect: B
|
|
639
618
|
}), [
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
]),
|
|
645
|
-
return /* @__PURE__ */
|
|
646
|
-
className: `dc:fixed dc:inset-0 bg-dc-overlay dc:z-50 ${
|
|
619
|
+
ge,
|
|
620
|
+
_e,
|
|
621
|
+
ve,
|
|
622
|
+
B
|
|
623
|
+
]), ke = M ? Ie : ie ? Le : Fe;
|
|
624
|
+
return /* @__PURE__ */ q(K, { children: /* @__PURE__ */ q("div", {
|
|
625
|
+
className: `dc:fixed dc:inset-0 bg-dc-overlay dc:z-50 ${T ? "" : "dc:flex dc:items-center dc:justify-center dc:p-4"}`,
|
|
647
626
|
onClick: r,
|
|
648
|
-
children: /* @__PURE__ */
|
|
627
|
+
children: /* @__PURE__ */ J("div", {
|
|
649
628
|
ref: ee,
|
|
650
|
-
className:
|
|
629
|
+
className: T ? "bg-dc-surface rounded-lg border border-dc-border" : "bg-dc-surface rounded-lg border border-dc-border max-w-md w-full",
|
|
651
630
|
style: {
|
|
652
|
-
...
|
|
631
|
+
...T ? {
|
|
653
632
|
position: "fixed",
|
|
654
|
-
...
|
|
633
|
+
...T,
|
|
655
634
|
maxWidth: "400px",
|
|
656
635
|
width: "100%"
|
|
657
636
|
} : {},
|
|
@@ -659,71 +638,71 @@ function Ae({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
|
|
|
659
638
|
},
|
|
660
639
|
onClick: (e) => e.stopPropagation(),
|
|
661
640
|
children: [
|
|
662
|
-
/* @__PURE__ */
|
|
641
|
+
/* @__PURE__ */ J("div", {
|
|
663
642
|
className: "dc:flex dc:items-center dc:justify-between dc:p-4 dc:border-b border-dc-border",
|
|
664
|
-
children: [/* @__PURE__ */
|
|
643
|
+
children: [/* @__PURE__ */ q("h2", {
|
|
665
644
|
className: "dc:text-lg dc:font-semibold text-dc-text",
|
|
666
645
|
children: a("filter.modal.title")
|
|
667
|
-
}), /* @__PURE__ */
|
|
646
|
+
}), /* @__PURE__ */ q("button", {
|
|
668
647
|
onClick: r,
|
|
669
648
|
className: "dc:p-1 text-dc-text-muted hover:text-dc-text dc:transition-colors",
|
|
670
|
-
children: /* @__PURE__ */
|
|
649
|
+
children: /* @__PURE__ */ q(Ne, { className: "dc:w-5 dc:h-5" })
|
|
671
650
|
})]
|
|
672
651
|
}),
|
|
673
|
-
/* @__PURE__ */
|
|
652
|
+
/* @__PURE__ */ J("div", {
|
|
674
653
|
className: "dc:p-4 dc:space-y-4",
|
|
675
654
|
children: [
|
|
676
|
-
/* @__PURE__ */
|
|
655
|
+
/* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("label", {
|
|
677
656
|
className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
|
|
678
657
|
children: a("filter.modal.fieldLabel")
|
|
679
|
-
}), /* @__PURE__ */
|
|
658
|
+
}), /* @__PURE__ */ J("div", {
|
|
680
659
|
className: "dc:flex dc:items-center dc:gap-2 dc:p-3 bg-dc-surface-secondary dc:rounded",
|
|
681
|
-
children: [/* @__PURE__ */
|
|
660
|
+
children: [/* @__PURE__ */ q(ke, { className: "dc:w-5 dc:h-5 text-dc-filter-text" }), /* @__PURE__ */ q("span", {
|
|
682
661
|
className: "dc:text-sm dc:font-medium text-dc-text",
|
|
683
|
-
children:
|
|
662
|
+
children: oe
|
|
684
663
|
})]
|
|
685
664
|
})] }),
|
|
686
|
-
/* @__PURE__ */
|
|
665
|
+
/* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("label", {
|
|
687
666
|
className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
|
|
688
667
|
children: a("filter.modal.operatorLabel")
|
|
689
|
-
}), /* @__PURE__ */
|
|
668
|
+
}), /* @__PURE__ */ J("div", {
|
|
690
669
|
className: "dc:relative",
|
|
691
|
-
children: [/* @__PURE__ */
|
|
670
|
+
children: [/* @__PURE__ */ J("button", {
|
|
692
671
|
onClick: () => {
|
|
693
672
|
d(!1), p(!1), l(!c);
|
|
694
673
|
},
|
|
695
674
|
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",
|
|
696
|
-
children: [/* @__PURE__ */
|
|
675
|
+
children: [/* @__PURE__ */ q("span", {
|
|
697
676
|
className: "dc:truncate",
|
|
698
|
-
children:
|
|
699
|
-
}), /* @__PURE__ */
|
|
700
|
-
}), c && /* @__PURE__ */
|
|
677
|
+
children: Ce
|
|
678
|
+
}), /* @__PURE__ */ q(Pe, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${c ? "dc:rotate-180" : ""}` })]
|
|
679
|
+
}), c && /* @__PURE__ */ q("div", {
|
|
701
680
|
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",
|
|
702
|
-
children:
|
|
703
|
-
onClick: () =>
|
|
681
|
+
children: se.map((e) => /* @__PURE__ */ q("button", {
|
|
682
|
+
onClick: () => fe(e.operator),
|
|
704
683
|
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"}`,
|
|
705
684
|
children: a(e.label)
|
|
706
685
|
}, e.operator))
|
|
707
686
|
})]
|
|
708
687
|
})] }),
|
|
709
|
-
/* @__PURE__ */
|
|
688
|
+
/* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("label", {
|
|
710
689
|
className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
|
|
711
690
|
children: a("filter.modal.valueLabel")
|
|
712
|
-
}), /* @__PURE__ */
|
|
713
|
-
field:
|
|
714
|
-
dateRange:
|
|
715
|
-
combo:
|
|
716
|
-
inputs:
|
|
691
|
+
}), /* @__PURE__ */ q(Me, {
|
|
692
|
+
field: Te,
|
|
693
|
+
dateRange: Y,
|
|
694
|
+
combo: De,
|
|
695
|
+
inputs: Oe
|
|
717
696
|
})] })
|
|
718
697
|
]
|
|
719
698
|
}),
|
|
720
|
-
/* @__PURE__ */
|
|
699
|
+
/* @__PURE__ */ J("div", {
|
|
721
700
|
className: "dc:flex dc:items-center dc:justify-end dc:gap-2 dc:p-4 dc:border-t border-dc-border",
|
|
722
|
-
children: [/* @__PURE__ */
|
|
701
|
+
children: [/* @__PURE__ */ q("button", {
|
|
723
702
|
onClick: r,
|
|
724
703
|
className: "dc:px-4 dc:py-2 dc:text-sm dc:font-medium text-dc-text-secondary hover:text-dc-text dc:transition-colors",
|
|
725
704
|
children: a("common.actions.cancel")
|
|
726
|
-
}), /* @__PURE__ */
|
|
705
|
+
}), /* @__PURE__ */ q("button", {
|
|
727
706
|
onClick: () => n(o),
|
|
728
707
|
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",
|
|
729
708
|
children: a("common.actions.save")
|
|
@@ -735,47 +714,47 @@ function Ae({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
|
|
|
735
714
|
}
|
|
736
715
|
//#endregion
|
|
737
716
|
//#region src/client/components/AnalysisBuilder/AnalysisFilterItem.tsx
|
|
738
|
-
var
|
|
739
|
-
function
|
|
740
|
-
let { t: i } =
|
|
741
|
-
return /* @__PURE__ */
|
|
717
|
+
var ze = l("close"), Be = l("dimension"), Ve = l("timeDimension"), He = l("measure");
|
|
718
|
+
function Ue({ filter: e, schema: t, onRemove: n, onUpdate: r }) {
|
|
719
|
+
let { t: i } = R(), [a, o] = G(!1), s = W(null), c = E(e.member, t), l = (c?.field.type || "string") === "time", u = c?.fieldType === "measure", d = h(e.member, t), f = x[e.operator], p = f?.label ? i(f.label) : e.operator, m = We(e, f, i), g = l ? Ve : u ? He : Be;
|
|
720
|
+
return /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ J("div", {
|
|
742
721
|
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",
|
|
743
722
|
children: [
|
|
744
|
-
/* @__PURE__ */
|
|
723
|
+
/* @__PURE__ */ q("span", {
|
|
745
724
|
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:
|
|
725
|
+
children: g && /* @__PURE__ */ q(g, { className: "dc:w-4 dc:h-4" })
|
|
747
726
|
}),
|
|
748
|
-
/* @__PURE__ */
|
|
727
|
+
/* @__PURE__ */ q("button", {
|
|
749
728
|
ref: s,
|
|
750
729
|
onClick: () => o(!0),
|
|
751
730
|
className: "dc:flex-1 dc:min-w-0 dc:text-left",
|
|
752
731
|
title: `${d} ${p} ${m}`,
|
|
753
|
-
children: /* @__PURE__ */
|
|
732
|
+
children: /* @__PURE__ */ J("div", {
|
|
754
733
|
className: "dc:text-sm text-dc-text dc:break-words",
|
|
755
734
|
children: [
|
|
756
|
-
/* @__PURE__ */
|
|
735
|
+
/* @__PURE__ */ q("span", {
|
|
757
736
|
className: "dc:font-medium",
|
|
758
737
|
children: d
|
|
759
738
|
}),
|
|
760
|
-
/* @__PURE__ */
|
|
739
|
+
/* @__PURE__ */ q("span", {
|
|
761
740
|
className: "text-dc-text-muted dc:mx-1",
|
|
762
741
|
children: p
|
|
763
742
|
}),
|
|
764
|
-
/* @__PURE__ */
|
|
743
|
+
/* @__PURE__ */ q("span", {
|
|
765
744
|
className: "text-dc-primary",
|
|
766
745
|
children: m
|
|
767
746
|
})
|
|
768
747
|
]
|
|
769
748
|
})
|
|
770
749
|
}),
|
|
771
|
-
/* @__PURE__ */
|
|
750
|
+
/* @__PURE__ */ q("button", {
|
|
772
751
|
onClick: n,
|
|
773
752
|
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",
|
|
774
753
|
title: i("filter.removeButton.title"),
|
|
775
|
-
children:
|
|
754
|
+
children: ze && /* @__PURE__ */ q(ze, { className: "dc:w-4 dc:h-4" })
|
|
776
755
|
})
|
|
777
756
|
]
|
|
778
|
-
}), a && /* @__PURE__ */
|
|
757
|
+
}), a && /* @__PURE__ */ q(Re, {
|
|
779
758
|
filter: e,
|
|
780
759
|
schema: t,
|
|
781
760
|
onSave: (e) => {
|
|
@@ -785,7 +764,7 @@ function Fe({ filter: e, schema: t, onRemove: n, onUpdate: r }) {
|
|
|
785
764
|
anchorElement: s.current
|
|
786
765
|
})] });
|
|
787
766
|
}
|
|
788
|
-
function
|
|
767
|
+
function We(e, t, n) {
|
|
789
768
|
if (!t?.requiresValues) return "";
|
|
790
769
|
if (e.dateRange) return Array.isArray(e.dateRange) ? `${e.dateRange[0]} to ${e.dateRange[1]}` : e.dateRange;
|
|
791
770
|
let r = e.values || [];
|
|
@@ -793,34 +772,24 @@ function Ie(e, t, n) {
|
|
|
793
772
|
}
|
|
794
773
|
//#endregion
|
|
795
774
|
//#region src/client/components/AnalysisBuilder/AnalysisFilterGroup.tsx
|
|
796
|
-
var
|
|
797
|
-
function
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
function Be(e) {
|
|
801
|
-
return "type" in e && (e.type === "and" || e.type === "or");
|
|
802
|
-
}
|
|
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(() => {
|
|
775
|
+
var Ge = l("add"), Ke = l("close");
|
|
776
|
+
function qe({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, depth: a = 0, hideRemoveButton: o = !1 }) {
|
|
777
|
+
let { t: s } = R(), [c, l] = G(!1), u = W(null);
|
|
778
|
+
H(() => {
|
|
806
779
|
let e = (e) => {
|
|
807
780
|
u.current && !u.current.contains(e.target) && l(!1);
|
|
808
781
|
};
|
|
809
782
|
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
810
783
|
}, []);
|
|
811
|
-
let d =
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
...e,
|
|
815
|
-
type: t
|
|
816
|
-
});
|
|
817
|
-
}, [e, n]), f = I((t, r) => {
|
|
784
|
+
let d = V(() => {
|
|
785
|
+
n(j(e));
|
|
786
|
+
}, [e, n]), f = V((t, r) => {
|
|
818
787
|
let i = [...e.filters];
|
|
819
788
|
i[t] = r, n({
|
|
820
789
|
...e,
|
|
821
790
|
filters: i
|
|
822
791
|
});
|
|
823
|
-
}, [e, n]), p =
|
|
792
|
+
}, [e, n]), p = V((t) => {
|
|
824
793
|
let i = e.filters.filter((e, n) => n !== t);
|
|
825
794
|
i.length === 0 ? r() : n({
|
|
826
795
|
...e,
|
|
@@ -831,7 +800,7 @@ function Ve({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
|
|
|
831
800
|
n,
|
|
832
801
|
r,
|
|
833
802
|
a
|
|
834
|
-
]), m =
|
|
803
|
+
]), m = V((t) => {
|
|
835
804
|
let r = {
|
|
836
805
|
type: t,
|
|
837
806
|
filters: []
|
|
@@ -840,23 +809,23 @@ function Ve({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
|
|
|
840
809
|
...e,
|
|
841
810
|
filters: [...e.filters, r]
|
|
842
811
|
}), l(!1);
|
|
843
|
-
}, [e, n]), h =
|
|
812
|
+
}, [e, n]), h = V(() => {
|
|
844
813
|
i([]), l(!1);
|
|
845
|
-
}, [i]), g =
|
|
814
|
+
}, [i]), g = V((e) => (t = []) => {
|
|
846
815
|
i([e, ...t]);
|
|
847
816
|
}, [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");
|
|
848
|
-
return /* @__PURE__ */
|
|
817
|
+
return /* @__PURE__ */ J("div", {
|
|
849
818
|
className: `dc:border ${_()} dc:rounded-lg bg-dc-surface dc:w-full`,
|
|
850
|
-
children: [/* @__PURE__ */
|
|
819
|
+
children: [/* @__PURE__ */ J("div", {
|
|
851
820
|
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()}`,
|
|
852
|
-
children: [/* @__PURE__ */
|
|
821
|
+
children: [/* @__PURE__ */ J("div", {
|
|
853
822
|
className: "dc:flex dc:items-center dc:gap-2",
|
|
854
|
-
children: [/* @__PURE__ */
|
|
823
|
+
children: [/* @__PURE__ */ q("button", {
|
|
855
824
|
onClick: d,
|
|
856
825
|
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"}`,
|
|
857
826
|
title: `Click to switch to ${e.type === "and" ? "OR" : "AND"}`,
|
|
858
827
|
children: e.type.toUpperCase()
|
|
859
|
-
}), /* @__PURE__ */
|
|
828
|
+
}), /* @__PURE__ */ J("span", {
|
|
860
829
|
className: "dc:text-xs text-dc-text-muted",
|
|
861
830
|
children: [
|
|
862
831
|
y,
|
|
@@ -864,61 +833,61 @@ function Ve({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
|
|
|
864
833
|
b
|
|
865
834
|
]
|
|
866
835
|
})]
|
|
867
|
-
}), /* @__PURE__ */
|
|
836
|
+
}), /* @__PURE__ */ J("div", {
|
|
868
837
|
className: "dc:flex dc:items-center dc:gap-1",
|
|
869
|
-
children: [/* @__PURE__ */
|
|
838
|
+
children: [/* @__PURE__ */ J("div", {
|
|
870
839
|
className: "dc:relative",
|
|
871
840
|
ref: u,
|
|
872
|
-
children: [/* @__PURE__ */
|
|
841
|
+
children: [/* @__PURE__ */ q("button", {
|
|
873
842
|
onClick: () => l(!c),
|
|
874
843
|
className: "dc:p-1 text-dc-text-secondary hover:text-dc-primary hover:bg-dc-surface-hover dc:rounded dc:transition-colors",
|
|
875
844
|
title: "Add condition",
|
|
876
|
-
children: /* @__PURE__ */
|
|
877
|
-
}), c && /* @__PURE__ */
|
|
845
|
+
children: /* @__PURE__ */ q(Ge, { className: "dc:w-4 dc:h-4" })
|
|
846
|
+
}), c && /* @__PURE__ */ J("div", {
|
|
878
847
|
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]",
|
|
879
848
|
children: [
|
|
880
|
-
/* @__PURE__ */
|
|
849
|
+
/* @__PURE__ */ q("button", {
|
|
881
850
|
onClick: h,
|
|
882
851
|
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",
|
|
883
852
|
children: s("filter.group.addFilter")
|
|
884
853
|
}),
|
|
885
|
-
/* @__PURE__ */
|
|
854
|
+
/* @__PURE__ */ q("button", {
|
|
886
855
|
onClick: () => m("and"),
|
|
887
856
|
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",
|
|
888
857
|
children: s("filter.group.addAndGroup")
|
|
889
858
|
}),
|
|
890
|
-
/* @__PURE__ */
|
|
859
|
+
/* @__PURE__ */ q("button", {
|
|
891
860
|
onClick: () => m("or"),
|
|
892
861
|
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",
|
|
893
862
|
children: s("filter.group.addOrGroup")
|
|
894
863
|
})
|
|
895
864
|
]
|
|
896
865
|
})]
|
|
897
|
-
}), !o && /* @__PURE__ */
|
|
866
|
+
}), !o && /* @__PURE__ */ q("button", {
|
|
898
867
|
onClick: r,
|
|
899
868
|
className: "dc:p-1 text-dc-text-muted hover:text-dc-danger dc:transition-colors",
|
|
900
869
|
title: s("filter.group.removeGroup"),
|
|
901
|
-
children: /* @__PURE__ */
|
|
870
|
+
children: /* @__PURE__ */ q(Ke, { className: "dc:w-4 dc:h-4" })
|
|
902
871
|
})]
|
|
903
872
|
})]
|
|
904
|
-
}), /* @__PURE__ */
|
|
873
|
+
}), /* @__PURE__ */ q("div", {
|
|
905
874
|
className: "dc:p-1.5 dc:flex dc:flex-wrap dc:gap-2",
|
|
906
|
-
children: e.filters.length === 0 ? /* @__PURE__ */
|
|
875
|
+
children: e.filters.length === 0 ? /* @__PURE__ */ J("div", {
|
|
907
876
|
className: "dc:text-center dc:py-3",
|
|
908
|
-
children: [/* @__PURE__ */
|
|
877
|
+
children: [/* @__PURE__ */ q("p", {
|
|
909
878
|
className: "dc:text-xs text-dc-text-muted dc:mb-1",
|
|
910
879
|
children: s("filter.group.empty")
|
|
911
|
-
}), /* @__PURE__ */
|
|
880
|
+
}), /* @__PURE__ */ q("button", {
|
|
912
881
|
onClick: () => i([]),
|
|
913
882
|
className: "dc:text-xs text-dc-primary dc:hover:underline",
|
|
914
883
|
children: s("filter.group.addFilterLink")
|
|
915
884
|
})]
|
|
916
|
-
}) : e.filters.map((e, n) =>
|
|
885
|
+
}) : e.filters.map((e, n) => M(e) ? /* @__PURE__ */ q(Ue, {
|
|
917
886
|
filter: e,
|
|
918
887
|
schema: t,
|
|
919
888
|
onUpdate: (e) => f(n, e),
|
|
920
889
|
onRemove: () => p(n)
|
|
921
|
-
}, `filter-${n}`) :
|
|
890
|
+
}, `filter-${n}`) : re(e) ? /* @__PURE__ */ q(qe, {
|
|
922
891
|
group: e,
|
|
923
892
|
schema: t,
|
|
924
893
|
onUpdate: (e) => f(n, e),
|
|
@@ -931,178 +900,134 @@ function Ve({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
|
|
|
931
900
|
}
|
|
932
901
|
//#endregion
|
|
933
902
|
//#region src/client/components/AnalysisBuilder/AnalysisFilterSection.tsx
|
|
934
|
-
var
|
|
935
|
-
function
|
|
936
|
-
|
|
937
|
-
}
|
|
938
|
-
function We(e) {
|
|
939
|
-
return "type" in e && (e.type === "and" || e.type === "or");
|
|
940
|
-
}
|
|
941
|
-
function Ge(e) {
|
|
942
|
-
let t = 0;
|
|
943
|
-
for (let n of e) Ue(n) ? t++ : We(n) && (t += Ge(n.filters));
|
|
944
|
-
return t;
|
|
945
|
-
}
|
|
946
|
-
function Ke(e) {
|
|
947
|
-
let t = [];
|
|
948
|
-
for (let n of e) Ue(n) ? t.push(n.member) : We(n) && t.push(...Ke(n.filters));
|
|
949
|
-
return t;
|
|
950
|
-
}
|
|
951
|
-
function qe(e, t, n) {
|
|
952
|
-
if (t.length === 0) return e.length === 0 ? [n] : e.length === 1 && Ue(e[0]) ? [{
|
|
953
|
-
type: "and",
|
|
954
|
-
filters: [e[0], n]
|
|
955
|
-
}] : e.length === 1 && We(e[0]) ? [{
|
|
956
|
-
...e[0],
|
|
957
|
-
filters: [...e[0].filters, n]
|
|
958
|
-
}] : [{
|
|
959
|
-
type: "and",
|
|
960
|
-
filters: [...e, n]
|
|
961
|
-
}];
|
|
962
|
-
let [r, ...i] = t, a = [...e], o = a[r];
|
|
963
|
-
return We(o) && (i.length === 0 ? a[r] = {
|
|
964
|
-
...o,
|
|
965
|
-
filters: [...o.filters, n]
|
|
966
|
-
} : a[r] = {
|
|
967
|
-
...o,
|
|
968
|
-
filters: qe(o.filters, i, n)
|
|
969
|
-
}), a;
|
|
970
|
-
}
|
|
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) => {
|
|
903
|
+
var Je = l("add");
|
|
904
|
+
function Ye({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dimensionsOnly: i = !1 }) {
|
|
905
|
+
let { t: a } = R(), [o, s] = G(!1), [c, l] = G(!1), u = W([]), d = I(e), f = V((e) => {
|
|
973
906
|
e.preventDefault(), e.stopPropagation(), l(!0);
|
|
974
|
-
}, []),
|
|
907
|
+
}, []), p = V((e) => {
|
|
975
908
|
e.preventDefault(), e.stopPropagation(), l(!1);
|
|
976
|
-
}, []),
|
|
909
|
+
}, []), m = V((e) => {
|
|
977
910
|
e.preventDefault(), e.stopPropagation(), l(!1);
|
|
978
911
|
try {
|
|
979
912
|
let t = JSON.parse(e.dataTransfer.getData("text/plain"));
|
|
980
913
|
t.field && r && r(t.field);
|
|
981
914
|
} catch {}
|
|
982
|
-
}, [r]),
|
|
915
|
+
}, [r]), h = A(e), g = V((t, r, i) => {
|
|
983
916
|
let a = t.type === "time", o = a ? "inDateRange" : "equals", c = {
|
|
984
917
|
member: t.name,
|
|
985
918
|
operator: o,
|
|
986
919
|
values: []
|
|
987
920
|
};
|
|
988
|
-
a && o === "inDateRange" && (c.dateRange =
|
|
989
|
-
}, [e, n]),
|
|
921
|
+
a && o === "inDateRange" && (c.dateRange = N("this_month")), n(ie(e, u.current, c)), s(!1), u.current = [];
|
|
922
|
+
}, [e, n]), _ = V((t, r) => {
|
|
990
923
|
let i = [...e];
|
|
991
924
|
i[t] = r, n(i);
|
|
992
|
-
}, [e, n]),
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
let e = r[0];
|
|
996
|
-
if (e.filters.length === 1) {
|
|
997
|
-
n([e.filters[0]]);
|
|
998
|
-
return;
|
|
999
|
-
}
|
|
1000
|
-
}
|
|
1001
|
-
n(r);
|
|
1002
|
-
}, [e, n]), b = I(() => {
|
|
925
|
+
}, [e, n]), v = V((t) => {
|
|
926
|
+
n(ae(e, t));
|
|
927
|
+
}, [e, n]), y = V(() => {
|
|
1003
928
|
n([]);
|
|
1004
|
-
}, [n]),
|
|
929
|
+
}, [n]), b = V(() => {
|
|
1005
930
|
u.current = [], s(!0);
|
|
1006
|
-
}, []),
|
|
931
|
+
}, []), x = V((e) => (t = []) => {
|
|
1007
932
|
u.current = [...e, ...t], s(!0);
|
|
1008
|
-
}, []),
|
|
933
|
+
}, []), S = (n, r, i = []) => {
|
|
1009
934
|
let a = [...i, r];
|
|
1010
|
-
return
|
|
935
|
+
return M(n) ? /* @__PURE__ */ q(Ue, {
|
|
1011
936
|
filter: n,
|
|
1012
937
|
schema: t,
|
|
1013
|
-
onUpdate: (e) =>
|
|
1014
|
-
onRemove: () =>
|
|
1015
|
-
}, `filter-${a.join("-")}`) :
|
|
938
|
+
onUpdate: (e) => _(r, e),
|
|
939
|
+
onRemove: () => v(r)
|
|
940
|
+
}, `filter-${a.join("-")}`) : re(n) ? /* @__PURE__ */ q(qe, {
|
|
1016
941
|
group: n,
|
|
1017
942
|
schema: t,
|
|
1018
|
-
onUpdate: (e) =>
|
|
1019
|
-
onRemove: () =>
|
|
1020
|
-
onAddFilter:
|
|
943
|
+
onUpdate: (e) => _(r, e),
|
|
944
|
+
onRemove: () => v(r),
|
|
945
|
+
onAddFilter: x(a),
|
|
1021
946
|
hideRemoveButton: e.length === 1
|
|
1022
947
|
}, `group-${a.join("-")}`) : null;
|
|
1023
948
|
};
|
|
1024
|
-
return /* @__PURE__ */
|
|
1025
|
-
/* @__PURE__ */
|
|
1026
|
-
onClick:
|
|
949
|
+
return /* @__PURE__ */ J("div", { children: [
|
|
950
|
+
/* @__PURE__ */ J("button", {
|
|
951
|
+
onClick: b,
|
|
1027
952
|
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",
|
|
1028
953
|
title: "Add filter",
|
|
1029
|
-
children: [/* @__PURE__ */
|
|
954
|
+
children: [/* @__PURE__ */ J(he, { children: [a("analysis.sections.filters"), d > 0 && /* @__PURE__ */ J("span", {
|
|
1030
955
|
className: "dc:ml-1.5 dc:text-xs dc:font-normal text-dc-text-muted dc:normal-case dc:tracking-normal",
|
|
1031
956
|
children: [
|
|
1032
957
|
"(",
|
|
1033
958
|
d,
|
|
1034
959
|
")"
|
|
1035
960
|
]
|
|
1036
|
-
})] }), /* @__PURE__ */
|
|
961
|
+
})] }), /* @__PURE__ */ J("div", {
|
|
1037
962
|
className: "dc:flex dc:items-center dc:gap-2",
|
|
1038
|
-
children: [d > 0 && /* @__PURE__ */
|
|
963
|
+
children: [d > 0 && /* @__PURE__ */ q("span", {
|
|
1039
964
|
role: "button",
|
|
1040
965
|
tabIndex: 0,
|
|
1041
966
|
onClick: (e) => {
|
|
1042
|
-
e.stopPropagation(),
|
|
967
|
+
e.stopPropagation(), y();
|
|
1043
968
|
},
|
|
1044
969
|
onKeyDown: (e) => {
|
|
1045
|
-
(e.key === "Enter" || e.key === " ") && (e.stopPropagation(),
|
|
970
|
+
(e.key === "Enter" || e.key === " ") && (e.stopPropagation(), y());
|
|
1046
971
|
},
|
|
1047
972
|
className: "dc:text-xs text-dc-text-muted hover:text-dc-error dc:underline dc:cursor-pointer",
|
|
1048
973
|
children: a("filter.section.clearAll")
|
|
1049
|
-
}), /* @__PURE__ */
|
|
974
|
+
}), /* @__PURE__ */ q(Je, { className: "dc:w-5 dc:h-5 text-dc-text-secondary group-hover:text-dc-primary dc:transition-colors" })]
|
|
1050
975
|
})]
|
|
1051
976
|
}),
|
|
1052
|
-
/* @__PURE__ */
|
|
977
|
+
/* @__PURE__ */ q("div", {
|
|
1053
978
|
onDragOver: r ? f : void 0,
|
|
1054
|
-
onDragLeave: r ?
|
|
1055
|
-
onDrop: r ?
|
|
979
|
+
onDragLeave: r ? p : void 0,
|
|
980
|
+
onDrop: r ? m : void 0,
|
|
1056
981
|
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"}`,
|
|
1057
|
-
children: e.length === 0 ? /* @__PURE__ */
|
|
982
|
+
children: e.length === 0 ? /* @__PURE__ */ q("p", {
|
|
1058
983
|
className: `dc:text-sm ${c ? "text-dc-primary dc:font-medium" : "text-dc-text-muted"}`,
|
|
1059
984
|
children: a(c ? "filter.section.dropHint" : "filter.section.empty")
|
|
1060
|
-
}) : /* @__PURE__ */
|
|
985
|
+
}) : /* @__PURE__ */ q("div", {
|
|
1061
986
|
className: "dc:flex dc:flex-wrap dc:gap-2",
|
|
1062
|
-
children: e.map((e, t) =>
|
|
987
|
+
children: e.map((e, t) => S(e, t))
|
|
1063
988
|
})
|
|
1064
989
|
}),
|
|
1065
|
-
/* @__PURE__ */
|
|
990
|
+
/* @__PURE__ */ q(T, {
|
|
1066
991
|
isOpen: o,
|
|
1067
992
|
onClose: () => {
|
|
1068
993
|
s(!1), u.current = [];
|
|
1069
994
|
},
|
|
1070
|
-
onSelect:
|
|
995
|
+
onSelect: g,
|
|
1071
996
|
mode: i ? "dimensionFilter" : "filter",
|
|
1072
997
|
schema: t,
|
|
1073
|
-
selectedFields:
|
|
998
|
+
selectedFields: h
|
|
1074
999
|
})
|
|
1075
1000
|
] });
|
|
1076
1001
|
}
|
|
1077
1002
|
//#endregion
|
|
1078
1003
|
//#region src/client/components/AnalysisBuilder/ExplainAIPanel.tsx
|
|
1079
|
-
function
|
|
1004
|
+
function Xe(e) {
|
|
1080
1005
|
return typeof e == "string" ? e : typeof e == "object" && e ? JSON.stringify(e) : String(e ?? "");
|
|
1081
1006
|
}
|
|
1082
|
-
var
|
|
1007
|
+
var Ze = {
|
|
1083
1008
|
good: "bg-dc-success-bg text-dc-success border-dc-success",
|
|
1084
1009
|
warning: "bg-dc-warning-bg text-dc-warning border-dc-warning",
|
|
1085
1010
|
critical: "bg-dc-danger-bg text-dc-error border-dc-error"
|
|
1086
|
-
},
|
|
1011
|
+
}, Qe = {
|
|
1087
1012
|
critical: "bg-dc-danger-bg text-dc-error",
|
|
1088
1013
|
warning: "bg-dc-warning-bg text-dc-warning",
|
|
1089
1014
|
suggestion: "bg-dc-accent-bg text-dc-accent"
|
|
1090
|
-
},
|
|
1015
|
+
}, $e = {
|
|
1091
1016
|
high: "text-dc-error",
|
|
1092
1017
|
medium: "text-dc-warning",
|
|
1093
1018
|
low: "text-dc-text-muted"
|
|
1094
1019
|
};
|
|
1095
|
-
function
|
|
1096
|
-
let { t: n } =
|
|
1020
|
+
function et({ assessment: e, reason: t }) {
|
|
1021
|
+
let { t: n } = R(), r = {
|
|
1097
1022
|
good: n("explainAI.assessment.good"),
|
|
1098
1023
|
warning: n("explainAI.assessment.warning"),
|
|
1099
1024
|
critical: n("explainAI.assessment.critical")
|
|
1100
1025
|
};
|
|
1101
|
-
return /* @__PURE__ */
|
|
1102
|
-
className: `dc:p-4 dc:rounded-lg dc:border ${
|
|
1103
|
-
children: [/* @__PURE__ */
|
|
1026
|
+
return /* @__PURE__ */ J("div", {
|
|
1027
|
+
className: `dc:p-4 dc:rounded-lg dc:border ${Ze[e]}`,
|
|
1028
|
+
children: [/* @__PURE__ */ q("div", {
|
|
1104
1029
|
className: "dc:flex dc:items-center dc:gap-2 dc:mb-1",
|
|
1105
|
-
children: /* @__PURE__ */
|
|
1030
|
+
children: /* @__PURE__ */ J("span", {
|
|
1106
1031
|
className: "dc:font-semibold dc:uppercase dc:text-base",
|
|
1107
1032
|
children: [
|
|
1108
1033
|
e === "good" && "✓ ",
|
|
@@ -1111,33 +1036,33 @@ function Qe({ assessment: e, reason: t }) {
|
|
|
1111
1036
|
r[e]
|
|
1112
1037
|
]
|
|
1113
1038
|
})
|
|
1114
|
-
}), /* @__PURE__ */
|
|
1039
|
+
}), /* @__PURE__ */ q("p", {
|
|
1115
1040
|
className: "dc:text-sm",
|
|
1116
|
-
children:
|
|
1041
|
+
children: Xe(t)
|
|
1117
1042
|
})]
|
|
1118
1043
|
});
|
|
1119
1044
|
}
|
|
1120
|
-
function
|
|
1121
|
-
return /* @__PURE__ */
|
|
1045
|
+
function tt({ issue: e }) {
|
|
1046
|
+
return /* @__PURE__ */ J("div", {
|
|
1122
1047
|
className: "dc:flex dc:items-start dc:gap-2 dc:py-2",
|
|
1123
|
-
children: [/* @__PURE__ */
|
|
1124
|
-
className: `dc:text-sm ${
|
|
1048
|
+
children: [/* @__PURE__ */ J("span", {
|
|
1049
|
+
className: `dc:text-sm ${$e[e.severity]}`,
|
|
1125
1050
|
children: [
|
|
1126
1051
|
e.severity === "high" && "●",
|
|
1127
1052
|
e.severity === "medium" && "○",
|
|
1128
1053
|
e.severity === "low" && "○"
|
|
1129
1054
|
]
|
|
1130
|
-
}), /* @__PURE__ */
|
|
1055
|
+
}), /* @__PURE__ */ q("span", {
|
|
1131
1056
|
className: "dc:text-sm text-dc-text-secondary",
|
|
1132
|
-
children:
|
|
1057
|
+
children: Xe(e.description)
|
|
1133
1058
|
})]
|
|
1134
1059
|
});
|
|
1135
1060
|
}
|
|
1136
|
-
function
|
|
1137
|
-
let { t } =
|
|
1138
|
-
return
|
|
1061
|
+
function nt({ text: e }) {
|
|
1062
|
+
let { t } = R(), [n, r] = B.useState(!1), i = B.useRef(null);
|
|
1063
|
+
return B.useEffect(() => () => {
|
|
1139
1064
|
i.current && clearTimeout(i.current);
|
|
1140
|
-
}, []), /* @__PURE__ */
|
|
1065
|
+
}, []), /* @__PURE__ */ q("button", {
|
|
1141
1066
|
onClick: async () => {
|
|
1142
1067
|
try {
|
|
1143
1068
|
await navigator.clipboard.writeText(e), r(!0), i.current && clearTimeout(i.current), i.current = setTimeout(() => r(!1), 2e3);
|
|
@@ -1150,104 +1075,104 @@ function et({ text: e }) {
|
|
|
1150
1075
|
children: t(n ? "explainAI.copied" : "explainAI.copy")
|
|
1151
1076
|
});
|
|
1152
1077
|
}
|
|
1153
|
-
function
|
|
1154
|
-
let { t } =
|
|
1078
|
+
function rt({ rec: e }) {
|
|
1079
|
+
let { t } = R(), n = {
|
|
1155
1080
|
index: t("explainAI.type.index"),
|
|
1156
1081
|
table: t("explainAI.type.table"),
|
|
1157
1082
|
cube: t("explainAI.type.cube"),
|
|
1158
1083
|
general: t("explainAI.type.general")
|
|
1159
1084
|
};
|
|
1160
|
-
return /* @__PURE__ */
|
|
1085
|
+
return /* @__PURE__ */ J("div", {
|
|
1161
1086
|
className: "dc:p-4 dc:border border-dc-border dc:rounded-lg bg-dc-surface",
|
|
1162
1087
|
children: [
|
|
1163
|
-
/* @__PURE__ */
|
|
1088
|
+
/* @__PURE__ */ J("div", {
|
|
1164
1089
|
className: "dc:flex dc:items-center dc:gap-2 dc:mb-2",
|
|
1165
|
-
children: [/* @__PURE__ */
|
|
1166
|
-
className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-medium dc:rounded ${
|
|
1090
|
+
children: [/* @__PURE__ */ q("span", {
|
|
1091
|
+
className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-medium dc:rounded ${Qe[e.severity]}`,
|
|
1167
1092
|
children: n[e.type]
|
|
1168
|
-
}), /* @__PURE__ */
|
|
1093
|
+
}), /* @__PURE__ */ q("h5", {
|
|
1169
1094
|
className: "dc:font-medium text-dc-text",
|
|
1170
|
-
children:
|
|
1095
|
+
children: Xe(e.title)
|
|
1171
1096
|
})]
|
|
1172
1097
|
}),
|
|
1173
|
-
/* @__PURE__ */
|
|
1098
|
+
/* @__PURE__ */ q("p", {
|
|
1174
1099
|
className: "dc:text-sm text-dc-text-secondary dc:mb-3",
|
|
1175
|
-
children:
|
|
1100
|
+
children: Xe(e.description)
|
|
1176
1101
|
}),
|
|
1177
|
-
e.sql && /* @__PURE__ */
|
|
1102
|
+
e.sql && /* @__PURE__ */ q("div", {
|
|
1178
1103
|
className: "dc:mt-2",
|
|
1179
|
-
children: /* @__PURE__ */
|
|
1104
|
+
children: /* @__PURE__ */ q(y, {
|
|
1180
1105
|
code: e.sql,
|
|
1181
1106
|
language: "sql",
|
|
1182
|
-
headerRight: /* @__PURE__ */
|
|
1107
|
+
headerRight: /* @__PURE__ */ q(nt, { text: e.sql })
|
|
1183
1108
|
})
|
|
1184
1109
|
}),
|
|
1185
|
-
e.cubeCode && /* @__PURE__ */
|
|
1110
|
+
e.cubeCode && /* @__PURE__ */ J("div", {
|
|
1186
1111
|
className: "dc:mt-2",
|
|
1187
|
-
children: [e.cubeName && /* @__PURE__ */
|
|
1112
|
+
children: [e.cubeName && /* @__PURE__ */ q("p", {
|
|
1188
1113
|
className: "dc:text-xs text-dc-text-muted dc:mb-1",
|
|
1189
1114
|
children: t("explainAI.addToCube", { cubeName: e.cubeName })
|
|
1190
|
-
}), /* @__PURE__ */
|
|
1115
|
+
}), /* @__PURE__ */ J("div", {
|
|
1191
1116
|
className: "dc:relative",
|
|
1192
|
-
children: [/* @__PURE__ */
|
|
1117
|
+
children: [/* @__PURE__ */ q("pre", {
|
|
1193
1118
|
className: "dc:p-3 dc:text-xs bg-dc-surface-secondary dc:rounded dc:overflow-x-auto dc:font-mono text-dc-text",
|
|
1194
1119
|
children: e.cubeCode
|
|
1195
|
-
}), /* @__PURE__ */
|
|
1120
|
+
}), /* @__PURE__ */ q("div", {
|
|
1196
1121
|
className: "dc:absolute dc:top-1 dc:right-1",
|
|
1197
|
-
children: /* @__PURE__ */
|
|
1122
|
+
children: /* @__PURE__ */ q(nt, { text: e.cubeCode })
|
|
1198
1123
|
})]
|
|
1199
1124
|
})]
|
|
1200
1125
|
}),
|
|
1201
|
-
e.estimatedImpact && /* @__PURE__ */
|
|
1126
|
+
e.estimatedImpact && /* @__PURE__ */ J("p", {
|
|
1202
1127
|
className: "dc:text-xs text-dc-text-muted dc:mt-2",
|
|
1203
1128
|
children: [
|
|
1204
|
-
/* @__PURE__ */
|
|
1129
|
+
/* @__PURE__ */ q("strong", { children: t("explainAI.expectedImpact") }),
|
|
1205
1130
|
" ",
|
|
1206
|
-
|
|
1131
|
+
Xe(e.estimatedImpact)
|
|
1207
1132
|
]
|
|
1208
1133
|
})
|
|
1209
1134
|
]
|
|
1210
1135
|
});
|
|
1211
1136
|
}
|
|
1212
|
-
function
|
|
1213
|
-
let { t: r } =
|
|
1214
|
-
return
|
|
1137
|
+
function it({ analysis: e, onClose: t, onClear: n }) {
|
|
1138
|
+
let { t: r } = R(), i = t || n;
|
|
1139
|
+
return B.useEffect(() => {
|
|
1215
1140
|
let e = (e) => {
|
|
1216
1141
|
e.key === "Escape" && i && i();
|
|
1217
1142
|
};
|
|
1218
1143
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
1219
|
-
}, [i]),
|
|
1144
|
+
}, [i]), B.useEffect(() => (document.body.style.overflow = "hidden", () => {
|
|
1220
1145
|
document.body.style.overflow = "";
|
|
1221
|
-
}), []), /* @__PURE__ */
|
|
1146
|
+
}), []), /* @__PURE__ */ J("div", {
|
|
1222
1147
|
className: "dc:fixed dc:inset-0 dc:z-50 dc:flex dc:items-center dc:justify-center dc:p-4 bg-black/50",
|
|
1223
|
-
children: [/* @__PURE__ */
|
|
1148
|
+
children: [/* @__PURE__ */ q("div", {
|
|
1224
1149
|
className: "dc:absolute dc:inset-0",
|
|
1225
1150
|
onClick: i,
|
|
1226
1151
|
"aria-hidden": "true"
|
|
1227
|
-
}), /* @__PURE__ */
|
|
1152
|
+
}), /* @__PURE__ */ J("div", {
|
|
1228
1153
|
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",
|
|
1229
1154
|
children: [
|
|
1230
|
-
/* @__PURE__ */
|
|
1155
|
+
/* @__PURE__ */ J("div", {
|
|
1231
1156
|
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",
|
|
1232
|
-
children: [/* @__PURE__ */
|
|
1157
|
+
children: [/* @__PURE__ */ J("div", {
|
|
1233
1158
|
className: "dc:flex dc:items-center dc:gap-3",
|
|
1234
|
-
children: [/* @__PURE__ */
|
|
1159
|
+
children: [/* @__PURE__ */ q("span", {
|
|
1235
1160
|
className: "dc:text-lg",
|
|
1236
1161
|
children: "✨"
|
|
1237
|
-
}), /* @__PURE__ */
|
|
1162
|
+
}), /* @__PURE__ */ q("h3", {
|
|
1238
1163
|
className: "dc:text-lg dc:font-semibold text-dc-text",
|
|
1239
1164
|
children: r("explainAI.title")
|
|
1240
1165
|
})]
|
|
1241
|
-
}), /* @__PURE__ */
|
|
1166
|
+
}), /* @__PURE__ */ q("button", {
|
|
1242
1167
|
onClick: i,
|
|
1243
1168
|
className: "dc:p-2 dc:rounded-lg hover:bg-dc-surface-hover text-dc-text-secondary hover:text-dc-text dc:transition-colors",
|
|
1244
1169
|
"aria-label": "Close",
|
|
1245
|
-
children: /* @__PURE__ */
|
|
1170
|
+
children: /* @__PURE__ */ q("svg", {
|
|
1246
1171
|
className: "dc:w-5 dc:h-5",
|
|
1247
1172
|
fill: "none",
|
|
1248
1173
|
stroke: "currentColor",
|
|
1249
1174
|
viewBox: "0 0 24 24",
|
|
1250
|
-
children: /* @__PURE__ */
|
|
1175
|
+
children: /* @__PURE__ */ q("path", {
|
|
1251
1176
|
strokeLinecap: "round",
|
|
1252
1177
|
strokeLinejoin: "round",
|
|
1253
1178
|
strokeWidth: 2,
|
|
@@ -1256,50 +1181,50 @@ function nt({ analysis: e, onClose: t, onClear: n }) {
|
|
|
1256
1181
|
})
|
|
1257
1182
|
})]
|
|
1258
1183
|
}),
|
|
1259
|
-
/* @__PURE__ */
|
|
1184
|
+
/* @__PURE__ */ J("div", {
|
|
1260
1185
|
className: "dc:flex-1 dc:overflow-y-auto dc:px-6 dc:py-4 dc:space-y-6",
|
|
1261
1186
|
children: [
|
|
1262
|
-
/* @__PURE__ */
|
|
1187
|
+
/* @__PURE__ */ q(et, {
|
|
1263
1188
|
assessment: e.assessment,
|
|
1264
1189
|
reason: e.assessmentReason
|
|
1265
1190
|
}),
|
|
1266
|
-
/* @__PURE__ */
|
|
1191
|
+
/* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("h4", {
|
|
1267
1192
|
className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
|
|
1268
1193
|
children: r("explainAI.summary")
|
|
1269
|
-
}), /* @__PURE__ */
|
|
1194
|
+
}), /* @__PURE__ */ q("p", {
|
|
1270
1195
|
className: "text-dc-text",
|
|
1271
|
-
children:
|
|
1196
|
+
children: Xe(e.summary)
|
|
1272
1197
|
})] }),
|
|
1273
|
-
e.queryUnderstanding && /* @__PURE__ */
|
|
1198
|
+
e.queryUnderstanding && /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("h4", {
|
|
1274
1199
|
className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
|
|
1275
1200
|
children: r("explainAI.queryAnalysis")
|
|
1276
|
-
}), /* @__PURE__ */
|
|
1201
|
+
}), /* @__PURE__ */ q("p", {
|
|
1277
1202
|
className: "text-dc-text-secondary",
|
|
1278
|
-
children:
|
|
1203
|
+
children: Xe(e.queryUnderstanding)
|
|
1279
1204
|
})] }),
|
|
1280
|
-
e.issues && e.issues.length > 0 && /* @__PURE__ */
|
|
1205
|
+
e.issues && e.issues.length > 0 && /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("h4", {
|
|
1281
1206
|
className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
|
|
1282
1207
|
children: r("explainAI.issuesFound", { count: e.issues.length })
|
|
1283
|
-
}), /* @__PURE__ */
|
|
1208
|
+
}), /* @__PURE__ */ q("div", {
|
|
1284
1209
|
className: "dc:space-y-1 bg-dc-surface-secondary dc:rounded-lg dc:p-3",
|
|
1285
|
-
children: e.issues.map((e, t) => /* @__PURE__ */
|
|
1210
|
+
children: e.issues.map((e, t) => /* @__PURE__ */ q(tt, { issue: e }, t))
|
|
1286
1211
|
})] }),
|
|
1287
|
-
e.recommendations && e.recommendations.length > 0 && /* @__PURE__ */
|
|
1212
|
+
e.recommendations && e.recommendations.length > 0 && /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("h4", {
|
|
1288
1213
|
className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-3",
|
|
1289
1214
|
children: r("explainAI.recommendations", { count: e.recommendations.length })
|
|
1290
|
-
}), /* @__PURE__ */
|
|
1215
|
+
}), /* @__PURE__ */ q("div", {
|
|
1291
1216
|
className: "dc:space-y-4",
|
|
1292
|
-
children: e.recommendations.map((e, t) => /* @__PURE__ */
|
|
1217
|
+
children: e.recommendations.map((e, t) => /* @__PURE__ */ q(rt, { rec: e }, t))
|
|
1293
1218
|
})] }),
|
|
1294
|
-
(!e.recommendations || e.recommendations.length === 0) && /* @__PURE__ */
|
|
1219
|
+
(!e.recommendations || e.recommendations.length === 0) && /* @__PURE__ */ q("div", {
|
|
1295
1220
|
className: "text-dc-text-muted dc:italic dc:p-4 bg-dc-surface-secondary dc:rounded-lg",
|
|
1296
1221
|
children: r("explainAI.noRecommendations")
|
|
1297
1222
|
})
|
|
1298
1223
|
]
|
|
1299
1224
|
}),
|
|
1300
|
-
/* @__PURE__ */
|
|
1225
|
+
/* @__PURE__ */ J("div", {
|
|
1301
1226
|
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",
|
|
1302
|
-
children: [e._meta && /* @__PURE__ */
|
|
1227
|
+
children: [e._meta && /* @__PURE__ */ J("div", {
|
|
1303
1228
|
className: "dc:text-xs text-dc-text-muted",
|
|
1304
1229
|
children: [
|
|
1305
1230
|
r("explainAI.modelLabel"),
|
|
@@ -1307,7 +1232,7 @@ function nt({ analysis: e, onClose: t, onClear: n }) {
|
|
|
1307
1232
|
e._meta.model,
|
|
1308
1233
|
e._meta.usingUserKey && ` ${r("explainAI.usingUserKey")}`
|
|
1309
1234
|
]
|
|
1310
|
-
}), /* @__PURE__ */
|
|
1235
|
+
}), /* @__PURE__ */ q("button", {
|
|
1311
1236
|
onClick: i,
|
|
1312
1237
|
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",
|
|
1313
1238
|
children: r("common.actions.close")
|
|
@@ -1319,31 +1244,31 @@ function nt({ analysis: e, onClose: t, onClear: n }) {
|
|
|
1319
1244
|
}
|
|
1320
1245
|
//#endregion
|
|
1321
1246
|
//#region src/client/shared/chartConfigBuilders.ts
|
|
1322
|
-
var
|
|
1323
|
-
function
|
|
1247
|
+
var at = (e) => e.map((e) => e.field), ot = (e) => e.length > 0 ? [e[0].field] : [];
|
|
1248
|
+
function st(e) {
|
|
1324
1249
|
let { metrics: t, timeDimension: n, dimension: r, dimensions: i } = e;
|
|
1325
1250
|
return {
|
|
1326
1251
|
xAxis: n ? [n.field] : r ? [r.field] : [],
|
|
1327
|
-
yAxis:
|
|
1252
|
+
yAxis: at(t),
|
|
1328
1253
|
series: i.length > 1 ? [i[1].field] : r && n ? [r.field] : []
|
|
1329
1254
|
};
|
|
1330
1255
|
}
|
|
1331
|
-
function
|
|
1256
|
+
function ct(e) {
|
|
1332
1257
|
let { metrics: t, timeDimension: n, dimension: r, dimensions: i } = e;
|
|
1333
1258
|
return {
|
|
1334
1259
|
xAxis: r ? [r.field] : n ? [n.field] : [],
|
|
1335
|
-
yAxis:
|
|
1260
|
+
yAxis: at(t),
|
|
1336
1261
|
series: i.length > 1 ? [i[1].field] : n && r ? [n.field] : []
|
|
1337
1262
|
};
|
|
1338
1263
|
}
|
|
1339
|
-
function
|
|
1264
|
+
function lt(e) {
|
|
1340
1265
|
let { metrics: t, dimension: n } = e;
|
|
1341
1266
|
return {
|
|
1342
1267
|
xAxis: n ? [n.field] : [],
|
|
1343
|
-
yAxis:
|
|
1268
|
+
yAxis: ot(t)
|
|
1344
1269
|
};
|
|
1345
1270
|
}
|
|
1346
|
-
function
|
|
1271
|
+
function ut(e) {
|
|
1347
1272
|
let { metrics: t, breakdowns: n, dimension: r, dimensions: i } = e;
|
|
1348
1273
|
return t.length >= 2 ? {
|
|
1349
1274
|
xAxis: [t[0].field],
|
|
@@ -1351,11 +1276,11 @@ function ct(e) {
|
|
|
1351
1276
|
series: r ? [r.field] : []
|
|
1352
1277
|
} : {
|
|
1353
1278
|
xAxis: n.length > 0 ? [n[0].field] : [],
|
|
1354
|
-
yAxis:
|
|
1279
|
+
yAxis: ot(t),
|
|
1355
1280
|
series: i.length > 1 ? [i[1].field] : []
|
|
1356
1281
|
};
|
|
1357
1282
|
}
|
|
1358
|
-
function
|
|
1283
|
+
function dt(e) {
|
|
1359
1284
|
let { metrics: t, timeDimension: n, dimension: r } = e;
|
|
1360
1285
|
return {
|
|
1361
1286
|
xAxis: t.length > 0 ? [t[0].field] : [],
|
|
@@ -1364,210 +1289,210 @@ function lt(e) {
|
|
|
1364
1289
|
series: r ? [r.field] : n ? [n.field] : []
|
|
1365
1290
|
};
|
|
1366
1291
|
}
|
|
1367
|
-
function
|
|
1292
|
+
function ft(e) {
|
|
1368
1293
|
let { metrics: t, dimension: n } = e;
|
|
1369
1294
|
return {
|
|
1370
1295
|
xAxis: n ? [n.field] : [],
|
|
1371
|
-
yAxis:
|
|
1296
|
+
yAxis: ot(t)
|
|
1372
1297
|
};
|
|
1373
1298
|
}
|
|
1374
|
-
function
|
|
1299
|
+
function pt(e) {
|
|
1375
1300
|
let { metrics: t, timeDimension: n } = e;
|
|
1376
1301
|
return {
|
|
1377
1302
|
dateField: n ? [n.field] : [],
|
|
1378
|
-
valueField:
|
|
1303
|
+
valueField: ot(t)
|
|
1379
1304
|
};
|
|
1380
1305
|
}
|
|
1381
|
-
function
|
|
1382
|
-
return { yAxis:
|
|
1306
|
+
function mt(e) {
|
|
1307
|
+
return { yAxis: ot(e.metrics) };
|
|
1383
1308
|
}
|
|
1384
|
-
function
|
|
1309
|
+
function ht(e) {
|
|
1385
1310
|
let { metrics: t, breakdowns: n } = e;
|
|
1386
1311
|
return { xAxis: [...n.map((e) => e.field), ...t.map((e) => e.field)] };
|
|
1387
1312
|
}
|
|
1388
|
-
function
|
|
1313
|
+
function gt() {
|
|
1389
1314
|
return {};
|
|
1390
1315
|
}
|
|
1391
|
-
function
|
|
1316
|
+
function _t(e) {
|
|
1392
1317
|
let { metrics: t, breakdowns: n } = e;
|
|
1393
1318
|
return {
|
|
1394
1319
|
xAxis: n.length > 0 ? [n[0].field] : [],
|
|
1395
|
-
yAxis:
|
|
1320
|
+
yAxis: at(t)
|
|
1396
1321
|
};
|
|
1397
1322
|
}
|
|
1398
|
-
var
|
|
1399
|
-
line:
|
|
1400
|
-
area:
|
|
1401
|
-
bar:
|
|
1402
|
-
pie:
|
|
1403
|
-
scatter:
|
|
1404
|
-
bubble:
|
|
1405
|
-
radar:
|
|
1406
|
-
radialBar:
|
|
1407
|
-
treemap:
|
|
1408
|
-
activityGrid:
|
|
1409
|
-
kpiNumber:
|
|
1410
|
-
kpiDelta:
|
|
1411
|
-
kpiText:
|
|
1412
|
-
table:
|
|
1413
|
-
markdown:
|
|
1323
|
+
var vt = {
|
|
1324
|
+
line: st,
|
|
1325
|
+
area: st,
|
|
1326
|
+
bar: ct,
|
|
1327
|
+
pie: lt,
|
|
1328
|
+
scatter: ut,
|
|
1329
|
+
bubble: dt,
|
|
1330
|
+
radar: ft,
|
|
1331
|
+
radialBar: ft,
|
|
1332
|
+
treemap: ft,
|
|
1333
|
+
activityGrid: pt,
|
|
1334
|
+
kpiNumber: mt,
|
|
1335
|
+
kpiDelta: mt,
|
|
1336
|
+
kpiText: mt,
|
|
1337
|
+
table: ht,
|
|
1338
|
+
markdown: gt
|
|
1414
1339
|
};
|
|
1415
|
-
function
|
|
1416
|
-
return
|
|
1340
|
+
function yt(e) {
|
|
1341
|
+
return vt[e] || _t;
|
|
1417
1342
|
}
|
|
1418
1343
|
//#endregion
|
|
1419
1344
|
//#region src/client/shared/chartDefaults.ts
|
|
1420
|
-
function
|
|
1345
|
+
function bt(e) {
|
|
1421
1346
|
return e.isTimeDimension;
|
|
1422
1347
|
}
|
|
1423
|
-
function
|
|
1424
|
-
return e.find(
|
|
1348
|
+
function xt(e) {
|
|
1349
|
+
return e.find(bt);
|
|
1425
1350
|
}
|
|
1426
|
-
function
|
|
1351
|
+
function St(e) {
|
|
1427
1352
|
return e.find((e) => !e.isTimeDimension);
|
|
1428
1353
|
}
|
|
1429
|
-
function
|
|
1354
|
+
function Ct(e) {
|
|
1430
1355
|
return e.filter((e) => !e.isTimeDimension);
|
|
1431
1356
|
}
|
|
1432
|
-
function
|
|
1433
|
-
return e.filter(
|
|
1357
|
+
function wt(e) {
|
|
1358
|
+
return e.filter(bt);
|
|
1434
1359
|
}
|
|
1435
|
-
function
|
|
1360
|
+
function Tt(e, t) {
|
|
1436
1361
|
return {
|
|
1437
1362
|
measureCount: e.length,
|
|
1438
1363
|
dimensionCount: t.length,
|
|
1439
|
-
timeDimensionCount:
|
|
1364
|
+
timeDimensionCount: wt(t).length
|
|
1440
1365
|
};
|
|
1441
1366
|
}
|
|
1442
|
-
function
|
|
1367
|
+
function Et(e, t, n) {
|
|
1443
1368
|
let r = c[e];
|
|
1444
|
-
return !r || !r.isAvailable ? { available: !0 } : r.isAvailable(
|
|
1369
|
+
return !r || !r.isAvailable ? { available: !0 } : r.isAvailable(Tt(t, n));
|
|
1445
1370
|
}
|
|
1446
|
-
function
|
|
1371
|
+
function Dt(e, t) {
|
|
1447
1372
|
let n = Object.keys(c), r = {};
|
|
1448
|
-
for (let i of n) r[i] =
|
|
1373
|
+
for (let i of n) r[i] = Et(i, e, t);
|
|
1449
1374
|
return r;
|
|
1450
1375
|
}
|
|
1451
|
-
function
|
|
1452
|
-
if (
|
|
1453
|
-
let r =
|
|
1376
|
+
function Ot(e, t, n) {
|
|
1377
|
+
if (Et(n, e, t).available || e.length === 0 && t.length === 0) return n;
|
|
1378
|
+
let r = wt(t).length > 0, i = Ct(t).length > 0, a = e.length > 0;
|
|
1454
1379
|
return r && a ? "line" : i && a ? "bar" : a && !i && !r ? "kpiNumber" : "table";
|
|
1455
1380
|
}
|
|
1456
|
-
function
|
|
1457
|
-
let r =
|
|
1381
|
+
function kt(e, t, n) {
|
|
1382
|
+
let r = Ot(e, t, n);
|
|
1458
1383
|
return {
|
|
1459
1384
|
chartType: r,
|
|
1460
|
-
chartConfig:
|
|
1385
|
+
chartConfig: At(r, e, t)
|
|
1461
1386
|
};
|
|
1462
1387
|
}
|
|
1463
|
-
function
|
|
1464
|
-
return
|
|
1388
|
+
function At(e, t, n) {
|
|
1389
|
+
return yt(e)({
|
|
1465
1390
|
metrics: t,
|
|
1466
1391
|
breakdowns: n,
|
|
1467
|
-
timeDimension:
|
|
1468
|
-
dimension:
|
|
1469
|
-
dimensions:
|
|
1392
|
+
timeDimension: xt(n),
|
|
1393
|
+
dimension: St(n),
|
|
1394
|
+
dimensions: Ct(n)
|
|
1470
1395
|
});
|
|
1471
1396
|
}
|
|
1472
|
-
function
|
|
1473
|
-
if (r &&
|
|
1474
|
-
let i =
|
|
1397
|
+
function jt(e, t, n, r) {
|
|
1398
|
+
if (r && Et(n, e, t).available) return null;
|
|
1399
|
+
let i = Ot(e, t, n);
|
|
1475
1400
|
return i === n ? null : i;
|
|
1476
1401
|
}
|
|
1477
1402
|
//#endregion
|
|
1478
1403
|
//#region src/client/components/AnalysisBuilder/ExecutionPlanPanelParts.tsx
|
|
1479
|
-
function
|
|
1480
|
-
return /* @__PURE__ */
|
|
1404
|
+
function Mt({ title: e, height: t, className: n, children: r }) {
|
|
1405
|
+
return /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q("h4", {
|
|
1481
1406
|
className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2",
|
|
1482
1407
|
children: e
|
|
1483
|
-
}), /* @__PURE__ */
|
|
1408
|
+
}), /* @__PURE__ */ q("div", {
|
|
1484
1409
|
className: n,
|
|
1485
1410
|
style: { height: t },
|
|
1486
1411
|
children: r
|
|
1487
1412
|
})] });
|
|
1488
1413
|
}
|
|
1489
|
-
function
|
|
1490
|
-
let { t: c } =
|
|
1491
|
-
return t ? /* @__PURE__ */
|
|
1414
|
+
function Nt({ sql: e, sqlLoading: t, sqlError: n, sqlPlaceholder: r, formattedSql: i, title: a, height: o, headerRight: s }) {
|
|
1415
|
+
let { t: c } = R();
|
|
1416
|
+
return t ? /* @__PURE__ */ q(Mt, {
|
|
1492
1417
|
title: a,
|
|
1493
1418
|
height: o,
|
|
1494
1419
|
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
1420
|
children: c("results.debug.loadingSql")
|
|
1496
|
-
}) : n ? /* @__PURE__ */
|
|
1421
|
+
}) : n ? /* @__PURE__ */ q(Mt, {
|
|
1497
1422
|
title: a,
|
|
1498
1423
|
height: o,
|
|
1499
1424
|
className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
|
|
1500
1425
|
children: n.message
|
|
1501
|
-
}) : e ? /* @__PURE__ */
|
|
1426
|
+
}) : e ? /* @__PURE__ */ q(y, {
|
|
1502
1427
|
code: i,
|
|
1503
1428
|
language: "sql",
|
|
1504
1429
|
title: a,
|
|
1505
1430
|
height: o,
|
|
1506
1431
|
headerRight: s
|
|
1507
|
-
}) : /* @__PURE__ */
|
|
1432
|
+
}) : /* @__PURE__ */ q(Mt, {
|
|
1508
1433
|
title: a,
|
|
1509
1434
|
height: o,
|
|
1510
1435
|
className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm",
|
|
1511
1436
|
children: r
|
|
1512
1437
|
});
|
|
1513
1438
|
}
|
|
1514
|
-
function
|
|
1515
|
-
let { t } =
|
|
1516
|
-
return /* @__PURE__ */
|
|
1439
|
+
function Pt({ summary: e }) {
|
|
1440
|
+
let { t } = R();
|
|
1441
|
+
return /* @__PURE__ */ J("div", {
|
|
1517
1442
|
className: "dc:flex dc:flex-wrap dc:items-center dc:gap-2",
|
|
1518
1443
|
children: [
|
|
1519
|
-
/* @__PURE__ */
|
|
1444
|
+
/* @__PURE__ */ q("span", {
|
|
1520
1445
|
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-accent text-white dc:rounded",
|
|
1521
1446
|
children: e.database.toUpperCase()
|
|
1522
1447
|
}),
|
|
1523
|
-
e.hasSequentialScans && /* @__PURE__ */
|
|
1448
|
+
e.hasSequentialScans && /* @__PURE__ */ q("span", {
|
|
1524
1449
|
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
1450
|
children: t("debug.sequentialScans")
|
|
1526
1451
|
}),
|
|
1527
|
-
e.usedIndexes.length > 0 && /* @__PURE__ */
|
|
1452
|
+
e.usedIndexes.length > 0 && /* @__PURE__ */ q("span", {
|
|
1528
1453
|
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
1454
|
children: t(e.usedIndexes.length === 1 ? "debug.indexesUsed" : "debug.indexesUsedPlural", { count: e.usedIndexes.length })
|
|
1530
1455
|
}),
|
|
1531
|
-
e.executionTime !== void 0 && /* @__PURE__ */
|
|
1456
|
+
e.executionTime !== void 0 && /* @__PURE__ */ q("span", {
|
|
1532
1457
|
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
1458
|
children: t("debug.executionTime", { time: e.executionTime.toFixed(2) })
|
|
1534
1459
|
}),
|
|
1535
|
-
e.planningTime !== void 0 && /* @__PURE__ */
|
|
1460
|
+
e.planningTime !== void 0 && /* @__PURE__ */ q("span", {
|
|
1536
1461
|
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
1462
|
children: t("debug.planningTime", { time: e.planningTime.toFixed(2) })
|
|
1538
1463
|
}),
|
|
1539
|
-
e.totalCost !== void 0 && /* @__PURE__ */
|
|
1464
|
+
e.totalCost !== void 0 && /* @__PURE__ */ q("span", {
|
|
1540
1465
|
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
1466
|
children: t("debug.cost", { cost: e.totalCost.toFixed(2) })
|
|
1542
1467
|
})
|
|
1543
1468
|
]
|
|
1544
1469
|
});
|
|
1545
1470
|
}
|
|
1546
|
-
function
|
|
1547
|
-
let { t: a } =
|
|
1548
|
-
return e ? /* @__PURE__ */
|
|
1471
|
+
function Ft({ explainLoading: e, explainError: t, explainResult: n, useAnalyze: r, aiButton: i }) {
|
|
1472
|
+
let { t: a } = R();
|
|
1473
|
+
return e ? /* @__PURE__ */ q("div", {
|
|
1549
1474
|
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
1475
|
children: a(r ? "debug.explainRunningAnalyze" : "debug.explainRunningBasic")
|
|
1551
|
-
}) : t ? /* @__PURE__ */
|
|
1476
|
+
}) : t ? /* @__PURE__ */ J("div", {
|
|
1552
1477
|
className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
|
|
1553
1478
|
children: [
|
|
1554
|
-
/* @__PURE__ */
|
|
1479
|
+
/* @__PURE__ */ q("strong", { children: a("debug.explainError") }),
|
|
1555
1480
|
" ",
|
|
1556
1481
|
t.message
|
|
1557
1482
|
]
|
|
1558
|
-
}) : n ? /* @__PURE__ */
|
|
1483
|
+
}) : n ? /* @__PURE__ */ J("div", {
|
|
1559
1484
|
className: "dc:space-y-3",
|
|
1560
1485
|
children: [
|
|
1561
|
-
/* @__PURE__ */
|
|
1562
|
-
n.summary.usedIndexes.length > 0 && /* @__PURE__ */
|
|
1486
|
+
/* @__PURE__ */ q(Pt, { summary: n.summary }),
|
|
1487
|
+
n.summary.usedIndexes.length > 0 && /* @__PURE__ */ J("div", {
|
|
1563
1488
|
className: "dc:text-xs text-dc-text-muted",
|
|
1564
1489
|
children: [
|
|
1565
|
-
/* @__PURE__ */
|
|
1490
|
+
/* @__PURE__ */ q("strong", { children: a("debug.indexes") }),
|
|
1566
1491
|
" ",
|
|
1567
1492
|
n.summary.usedIndexes.join(", ")
|
|
1568
1493
|
]
|
|
1569
1494
|
}),
|
|
1570
|
-
/* @__PURE__ */
|
|
1495
|
+
/* @__PURE__ */ q(y, {
|
|
1571
1496
|
code: n.raw,
|
|
1572
1497
|
language: "sql",
|
|
1573
1498
|
title: a("debug.executionPlanTitle", { database: n.summary.database }),
|
|
@@ -1579,24 +1504,24 @@ function Nt({ explainLoading: e, explainError: t, explainResult: n, useAnalyze:
|
|
|
1579
1504
|
}
|
|
1580
1505
|
//#endregion
|
|
1581
1506
|
//#region src/client/components/AnalysisBuilder/ExecutionPlanPanel.tsx
|
|
1582
|
-
var
|
|
1583
|
-
let { t: v } =
|
|
1507
|
+
var It = _e(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" }) {
|
|
1508
|
+
let { t: v } = R(), [y, b] = G(!1), [x, S] = G(!1), C = e ? e.sql + (e.params && e.params.length > 0 ? "\n\n-- Parameters:\n" + JSON.stringify(e.params, null, 2) : "") : "", w = () => {
|
|
1584
1509
|
f && i && h && (f(i, h), S(!0));
|
|
1585
1510
|
}, T = () => {
|
|
1586
1511
|
S(!1);
|
|
1587
|
-
}, E = m && i ? /* @__PURE__ */
|
|
1512
|
+
}, E = m && i ? /* @__PURE__ */ q("button", {
|
|
1588
1513
|
onClick: w,
|
|
1589
1514
|
disabled: u,
|
|
1590
1515
|
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",
|
|
1591
|
-
children: u ? /* @__PURE__ */
|
|
1516
|
+
children: u ? /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q("span", {
|
|
1592
1517
|
className: "dc:animate-spin",
|
|
1593
1518
|
children: "⟳"
|
|
1594
|
-
}), v("debug.aiAnalyzing")] }) : /* @__PURE__ */
|
|
1519
|
+
}), v("debug.aiAnalyzing")] }) : /* @__PURE__ */ q(K, { children: `✨ ${v("debug.aiAnalysis")}` })
|
|
1595
1520
|
}) : null;
|
|
1596
|
-
return /* @__PURE__ */
|
|
1521
|
+
return /* @__PURE__ */ J("div", {
|
|
1597
1522
|
className: "dc:space-y-3",
|
|
1598
1523
|
children: [
|
|
1599
|
-
/* @__PURE__ */
|
|
1524
|
+
/* @__PURE__ */ q(Nt, {
|
|
1600
1525
|
sql: e,
|
|
1601
1526
|
sqlLoading: t,
|
|
1602
1527
|
sqlError: n,
|
|
@@ -1604,37 +1529,37 @@ var Pt = F(function({ sql: e, sqlLoading: t = !1, sqlError: n, sqlPlaceholder: r
|
|
|
1604
1529
|
formattedSql: C,
|
|
1605
1530
|
title: g,
|
|
1606
1531
|
height: _,
|
|
1607
|
-
headerRight: /* @__PURE__ */
|
|
1532
|
+
headerRight: /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ J("label", {
|
|
1608
1533
|
className: "dc:flex dc:items-center dc:gap-1 dc:text-xs text-dc-text-secondary dc:cursor-pointer",
|
|
1609
|
-
children: [/* @__PURE__ */
|
|
1534
|
+
children: [/* @__PURE__ */ q("input", {
|
|
1610
1535
|
type: "checkbox",
|
|
1611
1536
|
checked: y,
|
|
1612
1537
|
onChange: (e) => b(e.target.checked),
|
|
1613
1538
|
className: "dc:w-3 dc:h-3 dc:rounded border-dc-border text-dc-accent focus:ring-dc-accent"
|
|
1614
1539
|
}), v("debug.explainIncludeTiming")]
|
|
1615
|
-
}), /* @__PURE__ */
|
|
1540
|
+
}), /* @__PURE__ */ q("button", {
|
|
1616
1541
|
onClick: () => c({ analyze: y }),
|
|
1617
1542
|
disabled: a,
|
|
1618
1543
|
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",
|
|
1619
1544
|
children: v(a ? "debug.explainRunning" : "debug.explainPlan")
|
|
1620
1545
|
})] })
|
|
1621
1546
|
}),
|
|
1622
|
-
o && /* @__PURE__ */
|
|
1547
|
+
o && /* @__PURE__ */ q("div", { children: /* @__PURE__ */ q(Ft, {
|
|
1623
1548
|
explainLoading: a,
|
|
1624
1549
|
explainError: s,
|
|
1625
1550
|
explainResult: i,
|
|
1626
1551
|
useAnalyze: y,
|
|
1627
1552
|
aiButton: E
|
|
1628
1553
|
}) }),
|
|
1629
|
-
d && /* @__PURE__ */
|
|
1554
|
+
d && /* @__PURE__ */ J("div", {
|
|
1630
1555
|
className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
|
|
1631
1556
|
children: [
|
|
1632
|
-
/* @__PURE__ */
|
|
1557
|
+
/* @__PURE__ */ q("strong", { children: v("debug.aiAnalysisError") }),
|
|
1633
1558
|
" ",
|
|
1634
1559
|
d.message
|
|
1635
1560
|
]
|
|
1636
1561
|
}),
|
|
1637
|
-
x && l && /* @__PURE__ */
|
|
1562
|
+
x && l && /* @__PURE__ */ q(it, {
|
|
1638
1563
|
analysis: l,
|
|
1639
1564
|
onClose: T
|
|
1640
1565
|
})
|
|
@@ -1643,7 +1568,7 @@ var Pt = F(function({ sql: e, sqlLoading: t = !1, sqlError: n, sqlPlaceholder: r
|
|
|
1643
1568
|
});
|
|
1644
1569
|
//#endregion
|
|
1645
1570
|
//#region src/client/adapters/queryModeAdapter.ts
|
|
1646
|
-
function
|
|
1571
|
+
function Lt() {
|
|
1647
1572
|
return {
|
|
1648
1573
|
metrics: [],
|
|
1649
1574
|
breakdowns: [],
|
|
@@ -1654,10 +1579,10 @@ function Ft() {
|
|
|
1654
1579
|
validationError: null
|
|
1655
1580
|
};
|
|
1656
1581
|
}
|
|
1657
|
-
function
|
|
1582
|
+
function Rt(e) {
|
|
1658
1583
|
return e.map((e) => e.field);
|
|
1659
1584
|
}
|
|
1660
|
-
function
|
|
1585
|
+
function zt(e, t) {
|
|
1661
1586
|
let n = [], r = [];
|
|
1662
1587
|
for (let i of e) if (i.isTimeDimension) {
|
|
1663
1588
|
let e = {
|
|
@@ -1665,7 +1590,7 @@ function Lt(e, t) {
|
|
|
1665
1590
|
granularity: i.granularity || "day"
|
|
1666
1591
|
};
|
|
1667
1592
|
if (i.enableComparison) {
|
|
1668
|
-
let n =
|
|
1593
|
+
let n = Ce(i.field, t);
|
|
1669
1594
|
n && (e.compareDateRange = n);
|
|
1670
1595
|
}
|
|
1671
1596
|
r.push(e);
|
|
@@ -1675,31 +1600,31 @@ function Lt(e, t) {
|
|
|
1675
1600
|
timeDimensions: r
|
|
1676
1601
|
};
|
|
1677
1602
|
}
|
|
1678
|
-
function
|
|
1679
|
-
let { dimensions: t, timeDimensions: n } =
|
|
1680
|
-
measures:
|
|
1603
|
+
function Bt(e) {
|
|
1604
|
+
let { dimensions: t, timeDimensions: n } = zt(e.breakdowns, e.filters), r = {
|
|
1605
|
+
measures: Rt(e.metrics),
|
|
1681
1606
|
dimensions: t
|
|
1682
1607
|
};
|
|
1683
1608
|
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;
|
|
1684
1609
|
}
|
|
1685
|
-
function
|
|
1610
|
+
function Vt(e) {
|
|
1686
1611
|
return e.map((e, t) => ({
|
|
1687
|
-
id:
|
|
1612
|
+
id: p(),
|
|
1688
1613
|
field: e,
|
|
1689
1614
|
label: d(t)
|
|
1690
1615
|
}));
|
|
1691
1616
|
}
|
|
1692
|
-
function
|
|
1617
|
+
function Ht(e) {
|
|
1693
1618
|
let t = [];
|
|
1694
1619
|
if (e.dimensions) for (let n of e.dimensions) t.push({
|
|
1695
|
-
id:
|
|
1620
|
+
id: p(),
|
|
1696
1621
|
field: n,
|
|
1697
1622
|
isTimeDimension: !1
|
|
1698
1623
|
});
|
|
1699
1624
|
if (e.timeDimensions) for (let n of e.timeDimensions) {
|
|
1700
1625
|
let e = !!(n.compareDateRange && n.compareDateRange.length > 0);
|
|
1701
1626
|
t.push({
|
|
1702
|
-
id:
|
|
1627
|
+
id: p(),
|
|
1703
1628
|
field: n.dimension,
|
|
1704
1629
|
granularity: n.granularity,
|
|
1705
1630
|
isTimeDimension: !0,
|
|
@@ -1708,10 +1633,10 @@ function Bt(e) {
|
|
|
1708
1633
|
}
|
|
1709
1634
|
return t;
|
|
1710
1635
|
}
|
|
1711
|
-
function
|
|
1636
|
+
function Ut(e) {
|
|
1712
1637
|
return {
|
|
1713
|
-
metrics:
|
|
1714
|
-
breakdowns:
|
|
1638
|
+
metrics: Vt(e.measures || []),
|
|
1639
|
+
breakdowns: Ht(e),
|
|
1715
1640
|
filters: e.filters || [],
|
|
1716
1641
|
order: e.order,
|
|
1717
1642
|
limit: e.limit,
|
|
@@ -1719,14 +1644,14 @@ function Vt(e) {
|
|
|
1719
1644
|
validationError: null
|
|
1720
1645
|
};
|
|
1721
1646
|
}
|
|
1722
|
-
function
|
|
1647
|
+
function Wt(e) {
|
|
1723
1648
|
return typeof e == "object" && !!e && "queries" in e && Array.isArray(e.queries);
|
|
1724
1649
|
}
|
|
1725
1650
|
var X = {
|
|
1726
1651
|
type: "query",
|
|
1727
1652
|
createInitial() {
|
|
1728
1653
|
return {
|
|
1729
|
-
queryStates: [
|
|
1654
|
+
queryStates: [Lt()],
|
|
1730
1655
|
activeQueryIndex: 0,
|
|
1731
1656
|
mergeStrategy: "concat"
|
|
1732
1657
|
};
|
|
@@ -1746,22 +1671,22 @@ var X = {
|
|
|
1746
1671
|
load(e) {
|
|
1747
1672
|
if (e.analysisType !== "query") throw Error(`Cannot load ${e.analysisType} config with query adapter`);
|
|
1748
1673
|
let t = e;
|
|
1749
|
-
if (
|
|
1750
|
-
let e = t.query, n = e.queries.map(
|
|
1751
|
-
return n.length === 0 && n.push(
|
|
1674
|
+
if (Wt(t.query)) {
|
|
1675
|
+
let e = t.query, n = e.queries.map(Ut);
|
|
1676
|
+
return n.length === 0 && n.push(Lt()), {
|
|
1752
1677
|
queryStates: n,
|
|
1753
1678
|
activeQueryIndex: 0,
|
|
1754
1679
|
mergeStrategy: e.mergeStrategy || "concat"
|
|
1755
1680
|
};
|
|
1756
1681
|
}
|
|
1757
1682
|
return {
|
|
1758
|
-
queryStates: [
|
|
1683
|
+
queryStates: [Ut(t.query)],
|
|
1759
1684
|
activeQueryIndex: 0,
|
|
1760
1685
|
mergeStrategy: "concat"
|
|
1761
1686
|
};
|
|
1762
1687
|
},
|
|
1763
1688
|
save(e, t, n) {
|
|
1764
|
-
let r = e.queryStates.map(
|
|
1689
|
+
let r = e.queryStates.map(Bt), i = r.length === 1 && e.mergeStrategy === "concat" ? r[0] : {
|
|
1765
1690
|
queries: r,
|
|
1766
1691
|
mergeStrategy: e.mergeStrategy
|
|
1767
1692
|
};
|
|
@@ -1802,36 +1727,36 @@ var X = {
|
|
|
1802
1727
|
}
|
|
1803
1728
|
};
|
|
1804
1729
|
}
|
|
1805
|
-
}, Z = /* @__PURE__ */ new Map(),
|
|
1806
|
-
function
|
|
1807
|
-
|
|
1730
|
+
}, Z = /* @__PURE__ */ new Map(), Gt = !1;
|
|
1731
|
+
function Kt() {
|
|
1732
|
+
Gt ||= (Z.has("query") || Z.set("query", X), Z.has("funnel") || Z.set("funnel", _), Z.has("flow") || Z.set("flow", w), Z.has("retention") || Z.set("retention", b), !0);
|
|
1808
1733
|
}
|
|
1809
1734
|
var Q = {
|
|
1810
1735
|
register(e) {
|
|
1811
1736
|
Z.has(e.type) && console.warn(`[adapterRegistry] Overwriting existing adapter for type: ${e.type}`), Z.set(e.type, e);
|
|
1812
1737
|
},
|
|
1813
1738
|
get(e) {
|
|
1814
|
-
|
|
1739
|
+
Kt();
|
|
1815
1740
|
let t = Z.get(e);
|
|
1816
1741
|
if (!t) throw Error(`[adapterRegistry] No adapter registered for type: ${e}. Available types: ${Array.from(Z.keys()).join(", ") || "none"}`);
|
|
1817
1742
|
return t;
|
|
1818
1743
|
},
|
|
1819
1744
|
has(e) {
|
|
1820
|
-
return
|
|
1745
|
+
return Kt(), Z.has(e);
|
|
1821
1746
|
},
|
|
1822
1747
|
getRegisteredTypes() {
|
|
1823
|
-
return
|
|
1748
|
+
return Kt(), Array.from(Z.keys());
|
|
1824
1749
|
},
|
|
1825
1750
|
clear() {
|
|
1826
|
-
Z.clear(),
|
|
1751
|
+
Z.clear(), Gt = !1;
|
|
1827
1752
|
}
|
|
1828
|
-
},
|
|
1753
|
+
}, qt = () => ({
|
|
1829
1754
|
analysisType: "query",
|
|
1830
1755
|
charts: {
|
|
1831
1756
|
query: X.getDefaultChartConfig(),
|
|
1832
|
-
funnel:
|
|
1833
|
-
flow:
|
|
1834
|
-
retention:
|
|
1757
|
+
funnel: _.getDefaultChartConfig(),
|
|
1758
|
+
flow: w.getDefaultChartConfig(),
|
|
1759
|
+
retention: b.getDefaultChartConfig()
|
|
1835
1760
|
},
|
|
1836
1761
|
activeViews: {
|
|
1837
1762
|
query: "chart",
|
|
@@ -1841,8 +1766,8 @@ var Q = {
|
|
|
1841
1766
|
},
|
|
1842
1767
|
userManuallySelectedChart: !1,
|
|
1843
1768
|
localPaletteName: "default"
|
|
1844
|
-
}),
|
|
1845
|
-
...
|
|
1769
|
+
}), Jt = (e, t, n) => ({
|
|
1770
|
+
...qt(),
|
|
1846
1771
|
setAnalysisType: (t) => {
|
|
1847
1772
|
e((e) => {
|
|
1848
1773
|
let n = { ...e.charts };
|
|
@@ -2055,22 +1980,22 @@ var Q = {
|
|
|
2055
1980
|
...u
|
|
2056
1981
|
});
|
|
2057
1982
|
}
|
|
2058
|
-
}),
|
|
2059
|
-
queryStates: [
|
|
1983
|
+
}), Yt = () => ({
|
|
1984
|
+
queryStates: [Y()],
|
|
2060
1985
|
activeQueryIndex: 0,
|
|
2061
1986
|
mergeStrategy: "concat"
|
|
2062
|
-
}),
|
|
2063
|
-
...
|
|
1987
|
+
}), Xt = (e, t, n) => ({
|
|
1988
|
+
...Yt(),
|
|
2064
1989
|
setQueryStates: (t) => e({ queryStates: t }),
|
|
2065
1990
|
updateQueryState: (t, n) => e((e) => {
|
|
2066
1991
|
let r = [...e.queryStates];
|
|
2067
|
-
return r[t] = n(r[t] ||
|
|
1992
|
+
return r[t] = n(r[t] || Y()), { queryStates: r };
|
|
2068
1993
|
}),
|
|
2069
1994
|
setActiveQueryIndex: (t) => e({ activeQueryIndex: t }),
|
|
2070
1995
|
setMergeStrategy: (t) => e({ mergeStrategy: t }),
|
|
2071
1996
|
addQuery: () => e((e) => {
|
|
2072
|
-
let t = e.queryStates[e.activeQueryIndex] ||
|
|
2073
|
-
...
|
|
1997
|
+
let t = e.queryStates[e.activeQueryIndex] || Y(), n = {
|
|
1998
|
+
...Y(),
|
|
2074
1999
|
metrics: [...t.metrics],
|
|
2075
2000
|
breakdowns: [...t.breakdowns],
|
|
2076
2001
|
filters: [...t.filters]
|
|
@@ -2089,8 +2014,8 @@ var Q = {
|
|
|
2089
2014
|
};
|
|
2090
2015
|
}),
|
|
2091
2016
|
addMetric: (t, n) => e((e) => {
|
|
2092
|
-
let r = e.activeQueryIndex, i = [...e.queryStates], a = i[r] ||
|
|
2093
|
-
id:
|
|
2017
|
+
let r = e.activeQueryIndex, i = [...e.queryStates], a = i[r] || Y(), o = {
|
|
2018
|
+
id: p(),
|
|
2094
2019
|
field: t,
|
|
2095
2020
|
label: n || d(a.metrics.length)
|
|
2096
2021
|
};
|
|
@@ -2100,7 +2025,7 @@ var Q = {
|
|
|
2100
2025
|
}, { queryStates: i };
|
|
2101
2026
|
}),
|
|
2102
2027
|
removeMetric: (t) => e((e) => {
|
|
2103
|
-
let n = e.activeQueryIndex, r = [...e.queryStates], i = r[n] ||
|
|
2028
|
+
let n = e.activeQueryIndex, r = [...e.queryStates], i = r[n] || Y(), a = i.metrics.find((e) => e.id === t)?.field, o = i.metrics.filter((e) => e.id !== t), s = i.order;
|
|
2104
2029
|
return a && s && s[a] && (s = { ...s }, delete s[a], Object.keys(s).length === 0 && (s = void 0)), r[n] = {
|
|
2105
2030
|
...i,
|
|
2106
2031
|
metrics: o,
|
|
@@ -2108,14 +2033,14 @@ var Q = {
|
|
|
2108
2033
|
}, { queryStates: r };
|
|
2109
2034
|
}),
|
|
2110
2035
|
toggleMetric: (t) => e((e) => {
|
|
2111
|
-
let n = e.activeQueryIndex, r = [...e.queryStates], i = r[n] ||
|
|
2036
|
+
let n = e.activeQueryIndex, r = [...e.queryStates], i = r[n] || Y(), a = i.metrics.findIndex((e) => e.field === t);
|
|
2112
2037
|
if (a >= 0) r[n] = {
|
|
2113
2038
|
...i,
|
|
2114
2039
|
metrics: i.metrics.filter((e, t) => t !== a)
|
|
2115
2040
|
};
|
|
2116
2041
|
else {
|
|
2117
2042
|
let e = {
|
|
2118
|
-
id:
|
|
2043
|
+
id: p(),
|
|
2119
2044
|
field: t,
|
|
2120
2045
|
label: d(i.metrics.length)
|
|
2121
2046
|
};
|
|
@@ -2127,17 +2052,17 @@ var Q = {
|
|
|
2127
2052
|
return { queryStates: r };
|
|
2128
2053
|
}),
|
|
2129
2054
|
reorderMetrics: (t, n) => e((e) => {
|
|
2130
|
-
let r = e.activeQueryIndex, i = [...e.queryStates], a = i[r] ||
|
|
2055
|
+
let r = e.activeQueryIndex, i = [...e.queryStates], a = i[r] || Y(), o = [...a.metrics], [s] = o.splice(t, 1);
|
|
2131
2056
|
return o.splice(n, 0, s), i[r] = {
|
|
2132
2057
|
...a,
|
|
2133
2058
|
metrics: o
|
|
2134
2059
|
}, { queryStates: i };
|
|
2135
2060
|
}),
|
|
2136
2061
|
addBreakdown: (t, n, r) => e((e) => {
|
|
2137
|
-
let i = e.activeQueryIndex, a = [...e.queryStates], o = a[i] ||
|
|
2062
|
+
let i = e.activeQueryIndex, a = [...e.queryStates], o = a[i] || Y();
|
|
2138
2063
|
if (n && o.breakdowns.some((e) => e.isTimeDimension)) return e;
|
|
2139
2064
|
let s = {
|
|
2140
|
-
id:
|
|
2065
|
+
id: p(),
|
|
2141
2066
|
field: t,
|
|
2142
2067
|
isTimeDimension: n,
|
|
2143
2068
|
granularity: n ? r || "month" : void 0
|
|
@@ -2148,7 +2073,7 @@ var Q = {
|
|
|
2148
2073
|
}, { queryStates: a };
|
|
2149
2074
|
}),
|
|
2150
2075
|
removeBreakdown: (t) => e((e) => {
|
|
2151
|
-
let n = e.activeQueryIndex, r = [...e.queryStates], i = r[n] ||
|
|
2076
|
+
let n = e.activeQueryIndex, r = [...e.queryStates], i = r[n] || Y(), a = i.breakdowns.find((e) => e.id === t)?.field, o = i.breakdowns.filter((e) => e.id !== t), s = i.order;
|
|
2152
2077
|
return a && s && s[a] && (s = { ...s }, delete s[a], Object.keys(s).length === 0 && (s = void 0)), r[n] = {
|
|
2153
2078
|
...i,
|
|
2154
2079
|
breakdowns: o,
|
|
@@ -2156,7 +2081,7 @@ var Q = {
|
|
|
2156
2081
|
}, { queryStates: r };
|
|
2157
2082
|
}),
|
|
2158
2083
|
toggleBreakdown: (t, n, r) => e((e) => {
|
|
2159
|
-
let i = e.activeQueryIndex, a = [...e.queryStates], o = a[i] ||
|
|
2084
|
+
let i = e.activeQueryIndex, a = [...e.queryStates], o = a[i] || Y(), s = o.breakdowns.findIndex((e) => e.field === t);
|
|
2160
2085
|
if (s >= 0) a[i] = {
|
|
2161
2086
|
...o,
|
|
2162
2087
|
breakdowns: o.breakdowns.filter((e, t) => t !== s)
|
|
@@ -2164,7 +2089,7 @@ var Q = {
|
|
|
2164
2089
|
else {
|
|
2165
2090
|
if (n && o.breakdowns.some((e) => e.isTimeDimension)) return e;
|
|
2166
2091
|
let s = {
|
|
2167
|
-
id:
|
|
2092
|
+
id: p(),
|
|
2168
2093
|
field: t,
|
|
2169
2094
|
isTimeDimension: n,
|
|
2170
2095
|
granularity: n ? r || "month" : void 0
|
|
@@ -2212,7 +2137,7 @@ var Q = {
|
|
|
2212
2137
|
member: l.field,
|
|
2213
2138
|
operator: "inDateRange",
|
|
2214
2139
|
values: [],
|
|
2215
|
-
dateRange:
|
|
2140
|
+
dateRange: N("last_n_months", 3)
|
|
2216
2141
|
};
|
|
2217
2142
|
s[c] = {
|
|
2218
2143
|
...s[c],
|
|
@@ -2234,7 +2159,7 @@ var Q = {
|
|
|
2234
2159
|
return f;
|
|
2235
2160
|
}),
|
|
2236
2161
|
reorderBreakdowns: (t, n) => e((e) => {
|
|
2237
|
-
let r = e.activeQueryIndex, i = [...e.queryStates], a = i[r] ||
|
|
2162
|
+
let r = e.activeQueryIndex, i = [...e.queryStates], a = i[r] || Y(), o = [...a.breakdowns], [s] = o.splice(t, 1);
|
|
2238
2163
|
return o.splice(n, 0, s), i[r] = {
|
|
2239
2164
|
...a,
|
|
2240
2165
|
breakdowns: o
|
|
@@ -2248,7 +2173,7 @@ var Q = {
|
|
|
2248
2173
|
}, { queryStates: r };
|
|
2249
2174
|
}),
|
|
2250
2175
|
dropFieldToFilter: (t) => e((e) => {
|
|
2251
|
-
let n = e.activeQueryIndex, r = [...e.queryStates], i = r[n] ||
|
|
2176
|
+
let n = e.activeQueryIndex, r = [...e.queryStates], i = r[n] || Y(), a = i.filters || [];
|
|
2252
2177
|
if (a.some((e) => "member" in e && e.member === t)) return e;
|
|
2253
2178
|
let o = {
|
|
2254
2179
|
member: t,
|
|
@@ -2272,7 +2197,7 @@ var Q = {
|
|
|
2272
2197
|
}, { queryStates: r };
|
|
2273
2198
|
}),
|
|
2274
2199
|
setOrder: (t, n) => e((e) => {
|
|
2275
|
-
let r = e.activeQueryIndex, i = [...e.queryStates], a = i[r] ||
|
|
2200
|
+
let r = e.activeQueryIndex, i = [...e.queryStates], a = i[r] || Y(), o = { ...a.order || {} };
|
|
2276
2201
|
return n === null ? delete o[t] : o[t] = n, i[r] = {
|
|
2277
2202
|
...a,
|
|
2278
2203
|
order: Object.keys(o).length > 0 ? o : void 0
|
|
@@ -2287,7 +2212,7 @@ var Q = {
|
|
|
2287
2212
|
}),
|
|
2288
2213
|
getCurrentState: () => {
|
|
2289
2214
|
let e = t();
|
|
2290
|
-
return e.queryStates[e.activeQueryIndex] ||
|
|
2215
|
+
return e.queryStates[e.activeQueryIndex] || Y();
|
|
2291
2216
|
},
|
|
2292
2217
|
getMergeKeys: () => {
|
|
2293
2218
|
let e = t();
|
|
@@ -2300,12 +2225,12 @@ var Q = {
|
|
|
2300
2225
|
return e.queryStates.length <= 1 ? !1 : e.queryStates.filter((e) => e.metrics.length > 0 || e.breakdowns.length > 0).length > 1;
|
|
2301
2226
|
},
|
|
2302
2227
|
buildCurrentQuery: () => {
|
|
2303
|
-
let e = t(), n = e.queryStates[e.activeQueryIndex] ||
|
|
2304
|
-
return
|
|
2228
|
+
let e = t(), n = e.queryStates[e.activeQueryIndex] || Y();
|
|
2229
|
+
return Te(n.metrics, n.breakdowns, n.filters, n.order, !1, n.limit);
|
|
2305
2230
|
},
|
|
2306
2231
|
buildAllQueries: () => {
|
|
2307
2232
|
let e = t(), n = e.queryStates[0]?.breakdowns || [];
|
|
2308
|
-
return e.queryStates.map((t, r) =>
|
|
2233
|
+
return e.queryStates.map((t, r) => Te(t.metrics, e.mergeStrategy === "merge" && r > 0 ? n : t.breakdowns, t.filters, t.order, !1, t.limit));
|
|
2309
2234
|
},
|
|
2310
2235
|
buildMultiQueryConfig: () => {
|
|
2311
2236
|
let e = t();
|
|
@@ -2318,18 +2243,18 @@ var Q = {
|
|
|
2318
2243
|
queryLabels: n.map((e, t) => `Q${t + 1}`)
|
|
2319
2244
|
};
|
|
2320
2245
|
}
|
|
2321
|
-
}),
|
|
2246
|
+
}), Zt = () => ({
|
|
2322
2247
|
funnelCube: null,
|
|
2323
2248
|
funnelSteps: [],
|
|
2324
2249
|
activeFunnelStepIndex: 0,
|
|
2325
2250
|
funnelTimeDimension: null,
|
|
2326
2251
|
funnelBindingKey: null,
|
|
2327
2252
|
stepTimeToConvert: []
|
|
2328
|
-
}),
|
|
2329
|
-
...
|
|
2253
|
+
}), Qt = (e, t, n) => ({
|
|
2254
|
+
...Zt(),
|
|
2330
2255
|
addFunnelStep: () => e((e) => {
|
|
2331
2256
|
let t = e.funnelSteps[e.funnelSteps.length - 1], n = {
|
|
2332
|
-
id:
|
|
2257
|
+
id: p(),
|
|
2333
2258
|
name: `Step ${e.funnelSteps.length + 1}`,
|
|
2334
2259
|
cube: e.funnelCube || "",
|
|
2335
2260
|
filters: t?.filters ? JSON.parse(JSON.stringify(t.filters)) : [],
|
|
@@ -2394,7 +2319,7 @@ var Q = {
|
|
|
2394
2319
|
let e = t();
|
|
2395
2320
|
return e.analysisType !== "funnel" || !e.funnelBindingKey || !e.funnelTimeDimension || e.funnelSteps.length < 2 ? !1 : e.funnelSteps.filter((e) => e.cube && e.name).length >= 2;
|
|
2396
2321
|
}
|
|
2397
|
-
}),
|
|
2322
|
+
}), $t = () => ({
|
|
2398
2323
|
flowCube: null,
|
|
2399
2324
|
flowBindingKey: null,
|
|
2400
2325
|
flowTimeDimension: null,
|
|
@@ -2406,8 +2331,8 @@ var Q = {
|
|
|
2406
2331
|
stepsAfter: 3,
|
|
2407
2332
|
eventDimension: null,
|
|
2408
2333
|
joinStrategy: "auto"
|
|
2409
|
-
}),
|
|
2410
|
-
|
|
2334
|
+
}), en = (e, t, n) => ({
|
|
2335
|
+
...$t(),
|
|
2411
2336
|
setFlowCube: (t) => e(() => ({
|
|
2412
2337
|
flowCube: t,
|
|
2413
2338
|
flowBindingKey: null,
|
|
@@ -2477,8 +2402,8 @@ var Q = {
|
|
|
2477
2402
|
joinStrategy: e.joinStrategy
|
|
2478
2403
|
} };
|
|
2479
2404
|
}
|
|
2480
|
-
}),
|
|
2481
|
-
|
|
2405
|
+
}), tn = () => ({ ...O }), nn = (e, t, n) => ({
|
|
2406
|
+
...tn(),
|
|
2482
2407
|
setRetentionCube: (t) => e(() => ({
|
|
2483
2408
|
retentionCube: t,
|
|
2484
2409
|
retentionTimeDimension: null,
|
|
@@ -2553,22 +2478,22 @@ var Q = {
|
|
|
2553
2478
|
warnings: r
|
|
2554
2479
|
};
|
|
2555
2480
|
}
|
|
2556
|
-
}),
|
|
2481
|
+
}), rn = {
|
|
2557
2482
|
isOpen: !1,
|
|
2558
2483
|
userPrompt: "",
|
|
2559
2484
|
isGenerating: !1,
|
|
2560
2485
|
error: null,
|
|
2561
2486
|
hasGeneratedQuery: !1,
|
|
2562
2487
|
previousState: null
|
|
2563
|
-
},
|
|
2488
|
+
}, an = () => ({
|
|
2564
2489
|
activeTab: "query",
|
|
2565
2490
|
activeView: "chart",
|
|
2566
2491
|
displayLimit: 100,
|
|
2567
2492
|
showFieldModal: !1,
|
|
2568
2493
|
fieldModalMode: "metrics",
|
|
2569
|
-
aiState:
|
|
2570
|
-
}),
|
|
2571
|
-
...
|
|
2494
|
+
aiState: rn
|
|
2495
|
+
}), on = (e, t, n) => ({
|
|
2496
|
+
...an(),
|
|
2572
2497
|
setActiveTab: (t) => e({ activeTab: t }),
|
|
2573
2498
|
setActiveView: (t) => e((e) => ({
|
|
2574
2499
|
activeView: t,
|
|
@@ -2638,7 +2563,7 @@ var Q = {
|
|
|
2638
2563
|
if (!t) return e;
|
|
2639
2564
|
let n = e.activeQueryIndex, r = [...e.queryStates];
|
|
2640
2565
|
return r[n] = {
|
|
2641
|
-
...r[n] ||
|
|
2566
|
+
...r[n] || Y(),
|
|
2642
2567
|
metrics: t.metrics,
|
|
2643
2568
|
breakdowns: t.breakdowns,
|
|
2644
2569
|
filters: t.filters
|
|
@@ -2652,19 +2577,19 @@ var Q = {
|
|
|
2652
2577
|
displayConfig: t.displayConfig
|
|
2653
2578
|
}
|
|
2654
2579
|
},
|
|
2655
|
-
aiState: { ...
|
|
2580
|
+
aiState: { ...rn }
|
|
2656
2581
|
};
|
|
2657
2582
|
})
|
|
2658
2583
|
});
|
|
2659
2584
|
//#endregion
|
|
2660
2585
|
//#region src/client/stores/optionsToAnalysisConfig.ts
|
|
2661
|
-
function
|
|
2586
|
+
function sn(e) {
|
|
2662
2587
|
let t = e.filters ? [...e.filters] : [], n = e.timeDimensions || [], r = [...(e.dimensions || []).map((e) => ({
|
|
2663
|
-
id:
|
|
2588
|
+
id: p(),
|
|
2664
2589
|
field: e,
|
|
2665
2590
|
isTimeDimension: !1
|
|
2666
2591
|
})), ...n.map((e) => ({
|
|
2667
|
-
id:
|
|
2592
|
+
id: p(),
|
|
2668
2593
|
field: e.dimension,
|
|
2669
2594
|
granularity: e.granularity,
|
|
2670
2595
|
isTimeDimension: !0,
|
|
@@ -2690,9 +2615,9 @@ function an(e) {
|
|
|
2690
2615
|
}
|
|
2691
2616
|
}
|
|
2692
2617
|
return {
|
|
2693
|
-
...
|
|
2618
|
+
...Y(),
|
|
2694
2619
|
metrics: (e.measures || []).map((e, t) => ({
|
|
2695
|
-
id:
|
|
2620
|
+
id: p(),
|
|
2696
2621
|
field: e,
|
|
2697
2622
|
label: d(t)
|
|
2698
2623
|
})),
|
|
@@ -2701,10 +2626,10 @@ function an(e) {
|
|
|
2701
2626
|
order: e.order
|
|
2702
2627
|
};
|
|
2703
2628
|
}
|
|
2704
|
-
function
|
|
2629
|
+
function cn(e) {
|
|
2705
2630
|
return "queries" in e && Array.isArray(e.queries);
|
|
2706
2631
|
}
|
|
2707
|
-
function
|
|
2632
|
+
function ln(e, t) {
|
|
2708
2633
|
let n = e.getDefaultChartConfig();
|
|
2709
2634
|
return {
|
|
2710
2635
|
chartType: t?.chartType || n.chartType,
|
|
@@ -2712,22 +2637,22 @@ function sn(e, t) {
|
|
|
2712
2637
|
displayConfig: t?.displayConfig || n.displayConfig
|
|
2713
2638
|
};
|
|
2714
2639
|
}
|
|
2715
|
-
function
|
|
2640
|
+
function un(e) {
|
|
2716
2641
|
return e.initialActiveView || "chart";
|
|
2717
2642
|
}
|
|
2718
|
-
function
|
|
2719
|
-
let t =
|
|
2720
|
-
return
|
|
2643
|
+
function dn(e) {
|
|
2644
|
+
let t = ln(_, e.initialChartConfig), n = e.initialFunnelState ?? {};
|
|
2645
|
+
return _.save({
|
|
2721
2646
|
funnelCube: n.funnelCube ?? null,
|
|
2722
2647
|
funnelSteps: n.funnelSteps || [],
|
|
2723
2648
|
activeFunnelStepIndex: 0,
|
|
2724
2649
|
funnelTimeDimension: n.funnelTimeDimension ?? null,
|
|
2725
2650
|
funnelBindingKey: n.funnelBindingKey ?? null
|
|
2726
|
-
}, { funnel: t },
|
|
2651
|
+
}, { funnel: t }, un(e));
|
|
2727
2652
|
}
|
|
2728
|
-
function
|
|
2729
|
-
let t =
|
|
2730
|
-
return
|
|
2653
|
+
function fn(e) {
|
|
2654
|
+
let t = ln(w, e.initialChartConfig), n = e.initialFlowState ?? {};
|
|
2655
|
+
return w.save({
|
|
2731
2656
|
flowCube: n.flowCube ?? null,
|
|
2732
2657
|
flowBindingKey: n.flowBindingKey ?? null,
|
|
2733
2658
|
flowTimeDimension: n.flowTimeDimension ?? null,
|
|
@@ -2739,11 +2664,11 @@ function un(e) {
|
|
|
2739
2664
|
stepsAfter: n.stepsAfter ?? 3,
|
|
2740
2665
|
eventDimension: n.eventDimension ?? null,
|
|
2741
2666
|
joinStrategy: n.joinStrategy ?? "auto"
|
|
2742
|
-
}, { flow: t },
|
|
2667
|
+
}, { flow: t }, un(e));
|
|
2743
2668
|
}
|
|
2744
|
-
function
|
|
2745
|
-
let t =
|
|
2746
|
-
return
|
|
2669
|
+
function pn(e) {
|
|
2670
|
+
let t = ln(b, e.initialChartConfig), n = e.initialRetentionState ?? {}, r = k(ee);
|
|
2671
|
+
return b.save({
|
|
2747
2672
|
retentionCube: n.retentionCube ?? null,
|
|
2748
2673
|
retentionBindingKey: n.retentionBindingKey ?? null,
|
|
2749
2674
|
retentionTimeDimension: n.retentionTimeDimension ?? null,
|
|
@@ -2754,52 +2679,52 @@ function dn(e) {
|
|
|
2754
2679
|
retentionViewGranularity: n.retentionViewGranularity ?? "week",
|
|
2755
2680
|
retentionPeriods: n.retentionPeriods ?? 12,
|
|
2756
2681
|
retentionType: n.retentionType ?? "classic"
|
|
2757
|
-
}, { retention: t },
|
|
2682
|
+
}, { retention: t }, un(e));
|
|
2758
2683
|
}
|
|
2759
|
-
function
|
|
2684
|
+
function mn(e, t) {
|
|
2760
2685
|
let n, r = "concat";
|
|
2761
|
-
|
|
2762
|
-
let i =
|
|
2686
|
+
cn(t) ? (n = t.queries.map(sn), t.mergeStrategy && (r = t.mergeStrategy)) : n = [sn(t)];
|
|
2687
|
+
let i = ln(X, e.initialChartConfig);
|
|
2763
2688
|
return X.save({
|
|
2764
2689
|
queryStates: n,
|
|
2765
2690
|
activeQueryIndex: 0,
|
|
2766
2691
|
mergeStrategy: r
|
|
2767
|
-
}, { query: i },
|
|
2692
|
+
}, { query: i }, un(e));
|
|
2768
2693
|
}
|
|
2769
|
-
function
|
|
2770
|
-
let t =
|
|
2694
|
+
function hn(e) {
|
|
2695
|
+
let t = ln(X, e.initialChartConfig);
|
|
2771
2696
|
return X.save({
|
|
2772
|
-
queryStates: [
|
|
2697
|
+
queryStates: [Y()],
|
|
2773
2698
|
activeQueryIndex: 0,
|
|
2774
2699
|
mergeStrategy: "concat"
|
|
2775
|
-
}, { query: t },
|
|
2700
|
+
}, { query: t }, un(e));
|
|
2776
2701
|
}
|
|
2777
|
-
function
|
|
2702
|
+
function gn(e) {
|
|
2778
2703
|
return X.save({
|
|
2779
|
-
queryStates: [
|
|
2704
|
+
queryStates: [Y()],
|
|
2780
2705
|
activeQueryIndex: 0,
|
|
2781
2706
|
mergeStrategy: "concat"
|
|
2782
2707
|
}, { query: X.getDefaultChartConfig() }, e.initialActiveView);
|
|
2783
2708
|
}
|
|
2784
|
-
function
|
|
2785
|
-
return e.initialAnalysisType === "funnel" && e.initialFunnelState ?
|
|
2709
|
+
function _n(e) {
|
|
2710
|
+
return e.initialAnalysisType === "funnel" && e.initialFunnelState ? dn(e) : e.initialAnalysisType === "flow" && e.initialFlowState ? fn(e) : e.initialAnalysisType === "retention" && e.initialRetentionState ? pn(e) : e.initialQuery ? mn(e, e.initialQuery) : e.initialChartConfig ? hn(e) : e.initialActiveView ? gn(e) : null;
|
|
2786
2711
|
}
|
|
2787
2712
|
//#endregion
|
|
2788
2713
|
//#region src/client/stores/analysisBuilderStore.tsx
|
|
2789
|
-
function
|
|
2714
|
+
function vn(e, t) {
|
|
2790
2715
|
return {
|
|
2791
2716
|
reset: () => {
|
|
2792
2717
|
e({
|
|
2793
|
-
...Gt(),
|
|
2794
2718
|
...qt(),
|
|
2795
2719
|
...Yt(),
|
|
2796
2720
|
...Zt(),
|
|
2797
2721
|
...$t(),
|
|
2722
|
+
...tn(),
|
|
2798
2723
|
charts: {
|
|
2799
2724
|
query: X.getDefaultChartConfig(),
|
|
2800
|
-
funnel:
|
|
2801
|
-
flow:
|
|
2802
|
-
retention:
|
|
2725
|
+
funnel: _.getDefaultChartConfig(),
|
|
2726
|
+
flow: w.getDefaultChartConfig(),
|
|
2727
|
+
retention: b.getDefaultChartConfig()
|
|
2803
2728
|
},
|
|
2804
2729
|
activeViews: {
|
|
2805
2730
|
query: "chart",
|
|
@@ -2812,28 +2737,28 @@ function gn(e, t) {
|
|
|
2812
2737
|
clearCurrentMode: () => e((e) => {
|
|
2813
2738
|
switch (e.analysisType) {
|
|
2814
2739
|
case "funnel": return {
|
|
2815
|
-
...
|
|
2740
|
+
...Zt(),
|
|
2816
2741
|
charts: {
|
|
2817
2742
|
...e.charts,
|
|
2818
|
-
funnel:
|
|
2743
|
+
funnel: _.getDefaultChartConfig()
|
|
2819
2744
|
}
|
|
2820
2745
|
};
|
|
2821
2746
|
case "flow": return {
|
|
2822
|
-
|
|
2747
|
+
...$t(),
|
|
2823
2748
|
charts: {
|
|
2824
2749
|
...e.charts,
|
|
2825
|
-
flow:
|
|
2750
|
+
flow: w.getDefaultChartConfig()
|
|
2826
2751
|
}
|
|
2827
2752
|
};
|
|
2828
2753
|
case "retention": return {
|
|
2829
|
-
|
|
2754
|
+
...tn(),
|
|
2830
2755
|
charts: {
|
|
2831
2756
|
...e.charts,
|
|
2832
|
-
retention:
|
|
2757
|
+
retention: b.getDefaultChartConfig()
|
|
2833
2758
|
}
|
|
2834
2759
|
};
|
|
2835
2760
|
default: return {
|
|
2836
|
-
...
|
|
2761
|
+
...Yt(),
|
|
2837
2762
|
userManuallySelectedChart: !1,
|
|
2838
2763
|
charts: {
|
|
2839
2764
|
...e.charts,
|
|
@@ -2844,7 +2769,7 @@ function gn(e, t) {
|
|
|
2844
2769
|
}),
|
|
2845
2770
|
clearQuery: () => e((e) => {
|
|
2846
2771
|
let t = [...e.queryStates];
|
|
2847
|
-
return t[e.activeQueryIndex] =
|
|
2772
|
+
return t[e.activeQueryIndex] = Y(), {
|
|
2848
2773
|
queryStates: t,
|
|
2849
2774
|
userManuallySelectedChart: !1,
|
|
2850
2775
|
charts: {
|
|
@@ -2859,15 +2784,15 @@ function gn(e, t) {
|
|
|
2859
2784
|
}
|
|
2860
2785
|
};
|
|
2861
2786
|
}
|
|
2862
|
-
function
|
|
2863
|
-
let r =
|
|
2864
|
-
...Kt(e, t, n),
|
|
2787
|
+
function yn(n = {}) {
|
|
2788
|
+
let r = _n(n), o = (e, t, n) => ({
|
|
2865
2789
|
...Jt(e, t, n),
|
|
2866
2790
|
...Xt(e, t, n),
|
|
2867
2791
|
...Qt(e, t, n),
|
|
2868
2792
|
...en(e, t, n),
|
|
2869
|
-
...
|
|
2870
|
-
...
|
|
2793
|
+
...nn(e, t, n),
|
|
2794
|
+
...on(e, t, n),
|
|
2795
|
+
...vn(e, t)
|
|
2871
2796
|
});
|
|
2872
2797
|
if (n.disableLocalStorage) {
|
|
2873
2798
|
let t = a()(i(e(o), { name: "AnalysisBuilderStore (no-persist)" }));
|
|
@@ -2876,10 +2801,10 @@ function _n(n = {}) {
|
|
|
2876
2801
|
return a()(i(e(t(o, {
|
|
2877
2802
|
name: n.storageKey || "drizzle-cube-analysis-builder-v3",
|
|
2878
2803
|
partialize: (e) => e.saveWorkspace(),
|
|
2879
|
-
merge: (e, t) => e &&
|
|
2804
|
+
merge: (e, t) => e && g(e) ? {
|
|
2880
2805
|
...t,
|
|
2881
2806
|
_persistedWorkspace: e
|
|
2882
|
-
} : e &&
|
|
2807
|
+
} : e && D(e) ? {
|
|
2883
2808
|
...t,
|
|
2884
2809
|
_persistedConfig: e
|
|
2885
2810
|
} : r ? {
|
|
@@ -2902,10 +2827,10 @@ function _n(n = {}) {
|
|
|
2902
2827
|
}
|
|
2903
2828
|
})), { name: "AnalysisBuilderStore" }));
|
|
2904
2829
|
}
|
|
2905
|
-
var
|
|
2906
|
-
function
|
|
2907
|
-
let u =
|
|
2908
|
-
return u.current ||=
|
|
2830
|
+
var bn = ge(null);
|
|
2831
|
+
function xn({ children: e, initialQuery: t, initialChartConfig: n, disableLocalStorage: r, storageKey: i, initialAnalysisType: a, initialFunnelState: o, initialFlowState: s, initialRetentionState: c, initialActiveView: l }) {
|
|
2832
|
+
let u = W(null);
|
|
2833
|
+
return u.current ||= yn({
|
|
2909
2834
|
initialQuery: t,
|
|
2910
2835
|
initialChartConfig: n,
|
|
2911
2836
|
disableLocalStorage: r,
|
|
@@ -2915,22 +2840,22 @@ function yn({ children: e, initialQuery: t, initialChartConfig: n, disableLocalS
|
|
|
2915
2840
|
initialFlowState: s,
|
|
2916
2841
|
initialRetentionState: c,
|
|
2917
2842
|
initialActiveView: l
|
|
2918
|
-
}), /* @__PURE__ */
|
|
2843
|
+
}), /* @__PURE__ */ q(bn.Provider, {
|
|
2919
2844
|
value: u.current,
|
|
2920
2845
|
children: e
|
|
2921
2846
|
});
|
|
2922
2847
|
}
|
|
2923
2848
|
function $(e) {
|
|
2924
|
-
let t =
|
|
2849
|
+
let t = ve(bn);
|
|
2925
2850
|
if (!t) throw Error("useAnalysisBuilderStore must be used within AnalysisBuilderStoreProvider");
|
|
2926
2851
|
return r(t, e);
|
|
2927
2852
|
}
|
|
2928
|
-
function
|
|
2929
|
-
let e =
|
|
2853
|
+
function Sn() {
|
|
2854
|
+
let e = ve(bn);
|
|
2930
2855
|
if (!e) throw Error("useAnalysisBuilderStoreApi must be used within AnalysisBuilderStoreProvider");
|
|
2931
2856
|
return e;
|
|
2932
2857
|
}
|
|
2933
|
-
var
|
|
2858
|
+
var Cn = (e) => e.queryStates[e.activeQueryIndex] || Y(), wn = (e) => Cn(e).metrics, Tn = (e) => Cn(e).breakdowns, En = (e) => Cn(e).filters, Dn = (e) => {
|
|
2934
2859
|
let t = e.charts[e.analysisType];
|
|
2935
2860
|
return t ? {
|
|
2936
2861
|
chartType: t.chartType,
|
|
@@ -2945,18 +2870,18 @@ var xn = (e) => e.queryStates[e.activeQueryIndex] || K(), Sn = (e) => xn(e).metr
|
|
|
2945
2870
|
showTooltip: !0
|
|
2946
2871
|
}
|
|
2947
2872
|
};
|
|
2948
|
-
},
|
|
2873
|
+
}, On = (e) => ({
|
|
2949
2874
|
activeTab: e.activeTab,
|
|
2950
2875
|
activeView: e.activeView,
|
|
2951
2876
|
displayLimit: e.displayLimit,
|
|
2952
2877
|
showFieldModal: e.showFieldModal,
|
|
2953
2878
|
fieldModalMode: e.fieldModalMode
|
|
2954
|
-
}),
|
|
2879
|
+
}), kn = (e) => ({
|
|
2955
2880
|
queryStates: e.queryStates,
|
|
2956
2881
|
activeQueryIndex: e.activeQueryIndex,
|
|
2957
2882
|
mergeStrategy: e.mergeStrategy,
|
|
2958
2883
|
isMultiQueryMode: e.analysisType === "query" && e.queryStates.length > 1
|
|
2959
|
-
}),
|
|
2884
|
+
}), An = (e) => ({
|
|
2960
2885
|
funnelCube: e.funnelCube,
|
|
2961
2886
|
funnelSteps: e.funnelSteps,
|
|
2962
2887
|
activeFunnelStepIndex: e.activeFunnelStepIndex,
|
|
@@ -2967,16 +2892,16 @@ var xn = (e) => e.queryStates[e.activeQueryIndex] || K(), Sn = (e) => xn(e).metr
|
|
|
2967
2892
|
});
|
|
2968
2893
|
//#endregion
|
|
2969
2894
|
//#region src/client/utils/multiQueryValidation.ts
|
|
2970
|
-
function
|
|
2895
|
+
function jn(e) {
|
|
2971
2896
|
return e.timeDimensions || [];
|
|
2972
2897
|
}
|
|
2973
|
-
function
|
|
2898
|
+
function Mn(e) {
|
|
2974
2899
|
let t = [];
|
|
2975
2900
|
if (e.length < 2) return t;
|
|
2976
|
-
let n =
|
|
2901
|
+
let n = jn(e[0]);
|
|
2977
2902
|
if (n.length === 0) return t;
|
|
2978
2903
|
for (let r = 1; r < e.length; r++) {
|
|
2979
|
-
let i =
|
|
2904
|
+
let i = jn(e[r]);
|
|
2980
2905
|
if (i.length === 0 && n.length > 0) {
|
|
2981
2906
|
t.push({
|
|
2982
2907
|
type: "missing_time_dimension",
|
|
@@ -3002,7 +2927,7 @@ function An(e) {
|
|
|
3002
2927
|
}
|
|
3003
2928
|
return t;
|
|
3004
2929
|
}
|
|
3005
|
-
function
|
|
2930
|
+
function Nn(e, t) {
|
|
3006
2931
|
let n = [];
|
|
3007
2932
|
if (e.length < 2 || t.length === 0) return n;
|
|
3008
2933
|
for (let r = 0; r < e.length; r++) {
|
|
@@ -3016,7 +2941,7 @@ function jn(e, t) {
|
|
|
3016
2941
|
}
|
|
3017
2942
|
return n;
|
|
3018
2943
|
}
|
|
3019
|
-
function
|
|
2944
|
+
function Pn(e) {
|
|
3020
2945
|
let t = [];
|
|
3021
2946
|
if (e.length < 2) return t;
|
|
3022
2947
|
let n = /* @__PURE__ */ new Map();
|
|
@@ -3035,7 +2960,7 @@ function Mn(e) {
|
|
|
3035
2960
|
affectedMeasures: r
|
|
3036
2961
|
}), t;
|
|
3037
2962
|
}
|
|
3038
|
-
function
|
|
2963
|
+
function Fn(e) {
|
|
3039
2964
|
let t = [];
|
|
3040
2965
|
if (e.length < 2) return t;
|
|
3041
2966
|
let n = e.map((e) => e.timeDimensions?.[0]?.dateRange);
|
|
@@ -3045,134 +2970,408 @@ function Nn(e) {
|
|
|
3045
2970
|
message: "Queries have different date ranges - some data points may be missing in merged results"
|
|
3046
2971
|
}), t;
|
|
3047
2972
|
}
|
|
3048
|
-
function
|
|
2973
|
+
function In(e, t, n = []) {
|
|
3049
2974
|
let r = [], i = [];
|
|
3050
2975
|
return e.length < 2 ? {
|
|
3051
2976
|
isValid: !0,
|
|
3052
2977
|
errors: r,
|
|
3053
2978
|
warnings: i
|
|
3054
|
-
} : (i.push(...
|
|
2979
|
+
} : (i.push(...Pn(e)), i.push(...Fn(e)), t === "merge" && (r.push(...Mn(e)), n.length > 0 && r.push(...Nn(e, n))), {
|
|
3055
2980
|
isValid: r.length === 0,
|
|
3056
2981
|
errors: r,
|
|
3057
2982
|
warnings: i
|
|
3058
2983
|
});
|
|
3059
2984
|
}
|
|
3060
|
-
function
|
|
2985
|
+
function Ln(e) {
|
|
3061
2986
|
return (e.measures?.length || 0) + (e.dimensions?.length || 0) + (e.timeDimensions?.length || 0);
|
|
3062
2987
|
}
|
|
3063
|
-
function
|
|
3064
|
-
return e.filter((e) =>
|
|
2988
|
+
function Rn(e) {
|
|
2989
|
+
return e.filter((e) => Ln(e) > 0).length >= 2;
|
|
3065
2990
|
}
|
|
3066
|
-
function
|
|
2991
|
+
function zn(e, t) {
|
|
3067
2992
|
return `${e} ${t}${e === 1 ? "" : "s"}`;
|
|
3068
2993
|
}
|
|
3069
|
-
function
|
|
2994
|
+
function Bn(e) {
|
|
3070
2995
|
if (e.isValid && e.warnings.length === 0) return "Configuration is valid";
|
|
3071
2996
|
let t = [];
|
|
3072
|
-
return e.errors.length > 0 && t.push(
|
|
2997
|
+
return e.errors.length > 0 && t.push(zn(e.errors.length, "error")), e.warnings.length > 0 && t.push(zn(e.warnings.length, "warning")), t.join(", ");
|
|
3073
2998
|
}
|
|
3074
2999
|
//#endregion
|
|
3075
|
-
//#region src/client/hooks/
|
|
3076
|
-
function
|
|
3077
|
-
let e = $((e) => e.queryStates),
|
|
3078
|
-
let
|
|
3079
|
-
return
|
|
3000
|
+
//#region src/client/hooks/useAnalysisState.ts
|
|
3001
|
+
function Vn(e = {}) {
|
|
3002
|
+
let { externalColorPalette: t } = e, r = Sn(), i = $((e) => e.queryStates), a = $((e) => e.activeQueryIndex), o = $((e) => e.mergeStrategy), s = $((e) => e.setActiveQueryIndex), c = $((e) => e.setMergeStrategy), l = $((e) => e.addQuery), u = $((e) => e.removeQuery), d = $((e) => e.getCurrentState), p = $((e) => e.getMergeKeys), m = $((e) => e.isMultiQueryMode), h = d(), g = m(), _ = p(), v = U(() => {
|
|
3003
|
+
let e = i[a] || h;
|
|
3004
|
+
return Te(e.metrics, e.breakdowns, e.filters, e.order, !1, e.limit);
|
|
3080
3005
|
}, [
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
]),
|
|
3085
|
-
let
|
|
3086
|
-
return
|
|
3087
|
-
}, [
|
|
3006
|
+
i,
|
|
3007
|
+
a,
|
|
3008
|
+
h
|
|
3009
|
+
]), y = U(() => {
|
|
3010
|
+
let e = i[0]?.breakdowns || [];
|
|
3011
|
+
return i.map((t, n) => Te(t.metrics, o === "merge" && n > 0 ? e : t.breakdowns, t.filters, t.order, !1, t.limit));
|
|
3012
|
+
}, [i, o]), b = U(() => {
|
|
3013
|
+
if (i.length <= 1) return null;
|
|
3014
|
+
let e = y.filter((e) => e.measures && e.measures.length > 0 || e.dimensions && e.dimensions.length > 0 || e.timeDimensions && e.timeDimensions.length > 0);
|
|
3015
|
+
return e.length < 2 ? null : {
|
|
3016
|
+
queries: e,
|
|
3017
|
+
mergeStrategy: o,
|
|
3018
|
+
mergeKeys: _,
|
|
3019
|
+
queryLabels: e.map((e, t) => `Q${t + 1}`)
|
|
3020
|
+
};
|
|
3021
|
+
}, [
|
|
3022
|
+
y,
|
|
3023
|
+
i.length,
|
|
3024
|
+
o,
|
|
3025
|
+
_
|
|
3026
|
+
]), x = U(() => g ? In(y, o, _ || []) : null, [
|
|
3027
|
+
g,
|
|
3028
|
+
y,
|
|
3029
|
+
o,
|
|
3030
|
+
_
|
|
3031
|
+
]), S = U(() => v.measures && v.measures.length > 0 || v.dimensions && v.dimensions.length > 0 || v.timeDimensions && v.timeDimensions.length > 0, [v]), C = U(() => {
|
|
3032
|
+
if (!g) return h.metrics;
|
|
3033
|
+
let e = /* @__PURE__ */ new Set(), t = [];
|
|
3034
|
+
for (let n = 0; n < i.length; n++) {
|
|
3035
|
+
let r = i[n];
|
|
3036
|
+
for (let i of r.metrics) {
|
|
3037
|
+
let r = `Q${n + 1}:${i.field}`;
|
|
3038
|
+
e.has(r) || (e.add(r), t.push({
|
|
3039
|
+
...i,
|
|
3040
|
+
label: `${i.label} (Q${n + 1})`
|
|
3041
|
+
}));
|
|
3042
|
+
}
|
|
3043
|
+
}
|
|
3044
|
+
return t;
|
|
3045
|
+
}, [
|
|
3046
|
+
g,
|
|
3047
|
+
i,
|
|
3048
|
+
h.metrics
|
|
3049
|
+
]), w = U(() => {
|
|
3050
|
+
if (!g) return h.breakdowns;
|
|
3051
|
+
let e = /* @__PURE__ */ new Set(), t = [];
|
|
3052
|
+
for (let n of i) for (let r of n.breakdowns) e.has(r.field) || (e.add(r.field), t.push(r));
|
|
3053
|
+
return t;
|
|
3054
|
+
}, [
|
|
3055
|
+
g,
|
|
3056
|
+
i,
|
|
3057
|
+
h.breakdowns
|
|
3058
|
+
]), T = U(() => o === "merge" && a > 0 ? i[0]?.breakdowns || [] : h.breakdowns, [
|
|
3059
|
+
o,
|
|
3060
|
+
a,
|
|
3061
|
+
i,
|
|
3062
|
+
h.breakdowns
|
|
3063
|
+
]), E = $((e) => e.analysisType), D = $((e) => e.funnelBindingKey), O = $((e) => e.funnelCube), k = $((e) => e.funnelSteps), ee = $((e) => e.activeFunnelStepIndex), A = $((e) => e.funnelTimeDimension), te = U(() => E !== "funnel" || !D?.dimension || !A || !k || k.length < 2 ? !1 : k.every((e) => e.filters.length > 0), [
|
|
3064
|
+
E,
|
|
3065
|
+
D,
|
|
3066
|
+
A,
|
|
3067
|
+
k
|
|
3068
|
+
]), ne = $((e) => e.charts.funnel?.chartType) || "funnel", j = $((e) => e.charts.funnel?.chartConfig), re = U(() => j || {}, [j]), M = $((e) => e.charts.funnel?.displayConfig), ie = U(() => M || {
|
|
3069
|
+
showLegend: !0,
|
|
3070
|
+
showGrid: !0,
|
|
3071
|
+
showTooltip: !0
|
|
3072
|
+
}, [M]), ae = $((e) => e.flowCube), oe = $((e) => e.flowBindingKey), N = $((e) => e.flowTimeDimension), P = $((e) => e.eventDimension), se = $((e) => e.startingStep), F = $((e) => e.stepsBefore), I = $((e) => e.stepsAfter), L = $((e) => e.joinStrategy), ce = $((e) => e.charts.flow?.displayConfig), le = U(() => ce || {
|
|
3073
|
+
showLegend: !0,
|
|
3074
|
+
showGrid: !0,
|
|
3075
|
+
showTooltip: !0
|
|
3076
|
+
}, [ce]), ue = $((e) => e.charts.flow?.chartType) || "sankey", R = $((e) => e.buildFunnelQueryFromSteps), de = U(() => E === "funnel" ? R() : null, [
|
|
3077
|
+
E,
|
|
3078
|
+
R,
|
|
3079
|
+
k
|
|
3080
|
+
]), z = $((e) => e.buildFlowQuery), fe = U(() => E === "flow" ? z() : null, [
|
|
3081
|
+
E,
|
|
3082
|
+
z,
|
|
3083
|
+
ae,
|
|
3084
|
+
oe,
|
|
3085
|
+
N,
|
|
3086
|
+
P,
|
|
3087
|
+
se,
|
|
3088
|
+
F,
|
|
3089
|
+
I,
|
|
3090
|
+
ue,
|
|
3091
|
+
L
|
|
3092
|
+
]), pe = $((e) => e.retentionCube), me = $((e) => e.retentionBindingKey), he = $((e) => e.retentionTimeDimension), B = $((e) => e.retentionDateRange), ge = $((e) => e.retentionCohortFilters), _e = $((e) => e.retentionActivityFilters), ve = $((e) => e.retentionBreakdowns), H = $((e) => e.retentionViewGranularity), W = $((e) => e.retentionPeriods), K = $((e) => e.retentionType), q = $((e) => e.buildRetentionQuery), J = $((e) => e.getRetentionValidation), ye = $((e) => e.charts.retention?.displayConfig), be = U(() => E === "retention" ? q() : null, [
|
|
3093
|
+
E,
|
|
3094
|
+
q,
|
|
3095
|
+
pe,
|
|
3096
|
+
me,
|
|
3097
|
+
he,
|
|
3098
|
+
B,
|
|
3099
|
+
ve,
|
|
3100
|
+
H,
|
|
3101
|
+
W,
|
|
3102
|
+
K,
|
|
3103
|
+
ge,
|
|
3104
|
+
_e
|
|
3105
|
+
]), xe = U(() => E === "retention" ? J() : null, [
|
|
3106
|
+
E,
|
|
3107
|
+
J,
|
|
3108
|
+
pe,
|
|
3109
|
+
me,
|
|
3110
|
+
he,
|
|
3111
|
+
B
|
|
3112
|
+
]), Se = U(() => E === "retention" ? be !== null : E === "flow" ? fe !== null : E === "funnel" ? de !== null : S ?? !1, [
|
|
3113
|
+
E,
|
|
3114
|
+
be,
|
|
3115
|
+
fe,
|
|
3116
|
+
de,
|
|
3117
|
+
S
|
|
3118
|
+
]), { chartType: Ce, chartConfig: we, displayConfig: Y } = $(n(Dn)), Ee = $((e) => e.userManuallySelectedChart), De = $((e) => e.localPaletteName), Oe = $((e) => e.setChartTypeManual), ke = $((e) => e.setChartConfig), Ae = $((e) => e.setDisplayConfig), je = $((e) => e.setFunnelChartType), Me = $((e) => e.setFunnelChartConfig), Ne = $((e) => e.setFunnelDisplayConfig), Pe = $((e) => e.setLocalPaletteName), Fe = $((e) => e.setUserManuallySelectedChart), Ie = V((e) => {
|
|
3119
|
+
if (E === "funnel") je(e);
|
|
3120
|
+
else {
|
|
3121
|
+
Oe(e);
|
|
3122
|
+
let { chartConfig: t } = kt(C, w, e);
|
|
3123
|
+
ke(t);
|
|
3124
|
+
}
|
|
3125
|
+
}, [
|
|
3126
|
+
E,
|
|
3127
|
+
C,
|
|
3128
|
+
w,
|
|
3129
|
+
je,
|
|
3130
|
+
Oe,
|
|
3131
|
+
ke
|
|
3132
|
+
]), Le = V((e) => {
|
|
3133
|
+
E === "funnel" ? Me(e) : ke(e);
|
|
3134
|
+
}, [
|
|
3135
|
+
E,
|
|
3136
|
+
Me,
|
|
3137
|
+
ke
|
|
3138
|
+
]), Re = V((e) => {
|
|
3139
|
+
E === "funnel" ? Ne(e) : Ae(e);
|
|
3140
|
+
}, [
|
|
3141
|
+
E,
|
|
3142
|
+
Ne,
|
|
3143
|
+
Ae
|
|
3144
|
+
]), ze = U(() => Dt(C, w), [C, w]), Be = U(() => t ? Array.isArray(t) && typeof t[0] == "string" ? {
|
|
3145
|
+
name: "custom",
|
|
3146
|
+
label: "Custom",
|
|
3147
|
+
colors: t,
|
|
3148
|
+
gradient: t
|
|
3149
|
+
} : t : f(De), [t, De]), Ve = V((e) => {
|
|
3150
|
+
r.setState((t) => ({ charts: {
|
|
3151
|
+
...t.charts,
|
|
3152
|
+
flow: {
|
|
3153
|
+
...t.charts.flow || {
|
|
3154
|
+
chartType: "sankey",
|
|
3155
|
+
chartConfig: {},
|
|
3156
|
+
displayConfig: {}
|
|
3157
|
+
},
|
|
3158
|
+
displayConfig: e
|
|
3159
|
+
}
|
|
3160
|
+
} }));
|
|
3161
|
+
}, [r]), He = V((e) => {
|
|
3162
|
+
r.setState((t) => ({ charts: {
|
|
3163
|
+
...t.charts,
|
|
3164
|
+
retention: {
|
|
3165
|
+
...t.charts.retention || {
|
|
3166
|
+
chartType: "retentionCombined",
|
|
3167
|
+
chartConfig: {},
|
|
3168
|
+
displayConfig: {}
|
|
3169
|
+
},
|
|
3170
|
+
displayConfig: e
|
|
3171
|
+
}
|
|
3172
|
+
} }));
|
|
3173
|
+
}, [r]), Ue = $((e) => e.activeTab), We = $((e) => e.activeView), Ge = $((e) => e.displayLimit), Ke = $((e) => e.showFieldModal), qe = $((e) => e.fieldModalMode), Je = $((e) => e.setActiveTab), Ye = $((e) => e.setActiveView), Xe = $((e) => e.setDisplayLimit), Ze = $((e) => e.closeFieldModal), [Qe, $e] = G(0), et = $((e) => e.openMetricsModal), tt = $((e) => e.addMetric), nt = $((e) => e.removeMetric), rt = $((e) => e.toggleMetric), it = $((e) => e.reorderMetrics), at = $((e) => e.openBreakdownsModal), ot = $((e) => e.addBreakdown), st = $((e) => e.removeBreakdown), ct = $((e) => e.toggleBreakdown), lt = $((e) => e.setBreakdownGranularity), ut = $((e) => e.toggleBreakdownComparison), dt = $((e) => e.reorderBreakdowns), ft = $((e) => e.setFilters), pt = $((e) => e.dropFieldToFilter), mt = $((e) => e.setOrder), ht = $((e) => e.setLimit), gt = $((e) => e.clearQuery), _t = $((e) => e.clearCurrentMode), vt = $((e) => e.setFunnelBindingKey), yt = $((e) => e.setAnalysisType), bt = $((e) => e.setFunnelCube), xt = $((e) => e.addFunnelStep), St = $((e) => e.removeFunnelStep), Ct = $((e) => e.updateFunnelStep), wt = $((e) => e.setActiveFunnelStepIndex), Tt = $((e) => e.reorderFunnelSteps), Et = $((e) => e.setFunnelTimeDimension), Ot = $((e) => e.setFlowCube), At = $((e) => e.setFlowBindingKey), jt = $((e) => e.setFlowTimeDimension), Mt = $((e) => e.setEventDimension), Nt = $((e) => e.setStartingStepName), Pt = $((e) => e.setStartingStepFilters), Ft = $((e) => e.setStepsBefore), It = $((e) => e.setStepsAfter), Lt = $((e) => e.setJoinStrategy), Rt = $((e) => e.setRetentionCube), zt = $((e) => e.setRetentionBindingKey), Bt = $((e) => e.setRetentionTimeDimension), Vt = $((e) => e.setRetentionDateRange), Ht = $((e) => e.setRetentionCohortFilters), Ut = $((e) => e.setRetentionActivityFilters), Wt = $((e) => e.setRetentionBreakdowns), X = $((e) => e.addRetentionBreakdown), Z = $((e) => e.removeRetentionBreakdown), Gt = $((e) => e.setRetentionViewGranularity), Kt = $((e) => e.setRetentionPeriods), Q = $((e) => e.setRetentionType), qt = $((e) => e.getValidation), Jt = U(() => qt(), [
|
|
3174
|
+
qt,
|
|
3175
|
+
i,
|
|
3176
|
+
E,
|
|
3177
|
+
k,
|
|
3178
|
+
D,
|
|
3179
|
+
A,
|
|
3180
|
+
ae,
|
|
3181
|
+
oe,
|
|
3182
|
+
N,
|
|
3183
|
+
P,
|
|
3184
|
+
se,
|
|
3185
|
+
F,
|
|
3186
|
+
I,
|
|
3187
|
+
L
|
|
3188
|
+
]), Yt = V((e, t) => {
|
|
3189
|
+
E === "retention" && t === "dimension" ? X({ field: e.name }) : ct(e.name, t === "timeDimension");
|
|
3190
|
+
}, [
|
|
3191
|
+
E,
|
|
3192
|
+
X,
|
|
3193
|
+
ct
|
|
3194
|
+
]), Xt = V((e, t, n, r) => {
|
|
3195
|
+
qe === "metrics" && t === "measure" ? rt(e.name) : qe === "breakdown" && Yt(e, t), r || Ze();
|
|
3196
|
+
}, [
|
|
3197
|
+
qe,
|
|
3198
|
+
rt,
|
|
3199
|
+
Yt,
|
|
3200
|
+
Ze
|
|
3201
|
+
]);
|
|
3088
3202
|
return {
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
3093
|
-
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
|
|
3097
|
-
|
|
3098
|
-
|
|
3099
|
-
|
|
3100
|
-
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
|
|
3104
|
-
|
|
3203
|
+
storeApi: r,
|
|
3204
|
+
queryState: h,
|
|
3205
|
+
queryStates: i,
|
|
3206
|
+
activeQueryIndex: a,
|
|
3207
|
+
mergeStrategy: o,
|
|
3208
|
+
isMultiQueryMode: g,
|
|
3209
|
+
mergeKeys: _,
|
|
3210
|
+
currentQuery: v,
|
|
3211
|
+
allQueries: y,
|
|
3212
|
+
multiQueryConfig: b,
|
|
3213
|
+
multiQueryValidation: x,
|
|
3214
|
+
isValidQuery: S,
|
|
3215
|
+
effectiveIsValidQuery: Se,
|
|
3216
|
+
combinedMetrics: C,
|
|
3217
|
+
combinedBreakdowns: w,
|
|
3218
|
+
effectiveBreakdowns: T,
|
|
3219
|
+
analysisType: E,
|
|
3220
|
+
funnelBindingKey: D,
|
|
3221
|
+
isFunnelModeEnabled: te,
|
|
3222
|
+
funnelCube: O,
|
|
3223
|
+
funnelSteps: k,
|
|
3224
|
+
activeFunnelStepIndex: ee,
|
|
3225
|
+
funnelTimeDimension: A,
|
|
3226
|
+
funnelChartType: ne,
|
|
3227
|
+
funnelChartConfig: re,
|
|
3228
|
+
funnelDisplayConfig: ie,
|
|
3229
|
+
serverFunnelQuery: de,
|
|
3230
|
+
flowCube: ae,
|
|
3231
|
+
flowBindingKey: oe,
|
|
3232
|
+
flowTimeDimension: N,
|
|
3233
|
+
eventDimension: P,
|
|
3234
|
+
startingStep: se,
|
|
3235
|
+
stepsBefore: F,
|
|
3236
|
+
stepsAfter: I,
|
|
3237
|
+
joinStrategy: L,
|
|
3238
|
+
flowDisplayConfig: le,
|
|
3239
|
+
serverFlowQuery: fe,
|
|
3240
|
+
retentionCube: pe,
|
|
3241
|
+
retentionBindingKey: me,
|
|
3242
|
+
retentionTimeDimension: he,
|
|
3243
|
+
retentionDateRange: B,
|
|
3244
|
+
retentionCohortFilters: ge,
|
|
3245
|
+
retentionActivityFilters: _e,
|
|
3246
|
+
retentionBreakdowns: ve,
|
|
3247
|
+
retentionViewGranularity: H,
|
|
3248
|
+
retentionPeriods: W,
|
|
3249
|
+
retentionType: K,
|
|
3250
|
+
retentionDisplayConfig: ye,
|
|
3251
|
+
serverRetentionQuery: be,
|
|
3252
|
+
retentionValidation: xe,
|
|
3253
|
+
chartType: Ce,
|
|
3254
|
+
chartConfig: we,
|
|
3255
|
+
displayConfig: Y,
|
|
3256
|
+
colorPalette: Be,
|
|
3257
|
+
localPaletteName: De,
|
|
3258
|
+
chartAvailability: ze,
|
|
3259
|
+
userManuallySelectedChart: Ee,
|
|
3260
|
+
activeTab: Ue,
|
|
3261
|
+
activeView: We,
|
|
3262
|
+
displayLimit: Ge,
|
|
3263
|
+
showFieldModal: Ke,
|
|
3264
|
+
fieldModalMode: qe,
|
|
3265
|
+
activeTableIndex: Qe,
|
|
3266
|
+
adapterValidation: Jt,
|
|
3267
|
+
getQueryConfig: V(() => {
|
|
3268
|
+
let e = r.getState();
|
|
3269
|
+
return e.analysisType === "funnel" ? e.buildFunnelQueryFromSteps() || e.buildCurrentQuery() : e.queryStates.length > 1 ? {
|
|
3270
|
+
queries: e.buildAllQueries(),
|
|
3271
|
+
mergeStrategy: e.mergeStrategy,
|
|
3272
|
+
mergeKeys: e.getMergeKeys(),
|
|
3273
|
+
queryLabels: e.queryStates.map((e, t) => `Q${t + 1}`),
|
|
3274
|
+
funnelBindingKey: e.funnelBindingKey,
|
|
3275
|
+
stepTimeToConvert: e.stepTimeToConvert
|
|
3276
|
+
} : e.buildCurrentQuery();
|
|
3277
|
+
}, [r]),
|
|
3278
|
+
getChartConfig: V(() => {
|
|
3279
|
+
let e = r.getState(), t = e.charts[e.analysisType];
|
|
3280
|
+
return t ? {
|
|
3281
|
+
chartType: t.chartType,
|
|
3282
|
+
chartConfig: t.chartConfig,
|
|
3283
|
+
displayConfig: t.displayConfig
|
|
3284
|
+
} : {
|
|
3285
|
+
chartType: Ce,
|
|
3286
|
+
chartConfig: we,
|
|
3287
|
+
displayConfig: Y
|
|
3105
3288
|
};
|
|
3106
|
-
}, [
|
|
3107
|
-
m,
|
|
3108
|
-
e.length,
|
|
3109
|
-
n,
|
|
3110
|
-
f
|
|
3111
|
-
]),
|
|
3112
|
-
multiQueryValidation: R(() => d ? Pn(m, n, f || []) : null, [
|
|
3113
|
-
d,
|
|
3114
|
-
m,
|
|
3115
|
-
n,
|
|
3116
|
-
f
|
|
3117
|
-
]),
|
|
3118
|
-
isValidQuery: R(() => p.measures && p.measures.length > 0 || p.dimensions && p.dimensions.length > 0 || p.timeDimensions && p.timeDimensions.length > 0, [p]),
|
|
3119
|
-
setActiveQueryIndex: r,
|
|
3120
|
-
setMergeStrategy: i,
|
|
3121
|
-
addQuery: a,
|
|
3122
|
-
removeQuery: o
|
|
3123
|
-
};
|
|
3124
|
-
}
|
|
3125
|
-
//#endregion
|
|
3126
|
-
//#region src/client/hooks/useAnalysisCombinedFields.ts
|
|
3127
|
-
function Bn(e) {
|
|
3128
|
-
let { queryState: t, queryStates: n, isMultiQueryMode: r, mergeStrategy: i, activeQueryIndex: a } = e;
|
|
3129
|
-
return {
|
|
3130
|
-
combinedMetrics: R(() => {
|
|
3131
|
-
if (!r) return t.metrics;
|
|
3132
|
-
let e = /* @__PURE__ */ new Set(), i = [];
|
|
3133
|
-
for (let t = 0; t < n.length; t++) {
|
|
3134
|
-
let r = n[t];
|
|
3135
|
-
for (let n of r.metrics) {
|
|
3136
|
-
let r = `Q${t + 1}:${n.field}`;
|
|
3137
|
-
e.has(r) || (e.add(r), i.push({
|
|
3138
|
-
...n,
|
|
3139
|
-
label: `${n.label} (Q${t + 1})`
|
|
3140
|
-
}));
|
|
3141
|
-
}
|
|
3142
|
-
}
|
|
3143
|
-
return i;
|
|
3144
|
-
}, [
|
|
3145
|
-
r,
|
|
3146
|
-
n,
|
|
3147
|
-
t.metrics
|
|
3148
|
-
]),
|
|
3149
|
-
combinedBreakdowns: R(() => {
|
|
3150
|
-
if (!r) return t.breakdowns;
|
|
3151
|
-
let e = /* @__PURE__ */ new Set(), i = [];
|
|
3152
|
-
for (let t of n) for (let n of t.breakdowns) e.has(n.field) || (e.add(n.field), i.push(n));
|
|
3153
|
-
return i;
|
|
3154
3289
|
}, [
|
|
3155
3290
|
r,
|
|
3156
|
-
|
|
3157
|
-
|
|
3291
|
+
Ce,
|
|
3292
|
+
we,
|
|
3293
|
+
Y
|
|
3158
3294
|
]),
|
|
3159
|
-
|
|
3160
|
-
|
|
3161
|
-
|
|
3162
|
-
|
|
3163
|
-
|
|
3164
|
-
|
|
3295
|
+
getAnalysisType: V(() => r.getState().analysisType, [r]),
|
|
3296
|
+
actions: {
|
|
3297
|
+
setActiveQueryIndex: s,
|
|
3298
|
+
setMergeStrategy: c,
|
|
3299
|
+
addQuery: l,
|
|
3300
|
+
removeQuery: u,
|
|
3301
|
+
openMetricsModal: et,
|
|
3302
|
+
addMetric: tt,
|
|
3303
|
+
removeMetric: nt,
|
|
3304
|
+
toggleMetric: rt,
|
|
3305
|
+
reorderMetrics: it,
|
|
3306
|
+
openBreakdownsModal: at,
|
|
3307
|
+
addBreakdown: ot,
|
|
3308
|
+
removeBreakdown: st,
|
|
3309
|
+
toggleBreakdown: ct,
|
|
3310
|
+
setBreakdownGranularity: lt,
|
|
3311
|
+
toggleBreakdownComparison: ut,
|
|
3312
|
+
reorderBreakdowns: dt,
|
|
3313
|
+
setFilters: ft,
|
|
3314
|
+
dropFieldToFilter: pt,
|
|
3315
|
+
setOrder: mt,
|
|
3316
|
+
setLimit: ht,
|
|
3317
|
+
setFunnelBindingKey: vt,
|
|
3318
|
+
setAnalysisType: yt,
|
|
3319
|
+
setFunnelCube: bt,
|
|
3320
|
+
addFunnelStep: xt,
|
|
3321
|
+
removeFunnelStep: St,
|
|
3322
|
+
updateFunnelStep: Ct,
|
|
3323
|
+
setActiveFunnelStepIndex: wt,
|
|
3324
|
+
reorderFunnelSteps: Tt,
|
|
3325
|
+
setFunnelTimeDimension: Et,
|
|
3326
|
+
setFunnelDisplayConfig: Ne,
|
|
3327
|
+
setFlowCube: Ot,
|
|
3328
|
+
setFlowBindingKey: At,
|
|
3329
|
+
setFlowTimeDimension: jt,
|
|
3330
|
+
setEventDimension: Mt,
|
|
3331
|
+
setStartingStepName: Nt,
|
|
3332
|
+
setStartingStepFilters: Pt,
|
|
3333
|
+
setStepsBefore: Ft,
|
|
3334
|
+
setStepsAfter: It,
|
|
3335
|
+
setJoinStrategy: Lt,
|
|
3336
|
+
setFlowDisplayConfig: Ve,
|
|
3337
|
+
setRetentionCube: Rt,
|
|
3338
|
+
setRetentionBindingKey: zt,
|
|
3339
|
+
setRetentionTimeDimension: Bt,
|
|
3340
|
+
setRetentionDateRange: Vt,
|
|
3341
|
+
setRetentionCohortFilters: Ht,
|
|
3342
|
+
setRetentionActivityFilters: Ut,
|
|
3343
|
+
setRetentionBreakdowns: Wt,
|
|
3344
|
+
addRetentionBreakdown: X,
|
|
3345
|
+
removeRetentionBreakdown: Z,
|
|
3346
|
+
setRetentionViewGranularity: Gt,
|
|
3347
|
+
setRetentionPeriods: Kt,
|
|
3348
|
+
setRetentionType: Q,
|
|
3349
|
+
setRetentionDisplayConfig: He,
|
|
3350
|
+
setChartType: Ie,
|
|
3351
|
+
setChartConfig: Le,
|
|
3352
|
+
setDisplayConfig: Re,
|
|
3353
|
+
setLocalPaletteName: Pe,
|
|
3354
|
+
setUserManuallySelectedChart: Fe,
|
|
3355
|
+
setActiveTab: Je,
|
|
3356
|
+
setActiveView: Ye,
|
|
3357
|
+
setDisplayLimit: Xe,
|
|
3358
|
+
closeFieldModal: Ze,
|
|
3359
|
+
setActiveTableIndex: $e,
|
|
3360
|
+
clearQuery: gt,
|
|
3361
|
+
clearCurrentMode: _t,
|
|
3362
|
+
handleFieldSelected: Xt
|
|
3363
|
+
}
|
|
3165
3364
|
};
|
|
3166
3365
|
}
|
|
3167
3366
|
//#endregion
|
|
3168
3367
|
//#region src/client/hooks/analysisQueryExecutionModes.ts
|
|
3169
|
-
function
|
|
3368
|
+
function Hn(e) {
|
|
3170
3369
|
return e.isRetentionMode ? "retention" : e.isFlowMode ? "flow" : e.isFunnelMode ? "funnel" : e.isMultiMode ? "multi" : "single";
|
|
3171
3370
|
}
|
|
3172
|
-
function
|
|
3371
|
+
function Un(e, t) {
|
|
3173
3372
|
return t[e];
|
|
3174
3373
|
}
|
|
3175
|
-
function
|
|
3374
|
+
function Wn(e) {
|
|
3176
3375
|
return {
|
|
3177
3376
|
funnelExecutedQueries: e.isFunnelMode && e.funnelExecutedQueries && e.funnelExecutedQueries.length > 0 ? e.funnelExecutedQueries : null,
|
|
3178
3377
|
funnelServerQuery: e.isFunnelMode ? e.funnelServerQuery : null,
|
|
@@ -3185,7 +3384,7 @@ function Un(e) {
|
|
|
3185
3384
|
retentionDebugData: e.isRetentionMode ? e.retentionDebugData : null
|
|
3186
3385
|
};
|
|
3187
3386
|
}
|
|
3188
|
-
function
|
|
3387
|
+
function Gn(e) {
|
|
3189
3388
|
return {
|
|
3190
3389
|
single: !e.isValidQuery || !e.isSingleMode,
|
|
3191
3390
|
multi: !e.hasMultiQueryConfig || !e.isMultiMode,
|
|
@@ -3195,11 +3394,11 @@ function Wn(e) {
|
|
|
3195
3394
|
dryRun: !!(!e.isValidQuery || e.isFunnelMode || e.isFlowMode || e.isRetentionMode)
|
|
3196
3395
|
};
|
|
3197
3396
|
}
|
|
3198
|
-
function
|
|
3397
|
+
function Kn(e) {
|
|
3199
3398
|
let { hasResults: t, initialData: n, isValidQuery: r, isLoading: i, isFetching: a, error: o } = e;
|
|
3200
3399
|
return n && n.length > 0 && !t ? "success" : r ? i && !t ? "loading" : a && t ? "refreshing" : o ? "error" : t ? "success" : "idle" : "idle";
|
|
3201
3400
|
}
|
|
3202
|
-
function
|
|
3401
|
+
function qn(e) {
|
|
3203
3402
|
return e.isRetentionMode && e.retentionChartData ? e.retentionChartData.rows.map((e) => ({
|
|
3204
3403
|
"Retention.period": `P${e.period}`,
|
|
3205
3404
|
"Retention.rate": e.retentionRate,
|
|
@@ -3209,19 +3408,19 @@ function Kn(e) {
|
|
|
3209
3408
|
})) : 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
3409
|
}
|
|
3211
3410
|
//#endregion
|
|
3212
|
-
//#region src/client/hooks/
|
|
3213
|
-
function
|
|
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 } =
|
|
3411
|
+
//#region src/client/hooks/useAnalysisQuery.ts
|
|
3412
|
+
function Jn(e) {
|
|
3413
|
+
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 } = de(), g = u === "funnel" || l, _ = u === "flow", v = u === "retention", y = u === "query" && i, b = u === "query" && !i, x = u === "funnel" && !!d, S = Hn({
|
|
3215
3414
|
isRetentionMode: v,
|
|
3216
3415
|
isFlowMode: _,
|
|
3217
3416
|
isFunnelMode: g,
|
|
3218
3417
|
isMultiMode: y
|
|
3219
|
-
}), C =
|
|
3418
|
+
}), C = U(() => x || !g || !c || n.length < 2 ? null : pe(n, c), [
|
|
3220
3419
|
x,
|
|
3221
3420
|
g,
|
|
3222
3421
|
c,
|
|
3223
3422
|
n
|
|
3224
|
-
]), w =
|
|
3423
|
+
]), w = Gn({
|
|
3225
3424
|
isValidQuery: a,
|
|
3226
3425
|
isSingleMode: b,
|
|
3227
3426
|
isMultiMode: y,
|
|
@@ -3233,46 +3432,46 @@ function qn(e) {
|
|
|
3233
3432
|
hasServerFunnelQuery: !!d,
|
|
3234
3433
|
hasServerFlowQuery: !!f,
|
|
3235
3434
|
hasServerRetentionQuery: !!p
|
|
3236
|
-
}), T =
|
|
3435
|
+
}), T = oe(t, {
|
|
3237
3436
|
skip: w.single,
|
|
3238
3437
|
debounceMs: 300
|
|
3239
|
-
}), E =
|
|
3438
|
+
}), E = se(r, {
|
|
3240
3439
|
skip: w.multi,
|
|
3241
3440
|
debounceMs: 300
|
|
3242
|
-
}), D =
|
|
3441
|
+
}), D = L(C, {
|
|
3243
3442
|
skip: w.funnel,
|
|
3244
3443
|
debounceMs: 300,
|
|
3245
3444
|
prebuiltServerQuery: x ? d : void 0
|
|
3246
|
-
}), O =
|
|
3445
|
+
}), O = ue(f ?? null, {
|
|
3247
3446
|
skip: w.flow,
|
|
3248
3447
|
debounceMs: 300
|
|
3249
|
-
}), k =
|
|
3448
|
+
}), k = P(p ?? null, {
|
|
3250
3449
|
skip: w.retention,
|
|
3251
3450
|
debounceMs: 300,
|
|
3252
3451
|
getFieldLabel: h
|
|
3253
|
-
}),
|
|
3452
|
+
}), ee = fe({
|
|
3254
3453
|
queries: i ? n : [t],
|
|
3255
3454
|
isMultiQueryMode: i,
|
|
3256
3455
|
skip: w.dryRun
|
|
3257
|
-
}), A =
|
|
3456
|
+
}), A = z(D.serverQuery, { skip: !g || !D.serverQuery }), te = z(O.serverQuery, { skip: !_ || !O.serverQuery }), ne = z(p, { skip: !v || !p }), j = Un(S, {
|
|
3258
3457
|
retention: k.isLoading || k.isDebouncing,
|
|
3259
3458
|
flow: O.isLoading || O.isDebouncing,
|
|
3260
3459
|
funnel: D.isExecuting || D.isDebouncing,
|
|
3261
3460
|
multi: E.isLoading,
|
|
3262
3461
|
single: T.isLoading
|
|
3263
|
-
}),
|
|
3462
|
+
}), re = Un(S, {
|
|
3264
3463
|
retention: k.isFetching,
|
|
3265
3464
|
flow: O.isFetching,
|
|
3266
3465
|
funnel: D.isExecuting,
|
|
3267
3466
|
multi: E.isFetching,
|
|
3268
3467
|
single: T.isFetching
|
|
3269
|
-
}), M =
|
|
3468
|
+
}), M = Un(S, {
|
|
3270
3469
|
retention: k.error,
|
|
3271
3470
|
flow: O.error,
|
|
3272
3471
|
funnel: D.error,
|
|
3273
3472
|
multi: E.error,
|
|
3274
3473
|
single: T.error
|
|
3275
|
-
}),
|
|
3474
|
+
}), ie = !!(T.debouncedQuery || E.debouncedConfig || !D.isDebouncing || !O.isDebouncing || !k.isDebouncing), ae = V((e) => {
|
|
3276
3475
|
switch (S) {
|
|
3277
3476
|
case "retention":
|
|
3278
3477
|
k.execute(e);
|
|
@@ -3295,8 +3494,8 @@ function qn(e) {
|
|
|
3295
3494
|
D,
|
|
3296
3495
|
E,
|
|
3297
3496
|
T
|
|
3298
|
-
]),
|
|
3299
|
-
hasResults:
|
|
3497
|
+
]), N = U(() => Kn({
|
|
3498
|
+
hasResults: Un(S, {
|
|
3300
3499
|
retention: k.chartData,
|
|
3301
3500
|
flow: O.data,
|
|
3302
3501
|
funnel: D.chartData,
|
|
@@ -3305,13 +3504,13 @@ function qn(e) {
|
|
|
3305
3504
|
}),
|
|
3306
3505
|
initialData: o,
|
|
3307
3506
|
isValidQuery: a,
|
|
3308
|
-
isLoading:
|
|
3309
|
-
isFetching:
|
|
3507
|
+
isLoading: j,
|
|
3508
|
+
isFetching: re,
|
|
3310
3509
|
error: M
|
|
3311
3510
|
}), [
|
|
3312
3511
|
a,
|
|
3313
|
-
ce,
|
|
3314
3512
|
j,
|
|
3513
|
+
re,
|
|
3315
3514
|
M,
|
|
3316
3515
|
T.rawData,
|
|
3317
3516
|
E.data,
|
|
@@ -3320,7 +3519,7 @@ function qn(e) {
|
|
|
3320
3519
|
k.chartData,
|
|
3321
3520
|
o,
|
|
3322
3521
|
S
|
|
3323
|
-
]),
|
|
3522
|
+
]), F = U(() => qn({
|
|
3324
3523
|
isRetentionMode: v,
|
|
3325
3524
|
isFlowMode: _,
|
|
3326
3525
|
isFunnelMode: g,
|
|
@@ -3342,12 +3541,12 @@ function qn(e) {
|
|
|
3342
3541
|
g,
|
|
3343
3542
|
_,
|
|
3344
3543
|
v
|
|
3345
|
-
]),
|
|
3544
|
+
]), I = U(() => g && D.stepResults ? D.stepResults.map((e) => e.data) : !y || !E.perQueryData ? null : E.perQueryData, [
|
|
3346
3545
|
y,
|
|
3347
3546
|
g,
|
|
3348
3547
|
E.perQueryData,
|
|
3349
3548
|
D.stepResults
|
|
3350
|
-
]), { funnelExecutedQueries:
|
|
3549
|
+
]), { funnelExecutedQueries: ce, funnelServerQuery: le, funnelDebugData: R, flowServerQuery: me, flowChartData: he, flowDebugData: B, retentionServerQuery: ge, retentionChartData: _e, retentionDebugData: ve } = Wn({
|
|
3351
3550
|
isFunnelMode: g,
|
|
3352
3551
|
isFlowMode: _,
|
|
3353
3552
|
isRetentionMode: v,
|
|
@@ -3356,11 +3555,11 @@ function qn(e) {
|
|
|
3356
3555
|
funnelDebugData: A.debugData,
|
|
3357
3556
|
flowServerQuery: O.serverQuery,
|
|
3358
3557
|
flowData: O.data,
|
|
3359
|
-
flowDebugData:
|
|
3558
|
+
flowDebugData: te.debugData,
|
|
3360
3559
|
retentionServerQuery: p ?? null,
|
|
3361
3560
|
retentionChartData: k.chartData,
|
|
3362
|
-
retentionDebugData:
|
|
3363
|
-
}),
|
|
3561
|
+
retentionDebugData: ne.debugData
|
|
3562
|
+
}), H = U(() => Un(S, {
|
|
3364
3563
|
retention: k.needsRefresh,
|
|
3365
3564
|
flow: O.needsRefresh,
|
|
3366
3565
|
funnel: D.needsRefresh,
|
|
@@ -3372,176 +3571,71 @@ function qn(e) {
|
|
|
3372
3571
|
O.needsRefresh,
|
|
3373
3572
|
D.needsRefresh,
|
|
3374
3573
|
T.needsRefresh
|
|
3375
|
-
]),
|
|
3574
|
+
]), W = U(() => {
|
|
3376
3575
|
if (b && T.warnings) return T.warnings;
|
|
3377
3576
|
}, [b, T.warnings]);
|
|
3378
3577
|
return {
|
|
3379
|
-
executionStatus:
|
|
3380
|
-
executionResults:
|
|
3381
|
-
perQueryResults:
|
|
3382
|
-
isLoading:
|
|
3383
|
-
isFetching:
|
|
3578
|
+
executionStatus: N,
|
|
3579
|
+
executionResults: F,
|
|
3580
|
+
perQueryResults: I,
|
|
3581
|
+
isLoading: j,
|
|
3582
|
+
isFetching: re,
|
|
3384
3583
|
error: M,
|
|
3385
|
-
debugDataPerQuery:
|
|
3386
|
-
hasDebounced:
|
|
3387
|
-
refetch:
|
|
3388
|
-
funnelExecutedQueries:
|
|
3389
|
-
funnelServerQuery:
|
|
3390
|
-
funnelDebugData:
|
|
3391
|
-
flowServerQuery:
|
|
3392
|
-
flowChartData:
|
|
3393
|
-
flowDebugData:
|
|
3394
|
-
retentionServerQuery:
|
|
3395
|
-
retentionChartData:
|
|
3396
|
-
retentionDebugData:
|
|
3584
|
+
debugDataPerQuery: ee.debugDataPerQuery,
|
|
3585
|
+
hasDebounced: ie,
|
|
3586
|
+
refetch: ae,
|
|
3587
|
+
funnelExecutedQueries: ce,
|
|
3588
|
+
funnelServerQuery: le,
|
|
3589
|
+
funnelDebugData: R,
|
|
3590
|
+
flowServerQuery: me,
|
|
3591
|
+
flowChartData: he,
|
|
3592
|
+
flowDebugData: B,
|
|
3593
|
+
retentionServerQuery: ge,
|
|
3594
|
+
retentionChartData: _e,
|
|
3595
|
+
retentionDebugData: ve,
|
|
3397
3596
|
retentionValidation: m ?? null,
|
|
3398
|
-
needsRefresh:
|
|
3399
|
-
warnings:
|
|
3400
|
-
};
|
|
3401
|
-
}
|
|
3402
|
-
//#endregion
|
|
3403
|
-
//#region src/client/hooks/useAnalysisChartDefaults.ts
|
|
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);
|
|
3407
|
-
else {
|
|
3408
|
-
p(e);
|
|
3409
|
-
let { chartConfig: t } = Dt(r, i, e);
|
|
3410
|
-
m(t);
|
|
3411
|
-
}
|
|
3412
|
-
}, [
|
|
3413
|
-
o,
|
|
3414
|
-
r,
|
|
3415
|
-
i,
|
|
3416
|
-
g,
|
|
3417
|
-
p,
|
|
3418
|
-
m
|
|
3419
|
-
]), S = I((e) => {
|
|
3420
|
-
o === "funnel" ? _(e) : m(e);
|
|
3421
|
-
}, [
|
|
3422
|
-
o,
|
|
3423
|
-
_,
|
|
3424
|
-
m
|
|
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" ? {
|
|
3432
|
-
name: "custom",
|
|
3433
|
-
label: "Custom",
|
|
3434
|
-
colors: t,
|
|
3435
|
-
gradient: t
|
|
3436
|
-
} : t : f(d), [t, d]), E = z("");
|
|
3437
|
-
return L(() => {
|
|
3438
|
-
if (!a || r.length === 0 && i.length === 0) return;
|
|
3439
|
-
let e = JSON.stringify({
|
|
3440
|
-
metrics: r.map((e) => e.field),
|
|
3441
|
-
breakdowns: i.map((e) => ({
|
|
3442
|
-
field: e.field,
|
|
3443
|
-
isTime: e.isTimeDimension
|
|
3444
|
-
}))
|
|
3445
|
-
});
|
|
3446
|
-
if (e === E.current) return;
|
|
3447
|
-
E.current = e;
|
|
3448
|
-
let t = kt(r, i, s, u);
|
|
3449
|
-
if (t) {
|
|
3450
|
-
let { chartConfig: e } = Dt(r, i, t);
|
|
3451
|
-
x(t), S(e), b(!1);
|
|
3452
|
-
} else if (r.length > 0 || i.length > 0) {
|
|
3453
|
-
if (s === "table") {
|
|
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));
|
|
3455
|
-
n.length > 0 && S({
|
|
3456
|
-
...c,
|
|
3457
|
-
xAxis: [...t, ...n]
|
|
3458
|
-
});
|
|
3459
|
-
} else if (!c.xAxis?.length && !c.yAxis?.length && !c.series?.length) {
|
|
3460
|
-
let { chartConfig: e } = Dt(r, i, s);
|
|
3461
|
-
S(e);
|
|
3462
|
-
}
|
|
3463
|
-
}
|
|
3464
|
-
}, [
|
|
3465
|
-
a,
|
|
3466
|
-
r,
|
|
3467
|
-
i,
|
|
3468
|
-
s,
|
|
3469
|
-
u,
|
|
3470
|
-
c,
|
|
3471
|
-
x,
|
|
3472
|
-
S,
|
|
3473
|
-
b
|
|
3474
|
-
]), {
|
|
3475
|
-
chartType: s,
|
|
3476
|
-
chartConfig: c,
|
|
3477
|
-
displayConfig: l,
|
|
3478
|
-
colorPalette: T,
|
|
3479
|
-
localPaletteName: d,
|
|
3480
|
-
chartAvailability: w,
|
|
3481
|
-
userManuallySelectedChart: u,
|
|
3482
|
-
setChartType: x,
|
|
3483
|
-
setChartConfig: S,
|
|
3484
|
-
setDisplayConfig: C,
|
|
3485
|
-
setLocalPaletteName: y
|
|
3486
|
-
};
|
|
3487
|
-
}
|
|
3488
|
-
//#endregion
|
|
3489
|
-
//#region src/client/hooks/useAnalysisUIState.ts
|
|
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);
|
|
3492
|
-
return {
|
|
3493
|
-
activeTab: e,
|
|
3494
|
-
activeView: t,
|
|
3495
|
-
displayLimit: n,
|
|
3496
|
-
showFieldModal: r,
|
|
3497
|
-
fieldModalMode: i,
|
|
3498
|
-
activeTableIndex: u,
|
|
3499
|
-
userManuallySelectedChart: a,
|
|
3500
|
-
setActiveTab: o,
|
|
3501
|
-
setActiveView: s,
|
|
3502
|
-
setDisplayLimit: c,
|
|
3503
|
-
closeFieldModal: l,
|
|
3504
|
-
setActiveTableIndex: d
|
|
3597
|
+
needsRefresh: H,
|
|
3598
|
+
warnings: W
|
|
3505
3599
|
};
|
|
3506
3600
|
}
|
|
3507
3601
|
//#endregion
|
|
3508
3602
|
//#region src/client/utils/shareUtils.ts
|
|
3509
|
-
var
|
|
3510
|
-
function
|
|
3511
|
-
return (0,
|
|
3603
|
+
var Yn = o(), Xn = 1800, Zn = "share=";
|
|
3604
|
+
function Qn(e) {
|
|
3605
|
+
return (0, Yn.compressToEncodedURIComponent)(JSON.stringify(e));
|
|
3512
3606
|
}
|
|
3513
|
-
function
|
|
3607
|
+
function $n(e) {
|
|
3514
3608
|
try {
|
|
3515
|
-
let t = (0,
|
|
3609
|
+
let t = (0, Yn.decompressFromEncodedURIComponent)(e);
|
|
3516
3610
|
if (!t) return null;
|
|
3517
3611
|
let n = JSON.parse(t);
|
|
3518
|
-
return
|
|
3612
|
+
return D(n) ? n : (console.warn("[shareUtils] Invalid AnalysisConfig in share URL"), null);
|
|
3519
3613
|
} catch {
|
|
3520
3614
|
return null;
|
|
3521
3615
|
}
|
|
3522
3616
|
}
|
|
3523
|
-
function
|
|
3524
|
-
let t =
|
|
3617
|
+
function er(e) {
|
|
3618
|
+
let t = Qn(e);
|
|
3525
3619
|
return {
|
|
3526
|
-
ok: t.length <=
|
|
3620
|
+
ok: t.length <= Xn,
|
|
3527
3621
|
size: t.length,
|
|
3528
|
-
maxSize:
|
|
3622
|
+
maxSize: Xn
|
|
3529
3623
|
};
|
|
3530
3624
|
}
|
|
3531
|
-
function
|
|
3532
|
-
let t =
|
|
3533
|
-
if (t.length <=
|
|
3625
|
+
function tr(e) {
|
|
3626
|
+
let t = Qn(e);
|
|
3627
|
+
if (t.length <= Xn) return {
|
|
3534
3628
|
encoded: t,
|
|
3535
3629
|
queryOnly: !1
|
|
3536
3630
|
};
|
|
3537
|
-
let n =
|
|
3631
|
+
let n = Qn({
|
|
3538
3632
|
version: e.version,
|
|
3539
3633
|
analysisType: e.analysisType,
|
|
3540
3634
|
activeView: e.activeView,
|
|
3541
3635
|
charts: {},
|
|
3542
3636
|
query: e.query
|
|
3543
3637
|
});
|
|
3544
|
-
return n.length <=
|
|
3638
|
+
return n.length <= Xn ? {
|
|
3545
3639
|
encoded: n,
|
|
3546
3640
|
queryOnly: !0
|
|
3547
3641
|
} : {
|
|
@@ -3549,418 +3643,514 @@ function nr(e) {
|
|
|
3549
3643
|
queryOnly: !0
|
|
3550
3644
|
};
|
|
3551
3645
|
}
|
|
3552
|
-
function
|
|
3553
|
-
let { encoded: t } =
|
|
3554
|
-
return t ? `${window.location.origin}${window.location.pathname}#${
|
|
3646
|
+
function nr(e) {
|
|
3647
|
+
let { encoded: t } = tr(e);
|
|
3648
|
+
return t ? `${window.location.origin}${window.location.pathname}#${Zn}${t}` : null;
|
|
3555
3649
|
}
|
|
3556
|
-
function
|
|
3650
|
+
function rr() {
|
|
3557
3651
|
if (typeof window > "u") return null;
|
|
3558
3652
|
let e = window.location.hash;
|
|
3559
|
-
return !e || !e.startsWith(`#${
|
|
3653
|
+
return !e || !e.startsWith(`#${Zn}`) ? null : e.slice(7);
|
|
3560
3654
|
}
|
|
3561
|
-
function
|
|
3655
|
+
function ir() {
|
|
3562
3656
|
if (typeof window > "u") return;
|
|
3563
3657
|
let e = new URL(window.location.href);
|
|
3564
3658
|
e.hash = "", window.history.replaceState(null, "", e.toString());
|
|
3565
3659
|
}
|
|
3566
|
-
function
|
|
3567
|
-
let e =
|
|
3568
|
-
return e ?
|
|
3660
|
+
function ar() {
|
|
3661
|
+
let e = rr();
|
|
3662
|
+
return e ? $n(e) : null;
|
|
3569
3663
|
}
|
|
3570
3664
|
//#endregion
|
|
3571
|
-
//#region src/client/
|
|
3665
|
+
//#region src/client/components/AIAssistant/utils.ts
|
|
3666
|
+
async function or(e, t, n = "/api/ai/generate", r) {
|
|
3667
|
+
let i = { text: t }, a = {
|
|
3668
|
+
"Content-Type": "application/json",
|
|
3669
|
+
...r
|
|
3670
|
+
};
|
|
3671
|
+
e && e.trim() && (a["X-API-Key"] = e), console.log("🤖 Client: Sending user prompt to AI proxy"), console.log(" URL:", n), console.log(" Headers:", a), console.log(" User prompt length:", t.length);
|
|
3672
|
+
let o = await fetch(n, {
|
|
3673
|
+
method: "POST",
|
|
3674
|
+
headers: a,
|
|
3675
|
+
body: JSON.stringify(i)
|
|
3676
|
+
});
|
|
3677
|
+
if (console.log("📥 Client: Proxy response"), console.log(" Status:", o.status), console.log(" Status Text:", o.statusText), !o.ok) {
|
|
3678
|
+
let e = `Failed to generate content: ${o.status} ${o.statusText}`;
|
|
3679
|
+
try {
|
|
3680
|
+
let t = await o.json();
|
|
3681
|
+
if (console.error("❌ Client: Proxy error:", t), o.status === 429 && t.error === "Daily quota exceeded") throw Error(`${t.message}\n\n${t.suggestion || "Add your own Gemini API key for unlimited access."}`);
|
|
3682
|
+
t.error && (e = t.message || t.error, t.suggestion && (e += `\n\n💡 ${t.suggestion}`));
|
|
3683
|
+
} catch {
|
|
3684
|
+
try {
|
|
3685
|
+
let t = await o.text();
|
|
3686
|
+
console.error("❌ Client: Proxy text error:", t), e = t || e;
|
|
3687
|
+
} catch {
|
|
3688
|
+
console.error("❌ Client: Could not parse error response");
|
|
3689
|
+
}
|
|
3690
|
+
}
|
|
3691
|
+
throw Error(e);
|
|
3692
|
+
}
|
|
3693
|
+
let s = await o.json();
|
|
3694
|
+
return console.log("✅ Client: Successfully generated content"), s;
|
|
3695
|
+
}
|
|
3572
3696
|
function sr(e) {
|
|
3573
|
-
|
|
3574
|
-
|
|
3697
|
+
return (e.query || "").replace(/```json\s*/g, "").replace(/```\s*/g, "").replace(/^\s*```.*\n/gm, "").trim();
|
|
3698
|
+
}
|
|
3699
|
+
//#endregion
|
|
3700
|
+
//#region src/client/hooks/useAnalysisEffects.ts
|
|
3701
|
+
function cr(e) {
|
|
3702
|
+
return typeof e == "object" && !!e && "funnel" in e && typeof e.funnel == "object";
|
|
3703
|
+
}
|
|
3704
|
+
function lr(e) {
|
|
3705
|
+
let { state: t, query: n, aiEndpoint: r = "/api/ai", onQueryChange: i, onChartConfigChange: a } = e, { storeApi: o, actions: s } = t, { apiOptions: c } = u(), l = W(!1);
|
|
3706
|
+
H(() => {
|
|
3575
3707
|
if (l.current) return;
|
|
3576
3708
|
l.current = !0;
|
|
3577
|
-
let e =
|
|
3578
|
-
e && (
|
|
3579
|
-
}, [
|
|
3580
|
-
|
|
3709
|
+
let e = ar();
|
|
3710
|
+
e && (o.getState().load(e), ir());
|
|
3711
|
+
}, [o]), H(() => {
|
|
3712
|
+
i && t.isValidQuery && i(t.currentQuery);
|
|
3581
3713
|
}, [
|
|
3582
|
-
t,
|
|
3583
|
-
|
|
3584
|
-
|
|
3585
|
-
]),
|
|
3586
|
-
|
|
3587
|
-
chartType:
|
|
3588
|
-
chartConfig:
|
|
3589
|
-
displayConfig:
|
|
3714
|
+
t.currentQuery,
|
|
3715
|
+
t.isValidQuery,
|
|
3716
|
+
i
|
|
3717
|
+
]), H(() => {
|
|
3718
|
+
a && a({
|
|
3719
|
+
chartType: t.chartType,
|
|
3720
|
+
chartConfig: t.chartConfig,
|
|
3721
|
+
displayConfig: t.displayConfig
|
|
3590
3722
|
});
|
|
3591
3723
|
}, [
|
|
3592
|
-
|
|
3593
|
-
|
|
3594
|
-
|
|
3595
|
-
|
|
3724
|
+
t.chartType,
|
|
3725
|
+
t.chartConfig,
|
|
3726
|
+
t.displayConfig,
|
|
3727
|
+
a
|
|
3596
3728
|
]);
|
|
3597
|
-
}
|
|
3598
|
-
|
|
3599
|
-
|
|
3600
|
-
|
|
3601
|
-
|
|
3602
|
-
|
|
3603
|
-
|
|
3604
|
-
|
|
3605
|
-
|
|
3606
|
-
|
|
3607
|
-
|
|
3608
|
-
|
|
3609
|
-
|
|
3610
|
-
|
|
3611
|
-
|
|
3612
|
-
|
|
3613
|
-
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
|
|
3618
|
-
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3622
|
-
|
|
3623
|
-
b,
|
|
3624
|
-
x,
|
|
3625
|
-
S,
|
|
3626
|
-
C,
|
|
3627
|
-
w,
|
|
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, [
|
|
3633
|
-
d,
|
|
3634
|
-
M,
|
|
3635
|
-
ie,
|
|
3636
|
-
ae,
|
|
3637
|
-
oe,
|
|
3638
|
-
se,
|
|
3639
|
-
ue,
|
|
3640
|
-
de,
|
|
3641
|
-
fe,
|
|
3642
|
-
j,
|
|
3643
|
-
ce,
|
|
3644
|
-
le
|
|
3645
|
-
]), ye = R(() => d === "retention" ? N() : null, [
|
|
3646
|
-
d,
|
|
3647
|
-
N,
|
|
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, [
|
|
3653
|
-
d,
|
|
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,
|
|
3664
|
-
initialData: t,
|
|
3665
|
-
mergeStrategy: c.mergeStrategy,
|
|
3666
|
-
funnelBindingKey: u,
|
|
3667
|
-
isFunnelModeEnabled: g,
|
|
3668
|
-
analysisType: d,
|
|
3669
|
-
serverFunnelQuery: ne,
|
|
3670
|
-
serverFlowQuery: re,
|
|
3671
|
-
serverRetentionQuery: ve,
|
|
3672
|
-
retentionValidation: ye
|
|
3673
|
-
}), q = Jn({
|
|
3674
|
-
externalColorPalette: n,
|
|
3675
|
-
combinedMetrics: l.combinedMetrics,
|
|
3676
|
-
combinedBreakdowns: l.combinedBreakdowns,
|
|
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,
|
|
3685
|
-
onQueryChange: r,
|
|
3686
|
-
onChartConfigChange: i
|
|
3687
|
-
});
|
|
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 || {
|
|
3689
|
-
showLegend: !0,
|
|
3690
|
-
showGrid: !0,
|
|
3691
|
-
showTooltip: !0
|
|
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) => {
|
|
3693
|
-
o.setState((t) => ({ charts: {
|
|
3694
|
-
...t.charts,
|
|
3695
|
-
flow: {
|
|
3696
|
-
...t.charts.flow || {
|
|
3697
|
-
chartType: "sankey",
|
|
3698
|
-
chartConfig: {},
|
|
3699
|
-
displayConfig: {}
|
|
3700
|
-
},
|
|
3701
|
-
displayConfig: e
|
|
3702
|
-
}
|
|
3703
|
-
} }));
|
|
3704
|
-
}, [o]), at = I((e) => {
|
|
3705
|
-
o.setState((t) => ({ charts: {
|
|
3706
|
-
...t.charts,
|
|
3707
|
-
retention: {
|
|
3708
|
-
...t.charts.retention || {
|
|
3709
|
-
chartType: "retentionCombined",
|
|
3710
|
-
chartConfig: {},
|
|
3711
|
-
displayConfig: {}
|
|
3712
|
-
},
|
|
3713
|
-
displayConfig: e
|
|
3729
|
+
let { combinedMetrics: f, combinedBreakdowns: m, chartType: h, chartConfig: g, userManuallySelectedChart: _ } = t, { hasDebounced: v } = n, { setChartType: y, setChartConfig: b } = s, x = W("");
|
|
3730
|
+
H(() => {
|
|
3731
|
+
if (!v || f.length === 0 && m.length === 0) return;
|
|
3732
|
+
let e = JSON.stringify({
|
|
3733
|
+
metrics: f.map((e) => e.field),
|
|
3734
|
+
breakdowns: m.map((e) => ({
|
|
3735
|
+
field: e.field,
|
|
3736
|
+
isTime: e.isTimeDimension
|
|
3737
|
+
}))
|
|
3738
|
+
});
|
|
3739
|
+
if (e === x.current) return;
|
|
3740
|
+
x.current = e;
|
|
3741
|
+
let t = jt(f, m, h, _);
|
|
3742
|
+
if (t) {
|
|
3743
|
+
let { chartConfig: e } = kt(f, m, t);
|
|
3744
|
+
y(t), b(e), s.setUserManuallySelectedChart(!1);
|
|
3745
|
+
} else if (f.length > 0 || m.length > 0) {
|
|
3746
|
+
if (h === "table") {
|
|
3747
|
+
let e = [...m.map((e) => e.field), ...f.map((e) => e.field)], t = Array.isArray(g.xAxis) ? g.xAxis : [], n = e.filter((e) => !t.includes(e));
|
|
3748
|
+
n.length > 0 && b({
|
|
3749
|
+
...g,
|
|
3750
|
+
xAxis: [...t, ...n]
|
|
3751
|
+
});
|
|
3752
|
+
} else if (!g.xAxis?.length && !g.yAxis?.length && !g.series?.length) {
|
|
3753
|
+
let { chartConfig: e } = kt(f, m, h);
|
|
3754
|
+
b(e);
|
|
3714
3755
|
}
|
|
3715
|
-
}
|
|
3716
|
-
}, [
|
|
3717
|
-
|
|
3718
|
-
|
|
3719
|
-
|
|
3720
|
-
p,
|
|
3721
|
-
u,
|
|
3756
|
+
}
|
|
3757
|
+
}, [
|
|
3758
|
+
v,
|
|
3759
|
+
f,
|
|
3760
|
+
m,
|
|
3722
3761
|
h,
|
|
3762
|
+
_,
|
|
3763
|
+
g,
|
|
3764
|
+
y,
|
|
3723
3765
|
b,
|
|
3724
|
-
|
|
3725
|
-
|
|
3726
|
-
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
|
|
3730
|
-
|
|
3731
|
-
|
|
3732
|
-
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
|
|
3736
|
-
|
|
3737
|
-
|
|
3738
|
-
|
|
3766
|
+
s
|
|
3767
|
+
]);
|
|
3768
|
+
let [S, C] = G({
|
|
3769
|
+
isOpen: !1,
|
|
3770
|
+
userPrompt: "",
|
|
3771
|
+
isGenerating: !1,
|
|
3772
|
+
error: null,
|
|
3773
|
+
hasGeneratedQuery: !1,
|
|
3774
|
+
previousState: null,
|
|
3775
|
+
previousConfig: null
|
|
3776
|
+
}), w = V((e) => {
|
|
3777
|
+
o.getState().updateQueryState(t.activeQueryIndex, (t) => {
|
|
3778
|
+
let n = e(t);
|
|
3779
|
+
return {
|
|
3780
|
+
...t,
|
|
3781
|
+
metrics: n.metrics,
|
|
3782
|
+
breakdowns: n.breakdowns,
|
|
3783
|
+
filters: n.filters,
|
|
3784
|
+
order: n.order,
|
|
3785
|
+
limit: n.limit
|
|
3786
|
+
};
|
|
3787
|
+
});
|
|
3788
|
+
}, [o, t.activeQueryIndex]), T = V((e) => {
|
|
3789
|
+
let t = {
|
|
3790
|
+
version: 1,
|
|
3791
|
+
analysisType: "funnel",
|
|
3792
|
+
activeView: "chart",
|
|
3793
|
+
charts: { funnel: {
|
|
3794
|
+
chartType: "funnel",
|
|
3795
|
+
chartConfig: {},
|
|
3796
|
+
displayConfig: {}
|
|
3797
|
+
} },
|
|
3798
|
+
query: e
|
|
3799
|
+
};
|
|
3800
|
+
o.getState().load(t);
|
|
3801
|
+
}, [o]), E = V(() => {
|
|
3802
|
+
let e = o.getState().save();
|
|
3803
|
+
C({
|
|
3804
|
+
isOpen: !0,
|
|
3805
|
+
userPrompt: "",
|
|
3806
|
+
isGenerating: !1,
|
|
3807
|
+
error: null,
|
|
3808
|
+
hasGeneratedQuery: !1,
|
|
3809
|
+
previousState: {
|
|
3810
|
+
metrics: [...t.queryState.metrics],
|
|
3811
|
+
breakdowns: [...t.queryState.breakdowns],
|
|
3812
|
+
filters: [...t.queryState.filters],
|
|
3813
|
+
chartType: t.chartType,
|
|
3814
|
+
chartConfig: { ...t.chartConfig },
|
|
3815
|
+
displayConfig: { ...t.displayConfig },
|
|
3816
|
+
analysisType: t.analysisType || "query"
|
|
3817
|
+
},
|
|
3818
|
+
previousConfig: e
|
|
3819
|
+
});
|
|
3739
3820
|
}, [
|
|
3740
|
-
|
|
3741
|
-
|
|
3742
|
-
|
|
3743
|
-
|
|
3744
|
-
|
|
3745
|
-
|
|
3821
|
+
o,
|
|
3822
|
+
t.queryState.metrics,
|
|
3823
|
+
t.queryState.breakdowns,
|
|
3824
|
+
t.queryState.filters,
|
|
3825
|
+
t.chartType,
|
|
3826
|
+
t.chartConfig,
|
|
3827
|
+
t.displayConfig,
|
|
3828
|
+
t.analysisType
|
|
3829
|
+
]), D = V(() => {
|
|
3830
|
+
C((e) => ({
|
|
3831
|
+
...e,
|
|
3832
|
+
isOpen: !1,
|
|
3833
|
+
userPrompt: "",
|
|
3834
|
+
error: null,
|
|
3835
|
+
hasGeneratedQuery: !1
|
|
3836
|
+
}));
|
|
3837
|
+
}, []), O = V((e) => {
|
|
3838
|
+
C((t) => ({
|
|
3839
|
+
...t,
|
|
3840
|
+
userPrompt: e
|
|
3841
|
+
}));
|
|
3842
|
+
}, []), k = V(async () => {
|
|
3843
|
+
if (S.userPrompt.trim()) {
|
|
3844
|
+
C((e) => ({
|
|
3845
|
+
...e,
|
|
3846
|
+
isGenerating: !0,
|
|
3847
|
+
error: null
|
|
3848
|
+
}));
|
|
3746
3849
|
try {
|
|
3747
|
-
|
|
3850
|
+
let e = sr(await or("", S.userPrompt, r, c?.headers)), n = JSON.parse(e), i = "query" in n && n.query ? n.query : n, a = "chartType" in n ? n.chartType : void 0, o = "chartConfig" in n ? n.chartConfig : void 0;
|
|
3851
|
+
if (cr(i)) {
|
|
3852
|
+
s.setAnalysisType("funnel"), T(i), s.setChartType("funnel"), o && s.setChartConfig(o), s.setActiveView("chart"), C((e) => ({
|
|
3853
|
+
...e,
|
|
3854
|
+
isGenerating: !1,
|
|
3855
|
+
hasGeneratedQuery: !0
|
|
3856
|
+
}));
|
|
3857
|
+
return;
|
|
3858
|
+
}
|
|
3859
|
+
let l = i;
|
|
3860
|
+
w((e) => ({
|
|
3861
|
+
...e,
|
|
3862
|
+
metrics: (l.measures || []).map((e, t) => ({
|
|
3863
|
+
id: p(),
|
|
3864
|
+
field: e,
|
|
3865
|
+
label: d(t)
|
|
3866
|
+
})),
|
|
3867
|
+
breakdowns: [...(l.dimensions || []).map((e) => ({
|
|
3868
|
+
id: p(),
|
|
3869
|
+
field: e,
|
|
3870
|
+
isTimeDimension: !1
|
|
3871
|
+
})), ...(l.timeDimensions || []).map((e) => ({
|
|
3872
|
+
id: p(),
|
|
3873
|
+
field: e.dimension,
|
|
3874
|
+
granularity: e.granularity,
|
|
3875
|
+
isTimeDimension: !0
|
|
3876
|
+
}))],
|
|
3877
|
+
filters: l.filters || [],
|
|
3878
|
+
order: l.order || void 0,
|
|
3879
|
+
limit: l.limit ?? void 0
|
|
3880
|
+
})), t.analysisType === "funnel" && s.setAnalysisType("query"), a && s.setChartType(a), o && s.setChartConfig(o), s.setActiveView("chart"), C((e) => ({
|
|
3881
|
+
...e,
|
|
3882
|
+
isGenerating: !1,
|
|
3883
|
+
hasGeneratedQuery: !0
|
|
3884
|
+
}));
|
|
3748
3885
|
} catch (e) {
|
|
3749
|
-
|
|
3750
|
-
|
|
3751
|
-
|
|
3886
|
+
C((t) => ({
|
|
3887
|
+
...t,
|
|
3888
|
+
isGenerating: !1,
|
|
3889
|
+
error: e instanceof Error ? e.message : "Failed to generate query"
|
|
3890
|
+
}));
|
|
3752
3891
|
}
|
|
3753
3892
|
}
|
|
3754
3893
|
}, [
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
|
|
3766
|
-
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
|
|
3771
|
-
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
|
|
3778
|
-
|
|
3779
|
-
|
|
3780
|
-
|
|
3781
|
-
|
|
3782
|
-
|
|
3783
|
-
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
displayConfig: q.displayConfig
|
|
3788
|
-
};
|
|
3894
|
+
S.userPrompt,
|
|
3895
|
+
r,
|
|
3896
|
+
c?.headers,
|
|
3897
|
+
w,
|
|
3898
|
+
T,
|
|
3899
|
+
t.analysisType,
|
|
3900
|
+
s
|
|
3901
|
+
]), ee = V(() => {
|
|
3902
|
+
C({
|
|
3903
|
+
isOpen: !1,
|
|
3904
|
+
userPrompt: "",
|
|
3905
|
+
isGenerating: !1,
|
|
3906
|
+
error: null,
|
|
3907
|
+
hasGeneratedQuery: !1,
|
|
3908
|
+
previousState: null,
|
|
3909
|
+
previousConfig: null
|
|
3910
|
+
});
|
|
3911
|
+
}, []), A = V(() => {
|
|
3912
|
+
S.previousConfig ? o.getState().load(S.previousConfig) : S.previousState && (w((e) => ({
|
|
3913
|
+
...e,
|
|
3914
|
+
metrics: S.previousState.metrics,
|
|
3915
|
+
breakdowns: S.previousState.breakdowns,
|
|
3916
|
+
filters: S.previousState.filters
|
|
3917
|
+
})), s.setChartType(S.previousState.chartType), s.setChartConfig(S.previousState.chartConfig), s.setDisplayConfig(S.previousState.displayConfig), S.previousState.analysisType && s.setAnalysisType(S.previousState.analysisType)), C({
|
|
3918
|
+
isOpen: !1,
|
|
3919
|
+
userPrompt: "",
|
|
3920
|
+
isGenerating: !1,
|
|
3921
|
+
error: null,
|
|
3922
|
+
hasGeneratedQuery: !1,
|
|
3923
|
+
previousState: null,
|
|
3924
|
+
previousConfig: null
|
|
3925
|
+
});
|
|
3789
3926
|
}, [
|
|
3927
|
+
S.previousState,
|
|
3928
|
+
S.previousConfig,
|
|
3790
3929
|
o,
|
|
3791
|
-
|
|
3792
|
-
|
|
3793
|
-
|
|
3794
|
-
|
|
3930
|
+
w,
|
|
3931
|
+
s
|
|
3932
|
+
]), [te, ne] = G("idle"), j = t.effectiveIsValidQuery;
|
|
3933
|
+
return {
|
|
3934
|
+
aiState: S,
|
|
3935
|
+
openAI: E,
|
|
3936
|
+
closeAI: D,
|
|
3937
|
+
setAIPrompt: O,
|
|
3938
|
+
generateAI: k,
|
|
3939
|
+
acceptAI: ee,
|
|
3940
|
+
cancelAI: A,
|
|
3941
|
+
shareButtonState: te,
|
|
3942
|
+
share: V(async () => {
|
|
3943
|
+
if (!j) return;
|
|
3944
|
+
let { encoded: e, queryOnly: t } = tr(o.getState().save());
|
|
3945
|
+
if (!e) return;
|
|
3946
|
+
let n = `${window.location.origin}${window.location.pathname}#share=${e}`;
|
|
3947
|
+
try {
|
|
3948
|
+
await navigator.clipboard.writeText(n);
|
|
3949
|
+
} catch {
|
|
3950
|
+
let e = document.createElement("textarea");
|
|
3951
|
+
e.value = n, document.body.appendChild(e), e.select(), document.execCommand("copy"), document.body.removeChild(e);
|
|
3952
|
+
}
|
|
3953
|
+
ne(t ? "copied-no-chart" : "copied"), setTimeout(() => {
|
|
3954
|
+
ne("idle");
|
|
3955
|
+
}, 2e3);
|
|
3956
|
+
}, [j, o]),
|
|
3957
|
+
canShare: j
|
|
3958
|
+
};
|
|
3959
|
+
}
|
|
3960
|
+
//#endregion
|
|
3961
|
+
//#region src/client/hooks/useAnalysisBuilderHook.ts
|
|
3962
|
+
function ur(e = {}) {
|
|
3963
|
+
let { initialData: t, externalColorPalette: n, onQueryChange: r, onChartConfigChange: i } = e, { features: a } = s(), o = Vn({ externalColorPalette: n }), c = Jn({
|
|
3964
|
+
currentQuery: o.currentQuery,
|
|
3965
|
+
allQueries: o.allQueries,
|
|
3966
|
+
multiQueryConfig: o.multiQueryConfig,
|
|
3967
|
+
isMultiQueryMode: o.isMultiQueryMode,
|
|
3968
|
+
isValidQuery: o.effectiveIsValidQuery,
|
|
3969
|
+
initialData: t,
|
|
3970
|
+
mergeStrategy: o.mergeStrategy,
|
|
3971
|
+
funnelBindingKey: o.funnelBindingKey,
|
|
3972
|
+
isFunnelModeEnabled: o.isFunnelModeEnabled,
|
|
3973
|
+
analysisType: o.analysisType,
|
|
3974
|
+
serverFunnelQuery: o.serverFunnelQuery,
|
|
3975
|
+
serverFlowQuery: o.serverFlowQuery,
|
|
3976
|
+
serverRetentionQuery: o.serverRetentionQuery,
|
|
3977
|
+
retentionValidation: o.retentionValidation
|
|
3978
|
+
}), l = lr({
|
|
3979
|
+
state: o,
|
|
3980
|
+
query: c,
|
|
3981
|
+
aiEndpoint: a?.aiEndpoint,
|
|
3982
|
+
onQueryChange: r,
|
|
3983
|
+
onChartConfigChange: i
|
|
3984
|
+
});
|
|
3795
3985
|
return {
|
|
3796
|
-
queryState:
|
|
3797
|
-
queryStates:
|
|
3798
|
-
activeQueryIndex:
|
|
3799
|
-
mergeStrategy:
|
|
3800
|
-
isMultiQueryMode:
|
|
3801
|
-
mergeKeys:
|
|
3802
|
-
currentQuery:
|
|
3803
|
-
allQueries:
|
|
3804
|
-
multiQueryConfig:
|
|
3805
|
-
multiQueryValidation:
|
|
3806
|
-
funnelBindingKey:
|
|
3807
|
-
isFunnelModeEnabled:
|
|
3808
|
-
analysisType:
|
|
3809
|
-
funnelCube:
|
|
3810
|
-
funnelSteps:
|
|
3811
|
-
activeFunnelStepIndex:
|
|
3812
|
-
funnelTimeDimension:
|
|
3813
|
-
funnelChartType:
|
|
3814
|
-
funnelChartConfig:
|
|
3815
|
-
funnelDisplayConfig:
|
|
3816
|
-
flowCube:
|
|
3817
|
-
flowBindingKey:
|
|
3818
|
-
flowTimeDimension:
|
|
3819
|
-
eventDimension:
|
|
3820
|
-
startingStep:
|
|
3821
|
-
stepsBefore:
|
|
3822
|
-
stepsAfter:
|
|
3823
|
-
joinStrategy:
|
|
3824
|
-
flowDisplayConfig:
|
|
3825
|
-
retentionCube:
|
|
3826
|
-
retentionBindingKey:
|
|
3827
|
-
retentionTimeDimension:
|
|
3828
|
-
retentionDateRange:
|
|
3829
|
-
retentionCohortFilters:
|
|
3830
|
-
retentionActivityFilters:
|
|
3831
|
-
retentionBreakdowns:
|
|
3832
|
-
retentionViewGranularity:
|
|
3833
|
-
retentionPeriods:
|
|
3834
|
-
retentionType:
|
|
3835
|
-
retentionDisplayConfig:
|
|
3836
|
-
executionStatus:
|
|
3837
|
-
executionResults:
|
|
3838
|
-
perQueryResults:
|
|
3839
|
-
isLoading:
|
|
3840
|
-
isFetching:
|
|
3841
|
-
error:
|
|
3842
|
-
isValidQuery:
|
|
3843
|
-
debugDataPerQuery:
|
|
3844
|
-
needsRefresh:
|
|
3845
|
-
warnings:
|
|
3846
|
-
funnelExecutedQueries:
|
|
3847
|
-
funnelServerQuery:
|
|
3848
|
-
funnelDebugData:
|
|
3849
|
-
flowServerQuery:
|
|
3850
|
-
flowDebugData:
|
|
3851
|
-
retentionServerQuery:
|
|
3852
|
-
retentionDebugData:
|
|
3853
|
-
retentionChartData:
|
|
3854
|
-
retentionValidation:
|
|
3855
|
-
chartType:
|
|
3856
|
-
chartConfig:
|
|
3857
|
-
displayConfig:
|
|
3858
|
-
colorPalette:
|
|
3859
|
-
localPaletteName:
|
|
3860
|
-
chartAvailability:
|
|
3861
|
-
combinedMetrics:
|
|
3862
|
-
combinedBreakdowns:
|
|
3863
|
-
effectiveBreakdowns:
|
|
3864
|
-
activeTab:
|
|
3865
|
-
activeView:
|
|
3866
|
-
displayLimit:
|
|
3867
|
-
showFieldModal:
|
|
3868
|
-
fieldModalMode:
|
|
3869
|
-
activeTableIndex:
|
|
3870
|
-
userManuallySelectedChart:
|
|
3986
|
+
queryState: o.queryState,
|
|
3987
|
+
queryStates: o.queryStates,
|
|
3988
|
+
activeQueryIndex: o.activeQueryIndex,
|
|
3989
|
+
mergeStrategy: o.mergeStrategy,
|
|
3990
|
+
isMultiQueryMode: o.isMultiQueryMode,
|
|
3991
|
+
mergeKeys: o.mergeKeys,
|
|
3992
|
+
currentQuery: o.currentQuery,
|
|
3993
|
+
allQueries: o.allQueries,
|
|
3994
|
+
multiQueryConfig: o.multiQueryConfig,
|
|
3995
|
+
multiQueryValidation: o.multiQueryValidation,
|
|
3996
|
+
funnelBindingKey: o.funnelBindingKey,
|
|
3997
|
+
isFunnelModeEnabled: o.isFunnelModeEnabled,
|
|
3998
|
+
analysisType: o.analysisType,
|
|
3999
|
+
funnelCube: o.funnelCube,
|
|
4000
|
+
funnelSteps: o.funnelSteps,
|
|
4001
|
+
activeFunnelStepIndex: o.activeFunnelStepIndex,
|
|
4002
|
+
funnelTimeDimension: o.funnelTimeDimension,
|
|
4003
|
+
funnelChartType: o.funnelChartType,
|
|
4004
|
+
funnelChartConfig: o.funnelChartConfig,
|
|
4005
|
+
funnelDisplayConfig: o.funnelDisplayConfig,
|
|
4006
|
+
flowCube: o.flowCube,
|
|
4007
|
+
flowBindingKey: o.flowBindingKey,
|
|
4008
|
+
flowTimeDimension: o.flowTimeDimension,
|
|
4009
|
+
eventDimension: o.eventDimension,
|
|
4010
|
+
startingStep: o.startingStep,
|
|
4011
|
+
stepsBefore: o.stepsBefore,
|
|
4012
|
+
stepsAfter: o.stepsAfter,
|
|
4013
|
+
joinStrategy: o.joinStrategy,
|
|
4014
|
+
flowDisplayConfig: o.flowDisplayConfig,
|
|
4015
|
+
retentionCube: o.retentionCube,
|
|
4016
|
+
retentionBindingKey: o.retentionBindingKey,
|
|
4017
|
+
retentionTimeDimension: o.retentionTimeDimension,
|
|
4018
|
+
retentionDateRange: o.retentionDateRange,
|
|
4019
|
+
retentionCohortFilters: o.retentionCohortFilters,
|
|
4020
|
+
retentionActivityFilters: o.retentionActivityFilters,
|
|
4021
|
+
retentionBreakdowns: o.retentionBreakdowns,
|
|
4022
|
+
retentionViewGranularity: o.retentionViewGranularity,
|
|
4023
|
+
retentionPeriods: o.retentionPeriods,
|
|
4024
|
+
retentionType: o.retentionType,
|
|
4025
|
+
retentionDisplayConfig: o.retentionDisplayConfig,
|
|
4026
|
+
executionStatus: c.executionStatus,
|
|
4027
|
+
executionResults: c.executionResults,
|
|
4028
|
+
perQueryResults: c.perQueryResults,
|
|
4029
|
+
isLoading: c.isLoading,
|
|
4030
|
+
isFetching: c.isFetching,
|
|
4031
|
+
error: c.error,
|
|
4032
|
+
isValidQuery: o.effectiveIsValidQuery,
|
|
4033
|
+
debugDataPerQuery: c.debugDataPerQuery,
|
|
4034
|
+
needsRefresh: c.needsRefresh,
|
|
4035
|
+
warnings: c.warnings,
|
|
4036
|
+
funnelExecutedQueries: c.funnelExecutedQueries,
|
|
4037
|
+
funnelServerQuery: c.funnelServerQuery,
|
|
4038
|
+
funnelDebugData: c.funnelDebugData,
|
|
4039
|
+
flowServerQuery: c.flowServerQuery,
|
|
4040
|
+
flowDebugData: c.flowDebugData,
|
|
4041
|
+
retentionServerQuery: c.retentionServerQuery,
|
|
4042
|
+
retentionDebugData: c.retentionDebugData,
|
|
4043
|
+
retentionChartData: c.retentionChartData,
|
|
4044
|
+
retentionValidation: c.retentionValidation,
|
|
4045
|
+
chartType: o.chartType,
|
|
4046
|
+
chartConfig: o.chartConfig,
|
|
4047
|
+
displayConfig: o.displayConfig,
|
|
4048
|
+
colorPalette: o.colorPalette,
|
|
4049
|
+
localPaletteName: o.localPaletteName,
|
|
4050
|
+
chartAvailability: o.chartAvailability,
|
|
4051
|
+
combinedMetrics: o.combinedMetrics,
|
|
4052
|
+
combinedBreakdowns: o.combinedBreakdowns,
|
|
4053
|
+
effectiveBreakdowns: o.effectiveBreakdowns,
|
|
4054
|
+
activeTab: o.activeTab,
|
|
4055
|
+
activeView: o.activeView,
|
|
4056
|
+
displayLimit: o.displayLimit,
|
|
4057
|
+
showFieldModal: o.showFieldModal,
|
|
4058
|
+
fieldModalMode: o.fieldModalMode,
|
|
4059
|
+
activeTableIndex: o.activeTableIndex,
|
|
4060
|
+
userManuallySelectedChart: o.userManuallySelectedChart,
|
|
3871
4061
|
aiState: {
|
|
3872
|
-
isOpen:
|
|
3873
|
-
userPrompt:
|
|
3874
|
-
isGenerating:
|
|
3875
|
-
error:
|
|
3876
|
-
hasGeneratedQuery:
|
|
4062
|
+
isOpen: l.aiState.isOpen,
|
|
4063
|
+
userPrompt: l.aiState.userPrompt,
|
|
4064
|
+
isGenerating: l.aiState.isGenerating,
|
|
4065
|
+
error: l.aiState.error,
|
|
4066
|
+
hasGeneratedQuery: l.aiState.hasGeneratedQuery
|
|
3877
4067
|
},
|
|
3878
|
-
shareButtonState:
|
|
3879
|
-
canShare:
|
|
3880
|
-
adapterValidation:
|
|
4068
|
+
shareButtonState: l.shareButtonState,
|
|
4069
|
+
canShare: l.canShare,
|
|
4070
|
+
adapterValidation: o.adapterValidation,
|
|
3881
4071
|
actions: {
|
|
3882
|
-
setActiveQueryIndex:
|
|
3883
|
-
setMergeStrategy:
|
|
3884
|
-
openMetricsModal:
|
|
3885
|
-
addMetric:
|
|
3886
|
-
removeMetric:
|
|
3887
|
-
toggleMetric:
|
|
3888
|
-
reorderMetrics:
|
|
3889
|
-
openBreakdownsModal:
|
|
3890
|
-
addBreakdown:
|
|
3891
|
-
removeBreakdown:
|
|
3892
|
-
toggleBreakdown:
|
|
3893
|
-
setBreakdownGranularity:
|
|
3894
|
-
toggleBreakdownComparison:
|
|
3895
|
-
reorderBreakdowns:
|
|
3896
|
-
setFilters:
|
|
3897
|
-
dropFieldToFilter:
|
|
3898
|
-
setOrder:
|
|
3899
|
-
setLimit:
|
|
3900
|
-
addQuery:
|
|
3901
|
-
removeQuery:
|
|
3902
|
-
setFunnelBindingKey:
|
|
3903
|
-
setAnalysisType:
|
|
3904
|
-
setFunnelCube:
|
|
3905
|
-
addFunnelStep:
|
|
3906
|
-
removeFunnelStep:
|
|
3907
|
-
updateFunnelStep:
|
|
3908
|
-
setActiveFunnelStepIndex:
|
|
3909
|
-
reorderFunnelSteps:
|
|
3910
|
-
setFunnelTimeDimension:
|
|
3911
|
-
setFunnelDisplayConfig:
|
|
3912
|
-
setFlowCube:
|
|
3913
|
-
setFlowBindingKey:
|
|
3914
|
-
setFlowTimeDimension:
|
|
3915
|
-
setEventDimension:
|
|
3916
|
-
setStartingStepName:
|
|
3917
|
-
setStartingStepFilters:
|
|
3918
|
-
setStepsBefore:
|
|
3919
|
-
setStepsAfter:
|
|
3920
|
-
setJoinStrategy:
|
|
3921
|
-
setFlowDisplayConfig:
|
|
3922
|
-
setRetentionCube:
|
|
3923
|
-
setRetentionBindingKey:
|
|
3924
|
-
setRetentionTimeDimension:
|
|
3925
|
-
setRetentionDateRange:
|
|
3926
|
-
setRetentionCohortFilters:
|
|
3927
|
-
setRetentionActivityFilters:
|
|
3928
|
-
setRetentionBreakdowns:
|
|
3929
|
-
addRetentionBreakdown:
|
|
3930
|
-
removeRetentionBreakdown:
|
|
3931
|
-
setRetentionViewGranularity:
|
|
3932
|
-
setRetentionPeriods:
|
|
3933
|
-
setRetentionType:
|
|
3934
|
-
setRetentionDisplayConfig:
|
|
3935
|
-
setChartType:
|
|
3936
|
-
setChartConfig:
|
|
3937
|
-
setDisplayConfig:
|
|
3938
|
-
setLocalPaletteName:
|
|
3939
|
-
setActiveTab:
|
|
3940
|
-
setActiveView:
|
|
3941
|
-
setDisplayLimit:
|
|
3942
|
-
closeFieldModal:
|
|
3943
|
-
setActiveTableIndex:
|
|
3944
|
-
openAI:
|
|
3945
|
-
closeAI:
|
|
3946
|
-
setAIPrompt:
|
|
3947
|
-
generateAI:
|
|
3948
|
-
acceptAI:
|
|
3949
|
-
cancelAI:
|
|
3950
|
-
share:
|
|
3951
|
-
clearQuery:
|
|
3952
|
-
clearCurrentMode:
|
|
3953
|
-
refetch:
|
|
3954
|
-
handleFieldSelected:
|
|
4072
|
+
setActiveQueryIndex: o.actions.setActiveQueryIndex,
|
|
4073
|
+
setMergeStrategy: o.actions.setMergeStrategy,
|
|
4074
|
+
openMetricsModal: o.actions.openMetricsModal,
|
|
4075
|
+
addMetric: o.actions.addMetric,
|
|
4076
|
+
removeMetric: o.actions.removeMetric,
|
|
4077
|
+
toggleMetric: o.actions.toggleMetric,
|
|
4078
|
+
reorderMetrics: o.actions.reorderMetrics,
|
|
4079
|
+
openBreakdownsModal: o.actions.openBreakdownsModal,
|
|
4080
|
+
addBreakdown: o.actions.addBreakdown,
|
|
4081
|
+
removeBreakdown: o.actions.removeBreakdown,
|
|
4082
|
+
toggleBreakdown: o.actions.toggleBreakdown,
|
|
4083
|
+
setBreakdownGranularity: o.actions.setBreakdownGranularity,
|
|
4084
|
+
toggleBreakdownComparison: o.actions.toggleBreakdownComparison,
|
|
4085
|
+
reorderBreakdowns: o.actions.reorderBreakdowns,
|
|
4086
|
+
setFilters: o.actions.setFilters,
|
|
4087
|
+
dropFieldToFilter: o.actions.dropFieldToFilter,
|
|
4088
|
+
setOrder: o.actions.setOrder,
|
|
4089
|
+
setLimit: o.actions.setLimit,
|
|
4090
|
+
addQuery: o.actions.addQuery,
|
|
4091
|
+
removeQuery: o.actions.removeQuery,
|
|
4092
|
+
setFunnelBindingKey: o.actions.setFunnelBindingKey,
|
|
4093
|
+
setAnalysisType: o.actions.setAnalysisType,
|
|
4094
|
+
setFunnelCube: o.actions.setFunnelCube,
|
|
4095
|
+
addFunnelStep: o.actions.addFunnelStep,
|
|
4096
|
+
removeFunnelStep: o.actions.removeFunnelStep,
|
|
4097
|
+
updateFunnelStep: o.actions.updateFunnelStep,
|
|
4098
|
+
setActiveFunnelStepIndex: o.actions.setActiveFunnelStepIndex,
|
|
4099
|
+
reorderFunnelSteps: o.actions.reorderFunnelSteps,
|
|
4100
|
+
setFunnelTimeDimension: o.actions.setFunnelTimeDimension,
|
|
4101
|
+
setFunnelDisplayConfig: o.actions.setFunnelDisplayConfig,
|
|
4102
|
+
setFlowCube: o.actions.setFlowCube,
|
|
4103
|
+
setFlowBindingKey: o.actions.setFlowBindingKey,
|
|
4104
|
+
setFlowTimeDimension: o.actions.setFlowTimeDimension,
|
|
4105
|
+
setEventDimension: o.actions.setEventDimension,
|
|
4106
|
+
setStartingStepName: o.actions.setStartingStepName,
|
|
4107
|
+
setStartingStepFilters: o.actions.setStartingStepFilters,
|
|
4108
|
+
setStepsBefore: o.actions.setStepsBefore,
|
|
4109
|
+
setStepsAfter: o.actions.setStepsAfter,
|
|
4110
|
+
setJoinStrategy: o.actions.setJoinStrategy,
|
|
4111
|
+
setFlowDisplayConfig: o.actions.setFlowDisplayConfig,
|
|
4112
|
+
setRetentionCube: o.actions.setRetentionCube,
|
|
4113
|
+
setRetentionBindingKey: o.actions.setRetentionBindingKey,
|
|
4114
|
+
setRetentionTimeDimension: o.actions.setRetentionTimeDimension,
|
|
4115
|
+
setRetentionDateRange: o.actions.setRetentionDateRange,
|
|
4116
|
+
setRetentionCohortFilters: o.actions.setRetentionCohortFilters,
|
|
4117
|
+
setRetentionActivityFilters: o.actions.setRetentionActivityFilters,
|
|
4118
|
+
setRetentionBreakdowns: o.actions.setRetentionBreakdowns,
|
|
4119
|
+
addRetentionBreakdown: o.actions.addRetentionBreakdown,
|
|
4120
|
+
removeRetentionBreakdown: o.actions.removeRetentionBreakdown,
|
|
4121
|
+
setRetentionViewGranularity: o.actions.setRetentionViewGranularity,
|
|
4122
|
+
setRetentionPeriods: o.actions.setRetentionPeriods,
|
|
4123
|
+
setRetentionType: o.actions.setRetentionType,
|
|
4124
|
+
setRetentionDisplayConfig: o.actions.setRetentionDisplayConfig,
|
|
4125
|
+
setChartType: o.actions.setChartType,
|
|
4126
|
+
setChartConfig: o.actions.setChartConfig,
|
|
4127
|
+
setDisplayConfig: o.actions.setDisplayConfig,
|
|
4128
|
+
setLocalPaletteName: o.actions.setLocalPaletteName,
|
|
4129
|
+
setActiveTab: o.actions.setActiveTab,
|
|
4130
|
+
setActiveView: o.actions.setActiveView,
|
|
4131
|
+
setDisplayLimit: o.actions.setDisplayLimit,
|
|
4132
|
+
closeFieldModal: o.actions.closeFieldModal,
|
|
4133
|
+
setActiveTableIndex: o.actions.setActiveTableIndex,
|
|
4134
|
+
openAI: l.openAI,
|
|
4135
|
+
closeAI: l.closeAI,
|
|
4136
|
+
setAIPrompt: l.setAIPrompt,
|
|
4137
|
+
generateAI: l.generateAI,
|
|
4138
|
+
acceptAI: l.acceptAI,
|
|
4139
|
+
cancelAI: l.cancelAI,
|
|
4140
|
+
share: l.share,
|
|
4141
|
+
clearQuery: o.actions.clearQuery,
|
|
4142
|
+
clearCurrentMode: o.actions.clearCurrentMode,
|
|
4143
|
+
refetch: c.refetch,
|
|
4144
|
+
handleFieldSelected: o.actions.handleFieldSelected
|
|
3955
4145
|
},
|
|
3956
|
-
getQueryConfig:
|
|
3957
|
-
getChartConfig:
|
|
3958
|
-
getAnalysisType:
|
|
4146
|
+
getQueryConfig: o.getQueryConfig,
|
|
4147
|
+
getChartConfig: o.getChartConfig,
|
|
4148
|
+
getAnalysisType: o.getAnalysisType
|
|
3959
4149
|
};
|
|
3960
4150
|
}
|
|
3961
4151
|
//#endregion
|
|
3962
4152
|
//#region src/client/utils/funnelValidation.ts
|
|
3963
|
-
function
|
|
4153
|
+
function dr(e, t) {
|
|
3964
4154
|
let n = [];
|
|
3965
4155
|
if (!t?.cubes) return n;
|
|
3966
4156
|
if (typeof e.dimension == "string") {
|
|
@@ -3984,7 +4174,7 @@ function lr(e, t) {
|
|
|
3984
4174
|
}
|
|
3985
4175
|
return n;
|
|
3986
4176
|
}
|
|
3987
|
-
function
|
|
4177
|
+
function fr(e) {
|
|
3988
4178
|
let t = [];
|
|
3989
4179
|
for (let n = 0; n < e.length; n++) {
|
|
3990
4180
|
let r = e[n], i = r.query;
|
|
@@ -3996,17 +4186,17 @@ function ur(e) {
|
|
|
3996
4186
|
}
|
|
3997
4187
|
return t;
|
|
3998
4188
|
}
|
|
3999
|
-
function
|
|
4189
|
+
function pr(e, t) {
|
|
4000
4190
|
if (typeof e.dimension == "string") return !0;
|
|
4001
|
-
let n =
|
|
4191
|
+
let n = me(t);
|
|
4002
4192
|
return n ? e.dimension.some((e) => e.cube === n) : !1;
|
|
4003
4193
|
}
|
|
4004
|
-
function
|
|
4194
|
+
function mr(e, t) {
|
|
4005
4195
|
let n = [];
|
|
4006
4196
|
for (let r = 0; r < t.length; r++) {
|
|
4007
4197
|
let i = t[r];
|
|
4008
|
-
if (!
|
|
4009
|
-
let e =
|
|
4198
|
+
if (!pr(e, i.query)) {
|
|
4199
|
+
let e = me(i.query) || "unknown";
|
|
4010
4200
|
n.push({
|
|
4011
4201
|
type: "cross_cube",
|
|
4012
4202
|
message: `Step ${r + 1} uses cube "${e}" but no binding key mapping exists for it`,
|
|
@@ -4016,26 +4206,26 @@ function fr(e, t) {
|
|
|
4016
4206
|
}
|
|
4017
4207
|
return n;
|
|
4018
4208
|
}
|
|
4019
|
-
function
|
|
4209
|
+
function hr(e) {
|
|
4020
4210
|
return e ? /^P(?:\d+Y)?(?:\d+M)?(?:\d+W)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$/.test(e) ? null : {
|
|
4021
4211
|
type: "time_window",
|
|
4022
4212
|
message: `Invalid time window format "${e}". Expected ISO 8601 duration (e.g., P7D, PT1H)`
|
|
4023
4213
|
} : null;
|
|
4024
4214
|
}
|
|
4025
|
-
function
|
|
4215
|
+
function gr(e, t) {
|
|
4026
4216
|
let n = [], r = [];
|
|
4027
4217
|
e.steps.length < 2 && n.push({
|
|
4028
4218
|
type: "general",
|
|
4029
4219
|
message: "Funnel requires at least 2 steps"
|
|
4030
|
-
}), e.bindingKey?.dimension ? (n.push(...
|
|
4220
|
+
}), e.bindingKey?.dimension ? (n.push(...dr(e.bindingKey, t)), n.push(...mr(e.bindingKey, e.steps))) : n.push({
|
|
4031
4221
|
type: "binding_key",
|
|
4032
4222
|
message: "Binding key dimension is required"
|
|
4033
|
-
}), n.push(...
|
|
4223
|
+
}), n.push(...fr(e.steps));
|
|
4034
4224
|
for (let t = 0; t < e.steps.length; t++) {
|
|
4035
|
-
let r = e.steps[t], i =
|
|
4225
|
+
let r = e.steps[t], i = hr(r.timeToConvert);
|
|
4036
4226
|
i && (i.stepIndex = t, n.push(i));
|
|
4037
4227
|
}
|
|
4038
|
-
let i =
|
|
4228
|
+
let i = hr(e.globalTimeWindow);
|
|
4039
4229
|
return i && n.push(i), e.steps.length > 5 && r.push({
|
|
4040
4230
|
type: "general",
|
|
4041
4231
|
message: "Funnels with more than 5 steps may have reduced performance"
|
|
@@ -4045,7 +4235,7 @@ function mr(e, t) {
|
|
|
4045
4235
|
warnings: r
|
|
4046
4236
|
};
|
|
4047
4237
|
}
|
|
4048
|
-
function
|
|
4238
|
+
function _r(e, t) {
|
|
4049
4239
|
return t < 2 ? {
|
|
4050
4240
|
isValid: !1,
|
|
4051
4241
|
message: "Add at least 2 steps for funnel"
|
|
@@ -4054,7 +4244,7 @@ function hr(e, t) {
|
|
|
4054
4244
|
message: "Select a binding key dimension"
|
|
4055
4245
|
} : { isValid: !0 };
|
|
4056
4246
|
}
|
|
4057
|
-
function
|
|
4247
|
+
function vr(e) {
|
|
4058
4248
|
if (!e?.cubes) return [];
|
|
4059
4249
|
let t = [];
|
|
4060
4250
|
for (let n of e.cubes) if (n.dimensions) for (let e of n.dimensions) (e.type === "string" || e.type === "number") && t.push({
|
|
@@ -4064,7 +4254,7 @@ function gr(e) {
|
|
|
4064
4254
|
});
|
|
4065
4255
|
return t;
|
|
4066
4256
|
}
|
|
4067
|
-
function
|
|
4257
|
+
function yr(e) {
|
|
4068
4258
|
if (!e?.dimension) return "Select binding key...";
|
|
4069
4259
|
if (typeof e.dimension == "string") return e.dimension.split(".")[1] || e.dimension;
|
|
4070
4260
|
if (e.dimension.length > 0) {
|
|
@@ -4074,6 +4264,6 @@ function _r(e) {
|
|
|
4074
4264
|
return "Select binding key...";
|
|
4075
4265
|
}
|
|
4076
4266
|
//#endregion
|
|
4077
|
-
export {
|
|
4267
|
+
export { On as A, Tn as C, An as D, En as E, Ye as F, Sn as M, It as N, wn as O, it as P, xn as S, Cn as T, Bn as _, mr as a, In as b, ur as c, nr as d, er as f, Pn as g, Fn as h, dr as i, $ as j, kn as k, Qn as l, ar as m, yr as n, gr as o, rr as p, _r as r, fr as s, vr as t, $n as u, Rn as v, Dn as w, Mn as x, Nn as y };
|
|
4078
4268
|
|
|
4079
|
-
//# sourceMappingURL=analysis-builder-shared-
|
|
4269
|
+
//# sourceMappingURL=analysis-builder-shared-CD0n2Nb8.js.map
|