feat: apply default values for dynamic fields
This commit is contained in:
@@ -23,12 +23,29 @@ function DynamicField(props) {
|
|||||||
return fields.reduce((previousValue, field) => {
|
return fields.reduce((previousValue, field) => {
|
||||||
return {
|
return {
|
||||||
...previousValue,
|
...previousValue,
|
||||||
[field.key]: '',
|
[field.key]: field.value ?? '',
|
||||||
__id: uuidv4(),
|
__id: uuidv4(),
|
||||||
};
|
};
|
||||||
}, {});
|
}, {});
|
||||||
}, [fields]);
|
}, [fields]);
|
||||||
|
|
||||||
|
const generateDefaultValue = React.useCallback(() => {
|
||||||
|
if (defaultValue?.length > 0) {
|
||||||
|
return defaultValue.map((item) => {
|
||||||
|
return fields.reduce((previousValue, field) => {
|
||||||
|
return {
|
||||||
|
...previousValue,
|
||||||
|
// if field value is different than null or undefined - use it,
|
||||||
|
// otherwise use the parent default value
|
||||||
|
[field.key]: field.value ?? item[field.key] ?? '',
|
||||||
|
};
|
||||||
|
}, {});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return [createEmptyItem()];
|
||||||
|
}
|
||||||
|
}, [defaultValue, fields, createEmptyItem]);
|
||||||
|
|
||||||
const addItem = React.useCallback(() => {
|
const addItem = React.useCallback(() => {
|
||||||
const values = getValues(name);
|
const values = getValues(name);
|
||||||
if (!values) {
|
if (!values) {
|
||||||
@@ -52,13 +69,11 @@ function DynamicField(props) {
|
|||||||
React.useEffect(
|
React.useEffect(
|
||||||
function addInitialGroupWhenEmpty() {
|
function addInitialGroupWhenEmpty() {
|
||||||
const fieldValues = getValues(name);
|
const fieldValues = getValues(name);
|
||||||
if (!fieldValues && defaultValue) {
|
if (!fieldValues) {
|
||||||
setValue(name, defaultValue);
|
setValue(name, generateDefaultValue());
|
||||||
} else if (!fieldValues) {
|
|
||||||
setValue(name, [createEmptyItem()]);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[createEmptyItem, defaultValue],
|
[generateDefaultValue],
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user