diff --git a/packages/web/src/freetable/FreeTableGrid.js b/packages/web/src/freetable/FreeTableGrid.js index 5d2a43a06..a40a1c309 100644 --- a/packages/web/src/freetable/FreeTableGrid.js +++ b/packages/web/src/freetable/FreeTableGrid.js @@ -1,5 +1,6 @@ import { runMacro } from '@dbgate/datalib'; import React from 'react'; +import _ from 'lodash'; import styled from 'styled-components'; import { ManagerMainContainer, ManagerOuterContainer_60, ManagerOuterContainer_40 } from '../datagrid/ManagerStyles'; @@ -20,6 +21,14 @@ const DataGridContainer = styled.div` flex-grow: 1; `; +function extractMacroValuesForMacro(macroValues, macro) { + if (!macro) return {}; + return { + ..._.fromPairs((macro.args || []).filter((x) => x.default != null).map((x) => [x.name, x.default])), + ..._.mapKeys(macroValues, (v, k) => k.replace(/^.*#/, '')), + }; +} + export default function FreeTableGrid(props) { const { modelState, dispatchModel } = props; const [managerSize, setManagerSize] = React.useState(0); @@ -54,7 +63,7 @@ export default function FreeTableGrid(props) { diff --git a/packages/web/src/freetable/MacroDetail.js b/packages/web/src/freetable/MacroDetail.js index 806dee26f..c00031cb9 100644 --- a/packages/web/src/freetable/MacroDetail.js +++ b/packages/web/src/freetable/MacroDetail.js @@ -93,9 +93,11 @@ export default function MacroDetail({ selectedMacro, setSelectedMacro, onChangeV Parameters {selectedMacro.args && selectedMacro.args.length > 0 ? ( ) : ( This macro has no parameters diff --git a/packages/web/src/freetable/MacroParameters.js b/packages/web/src/freetable/MacroParameters.js index 55ce3ff2c..b276ea673 100644 --- a/packages/web/src/freetable/MacroParameters.js +++ b/packages/web/src/freetable/MacroParameters.js @@ -10,13 +10,14 @@ import { } from '../utility/forms'; import { Formik, Form, useFormikContext } from 'formik'; -function MacroArgument({ arg }) { +function MacroArgument({ arg, namePrefix }) { + const name = `${namePrefix}${arg.name}`; if (arg.type == 'text') { - return ; + return ; } if (arg.type == 'select') { return ( - + {arg.options.map((opt) => _.isString(opt) ? : )} @@ -26,7 +27,7 @@ function MacroArgument({ arg }) { return null; } -function MacroArgumentList({ args, onChangeValues }) { +function MacroArgumentList({ args, onChangeValues, namePrefix }) { const { values } = useFormikContext(); React.useEffect(() => { if (onChangeValues) onChangeValues(values); @@ -35,18 +36,22 @@ function MacroArgumentList({ args, onChangeValues }) { <> {' '} {args.map((arg) => ( - + ))} ); } -export default function MacroParameters({ args, onChangeValues, initialValues }) { +export default function MacroParameters({ args, onChangeValues, macroValues, namePrefix }) { if (!args || args.length == 0) return null; + const initialValues = { + ..._.fromPairs(args.filter((x) => x.default != null).map((x) => [`${namePrefix}${x.name}`, x.default])), + ...macroValues, + }; return ( {}}>
- +
); diff --git a/packages/web/src/freetable/macros.js b/packages/web/src/freetable/macros.js index 94921e076..d1e65f61c 100644 --- a/packages/web/src/freetable/macros.js +++ b/packages/web/src/freetable/macros.js @@ -38,10 +38,11 @@ const macros = [ type: 'select', options: ['toUpper', 'toLower', 'lowerCase', 'upperCase', 'kebabCase', 'snakeCase', 'camelCase', 'startCase'], label: 'Type', - name: 'caseTransform', + name: 'type', + default: 'toUpper', }, ], - code: `return modules.lodash[args.caseTransform || 'toUpper'](value)`, + code: `return modules.lodash[args.type](value)`, }, { title: 'Row index', @@ -65,10 +66,11 @@ const macros = [ { value: 'uuidv4', name: 'V4 - random generated' }, ], label: 'Version', - name: 'uuidVersion', + name: 'version', + default: 'uuidv1', }, ], - code: `return modules[args.uuidVersion || 'uuidv1']()`, + code: `return modules[args.version]()`, }, { title: 'Current date', @@ -80,10 +82,11 @@ const macros = [ { type: 'text', label: 'Format', - name: 'dateFormat', + name: 'format', + default: 'YYYY-MM-DD HH:mm:ss', }, ], - code: `return modules.moment().format(args.dateFormat || 'YYYY-MM-DD HH:mm:ss')`, + code: `return modules.moment().format(args.format)`, }, ];