diff options
4 files changed, 39 insertions, 7 deletions
diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx b/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx index 3cf9baa2c..de345a335 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx @@ -33,6 +33,7 @@ import { TemplateFieldSize, TemplateFieldType, TemplateLayouts } from './Templat import { TemplateManager } from './TemplateManager'; import { DrawingFillHandler } from '../../../smartdraw/DrawingFillHandler'; import { CgPathIntersect } from 'react-icons/cg'; +import { StaticContentField } from './TemplateFieldTypes/StaticContentField'; export enum LayoutType { FREEFORM = 'Freeform', @@ -649,6 +650,17 @@ export class DocCreatorMenu extends ObservableReactComponent<DocCreateMenuProps> const field = template.getFieldByID(Number(fieldID)); field.setContent(col.defaultContent ?? '', col.type === TemplateFieldType.VISUAL ? ViewType.IMG : ViewType.TEXT); field.setTitle(col.title); + this._conditions.filter(c => c.field === field.getTitle()).forEach(conditional => { + if (field.getContent() === conditional.condition){ + if (conditional.target === 'self'){ + field.renderedDoc![conditional.attribute] = conditional.value; + (field.settings.opts as any)[conditional.attribute] = conditional.value; + } else if (conditional.target === 'template'){ + template._mainField!.renderedDoc![conditional.attribute] = conditional.value; + (template._mainField!.settings.opts as any)[conditional.attribute] = conditional.value; + } + } + }) } else { a[Number(fieldID)] = this.getColByTitle(colTitle); } @@ -676,7 +688,6 @@ export class DocCreatorMenu extends ObservableReactComponent<DocCreateMenuProps> } else { this._dataViz?.updateColDefaults(); - console.log('field infos are: ', this.fieldsInfos) templates.push(...this.templateManager.getValidTemplates(this.fieldsInfos)); const assignments = await this.assignColsToFields(templates, this.fieldsInfos); @@ -778,7 +789,23 @@ export class DocCreatorMenu extends ObservableReactComponent<DocCreateMenuProps> .filter(title => title) .forEach(title => { const field = templateCopy.getFieldByTitle(title); - if (field !== undefined) field.setContent(content[title], field.viewType); + if (field !== undefined) { + field.setContent(content[title], field.viewType); + console.log('content set') + this._conditions.filter(c => c.field === title).forEach(conditional => { + console.log('in conditional') + if (content[title] === conditional.condition){ + if (conditional.target === 'self'){ + field.renderedDoc![conditional.attribute] = conditional.value; + (field.settings.opts as any)[conditional.attribute] = conditional.value; + } else if (conditional.target === 'template'){ + console.log('setting', conditional.attribute, 'to: ', conditional.value) + templateCopy._mainField!.renderedDoc![conditional.attribute] = conditional.value; + (templateCopy._mainField!.settings.opts as any)[conditional.attribute] = conditional.value; + } + } + }) + } }); const gptFunc = (type: TemplateFieldType) => (type === TemplateFieldType.VISUAL ? this.renderGPTImageCall : this.renderGPTTextCall); @@ -1337,7 +1364,7 @@ export class DocCreatorMenu extends ObservableReactComponent<DocCreateMenuProps> } get dashboardContents() { - const conditionForm = (title: String, parameters?: Conditional) => { + const conditionForm = (title: string, parameters?: Conditional) => { const params: Conditional = parameters ?? this._currEditingConditional; @@ -1358,7 +1385,7 @@ export class DocCreatorMenu extends ObservableReactComponent<DocCreateMenuProps> placeholder='value' defaultValue={params.condition} /> - <div className='form-row-plain-text'>Then</div> + <div className='form-row-plain-text'>then</div> <div className="operator-options-dropdown"> <span className="operator-dropdown-current">{params.target ?? 'self'}</span> <div className='operator-dropdown-option' onPointerDown={() => {params.target = 'self'}}>{'self'}</div> @@ -1380,6 +1407,7 @@ export class DocCreatorMenu extends ObservableReactComponent<DocCreateMenuProps> </div> <div className='form-action-button' onPointerDown={e => this.setUpButtonClick(e, runInAction(() => () => { if (this._currEditingConditional === params) { + params.field = title; this._conditions.push(params); this._currEditingConditional = {} as Conditional; } else { diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/TemplateFieldTypes/DynamicField.ts b/src/client/views/nodes/DataVizBox/DocCreatorMenu/TemplateFieldTypes/DynamicField.ts index 6326a4a25..56db33ed5 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/TemplateFieldTypes/DynamicField.ts +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/TemplateFieldTypes/DynamicField.ts @@ -92,6 +92,7 @@ export class DynamicField extends TemplateField { this._subfields = settings.subfields?.map((fieldSettings, index) => TemplateField.CreateField(fieldSettings, index, this)) || []; const renderedSubfields = this._subfields.filter(field => field.renderedDoc).map(field => field.renderedDoc!); settings.opts.title = settings.title; + console.log('initializing dynamicfield with color: ', settings.opts.backgroundColor) this._renderDoc = (() => { switch (settings.viewType) { case ViewType.CAROUSEL3D: return Docs.Create.Carousel3DDocument(renderedSubfields, settings.opts); case ViewType.FREEFORM: diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/TemplateFieldTypes/StaticContentField.ts b/src/client/views/nodes/DataVizBox/DocCreatorMenu/TemplateFieldTypes/StaticContentField.ts index 38b301c87..7049bb56f 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/TemplateFieldTypes/StaticContentField.ts +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/TemplateFieldTypes/StaticContentField.ts @@ -27,12 +27,10 @@ export abstract class StaticContentField extends TemplateField { export class ImageTemplateField extends StaticContentField { setContent(url: string, type?: ViewType) { - console.log('setting image content to ', url) this.setDataContent(ViewType.IMG, 'data', new ImageField(url), url, type); } initRenderDoc(settings: FieldSettings) { - console.log('initializing image field') settings.opts.title = settings.title ?? ''; settings.opts._layout_fitWidth = false; this._renderDoc = Docs.Create.ImageDocument('', settings.opts); diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/TemplateFieldTypes/TemplateField.ts b/src/client/views/nodes/DataVizBox/DocCreatorMenu/TemplateFieldTypes/TemplateField.ts index f7a91bbd8..ecb4f6f24 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/TemplateFieldTypes/TemplateField.ts +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/TemplateFieldTypes/TemplateField.ts @@ -51,6 +51,10 @@ export abstract class TemplateField { return this._settings?.viewType; } + get settings(): FieldSettings { + return this._settings; + } + abstract get isContentField(): boolean; abstract initRenderDoc(settings: FieldSettings): TemplateField; abstract getContent(): string; @@ -66,7 +70,8 @@ export abstract class TemplateField { getTitle = () => this._title; makeClone(parent?: TemplateField) { - const cloned = TemplateField.CreateField(this._settings, this._id, parent, true); // create a value for this.Document/subfields that we want to ignore + const settings: FieldSettings = structuredClone(this._settings); + const cloned = TemplateField.CreateField(settings, this._id, parent, true); // create a value for this.Document/subfields that we want to ignore this._renderDoc && Doc.MakeClone(this._renderDoc).then(({ clone }) => (cloned._renderDoc = clone)); cloned._title = this._title; cloned._dimensions = this._dimensions; |