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]));