2020-10-02 15:10:00 +00:00
|
|
|
/**
|
|
|
|
* FormulaTransform extends ColumnTransform, creating the transform dom in the field config tab
|
|
|
|
* used to transform a column of data using a formula. Allows the user to easily and quickly clean
|
|
|
|
* data or change data to a more useful form.
|
|
|
|
*/
|
|
|
|
|
|
|
|
// Client libraries
|
|
|
|
import * as AceEditor from 'app/client/components/AceEditor';
|
|
|
|
import {ColumnTransform} from 'app/client/components/ColumnTransform';
|
|
|
|
import {GristDoc} from 'app/client/components/GristDoc';
|
2022-08-08 13:32:50 +00:00
|
|
|
import {cssButtonRow} from 'app/client/ui/RightPanelStyles';
|
2020-10-02 15:10:00 +00:00
|
|
|
import {basicButton, primaryButton} from 'app/client/ui2018/buttons';
|
|
|
|
import {testId} from 'app/client/ui2018/cssVars';
|
|
|
|
import {FieldBuilder} from 'app/client/widgets/FieldBuilder';
|
|
|
|
import {dom} from 'grainjs';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates an instance of FormulaTransform for a single field. Extends ColumnTransform.
|
|
|
|
*/
|
|
|
|
export class FormulaTransform extends ColumnTransform {
|
|
|
|
constructor(gristDoc: GristDoc, fieldBuilder: FieldBuilder) {
|
|
|
|
super(gristDoc, fieldBuilder);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Build the transform menu for a formula transform
|
|
|
|
*/
|
|
|
|
public buildDom() {
|
2022-09-06 01:51:57 +00:00
|
|
|
this.editor = this.autoDispose(AceEditor.create({
|
|
|
|
gristDoc: this.gristDoc,
|
|
|
|
observable: this.transformColumn.formula,
|
|
|
|
}));
|
2020-10-02 15:10:00 +00:00
|
|
|
return [
|
|
|
|
dom('div.transform_menu',
|
|
|
|
dom('div.transform_editor',
|
|
|
|
this.buildEditorDom(this.getIdentityFormula()),
|
|
|
|
testId("formula-transform-top")
|
|
|
|
)
|
|
|
|
),
|
|
|
|
cssButtonRow(
|
|
|
|
basicButton(dom.on('click', () => this.cancel()),
|
|
|
|
'Cancel', testId("formula-transform-cancel")),
|
|
|
|
basicButton(dom.on('click', () => this.editor.writeObservable()),
|
|
|
|
'Preview',
|
|
|
|
dom.cls('disabled', this.formulaUpToDate),
|
|
|
|
{ title: 'Update formula (Shift+Enter)' },
|
|
|
|
testId("formula-transform-update")),
|
|
|
|
primaryButton(dom.on('click', () => this.execute()),
|
|
|
|
'Apply', testId("formula-transform-apply"))
|
|
|
|
),
|
|
|
|
];
|
|
|
|
}
|
|
|
|
}
|