aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2023-04-18 10:50:28 -0400
committerbobzel <zzzman@gmail.com>2023-04-18 10:50:28 -0400
commit237e39029201aba23249de1ab5c405197acffe5a (patch)
tree437ee7f7259245bb3948e1c5dc01715924ab43bb
parentf83e5d34794ef675d4627ecef2ed7042b17b1b06 (diff)
more cleanup of import/export
-rw-r--r--src/fields/Doc.ts15
-rw-r--r--src/server/ApiManagers/UploadManager.ts34
2 files changed, 24 insertions, 25 deletions
diff --git a/src/fields/Doc.ts b/src/fields/Doc.ts
index c5af45262..35f9a1032 100644
--- a/src/fields/Doc.ts
+++ b/src/fields/Doc.ts
@@ -822,7 +822,6 @@ export namespace Doc {
export async function Zip(doc: Doc, zipFilename = 'dashExport.zip') {
const { clone, map, linkMap } = await Doc.MakeClone(doc);
- clone.LINKS = new List<Doc>(Array.from(linkMap.values()));
const proms = [] as string[];
function replacer(key: any, value: any) {
if (key && ['branchOf', 'cloneOf', 'cursors'].includes(key)) return undefined;
@@ -856,8 +855,10 @@ export namespace Doc {
}
const docs: { [id: string]: any } = {};
+ const links: { [id: string]: any } = {};
Array.from(map.entries()).forEach(f => (docs[f[0]] = f[1]));
- const jsonDocs = JSON.stringify({ id: clone[Id], docs }, decycle(replacer));
+ Array.from(linkMap.entries()).forEach(l => (links[l[0]] = l[1]));
+ const jsonDocs = JSON.stringify({ id: clone[Id], docs, links }, decycle(replacer));
const zip = new JSZip();
var count = 0;
@@ -873,7 +874,7 @@ export namespace Doc {
const assetPathOnServer = proms[i].replace(window.location.origin + '/', '').replace(/\//g, '%%%');
zip.file(assetPathOnServer, data, { binary: true });
if (++count == proms.length) {
- zip.file('doc.json', jsonDocs);
+ zip.file('docs.json', jsonDocs);
zip.generateAsync({ type: 'blob' }).then(content => saveAs(content, zipFilename));
// const a = document.createElement("a");
// const url = Utils.prepend(`/downloadId/${this.props.Document[Id]}`);
@@ -1543,10 +1544,12 @@ export namespace Doc {
const response = await fetch(upload, { method: 'POST', body: formData });
const json = await response.json();
if (json !== 'error') {
- await DocServer.GetRefFields(json.docids as string[]);
+ const docs = await DocServer.GetRefFields(json.docids as string[]);
const doc = DocCast(await DocServer.GetRefField(json.id));
- (await DocListCastAsync(doc?.LINKS))?.forEach(link => LinkManager.Instance.addLink(link));
- doc.LINKS = undefined;
+ const links = await DocServer.GetRefFields(json.linkids as string[]);
+ Array.from(Object.keys(links))
+ .map(key => links[key])
+ .forEach(link => link instanceof Doc && LinkManager.Instance.addLink(link));
return doc;
}
}
diff --git a/src/server/ApiManagers/UploadManager.ts b/src/server/ApiManagers/UploadManager.ts
index 2cc2ac46c..1f72d72dc 100644
--- a/src/server/ApiManagers/UploadManager.ts
+++ b/src/server/ApiManagers/UploadManager.ts
@@ -228,6 +228,7 @@ export default class UploadManager extends ApiManager {
remap = fields.remap !== 'false';
let id: string = '';
let docids: string[] = [];
+ let linkids: string[] = [];
try {
for (const name in files) {
const f = files[name];
@@ -254,28 +255,23 @@ export default class UploadManager extends ApiManager {
console.log(e);
}
});
- const json = zip.getEntry('doc.json');
+ const json = zip.getEntry('docs.json');
try {
const data = JSON.parse(json.getData().toString('utf8'), retrocycle());
- const datadocs = data.docs;
+ const { docs, links } = data;
id = getId(data.id);
- const docs = Object.keys(datadocs).map(key => datadocs[key]);
- docs.forEach(mapFn);
- docids = docs.map(doc => doc.id);
+ const rdocs = Object.keys(docs).map(key => docs[key]);
+ const ldocs = Object.keys(links).map(key => links[key]);
+ [...rdocs, ...ldocs].forEach(mapFn);
+ docids = rdocs.map(doc => doc.id);
+ linkids = ldocs.map(link => link.id);
await Promise.all(
- docs.map(
- (doc: any) =>
- new Promise<void>(res =>
- Database.Instance.replace(
- doc.id,
- doc,
- (err, r) => {
- err && console.log(err);
- res();
- },
- true
- )
- )
+ [...rdocs, ...ldocs].map(
+ doc =>
+ new Promise<void>(res => {
+ // overwrite mongo doc with json doc contents
+ Database.Instance.replace(doc.id, doc, (err, r) => res(err && console.log(err)), true);
+ })
)
);
} catch (e) {
@@ -284,7 +280,7 @@ export default class UploadManager extends ApiManager {
unlink(path_2, () => {});
}
SolrManager.update();
- res.send(JSON.stringify({ id, docids } || 'error'));
+ res.send(JSON.stringify({ id, docids, linkids } || 'error'));
} catch (e) {
console.log(e);
}