import { action, makeObservable, observable } 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 = '=')}> {'='}
(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}
))}
(params.attribute = e.target.value))} placeholder="attribute" value={params.attribute} />
{'becomes'}
(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, action(() => { 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