From 9a7c0e3dbdf4e6decb03ae085a41fb239fd5b7a8 Mon Sep 17 00:00:00 2001 From: James Date: Fri, 2 Apr 2021 08:48:12 -0400 Subject: [PATCH] fix: ensures arrays and blocks reset row count on initialState change --- src/admin/components/forms/field-types/Array/Array.tsx | 8 +++++--- src/admin/components/forms/field-types/Blocks/Blocks.tsx | 7 ++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/admin/components/forms/field-types/Array/Array.tsx b/src/admin/components/forms/field-types/Array/Array.tsx index 9b720358a0..ff14405d35 100644 --- a/src/admin/components/forms/field-types/Array/Array.tsx +++ b/src/admin/components/forms/field-types/Array/Array.tsx @@ -39,7 +39,9 @@ const ArrayFieldType: React.FC = (props) => { } = props; const [rows, dispatchRows] = useReducer(reducer, []); - const { getDataByPath, dispatchFields } = useForm(); + const formContext = useForm(); + + const { dispatchFields } = formContext; const path = pathFromProps || name; @@ -87,9 +89,9 @@ const ArrayFieldType: React.FC = (props) => { }, [moveRow]); useEffect(() => { - const data = getDataByPath(path); + const data = formContext.getDataByPath(path); dispatchRows({ type: 'SET_ALL', data: data || [] }); - }, [getDataByPath, path]); + }, [formContext, path]); useEffect(() => { setValue(rows?.length || 0); diff --git a/src/admin/components/forms/field-types/Blocks/Blocks.tsx b/src/admin/components/forms/field-types/Blocks/Blocks.tsx index cd38ff0dfb..8e286bbe69 100644 --- a/src/admin/components/forms/field-types/Blocks/Blocks.tsx +++ b/src/admin/components/forms/field-types/Blocks/Blocks.tsx @@ -47,7 +47,8 @@ const Blocks: React.FC = (props) => { const path = pathFromProps || name; const [rows, dispatchRows] = useReducer(reducer, []); - const { getDataByPath, dispatchFields } = useForm(); + const formContext = useForm(); + const { dispatchFields } = formContext; const memoizedValidate = useCallback((value) => { const validationResult = validate( @@ -106,9 +107,9 @@ const Blocks: React.FC = (props) => { }, [moveRow]); useEffect(() => { - const data = getDataByPath(path); + const data = formContext.getDataByPath(path); dispatchRows({ type: 'SET_ALL', data: data || [] }); - }, [getDataByPath, path]); + }, [formContext, path]); useEffect(() => { setValue(rows?.length || 0);