diff --git a/packages/api/src/controllers/archive.js b/packages/api/src/controllers/archive.js index dcf7eee31..4fd1d8bfd 100644 --- a/packages/api/src/controllers/archive.js +++ b/packages/api/src/controllers/archive.js @@ -169,11 +169,20 @@ module.exports = { }, saveJslData_meta: true, - async saveJslData({ folder, file, jslid }) { + async saveJslData({ folder, file, jslid, changeSet }) { const source = getJslFileName(jslid); const target = path.join(resolveArchiveFolder(folder), `${file}.jsonl`); - await fs.copyFile(source, target); - socket.emitChanged(`archive-files-changed`, { folder }); + if (changeSet) { + const reader = await dbgateApi.modifyJsonLinesReader({ + fileName: source, + changeSet, + }); + const writer = await dbgateApi.jsonLinesWriter({ fileName: target }); + await dbgateApi.copyStream(reader, writer); + } else { + await fs.copyFile(source, target); + socket.emitChanged(`archive-files-changed`, { folder }); + } return true; }, diff --git a/packages/api/src/controllers/jsldata.js b/packages/api/src/controllers/jsldata.js index 3da64d2e8..0cf04a978 100644 --- a/packages/api/src/controllers/jsldata.js +++ b/packages/api/src/controllers/jsldata.js @@ -147,6 +147,12 @@ module.exports = { return datastore.getRows(offset, limit, _.isEmpty(filters) ? null : filters, _.isEmpty(sort) ? null : sort); }, + exists_meta: true, + async exists({ jslid }) { + const fileName = getJslFileName(jslid); + return fs.existsSync(fileName); + }, + getStats_meta: true, getStats({ jslid }) { const file = `${getJslFileName(jslid)}.stats`; diff --git a/packages/web/src/tabs/ArchiveFileTab.svelte b/packages/web/src/tabs/ArchiveFileTab.svelte index 7ce9a347d..66bd0a16f 100644 --- a/packages/web/src/tabs/ArchiveFileTab.svelte +++ b/packages/web/src/tabs/ArchiveFileTab.svelte @@ -18,7 +18,8 @@ - + {#if jslidChecked || !jslid} + + {/if} diff --git a/packages/web/src/utility/openJsonLinesData.ts b/packages/web/src/utility/openJsonLinesData.ts index a84651b79..27c0b53cb 100644 --- a/packages/web/src/utility/openJsonLinesData.ts +++ b/packages/web/src/utility/openJsonLinesData.ts @@ -5,13 +5,18 @@ import openNewTab from './openNewTab'; export async function openJsonLinesData(rows) { const jslid = uuidv1(); - await apiCall('jsldata/save-rows', { jslid, rows }); - openNewTab({ - tabComponent: 'ArchiveFileTab', - icon: 'img archive', - title: 'Data #', - props: { - jslid, + // await apiCall('jsldata/save-rows', { jslid, rows }); + openNewTab( + { + tabComponent: 'ArchiveFileTab', + icon: 'img archive', + title: 'Data #', + props: { + jslid, + }, }, - }); + { + rows, + } + ); } diff --git a/packages/web/src/utility/openNewTab.ts b/packages/web/src/utility/openNewTab.ts index 1fefd8798..080557fee 100644 --- a/packages/web/src/utility/openNewTab.ts +++ b/packages/web/src/utility/openNewTab.ts @@ -65,7 +65,7 @@ export default async function openNewTab(newTab, initialData = undefined, option const tabid = uuidv1(); if (initialData) { for (const key of _.keys(initialData)) { - if (key == 'editor') { + if (key == 'editor' || key == 'rows') { await localforage.setItem(`tabdata_${key}_${tabid}`, initialData[key]); } else { localStorage.setItem(`tabdata_${key}_${tabid}`, JSON.stringify(initialData[key]));