aboutsummaryrefslogtreecommitdiff
path: root/src/fields/Document.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/fields/Document.ts')
-rw-r--r--src/fields/Document.ts13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/fields/Document.ts b/src/fields/Document.ts
index fce316b17..3067621be 100644
--- a/src/fields/Document.ts
+++ b/src/fields/Document.ts
@@ -9,7 +9,7 @@ import { Server } from "../client/Server";
import { Types } from "../server/Message";
export class Document extends Field {
- public fields: ObservableMap<string, { key: Key, field: Opt<Field> }> = new ObservableMap();
+ public fields: ObservableMap<string, { key: Key, field: Field }> = new ObservableMap();
public _proxies: ObservableMap<string, FIELD_ID> = new ObservableMap();
constructor(id?: string, save: boolean = true) {
@@ -45,17 +45,20 @@ export class Document extends Field {
} else {
let doc: FieldValue<Document> = this;
while (doc && doc != FieldWaiting && field != FieldWaiting) {
- if (!doc.fields.has(key.Id)) {
- if (doc._proxies.has(key.Id)) {
+ let curField = doc.fields.get(key.Id);
+ let curProxy = doc._proxies.get(key.Id);
+ if (!curField || (curProxy && curField.field.Id !== curProxy)) {
+ if (curProxy) {
field = Server.GetDocumentField(doc, key);
break;
}
if ((doc.fields.has(KeyStore.Prototype.Id) || doc._proxies.has(KeyStore.Prototype.Id))) {
doc = doc.GetPrototype();
- } else
+ } else {
break;
+ }
} else {
- field = doc.fields.get(key.Id)!.field;
+ field = curField.field;
break;
}
}