@sqlrooms/sql-editor 0.7.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +210 -92
- package/dist/SqlEditor.d.ts.map +1 -1
- package/dist/SqlEditor.js +5 -5
- package/dist/SqlEditor.js.map +1 -1
- package/dist/SqlEditorModal.js +1 -1
- package/dist/SqlEditorModal.js.map +1 -1
- package/dist/SqlEditorSlice.js +10 -10
- package/dist/SqlEditorSlice.js.map +1 -1
- package/dist/SqlQueryDataSourcesPanel.js +3 -3
- package/dist/SqlQueryDataSourcesPanel.js.map +1 -1
- package/dist/TablesList.js +2 -2
- package/dist/TablesList.js.map +1 -1
- package/dist/hooks/useQueryTabManagement.d.ts.map +1 -1
- package/dist/hooks/useQueryTabManagement.js +1 -1
- package/dist/hooks/useQueryTabManagement.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +10 -10
- package/dist/SqlEditorSliceConfig.d.ts +0 -53
- package/dist/SqlEditorSliceConfig.d.ts.map +0 -1
- package/dist/SqlEditorSliceConfig.js +0 -15
- package/dist/SqlEditorSliceConfig.js.map +0 -1
- package/dist/components/internal/SqlMonacoEditor.d.ts +0 -36
- package/dist/components/internal/SqlMonacoEditor.d.ts.map +0 -1
- package/dist/components/internal/SqlMonacoEditor.js +0 -219
- package/dist/components/internal/SqlMonacoEditor.js.map +0 -1
- package/dist/constants/duckdb.d.ts +0 -73
- package/dist/constants/duckdb.d.ts.map +0 -1
- package/dist/constants/duckdb.js +0 -392
- package/dist/constants/duckdb.js.map +0 -1
package/dist/SqlEditorSlice.js
CHANGED
|
@@ -59,20 +59,20 @@ export function createSqlEditorSlice() {
|
|
|
59
59
|
saveAs(blob, filename || `export-${genRandomStr(5)}.csv`);
|
|
60
60
|
},
|
|
61
61
|
createQueryTab: (initialQuery = '') => {
|
|
62
|
-
const sqlEditorConfig = get().
|
|
62
|
+
const sqlEditorConfig = get().config.sqlEditor;
|
|
63
63
|
const newQuery = {
|
|
64
64
|
id: genRandomStr(8),
|
|
65
65
|
name: generateUniqueName('Untitled', sqlEditorConfig.queries.map((q) => q.name)),
|
|
66
66
|
query: initialQuery,
|
|
67
67
|
};
|
|
68
68
|
set((state) => produce(state, (draft) => {
|
|
69
|
-
draft.
|
|
70
|
-
draft.
|
|
69
|
+
draft.config.sqlEditor.queries.push(newQuery);
|
|
70
|
+
draft.config.sqlEditor.selectedQueryId = newQuery.id;
|
|
71
71
|
}));
|
|
72
72
|
return newQuery;
|
|
73
73
|
},
|
|
74
74
|
deleteQueryTab: (queryId) => {
|
|
75
|
-
const sqlEditorConfig = get().
|
|
75
|
+
const sqlEditorConfig = get().config.sqlEditor;
|
|
76
76
|
const queries = sqlEditorConfig.queries;
|
|
77
77
|
if (queries.length <= 1) {
|
|
78
78
|
// Don't delete the last query
|
|
@@ -84,21 +84,21 @@ export function createSqlEditorSlice() {
|
|
|
84
84
|
const isSelected = sqlEditorConfig.selectedQueryId === queryId;
|
|
85
85
|
const filteredQueries = queries.filter((q) => q.id !== queryId);
|
|
86
86
|
set((state) => produce(state, (draft) => {
|
|
87
|
-
draft.
|
|
87
|
+
draft.config.sqlEditor.queries = filteredQueries;
|
|
88
88
|
// If we're deleting the selected tab, select the previous one or the first one
|
|
89
89
|
if (isSelected && filteredQueries.length > 0) {
|
|
90
90
|
const newSelectedIndex = Math.max(0, index - 1);
|
|
91
91
|
// Safely access the ID with fallback to the first query if needed
|
|
92
92
|
const newSelectedId = filteredQueries[newSelectedIndex]?.id ?? filteredQueries[0]?.id;
|
|
93
93
|
if (newSelectedId) {
|
|
94
|
-
draft.
|
|
94
|
+
draft.config.sqlEditor.selectedQueryId = newSelectedId;
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
}));
|
|
98
98
|
},
|
|
99
99
|
renameQueryTab: (queryId, newName) => {
|
|
100
100
|
set((state) => produce(state, (draft) => {
|
|
101
|
-
const query = draft.
|
|
101
|
+
const query = draft.config.sqlEditor.queries.find((q) => q.id === queryId);
|
|
102
102
|
if (query) {
|
|
103
103
|
query.name = newName || query.name;
|
|
104
104
|
}
|
|
@@ -106,7 +106,7 @@ export function createSqlEditorSlice() {
|
|
|
106
106
|
},
|
|
107
107
|
updateQueryText: (queryId, queryText) => {
|
|
108
108
|
set((state) => produce(state, (draft) => {
|
|
109
|
-
const query = draft.
|
|
109
|
+
const query = draft.config.sqlEditor.queries.find((q) => q.id === queryId);
|
|
110
110
|
if (query) {
|
|
111
111
|
query.query = queryText;
|
|
112
112
|
}
|
|
@@ -114,11 +114,11 @@ export function createSqlEditorSlice() {
|
|
|
114
114
|
},
|
|
115
115
|
setSelectedQueryId: (queryId) => {
|
|
116
116
|
set((state) => produce(state, (draft) => {
|
|
117
|
-
draft.
|
|
117
|
+
draft.config.sqlEditor.selectedQueryId = queryId;
|
|
118
118
|
}));
|
|
119
119
|
},
|
|
120
120
|
getCurrentQuery: (defaultQuery = '') => {
|
|
121
|
-
const sqlEditorConfig = get().
|
|
121
|
+
const sqlEditorConfig = get().config.sqlEditor;
|
|
122
122
|
const selectedId = sqlEditorConfig.selectedQueryId;
|
|
123
123
|
// Find query by ID
|
|
124
124
|
const query = sqlEditorConfig.queries.find((q) => q.id === selectedId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqlEditorSlice.js","sourceRoot":"","sources":["../src/SqlEditorSlice.tsx"],"names":[],"mappings":"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","sourcesContent":["import {DuckQueryError, getDuckDb, getDuckTableSchemas} from '@sqlrooms/duckdb';\nimport {\n createSlice,\n ProjectState,\n StateCreator,\n useBaseProjectStore,\n} from '@sqlrooms/project-builder';\nimport {BaseProjectConfig} from '@sqlrooms/project-config';\nimport {generateUniqueName, genRandomStr} from '@sqlrooms/utils';\nimport {Table} from 'apache-arrow';\nimport {csvFormat} from 'd3-dsv';\nimport {saveAs} from 'file-saver';\nimport {produce} from 'immer';\nimport {z} from 'zod';\n\nexport const SqlEditorSliceConfig = z.object({\n sqlEditor: z.object({\n queries: z.array(\n z.object({\n id: z.string().describe('Query identifier.'),\n name: z.string().describe('Query name.'),\n query: z.string().describe('SQL query to execute.'),\n }),\n ),\n selectedQueryId: z\n .string()\n .default('default')\n .describe('The id of the currently selected query.'),\n }),\n});\nexport type SqlEditorSliceConfig = z.infer<typeof SqlEditorSliceConfig>;\n\nexport function createDefaultSqlEditorConfig(): SqlEditorSliceConfig {\n return {\n sqlEditor: {\n queries: [{id: 'default', name: 'Untitled', query: ''}],\n selectedQueryId: 'default',\n },\n };\n}\n\nexport type SqlEditorSliceState = {\n sqlEditor: {\n /**\n * Execute a SQL query and return the results.\n * @param query - The SQL query to execute.\n * @param schema - The schema to use (default: main).\n */\n executeQuery(\n query: string,\n schema?: string,\n ): Promise<{\n results?: Table;\n error?: string;\n }>;\n\n /**\n * Export query results to CSV.\n * @param results - The query results to export.\n * @param filename - Optional filename (default is generated).\n */\n exportResultsToCsv(results: Table, filename?: string): void;\n\n /**\n * Create a new query tab.\n * @param initialQuery - Optional initial query text.\n */\n createQueryTab(initialQuery?: string): {\n id: string;\n name: string;\n query: string;\n };\n\n /**\n * Delete a query tab.\n * @param queryId - The ID of the query to delete.\n */\n deleteQueryTab(queryId: string): void;\n\n /**\n * Rename a query tab.\n * @param queryId - The ID of the query to rename.\n * @param newName - The new name for the query.\n */\n renameQueryTab(queryId: string, newName: string): void;\n\n /**\n * Update the SQL text for a query.\n * @param queryId - The ID of the query to update.\n * @param queryText - The new SQL text.\n */\n updateQueryText(queryId: string, queryText: string): void;\n\n /**\n * Set the selected query tab.\n * @param queryId - The ID of the query to select.\n */\n setSelectedQueryId(queryId: string): void;\n\n /**\n * Get the currently selected query's SQL text.\n * @param defaultQuery - Optional default query text to return if no query is found.\n */\n getCurrentQuery(defaultQuery?: string): string;\n };\n};\n\nexport function createSqlEditorSlice<\n PC extends BaseProjectConfig & SqlEditorSliceConfig,\n>(): StateCreator<SqlEditorSliceState> {\n return createSlice<PC, SqlEditorSliceState>((set, get) => ({\n sqlEditor: {\n executeQuery: async (query, schema = 'main') => {\n const duckDb = await getDuckDb();\n if (!duckDb.conn) {\n return {error: 'No DuckDB connection available'};\n }\n\n try {\n await duckDb.conn.query(`SET search_path = ${schema}`);\n const results = await duckDb.conn.query(query);\n await duckDb.conn.query(`SET search_path = main`);\n\n // Refresh table schemas after query execution\n await get().project.refreshTableSchemas();\n\n return {results};\n } catch (e) {\n console.error(e);\n const errorMessage =\n e instanceof DuckQueryError\n ? e.getMessageForUser()\n : 'Query failed';\n\n return {error: errorMessage || String(e)};\n }\n },\n\n exportResultsToCsv: (results, filename) => {\n if (!results) return;\n const blob = new Blob([csvFormat(results.toArray())], {\n type: 'text/plain;charset=utf-8',\n });\n saveAs(blob, filename || `export-${genRandomStr(5)}.csv`);\n },\n\n createQueryTab: (initialQuery = '') => {\n const sqlEditorConfig = get().project.config.sqlEditor;\n const newQuery = {\n id: genRandomStr(8),\n name: generateUniqueName(\n 'Untitled',\n sqlEditorConfig.queries.map((q) => q.name),\n ),\n query: initialQuery,\n };\n\n set((state) =>\n produce(state, (draft) => {\n draft.project.config.sqlEditor.queries.push(newQuery);\n draft.project.config.sqlEditor.selectedQueryId = newQuery.id;\n }),\n );\n\n return newQuery;\n },\n\n deleteQueryTab: (queryId) => {\n const sqlEditorConfig = get().project.config.sqlEditor;\n const queries = sqlEditorConfig.queries;\n\n if (queries.length <= 1) {\n // Don't delete the last query\n return;\n }\n\n const index = queries.findIndex((q) => q.id === queryId);\n if (index === -1) return;\n\n const isSelected = sqlEditorConfig.selectedQueryId === queryId;\n const filteredQueries = queries.filter((q) => q.id !== queryId);\n\n set((state) =>\n produce(state, (draft) => {\n draft.project.config.sqlEditor.queries = filteredQueries;\n\n // If we're deleting the selected tab, select the previous one or the first one\n if (isSelected && filteredQueries.length > 0) {\n const newSelectedIndex = Math.max(0, index - 1);\n // Safely access the ID with fallback to the first query if needed\n const newSelectedId =\n filteredQueries[newSelectedIndex]?.id ?? filteredQueries[0]?.id;\n if (newSelectedId) {\n draft.project.config.sqlEditor.selectedQueryId = newSelectedId;\n }\n }\n }),\n );\n },\n\n renameQueryTab: (queryId, newName) => {\n set((state) =>\n produce(state, (draft) => {\n const query = draft.project.config.sqlEditor.queries.find(\n (q) => q.id === queryId,\n );\n if (query) {\n query.name = newName || query.name;\n }\n }),\n );\n },\n\n updateQueryText: (queryId, queryText) => {\n set((state) =>\n produce(state, (draft) => {\n const query = draft.project.config.sqlEditor.queries.find(\n (q) => q.id === queryId,\n );\n if (query) {\n query.query = queryText;\n }\n }),\n );\n },\n\n setSelectedQueryId: (queryId) => {\n set((state) =>\n produce(state, (draft) => {\n draft.project.config.sqlEditor.selectedQueryId = queryId;\n }),\n );\n },\n\n getCurrentQuery: (defaultQuery = '') => {\n const sqlEditorConfig = get().project.config.sqlEditor;\n const selectedId = sqlEditorConfig.selectedQueryId;\n // Find query by ID\n const query = sqlEditorConfig.queries.find((q) => q.id === selectedId);\n // If found, return its query text, otherwise default\n return query?.query || defaultQuery;\n },\n },\n }));\n}\n\ntype ProjectConfigWithSqlEditor = BaseProjectConfig & SqlEditorSliceConfig;\ntype ProjectStateWithSqlEditor = ProjectState<ProjectConfigWithSqlEditor> &\n SqlEditorSliceState;\n\nexport function useStoreWithSqlEditor<T>(\n selector: (state: ProjectStateWithSqlEditor) => T,\n): T {\n return useBaseProjectStore<\n BaseProjectConfig & SqlEditorSliceConfig,\n ProjectState<ProjectConfigWithSqlEditor>,\n T\n >((state) => selector(state as unknown as ProjectStateWithSqlEditor));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SqlEditorSlice.js","sourceRoot":"","sources":["../src/SqlEditorSlice.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,SAAS,EAAsB,MAAM,kBAAkB,CAAC;AAChF,OAAO,EACL,WAAW,EAGX,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAC,kBAAkB,EAAE,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAAC,SAAS,EAAC,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAC,MAAM,EAAC,MAAM,YAAY,CAAC;AAClC,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,CAAC,CAAC,KAAK,CACd,CAAC,CAAC,MAAM,CAAC;YACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;SACpD,CAAC,CACH;QACD,eAAe,EAAE,CAAC;aACf,MAAM,EAAE;aACR,OAAO,CAAC,SAAS,CAAC;aAClB,QAAQ,CAAC,yCAAyC,CAAC;KACvD,CAAC;CACH,CAAC,CAAC;AAGH,MAAM,UAAU,4BAA4B;IAC1C,OAAO;QACL,SAAS,EAAE;YACT,OAAO,EAAE,CAAC,EAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAC,CAAC;YACvD,eAAe,EAAE,SAAS;SAC3B;KACF,CAAC;AACJ,CAAC;AAoED,MAAM,UAAU,oBAAoB;IAGlC,OAAO,WAAW,CAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACzD,SAAS,EAAE;YACT,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE;gBAC7C,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBACjB,OAAO,EAAC,KAAK,EAAE,gCAAgC,EAAC,CAAC;gBACnD,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC;oBACvD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC/C,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;oBAElD,8CAA8C;oBAC9C,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;oBAE1C,OAAO,EAAC,OAAO,EAAC,CAAC;gBACnB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACjB,MAAM,YAAY,GAChB,CAAC,YAAY,cAAc;wBACzB,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE;wBACvB,CAAC,CAAC,cAAc,CAAC;oBAErB,OAAO,EAAC,KAAK,EAAE,YAAY,IAAI,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YAED,kBAAkB,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;gBACxC,IAAI,CAAC,OAAO;oBAAE,OAAO;gBACrB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE;oBACpD,IAAI,EAAE,0BAA0B;iBACjC,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,UAAU,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5D,CAAC;YAED,cAAc,EAAE,CAAC,YAAY,GAAG,EAAE,EAAE,EAAE;gBACpC,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC/C,MAAM,QAAQ,GAAG;oBACf,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;oBACnB,IAAI,EAAE,kBAAkB,CACtB,UAAU,EACV,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC3C;oBACD,KAAK,EAAE,YAAY;iBACpB,CAAC;gBAEF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC9C,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC;gBACvD,CAAC,CAAC,CACH,CAAC;gBAEF,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC1B,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;gBAExC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACxB,8BAA8B;oBAC9B,OAAO;gBACT,CAAC;gBAED,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;gBACzD,IAAI,KAAK,KAAK,CAAC,CAAC;oBAAE,OAAO;gBAEzB,MAAM,UAAU,GAAG,eAAe,CAAC,eAAe,KAAK,OAAO,CAAC;gBAC/D,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;gBAEhE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,eAAe,CAAC;oBAEjD,+EAA+E;oBAC/E,IAAI,UAAU,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC7C,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;wBAChD,kEAAkE;wBAClE,MAAM,aAAa,GACjB,eAAe,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;wBAClE,IAAI,aAAa,EAAE,CAAC;4BAClB,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,aAAa,CAAC;wBACzD,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;gBACnC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CACxB,CAAC;oBACF,IAAI,KAAK,EAAE,CAAC;wBACV,KAAK,CAAC,IAAI,GAAG,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC;oBACrC,CAAC;gBACH,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,eAAe,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;gBACtC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CACxB,CAAC;oBACF,IAAI,KAAK,EAAE,CAAC;wBACV,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;oBAC1B,CAAC;gBACH,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,kBAAkB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC9B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,OAAO,CAAC;gBACnD,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,eAAe,EAAE,CAAC,YAAY,GAAG,EAAE,EAAE,EAAE;gBACrC,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC/C,MAAM,UAAU,GAAG,eAAe,CAAC,eAAe,CAAC;gBACnD,mBAAmB;gBACnB,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;gBACvE,qDAAqD;gBACrD,OAAO,KAAK,EAAE,KAAK,IAAI,YAAY,CAAC;YACtC,CAAC;SACF;KACF,CAAC,CAAC,CAAC;AACN,CAAC;AAMD,MAAM,UAAU,qBAAqB,CACnC,QAAiD;IAEjD,OAAO,mBAAmB,CAIxB,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAA6C,CAAC,CAAC,CAAC;AACxE,CAAC","sourcesContent":["import {DuckQueryError, getDuckDb, getDuckTableSchemas} from '@sqlrooms/duckdb';\nimport {\n createSlice,\n ProjectState,\n StateCreator,\n useBaseProjectStore,\n} from '@sqlrooms/project-builder';\nimport {BaseProjectConfig} from '@sqlrooms/project-config';\nimport {generateUniqueName, genRandomStr} from '@sqlrooms/utils';\nimport {Table} from 'apache-arrow';\nimport {csvFormat} from 'd3-dsv';\nimport {saveAs} from 'file-saver';\nimport {produce} from 'immer';\nimport {z} from 'zod';\n\nexport const SqlEditorSliceConfig = z.object({\n sqlEditor: z.object({\n queries: z.array(\n z.object({\n id: z.string().describe('Query identifier.'),\n name: z.string().describe('Query name.'),\n query: z.string().describe('SQL query to execute.'),\n }),\n ),\n selectedQueryId: z\n .string()\n .default('default')\n .describe('The id of the currently selected query.'),\n }),\n});\nexport type SqlEditorSliceConfig = z.infer<typeof SqlEditorSliceConfig>;\n\nexport function createDefaultSqlEditorConfig(): SqlEditorSliceConfig {\n return {\n sqlEditor: {\n queries: [{id: 'default', name: 'Untitled', query: ''}],\n selectedQueryId: 'default',\n },\n };\n}\n\nexport type SqlEditorSliceState = {\n sqlEditor: {\n /**\n * Execute a SQL query and return the results.\n * @param query - The SQL query to execute.\n * @param schema - The schema to use (default: main).\n */\n executeQuery(\n query: string,\n schema?: string,\n ): Promise<{\n results?: Table;\n error?: string;\n }>;\n\n /**\n * Export query results to CSV.\n * @param results - The query results to export.\n * @param filename - Optional filename (default is generated).\n */\n exportResultsToCsv(results: Table, filename?: string): void;\n\n /**\n * Create a new query tab.\n * @param initialQuery - Optional initial query text.\n */\n createQueryTab(initialQuery?: string): {\n id: string;\n name: string;\n query: string;\n };\n\n /**\n * Delete a query tab.\n * @param queryId - The ID of the query to delete.\n */\n deleteQueryTab(queryId: string): void;\n\n /**\n * Rename a query tab.\n * @param queryId - The ID of the query to rename.\n * @param newName - The new name for the query.\n */\n renameQueryTab(queryId: string, newName: string): void;\n\n /**\n * Update the SQL text for a query.\n * @param queryId - The ID of the query to update.\n * @param queryText - The new SQL text.\n */\n updateQueryText(queryId: string, queryText: string): void;\n\n /**\n * Set the selected query tab.\n * @param queryId - The ID of the query to select.\n */\n setSelectedQueryId(queryId: string): void;\n\n /**\n * Get the currently selected query's SQL text.\n * @param defaultQuery - Optional default query text to return if no query is found.\n */\n getCurrentQuery(defaultQuery?: string): string;\n };\n};\n\nexport function createSqlEditorSlice<\n PC extends BaseProjectConfig & SqlEditorSliceConfig,\n>(): StateCreator<SqlEditorSliceState> {\n return createSlice<PC, SqlEditorSliceState>((set, get) => ({\n sqlEditor: {\n executeQuery: async (query, schema = 'main') => {\n const duckDb = await getDuckDb();\n if (!duckDb.conn) {\n return {error: 'No DuckDB connection available'};\n }\n\n try {\n await duckDb.conn.query(`SET search_path = ${schema}`);\n const results = await duckDb.conn.query(query);\n await duckDb.conn.query(`SET search_path = main`);\n\n // Refresh table schemas after query execution\n await get().project.refreshTableSchemas();\n\n return {results};\n } catch (e) {\n console.error(e);\n const errorMessage =\n e instanceof DuckQueryError\n ? e.getMessageForUser()\n : 'Query failed';\n\n return {error: errorMessage || String(e)};\n }\n },\n\n exportResultsToCsv: (results, filename) => {\n if (!results) return;\n const blob = new Blob([csvFormat(results.toArray())], {\n type: 'text/plain;charset=utf-8',\n });\n saveAs(blob, filename || `export-${genRandomStr(5)}.csv`);\n },\n\n createQueryTab: (initialQuery = '') => {\n const sqlEditorConfig = get().config.sqlEditor;\n const newQuery = {\n id: genRandomStr(8),\n name: generateUniqueName(\n 'Untitled',\n sqlEditorConfig.queries.map((q) => q.name),\n ),\n query: initialQuery,\n };\n\n set((state) =>\n produce(state, (draft) => {\n draft.config.sqlEditor.queries.push(newQuery);\n draft.config.sqlEditor.selectedQueryId = newQuery.id;\n }),\n );\n\n return newQuery;\n },\n\n deleteQueryTab: (queryId) => {\n const sqlEditorConfig = get().config.sqlEditor;\n const queries = sqlEditorConfig.queries;\n\n if (queries.length <= 1) {\n // Don't delete the last query\n return;\n }\n\n const index = queries.findIndex((q) => q.id === queryId);\n if (index === -1) return;\n\n const isSelected = sqlEditorConfig.selectedQueryId === queryId;\n const filteredQueries = queries.filter((q) => q.id !== queryId);\n\n set((state) =>\n produce(state, (draft) => {\n draft.config.sqlEditor.queries = filteredQueries;\n\n // If we're deleting the selected tab, select the previous one or the first one\n if (isSelected && filteredQueries.length > 0) {\n const newSelectedIndex = Math.max(0, index - 1);\n // Safely access the ID with fallback to the first query if needed\n const newSelectedId =\n filteredQueries[newSelectedIndex]?.id ?? filteredQueries[0]?.id;\n if (newSelectedId) {\n draft.config.sqlEditor.selectedQueryId = newSelectedId;\n }\n }\n }),\n );\n },\n\n renameQueryTab: (queryId, newName) => {\n set((state) =>\n produce(state, (draft) => {\n const query = draft.config.sqlEditor.queries.find(\n (q) => q.id === queryId,\n );\n if (query) {\n query.name = newName || query.name;\n }\n }),\n );\n },\n\n updateQueryText: (queryId, queryText) => {\n set((state) =>\n produce(state, (draft) => {\n const query = draft.config.sqlEditor.queries.find(\n (q) => q.id === queryId,\n );\n if (query) {\n query.query = queryText;\n }\n }),\n );\n },\n\n setSelectedQueryId: (queryId) => {\n set((state) =>\n produce(state, (draft) => {\n draft.config.sqlEditor.selectedQueryId = queryId;\n }),\n );\n },\n\n getCurrentQuery: (defaultQuery = '') => {\n const sqlEditorConfig = get().config.sqlEditor;\n const selectedId = sqlEditorConfig.selectedQueryId;\n // Find query by ID\n const query = sqlEditorConfig.queries.find((q) => q.id === selectedId);\n // If found, return its query text, otherwise default\n return query?.query || defaultQuery;\n },\n },\n }));\n}\n\ntype ProjectConfigWithSqlEditor = BaseProjectConfig & SqlEditorSliceConfig;\ntype ProjectStateWithSqlEditor = ProjectState<ProjectConfigWithSqlEditor> &\n SqlEditorSliceState;\n\nexport function useStoreWithSqlEditor<T>(\n selector: (state: ProjectStateWithSqlEditor) => T,\n): T {\n return useBaseProjectStore<\n BaseProjectConfig & SqlEditorSliceConfig,\n ProjectState<ProjectConfigWithSqlEditor>,\n T\n >((state) => selector(state as unknown as ProjectStateWithSqlEditor));\n}\n"]}
|
|
@@ -24,9 +24,9 @@ const SqlQueryDataSourcesPanel = (props) => {
|
|
|
24
24
|
}, [removeSqlQueryDataSource]);
|
|
25
25
|
const addOrUpdateSqlQueryDataSource = useBaseProjectStore((state) => state.project.addOrUpdateSqlQueryDataSource);
|
|
26
26
|
const isReadOnly = useBaseProjectStore((state) => state.project.isReadOnly);
|
|
27
|
-
return (_jsxs("div", { className: "flex flex-col overflow-auto
|
|
28
|
-
DataSourceStatus.ERROR ? (_jsx("div", { className: "
|
|
29
|
-
DataSourceStatus.FETCHING ? (_jsx("div", { className: "
|
|
27
|
+
return (_jsxs("div", { className: "flex flex-grow flex-col overflow-auto", children: [_jsx("div", { className: "flex flex-col items-stretch", children: _jsxs(Button, { variant: "secondary", size: "sm", onClick: () => setIsOpen(true), disabled: isReadOnly, children: [_jsx(PlusIcon, { className: "mr-2 h-4 w-4" }), "Add"] }) }), _jsx(CreateTableModal, { isOpen: isOpen, onClose: handleClose, editDataSource: selectedDataSource, query: "", onAddOrUpdateSqlQuery: addOrUpdateSqlQueryDataSource }), _jsx("div", { className: "flex flex-grow flex-col overflow-auto", children: queryDataSources.map((dataSource) => (_jsxs("div", { className: "flex flex-col gap-1 p-2", children: [_jsxs("div", { className: "flex cursor-pointer flex-row items-center gap-1", children: [_jsx("div", { className: "w-[15px] flex-none", children: _jsx(FileIcon, { className: "w-[15px]" }) }), _jsx("div", { className: "flex-1 overflow-hidden text-ellipsis", children: _jsx("span", { className: "break-words text-xs", children: dataSource.tableName }) }), _jsx("div", { className: "flex-none", children: !isReadOnly ? (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { size: "icon", variant: "ghost", className: "text-muted-foreground h-6 w-6", children: _jsx(EllipsisIcon, { className: "h-5 w-5" }) }) }), _jsxs(DropdownMenuContent, { align: "end", children: [_jsxs(DropdownMenuItem, { onClick: () => handleEdit(dataSource), children: [_jsx(PencilIcon, { className: "mr-2 h-4 w-4" }), "Edit"] }), _jsxs(DropdownMenuItem, { disabled: true, children: [_jsx(RefreshCcwIcon, { className: "mr-2 h-4 w-4" }), "Refresh"] }), _jsxs(DropdownMenuItem, { onClick: () => handleRemove(dataSource), children: [_jsx(XIcon, { className: "mr-2 h-4 w-4" }), "Remove from project"] })] })] })) : null })] }), _jsx("div", { className: "flex flex-row items-center gap-1", children: dataSourceStates[dataSource.tableName]?.status ===
|
|
28
|
+
DataSourceStatus.ERROR ? (_jsx("div", { className: "bg-destructive/15 text-destructive flex-1 rounded p-1 text-xs", children: dataSourceStates[dataSource.tableName]?.message })) : dataSourceStates[dataSource.tableName]?.status ===
|
|
29
|
+
DataSourceStatus.FETCHING ? (_jsx("div", { className: "bg-secondary h-1 w-full overflow-hidden rounded", children: _jsx("div", { className: "bg-primary h-full animate-pulse" }) })) : null })] }, dataSource.tableName))) })] }));
|
|
30
30
|
};
|
|
31
31
|
export { SqlQueryDataSourcesPanel };
|
|
32
32
|
//# sourceMappingURL=SqlQueryDataSourcesPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqlQueryDataSourcesPanel.js","sourceRoot":"","sources":["../src/SqlQueryDataSourcesPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,gBAAgB,EAAE,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAEhF,OAAO,EACL,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,cAAc,EACd,KAAK,GACN,MAAM,cAAc,CAAC;AACtB,OAAO,EAAK,WAAW,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAChD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAGlD,MAAM,wBAAwB,GAEzB,CAAC,KAAK,EAAE,EAAE;IACb,MAAM,EAAC,gBAAgB,EAAC,GAAG,KAAK,CAAC;IACjC,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAC/C,QAAQ,EAAsB,CAAC;IACjC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GAAG,mBAAmB,CAC1C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAC1C,CAAC;IACF,MAAM,wBAAwB,GAAG,mBAAmB,CAClD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAClD,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,UAA8B,EAAE,EAAE;QAChE,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAClC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,UAA8B,EAAE,EAAE;QACjC,MAAM,EAAC,SAAS,EAAC,GAAG,UAAU,CAAC;QAC/B,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,EACD,CAAC,wBAAwB,CAAC,CAC3B,CAAC;IAEF,MAAM,6BAA6B,GAAG,mBAAmB,CACvD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,6BAA6B,CACvD,CAAC;IAEF,MAAM,UAAU,GAAG,mBAAmB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE5E,OAAO,CACL,eAAK,SAAS,EAAC,uCAAuC,aACpD,cAAK,SAAS,EAAC,6BAA6B,YAC1C,MAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAC9B,QAAQ,EAAE,UAAU,aAEpB,KAAC,QAAQ,IAAC,SAAS,EAAC,cAAc,GAAG,WAE9B,GACL,EACN,KAAC,gBAAgB,IACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,EACpB,cAAc,EAAE,kBAAkB,EAClC,KAAK,EAAC,EAAE,EACR,qBAAqB,EAAE,6BAA6B,GACpD,EAEF,cAAK,SAAS,EAAC,uCAAuC,YACnD,gBAAgB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CACpC,eAAgC,SAAS,EAAC,yBAAyB,aACjE,eAAK,SAAS,EAAC,iDAAiD,aAC9D,cAAK,SAAS,EAAC,oBAAoB,YACjC,KAAC,QAAQ,IAAC,SAAS,EAAC,UAAU,GAAG,GAC7B,EACN,cAAK,SAAS,EAAC,sCAAsC,YACnD,eAAM,SAAS,EAAC,qBAAqB,YAClC,UAAU,CAAC,SAAS,GAChB,GACH,EACN,cAAK,SAAS,EAAC,WAAW,YACvB,CAAC,UAAU,CAAC,CAAC,CAAC,CACb,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,KAAC,MAAM,IACL,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,+BAA+B,YAEzC,KAAC,YAAY,IAAC,SAAS,EAAC,SAAS,GAAG,GAC7B,GACW,EACtB,MAAC,mBAAmB,IAAC,KAAK,EAAC,KAAK,aAC9B,MAAC,gBAAgB,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,aACrD,KAAC,UAAU,IAAC,SAAS,EAAC,cAAc,GAAG,YAEtB,EACnB,MAAC,gBAAgB,IAAC,QAAQ,mBACxB,KAAC,cAAc,IAAC,SAAS,EAAC,cAAc,GAAG,eAE1B,EACnB,MAAC,gBAAgB,IACf,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,aAEvC,KAAC,KAAK,IAAC,SAAS,EAAC,cAAc,GAAG,2BAEjB,IACC,IACT,CAChB,CAAC,CAAC,CAAC,IAAI,GACJ,IACF,EACN,cAAK,SAAS,EAAC,kCAAkC,YAC9C,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM;gCAC/C,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CACvB,cAAK,SAAS,EAAC,+DAA+D,YAC3E,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,GAC5C,CACP,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM;gCAChD,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC5B,cAAK,SAAS,EAAC,iDAAiD,YAC9D,cAAK,SAAS,EAAC,iCAAiC,GAAG,GAC/C,CACP,CAAC,CAAC,CAAC,IAAI,GACJ,KAtDE,UAAU,CAAC,SAAS,CAuDxB,CACP,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAC,wBAAwB,EAAC,CAAC","sourcesContent":["import {DataSourceStatus, useBaseProjectStore} from '@sqlrooms/project-builder';\nimport {SqlQueryDataSource} from '@sqlrooms/project-config';\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';\nimport {useStoreWithSqlEditor} from './SqlEditorSlice';\n\nconst SqlQueryDataSourcesPanel: FC<{\n queryDataSources: SqlQueryDataSource[];\n}> = (props) => {\n const {queryDataSources} = props;\n const [selectedDataSource, setSelectedDataSource] =\n useState<SqlQueryDataSource>();\n const [isOpen, setIsOpen] = useState(false);\n const dataSourceStates = useBaseProjectStore(\n (state) => state.project.dataSourceStates,\n );\n const removeSqlQueryDataSource = useBaseProjectStore(\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 = useBaseProjectStore(\n (state) => state.project.addOrUpdateSqlQueryDataSource,\n );\n\n const isReadOnly = useBaseProjectStore((state) => state.project.isReadOnly);\n\n return (\n <div className=\"flex flex-col overflow-auto
|
|
1
|
+
{"version":3,"file":"SqlQueryDataSourcesPanel.js","sourceRoot":"","sources":["../src/SqlQueryDataSourcesPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import {DataSourceStatus, useBaseProjectStore} from '@sqlrooms/project-builder';\nimport {SqlQueryDataSource} from '@sqlrooms/project-config';\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';\nimport {useStoreWithSqlEditor} from './SqlEditorSlice';\n\nconst SqlQueryDataSourcesPanel: FC<{\n queryDataSources: SqlQueryDataSource[];\n}> = (props) => {\n const {queryDataSources} = props;\n const [selectedDataSource, setSelectedDataSource] =\n useState<SqlQueryDataSource>();\n const [isOpen, setIsOpen] = useState(false);\n const dataSourceStates = useBaseProjectStore(\n (state) => state.project.dataSourceStates,\n );\n const removeSqlQueryDataSource = useBaseProjectStore(\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 = useBaseProjectStore(\n (state) => state.project.addOrUpdateSqlQueryDataSource,\n );\n\n const isReadOnly = useBaseProjectStore((state) => state.project.isReadOnly);\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"]}
|
package/dist/TablesList.js
CHANGED
|
@@ -2,8 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Button } from '@sqlrooms/ui';
|
|
3
3
|
import { TableIcon } from 'lucide-react';
|
|
4
4
|
const TablesList = (props) => {
|
|
5
|
-
const { tableNames, selectedTable, onSelect, renderTableButton = (tableName, onSelect) => (_jsxs(Button, { className: "w-full justify-start
|
|
6
|
-
return (_jsx("div", { className: "
|
|
5
|
+
const { tableNames, selectedTable, onSelect, renderTableButton = (tableName, onSelect) => (_jsxs(Button, { className: "min-h-[25px] w-full select-text justify-start overflow-hidden whitespace-normal break-words text-left text-sm font-normal", variant: selectedTable === tableName ? 'secondary' : 'ghost', size: "sm", onClick: () => onSelect(tableName), children: [_jsx(TableIcon, { className: "h-4 w-4" }), tableName] })), } = props;
|
|
6
|
+
return (_jsx("div", { className: "bg-background/10 h-full overflow-auto px-2 py-4", children: _jsx("ul", { className: "space-y-1", children: tableNames.map((tableName, i) => (_jsx("li", { children: _jsx("div", { className: "flex items-center gap-1", children: renderTableButton(tableName, onSelect) }) }, i))) }) }));
|
|
7
7
|
};
|
|
8
8
|
export { TablesList };
|
|
9
9
|
//# sourceMappingURL=TablesList.js.map
|
package/dist/TablesList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TablesList.js","sourceRoot":"","sources":["../src/TablesList.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAKvC,MAAM,UAAU,GAUX,CAAC,KAAK,EAAE,EAAE;IACb,MAAM,EACJ,UAAU,EACV,aAAa,EACb,QAAQ,EACR,iBAAiB,GAAG,CAAC,SAAiB,EAAE,QAA0B,EAAE,EAAE,CAAC,CACrE,MAAC,MAAM,IACL,SAAS,EAAC,2HAA2H,EACrI,OAAO,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAC5D,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,aAElC,KAAC,SAAS,IAAC,SAAS,EAAC,SAAS,GAAG,EAChC,SAAS,IACH,CACV,GACF,GAAG,KAAK,CAAC;IAEV,OAAO,CACL,cAAK,SAAS,EAAC,iDAAiD,YAC9D,aAAI,SAAS,EAAC,WAAW,YACtB,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAChC,uBACE,cAAK,SAAS,EAAC,yBAAyB,YACrC,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,GACnC,IAHC,CAAC,CAIL,CACN,CAAC,GACC,GACD,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAC,UAAU,EAAC,CAAC","sourcesContent":["import {Button} from '@sqlrooms/ui';\nimport {TableIcon} from 'lucide-react';\nimport type {FC} from 'react';\n\ntype OnSelectCallback = (name: string) => void;\n\nconst TablesList: FC<{\n schema: string;\n tableNames: string[];\n selectedTable?: string;\n onSelect: OnSelectCallback;\n onChange?: () => void;\n renderTableButton?: (\n tableName: string,\n onSelect: OnSelectCallback,\n ) => React.ReactNode;\n}> = (props) => {\n const {\n tableNames,\n selectedTable,\n onSelect,\n renderTableButton = (tableName: string, onSelect: OnSelectCallback) => (\n <Button\n className=\"w-full justify-start
|
|
1
|
+
{"version":3,"file":"TablesList.js","sourceRoot":"","sources":["../src/TablesList.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAKvC,MAAM,UAAU,GAUX,CAAC,KAAK,EAAE,EAAE;IACb,MAAM,EACJ,UAAU,EACV,aAAa,EACb,QAAQ,EACR,iBAAiB,GAAG,CAAC,SAAiB,EAAE,QAA0B,EAAE,EAAE,CAAC,CACrE,MAAC,MAAM,IACL,SAAS,EAAC,2HAA2H,EACrI,OAAO,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAC5D,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,aAElC,KAAC,SAAS,IAAC,SAAS,EAAC,SAAS,GAAG,EAChC,SAAS,IACH,CACV,GACF,GAAG,KAAK,CAAC;IAEV,OAAO,CACL,cAAK,SAAS,EAAC,iDAAiD,YAC9D,aAAI,SAAS,EAAC,WAAW,YACtB,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAChC,uBACE,cAAK,SAAS,EAAC,yBAAyB,YACrC,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,GACnC,IAHC,CAAC,CAIL,CACN,CAAC,GACC,GACD,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAC,UAAU,EAAC,CAAC","sourcesContent":["import {Button} from '@sqlrooms/ui';\nimport {TableIcon} from 'lucide-react';\nimport type {FC} from 'react';\n\ntype OnSelectCallback = (name: string) => void;\n\nconst TablesList: FC<{\n schema: string;\n tableNames: string[];\n selectedTable?: string;\n onSelect: OnSelectCallback;\n onChange?: () => void;\n renderTableButton?: (\n tableName: string,\n onSelect: OnSelectCallback,\n ) => React.ReactNode;\n}> = (props) => {\n const {\n tableNames,\n selectedTable,\n onSelect,\n renderTableButton = (tableName: string, onSelect: OnSelectCallback) => (\n <Button\n className=\"min-h-[25px] w-full select-text justify-start overflow-hidden whitespace-normal break-words text-left text-sm font-normal\"\n variant={selectedTable === tableName ? 'secondary' : 'ghost'}\n size=\"sm\"\n onClick={() => onSelect(tableName)}\n >\n <TableIcon className=\"h-4 w-4\" />\n {tableName}\n </Button>\n ),\n } = props;\n\n return (\n <div className=\"bg-background/10 h-full overflow-auto px-2 py-4\">\n <ul className=\"space-y-1\">\n {tableNames.map((tableName, i) => (\n <li key={i}>\n <div className=\"flex items-center gap-1\">\n {renderTableButton(tableName, onSelect)}\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n\nexport {TablesList};\n"]}
|
|
@@ -1 +1 @@
|
|
|
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;;;;;;;;;
|
|
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"}
|
|
@@ -7,7 +7,7 @@ import { useStoreWithSqlEditor } from '../SqlEditorSlice';
|
|
|
7
7
|
*/
|
|
8
8
|
export function useQueryTabManagement(defaultQuery = '') {
|
|
9
9
|
// Get SQL editor config and functions from the store
|
|
10
|
-
const sqlEditorConfig = useStoreWithSqlEditor((s) => s.
|
|
10
|
+
const sqlEditorConfig = useStoreWithSqlEditor((s) => s.config.sqlEditor);
|
|
11
11
|
const createQueryTab = useStoreWithSqlEditor((s) => s.sqlEditor.createQueryTab);
|
|
12
12
|
const deleteQueryTab = useStoreWithSqlEditor((s) => s.sqlEditor.deleteQueryTab);
|
|
13
13
|
const renameQueryTab = useStoreWithSqlEditor((s) => s.sqlEditor.renameQueryTab);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQueryTabManagement.js","sourceRoot":"","sources":["../../src/hooks/useQueryTabManagement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,WAAW,EAAC,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAQxD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,eAAuB,EAAE;IAC7D,qDAAqD;IACrD,MAAM,eAAe,GAAG,qBAAqB,
|
|
1
|
+
{"version":3,"file":"useQueryTabManagement.js","sourceRoot":"","sources":["../../src/hooks/useQueryTabManagement.ts"],"names":[],"mappings":"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","sourcesContent":["import {useState, useCallback} from 'react';\nimport {useStoreWithSqlEditor} from '../SqlEditorSlice';\n\nexport type SqlQuery = {\n id: string;\n name: string;\n query: string;\n};\n\n/**\n * Hook for managing query tabs (adding, renaming, deleting)\n *\n * @deprecated Use the methods directly from SqlEditorSlice instead\n */\nexport function useQueryTabManagement(defaultQuery: string = '') {\n // Get SQL editor config and functions from the store\n const sqlEditorConfig = useStoreWithSqlEditor((s) => s.config.sqlEditor);\n const createQueryTab = useStoreWithSqlEditor(\n (s) => s.sqlEditor.createQueryTab,\n );\n const deleteQueryTab = useStoreWithSqlEditor(\n (s) => s.sqlEditor.deleteQueryTab,\n );\n const renameQueryTab = useStoreWithSqlEditor(\n (s) => s.sqlEditor.renameQueryTab,\n );\n const updateQueryText = useStoreWithSqlEditor(\n (s) => s.sqlEditor.updateQueryText,\n );\n const setSelectedQueryId = useStoreWithSqlEditor(\n (s) => s.sqlEditor.setSelectedQueryId,\n );\n const getCurrentQueryFn = useStoreWithSqlEditor(\n (s) => s.sqlEditor.getCurrentQuery,\n );\n\n // Local state for modals\n const [queryToDelete, setQueryToDelete] = useState<string | null>(null);\n const [queryToRename, setQueryToRename] = useState<{\n id: string;\n name: string;\n } | null>(null);\n\n /**\n * Get the currently selected query's SQL text\n */\n const getCurrentQuery = useCallback(() => {\n return getCurrentQueryFn(defaultQuery);\n }, [getCurrentQueryFn, defaultQuery]);\n\n /**\n * Change the selected tab\n */\n const handleTabChange = useCallback(\n (value: string) => {\n setSelectedQueryId(value);\n },\n [setSelectedQueryId],\n );\n\n /**\n * Update a query's SQL text\n */\n const handleUpdateQuery = useCallback(\n (value: string | undefined) => {\n if (!value) return;\n updateQueryText(sqlEditorConfig.selectedQueryId, value);\n },\n [sqlEditorConfig.selectedQueryId, updateQueryText],\n );\n\n /**\n * Create a new query tab\n */\n const handleNewQuery = useCallback(() => {\n return createQueryTab(defaultQuery);\n }, [createQueryTab, defaultQuery]);\n\n /**\n * Begin the rename process for a query\n */\n const handleStartRename = useCallback(\n (queryId: string, currentName: string, event: React.MouseEvent) => {\n event.preventDefault();\n setQueryToRename({id: queryId, name: currentName});\n },\n [],\n );\n\n /**\n * Complete the rename process for a query\n */\n const handleFinishRename = useCallback(\n (newName: string) => {\n if (queryToRename) {\n renameQueryTab(queryToRename.id, newName);\n }\n setQueryToRename(null);\n },\n [queryToRename, renameQueryTab],\n );\n\n /**\n * Begin the delete process for a query\n */\n const handleDeleteQuery = useCallback(\n (queryId: string, event: React.MouseEvent) => {\n event.stopPropagation();\n setQueryToDelete(queryId);\n },\n [],\n );\n\n /**\n * Confirm and execute the deletion of a query\n */\n const handleConfirmDeleteQuery = useCallback(() => {\n if (queryToDelete) {\n deleteQueryTab(queryToDelete);\n setQueryToDelete(null);\n }\n }, [queryToDelete, deleteQueryTab]);\n\n return {\n queries: sqlEditorConfig.queries,\n selectedQueryId: sqlEditorConfig.selectedQueryId,\n queryToDelete,\n queryToRename,\n getCurrentQuery,\n handleTabChange,\n handleUpdateQuery,\n handleNewQuery,\n handleStartRename,\n handleFinishRename,\n handleDeleteQuery,\n handleConfirmDeleteQuery,\n setQueryToDelete,\n setQueryToRename,\n };\n}\n"]}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,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,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"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,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":["
|
|
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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sqlrooms/sql-editor",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Ilya Boyandin <ilya@boyandin.me>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,14 +27,14 @@
|
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@hookform/resolvers": "^3.10.0",
|
|
29
29
|
"@monaco-editor/react": "^4.7.0",
|
|
30
|
-
"@sqlrooms/data-table": "0.
|
|
31
|
-
"@sqlrooms/duckdb": "0.
|
|
32
|
-
"@sqlrooms/layout": "0.
|
|
33
|
-
"@sqlrooms/monaco-editor": "0.
|
|
34
|
-
"@sqlrooms/project-builder": "0.
|
|
35
|
-
"@sqlrooms/project-config": "0.
|
|
36
|
-
"@sqlrooms/ui": "0.
|
|
37
|
-
"@sqlrooms/utils": "0.
|
|
30
|
+
"@sqlrooms/data-table": "0.8.1",
|
|
31
|
+
"@sqlrooms/duckdb": "0.8.1",
|
|
32
|
+
"@sqlrooms/layout": "0.8.1",
|
|
33
|
+
"@sqlrooms/monaco-editor": "0.8.1",
|
|
34
|
+
"@sqlrooms/project-builder": "0.8.1",
|
|
35
|
+
"@sqlrooms/project-config": "0.8.1",
|
|
36
|
+
"@sqlrooms/ui": "0.8.1",
|
|
37
|
+
"@sqlrooms/utils": "0.8.1",
|
|
38
38
|
"apache-arrow": "^18.1.0",
|
|
39
39
|
"d3-dsv": "^3.0.1",
|
|
40
40
|
"file-saver": "^2.0.5",
|
|
@@ -55,5 +55,5 @@
|
|
|
55
55
|
"@types/react": "^18.2.48",
|
|
56
56
|
"@types/react-dom": "^18.2.18"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "7b5e727b79d675c17b93412c109d1ba1b22699c8"
|
|
59
59
|
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export declare const SqlEditorSliceConfig: z.ZodObject<{
|
|
3
|
-
sqlEditor: z.ZodObject<{
|
|
4
|
-
queries: z.ZodArray<z.ZodObject<{
|
|
5
|
-
id: z.ZodString;
|
|
6
|
-
name: z.ZodString;
|
|
7
|
-
query: z.ZodString;
|
|
8
|
-
}, "strip", z.ZodTypeAny, {
|
|
9
|
-
query: string;
|
|
10
|
-
name: string;
|
|
11
|
-
id: string;
|
|
12
|
-
}, {
|
|
13
|
-
query: string;
|
|
14
|
-
name: string;
|
|
15
|
-
id: string;
|
|
16
|
-
}>, "many">;
|
|
17
|
-
selectedQueryId: z.ZodDefault<z.ZodString>;
|
|
18
|
-
}, "strip", z.ZodTypeAny, {
|
|
19
|
-
queries: {
|
|
20
|
-
query: string;
|
|
21
|
-
name: string;
|
|
22
|
-
id: string;
|
|
23
|
-
}[];
|
|
24
|
-
selectedQueryId: string;
|
|
25
|
-
}, {
|
|
26
|
-
queries: {
|
|
27
|
-
query: string;
|
|
28
|
-
name: string;
|
|
29
|
-
id: string;
|
|
30
|
-
}[];
|
|
31
|
-
selectedQueryId?: string | undefined;
|
|
32
|
-
}>;
|
|
33
|
-
}, "strip", z.ZodTypeAny, {
|
|
34
|
-
sqlEditor: {
|
|
35
|
-
queries: {
|
|
36
|
-
query: string;
|
|
37
|
-
name: string;
|
|
38
|
-
id: string;
|
|
39
|
-
}[];
|
|
40
|
-
selectedQueryId: string;
|
|
41
|
-
};
|
|
42
|
-
}, {
|
|
43
|
-
sqlEditor: {
|
|
44
|
-
queries: {
|
|
45
|
-
query: string;
|
|
46
|
-
name: string;
|
|
47
|
-
id: string;
|
|
48
|
-
}[];
|
|
49
|
-
selectedQueryId?: string | undefined;
|
|
50
|
-
};
|
|
51
|
-
}>;
|
|
52
|
-
export type SqlEditorSliceConfig = z.infer<typeof SqlEditorSliceConfig>;
|
|
53
|
-
//# sourceMappingURL=SqlEditorSliceConfig.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SqlEditorSliceConfig.d.ts","sourceRoot":"","sources":["../src/SqlEditorSliceConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc/B,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export const SqlEditorSliceConfig = z.object({
|
|
3
|
-
sqlEditor: z.object({
|
|
4
|
-
queries: z.array(z.object({
|
|
5
|
-
id: z.string().describe('Query identifier.'),
|
|
6
|
-
name: z.string().describe('Query name.'),
|
|
7
|
-
query: z.string().describe('SQL query to execute.'),
|
|
8
|
-
})),
|
|
9
|
-
selectedQueryId: z
|
|
10
|
-
.string()
|
|
11
|
-
.default('default')
|
|
12
|
-
.describe('The id of the currently selected query.'),
|
|
13
|
-
}),
|
|
14
|
-
});
|
|
15
|
-
//# sourceMappingURL=SqlEditorSliceConfig.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SqlEditorSliceConfig.js","sourceRoot":"","sources":["../src/SqlEditorSliceConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,CAAC,CAAC,KAAK,CACd,CAAC,CAAC,MAAM,CAAC;YACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;SACpD,CAAC,CACH;QACD,eAAe,EAAE,CAAC;aACf,MAAM,EAAE;aACR,OAAO,CAAC,SAAS,CAAC;aAClB,QAAQ,CAAC,yCAAyC,CAAC;KACvD,CAAC;CACH,CAAC,CAAC","sourcesContent":["import {z} from 'zod';\n\nexport const SqlEditorSliceConfig = z.object({\n sqlEditor: z.object({\n queries: z.array(\n z.object({\n id: z.string().describe('Query identifier.'),\n name: z.string().describe('Query name.'),\n query: z.string().describe('SQL query to execute.'),\n }),\n ),\n selectedQueryId: z\n .string()\n .default('default')\n .describe('The id of the currently selected query.'),\n }),\n});\nexport type SqlEditorSliceConfig = z.infer<typeof SqlEditorSliceConfig>;\n"]}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { MonacoEditorProps } from '@sqlrooms/monaco-editor';
|
|
3
|
-
export interface SqlMonacoEditorProps extends Omit<MonacoEditorProps, 'language'> {
|
|
4
|
-
/**
|
|
5
|
-
* Custom SQL keywords to add to the completion provider
|
|
6
|
-
*/
|
|
7
|
-
customKeywords?: string[];
|
|
8
|
-
/**
|
|
9
|
-
* Custom SQL functions to add to the completion provider
|
|
10
|
-
*/
|
|
11
|
-
customFunctions?: string[];
|
|
12
|
-
/**
|
|
13
|
-
* Table schemas for autocompletion
|
|
14
|
-
* Format: { tableName: { columnName: columnType, ... }, ... }
|
|
15
|
-
*/
|
|
16
|
-
tableSchemas?: Record<string, Record<string, string>>;
|
|
17
|
-
/**
|
|
18
|
-
* Sample data for tables to enhance autocompletion
|
|
19
|
-
* Format: { tableName: [sampleDescription1, sampleDescription2, ...], ... }
|
|
20
|
-
*/
|
|
21
|
-
tableSamples?: Record<string, string[]>;
|
|
22
|
-
/**
|
|
23
|
-
* Callback to get the latest table schemas and samples
|
|
24
|
-
* This is called from within provideCompletionItems to ensure we have the latest data
|
|
25
|
-
*/
|
|
26
|
-
getLatestSchemas?: () => {
|
|
27
|
-
tableSchemas: Record<string, Record<string, string>>;
|
|
28
|
-
tableSamples: Record<string, string[]>;
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* A Monaco editor for editing SQL with DuckDB syntax highlighting and autocompletion
|
|
33
|
-
* This is an internal component used by SqlEditor
|
|
34
|
-
*/
|
|
35
|
-
export declare const SqlMonacoEditor: React.FC<SqlMonacoEditorProps>;
|
|
36
|
-
//# sourceMappingURL=SqlMonacoEditor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SqlMonacoEditor.d.ts","sourceRoot":"","sources":["../../../src/components/internal/SqlMonacoEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAE5D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAS/D,MAAM,WAAW,oBACf,SAAQ,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC;IAC3C;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM;QACvB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACrD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACxC,CAAC;CACH;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAwQ1D,CAAC"}
|