fix(ui): unique ids for nested rows on row duplicate to prevent errors with postgres (#8790)

Fixes https://github.com/payloadcms/payload/issues/8784

This works for any deep level, both arrays and blocks.
This commit is contained in:
Sasha
2024-10-21 15:51:26 +03:00
committed by GitHub
parent ef8a5b1f3e
commit fe25b54fff
2 changed files with 27 additions and 0 deletions

View File

@@ -263,6 +263,15 @@ export function fieldReducer(state: FormState, action: FieldAction): FormState {
duplicateRowState.id.initialValue = new ObjectId().toHexString()
}
for (const key of Object.keys(duplicateRowState).filter((key) => key.endsWith('.id'))) {
const idState = duplicateRowState[key]
if (idState && typeof idState.value === 'string' && ObjectId.isValid(idState.value)) {
duplicateRowState[key].value = new ObjectId().toHexString()
duplicateRowState[key].initialValue = new ObjectId().toHexString()
}
}
// If there are subfields
if (Object.keys(duplicateRowState).length > 0) {
// Add new object containing subfield names to unflattenedRows array