macro default parameter values

This commit is contained in:
Jan Prochazka
2020-11-01 09:36:45 +01:00
parent 80e17eff39
commit 20180fe4c4
4 changed files with 34 additions and 15 deletions

View File

@@ -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) {
<FreeTableGridCore
{...props}
macroPreview={selectedMacro}
macroValues={macroValues}
macroValues={extractMacroValuesForMacro(macroValues, selectedMacro)}
onSelectionChanged={setSelectedCells}
setSelectedMacro={setSelectedMacro}
/>

View File

@@ -93,9 +93,11 @@ export default function MacroDetail({ selectedMacro, setSelectedMacro, onChangeV
<WidgetTitle>Parameters</WidgetTitle>
{selectedMacro.args && selectedMacro.args.length > 0 ? (
<MacroParameters
key={selectedMacro.name}
args={selectedMacro.args}
onChangeValues={onChangeValues}
initialValues={macroValues}
macroValues={macroValues}
namePrefix={`${selectedMacro.name}#`}
/>
) : (
<TextWrapper>This macro has no parameters</TextWrapper>

View File

@@ -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 <FormTextField label={arg.label} name={arg.name} />;
return <FormTextField label={arg.label} name={name} />;
}
if (arg.type == 'select') {
return (
<FormSelectField label={arg.label} name={arg.name}>
<FormSelectField label={arg.label} name={name}>
{arg.options.map((opt) =>
_.isString(opt) ? <option value={opt}>{opt}</option> : <option value={opt.value}>{opt.name}</option>
)}
@@ -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) => (
<MacroArgument arg={arg} key={arg.name} />
<MacroArgument arg={arg} key={arg.name} namePrefix={namePrefix} />
))}
</>
);
}
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 (
<Formik initialValues={initialValues} onSubmit={() => {}}>
<Form>
<MacroArgumentList args={args} onChangeValues={onChangeValues} />
<MacroArgumentList args={args} onChangeValues={onChangeValues} namePrefix={namePrefix} />
</Form>
</Formik>
);

View File

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