Skip to content
This repository has been archived by the owner on Jul 27, 2022. It is now read-only.

Commit

Permalink
fix(useFieldArray): nested field array not working
Browse files Browse the repository at this point in the history
  • Loading branch information
wellyshen committed Jul 27, 2021
1 parent e3eb173 commit 7d46221
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 16 deletions.
5 changes: 5 additions & 0 deletions .changeset/six-cherries-boil.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"react-cool-form": patch
---

fix(useFieldArray): nested field array not working
31 changes: 15 additions & 16 deletions src/useFieldArray.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,13 @@ export default <T = any, V extends FormValues = FormValues>(
const [fields, setFields] = useState<string[]>(getFields(true));

const updateFields = useCallback(() => {
setFields(getFields());
setNodesOrValues(getState("values"), {
shouldSetValues: false,
fields: Object.keys(fieldArrayRef.current[name].fields),
});
if (fieldArrayRef.current[name]) {
setFields(getFields());
setNodesOrValues(getState("values"), {
shouldSetValues: false,
fields: Object.keys(fieldArrayRef.current[name].fields),
});
}
}, [fieldArrayRef, getFields, getState, name, setNodesOrValues]);

useEffect(() => {
Expand Down Expand Up @@ -106,8 +108,8 @@ export default <T = any, V extends FormValues = FormValues>(
let state = getState();

(["values", "touched", "errors", "dirty"] as Keys[]).forEach((key) => {
const value = state[key][name];
const fieldsLength = state.values[name]?.length;
const value = get(state[key], name);
const fieldsLength = get(state.values, name)?.length;

if (
key === "values" ||
Expand All @@ -117,15 +119,12 @@ export default <T = any, V extends FormValues = FormValues>(
)
state = set(
state,
key,
{
...state[key],
[name]: handler(
Array.isArray(value) ? [...value] : [],
key,
fieldsLength ? fieldsLength - 1 : 0
),
},
`${key}.${name}`,
handler(
Array.isArray(value) ? [...value] : [],
key,
fieldsLength ? fieldsLength - 1 : 0
),
true
);
});
Expand Down

0 comments on commit 7d46221

Please sign in to comment.