fix(live-preview): client-side live preview cannot clear all array rows (#9439)
When using Client-side Live Preview, array fields are unable to clear all their rows. This is because `reduceFieldsToValues` sets the array's value as 0 within form-state when no rows exist, as opposed to an empty array as one might expect. For now, we can simply handle this data shape within Live Preview's merge logic. In the future we may want to take to consider changing the behavior of empty arrays within form-state itself.
This commit is contained in:
@@ -25,6 +25,14 @@ export const traverseFields = <T>(args: {
|
||||
|
||||
switch (fieldSchema.type) {
|
||||
case 'array':
|
||||
if (
|
||||
!incomingData[fieldName] &&
|
||||
incomingData[fieldName] !== undefined &&
|
||||
result?.[fieldName] !== undefined
|
||||
) {
|
||||
result[fieldName] = []
|
||||
}
|
||||
|
||||
if (Array.isArray(incomingData[fieldName])) {
|
||||
result[fieldName] = incomingData[fieldName].map((incomingRow, i) => {
|
||||
if (!result[fieldName]) {
|
||||
@@ -85,7 +93,7 @@ export const traverseFields = <T>(args: {
|
||||
break
|
||||
|
||||
case 'group':
|
||||
|
||||
// falls through
|
||||
case 'tabs':
|
||||
if (!result[fieldName]) {
|
||||
result[fieldName] = {}
|
||||
@@ -100,8 +108,9 @@ export const traverseFields = <T>(args: {
|
||||
})
|
||||
|
||||
break
|
||||
case 'relationship':
|
||||
|
||||
case 'relationship':
|
||||
// falls through
|
||||
case 'upload':
|
||||
// Handle `hasMany` relationships
|
||||
if (fieldSchema.hasMany && Array.isArray(incomingData[fieldName])) {
|
||||
|
||||
Reference in New Issue
Block a user