@sqlrooms/sql-editor 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README.md +3 -4
  2. package/dist/SqlEditor.d.ts.map +1 -1
  3. package/dist/SqlEditor.js +22 -136
  4. package/dist/SqlEditor.js.map +1 -1
  5. package/dist/SqlEditorSlice.d.ts +58 -15
  6. package/dist/SqlEditorSlice.d.ts.map +1 -1
  7. package/dist/SqlEditorSlice.js +244 -94
  8. package/dist/SqlEditorSlice.js.map +1 -1
  9. package/dist/SqlMonacoEditor.d.ts.map +1 -1
  10. package/dist/SqlMonacoEditor.js +2 -1
  11. package/dist/SqlMonacoEditor.js.map +1 -1
  12. package/dist/components/CreateTableModal.d.ts.map +1 -0
  13. package/dist/{CreateTableModal.js → components/CreateTableModal.js} +2 -10
  14. package/dist/components/CreateTableModal.js.map +1 -0
  15. package/dist/components/DeleteSqlQueryModal.d.ts.map +1 -0
  16. package/dist/components/DeleteSqlQueryModal.js.map +1 -0
  17. package/dist/components/QueryEditorPanel.d.ts +9 -0
  18. package/dist/components/QueryEditorPanel.d.ts.map +1 -0
  19. package/dist/components/QueryEditorPanel.js +14 -0
  20. package/dist/components/QueryEditorPanel.js.map +1 -0
  21. package/dist/components/QueryEditorPanelActions.d.ts +5 -0
  22. package/dist/components/QueryEditorPanelActions.d.ts.map +1 -0
  23. package/dist/components/QueryEditorPanelActions.js +53 -0
  24. package/dist/components/QueryEditorPanelActions.js.map +1 -0
  25. package/dist/components/QueryEditorPanelEditor.d.ts +5 -0
  26. package/dist/components/QueryEditorPanelEditor.d.ts.map +1 -0
  27. package/dist/components/QueryEditorPanelEditor.js +45 -0
  28. package/dist/components/QueryEditorPanelEditor.js.map +1 -0
  29. package/dist/components/QueryEditorPanelTabsList.d.ts +5 -0
  30. package/dist/components/QueryEditorPanelTabsList.d.ts.map +1 -0
  31. package/dist/components/QueryEditorPanelTabsList.js +71 -0
  32. package/dist/components/QueryEditorPanelTabsList.js.map +1 -0
  33. package/dist/components/QueryResultPanel.d.ts +12 -0
  34. package/dist/components/QueryResultPanel.d.ts.map +1 -0
  35. package/dist/components/QueryResultPanel.js +30 -0
  36. package/dist/components/QueryResultPanel.js.map +1 -0
  37. package/dist/components/RenameSqlQueryModal.d.ts.map +1 -0
  38. package/dist/components/RenameSqlQueryModal.js +29 -0
  39. package/dist/components/RenameSqlQueryModal.js.map +1 -0
  40. package/dist/components/SqlEditorHeader.d.ts +15 -0
  41. package/dist/components/SqlEditorHeader.d.ts.map +1 -0
  42. package/dist/components/SqlEditorHeader.js +7 -0
  43. package/dist/components/SqlEditorHeader.js.map +1 -0
  44. package/dist/components/SqlQueryDataSourcesPanel.d.ts.map +1 -0
  45. package/dist/components/SqlQueryDataSourcesPanel.js.map +1 -0
  46. package/dist/components/SqlReferenceButton.d.ts +12 -0
  47. package/dist/components/SqlReferenceButton.d.ts.map +1 -0
  48. package/dist/components/SqlReferenceButton.js +10 -0
  49. package/dist/components/SqlReferenceButton.js.map +1 -0
  50. package/dist/components/TableStructurePanel.d.ts +13 -0
  51. package/dist/components/TableStructurePanel.d.ts.map +1 -0
  52. package/dist/components/TableStructurePanel.js +21 -0
  53. package/dist/components/TableStructurePanel.js.map +1 -0
  54. package/dist/index.d.ts +10 -2
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +10 -2
  57. package/dist/index.js.map +1 -1
  58. package/package.json +17 -16
  59. package/dist/CreateTableModal.d.ts.map +0 -1
  60. package/dist/CreateTableModal.js.map +0 -1
  61. package/dist/DeleteSqlQueryModal.d.ts.map +0 -1
  62. package/dist/DeleteSqlQueryModal.js.map +0 -1
  63. package/dist/RenameSqlQueryModal.d.ts.map +0 -1
  64. package/dist/RenameSqlQueryModal.js +0 -27
  65. package/dist/RenameSqlQueryModal.js.map +0 -1
  66. package/dist/SqlQueryDataSourcesPanel.d.ts.map +0 -1
  67. package/dist/SqlQueryDataSourcesPanel.js.map +0 -1
  68. package/dist/hooks/index.d.ts +0 -5
  69. package/dist/hooks/index.d.ts.map +0 -1
  70. package/dist/hooks/index.js +0 -5
  71. package/dist/hooks/index.js.map +0 -1
  72. package/dist/hooks/useMonacoEditor.d.ts +0 -13
  73. package/dist/hooks/useMonacoEditor.d.ts.map +0 -1
  74. package/dist/hooks/useMonacoEditor.js +0 -78
  75. package/dist/hooks/useMonacoEditor.js.map +0 -1
  76. package/dist/hooks/useQueryExecution.d.ts +0 -17
  77. package/dist/hooks/useQueryExecution.d.ts.map +0 -1
  78. package/dist/hooks/useQueryExecution.js +0 -61
  79. package/dist/hooks/useQueryExecution.js.map +0 -1
  80. package/dist/hooks/useQueryTabManagement.d.ts +0 -41
  81. package/dist/hooks/useQueryTabManagement.d.ts.map +0 -1
  82. package/dist/hooks/useQueryTabManagement.js +0 -95
  83. package/dist/hooks/useQueryTabManagement.js.map +0 -1
  84. package/dist/hooks/useTableManagement.d.ts +0 -14
  85. package/dist/hooks/useTableManagement.d.ts.map +0 -1
  86. package/dist/hooks/useTableManagement.js +0 -46
  87. package/dist/hooks/useTableManagement.js.map +0 -1
  88. /package/dist/{CreateTableModal.d.ts → components/CreateTableModal.d.ts} +0 -0
  89. /package/dist/{DeleteSqlQueryModal.d.ts → components/DeleteSqlQueryModal.d.ts} +0 -0
  90. /package/dist/{DeleteSqlQueryModal.js → components/DeleteSqlQueryModal.js} +0 -0
  91. /package/dist/{RenameSqlQueryModal.d.ts → components/RenameSqlQueryModal.d.ts} +0 -0
  92. /package/dist/{SqlQueryDataSourcesPanel.d.ts → components/SqlQueryDataSourcesPanel.d.ts} +0 -0
  93. /package/dist/{SqlQueryDataSourcesPanel.js → components/SqlQueryDataSourcesPanel.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableStructurePanel.js","sourceRoot":"","sources":["../../src/components/TableStructurePanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAC,EAAE,EAAE,WAAW,EAAC,MAAM,cAAc,CAAC;AAC7C,OAAc,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAaxD,MAAM,CAAC,MAAM,mBAAmB,GAAuC,CAAC,EACtE,SAAS,EACT,MAAM,GAAG,GAAG,GACb,EAAE,EAAE;IACH,uBAAuB;IACvB,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE;QACvC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAE1B,MAAM,YAAY,GAAG,qBAAqB,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,wBAAwB,CACrC,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,6DAA6D,EAC7D,SAAS,CACV,aAEA,mBAAmB,IAAI,CACtB,KAAC,eAAe,IAAC,WAAW,EAAE,mBAAmB,GAAI,CACtD,EACA,YAAY,IAAI,CACf,KAAC,WAAW,IAAC,SAAS,EAAC,0CAA0C,GAAG,CACrE,IACG,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {TableSchemaTree} from '@sqlrooms/schema-tree';\nimport {cn, SpinnerPane} from '@sqlrooms/ui';\nimport React, {useMemo} from 'react';\nimport {useStoreWithSqlEditor} from '../SqlEditorSlice';\n\nexport interface TableStructurePanelProps {\n /** Custom class name for styling */\n className?: string;\n /** The database schema to use. Defaults to 'main'.\n * If '*' is provided, all tables will be shown.\n * If a function is provided, it will be used to filter the tables. */\n schema?: string | ((name: string) => boolean);\n /** Callback when a table is selected */\n onTableSelect?: (table: string | undefined) => void;\n}\n\nexport const TableStructurePanel: React.FC<TableStructurePanelProps> = ({\n className,\n schema = '*',\n}) => {\n // Get state from store\n const schemaTrees = useStoreWithSqlEditor((s) => s.db.schemaTrees);\n const filteredSchemaTrees = useMemo(() => {\n if (schema === '*') {\n return schemaTrees;\n }\n if (typeof schema === 'function') {\n return schemaTrees?.filter((tree) => schema(tree.object.name));\n }\n return schemaTrees?.filter((tree) => tree.object.name === schema);\n }, [schema, schemaTrees]);\n\n const isRefreshing = useStoreWithSqlEditor(\n (s) => s.db.isRefreshingTableSchemas,\n );\n\n return (\n <div\n className={cn(\n 'relative flex h-full flex-col gap-2 overflow-auto px-1 py-2',\n className,\n )}\n >\n {filteredSchemaTrees && (\n <TableSchemaTree schemaTrees={filteredSchemaTrees} />\n )}\n {isRefreshing && (\n <SpinnerPane className=\"bg-background/80 absolute inset-0 h-full\" />\n )}\n </div>\n );\n};\n"]}
package/dist/index.d.ts CHANGED
@@ -2,12 +2,20 @@
2
2
  * {@include ../README.md}
3
3
  * @packageDocumentation
4
4
  */
5
- export { default as CreateTableModal } from './CreateTableModal';
5
+ export { default as CreateTableModal } from './components/CreateTableModal';
6
6
  export { default as SqlEditor } from './SqlEditor';
7
7
  export type { SqlEditorProps as Props } from './SqlEditor';
8
8
  export { default as SqlEditorModal } from './SqlEditorModal';
9
9
  export { createDefaultSqlEditorConfig, createSqlEditorSlice, SqlEditorSliceConfig, } from './SqlEditorSlice';
10
10
  export type { SqlEditorSliceState } from './SqlEditorSlice';
11
- export { SqlQueryDataSourcesPanel } from './SqlQueryDataSourcesPanel';
11
+ export { SqlQueryDataSourcesPanel } from './components/SqlQueryDataSourcesPanel';
12
12
  export { SqlMonacoEditor } from './SqlMonacoEditor';
13
+ export { TableStructurePanel } from './components/TableStructurePanel';
14
+ export { QueryResultPanel } from './components/QueryResultPanel';
15
+ export { SqlEditorHeader } from './components/SqlEditorHeader';
16
+ export { SqlReferenceButton, SqlReferenceButtonContent, } from './components/SqlReferenceButton';
17
+ export { QueryEditorPanel } from './components/QueryEditorPanel';
18
+ export { QueryEditorPanelActions } from './components/QueryEditorPanelActions';
19
+ export { QueryEditorPanelTabsList } from './components/QueryEditorPanelTabsList';
20
+ export { QueryEditorPanelEditor } from './components/QueryEditorPanelEditor';
13
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,aAAa,CAAC;AACjD,YAAY,EAAC,cAAc,IAAI,KAAK,EAAC,MAAM,aAAa,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAC,mBAAmB,EAAC,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAC,wBAAwB,EAAC,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,aAAa,CAAC;AACjD,YAAY,EAAC,cAAc,IAAI,KAAK,EAAC,MAAM,aAAa,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAC,mBAAmB,EAAC,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,uBAAuB,EAAC,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC"}
package/dist/index.js CHANGED
@@ -2,10 +2,18 @@
2
2
  * {@include ../README.md}
3
3
  * @packageDocumentation
4
4
  */
5
- export { default as CreateTableModal } from './CreateTableModal';
5
+ export { default as CreateTableModal } from './components/CreateTableModal';
6
6
  export { default as SqlEditor } from './SqlEditor';
7
7
  export { default as SqlEditorModal } from './SqlEditorModal';
8
8
  export { createDefaultSqlEditorConfig, createSqlEditorSlice, SqlEditorSliceConfig, } from './SqlEditorSlice';
9
- export { SqlQueryDataSourcesPanel } from './SqlQueryDataSourcesPanel';
9
+ export { SqlQueryDataSourcesPanel } from './components/SqlQueryDataSourcesPanel';
10
10
  export { SqlMonacoEditor } from './SqlMonacoEditor';
11
+ export { TableStructurePanel } from './components/TableStructurePanel';
12
+ export { QueryResultPanel } from './components/QueryResultPanel';
13
+ export { SqlEditorHeader } from './components/SqlEditorHeader';
14
+ export { SqlReferenceButton, SqlReferenceButtonContent, } from './components/SqlReferenceButton';
15
+ export { QueryEditorPanel } from './components/QueryEditorPanel';
16
+ export { QueryEditorPanelActions } from './components/QueryEditorPanelActions';
17
+ export { QueryEditorPanelTabsList } from './components/QueryEditorPanelTabsList';
18
+ export { QueryEditorPanelEditor } from './components/QueryEditorPanelEditor';
11
19
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAC,wBAAwB,EAAC,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\nexport {default as CreateTableModal} from './CreateTableModal';\nexport {default as SqlEditor} from './SqlEditor';\nexport type {SqlEditorProps as Props} from './SqlEditor';\nexport {default as SqlEditorModal} from './SqlEditorModal';\nexport {\n createDefaultSqlEditorConfig,\n createSqlEditorSlice,\n SqlEditorSliceConfig,\n} from './SqlEditorSlice';\nexport type {SqlEditorSliceState} from './SqlEditorSlice';\nexport {SqlQueryDataSourcesPanel} from './SqlQueryDataSourcesPanel';\nexport {SqlMonacoEditor} from './SqlMonacoEditor';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,uBAAuB,EAAC,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\nexport {default as CreateTableModal} from './components/CreateTableModal';\nexport {default as SqlEditor} from './SqlEditor';\nexport type {SqlEditorProps as Props} from './SqlEditor';\nexport {default as SqlEditorModal} from './SqlEditorModal';\nexport {\n createDefaultSqlEditorConfig,\n createSqlEditorSlice,\n SqlEditorSliceConfig,\n} from './SqlEditorSlice';\nexport type {SqlEditorSliceState} from './SqlEditorSlice';\nexport {SqlQueryDataSourcesPanel} from './components/SqlQueryDataSourcesPanel';\nexport {SqlMonacoEditor} from './SqlMonacoEditor';\nexport {TableStructurePanel} from './components/TableStructurePanel';\nexport {QueryResultPanel} from './components/QueryResultPanel';\nexport {SqlEditorHeader} from './components/SqlEditorHeader';\nexport {\n SqlReferenceButton,\n SqlReferenceButtonContent,\n} from './components/SqlReferenceButton';\nexport {QueryEditorPanel} from './components/QueryEditorPanel';\nexport {QueryEditorPanelActions} from './components/QueryEditorPanelActions';\nexport {QueryEditorPanelTabsList} from './components/QueryEditorPanelTabsList';\nexport {QueryEditorPanelEditor} from './components/QueryEditorPanelEditor';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sqlrooms/sql-editor",
3
- "version": "0.14.0",
3
+ "version": "0.16.0",
4
4
  "private": false,
5
5
  "author": "Ilya Boyandin <ilya@boyandin.me>",
6
6
  "license": "MIT",
@@ -27,23 +27,24 @@
27
27
  "dependencies": {
28
28
  "@hookform/resolvers": "^3.10.0",
29
29
  "@monaco-editor/react": "^4.7.0",
30
- "@sqlrooms/data-table": "0.14.0",
31
- "@sqlrooms/duckdb": "0.14.0",
32
- "@sqlrooms/layout": "0.14.0",
33
- "@sqlrooms/monaco-editor": "0.14.0",
34
- "@sqlrooms/project-builder": "0.14.0",
35
- "@sqlrooms/project-config": "0.14.0",
36
- "@sqlrooms/ui": "0.14.0",
37
- "@sqlrooms/utils": "0.14.0",
38
- "apache-arrow": "^18.1.0",
30
+ "@sqlrooms/data-table": "0.16.0",
31
+ "@sqlrooms/duckdb": "0.16.0",
32
+ "@sqlrooms/layout": "0.16.0",
33
+ "@sqlrooms/monaco-editor": "0.16.0",
34
+ "@sqlrooms/project-builder": "0.16.0",
35
+ "@sqlrooms/project-config": "0.16.0",
36
+ "@sqlrooms/schema-tree": "0.16.0",
37
+ "@sqlrooms/ui": "0.16.0",
38
+ "@sqlrooms/utils": "0.16.0",
39
+ "apache-arrow": "18.1.0",
39
40
  "d3-dsv": "^3.0.1",
40
41
  "file-saver": "^2.0.5",
41
42
  "immer": "^10.1.1",
42
43
  "lucide-react": "^0.474.0",
43
44
  "monaco-editor": "^0.52.2",
44
- "react-hook-form": "^7.54.2",
45
- "zod": "^3.24.1",
46
- "zustand": "^5.0.3"
45
+ "react-hook-form": "^7.57.0",
46
+ "zod": "^3.25.57",
47
+ "zustand": "^5.0.5"
47
48
  },
48
49
  "peerDependencies": {
49
50
  "react": "*",
@@ -52,8 +53,8 @@
52
53
  "devDependencies": {
53
54
  "@types/d3-dsv": "^3.0.7",
54
55
  "@types/file-saver": "^2.0.7",
55
- "@types/react": "^18.2.48",
56
- "@types/react-dom": "^18.2.18"
56
+ "@types/react": "19.1.7",
57
+ "@types/react-dom": "^18.3.7"
57
58
  },
58
- "gitHead": "fb82a7e1be842348246bafdfeb93b6c41f5f9eb5"
59
+ "gitHead": "94dfdc97417dd715b9d6886122a3944b789b0b13"
59
60
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"CreateTableModal.d.ts","sourceRoot":"","sources":["../src/CreateTableModal.tsx"],"names":[],"mappings":"AACA,OAAO,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC;AAmB7D,OAAO,EAAC,EAAE,EAAc,MAAM,OAAO,CAAC;AAkBtC,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,qBAAqB,EAAE,CACrB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,MAAM,KAClB,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA6G/C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CreateTableModal.js","sourceRoot":"","sources":["../src/CreateTableModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import {zodResolver} from '@hookform/resolvers/zod';\nimport {SqlQueryDataSource} from '@sqlrooms/project-builder';\nimport {\n Alert,\n AlertDescription,\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n Input,\n} from '@sqlrooms/ui';\nimport {FC, useCallback} from 'react';\nimport {useForm} from 'react-hook-form';\nimport * as z from 'zod';\nimport {SqlMonacoEditor} from './SqlMonacoEditor';\n\nconst VALID_TABLE_OR_COLUMN_REGEX = /^[a-zA-Z_][a-zA-Z0-9_]{0,62}$/;\n\nconst formSchema = z.object({\n tableName: z\n .string()\n .min(1, 'Table name is required')\n .regex(\n VALID_TABLE_OR_COLUMN_REGEX,\n 'Only letters, digits and underscores are allowed; should not start with a digit',\n ),\n query: z.string().min(1, 'Query is required'),\n});\n\nexport type CreateTableModalProps = {\n query: string;\n isOpen: boolean;\n onClose: () => void;\n editDataSource?: SqlQueryDataSource;\n onAddOrUpdateSqlQuery: (\n tableName: string,\n query: string,\n oldTableName?: string,\n ) => Promise<void>;\n};\n\nconst CreateTableModal: FC<CreateTableModalProps> = (props) => {\n const {editDataSource, isOpen, onClose, onAddOrUpdateSqlQuery} = props;\n\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n values: {\n tableName: editDataSource?.tableName ?? '',\n query: editDataSource?.sqlQuery ?? props.query.trim(),\n },\n });\n\n const onSubmit = useCallback(\n async (values: z.infer<typeof formSchema>) => {\n try {\n const {tableName, query} = values;\n await onAddOrUpdateSqlQuery(\n tableName,\n query,\n editDataSource?.tableName,\n );\n form.reset();\n onClose();\n } catch (err) {\n form.setError('root', {type: 'manual', message: `${err}`});\n }\n },\n [onAddOrUpdateSqlQuery, editDataSource?.tableName, onClose, form],\n );\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent className=\"sm:max-w-[800px]\">\n {/* @ts-ignore */}\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-4\">\n <DialogHeader>\n <DialogTitle>\n {editDataSource\n ? 'Edit table query'\n : 'Create table from query'}\n </DialogTitle>\n {!editDataSource && (\n <DialogDescription>\n Create a new table from the results of an SQL query.\n </DialogDescription>\n )}\n </DialogHeader>\n\n {form.formState.errors.root && (\n <Alert variant=\"destructive\">\n <AlertDescription>\n {form.formState.errors.root.message}\n </AlertDescription>\n </Alert>\n )}\n\n <FormField\n // @ts-ignore\n control={form.control}\n name=\"tableName\"\n render={({field}) => (\n <FormItem>\n <FormLabel>Table name:</FormLabel>\n <FormControl>\n <Input {...field} className=\"font-mono\" autoFocus />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n\n <FormField\n // @ts-ignore\n control={form.control}\n name=\"query\"\n render={({field}) => (\n <FormItem>\n <FormLabel>SQL query:</FormLabel>\n <FormControl>\n <SqlMonacoEditor\n value={field.value}\n onChange={field.onChange}\n className=\"min-h-[200px]\"\n options={{\n scrollBeyondLastLine: false,\n automaticLayout: true,\n minimap: {enabled: false},\n wordWrap: 'on',\n }}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={form.formState.isSubmitting}>\n {editDataSource ? 'Update' : 'Create'}\n </Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default CreateTableModal;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeleteSqlQueryModal.d.ts","sourceRoot":"","sources":["../src/DeleteSqlQueryModal.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB,CAsBA,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeleteSqlQueryModal.js","sourceRoot":"","sources":["../src/DeleteSqlQueryModal.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,MAAM,GACP,MAAM,cAAc,CAAC;AAGtB,MAAM,mBAAmB,GAIpB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAC,EAAE,EAAE;IACpC,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,OAAO,EAAE,YAC9D,MAAC,aAAa,eACZ,MAAC,YAAY,eACX,KAAC,WAAW,+BAA2B,EACvC,KAAC,iBAAiB,4FAGE,IACP,EACf,MAAC,YAAY,eACX,KAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,OAAO,uBAEjC,EACT,KAAC,MAAM,IAAC,OAAO,EAAC,aAAa,EAAC,OAAO,EAAE,SAAS,uBAEvC,IACI,IACD,GACT,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC","sourcesContent":["import {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Button,\n} from '@sqlrooms/ui';\nimport React from 'react';\n\nconst DeleteSqlQueryModal: React.FC<{\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n}> = ({isOpen, onClose, onConfirm}) => {\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete Query</DialogTitle>\n <DialogDescription>\n Are you sure you want to delete this query? This action cannot be\n undone.\n </DialogDescription>\n </DialogHeader>\n <DialogFooter>\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button variant=\"destructive\" onClick={onConfirm}>\n Delete\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default DeleteSqlQueryModal;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RenameSqlQueryModal.d.ts","sourceRoot":"","sources":["../src/RenameSqlQueryModal.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAmDA,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -1,27 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, Button, Form, FormControl, FormField, FormItem, FormLabel, FormMessage, Input, } from '@sqlrooms/ui';
3
- import { useForm } from 'react-hook-form';
4
- import * as z from 'zod';
5
- import { zodResolver } from '@hookform/resolvers/zod';
6
- const formSchema = z.object({
7
- queryName: z.string().min(1, 'Query name is required'),
8
- });
9
- const RenameSqlQueryModal = ({ isOpen, onClose, initialName, onRename }) => {
10
- const form = useForm({
11
- resolver: zodResolver(formSchema),
12
- defaultValues: {
13
- queryName: initialName,
14
- },
15
- });
16
- function onSubmit(values) {
17
- onRename(values.queryName);
18
- onClose();
19
- }
20
- return (_jsx(Dialog, { open: isOpen, onOpenChange: (open) => !open && onClose(), children: _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: "Rename Query" }) }), _jsx(Form, { ...form, children: _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "space-y-4", children: [_jsx(FormField
21
- // @ts-ignore
22
- , {
23
- // @ts-ignore
24
- control: form.control, name: "queryName", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Query Name" }), _jsx(FormControl, { children: _jsx(Input, { ...field, autoFocus: true, placeholder: "Enter query name" }) }), _jsx(FormMessage, {})] })) }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "outline", onClick: onClose, children: "Cancel" }), _jsx(Button, { type: "submit", children: "Save" })] })] }) })] }) }));
25
- };
26
- export default RenameSqlQueryModal;
27
- //# sourceMappingURL=RenameSqlQueryModal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RenameSqlQueryModal.js","sourceRoot":"","sources":["../src/RenameSqlQueryModal.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,MAAM,EACN,IAAI,EACJ,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,KAAK,GACN,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AAEpD,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC;CACvD,CAAC,CAAC;AAIH,MAAM,mBAAmB,GAKpB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAC,EAAE,EAAE;IAChD,MAAM,IAAI,GAAG,OAAO,CAAW;QAC7B,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC;QACjC,aAAa,EAAE;YACb,SAAS,EAAE,WAAW;SACvB;KACF,CAAC,CAAC;IAEH,SAAS,QAAQ,CAAC,MAAgB;QAChC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,OAAO,EAAE,YAC9D,MAAC,aAAa,eACZ,KAAC,YAAY,cACX,KAAC,WAAW,+BAA2B,GAC1B,EAEf,KAAC,IAAI,OAAK,IAAI,YACZ,gBAAM,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAC,WAAW,aAChE,KAAC,SAAS;4BACR,aAAa;;gCAAb,aAAa;gCACb,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,IAAI,EAAC,WAAW,EAChB,MAAM,EAAE,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE,CAAC,CACnB,MAAC,QAAQ,eACP,KAAC,SAAS,6BAAuB,EACjC,KAAC,WAAW,cACV,KAAC,KAAK,OACA,KAAK,EACT,SAAS,QACT,WAAW,EAAC,kBAAkB,GAC9B,GACU,EACd,KAAC,WAAW,KAAG,IACN,CACZ,GACD,EACF,MAAC,YAAY,eACX,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,OAAO,uBAE/C,EACT,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,qBAAc,IACtB,IACV,GACF,IACO,GACT,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC","sourcesContent":["import {\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Button,\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n Input,\n} from '@sqlrooms/ui';\nimport React from 'react';\nimport {useForm} from 'react-hook-form';\nimport * as z from 'zod';\nimport {zodResolver} from '@hookform/resolvers/zod';\n\nconst formSchema = z.object({\n queryName: z.string().min(1, 'Query name is required'),\n});\n\ntype FormData = z.infer<typeof formSchema>;\n\nconst RenameSqlQueryModal: React.FC<{\n isOpen: boolean;\n onClose: () => void;\n initialName: string;\n onRename: (newName: string) => void;\n}> = ({isOpen, onClose, initialName, onRename}) => {\n const form = useForm<FormData>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n queryName: initialName,\n },\n });\n\n function onSubmit(values: FormData) {\n onRename(values.queryName);\n onClose();\n }\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Rename Query</DialogTitle>\n </DialogHeader>\n {/* @ts-ignore */}\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-4\">\n <FormField\n // @ts-ignore\n control={form.control}\n name=\"queryName\"\n render={({field}) => (\n <FormItem>\n <FormLabel>Query Name</FormLabel>\n <FormControl>\n <Input\n {...field}\n autoFocus\n placeholder=\"Enter query name\"\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\">Save</Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default RenameSqlQueryModal;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SqlQueryDataSourcesPanel.d.ts","sourceRoot":"","sources":["../src/SqlQueryDataSourcesPanel.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC;AAgB7D,OAAO,EAAC,EAAE,EAAwB,MAAM,OAAO,CAAC;AAGhD,QAAA,MAAM,wBAAwB,EAAE,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;CACxC,CAoHA,CAAC;AAEF,OAAO,EAAC,wBAAwB,EAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SqlQueryDataSourcesPanel.js","sourceRoot":"","sources":["../src/SqlQueryDataSourcesPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n DataSourceStatus,\n useBaseProjectBuilderStore,\n} from '@sqlrooms/project-builder';\nimport {SqlQueryDataSource} from '@sqlrooms/project-builder';\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@sqlrooms/ui';\nimport {\n EllipsisIcon,\n FileIcon,\n PencilIcon,\n PlusIcon,\n RefreshCcwIcon,\n XIcon,\n} from 'lucide-react';\nimport {FC, useCallback, useState} from 'react';\nimport CreateTableModal from './CreateTableModal';\n\nconst SqlQueryDataSourcesPanel: FC<{\n isReadOnly?: boolean;\n queryDataSources: SqlQueryDataSource[];\n}> = ({queryDataSources, isReadOnly}) => {\n const [selectedDataSource, setSelectedDataSource] =\n useState<SqlQueryDataSource>();\n const [isOpen, setIsOpen] = useState(false);\n const dataSourceStates = useBaseProjectBuilderStore(\n (state) => state.project.dataSourceStates,\n );\n const removeSqlQueryDataSource = useBaseProjectBuilderStore(\n (state) => state.project.removeSqlQueryDataSource,\n );\n\n const handleEdit = useCallback((dataSource: SqlQueryDataSource) => {\n setSelectedDataSource(dataSource);\n setIsOpen(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setSelectedDataSource(undefined);\n }, []);\n\n const handleRemove = useCallback(\n (dataSource: SqlQueryDataSource) => {\n const {tableName} = dataSource;\n removeSqlQueryDataSource(tableName);\n },\n [removeSqlQueryDataSource],\n );\n\n const addOrUpdateSqlQueryDataSource = useBaseProjectBuilderStore(\n (state) => state.project.addOrUpdateSqlQueryDataSource,\n );\n\n return (\n <div className=\"flex flex-grow flex-col overflow-auto\">\n <div className=\"flex flex-col items-stretch\">\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => setIsOpen(true)}\n disabled={isReadOnly}\n >\n <PlusIcon className=\"mr-2 h-4 w-4\" />\n Add\n </Button>\n </div>\n <CreateTableModal\n isOpen={isOpen}\n onClose={handleClose}\n editDataSource={selectedDataSource}\n query=\"\"\n onAddOrUpdateSqlQuery={addOrUpdateSqlQueryDataSource}\n />\n\n <div className=\"flex flex-grow flex-col overflow-auto\">\n {queryDataSources.map((dataSource) => (\n <div key={dataSource.tableName} className=\"flex flex-col gap-1 p-2\">\n <div className=\"flex cursor-pointer flex-row items-center gap-1\">\n <div className=\"w-[15px] flex-none\">\n <FileIcon className=\"w-[15px]\" />\n </div>\n <div className=\"flex-1 overflow-hidden text-ellipsis\">\n <span className=\"break-words text-xs\">\n {dataSource.tableName}\n </span>\n </div>\n <div className=\"flex-none\">\n {!isReadOnly ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"text-muted-foreground h-6 w-6\"\n >\n <EllipsisIcon className=\"h-5 w-5\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => handleEdit(dataSource)}>\n <PencilIcon className=\"mr-2 h-4 w-4\" />\n Edit\n </DropdownMenuItem>\n <DropdownMenuItem disabled>\n <RefreshCcwIcon className=\"mr-2 h-4 w-4\" />\n Refresh\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => handleRemove(dataSource)}\n >\n <XIcon className=\"mr-2 h-4 w-4\" />\n Remove from project\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n ) : null}\n </div>\n </div>\n <div className=\"flex flex-row items-center gap-1\">\n {dataSourceStates[dataSource.tableName]?.status ===\n DataSourceStatus.ERROR ? (\n <div className=\"bg-destructive/15 text-destructive flex-1 rounded p-1 text-xs\">\n {dataSourceStates[dataSource.tableName]?.message}\n </div>\n ) : dataSourceStates[dataSource.tableName]?.status ===\n DataSourceStatus.FETCHING ? (\n <div className=\"bg-secondary h-1 w-full overflow-hidden rounded\">\n <div className=\"bg-primary h-full animate-pulse\" />\n </div>\n ) : null}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nexport {SqlQueryDataSourcesPanel};\n"]}
@@ -1,5 +0,0 @@
1
- export * from './useQueryTabManagement';
2
- export * from './useTableManagement';
3
- export * from './useQueryExecution';
4
- export * from './useMonacoEditor';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
@@ -1,5 +0,0 @@
1
- export * from './useQueryTabManagement'; // Deprecated - use SqlEditorSlice methods directly
2
- export * from './useTableManagement';
3
- export * from './useQueryExecution';
4
- export * from './useMonacoEditor';
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC,CAAC,mDAAmD;AAC5F,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC","sourcesContent":["export * from './useQueryTabManagement'; // Deprecated - use SqlEditorSlice methods directly\nexport * from './useTableManagement';\nexport * from './useQueryExecution';\nexport * from './useMonacoEditor';\n"]}
@@ -1,13 +0,0 @@
1
- type EditorInstance = any;
2
- type MonacoInstance = any;
3
- /**
4
- * Hook for managing Monaco editor instances and keyboard shortcuts
5
- */
6
- export declare function useMonacoEditor(): {
7
- editorInstances: Record<string, any>;
8
- handleEditorMount: (editor: EditorInstance, monaco: MonacoInstance, queryId: string, onRunQuery: () => Promise<void>) => void;
9
- getQueryText: (queryId: string, defaultQuery: string) => string;
10
- setRunQueryHandler: (handler: () => Promise<void>) => void;
11
- };
12
- export {};
13
- //# sourceMappingURL=useMonacoEditor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMonacoEditor.d.ts","sourceRoot":"","sources":["../../src/hooks/useMonacoEditor.ts"],"names":[],"mappings":"AAEA,KAAK,cAAc,GAAG,GAAG,CAAC;AAC1B,KAAK,cAAc,GAAG,GAAG,CAAC;AAE1B;;GAEG;AACH,wBAAgB,eAAe;;gCAsBjB,cAAc,UACd,cAAc,WACb,MAAM,cACH,MAAM,OAAO,CAAC,IAAI,CAAC;4BAoBvB,MAAM,gBAAgB,MAAM,KAAG,MAAM;kCAhCA,MAAM,OAAO,CAAC,IAAI,CAAC;EAuFrE"}
@@ -1,78 +0,0 @@
1
- import { useRef, useState, useEffect, useCallback } from 'react';
2
- /**
3
- * Hook for managing Monaco editor instances and keyboard shortcuts
4
- */
5
- export function useMonacoEditor() {
6
- // Store editor instances for each query tab
7
- const [editorInstances, setEditorInstances] = useState({});
8
- // Use a ref for the run query function to avoid dependency issues
9
- // This ref is NOT for Zustand selectors, it's for function reference stability
10
- const handleRunQueryRef = useRef(async () => { });
11
- /**
12
- * Set the run query handler reference
13
- */
14
- const setRunQueryHandler = useCallback((handler) => {
15
- handleRunQueryRef.current = handler;
16
- }, []);
17
- /**
18
- * Handle editor mounting and setup keyboard shortcuts
19
- */
20
- const handleEditorMount = useCallback((editor, monaco, queryId, onRunQuery) => {
21
- // Store the editor instance
22
- setEditorInstances((prev) => ({
23
- ...prev,
24
- [queryId]: editor,
25
- }));
26
- // Add Cmd/Ctrl+Enter keyboard shortcut to run query
27
- editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter, () => {
28
- void handleRunQueryRef.current();
29
- });
30
- }, []);
31
- /**
32
- * Get selected text or entire query from the editor
33
- */
34
- const getQueryText = useCallback((queryId, defaultQuery) => {
35
- const editor = editorInstances[queryId];
36
- if (!editor)
37
- return defaultQuery;
38
- const selection = editor.getSelection();
39
- if (selection &&
40
- !selection.isEmpty() &&
41
- typeof editor.getModel().getValueInRange === 'function') {
42
- // Return selected text
43
- return editor.getModel().getValueInRange(selection);
44
- }
45
- // Return the entire query if no selection
46
- return defaultQuery;
47
- }, [editorInstances]);
48
- /**
49
- * Setup global keyboard shortcuts for running queries
50
- */
51
- useEffect(() => {
52
- // This global event listener is a fallback for when the editor doesn't have focus
53
- const handleKeyDown = (evt) => {
54
- if (evt instanceof KeyboardEvent &&
55
- evt.key === 'Enter' &&
56
- (evt.metaKey || evt.ctrlKey || evt.shiftKey)) {
57
- // Check if the event target is not part of the Monaco editor
58
- const target = evt.target;
59
- const isMonacoEditor = target.closest('.monaco-editor');
60
- // Only handle the event if it's not already being handled by Monaco
61
- if (!isMonacoEditor) {
62
- void handleRunQueryRef.current();
63
- }
64
- }
65
- };
66
- globalThis.addEventListener('keydown', handleKeyDown);
67
- return () => {
68
- globalThis.removeEventListener('keydown', handleKeyDown);
69
- };
70
- }, []);
71
- return {
72
- editorInstances,
73
- handleEditorMount,
74
- getQueryText,
75
- setRunQueryHandler,
76
- };
77
- }
78
- //# sourceMappingURL=useMonacoEditor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMonacoEditor.js","sourceRoot":"","sources":["../../src/hooks/useMonacoEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import {useRef, useState, useEffect, useCallback} from 'react';\n\ntype EditorInstance = any;\ntype MonacoInstance = any;\n\n/**\n * Hook for managing Monaco editor instances and keyboard shortcuts\n */\nexport function useMonacoEditor() {\n // Store editor instances for each query tab\n const [editorInstances, setEditorInstances] = useState<\n Record<string, EditorInstance>\n >({});\n\n // Use a ref for the run query function to avoid dependency issues\n // This ref is NOT for Zustand selectors, it's for function reference stability\n const handleRunQueryRef = useRef<() => Promise<void>>(async () => {});\n\n /**\n * Set the run query handler reference\n */\n const setRunQueryHandler = useCallback((handler: () => Promise<void>) => {\n handleRunQueryRef.current = handler;\n }, []);\n\n /**\n * Handle editor mounting and setup keyboard shortcuts\n */\n const handleEditorMount = useCallback(\n (\n editor: EditorInstance,\n monaco: MonacoInstance,\n queryId: string,\n onRunQuery: () => Promise<void>,\n ) => {\n // Store the editor instance\n setEditorInstances((prev) => ({\n ...prev,\n [queryId]: editor,\n }));\n\n // Add Cmd/Ctrl+Enter keyboard shortcut to run query\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter, () => {\n void handleRunQueryRef.current();\n });\n },\n [],\n );\n\n /**\n * Get selected text or entire query from the editor\n */\n const getQueryText = useCallback(\n (queryId: string, defaultQuery: string): string => {\n const editor = editorInstances[queryId];\n if (!editor) return defaultQuery;\n\n const selection = editor.getSelection();\n if (\n selection &&\n !selection.isEmpty() &&\n typeof editor.getModel().getValueInRange === 'function'\n ) {\n // Return selected text\n return editor.getModel().getValueInRange(selection);\n }\n\n // Return the entire query if no selection\n return defaultQuery;\n },\n [editorInstances],\n );\n\n /**\n * Setup global keyboard shortcuts for running queries\n */\n useEffect(() => {\n // This global event listener is a fallback for when the editor doesn't have focus\n const handleKeyDown = (evt: Event) => {\n if (\n evt instanceof KeyboardEvent &&\n evt.key === 'Enter' &&\n (evt.metaKey || evt.ctrlKey || evt.shiftKey)\n ) {\n // Check if the event target is not part of the Monaco editor\n const target = evt.target as HTMLElement;\n const isMonacoEditor = target.closest('.monaco-editor');\n\n // Only handle the event if it's not already being handled by Monaco\n if (!isMonacoEditor) {\n void handleRunQueryRef.current();\n }\n }\n };\n\n globalThis.addEventListener('keydown', handleKeyDown);\n\n return () => {\n globalThis.removeEventListener('keydown', handleKeyDown);\n };\n }, []);\n\n return {\n editorInstances,\n handleEditorMount,\n getQueryText,\n setRunQueryHandler,\n };\n}\n"]}
@@ -1,17 +0,0 @@
1
- import { Table } from 'apache-arrow';
2
- /**
3
- * Hook for executing SQL queries and managing results
4
- */
5
- export declare function useQueryExecution(schema?: string): {
6
- results: Table<any> | undefined;
7
- resultsTableData: {
8
- data: ArrayLike<any>;
9
- columns: import("@tanstack/table-core").ColumnDef<any, any>[];
10
- } | undefined;
11
- loading: boolean;
12
- error: string | null;
13
- runQuery: (q: string) => Promise<Table<any> | undefined>;
14
- exportResults: () => void;
15
- clearResults: () => void;
16
- };
17
- //# sourceMappingURL=useQueryExecution.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useQueryExecution.d.ts","sourceRoot":"","sources":["../../src/hooks/useQueryExecution.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAInC;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,MAAe;;;;;;;;kBAkB3C,MAAM;;;EAgDnB"}
@@ -1,61 +0,0 @@
1
- import { useState, useCallback } from 'react';
2
- import { useArrowDataTable } from '@sqlrooms/data-table';
3
- import { useStoreWithSqlEditor } from '../SqlEditorSlice';
4
- /**
5
- * Hook for executing SQL queries and managing results
6
- */
7
- export function useQueryExecution(schema = 'main') {
8
- const [results, setResults] = useState();
9
- const resultsTableData = useArrowDataTable(results);
10
- const [loading, setLoading] = useState(false);
11
- const [error, setError] = useState(null);
12
- // Get functions from SqlEditorSlice directly
13
- const executeQueryFromSlice = useStoreWithSqlEditor((s) => s.sqlEditor.executeQuery);
14
- const exportResultsToCsv = useStoreWithSqlEditor((s) => s.sqlEditor.exportResultsToCsv);
15
- /**
16
- * Execute a SQL query
17
- */
18
- const runQuery = useCallback(async (q) => {
19
- try {
20
- setLoading(true);
21
- setError(null);
22
- const { results: queryResults, error: queryError } = await executeQueryFromSlice(q, schema);
23
- if (queryError) {
24
- setError(queryError);
25
- setResults(undefined);
26
- }
27
- else if (queryResults) {
28
- setResults(queryResults);
29
- }
30
- return queryResults;
31
- }
32
- finally {
33
- setLoading(false);
34
- }
35
- }, [executeQueryFromSlice, schema]);
36
- /**
37
- * Export query results to CSV
38
- */
39
- const exportResults = useCallback(() => {
40
- if (!results)
41
- return;
42
- exportResultsToCsv(results);
43
- }, [exportResultsToCsv, results]);
44
- /**
45
- * Clear current query results
46
- */
47
- const clearResults = useCallback(() => {
48
- setResults(undefined);
49
- setError(null);
50
- }, []);
51
- return {
52
- results,
53
- resultsTableData,
54
- loading,
55
- error,
56
- runQuery,
57
- exportResults,
58
- clearResults,
59
- };
60
- }
61
- //# sourceMappingURL=useQueryExecution.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useQueryExecution.js","sourceRoot":"","sources":["../../src/hooks/useQueryExecution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,WAAW,EAAC,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAExD;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB,MAAM;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAS,CAAC;IAChD,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,6CAA6C;IAC7C,MAAM,qBAAqB,GAAG,qBAAqB,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAChC,CAAC;IACF,MAAM,kBAAkB,GAAG,qBAAqB,CAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CACtC,CAAC;IAEF;;OAEG;IACH,MAAM,QAAQ,GAAG,WAAW,CAC1B,KAAK,EAAE,CAAS,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEf,MAAM,EAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAC,GAC9C,MAAM,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAEzC,IAAI,UAAU,EAAE,CAAC;gBACf,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACrB,UAAU,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,YAAY,EAAE,CAAC;gBACxB,UAAU,CAAC,YAAY,CAAC,CAAC;YAC3B,CAAC;YAED,OAAO,YAAY,CAAC;QACtB,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EACD,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAChC,CAAC;IAEF;;OAEG;IACH,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC;IAElC;;OAEG;IACH,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,UAAU,CAAC,SAAS,CAAC,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,OAAO;QACP,gBAAgB;QAChB,OAAO;QACP,KAAK;QACL,QAAQ;QACR,aAAa;QACb,YAAY;KACb,CAAC;AACJ,CAAC","sourcesContent":["import {useState, useCallback} from 'react';\nimport {Table} from 'apache-arrow';\nimport {useArrowDataTable} from '@sqlrooms/data-table';\nimport {useStoreWithSqlEditor} from '../SqlEditorSlice';\n\n/**\n * Hook for executing SQL queries and managing results\n */\nexport function useQueryExecution(schema: string = 'main') {\n const [results, setResults] = useState<Table>();\n const resultsTableData = useArrowDataTable(results);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Get functions from SqlEditorSlice directly\n const executeQueryFromSlice = useStoreWithSqlEditor(\n (s) => s.sqlEditor.executeQuery,\n );\n const exportResultsToCsv = useStoreWithSqlEditor(\n (s) => s.sqlEditor.exportResultsToCsv,\n );\n\n /**\n * Execute a SQL query\n */\n const runQuery = useCallback(\n async (q: string) => {\n try {\n setLoading(true);\n setError(null);\n\n const {results: queryResults, error: queryError} =\n await executeQueryFromSlice(q, schema);\n\n if (queryError) {\n setError(queryError);\n setResults(undefined);\n } else if (queryResults) {\n setResults(queryResults);\n }\n\n return queryResults;\n } finally {\n setLoading(false);\n }\n },\n [executeQueryFromSlice, schema],\n );\n\n /**\n * Export query results to CSV\n */\n const exportResults = useCallback(() => {\n if (!results) return;\n exportResultsToCsv(results);\n }, [exportResultsToCsv, results]);\n\n /**\n * Clear current query results\n */\n const clearResults = useCallback(() => {\n setResults(undefined);\n setError(null);\n }, []);\n\n return {\n results,\n resultsTableData,\n loading,\n error,\n runQuery,\n exportResults,\n clearResults,\n };\n}\n"]}
@@ -1,41 +0,0 @@
1
- export type SqlQuery = {
2
- id: string;
3
- name: string;
4
- query: string;
5
- };
6
- /**
7
- * Hook for managing query tabs (adding, renaming, deleting)
8
- *
9
- * @deprecated Use the methods directly from SqlEditorSlice instead
10
- */
11
- export declare function useQueryTabManagement(defaultQuery?: string): {
12
- queries: {
13
- query: string;
14
- name: string;
15
- id: string;
16
- }[];
17
- selectedQueryId: string;
18
- queryToDelete: string | null;
19
- queryToRename: {
20
- id: string;
21
- name: string;
22
- } | null;
23
- getCurrentQuery: () => string;
24
- handleTabChange: (value: string) => void;
25
- handleUpdateQuery: (value: string | undefined) => void;
26
- handleNewQuery: () => {
27
- id: string;
28
- name: string;
29
- query: string;
30
- };
31
- handleStartRename: (queryId: string, currentName: string, event: React.MouseEvent) => void;
32
- handleFinishRename: (newName: string) => void;
33
- handleDeleteQuery: (queryId: string, event: React.MouseEvent) => void;
34
- handleConfirmDeleteQuery: () => void;
35
- setQueryToDelete: import("react").Dispatch<import("react").SetStateAction<string | null>>;
36
- setQueryToRename: import("react").Dispatch<import("react").SetStateAction<{
37
- id: string;
38
- name: string;
39
- } | null>>;
40
- };
41
- //# sourceMappingURL=useQueryTabManagement.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useQueryTabManagement.d.ts","sourceRoot":"","sources":["../../src/hooks/useQueryTabManagement.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,GAAE,MAAW;;;;;;;;;YAyBvD,MAAM;cACJ,MAAM;;;6BAcJ,MAAM;+BAUN,MAAM,GAAG,SAAS;;;;;;iCAkBhB,MAAM,eAAe,MAAM,SAAS,KAAK,CAAC,UAAU;kCAWpD,MAAM;iCAaN,MAAM,SAAS,KAAK,CAAC,UAAU;;;;YAnErC,MAAM;cACJ,MAAM;;EAmGf"}
@@ -1,95 +0,0 @@
1
- import { useState, useCallback } from 'react';
2
- import { useStoreWithSqlEditor } from '../SqlEditorSlice';
3
- /**
4
- * Hook for managing query tabs (adding, renaming, deleting)
5
- *
6
- * @deprecated Use the methods directly from SqlEditorSlice instead
7
- */
8
- export function useQueryTabManagement(defaultQuery = '') {
9
- // Get SQL editor config and functions from the store
10
- const sqlEditorConfig = useStoreWithSqlEditor((s) => s.config.sqlEditor);
11
- const createQueryTab = useStoreWithSqlEditor((s) => s.sqlEditor.createQueryTab);
12
- const deleteQueryTab = useStoreWithSqlEditor((s) => s.sqlEditor.deleteQueryTab);
13
- const renameQueryTab = useStoreWithSqlEditor((s) => s.sqlEditor.renameQueryTab);
14
- const updateQueryText = useStoreWithSqlEditor((s) => s.sqlEditor.updateQueryText);
15
- const setSelectedQueryId = useStoreWithSqlEditor((s) => s.sqlEditor.setSelectedQueryId);
16
- const getCurrentQueryFn = useStoreWithSqlEditor((s) => s.sqlEditor.getCurrentQuery);
17
- // Local state for modals
18
- const [queryToDelete, setQueryToDelete] = useState(null);
19
- const [queryToRename, setQueryToRename] = useState(null);
20
- /**
21
- * Get the currently selected query's SQL text
22
- */
23
- const getCurrentQuery = useCallback(() => {
24
- return getCurrentQueryFn(defaultQuery);
25
- }, [getCurrentQueryFn, defaultQuery]);
26
- /**
27
- * Change the selected tab
28
- */
29
- const handleTabChange = useCallback((value) => {
30
- setSelectedQueryId(value);
31
- }, [setSelectedQueryId]);
32
- /**
33
- * Update a query's SQL text
34
- */
35
- const handleUpdateQuery = useCallback((value) => {
36
- if (!value)
37
- return;
38
- updateQueryText(sqlEditorConfig.selectedQueryId, value);
39
- }, [sqlEditorConfig.selectedQueryId, updateQueryText]);
40
- /**
41
- * Create a new query tab
42
- */
43
- const handleNewQuery = useCallback(() => {
44
- return createQueryTab(defaultQuery);
45
- }, [createQueryTab, defaultQuery]);
46
- /**
47
- * Begin the rename process for a query
48
- */
49
- const handleStartRename = useCallback((queryId, currentName, event) => {
50
- event.preventDefault();
51
- setQueryToRename({ id: queryId, name: currentName });
52
- }, []);
53
- /**
54
- * Complete the rename process for a query
55
- */
56
- const handleFinishRename = useCallback((newName) => {
57
- if (queryToRename) {
58
- renameQueryTab(queryToRename.id, newName);
59
- }
60
- setQueryToRename(null);
61
- }, [queryToRename, renameQueryTab]);
62
- /**
63
- * Begin the delete process for a query
64
- */
65
- const handleDeleteQuery = useCallback((queryId, event) => {
66
- event.stopPropagation();
67
- setQueryToDelete(queryId);
68
- }, []);
69
- /**
70
- * Confirm and execute the deletion of a query
71
- */
72
- const handleConfirmDeleteQuery = useCallback(() => {
73
- if (queryToDelete) {
74
- deleteQueryTab(queryToDelete);
75
- setQueryToDelete(null);
76
- }
77
- }, [queryToDelete, deleteQueryTab]);
78
- return {
79
- queries: sqlEditorConfig.queries,
80
- selectedQueryId: sqlEditorConfig.selectedQueryId,
81
- queryToDelete,
82
- queryToRename,
83
- getCurrentQuery,
84
- handleTabChange,
85
- handleUpdateQuery,
86
- handleNewQuery,
87
- handleStartRename,
88
- handleFinishRename,
89
- handleDeleteQuery,
90
- handleConfirmDeleteQuery,
91
- setQueryToDelete,
92
- setQueryToRename,
93
- };
94
- }
95
- //# sourceMappingURL=useQueryTabManagement.js.map