@payloadcms/ui 3.0.0-canary.67aae47 → 3.0.0-canary.6b9e4be
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/elements/Banner/index.d.ts.map +1 -1
- package/dist/elements/Banner/index.js.map +1 -1
- package/dist/elements/BulkUpload/AddingFilesView/index.js +2 -2
- package/dist/elements/BulkUpload/AddingFilesView/index.js.map +1 -1
- package/dist/elements/BulkUpload/EditForm/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/EditForm/index.js +13 -2
- package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/reducer.js +14 -14
- package/dist/elements/BulkUpload/FormsManager/reducer.js.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.js +44 -30
- package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/DuplicateDocument/index.d.ts +1 -1
- package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
- package/dist/elements/DuplicateDocument/index.js.map +1 -1
- package/dist/elements/EditMany/index.d.ts.map +1 -1
- package/dist/elements/EditMany/index.js +155 -247
- package/dist/elements/EditMany/index.js.map +1 -1
- package/dist/elements/RenderServerComponent/index.d.ts +0 -6
- package/dist/elements/RenderServerComponent/index.d.ts.map +1 -1
- package/dist/elements/RenderServerComponent/index.js +1 -24
- package/dist/elements/RenderServerComponent/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Relationship/index.js +1 -1
- package/dist/elements/Table/DefaultCell/fields/Relationship/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/index.d.ts +1 -1
- package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +2 -2
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/Table/RelationshipProvider/reducer.js +16 -16
- package/dist/elements/Table/RelationshipProvider/reducer.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.js +4 -4
- package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.js +7 -7
- package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.js.map +1 -1
- package/dist/exports/client/index.js +10 -10
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/shared/index.d.ts +1 -0
- package/dist/exports/shared/index.d.ts.map +1 -1
- package/dist/exports/shared/index.js +2 -2
- package/dist/exports/shared/index.js.map +4 -4
- package/dist/fields/Relationship/optionsReducer.js +42 -42
- package/dist/fields/Relationship/optionsReducer.js.map +1 -1
- package/dist/forms/Form/fieldReducer.js +170 -170
- package/dist/forms/Form/fieldReducer.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +7 -29
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/RenderFields/RenderField.js +6 -6
- package/dist/forms/RenderFields/RenderField.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.js +17 -17
- package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js +2 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
- package/dist/providers/ServerFunctions/index.d.ts +0 -2
- package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
- package/dist/providers/ServerFunctions/index.js +16 -67
- package/dist/providers/ServerFunctions/index.js.map +1 -1
- package/dist/utilities/abortAndIgnore.d.ts +2 -0
- package/dist/utilities/abortAndIgnore.d.ts.map +1 -0
- package/dist/utilities/abortAndIgnore.js +10 -0
- package/dist/utilities/abortAndIgnore.js.map +1 -0
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js +12 -12
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
- package/dist/utilities/buildFormState.d.ts +0 -4
- package/dist/utilities/buildFormState.d.ts.map +1 -1
- package/dist/utilities/buildFormState.js +1 -15
- package/dist/utilities/buildFormState.js.map +1 -1
- package/dist/utilities/buildTableState.d.ts +2 -1
- package/dist/utilities/buildTableState.d.ts.map +1 -1
- package/dist/utilities/buildTableState.js +6 -3
- package/dist/utilities/buildTableState.js.map +1 -1
- package/dist/utilities/handleFormStateLocking.d.ts.map +1 -1
- package/dist/utilities/handleFormStateLocking.js +2 -0
- package/dist/utilities/handleFormStateLocking.js.map +1 -1
- package/dist/views/Edit/index.d.ts.map +1 -1
- package/dist/views/Edit/index.js +11 -18
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +41 -52
- package/dist/views/List/index.js.map +1 -1
- package/license.md +22 -0
- package/package.json +15 -6
|
@@ -10,37 +10,53 @@ const ObjectId = ObjectIdImport.default || ObjectIdImport;
|
|
|
10
10
|
*/
|
|
11
11
|
export function fieldReducer(state, action) {
|
|
12
12
|
switch (action.type) {
|
|
13
|
-
case '
|
|
13
|
+
case 'ADD_ROW':
|
|
14
14
|
{
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
15
|
+
const {
|
|
16
|
+
blockType,
|
|
17
|
+
path,
|
|
18
|
+
rowIndex: rowIndexFromArgs,
|
|
19
|
+
subFieldState = {}
|
|
20
|
+
} = action;
|
|
21
|
+
const rowIndex = typeof rowIndexFromArgs === 'number' ? rowIndexFromArgs : state[path]?.rows?.length || 0;
|
|
22
|
+
const withNewRow = [...(state[path]?.rows || [])];
|
|
23
|
+
const newRow = {
|
|
24
|
+
id: subFieldState?.id?.value || new ObjectId().toHexString(),
|
|
25
|
+
blockType: blockType || undefined,
|
|
26
|
+
collapsed: false
|
|
27
|
+
};
|
|
28
|
+
withNewRow.splice(rowIndex, 0, newRow);
|
|
29
|
+
if (blockType) {
|
|
30
|
+
subFieldState.blockType = {
|
|
31
|
+
initialValue: blockType,
|
|
32
|
+
valid: true,
|
|
33
|
+
value: blockType
|
|
34
|
+
};
|
|
32
35
|
}
|
|
33
|
-
//
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
// add new row to array _field state_
|
|
37
|
+
const {
|
|
38
|
+
remainingFields,
|
|
39
|
+
rows: siblingRows
|
|
40
|
+
} = separateRows(path, state);
|
|
41
|
+
siblingRows.splice(rowIndex, 0, subFieldState);
|
|
38
42
|
const newState = {
|
|
39
|
-
...
|
|
43
|
+
...remainingFields,
|
|
44
|
+
...flattenRows(path, siblingRows),
|
|
45
|
+
[`${path}.${rowIndex}.id`]: {
|
|
46
|
+
initialValue: newRow.id,
|
|
47
|
+
passesCondition: true,
|
|
48
|
+
requiresRender: true,
|
|
49
|
+
valid: true,
|
|
50
|
+
value: newRow.id
|
|
51
|
+
},
|
|
52
|
+
[path]: {
|
|
53
|
+
...state[path],
|
|
54
|
+
disableFormData: true,
|
|
55
|
+
requiresRender: true,
|
|
56
|
+
rows: withNewRow,
|
|
57
|
+
value: siblingRows.length
|
|
58
|
+
}
|
|
40
59
|
};
|
|
41
|
-
if (newState[action.path]) {
|
|
42
|
-
delete newState[action.path];
|
|
43
|
-
}
|
|
44
60
|
return newState;
|
|
45
61
|
}
|
|
46
62
|
case 'ADD_SERVER_ERRORS':
|
|
@@ -102,31 +118,94 @@ export function fieldReducer(state, action) {
|
|
|
102
118
|
}, {});
|
|
103
119
|
return newState;
|
|
104
120
|
}
|
|
105
|
-
case '
|
|
121
|
+
case 'DUPLICATE_ROW':
|
|
106
122
|
{
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
123
|
+
const {
|
|
124
|
+
path,
|
|
125
|
+
rowIndex
|
|
126
|
+
} = action;
|
|
127
|
+
const {
|
|
128
|
+
remainingFields,
|
|
129
|
+
rows
|
|
130
|
+
} = separateRows(path, state);
|
|
131
|
+
const rowsMetadata = [...(state[path].rows || [])];
|
|
132
|
+
const duplicateRowMetadata = deepCopyObjectSimple(rowsMetadata[rowIndex]);
|
|
133
|
+
if (duplicateRowMetadata.id) {
|
|
134
|
+
duplicateRowMetadata.id = new ObjectId().toHexString();
|
|
135
|
+
}
|
|
136
|
+
const duplicateRowState = deepCopyObjectSimpleWithoutReactComponents(rows[rowIndex]);
|
|
137
|
+
if (duplicateRowState.id) {
|
|
138
|
+
duplicateRowState.id.value = new ObjectId().toHexString();
|
|
139
|
+
duplicateRowState.id.initialValue = new ObjectId().toHexString();
|
|
140
|
+
}
|
|
141
|
+
for (const key of Object.keys(duplicateRowState).filter(key => key.endsWith('.id'))) {
|
|
142
|
+
const idState = duplicateRowState[key];
|
|
143
|
+
if (idState && typeof idState.value === 'string' && ObjectId.isValid(idState.value)) {
|
|
144
|
+
duplicateRowState[key].value = new ObjectId().toHexString();
|
|
145
|
+
duplicateRowState[key].initialValue = new ObjectId().toHexString();
|
|
113
146
|
}
|
|
114
|
-
|
|
115
|
-
|
|
147
|
+
}
|
|
148
|
+
// If there are subfields
|
|
149
|
+
if (Object.keys(duplicateRowState).length > 0) {
|
|
150
|
+
// Add new object containing subfield names to unflattenedRows array
|
|
151
|
+
rows.splice(rowIndex + 1, 0, duplicateRowState);
|
|
152
|
+
rowsMetadata.splice(rowIndex + 1, 0, duplicateRowMetadata);
|
|
153
|
+
}
|
|
116
154
|
const newState = {
|
|
117
|
-
...
|
|
118
|
-
|
|
155
|
+
...remainingFields,
|
|
156
|
+
...flattenRows(path, rows),
|
|
157
|
+
[path]: {
|
|
158
|
+
...state[path],
|
|
159
|
+
disableFormData: true,
|
|
160
|
+
requiresRender: true,
|
|
161
|
+
rows: rowsMetadata,
|
|
162
|
+
value: rows.length
|
|
163
|
+
}
|
|
119
164
|
};
|
|
120
165
|
return newState;
|
|
121
166
|
}
|
|
122
|
-
case '
|
|
167
|
+
case 'MOVE_ROW':
|
|
168
|
+
{
|
|
169
|
+
const {
|
|
170
|
+
moveFromIndex,
|
|
171
|
+
moveToIndex,
|
|
172
|
+
path
|
|
173
|
+
} = action;
|
|
174
|
+
const {
|
|
175
|
+
remainingFields,
|
|
176
|
+
rows
|
|
177
|
+
} = separateRows(path, state);
|
|
178
|
+
// copy the row to move
|
|
179
|
+
const copyOfMovingRow = rows[moveFromIndex];
|
|
180
|
+
// delete the row by index
|
|
181
|
+
rows.splice(moveFromIndex, 1);
|
|
182
|
+
// insert row copyOfMovingRow back in
|
|
183
|
+
rows.splice(moveToIndex, 0, copyOfMovingRow);
|
|
184
|
+
// modify array/block internal row state (i.e. collapsed, blockType)
|
|
185
|
+
const rowStateCopy = [...(state[path]?.rows || [])];
|
|
186
|
+
const movingRowState = {
|
|
187
|
+
...rowStateCopy[moveFromIndex]
|
|
188
|
+
};
|
|
189
|
+
rowStateCopy.splice(moveFromIndex, 1);
|
|
190
|
+
rowStateCopy.splice(moveToIndex, 0, movingRowState);
|
|
191
|
+
const newState = {
|
|
192
|
+
...remainingFields,
|
|
193
|
+
...flattenRows(path, rows),
|
|
194
|
+
[path]: {
|
|
195
|
+
...state[path],
|
|
196
|
+
rows: rowStateCopy
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
return newState;
|
|
200
|
+
}
|
|
201
|
+
case 'REMOVE':
|
|
123
202
|
{
|
|
124
203
|
const newState = {
|
|
125
204
|
...state
|
|
126
205
|
};
|
|
127
|
-
|
|
128
|
-
newState[path]
|
|
129
|
-
}
|
|
206
|
+
if (newState[action.path]) {
|
|
207
|
+
delete newState[action.path];
|
|
208
|
+
}
|
|
130
209
|
return newState;
|
|
131
210
|
}
|
|
132
211
|
case 'REMOVE_ROW':
|
|
@@ -155,55 +234,6 @@ export function fieldReducer(state, action) {
|
|
|
155
234
|
};
|
|
156
235
|
return newState;
|
|
157
236
|
}
|
|
158
|
-
case 'ADD_ROW':
|
|
159
|
-
{
|
|
160
|
-
const {
|
|
161
|
-
blockType,
|
|
162
|
-
path,
|
|
163
|
-
rowIndex: rowIndexFromArgs,
|
|
164
|
-
subFieldState = {}
|
|
165
|
-
} = action;
|
|
166
|
-
const rowIndex = typeof rowIndexFromArgs === 'number' ? rowIndexFromArgs : state[path]?.rows?.length || 0;
|
|
167
|
-
const withNewRow = [...(state[path]?.rows || [])];
|
|
168
|
-
const newRow = {
|
|
169
|
-
id: subFieldState?.id?.value || new ObjectId().toHexString(),
|
|
170
|
-
blockType: blockType || undefined,
|
|
171
|
-
collapsed: false
|
|
172
|
-
};
|
|
173
|
-
withNewRow.splice(rowIndex, 0, newRow);
|
|
174
|
-
if (blockType) {
|
|
175
|
-
subFieldState.blockType = {
|
|
176
|
-
initialValue: blockType,
|
|
177
|
-
valid: true,
|
|
178
|
-
value: blockType
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
// add new row to array _field state_
|
|
182
|
-
const {
|
|
183
|
-
remainingFields,
|
|
184
|
-
rows: siblingRows
|
|
185
|
-
} = separateRows(path, state);
|
|
186
|
-
siblingRows.splice(rowIndex, 0, subFieldState);
|
|
187
|
-
const newState = {
|
|
188
|
-
...remainingFields,
|
|
189
|
-
...flattenRows(path, siblingRows),
|
|
190
|
-
[`${path}.${rowIndex}.id`]: {
|
|
191
|
-
initialValue: newRow.id,
|
|
192
|
-
passesCondition: true,
|
|
193
|
-
requiresRender: true,
|
|
194
|
-
valid: true,
|
|
195
|
-
value: newRow.id
|
|
196
|
-
},
|
|
197
|
-
[path]: {
|
|
198
|
-
...state[path],
|
|
199
|
-
disableFormData: true,
|
|
200
|
-
requiresRender: true,
|
|
201
|
-
rows: withNewRow,
|
|
202
|
-
value: siblingRows.length
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
return newState;
|
|
206
|
-
}
|
|
207
237
|
case 'REPLACE_ROW':
|
|
208
238
|
{
|
|
209
239
|
const {
|
|
@@ -244,85 +274,42 @@ export function fieldReducer(state, action) {
|
|
|
244
274
|
};
|
|
245
275
|
return newState;
|
|
246
276
|
}
|
|
247
|
-
case '
|
|
277
|
+
case 'REPLACE_STATE':
|
|
248
278
|
{
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
}
|
|
267
|
-
for (const key of Object.keys(duplicateRowState).filter(key => key.endsWith('.id'))) {
|
|
268
|
-
const idState = duplicateRowState[key];
|
|
269
|
-
if (idState && typeof idState.value === 'string' && ObjectId.isValid(idState.value)) {
|
|
270
|
-
duplicateRowState[key].value = new ObjectId().toHexString();
|
|
271
|
-
duplicateRowState[key].initialValue = new ObjectId().toHexString();
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
// If there are subfields
|
|
275
|
-
if (Object.keys(duplicateRowState).length > 0) {
|
|
276
|
-
// Add new object containing subfield names to unflattenedRows array
|
|
277
|
-
rows.splice(rowIndex + 1, 0, duplicateRowState);
|
|
278
|
-
rowsMetadata.splice(rowIndex + 1, 0, duplicateRowMetadata);
|
|
279
|
+
if (action.optimize !== false) {
|
|
280
|
+
// Only update fields that have changed
|
|
281
|
+
// by comparing old value / initialValue to new
|
|
282
|
+
// ..
|
|
283
|
+
// This is a performance enhancement for saving
|
|
284
|
+
// large documents with hundreds of fields
|
|
285
|
+
const newState = {};
|
|
286
|
+
Object.entries(action.state).forEach(([path, field]) => {
|
|
287
|
+
const oldField = state[path];
|
|
288
|
+
const newField = field;
|
|
289
|
+
if (!dequal(oldField, newField)) {
|
|
290
|
+
newState[path] = newField;
|
|
291
|
+
} else if (oldField) {
|
|
292
|
+
newState[path] = oldField;
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
return newState;
|
|
279
296
|
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
...flattenRows(path, rows),
|
|
283
|
-
[path]: {
|
|
284
|
-
...state[path],
|
|
285
|
-
disableFormData: true,
|
|
286
|
-
requiresRender: true,
|
|
287
|
-
rows: rowsMetadata,
|
|
288
|
-
value: rows.length
|
|
289
|
-
}
|
|
290
|
-
};
|
|
291
|
-
return newState;
|
|
297
|
+
// If we're not optimizing, just set the state to the new state
|
|
298
|
+
return action.state;
|
|
292
299
|
}
|
|
293
|
-
case '
|
|
300
|
+
case 'SET_ALL_ROWS_COLLAPSED':
|
|
294
301
|
{
|
|
295
302
|
const {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
path
|
|
303
|
+
path,
|
|
304
|
+
updatedRows
|
|
299
305
|
} = action;
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
rows
|
|
303
|
-
} = separateRows(path, state);
|
|
304
|
-
// copy the row to move
|
|
305
|
-
const copyOfMovingRow = rows[moveFromIndex];
|
|
306
|
-
// delete the row by index
|
|
307
|
-
rows.splice(moveFromIndex, 1);
|
|
308
|
-
// insert row copyOfMovingRow back in
|
|
309
|
-
rows.splice(moveToIndex, 0, copyOfMovingRow);
|
|
310
|
-
// modify array/block internal row state (i.e. collapsed, blockType)
|
|
311
|
-
const rowStateCopy = [...(state[path]?.rows || [])];
|
|
312
|
-
const movingRowState = {
|
|
313
|
-
...rowStateCopy[moveFromIndex]
|
|
314
|
-
};
|
|
315
|
-
rowStateCopy.splice(moveFromIndex, 1);
|
|
316
|
-
rowStateCopy.splice(moveToIndex, 0, movingRowState);
|
|
317
|
-
const newState = {
|
|
318
|
-
...remainingFields,
|
|
319
|
-
...flattenRows(path, rows),
|
|
306
|
+
return {
|
|
307
|
+
...state,
|
|
320
308
|
[path]: {
|
|
321
309
|
...state[path],
|
|
322
|
-
rows:
|
|
310
|
+
rows: updatedRows
|
|
323
311
|
}
|
|
324
312
|
};
|
|
325
|
-
return newState;
|
|
326
313
|
}
|
|
327
314
|
case 'SET_ROW_COLLAPSED':
|
|
328
315
|
{
|
|
@@ -339,19 +326,32 @@ export function fieldReducer(state, action) {
|
|
|
339
326
|
};
|
|
340
327
|
return newState;
|
|
341
328
|
}
|
|
342
|
-
case '
|
|
329
|
+
case 'UPDATE':
|
|
343
330
|
{
|
|
344
|
-
const {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
[path]: {
|
|
351
|
-
...state[path],
|
|
352
|
-
rows: updatedRows
|
|
331
|
+
const newField = Object.entries(action).reduce((field, [key, value]) => {
|
|
332
|
+
if (['disableFormData', 'errorMessage', 'initialValue', 'rows', 'valid', 'validate', 'value'].includes(key)) {
|
|
333
|
+
return {
|
|
334
|
+
...field,
|
|
335
|
+
[key]: value
|
|
336
|
+
};
|
|
353
337
|
}
|
|
338
|
+
return field;
|
|
339
|
+
}, state[action.path] || {});
|
|
340
|
+
const newState = {
|
|
341
|
+
...state,
|
|
342
|
+
[action.path]: newField
|
|
354
343
|
};
|
|
344
|
+
return newState;
|
|
345
|
+
}
|
|
346
|
+
case 'UPDATE_MANY':
|
|
347
|
+
{
|
|
348
|
+
const newState = {
|
|
349
|
+
...state
|
|
350
|
+
};
|
|
351
|
+
Object.entries(action.formState).forEach(([path, field]) => {
|
|
352
|
+
newState[path] = field;
|
|
353
|
+
});
|
|
354
|
+
return newState;
|
|
355
355
|
}
|
|
356
356
|
default:
|
|
357
357
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldReducer.js","names":["ObjectIdImport","dequal","deepCopyObjectSimple","deepCopyObjectSimpleWithoutReactComponents","flattenRows","separateRows","ObjectId","default","fieldReducer","state","action","type","optimize","newState","Object","entries","forEach","path","field","oldField","newField","errorPaths","errors","message","fieldPath","initialValue","value","errorMessage","valid","segments","split","length","push","fieldErrorPath","parentPath","slice","join","reduce","acc","fieldState","fieldErrorPaths","errorACC","startsWith","changed","newErrorPaths","Array","isArray","includes","key","formState","rowIndex","remainingFields","rows","rowsMetadata","splice","disableFormData","requiresRender","blockType","rowIndexFromArgs","subFieldState","withNewRow","newRow","id","toHexString","undefined","collapsed","siblingRows","passesCondition","rowIndexArg","Math","max","min","duplicateRowMetadata","duplicateRowState","keys","filter","endsWith","idState","isValid","moveFromIndex","moveToIndex","copyOfMovingRow","rowStateCopy","movingRowState","updatedRows"],"sources":["../../../src/forms/Form/fieldReducer.ts"],"sourcesContent":["'use client'\nimport type { FormField, FormState, Row } from 'payload'\n\nimport ObjectIdImport from 'bson-objectid'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { deepCopyObjectSimple, deepCopyObjectSimpleWithoutReactComponents } from 'payload/shared'\n\nimport type { FieldAction } from './types.js'\n\nimport { flattenRows, separateRows } from './rows.js'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\n/**\n * Reducer which modifies the form field state (all the current data of the fields in the form). When called using dispatch, it will return a new state object.\n */\nexport function fieldReducer(state: FormState, action: FieldAction): FormState {\n switch (action.type) {\n case 'REPLACE_STATE': {\n if (action.optimize !== false) {\n // Only update fields that have changed\n // by comparing old value / initialValue to new\n // ..\n // This is a performance enhancement for saving\n // large documents with hundreds of fields\n const newState = {}\n\n Object.entries(action.state).forEach(([path, field]) => {\n const oldField = state[path]\n const newField = field\n\n if (!dequal(oldField, newField)) {\n newState[path] = newField\n } else if (oldField) {\n newState[path] = oldField\n }\n })\n return newState\n }\n // If we're not optimizing, just set the state to the new state\n return action.state\n }\n\n case 'REMOVE': {\n const newState = { ...state }\n if (newState[action.path]) {\n delete newState[action.path]\n }\n return newState\n }\n\n case 'ADD_SERVER_ERRORS': {\n let newState = { ...state }\n\n const errorPaths: { fieldErrorPath: string; parentPath: string }[] = []\n\n action.errors.forEach(({ message, path: fieldPath }) => {\n newState[fieldPath] = {\n ...(newState[fieldPath] || {\n initialValue: null,\n value: null,\n }),\n errorMessage: message,\n valid: false,\n }\n\n const segments = fieldPath.split('.')\n if (segments.length > 1) {\n errorPaths.push({\n fieldErrorPath: fieldPath,\n parentPath: segments.slice(0, segments.length - 1).join('.'),\n })\n }\n })\n\n newState = Object.entries(newState).reduce((acc, [path, fieldState]) => {\n const fieldErrorPaths = errorPaths.reduce((errorACC, { fieldErrorPath, parentPath }) => {\n if (parentPath.startsWith(path)) {\n errorACC.push(fieldErrorPath)\n }\n return errorACC\n }, [])\n\n let changed = false\n\n if (fieldErrorPaths.length > 0) {\n const newErrorPaths = Array.isArray(fieldState.errorPaths) ? fieldState.errorPaths : []\n\n fieldErrorPaths.forEach((fieldErrorPath) => {\n if (!newErrorPaths.includes(fieldErrorPath)) {\n newErrorPaths.push(fieldErrorPath)\n changed = true\n }\n })\n\n if (changed) {\n acc[path] = {\n ...fieldState,\n errorPaths: newErrorPaths,\n }\n }\n }\n\n if (!changed) {\n acc[path] = fieldState\n }\n\n return acc\n }, {})\n\n return newState\n }\n\n case 'UPDATE': {\n const newField = Object.entries(action).reduce(\n (field, [key, value]) => {\n if (\n [\n 'disableFormData',\n 'errorMessage',\n 'initialValue',\n 'rows',\n 'valid',\n 'validate',\n 'value',\n ].includes(key)\n ) {\n return {\n ...field,\n [key]: value,\n }\n }\n\n return field\n },\n state[action.path] || ({} as FormField),\n )\n\n const newState = {\n ...state,\n [action.path]: newField,\n }\n\n return newState\n }\n\n case 'UPDATE_MANY': {\n const newState = { ...state }\n\n Object.entries(action.formState).forEach(([path, field]) => {\n newState[path] = field\n })\n\n return newState\n }\n\n case 'REMOVE_ROW': {\n const { path, rowIndex } = action\n const { remainingFields, rows } = separateRows(path, state)\n const rowsMetadata = [...(state[path]?.rows || [])]\n\n rows.splice(rowIndex, 1)\n rowsMetadata.splice(rowIndex, 1)\n\n const newState: FormState = {\n ...remainingFields,\n [path]: {\n ...state[path],\n disableFormData: rows.length > 0,\n requiresRender: true,\n rows: rowsMetadata,\n value: rows.length,\n },\n ...flattenRows(path, rows),\n }\n\n return newState\n }\n\n case 'ADD_ROW': {\n const { blockType, path, rowIndex: rowIndexFromArgs, subFieldState = {} } = action\n\n const rowIndex =\n typeof rowIndexFromArgs === 'number' ? rowIndexFromArgs : state[path]?.rows?.length || 0\n\n const withNewRow = [...(state[path]?.rows || [])]\n\n const newRow: Row = {\n id: (subFieldState?.id?.value as string) || new ObjectId().toHexString(),\n blockType: blockType || undefined,\n collapsed: false,\n }\n\n withNewRow.splice(rowIndex, 0, newRow)\n\n if (blockType) {\n subFieldState.blockType = {\n initialValue: blockType,\n valid: true,\n value: blockType,\n }\n }\n\n // add new row to array _field state_\n const { remainingFields, rows: siblingRows } = separateRows(path, state)\n siblingRows.splice(rowIndex, 0, subFieldState)\n\n const newState: FormState = {\n ...remainingFields,\n ...flattenRows(path, siblingRows),\n [`${path}.${rowIndex}.id`]: {\n initialValue: newRow.id,\n passesCondition: true,\n requiresRender: true,\n valid: true,\n value: newRow.id,\n },\n [path]: {\n ...state[path],\n disableFormData: true,\n requiresRender: true,\n rows: withNewRow,\n value: siblingRows.length,\n },\n }\n\n return newState\n }\n\n case 'REPLACE_ROW': {\n const { blockType, path, rowIndex: rowIndexArg, subFieldState = {} } = action\n\n const { remainingFields, rows: siblingRows } = separateRows(path, state)\n const rowIndex = Math.max(0, Math.min(rowIndexArg, siblingRows?.length - 1 || 0))\n\n const rowsMetadata = [...(state[path]?.rows || [])]\n rowsMetadata[rowIndex] = {\n id: new ObjectId().toHexString(),\n blockType: blockType || undefined,\n collapsed: false,\n }\n\n if (blockType) {\n subFieldState.blockType = {\n initialValue: blockType,\n valid: true,\n value: blockType,\n }\n }\n\n // replace form _field state_\n siblingRows[rowIndex] = subFieldState\n\n const newState: FormState = {\n ...remainingFields,\n ...flattenRows(path, siblingRows),\n [path]: {\n ...state[path],\n disableFormData: true,\n rows: rowsMetadata,\n value: siblingRows.length,\n },\n }\n\n return newState\n }\n\n case 'DUPLICATE_ROW': {\n const { path, rowIndex } = action\n const { remainingFields, rows } = separateRows(path, state)\n const rowsMetadata = [...(state[path].rows || [])]\n\n const duplicateRowMetadata = deepCopyObjectSimple(rowsMetadata[rowIndex])\n if (duplicateRowMetadata.id) {\n duplicateRowMetadata.id = new ObjectId().toHexString()\n }\n\n const duplicateRowState = deepCopyObjectSimpleWithoutReactComponents(rows[rowIndex])\n if (duplicateRowState.id) {\n duplicateRowState.id.value = new ObjectId().toHexString()\n duplicateRowState.id.initialValue = new ObjectId().toHexString()\n }\n\n for (const key of Object.keys(duplicateRowState).filter((key) => key.endsWith('.id'))) {\n const idState = duplicateRowState[key]\n\n if (idState && typeof idState.value === 'string' && ObjectId.isValid(idState.value)) {\n duplicateRowState[key].value = new ObjectId().toHexString()\n duplicateRowState[key].initialValue = new ObjectId().toHexString()\n }\n }\n\n // If there are subfields\n if (Object.keys(duplicateRowState).length > 0) {\n // Add new object containing subfield names to unflattenedRows array\n rows.splice(rowIndex + 1, 0, duplicateRowState)\n rowsMetadata.splice(rowIndex + 1, 0, duplicateRowMetadata)\n }\n\n const newState = {\n ...remainingFields,\n ...flattenRows(path, rows),\n [path]: {\n ...state[path],\n disableFormData: true,\n requiresRender: true,\n rows: rowsMetadata,\n value: rows.length,\n },\n }\n\n return newState\n }\n\n case 'MOVE_ROW': {\n const { moveFromIndex, moveToIndex, path } = action\n const { remainingFields, rows } = separateRows(path, state)\n\n // copy the row to move\n const copyOfMovingRow = rows[moveFromIndex]\n // delete the row by index\n rows.splice(moveFromIndex, 1)\n // insert row copyOfMovingRow back in\n rows.splice(moveToIndex, 0, copyOfMovingRow)\n\n // modify array/block internal row state (i.e. collapsed, blockType)\n const rowStateCopy = [...(state[path]?.rows || [])]\n const movingRowState = { ...rowStateCopy[moveFromIndex] }\n rowStateCopy.splice(moveFromIndex, 1)\n rowStateCopy.splice(moveToIndex, 0, movingRowState)\n\n const newState = {\n ...remainingFields,\n ...flattenRows(path, rows),\n [path]: {\n ...state[path],\n rows: rowStateCopy,\n },\n }\n\n return newState\n }\n\n case 'SET_ROW_COLLAPSED': {\n const { path, updatedRows } = action\n\n const newState = {\n ...state,\n [path]: {\n ...state[path],\n rows: updatedRows,\n },\n }\n\n return newState\n }\n\n case 'SET_ALL_ROWS_COLLAPSED': {\n const { path, updatedRows } = action\n\n return {\n ...state,\n [path]: {\n ...state[path],\n rows: updatedRows,\n },\n }\n }\n\n default: {\n return state\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"fieldReducer.js","names":["ObjectIdImport","dequal","deepCopyObjectSimple","deepCopyObjectSimpleWithoutReactComponents","flattenRows","separateRows","ObjectId","default","fieldReducer","state","action","type","blockType","path","rowIndex","rowIndexFromArgs","subFieldState","rows","length","withNewRow","newRow","id","value","toHexString","undefined","collapsed","splice","initialValue","valid","remainingFields","siblingRows","newState","passesCondition","requiresRender","disableFormData","errorPaths","errors","forEach","message","fieldPath","errorMessage","segments","split","push","fieldErrorPath","parentPath","slice","join","Object","entries","reduce","acc","fieldState","fieldErrorPaths","errorACC","startsWith","changed","newErrorPaths","Array","isArray","includes","rowsMetadata","duplicateRowMetadata","duplicateRowState","key","keys","filter","endsWith","idState","isValid","moveFromIndex","moveToIndex","copyOfMovingRow","rowStateCopy","movingRowState","rowIndexArg","Math","max","min","optimize","field","oldField","newField","updatedRows","formState"],"sources":["../../../src/forms/Form/fieldReducer.ts"],"sourcesContent":["'use client'\nimport type { FormField, FormState, Row } from 'payload'\n\nimport ObjectIdImport from 'bson-objectid'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { deepCopyObjectSimple, deepCopyObjectSimpleWithoutReactComponents } from 'payload/shared'\n\nimport type { FieldAction } from './types.js'\n\nimport { flattenRows, separateRows } from './rows.js'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\n/**\n * Reducer which modifies the form field state (all the current data of the fields in the form). When called using dispatch, it will return a new state object.\n */\nexport function fieldReducer(state: FormState, action: FieldAction): FormState {\n switch (action.type) {\n case 'ADD_ROW': {\n const { blockType, path, rowIndex: rowIndexFromArgs, subFieldState = {} } = action\n\n const rowIndex =\n typeof rowIndexFromArgs === 'number' ? rowIndexFromArgs : state[path]?.rows?.length || 0\n\n const withNewRow = [...(state[path]?.rows || [])]\n\n const newRow: Row = {\n id: (subFieldState?.id?.value as string) || new ObjectId().toHexString(),\n blockType: blockType || undefined,\n collapsed: false,\n }\n\n withNewRow.splice(rowIndex, 0, newRow)\n\n if (blockType) {\n subFieldState.blockType = {\n initialValue: blockType,\n valid: true,\n value: blockType,\n }\n }\n\n // add new row to array _field state_\n const { remainingFields, rows: siblingRows } = separateRows(path, state)\n siblingRows.splice(rowIndex, 0, subFieldState)\n\n const newState: FormState = {\n ...remainingFields,\n ...flattenRows(path, siblingRows),\n [`${path}.${rowIndex}.id`]: {\n initialValue: newRow.id,\n passesCondition: true,\n requiresRender: true,\n valid: true,\n value: newRow.id,\n },\n [path]: {\n ...state[path],\n disableFormData: true,\n requiresRender: true,\n rows: withNewRow,\n value: siblingRows.length,\n },\n }\n\n return newState\n }\n\n case 'ADD_SERVER_ERRORS': {\n let newState = { ...state }\n\n const errorPaths: { fieldErrorPath: string; parentPath: string }[] = []\n\n action.errors.forEach(({ message, path: fieldPath }) => {\n newState[fieldPath] = {\n ...(newState[fieldPath] || {\n initialValue: null,\n value: null,\n }),\n errorMessage: message,\n valid: false,\n }\n\n const segments = fieldPath.split('.')\n if (segments.length > 1) {\n errorPaths.push({\n fieldErrorPath: fieldPath,\n parentPath: segments.slice(0, segments.length - 1).join('.'),\n })\n }\n })\n\n newState = Object.entries(newState).reduce((acc, [path, fieldState]) => {\n const fieldErrorPaths = errorPaths.reduce((errorACC, { fieldErrorPath, parentPath }) => {\n if (parentPath.startsWith(path)) {\n errorACC.push(fieldErrorPath)\n }\n return errorACC\n }, [])\n\n let changed = false\n\n if (fieldErrorPaths.length > 0) {\n const newErrorPaths = Array.isArray(fieldState.errorPaths) ? fieldState.errorPaths : []\n\n fieldErrorPaths.forEach((fieldErrorPath) => {\n if (!newErrorPaths.includes(fieldErrorPath)) {\n newErrorPaths.push(fieldErrorPath)\n changed = true\n }\n })\n\n if (changed) {\n acc[path] = {\n ...fieldState,\n errorPaths: newErrorPaths,\n }\n }\n }\n\n if (!changed) {\n acc[path] = fieldState\n }\n\n return acc\n }, {})\n\n return newState\n }\n\n case 'DUPLICATE_ROW': {\n const { path, rowIndex } = action\n const { remainingFields, rows } = separateRows(path, state)\n const rowsMetadata = [...(state[path].rows || [])]\n\n const duplicateRowMetadata = deepCopyObjectSimple(rowsMetadata[rowIndex])\n if (duplicateRowMetadata.id) {\n duplicateRowMetadata.id = new ObjectId().toHexString()\n }\n\n const duplicateRowState = deepCopyObjectSimpleWithoutReactComponents(rows[rowIndex])\n if (duplicateRowState.id) {\n duplicateRowState.id.value = new ObjectId().toHexString()\n duplicateRowState.id.initialValue = new ObjectId().toHexString()\n }\n\n for (const key of Object.keys(duplicateRowState).filter((key) => key.endsWith('.id'))) {\n const idState = duplicateRowState[key]\n\n if (idState && typeof idState.value === 'string' && ObjectId.isValid(idState.value)) {\n duplicateRowState[key].value = new ObjectId().toHexString()\n duplicateRowState[key].initialValue = new ObjectId().toHexString()\n }\n }\n\n // If there are subfields\n if (Object.keys(duplicateRowState).length > 0) {\n // Add new object containing subfield names to unflattenedRows array\n rows.splice(rowIndex + 1, 0, duplicateRowState)\n rowsMetadata.splice(rowIndex + 1, 0, duplicateRowMetadata)\n }\n\n const newState = {\n ...remainingFields,\n ...flattenRows(path, rows),\n [path]: {\n ...state[path],\n disableFormData: true,\n requiresRender: true,\n rows: rowsMetadata,\n value: rows.length,\n },\n }\n\n return newState\n }\n\n case 'MOVE_ROW': {\n const { moveFromIndex, moveToIndex, path } = action\n const { remainingFields, rows } = separateRows(path, state)\n\n // copy the row to move\n const copyOfMovingRow = rows[moveFromIndex]\n // delete the row by index\n rows.splice(moveFromIndex, 1)\n // insert row copyOfMovingRow back in\n rows.splice(moveToIndex, 0, copyOfMovingRow)\n\n // modify array/block internal row state (i.e. collapsed, blockType)\n const rowStateCopy = [...(state[path]?.rows || [])]\n const movingRowState = { ...rowStateCopy[moveFromIndex] }\n rowStateCopy.splice(moveFromIndex, 1)\n rowStateCopy.splice(moveToIndex, 0, movingRowState)\n\n const newState = {\n ...remainingFields,\n ...flattenRows(path, rows),\n [path]: {\n ...state[path],\n rows: rowStateCopy,\n },\n }\n\n return newState\n }\n\n case 'REMOVE': {\n const newState = { ...state }\n if (newState[action.path]) {\n delete newState[action.path]\n }\n return newState\n }\n\n case 'REMOVE_ROW': {\n const { path, rowIndex } = action\n const { remainingFields, rows } = separateRows(path, state)\n const rowsMetadata = [...(state[path]?.rows || [])]\n\n rows.splice(rowIndex, 1)\n rowsMetadata.splice(rowIndex, 1)\n\n const newState: FormState = {\n ...remainingFields,\n [path]: {\n ...state[path],\n disableFormData: rows.length > 0,\n requiresRender: true,\n rows: rowsMetadata,\n value: rows.length,\n },\n ...flattenRows(path, rows),\n }\n\n return newState\n }\n\n case 'REPLACE_ROW': {\n const { blockType, path, rowIndex: rowIndexArg, subFieldState = {} } = action\n\n const { remainingFields, rows: siblingRows } = separateRows(path, state)\n const rowIndex = Math.max(0, Math.min(rowIndexArg, siblingRows?.length - 1 || 0))\n\n const rowsMetadata = [...(state[path]?.rows || [])]\n rowsMetadata[rowIndex] = {\n id: new ObjectId().toHexString(),\n blockType: blockType || undefined,\n collapsed: false,\n }\n\n if (blockType) {\n subFieldState.blockType = {\n initialValue: blockType,\n valid: true,\n value: blockType,\n }\n }\n\n // replace form _field state_\n siblingRows[rowIndex] = subFieldState\n\n const newState: FormState = {\n ...remainingFields,\n ...flattenRows(path, siblingRows),\n [path]: {\n ...state[path],\n disableFormData: true,\n rows: rowsMetadata,\n value: siblingRows.length,\n },\n }\n\n return newState\n }\n\n case 'REPLACE_STATE': {\n if (action.optimize !== false) {\n // Only update fields that have changed\n // by comparing old value / initialValue to new\n // ..\n // This is a performance enhancement for saving\n // large documents with hundreds of fields\n const newState = {}\n\n Object.entries(action.state).forEach(([path, field]) => {\n const oldField = state[path]\n const newField = field\n\n if (!dequal(oldField, newField)) {\n newState[path] = newField\n } else if (oldField) {\n newState[path] = oldField\n }\n })\n return newState\n }\n // If we're not optimizing, just set the state to the new state\n return action.state\n }\n\n case 'SET_ALL_ROWS_COLLAPSED': {\n const { path, updatedRows } = action\n\n return {\n ...state,\n [path]: {\n ...state[path],\n rows: updatedRows,\n },\n }\n }\n\n case 'SET_ROW_COLLAPSED': {\n const { path, updatedRows } = action\n\n const newState = {\n ...state,\n [path]: {\n ...state[path],\n rows: updatedRows,\n },\n }\n\n return newState\n }\n\n case 'UPDATE': {\n const newField = Object.entries(action).reduce(\n (field, [key, value]) => {\n if (\n [\n 'disableFormData',\n 'errorMessage',\n 'initialValue',\n 'rows',\n 'valid',\n 'validate',\n 'value',\n ].includes(key)\n ) {\n return {\n ...field,\n [key]: value,\n }\n }\n\n return field\n },\n state[action.path] || ({} as FormField),\n )\n\n const newState = {\n ...state,\n [action.path]: newField,\n }\n\n return newState\n }\n\n case 'UPDATE_MANY': {\n const newState = { ...state }\n\n Object.entries(action.formState).forEach(([path, field]) => {\n newState[path] = field\n })\n\n return newState\n }\n\n default: {\n return state\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAEV,SAAS,EAGV,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAEV,SAAS,EAGV,MAAM,YAAY,CAAA;AA6BnB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CA0oBpC,CAAA;AAED,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,SAAS,EAAE,CAAA"}
|
package/dist/forms/Form/index.js
CHANGED
|
@@ -16,6 +16,7 @@ import { useLocale } from '../../providers/Locale/index.js';
|
|
|
16
16
|
import { useOperation } from '../../providers/Operation/index.js';
|
|
17
17
|
import { useServerFunctions } from '../../providers/ServerFunctions/index.js';
|
|
18
18
|
import { useTranslation } from '../../providers/Translation/index.js';
|
|
19
|
+
import { abortAndIgnore } from '../../utilities/abortAndIgnore.js';
|
|
19
20
|
import { requests } from '../../utilities/api.js';
|
|
20
21
|
import { FormContext, FormFieldsContext, FormWatchContext, InitializingContext, ModifiedContext, ProcessingContext, SubmittedContext } from './context.js';
|
|
21
22
|
import { errorMessages } from './errorMessages.js';
|
|
@@ -79,8 +80,7 @@ export const Form = props => {
|
|
|
79
80
|
const [submitted, setSubmitted] = useState(false);
|
|
80
81
|
const formRef = useRef(null);
|
|
81
82
|
const contextRef = useRef({});
|
|
82
|
-
const
|
|
83
|
-
const abortControllerRef2 = useRef(new AbortController());
|
|
83
|
+
const resetFormStateAbortControllerRef = useRef(null);
|
|
84
84
|
const fieldsReducer = useReducer(fieldReducer, {}, () => initialState);
|
|
85
85
|
/**
|
|
86
86
|
* `fields` is the current, up-to-date state/data of all fields in the form. It can be modified by using dispatchFields,
|
|
@@ -351,15 +351,9 @@ export const Form = props => {
|
|
|
351
351
|
return formData_0;
|
|
352
352
|
}, []);
|
|
353
353
|
const reset = useCallback(async data_6 => {
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
} catch (error) {
|
|
358
|
-
// swallow error
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
const abortController = new AbortController();
|
|
362
|
-
abortControllerRef.current = abortController;
|
|
354
|
+
abortAndIgnore(resetFormStateAbortControllerRef.current);
|
|
355
|
+
const controller = new AbortController();
|
|
356
|
+
resetFormStateAbortControllerRef.current = controller;
|
|
363
357
|
const docPreferences = await getDocPreferences();
|
|
364
358
|
const {
|
|
365
359
|
state: newState
|
|
@@ -373,7 +367,7 @@ export const Form = props => {
|
|
|
373
367
|
operation,
|
|
374
368
|
renderAllFields: true,
|
|
375
369
|
schemaPath: collectionSlug ? collectionSlug : globalSlug,
|
|
376
|
-
signal:
|
|
370
|
+
signal: controller.signal
|
|
377
371
|
});
|
|
378
372
|
contextRef.current = {
|
|
379
373
|
...initContextState
|
|
@@ -438,25 +432,9 @@ export const Form = props => {
|
|
|
438
432
|
subFieldState: subFieldState_0
|
|
439
433
|
});
|
|
440
434
|
}, [dispatchFields, getDataByPath]);
|
|
441
|
-
// clean on unmount
|
|
442
435
|
useEffect(() => {
|
|
443
|
-
const re1 = abortControllerRef.current;
|
|
444
|
-
const re2 = abortControllerRef2.current;
|
|
445
436
|
return () => {
|
|
446
|
-
|
|
447
|
-
try {
|
|
448
|
-
re1.abort();
|
|
449
|
-
} catch (_err) {
|
|
450
|
-
// swallow error
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
if (re2) {
|
|
454
|
-
try {
|
|
455
|
-
re2.abort();
|
|
456
|
-
} catch (_err_0) {
|
|
457
|
-
// swallow error
|
|
458
|
-
}
|
|
459
|
-
}
|
|
437
|
+
abortAndIgnore(resetFormStateAbortControllerRef.current);
|
|
460
438
|
};
|
|
461
439
|
}, []);
|
|
462
440
|
useEffect(() => {
|