diff options
author | bob <bcz@cs.brown.edu> | 2020-01-28 13:06:23 -0500 |
---|---|---|
committer | bob <bcz@cs.brown.edu> | 2020-01-28 13:06:23 -0500 |
commit | 4394ae242b54519a63b7fa85e4e1a7fa6175902c (patch) | |
tree | b179ca8f58194b2c737203e745af09b498a41c0b /src | |
parent | 30b0762dbce03e314fafd228d457e841be4ec857 (diff) |
added support for make templates of collections
Diffstat (limited to 'src')
-rw-r--r-- | src/new_fields/Doc.ts | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/new_fields/Doc.ts b/src/new_fields/Doc.ts index 41a9dddf2..3a568d633 100644 --- a/src/new_fields/Doc.ts +++ b/src/new_fields/Doc.ts @@ -461,6 +461,9 @@ export namespace Doc { const newLayoutDoc = Doc.MakeDelegate(templateLayoutDoc, undefined, "[" + templateLayoutDoc.title + "]"); dataDoc[expandedLayoutFieldKey] = newLayoutDoc; newLayoutDoc.resolvedDataDoc = dataDoc; + if (dataDoc[templateField] === undefined && templateLayoutDoc[templateField] instanceof List && Cast(templateLayoutDoc[templateField], listSpec(Doc), []).length) { + dataDoc[templateField] = ComputedField.MakeFunction(`ObjectField.MakeCopy(templateLayoutDoc["${templateField}"] as List)`, { templateLayoutDoc: Doc.name }, { templateLayoutDoc: templateLayoutDoc }); + } } }, 0); } @@ -590,7 +593,7 @@ export namespace Doc { // This function converts a generic field layout display into a field layout that displays a specific // metadata field indicated by the title of the template field (not the default field that it was rendering) // - export function MakeMetadataFieldTemplate(templateField: Doc, templateDoc: Doc, suppressTitle: boolean = false): boolean { + export function MakeMetadataFieldTemplate(templateField: Doc, templateDoc: Doc): boolean { // find the metadata field key that this template field doc will display (indicated by its title) const metadataFieldKey = StrCast(templateField.title).replace(/^-/, ""); @@ -598,13 +601,14 @@ export namespace Doc { // update the original template to mark it as a template templateField.isTemplateForField = metadataFieldKey; templateField.title = metadataFieldKey; - // templateField.showTitle = suppressTitle ? undefined : "title"; - // move any data that the template field had been rendering over to the template doc so that things will - // appear the same after the conversion to a template has completed. (otherwise, there would be no data for the template to render) - // note: this will not overwrite any field that already exists on the template doc at the field key + // move any data that the template field had been rendering over to the template doc so that things will still be rendered + // when the template field is adjusted to point to the new metadatafield key. + // note 1: if the template field contained a list of documents, each of those documents will be converted to templates as well. + // note 2: this will not overwrite any field that already exists on the template doc at the field key if (!templateDoc[metadataFieldKey] && templateField.data instanceof ObjectField) { - (Doc.GetProto(templateDoc)[metadataFieldKey] = ObjectField.MakeCopy(templateField.data)); + Cast(templateField.data, listSpec(Doc), [])?.map(d => d instanceof Doc && MakeMetadataFieldTemplate(d, templateDoc)); + (Doc.GetProto(templateField)[metadataFieldKey] = ObjectField.MakeCopy(templateField.data)); } // get the layout string that the template uses to specify its layout |