free table editor - save and load

This commit is contained in:
Jan Prochazka
2020-10-28 18:42:02 +01:00
parent 2ba0c2cc46
commit 8a2b6f3f37
7 changed files with 162 additions and 28 deletions

View File

@@ -1,7 +1,11 @@
const fs = require('fs-extra');
const stream = require('stream');
const readline = require('readline');
const path = require('path');
const { formatWithOptions } = require('util');
const { archivedir } = require('../utility/directories');
const socket = require('../utility/socket');
const JsonLinesDatastore = require('../utility/JsonLinesDatastore');
module.exports = {
folders_meta: 'get',
@@ -61,4 +65,37 @@ module.exports = {
await fs.rmdir(path.join(archivedir(), folder), { recursive: true });
socket.emitChanged(`archive-folders-changed`);
},
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();
return true;
},
loadFreeTable_meta: 'post',
async loadFreeTable({ folder, file }) {
return new Promise((resolve, reject) => {
const fileStream = fs.createReadStream(path.join(archivedir(), folder, `${file}.jsonl`));
const liner = readline.createInterface({
input: fileStream,
});
let structure = null;
const rows = [];
liner.on('line', (line) => {
const data = JSON.parse(line);
if (structure) rows.push(data);
else structure = data;
});
liner.on('close', () => {
resolve({ structure, rows });
fileStream.close();
});
});
},
};