aboutsummaryrefslogtreecommitdiff
path: root/src/fields/Doc.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/fields/Doc.ts')
-rw-r--r--src/fields/Doc.ts34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/fields/Doc.ts b/src/fields/Doc.ts
index 168e29dd5..6543679ad 100644
--- a/src/fields/Doc.ts
+++ b/src/fields/Doc.ts
@@ -732,7 +732,7 @@ export namespace Doc {
};
const docAtKey = doc[key];
if (docAtKey instanceof Doc) {
- if (!Doc.IsSystem(docAtKey) && (key === 'annotationOn' || (key === 'proto' && cloneMap.has(doc[Id])) || ((key === 'anchor1' || key === 'anchor2') && doc.author === Doc.CurrentUserEmail))) {
+ if (!Doc.IsSystem(docAtKey) && (key === 'annotationOn' || key === 'proto'|| ((key === 'anchor1' || key === 'anchor2') && doc.author === Doc.CurrentUserEmail))) {
assignKey(await Doc.makeClone(docAtKey, cloneMap, linkMap, rtfs, exclusions, dontCreate, asBranch));
} else {
assignKey(docAtKey);
@@ -757,8 +757,8 @@ export namespace Doc {
const linkClone = await Doc.makeClone(link, cloneMap, linkMap, rtfs, exclusions, dontCreate, asBranch);
linkMap.set(link[Id], linkClone);
}
- if (!dontCreate) {
Doc.SetInPlace(copy, 'title', (asBranch ? 'BRANCH: ' : 'CLONE: ') + doc.title, true);
+ if (!dontCreate) {
asBranch ? (copy.branchOf = doc) : (copy.cloneOf = doc);
if (!Doc.IsPrototype(copy)) {
Doc.AddDocToList(doc, 'branches', Doc.GetProto(copy));
@@ -768,16 +768,19 @@ export namespace Doc {
Doc.AddFileOrphan(copy);
return copy;
}
- export function repairClone(doc: Doc, cloned: Doc[], visited: Set<Doc>) {
- if (visited.has(doc)) return;
- visited.add(doc);
- Object.keys(doc).map(key => {
- const docAtKey = DocCast(doc[key]);
+ export function repairClone(clone: Doc, cloneMap: Map<string,Doc>, visited: Set<Doc>) {
+ if (visited.has(clone)) return;
+ visited.add(clone);
+ Object.keys(clone).filter(key => key !== "cloneOf").map(key => {
+ const docAtKey = DocCast(clone[key]);
if (docAtKey && !Doc.IsSystem(docAtKey)) {
- if (!cloned.includes(docAtKey)) {
- doc[key] = undefined;
+ if (!Array.from(cloneMap.values()).includes(docAtKey)) {
+ if (cloneMap.has(docAtKey[Id])) {
+ clone[key] = cloneMap.get(docAtKey[Id]);
+ }
+ else clone[key] = undefined;
} else {
- repairClone(docAtKey, cloned, visited);
+ repairClone(docAtKey, cloneMap, visited);
}
}
});
@@ -789,7 +792,7 @@ export namespace Doc {
const repaired = new Set<Doc>();
const linkedDocs = Array.from(linkMap.values());
const clonedDocs = [...Array.from(cloneMap.values()), ...linkedDocs];
- clonedDocs.map(clone => Doc.repairClone(clone, Array.from(cloneMap.values()), repaired));
+ clonedDocs.map(clone => Doc.repairClone(clone, cloneMap, repaired));
linkedDocs.map((link: Doc) => LinkManager.Instance.addLink(link, true));
rtfMap.map(({ copy, key, field }) => {
const replacer = (match: any, attr: string, id: string, offset: any, string: any) => {
@@ -813,7 +816,7 @@ export namespace Doc {
// a.href = url;
// a.download = `DocExport-${this.props.Document[Id]}.zip`;
// a.click();
- const { clone, map, linkMap } = await Doc.MakeClone(doc, true);
+ const { clone, map, linkMap } = await Doc.MakeClone(doc, false);
clone.LINKS = new List<Doc>(Array.from(linkMap.values()));
function replacer(key: any, value: any) {
if (['branchOf', 'cloneOf', 'cursors'].includes(key)) return undefined;
@@ -841,7 +844,7 @@ export namespace Doc {
const docs: { [id: string]: any } = {};
Array.from(map.entries()).forEach(f => (docs[f[0]] = f[1]));
- const docString = JSON.stringify({ id: doc[Id], docs }, decycle(replacer));
+ const docString = JSON.stringify({ id: clone[Id], docs }, decycle(replacer));
const zip = new JSZip();
@@ -1527,8 +1530,11 @@ export namespace Doc {
formData.append('remap', 'true');
const response = await fetch(upload, { method: 'POST', body: formData });
const json = await response.json();
+ console.log(json)
if (json !== 'error') {
- const doc = DocCast(await DocServer.GetRefField(json));
+ await DocServer.GetRefFields(json.docids as string[]);
+ const doc = DocCast(await DocServer.GetRefField(json.id));
+ console.log("Doc = ", doc, doc?.title);
(await DocListCastAsync(doc?.LINKS))?.forEach(link => LinkManager.Instance.addLink(link));
return doc;
}