@sqlrooms/pivot 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/LICENSE.md ADDED
@@ -0,0 +1,9 @@
1
+ MIT License
2
+
3
+ Copyright 2025 SQLRooms Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,9 @@
1
1
  # @sqlrooms/pivot
2
2
 
3
3
  Slice-driven pivot table UI for SQLRooms, inspired by `react-pivottable` and backed by DuckDB SQL plus Vega-Lite charts.
4
+
5
+ ## Selection model
6
+
7
+ - `createPivotSlice` manages pivot definitions and runtime state, but not host-level selection.
8
+ - Host apps should decide which pivot is visible, for example with layout tabs or an artifacts/workspace registry.
9
+ - `PivotView` now requires an explicit `pivotId` prop.
@@ -1 +1 @@
1
- {"version":3,"file":"PivotCellContent.d.ts","sourceRoot":"","sources":["../src/PivotCellContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAMxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAA6B,MAAM,OAAO,CAAC;AAKlD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAEhD,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,eAAe,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,KAAK,CAAC,YAAY,CAAC;CACpE,CAAC;AAyCF,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAsD5D,CAAC"}
1
+ {"version":3,"file":"PivotCellContent.d.ts","sourceRoot":"","sources":["../src/PivotCellContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAOxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAA6B,MAAM,OAAO,CAAC;AAKlD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAEhD,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,eAAe,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,KAAK,CAAC,YAAY,CAAC;CACpE,CAAC;AA8CF,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA6D5D,CAAC"}
@@ -5,7 +5,7 @@ import { Label } from '@sqlrooms/ui';
5
5
  import { useCallback, useMemo } from 'react';
6
6
  import { useStore } from 'zustand';
7
7
  import { PivotEditor } from './PivotEditor';
8
- const PivotSourceSelect = ({ store }) => {
8
+ const PivotSourceSelect = ({ artifactId, store }) => {
9
9
  const source = useStore(store, (state) => state.source);
10
10
  const value = source
11
11
  ? source.kind === 'table'
@@ -22,13 +22,14 @@ const PivotSourceSelect = ({ store }) => {
22
22
  : undefined;
23
23
  store.getState().setSource(nextSource);
24
24
  }, [store]);
25
- return (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Source" }), _jsx(CellSourceSelector, { value: value, onValueChange: handleValueChange, className: "h-8 w-full" })] }));
25
+ return (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Source" }), _jsx(CellSourceSelector, { artifactId: artifactId, value: value, onValueChange: handleValueChange, className: "h-8 w-full" })] }));
26
26
  };
27
- export const PivotCellContent = ({ cell, renderContainer, }) => {
27
+ export const PivotCellContent = ({ id, cell, renderContainer, }) => {
28
28
  const pivotId = cell.data.pivotId;
29
29
  const getPivotStore = useBaseRoomStore((state) => state.pivot.getPivotStore);
30
+ const artifactId = useBaseRoomStore((state) => state.cells.getArtifactIdForCell(id));
30
31
  const pivotStore = useMemo(() => getPivotStore(pivotId), [getPivotStore, pivotId]);
31
- const content = (_jsx("div", { className: "h-[720px]", children: _jsxs(PivotEditor, { store: pivotStore, children: [_jsx(PivotEditor.Source, { children: _jsxs(_Fragment, { children: [_jsx(PivotSourceSelect, { store: pivotStore }), _jsx(PivotEditor.RendererSelector, {}), _jsx(PivotEditor.AggregatorSelector, {}), _jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx(Label, { children: "Values" }), _jsx(PivotEditor.RunButton, {})] }), _jsx(PivotEditor.Values, {})] })] }) }), _jsxs("div", { className: "grid min-h-0 flex-1 gap-4 xl:grid-cols-[380px_minmax(0,1fr)]", children: [_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "grid gap-4 md:grid-cols-2 xl:grid-cols-1", children: [_jsx(PivotEditor.Rows, {}), _jsx(PivotEditor.Columns, {})] }), _jsx(PivotEditor.AvailableFields, {})] }), _jsx(PivotEditor.Output, {})] })] }) }));
32
+ const content = (_jsx("div", { className: "h-[720px]", children: _jsxs(PivotEditor, { store: pivotStore, children: [_jsx(PivotEditor.Source, { children: _jsxs(_Fragment, { children: [_jsx(PivotSourceSelect, { artifactId: artifactId ?? '', store: pivotStore }), _jsx(PivotEditor.RendererSelector, {}), _jsx(PivotEditor.AggregatorSelector, {}), _jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx(Label, { children: "Values" }), _jsx(PivotEditor.RunButton, {})] }), _jsx(PivotEditor.Values, {})] })] }) }), _jsxs("div", { className: "grid min-h-0 flex-1 gap-4 xl:grid-cols-[380px_minmax(0,1fr)]", children: [_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "grid gap-4 md:grid-cols-2 xl:grid-cols-1", children: [_jsx(PivotEditor.Rows, {}), _jsx(PivotEditor.Columns, {})] }), _jsx(PivotEditor.AvailableFields, {})] }), _jsx(PivotEditor.Output, {})] })] }) }));
32
33
  return renderContainer({
33
34
  header: (_jsx("div", { className: "flex items-center gap-2", children: _jsx("span", { className: "text-[10px] font-bold text-gray-400 uppercase", children: "Pivot" }) })),
34
35
  content,
@@ -1 +1 @@
1
- {"version":3,"file":"PivotCellContent.js","sourceRoot":"","sources":["../src/PivotCellContent.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n type CellContainerProps,\n CellSourceSelector,\n toDataSourceCell,\n toDataSourceTable,\n fromDataSourceCell,\n fromDataSourceTable,\n} from '@sqlrooms/cells';\nimport {useBaseRoomStore} from '@sqlrooms/room-store';\nimport {Label} from '@sqlrooms/ui';\nimport React, {useCallback, useMemo} from 'react';\nimport {useStore} from 'zustand';\nimport {PivotEditor} from './PivotEditor';\nimport type {PivotInstanceStore} from './PivotCoreSlice';\nimport type {PivotSource, PivotSliceState} from './types';\nimport type {PivotCell} from './pivotCellTypes';\n\nexport type PivotCellContentProps = {\n id: string;\n cell: PivotCell;\n renderContainer: (props: CellContainerProps) => React.ReactElement;\n};\n\nconst PivotSourceSelect: React.FC<{store: PivotInstanceStore}> = ({store}) => {\n const source = useStore(store, (state) => state.source);\n\n const value = source\n ? source.kind === 'table'\n ? toDataSourceTable(source.tableName)\n : toDataSourceCell(source.sqlId)\n : undefined;\n\n const handleValueChange = useCallback(\n (nextValue: string) => {\n const tableRef = fromDataSourceTable(nextValue);\n const cellId = fromDataSourceCell(nextValue);\n\n const nextSource: PivotSource | undefined = tableRef\n ? {kind: 'table', tableName: tableRef}\n : cellId\n ? {kind: 'sql', sqlId: cellId}\n : undefined;\n\n store.getState().setSource(nextSource);\n },\n [store],\n );\n\n return (\n <div className=\"space-y-2\">\n <Label>Source</Label>\n <CellSourceSelector\n value={value}\n onValueChange={handleValueChange}\n className=\"h-8 w-full\"\n />\n </div>\n );\n};\n\ntype PivotRootState = PivotSliceState & {db: {tables: {tableName: string}[]}};\n\nexport const PivotCellContent: React.FC<PivotCellContentProps> = ({\n cell,\n renderContainer,\n}) => {\n const pivotId = cell.data.pivotId;\n const getPivotStore = useBaseRoomStore(\n (state: PivotRootState) => state.pivot.getPivotStore,\n );\n const pivotStore = useMemo(\n () => getPivotStore(pivotId),\n [getPivotStore, pivotId],\n );\n\n const content = (\n <div className=\"h-[720px]\">\n <PivotEditor store={pivotStore}>\n <PivotEditor.Source>\n <>\n <PivotSourceSelect store={pivotStore} />\n <PivotEditor.RendererSelector />\n <PivotEditor.AggregatorSelector />\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label>Values</Label>\n <PivotEditor.RunButton />\n </div>\n <PivotEditor.Values />\n </div>\n </>\n </PivotEditor.Source>\n <div className=\"grid min-h-0 flex-1 gap-4 xl:grid-cols-[380px_minmax(0,1fr)]\">\n <div className=\"space-y-4\">\n <div className=\"grid gap-4 md:grid-cols-2 xl:grid-cols-1\">\n <PivotEditor.Rows />\n <PivotEditor.Columns />\n </div>\n <PivotEditor.AvailableFields />\n </div>\n <PivotEditor.Output />\n </div>\n </PivotEditor>\n </div>\n );\n\n return renderContainer({\n header: (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-bold text-gray-400 uppercase\">\n Pivot\n </span>\n </div>\n ),\n content,\n });\n};\n"]}
1
+ {"version":3,"file":"PivotCellContent.js","sourceRoot":"","sources":["../src/PivotCellContent.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n type CellContainerProps,\n CellSourceSelector,\n type CellsRootState,\n toDataSourceCell,\n toDataSourceTable,\n fromDataSourceCell,\n fromDataSourceTable,\n} from '@sqlrooms/cells';\nimport {useBaseRoomStore} from '@sqlrooms/room-store';\nimport {Label} from '@sqlrooms/ui';\nimport React, {useCallback, useMemo} from 'react';\nimport {useStore} from 'zustand';\nimport {PivotEditor} from './PivotEditor';\nimport type {PivotInstanceStore} from './PivotCoreSlice';\nimport type {PivotSource, PivotSliceState} from './types';\nimport type {PivotCell} from './pivotCellTypes';\n\nexport type PivotCellContentProps = {\n id: string;\n cell: PivotCell;\n renderContainer: (props: CellContainerProps) => React.ReactElement;\n};\n\nconst PivotSourceSelect: React.FC<{\n artifactId: string;\n store: PivotInstanceStore;\n}> = ({artifactId, store}) => {\n const source = useStore(store, (state) => state.source);\n\n const value = source\n ? source.kind === 'table'\n ? toDataSourceTable(source.tableName)\n : toDataSourceCell(source.sqlId)\n : undefined;\n\n const handleValueChange = useCallback(\n (nextValue: string) => {\n const tableRef = fromDataSourceTable(nextValue);\n const cellId = fromDataSourceCell(nextValue);\n\n const nextSource: PivotSource | undefined = tableRef\n ? {kind: 'table', tableName: tableRef}\n : cellId\n ? {kind: 'sql', sqlId: cellId}\n : undefined;\n\n store.getState().setSource(nextSource);\n },\n [store],\n );\n\n return (\n <div className=\"space-y-2\">\n <Label>Source</Label>\n <CellSourceSelector\n artifactId={artifactId}\n value={value}\n onValueChange={handleValueChange}\n className=\"h-8 w-full\"\n />\n </div>\n );\n};\n\ntype PivotRootState = PivotSliceState &\n CellsRootState & {db: {tables: {tableName: string}[]}};\n\nexport const PivotCellContent: React.FC<PivotCellContentProps> = ({\n id,\n cell,\n renderContainer,\n}) => {\n const pivotId = cell.data.pivotId;\n const getPivotStore = useBaseRoomStore(\n (state: PivotRootState) => state.pivot.getPivotStore,\n );\n const artifactId = useBaseRoomStore((state: PivotRootState) =>\n state.cells.getArtifactIdForCell(id),\n );\n const pivotStore = useMemo(\n () => getPivotStore(pivotId),\n [getPivotStore, pivotId],\n );\n\n const content = (\n <div className=\"h-[720px]\">\n <PivotEditor store={pivotStore}>\n <PivotEditor.Source>\n <>\n <PivotSourceSelect\n artifactId={artifactId ?? ''}\n store={pivotStore}\n />\n <PivotEditor.RendererSelector />\n <PivotEditor.AggregatorSelector />\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label>Values</Label>\n <PivotEditor.RunButton />\n </div>\n <PivotEditor.Values />\n </div>\n </>\n </PivotEditor.Source>\n <div className=\"grid min-h-0 flex-1 gap-4 xl:grid-cols-[380px_minmax(0,1fr)]\">\n <div className=\"space-y-4\">\n <div className=\"grid gap-4 md:grid-cols-2 xl:grid-cols-1\">\n <PivotEditor.Rows />\n <PivotEditor.Columns />\n </div>\n <PivotEditor.AvailableFields />\n </div>\n <PivotEditor.Output />\n </div>\n </PivotEditor>\n </div>\n );\n\n return renderContainer({\n header: (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-bold text-gray-400 uppercase\">\n Pivot\n </span>\n </div>\n ),\n content,\n });\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PivotSlice.d.ts","sourceRoot":"","sources":["../src/PivotSlice.ts"],"names":[],"mappings":"AAyBA,OAAO,EACL,KAAK,WAAW,EAKhB,eAAe,EAChB,MAAM,SAAS,CAAC;AAyCjB,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,EAAE;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,GAAG;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;CACtD,mDAqbA"}
1
+ {"version":3,"file":"PivotSlice.d.ts","sourceRoot":"","sources":["../src/PivotSlice.ts"],"names":[],"mappings":"AA0BA,OAAO,EACL,KAAK,WAAW,EAKhB,eAAe,EAChB,MAAM,SAAS,CAAC;AAsCjB,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,EAAE;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,GAAG;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;CACtD,mDA4aA"}
@@ -1,18 +1,17 @@
1
+ import { createId } from '@paralleldrive/cuid2';
1
2
  import { createSlice } from '@sqlrooms/room-store';
2
3
  import { generateUniqueName } from '@sqlrooms/utils';
3
4
  import { produce } from 'immer';
4
- import { createId } from '@paralleldrive/cuid2';
5
+ import { createStore } from 'zustand/vanilla';
5
6
  import { addAttributeFilterValuesInConfig, clearAttributeFilterInConfig, createDefaultPivotConfig, moveFieldInConfig, nextSortOrder, normalizePivotConfig, removeAttributeFilterValuesInConfig, setAttributeFilterValuesInConfig, } from './PivotCoreSlice';
6
- import { createPivotQuerySourceFromTable } from './sql';
7
7
  import { createOrReplacePivotRelations, dropPivotRelations, } from './pivotExecution';
8
+ import { createPivotQuerySourceFromTable } from './sql';
8
9
  import { PivotSliceConfig, } from './types';
9
- import { createStore } from 'zustand/vanilla';
10
10
  function createInitialPivotSliceConfig(props) {
11
11
  if (!props?.config) {
12
12
  return PivotSliceConfig.parse({
13
13
  pivots: {},
14
14
  pivotOrder: [],
15
- currentPivotId: undefined,
16
15
  });
17
16
  }
18
17
  const id = createId();
@@ -24,14 +23,13 @@ function createInitialPivotSliceConfig(props) {
24
23
  pivots: {
25
24
  [id]: {
26
25
  id,
27
- title: 'Pivot 1',
26
+ title: 'Pivot',
28
27
  source,
29
28
  config,
30
29
  status: { state: 'idle', stale: false },
31
30
  },
32
31
  },
33
32
  pivotOrder: [id],
34
- currentPivotId: id,
35
33
  });
36
34
  }
37
35
  function resetPivotRuntimeStatus(status) {
@@ -66,11 +64,6 @@ export function createPivotSlice(props) {
66
64
  return;
67
65
  }
68
66
  set((state) => produce(state, (draft) => {
69
- if (!draft.pivot.config.currentPivotId &&
70
- draft.pivot.config.pivotOrder.length > 0) {
71
- draft.pivot.config.currentPivotId =
72
- draft.pivot.config.pivotOrder[0];
73
- }
74
67
  for (const pivotId of draft.pivot.config.pivotOrder) {
75
68
  const pivot = draft.pivot.config.pivots[pivotId];
76
69
  if (!pivot)
@@ -181,8 +174,10 @@ export function createPivotSlice(props) {
181
174
  return instanceStore;
182
175
  },
183
176
  addPivot(pivotProps) {
184
- const id = createId();
185
- const title = generateUniqueName(pivotProps?.title ?? 'Pivot 1', Object.values(get().pivot.config.pivots).map((pivot) => pivot.title), ' ');
177
+ const id = pivotProps?.id ?? createId();
178
+ const title = generateUniqueName(pivotProps?.title ?? 'Pivot', Object.values(get().pivot.config.pivots)
179
+ .filter((pivot) => pivot.id !== id)
180
+ .map((pivot) => pivot.title), ' ');
186
181
  const nextPivot = {
187
182
  id,
188
183
  title,
@@ -193,10 +188,20 @@ export function createPivotSlice(props) {
193
188
  set((state) => produce(state, (draft) => {
194
189
  draft.pivot.config.pivots[id] = nextPivot;
195
190
  draft.pivot.config.pivotOrder.push(id);
196
- draft.pivot.config.currentPivotId = id;
197
191
  }));
198
192
  return id;
199
193
  },
194
+ ensurePivot(pivotId, pivotProps) {
195
+ if (get().pivot.config.pivots[pivotId]) {
196
+ return;
197
+ }
198
+ get().pivot.addPivot({
199
+ id: pivotId,
200
+ title: pivotProps?.title,
201
+ source: pivotProps?.source,
202
+ config: pivotProps?.config,
203
+ });
204
+ },
200
205
  removePivot(pivotId) {
201
206
  pivotStores.get(pivotId)?.destroy();
202
207
  pivotStores.delete(pivotId);
@@ -212,15 +217,6 @@ export function createPivotSlice(props) {
212
217
  delete draft.pivot.config.pivots[pivotId];
213
218
  draft.pivot.config.pivotOrder =
214
219
  draft.pivot.config.pivotOrder.filter((id) => id !== pivotId);
215
- if (draft.pivot.config.currentPivotId === pivotId) {
216
- draft.pivot.config.currentPivotId =
217
- draft.pivot.config.pivotOrder[0];
218
- }
219
- }));
220
- },
221
- setCurrentPivot(pivotId) {
222
- set((state) => produce(state, (draft) => {
223
- draft.pivot.config.currentPivotId = pivotId;
224
220
  }));
225
221
  },
226
222
  renamePivot(pivotId, title) {
@@ -1 +1 @@
1
- {"version":3,"file":"PivotSlice.js","sourceRoot":"","sources":["../src/PivotSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {DuckDbSliceState} from '@sqlrooms/duckdb';\nimport {BaseRoomStoreState, createSlice} from '@sqlrooms/room-store';\nimport {generateUniqueName} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {createId} from '@paralleldrive/cuid2';\nimport {\n addAttributeFilterValuesInConfig,\n clearAttributeFilterInConfig,\n createDefaultPivotConfig,\n moveFieldInConfig,\n nextSortOrder,\n normalizePivotConfig,\n removeAttributeFilterValuesInConfig,\n setAttributeFilterValuesInConfig,\n} from './PivotCoreSlice';\nimport type {\n PivotInstanceSnapshot,\n PivotInstanceState,\n PivotInstanceStore,\n} from './PivotCoreSlice';\nimport {createPivotQuerySourceFromTable} from './sql';\nimport {\n createOrReplacePivotRelations,\n dropPivotRelations,\n} from './pivotExecution';\nimport {\n type PivotConfig,\n type PivotSliceConfig as PivotSlicePersistedConfig,\n type PivotSource,\n type PivotStatus,\n PivotSliceConfig,\n PivotSliceState,\n} from './types';\nimport {createStore} from 'zustand/vanilla';\n\nfunction createInitialPivotSliceConfig(props?: {\n config?: Partial<PivotConfig & {tableName?: string}>;\n}): PivotSlicePersistedConfig {\n if (!props?.config) {\n return PivotSliceConfig.parse({\n pivots: {},\n pivotOrder: [],\n currentPivotId: undefined,\n });\n }\n const id = createId();\n const source = props?.config?.tableName\n ? ({kind: 'table', tableName: props.config.tableName} as PivotSource)\n : undefined;\n const config = createDefaultPivotConfig(props?.config);\n return PivotSliceConfig.parse({\n pivots: {\n [id]: {\n id,\n title: 'Pivot 1',\n source,\n config,\n status: {state: 'idle', stale: false},\n },\n },\n pivotOrder: [id],\n currentPivotId: id,\n });\n}\n\nfunction resetPivotRuntimeStatus(status: PivotStatus): PivotStatus {\n return {\n state: 'idle',\n stale: true,\n lastRunTime: status.lastRunTime,\n };\n}\n\nexport function createPivotSlice(props?: {\n config?: Partial<PivotConfig & {tableName?: string}>;\n}) {\n type RootState = BaseRoomStoreState & DuckDbSliceState & PivotSliceState;\n const pivotStores = new Map<string, PivotInstanceStore>();\n\n return createSlice<PivotSliceState, RootState>((set, get, store) => {\n /**\n * Shared helper: mutate a pivot's config and reset its runtime status.\n * `updater` receives the current config and returns the new one.\n */\n const updatePivotConfig = (\n pivotId: string,\n updater: (config: PivotConfig) => PivotConfig,\n ) => {\n set((state) =>\n produce(state, (draft) => {\n const pivot = draft.pivot.config.pivots[pivotId];\n if (!pivot) return;\n pivot.config = updater(pivot.config);\n pivot.status = resetPivotRuntimeStatus(pivot.status);\n }),\n );\n };\n\n return {\n pivot: {\n config: createInitialPivotSliceConfig(props),\n\n async initialize() {\n const tables = get().db.tables;\n if (tables.length === 0) {\n return;\n }\n set((state) =>\n produce(state, (draft) => {\n if (\n !draft.pivot.config.currentPivotId &&\n draft.pivot.config.pivotOrder.length > 0\n ) {\n draft.pivot.config.currentPivotId =\n draft.pivot.config.pivotOrder[0];\n }\n\n for (const pivotId of draft.pivot.config.pivotOrder) {\n const pivot = draft.pivot.config.pivots[pivotId];\n if (!pivot) continue;\n if (pivot.source?.kind === 'table') {\n const tableName = pivot.source.tableName;\n const table =\n tables.find(\n (candidate) => candidate.tableName === tableName,\n ) ?? tables[0];\n if (table) {\n pivot.source = {kind: 'table', tableName: table.tableName};\n pivot.config = normalizePivotConfig(\n pivot.config,\n table.columns,\n );\n }\n }\n pivot.status = resetPivotRuntimeStatus(pivot.status);\n }\n }),\n );\n },\n\n getPivotStore(pivotId) {\n const existing = pivotStores.get(pivotId);\n if (existing) return existing;\n\n function getSnapshot(): PivotInstanceSnapshot {\n const rootState = get();\n const pivot = rootState.pivot.config.pivots[pivotId];\n const availableTables = rootState.db.tables.map((t) => t.tableName);\n if (!pivot) {\n return {\n source: undefined,\n config: createDefaultPivotConfig(),\n status: {state: 'idle', stale: false},\n querySource: undefined,\n fields: [],\n availableTables,\n };\n }\n const tableSource =\n pivot.source?.kind === 'table' ? pivot.source : undefined;\n const table = tableSource\n ? rootState.db.tables.find(\n (t) => t.tableName === tableSource.tableName,\n )\n : undefined;\n const querySource = table\n ? createPivotQuerySourceFromTable(table)\n : undefined;\n return {\n source: pivot.source,\n config: pivot.config,\n status: pivot.status,\n querySource,\n fields: querySource?.columns ?? [],\n availableTables,\n };\n }\n\n let currentSnapshot = getSnapshot();\n\n const adapterStore = createStore<PivotInstanceState>(\n (adapterSet) => ({\n ...currentSnapshot,\n ui: {sectionOpenState: {}},\n setSource: (source) => get().pivot.setSource(pivotId, source),\n setConfig: (config) => get().pivot.setConfig(pivotId, config),\n patchConfig: (partial) =>\n get().pivot.patchConfig(pivotId, partial),\n setRendererName: (v) => get().pivot.setRendererName(pivotId, v),\n setAggregatorName: (v) =>\n get().pivot.setAggregatorName(pivotId, v),\n setVals: (v) => get().pivot.setVals(pivotId, v),\n moveField: (field, dest, idx) =>\n get().pivot.moveField(pivotId, field, dest, idx),\n cycleRowOrder: () => get().pivot.cycleRowOrder(pivotId),\n cycleColOrder: () => get().pivot.cycleColOrder(pivotId),\n setAttributeFilterValues: (a, v) =>\n get().pivot.setAttributeFilterValues(pivotId, a, v),\n addAttributeFilterValues: (a, v) =>\n get().pivot.addAttributeFilterValues(pivotId, a, v),\n removeAttributeFilterValues: (a, v) =>\n get().pivot.removeAttributeFilterValues(pivotId, a, v),\n clearAttributeFilter: (a) =>\n get().pivot.clearAttributeFilter(pivotId, a),\n setSectionOpen: (section, isOpen) =>\n adapterSet((state) => ({\n ui: {\n ...state.ui,\n sectionOpenState: {\n ...state.ui.sectionOpenState,\n [section]: isOpen,\n },\n },\n })),\n run: () => get().pivot.runPivot(pivotId),\n }),\n );\n\n const unsubscribe = store.subscribe(() => {\n const nextSnapshot = getSnapshot();\n const prev = currentSnapshot;\n if (\n JSON.stringify(prev.source) ===\n JSON.stringify(nextSnapshot.source) &&\n JSON.stringify(prev.config) ===\n JSON.stringify(nextSnapshot.config) &&\n JSON.stringify(prev.status) ===\n JSON.stringify(nextSnapshot.status) &&\n JSON.stringify(prev.querySource) ===\n JSON.stringify(nextSnapshot.querySource) &&\n prev.fields.length === nextSnapshot.fields.length &&\n prev.fields.every(\n (f, i) =>\n f.name === nextSnapshot.fields[i]?.name &&\n f.type === nextSnapshot.fields[i]?.type,\n ) &&\n prev.availableTables.length ===\n nextSnapshot.availableTables.length &&\n prev.availableTables.every(\n (t, i) => t === nextSnapshot.availableTables[i],\n )\n ) {\n return;\n }\n currentSnapshot = nextSnapshot;\n adapterStore.setState(nextSnapshot);\n });\n\n const instanceStore: PivotInstanceStore = Object.assign(\n adapterStore,\n {\n destroy: () => {\n unsubscribe();\n pivotStores.delete(pivotId);\n },\n },\n );\n pivotStores.set(pivotId, instanceStore);\n return instanceStore;\n },\n\n addPivot(pivotProps) {\n const id = createId();\n const title = generateUniqueName(\n pivotProps?.title ?? 'Pivot 1',\n Object.values(get().pivot.config.pivots).map(\n (pivot) => pivot.title,\n ),\n ' ',\n );\n const nextPivot = {\n id,\n title,\n source: pivotProps?.source,\n config: createDefaultPivotConfig(pivotProps?.config),\n status: {state: 'idle', stale: false} satisfies PivotStatus,\n };\n set((state) =>\n produce(state, (draft) => {\n draft.pivot.config.pivots[id] = nextPivot;\n draft.pivot.config.pivotOrder.push(id);\n draft.pivot.config.currentPivotId = id;\n }),\n );\n return id;\n },\n\n removePivot(pivotId) {\n pivotStores.get(pivotId)?.destroy();\n pivotStores.delete(pivotId);\n const relations =\n get().pivot.config.pivots[pivotId]?.status.relations;\n void (async () => {\n if (!relations) return;\n const connector = await get().db.getConnector();\n await dropPivotRelations({connector, relations});\n void get().db.refreshTableSchemas();\n })();\n set((state) =>\n produce(state, (draft) => {\n delete draft.pivot.config.pivots[pivotId];\n draft.pivot.config.pivotOrder =\n draft.pivot.config.pivotOrder.filter((id) => id !== pivotId);\n if (draft.pivot.config.currentPivotId === pivotId) {\n draft.pivot.config.currentPivotId =\n draft.pivot.config.pivotOrder[0];\n }\n }),\n );\n },\n\n setCurrentPivot(pivotId) {\n set((state) =>\n produce(state, (draft) => {\n draft.pivot.config.currentPivotId = pivotId;\n }),\n );\n },\n\n renamePivot(pivotId, title) {\n set((state) =>\n produce(state, (draft) => {\n const pivot = draft.pivot.config.pivots[pivotId];\n if (pivot) {\n pivot.title = title;\n }\n }),\n );\n },\n\n setSource(pivotId, source) {\n set((state) =>\n produce(state, (draft) => {\n const pivot = draft.pivot.config.pivots[pivotId];\n if (!pivot) return;\n pivot.source = source;\n pivot.config = createDefaultPivotConfig();\n pivot.status = resetPivotRuntimeStatus(pivot.status);\n }),\n );\n },\n\n setStatus(pivotId, status) {\n set((state) =>\n produce(state, (draft) => {\n const pivot = draft.pivot.config.pivots[pivotId];\n if (!pivot) return;\n pivot.status = {...pivot.status, ...status};\n }),\n );\n },\n\n setConfig(pivotId, config) {\n const tableSource =\n get().pivot.config.pivots[pivotId]?.source?.kind === 'table'\n ? get().pivot.config.pivots[pivotId]!.source\n : undefined;\n const columns =\n tableSource?.kind === 'table'\n ? (get().db.tables.find(\n (t) => t.tableName === tableSource.tableName,\n )?.columns ?? [])\n : [];\n updatePivotConfig(pivotId, () =>\n normalizePivotConfig(config, columns),\n );\n },\n\n patchConfig(pivotId, config) {\n const tableSource =\n get().pivot.config.pivots[pivotId]?.source?.kind === 'table'\n ? get().pivot.config.pivots[pivotId]!.source\n : undefined;\n const columns =\n tableSource?.kind === 'table'\n ? (get().db.tables.find(\n (t) => t.tableName === tableSource.tableName,\n )?.columns ?? [])\n : [];\n updatePivotConfig(pivotId, (c) =>\n normalizePivotConfig({...c, ...config}, columns),\n );\n },\n\n setRendererName: (pivotId, rendererName) =>\n updatePivotConfig(pivotId, (c) => ({...c, rendererName})),\n\n setAggregatorName: (pivotId, aggregatorName) =>\n updatePivotConfig(pivotId, (c) => ({...c, aggregatorName})),\n\n setRows: (pivotId, rows) =>\n updatePivotConfig(pivotId, (c) => ({...c, rows})),\n\n setCols: (pivotId, cols) =>\n updatePivotConfig(pivotId, (c) => ({...c, cols})),\n\n setVals: (pivotId, vals) =>\n updatePivotConfig(pivotId, (c) => ({...c, vals})),\n\n setUnusedOrder: (pivotId, unusedOrder) =>\n updatePivotConfig(pivotId, (c) => ({...c, unusedOrder})),\n\n moveField: (pivotId, field, destination, index) =>\n updatePivotConfig(pivotId, (c) =>\n moveFieldInConfig(c, field, destination, index),\n ),\n\n cycleRowOrder: (pivotId) =>\n updatePivotConfig(pivotId, (c) => ({\n ...c,\n rowOrder: nextSortOrder(c.rowOrder),\n })),\n\n cycleColOrder: (pivotId) =>\n updatePivotConfig(pivotId, (c) => ({\n ...c,\n colOrder: nextSortOrder(c.colOrder),\n })),\n\n setAttributeFilterValues: (pivotId, attribute, values) =>\n updatePivotConfig(pivotId, (c) =>\n setAttributeFilterValuesInConfig(c, attribute, values),\n ),\n\n addAttributeFilterValues: (pivotId, attribute, values) =>\n updatePivotConfig(pivotId, (c) =>\n addAttributeFilterValuesInConfig(c, attribute, values),\n ),\n\n removeAttributeFilterValues: (pivotId, attribute, values) =>\n updatePivotConfig(pivotId, (c) =>\n removeAttributeFilterValuesInConfig(c, attribute, values),\n ),\n\n clearAttributeFilter: (pivotId, attribute) =>\n updatePivotConfig(pivotId, (c) =>\n clearAttributeFilterInConfig(c, attribute),\n ),\n\n async runPivot(pivotId, opts) {\n const state = get();\n const pivot = state.pivot.config.pivots[pivotId];\n if (!pivot) return;\n\n const schemaName = opts?.schemaName ?? '__sqlrooms_pivot';\n\n let querySource = opts?.querySource;\n if (!querySource) {\n const tableSource =\n pivot.source?.kind === 'table' ? pivot.source : undefined;\n if (!tableSource) return;\n const table = state.db.tables.find(\n (t) => t.tableName === tableSource.tableName,\n );\n if (!table) return;\n querySource = createPivotQuerySourceFromTable(table);\n }\n\n set((current) =>\n produce(current, (draft) => {\n const p = draft.pivot.config.pivots[pivotId];\n if (!p) return;\n p.status = {...p.status, state: 'running'};\n }),\n );\n\n try {\n const connector = await state.db.getConnector();\n const normalizedConfig = normalizePivotConfig(\n pivot.config,\n querySource.columns,\n );\n const relations = await createOrReplacePivotRelations({\n connector,\n source: querySource,\n config: normalizedConfig,\n relationBaseName: `pivot_${pivotId}`,\n schemaName,\n });\n set((current) =>\n produce(current, (draft) => {\n const p = draft.pivot.config.pivots[pivotId];\n if (!p) return;\n p.config = normalizedConfig;\n p.status = {\n state: 'success',\n stale: false,\n lastRunTime: Date.now(),\n relations,\n sourceRelation: querySource!.tableRef,\n };\n }),\n );\n void get().db.refreshTableSchemas();\n } catch (error) {\n set((current) =>\n produce(current, (draft) => {\n const p = draft.pivot.config.pivots[pivotId];\n if (!p) return;\n p.status = {\n ...p.status,\n state: 'error',\n lastError:\n error instanceof Error ? error.message : String(error),\n };\n }),\n );\n }\n },\n },\n };\n });\n}\n"]}
1
+ {"version":3,"file":"PivotSlice.js","sourceRoot":"","sources":["../src/PivotSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {DuckDbSliceState} from '@sqlrooms/duckdb';\nimport {BaseRoomStoreState, createSlice} from '@sqlrooms/room-store';\nimport {generateUniqueName} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {createStore} from 'zustand/vanilla';\nimport type {\n PivotInstanceSnapshot,\n PivotInstanceState,\n PivotInstanceStore,\n} from './PivotCoreSlice';\nimport {\n addAttributeFilterValuesInConfig,\n clearAttributeFilterInConfig,\n createDefaultPivotConfig,\n moveFieldInConfig,\n nextSortOrder,\n normalizePivotConfig,\n removeAttributeFilterValuesInConfig,\n setAttributeFilterValuesInConfig,\n} from './PivotCoreSlice';\nimport {\n createOrReplacePivotRelations,\n dropPivotRelations,\n} from './pivotExecution';\nimport {createPivotQuerySourceFromTable} from './sql';\nimport {\n type PivotConfig,\n type PivotSliceConfig as PivotSlicePersistedConfig,\n type PivotSource,\n type PivotStatus,\n PivotSliceConfig,\n PivotSliceState,\n} from './types';\n\nfunction createInitialPivotSliceConfig(props?: {\n config?: Partial<PivotConfig & {tableName?: string}>;\n}): PivotSlicePersistedConfig {\n if (!props?.config) {\n return PivotSliceConfig.parse({\n pivots: {},\n pivotOrder: [],\n });\n }\n const id = createId();\n const source = props?.config?.tableName\n ? ({kind: 'table', tableName: props.config.tableName} as PivotSource)\n : undefined;\n const config = createDefaultPivotConfig(props?.config);\n return PivotSliceConfig.parse({\n pivots: {\n [id]: {\n id,\n title: 'Pivot',\n source,\n config,\n status: {state: 'idle', stale: false},\n },\n },\n pivotOrder: [id],\n });\n}\n\nfunction resetPivotRuntimeStatus(status: PivotStatus): PivotStatus {\n return {\n state: 'idle',\n stale: true,\n lastRunTime: status.lastRunTime,\n };\n}\n\nexport function createPivotSlice(props?: {\n config?: Partial<PivotConfig & {tableName?: string}>;\n}) {\n type RootState = BaseRoomStoreState & DuckDbSliceState & PivotSliceState;\n const pivotStores = new Map<string, PivotInstanceStore>();\n\n return createSlice<PivotSliceState, RootState>((set, get, store) => {\n /**\n * Shared helper: mutate a pivot's config and reset its runtime status.\n * `updater` receives the current config and returns the new one.\n */\n const updatePivotConfig = (\n pivotId: string,\n updater: (config: PivotConfig) => PivotConfig,\n ) => {\n set((state) =>\n produce(state, (draft) => {\n const pivot = draft.pivot.config.pivots[pivotId];\n if (!pivot) return;\n pivot.config = updater(pivot.config);\n pivot.status = resetPivotRuntimeStatus(pivot.status);\n }),\n );\n };\n\n return {\n pivot: {\n config: createInitialPivotSliceConfig(props),\n\n async initialize() {\n const tables = get().db.tables;\n if (tables.length === 0) {\n return;\n }\n set((state) =>\n produce(state, (draft) => {\n for (const pivotId of draft.pivot.config.pivotOrder) {\n const pivot = draft.pivot.config.pivots[pivotId];\n if (!pivot) continue;\n if (pivot.source?.kind === 'table') {\n const tableName = pivot.source.tableName;\n const table =\n tables.find(\n (candidate) => candidate.tableName === tableName,\n ) ?? tables[0];\n if (table) {\n pivot.source = {kind: 'table', tableName: table.tableName};\n pivot.config = normalizePivotConfig(\n pivot.config,\n table.columns,\n );\n }\n }\n pivot.status = resetPivotRuntimeStatus(pivot.status);\n }\n }),\n );\n },\n\n getPivotStore(pivotId) {\n const existing = pivotStores.get(pivotId);\n if (existing) return existing;\n\n function getSnapshot(): PivotInstanceSnapshot {\n const rootState = get();\n const pivot = rootState.pivot.config.pivots[pivotId];\n const availableTables = rootState.db.tables.map((t) => t.tableName);\n if (!pivot) {\n return {\n source: undefined,\n config: createDefaultPivotConfig(),\n status: {state: 'idle', stale: false},\n querySource: undefined,\n fields: [],\n availableTables,\n };\n }\n const tableSource =\n pivot.source?.kind === 'table' ? pivot.source : undefined;\n const table = tableSource\n ? rootState.db.tables.find(\n (t) => t.tableName === tableSource.tableName,\n )\n : undefined;\n const querySource = table\n ? createPivotQuerySourceFromTable(table)\n : undefined;\n return {\n source: pivot.source,\n config: pivot.config,\n status: pivot.status,\n querySource,\n fields: querySource?.columns ?? [],\n availableTables,\n };\n }\n\n let currentSnapshot = getSnapshot();\n\n const adapterStore = createStore<PivotInstanceState>(\n (adapterSet) => ({\n ...currentSnapshot,\n ui: {sectionOpenState: {}},\n setSource: (source) => get().pivot.setSource(pivotId, source),\n setConfig: (config) => get().pivot.setConfig(pivotId, config),\n patchConfig: (partial) =>\n get().pivot.patchConfig(pivotId, partial),\n setRendererName: (v) => get().pivot.setRendererName(pivotId, v),\n setAggregatorName: (v) =>\n get().pivot.setAggregatorName(pivotId, v),\n setVals: (v) => get().pivot.setVals(pivotId, v),\n moveField: (field, dest, idx) =>\n get().pivot.moveField(pivotId, field, dest, idx),\n cycleRowOrder: () => get().pivot.cycleRowOrder(pivotId),\n cycleColOrder: () => get().pivot.cycleColOrder(pivotId),\n setAttributeFilterValues: (a, v) =>\n get().pivot.setAttributeFilterValues(pivotId, a, v),\n addAttributeFilterValues: (a, v) =>\n get().pivot.addAttributeFilterValues(pivotId, a, v),\n removeAttributeFilterValues: (a, v) =>\n get().pivot.removeAttributeFilterValues(pivotId, a, v),\n clearAttributeFilter: (a) =>\n get().pivot.clearAttributeFilter(pivotId, a),\n setSectionOpen: (section, isOpen) =>\n adapterSet((state) => ({\n ui: {\n ...state.ui,\n sectionOpenState: {\n ...state.ui.sectionOpenState,\n [section]: isOpen,\n },\n },\n })),\n run: () => get().pivot.runPivot(pivotId),\n }),\n );\n\n const unsubscribe = store.subscribe(() => {\n const nextSnapshot = getSnapshot();\n const prev = currentSnapshot;\n if (\n JSON.stringify(prev.source) ===\n JSON.stringify(nextSnapshot.source) &&\n JSON.stringify(prev.config) ===\n JSON.stringify(nextSnapshot.config) &&\n JSON.stringify(prev.status) ===\n JSON.stringify(nextSnapshot.status) &&\n JSON.stringify(prev.querySource) ===\n JSON.stringify(nextSnapshot.querySource) &&\n prev.fields.length === nextSnapshot.fields.length &&\n prev.fields.every(\n (f, i) =>\n f.name === nextSnapshot.fields[i]?.name &&\n f.type === nextSnapshot.fields[i]?.type,\n ) &&\n prev.availableTables.length ===\n nextSnapshot.availableTables.length &&\n prev.availableTables.every(\n (t, i) => t === nextSnapshot.availableTables[i],\n )\n ) {\n return;\n }\n currentSnapshot = nextSnapshot;\n adapterStore.setState(nextSnapshot);\n });\n\n const instanceStore: PivotInstanceStore = Object.assign(\n adapterStore,\n {\n destroy: () => {\n unsubscribe();\n pivotStores.delete(pivotId);\n },\n },\n );\n pivotStores.set(pivotId, instanceStore);\n return instanceStore;\n },\n\n addPivot(pivotProps) {\n const id = pivotProps?.id ?? createId();\n const title = generateUniqueName(\n pivotProps?.title ?? 'Pivot',\n Object.values(get().pivot.config.pivots)\n .filter((pivot) => pivot.id !== id)\n .map((pivot) => pivot.title),\n ' ',\n );\n const nextPivot = {\n id,\n title,\n source: pivotProps?.source,\n config: createDefaultPivotConfig(pivotProps?.config),\n status: {state: 'idle', stale: false} satisfies PivotStatus,\n };\n set((state) =>\n produce(state, (draft) => {\n draft.pivot.config.pivots[id] = nextPivot;\n draft.pivot.config.pivotOrder.push(id);\n }),\n );\n return id;\n },\n\n ensurePivot(pivotId, pivotProps) {\n if (get().pivot.config.pivots[pivotId]) {\n return;\n }\n get().pivot.addPivot({\n id: pivotId,\n title: pivotProps?.title,\n source: pivotProps?.source,\n config: pivotProps?.config,\n });\n },\n\n removePivot(pivotId) {\n pivotStores.get(pivotId)?.destroy();\n pivotStores.delete(pivotId);\n const relations =\n get().pivot.config.pivots[pivotId]?.status.relations;\n void (async () => {\n if (!relations) return;\n const connector = await get().db.getConnector();\n await dropPivotRelations({connector, relations});\n void get().db.refreshTableSchemas();\n })();\n set((state) =>\n produce(state, (draft) => {\n delete draft.pivot.config.pivots[pivotId];\n draft.pivot.config.pivotOrder =\n draft.pivot.config.pivotOrder.filter((id) => id !== pivotId);\n }),\n );\n },\n\n renamePivot(pivotId, title) {\n set((state) =>\n produce(state, (draft) => {\n const pivot = draft.pivot.config.pivots[pivotId];\n if (pivot) {\n pivot.title = title;\n }\n }),\n );\n },\n\n setSource(pivotId, source) {\n set((state) =>\n produce(state, (draft) => {\n const pivot = draft.pivot.config.pivots[pivotId];\n if (!pivot) return;\n pivot.source = source;\n pivot.config = createDefaultPivotConfig();\n pivot.status = resetPivotRuntimeStatus(pivot.status);\n }),\n );\n },\n\n setStatus(pivotId, status) {\n set((state) =>\n produce(state, (draft) => {\n const pivot = draft.pivot.config.pivots[pivotId];\n if (!pivot) return;\n pivot.status = {...pivot.status, ...status};\n }),\n );\n },\n\n setConfig(pivotId, config) {\n const tableSource =\n get().pivot.config.pivots[pivotId]?.source?.kind === 'table'\n ? get().pivot.config.pivots[pivotId]!.source\n : undefined;\n const columns =\n tableSource?.kind === 'table'\n ? (get().db.tables.find(\n (t) => t.tableName === tableSource.tableName,\n )?.columns ?? [])\n : [];\n updatePivotConfig(pivotId, () =>\n normalizePivotConfig(config, columns),\n );\n },\n\n patchConfig(pivotId, config) {\n const tableSource =\n get().pivot.config.pivots[pivotId]?.source?.kind === 'table'\n ? get().pivot.config.pivots[pivotId]!.source\n : undefined;\n const columns =\n tableSource?.kind === 'table'\n ? (get().db.tables.find(\n (t) => t.tableName === tableSource.tableName,\n )?.columns ?? [])\n : [];\n updatePivotConfig(pivotId, (c) =>\n normalizePivotConfig({...c, ...config}, columns),\n );\n },\n\n setRendererName: (pivotId, rendererName) =>\n updatePivotConfig(pivotId, (c) => ({...c, rendererName})),\n\n setAggregatorName: (pivotId, aggregatorName) =>\n updatePivotConfig(pivotId, (c) => ({...c, aggregatorName})),\n\n setRows: (pivotId, rows) =>\n updatePivotConfig(pivotId, (c) => ({...c, rows})),\n\n setCols: (pivotId, cols) =>\n updatePivotConfig(pivotId, (c) => ({...c, cols})),\n\n setVals: (pivotId, vals) =>\n updatePivotConfig(pivotId, (c) => ({...c, vals})),\n\n setUnusedOrder: (pivotId, unusedOrder) =>\n updatePivotConfig(pivotId, (c) => ({...c, unusedOrder})),\n\n moveField: (pivotId, field, destination, index) =>\n updatePivotConfig(pivotId, (c) =>\n moveFieldInConfig(c, field, destination, index),\n ),\n\n cycleRowOrder: (pivotId) =>\n updatePivotConfig(pivotId, (c) => ({\n ...c,\n rowOrder: nextSortOrder(c.rowOrder),\n })),\n\n cycleColOrder: (pivotId) =>\n updatePivotConfig(pivotId, (c) => ({\n ...c,\n colOrder: nextSortOrder(c.colOrder),\n })),\n\n setAttributeFilterValues: (pivotId, attribute, values) =>\n updatePivotConfig(pivotId, (c) =>\n setAttributeFilterValuesInConfig(c, attribute, values),\n ),\n\n addAttributeFilterValues: (pivotId, attribute, values) =>\n updatePivotConfig(pivotId, (c) =>\n addAttributeFilterValuesInConfig(c, attribute, values),\n ),\n\n removeAttributeFilterValues: (pivotId, attribute, values) =>\n updatePivotConfig(pivotId, (c) =>\n removeAttributeFilterValuesInConfig(c, attribute, values),\n ),\n\n clearAttributeFilter: (pivotId, attribute) =>\n updatePivotConfig(pivotId, (c) =>\n clearAttributeFilterInConfig(c, attribute),\n ),\n\n async runPivot(pivotId, opts) {\n const state = get();\n const pivot = state.pivot.config.pivots[pivotId];\n if (!pivot) return;\n\n const schemaName = opts?.schemaName ?? '__sqlrooms_pivot';\n\n let querySource = opts?.querySource;\n if (!querySource) {\n const tableSource =\n pivot.source?.kind === 'table' ? pivot.source : undefined;\n if (!tableSource) return;\n const table = state.db.tables.find(\n (t) => t.tableName === tableSource.tableName,\n );\n if (!table) return;\n querySource = createPivotQuerySourceFromTable(table);\n }\n\n set((current) =>\n produce(current, (draft) => {\n const p = draft.pivot.config.pivots[pivotId];\n if (!p) return;\n p.status = {...p.status, state: 'running'};\n }),\n );\n\n try {\n const connector = await state.db.getConnector();\n const normalizedConfig = normalizePivotConfig(\n pivot.config,\n querySource.columns,\n );\n const relations = await createOrReplacePivotRelations({\n connector,\n source: querySource,\n config: normalizedConfig,\n relationBaseName: `pivot_${pivotId}`,\n schemaName,\n });\n set((current) =>\n produce(current, (draft) => {\n const p = draft.pivot.config.pivots[pivotId];\n if (!p) return;\n p.config = normalizedConfig;\n p.status = {\n state: 'success',\n stale: false,\n lastRunTime: Date.now(),\n relations,\n sourceRelation: querySource!.tableRef,\n };\n }),\n );\n void get().db.refreshTableSchemas();\n } catch (error) {\n set((current) =>\n produce(current, (draft) => {\n const p = draft.pivot.config.pivots[pivotId];\n if (!p) return;\n p.status = {\n ...p.status,\n state: 'error',\n lastError:\n error instanceof Error ? error.message : String(error),\n };\n }),\n );\n }\n },\n },\n };\n });\n}\n"]}
@@ -1,3 +1,5 @@
1
1
  import React from 'react';
2
- export declare const PivotView: React.FC;
2
+ export declare const PivotView: React.FC<{
3
+ pivotId: string;
4
+ }>;
3
5
  //# sourceMappingURL=PivotView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PivotView.d.ts","sourceRoot":"","sources":["../src/PivotView.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAuBhD,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAwC7B,CAAC"}
1
+ {"version":3,"file":"PivotView.d.ts","sourceRoot":"","sources":["../src/PivotView.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAuBhD,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAoCjD,CAAC"}
package/dist/PivotView.js CHANGED
@@ -7,33 +7,29 @@ const PivotViewContent = ({ pivotId }) => {
7
7
  const pivotStore = useMemo(() => getPivotStore(pivotId), [getPivotStore, pivotId]);
8
8
  return _jsx(PivotEditor, { store: pivotStore, autoRun: true });
9
9
  };
10
- export const PivotView = () => {
10
+ export const PivotView = ({ pivotId }) => {
11
11
  const tables = useBaseRoomStore((state) => state.db.tables);
12
- const pivotConfig = useBaseRoomStore((state) => state.pivot.config);
13
- const currentPivotId = pivotConfig.currentPivotId;
14
- const currentPivot = currentPivotId
15
- ? pivotConfig.pivots[currentPivotId]
16
- : undefined;
12
+ const pivot = useBaseRoomStore((state) => state.pivot.config.pivots[pivotId]);
17
13
  const setSource = useBaseRoomStore((state) => state.pivot.setSource);
18
14
  const selectedTable = useMemo(() => {
19
- if (currentPivot?.source?.kind !== 'table') {
15
+ if (pivot?.source?.kind !== 'table') {
20
16
  return tables[0];
21
17
  }
22
- const tableName = currentPivot.source.tableName;
18
+ const tableName = pivot.source.tableName;
23
19
  return tables.find((table) => table.tableName === tableName) ?? tables[0];
24
- }, [currentPivot?.source, tables]);
20
+ }, [pivot?.source, tables]);
25
21
  useEffect(() => {
26
- if (currentPivot && !currentPivot.source && selectedTable) {
27
- setSource(currentPivot.id, {
22
+ if (pivot && !pivot.source && selectedTable) {
23
+ setSource(pivot.id, {
28
24
  kind: 'table',
29
25
  tableName: selectedTable.tableName,
30
26
  });
31
27
  }
32
- }, [currentPivot, selectedTable, setSource]);
33
- const tableSource = currentPivot?.source?.kind === 'table' ? currentPivot.source : undefined;
34
- if (!currentPivot || !selectedTable || !tableSource) {
28
+ }, [pivot, selectedTable, setSource]);
29
+ const tableSource = pivot?.source?.kind === 'table' ? pivot.source : undefined;
30
+ if (!pivot || !selectedTable || !tableSource) {
35
31
  return null;
36
32
  }
37
- return _jsx(PivotViewContent, { pivotId: currentPivot.id });
33
+ return _jsx(PivotViewContent, { pivotId: pivot.id });
38
34
  };
39
35
  //# sourceMappingURL=PivotView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PivotView.js","sourceRoot":"","sources":["../src/PivotView.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAc,EAAC,SAAS,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAChD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAU1C,MAAM,gBAAgB,GAAgC,CAAC,EAAC,OAAO,EAAC,EAAE,EAAE;IAClE,MAAM,aAAa,GAAG,gBAAgB,CACpC,CAAC,KAAqB,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CACrD,CAAC;IACF,MAAM,UAAU,GAAG,OAAO,CACxB,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,EAC5B,CAAC,aAAa,EAAE,OAAO,CAAC,CACzB,CAAC;IAEF,OAAO,KAAC,WAAW,IAAC,KAAK,EAAE,UAAU,EAAE,OAAO,SAAG,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAa,GAAG,EAAE;IACtC,MAAM,MAAM,GAAG,gBAAgB,CAC7B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAC3B,CAAC;IACF,MAAM,WAAW,GAAG,gBAAgB,CAClC,CAAC,KAAqB,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAC9C,CAAC;IACF,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC;IAClD,MAAM,YAAY,GAAG,cAAc;QACjC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC;QACpC,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,SAAS,GAAG,gBAAgB,CAChC,CAAC,KAAqB,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CACjD,CAAC;IAEF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,IAAI,YAAY,EAAE,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3C,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC;QAChD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC;YAC1D,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE;gBACzB,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,aAAa,CAAC,SAAS;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7C,MAAM,WAAW,GACf,YAAY,EAAE,MAAM,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3E,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAC,gBAAgB,IAAC,OAAO,EAAE,YAAY,CAAC,EAAE,GAAI,CAAC;AACxD,CAAC,CAAC","sourcesContent":["import {DataTable} from '@sqlrooms/duckdb';\nimport type {BaseRoomStoreState} from '@sqlrooms/room-store';\nimport {useBaseRoomStore} from '@sqlrooms/room-store';\nimport React, {useEffect, useMemo} from 'react';\nimport {PivotEditor} from './PivotEditor';\nimport {PivotSliceState} from './types';\n\ntype PivotRootState = BaseRoomStoreState &\n PivotSliceState & {\n db: {\n tables: DataTable[];\n };\n };\n\nconst PivotViewContent: React.FC<{pivotId: string}> = ({pivotId}) => {\n const getPivotStore = useBaseRoomStore(\n (state: PivotRootState) => state.pivot.getPivotStore,\n );\n const pivotStore = useMemo(\n () => getPivotStore(pivotId),\n [getPivotStore, pivotId],\n );\n\n return <PivotEditor store={pivotStore} autoRun />;\n};\n\nexport const PivotView: React.FC = () => {\n const tables = useBaseRoomStore<PivotRootState, DataTable[]>(\n (state) => state.db.tables,\n );\n const pivotConfig = useBaseRoomStore(\n (state: PivotRootState) => state.pivot.config,\n );\n const currentPivotId = pivotConfig.currentPivotId;\n const currentPivot = currentPivotId\n ? pivotConfig.pivots[currentPivotId]\n : undefined;\n const setSource = useBaseRoomStore(\n (state: PivotRootState) => state.pivot.setSource,\n );\n\n const selectedTable = useMemo(() => {\n if (currentPivot?.source?.kind !== 'table') {\n return tables[0];\n }\n const tableName = currentPivot.source.tableName;\n return tables.find((table) => table.tableName === tableName) ?? tables[0];\n }, [currentPivot?.source, tables]);\n\n useEffect(() => {\n if (currentPivot && !currentPivot.source && selectedTable) {\n setSource(currentPivot.id, {\n kind: 'table',\n tableName: selectedTable.tableName,\n });\n }\n }, [currentPivot, selectedTable, setSource]);\n\n const tableSource =\n currentPivot?.source?.kind === 'table' ? currentPivot.source : undefined;\n\n if (!currentPivot || !selectedTable || !tableSource) {\n return null;\n }\n\n return <PivotViewContent pivotId={currentPivot.id} />;\n};\n"]}
1
+ {"version":3,"file":"PivotView.js","sourceRoot":"","sources":["../src/PivotView.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAc,EAAC,SAAS,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAChD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAU1C,MAAM,gBAAgB,GAAgC,CAAC,EAAC,OAAO,EAAC,EAAE,EAAE;IAClE,MAAM,aAAa,GAAG,gBAAgB,CACpC,CAAC,KAAqB,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CACrD,CAAC;IACF,MAAM,UAAU,GAAG,OAAO,CACxB,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,EAC5B,CAAC,aAAa,EAAE,OAAO,CAAC,CACzB,CAAC;IAEF,OAAO,KAAC,WAAW,IAAC,KAAK,EAAE,UAAU,EAAE,OAAO,SAAG,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAgC,CAAC,EAAC,OAAO,EAAC,EAAE,EAAE;IAClE,MAAM,MAAM,GAAG,gBAAgB,CAC7B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAC3B,CAAC;IACF,MAAM,KAAK,GAAG,gBAAgB,CAC5B,CAAC,KAAqB,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAC9D,CAAC;IACF,MAAM,SAAS,GAAG,gBAAgB,CAChC,CAAC,KAAqB,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CACjD,CAAC;IAEF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;YACpC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;QACzC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC;YAC5C,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE;gBAClB,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,aAAa,CAAC,SAAS;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;IAEtC,MAAM,WAAW,GACf,KAAK,EAAE,MAAM,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7D,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAC,gBAAgB,IAAC,OAAO,EAAE,KAAK,CAAC,EAAE,GAAI,CAAC;AACjD,CAAC,CAAC","sourcesContent":["import {DataTable} from '@sqlrooms/duckdb';\nimport type {BaseRoomStoreState} from '@sqlrooms/room-store';\nimport {useBaseRoomStore} from '@sqlrooms/room-store';\nimport React, {useEffect, useMemo} from 'react';\nimport {PivotEditor} from './PivotEditor';\nimport {PivotSliceState} from './types';\n\ntype PivotRootState = BaseRoomStoreState &\n PivotSliceState & {\n db: {\n tables: DataTable[];\n };\n };\n\nconst PivotViewContent: React.FC<{pivotId: string}> = ({pivotId}) => {\n const getPivotStore = useBaseRoomStore(\n (state: PivotRootState) => state.pivot.getPivotStore,\n );\n const pivotStore = useMemo(\n () => getPivotStore(pivotId),\n [getPivotStore, pivotId],\n );\n\n return <PivotEditor store={pivotStore} autoRun />;\n};\n\nexport const PivotView: React.FC<{pivotId: string}> = ({pivotId}) => {\n const tables = useBaseRoomStore<PivotRootState, DataTable[]>(\n (state) => state.db.tables,\n );\n const pivot = useBaseRoomStore(\n (state: PivotRootState) => state.pivot.config.pivots[pivotId],\n );\n const setSource = useBaseRoomStore(\n (state: PivotRootState) => state.pivot.setSource,\n );\n\n const selectedTable = useMemo(() => {\n if (pivot?.source?.kind !== 'table') {\n return tables[0];\n }\n const tableName = pivot.source.tableName;\n return tables.find((table) => table.tableName === tableName) ?? tables[0];\n }, [pivot?.source, tables]);\n\n useEffect(() => {\n if (pivot && !pivot.source && selectedTable) {\n setSource(pivot.id, {\n kind: 'table',\n tableName: selectedTable.tableName,\n });\n }\n }, [pivot, selectedTable, setSource]);\n\n const tableSource =\n pivot?.source?.kind === 'table' ? pivot.source : undefined;\n\n if (!pivot || !selectedTable || !tableSource) {\n return null;\n }\n\n return <PivotViewContent pivotId={pivot.id} />;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pivotCellRegistryEntry.d.ts","sourceRoot":"","sources":["../src/pivotCellRegistryEntry.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAIjB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAAc,KAAK,SAAS,EAAC,MAAM,kBAAkB,CAAC;AA2C7D,eAAO,MAAM,sBAAsB,EAAE,gBAAgB,CAAC,SAAS,CAwH9D,CAAC"}
1
+ {"version":3,"file":"pivotCellRegistryEntry.d.ts","sourceRoot":"","sources":["../src/pivotCellRegistryEntry.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAIjB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAc,KAAK,SAAS,EAAC,MAAM,kBAAkB,CAAC;AA2C7D,eAAO,MAAM,sBAAsB,EAAE,gBAAgB,CAAC,SAAS,CA0H9D,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { findSheetIdForCell, resolveSheetSchemaName } from '@sqlrooms/cells';
2
+ import { findArtifactIdForCell, resolveArtifactSchemaName, } from '@sqlrooms/cells';
3
3
  import { produce } from 'immer';
4
4
  import { PivotCellContent } from './PivotCellContent';
5
5
  import { isPivotCell } from './pivotCellTypes';
@@ -100,10 +100,12 @@ export const pivotCellRegistryEntry = {
100
100
  const pivot = state.pivot.config.pivots[pivotId];
101
101
  if (!pivot)
102
102
  return;
103
- const sheetId = findSheetIdForCell(state, id);
104
- const sheet = sheetId ? state.cells.config.sheets[sheetId] : undefined;
105
- const schemaName = sheet
106
- ? resolveSheetSchemaName(sheet)
103
+ const artifactId = findArtifactIdForCell(state, id);
104
+ const artifact = artifactId
105
+ ? state.cells.config.artifacts[artifactId]
106
+ : undefined;
107
+ const schemaName = artifact
108
+ ? resolveArtifactSchemaName(artifact)
107
109
  : opts?.schemaName || '__sqlrooms_pivot';
108
110
  let querySource;
109
111
  if (pivot.source?.kind === 'sql') {
@@ -1 +1 @@
1
- {"version":3,"file":"pivotCellRegistryEntry.js","sourceRoot":"","sources":["../src/pivotCellRegistryEntry.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {\n Cell,\n CellRegistryItem,\n CellsRootState,\n CellStatus,\n SqlCellStatus,\n} from '@sqlrooms/cells';\nimport {findSheetIdForCell, resolveSheetSchemaName} from '@sqlrooms/cells';\nimport {produce} from 'immer';\nimport {PivotCellContent} from './PivotCellContent';\nimport {isPivotCell, type PivotCell} from './pivotCellTypes';\nimport {createPivotQuerySource} from './sql';\nimport type {PivotQuerySource, PivotSliceState, PivotStatus} from './types';\n\ntype PivotRootState = CellsRootState & PivotSliceState;\n\nfunction pivotStatusToCellStatus(pivotStatus: PivotStatus): CellStatus {\n const statusMap: Record<string, string> = {\n idle: 'idle',\n running: 'running',\n success: 'success',\n error: 'error',\n };\n return {\n type: 'pivot',\n status: statusMap[pivotStatus.state] ?? 'idle',\n stale: pivotStatus.stale,\n lastError: pivotStatus.lastError,\n lastRunTime: pivotStatus.lastRunTime,\n };\n}\n\nfunction resolveSqlQuerySource(\n state: CellsRootState,\n sqlId: string,\n): PivotQuerySource | undefined {\n const sourceStatus = state.cells.status[sqlId];\n const resultView =\n sourceStatus?.type === 'sql'\n ? (sourceStatus as SqlCellStatus).resultView\n : undefined;\n if (!resultView) return undefined;\n\n const sourceResult = state.cells.getCellResult(sqlId)?.arrowTable;\n const columns = sourceResult?.schema.fields.map((field) => ({\n name: field.name,\n type: String(field.type),\n }));\n if (!columns?.length) return undefined;\n\n return createPivotQuerySource(resultView, columns);\n}\n\nexport const pivotCellRegistryEntry: CellRegistryItem<PivotCell> = {\n type: 'pivot',\n title: 'Pivot Table',\n\n createCell: ({id, get}) => {\n const state = get() as PivotRootState;\n const pivotId = state.pivot.addPivot({title: 'Pivot'});\n return {\n id,\n type: 'pivot',\n data: {pivotId},\n };\n },\n\n renderCell: ({id, cell, renderContainer}) => (\n <PivotCellContent\n id={id}\n cell={cell as PivotCell}\n renderContainer={renderContainer}\n />\n ),\n\n findDependencies: async () => {\n // We can't access PivotSlice from here (only cell data + cells map).\n // Pivot source info lives in PivotSlice, not in cell data.\n // TODO: if dependency tracking is needed, extend findDependencies args\n // to include the full store, or store the source kind in cell data.\n return [];\n },\n\n createStatus: (): CellStatus => ({\n type: 'pivot',\n status: 'idle',\n stale: true,\n }),\n\n onInitialize: () => {\n // PivotSlice.initialize() handles runtime resets.\n },\n\n onRemove: async ({id, get}) => {\n const state = get() as PivotRootState;\n const cell = state.cells.config.data[id];\n if (!cell || !isPivotCell(cell)) return;\n state.pivot.removePivot(cell.data.pivotId);\n },\n\n hasSemanticChange: (oldCell: Cell, newCell: Cell): boolean => {\n if (!isPivotCell(oldCell) || !isPivotCell(newCell)) return false;\n return oldCell.data.pivotId !== newCell.data.pivotId;\n },\n\n invalidateStatus: (currentStatus): CellStatus => ({\n type: 'pivot',\n status: 'idle',\n stale: true,\n lastRunTime: (currentStatus as {lastRunTime?: number}).lastRunTime,\n }),\n\n getRelationsToDrop: (): string[] => {\n // PivotSlice.removePivot() handles relation cleanup\n return [];\n },\n\n recordError: (currentStatus, message): CellStatus => ({\n ...currentStatus,\n status: 'error',\n stale: true,\n lastError: message,\n }),\n\n runCell: async ({id, opts, get, set}) => {\n const state = get() as PivotRootState;\n const cell = state.cells.config.data[id];\n if (!cell || !isPivotCell(cell)) return;\n\n const pivotId = cell.data.pivotId;\n const pivot = state.pivot.config.pivots[pivotId];\n if (!pivot) return;\n\n const sheetId = findSheetIdForCell(state, id);\n const sheet = sheetId ? state.cells.config.sheets[sheetId] : undefined;\n const schemaName = sheet\n ? resolveSheetSchemaName(sheet)\n : opts?.schemaName || '__sqlrooms_pivot';\n\n let querySource: PivotQuerySource | undefined;\n if (pivot.source?.kind === 'sql') {\n querySource = resolveSqlQuerySource(state, pivot.source.sqlId);\n if (!querySource) {\n set((s) =>\n produce(s, (draft) => {\n draft.cells.status[id] = {\n type: 'pivot',\n status: 'error',\n stale: true,\n lastError: 'Pivot source SQL cell has no results. Run it first.',\n };\n }),\n );\n return;\n }\n }\n\n await state.pivot.runPivot(pivotId, {\n cascade: opts?.cascade,\n schemaName,\n querySource,\n });\n\n const updatedState = get() as PivotRootState;\n const updatedPivot = updatedState.pivot.config.pivots[pivotId];\n if (updatedPivot) {\n set((s) =>\n produce(s, (draft) => {\n draft.cells.status[id] = pivotStatusToCellStatus(updatedPivot.status);\n }),\n );\n }\n },\n};\n"]}
1
+ {"version":3,"file":"pivotCellRegistryEntry.js","sourceRoot":"","sources":["../src/pivotCellRegistryEntry.tsx"],"names":[],"mappings":";AAOA,OAAO,EACL,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAC,sBAAsB,EAAC,MAAM,OAAO,CAAC;AAK7C,SAAS,uBAAuB,CAAC,WAAwB;IACvD,MAAM,SAAS,GAA2B;QACxC,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,OAAO;KACf,CAAC;IACF,OAAO;QACL,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,MAAM;QAC9C,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,WAAW,EAAE,WAAW,CAAC,WAAW;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAqB,EACrB,KAAa;IAEb,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,UAAU,GACd,YAAY,EAAE,IAAI,KAAK,KAAK;QAC1B,CAAC,CAAE,YAA8B,CAAC,UAAU;QAC5C,CAAC,CAAC,SAAS,CAAC;IAChB,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAElC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAClE,MAAM,OAAO,GAAG,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;KACzB,CAAC,CAAC,CAAC;IACJ,IAAI,CAAC,OAAO,EAAE,MAAM;QAAE,OAAO,SAAS,CAAC;IAEvC,OAAO,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAgC;IACjE,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,aAAa;IAEpB,UAAU,EAAE,CAAC,EAAC,EAAE,EAAE,GAAG,EAAC,EAAE,EAAE;QACxB,MAAM,KAAK,GAAG,GAAG,EAAoB,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAC,KAAK,EAAE,OAAO,EAAC,CAAC,CAAC;QACvD,OAAO;YACL,EAAE;YACF,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,EAAC,OAAO,EAAC;SAChB,CAAC;IACJ,CAAC;IAED,UAAU,EAAE,CAAC,EAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAC,EAAE,EAAE,CAAC,CAC3C,KAAC,gBAAgB,IACf,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,IAAiB,EACvB,eAAe,EAAE,eAAe,GAChC,CACH;IAED,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAC3B,qEAAqE;QACrE,2DAA2D;QAC3D,uEAAuE;QACvE,oEAAoE;QACpE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,YAAY,EAAE,GAAe,EAAE,CAAC,CAAC;QAC/B,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,IAAI;KACZ,CAAC;IAEF,YAAY,EAAE,GAAG,EAAE;QACjB,kDAAkD;IACpD,CAAC;IAED,QAAQ,EAAE,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAC,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,GAAG,EAAoB,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE,OAAO;QACxC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,iBAAiB,EAAE,CAAC,OAAa,EAAE,OAAa,EAAW,EAAE;QAC3D,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACjE,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;IACvD,CAAC;IAED,gBAAgB,EAAE,CAAC,aAAa,EAAc,EAAE,CAAC,CAAC;QAChD,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,IAAI;QACX,WAAW,EAAG,aAAwC,CAAC,WAAW;KACnE,CAAC;IAEF,kBAAkB,EAAE,GAAa,EAAE;QACjC,oDAAoD;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,WAAW,EAAE,CAAC,aAAa,EAAE,OAAO,EAAc,EAAE,CAAC,CAAC;QACpD,GAAG,aAAa;QAChB,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,OAAO;KACnB,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,EAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAC,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,GAAG,EAAoB,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE,OAAO;QAExC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,UAAU;YACzB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC;YAC1C,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,UAAU,GAAG,QAAQ;YACzB,CAAC,CAAC,yBAAyB,CAAC,QAAQ,CAAC;YACrC,CAAC,CAAC,IAAI,EAAE,UAAU,IAAI,kBAAkB,CAAC;QAE3C,IAAI,WAAyC,CAAC;QAC9C,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC;YACjC,WAAW,GAAG,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACR,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;oBACnB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG;wBACvB,IAAI,EAAE,OAAO;wBACb,MAAM,EAAE,OAAO;wBACf,KAAK,EAAE,IAAI;wBACX,SAAS,EAAE,qDAAqD;qBACjE,CAAC;gBACJ,CAAC,CAAC,CACH,CAAC;gBACF,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE;YAClC,OAAO,EAAE,IAAI,EAAE,OAAO;YACtB,UAAU;YACV,WAAW;SACZ,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,GAAG,EAAoB,CAAC;QAC7C,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,YAAY,EAAE,CAAC;YACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACR,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACxE,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC","sourcesContent":["import type {\n Cell,\n CellRegistryItem,\n CellsRootState,\n CellStatus,\n SqlCellStatus,\n} from '@sqlrooms/cells';\nimport {\n findArtifactIdForCell,\n resolveArtifactSchemaName,\n} from '@sqlrooms/cells';\nimport {produce} from 'immer';\nimport {PivotCellContent} from './PivotCellContent';\nimport {isPivotCell, type PivotCell} from './pivotCellTypes';\nimport {createPivotQuerySource} from './sql';\nimport type {PivotQuerySource, PivotSliceState, PivotStatus} from './types';\n\ntype PivotRootState = CellsRootState & PivotSliceState;\n\nfunction pivotStatusToCellStatus(pivotStatus: PivotStatus): CellStatus {\n const statusMap: Record<string, string> = {\n idle: 'idle',\n running: 'running',\n success: 'success',\n error: 'error',\n };\n return {\n type: 'pivot',\n status: statusMap[pivotStatus.state] ?? 'idle',\n stale: pivotStatus.stale,\n lastError: pivotStatus.lastError,\n lastRunTime: pivotStatus.lastRunTime,\n };\n}\n\nfunction resolveSqlQuerySource(\n state: CellsRootState,\n sqlId: string,\n): PivotQuerySource | undefined {\n const sourceStatus = state.cells.status[sqlId];\n const resultView =\n sourceStatus?.type === 'sql'\n ? (sourceStatus as SqlCellStatus).resultView\n : undefined;\n if (!resultView) return undefined;\n\n const sourceResult = state.cells.getCellResult(sqlId)?.arrowTable;\n const columns = sourceResult?.schema.fields.map((field) => ({\n name: field.name,\n type: String(field.type),\n }));\n if (!columns?.length) return undefined;\n\n return createPivotQuerySource(resultView, columns);\n}\n\nexport const pivotCellRegistryEntry: CellRegistryItem<PivotCell> = {\n type: 'pivot',\n title: 'Pivot Table',\n\n createCell: ({id, get}) => {\n const state = get() as PivotRootState;\n const pivotId = state.pivot.addPivot({title: 'Pivot'});\n return {\n id,\n type: 'pivot',\n data: {pivotId},\n };\n },\n\n renderCell: ({id, cell, renderContainer}) => (\n <PivotCellContent\n id={id}\n cell={cell as PivotCell}\n renderContainer={renderContainer}\n />\n ),\n\n findDependencies: async () => {\n // We can't access PivotSlice from here (only cell data + cells map).\n // Pivot source info lives in PivotSlice, not in cell data.\n // TODO: if dependency tracking is needed, extend findDependencies args\n // to include the full store, or store the source kind in cell data.\n return [];\n },\n\n createStatus: (): CellStatus => ({\n type: 'pivot',\n status: 'idle',\n stale: true,\n }),\n\n onInitialize: () => {\n // PivotSlice.initialize() handles runtime resets.\n },\n\n onRemove: async ({id, get}) => {\n const state = get() as PivotRootState;\n const cell = state.cells.config.data[id];\n if (!cell || !isPivotCell(cell)) return;\n state.pivot.removePivot(cell.data.pivotId);\n },\n\n hasSemanticChange: (oldCell: Cell, newCell: Cell): boolean => {\n if (!isPivotCell(oldCell) || !isPivotCell(newCell)) return false;\n return oldCell.data.pivotId !== newCell.data.pivotId;\n },\n\n invalidateStatus: (currentStatus): CellStatus => ({\n type: 'pivot',\n status: 'idle',\n stale: true,\n lastRunTime: (currentStatus as {lastRunTime?: number}).lastRunTime,\n }),\n\n getRelationsToDrop: (): string[] => {\n // PivotSlice.removePivot() handles relation cleanup\n return [];\n },\n\n recordError: (currentStatus, message): CellStatus => ({\n ...currentStatus,\n status: 'error',\n stale: true,\n lastError: message,\n }),\n\n runCell: async ({id, opts, get, set}) => {\n const state = get() as PivotRootState;\n const cell = state.cells.config.data[id];\n if (!cell || !isPivotCell(cell)) return;\n\n const pivotId = cell.data.pivotId;\n const pivot = state.pivot.config.pivots[pivotId];\n if (!pivot) return;\n\n const artifactId = findArtifactIdForCell(state, id);\n const artifact = artifactId\n ? state.cells.config.artifacts[artifactId]\n : undefined;\n const schemaName = artifact\n ? resolveArtifactSchemaName(artifact)\n : opts?.schemaName || '__sqlrooms_pivot';\n\n let querySource: PivotQuerySource | undefined;\n if (pivot.source?.kind === 'sql') {\n querySource = resolveSqlQuerySource(state, pivot.source.sqlId);\n if (!querySource) {\n set((s) =>\n produce(s, (draft) => {\n draft.cells.status[id] = {\n type: 'pivot',\n status: 'error',\n stale: true,\n lastError: 'Pivot source SQL cell has no results. Run it first.',\n };\n }),\n );\n return;\n }\n }\n\n await state.pivot.runPivot(pivotId, {\n cascade: opts?.cascade,\n schemaName,\n querySource,\n });\n\n const updatedState = get() as PivotRootState;\n const updatedPivot = updatedState.pivot.config.pivots[pivotId];\n if (updatedPivot) {\n set((s) =>\n produce(s, (draft) => {\n draft.cells.status[id] = pivotStatusToCellStatus(updatedPivot.status);\n }),\n );\n }\n },\n};\n"]}
package/dist/types.d.ts CHANGED
@@ -410,7 +410,6 @@ export declare const PivotSliceConfig: z.ZodObject<{
410
410
  } | undefined;
411
411
  }>>>>;
412
412
  pivotOrder: z.ZodDefault<z.ZodArray<z.ZodString>>;
413
- currentPivotId: z.ZodOptional<z.ZodString>;
414
413
  }, z.core.$strip>;
415
414
  export type PivotSliceConfig = z.infer<typeof PivotSliceConfig>;
416
415
  export type PivotDropZone = 'unused' | 'rows' | 'cols';
@@ -428,12 +427,17 @@ export type PivotSliceState = {
428
427
  initialize: () => Promise<void>;
429
428
  getPivotStore: (pivotId: string) => PivotInstanceStore;
430
429
  addPivot: (props?: {
430
+ id?: string;
431
431
  title?: string;
432
432
  source?: PivotSource;
433
433
  config?: Partial<PivotConfig>;
434
434
  }) => string;
435
+ ensurePivot: (pivotId: string, props?: {
436
+ title?: string;
437
+ source?: PivotSource;
438
+ config?: Partial<PivotConfig>;
439
+ }) => void;
435
440
  removePivot: (pivotId: string) => void;
436
- setCurrentPivot: (pivotId: string) => void;
437
441
  renamePivot: (pivotId: string, title: string) => void;
438
442
  setSource: (pivotId: string, source: PivotSource | undefined) => void;
439
443
  setStatus: (pivotId: string, status: Partial<PivotStatus>) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -102,6 +102,5 @@ export const PivotSliceItem = z
102
102
  export const PivotSliceConfig = z.object({
103
103
  pivots: z.record(z.string(), PivotSliceItem).default({}),
104
104
  pivotOrder: z.array(z.string()).default([]),
105
- currentPivotId: z.string().optional(),
106
105
  });
107
106
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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","sourcesContent":["import {SliceFunctions} from '@sqlrooms/room-store';\nimport {z} from 'zod';\nimport type {StoreApi} from 'zustand/vanilla';\n\nexport const PIVOT_RENDERER_NAMES = [\n 'Table',\n 'Table Heatmap',\n 'Table Col Heatmap',\n 'Table Row Heatmap',\n 'Exportable TSV',\n 'Grouped Column Chart',\n 'Stacked Column Chart',\n 'Grouped Bar Chart',\n 'Stacked Bar Chart',\n 'Line Chart',\n 'Dot Chart',\n 'Area Chart',\n 'Scatter Chart',\n 'Multiple Pie Chart',\n] as const;\n\nexport const PivotRendererName = z.enum(PIVOT_RENDERER_NAMES);\nexport type PivotRendererName = z.infer<typeof PivotRendererName>;\n\nexport const PivotSortOrder = z.enum([\n 'key_a_to_z',\n 'value_a_to_z',\n 'value_z_to_a',\n]);\nexport type PivotSortOrder = z.infer<typeof PivotSortOrder>;\n\nexport const PivotFilterMapSchema = z.record(z.string(), z.boolean());\nexport type PivotFilterMap = z.infer<typeof PivotFilterMapSchema>;\n\nexport const PivotValueFilterSchema = z.record(\n z.string(),\n PivotFilterMapSchema,\n);\nexport type PivotValueFilter = z.infer<typeof PivotValueFilterSchema>;\n\nexport const PivotConfig = z.object({\n rendererName: PivotRendererName.default('Table'),\n aggregatorName: z.string().default('Count'),\n rows: z.array(z.string()).default([]),\n cols: z.array(z.string()).default([]),\n vals: z.array(z.string()).default([]),\n valueFilter: PivotValueFilterSchema.default({}),\n rowOrder: PivotSortOrder.default('key_a_to_z'),\n colOrder: PivotSortOrder.default('key_a_to_z'),\n unusedOrder: z.array(z.string()).default([]),\n menuLimit: z.number().int().positive().default(500),\n hiddenAttributes: z.array(z.string()).default([]),\n hiddenFromAggregators: z.array(z.string()).default([]),\n hiddenFromDragDrop: z.array(z.string()).default([]),\n});\nexport type PivotConfig = z.infer<typeof PivotConfig>;\n\nexport const PivotSource = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('table'),\n tableName: z.string(),\n }),\n z.object({\n kind: z.literal('sql'),\n sqlId: z.string(),\n }),\n]);\nexport type PivotSource = z.infer<typeof PivotSource>;\n\nexport const PivotRelationViews = z.object({\n cells: z.string().optional(),\n rowTotals: z.string().optional(),\n colTotals: z.string().optional(),\n grandTotal: z.string().optional(),\n export: z.string().optional(),\n});\nexport type PivotRelationViews = z.infer<typeof PivotRelationViews>;\n\nexport const PivotRunState = z.enum([\n 'idle',\n 'running',\n 'success',\n 'cancel',\n 'error',\n]);\nexport type PivotRunState = z.infer<typeof PivotRunState>;\n\nexport const PivotStatus = z.object({\n state: PivotRunState.default('idle'),\n stale: z.boolean().default(false),\n lastError: z.string().optional(),\n lastRunTime: z.number().optional(),\n relations: PivotRelationViews.optional(),\n sourceRelation: z.string().optional(),\n});\nexport type PivotStatus = z.infer<typeof PivotStatus>;\n\nfunction sanitizePersistedPivotStatus(status: PivotStatus): PivotStatus {\n const hasEphemeralRuntimeState = Boolean(\n status.relations ||\n status.sourceRelation ||\n status.lastError ||\n status.state === 'running' ||\n status.state === 'success' ||\n status.state === 'cancel' ||\n status.state === 'error',\n );\n\n if (!hasEphemeralRuntimeState) {\n return status;\n }\n\n return {\n state: 'idle',\n stale: true,\n lastRunTime: status.lastRunTime,\n };\n}\n\nexport const PivotSliceItem = z\n .object({\n id: z.string(),\n title: z.string(),\n source: PivotSource.optional(),\n config: PivotConfig,\n status: PivotStatus.default({state: 'idle', stale: false}),\n })\n .transform((item) => ({\n ...item,\n status: sanitizePersistedPivotStatus(item.status),\n }));\nexport type PivotSliceItem = z.infer<typeof PivotSliceItem>;\n\nexport const PivotSliceConfig = z.object({\n pivots: z.record(z.string(), PivotSliceItem).default({}),\n pivotOrder: z.array(z.string()).default([]),\n currentPivotId: z.string().optional(),\n});\nexport type PivotSliceConfig = z.infer<typeof PivotSliceConfig>;\n\nexport type PivotDropZone = 'unused' | 'rows' | 'cols';\n\nexport type PivotField = {\n name: string;\n type: string;\n};\n\nexport type PivotQuerySource = {\n tableRef: string;\n columns: PivotField[];\n};\n\nexport type PivotSliceState = {\n pivot: SliceFunctions & {\n config: PivotSliceConfig;\n initialize: () => Promise<void>;\n getPivotStore: (pivotId: string) => PivotInstanceStore;\n addPivot: (props?: {\n title?: string;\n source?: PivotSource;\n config?: Partial<PivotConfig>;\n }) => string;\n removePivot: (pivotId: string) => void;\n setCurrentPivot: (pivotId: string) => void;\n renamePivot: (pivotId: string, title: string) => void;\n setSource: (pivotId: string, source: PivotSource | undefined) => void;\n setStatus: (pivotId: string, status: Partial<PivotStatus>) => void;\n setConfig: (pivotId: string, config: PivotConfig) => void;\n patchConfig: (pivotId: string, config: Partial<PivotConfig>) => void;\n setRendererName: (pivotId: string, rendererName: PivotRendererName) => void;\n setAggregatorName: (pivotId: string, aggregatorName: string) => void;\n setRows: (pivotId: string, rows: string[]) => void;\n setCols: (pivotId: string, cols: string[]) => void;\n setVals: (pivotId: string, vals: string[]) => void;\n setUnusedOrder: (pivotId: string, unusedOrder: string[]) => void;\n moveField: (\n pivotId: string,\n field: string,\n destination: PivotDropZone,\n index?: number,\n ) => void;\n cycleRowOrder: (pivotId: string) => void;\n cycleColOrder: (pivotId: string) => void;\n setAttributeFilterValues: (\n pivotId: string,\n attribute: string,\n values: string[],\n ) => void;\n addAttributeFilterValues: (\n pivotId: string,\n attribute: string,\n values: string[],\n ) => void;\n removeAttributeFilterValues: (\n pivotId: string,\n attribute: string,\n values: string[],\n ) => void;\n clearAttributeFilter: (pivotId: string, attribute: string) => void;\n runPivot: (\n pivotId: string,\n opts?: {\n cascade?: boolean;\n schemaName?: string;\n querySource?: PivotQuerySource;\n },\n ) => Promise<void>;\n };\n};\n\nexport type PivotEditorUiState = {\n sectionOpenState: Record<string, boolean>;\n};\n\nexport type PivotInstanceSnapshot = {\n source?: PivotSource;\n config: PivotConfig;\n status: PivotStatus;\n querySource?: PivotQuerySource;\n fields: PivotField[];\n availableTables: string[];\n};\n\nexport type PivotInstanceCallbacks = {\n setSource?: (source: PivotSource | undefined) => void;\n setConfig?: (config: PivotConfig) => void;\n run?: () => void | Promise<void>;\n};\n\nexport type PivotInstanceState = PivotInstanceSnapshot & {\n ui: PivotEditorUiState;\n setSource: (source: PivotSource | undefined) => void;\n setConfig: (config: PivotConfig) => void;\n patchConfig: (config: Partial<PivotConfig>) => void;\n setRendererName: (rendererName: PivotConfig['rendererName']) => void;\n setAggregatorName: (aggregatorName: string) => void;\n setVals: (vals: string[]) => void;\n moveField: (\n field: string,\n destination: PivotDropZone,\n index?: number,\n ) => void;\n cycleRowOrder: () => void;\n cycleColOrder: () => void;\n setAttributeFilterValues: (attribute: string, values: string[]) => void;\n addAttributeFilterValues: (attribute: string, values: string[]) => void;\n removeAttributeFilterValues: (attribute: string, values: string[]) => void;\n clearAttributeFilter: (attribute: string) => void;\n setSectionOpen: (section: string, isOpen: boolean) => void;\n run: () => Promise<void>;\n};\n\nexport type PivotInstanceStore = StoreApi<PivotInstanceState> & {\n destroy: () => void;\n};\n\nexport type CreatePivotCoreStoreProps = {\n source?: PivotSource;\n config?: Partial<PivotConfig>;\n status?: Partial<PivotStatus>;\n querySource?: PivotQuerySource;\n fields?: PivotField[];\n availableTables?: string[];\n callbacks?: PivotInstanceCallbacks;\n};\n\nexport type PivotOutputCell = {\n rowKey: string[];\n colKey: string[];\n value: number | string | null;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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","sourcesContent":["import {SliceFunctions} from '@sqlrooms/room-store';\nimport {z} from 'zod';\nimport type {StoreApi} from 'zustand/vanilla';\n\nexport const PIVOT_RENDERER_NAMES = [\n 'Table',\n 'Table Heatmap',\n 'Table Col Heatmap',\n 'Table Row Heatmap',\n 'Exportable TSV',\n 'Grouped Column Chart',\n 'Stacked Column Chart',\n 'Grouped Bar Chart',\n 'Stacked Bar Chart',\n 'Line Chart',\n 'Dot Chart',\n 'Area Chart',\n 'Scatter Chart',\n 'Multiple Pie Chart',\n] as const;\n\nexport const PivotRendererName = z.enum(PIVOT_RENDERER_NAMES);\nexport type PivotRendererName = z.infer<typeof PivotRendererName>;\n\nexport const PivotSortOrder = z.enum([\n 'key_a_to_z',\n 'value_a_to_z',\n 'value_z_to_a',\n]);\nexport type PivotSortOrder = z.infer<typeof PivotSortOrder>;\n\nexport const PivotFilterMapSchema = z.record(z.string(), z.boolean());\nexport type PivotFilterMap = z.infer<typeof PivotFilterMapSchema>;\n\nexport const PivotValueFilterSchema = z.record(\n z.string(),\n PivotFilterMapSchema,\n);\nexport type PivotValueFilter = z.infer<typeof PivotValueFilterSchema>;\n\nexport const PivotConfig = z.object({\n rendererName: PivotRendererName.default('Table'),\n aggregatorName: z.string().default('Count'),\n rows: z.array(z.string()).default([]),\n cols: z.array(z.string()).default([]),\n vals: z.array(z.string()).default([]),\n valueFilter: PivotValueFilterSchema.default({}),\n rowOrder: PivotSortOrder.default('key_a_to_z'),\n colOrder: PivotSortOrder.default('key_a_to_z'),\n unusedOrder: z.array(z.string()).default([]),\n menuLimit: z.number().int().positive().default(500),\n hiddenAttributes: z.array(z.string()).default([]),\n hiddenFromAggregators: z.array(z.string()).default([]),\n hiddenFromDragDrop: z.array(z.string()).default([]),\n});\nexport type PivotConfig = z.infer<typeof PivotConfig>;\n\nexport const PivotSource = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('table'),\n tableName: z.string(),\n }),\n z.object({\n kind: z.literal('sql'),\n sqlId: z.string(),\n }),\n]);\nexport type PivotSource = z.infer<typeof PivotSource>;\n\nexport const PivotRelationViews = z.object({\n cells: z.string().optional(),\n rowTotals: z.string().optional(),\n colTotals: z.string().optional(),\n grandTotal: z.string().optional(),\n export: z.string().optional(),\n});\nexport type PivotRelationViews = z.infer<typeof PivotRelationViews>;\n\nexport const PivotRunState = z.enum([\n 'idle',\n 'running',\n 'success',\n 'cancel',\n 'error',\n]);\nexport type PivotRunState = z.infer<typeof PivotRunState>;\n\nexport const PivotStatus = z.object({\n state: PivotRunState.default('idle'),\n stale: z.boolean().default(false),\n lastError: z.string().optional(),\n lastRunTime: z.number().optional(),\n relations: PivotRelationViews.optional(),\n sourceRelation: z.string().optional(),\n});\nexport type PivotStatus = z.infer<typeof PivotStatus>;\n\nfunction sanitizePersistedPivotStatus(status: PivotStatus): PivotStatus {\n const hasEphemeralRuntimeState = Boolean(\n status.relations ||\n status.sourceRelation ||\n status.lastError ||\n status.state === 'running' ||\n status.state === 'success' ||\n status.state === 'cancel' ||\n status.state === 'error',\n );\n\n if (!hasEphemeralRuntimeState) {\n return status;\n }\n\n return {\n state: 'idle',\n stale: true,\n lastRunTime: status.lastRunTime,\n };\n}\n\nexport const PivotSliceItem = z\n .object({\n id: z.string(),\n title: z.string(),\n source: PivotSource.optional(),\n config: PivotConfig,\n status: PivotStatus.default({state: 'idle', stale: false}),\n })\n .transform((item) => ({\n ...item,\n status: sanitizePersistedPivotStatus(item.status),\n }));\nexport type PivotSliceItem = z.infer<typeof PivotSliceItem>;\n\nexport const PivotSliceConfig = z.object({\n pivots: z.record(z.string(), PivotSliceItem).default({}),\n pivotOrder: z.array(z.string()).default([]),\n});\nexport type PivotSliceConfig = z.infer<typeof PivotSliceConfig>;\n\nexport type PivotDropZone = 'unused' | 'rows' | 'cols';\n\nexport type PivotField = {\n name: string;\n type: string;\n};\n\nexport type PivotQuerySource = {\n tableRef: string;\n columns: PivotField[];\n};\n\nexport type PivotSliceState = {\n pivot: SliceFunctions & {\n config: PivotSliceConfig;\n initialize: () => Promise<void>;\n getPivotStore: (pivotId: string) => PivotInstanceStore;\n addPivot: (props?: {\n id?: string;\n title?: string;\n source?: PivotSource;\n config?: Partial<PivotConfig>;\n }) => string;\n ensurePivot: (\n pivotId: string,\n props?: {\n title?: string;\n source?: PivotSource;\n config?: Partial<PivotConfig>;\n },\n ) => void;\n removePivot: (pivotId: string) => void;\n renamePivot: (pivotId: string, title: string) => void;\n setSource: (pivotId: string, source: PivotSource | undefined) => void;\n setStatus: (pivotId: string, status: Partial<PivotStatus>) => void;\n setConfig: (pivotId: string, config: PivotConfig) => void;\n patchConfig: (pivotId: string, config: Partial<PivotConfig>) => void;\n setRendererName: (pivotId: string, rendererName: PivotRendererName) => void;\n setAggregatorName: (pivotId: string, aggregatorName: string) => void;\n setRows: (pivotId: string, rows: string[]) => void;\n setCols: (pivotId: string, cols: string[]) => void;\n setVals: (pivotId: string, vals: string[]) => void;\n setUnusedOrder: (pivotId: string, unusedOrder: string[]) => void;\n moveField: (\n pivotId: string,\n field: string,\n destination: PivotDropZone,\n index?: number,\n ) => void;\n cycleRowOrder: (pivotId: string) => void;\n cycleColOrder: (pivotId: string) => void;\n setAttributeFilterValues: (\n pivotId: string,\n attribute: string,\n values: string[],\n ) => void;\n addAttributeFilterValues: (\n pivotId: string,\n attribute: string,\n values: string[],\n ) => void;\n removeAttributeFilterValues: (\n pivotId: string,\n attribute: string,\n values: string[],\n ) => void;\n clearAttributeFilter: (pivotId: string, attribute: string) => void;\n runPivot: (\n pivotId: string,\n opts?: {\n cascade?: boolean;\n schemaName?: string;\n querySource?: PivotQuerySource;\n },\n ) => Promise<void>;\n };\n};\n\nexport type PivotEditorUiState = {\n sectionOpenState: Record<string, boolean>;\n};\n\nexport type PivotInstanceSnapshot = {\n source?: PivotSource;\n config: PivotConfig;\n status: PivotStatus;\n querySource?: PivotQuerySource;\n fields: PivotField[];\n availableTables: string[];\n};\n\nexport type PivotInstanceCallbacks = {\n setSource?: (source: PivotSource | undefined) => void;\n setConfig?: (config: PivotConfig) => void;\n run?: () => void | Promise<void>;\n};\n\nexport type PivotInstanceState = PivotInstanceSnapshot & {\n ui: PivotEditorUiState;\n setSource: (source: PivotSource | undefined) => void;\n setConfig: (config: PivotConfig) => void;\n patchConfig: (config: Partial<PivotConfig>) => void;\n setRendererName: (rendererName: PivotConfig['rendererName']) => void;\n setAggregatorName: (aggregatorName: string) => void;\n setVals: (vals: string[]) => void;\n moveField: (\n field: string,\n destination: PivotDropZone,\n index?: number,\n ) => void;\n cycleRowOrder: () => void;\n cycleColOrder: () => void;\n setAttributeFilterValues: (attribute: string, values: string[]) => void;\n addAttributeFilterValues: (attribute: string, values: string[]) => void;\n removeAttributeFilterValues: (attribute: string, values: string[]) => void;\n clearAttributeFilter: (attribute: string) => void;\n setSectionOpen: (section: string, isOpen: boolean) => void;\n run: () => Promise<void>;\n};\n\nexport type PivotInstanceStore = StoreApi<PivotInstanceState> & {\n destroy: () => void;\n};\n\nexport type CreatePivotCoreStoreProps = {\n source?: PivotSource;\n config?: Partial<PivotConfig>;\n status?: Partial<PivotStatus>;\n querySource?: PivotQuerySource;\n fields?: PivotField[];\n availableTables?: string[];\n callbacks?: PivotInstanceCallbacks;\n};\n\nexport type PivotOutputCell = {\n rowKey: string[];\n colKey: string[];\n value: number | string | null;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sqlrooms/pivot",
3
- "version": "0.29.0-rc.2",
3
+ "version": "0.29.0-rc.3",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "module": "dist/index.js",
@@ -31,19 +31,19 @@
31
31
  "@dnd-kit/core": "^6.3.1",
32
32
  "@dnd-kit/sortable": "^10.0.0",
33
33
  "@paralleldrive/cuid2": "^3.0.0",
34
- "@sqlrooms/cells": "workspace:*",
35
- "@sqlrooms/duckdb": "workspace:*",
36
- "@sqlrooms/room-store": "workspace:*",
37
- "@sqlrooms/ui": "workspace:*",
38
- "@sqlrooms/utils": "workspace:*",
39
- "@sqlrooms/vega": "workspace:*",
34
+ "@sqlrooms/cells": "0.29.0-rc.3",
35
+ "@sqlrooms/duckdb": "0.29.0-rc.3",
36
+ "@sqlrooms/room-store": "0.29.0-rc.3",
37
+ "@sqlrooms/ui": "0.29.0-rc.3",
38
+ "@sqlrooms/utils": "0.29.0-rc.3",
39
+ "@sqlrooms/vega": "0.29.0-rc.3",
40
40
  "immer": "^11.0.1",
41
41
  "lucide-react": "^0.556.0",
42
42
  "zod": "^4.1.8",
43
43
  "zustand": "^5.0.8"
44
44
  },
45
45
  "devDependencies": {
46
- "@sqlrooms/preset-jest": "workspace:*",
46
+ "@sqlrooms/preset-jest": "0.29.0-rc.3",
47
47
  "@types/jest": "^30.0.0",
48
48
  "@types/react": "^19.1.13",
49
49
  "@types/react-dom": "^19.1.9",
@@ -54,5 +54,6 @@
54
54
  "apache-arrow": "17.0.0",
55
55
  "react": ">=18",
56
56
  "react-dom": ">=18"
57
- }
57
+ },
58
+ "gitHead": "4ffaf6c31d41c27f96bd3e4f5e83d431968721c3"
58
59
  }