diff --git a/packages/web/src/freetable/FreeTableGrid.js b/packages/web/src/freetable/FreeTableGrid.js index a40a1c309..6ee91c920 100644 --- a/packages/web/src/freetable/FreeTableGrid.js +++ b/packages/web/src/freetable/FreeTableGrid.js @@ -40,6 +40,7 @@ export default function FreeTableGrid(props) { dispatchModel({ type: 'set', value: newModel }); setSelectedMacro(null); }; + // console.log('macroValues', macroValues); return ( diff --git a/packages/web/src/freetable/MacroParameters.js b/packages/web/src/freetable/MacroParameters.js index b276ea673..cb15a856a 100644 --- a/packages/web/src/freetable/MacroParameters.js +++ b/packages/web/src/freetable/MacroParameters.js @@ -7,6 +7,7 @@ import { FormRow, FormLabel, FormSelectField, + FormCheckboxField, } from '../utility/forms'; import { Formik, Form, useFormikContext } from 'formik'; @@ -15,6 +16,9 @@ function MacroArgument({ arg, namePrefix }) { if (arg.type == 'text') { return ; } + if (arg.type == 'checkbox') { + return ; + } if (arg.type == 'select') { return ( diff --git a/packages/web/src/freetable/macros.js b/packages/web/src/freetable/macros.js index d1e65f61c..9e80cec38 100644 --- a/packages/web/src/freetable/macros.js +++ b/packages/web/src/freetable/macros.js @@ -24,8 +24,22 @@ const macros = [ label: 'Replace with', name: 'replace', }, + { + type: 'checkbox', + label: 'Case sensitive', + name: 'caseSensitive', + }, + { + type: 'checkbox', + label: 'Regular expression', + name: 'isRegex', + }, ], - code: `return value ? value.toString().replace(args.find, args.replace) : value`, + code: ` + const rtext = args.isRegex ? args.find : modules.lodash.escapeRegExp(args.find); + const rflags = args.caseSensitive ? 'g' : 'ig'; + return value ? value.toString().replace(new RegExp(rtext, rflags), args.replace || '') : value + `, }, { title: 'Change text case', diff --git a/packages/web/src/utility/forms.js b/packages/web/src/utility/forms.js index 7020c8238..5f1d56abd 100644 --- a/packages/web/src/utility/forms.js +++ b/packages/web/src/utility/forms.js @@ -2,7 +2,7 @@ import React from 'react'; import styled from 'styled-components'; import Select from 'react-select'; import Creatable from 'react-select/creatable'; -import { TextField, SelectField } from './inputs'; +import { TextField, SelectField, CheckboxField } from './inputs'; import { Field, useFormikContext } from 'formik'; import FormStyledButton from '../widgets/FormStyledButton'; import { @@ -49,6 +49,26 @@ export function FormTextField({ label, ...other }) { ); } +export function FormCheckboxFieldRaw({ name = undefined, ...other }) { + const { values, setFieldValue } = useFormikContext(); + const handleChange = (event) => { + setFieldValue(name, event.target.checked); + }; + return ; + // return ; +} + +export function FormCheckboxField({ label, ...other }) { + return ( + + {label} + + + + + ); +} + export function FormSelectFieldRaw({ children, ...other }) { return ( diff --git a/packages/web/src/utility/inputs.js b/packages/web/src/utility/inputs.js index f352886f3..b0f0e5452 100644 --- a/packages/web/src/utility/inputs.js +++ b/packages/web/src/utility/inputs.js @@ -16,3 +16,7 @@ export function SelectField({ children = null, options = [], ...other }) { ); } + +export function CheckboxField({ editorRef = undefined, ...other }) { + return ; +}