diff --git a/src/client/components/forms/Form/buildStateFromSchema.js b/src/client/components/forms/Form/buildStateFromSchema.js index cbf351fe35..f096bf1126 100644 --- a/src/client/components/forms/Form/buildStateFromSchema.js +++ b/src/client/components/forms/Form/buildStateFromSchema.js @@ -64,7 +64,7 @@ const buildStateFromSchema = async (fieldSchema, fullData) => { initialValue: row.blockName, valid: true, }, - ...iterateFields(block.fields, row, rowPath), + ...(block?.fields ? iterateFields(block.fields, row, rowPath) : {}), }; }, {}), }; diff --git a/src/client/components/forms/RenderFields/RenderFieldsNotes.md b/src/client/components/forms/RenderFields/RenderFieldsNotes.md deleted file mode 100644 index 7e2c65f232..0000000000 --- a/src/client/components/forms/RenderFields/RenderFieldsNotes.md +++ /dev/null @@ -1,35 +0,0 @@ -RenderFieldsNotes - -slides.0.meta.title -slides.1.heroInfo.title - -fields: [ - { - name: slides, - type: array, - fields: [ - { - type: group, - name: meta, - fields: [ - { - name: title, - type: text, - component: require.resolve('/aslifjawelifjaew) - } - ] - }, - { - type: group, - name: heroInfo, - fields: [ - { - name: title, - type: text, - component: require.resolve('/aslifjawelifjaew) - } - ] - } - ] - } -] diff --git a/src/client/components/forms/RenderFields/index.js b/src/client/components/forms/RenderFields/index.js index f895ae1dca..ca0c2ba01f 100644 --- a/src/client/components/forms/RenderFields/index.js +++ b/src/client/components/forms/RenderFields/index.js @@ -24,9 +24,12 @@ const RenderFields = (props) => { className, } = props; - const [hasIntersected, setHasIntersected] = useState(false); + const [hasRendered, setHasRendered] = useState(false); const [intersectionRef, entry] = useIntersect(intersectionObserverOptions); const isIntersecting = Boolean(entry?.isIntersecting); + const isAboveViewport = entry?.boundingClientRect?.top < 0; + + const shouldRender = isIntersecting || isAboveViewport; const { operation: operationFromContext } = useRenderedFields(); @@ -43,10 +46,10 @@ const RenderFields = (props) => { }, [operation]); useEffect(() => { - if (isIntersecting && !hasIntersected) { - setHasIntersected(true); + if (shouldRender && !hasRendered) { + setHasRendered(true); } - }, [isIntersecting, hasIntersected]); + }, [shouldRender, hasRendered]); const classes = [ baseClass, @@ -59,7 +62,7 @@ const RenderFields = (props) => { ref={intersectionRef} className={classes} > - {hasIntersected && ( + {hasRendered && ( {fieldSchema.map((field, i) => { if (!field?.hidden && field?.admin?.disabled !== true) {