diff options
| author | bobzel <zzzman@gmail.com> | 2021-03-17 18:32:51 -0400 |
|---|---|---|
| committer | bobzel <zzzman@gmail.com> | 2021-03-17 18:32:51 -0400 |
| commit | 6f4f0ffb9f4ab816cf6055c62afc6f79b8e4961f (patch) | |
| tree | b1f238076751b2b2e969373403e9be8da29ccd05 /src/fields | |
| parent | 73dc79ddc41b56e2f36a5b2e442fe9c71648b118 (diff) | |
fix Doc.MakeClone to deal wth links correctly again. fixed dashboard snapshot to either alias top-level documents, or clone everything.
Diffstat (limited to 'src/fields')
| -rw-r--r-- | src/fields/Doc.ts | 4 | ||||
| -rw-r--r-- | src/fields/util.ts | 13 |
2 files changed, 6 insertions, 11 deletions
diff --git a/src/fields/Doc.ts b/src/fields/Doc.ts index 5a8b1097a..4f9377aa0 100644 --- a/src/fields/Doc.ts +++ b/src/fields/Doc.ts @@ -510,11 +510,11 @@ export namespace Doc { cloneMap.set(doc[Id], copy); if (LinkManager.Instance.getAllLinks().includes(doc) && LinkManager.Instance.getAllLinks().indexOf(copy) === -1) LinkManager.Instance.addLink(copy); const filter = [...exclusions, ...Cast(doc.cloneFieldFilter, listSpec("string"), [])]; - await Promise.all(Object.keys(doc).map(async key => { + await Promise.all([...Object.keys(doc), "links"].map(async key => { if (filter.includes(key)) return; const assignKey = (val: any) => !dontCreate && (copy[key] = val); const cfield = ComputedField.WithoutComputed(() => FieldValue(doc[key])); - const field = ProxyField.WithoutProxy(() => doc[key]); + const field = key === "links" && Doc.IsPrototype(doc) ? doc[key] : ProxyField.WithoutProxy(() => doc[key]); const copyObjectField = async (field: ObjectField) => { const list = Cast(doc[key], listSpec(Doc)); const docs = list && (await DocListCastAsync(list))?.filter(d => d instanceof Doc); diff --git a/src/fields/util.ts b/src/fields/util.ts index 5d98971da..6038a0534 100644 --- a/src/fields/util.ts +++ b/src/fields/util.ts @@ -302,20 +302,15 @@ export function setter(target: any, in_prop: string | symbol | number, value: an } export function getter(target: any, in_prop: string | symbol | number, receiver: any): any { - const prop = in_prop; + let prop = in_prop; if (in_prop === AclSym) return target[AclSym]; if (in_prop === "toString" || (in_prop !== HeightSym && in_prop !== WidthSym && in_prop !== LayoutSym && typeof prop === "symbol")) return target.__fields[prop] || target[prop]; if (GetEffectiveAcl(target) === AclPrivate) return prop === HeightSym || prop === WidthSym ? returnZero : undefined; if (prop === LayoutSym) return target.__LAYOUT__; - let search = false; if (typeof prop === "string" && prop !== "__id" && prop !== "__fields" && prop.startsWith("_")) { - // if (!prop.startsWith("_")) { - // console.log(prop + " is deprecated - switch to _" + prop); - // prop = "_" + prop; - // } - if (!prop.startsWith("__")) search = true; - if (target.__LAYOUT__) return target.__LAYOUT__[prop] ?? (search ? target.__LAYOUT__[prop.substring(1)] : undefined); + if (!prop.startsWith("__")) prop = prop.substring(1); + if (target.__LAYOUT__) return target.__LAYOUT__[prop]; } if (prop === "then") {//If we're being awaited return undefined; @@ -326,7 +321,7 @@ export function getter(target: any, in_prop: string | symbol | number, receiver: if (SerializationHelper.IsSerializing()) { return target[prop]; } - return (search ? getFieldImpl(target, (prop as any as string).substring(1), receiver) : undefined) ?? getFieldImpl(target, prop, receiver); + return getFieldImpl(target, prop, receiver); } function getFieldImpl(target: any, prop: string | number, receiver: any, ignoreProto: boolean = false): any { |
