diff options
author | Bob Zeleznik <zzzman@gmail.com> | 2019-05-16 21:02:18 -0400 |
---|---|---|
committer | Bob Zeleznik <zzzman@gmail.com> | 2019-05-16 21:02:18 -0400 |
commit | 0c019112791138304eaaeea768d254981322ec55 (patch) | |
tree | 849c39d9d4a74b6c61ab0eeead98c6bdb7e68f7a /src | |
parent | 530dc40f7519b8288d91db61103468ab713dfbdd (diff) | |
parent | a2333e76fea26d2ce03272947d8a89973489fa46 (diff) |
Merge branch 'master' of https://github.com/browngraphicslab/Dash-Web
Diffstat (limited to 'src')
-rw-r--r-- | src/client/views/nodes/DocumentContentsView.tsx | 12 | ||||
-rw-r--r-- | src/new_fields/util.ts | 22 |
2 files changed, 23 insertions, 11 deletions
diff --git a/src/client/views/nodes/DocumentContentsView.tsx b/src/client/views/nodes/DocumentContentsView.tsx index ace8d4aa5..d2cb11586 100644 --- a/src/client/views/nodes/DocumentContentsView.tsx +++ b/src/client/views/nodes/DocumentContentsView.tsx @@ -46,10 +46,16 @@ export class DocumentContentsView extends React.Component<DocumentViewProps & { layoutKey: string, }> { @computed get layout(): string { - return StrCast(this.props.Document[this.props.layoutKey], - this.props.Document.data ? + const layout = Cast(this.props.Document[this.props.layoutKey], "string"); + if (layout === undefined) { + return this.props.Document.data ? "<FieldView {...props} fieldKey='data' />" : - KeyValueBox.LayoutString(this.props.Document.proto ? "proto" : "")); + KeyValueBox.LayoutString(this.props.Document.proto ? "proto" : ""); + } else if (typeof layout === "string") { + return layout; + } else { + return "<p>Loading layout</p>"; + } } CreateBindings(): JsxBindings { diff --git a/src/new_fields/util.ts b/src/new_fields/util.ts index a5f5e368b..3a16a6b42 100644 --- a/src/new_fields/util.ts +++ b/src/new_fields/util.ts @@ -55,6 +55,17 @@ export function getter(target: any, prop: string | symbol | number, receiver: an } return getField(target, prop); } +function getProtoField(protoField: Doc | undefined, prop: string | number, cb?: (field: Field | undefined) => void) { + if (!protoField) return undefined; + let field = protoField[prop]; + if (field instanceof Promise) { + cb && field.then(cb); + return field; + } else { + cb && cb(field); + return field; + } +} //TODO The callback parameter is never being passed in currently, so we should be able to get rid of it. export function getField(target: any, prop: string | number, ignoreProto: boolean = false, callback?: (field: Field | undefined) => void): any { @@ -65,14 +76,9 @@ export function getField(target: any, prop: string | number, ignoreProto: boolea if (field === undefined && !ignoreProto) { const proto = getField(target, "proto", true); if (proto instanceof Doc) { - let field = proto[prop]; - if (field instanceof Promise) { - callback && field.then(callback); - return undefined; - } else { - callback && callback(field); - return field; - } + return getProtoField(proto, prop, callback); + } else if (proto instanceof Promise) { + return proto.then(async proto => getProtoField(proto, prop, callback)); } } callback && callback(field); |