@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.
Files changed (85) hide show
  1. package/dist/elements/Banner/index.d.ts.map +1 -1
  2. package/dist/elements/Banner/index.js.map +1 -1
  3. package/dist/elements/BulkUpload/AddingFilesView/index.js +2 -2
  4. package/dist/elements/BulkUpload/AddingFilesView/index.js.map +1 -1
  5. package/dist/elements/BulkUpload/EditForm/index.d.ts.map +1 -1
  6. package/dist/elements/BulkUpload/EditForm/index.js +13 -2
  7. package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
  8. package/dist/elements/BulkUpload/FormsManager/reducer.js +14 -14
  9. package/dist/elements/BulkUpload/FormsManager/reducer.js.map +1 -1
  10. package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  11. package/dist/elements/DocumentDrawer/DrawerContent.js +44 -30
  12. package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
  13. package/dist/elements/DuplicateDocument/index.d.ts +1 -1
  14. package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
  15. package/dist/elements/DuplicateDocument/index.js.map +1 -1
  16. package/dist/elements/EditMany/index.d.ts.map +1 -1
  17. package/dist/elements/EditMany/index.js +155 -247
  18. package/dist/elements/EditMany/index.js.map +1 -1
  19. package/dist/elements/RenderServerComponent/index.d.ts +0 -6
  20. package/dist/elements/RenderServerComponent/index.d.ts.map +1 -1
  21. package/dist/elements/RenderServerComponent/index.js +1 -24
  22. package/dist/elements/RenderServerComponent/index.js.map +1 -1
  23. package/dist/elements/Table/DefaultCell/fields/Relationship/index.js +1 -1
  24. package/dist/elements/Table/DefaultCell/fields/Relationship/index.js.map +1 -1
  25. package/dist/elements/Table/DefaultCell/index.d.ts +1 -1
  26. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  27. package/dist/elements/Table/DefaultCell/index.js +2 -2
  28. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  29. package/dist/elements/Table/RelationshipProvider/reducer.js +16 -16
  30. package/dist/elements/Table/RelationshipProvider/reducer.js.map +1 -1
  31. package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.js +4 -4
  32. package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.js.map +1 -1
  33. package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.js +7 -7
  34. package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.js.map +1 -1
  35. package/dist/exports/client/index.js +10 -10
  36. package/dist/exports/client/index.js.map +4 -4
  37. package/dist/exports/shared/index.d.ts +1 -0
  38. package/dist/exports/shared/index.d.ts.map +1 -1
  39. package/dist/exports/shared/index.js +2 -2
  40. package/dist/exports/shared/index.js.map +4 -4
  41. package/dist/fields/Relationship/optionsReducer.js +42 -42
  42. package/dist/fields/Relationship/optionsReducer.js.map +1 -1
  43. package/dist/forms/Form/fieldReducer.js +170 -170
  44. package/dist/forms/Form/fieldReducer.js.map +1 -1
  45. package/dist/forms/Form/index.d.ts.map +1 -1
  46. package/dist/forms/Form/index.js +7 -29
  47. package/dist/forms/Form/index.js.map +1 -1
  48. package/dist/forms/RenderFields/RenderField.js +6 -6
  49. package/dist/forms/RenderFields/RenderField.js.map +1 -1
  50. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +1 -1
  51. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  52. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.js +17 -17
  53. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.js.map +1 -1
  54. package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
  55. package/dist/forms/fieldSchemasToFormState/renderField.js +2 -1
  56. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  57. package/dist/providers/ServerFunctions/index.d.ts +0 -2
  58. package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
  59. package/dist/providers/ServerFunctions/index.js +16 -67
  60. package/dist/providers/ServerFunctions/index.js.map +1 -1
  61. package/dist/utilities/abortAndIgnore.d.ts +2 -0
  62. package/dist/utilities/abortAndIgnore.d.ts.map +1 -0
  63. package/dist/utilities/abortAndIgnore.js +10 -0
  64. package/dist/utilities/abortAndIgnore.js.map +1 -0
  65. package/dist/utilities/buildFieldSchemaMap/traverseFields.js +12 -12
  66. package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
  67. package/dist/utilities/buildFormState.d.ts +0 -4
  68. package/dist/utilities/buildFormState.d.ts.map +1 -1
  69. package/dist/utilities/buildFormState.js +1 -15
  70. package/dist/utilities/buildFormState.js.map +1 -1
  71. package/dist/utilities/buildTableState.d.ts +2 -1
  72. package/dist/utilities/buildTableState.d.ts.map +1 -1
  73. package/dist/utilities/buildTableState.js +6 -3
  74. package/dist/utilities/buildTableState.js.map +1 -1
  75. package/dist/utilities/handleFormStateLocking.d.ts.map +1 -1
  76. package/dist/utilities/handleFormStateLocking.js +2 -0
  77. package/dist/utilities/handleFormStateLocking.js.map +1 -1
  78. package/dist/views/Edit/index.d.ts.map +1 -1
  79. package/dist/views/Edit/index.js +11 -18
  80. package/dist/views/Edit/index.js.map +1 -1
  81. package/dist/views/List/index.d.ts.map +1 -1
  82. package/dist/views/List/index.js +41 -52
  83. package/dist/views/List/index.js.map +1 -1
  84. package/license.md +22 -0
  85. 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 'REPLACE_STATE':
13
+ case 'ADD_ROW':
14
14
  {
15
- if (action.optimize !== false) {
16
- // Only update fields that have changed
17
- // by comparing old value / initialValue to new
18
- // ..
19
- // This is a performance enhancement for saving
20
- // large documents with hundreds of fields
21
- const newState = {};
22
- Object.entries(action.state).forEach(([path, field]) => {
23
- const oldField = state[path];
24
- const newField = field;
25
- if (!dequal(oldField, newField)) {
26
- newState[path] = newField;
27
- } else if (oldField) {
28
- newState[path] = oldField;
29
- }
30
- });
31
- return newState;
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
- // If we're not optimizing, just set the state to the new state
34
- return action.state;
35
- }
36
- case 'REMOVE':
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
- ...state
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 'UPDATE':
121
+ case 'DUPLICATE_ROW':
106
122
  {
107
- const newField = Object.entries(action).reduce((field, [key, value]) => {
108
- if (['disableFormData', 'errorMessage', 'initialValue', 'rows', 'valid', 'validate', 'value'].includes(key)) {
109
- return {
110
- ...field,
111
- [key]: value
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
- return field;
115
- }, state[action.path] || {});
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
- ...state,
118
- [action.path]: newField
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 'UPDATE_MANY':
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
- Object.entries(action.formState).forEach(([path, field]) => {
128
- newState[path] = field;
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 'DUPLICATE_ROW':
277
+ case 'REPLACE_STATE':
248
278
  {
249
- const {
250
- path,
251
- rowIndex
252
- } = action;
253
- const {
254
- remainingFields,
255
- rows
256
- } = separateRows(path, state);
257
- const rowsMetadata = [...(state[path].rows || [])];
258
- const duplicateRowMetadata = deepCopyObjectSimple(rowsMetadata[rowIndex]);
259
- if (duplicateRowMetadata.id) {
260
- duplicateRowMetadata.id = new ObjectId().toHexString();
261
- }
262
- const duplicateRowState = deepCopyObjectSimpleWithoutReactComponents(rows[rowIndex]);
263
- if (duplicateRowState.id) {
264
- duplicateRowState.id.value = new ObjectId().toHexString();
265
- duplicateRowState.id.initialValue = new ObjectId().toHexString();
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
- const newState = {
281
- ...remainingFields,
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 'MOVE_ROW':
300
+ case 'SET_ALL_ROWS_COLLAPSED':
294
301
  {
295
302
  const {
296
- moveFromIndex,
297
- moveToIndex,
298
- path
303
+ path,
304
+ updatedRows
299
305
  } = action;
300
- const {
301
- remainingFields,
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: rowStateCopy
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 'SET_ALL_ROWS_COLLAPSED':
329
+ case 'UPDATE':
343
330
  {
344
- const {
345
- path,
346
- updatedRows
347
- } = action;
348
- return {
349
- ...state,
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;AA4BnB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAmqBpC,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"}
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"}
@@ -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 abortControllerRef = useRef(new AbortController());
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
- if (abortControllerRef.current) {
355
- try {
356
- abortControllerRef.current.abort();
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: abortController.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
- if (re1) {
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(() => {