@sqlrooms/mosaic 0.29.0-rc.2 → 0.29.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -0
- package/dist/MosaicChartBuilder.d.ts +48 -13
- package/dist/MosaicChartBuilder.d.ts.map +1 -1
- package/dist/MosaicChartBuilder.js +28 -30
- package/dist/MosaicChartBuilder.js.map +1 -1
- package/dist/MosaicSlice.d.ts +11 -0
- package/dist/MosaicSlice.d.ts.map +1 -1
- package/dist/MosaicSlice.js +73 -10
- package/dist/MosaicSlice.js.map +1 -1
- package/dist/ResponsivePlot.d.ts +23 -0
- package/dist/ResponsivePlot.d.ts.map +1 -0
- package/dist/ResponsivePlot.js +43 -0
- package/dist/ResponsivePlot.js.map +1 -0
- package/dist/VgPlotChart.d.ts +18 -2
- package/dist/VgPlotChart.d.ts.map +1 -1
- package/dist/VgPlotChart.js +112 -26
- package/dist/VgPlotChart.js.map +1 -1
- package/dist/chart-builders/ChartBuilderActions.d.ts +6 -0
- package/dist/chart-builders/ChartBuilderActions.d.ts.map +1 -0
- package/dist/chart-builders/ChartBuilderActions.js +28 -0
- package/dist/chart-builders/ChartBuilderActions.js.map +1 -0
- package/dist/chart-builders/ChartBuilderContent.d.ts +13 -11
- package/dist/chart-builders/ChartBuilderContent.d.ts.map +1 -1
- package/dist/chart-builders/ChartBuilderContent.js +21 -52
- package/dist/chart-builders/ChartBuilderContent.js.map +1 -1
- package/dist/chart-builders/ChartBuilderContext.d.ts +9 -4
- package/dist/chart-builders/ChartBuilderContext.d.ts.map +1 -1
- package/dist/chart-builders/ChartBuilderContext.js +5 -0
- package/dist/chart-builders/ChartBuilderContext.js.map +1 -1
- package/dist/chart-builders/ChartBuilderDialog.d.ts +31 -6
- package/dist/chart-builders/ChartBuilderDialog.d.ts.map +1 -1
- package/dist/chart-builders/ChartBuilderDialog.js +25 -10
- package/dist/chart-builders/ChartBuilderDialog.js.map +1 -1
- package/dist/chart-builders/ChartBuilderFields.d.ts +6 -0
- package/dist/chart-builders/ChartBuilderFields.d.ts.map +1 -0
- package/dist/chart-builders/ChartBuilderFields.js +25 -0
- package/dist/chart-builders/ChartBuilderFields.js.map +1 -0
- package/dist/chart-builders/ChartBuilderRoot.d.ts +27 -0
- package/dist/chart-builders/ChartBuilderRoot.d.ts.map +1 -0
- package/dist/chart-builders/ChartBuilderRoot.js +61 -0
- package/dist/chart-builders/ChartBuilderRoot.js.map +1 -0
- package/dist/chart-builders/ChartBuilderTypeGrid.d.ts +7 -0
- package/dist/chart-builders/ChartBuilderTypeGrid.d.ts.map +1 -0
- package/dist/chart-builders/ChartBuilderTypeGrid.js +23 -0
- package/dist/chart-builders/ChartBuilderTypeGrid.js.map +1 -0
- package/dist/chart-builders/FieldSelectorInput.d.ts.map +1 -1
- package/dist/chart-builders/FieldSelectorInput.js +2 -2
- package/dist/chart-builders/FieldSelectorInput.js.map +1 -1
- package/dist/chart-builders/builders.d.ts +28 -1
- package/dist/chart-builders/builders.d.ts.map +1 -1
- package/dist/chart-builders/builders.js +44 -273
- package/dist/chart-builders/builders.js.map +1 -1
- package/dist/chart-builders/chartSpecTitle.d.ts +3 -4
- package/dist/chart-builders/chartSpecTitle.d.ts.map +1 -1
- package/dist/chart-builders/chartSpecTitle.js +3 -5
- package/dist/chart-builders/chartSpecTitle.js.map +1 -1
- package/dist/chart-builders/chartTypeUtils.d.ts +17 -0
- package/dist/chart-builders/chartTypeUtils.d.ts.map +1 -0
- package/dist/chart-builders/chartTypeUtils.js +55 -0
- package/dist/chart-builders/chartTypeUtils.js.map +1 -0
- package/dist/chart-builders/constants.d.ts +7 -0
- package/dist/chart-builders/constants.d.ts.map +1 -0
- package/dist/chart-builders/constants.js +34 -0
- package/dist/chart-builders/constants.js.map +1 -0
- package/dist/chart-builders/createChartBuilderStore.d.ts +11 -0
- package/dist/chart-builders/createChartBuilderStore.d.ts.map +1 -0
- package/dist/chart-builders/createChartBuilderStore.js +26 -0
- package/dist/chart-builders/createChartBuilderStore.js.map +1 -0
- package/dist/chart-builders/describeChartSpecs.d.ts +5 -3
- package/dist/chart-builders/describeChartSpecs.d.ts.map +1 -1
- package/dist/chart-builders/describeChartSpecs.js +11 -8
- package/dist/chart-builders/describeChartSpecs.js.map +1 -1
- package/dist/chart-builders/hooks/useChartFieldForm.d.ts +13 -0
- package/dist/chart-builders/hooks/useChartFieldForm.d.ts.map +1 -0
- package/dist/chart-builders/hooks/useChartFieldForm.js +12 -0
- package/dist/chart-builders/hooks/useChartFieldForm.js.map +1 -0
- package/dist/chart-builders/types.d.ts +12 -29
- package/dist/chart-builders/types.d.ts.map +1 -1
- package/dist/chart-builders/types.js +16 -1
- package/dist/chart-builders/types.js.map +1 -1
- package/dist/chart-types/base-types.d.ts +54 -0
- package/dist/chart-types/base-types.d.ts.map +1 -0
- package/dist/chart-types/base-types.js +6 -0
- package/dist/chart-types/base-types.js.map +1 -0
- package/dist/chart-types/box-plot/definition.d.ts +4 -0
- package/dist/chart-types/box-plot/definition.d.ts.map +1 -0
- package/dist/chart-types/box-plot/definition.js +45 -0
- package/dist/chart-types/box-plot/definition.js.map +1 -0
- package/dist/chart-types/box-plot/index.d.ts +3 -0
- package/dist/chart-types/box-plot/index.d.ts.map +1 -0
- package/dist/chart-types/box-plot/index.js +3 -0
- package/dist/chart-types/box-plot/index.js.map +1 -0
- package/dist/chart-types/box-plot/schema.d.ts +17 -0
- package/dist/chart-types/box-plot/schema.d.ts.map +1 -0
- package/dist/chart-types/box-plot/schema.js +12 -0
- package/dist/chart-types/box-plot/schema.js.map +1 -0
- package/dist/chart-types/bubble-chart/definition.d.ts +4 -0
- package/dist/chart-types/bubble-chart/definition.d.ts.map +1 -0
- package/dist/chart-types/bubble-chart/definition.js +48 -0
- package/dist/chart-types/bubble-chart/definition.js.map +1 -0
- package/dist/chart-types/bubble-chart/index.d.ts +3 -0
- package/dist/chart-types/bubble-chart/index.d.ts.map +1 -0
- package/dist/chart-types/bubble-chart/index.js +3 -0
- package/dist/chart-types/bubble-chart/index.js.map +1 -0
- package/dist/chart-types/bubble-chart/schema.d.ts +17 -0
- package/dist/chart-types/bubble-chart/schema.d.ts.map +1 -0
- package/dist/chart-types/bubble-chart/schema.js +12 -0
- package/dist/chart-types/bubble-chart/schema.js.map +1 -0
- package/dist/chart-types/count-plot/definition.d.ts +4 -0
- package/dist/chart-types/count-plot/definition.d.ts.map +1 -0
- package/dist/chart-types/count-plot/definition.js +50 -0
- package/dist/chart-types/count-plot/definition.js.map +1 -0
- package/dist/chart-types/count-plot/index.d.ts +3 -0
- package/dist/chart-types/count-plot/index.d.ts.map +1 -0
- package/dist/chart-types/count-plot/index.js +3 -0
- package/dist/chart-types/count-plot/index.js.map +1 -0
- package/dist/chart-types/count-plot/schema.d.ts +15 -0
- package/dist/chart-types/count-plot/schema.d.ts.map +1 -0
- package/dist/chart-types/count-plot/schema.js +11 -0
- package/dist/chart-types/count-plot/schema.js.map +1 -0
- package/dist/chart-types/custom-spec/definition.d.ts +4 -0
- package/dist/chart-types/custom-spec/definition.d.ts.map +1 -0
- package/dist/chart-types/custom-spec/definition.js +28 -0
- package/dist/chart-types/custom-spec/definition.js.map +1 -0
- package/dist/chart-types/custom-spec/index.d.ts +3 -0
- package/dist/chart-types/custom-spec/index.d.ts.map +1 -0
- package/dist/chart-types/custom-spec/index.js +3 -0
- package/dist/chart-types/custom-spec/index.js.map +1 -0
- package/dist/chart-types/custom-spec/schema.d.ts +11 -0
- package/dist/chart-types/custom-spec/schema.d.ts.map +1 -0
- package/dist/chart-types/custom-spec/schema.js +9 -0
- package/dist/chart-types/custom-spec/schema.js.map +1 -0
- package/dist/chart-types/ecdf/definition.d.ts +4 -0
- package/dist/chart-types/ecdf/definition.d.ts.map +1 -0
- package/dist/chart-types/ecdf/definition.js +47 -0
- package/dist/chart-types/ecdf/definition.js.map +1 -0
- package/dist/chart-types/ecdf/index.d.ts +3 -0
- package/dist/chart-types/ecdf/index.d.ts.map +1 -0
- package/dist/chart-types/ecdf/index.js +3 -0
- package/dist/chart-types/ecdf/index.js.map +1 -0
- package/dist/chart-types/ecdf/schema.d.ts +15 -0
- package/dist/chart-types/ecdf/schema.d.ts.map +1 -0
- package/dist/chart-types/ecdf/schema.js +11 -0
- package/dist/chart-types/ecdf/schema.js.map +1 -0
- package/dist/chart-types/heatmap/definition.d.ts +4 -0
- package/dist/chart-types/heatmap/definition.d.ts.map +1 -0
- package/dist/chart-types/heatmap/definition.js +49 -0
- package/dist/chart-types/heatmap/definition.js.map +1 -0
- package/dist/chart-types/heatmap/index.d.ts +3 -0
- package/dist/chart-types/heatmap/index.d.ts.map +1 -0
- package/dist/chart-types/heatmap/index.js +3 -0
- package/dist/chart-types/heatmap/index.js.map +1 -0
- package/dist/chart-types/heatmap/schema.d.ts +17 -0
- package/dist/chart-types/heatmap/schema.d.ts.map +1 -0
- package/dist/chart-types/heatmap/schema.js +12 -0
- package/dist/chart-types/heatmap/schema.js.map +1 -0
- package/dist/chart-types/histogram/definition.d.ts +4 -0
- package/dist/chart-types/histogram/definition.d.ts.map +1 -0
- package/dist/chart-types/histogram/definition.js +49 -0
- package/dist/chart-types/histogram/definition.js.map +1 -0
- package/dist/chart-types/histogram/index.d.ts +3 -0
- package/dist/chart-types/histogram/index.d.ts.map +1 -0
- package/dist/chart-types/histogram/index.js +3 -0
- package/dist/chart-types/histogram/index.js.map +1 -0
- package/dist/chart-types/histogram/schema.d.ts +15 -0
- package/dist/chart-types/histogram/schema.d.ts.map +1 -0
- package/dist/chart-types/histogram/schema.js +11 -0
- package/dist/chart-types/histogram/schema.js.map +1 -0
- package/dist/chart-types/index.d.ts +109 -0
- package/dist/chart-types/index.d.ts.map +1 -0
- package/dist/chart-types/index.js +70 -0
- package/dist/chart-types/index.js.map +1 -0
- package/dist/chart-types/line-chart/definition.d.ts +4 -0
- package/dist/chart-types/line-chart/definition.d.ts.map +1 -0
- package/dist/chart-types/line-chart/definition.js +46 -0
- package/dist/chart-types/line-chart/definition.js.map +1 -0
- package/dist/chart-types/line-chart/index.d.ts +3 -0
- package/dist/chart-types/line-chart/index.d.ts.map +1 -0
- package/dist/chart-types/line-chart/index.js +3 -0
- package/dist/chart-types/line-chart/index.js.map +1 -0
- package/dist/chart-types/line-chart/schema.d.ts +17 -0
- package/dist/chart-types/line-chart/schema.d.ts.map +1 -0
- package/dist/chart-types/line-chart/schema.js +12 -0
- package/dist/chart-types/line-chart/schema.js.map +1 -0
- package/dist/chart-types/registry.d.ts +5 -0
- package/dist/chart-types/registry.d.ts.map +1 -0
- package/dist/chart-types/registry.js +28 -0
- package/dist/chart-types/registry.js.map +1 -0
- package/dist/dashboard/DashboardPanelErrorBoundary.d.ts +17 -0
- package/dist/dashboard/DashboardPanelErrorBoundary.d.ts.map +1 -0
- package/dist/dashboard/DashboardPanelErrorBoundary.js +21 -0
- package/dist/dashboard/DashboardPanelErrorBoundary.js.map +1 -0
- package/dist/dashboard/MosaicDashboard.d.ts +2 -4
- package/dist/dashboard/MosaicDashboard.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboard.js +42 -19
- package/dist/dashboard/MosaicDashboard.js.map +1 -1
- package/dist/dashboard/MosaicDashboardContext.d.ts +1 -0
- package/dist/dashboard/MosaicDashboardContext.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboardContext.js.map +1 -1
- package/dist/dashboard/MosaicDashboardPanel.d.ts +3 -0
- package/dist/dashboard/MosaicDashboardPanel.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardPanel.js +26 -0
- package/dist/dashboard/MosaicDashboardPanel.js.map +1 -0
- package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts +8 -0
- package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardPanelDragOverlay.js +17 -0
- package/dist/dashboard/MosaicDashboardPanelDragOverlay.js.map +1 -0
- package/dist/dashboard/MosaicDashboardPanelHeader.d.ts +13 -0
- package/dist/dashboard/MosaicDashboardPanelHeader.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardPanelHeader.js +30 -0
- package/dist/dashboard/MosaicDashboardPanelHeader.js.map +1 -0
- package/dist/dashboard/MosaicDashboardPanelLayout.d.ts +10 -0
- package/dist/dashboard/MosaicDashboardPanelLayout.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardPanelLayout.js +25 -0
- package/dist/dashboard/MosaicDashboardPanelLayout.js.map +1 -0
- package/dist/dashboard/MosaicDashboardPanels.d.ts +2 -0
- package/dist/dashboard/MosaicDashboardPanels.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardPanels.js +52 -0
- package/dist/dashboard/MosaicDashboardPanels.js.map +1 -0
- package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.d.ts +3 -0
- package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.js +32 -0
- package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.js.map +1 -0
- package/dist/dashboard/MosaicDashboardSlice.d.ts +482 -27
- package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboardSlice.js +478 -93
- package/dist/dashboard/MosaicDashboardSlice.js.map +1 -1
- package/dist/dashboard/MosaicDashboardToolbar.d.ts.map +1 -1
- package/dist/dashboard/MosaicDashboardToolbar.js +69 -7
- package/dist/dashboard/MosaicDashboardToolbar.js.map +1 -1
- package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.d.ts +4 -0
- package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.js +29 -0
- package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.js.map +1 -0
- package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.d.ts +3 -0
- package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.d.ts.map +1 -0
- package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.js +68 -0
- package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.js.map +1 -0
- package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts.map +1 -1
- package/dist/dashboard/VgPlotSpecPopoverEditor.js +2 -2
- package/dist/dashboard/VgPlotSpecPopoverEditor.js.map +1 -1
- package/dist/dashboard/chart-settings/ChartSettings.d.ts +39 -0
- package/dist/dashboard/chart-settings/ChartSettings.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/ChartSettings.js +90 -0
- package/dist/dashboard/chart-settings/ChartSettings.js.map +1 -0
- package/dist/dashboard/chart-settings/ChartSettingsContext.d.ts +20 -0
- package/dist/dashboard/chart-settings/ChartSettingsContext.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/ChartSettingsContext.js +14 -0
- package/dist/dashboard/chart-settings/ChartSettingsContext.js.map +1 -0
- package/dist/dashboard/chart-settings/ChartSettingsPanel.d.ts +11 -0
- package/dist/dashboard/chart-settings/ChartSettingsPanel.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/ChartSettingsPanel.js +8 -0
- package/dist/dashboard/chart-settings/ChartSettingsPanel.js.map +1 -0
- package/dist/dashboard/chart-settings/ChartTypeSelector.d.ts +11 -0
- package/dist/dashboard/chart-settings/ChartTypeSelector.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/ChartTypeSelector.js +17 -0
- package/dist/dashboard/chart-settings/ChartTypeSelector.js.map +1 -0
- package/dist/dashboard/chart-settings/DynamicChartSettings.d.ts +11 -0
- package/dist/dashboard/chart-settings/DynamicChartSettings.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/DynamicChartSettings.js +19 -0
- package/dist/dashboard/chart-settings/DynamicChartSettings.js.map +1 -0
- package/dist/dashboard/chart-settings/index.d.ts +6 -0
- package/dist/dashboard/chart-settings/index.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/index.js +6 -0
- package/dist/dashboard/chart-settings/index.js.map +1 -0
- package/dist/dashboard/chart-settings/useTableColumns.d.ts +3 -0
- package/dist/dashboard/chart-settings/useTableColumns.d.ts.map +1 -0
- package/dist/dashboard/chart-settings/useTableColumns.js +12 -0
- package/dist/dashboard/chart-settings/useTableColumns.js.map +1 -0
- package/dist/dashboard/defaultPanelRenderers.d.ts +3 -0
- package/dist/dashboard/defaultPanelRenderers.d.ts.map +1 -0
- package/dist/dashboard/defaultPanelRenderers.js +11 -0
- package/dist/dashboard/defaultPanelRenderers.js.map +1 -0
- package/dist/dashboard/generateMosaicChartSpec.d.ts +15 -0
- package/dist/dashboard/generateMosaicChartSpec.d.ts.map +1 -0
- package/dist/dashboard/generateMosaicChartSpec.js +30 -0
- package/dist/dashboard/generateMosaicChartSpec.js.map +1 -0
- package/dist/editor/MosaicChartDisplay.d.ts.map +1 -1
- package/dist/editor/MosaicChartDisplay.js +6 -1
- package/dist/editor/MosaicChartDisplay.js.map +1 -1
- package/dist/index.d.ts +31 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/dist/profiler/useMosaicProfiler.d.ts.map +1 -1
- package/dist/profiler/useMosaicProfiler.js.map +1 -1
- package/dist/tableInterop.js.map +1 -1
- package/dist/useMosaicClient.d.ts +4 -15
- package/dist/useMosaicClient.d.ts.map +1 -1
- package/dist/useMosaicClient.js +10 -4
- package/dist/useMosaicClient.js.map +1 -1
- package/package.json +15 -9
- package/dist/chart-builders/createMosaicChartTool.d.ts +0 -45
- package/dist/chart-builders/createMosaicChartTool.d.ts.map +0 -1
- package/dist/chart-builders/createMosaicChartTool.js +0 -109
- package/dist/chart-builders/createMosaicChartTool.js.map +0 -1
- package/dist/dashboard/MosaicDashboardChartPanel.d.ts +0 -3
- package/dist/dashboard/MosaicDashboardChartPanel.d.ts.map +0 -1
- package/dist/dashboard/MosaicDashboardChartPanel.js +0 -49
- package/dist/dashboard/MosaicDashboardChartPanel.js.map +0 -1
- package/dist/dashboard/MosaicDashboardCharts.d.ts +0 -3
- package/dist/dashboard/MosaicDashboardCharts.d.ts.map +0 -1
- package/dist/dashboard/MosaicDashboardCharts.js +0 -45
- package/dist/dashboard/MosaicDashboardCharts.js.map +0 -1
- package/dist/dashboard/MosaicDashboardProfiler.d.ts +0 -3
- package/dist/dashboard/MosaicDashboardProfiler.d.ts.map +0 -1
- package/dist/dashboard/MosaicDashboardProfiler.js +0 -21
- package/dist/dashboard/MosaicDashboardProfiler.js.map +0 -1
- package/dist/use-mosaic.d.ts +0 -11
- package/dist/use-mosaic.d.ts.map +0 -1
- package/dist/use-mosaic.js +0 -42
- package/dist/use-mosaic.js.map +0 -1
package/README.md
CHANGED
|
@@ -41,6 +41,36 @@ export const {roomStore, useRoomStore} = createRoomStore<RoomState>(
|
|
|
41
41
|
);
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
+
Mosaic's pre-aggregation optimization creates `preagg_*` cache tables lazily
|
|
45
|
+
when users interact with cross-filtered selections. By default Mosaic writes
|
|
46
|
+
those tables to the persistent `mosaic` schema. If the DuckDB database is a user
|
|
47
|
+
project file, point pre-aggregates at an attached cache database or disable them:
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
const mosaicCacheDatabase = '__sqlrooms_mosaic_cache';
|
|
51
|
+
|
|
52
|
+
const connector = createWebSocketDuckDbConnector({
|
|
53
|
+
initializationQuery: [
|
|
54
|
+
`ATTACH IF NOT EXISTS ':memory:' AS ${mosaicCacheDatabase}`,
|
|
55
|
+
`CREATE SCHEMA IF NOT EXISTS ${mosaicCacheDatabase}.mosaic`,
|
|
56
|
+
].join('; '),
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
export const {roomStore, useRoomStore} = createRoomStore<RoomState>(
|
|
60
|
+
(set, get, store) => ({
|
|
61
|
+
// ... db slice using connector
|
|
62
|
+
...createMosaicSlice({
|
|
63
|
+
preagg: {
|
|
64
|
+
schema: `${mosaicCacheDatabase}.mosaic`,
|
|
65
|
+
},
|
|
66
|
+
})(set, get, store),
|
|
67
|
+
}),
|
|
68
|
+
);
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Set `preagg.enabled` to `false` when you prefer to avoid pre-aggregate tables
|
|
72
|
+
entirely.
|
|
73
|
+
|
|
44
74
|
The Mosaic connection is automatically initialized when the DuckDB connector is ready. You can check the connection status:
|
|
45
75
|
|
|
46
76
|
```tsx
|
|
@@ -137,6 +167,96 @@ For the common case, prefer the compound `MosaicProfiler` API. `useMosaicProfile
|
|
|
137
167
|
is still available when you need direct access to the profiler state for custom
|
|
138
168
|
layout, sizing, or advanced composition.
|
|
139
169
|
|
|
170
|
+
### Mosaic Dashboard Panels
|
|
171
|
+
|
|
172
|
+
`MosaicDashboard` is a compound dashboard surface backed by generic dashboard
|
|
173
|
+
panels instead of a chart-only list. Configure supported panel renderers and
|
|
174
|
+
runtime add-panel actions when creating the dashboard slice.
|
|
175
|
+
|
|
176
|
+
```tsx
|
|
177
|
+
import {
|
|
178
|
+
createDefaultMosaicDashboardPanelRenderers,
|
|
179
|
+
createMosaicDashboardProfilerPanelConfig,
|
|
180
|
+
createMosaicDashboardSlice,
|
|
181
|
+
createMosaicDashboardVgPlotPanelConfig,
|
|
182
|
+
MosaicDashboard,
|
|
183
|
+
} from '@sqlrooms/mosaic';
|
|
184
|
+
|
|
185
|
+
const dashboardSlice = createMosaicDashboardSlice({
|
|
186
|
+
panelRenderers: createDefaultMosaicDashboardPanelRenderers(),
|
|
187
|
+
// Optional: pass chartTypes/chartBuilders to customize Add Chart.
|
|
188
|
+
// Optional: pass addPanelActions to add app-specific menu entries.
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
function Dashboard() {
|
|
192
|
+
return <MosaicDashboard dashboardId="main" />;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
function addProfiler(store: RoomStore) {
|
|
196
|
+
store.getState().mosaicDashboard.addPanel(
|
|
197
|
+
'main',
|
|
198
|
+
createMosaicDashboardProfilerPanelConfig({
|
|
199
|
+
source: {tableName: 'earthquakes'},
|
|
200
|
+
}),
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Dashboards have a creation-time `layoutType` of either `dock` or `grid`.
|
|
206
|
+
Existing persisted dashboards default to `dock`; pass `'grid'` to
|
|
207
|
+
`createDashboard(title, 'grid')` or `ensureDashboard(id, title, 'grid')` when
|
|
208
|
+
creating a dashboard that should use the scrollable grid renderer. Re-ensuring
|
|
209
|
+
an existing dashboard does not convert between layout types.
|
|
210
|
+
|
|
211
|
+
Dashboard panel sources may specify a `tableName` or trusted `sqlQuery`; when a
|
|
212
|
+
panel omits a source it falls back to the dashboard selected table. Panel renderer
|
|
213
|
+
definitions and chart builder definitions are runtime-only and intentionally
|
|
214
|
+
live outside persisted dashboard config.
|
|
215
|
+
|
|
216
|
+
### Chart Builder Compound Components
|
|
217
|
+
|
|
218
|
+
The chart builder UI can be used as a compound component API for flexible composition:
|
|
219
|
+
|
|
220
|
+
```tsx
|
|
221
|
+
import {
|
|
222
|
+
ChartBuilderRoot,
|
|
223
|
+
ChartBuilderTrigger,
|
|
224
|
+
ChartBuilderDialogContent,
|
|
225
|
+
ChartBuilderContent,
|
|
226
|
+
} from '@sqlrooms/mosaic';
|
|
227
|
+
|
|
228
|
+
function MyDashboard() {
|
|
229
|
+
const columns = [...]; // Your table columns
|
|
230
|
+
|
|
231
|
+
return (
|
|
232
|
+
<ChartBuilderRoot
|
|
233
|
+
tableName="earthquakes"
|
|
234
|
+
columns={columns}
|
|
235
|
+
onCreateChart={(spec, title) => {
|
|
236
|
+
// Handle chart creation
|
|
237
|
+
}}
|
|
238
|
+
>
|
|
239
|
+
<ChartBuilderTrigger />
|
|
240
|
+
<ChartBuilderDialogContent>
|
|
241
|
+
<ChartBuilderContent />
|
|
242
|
+
</ChartBuilderDialogContent>
|
|
243
|
+
</ChartBuilderRoot>
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Available compound components:
|
|
249
|
+
|
|
250
|
+
- `ChartBuilderRoot` - Context provider and dialog wrapper
|
|
251
|
+
- `ChartBuilderTrigger` - Button to open the dialog
|
|
252
|
+
- `ChartBuilderDialogContent` - Dialog content wrapper
|
|
253
|
+
- `ChartBuilderContent` - Main chart builder UI (type grid + fields + actions)
|
|
254
|
+
- `ChartBuilderTypeGrid` - Chart type selector grid
|
|
255
|
+
- `ChartBuilderFields` - Field selector inputs
|
|
256
|
+
- `ChartBuilderActions` - Back/Create buttons
|
|
257
|
+
|
|
258
|
+
For simpler use cases, the legacy `ChartBuilderDialog` component is still available but deprecated.
|
|
259
|
+
|
|
140
260
|
### Working with Selections
|
|
141
261
|
|
|
142
262
|
Selections enable cross-filtering between multiple visualizations. You can get or create a named selection from the store:
|
|
@@ -1,32 +1,67 @@
|
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
import { mosaicChartBuilders } from './chart-builders/builders';
|
|
3
|
+
import { mosaicChartTypes } from './chart-types';
|
|
4
|
+
import { ChartBuilderActions } from './chart-builders/ChartBuilderActions';
|
|
5
|
+
import { ChartBuilderContent } from './chart-builders/ChartBuilderContent';
|
|
6
|
+
import { ChartBuilderDialog, ChartBuilderDialogContent, ChartBuilderTrigger } from './chart-builders/ChartBuilderDialog';
|
|
7
|
+
import { ChartBuilderRoot, type ChartBuilderRootProps } from './chart-builders/ChartBuilderRoot';
|
|
8
|
+
import { ChartBuilderFields } from './chart-builders/ChartBuilderFields';
|
|
9
|
+
import { ChartBuilderTypeGrid } from './chart-builders/ChartBuilderTypeGrid';
|
|
10
|
+
import { FieldSelectorInput } from './chart-builders/FieldSelectorInput';
|
|
1
11
|
/**
|
|
2
12
|
* Compound component for building Mosaic charts from templates.
|
|
3
13
|
*
|
|
4
|
-
* Use
|
|
5
|
-
*
|
|
14
|
+
* Use `<MosaicChartBuilder>` as the root; it provides context and wraps a
|
|
15
|
+
* Radix Dialog.
|
|
6
16
|
*
|
|
7
|
-
* @example
|
|
17
|
+
* @example Compound usage (recommended)
|
|
8
18
|
* ```tsx
|
|
9
|
-
* <MosaicChartBuilder
|
|
19
|
+
* <MosaicChartBuilder
|
|
10
20
|
* tableName="my_table"
|
|
11
21
|
* columns={columns}
|
|
12
22
|
* onCreateChart={handleCreate}
|
|
13
|
-
*
|
|
23
|
+
* >
|
|
24
|
+
* <MosaicChartBuilder.Trigger />
|
|
25
|
+
* <MosaicChartBuilder.Dialog />
|
|
26
|
+
* </MosaicChartBuilder>
|
|
14
27
|
* ```
|
|
15
28
|
*
|
|
16
|
-
* @example
|
|
29
|
+
* @example Custom trigger button
|
|
17
30
|
* ```tsx
|
|
18
|
-
* <MosaicChartBuilder
|
|
19
|
-
*
|
|
20
|
-
*
|
|
31
|
+
* <MosaicChartBuilder
|
|
32
|
+
* tableName="my_table"
|
|
33
|
+
* columns={columns}
|
|
34
|
+
* onCreateChart={handleCreate}
|
|
35
|
+
* >
|
|
36
|
+
* <MosaicChartBuilder.Trigger variant="ghost" size="icon">
|
|
37
|
+
* <PlusIcon />
|
|
38
|
+
* </MosaicChartBuilder.Trigger>
|
|
39
|
+
* <MosaicChartBuilder.Dialog />
|
|
40
|
+
* </MosaicChartBuilder>
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example Inline builder (no dialog)
|
|
44
|
+
* ```tsx
|
|
45
|
+
* <MosaicChartBuilder.Content
|
|
21
46
|
* tableName="my_table"
|
|
22
47
|
* columns={columns}
|
|
23
48
|
* onCreateChart={handleCreate}
|
|
24
49
|
* />
|
|
25
50
|
* ```
|
|
26
51
|
*/
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
52
|
+
type MosaicChartBuilderCompoundComponent = ((props: ChartBuilderRootProps) => ReactElement) & {
|
|
53
|
+
Root: typeof ChartBuilderRoot;
|
|
54
|
+
chartTypes: typeof mosaicChartTypes;
|
|
55
|
+
chartBuilders: typeof mosaicChartBuilders;
|
|
56
|
+
Trigger: typeof ChartBuilderTrigger;
|
|
57
|
+
Dialog: typeof ChartBuilderDialogContent;
|
|
58
|
+
Content: typeof ChartBuilderContent;
|
|
59
|
+
TypeGrid: typeof ChartBuilderTypeGrid;
|
|
60
|
+
Fields: typeof ChartBuilderFields;
|
|
61
|
+
Actions: typeof ChartBuilderActions;
|
|
62
|
+
FieldSelector: typeof FieldSelectorInput;
|
|
63
|
+
LegacyDialog: typeof ChartBuilderDialog;
|
|
31
64
|
};
|
|
65
|
+
export declare const MosaicChartBuilder: MosaicChartBuilderCompoundComponent;
|
|
66
|
+
export {};
|
|
32
67
|
//# sourceMappingURL=MosaicChartBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MosaicChartBuilder.d.ts","sourceRoot":"","sources":["../src/MosaicChartBuilder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MosaicChartBuilder.d.ts","sourceRoot":"","sources":["../src/MosaicChartBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,OAAO,CAAC;AACxC,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC3B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAC,oBAAoB,EAAC,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,KAAK,mCAAmC,GAAG,CAAC,CAC1C,KAAK,EAAE,qBAAqB,KACzB,YAAY,CAAC,GAAG;IACnB,IAAI,EAAE,OAAO,gBAAgB,CAAC;IAC9B,UAAU,EAAE,OAAO,gBAAgB,CAAC;IACpC,aAAa,EAAE,OAAO,mBAAmB,CAAC;IAC1C,OAAO,EAAE,OAAO,mBAAmB,CAAC;IACpC,MAAM,EAAE,OAAO,yBAAyB,CAAC;IACzC,OAAO,EAAE,OAAO,mBAAmB,CAAC;IACpC,QAAQ,EAAE,OAAO,oBAAoB,CAAC;IACtC,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,OAAO,EAAE,OAAO,mBAAmB,CAAC;IACpC,aAAa,EAAE,OAAO,kBAAkB,CAAC;IACzC,YAAY,EAAE,OAAO,kBAAkB,CAAC;CACzC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,mCA0B9B,CAAC"}
|
|
@@ -1,35 +1,33 @@
|
|
|
1
|
+
import { mosaicChartBuilders } from './chart-builders/builders';
|
|
2
|
+
import { mosaicChartTypes } from './chart-types';
|
|
3
|
+
import { ChartBuilderActions } from './chart-builders/ChartBuilderActions';
|
|
1
4
|
import { ChartBuilderContent } from './chart-builders/ChartBuilderContent';
|
|
2
|
-
import { ChartBuilderDialog } from './chart-builders/ChartBuilderDialog';
|
|
5
|
+
import { ChartBuilderDialog, ChartBuilderDialogContent, ChartBuilderTrigger, } from './chart-builders/ChartBuilderDialog';
|
|
6
|
+
import { ChartBuilderRoot, } from './chart-builders/ChartBuilderRoot';
|
|
7
|
+
import { ChartBuilderFields } from './chart-builders/ChartBuilderFields';
|
|
8
|
+
import { ChartBuilderTypeGrid } from './chart-builders/ChartBuilderTypeGrid';
|
|
3
9
|
import { FieldSelectorInput } from './chart-builders/FieldSelectorInput';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
* onCreateChart={handleCreate}
|
|
16
|
-
* />
|
|
17
|
-
* ```
|
|
18
|
-
*
|
|
19
|
-
* @example Dialog usage
|
|
20
|
-
* ```tsx
|
|
21
|
-
* <MosaicChartBuilder.Dialog
|
|
22
|
-
* open={isOpen}
|
|
23
|
-
* onOpenChange={setOpen}
|
|
24
|
-
* tableName="my_table"
|
|
25
|
-
* columns={columns}
|
|
26
|
-
* onCreateChart={handleCreate}
|
|
27
|
-
* />
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export const MosaicChartBuilder = {
|
|
10
|
+
export const MosaicChartBuilder = Object.assign(ChartBuilderRoot, {
|
|
11
|
+
Root: ChartBuilderRoot,
|
|
12
|
+
/** Named built-in chart-type definitions. */
|
|
13
|
+
chartTypes: mosaicChartTypes,
|
|
14
|
+
/** Named built-in chart templates (same objects as default set). */
|
|
15
|
+
chartBuilders: mosaicChartBuilders,
|
|
16
|
+
/** Default trigger button; customize via ButtonProps or children. */
|
|
17
|
+
Trigger: ChartBuilderTrigger,
|
|
18
|
+
/** Dialog content pane with chart-builder steps. */
|
|
19
|
+
Dialog: ChartBuilderDialogContent,
|
|
20
|
+
/** Standalone builder UI (no dialog wrapper). */
|
|
31
21
|
Content: ChartBuilderContent,
|
|
32
|
-
|
|
22
|
+
/** Built-in chart-type picker grid. */
|
|
23
|
+
TypeGrid: ChartBuilderTypeGrid,
|
|
24
|
+
/** Field selectors for the currently selected chart type. */
|
|
25
|
+
Fields: ChartBuilderFields,
|
|
26
|
+
/** Back/Create actions for the current chart type selection. */
|
|
27
|
+
Actions: ChartBuilderActions,
|
|
28
|
+
/** Field selector primitive. */
|
|
33
29
|
FieldSelector: FieldSelectorInput,
|
|
34
|
-
|
|
30
|
+
/** Legacy one-shot dialog (backward-compatible). */
|
|
31
|
+
LegacyDialog: ChartBuilderDialog,
|
|
32
|
+
});
|
|
35
33
|
//# sourceMappingURL=MosaicChartBuilder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MosaicChartBuilder.js","sourceRoot":"","sources":["../src/MosaicChartBuilder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MosaicChartBuilder.js","sourceRoot":"","sources":["../src/MosaicChartBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,gBAAgB,GAEjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAC,oBAAoB,EAAC,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AA4DvE,MAAM,CAAC,MAAM,kBAAkB,GAC7B,MAAM,CAAC,MAAM,CACX,gBAAkE,EAClE;IACE,IAAI,EAAE,gBAAgB;IACtB,6CAA6C;IAC7C,UAAU,EAAE,gBAAgB;IAC5B,oEAAoE;IACpE,aAAa,EAAE,mBAAmB;IAClC,qEAAqE;IACrE,OAAO,EAAE,mBAAmB;IAC5B,oDAAoD;IACpD,MAAM,EAAE,yBAAyB;IACjC,iDAAiD;IACjD,OAAO,EAAE,mBAAmB;IAC5B,uCAAuC;IACvC,QAAQ,EAAE,oBAAoB;IAC9B,6DAA6D;IAC7D,MAAM,EAAE,kBAAkB;IAC1B,gEAAgE;IAChE,OAAO,EAAE,mBAAmB;IAC5B,gCAAgC;IAChC,aAAa,EAAE,kBAAkB;IACjC,oDAAoD;IACpD,YAAY,EAAE,kBAAkB;CACjC,CACF,CAAC","sourcesContent":["import type {ReactElement} from 'react';\nimport {mosaicChartBuilders} from './chart-builders/builders';\nimport {mosaicChartTypes} from './chart-types';\nimport {ChartBuilderActions} from './chart-builders/ChartBuilderActions';\nimport {ChartBuilderContent} from './chart-builders/ChartBuilderContent';\nimport {\n ChartBuilderDialog,\n ChartBuilderDialogContent,\n ChartBuilderTrigger,\n} from './chart-builders/ChartBuilderDialog';\nimport {\n ChartBuilderRoot,\n type ChartBuilderRootProps,\n} from './chart-builders/ChartBuilderRoot';\nimport {ChartBuilderFields} from './chart-builders/ChartBuilderFields';\nimport {ChartBuilderTypeGrid} from './chart-builders/ChartBuilderTypeGrid';\nimport {FieldSelectorInput} from './chart-builders/FieldSelectorInput';\n\n/**\n * Compound component for building Mosaic charts from templates.\n *\n * Use `<MosaicChartBuilder>` as the root; it provides context and wraps a\n * Radix Dialog.\n *\n * @example Compound usage (recommended)\n * ```tsx\n * <MosaicChartBuilder\n * tableName=\"my_table\"\n * columns={columns}\n * onCreateChart={handleCreate}\n * >\n * <MosaicChartBuilder.Trigger />\n * <MosaicChartBuilder.Dialog />\n * </MosaicChartBuilder>\n * ```\n *\n * @example Custom trigger button\n * ```tsx\n * <MosaicChartBuilder\n * tableName=\"my_table\"\n * columns={columns}\n * onCreateChart={handleCreate}\n * >\n * <MosaicChartBuilder.Trigger variant=\"ghost\" size=\"icon\">\n * <PlusIcon />\n * </MosaicChartBuilder.Trigger>\n * <MosaicChartBuilder.Dialog />\n * </MosaicChartBuilder>\n * ```\n *\n * @example Inline builder (no dialog)\n * ```tsx\n * <MosaicChartBuilder.Content\n * tableName=\"my_table\"\n * columns={columns}\n * onCreateChart={handleCreate}\n * />\n * ```\n */\n\ntype MosaicChartBuilderCompoundComponent = ((\n props: ChartBuilderRootProps,\n) => ReactElement) & {\n Root: typeof ChartBuilderRoot;\n chartTypes: typeof mosaicChartTypes;\n chartBuilders: typeof mosaicChartBuilders;\n Trigger: typeof ChartBuilderTrigger;\n Dialog: typeof ChartBuilderDialogContent;\n Content: typeof ChartBuilderContent;\n TypeGrid: typeof ChartBuilderTypeGrid;\n Fields: typeof ChartBuilderFields;\n Actions: typeof ChartBuilderActions;\n FieldSelector: typeof FieldSelectorInput;\n LegacyDialog: typeof ChartBuilderDialog;\n};\n\nexport const MosaicChartBuilder: MosaicChartBuilderCompoundComponent =\n Object.assign(\n ChartBuilderRoot as (props: ChartBuilderRootProps) => ReactElement,\n {\n Root: ChartBuilderRoot,\n /** Named built-in chart-type definitions. */\n chartTypes: mosaicChartTypes,\n /** Named built-in chart templates (same objects as default set). */\n chartBuilders: mosaicChartBuilders,\n /** Default trigger button; customize via ButtonProps or children. */\n Trigger: ChartBuilderTrigger,\n /** Dialog content pane with chart-builder steps. */\n Dialog: ChartBuilderDialogContent,\n /** Standalone builder UI (no dialog wrapper). */\n Content: ChartBuilderContent,\n /** Built-in chart-type picker grid. */\n TypeGrid: ChartBuilderTypeGrid,\n /** Field selectors for the currently selected chart type. */\n Fields: ChartBuilderFields,\n /** Back/Create actions for the current chart type selection. */\n Actions: ChartBuilderActions,\n /** Field selector primitive. */\n FieldSelector: FieldSelectorInput,\n /** Legacy one-shot dialog (backward-compatible). */\n LegacyDialog: ChartBuilderDialog,\n },\n );\n"]}
|
package/dist/MosaicSlice.d.ts
CHANGED
|
@@ -6,6 +6,12 @@ import type { Table as ArrowTable } from 'apache-arrow';
|
|
|
6
6
|
import { z } from 'zod';
|
|
7
7
|
export declare const MosaicSliceConfig: z.ZodObject<{}, z.core.$strip>;
|
|
8
8
|
export type MosaicSliceConfig = z.infer<typeof MosaicSliceConfig>;
|
|
9
|
+
export type MosaicPreAggregateOptions = {
|
|
10
|
+
/** Database schema/namespace for Mosaic pre-aggregate tables. */
|
|
11
|
+
schema?: string;
|
|
12
|
+
/** Enable or disable Mosaic's pre-aggregation optimization. */
|
|
13
|
+
enabled?: boolean;
|
|
14
|
+
};
|
|
9
15
|
export type MosaicClientOptions = {
|
|
10
16
|
/** Unique identifier for this client */
|
|
11
17
|
id?: string;
|
|
@@ -17,6 +23,8 @@ export type MosaicClientOptions = {
|
|
|
17
23
|
query: (filter: unknown) => ReturnType<typeof Query.from>;
|
|
18
24
|
/** Callback when query results are received */
|
|
19
25
|
queryResult?: (result: ArrowTable) => void;
|
|
26
|
+
/** Callback when query execution fails */
|
|
27
|
+
queryError?: (error: Error) => void;
|
|
20
28
|
};
|
|
21
29
|
export type TrackedClient = {
|
|
22
30
|
id: string;
|
|
@@ -24,6 +32,7 @@ export type TrackedClient = {
|
|
|
24
32
|
createdAt: number;
|
|
25
33
|
isLoading: boolean;
|
|
26
34
|
data: unknown | null;
|
|
35
|
+
error?: Error;
|
|
27
36
|
selection?: Selection;
|
|
28
37
|
queryResultCallback?: (result: ArrowTable) => void;
|
|
29
38
|
};
|
|
@@ -53,6 +62,7 @@ export type MosaicSliceState = {
|
|
|
53
62
|
ensureClient: (options: MosaicClientOptions & {
|
|
54
63
|
id: string;
|
|
55
64
|
onQueryResult?: (result: ArrowTable) => void;
|
|
65
|
+
onQueryError?: (error: Error) => void;
|
|
56
66
|
}) => void;
|
|
57
67
|
/** Disconnect and remove a client by id */
|
|
58
68
|
destroyClient: (id: string) => void;
|
|
@@ -64,6 +74,7 @@ export declare function createDefaultMosaicConfig(props?: Partial<MosaicSliceCon
|
|
|
64
74
|
export type CreateMosaicSliceProps = {
|
|
65
75
|
config?: Partial<MosaicSliceConfig>;
|
|
66
76
|
coordinator?: Coordinator;
|
|
77
|
+
preagg?: MosaicPreAggregateOptions;
|
|
67
78
|
};
|
|
68
79
|
export declare function createMosaicSlice(props?: CreateMosaicSliceProps): import("zustand").StateCreator<MosaicSliceState>;
|
|
69
80
|
export type DuckDbSliceStateWithMosaic = DuckDbSliceState & MosaicSliceState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MosaicSlice.d.ts","sourceRoot":"","sources":["../src/MosaicSlice.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EACL,SAAS,EACT,WAAW,
|
|
1
|
+
{"version":3,"file":"MosaicSlice.d.ts","sourceRoot":"","sources":["../src/MosaicSlice.ts"],"names":[],"mappings":"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"}
|
package/dist/MosaicSlice.js
CHANGED
|
@@ -27,6 +27,7 @@ export function createMosaicSlice(props = {}) {
|
|
|
27
27
|
try {
|
|
28
28
|
if (props.coordinator) {
|
|
29
29
|
resolvedCoordinator = props.coordinator;
|
|
30
|
+
applyMosaicPreAggregateOptions(resolvedCoordinator, props.preagg);
|
|
30
31
|
}
|
|
31
32
|
else {
|
|
32
33
|
const dbConnector = await get().db.getConnector();
|
|
@@ -38,6 +39,7 @@ export function createMosaicSlice(props = {}) {
|
|
|
38
39
|
connection: dbConnector.getConnection(),
|
|
39
40
|
})
|
|
40
41
|
: createDuckDbMosaicConnector(dbConnector);
|
|
42
|
+
applyMosaicPreAggregateOptions(resolvedCoordinator, props.preagg);
|
|
41
43
|
resolvedCoordinator.databaseConnector(mosaicConnector);
|
|
42
44
|
}
|
|
43
45
|
}
|
|
@@ -58,6 +60,11 @@ export function createMosaicSlice(props = {}) {
|
|
|
58
60
|
async destroy() {
|
|
59
61
|
get().mosaic.destroyAllClients();
|
|
60
62
|
},
|
|
63
|
+
setConfig(config) {
|
|
64
|
+
set((state) => produce(state, (draft) => {
|
|
65
|
+
draft.mosaic.config = config;
|
|
66
|
+
}));
|
|
67
|
+
},
|
|
61
68
|
getSelection(name, type = 'crossfilter') {
|
|
62
69
|
const existing = get().mosaic.selections[name];
|
|
63
70
|
if (existing)
|
|
@@ -90,16 +97,39 @@ export function createMosaicSlice(props = {}) {
|
|
|
90
97
|
if (tracked) {
|
|
91
98
|
tracked.data = data;
|
|
92
99
|
tracked.isLoading = false;
|
|
100
|
+
tracked.error = undefined;
|
|
93
101
|
}
|
|
94
102
|
}));
|
|
95
103
|
// Call external callback if provided
|
|
96
104
|
options.queryResult?.(toArrowClientResult(data));
|
|
97
105
|
};
|
|
106
|
+
const wrappedQueryPending = () => {
|
|
107
|
+
set((state) => produce(state, (draft) => {
|
|
108
|
+
const tracked = draft.mosaic.clients[id];
|
|
109
|
+
if (tracked) {
|
|
110
|
+
tracked.isLoading = true;
|
|
111
|
+
tracked.error = undefined;
|
|
112
|
+
}
|
|
113
|
+
}));
|
|
114
|
+
};
|
|
115
|
+
const wrappedQueryError = (error) => {
|
|
116
|
+
set((state) => produce(state, (draft) => {
|
|
117
|
+
const tracked = draft.mosaic.clients[id];
|
|
118
|
+
if (tracked) {
|
|
119
|
+
tracked.isLoading = false;
|
|
120
|
+
tracked.error = error;
|
|
121
|
+
}
|
|
122
|
+
}));
|
|
123
|
+
client.enabled = false;
|
|
124
|
+
options.queryError?.(error);
|
|
125
|
+
};
|
|
98
126
|
const client = makeClient({
|
|
99
127
|
coordinator: connection.coordinator,
|
|
100
128
|
selection,
|
|
101
129
|
query: options.query,
|
|
102
130
|
queryResult: wrappedQueryResult,
|
|
131
|
+
queryPending: wrappedQueryPending,
|
|
132
|
+
queryError: wrappedQueryError,
|
|
103
133
|
});
|
|
104
134
|
set((state) => produce(state, (draft) => {
|
|
105
135
|
draft.mosaic.clients[id] = {
|
|
@@ -108,6 +138,7 @@ export function createMosaicSlice(props = {}) {
|
|
|
108
138
|
createdAt: Date.now(),
|
|
109
139
|
isLoading: true,
|
|
110
140
|
data: null,
|
|
141
|
+
error: undefined,
|
|
111
142
|
selection,
|
|
112
143
|
queryResultCallback: options.queryResult
|
|
113
144
|
? (result) => options.queryResult(toArrowClientResult(result))
|
|
@@ -145,6 +176,7 @@ export function createMosaicSlice(props = {}) {
|
|
|
145
176
|
if (tracked) {
|
|
146
177
|
tracked.data = data;
|
|
147
178
|
tracked.isLoading = false;
|
|
179
|
+
tracked.error = undefined;
|
|
148
180
|
}
|
|
149
181
|
}));
|
|
150
182
|
const arrowData = toArrowClientResult(data);
|
|
@@ -153,11 +185,34 @@ export function createMosaicSlice(props = {}) {
|
|
|
153
185
|
// Also call original queryResult if provided
|
|
154
186
|
options.queryResult?.(arrowData);
|
|
155
187
|
};
|
|
188
|
+
const wrappedQueryPending = () => {
|
|
189
|
+
set((state) => produce(state, (draft) => {
|
|
190
|
+
const tracked = draft.mosaic.clients[options.id];
|
|
191
|
+
if (tracked) {
|
|
192
|
+
tracked.isLoading = true;
|
|
193
|
+
tracked.error = undefined;
|
|
194
|
+
}
|
|
195
|
+
}));
|
|
196
|
+
};
|
|
197
|
+
const wrappedQueryError = (error) => {
|
|
198
|
+
set((state) => produce(state, (draft) => {
|
|
199
|
+
const tracked = draft.mosaic.clients[options.id];
|
|
200
|
+
if (tracked) {
|
|
201
|
+
tracked.isLoading = false;
|
|
202
|
+
tracked.error = error;
|
|
203
|
+
}
|
|
204
|
+
}));
|
|
205
|
+
client.enabled = false;
|
|
206
|
+
options.onQueryError?.(error);
|
|
207
|
+
options.queryError?.(error);
|
|
208
|
+
};
|
|
156
209
|
const client = makeClient({
|
|
157
210
|
coordinator: connection.coordinator,
|
|
158
211
|
selection,
|
|
159
212
|
query: options.query,
|
|
160
213
|
queryResult: wrappedQueryResult,
|
|
214
|
+
queryPending: wrappedQueryPending,
|
|
215
|
+
queryError: wrappedQueryError,
|
|
161
216
|
});
|
|
162
217
|
set((state) => produce(state, (draft) => {
|
|
163
218
|
draft.mosaic.clients[options.id] = {
|
|
@@ -166,6 +221,7 @@ export function createMosaicSlice(props = {}) {
|
|
|
166
221
|
createdAt: Date.now(),
|
|
167
222
|
isLoading: true,
|
|
168
223
|
data: null,
|
|
224
|
+
error: undefined,
|
|
169
225
|
selection,
|
|
170
226
|
queryResultCallback: options.onQueryResult
|
|
171
227
|
? (result) => options.onQueryResult(toArrowClientResult(result))
|
|
@@ -174,24 +230,20 @@ export function createMosaicSlice(props = {}) {
|
|
|
174
230
|
}));
|
|
175
231
|
},
|
|
176
232
|
destroyClient(id) {
|
|
177
|
-
const {
|
|
233
|
+
const { clients } = get().mosaic;
|
|
178
234
|
const tracked = clients[id];
|
|
179
235
|
if (!tracked)
|
|
180
236
|
return;
|
|
181
|
-
|
|
182
|
-
connection.coordinator.disconnect(tracked.client);
|
|
183
|
-
}
|
|
237
|
+
tracked.client.destroy();
|
|
184
238
|
set((state) => produce(state, (draft) => {
|
|
185
239
|
delete draft.mosaic.clients[id];
|
|
186
240
|
}));
|
|
187
241
|
},
|
|
188
242
|
destroyAllClients() {
|
|
189
|
-
const {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
});
|
|
194
|
-
}
|
|
243
|
+
const { clients } = get().mosaic;
|
|
244
|
+
Object.values(clients).forEach((tracked) => {
|
|
245
|
+
tracked.client.destroy();
|
|
246
|
+
});
|
|
195
247
|
set((state) => produce(state, (draft) => {
|
|
196
248
|
draft.mosaic.clients = {};
|
|
197
249
|
}));
|
|
@@ -199,6 +251,17 @@ export function createMosaicSlice(props = {}) {
|
|
|
199
251
|
},
|
|
200
252
|
}));
|
|
201
253
|
}
|
|
254
|
+
function applyMosaicPreAggregateOptions(mosaicCoordinator, options) {
|
|
255
|
+
if (!options) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
if (options.schema !== undefined) {
|
|
259
|
+
mosaicCoordinator.preaggregator.schema = options.schema;
|
|
260
|
+
}
|
|
261
|
+
if (options.enabled !== undefined) {
|
|
262
|
+
mosaicCoordinator.preaggregator.enabled = options.enabled;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
202
265
|
export function useStoreWithMosaic(selector) {
|
|
203
266
|
return useBaseRoomStore((state) => selector(state));
|
|
204
267
|
}
|