From f92a02ec5d676359cb268a35d30e5bf9886199c1 Mon Sep 17 00:00:00 2001 From: Nathan-SR <144961007+Nathan-SR@users.noreply.github.com> Date: Fri, 30 May 2025 03:27:03 -0400 Subject: couple more component refactors --- .../Menu/TemplateMenuFieldOptions.tsx | 193 +++++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateMenuFieldOptions.tsx (limited to 'src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateMenuFieldOptions.tsx') diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateMenuFieldOptions.tsx b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateMenuFieldOptions.tsx new file mode 100644 index 000000000..beda45ac3 --- /dev/null +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateMenuFieldOptions.tsx @@ -0,0 +1,193 @@ +import { makeObservable, observable, runInAction } from "mobx"; +import { observer } from "mobx-react"; +import { ObservableReactComponent } from "../../../../ObservableReactComponent"; +import { Col, DocCreatorMenu } from "../DocCreatorMenu"; +import React from "react"; +import { Conditional, TemplateManager } from "../Backend/TemplateManager"; +import { TemplateFieldType, TemplateFieldSize } from "../TemplateBackend"; +import { DocCreatorMenuButton } from "./DocCreatorMenuButton"; + +interface TemplateMenuFieldOptionsProps { + menu: DocCreatorMenu; + templateManager: TemplateManager; +} + +@observer +export class TemplateMenuFieldOptions extends ObservableReactComponent { + + @observable _collapsedCols: String[] = []; //any columns whose options panels are hidden + + constructor(props: TemplateMenuFieldOptionsProps) { + super(props); + makeObservable(this); + } + + @observable private _newCondCache: Record = {}; + + getParams = (title: string, parameters?: Conditional): Conditional => { + if (parameters) return parameters; + + if (!this._newCondCache[title]) { + this._newCondCache[title] = observable({ + field: title, + operator: '=', + condition: '', + target: 'Own', + attribute: '', + value: '' + }); + } + return this._newCondCache[title]; + }; + + conditionForm = (title: string, parameters?: Conditional, empty: boolean = false) => { + + const contentFieldTitles = this._props.menu.fieldsInfos.filter(field => field.type !== TemplateFieldType.DATA).map(field => field.title).concat('Template'); + var params: Conditional = this.getParams(title, parameters); + + return ( +
+
+
If
+
{title}
+
+ {params.operator ?? '='} +
{params.operator = '='}}>{'='}
+
+ runInAction(() => params.condition = e.target.value)} + placeholder='value' + value={params.condition} + /> +
then
+
+ {params.target ?? 'Own'} + {contentFieldTitles.map(fieldTitle => +
{params.target = fieldTitle}}>{fieldTitle === title ? 'Own' : fieldTitle}
+ )} +
+ runInAction(() => params.attribute = e.target.value)} + placeholder='attribute' + value={params.attribute} + /> +
{'becomes'}
+ runInAction(() => params.value = e.target.value)} + placeholder='value' + value={params.value} + /> +
+ {empty ? + { + this._newCondCache[title] = observable({ + field: title, + operator: '=', + condition: '', + target: 'Own', + attribute: '', + value: '' + }); + this._props.templateManager.addFieldCondition(title, params); + }}/> + : + this._props.templateManager.removeFieldCondition(title, params)}/> + } +
+ ) + } + + fieldPanel = (field: Col, id: number) => ( +
+
this._props.menu.setUpButtonClick(e, runInAction(() => () => { + if (this._collapsedCols.includes(field.title)) { + this._collapsedCols = this._collapsedCols.filter(col => col !== field.title); + } else { + this._collapsedCols.push(field.title); + } + }))}> + {`${field.title} Field`} + this._props.menu.removeField(field)}/> +
+ { this._collapsedCols.includes(field.title) ? null : + <> +
+
+
Title
+