@sqlrooms/cells 0.29.0-rc.2 → 0.29.0-rc.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +8 -8
  2. package/dist/cellsSlice.d.ts.map +1 -1
  3. package/dist/cellsSlice.js +121 -198
  4. package/dist/cellsSlice.js.map +1 -1
  5. package/dist/components/CellSourceSelector.d.ts +1 -0
  6. package/dist/components/CellSourceSelector.d.ts.map +1 -1
  7. package/dist/components/CellSourceSelector.js +8 -9
  8. package/dist/components/CellSourceSelector.js.map +1 -1
  9. package/dist/components/SqlCellContent.d.ts.map +1 -1
  10. package/dist/components/SqlCellContent.js +6 -10
  11. package/dist/components/SqlCellContent.js.map +1 -1
  12. package/dist/components/SqlCellDependentsMenu.d.ts +3 -3
  13. package/dist/components/SqlCellDependentsMenu.d.ts.map +1 -1
  14. package/dist/components/SqlCellDependentsMenu.js +4 -4
  15. package/dist/components/SqlCellDependentsMenu.js.map +1 -1
  16. package/dist/components/SqlCellResults.d.ts.map +1 -1
  17. package/dist/components/SqlCellResults.js +0 -1
  18. package/dist/components/SqlCellResults.js.map +1 -1
  19. package/dist/components/VegaCellContent.d.ts.map +1 -1
  20. package/dist/components/VegaCellContent.js +4 -39
  21. package/dist/components/VegaCellContent.js.map +1 -1
  22. package/dist/components/VegaCellHeader.d.ts +0 -3
  23. package/dist/components/VegaCellHeader.d.ts.map +1 -1
  24. package/dist/components/VegaCellHeader.js +5 -6
  25. package/dist/components/VegaCellHeader.js.map +1 -1
  26. package/dist/components/VegaConfigPanel.d.ts +0 -5
  27. package/dist/components/VegaConfigPanel.d.ts.map +1 -1
  28. package/dist/components/VegaConfigPanel.js +6 -37
  29. package/dist/components/VegaConfigPanel.js.map +1 -1
  30. package/dist/dagUtils.d.ts +9 -9
  31. package/dist/dagUtils.d.ts.map +1 -1
  32. package/dist/dagUtils.js +44 -42
  33. package/dist/dagUtils.js.map +1 -1
  34. package/dist/defaultCellRegistry.d.ts.map +1 -1
  35. package/dist/defaultCellRegistry.js +16 -12
  36. package/dist/defaultCellRegistry.js.map +1 -1
  37. package/dist/execution.d.ts.map +1 -1
  38. package/dist/execution.js +22 -16
  39. package/dist/execution.js.map +1 -1
  40. package/dist/helpers.d.ts +9 -17
  41. package/dist/helpers.d.ts.map +1 -1
  42. package/dist/helpers.js +24 -43
  43. package/dist/helpers.js.map +1 -1
  44. package/dist/hooks/useVegaCellQuery.d.ts +0 -4
  45. package/dist/hooks/useVegaCellQuery.d.ts.map +1 -1
  46. package/dist/hooks/useVegaCellQuery.js +2 -15
  47. package/dist/hooks/useVegaCellQuery.js.map +1 -1
  48. package/dist/index.d.ts +1 -3
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +1 -3
  51. package/dist/index.js.map +1 -1
  52. package/dist/sqlHelpers.d.ts +5 -5
  53. package/dist/sqlHelpers.d.ts.map +1 -1
  54. package/dist/sqlHelpers.js +7 -7
  55. package/dist/sqlHelpers.js.map +1 -1
  56. package/dist/types.d.ts +19 -47
  57. package/dist/types.d.ts.map +1 -1
  58. package/dist/types.js +6 -12
  59. package/dist/types.js.map +1 -1
  60. package/dist/useValidateResultName.js +5 -5
  61. package/dist/useValidateResultName.js.map +1 -1
  62. package/dist/utils.d.ts +2 -2
  63. package/dist/utils.d.ts.map +1 -1
  64. package/dist/utils.js +4 -4
  65. package/dist/utils.js.map +1 -1
  66. package/package.json +19 -19
  67. package/dist/components/DeleteSheetModal.d.ts +0 -9
  68. package/dist/components/DeleteSheetModal.d.ts.map +0 -1
  69. package/dist/components/DeleteSheetModal.js +0 -6
  70. package/dist/components/DeleteSheetModal.js.map +0 -1
  71. package/dist/components/SelectionListener.d.ts +0 -15
  72. package/dist/components/SelectionListener.d.ts.map +0 -1
  73. package/dist/components/SelectionListener.js +0 -74
  74. package/dist/components/SelectionListener.js.map +0 -1
  75. package/dist/components/SheetsTabBar.d.ts +0 -6
  76. package/dist/components/SheetsTabBar.d.ts.map +0 -1
  77. package/dist/components/SheetsTabBar.js +0 -58
  78. package/dist/components/SheetsTabBar.js.map +0 -1
  79. package/dist/components/SqlCellBody.d.ts +0 -6
  80. package/dist/components/SqlCellBody.d.ts.map +0 -1
  81. package/dist/components/SqlCellBody.js +0 -12
  82. package/dist/components/SqlCellBody.js.map +0 -1
  83. package/dist/crdt.d.ts +0 -61
  84. package/dist/crdt.d.ts.map +0 -1
  85. package/dist/crdt.js +0 -82
  86. package/dist/crdt.js.map +0 -1
  87. package/dist/dagSlice.d.ts +0 -3
  88. package/dist/dagSlice.d.ts.map +0 -1
  89. package/dist/dagSlice.js +0 -51
  90. package/dist/dagSlice.js.map +0 -1
  91. package/dist/typeGuards.d.ts +0 -2
  92. package/dist/typeGuards.d.ts.map +0 -1
  93. package/dist/typeGuards.js +0 -4
  94. package/dist/typeGuards.js.map +0 -1
  95. package/dist/validation.d.ts +0 -16
  96. package/dist/validation.d.ts.map +0 -1
  97. package/dist/validation.js +0 -40
  98. package/dist/validation.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"cellsSlice.js","sourceRoot":"","sources":["../src/cellsSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {makePagedQuery} from '@sqlrooms/data-table';\nimport {sanitizeQuery} from '@sqlrooms/duckdb';\nimport {createSlice} from '@sqlrooms/room-store';\nimport {\n convertToValidColumnOrTableName,\n generateUniqueName,\n} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {\n buildDependencyGraph,\n buildDependencyGraphAsync,\n buildGraphCacheFromEdges,\n collectReachable,\n ensureGraphCache,\n removeCellFromCache,\n replaceCellDependenciesInCache,\n topologicalOrder,\n} from './dagUtils';\nimport {\n findSheetIdForCell,\n getRequiredSqlSelectToJson,\n normalizeCellsConfigStructure,\n resolveDependencies,\n} from './helpers';\nimport {dropResultRelation} from './resultRelationPolicy';\nimport type {\n Cell,\n CellResultData,\n CellsRootState,\n CellsSliceConfig,\n CellsSliceOptions,\n CellsSliceState,\n CrossFilterSelection,\n Edge,\n SheetType,\n SqlCell,\n SqlCellData,\n} from './types';\nimport {isInputCell, isSqlCell} from './types';\nimport {getEffectiveResultName, getSheetSchemaName, isDefined} from './utils';\nimport {buildCrossFilterPredicate} from './vegaSelectionUtils';\n\nfunction createDefaultCellsConfig(\n config: Partial<CellsSliceConfig> | undefined,\n): CellsSliceConfig {\n const sheetId = createId();\n const defaultConfig: CellsSliceConfig = {\n data: {},\n sheets: {\n [sheetId]: {\n id: sheetId,\n type: 'notebook',\n title: 'Sheet',\n schemaName: getSheetSchemaName(sheetId),\n cellIds: [],\n edges: [],\n graphCache: {\n dependencies: {},\n dependents: {},\n contentHashByCell: {},\n tableDependencies: {},\n },\n },\n },\n sheetOrder: [sheetId],\n currentSheetId: sheetId,\n tableDepSchemas: ['main'],\n };\n\n if (!config) {\n return defaultConfig;\n }\n\n const {sheets, sheetOrder, currentSheetId} = normalizeCellsConfigStructure(\n config,\n defaultConfig,\n );\n\n return {\n ...defaultConfig,\n ...config,\n sheets,\n sheetOrder,\n currentSheetId,\n };\n}\n\n// --- Slice Implementation ---\n\nexport function createCellsSlice(props: CellsSliceOptions) {\n const {cellRegistry, supportedSheetTypes = ['notebook', 'canvas']} = props;\n const initialConfig = createDefaultCellsConfig(props?.config);\n // Keep result data outside Immer drafts, but scoped per slice instance.\n const cellResultCache = new Map<string, CellResultData>();\n return createSlice<CellsSliceState, CellsRootState>((set, get, store) => {\n const dropRelationBestEffort = async (relationName: string) => {\n try {\n const connector = await get().db.getConnector();\n await dropResultRelation({connector, relationName});\n } catch {\n // Best-effort cleanup\n }\n };\n\n const dropRelationsForStatus = async (\n cellType: string,\n status: {type: string; [key: string]: unknown} | undefined,\n ) => {\n if (!status) return;\n const registryItem = cellRegistry[cellType];\n const names = registryItem?.getRelationsToDrop?.(status) ?? [];\n for (const name of names) {\n await dropRelationBestEffort(name);\n }\n };\n\n // Mark cells stale when their dependent database tables change (schema-level).\n store.subscribe((state, prevState) => {\n if (state.db.tables === prevState.db.tables) return;\n const toName = (t: {table: {schema?: string; table: string}}) =>\n `${t.table.schema ?? 'main'}.${t.table.table}`;\n const oldNames = new Set(prevState.db.tables.map(toName));\n const newNames = new Set(state.db.tables.map(toName));\n const changed = new Set<string>();\n for (const n of oldNames) {\n if (!newNames.has(n)) changed.add(n);\n }\n for (const n of newNames) {\n if (!oldNames.has(n)) changed.add(n);\n }\n if (!changed.size) return;\n\n for (const sheet of Object.values(state.cells.config.sheets)) {\n const cache = sheet.graphCache;\n if (!cache?.tableDependencies) continue;\n for (const [cellId, tables] of Object.entries(\n cache.tableDependencies,\n )) {\n if (tables.some((t) => changed.has(t))) {\n state.cells.invalidateCellStatus(cellId);\n }\n }\n }\n });\n\n return {\n cells: {\n cellRegistry,\n supportedSheetTypes,\n config: initialConfig,\n status: {},\n activeAbortControllers: {},\n resultVersion: {},\n pageVersion: {},\n async initialize() {\n for (const [cellId, cell] of Object.entries(\n get().cells.config.data,\n )) {\n const registryItem = cellRegistry[cell.type];\n if (registryItem?.onInitialize) {\n registryItem.onInitialize({\n id: cellId,\n status: get().cells.status[cellId],\n get,\n set,\n });\n }\n }\n },\n crossFilterSelections: {},\n\n setCrossFilterSelection: (\n chartCellId: string,\n sqlId: string,\n selection: CrossFilterSelection | null,\n ) => {\n set((state) =>\n produce(state, (draft) => {\n if (!draft.cells.crossFilterSelections[sqlId]) {\n draft.cells.crossFilterSelections[sqlId] = {};\n }\n draft.cells.crossFilterSelections[sqlId][chartCellId] = selection;\n }),\n );\n },\n\n getCrossFilterPredicate: (\n chartCellId: string,\n sqlId: string,\n ): string | null => {\n const group = get().cells.crossFilterSelections[sqlId];\n if (!group) return null;\n const siblingSelections = Object.entries(group)\n .filter(([id]) => id !== chartCellId)\n .map(([, sel]) => sel);\n return buildCrossFilterPredicate(siblingSelections);\n },\n\n clearCrossFilterGroup: (sqlId: string) => {\n set((state) =>\n produce(state, (draft) => {\n delete draft.cells.crossFilterSelections[sqlId];\n }),\n );\n },\n\n addCell: async (sheetId: string, cell: Cell, index?: number) => {\n // Pre-compute dependencies outside produce() to support async\n const sqlSelectToJson = getRequiredSqlSelectToJson(get());\n const targetSheet = get().cells.config.sheets[sheetId];\n const scopedCells = Object.fromEntries(\n (targetSheet?.cellIds ?? [])\n .map((id) => get().cells.config.data[id])\n .filter(isDefined)\n .map((candidate) => [candidate.id, candidate]),\n ) as Record<string, Cell>;\n scopedCells[cell.id] = cell;\n\n // Generate a unique result name for SQL cells if not set\n if (cell.type === 'sql' && !cell.data.resultName) {\n const existingNames = Object.values(scopedCells)\n .filter((c): c is SqlCell => c.type === 'sql' && c.id !== cell.id)\n .map((c) =>\n getEffectiveResultName(c.data, convertToValidColumnOrTableName),\n );\n const baseName = getEffectiveResultName(\n cell.data as SqlCellData,\n convertToValidColumnOrTableName,\n );\n const uniqueName = generateUniqueName(baseName, existingNames);\n (cell as SqlCell).data.resultName = uniqueName;\n }\n\n const deps = await resolveDependencies(\n cell,\n scopedCells,\n sheetId,\n cellRegistry,\n sqlSelectToJson,\n );\n\n set((state) =>\n produce(state, (draft) => {\n draft.cells.config.data[cell.id] = cell;\n const registryItem = cellRegistry[cell.type];\n draft.cells.status[cell.id] = registryItem?.createStatus?.(\n cell.id,\n ) ?? {type: 'other'};\n\n // Single-owner invariant: a cell can belong to one sheet only.\n for (const [existingSheetId, existingSheet] of Object.entries(\n draft.cells.config.sheets,\n )) {\n if (existingSheetId === sheetId) continue;\n existingSheet.cellIds = existingSheet.cellIds.filter(\n (cid) => cid !== cell.id,\n );\n existingSheet.edges = existingSheet.edges.filter(\n (e) => e.source !== cell.id && e.target !== cell.id,\n );\n removeCellFromCache(existingSheet, cell.id);\n }\n\n let sheet = draft.cells.config.sheets[sheetId];\n if (!sheet) {\n sheet = {\n id: sheetId,\n type: 'notebook',\n title: 'Sheet',\n schemaName: getSheetSchemaName(sheetId),\n cellIds: [],\n edges: [],\n graphCache: {\n dependencies: {},\n dependents: {},\n contentHashByCell: {},\n tableDependencies: {},\n },\n };\n draft.cells.config.sheets[sheetId] = sheet;\n if (!draft.cells.config.sheetOrder.includes(sheetId)) {\n draft.cells.config.sheetOrder.push(sheetId);\n }\n if (!draft.cells.config.currentSheetId) {\n draft.cells.config.currentSheetId = sheetId;\n }\n }\n\n const newIndex =\n index !== undefined ? index : sheet.cellIds.length;\n sheet.cellIds = sheet.cellIds.filter((cid) => cid !== cell.id);\n sheet.cellIds.splice(newIndex, 0, cell.id);\n\n // Add edges from pre-computed dependencies\n sheet.edges = sheet.edges.filter(\n (edge) =>\n edge.target !== cell.id &&\n edge.id !== `${edge.source}-${cell.id}`,\n );\n const localCellIds = new Set(sheet.cellIds);\n for (const depId of deps.cellIds) {\n if (!localCellIds.has(depId) || depId === cell.id) continue;\n sheet.edges.push({\n id: `${depId}-${cell.id}`,\n source: depId,\n target: cell.id,\n });\n }\n replaceCellDependenciesInCache(\n sheet,\n cell.id,\n deps.cellIds.filter((depId) => localCellIds.has(depId)),\n deps.tableNames,\n );\n }),\n );\n },\n\n removeCell: (id: string) => {\n const cell = get().cells.config.data[id];\n const previousStatus = get().cells.status[id];\n cellResultCache.delete(id);\n set((state) =>\n produce(state, (draft) => {\n delete draft.cells.config.data[id];\n delete draft.cells.status[id];\n delete draft.cells.resultVersion[id];\n delete draft.cells.pageVersion[id];\n const controller = draft.cells.activeAbortControllers[id];\n if (controller) {\n controller.abort();\n delete draft.cells.activeAbortControllers[id];\n }\n\n // Remove from all sheets\n for (const sheet of Object.values(draft.cells.config.sheets)) {\n sheet.cellIds = sheet.cellIds.filter((cid) => cid !== id);\n sheet.edges = sheet.edges.filter(\n (e) => e.source !== id && e.target !== id,\n );\n removeCellFromCache(sheet, id);\n }\n }),\n );\n if (cell) {\n const registryItem = cellRegistry[cell.type];\n if (registryItem?.onRemove) {\n void registryItem.onRemove({\n id,\n status: previousStatus,\n get,\n set,\n });\n } else {\n void dropRelationsForStatus(cell.type, previousStatus);\n }\n }\n },\n\n updateCell: async (\n id: string,\n updater: (cell: Cell) => Cell,\n opts?: {cascade?: boolean},\n ) => {\n const cell = get().cells.config.data[id];\n if (!cell) return;\n const ownerSheetId = findSheetIdForCell(get(), id);\n const scopedCells = Object.fromEntries(\n (\n (ownerSheetId &&\n get().cells.config.sheets[ownerSheetId]?.cellIds) ||\n []\n )\n .map((cellId) => get().cells.config.data[cellId])\n .filter(isDefined)\n .map((candidate) => [candidate.id, candidate]),\n ) as Record<string, Cell>;\n\n const updatedCell = updater(cell);\n scopedCells[id] = updatedCell;\n\n const registryItem = cellRegistry[cell.type];\n\n const existingStatus = get().cells.status[id];\n const oldResultRelation =\n existingStatus && registryItem?.getResultRelation\n ? registryItem.getResultRelation(existingStatus)\n : undefined;\n\n const semanticInputChanged =\n isInputCell(cell) &&\n isInputCell(updatedCell) &&\n (cell.data.input.varName !== updatedCell.data.input.varName ||\n cell.data.input.value !== updatedCell.data.input.value);\n const semanticSqlChanged =\n isSqlCell(cell) &&\n isSqlCell(updatedCell) &&\n cell.data.sql !== updatedCell.data.sql;\n\n const semanticChanged =\n registryItem?.hasSemanticChange?.(cell, updatedCell) ?? false;\n\n // Apply cell data to the store immediately so that other\n // actions (e.g. runCell triggered via Cmd+Enter) always see\n // the latest value. Edge/dependency updates follow\n // asynchronously below.\n set((state) =>\n produce(state, (draft) => {\n draft.cells.config.data[id] = updatedCell;\n if (semanticChanged) {\n const status = draft.cells.status[id];\n if (status && registryItem?.invalidateStatus) {\n draft.cells.status[id] =\n registryItem.invalidateStatus(status);\n }\n }\n }),\n );\n\n // Avoid expensive dependency graph recomputation on each SQL keystroke.\n // We recompute immediately for non-SQL edits, or when callers explicitly\n // request cascading behavior.\n const shouldRecomputeDependencies =\n !semanticSqlChanged || opts?.cascade === true;\n if (shouldRecomputeDependencies) {\n // Pre-compute dependencies outside produce() to support async\n const sqlSelectToJson = getRequiredSqlSelectToJson(get());\n const newDeps = await resolveDependencies(\n updatedCell,\n scopedCells,\n ownerSheetId || '',\n cellRegistry,\n sqlSelectToJson,\n );\n\n set((state) =>\n produce(state, (draft) => {\n const ownerSheet = Object.values(\n draft.cells.config.sheets,\n ).find((sheet) => sheet.cellIds.includes(id));\n if (ownerSheet) {\n const localCellIds = new Set(ownerSheet.cellIds);\n ownerSheet.edges = ownerSheet.edges.filter(\n (e) => e.target !== id,\n );\n for (const depId of newDeps.cellIds) {\n if (!localCellIds.has(depId) || depId === id) continue;\n ownerSheet.edges.push({\n id: `${depId}-${id}`,\n source: depId,\n target: id,\n });\n }\n replaceCellDependenciesInCache(\n ownerSheet,\n id,\n newDeps.cellIds.filter((depId) => localCellIds.has(depId)),\n newDeps.tableNames,\n );\n }\n }),\n );\n }\n\n // If the result relation changed name (e.g. SQL resultName changed), rename it\n const newStatus = get().cells.status[id];\n const newResultRelation =\n newStatus && registryItem?.getResultRelation\n ? registryItem.getResultRelation(newStatus)\n : undefined;\n const resultRelationChanged =\n oldResultRelation && newResultRelation !== oldResultRelation;\n if (resultRelationChanged && registryItem?.renameResult) {\n void registryItem.renameResult({\n id,\n oldResultView: oldResultRelation,\n get,\n set,\n });\n }\n\n // After update, trigger cascade only if explicitly requested\n // or if semantic execution inputs changed.\n const shouldCascade =\n opts?.cascade || resultRelationChanged || semanticInputChanged;\n if (shouldCascade) {\n if (ownerSheetId) {\n void get().cells.runDownstreamCascade(ownerSheetId, id);\n }\n }\n },\n\n addSheet: (title?: string, type: SheetType = 'notebook') => {\n const id = createId();\n set((state) =>\n produce(state, (draft) => {\n const typeLabel = type.charAt(0).toUpperCase() + type.slice(1);\n const existingTitles = Object.values(\n draft.cells.config.sheets,\n ).map((s) => s.title);\n const defaultTitle = generateUniqueName(\n `${typeLabel} 1`,\n existingTitles,\n ' ',\n );\n\n draft.cells.config.sheets[id] = {\n id,\n type,\n title: title || defaultTitle,\n schemaName: getSheetSchemaName(id),\n cellIds: [],\n edges: [],\n graphCache: {\n dependencies: {},\n dependents: {},\n contentHashByCell: {},\n tableDependencies: {},\n },\n };\n draft.cells.config.sheetOrder.push(id);\n draft.cells.config.currentSheetId = id;\n }),\n );\n return id;\n },\n\n removeSheet: (sheetId: string) => {\n const sheet = get().cells.config.sheets[sheetId];\n if (!sheet) return;\n const ownedCellIds = [...sheet.cellIds];\n const relationNamesToDrop = ownedCellIds.flatMap((cellId) => {\n const cell = get().cells.config.data[cellId];\n const status = get().cells.status[cellId];\n if (!cell || !status) return [];\n const registryItem = cellRegistry[cell.type];\n return registryItem?.getRelationsToDrop?.(status) ?? [];\n });\n set((state) =>\n produce(state, (draft) => {\n for (const cellId of ownedCellIds) {\n cellResultCache.delete(cellId);\n delete draft.cells.config.data[cellId];\n delete draft.cells.status[cellId];\n delete draft.cells.resultVersion[cellId];\n delete draft.cells.pageVersion[cellId];\n const controller = draft.cells.activeAbortControllers[cellId];\n if (controller) {\n controller.abort();\n }\n delete draft.cells.activeAbortControllers[cellId];\n }\n\n for (const existingSheet of Object.values(\n draft.cells.config.sheets,\n )) {\n existingSheet.cellIds = existingSheet.cellIds.filter(\n (cid) => !ownedCellIds.includes(cid),\n );\n existingSheet.edges = existingSheet.edges.filter(\n (e) =>\n !ownedCellIds.includes(e.source) &&\n !ownedCellIds.includes(e.target),\n );\n for (const cellId of ownedCellIds) {\n removeCellFromCache(existingSheet, cellId);\n }\n }\n\n delete draft.cells.config.sheets[sheetId];\n draft.cells.config.sheetOrder =\n draft.cells.config.sheetOrder.filter((id) => id !== sheetId);\n if (draft.cells.config.currentSheetId === sheetId) {\n draft.cells.config.currentSheetId =\n draft.cells.config.sheetOrder[0];\n }\n }),\n );\n for (const relationName of relationNamesToDrop) {\n void dropRelationBestEffort(relationName);\n }\n },\n\n closeSheet: (sheetId: string) => {\n set((state) =>\n produce(state, (draft) => {\n draft.cells.config.sheetOrder =\n draft.cells.config.sheetOrder.filter((id) => id !== sheetId);\n if (draft.cells.config.currentSheetId === sheetId) {\n draft.cells.config.currentSheetId =\n draft.cells.config.sheetOrder[0];\n }\n }),\n );\n },\n\n openSheet: (sheetId: string) => {\n set((state) =>\n produce(state, (draft) => {\n if (!draft.cells.config.sheetOrder.includes(sheetId)) {\n draft.cells.config.sheetOrder.push(sheetId);\n }\n draft.cells.config.currentSheetId = sheetId;\n }),\n );\n },\n\n setSheetOrder: (sheetOrder: string[]) => {\n set((state) =>\n produce(state, (draft) => {\n draft.cells.config.sheetOrder = sheetOrder;\n }),\n );\n },\n\n renameSheet: (sheetId: string, title: string) => {\n set((state) =>\n produce(state, (draft) => {\n const sheet = draft.cells.config.sheets[sheetId];\n if (sheet) {\n // We could add validation here, but usually UI handles it.\n // For now, we'll just allow it as the primary logic is in view slices.\n sheet.title = title;\n }\n }),\n );\n },\n\n setCurrentSheet: (sheetId: string) => {\n set((state) =>\n produce(state, (draft) => {\n draft.cells.config.currentSheetId = sheetId;\n }),\n );\n },\n\n addEdge: (sheetId: string, edge: Omit<Edge, 'id'>) => {\n set((state) =>\n produce(state, (draft) => {\n let sheet = draft.cells.config.sheets[sheetId];\n if (!sheet) {\n sheet = {\n id: sheetId,\n type: 'notebook',\n title: 'Sheet',\n schemaName: getSheetSchemaName(sheetId),\n cellIds: [],\n edges: [],\n graphCache: {\n dependencies: {},\n dependents: {},\n contentHashByCell: {},\n tableDependencies: {},\n },\n };\n draft.cells.config.sheets[sheetId] = sheet;\n if (!draft.cells.config.sheetOrder.includes(sheetId)) {\n draft.cells.config.sheetOrder.push(sheetId);\n }\n if (!draft.cells.config.currentSheetId) {\n draft.cells.config.currentSheetId = sheetId;\n }\n }\n if (\n !sheet.cellIds.includes(edge.source) ||\n !sheet.cellIds.includes(edge.target)\n ) {\n return;\n }\n const id = `${edge.source}-${edge.target}`;\n if (!sheet.edges.find((e) => e.id === id)) {\n sheet.edges.push({...edge, id});\n ensureGraphCache(sheet);\n const deps = sheet.graphCache?.dependencies[edge.target] || [];\n replaceCellDependenciesInCache(sheet, edge.target, [\n ...deps,\n edge.source,\n ]);\n }\n }),\n );\n },\n\n removeEdge: (sheetId: string, edgeId: string) => {\n set((state) =>\n produce(state, (draft) => {\n const sheet = draft.cells.config.sheets[sheetId];\n if (sheet) {\n sheet.edges = sheet.edges.filter((e) => e.id !== edgeId);\n delete sheet.graphCache;\n }\n }),\n );\n },\n\n updateEdgesFromSql: async (sheetId: string, cellId: string) => {\n const cell = get().cells.config.data[cellId];\n const sheet = get().cells.config.sheets[sheetId];\n if (!cell || !sheet) return;\n\n // Pre-compute dependencies outside produce() to support async\n const sqlSelectToJson = getRequiredSqlSelectToJson(get());\n const scopedCells = Object.fromEntries(\n sheet.cellIds\n .map((id) => get().cells.config.data[id])\n .filter(isDefined)\n .map((candidate) => [candidate.id, candidate]),\n ) as Record<string, Cell>;\n const deps = await resolveDependencies(\n cell,\n scopedCells,\n sheetId,\n cellRegistry,\n sqlSelectToJson,\n );\n\n set((state) =>\n produce(state, (draft) => {\n const draftSheet = draft.cells.config.sheets[sheetId];\n if (draftSheet) {\n draftSheet.edges = draftSheet.edges.filter(\n (e) => e.target !== cellId,\n );\n const localCellIds = new Set(draftSheet.cellIds);\n for (const depId of deps.cellIds) {\n if (!localCellIds.has(depId) || depId === cellId) continue;\n draftSheet.edges.push({\n id: `${depId}-${cellId}`,\n source: depId,\n target: cellId,\n });\n }\n replaceCellDependenciesInCache(\n draftSheet,\n cellId,\n deps.cellIds.filter((depId) => localCellIds.has(depId)),\n deps.tableNames,\n );\n }\n }),\n );\n },\n\n runCell: async (\n id: string,\n opts?: {cascade?: boolean; schemaName?: string},\n ) => {\n const state = get();\n const cell = state.cells.config.data[id];\n if (!cell) return;\n\n const registryItem = cellRegistry[cell.type];\n if (!registryItem) return;\n\n if (registryItem.runCell) {\n // Pass get/set to registry's runCell\n await registryItem.runCell({id, opts, get, set});\n return;\n }\n\n // No default behavior - each cell type must define runCell if needed\n },\n cancelCell: (id: string) => {\n const state = get();\n const controller = state.cells.activeAbortControllers[id];\n if (controller) {\n controller.abort();\n }\n },\n invalidateCellStatus: (id: string) => {\n const cell = get().cells.config.data[id];\n if (!cell) return;\n const registryItem = cellRegistry[cell.type];\n set((state) =>\n produce(state, (draft) => {\n const status = draft.cells.status[id];\n if (status && registryItem?.invalidateStatus) {\n draft.cells.status[id] = registryItem.invalidateStatus(status);\n }\n }),\n );\n },\n\n // Cell result cache actions\n setCellResult: (id: string, data: CellResultData) => {\n cellResultCache.set(id, data);\n set((state) =>\n produce(state, (draft) => {\n draft.cells.resultVersion[id] =\n (draft.cells.resultVersion[id] ?? 0) + 1;\n }),\n );\n },\n\n setCellResultPage: (id: string, data: CellResultData) => {\n cellResultCache.set(id, data);\n set((state) =>\n produce(state, (draft) => {\n draft.cells.pageVersion[id] =\n (draft.cells.pageVersion[id] ?? 0) + 1;\n }),\n );\n },\n\n getCellResult: (id: string) => {\n return cellResultCache.get(id);\n },\n\n clearCellResult: (id: string) => {\n cellResultCache.delete(id);\n set((state) =>\n produce(state, (draft) => {\n delete draft.cells.resultVersion[id];\n delete draft.cells.pageVersion[id];\n }),\n );\n },\n\n fetchCellResultPage: async (\n id: string,\n pagination: {pageIndex: number; pageSize: number},\n sorting?: {id: string; desc: boolean}[],\n ) => {\n const state = get();\n const cell = state.cells.config.data[id];\n if (!cell) return;\n const registryItem = cellRegistry[cell.type];\n const status = state.cells.status[id];\n const resultRelation =\n status && registryItem?.getResultRelation\n ? registryItem.getResultRelation(status)\n : undefined;\n if (!resultRelation) return;\n\n const connector = await state.db.getConnector();\n const baseQuery = sanitizeQuery(`SELECT * FROM ${resultRelation}`);\n const pagedQuery = makePagedQuery(\n baseQuery,\n sorting ?? [],\n pagination,\n );\n\n const arrowTable = await connector.query(pagedQuery);\n const countResult = await connector.query(\n `SELECT COUNT(*)::int AS count FROM ${resultRelation}`,\n );\n const totalRows = countResult.toArray()[0]?.count ?? 0;\n\n get().cells.setCellResultPage(id, {arrowTable, totalRows});\n },\n\n // DAG methods (sync versions for UI usage)\n getRootCells: (sheetId: string) => {\n const {dependencies} = buildDependencyGraph(sheetId, get());\n const ids = Object.keys(dependencies);\n return ids.filter((id) => (dependencies[id]?.length ?? 0) === 0);\n },\n getDownstream: (sheetId: string, sourceCellId: string) => {\n const {dependencies, dependents} = buildDependencyGraph(\n sheetId,\n get(),\n );\n const reachable = collectReachable(sourceCellId, dependents);\n if (!reachable.size) return [];\n reachable.delete(sourceCellId);\n const rootsWithinScope = Array.from(reachable).filter((id) => {\n const deps = dependencies[id] || [];\n return deps.filter((d) => reachable.has(d)).length === 0;\n });\n return topologicalOrder(\n rootsWithinScope,\n dependencies,\n dependents,\n reachable,\n );\n },\n // Async cascade execution using AST-based dependency resolution\n runAllCellsCascade: async (sheetId: string) => {\n const cached = buildDependencyGraph(sheetId, get());\n const hasCachedNodes = Object.keys(cached.dependencies).length > 0;\n if (!hasCachedNodes) {\n set((state) =>\n produce(state, (draft) => {\n const sheet = draft.cells.config.sheets[sheetId];\n if (sheet) {\n sheet.graphCache = buildGraphCacheFromEdges(sheet);\n }\n }),\n );\n }\n const sqlSelectToJson = getRequiredSqlSelectToJson(get());\n const {dependencies, dependents} = await buildDependencyGraphAsync(\n sheetId,\n get(),\n sqlSelectToJson,\n );\n const roots = Object.keys(dependencies).filter(\n (id) => (dependencies[id]?.length ?? 0) === 0,\n );\n const order = topologicalOrder(roots, dependencies, dependents);\n for (const cellId of order) {\n try {\n await get().cells.runCell(cellId, {cascade: false});\n } catch (error) {\n const message =\n error instanceof Error ? error.message : String(error);\n const failedCell = get().cells.config.data[cellId];\n const failedRegistryItem = failedCell\n ? cellRegistry[failedCell.type]\n : undefined;\n if (failedRegistryItem?.recordError) {\n set((state) =>\n produce(state, (draft) => {\n const status = draft.cells.status[cellId];\n if (status) {\n draft.cells.status[cellId] =\n failedRegistryItem.recordError!(status, message);\n }\n }),\n );\n }\n }\n }\n },\n runDownstreamCascade: async (sheetId: string, sourceCellId: string) => {\n const cached = buildDependencyGraph(sheetId, get());\n const hasCachedNodes = Object.keys(cached.dependencies).length > 0;\n if (!hasCachedNodes) {\n set((state) =>\n produce(state, (draft) => {\n const sheet = draft.cells.config.sheets[sheetId];\n if (sheet) {\n sheet.graphCache = buildGraphCacheFromEdges(sheet);\n }\n }),\n );\n }\n const sqlSelectToJson = getRequiredSqlSelectToJson(get());\n const {dependencies, dependents} = await buildDependencyGraphAsync(\n sheetId,\n get(),\n sqlSelectToJson,\n );\n const reachable = collectReachable(sourceCellId, dependents);\n if (!reachable.size) return;\n reachable.delete(sourceCellId);\n const rootsWithinScope = Array.from(reachable).filter((id) => {\n const deps = dependencies[id] || [];\n return deps.filter((d) => reachable.has(d)).length === 0;\n });\n const order = topologicalOrder(\n rootsWithinScope,\n dependencies,\n dependents,\n reachable,\n );\n for (const cellId of order) {\n try {\n await get().cells.runCell(cellId, {cascade: false});\n } catch (error) {\n const message =\n error instanceof Error ? error.message : String(error);\n const failedCell = get().cells.config.data[cellId];\n const failedRegistryItem = failedCell\n ? cellRegistry[failedCell.type]\n : undefined;\n if (failedRegistryItem?.recordError) {\n set((state) =>\n produce(state, (draft) => {\n const status = draft.cells.status[cellId];\n if (status) {\n draft.cells.status[cellId] =\n failedRegistryItem.recordError!(status, message);\n }\n }),\n );\n }\n }\n }\n },\n },\n } as CellsSliceState;\n });\n}\n"]}
1
+ {"version":3,"file":"cellsSlice.js","sourceRoot":"","sources":["../src/cellsSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {makePagedQuery} from '@sqlrooms/data-table';\nimport {sanitizeQuery} from '@sqlrooms/duckdb';\nimport {createSlice} from '@sqlrooms/room-store';\nimport {\n convertToValidColumnOrTableName,\n generateUniqueName,\n} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {\n buildDependencyGraph,\n buildDependencyGraphAsync,\n buildGraphCacheFromEdges,\n collectReachable,\n removeCellFromCache,\n replaceCellDependenciesInCache,\n topologicalOrder,\n} from './dagUtils';\nimport {\n findArtifactIdForCell,\n getRequiredSqlSelectToJson,\n normalizeCellsConfigStructure,\n resolveDependencies,\n} from './helpers';\nimport {dropResultRelation} from './resultRelationPolicy';\nimport type {\n Cell,\n CellResultData,\n CellsRootState,\n CellsSliceConfig,\n CellsSliceOptions,\n CellsSliceState,\n CrossFilterSelection,\n Edge,\n SqlCell,\n SqlCellData,\n} from './types';\nimport {isInputCell, isSqlCell} from './types';\nimport {\n getArtifactSchemaName,\n getEffectiveResultName,\n isDefined,\n} from './utils';\nimport {buildCrossFilterPredicate} from './vegaSelectionUtils';\n\nfunction createDefaultCellsConfig(\n config: Partial<CellsSliceConfig> | undefined,\n): CellsSliceConfig {\n const defaultConfig: CellsSliceConfig = {\n data: {},\n artifacts: {},\n tableDepSchemas: ['main'],\n };\n\n if (!config) {\n return defaultConfig;\n }\n\n const {artifacts} = normalizeCellsConfigStructure(config);\n\n return {\n ...defaultConfig,\n ...config,\n artifacts,\n };\n}\n\n// --- Slice Implementation ---\n\nexport function createCellsSlice(props: CellsSliceOptions) {\n const {cellRegistry} = props;\n const initialConfig = createDefaultCellsConfig(props?.config);\n // Keep result data outside Immer drafts, but scoped per slice instance.\n const cellResultCache = new Map<string, CellResultData>();\n return createSlice<CellsSliceState, CellsRootState>((set, get, store) => {\n const dropRelationBestEffort = async (relationName: string) => {\n try {\n const connector = await get().db.getConnector();\n await dropResultRelation({connector, relationName});\n } catch {\n // Best-effort cleanup\n }\n };\n\n const dropRelationsForStatus = async (\n cellType: string,\n status: {type: string; [key: string]: unknown} | undefined,\n ) => {\n if (!status) return;\n const registryItem = cellRegistry[cellType];\n const names = registryItem?.getRelationsToDrop?.(status) ?? [];\n for (const name of names) {\n await dropRelationBestEffort(name);\n }\n };\n\n // Mark cells stale when their dependent database tables change (schema-level).\n store.subscribe((state, prevState) => {\n if (state.db.tables === prevState.db.tables) return;\n const toName = (t: {table: {schema?: string; table: string}}) =>\n `${t.table.schema ?? 'main'}.${t.table.table}`;\n const oldNames = new Set(prevState.db.tables.map(toName));\n const newNames = new Set(state.db.tables.map(toName));\n const changed = new Set<string>();\n for (const n of oldNames) {\n if (!newNames.has(n)) changed.add(n);\n }\n for (const n of newNames) {\n if (!oldNames.has(n)) changed.add(n);\n }\n if (!changed.size) return;\n\n for (const artifact of Object.values(state.cells.config.artifacts)) {\n const cache = artifact.graphCache;\n if (!cache?.tableDependencies) continue;\n for (const [cellId, tables] of Object.entries(\n cache.tableDependencies,\n )) {\n if (tables.some((t) => changed.has(t))) {\n state.cells.invalidateCellStatus(cellId);\n }\n }\n }\n });\n\n return {\n cells: {\n cellRegistry,\n config: initialConfig,\n status: {},\n activeAbortControllers: {},\n resultVersion: {},\n pageVersion: {},\n async initialize() {\n for (const [cellId, cell] of Object.entries(\n get().cells.config.data,\n )) {\n const registryItem = cellRegistry[cell.type];\n if (registryItem?.onInitialize) {\n registryItem.onInitialize({\n id: cellId,\n status: get().cells.status[cellId],\n get,\n set,\n });\n }\n }\n },\n setConfig(config: CellsSliceConfig) {\n set((state) =>\n produce(state, (draft) => {\n draft.cells.config = config;\n }),\n );\n },\n crossFilterSelections: {},\n\n setCrossFilterSelection: (\n chartCellId: string,\n sqlId: string,\n selection: CrossFilterSelection | null,\n ) => {\n set((state) =>\n produce(state, (draft) => {\n if (!draft.cells.crossFilterSelections[sqlId]) {\n draft.cells.crossFilterSelections[sqlId] = {};\n }\n draft.cells.crossFilterSelections[sqlId][chartCellId] = selection;\n }),\n );\n },\n\n getCrossFilterPredicate: (\n chartCellId: string,\n sqlId: string,\n ): string | null => {\n const group = get().cells.crossFilterSelections[sqlId];\n if (!group) return null;\n const siblingSelections = Object.entries(group)\n .filter(([id]) => id !== chartCellId)\n .map(([, sel]) => sel);\n return buildCrossFilterPredicate(siblingSelections);\n },\n\n clearCrossFilterGroup: (sqlId: string) => {\n set((state) =>\n produce(state, (draft) => {\n delete draft.cells.crossFilterSelections[sqlId];\n }),\n );\n },\n\n ensureArtifact: (artifactId, options) => {\n set((state) =>\n produce(state, (draft) => {\n if (!draft.cells.config.artifacts[artifactId]) {\n draft.cells.config.artifacts[artifactId] = {\n id: artifactId,\n schemaName:\n options?.schemaName ?? getArtifactSchemaName(artifactId),\n cellIds: [],\n edges: [],\n graphCache: {\n dependencies: {},\n dependents: {},\n contentHashByCell: {},\n tableDependencies: {},\n },\n };\n } else if (\n options?.schemaName &&\n !draft.cells.config.artifacts[artifactId]?.schemaName\n ) {\n draft.cells.config.artifacts[artifactId].schemaName =\n options.schemaName;\n }\n }),\n );\n },\n\n addCell: async (artifactId: string, cell: Cell, index?: number) => {\n // Pre-compute dependencies outside produce() to support async\n const sqlSelectToJson = getRequiredSqlSelectToJson(get());\n const targetArtifact = get().cells.config.artifacts[artifactId];\n const scopedCells = Object.fromEntries(\n (targetArtifact?.cellIds ?? [])\n .map((id) => get().cells.config.data[id])\n .filter(isDefined)\n .map((candidate) => [candidate.id, candidate]),\n ) as Record<string, Cell>;\n scopedCells[cell.id] = cell;\n\n // Generate a unique result name for SQL cells if not set\n if (cell.type === 'sql' && !cell.data.resultName) {\n const existingNames = Object.values(scopedCells)\n .filter((c): c is SqlCell => c.type === 'sql' && c.id !== cell.id)\n .map((c) =>\n getEffectiveResultName(c.data, convertToValidColumnOrTableName),\n );\n const baseName = getEffectiveResultName(\n cell.data as SqlCellData,\n convertToValidColumnOrTableName,\n );\n const uniqueName = generateUniqueName(baseName, existingNames);\n (cell as SqlCell).data.resultName = uniqueName;\n }\n\n const deps = await resolveDependencies(\n cell,\n scopedCells,\n artifactId,\n cellRegistry,\n sqlSelectToJson,\n );\n\n set((state) =>\n produce(state, (draft) => {\n draft.cells.config.data[cell.id] = cell;\n const registryItem = cellRegistry[cell.type];\n draft.cells.status[cell.id] = registryItem?.createStatus?.(\n cell.id,\n ) ?? {type: 'other'};\n\n // Single-owner invariant: a cell can belong to one artifact only.\n for (const [\n existingArtifactId,\n existingArtifact,\n ] of Object.entries(draft.cells.config.artifacts)) {\n if (existingArtifactId === artifactId) continue;\n existingArtifact.cellIds = existingArtifact.cellIds.filter(\n (cid) => cid !== cell.id,\n );\n existingArtifact.edges = existingArtifact.edges.filter(\n (e) => e.source !== cell.id && e.target !== cell.id,\n );\n removeCellFromCache(existingArtifact, cell.id);\n }\n\n let artifact = draft.cells.config.artifacts[artifactId];\n if (!artifact) {\n artifact = {\n id: artifactId,\n schemaName: getArtifactSchemaName(artifactId),\n cellIds: [],\n edges: [],\n graphCache: {\n dependencies: {},\n dependents: {},\n contentHashByCell: {},\n tableDependencies: {},\n },\n };\n draft.cells.config.artifacts[artifactId] = artifact;\n }\n\n const newIndex =\n index !== undefined ? index : artifact.cellIds.length;\n artifact.cellIds = artifact.cellIds.filter(\n (cid) => cid !== cell.id,\n );\n artifact.cellIds.splice(newIndex, 0, cell.id);\n\n // Add edges from pre-computed dependencies\n artifact.edges = artifact.edges.filter(\n (edge) =>\n edge.target !== cell.id &&\n edge.id !== `${edge.source}-${cell.id}`,\n );\n const localCellIds = new Set(artifact.cellIds);\n for (const depId of deps.cellIds) {\n if (!localCellIds.has(depId) || depId === cell.id) continue;\n artifact.edges.push({\n id: `${depId}-${cell.id}`,\n source: depId,\n target: cell.id,\n });\n }\n replaceCellDependenciesInCache(\n artifact,\n cell.id,\n deps.cellIds.filter((depId) => localCellIds.has(depId)),\n deps.tableNames,\n );\n }),\n );\n },\n\n removeCell: (id: string) => {\n const cell = get().cells.config.data[id];\n const previousStatus = get().cells.status[id];\n cellResultCache.delete(id);\n set((state) =>\n produce(state, (draft) => {\n delete draft.cells.config.data[id];\n delete draft.cells.status[id];\n delete draft.cells.resultVersion[id];\n delete draft.cells.pageVersion[id];\n const controller = draft.cells.activeAbortControllers[id];\n if (controller) {\n controller.abort();\n delete draft.cells.activeAbortControllers[id];\n }\n\n // Remove from all artifacts\n for (const artifact of Object.values(\n draft.cells.config.artifacts,\n )) {\n artifact.cellIds = artifact.cellIds.filter((cid) => cid !== id);\n artifact.edges = artifact.edges.filter(\n (e) => e.source !== id && e.target !== id,\n );\n removeCellFromCache(artifact, id);\n }\n }),\n );\n if (cell) {\n const registryItem = cellRegistry[cell.type];\n if (registryItem?.onRemove) {\n void registryItem.onRemove({\n id,\n status: previousStatus,\n get,\n set,\n });\n } else {\n void dropRelationsForStatus(cell.type, previousStatus);\n }\n }\n },\n\n updateCell: async (\n id: string,\n updater: (cell: Cell) => Cell,\n opts?: {cascade?: boolean},\n ) => {\n const cell = get().cells.config.data[id];\n if (!cell) return;\n const ownerArtifactId = findArtifactIdForCell(get(), id);\n const scopedCells = Object.fromEntries(\n (\n (ownerArtifactId &&\n get().cells.config.artifacts[ownerArtifactId]?.cellIds) ||\n []\n )\n .map((cellId) => get().cells.config.data[cellId])\n .filter(isDefined)\n .map((candidate) => [candidate.id, candidate]),\n ) as Record<string, Cell>;\n\n const updatedCell = updater(cell);\n scopedCells[id] = updatedCell;\n\n const registryItem = cellRegistry[cell.type];\n\n const existingStatus = get().cells.status[id];\n const oldResultRelation =\n existingStatus && registryItem?.getResultRelation\n ? registryItem.getResultRelation(existingStatus)\n : undefined;\n\n const semanticInputChanged =\n isInputCell(cell) &&\n isInputCell(updatedCell) &&\n (cell.data.input.varName !== updatedCell.data.input.varName ||\n cell.data.input.value !== updatedCell.data.input.value);\n const semanticSqlChanged =\n isSqlCell(cell) &&\n isSqlCell(updatedCell) &&\n cell.data.sql !== updatedCell.data.sql;\n\n const semanticChanged =\n registryItem?.hasSemanticChange?.(cell, updatedCell) ?? false;\n\n // Apply cell data to the store immediately so that other\n // actions (e.g. runCell triggered via Cmd+Enter) always see\n // the latest value. Edge/dependency updates follow\n // asynchronously below.\n set((state) =>\n produce(state, (draft) => {\n draft.cells.config.data[id] = updatedCell;\n if (semanticChanged) {\n const status = draft.cells.status[id];\n if (status && registryItem?.invalidateStatus) {\n draft.cells.status[id] =\n registryItem.invalidateStatus(status);\n }\n }\n }),\n );\n\n // Avoid expensive dependency graph recomputation on each SQL keystroke.\n // We recompute immediately for non-SQL edits, or when callers explicitly\n // request cascading behavior.\n const shouldRecomputeDependencies =\n !semanticSqlChanged || opts?.cascade === true;\n if (shouldRecomputeDependencies) {\n // Pre-compute dependencies outside produce() to support async\n const sqlSelectToJson = getRequiredSqlSelectToJson(get());\n const newDeps = await resolveDependencies(\n updatedCell,\n scopedCells,\n ownerArtifactId || '',\n cellRegistry,\n sqlSelectToJson,\n );\n\n set((state) =>\n produce(state, (draft) => {\n const ownerSheet = Object.values(\n draft.cells.config.artifacts,\n ).find((artifact) => artifact.cellIds.includes(id));\n if (ownerSheet) {\n const localCellIds = new Set(ownerSheet.cellIds);\n ownerSheet.edges = ownerSheet.edges.filter(\n (e) => e.target !== id,\n );\n for (const depId of newDeps.cellIds) {\n if (!localCellIds.has(depId) || depId === id) continue;\n ownerSheet.edges.push({\n id: `${depId}-${id}`,\n source: depId,\n target: id,\n });\n }\n replaceCellDependenciesInCache(\n ownerSheet,\n id,\n newDeps.cellIds.filter((depId) => localCellIds.has(depId)),\n newDeps.tableNames,\n );\n }\n }),\n );\n }\n\n // If the result relation changed name (e.g. SQL resultName changed), rename it\n const newStatus = get().cells.status[id];\n const newResultRelation =\n newStatus && registryItem?.getResultRelation\n ? registryItem.getResultRelation(newStatus)\n : undefined;\n const resultRelationChanged =\n oldResultRelation && newResultRelation !== oldResultRelation;\n if (resultRelationChanged && registryItem?.renameResult) {\n void registryItem.renameResult({\n id,\n oldResultView: oldResultRelation,\n get,\n set,\n });\n }\n\n // After update, trigger cascade only if explicitly requested\n // or if semantic execution inputs changed.\n const shouldCascade =\n opts?.cascade || resultRelationChanged || semanticInputChanged;\n if (shouldCascade) {\n if (ownerArtifactId) {\n void get().cells.runDownstreamCascade(ownerArtifactId, id);\n }\n }\n },\n\n removeArtifact: (artifactId: string) => {\n const artifact = get().cells.config.artifacts[artifactId];\n if (!artifact) return;\n const ownedCellIds = [...artifact.cellIds];\n const relationNamesToDrop = ownedCellIds.flatMap((cellId) => {\n const cell = get().cells.config.data[cellId];\n const status = get().cells.status[cellId];\n if (!cell || !status) return [];\n const registryItem = cellRegistry[cell.type];\n return registryItem?.getRelationsToDrop?.(status) ?? [];\n });\n set((state) =>\n produce(state, (draft) => {\n for (const cellId of ownedCellIds) {\n cellResultCache.delete(cellId);\n delete draft.cells.config.data[cellId];\n delete draft.cells.status[cellId];\n delete draft.cells.resultVersion[cellId];\n delete draft.cells.pageVersion[cellId];\n const controller = draft.cells.activeAbortControllers[cellId];\n if (controller) {\n controller.abort();\n }\n delete draft.cells.activeAbortControllers[cellId];\n }\n\n for (const existingSheet of Object.values(\n draft.cells.config.artifacts,\n )) {\n existingSheet.cellIds = existingSheet.cellIds.filter(\n (cid) => !ownedCellIds.includes(cid),\n );\n existingSheet.edges = existingSheet.edges.filter(\n (e) =>\n !ownedCellIds.includes(e.source) &&\n !ownedCellIds.includes(e.target),\n );\n for (const cellId of ownedCellIds) {\n removeCellFromCache(existingSheet, cellId);\n }\n }\n\n delete draft.cells.config.artifacts[artifactId];\n }),\n );\n for (const relationName of relationNamesToDrop) {\n void dropRelationBestEffort(relationName);\n }\n },\n\n addEdge: (artifactId: string, edge: Omit<Edge, 'id'>) => {\n set((state) =>\n produce(state, (draft) => {\n let artifact = draft.cells.config.artifacts[artifactId];\n if (!artifact) {\n artifact = {\n id: artifactId,\n schemaName: getArtifactSchemaName(artifactId),\n cellIds: [],\n edges: [],\n graphCache: {\n dependencies: {},\n dependents: {},\n contentHashByCell: {},\n tableDependencies: {},\n },\n };\n draft.cells.config.artifacts[artifactId] = artifact;\n }\n if (\n !artifact.cellIds.includes(edge.source) ||\n !artifact.cellIds.includes(edge.target)\n ) {\n return;\n }\n const id = `${edge.source}-${edge.target}`;\n if (!artifact.edges.find((e) => e.id === id)) {\n artifact.edges.push({...edge, id});\n const deps =\n artifact.graphCache?.dependencies[edge.target] || [];\n replaceCellDependenciesInCache(artifact, edge.target, [\n ...deps,\n edge.source,\n ]);\n }\n }),\n );\n },\n\n removeEdge: (artifactId: string, edgeId: string) => {\n set((state) =>\n produce(state, (draft) => {\n const artifact = draft.cells.config.artifacts[artifactId];\n if (artifact) {\n artifact.edges = artifact.edges.filter((e) => e.id !== edgeId);\n delete artifact.graphCache;\n }\n }),\n );\n },\n\n updateEdgesFromSql: async (artifactId: string, cellId: string) => {\n const cell = get().cells.config.data[cellId];\n const artifact = get().cells.config.artifacts[artifactId];\n if (!cell || !artifact) return;\n\n // Pre-compute dependencies outside produce() to support async\n const sqlSelectToJson = getRequiredSqlSelectToJson(get());\n const scopedCells = Object.fromEntries(\n artifact.cellIds\n .map((id) => get().cells.config.data[id])\n .filter(isDefined)\n .map((candidate) => [candidate.id, candidate]),\n ) as Record<string, Cell>;\n const deps = await resolveDependencies(\n cell,\n scopedCells,\n artifactId,\n cellRegistry,\n sqlSelectToJson,\n );\n\n set((state) =>\n produce(state, (draft) => {\n const draftSheet = draft.cells.config.artifacts[artifactId];\n if (draftSheet) {\n draftSheet.edges = draftSheet.edges.filter(\n (e) => e.target !== cellId,\n );\n const localCellIds = new Set(draftSheet.cellIds);\n for (const depId of deps.cellIds) {\n if (!localCellIds.has(depId) || depId === cellId) continue;\n draftSheet.edges.push({\n id: `${depId}-${cellId}`,\n source: depId,\n target: cellId,\n });\n }\n replaceCellDependenciesInCache(\n draftSheet,\n cellId,\n deps.cellIds.filter((depId) => localCellIds.has(depId)),\n deps.tableNames,\n );\n }\n }),\n );\n },\n\n runCell: async (\n id: string,\n opts?: {cascade?: boolean; schemaName?: string},\n ) => {\n const state = get();\n const cell = state.cells.config.data[id];\n if (!cell) return;\n\n const registryItem = cellRegistry[cell.type];\n if (!registryItem) return;\n\n if (registryItem.runCell) {\n // Pass get/set to registry's runCell\n await registryItem.runCell({id, opts, get, set});\n return;\n }\n\n // No default behavior - each cell type must define runCell if needed\n },\n cancelCell: (id: string) => {\n const state = get();\n const controller = state.cells.activeAbortControllers[id];\n if (controller) {\n controller.abort();\n }\n },\n invalidateCellStatus: (id: string) => {\n const cell = get().cells.config.data[id];\n if (!cell) return;\n const registryItem = cellRegistry[cell.type];\n set((state) =>\n produce(state, (draft) => {\n const status = draft.cells.status[id];\n if (status && registryItem?.invalidateStatus) {\n draft.cells.status[id] = registryItem.invalidateStatus(status);\n }\n }),\n );\n },\n\n // Cell result cache actions\n setCellResult: (id: string, data: CellResultData) => {\n cellResultCache.set(id, data);\n set((state) =>\n produce(state, (draft) => {\n draft.cells.resultVersion[id] =\n (draft.cells.resultVersion[id] ?? 0) + 1;\n }),\n );\n },\n\n setCellResultPage: (id: string, data: CellResultData) => {\n cellResultCache.set(id, data);\n set((state) =>\n produce(state, (draft) => {\n draft.cells.pageVersion[id] =\n (draft.cells.pageVersion[id] ?? 0) + 1;\n }),\n );\n },\n\n getCellResult: (id: string) => {\n return cellResultCache.get(id);\n },\n\n clearCellResult: (id: string) => {\n cellResultCache.delete(id);\n set((state) =>\n produce(state, (draft) => {\n delete draft.cells.resultVersion[id];\n delete draft.cells.pageVersion[id];\n }),\n );\n },\n\n fetchCellResultPage: async (\n id: string,\n pagination: {pageIndex: number; pageSize: number},\n sorting?: {id: string; desc: boolean}[],\n ) => {\n const state = get();\n const cell = state.cells.config.data[id];\n if (!cell) return;\n const registryItem = cellRegistry[cell.type];\n const status = state.cells.status[id];\n const resultRelation =\n status && registryItem?.getResultRelation\n ? registryItem.getResultRelation(status)\n : undefined;\n if (!resultRelation) return;\n\n const connector = await state.db.getConnector();\n const baseQuery = sanitizeQuery(`SELECT * FROM ${resultRelation}`);\n const pagedQuery = makePagedQuery(\n baseQuery,\n sorting ?? [],\n pagination,\n );\n\n const arrowTable = await connector.query(pagedQuery);\n const countResult = await connector.query(\n `SELECT COUNT(*)::int AS count FROM ${resultRelation}`,\n );\n const totalRows = countResult.toArray()[0]?.count ?? 0;\n\n get().cells.setCellResultPage(id, {arrowTable, totalRows});\n },\n\n // DAG methods (sync versions for UI usage)\n getArtifactIdForCell: (cellId: string) => {\n return findArtifactIdForCell(get(), cellId);\n },\n getRootCells: (artifactId: string) => {\n const {dependencies} = buildDependencyGraph(artifactId, get());\n const ids = Object.keys(dependencies);\n return ids.filter((id) => (dependencies[id]?.length ?? 0) === 0);\n },\n getDownstream: (artifactId: string, sourceCellId: string) => {\n const {dependencies, dependents} = buildDependencyGraph(\n artifactId,\n get(),\n );\n const reachable = collectReachable(sourceCellId, dependents);\n if (!reachable.size) return [];\n reachable.delete(sourceCellId);\n const rootsWithinScope = Array.from(reachable).filter((id) => {\n const deps = dependencies[id] || [];\n return deps.filter((d) => reachable.has(d)).length === 0;\n });\n return topologicalOrder(\n rootsWithinScope,\n dependencies,\n dependents,\n reachable,\n );\n },\n // Async cascade execution using AST-based dependency resolution\n runAllCellsCascade: async (artifactId: string) => {\n const cached = buildDependencyGraph(artifactId, get());\n const hasCachedNodes = Object.keys(cached.dependencies).length > 0;\n if (!hasCachedNodes) {\n set((state) =>\n produce(state, (draft) => {\n const artifact = draft.cells.config.artifacts[artifactId];\n if (artifact) {\n artifact.graphCache = buildGraphCacheFromEdges(artifact);\n }\n }),\n );\n }\n const sqlSelectToJson = getRequiredSqlSelectToJson(get());\n const {dependencies, dependents} = await buildDependencyGraphAsync(\n artifactId,\n get(),\n sqlSelectToJson,\n );\n const roots = Object.keys(dependencies).filter(\n (id) => (dependencies[id]?.length ?? 0) === 0,\n );\n const order = topologicalOrder(roots, dependencies, dependents);\n for (const cellId of order) {\n try {\n await get().cells.runCell(cellId, {cascade: false});\n } catch (error) {\n const message =\n error instanceof Error ? error.message : String(error);\n const failedCell = get().cells.config.data[cellId];\n const failedRegistryItem = failedCell\n ? cellRegistry[failedCell.type]\n : undefined;\n if (failedRegistryItem?.recordError) {\n set((state) =>\n produce(state, (draft) => {\n const status = draft.cells.status[cellId];\n if (status) {\n draft.cells.status[cellId] =\n failedRegistryItem.recordError!(status, message);\n }\n }),\n );\n }\n }\n }\n },\n runDownstreamCascade: async (\n artifactId: string,\n sourceCellId: string,\n ) => {\n const cached = buildDependencyGraph(artifactId, get());\n const hasCachedNodes = Object.keys(cached.dependencies).length > 0;\n if (!hasCachedNodes) {\n set((state) =>\n produce(state, (draft) => {\n const artifact = draft.cells.config.artifacts[artifactId];\n if (artifact) {\n artifact.graphCache = buildGraphCacheFromEdges(artifact);\n }\n }),\n );\n }\n const sqlSelectToJson = getRequiredSqlSelectToJson(get());\n const {dependencies, dependents} = await buildDependencyGraphAsync(\n artifactId,\n get(),\n sqlSelectToJson,\n );\n const reachable = collectReachable(sourceCellId, dependents);\n if (!reachable.size) return;\n reachable.delete(sourceCellId);\n const rootsWithinScope = Array.from(reachable).filter((id) => {\n const deps = dependencies[id] || [];\n return deps.filter((d) => reachable.has(d)).length === 0;\n });\n const order = topologicalOrder(\n rootsWithinScope,\n dependencies,\n dependents,\n reachable,\n );\n for (const cellId of order) {\n try {\n await get().cells.runCell(cellId, {cascade: false});\n } catch (error) {\n const message =\n error instanceof Error ? error.message : String(error);\n const failedCell = get().cells.config.data[cellId];\n const failedRegistryItem = failedCell\n ? cellRegistry[failedCell.type]\n : undefined;\n if (failedRegistryItem?.recordError) {\n set((state) =>\n produce(state, (draft) => {\n const status = draft.cells.status[cellId];\n if (status) {\n draft.cells.status[cellId] =\n failedRegistryItem.recordError!(status, message);\n }\n }),\n );\n }\n }\n }\n },\n },\n } as CellsSliceState;\n });\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  export type CellSourceSelectorProps = {
3
+ artifactId: string;
3
4
  /** Current value in `cell:<id>` or `table:<schema.table>` format. */
4
5
  value?: string;
5
6
  /** Callback when the user selects a data source. Value is prefixed. */
@@ -1 +1 @@
1
- {"version":3,"file":"CellSourceSelector.d.ts","sourceRoot":"","sources":["../../src/components/CellSourceSelector.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAgB,MAAM,OAAO,CAAC;AAMrC,MAAM,MAAM,uBAAuB,GAAG;IACpC,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAKF,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAkFhE,CAAC"}
1
+ {"version":3,"file":"CellSourceSelector.d.ts","sourceRoot":"","sources":["../../src/components/CellSourceSelector.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAgB,MAAM,OAAO,CAAC;AAMrC,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAKF,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAoFhE,CAAC"}
@@ -7,19 +7,18 @@ import { isSqlCell } from '../types';
7
7
  import { getEffectiveResultName } from '../utils';
8
8
  import { toDataSourceCell, toDataSourceTable } from '../helpers';
9
9
  const GREEN_ITEM = '[&_svg]:text-accent-foreground font-mono text-xs text-green-500 data-[highlighted]:text-green-500';
10
- export const CellSourceSelector = ({ value, onValueChange, className, }) => {
10
+ export const CellSourceSelector = ({ artifactId, value, onValueChange, className, }) => {
11
11
  const cellsData = useCellsStore((s) => s.cells.config.data);
12
12
  const dbTables = useCellsStore((s) => s.db.tables);
13
13
  const tableDepSchemas = useCellsStore((s) => s.cells.config.tableDepSchemas);
14
- const currentSheetId = useCellsStore((s) => s.cells.config.currentSheetId);
15
- const sheetCellIds = useCellsStore((s) => currentSheetId ? s.cells.config.sheets[currentSheetId]?.cellIds : undefined);
14
+ const artifactCellIds = useCellsStore((s) => artifactId ? s.cells.config.artifacts[artifactId]?.cellIds : undefined);
16
15
  const availableSqlCells = useMemo(() => {
17
- if (!sheetCellIds)
16
+ if (!artifactCellIds)
18
17
  return [];
19
- return sheetCellIds
20
- .map((cid) => cellsData[cid])
21
- .filter((c) => Boolean(c && isSqlCell(c)));
22
- }, [sheetCellIds, cellsData]);
18
+ return artifactCellIds
19
+ .map((cellId) => cellsData[cellId])
20
+ .filter((candidate) => Boolean(candidate && isSqlCell(candidate)));
21
+ }, [artifactCellIds, cellsData]);
23
22
  const availableTables = useMemo(() => {
24
23
  const schemas = new Set(tableDepSchemas ?? ['main']);
25
24
  return dbTables.filter((t) => !t.isView && t.table.schema != null && schemas.has(t.table.schema));
@@ -27,7 +26,7 @@ export const CellSourceSelector = ({ value, onValueChange, className, }) => {
27
26
  const hasValue = value != null;
28
27
  return (_jsxs(Select, { value: value, onValueChange: onValueChange, children: [_jsx(SelectTrigger, { className: cn('h-6 w-[180px] text-xs shadow-none', className, {
29
28
  '[&>span]:font-mono [&>span]:text-green-500': hasValue,
30
- }), children: _jsx(SelectValue, { placeholder: "Select data source" }) }), _jsxs(SelectContent, { onCloseAutoFocus: (e) => e.preventDefault(), children: [availableSqlCells.length > 0 && (_jsxs(SelectGroup, { children: [_jsx(SelectLabel, { className: "text-muted-foreground text-[10px]", children: "Cells" }), availableSqlCells.map((sql) => (_jsx(SelectItem, { className: GREEN_ITEM, value: toDataSourceCell(sql), children: getEffectiveResultName(sql.data, convertToValidColumnOrTableName) }, sql.id)))] })), availableTables.length > 0 && (_jsxs(SelectGroup, { children: [_jsx(SelectLabel, { className: "text-muted-foreground text-[10px]", children: "Tables" }), availableTables.map((t) => {
29
+ }), children: _jsx(SelectValue, { placeholder: "Select data source" }) }), _jsxs(SelectContent, { onCloseAutoFocus: (e) => e.preventDefault(), children: [availableSqlCells.length > 0 && (_jsxs(SelectGroup, { children: [_jsx(SelectLabel, { className: "text-muted-foreground text-[10px]", children: "Cells" }), availableSqlCells.map((sqlCell) => (_jsx(SelectItem, { className: GREEN_ITEM, value: toDataSourceCell(sqlCell), children: getEffectiveResultName(sqlCell.data, convertToValidColumnOrTableName) }, sqlCell.id)))] })), availableTables.length > 0 && (_jsxs(SelectGroup, { children: [_jsx(SelectLabel, { className: "text-muted-foreground text-[10px]", children: "Tables" }), availableTables.map((t) => {
31
30
  const qualifiedName = `${t.table.schema}.${t.table.table}`;
32
31
  return (_jsx(SelectItem, { className: GREEN_ITEM, value: toDataSourceTable(t.table), children: qualifiedName }, qualifiedName));
33
32
  })] }))] })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"CellSourceSelector.js","sourceRoot":"","sources":["../../src/components/CellSourceSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n cn,\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from '@sqlrooms/ui';\nimport {convertToValidColumnOrTableName} from '@sqlrooms/utils';\nimport React, {useMemo} from 'react';\nimport {useCellsStore} from '../hooks';\nimport {isSqlCell, SqlCell, type SqlCellData} from '../types';\nimport {getEffectiveResultName} from '../utils';\nimport {toDataSourceCell, toDataSourceTable} from '../helpers';\n\nexport type CellSourceSelectorProps = {\n /** Current value in `cell:<id>` or `table:<schema.table>` format. */\n value?: string;\n /** Callback when the user selects a data source. Value is prefixed. */\n onValueChange: (value: string) => void;\n /** Optional className override for the trigger. */\n className?: string;\n};\n\nconst GREEN_ITEM =\n '[&_svg]:text-accent-foreground font-mono text-xs text-green-500 data-[highlighted]:text-green-500';\n\nexport const CellSourceSelector: React.FC<CellSourceSelectorProps> = ({\n value,\n onValueChange,\n className,\n}) => {\n const cellsData = useCellsStore((s) => s.cells.config.data);\n const dbTables = useCellsStore((s) => s.db.tables);\n const tableDepSchemas = useCellsStore((s) => s.cells.config.tableDepSchemas);\n const currentSheetId = useCellsStore((s) => s.cells.config.currentSheetId);\n const sheetCellIds = useCellsStore((s) =>\n currentSheetId ? s.cells.config.sheets[currentSheetId]?.cellIds : undefined,\n );\n\n const availableSqlCells = useMemo(() => {\n if (!sheetCellIds) return [];\n\n return sheetCellIds\n .map((cid) => cellsData[cid])\n .filter((c): c is SqlCell => Boolean(c && isSqlCell(c)));\n }, [sheetCellIds, cellsData]);\n\n const availableTables = useMemo(() => {\n const schemas = new Set(tableDepSchemas ?? ['main']);\n return dbTables.filter(\n (t) => !t.isView && t.table.schema != null && schemas.has(t.table.schema),\n );\n }, [dbTables, tableDepSchemas]);\n\n const hasValue = value != null;\n\n return (\n <Select value={value} onValueChange={onValueChange}>\n <SelectTrigger\n className={cn('h-6 w-[180px] text-xs shadow-none', className, {\n '[&>span]:font-mono [&>span]:text-green-500': hasValue,\n })}\n >\n <SelectValue placeholder=\"Select data source\" />\n </SelectTrigger>\n <SelectContent onCloseAutoFocus={(e) => e.preventDefault()}>\n {availableSqlCells.length > 0 && (\n <SelectGroup>\n <SelectLabel className=\"text-muted-foreground text-[10px]\">\n Cells\n </SelectLabel>\n {availableSqlCells.map((sql) => (\n <SelectItem\n className={GREEN_ITEM}\n key={sql.id}\n value={toDataSourceCell(sql)}\n >\n {getEffectiveResultName(\n sql.data as SqlCellData,\n convertToValidColumnOrTableName,\n )}\n </SelectItem>\n ))}\n </SelectGroup>\n )}\n {availableTables.length > 0 && (\n <SelectGroup>\n <SelectLabel className=\"text-muted-foreground text-[10px]\">\n Tables\n </SelectLabel>\n {availableTables.map((t) => {\n const qualifiedName = `${t.table.schema}.${t.table.table}`;\n\n return (\n <SelectItem\n className={GREEN_ITEM}\n key={qualifiedName}\n value={toDataSourceTable(t.table)}\n >\n {qualifiedName}\n </SelectItem>\n );\n })}\n </SelectGroup>\n )}\n </SelectContent>\n </Select>\n );\n};\n"]}
1
+ {"version":3,"file":"CellSourceSelector.js","sourceRoot":"","sources":["../../src/components/CellSourceSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n cn,\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from '@sqlrooms/ui';\nimport {convertToValidColumnOrTableName} from '@sqlrooms/utils';\nimport React, {useMemo} from 'react';\nimport {useCellsStore} from '../hooks';\nimport {isSqlCell, SqlCell, type SqlCellData} from '../types';\nimport {getEffectiveResultName} from '../utils';\nimport {toDataSourceCell, toDataSourceTable} from '../helpers';\n\nexport type CellSourceSelectorProps = {\n artifactId: string;\n /** Current value in `cell:<id>` or `table:<schema.table>` format. */\n value?: string;\n /** Callback when the user selects a data source. Value is prefixed. */\n onValueChange: (value: string) => void;\n /** Optional className override for the trigger. */\n className?: string;\n};\n\nconst GREEN_ITEM =\n '[&_svg]:text-accent-foreground font-mono text-xs text-green-500 data-[highlighted]:text-green-500';\n\nexport const CellSourceSelector: React.FC<CellSourceSelectorProps> = ({\n artifactId,\n value,\n onValueChange,\n className,\n}) => {\n const cellsData = useCellsStore((s) => s.cells.config.data);\n const dbTables = useCellsStore((s) => s.db.tables);\n const tableDepSchemas = useCellsStore((s) => s.cells.config.tableDepSchemas);\n const artifactCellIds = useCellsStore((s) =>\n artifactId ? s.cells.config.artifacts[artifactId]?.cellIds : undefined,\n );\n\n const availableSqlCells = useMemo(() => {\n if (!artifactCellIds) return [];\n\n return artifactCellIds\n .map((cellId) => cellsData[cellId])\n .filter((candidate): candidate is SqlCell =>\n Boolean(candidate && isSqlCell(candidate)),\n );\n }, [artifactCellIds, cellsData]);\n\n const availableTables = useMemo(() => {\n const schemas = new Set(tableDepSchemas ?? ['main']);\n return dbTables.filter(\n (t) => !t.isView && t.table.schema != null && schemas.has(t.table.schema),\n );\n }, [dbTables, tableDepSchemas]);\n\n const hasValue = value != null;\n\n return (\n <Select value={value} onValueChange={onValueChange}>\n <SelectTrigger\n className={cn('h-6 w-[180px] text-xs shadow-none', className, {\n '[&>span]:font-mono [&>span]:text-green-500': hasValue,\n })}\n >\n <SelectValue placeholder=\"Select data source\" />\n </SelectTrigger>\n <SelectContent onCloseAutoFocus={(e) => e.preventDefault()}>\n {availableSqlCells.length > 0 && (\n <SelectGroup>\n <SelectLabel className=\"text-muted-foreground text-[10px]\">\n Cells\n </SelectLabel>\n {availableSqlCells.map((sqlCell) => (\n <SelectItem\n className={GREEN_ITEM}\n key={sqlCell.id}\n value={toDataSourceCell(sqlCell)}\n >\n {getEffectiveResultName(\n sqlCell.data as SqlCellData,\n convertToValidColumnOrTableName,\n )}\n </SelectItem>\n ))}\n </SelectGroup>\n )}\n {availableTables.length > 0 && (\n <SelectGroup>\n <SelectLabel className=\"text-muted-foreground text-[10px]\">\n Tables\n </SelectLabel>\n {availableTables.map((t) => {\n const qualifiedName = `${t.table.schema}.${t.table.table}`;\n\n return (\n <SelectItem\n className={GREEN_ITEM}\n key={qualifiedName}\n value={toDataSourceTable(t.table)}\n >\n {qualifiedName}\n </SelectItem>\n );\n })}\n </SelectGroup>\n )}\n </SelectContent>\n </Select>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SqlCellContent.d.ts","sourceRoot":"","sources":["../../src/components/SqlCellContent.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAgD,MAAM,OAAO,CAAC;AAErE,OAAO,KAAK,EACV,kBAAkB,EAElB,OAAO,EAER,MAAM,UAAU,CAAC;AAQlB,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,KAAK,CAAC,YAAY,CAAC;CACpE,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA8KxD,CAAC"}
1
+ {"version":3,"file":"SqlCellContent.d.ts","sourceRoot":"","sources":["../../src/components/SqlCellContent.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAElD,OAAO,KAAK,EACV,kBAAkB,EAElB,OAAO,EAER,MAAM,UAAU,CAAC;AAQlB,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,KAAK,CAAC,YAAY,CAAC;CACpE,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAyKxD,CAAC"}
@@ -3,7 +3,7 @@ import { getCoreDuckDbConnectionId } from '@sqlrooms/db';
3
3
  import { useRoomStoreApi } from '@sqlrooms/room-store';
4
4
  import { produce } from 'immer';
5
5
  import { CornerDownRightIcon } from 'lucide-react';
6
- import { useCallback, useEffect, useMemo, useRef } from 'react';
6
+ import { useCallback, useMemo } from 'react';
7
7
  import { useCellsStore } from '../hooks';
8
8
  import { SqlCellConnectionSelector } from './SqlCellConnectionSelector';
9
9
  import { SqlCellDependentsMenu } from './SqlCellDependentsMenu';
@@ -17,9 +17,9 @@ export const SqlCellContent = ({ id, cell, renderContainer, }) => {
17
17
  const runCell = useCellsStore((s) => s.cells.runCell);
18
18
  const cancelCell = useCellsStore((s) => s.cells.cancelCell);
19
19
  const getDownstream = useCellsStore((s) => s.cells.getDownstream);
20
- const currentSheetId = useCellsStore((s) => s.cells.config.currentSheetId);
20
+ const artifactId = useCellsStore((s) => s.cells.getArtifactIdForCell(id));
21
21
  const cellsData = useCellsStore((s) => s.cells.config.data);
22
- const sheets = useCellsStore((s) => s.cells.config.sheets);
22
+ const artifacts = useCellsStore((s) => s.cells.config.artifacts);
23
23
  const cellStatus = useCellsStore((s) => s.cells.status[id]);
24
24
  const resultVersion = useCellsStore((s) => s.cells.resultVersion?.[id] ?? 0);
25
25
  const pageVersion = useCellsStore((s) => s.cells.pageVersion?.[id] ?? 0);
@@ -51,8 +51,8 @@ export const SqlCellContent = ({ id, cell, renderContainer, }) => {
51
51
  c.data.sql = query;
52
52
  }
53
53
  }));
54
- handleRunRef.current();
55
- }, [id, storeApi]);
54
+ runCell(id);
55
+ }, [id, runCell, storeApi]);
56
56
  const handleConnectorChange = useCallback((connectorId) => {
57
57
  updateCell(id, (c) => produce(c, (draft) => {
58
58
  if (draft.type === 'sql') {
@@ -82,12 +82,8 @@ export const SqlCellContent = ({ id, cell, renderContainer, }) => {
82
82
  }
83
83
  : undefined;
84
84
  const isRunning = status?.state === 'running';
85
- const handleRunRef = useRef(handleRun);
86
- useEffect(() => {
87
- handleRunRef.current = handleRun;
88
- }, [handleRun]);
89
85
  const content = (_jsxs("div", { className: "flex flex-col", children: [_jsx(SqlCellEditor, { sql: cell.data.sql, connector: connector, tableSchemas: tableSchemas, onChange: handleSqlChange, onRunQuery: handleRunQuery }), _jsx(SqlCellResults, { cellId: id, cellResult: cellResult, resultName: resultName, isRunning: isRunning, errorMessage: status?.state === 'error' ? status.message : undefined, resultVersion: resultVersion, fetchCellResultPage: fetchCellResultPage })] }));
90
- const footer = (_jsxs("div", { className: "text-muted-foreground flex items-center gap-1 px-2 py-1 text-xs", children: [_jsx(CornerDownRightIcon, { className: "h-3 w-3" }), _jsx(SqlCellDependentsMenu, { cellId: id, currentSheetId: currentSheetId, cellsData: cellsData, sheets: sheets, getDownstream: getDownstream }), _jsx(SqlCellResultNameEditor, { cellId: id, value: resultName, onChange: handleResultNameChange })] }));
86
+ const footer = (_jsxs("div", { className: "text-muted-foreground flex items-center gap-1 px-2 py-1 text-xs", children: [_jsx(CornerDownRightIcon, { className: "h-3 w-3" }), _jsx(SqlCellDependentsMenu, { cellId: id, artifactId: artifactId, cellsData: cellsData, artifacts: artifacts, getDownstream: getDownstream }), _jsx(SqlCellResultNameEditor, { cellId: id, value: resultName, onChange: handleResultNameChange })] }));
91
87
  return renderContainer({
92
88
  header: (_jsxs("div", { className: "flex w-full items-center gap-2", children: [_jsx(SqlCellConnectionSelector, { connectors: dbConnections, selectedConnectorId: selectedConnectorId, onChange: handleConnectorChange }), _jsx(SqlCellRunButton, { onRun: handleRun, onCancel: handleCancel, status: status, runLabel: "Run" })] })),
93
89
  content,
@@ -1 +1 @@
1
- {"version":3,"file":"SqlCellContent.js","sourceRoot":"","sources":["../../src/components/SqlCellContent.tsx"],"names":[],"mappings":"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","sourcesContent":["import {getCoreDuckDbConnectionId} from '@sqlrooms/db';\nimport {useRoomStoreApi} from '@sqlrooms/room-store';\nimport {type Draft, produce} from 'immer';\nimport {CornerDownRightIcon} from 'lucide-react';\nimport React, {useCallback, useEffect, useMemo, useRef} from 'react';\nimport {useCellsStore} from '../hooks';\nimport type {\n CellContainerProps,\n CellsRootState,\n SqlCell,\n SqlCellStatus,\n} from '../types';\nimport {SqlCellConnectionSelector} from './SqlCellConnectionSelector';\nimport {SqlCellDependentsMenu} from './SqlCellDependentsMenu';\nimport {SqlCellEditor} from './SqlCellEditor';\nimport {SqlCellResultNameEditor} from './SqlCellResultNameEditor';\nimport {SqlCellResults} from './SqlCellResults';\nimport {SqlCellRunButton} from './SqlCellRunButton';\n\nexport type SqlCellContentProps = {\n id: string;\n cell: SqlCell;\n renderContainer: (props: CellContainerProps) => React.ReactElement;\n};\n\nexport const SqlCellContent: React.FC<SqlCellContentProps> = ({\n id,\n cell,\n renderContainer,\n}) => {\n const storeApi = useRoomStoreApi<CellsRootState>();\n const updateCell = useCellsStore((s) => s.cells.updateCell);\n const runCell = useCellsStore((s) => s.cells.runCell);\n const cancelCell = useCellsStore((s) => s.cells.cancelCell);\n const getDownstream = useCellsStore((s) => s.cells.getDownstream);\n const currentSheetId = useCellsStore((s) => s.cells.config.currentSheetId);\n const cellsData = useCellsStore((s) => s.cells.config.data);\n const sheets = useCellsStore((s) => s.cells.config.sheets);\n const cellStatus = useCellsStore((s) => s.cells.status[id]);\n const resultVersion = useCellsStore((s) => s.cells.resultVersion?.[id] ?? 0);\n const pageVersion = useCellsStore((s) => s.cells.pageVersion?.[id] ?? 0);\n const getCellResult = useCellsStore((s) => s.cells.getCellResult);\n const fetchCellResultPage = useCellsStore((s) => s.cells.fetchCellResultPage);\n const dbConnections = useCellsStore((s) => s.db.config.connections);\n const connector = useCellsStore((s) => s.db.connector);\n const tableSchemas = useCellsStore((s) => s.db.tables);\n\n // Re-read the cache whenever resultVersion or pageVersion changes\n const cellResult = useMemo(\n () => getCellResult(id),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [getCellResult, id, resultVersion, pageVersion],\n );\n\n const handleSqlChange = useCallback(\n (v: string | undefined) => {\n updateCell(id, (c) =>\n produce(c, (draft) => {\n if (draft.type === 'sql') {\n draft.data.sql = v || '';\n }\n }),\n );\n },\n [id, updateCell],\n );\n\n const handleRun = useCallback(() => {\n runCell(id);\n }, [id, runCell]);\n\n const handleRunQuery = useCallback(\n (query: string) => {\n // Sync the actual query being executed to store before running\n // to avoid race condition with onChange callback\n storeApi.setState(\n produce(storeApi.getState(), (draft: Draft<CellsRootState>) => {\n const c = draft.cells?.config?.data?.[id];\n if (c && c.type === 'sql') {\n c.data.sql = query;\n }\n }),\n );\n handleRunRef.current();\n },\n [id, storeApi],\n );\n\n const handleConnectorChange = useCallback(\n (connectorId: string) => {\n updateCell(id, (c) =>\n produce(c, (draft) => {\n if (draft.type === 'sql') {\n draft.data.connectorId = connectorId || undefined;\n }\n }),\n );\n },\n [id, updateCell],\n );\n\n const handleCancel = useCallback(() => {\n cancelCell(id);\n }, [id, cancelCell]);\n\n const handleResultNameChange = useCallback(\n (value: string) => {\n updateCell(id, (c) =>\n produce(c, (draft) => {\n if (draft.type === 'sql') {\n draft.data.resultName = value;\n }\n }),\n );\n },\n [id, updateCell],\n );\n\n const resultName = cell.data.resultName || '';\n const selectedConnectorId =\n cell.data.connectorId || getCoreDuckDbConnectionId();\n\n const status =\n cellStatus?.type === 'sql'\n ? {\n state: (cellStatus as SqlCellStatus).status,\n message: (cellStatus as SqlCellStatus).lastError,\n resultName:\n (cellStatus as SqlCellStatus).resultView ||\n (cellStatus as SqlCellStatus).resultName,\n lastRunTime: (cellStatus as SqlCellStatus).lastRunTime,\n }\n : undefined;\n\n const isRunning = status?.state === 'running';\n\n const handleRunRef = useRef(handleRun);\n useEffect(() => {\n handleRunRef.current = handleRun;\n }, [handleRun]);\n\n const content = (\n <div className=\"flex flex-col\">\n <SqlCellEditor\n sql={cell.data.sql}\n connector={connector}\n tableSchemas={tableSchemas}\n onChange={handleSqlChange}\n onRunQuery={handleRunQuery}\n />\n <SqlCellResults\n cellId={id}\n cellResult={cellResult}\n resultName={resultName}\n isRunning={isRunning}\n errorMessage={status?.state === 'error' ? status.message : undefined}\n resultVersion={resultVersion}\n fetchCellResultPage={fetchCellResultPage}\n />\n </div>\n );\n\n const footer = (\n <div className=\"text-muted-foreground flex items-center gap-1 px-2 py-1 text-xs\">\n <CornerDownRightIcon className=\"h-3 w-3\" />\n <SqlCellDependentsMenu\n cellId={id}\n currentSheetId={currentSheetId}\n cellsData={cellsData}\n sheets={sheets}\n getDownstream={getDownstream}\n />\n <SqlCellResultNameEditor\n cellId={id}\n value={resultName}\n onChange={handleResultNameChange}\n />\n </div>\n );\n\n return renderContainer({\n header: (\n <div className=\"flex w-full items-center gap-2\">\n <SqlCellConnectionSelector\n connectors={dbConnections}\n selectedConnectorId={selectedConnectorId}\n onChange={handleConnectorChange}\n />\n <SqlCellRunButton\n onRun={handleRun}\n onCancel={handleCancel}\n status={status}\n runLabel=\"Run\"\n />\n </div>\n ),\n content,\n footer,\n });\n};\n"]}
1
+ {"version":3,"file":"SqlCellContent.js","sourceRoot":"","sources":["../../src/components/SqlCellContent.tsx"],"names":[],"mappings":"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","sourcesContent":["import {getCoreDuckDbConnectionId} from '@sqlrooms/db';\nimport {useRoomStoreApi} from '@sqlrooms/room-store';\nimport {type Draft, produce} from 'immer';\nimport {CornerDownRightIcon} from 'lucide-react';\nimport React, {useCallback, useMemo} from 'react';\nimport {useCellsStore} from '../hooks';\nimport type {\n CellContainerProps,\n CellsRootState,\n SqlCell,\n SqlCellStatus,\n} from '../types';\nimport {SqlCellConnectionSelector} from './SqlCellConnectionSelector';\nimport {SqlCellDependentsMenu} from './SqlCellDependentsMenu';\nimport {SqlCellEditor} from './SqlCellEditor';\nimport {SqlCellResultNameEditor} from './SqlCellResultNameEditor';\nimport {SqlCellResults} from './SqlCellResults';\nimport {SqlCellRunButton} from './SqlCellRunButton';\n\nexport type SqlCellContentProps = {\n id: string;\n cell: SqlCell;\n renderContainer: (props: CellContainerProps) => React.ReactElement;\n};\n\nexport const SqlCellContent: React.FC<SqlCellContentProps> = ({\n id,\n cell,\n renderContainer,\n}) => {\n const storeApi = useRoomStoreApi<CellsRootState>();\n const updateCell = useCellsStore((s) => s.cells.updateCell);\n const runCell = useCellsStore((s) => s.cells.runCell);\n const cancelCell = useCellsStore((s) => s.cells.cancelCell);\n const getDownstream = useCellsStore((s) => s.cells.getDownstream);\n const artifactId = useCellsStore((s) => s.cells.getArtifactIdForCell(id));\n const cellsData = useCellsStore((s) => s.cells.config.data);\n const artifacts = useCellsStore((s) => s.cells.config.artifacts);\n const cellStatus = useCellsStore((s) => s.cells.status[id]);\n const resultVersion = useCellsStore((s) => s.cells.resultVersion?.[id] ?? 0);\n const pageVersion = useCellsStore((s) => s.cells.pageVersion?.[id] ?? 0);\n const getCellResult = useCellsStore((s) => s.cells.getCellResult);\n const fetchCellResultPage = useCellsStore((s) => s.cells.fetchCellResultPage);\n const dbConnections = useCellsStore((s) => s.db.config.connections);\n const connector = useCellsStore((s) => s.db.connector);\n const tableSchemas = useCellsStore((s) => s.db.tables);\n\n // Re-read the cache whenever resultVersion or pageVersion changes\n const cellResult = useMemo(\n () => getCellResult(id),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [getCellResult, id, resultVersion, pageVersion],\n );\n\n const handleSqlChange = useCallback(\n (v: string | undefined) => {\n updateCell(id, (c) =>\n produce(c, (draft) => {\n if (draft.type === 'sql') {\n draft.data.sql = v || '';\n }\n }),\n );\n },\n [id, updateCell],\n );\n\n const handleRun = useCallback(() => {\n runCell(id);\n }, [id, runCell]);\n\n const handleRunQuery = useCallback(\n (query: string) => {\n // Sync the actual query being executed to store before running\n // to avoid race condition with onChange callback\n storeApi.setState(\n produce(storeApi.getState(), (draft: Draft<CellsRootState>) => {\n const c = draft.cells?.config?.data?.[id];\n if (c && c.type === 'sql') {\n c.data.sql = query;\n }\n }),\n );\n runCell(id);\n },\n [id, runCell, storeApi],\n );\n\n const handleConnectorChange = useCallback(\n (connectorId: string) => {\n updateCell(id, (c) =>\n produce(c, (draft) => {\n if (draft.type === 'sql') {\n draft.data.connectorId = connectorId || undefined;\n }\n }),\n );\n },\n [id, updateCell],\n );\n\n const handleCancel = useCallback(() => {\n cancelCell(id);\n }, [id, cancelCell]);\n\n const handleResultNameChange = useCallback(\n (value: string) => {\n updateCell(id, (c) =>\n produce(c, (draft) => {\n if (draft.type === 'sql') {\n draft.data.resultName = value;\n }\n }),\n );\n },\n [id, updateCell],\n );\n\n const resultName = cell.data.resultName || '';\n const selectedConnectorId =\n cell.data.connectorId || getCoreDuckDbConnectionId();\n\n const status =\n cellStatus?.type === 'sql'\n ? {\n state: (cellStatus as SqlCellStatus).status,\n message: (cellStatus as SqlCellStatus).lastError,\n resultName:\n (cellStatus as SqlCellStatus).resultView ||\n (cellStatus as SqlCellStatus).resultName,\n lastRunTime: (cellStatus as SqlCellStatus).lastRunTime,\n }\n : undefined;\n\n const isRunning = status?.state === 'running';\n\n const content = (\n <div className=\"flex flex-col\">\n <SqlCellEditor\n sql={cell.data.sql}\n connector={connector}\n tableSchemas={tableSchemas}\n onChange={handleSqlChange}\n onRunQuery={handleRunQuery}\n />\n <SqlCellResults\n cellId={id}\n cellResult={cellResult}\n resultName={resultName}\n isRunning={isRunning}\n errorMessage={status?.state === 'error' ? status.message : undefined}\n resultVersion={resultVersion}\n fetchCellResultPage={fetchCellResultPage}\n />\n </div>\n );\n\n const footer = (\n <div className=\"text-muted-foreground flex items-center gap-1 px-2 py-1 text-xs\">\n <CornerDownRightIcon className=\"h-3 w-3\" />\n <SqlCellDependentsMenu\n cellId={id}\n artifactId={artifactId}\n cellsData={cellsData}\n artifacts={artifacts}\n getDownstream={getDownstream}\n />\n <SqlCellResultNameEditor\n cellId={id}\n value={resultName}\n onChange={handleResultNameChange}\n />\n </div>\n );\n\n return renderContainer({\n header: (\n <div className=\"flex w-full items-center gap-2\">\n <SqlCellConnectionSelector\n connectors={dbConnections}\n selectedConnectorId={selectedConnectorId}\n onChange={handleConnectorChange}\n />\n <SqlCellRunButton\n onRun={handleRun}\n onCancel={handleCancel}\n status={status}\n runLabel=\"Run\"\n />\n </div>\n ),\n content,\n footer,\n });\n};\n"]}
@@ -2,10 +2,10 @@ import React from 'react';
2
2
  import type { CellsSliceConfig } from '../types';
3
3
  export type SqlCellDependentsMenuProps = {
4
4
  cellId: string;
5
- currentSheetId: string | undefined;
5
+ artifactId: string | undefined;
6
6
  cellsData: CellsSliceConfig['data'];
7
- sheets: CellsSliceConfig['sheets'];
8
- getDownstream: (sheetId: string, cellId: string) => string[];
7
+ artifacts: CellsSliceConfig['artifacts'];
8
+ getDownstream: (artifactId: string, cellId: string) => string[];
9
9
  };
10
10
  export declare const SqlCellDependentsMenu: React.FC<SqlCellDependentsMenuProps>;
11
11
  //# sourceMappingURL=SqlCellDependentsMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SqlCellDependentsMenu.d.ts","sourceRoot":"","sources":["../../src/components/SqlCellDependentsMenu.tsx"],"names":[],"mappings":"AAQA,OAAO,KAA0D,MAAM,OAAO,CAAC;AAC/E,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAE/C,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACnC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CAC9D,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CA4GtE,CAAC"}
1
+ {"version":3,"file":"SqlCellDependentsMenu.d.ts","sourceRoot":"","sources":["../../src/components/SqlCellDependentsMenu.tsx"],"names":[],"mappings":"AAQA,OAAO,KAA0D,MAAM,OAAO,CAAC;AAC/E,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAE/C,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACzC,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CACjE,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CA4GtE,CAAC"}
@@ -1,15 +1,15 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from '@sqlrooms/ui';
3
3
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
- export const SqlCellDependentsMenu = ({ cellId, currentSheetId, cellsData, sheets, getDownstream, }) => {
4
+ export const SqlCellDependentsMenu = ({ cellId, artifactId, cellsData, artifacts, getDownstream, }) => {
5
5
  const [menuOpen, setMenuOpen] = useState(false);
6
6
  const closeMenuTimerRef = useRef(null);
7
7
  const downstreamCellIds = useMemo(() => {
8
- if (!currentSheetId)
8
+ if (!artifactId)
9
9
  return [];
10
- return getDownstream(currentSheetId, cellId);
10
+ return getDownstream(artifactId, cellId);
11
11
  // eslint-disable-next-line react-hooks/exhaustive-deps
12
- }, [currentSheetId, getDownstream, cellId, cellsData, sheets]);
12
+ }, [artifactId, getDownstream, cellId, cellsData, artifacts]);
13
13
  const downstreamCells = useMemo(() => downstreamCellIds.map((downstreamCellId) => {
14
14
  const downstreamCell = cellsData[downstreamCellId];
15
15
  return {