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'); const 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, i) =>
{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