aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/util/LinkManager.ts31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/client/util/LinkManager.ts b/src/client/util/LinkManager.ts
index 01f4df723..fe7bfe6ed 100644
--- a/src/client/util/LinkManager.ts
+++ b/src/client/util/LinkManager.ts
@@ -66,26 +66,29 @@ export class LinkManager {
const watchUserLinkDB = (userLinkDBDoc: Doc) => {
LinkManager.links.push(...DocListCast(userLinkDBDoc.data));
const toRealField = (field: Field) => (field instanceof ProxyField ? field.value() : field); // see List.ts. data structure is not a simple list of Docs, but a list of ProxyField/Fields
- observe(
- userLinkDBDoc.data as Doc,
- change => {
- // observe pushes/splices on a user link DB 'data' field (should only happen for local changes)
- switch (change.type as any) {
- case 'splice':
- (change as any).added.forEach((link: any) => addLinkToDoc(toRealField(link)));
- (change as any).removed.forEach((link: any) => remLinkFromDoc(toRealField(link)));
- break;
- case 'update': //let oldValue = change.oldValue;
- }
- },
- true
- );
+ const observeLinkDB = (linkDB: List<Doc>) =>
+ observe(
+ linkDB,
+ change => {
+ // observe pushes/splices on a user link DB 'data' field (should only happen for local changes)
+ switch (change.type as any) {
+ case 'splice':
+ (change as any).added.forEach((link: any) => addLinkToDoc(toRealField(link)));
+ (change as any).removed.forEach((link: any) => remLinkFromDoc(toRealField(link)));
+ break;
+ case 'update': //let oldValue = change.oldValue;
+ }
+ },
+ true
+ );
+ if (userLinkDBDoc.data) observeLinkDB(userLinkDBDoc.data as List<Doc>);
observe(
userLinkDBDoc,
'data', // obsever when a new array of links is assigned as the link DB 'data' field (should happen whenever a remote user adds/removes a link)
change => {
switch (change.type as any) {
case 'update':
+ if (!change.oldValue) observeLinkDB(change.newValue as List<Doc>);
Promise.all([...((change.oldValue as any as Doc[]) || []), ...((change.newValue as any as Doc[]) || [])]).then(doclist => {
const oldDocs = doclist.slice(0, ((change.oldValue as any as Doc[]) || []).length);
const newDocs = doclist.slice(((change.oldValue as any as Doc[]) || []).length, doclist.length);