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)`,
},
];