diff --git a/packages/api/src/utility/freeTableStorage.js b/packages/api/src/utility/freeTableStorage.js index caf5d2d8e..ceba774ef 100644 --- a/packages/api/src/utility/freeTableStorage.js +++ b/packages/api/src/utility/freeTableStorage.js @@ -3,7 +3,7 @@ const fs = require('fs-extra'); async function saveFreeTableData(file, data) { const { structure, rows } = data; const fileStream = fs.createWriteStream(file); - await fileStream.write(JSON.stringify(structure) + '\n'); + await fileStream.write(JSON.stringify({ __isStreamHeader: true, ...structure }) + '\n'); for (const row of rows) { await fileStream.write(JSON.stringify(row) + '\n'); } diff --git a/packages/web/src/freetable/FreeTableGridCore.svelte b/packages/web/src/freetable/FreeTableGridCore.svelte index 31b8c0b8f..2352b47da 100644 --- a/packages/web/src/freetable/FreeTableGridCore.svelte +++ b/packages/web/src/freetable/FreeTableGridCore.svelte @@ -16,6 +16,7 @@ import { createGridCache, FreeTableGridDisplay } from 'dbgate-datalib'; import { writable } from 'svelte/store'; import uuidv1 from 'uuid/v1'; + import { registerQuickExportHandler } from '../buttons/ToolStripExportButton.svelte'; import registerCommand from '../commands/registerCommand'; import DataGridCore from '../datagrid/DataGridCore.svelte'; @@ -24,6 +25,8 @@ import { apiCall } from '../utility/api'; import { registerMenu } from '../utility/contextMenu'; import createActivator, { getActiveComponent } from '../utility/createActivator'; + import createQuickExportMenu from '../utility/createQuickExportMenu'; + import { exportQuickExportFile } from '../utility/exportFileTools'; import FreeTableGrider from './FreeTableGrider'; import MacroPreviewGrider from './MacroPreviewGrider'; @@ -51,10 +54,31 @@ initialValues.sourceStorageType = 'jsldata'; initialValues.sourceJslId = jslid; initialValues.sourceList = ['editor-data']; + initialValues[`columns_editor-data`] = display.getExportColumnMap(); showModal(ImportExportModal, { initialValues: initialValues }); } - registerMenu({ command: 'freeTableGrid.export', tag: 'export' }); + const quickExportHandler = fmt => async () => { + const jslid = uuidv1(); + await apiCall('jsldata/save-free-table', { jslid, data: modelState.value }); + exportQuickExportFile( + 'editor-data', + { + functionName: 'jslDataReader', + props: { + jslid, + }, + }, + fmt, + display.getExportColumnMap() + ); + }; + registerQuickExportHandler(quickExportHandler); + + registerMenu(() => ({ + ...createQuickExportMenu(quickExportHandler, { command: 'freeTableGrid.export' }), + tag: 'export', + })); diff --git a/packages/web/src/tabs/FreeTableTab.svelte b/packages/web/src/tabs/FreeTableTab.svelte index d01bc3005..cf632396e 100644 --- a/packages/web/src/tabs/FreeTableTab.svelte +++ b/packages/web/src/tabs/FreeTableTab.svelte @@ -34,7 +34,7 @@ import { writable } from 'svelte/store'; import ToolStripCommandButton from '../buttons/ToolStripCommandButton.svelte'; import ToolStripContainer from '../buttons/ToolStripContainer.svelte'; -import ToolStripExportButton from '../buttons/ToolStripExportButton.svelte'; + import ToolStripExportButton, { createQuickExportHandlerRef } from '../buttons/ToolStripExportButton.svelte'; import registerCommand from '../commands/registerCommand'; import DataGrid from '../datagrid/DataGrid.svelte'; import ErrorInfo from '../elements/ErrorInfo.svelte'; @@ -137,6 +137,8 @@ import ToolStripExportButton from '../buttons/ToolStripExportButton.svelte'; // display is overridden in FreeTableGridCore, this is because of column manager $: display = new FreeTableGridDisplay($modelState.value, $config, config.update, null, null); + + const quickExportHandlerRef = createQuickExportHandlerRef(); {#if isLoading} @@ -161,7 +163,7 @@ import ToolStripExportButton from '../buttons/ToolStripExportButton.svelte'; /> - + {/if}