aboutsummaryrefslogtreecommitdiff
path: root/src/new_fields/Doc.ts
diff options
context:
space:
mode:
authorbob <bcz@cs.brown.edu>2019-06-28 14:28:47 -0400
committerbob <bcz@cs.brown.edu>2019-06-28 14:28:47 -0400
commit09042b933c843d24a715e8c58414976133b19e41 (patch)
tree9fc983041c0a37763cf18c52f265f8a0bee238e7 /src/new_fields/Doc.ts
parentdc4b658639beb21e73fc2411abd147ff6716ba3d (diff)
fixed template application to create expanded documents
Diffstat (limited to 'src/new_fields/Doc.ts')
-rw-r--r--src/new_fields/Doc.ts10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/new_fields/Doc.ts b/src/new_fields/Doc.ts
index d552ddd2d..27dcfba08 100644
--- a/src/new_fields/Doc.ts
+++ b/src/new_fields/Doc.ts
@@ -280,7 +280,15 @@ export namespace Doc {
return new Doc;
}
- export function expandTemplateLayout(templateLayoutDoc: Doc, dataDoc: Doc) {
+ export function expandTemplateLayout(templateLayoutDoc: Doc, dataDoc?: Doc) {
+ let resolvedDataDoc = (templateLayoutDoc !== dataDoc) ? dataDoc : undefined;
+ if (!dataDoc || !(templateLayoutDoc && !(Cast(templateLayoutDoc.layout, Doc) instanceof Doc) && resolvedDataDoc && resolvedDataDoc !== templateLayoutDoc)) {
+ return templateLayoutDoc;
+ }
+ // if we have a data doc that doesn't match the layout, then we're rendering a template.
+ // ... which means we change the layout to be an expanded view of the template layout.
+ // This allows the view override the template's properties and be referenceable as its own document.
+
let expandedTemplateLayout = templateLayoutDoc["_expanded_" + dataDoc[Id]];
if (expandedTemplateLayout instanceof Doc) {
return expandedTemplateLayout;