export from free table editor

This commit is contained in:
Jan Prochazka
2020-11-19 12:34:03 +01:00
parent 03451c6897
commit 682f53881d
4 changed files with 44 additions and 13 deletions

View File

@@ -6,6 +6,7 @@ const { formatWithOptions } = require('util');
const { archivedir } = require('../utility/directories');
const socket = require('../utility/socket');
const JsonLinesDatastore = require('../utility/JsonLinesDatastore');
const { saveFreeTableData } = require('../utility/freeTableStorage');
module.exports = {
folders_meta: 'get',
@@ -70,13 +71,7 @@ module.exports = {
saveFreeTable_meta: 'post',
async saveFreeTable({ folder, file, data }) {
const { structure, rows } = data;
const fileStream = fs.createWriteStream(path.join(archivedir(), folder, `${file}.jsonl`));
await fileStream.write(JSON.stringify(structure) + '\n');
for (const row of rows) {
await fileStream.write(JSON.stringify(row) + '\n');
}
await fileStream.close();
saveFreeTableData(path.join(archivedir(), folder, `${file}.jsonl`), data);
return true;
},

View File

@@ -2,6 +2,7 @@ const fs = require('fs');
const lineReader = require('line-reader');
const { off } = require('process');
const DatastoreProxy = require('../utility/DatastoreProxy');
const { saveFreeTableData } = require('../utility/freeTableStorage');
const getJslFileName = require('../utility/getJslFileName');
const JsonLinesDatastore = require('../utility/JsonLinesDatastore');
const socket = require('../utility/socket');
@@ -138,4 +139,10 @@ module.exports = {
// socket.emit(`jsldata-stats-${stats.jslid}`, stats);
// }
},
saveFreeTable_meta: 'post',
async saveFreeTable({ jslid, data }) {
saveFreeTableData(getJslFileName(jslid), data);
return true;
},
};

View File

@@ -0,0 +1,15 @@
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');
for (const row of rows) {
await fileStream.write(JSON.stringify(row) + '\n');
}
await fileStream.close();
}
module.exports = {
saveFreeTableData,
};

View File

@@ -1,9 +1,13 @@
import { createGridCache, FreeTableGridDisplay } from 'dbgate-datalib';
import React from 'react';
import DataGridCore from '../datagrid/DataGridCore';
import useShowModal from '../modals/showModal';
import axios from '../utility/axios';
import keycodes from '../utility/keycodes';
import FreeTableGrider from './FreeTableGrider';
import MacroPreviewGrider from './MacroPreviewGrider';
import uuidv1 from 'uuid/v1';
import ImportExportModal from '../modals/ImportExportModal';
export default function FreeTableGridCore(props) {
const {
@@ -18,6 +22,7 @@ export default function FreeTableGridCore(props) {
} = props;
const [cache, setCache] = React.useState(createGridCache());
const [selectedCells, setSelectedCells] = React.useState([]);
const showModal = useShowModal();
const grider = React.useMemo(
() =>
macroPreview
@@ -30,12 +35,20 @@ export default function FreeTableGridCore(props) {
macroPreview ? selectedCells : null,
]
);
const display = React.useMemo(() => new FreeTableGridDisplay(grider.model || modelState.value, config, setConfig, cache, setCache), [
modelState.value,
config,
cache,
grider,
]);
const display = React.useMemo(
() => new FreeTableGridDisplay(grider.model || modelState.value, config, setConfig, cache, setCache),
[modelState.value, config, cache, grider]
);
async function exportGrid() {
const jslid = uuidv1();
await axios.post('jsldata/save-free-table', { jslid, data: modelState.value });
const initialValues = {};
initialValues.sourceStorageType = 'jsldata';
initialValues.sourceJslId = jslid;
initialValues.sourceList = ['editor-data'];
showModal((modalState) => <ImportExportModal modalState={modalState} initialValues={initialValues} />);
}
const handleSelectionChanged = React.useCallback(
(cells) => {
@@ -58,6 +71,7 @@ export default function FreeTableGridCore(props) {
display={display}
onSelectionChanged={macroPreview ? handleSelectionChanged : null}
frameSelection={!!macroPreview}
exportGrid={exportGrid}
onKeyDown={handleKeyDown}
/>
);