mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-01 19:03:58 +00:00
export from free table editor
This commit is contained in:
@@ -6,6 +6,7 @@ const { formatWithOptions } = require('util');
|
|||||||
const { archivedir } = require('../utility/directories');
|
const { archivedir } = require('../utility/directories');
|
||||||
const socket = require('../utility/socket');
|
const socket = require('../utility/socket');
|
||||||
const JsonLinesDatastore = require('../utility/JsonLinesDatastore');
|
const JsonLinesDatastore = require('../utility/JsonLinesDatastore');
|
||||||
|
const { saveFreeTableData } = require('../utility/freeTableStorage');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
folders_meta: 'get',
|
folders_meta: 'get',
|
||||||
@@ -70,13 +71,7 @@ module.exports = {
|
|||||||
|
|
||||||
saveFreeTable_meta: 'post',
|
saveFreeTable_meta: 'post',
|
||||||
async saveFreeTable({ folder, file, data }) {
|
async saveFreeTable({ folder, file, data }) {
|
||||||
const { structure, rows } = data;
|
saveFreeTableData(path.join(archivedir(), folder, `${file}.jsonl`), 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();
|
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ const fs = require('fs');
|
|||||||
const lineReader = require('line-reader');
|
const lineReader = require('line-reader');
|
||||||
const { off } = require('process');
|
const { off } = require('process');
|
||||||
const DatastoreProxy = require('../utility/DatastoreProxy');
|
const DatastoreProxy = require('../utility/DatastoreProxy');
|
||||||
|
const { saveFreeTableData } = require('../utility/freeTableStorage');
|
||||||
const getJslFileName = require('../utility/getJslFileName');
|
const getJslFileName = require('../utility/getJslFileName');
|
||||||
const JsonLinesDatastore = require('../utility/JsonLinesDatastore');
|
const JsonLinesDatastore = require('../utility/JsonLinesDatastore');
|
||||||
const socket = require('../utility/socket');
|
const socket = require('../utility/socket');
|
||||||
@@ -138,4 +139,10 @@ module.exports = {
|
|||||||
// socket.emit(`jsldata-stats-${stats.jslid}`, stats);
|
// socket.emit(`jsldata-stats-${stats.jslid}`, stats);
|
||||||
// }
|
// }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
saveFreeTable_meta: 'post',
|
||||||
|
async saveFreeTable({ jslid, data }) {
|
||||||
|
saveFreeTableData(getJslFileName(jslid), data);
|
||||||
|
return true;
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
15
packages/api/src/utility/freeTableStorage.js
Normal file
15
packages/api/src/utility/freeTableStorage.js
Normal 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,
|
||||||
|
};
|
||||||
@@ -1,9 +1,13 @@
|
|||||||
import { createGridCache, FreeTableGridDisplay } from 'dbgate-datalib';
|
import { createGridCache, FreeTableGridDisplay } from 'dbgate-datalib';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import DataGridCore from '../datagrid/DataGridCore';
|
import DataGridCore from '../datagrid/DataGridCore';
|
||||||
|
import useShowModal from '../modals/showModal';
|
||||||
|
import axios from '../utility/axios';
|
||||||
import keycodes from '../utility/keycodes';
|
import keycodes from '../utility/keycodes';
|
||||||
import FreeTableGrider from './FreeTableGrider';
|
import FreeTableGrider from './FreeTableGrider';
|
||||||
import MacroPreviewGrider from './MacroPreviewGrider';
|
import MacroPreviewGrider from './MacroPreviewGrider';
|
||||||
|
import uuidv1 from 'uuid/v1';
|
||||||
|
import ImportExportModal from '../modals/ImportExportModal';
|
||||||
|
|
||||||
export default function FreeTableGridCore(props) {
|
export default function FreeTableGridCore(props) {
|
||||||
const {
|
const {
|
||||||
@@ -18,6 +22,7 @@ export default function FreeTableGridCore(props) {
|
|||||||
} = props;
|
} = props;
|
||||||
const [cache, setCache] = React.useState(createGridCache());
|
const [cache, setCache] = React.useState(createGridCache());
|
||||||
const [selectedCells, setSelectedCells] = React.useState([]);
|
const [selectedCells, setSelectedCells] = React.useState([]);
|
||||||
|
const showModal = useShowModal();
|
||||||
const grider = React.useMemo(
|
const grider = React.useMemo(
|
||||||
() =>
|
() =>
|
||||||
macroPreview
|
macroPreview
|
||||||
@@ -30,12 +35,20 @@ export default function FreeTableGridCore(props) {
|
|||||||
macroPreview ? selectedCells : null,
|
macroPreview ? selectedCells : null,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
const display = React.useMemo(() => new FreeTableGridDisplay(grider.model || modelState.value, config, setConfig, cache, setCache), [
|
const display = React.useMemo(
|
||||||
modelState.value,
|
() => new FreeTableGridDisplay(grider.model || modelState.value, config, setConfig, cache, setCache),
|
||||||
config,
|
[modelState.value, config, cache, grider]
|
||||||
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(
|
const handleSelectionChanged = React.useCallback(
|
||||||
(cells) => {
|
(cells) => {
|
||||||
@@ -58,6 +71,7 @@ export default function FreeTableGridCore(props) {
|
|||||||
display={display}
|
display={display}
|
||||||
onSelectionChanged={macroPreview ? handleSelectionChanged : null}
|
onSelectionChanged={macroPreview ? handleSelectionChanged : null}
|
||||||
frameSelection={!!macroPreview}
|
frameSelection={!!macroPreview}
|
||||||
|
exportGrid={exportGrid}
|
||||||
onKeyDown={handleKeyDown}
|
onKeyDown={handleKeyDown}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user