@payloadcms/ui 3.32.0-internal.ef3356b → 3.32.0-internal.f2e77bd

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 (34) hide show
  1. package/dist/elements/Autosave/index.d.ts.map +1 -1
  2. package/dist/elements/Autosave/index.js +20 -42
  3. package/dist/elements/Autosave/index.js.map +1 -1
  4. package/dist/exports/client/index.js +23 -23
  5. package/dist/exports/client/index.js.map +3 -3
  6. package/dist/fields/Array/index.d.ts.map +1 -1
  7. package/dist/fields/Array/index.js +46 -50
  8. package/dist/fields/Array/index.js.map +1 -1
  9. package/dist/fields/Blocks/index.d.ts.map +1 -1
  10. package/dist/fields/Blocks/index.js +46 -50
  11. package/dist/fields/Blocks/index.js.map +1 -1
  12. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  13. package/dist/forms/Form/fieldReducer.js +51 -8
  14. package/dist/forms/Form/fieldReducer.js.map +1 -1
  15. package/dist/forms/Form/index.d.ts.map +1 -1
  16. package/dist/forms/Form/index.js +29 -14
  17. package/dist/forms/Form/index.js.map +1 -1
  18. package/dist/forms/Form/initContextState.d.ts.map +1 -1
  19. package/dist/forms/Form/initContextState.js +1 -0
  20. package/dist/forms/Form/initContextState.js.map +1 -1
  21. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  22. package/dist/forms/Form/mergeServerFormState.js +24 -6
  23. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  24. package/dist/forms/Form/types.d.ts +5 -0
  25. package/dist/forms/Form/types.d.ts.map +1 -1
  26. package/dist/forms/Form/types.js.map +1 -1
  27. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  28. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +0 -2
  29. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  30. package/dist/hooks/useQueues.d.ts +34 -1
  31. package/dist/hooks/useQueues.d.ts.map +1 -1
  32. package/dist/hooks/useQueues.js +44 -28
  33. package/dist/hooks/useQueues.js.map +1 -1
  34. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"initContextState.js","names":["submit","undefined","getSiblingData","dispatchFields","validateForm","createFormData","setModified","setProcessing","setBackgroundProcessing","setSubmitted","reset","initContextState","addFieldRow","buildRowErrors","disabled","fields","formRef","getData","getDataByPath","getField","getFields","initializing","isValid","removeFieldRow","replaceFieldRow","replaceState","setDisabled","setIsValid"],"sources":["../../../src/forms/Form/initContextState.ts"],"sourcesContent":["'use client'\nimport type { Data, FormField, FormState } from 'payload'\n\nimport type {\n Context,\n CreateFormData,\n DispatchFields,\n GetSiblingData,\n Reset,\n SetModified,\n SetProcessing,\n SetSubmitted,\n Submit,\n ValidateForm,\n} from './types.js'\n\nconst submit: Submit = () => undefined\nconst getSiblingData: GetSiblingData = () => undefined\nconst dispatchFields: DispatchFields = () => undefined\nconst validateForm: ValidateForm = () => undefined\nconst createFormData: CreateFormData = () => undefined\n\nconst setModified: SetModified = () => undefined\nconst setProcessing: SetProcessing = () => undefined\nconst setBackgroundProcessing: SetProcessing = () => undefined\nconst setSubmitted: SetSubmitted = () => undefined\nconst reset: Reset = () => undefined\n\nexport const initContextState: Context = {\n addFieldRow: () => undefined,\n buildRowErrors: () => undefined,\n createFormData,\n disabled: false,\n dispatchFields,\n fields: {},\n formRef: null,\n getData: (): Data => undefined,\n getDataByPath: () => undefined,\n getField: (): FormField => undefined,\n getFields: (): FormState => ({}),\n getSiblingData,\n initializing: undefined,\n isValid: true,\n removeFieldRow: () => undefined,\n replaceFieldRow: () => undefined,\n replaceState: () => undefined,\n reset,\n setBackgroundProcessing,\n setDisabled: () => undefined,\n setIsValid: () => undefined,\n setModified,\n setProcessing,\n setSubmitted,\n submit,\n\n validateForm,\n}\n"],"mappings":"AAAA;;AAgBA,MAAMA,MAAA,GAAiBA,CAAA,KAAMC,SAAA;AAC7B,MAAMC,cAAA,GAAiCA,CAAA,KAAMD,SAAA;AAC7C,MAAME,cAAA,GAAiCA,CAAA,KAAMF,SAAA;AAC7C,MAAMG,YAAA,GAA6BA,CAAA,KAAMH,SAAA;AACzC,MAAMI,cAAA,GAAiCA,CAAA,KAAMJ,SAAA;AAE7C,MAAMK,WAAA,GAA2BA,CAAA,KAAML,SAAA;AACvC,MAAMM,aAAA,GAA+BA,CAAA,KAAMN,SAAA;AAC3C,MAAMO,uBAAA,GAAyCA,CAAA,KAAMP,SAAA;AACrD,MAAMQ,YAAA,GAA6BA,CAAA,KAAMR,SAAA;AACzC,MAAMS,KAAA,GAAeA,CAAA,KAAMT,SAAA;AAE3B,OAAO,MAAMU,gBAAA,GAA4B;EACvCC,WAAA,EAAaA,CAAA,KAAMX,SAAA;EACnBY,cAAA,EAAgBA,CAAA,KAAMZ,SAAA;EACtBI,cAAA;EACAS,QAAA,EAAU;EACVX,cAAA;EACAY,MAAA,EAAQ,CAAC;EACTC,OAAA,EAAS;EACTC,OAAA,EAASA,CAAA,KAAYhB,SAAA;EACrBiB,aAAA,EAAeA,CAAA,KAAMjB,SAAA;EACrBkB,QAAA,EAAUA,CAAA,KAAiBlB,SAAA;EAC3BmB,SAAA,EAAWA,CAAA,MAAkB,CAAC;EAC9BlB,cAAA;EACAmB,YAAA,EAAcpB,SAAA;EACdqB,OAAA,EAAS;EACTC,cAAA,EAAgBA,CAAA,KAAMtB,SAAA;EACtBuB,eAAA,EAAiBA,CAAA,KAAMvB,SAAA;EACvBwB,YAAA,EAAcA,CAAA,KAAMxB,SAAA;EACpBS,KAAA;EACAF,uBAAA;EACAkB,WAAA,EAAaA,CAAA,KAAMzB,SAAA;EACnB0B,UAAA,EAAYA,CAAA,KAAM1B,SAAA;EAClBK,WAAA;EACAC,aAAA;EACAE,YAAA;EACAT,MAAA;EAEAI;AACF","ignoreList":[]}
1
+ {"version":3,"file":"initContextState.js","names":["submit","undefined","getSiblingData","dispatchFields","validateForm","createFormData","setModified","setProcessing","setBackgroundProcessing","setSubmitted","reset","initContextState","addFieldRow","buildRowErrors","disabled","fields","formRef","getData","getDataByPath","getField","getFields","initializing","isValid","moveFieldRow","removeFieldRow","replaceFieldRow","replaceState","setDisabled","setIsValid"],"sources":["../../../src/forms/Form/initContextState.ts"],"sourcesContent":["'use client'\nimport type { Data, FormField, FormState } from 'payload'\n\nimport type {\n Context,\n CreateFormData,\n DispatchFields,\n GetSiblingData,\n Reset,\n SetModified,\n SetProcessing,\n SetSubmitted,\n Submit,\n ValidateForm,\n} from './types.js'\n\nconst submit: Submit = () => undefined\nconst getSiblingData: GetSiblingData = () => undefined\nconst dispatchFields: DispatchFields = () => undefined\nconst validateForm: ValidateForm = () => undefined\nconst createFormData: CreateFormData = () => undefined\n\nconst setModified: SetModified = () => undefined\nconst setProcessing: SetProcessing = () => undefined\nconst setBackgroundProcessing: SetProcessing = () => undefined\nconst setSubmitted: SetSubmitted = () => undefined\nconst reset: Reset = () => undefined\n\nexport const initContextState: Context = {\n addFieldRow: () => undefined,\n buildRowErrors: () => undefined,\n createFormData,\n disabled: false,\n dispatchFields,\n fields: {},\n formRef: null,\n getData: (): Data => undefined,\n getDataByPath: () => undefined,\n getField: (): FormField => undefined,\n getFields: (): FormState => ({}),\n getSiblingData,\n initializing: undefined,\n isValid: true,\n moveFieldRow: () => undefined,\n removeFieldRow: () => undefined,\n replaceFieldRow: () => undefined,\n replaceState: () => undefined,\n reset,\n setBackgroundProcessing,\n setDisabled: () => undefined,\n setIsValid: () => undefined,\n setModified,\n setProcessing,\n setSubmitted,\n submit,\n\n validateForm,\n}\n"],"mappings":"AAAA;;AAgBA,MAAMA,MAAA,GAAiBA,CAAA,KAAMC,SAAA;AAC7B,MAAMC,cAAA,GAAiCA,CAAA,KAAMD,SAAA;AAC7C,MAAME,cAAA,GAAiCA,CAAA,KAAMF,SAAA;AAC7C,MAAMG,YAAA,GAA6BA,CAAA,KAAMH,SAAA;AACzC,MAAMI,cAAA,GAAiCA,CAAA,KAAMJ,SAAA;AAE7C,MAAMK,WAAA,GAA2BA,CAAA,KAAML,SAAA;AACvC,MAAMM,aAAA,GAA+BA,CAAA,KAAMN,SAAA;AAC3C,MAAMO,uBAAA,GAAyCA,CAAA,KAAMP,SAAA;AACrD,MAAMQ,YAAA,GAA6BA,CAAA,KAAMR,SAAA;AACzC,MAAMS,KAAA,GAAeA,CAAA,KAAMT,SAAA;AAE3B,OAAO,MAAMU,gBAAA,GAA4B;EACvCC,WAAA,EAAaA,CAAA,KAAMX,SAAA;EACnBY,cAAA,EAAgBA,CAAA,KAAMZ,SAAA;EACtBI,cAAA;EACAS,QAAA,EAAU;EACVX,cAAA;EACAY,MAAA,EAAQ,CAAC;EACTC,OAAA,EAAS;EACTC,OAAA,EAASA,CAAA,KAAYhB,SAAA;EACrBiB,aAAA,EAAeA,CAAA,KAAMjB,SAAA;EACrBkB,QAAA,EAAUA,CAAA,KAAiBlB,SAAA;EAC3BmB,SAAA,EAAWA,CAAA,MAAkB,CAAC;EAC9BlB,cAAA;EACAmB,YAAA,EAAcpB,SAAA;EACdqB,OAAA,EAAS;EACTC,YAAA,EAAcA,CAAA,KAAMtB,SAAA;EACpBuB,cAAA,EAAgBA,CAAA,KAAMvB,SAAA;EACtBwB,eAAA,EAAiBA,CAAA,KAAMxB,SAAA;EACvByB,YAAA,EAAcA,CAAA,KAAMzB,SAAA;EACpBS,KAAA;EACAF,uBAAA;EACAmB,WAAA,EAAaA,CAAA,KAAM1B,SAAA;EACnB2B,UAAA,EAAYA,CAAA,KAAM3B,SAAA;EAClBK,WAAA;EACAC,aAAA;EACAE,YAAA;EACAT,MAAA;EAEAI;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"mergeServerFormState.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/mergeServerFormState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAA;AAIxC,KAAK,IAAI,GAAG;IACV,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,SAAS,CAAA;IACxB,aAAa,EAAE,SAAS,CAAA;CACzB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,oDAI9B,IAAI,KAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CA+FhD,CAAA"}
1
+ {"version":3,"file":"mergeServerFormState.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/mergeServerFormState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAA;AAIxC,KAAK,IAAI,GAAG;IACV,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,SAAS,CAAA;IACxB,aAAa,EAAE,SAAS,CAAA;CACzB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,oDAI9B,IAAI,KAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAuHhD,CAAA"}
@@ -50,18 +50,36 @@ export const mergeServerFormState = ({
50
50
  /**
51
51
  * Handle adding all the remaining props that should be updated in the local form state from the server form state
52
52
  */
53
- serverPropsToAccept.forEach(prop => {
54
- if (!dequal(incomingState[path]?.[prop], newFieldState[prop])) {
53
+ serverPropsToAccept.forEach(propFromServer => {
54
+ if (!dequal(incomingState[path]?.[propFromServer], newFieldState[propFromServer])) {
55
55
  changed = true;
56
56
  fieldChanged = true;
57
- if (!(prop in incomingState[path])) {
57
+ // The `ignoreServerProps` obj is used to prevent the various properties from being overridden across form state requests.
58
+ // This can happen when queueing a form state request with `requiresRender: true` while the another is already processing.
59
+ // For example:
60
+ // 1. One "add row" action will set `requiresRender: true` and dispatch a form state request
61
+ // 2. Another "add row" action will set `requiresRender: true` and queue a form state request
62
+ // 3. The first request will return with `requiresRender: false`
63
+ // 4. The second request will be dispatched with `requiresRender: false` but should be `true`
64
+ // To fix this, only merge the `requiresRender` property if the previous state has not set it to `true`.
65
+ // See the `fieldReducer` function for where this gets set.
66
+ if (newFieldState?.ignoreServerProps?.[propFromServer]) {
67
+ // Remove the ignored prop for the next request
68
+ delete newFieldState.ignoreServerProps[propFromServer];
69
+ // if no keys left, remove the entire object
70
+ if (Object.keys(newFieldState.ignoreServerProps).length === 0) {
71
+ delete newFieldState.ignoreServerProps;
72
+ }
73
+ return;
74
+ }
75
+ if (!(propFromServer in incomingState[path])) {
58
76
  // Regarding excluding the customComponents prop from being deleted: the incoming state might not have been rendered, as rendering components for every form onchange is expensive.
59
77
  // Thus, we simply re-use the initial render state
60
- if (prop !== 'customComponents') {
61
- delete newFieldState[prop];
78
+ if (propFromServer !== 'customComponents') {
79
+ delete newFieldState[propFromServer];
62
80
  }
63
81
  } else {
64
- newFieldState[prop] = incomingState[path][prop];
82
+ newFieldState[propFromServer] = incomingState[path][propFromServer];
65
83
  }
66
84
  }
67
85
  });
@@ -1 +1 @@
1
- {"version":3,"file":"mergeServerFormState.js","names":["dequal","mergeErrorPaths","mergeServerFormState","acceptValues","existingState","incomingState","changed","newState","serverPropsToAccept","push","path","newFieldState","Object","entries","fieldChanged","errorPathsResult","errorPaths","result","filterOptions","forEach","prop","valid","passesCondition","field"],"sources":["../../../src/forms/Form/mergeServerFormState.ts"],"sourcesContent":["'use client'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { type FormState } from 'payload'\n\nimport { mergeErrorPaths } from './mergeErrorPaths.js'\n\ntype Args = {\n acceptValues?: boolean\n existingState: FormState\n incomingState: FormState\n}\n\n/**\n * Merges certain properties from the server state into the client state. These do not include values,\n * as we do not want to update them on the client like that, which would cause flickering.\n *\n * We want to use this to update the error state, and other properties that are not user input, as the error state\n * is the thing we want to keep in sync with the server (where it's calculated) on the client.\n */\nexport const mergeServerFormState = ({\n acceptValues,\n existingState,\n incomingState,\n}: Args): { changed: boolean; newState: FormState } => {\n let changed = false\n\n const newState = {}\n\n if (existingState) {\n const serverPropsToAccept = [\n 'passesCondition',\n 'valid',\n 'errorMessage',\n 'errorPaths',\n 'rows',\n 'customComponents',\n 'requiresRender',\n ]\n\n if (acceptValues) {\n serverPropsToAccept.push('value')\n serverPropsToAccept.push('initialValue')\n }\n\n for (const [path, newFieldState] of Object.entries(existingState)) {\n if (!incomingState[path]) {\n continue\n }\n let fieldChanged = false\n\n /**\n * Handle error paths\n */\n const errorPathsResult = mergeErrorPaths(\n newFieldState.errorPaths,\n incomingState[path].errorPaths as unknown as string[],\n )\n if (errorPathsResult.result) {\n if (errorPathsResult.changed) {\n changed = errorPathsResult.changed\n }\n newFieldState.errorPaths = errorPathsResult.result\n }\n\n /**\n * Handle filterOptions\n */\n if (incomingState[path]?.filterOptions || newFieldState.filterOptions) {\n if (!dequal(incomingState[path]?.filterOptions, newFieldState.filterOptions)) {\n changed = true\n fieldChanged = true\n newFieldState.filterOptions = incomingState[path].filterOptions\n }\n }\n\n /**\n * Handle adding all the remaining props that should be updated in the local form state from the server form state\n */\n serverPropsToAccept.forEach((prop) => {\n if (!dequal(incomingState[path]?.[prop], newFieldState[prop])) {\n changed = true\n fieldChanged = true\n if (!(prop in incomingState[path])) {\n // Regarding excluding the customComponents prop from being deleted: the incoming state might not have been rendered, as rendering components for every form onchange is expensive.\n // Thus, we simply re-use the initial render state\n if (prop !== 'customComponents') {\n delete newFieldState[prop]\n }\n } else {\n newFieldState[prop] = incomingState[path][prop]\n }\n }\n })\n\n if (newFieldState.valid !== false) {\n newFieldState.valid = true\n }\n if (newFieldState.passesCondition !== false) {\n newFieldState.passesCondition = true\n }\n\n // Conditions don't work if we don't memcopy the new state, as the object references would otherwise be the same\n newState[path] = fieldChanged ? { ...newFieldState } : newFieldState\n }\n\n // Now loop over values that are part of incoming state but not part of existing state, and add them to the new state.\n // This can happen if a new array row was added. In our local state, we simply add out stubbed `array` and `array.[index].id` entries to the local form state.\n // However, all other array sub-fields are not added to the local state - those will be added by the server and may be incoming here.\n\n for (const [path, field] of Object.entries(incomingState)) {\n if (!existingState[path]) {\n changed = true\n newState[path] = field\n }\n }\n }\n\n return { changed, newState }\n}\n"],"mappings":"AAAA;;AACA,SAASA,MAAM,QAAQ,cAAa,CAAC;AAGrC,SAASC,eAAe,QAAQ;AAQhC;;;;;;;AAOA,OAAO,MAAMC,oBAAA,GAAuBA,CAAC;EACnCC,YAAY;EACZC,aAAa;EACbC;AAAa,CACR;EACL,IAAIC,OAAA,GAAU;EAEd,MAAMC,QAAA,GAAW,CAAC;EAElB,IAAIH,aAAA,EAAe;IACjB,MAAMI,mBAAA,GAAsB,CAC1B,mBACA,SACA,gBACA,cACA,QACA,oBACA,iBACD;IAED,IAAIL,YAAA,EAAc;MAChBK,mBAAA,CAAoBC,IAAI,CAAC;MACzBD,mBAAA,CAAoBC,IAAI,CAAC;IAC3B;IAEA,KAAK,MAAM,CAACC,IAAA,EAAMC,aAAA,CAAc,IAAIC,MAAA,CAAOC,OAAO,CAACT,aAAA,GAAgB;MACjE,IAAI,CAACC,aAAa,CAACK,IAAA,CAAK,EAAE;QACxB;MACF;MACA,IAAII,YAAA,GAAe;MAEnB;;;MAGA,MAAMC,gBAAA,GAAmBd,eAAA,CACvBU,aAAA,CAAcK,UAAU,EACxBX,aAAa,CAACK,IAAA,CAAK,CAACM,UAAU;MAEhC,IAAID,gBAAA,CAAiBE,MAAM,EAAE;QAC3B,IAAIF,gBAAA,CAAiBT,OAAO,EAAE;UAC5BA,OAAA,GAAUS,gBAAA,CAAiBT,OAAO;QACpC;QACAK,aAAA,CAAcK,UAAU,GAAGD,gBAAA,CAAiBE,MAAM;MACpD;MAEA;;;MAGA,IAAIZ,aAAa,CAACK,IAAA,CAAK,EAAEQ,aAAA,IAAiBP,aAAA,CAAcO,aAAa,EAAE;QACrE,IAAI,CAAClB,MAAA,CAAOK,aAAa,CAACK,IAAA,CAAK,EAAEQ,aAAA,EAAeP,aAAA,CAAcO,aAAa,GAAG;UAC5EZ,OAAA,GAAU;UACVQ,YAAA,GAAe;UACfH,aAAA,CAAcO,aAAa,GAAGb,aAAa,CAACK,IAAA,CAAK,CAACQ,aAAa;QACjE;MACF;MAEA;;;MAGAV,mBAAA,CAAoBW,OAAO,CAAEC,IAAA;QAC3B,IAAI,CAACpB,MAAA,CAAOK,aAAa,CAACK,IAAA,CAAK,GAAGU,IAAA,CAAK,EAAET,aAAa,CAACS,IAAA,CAAK,GAAG;UAC7Dd,OAAA,GAAU;UACVQ,YAAA,GAAe;UACf,IAAI,EAAEM,IAAA,IAAQf,aAAa,CAACK,IAAA,CAAK,CAAD,EAAI;YAClC;YACA;YACA,IAAIU,IAAA,KAAS,oBAAoB;cAC/B,OAAOT,aAAa,CAACS,IAAA,CAAK;YAC5B;UACF,OAAO;YACLT,aAAa,CAACS,IAAA,CAAK,GAAGf,aAAa,CAACK,IAAA,CAAK,CAACU,IAAA,CAAK;UACjD;QACF;MACF;MAEA,IAAIT,aAAA,CAAcU,KAAK,KAAK,OAAO;QACjCV,aAAA,CAAcU,KAAK,GAAG;MACxB;MACA,IAAIV,aAAA,CAAcW,eAAe,KAAK,OAAO;QAC3CX,aAAA,CAAcW,eAAe,GAAG;MAClC;MAEA;MACAf,QAAQ,CAACG,IAAA,CAAK,GAAGI,YAAA,GAAe;QAAE,GAAGH;MAAc,IAAIA,aAAA;IACzD;IAEA;IACA;IACA;IAEA,KAAK,MAAM,CAACD,IAAA,EAAMa,KAAA,CAAM,IAAIX,MAAA,CAAOC,OAAO,CAACR,aAAA,GAAgB;MACzD,IAAI,CAACD,aAAa,CAACM,IAAA,CAAK,EAAE;QACxBJ,OAAA,GAAU;QACVC,QAAQ,CAACG,IAAA,CAAK,GAAGa,KAAA;MACnB;IACF;EACF;EAEA,OAAO;IAAEjB,OAAA;IAASC;EAAS;AAC7B","ignoreList":[]}
1
+ {"version":3,"file":"mergeServerFormState.js","names":["dequal","mergeErrorPaths","mergeServerFormState","acceptValues","existingState","incomingState","changed","newState","serverPropsToAccept","push","path","newFieldState","Object","entries","fieldChanged","errorPathsResult","errorPaths","result","filterOptions","forEach","propFromServer","ignoreServerProps","keys","length","valid","passesCondition","field"],"sources":["../../../src/forms/Form/mergeServerFormState.ts"],"sourcesContent":["'use client'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { type FormState } from 'payload'\n\nimport { mergeErrorPaths } from './mergeErrorPaths.js'\n\ntype Args = {\n acceptValues?: boolean\n existingState: FormState\n incomingState: FormState\n}\n\n/**\n * Merges certain properties from the server state into the client state. These do not include values,\n * as we do not want to update them on the client like that, which would cause flickering.\n *\n * We want to use this to update the error state, and other properties that are not user input, as the error state\n * is the thing we want to keep in sync with the server (where it's calculated) on the client.\n */\nexport const mergeServerFormState = ({\n acceptValues,\n existingState,\n incomingState,\n}: Args): { changed: boolean; newState: FormState } => {\n let changed = false\n\n const newState = {}\n\n if (existingState) {\n const serverPropsToAccept = [\n 'passesCondition',\n 'valid',\n 'errorMessage',\n 'errorPaths',\n 'rows',\n 'customComponents',\n 'requiresRender',\n ]\n\n if (acceptValues) {\n serverPropsToAccept.push('value')\n serverPropsToAccept.push('initialValue')\n }\n\n for (const [path, newFieldState] of Object.entries(existingState)) {\n if (!incomingState[path]) {\n continue\n }\n\n let fieldChanged = false\n\n /**\n * Handle error paths\n */\n const errorPathsResult = mergeErrorPaths(\n newFieldState.errorPaths,\n incomingState[path].errorPaths as unknown as string[],\n )\n\n if (errorPathsResult.result) {\n if (errorPathsResult.changed) {\n changed = errorPathsResult.changed\n }\n newFieldState.errorPaths = errorPathsResult.result\n }\n\n /**\n * Handle filterOptions\n */\n if (incomingState[path]?.filterOptions || newFieldState.filterOptions) {\n if (!dequal(incomingState[path]?.filterOptions, newFieldState.filterOptions)) {\n changed = true\n fieldChanged = true\n newFieldState.filterOptions = incomingState[path].filterOptions\n }\n }\n\n /**\n * Handle adding all the remaining props that should be updated in the local form state from the server form state\n */\n serverPropsToAccept.forEach((propFromServer) => {\n if (!dequal(incomingState[path]?.[propFromServer], newFieldState[propFromServer])) {\n changed = true\n fieldChanged = true\n\n // The `ignoreServerProps` obj is used to prevent the various properties from being overridden across form state requests.\n // This can happen when queueing a form state request with `requiresRender: true` while the another is already processing.\n // For example:\n // 1. One \"add row\" action will set `requiresRender: true` and dispatch a form state request\n // 2. Another \"add row\" action will set `requiresRender: true` and queue a form state request\n // 3. The first request will return with `requiresRender: false`\n // 4. The second request will be dispatched with `requiresRender: false` but should be `true`\n // To fix this, only merge the `requiresRender` property if the previous state has not set it to `true`.\n // See the `fieldReducer` function for where this gets set.\n if (newFieldState?.ignoreServerProps?.[propFromServer]) {\n // Remove the ignored prop for the next request\n delete newFieldState.ignoreServerProps[propFromServer]\n\n // if no keys left, remove the entire object\n if (Object.keys(newFieldState.ignoreServerProps).length === 0) {\n delete newFieldState.ignoreServerProps\n }\n\n return\n }\n\n if (!(propFromServer in incomingState[path])) {\n // Regarding excluding the customComponents prop from being deleted: the incoming state might not have been rendered, as rendering components for every form onchange is expensive.\n // Thus, we simply re-use the initial render state\n if (propFromServer !== 'customComponents') {\n delete newFieldState[propFromServer]\n }\n } else {\n newFieldState[propFromServer] = incomingState[path][propFromServer]\n }\n }\n })\n\n if (newFieldState.valid !== false) {\n newFieldState.valid = true\n }\n\n if (newFieldState.passesCondition !== false) {\n newFieldState.passesCondition = true\n }\n\n // Conditions don't work if we don't memcopy the new state, as the object references would otherwise be the same\n newState[path] = fieldChanged ? { ...newFieldState } : newFieldState\n }\n\n // Now loop over values that are part of incoming state but not part of existing state, and add them to the new state.\n // This can happen if a new array row was added. In our local state, we simply add out stubbed `array` and `array.[index].id` entries to the local form state.\n // However, all other array sub-fields are not added to the local state - those will be added by the server and may be incoming here.\n for (const [path, field] of Object.entries(incomingState)) {\n if (!existingState[path]) {\n changed = true\n newState[path] = field\n }\n }\n }\n\n return { changed, newState }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -183,6 +183,11 @@ export type Context = {
183
183
  * For example the state could be submitted but invalid as field errors have been returned.
184
184
  */
185
185
  isValid: boolean;
186
+ moveFieldRow: ({ moveFromIndex, moveToIndex, path, }: {
187
+ moveFromIndex: number;
188
+ moveToIndex: number;
189
+ path: string;
190
+ }) => void;
186
191
  removeFieldRow: ({ path, rowIndex }: {
187
192
  path: string;
188
193
  rowIndex: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/forms/Form/types.ts"],"sourcesContent":["import type {\n ClientField,\n Data,\n FormField,\n FormState,\n Row,\n User,\n ValidationFieldError,\n} from 'payload'\nimport type React from 'react'\nimport type { Dispatch } from 'react'\n\nexport type Preferences = {\n [key: string]: unknown\n}\n\nexport type FormProps = {\n beforeSubmit?: ((args: { formState: FormState }) => Promise<FormState>)[]\n children?: React.ReactNode\n className?: string\n disabled?: boolean\n disableSuccessStatus?: boolean\n /**\n * If you would like to solely leverage server-side validation on submit,\n * you can disable checks that the form makes before it submits\n */\n disableValidationOnSubmit?: boolean\n /**\n * If you don't want the form to be a <form> element, you can pass a string here to use as the wrapper element.\n */\n el?: string\n /**\n * By default, the form will get the field schema (not data) from the current document. If you pass this in, you can override that behavior.\n * This is very useful for sub-forms, where the form's field schema is not necessarily the field schema of the current document (e.g. for the Blocks\n * feature of the Lexical Rich Text field)\n */\n fields?: ClientField[]\n handleResponse?: (\n res: Response,\n successToast: (value: string) => void,\n errorToast: (value: string) => void,\n ) => void\n initialState?: FormState\n /**\n * Determines if this Form is the main, top-level Form of a document. If set to true, the\n * Form's children will be wrapped in a DocumentFormContext, which lets you access this document\n * Form's data and fields from any child component - even if that child component is wrapped in a child\n * Form (e.g. a lexical block).\n */\n isDocumentForm?: boolean\n isInitializing?: boolean\n log?: boolean\n onChange?: ((args: { formState: FormState; submitted?: boolean }) => Promise<FormState>)[]\n onSubmit?: (fields: FormState, data: Data) => void\n onSuccess?: (json: unknown) => Promise<FormState | void> | void\n redirect?: string\n submitted?: boolean\n uuid?: string\n validationOperation?: 'create' | 'update'\n waitForAutocomplete?: boolean\n} & (\n | {\n action: (formData: FormData) => Promise<void>\n }\n | {\n action?: string\n method?: 'DELETE' | 'GET' | 'PATCH' | 'POST'\n }\n)\n\nexport type SubmitOptions = {\n action?: string\n method?: string\n overrides?: ((formState) => FormData) | Record<string, unknown>\n skipValidation?: boolean\n}\n\nexport type DispatchFields = React.Dispatch<any>\nexport type Submit = (\n options?: SubmitOptions,\n e?: React.FormEvent<HTMLFormElement>,\n) => Promise<void>\nexport type ValidateForm = () => Promise<boolean>\nexport type CreateFormData = (\n overrides?: Record<string, unknown>,\n /**\n * If mergeOverrideData true, the data will be merged with the existing data in the form state.\n * @default true\n */\n options?: { mergeOverrideData?: boolean },\n) => FormData | Promise<FormData>\nexport type GetFields = () => FormState\nexport type GetField = (path: string) => FormField\nexport type GetData = () => Data\nexport type GetSiblingData = (path: string) => Data\nexport type GetDataByPath = <T = unknown>(path: string) => T\nexport type SetModified = (modified: boolean) => void\nexport type SetSubmitted = (submitted: boolean) => void\nexport type SetProcessing = (processing: boolean) => void\n\nexport type Reset = (data: unknown) => Promise<void>\n\nexport type REPLACE_STATE = {\n optimize?: boolean\n /**\n * If `sanitize` is true, default values will be set for form field properties that are not present in the incoming state.\n * For example, `valid` will be set to true if it is not present in the incoming state.\n */\n sanitize?: boolean\n state: FormState\n type: 'REPLACE_STATE'\n}\n\nexport type REMOVE = {\n path: string\n type: 'REMOVE'\n}\n\nexport type MODIFY_CONDITION = {\n path: string\n result: boolean\n type: 'MODIFY_CONDITION'\n user: User\n}\n\nexport type UPDATE = {\n path: string\n type: 'UPDATE'\n} & Partial<FormField>\n\nexport type UPDATE_MANY = {\n formState: FormState\n type: 'UPDATE_MANY'\n}\n\nexport type REMOVE_ROW = {\n path: string\n rowIndex: number\n type: 'REMOVE_ROW'\n}\n\nexport type ADD_ROW = {\n blockType?: string\n path: string\n rowIndex?: number\n subFieldState?: FormState\n type: 'ADD_ROW'\n}\n\nexport type REPLACE_ROW = {\n blockType?: string\n path: string\n rowIndex: number\n subFieldState?: FormState\n type: 'REPLACE_ROW'\n}\n\nexport type DUPLICATE_ROW = {\n path: string\n rowIndex: number\n type: 'DUPLICATE_ROW'\n}\n\nexport type MOVE_ROW = {\n moveFromIndex: number\n moveToIndex: number\n path: string\n type: 'MOVE_ROW'\n}\n\nexport type ADD_SERVER_ERRORS = {\n errors: ValidationFieldError[]\n type: 'ADD_SERVER_ERRORS'\n}\n\nexport type SET_ROW_COLLAPSED = {\n path: string\n type: 'SET_ROW_COLLAPSED'\n updatedRows: Row[]\n}\n\nexport type SET_ALL_ROWS_COLLAPSED = {\n path: string\n type: 'SET_ALL_ROWS_COLLAPSED'\n updatedRows: Row[]\n}\n\nexport type FieldAction =\n | ADD_ROW\n | ADD_SERVER_ERRORS\n | DUPLICATE_ROW\n | MODIFY_CONDITION\n | MOVE_ROW\n | REMOVE\n | REMOVE_ROW\n | REPLACE_ROW\n | REPLACE_STATE\n | SET_ALL_ROWS_COLLAPSED\n | SET_ROW_COLLAPSED\n | UPDATE\n | UPDATE_MANY\n\nexport type FormFieldsContext = [FormState, Dispatch<FieldAction>]\n\nexport type Context = {\n addFieldRow: ({\n blockType,\n path,\n rowIndex,\n schemaPath,\n subFieldState,\n }: {\n blockType?: string\n path: string\n rowIndex?: number\n schemaPath: string\n subFieldState?: FormState\n }) => void\n buildRowErrors: () => void\n createFormData: CreateFormData\n disabled: boolean\n dispatchFields: Dispatch<FieldAction>\n /**\n * Form context fields may be outdated and should not be relied on. Instead, prefer `useFormFields`.\n */\n fields: FormState\n formRef: React.RefObject<HTMLFormElement>\n getData: GetData\n getDataByPath: GetDataByPath\n getField: GetField\n getFields: GetFields\n getSiblingData: GetSiblingData\n initializing: boolean\n /**\n * Tracks wether the form state passes validation.\n * For example the state could be submitted but invalid as field errors have been returned.\n */\n isValid: boolean\n removeFieldRow: ({ path, rowIndex }: { path: string; rowIndex: number }) => void\n replaceFieldRow: ({\n blockType,\n path,\n rowIndex,\n schemaPath,\n subFieldState,\n }: {\n blockType?: string\n path: string\n rowIndex: number\n schemaPath: string\n subFieldState?: FormState\n }) => void\n replaceState: (state: FormState) => void\n reset: Reset\n /**\n * If the form has started processing in the background (e.g.\n * if autosave is running), this will be true.\n */\n setBackgroundProcessing: SetProcessing\n setDisabled: (disabled: boolean) => void\n setIsValid: (processing: boolean) => void\n setModified: SetModified\n setProcessing: SetProcessing\n setSubmitted: SetSubmitted\n submit: Submit\n uuid?: string\n validateForm: ValidateForm\n}\n"],"mappings":"AA4MA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/forms/Form/types.ts"],"sourcesContent":["import type {\n ClientField,\n Data,\n FormField,\n FormState,\n Row,\n User,\n ValidationFieldError,\n} from 'payload'\nimport type React from 'react'\nimport type { Dispatch } from 'react'\n\nexport type Preferences = {\n [key: string]: unknown\n}\n\nexport type FormProps = {\n beforeSubmit?: ((args: { formState: FormState }) => Promise<FormState>)[]\n children?: React.ReactNode\n className?: string\n disabled?: boolean\n disableSuccessStatus?: boolean\n /**\n * If you would like to solely leverage server-side validation on submit,\n * you can disable checks that the form makes before it submits\n */\n disableValidationOnSubmit?: boolean\n /**\n * If you don't want the form to be a <form> element, you can pass a string here to use as the wrapper element.\n */\n el?: string\n /**\n * By default, the form will get the field schema (not data) from the current document. If you pass this in, you can override that behavior.\n * This is very useful for sub-forms, where the form's field schema is not necessarily the field schema of the current document (e.g. for the Blocks\n * feature of the Lexical Rich Text field)\n */\n fields?: ClientField[]\n handleResponse?: (\n res: Response,\n successToast: (value: string) => void,\n errorToast: (value: string) => void,\n ) => void\n initialState?: FormState\n /**\n * Determines if this Form is the main, top-level Form of a document. If set to true, the\n * Form's children will be wrapped in a DocumentFormContext, which lets you access this document\n * Form's data and fields from any child component - even if that child component is wrapped in a child\n * Form (e.g. a lexical block).\n */\n isDocumentForm?: boolean\n isInitializing?: boolean\n log?: boolean\n onChange?: ((args: { formState: FormState; submitted?: boolean }) => Promise<FormState>)[]\n onSubmit?: (fields: FormState, data: Data) => void\n onSuccess?: (json: unknown) => Promise<FormState | void> | void\n redirect?: string\n submitted?: boolean\n uuid?: string\n validationOperation?: 'create' | 'update'\n waitForAutocomplete?: boolean\n} & (\n | {\n action: (formData: FormData) => Promise<void>\n }\n | {\n action?: string\n method?: 'DELETE' | 'GET' | 'PATCH' | 'POST'\n }\n)\n\nexport type SubmitOptions = {\n action?: string\n method?: string\n overrides?: ((formState) => FormData) | Record<string, unknown>\n skipValidation?: boolean\n}\n\nexport type DispatchFields = React.Dispatch<any>\nexport type Submit = (\n options?: SubmitOptions,\n e?: React.FormEvent<HTMLFormElement>,\n) => Promise<void>\n\nexport type ValidateForm = () => Promise<boolean>\n\nexport type CreateFormData = (\n overrides?: Record<string, unknown>,\n /**\n * If mergeOverrideData true, the data will be merged with the existing data in the form state.\n * @default true\n */\n options?: { mergeOverrideData?: boolean },\n) => FormData | Promise<FormData>\n\nexport type GetFields = () => FormState\nexport type GetField = (path: string) => FormField\nexport type GetData = () => Data\nexport type GetSiblingData = (path: string) => Data\nexport type GetDataByPath = <T = unknown>(path: string) => T\nexport type SetModified = (modified: boolean) => void\nexport type SetSubmitted = (submitted: boolean) => void\nexport type SetProcessing = (processing: boolean) => void\n\nexport type Reset = (data: unknown) => Promise<void>\n\nexport type REPLACE_STATE = {\n optimize?: boolean\n /**\n * If `sanitize` is true, default values will be set for form field properties that are not present in the incoming state.\n * For example, `valid` will be set to true if it is not present in the incoming state.\n */\n sanitize?: boolean\n state: FormState\n type: 'REPLACE_STATE'\n}\n\nexport type REMOVE = {\n path: string\n type: 'REMOVE'\n}\n\nexport type MODIFY_CONDITION = {\n path: string\n result: boolean\n type: 'MODIFY_CONDITION'\n user: User\n}\n\nexport type UPDATE = {\n path: string\n type: 'UPDATE'\n} & Partial<FormField>\n\nexport type UPDATE_MANY = {\n formState: FormState\n type: 'UPDATE_MANY'\n}\n\nexport type REMOVE_ROW = {\n path: string\n rowIndex: number\n type: 'REMOVE_ROW'\n}\n\nexport type ADD_ROW = {\n blockType?: string\n path: string\n rowIndex?: number\n subFieldState?: FormState\n type: 'ADD_ROW'\n}\n\nexport type REPLACE_ROW = {\n blockType?: string\n path: string\n rowIndex: number\n subFieldState?: FormState\n type: 'REPLACE_ROW'\n}\n\nexport type DUPLICATE_ROW = {\n path: string\n rowIndex: number\n type: 'DUPLICATE_ROW'\n}\n\nexport type MOVE_ROW = {\n moveFromIndex: number\n moveToIndex: number\n path: string\n type: 'MOVE_ROW'\n}\n\nexport type ADD_SERVER_ERRORS = {\n errors: ValidationFieldError[]\n type: 'ADD_SERVER_ERRORS'\n}\n\nexport type SET_ROW_COLLAPSED = {\n path: string\n type: 'SET_ROW_COLLAPSED'\n updatedRows: Row[]\n}\n\nexport type SET_ALL_ROWS_COLLAPSED = {\n path: string\n type: 'SET_ALL_ROWS_COLLAPSED'\n updatedRows: Row[]\n}\n\nexport type FieldAction =\n | ADD_ROW\n | ADD_SERVER_ERRORS\n | DUPLICATE_ROW\n | MODIFY_CONDITION\n | MOVE_ROW\n | REMOVE\n | REMOVE_ROW\n | REPLACE_ROW\n | REPLACE_STATE\n | SET_ALL_ROWS_COLLAPSED\n | SET_ROW_COLLAPSED\n | UPDATE\n | UPDATE_MANY\n\nexport type FormFieldsContext = [FormState, Dispatch<FieldAction>]\n\nexport type Context = {\n addFieldRow: ({\n blockType,\n path,\n rowIndex,\n schemaPath,\n subFieldState,\n }: {\n blockType?: string\n path: string\n rowIndex?: number\n schemaPath: string\n subFieldState?: FormState\n }) => void\n buildRowErrors: () => void\n createFormData: CreateFormData\n disabled: boolean\n dispatchFields: Dispatch<FieldAction>\n /**\n * Form context fields may be outdated and should not be relied on. Instead, prefer `useFormFields`.\n */\n fields: FormState\n formRef: React.RefObject<HTMLFormElement>\n getData: GetData\n getDataByPath: GetDataByPath\n getField: GetField\n getFields: GetFields\n getSiblingData: GetSiblingData\n initializing: boolean\n /**\n * Tracks wether the form state passes validation.\n * For example the state could be submitted but invalid as field errors have been returned.\n */\n isValid: boolean\n moveFieldRow: ({\n moveFromIndex,\n moveToIndex,\n path,\n }: {\n moveFromIndex: number\n moveToIndex: number\n path: string\n }) => void\n removeFieldRow: ({ path, rowIndex }: { path: string; rowIndex: number }) => void\n replaceFieldRow: ({\n blockType,\n path,\n rowIndex,\n schemaPath,\n subFieldState,\n }: {\n blockType?: string\n path: string\n rowIndex: number\n schemaPath: string\n subFieldState?: FormState\n }) => void\n replaceState: (state: FormState) => void\n reset: Reset\n /**\n * If the form has started processing in the background (e.g.\n * if autosave is running), this will be true.\n */\n setBackgroundProcessing: SetProcessing\n setDisabled: (disabled: boolean) => void\n setIsValid: (processing: boolean) => void\n setModified: SetModified\n setProcessing: SetProcessing\n setSubmitted: SetSubmitted\n submit: Submit\n uuid?: string\n validateForm: ValidateForm\n}\n"],"mappings":"AA+MA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"addFieldStatePromise.d.ts","sourceRoot":"","sources":["../../../src/forms/fieldSchemasToFormState/addFieldStatePromise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,IAAI,EACJ,mBAAmB,EACnB,KAAK,EACL,cAAc,EAGd,SAAS,EACT,0BAA0B,EAC1B,cAAc,EAEd,0BAA0B,EAC1B,UAAU,EACV,UAAU,EAEX,MAAM,SAAS,CAAA;AAehB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAQnD,MAAM,MAAM,wBAAwB,GAAG;IACrC,oBAAoB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACjD;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;OAEG;IACH,SAAS,EAAE,IAAI,GAAG,SAAS,CAAA;IAC3B,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,KAAK,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,cAAc,CAAA;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,OAAO,CAAA;IACpD;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,IAAI,CAAA;IACd,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,0BAA0B,CAAA;IAC7C,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,OAAO,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,mBAAmB,CAAA;IAChC,iBAAiB,EAAE,SAAS,CAAA;IAC5B,eAAe,EAAE,OAAO,CAAA;IACxB,aAAa,EAAE,iBAAiB,CAAA;IAChC;;;OAGG;IACH,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,KAAK,EAAE,0BAA0B,CAAA;CAClC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,SAAgB,wBAAwB,KAAG,OAAO,CAAC,IAAI,CA2wBvF,CAAA"}
1
+ {"version":3,"file":"addFieldStatePromise.d.ts","sourceRoot":"","sources":["../../../src/forms/fieldSchemasToFormState/addFieldStatePromise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,IAAI,EACJ,mBAAmB,EACnB,KAAK,EACL,cAAc,EAGd,SAAS,EACT,0BAA0B,EAC1B,cAAc,EAEd,0BAA0B,EAC1B,UAAU,EACV,UAAU,EAEX,MAAM,SAAS,CAAA;AAehB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAQnD,MAAM,MAAM,wBAAwB,GAAG;IACrC,oBAAoB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACjD;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;OAEG;IACH,SAAS,EAAE,IAAI,GAAG,SAAS,CAAA;IAC3B,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,KAAK,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,cAAc,CAAA;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,OAAO,CAAA;IACpD;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,IAAI,CAAA;IACd,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,0BAA0B,CAAA;IAC7C,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,OAAO,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,mBAAmB,CAAA;IAChC,iBAAiB,EAAE,SAAS,CAAA;IAC5B,eAAe,EAAE,OAAO,CAAA;IACxB,aAAa,EAAE,iBAAiB,CAAA;IAChC;;;OAGG;IACH,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,KAAK,EAAE,0BAA0B,CAAA;CAClC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,SAAgB,wBAAwB,KAAG,OAAO,CAAC,IAAI,CAywBvF,CAAA"}
@@ -213,8 +213,6 @@ export const addFieldStatePromise = async args => {
213
213
  if (rows) {
214
214
  fieldState.rows = rows;
215
215
  }
216
- // Unset requiresRender
217
- // so it will be removed from form state
218
216
  fieldState.requiresRender = false;
219
217
  // Add values to field state
220
218
  if (data[field.name] !== null) {
@@ -1 +1 @@
1
- {"version":3,"file":"addFieldStatePromise.js","names":["ObjectIdImport","getBlockSelect","deepCopyObjectSimple","fieldAffectsData","fieldHasSubFields","fieldIsHiddenOrDisabled","fieldIsID","fieldIsLocalized","getFieldPaths","tabHasName","resolveFilterOptions","iterateFields","ObjectId","default","addFieldStatePromise","args","id","addErrorPathToParent","addErrorPathToParentArg","anyParentLocalized","blockData","clientFieldSchemaMap","collectionSlug","data","field","fieldSchemaMap","filter","forceFullValue","fullData","includeSchema","indexPath","omitParents","operation","parentPath","parentPermissions","parentSchemaPath","passesCondition","path","preferences","previousFormState","renderAllFields","renderFieldFn","req","schemaPath","select","selectMode","skipConditionChecks","skipValidation","state","console","warn","requiresRender","fieldPermissions","fieldState","fieldSchema","name","hasPermission","read","access","siblingData","validate","validationResult","jsonError","type","JSON","parse","e","event","previousValue","initialValue","err","payload","logger","error","msg","errorPath","errorPaths","includes","push","valid","errorMessage","arrayValue","Array","isArray","arraySelect","promises","rows","reduce","acc","row","i","toHexString","idKey","value","fields","find","localized","parentIndexPath","parentPassesCondition","permissions","undefined","previousRows","collapsedRowIDsFromPrefs","collapsed","previousRow","prevRow","admin","initCollapsed","length","Promise","all","disableFormData","blocksValue","rowMetadata","blockTypeToMatch","blockType","block","blocks","blockReferences","slug","Error","blockSelect","blockSelectMode","blockField","fieldKey","blockNameKey","blockName","collapsedRowIDs","groupSelect","filterOptions","relationTo","relation","query","user","hasMany","relationshipValue","map","relationship","tabs","tab","tabIndex","isNamedTab","tabSelect","tabIndexPath","tabPath","tabSchemaPath","index","childPermissions","tabPermissions","pathSegments","split","tabPassesCondition","condition","fieldConfig","get","endsWith","formState","previousFieldState"],"sources":["../../../src/forms/fieldSchemasToFormState/addFieldStatePromise.ts"],"sourcesContent":["import type {\n ClientFieldSchemaMap,\n Data,\n DocumentPreferences,\n Field,\n FieldSchemaMap,\n FieldState,\n FlattenedBlock,\n FormState,\n FormStateWithoutComponents,\n PayloadRequest,\n SanitizedFieldPermissions,\n SanitizedFieldsPermissions,\n SelectMode,\n SelectType,\n Validate,\n} from 'payload'\n\nimport ObjectIdImport from 'bson-objectid'\nimport { getBlockSelect } from 'payload'\nimport {\n deepCopyObjectSimple,\n fieldAffectsData,\n fieldHasSubFields,\n fieldIsHiddenOrDisabled,\n fieldIsID,\n fieldIsLocalized,\n getFieldPaths,\n tabHasName,\n} from 'payload/shared'\n\nimport type { RenderFieldMethod } from './types.js'\n\nimport { resolveFilterOptions } from '../../utilities/resolveFilterOptions.js'\nimport { iterateFields } from './iterateFields.js'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\nexport type AddFieldStatePromiseArgs = {\n addErrorPathToParent: (fieldPath: string) => void\n /**\n * if all parents are localized, then the field is localized\n */\n anyParentLocalized?: boolean\n /**\n * Data of the nearest parent block, or undefined\n */\n blockData: Data | undefined\n clientFieldSchemaMap?: ClientFieldSchemaMap\n collectionSlug?: string\n data: Data\n field: Field\n fieldIndex: number\n fieldSchemaMap: FieldSchemaMap\n /**\n * You can use this to filter down to only `localized` fields that require translation (type: text, textarea, etc.). Another plugin might want to look for only `point` type fields to do some GIS function. With the filter function you can go in like a surgeon.\n */\n filter?: (args: AddFieldStatePromiseArgs) => boolean\n /**\n * Force the value of fields like arrays or blocks to be the full value instead of the length @default false\n */\n forceFullValue?: boolean\n fullData: Data\n id: number | string\n /**\n * Whether the field schema should be included in the state\n */\n includeSchema?: boolean\n indexPath: string\n /**\n * Whether to omit parent fields in the state. @default false\n */\n omitParents?: boolean\n operation: 'create' | 'update'\n parentIndexPath: string\n parentPath: string\n parentPermissions: SanitizedFieldsPermissions\n parentSchemaPath: string\n passesCondition: boolean\n path: string\n preferences: DocumentPreferences\n previousFormState: FormState\n renderAllFields: boolean\n renderFieldFn: RenderFieldMethod\n /**\n * Req is used for validation and defaultValue calculation. If you don't need validation,\n * just create your own req and pass in the locale and the user\n */\n req: PayloadRequest\n schemaPath: string\n select?: SelectType\n selectMode?: SelectMode\n /**\n * Whether to skip checking the field's condition. @default false\n */\n skipConditionChecks?: boolean\n /**\n * Whether to skip validating the field. @default false\n */\n skipValidation?: boolean\n state: FormStateWithoutComponents\n}\n\n/**\n * Flattens the fields schema and fields data.\n * The output is the field path (e.g. array.0.name) mapped to a FormField object.\n */\nexport const addFieldStatePromise = async (args: AddFieldStatePromiseArgs): Promise<void> => {\n const {\n id,\n addErrorPathToParent: addErrorPathToParentArg,\n anyParentLocalized = false,\n blockData,\n clientFieldSchemaMap,\n collectionSlug,\n data,\n field,\n fieldSchemaMap,\n filter,\n forceFullValue = false,\n fullData,\n includeSchema = false,\n indexPath,\n omitParents = false,\n operation,\n parentPath,\n parentPermissions,\n parentSchemaPath,\n passesCondition,\n path,\n preferences,\n previousFormState,\n renderAllFields,\n renderFieldFn,\n req,\n schemaPath,\n select,\n selectMode,\n skipConditionChecks = false,\n skipValidation = false,\n state,\n } = args\n\n if (!args.clientFieldSchemaMap && args.renderFieldFn) {\n console.warn(\n 'clientFieldSchemaMap is not passed to addFieldStatePromise - this will reduce performance',\n )\n }\n\n const requiresRender = renderAllFields || previousFormState?.[path]?.requiresRender\n\n let fieldPermissions: SanitizedFieldPermissions = true\n\n const fieldState: FieldState = {}\n\n if (passesCondition === false) {\n fieldState.passesCondition = false\n }\n\n if (includeSchema) {\n fieldState.fieldSchema = field\n }\n\n if (fieldAffectsData(field) && !fieldIsHiddenOrDisabled(field)) {\n fieldPermissions =\n parentPermissions === true\n ? parentPermissions\n : deepCopyObjectSimple(parentPermissions?.[field.name])\n\n let hasPermission: boolean =\n fieldPermissions === true || deepCopyObjectSimple(fieldPermissions?.read)\n\n if (typeof field?.access?.read === 'function') {\n hasPermission = await field.access.read({\n id,\n blockData,\n data: fullData,\n req,\n siblingData: data,\n })\n } else {\n hasPermission = true\n }\n\n if (!hasPermission) {\n return\n }\n\n const validate: Validate = field.validate\n\n let validationResult: string | true = true\n\n if (typeof validate === 'function' && !skipValidation && passesCondition) {\n let jsonError\n\n if (field.type === 'json' && typeof data[field.name] === 'string') {\n try {\n JSON.parse(data[field.name])\n } catch (e) {\n jsonError = e\n }\n }\n\n try {\n validationResult = await validate(data?.[field.name], {\n ...field,\n id,\n blockData,\n collectionSlug,\n data: fullData,\n event: 'onChange',\n // @AlessioGr added `jsonError` in https://github.com/payloadcms/payload/commit/c7ea62a39473408c3ea912c4fbf73e11be4b538d\n // @ts-expect-error-next-line\n jsonError,\n operation,\n preferences,\n previousValue: previousFormState?.[path]?.initialValue,\n req,\n siblingData: data,\n })\n } catch (err) {\n validationResult = `Error validating field at path: ${path}`\n\n req.payload.logger.error({\n err,\n msg: validationResult,\n })\n }\n }\n\n const addErrorPathToParent = (errorPath: string) => {\n if (typeof addErrorPathToParentArg === 'function') {\n addErrorPathToParentArg(errorPath)\n }\n\n if (!fieldState.errorPaths) {\n fieldState.errorPaths = []\n }\n\n if (!fieldState.errorPaths.includes(errorPath)) {\n fieldState.errorPaths.push(errorPath)\n fieldState.valid = false\n }\n }\n\n if (typeof validationResult === 'string') {\n fieldState.errorMessage = validationResult\n fieldState.valid = false\n addErrorPathToParent(path)\n }\n\n switch (field.type) {\n case 'array': {\n const arrayValue = Array.isArray(data[field.name]) ? data[field.name] : []\n\n const arraySelect = select?.[field.name]\n\n const { promises, rows } = arrayValue.reduce(\n (acc, row, i: number) => {\n const parentPath = path + '.' + i\n row.id = row?.id || new ObjectId().toHexString()\n\n if (!omitParents && (!filter || filter(args))) {\n const idKey = parentPath + '.id'\n\n state[idKey] = {\n initialValue: row.id,\n value: row.id,\n }\n\n if (includeSchema) {\n state[idKey].fieldSchema = field.fields.find((field) => fieldIsID(field))\n }\n }\n\n acc.promises.push(\n iterateFields({\n id,\n addErrorPathToParent,\n anyParentLocalized: field.localized || anyParentLocalized,\n blockData,\n clientFieldSchemaMap,\n collectionSlug,\n data: row,\n fields: field.fields,\n fieldSchemaMap,\n filter,\n forceFullValue,\n fullData,\n includeSchema,\n omitParents,\n operation,\n parentIndexPath: '',\n parentPassesCondition: passesCondition,\n parentPath,\n parentSchemaPath: schemaPath,\n permissions:\n fieldPermissions === true ? fieldPermissions : fieldPermissions?.fields || {},\n preferences,\n previousFormState,\n renderAllFields: requiresRender,\n renderFieldFn,\n req,\n select: typeof arraySelect === 'object' ? arraySelect : undefined,\n selectMode,\n skipConditionChecks,\n skipValidation,\n state,\n }),\n )\n\n if (!acc.rows) {\n acc.rows = []\n }\n\n acc.rows.push({\n id: row.id,\n })\n\n const previousRows = previousFormState?.[path]?.rows || []\n const collapsedRowIDsFromPrefs = preferences?.fields?.[path]?.collapsed\n\n const collapsed = (() => {\n // First, check if `previousFormState` has a matching row\n const previousRow = previousRows.find((prevRow) => prevRow.id === row.id)\n if (previousRow) {\n return previousRow.collapsed ?? false\n }\n\n // If previousFormState is undefined, check preferences\n if (collapsedRowIDsFromPrefs !== undefined) {\n return collapsedRowIDsFromPrefs.includes(row.id) // Check if collapsed in preferences\n }\n\n // If neither exists, fallback to `field.admin.initCollapsed`\n return field.admin.initCollapsed\n })()\n\n if (collapsed) {\n acc.rows[acc.rows.length - 1].collapsed = collapsed\n }\n\n return acc\n },\n {\n promises: [],\n rows: undefined,\n },\n )\n\n // Wait for all promises and update fields with the results\n await Promise.all(promises)\n\n if (rows) {\n fieldState.rows = rows\n }\n\n // Unset requiresRender\n // so it will be removed from form state\n fieldState.requiresRender = false\n\n // Add values to field state\n if (data[field.name] !== null) {\n fieldState.value = forceFullValue ? arrayValue : arrayValue.length\n fieldState.initialValue = forceFullValue ? arrayValue : arrayValue.length\n\n if (arrayValue.length > 0) {\n fieldState.disableFormData = true\n }\n }\n\n // Add field to state\n if (!omitParents && (!filter || filter(args))) {\n state[path] = fieldState\n }\n\n break\n }\n\n case 'blocks': {\n const blocksValue = Array.isArray(data[field.name]) ? data[field.name] : []\n\n const { promises, rowMetadata } = blocksValue.reduce(\n (acc, row, i: number) => {\n const blockTypeToMatch: string = row.blockType\n\n const block =\n req.payload.blocks[blockTypeToMatch] ??\n ((field.blockReferences ?? field.blocks).find(\n (blockType) => typeof blockType !== 'string' && blockType.slug === blockTypeToMatch,\n ) as FlattenedBlock | undefined)\n\n if (!block) {\n throw new Error(\n `Block with type \"${row.blockType}\" was found in block data, but no block with that type is defined in the config for field with schema path ${schemaPath}.`,\n )\n }\n\n const { blockSelect, blockSelectMode } = getBlockSelect({\n block,\n select: select?.[field.name],\n selectMode,\n })\n\n const parentPath = path + '.' + i\n\n if (block) {\n row.id = row?.id || new ObjectId().toHexString()\n\n if (!omitParents && (!filter || filter(args))) {\n // Handle block `id` field\n const idKey = parentPath + '.id'\n\n state[idKey] = {\n initialValue: row.id,\n value: row.id,\n }\n\n if (includeSchema) {\n state[idKey].fieldSchema = includeSchema\n ? block.fields.find((blockField) => fieldIsID(blockField))\n : undefined\n }\n\n // Handle `blockType` field\n const fieldKey = parentPath + '.blockType'\n\n state[fieldKey] = {\n initialValue: row.blockType,\n value: row.blockType,\n }\n\n if (includeSchema) {\n state[fieldKey].fieldSchema = block.fields.find(\n (blockField) => 'name' in blockField && blockField.name === 'blockType',\n )\n }\n\n // Handle `blockName` field\n const blockNameKey = parentPath + '.blockName'\n\n state[blockNameKey] = {}\n\n if (row.blockName) {\n state[blockNameKey].initialValue = row.blockName\n state[blockNameKey].value = row.blockName\n }\n\n if (includeSchema) {\n state[blockNameKey].fieldSchema = block.fields.find(\n (blockField) => 'name' in blockField && blockField.name === 'blockName',\n )\n }\n }\n\n acc.promises.push(\n iterateFields({\n id,\n addErrorPathToParent,\n anyParentLocalized: field.localized || anyParentLocalized,\n blockData: row,\n clientFieldSchemaMap,\n collectionSlug,\n data: row,\n fields: block.fields,\n fieldSchemaMap,\n filter,\n forceFullValue,\n fullData,\n includeSchema,\n omitParents,\n operation,\n parentIndexPath: '',\n parentPassesCondition: passesCondition,\n parentPath,\n parentSchemaPath: schemaPath + '.' + block.slug,\n permissions:\n fieldPermissions === true\n ? fieldPermissions\n : parentPermissions?.[field.name]?.blocks?.[block.slug] === true\n ? true\n : parentPermissions?.[field.name]?.blocks?.[block.slug]?.fields || {},\n preferences,\n previousFormState,\n renderAllFields: requiresRender,\n renderFieldFn,\n req,\n select: typeof blockSelect === 'object' ? blockSelect : undefined,\n selectMode: blockSelectMode,\n skipConditionChecks,\n skipValidation,\n state,\n }),\n )\n\n acc.rowMetadata.push({\n id: row.id,\n blockType: row.blockType,\n })\n\n const collapsedRowIDs = preferences?.fields?.[path]?.collapsed\n\n const collapsed =\n collapsedRowIDs === undefined\n ? field.admin.initCollapsed\n : collapsedRowIDs.includes(row.id)\n\n if (collapsed) {\n acc.rowMetadata[acc.rowMetadata.length - 1].collapsed = collapsed\n }\n }\n\n return acc\n },\n {\n promises: [],\n rowMetadata: [],\n },\n )\n\n await Promise.all(promises)\n\n // Add values to field state\n if (data[field.name] === null) {\n fieldState.value = null\n fieldState.initialValue = null\n } else {\n fieldState.value = forceFullValue ? blocksValue : blocksValue.length\n fieldState.initialValue = forceFullValue ? blocksValue : blocksValue.length\n\n if (blocksValue.length > 0) {\n fieldState.disableFormData = true\n }\n }\n\n fieldState.rows = rowMetadata\n\n // Unset requiresRender\n // so it will be removed from form state\n fieldState.requiresRender = false\n\n // Add field to state\n if (!omitParents && (!filter || filter(args))) {\n state[path] = fieldState\n }\n\n break\n }\n\n case 'group': {\n if (!filter || filter(args)) {\n fieldState.disableFormData = true\n state[path] = fieldState\n }\n\n const groupSelect = select?.[field.name]\n\n await iterateFields({\n id,\n addErrorPathToParent,\n anyParentLocalized: field.localized || anyParentLocalized,\n blockData,\n clientFieldSchemaMap,\n collectionSlug,\n data: data?.[field.name] || {},\n fields: field.fields,\n fieldSchemaMap,\n filter,\n forceFullValue,\n fullData,\n includeSchema,\n omitParents,\n operation,\n parentIndexPath: '',\n parentPassesCondition: passesCondition,\n parentPath: path,\n parentSchemaPath: schemaPath,\n permissions:\n typeof fieldPermissions === 'boolean' ? fieldPermissions : fieldPermissions?.fields,\n preferences,\n previousFormState,\n renderAllFields,\n renderFieldFn,\n req,\n select: typeof groupSelect === 'object' ? groupSelect : undefined,\n selectMode,\n skipConditionChecks,\n skipValidation,\n state,\n })\n\n break\n }\n case 'relationship':\n case 'upload': {\n if (field.filterOptions) {\n if (typeof field.filterOptions === 'object') {\n if (typeof field.relationTo === 'string') {\n fieldState.filterOptions = {\n [field.relationTo]: field.filterOptions,\n }\n } else {\n fieldState.filterOptions = field.relationTo.reduce((acc, relation) => {\n acc[relation] = field.filterOptions\n return acc\n }, {})\n }\n }\n\n if (typeof field.filterOptions === 'function') {\n const query = await resolveFilterOptions(field.filterOptions, {\n id,\n blockData,\n data: fullData,\n relationTo: field.relationTo,\n req,\n siblingData: data,\n user: req.user,\n })\n\n fieldState.filterOptions = query\n }\n }\n\n if (field.hasMany) {\n const relationshipValue = Array.isArray(data[field.name])\n ? data[field.name].map((relationship) => {\n if (Array.isArray(field.relationTo)) {\n return {\n relationTo: relationship.relationTo,\n value:\n relationship.value && typeof relationship.value === 'object'\n ? relationship.value?.id\n : relationship.value,\n }\n }\n if (typeof relationship === 'object' && relationship !== null) {\n return relationship.id\n }\n return relationship\n })\n : undefined\n\n fieldState.value = relationshipValue\n fieldState.initialValue = relationshipValue\n } else if (Array.isArray(field.relationTo)) {\n if (\n data[field.name] &&\n typeof data[field.name] === 'object' &&\n 'relationTo' in data[field.name] &&\n 'value' in data[field.name]\n ) {\n const value =\n typeof data[field.name]?.value === 'object' &&\n data[field.name]?.value &&\n 'id' in data[field.name].value\n ? data[field.name].value.id\n : data[field.name].value\n const relationshipValue = {\n relationTo: data[field.name]?.relationTo,\n value,\n }\n fieldState.value = relationshipValue\n fieldState.initialValue = relationshipValue\n }\n } else {\n const relationshipValue =\n data[field.name] && typeof data[field.name] === 'object' && 'id' in data[field.name]\n ? data[field.name].id\n : data[field.name]\n fieldState.value = relationshipValue\n fieldState.initialValue = relationshipValue\n }\n\n if (!filter || filter(args)) {\n state[path] = fieldState\n }\n\n break\n }\n\n default: {\n if (data[field.name] !== undefined) {\n fieldState.value = data[field.name]\n fieldState.initialValue = data[field.name]\n }\n\n // Add field to state\n if (!filter || filter(args)) {\n state[path] = fieldState\n }\n\n break\n }\n }\n } else if (fieldHasSubFields(field) && !fieldAffectsData(field)) {\n // Handle field types that do not use names (row, etc)\n\n if (!filter || filter(args)) {\n state[path] = {\n disableFormData: true,\n }\n\n if (passesCondition === false) {\n state[path].passesCondition = false\n }\n }\n\n await iterateFields({\n id,\n select,\n selectMode,\n // passthrough parent functionality\n addErrorPathToParent: addErrorPathToParentArg,\n anyParentLocalized: fieldIsLocalized(field) || anyParentLocalized,\n blockData,\n clientFieldSchemaMap,\n collectionSlug,\n data,\n fields: field.fields,\n fieldSchemaMap,\n filter,\n forceFullValue,\n fullData,\n includeSchema,\n omitParents,\n operation,\n parentIndexPath: indexPath,\n parentPassesCondition: passesCondition,\n parentPath,\n parentSchemaPath,\n permissions: parentPermissions, // TODO: Verify this is correct\n preferences,\n previousFormState,\n renderAllFields,\n renderFieldFn,\n req,\n skipConditionChecks,\n skipValidation,\n state,\n })\n } else if (field.type === 'tabs') {\n const promises = field.tabs.map((tab, tabIndex) => {\n const isNamedTab = tabHasName(tab)\n let tabSelect: SelectType | undefined\n\n const {\n indexPath: tabIndexPath,\n path: tabPath,\n schemaPath: tabSchemaPath,\n } = getFieldPaths({\n field: {\n ...tab,\n type: 'tab',\n },\n index: tabIndex,\n parentIndexPath: indexPath,\n parentPath,\n parentSchemaPath,\n })\n\n let childPermissions: SanitizedFieldsPermissions = undefined\n\n if (isNamedTab) {\n if (parentPermissions === true) {\n childPermissions = true\n } else {\n const tabPermissions = parentPermissions?.[tab.name]\n if (tabPermissions === true) {\n childPermissions = true\n } else {\n childPermissions = tabPermissions?.fields\n }\n }\n\n if (typeof select?.[tab.name] === 'object') {\n tabSelect = select?.[tab.name] as SelectType\n }\n } else {\n childPermissions = parentPermissions\n tabSelect = select\n }\n\n const pathSegments = path ? path.split('.') : []\n\n // If passesCondition is false then this should always result to false\n // If the tab has no admin.condition provided then fallback to passesCondition and let that decide the result\n let tabPassesCondition = passesCondition\n\n if (passesCondition && typeof tab.admin?.condition === 'function') {\n tabPassesCondition = tab.admin.condition(fullData, data, {\n blockData,\n path: pathSegments,\n user: req.user,\n })\n }\n\n if (tab?.id) {\n state[tab.id] = {\n passesCondition: tabPassesCondition,\n }\n }\n\n return iterateFields({\n id,\n addErrorPathToParent: addErrorPathToParentArg,\n anyParentLocalized: tab.localized || anyParentLocalized,\n blockData,\n clientFieldSchemaMap,\n collectionSlug,\n data: isNamedTab ? data?.[tab.name] || {} : data,\n fields: tab.fields,\n fieldSchemaMap,\n filter,\n forceFullValue,\n fullData,\n includeSchema,\n omitParents,\n operation,\n parentIndexPath: isNamedTab ? '' : tabIndexPath,\n parentPassesCondition: tabPassesCondition,\n parentPath: isNamedTab ? tabPath : parentPath,\n parentSchemaPath: isNamedTab ? tabSchemaPath : parentSchemaPath,\n permissions: childPermissions,\n preferences,\n previousFormState,\n renderAllFields,\n renderFieldFn,\n req,\n select: tabSelect,\n selectMode,\n skipConditionChecks,\n skipValidation,\n state,\n })\n })\n\n await Promise.all(promises)\n } else if (field.type === 'ui') {\n if (!filter || filter(args)) {\n state[path] = fieldState\n state[path].disableFormData = true\n }\n }\n\n if (requiresRender && renderFieldFn && !fieldIsHiddenOrDisabled(field)) {\n const fieldState = state[path]\n\n const fieldConfig = fieldSchemaMap.get(schemaPath)\n\n if (!fieldConfig) {\n if (schemaPath.endsWith('.blockType')) {\n return\n } else {\n throw new Error(`Field config not found for ${schemaPath}`)\n }\n }\n\n if (!fieldState) {\n // Some fields (ie `Tab`) do not live in form state\n // therefore we cannot attach customComponents to them\n return\n }\n\n renderFieldFn({\n id,\n clientFieldSchemaMap,\n collectionSlug,\n data: fullData,\n fieldConfig: fieldConfig as Field,\n fieldSchemaMap,\n fieldState,\n formState: state,\n indexPath,\n operation,\n parentPath,\n parentSchemaPath,\n path,\n permissions: fieldPermissions,\n preferences,\n previousFieldState: previousFormState?.[path],\n req,\n schemaPath,\n siblingData: data,\n })\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"addFieldStatePromise.js","names":["ObjectIdImport","getBlockSelect","deepCopyObjectSimple","fieldAffectsData","fieldHasSubFields","fieldIsHiddenOrDisabled","fieldIsID","fieldIsLocalized","getFieldPaths","tabHasName","resolveFilterOptions","iterateFields","ObjectId","default","addFieldStatePromise","args","id","addErrorPathToParent","addErrorPathToParentArg","anyParentLocalized","blockData","clientFieldSchemaMap","collectionSlug","data","field","fieldSchemaMap","filter","forceFullValue","fullData","includeSchema","indexPath","omitParents","operation","parentPath","parentPermissions","parentSchemaPath","passesCondition","path","preferences","previousFormState","renderAllFields","renderFieldFn","req","schemaPath","select","selectMode","skipConditionChecks","skipValidation","state","console","warn","requiresRender","fieldPermissions","fieldState","fieldSchema","name","hasPermission","read","access","siblingData","validate","validationResult","jsonError","type","JSON","parse","e","event","previousValue","initialValue","err","payload","logger","error","msg","errorPath","errorPaths","includes","push","valid","errorMessage","arrayValue","Array","isArray","arraySelect","promises","rows","reduce","acc","row","i","toHexString","idKey","value","fields","find","localized","parentIndexPath","parentPassesCondition","permissions","undefined","previousRows","collapsedRowIDsFromPrefs","collapsed","previousRow","prevRow","admin","initCollapsed","length","Promise","all","disableFormData","blocksValue","rowMetadata","blockTypeToMatch","blockType","block","blocks","blockReferences","slug","Error","blockSelect","blockSelectMode","blockField","fieldKey","blockNameKey","blockName","collapsedRowIDs","groupSelect","filterOptions","relationTo","relation","query","user","hasMany","relationshipValue","map","relationship","tabs","tab","tabIndex","isNamedTab","tabSelect","tabIndexPath","tabPath","tabSchemaPath","index","childPermissions","tabPermissions","pathSegments","split","tabPassesCondition","condition","fieldConfig","get","endsWith","formState","previousFieldState"],"sources":["../../../src/forms/fieldSchemasToFormState/addFieldStatePromise.ts"],"sourcesContent":["import type {\n ClientFieldSchemaMap,\n Data,\n DocumentPreferences,\n Field,\n FieldSchemaMap,\n FieldState,\n FlattenedBlock,\n FormState,\n FormStateWithoutComponents,\n PayloadRequest,\n SanitizedFieldPermissions,\n SanitizedFieldsPermissions,\n SelectMode,\n SelectType,\n Validate,\n} from 'payload'\n\nimport ObjectIdImport from 'bson-objectid'\nimport { getBlockSelect } from 'payload'\nimport {\n deepCopyObjectSimple,\n fieldAffectsData,\n fieldHasSubFields,\n fieldIsHiddenOrDisabled,\n fieldIsID,\n fieldIsLocalized,\n getFieldPaths,\n tabHasName,\n} from 'payload/shared'\n\nimport type { RenderFieldMethod } from './types.js'\n\nimport { resolveFilterOptions } from '../../utilities/resolveFilterOptions.js'\nimport { iterateFields } from './iterateFields.js'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\nexport type AddFieldStatePromiseArgs = {\n addErrorPathToParent: (fieldPath: string) => void\n /**\n * if all parents are localized, then the field is localized\n */\n anyParentLocalized?: boolean\n /**\n * Data of the nearest parent block, or undefined\n */\n blockData: Data | undefined\n clientFieldSchemaMap?: ClientFieldSchemaMap\n collectionSlug?: string\n data: Data\n field: Field\n fieldIndex: number\n fieldSchemaMap: FieldSchemaMap\n /**\n * You can use this to filter down to only `localized` fields that require translation (type: text, textarea, etc.). Another plugin might want to look for only `point` type fields to do some GIS function. With the filter function you can go in like a surgeon.\n */\n filter?: (args: AddFieldStatePromiseArgs) => boolean\n /**\n * Force the value of fields like arrays or blocks to be the full value instead of the length @default false\n */\n forceFullValue?: boolean\n fullData: Data\n id: number | string\n /**\n * Whether the field schema should be included in the state\n */\n includeSchema?: boolean\n indexPath: string\n /**\n * Whether to omit parent fields in the state. @default false\n */\n omitParents?: boolean\n operation: 'create' | 'update'\n parentIndexPath: string\n parentPath: string\n parentPermissions: SanitizedFieldsPermissions\n parentSchemaPath: string\n passesCondition: boolean\n path: string\n preferences: DocumentPreferences\n previousFormState: FormState\n renderAllFields: boolean\n renderFieldFn: RenderFieldMethod\n /**\n * Req is used for validation and defaultValue calculation. If you don't need validation,\n * just create your own req and pass in the locale and the user\n */\n req: PayloadRequest\n schemaPath: string\n select?: SelectType\n selectMode?: SelectMode\n /**\n * Whether to skip checking the field's condition. @default false\n */\n skipConditionChecks?: boolean\n /**\n * Whether to skip validating the field. @default false\n */\n skipValidation?: boolean\n state: FormStateWithoutComponents\n}\n\n/**\n * Flattens the fields schema and fields data.\n * The output is the field path (e.g. array.0.name) mapped to a FormField object.\n */\nexport const addFieldStatePromise = async (args: AddFieldStatePromiseArgs): Promise<void> => {\n const {\n id,\n addErrorPathToParent: addErrorPathToParentArg,\n anyParentLocalized = false,\n blockData,\n clientFieldSchemaMap,\n collectionSlug,\n data,\n field,\n fieldSchemaMap,\n filter,\n forceFullValue = false,\n fullData,\n includeSchema = false,\n indexPath,\n omitParents = false,\n operation,\n parentPath,\n parentPermissions,\n parentSchemaPath,\n passesCondition,\n path,\n preferences,\n previousFormState,\n renderAllFields,\n renderFieldFn,\n req,\n schemaPath,\n select,\n selectMode,\n skipConditionChecks = false,\n skipValidation = false,\n state,\n } = args\n\n if (!args.clientFieldSchemaMap && args.renderFieldFn) {\n console.warn(\n 'clientFieldSchemaMap is not passed to addFieldStatePromise - this will reduce performance',\n )\n }\n\n const requiresRender = renderAllFields || previousFormState?.[path]?.requiresRender\n\n let fieldPermissions: SanitizedFieldPermissions = true\n\n const fieldState: FieldState = {}\n\n if (passesCondition === false) {\n fieldState.passesCondition = false\n }\n\n if (includeSchema) {\n fieldState.fieldSchema = field\n }\n\n if (fieldAffectsData(field) && !fieldIsHiddenOrDisabled(field)) {\n fieldPermissions =\n parentPermissions === true\n ? parentPermissions\n : deepCopyObjectSimple(parentPermissions?.[field.name])\n\n let hasPermission: boolean =\n fieldPermissions === true || deepCopyObjectSimple(fieldPermissions?.read)\n\n if (typeof field?.access?.read === 'function') {\n hasPermission = await field.access.read({\n id,\n blockData,\n data: fullData,\n req,\n siblingData: data,\n })\n } else {\n hasPermission = true\n }\n\n if (!hasPermission) {\n return\n }\n\n const validate: Validate = field.validate\n\n let validationResult: string | true = true\n\n if (typeof validate === 'function' && !skipValidation && passesCondition) {\n let jsonError\n\n if (field.type === 'json' && typeof data[field.name] === 'string') {\n try {\n JSON.parse(data[field.name])\n } catch (e) {\n jsonError = e\n }\n }\n\n try {\n validationResult = await validate(data?.[field.name], {\n ...field,\n id,\n blockData,\n collectionSlug,\n data: fullData,\n event: 'onChange',\n // @AlessioGr added `jsonError` in https://github.com/payloadcms/payload/commit/c7ea62a39473408c3ea912c4fbf73e11be4b538d\n // @ts-expect-error-next-line\n jsonError,\n operation,\n preferences,\n previousValue: previousFormState?.[path]?.initialValue,\n req,\n siblingData: data,\n })\n } catch (err) {\n validationResult = `Error validating field at path: ${path}`\n\n req.payload.logger.error({\n err,\n msg: validationResult,\n })\n }\n }\n\n const addErrorPathToParent = (errorPath: string) => {\n if (typeof addErrorPathToParentArg === 'function') {\n addErrorPathToParentArg(errorPath)\n }\n\n if (!fieldState.errorPaths) {\n fieldState.errorPaths = []\n }\n\n if (!fieldState.errorPaths.includes(errorPath)) {\n fieldState.errorPaths.push(errorPath)\n fieldState.valid = false\n }\n }\n\n if (typeof validationResult === 'string') {\n fieldState.errorMessage = validationResult\n fieldState.valid = false\n addErrorPathToParent(path)\n }\n\n switch (field.type) {\n case 'array': {\n const arrayValue = Array.isArray(data[field.name]) ? data[field.name] : []\n\n const arraySelect = select?.[field.name]\n\n const { promises, rows } = arrayValue.reduce(\n (acc, row, i: number) => {\n const parentPath = path + '.' + i\n row.id = row?.id || new ObjectId().toHexString()\n\n if (!omitParents && (!filter || filter(args))) {\n const idKey = parentPath + '.id'\n\n state[idKey] = {\n initialValue: row.id,\n value: row.id,\n }\n\n if (includeSchema) {\n state[idKey].fieldSchema = field.fields.find((field) => fieldIsID(field))\n }\n }\n\n acc.promises.push(\n iterateFields({\n id,\n addErrorPathToParent,\n anyParentLocalized: field.localized || anyParentLocalized,\n blockData,\n clientFieldSchemaMap,\n collectionSlug,\n data: row,\n fields: field.fields,\n fieldSchemaMap,\n filter,\n forceFullValue,\n fullData,\n includeSchema,\n omitParents,\n operation,\n parentIndexPath: '',\n parentPassesCondition: passesCondition,\n parentPath,\n parentSchemaPath: schemaPath,\n permissions:\n fieldPermissions === true ? fieldPermissions : fieldPermissions?.fields || {},\n preferences,\n previousFormState,\n renderAllFields: requiresRender,\n renderFieldFn,\n req,\n select: typeof arraySelect === 'object' ? arraySelect : undefined,\n selectMode,\n skipConditionChecks,\n skipValidation,\n state,\n }),\n )\n\n if (!acc.rows) {\n acc.rows = []\n }\n\n acc.rows.push({\n id: row.id,\n })\n\n const previousRows = previousFormState?.[path]?.rows || []\n const collapsedRowIDsFromPrefs = preferences?.fields?.[path]?.collapsed\n\n const collapsed = (() => {\n // First, check if `previousFormState` has a matching row\n const previousRow = previousRows.find((prevRow) => prevRow.id === row.id)\n if (previousRow) {\n return previousRow.collapsed ?? false\n }\n\n // If previousFormState is undefined, check preferences\n if (collapsedRowIDsFromPrefs !== undefined) {\n return collapsedRowIDsFromPrefs.includes(row.id) // Check if collapsed in preferences\n }\n\n // If neither exists, fallback to `field.admin.initCollapsed`\n return field.admin.initCollapsed\n })()\n\n if (collapsed) {\n acc.rows[acc.rows.length - 1].collapsed = collapsed\n }\n\n return acc\n },\n {\n promises: [],\n rows: undefined,\n },\n )\n\n // Wait for all promises and update fields with the results\n await Promise.all(promises)\n\n if (rows) {\n fieldState.rows = rows\n }\n\n fieldState.requiresRender = false\n\n // Add values to field state\n if (data[field.name] !== null) {\n fieldState.value = forceFullValue ? arrayValue : arrayValue.length\n fieldState.initialValue = forceFullValue ? arrayValue : arrayValue.length\n\n if (arrayValue.length > 0) {\n fieldState.disableFormData = true\n }\n }\n\n // Add field to state\n if (!omitParents && (!filter || filter(args))) {\n state[path] = fieldState\n }\n\n break\n }\n\n case 'blocks': {\n const blocksValue = Array.isArray(data[field.name]) ? data[field.name] : []\n\n const { promises, rowMetadata } = blocksValue.reduce(\n (acc, row, i: number) => {\n const blockTypeToMatch: string = row.blockType\n\n const block =\n req.payload.blocks[blockTypeToMatch] ??\n ((field.blockReferences ?? field.blocks).find(\n (blockType) => typeof blockType !== 'string' && blockType.slug === blockTypeToMatch,\n ) as FlattenedBlock | undefined)\n\n if (!block) {\n throw new Error(\n `Block with type \"${row.blockType}\" was found in block data, but no block with that type is defined in the config for field with schema path ${schemaPath}.`,\n )\n }\n\n const { blockSelect, blockSelectMode } = getBlockSelect({\n block,\n select: select?.[field.name],\n selectMode,\n })\n\n const parentPath = path + '.' + i\n\n if (block) {\n row.id = row?.id || new ObjectId().toHexString()\n\n if (!omitParents && (!filter || filter(args))) {\n // Handle block `id` field\n const idKey = parentPath + '.id'\n\n state[idKey] = {\n initialValue: row.id,\n value: row.id,\n }\n\n if (includeSchema) {\n state[idKey].fieldSchema = includeSchema\n ? block.fields.find((blockField) => fieldIsID(blockField))\n : undefined\n }\n\n // Handle `blockType` field\n const fieldKey = parentPath + '.blockType'\n\n state[fieldKey] = {\n initialValue: row.blockType,\n value: row.blockType,\n }\n\n if (includeSchema) {\n state[fieldKey].fieldSchema = block.fields.find(\n (blockField) => 'name' in blockField && blockField.name === 'blockType',\n )\n }\n\n // Handle `blockName` field\n const blockNameKey = parentPath + '.blockName'\n\n state[blockNameKey] = {}\n\n if (row.blockName) {\n state[blockNameKey].initialValue = row.blockName\n state[blockNameKey].value = row.blockName\n }\n\n if (includeSchema) {\n state[blockNameKey].fieldSchema = block.fields.find(\n (blockField) => 'name' in blockField && blockField.name === 'blockName',\n )\n }\n }\n\n acc.promises.push(\n iterateFields({\n id,\n addErrorPathToParent,\n anyParentLocalized: field.localized || anyParentLocalized,\n blockData: row,\n clientFieldSchemaMap,\n collectionSlug,\n data: row,\n fields: block.fields,\n fieldSchemaMap,\n filter,\n forceFullValue,\n fullData,\n includeSchema,\n omitParents,\n operation,\n parentIndexPath: '',\n parentPassesCondition: passesCondition,\n parentPath,\n parentSchemaPath: schemaPath + '.' + block.slug,\n permissions:\n fieldPermissions === true\n ? fieldPermissions\n : parentPermissions?.[field.name]?.blocks?.[block.slug] === true\n ? true\n : parentPermissions?.[field.name]?.blocks?.[block.slug]?.fields || {},\n preferences,\n previousFormState,\n renderAllFields: requiresRender,\n renderFieldFn,\n req,\n select: typeof blockSelect === 'object' ? blockSelect : undefined,\n selectMode: blockSelectMode,\n skipConditionChecks,\n skipValidation,\n state,\n }),\n )\n\n acc.rowMetadata.push({\n id: row.id,\n blockType: row.blockType,\n })\n\n const collapsedRowIDs = preferences?.fields?.[path]?.collapsed\n\n const collapsed =\n collapsedRowIDs === undefined\n ? field.admin.initCollapsed\n : collapsedRowIDs.includes(row.id)\n\n if (collapsed) {\n acc.rowMetadata[acc.rowMetadata.length - 1].collapsed = collapsed\n }\n }\n\n return acc\n },\n {\n promises: [],\n rowMetadata: [],\n },\n )\n\n await Promise.all(promises)\n\n // Add values to field state\n if (data[field.name] === null) {\n fieldState.value = null\n fieldState.initialValue = null\n } else {\n fieldState.value = forceFullValue ? blocksValue : blocksValue.length\n fieldState.initialValue = forceFullValue ? blocksValue : blocksValue.length\n\n if (blocksValue.length > 0) {\n fieldState.disableFormData = true\n }\n }\n\n fieldState.rows = rowMetadata\n\n // Unset requiresRender\n // so it will be removed from form state\n fieldState.requiresRender = false\n\n // Add field to state\n if (!omitParents && (!filter || filter(args))) {\n state[path] = fieldState\n }\n\n break\n }\n\n case 'group': {\n if (!filter || filter(args)) {\n fieldState.disableFormData = true\n state[path] = fieldState\n }\n\n const groupSelect = select?.[field.name]\n\n await iterateFields({\n id,\n addErrorPathToParent,\n anyParentLocalized: field.localized || anyParentLocalized,\n blockData,\n clientFieldSchemaMap,\n collectionSlug,\n data: data?.[field.name] || {},\n fields: field.fields,\n fieldSchemaMap,\n filter,\n forceFullValue,\n fullData,\n includeSchema,\n omitParents,\n operation,\n parentIndexPath: '',\n parentPassesCondition: passesCondition,\n parentPath: path,\n parentSchemaPath: schemaPath,\n permissions:\n typeof fieldPermissions === 'boolean' ? fieldPermissions : fieldPermissions?.fields,\n preferences,\n previousFormState,\n renderAllFields,\n renderFieldFn,\n req,\n select: typeof groupSelect === 'object' ? groupSelect : undefined,\n selectMode,\n skipConditionChecks,\n skipValidation,\n state,\n })\n\n break\n }\n case 'relationship':\n case 'upload': {\n if (field.filterOptions) {\n if (typeof field.filterOptions === 'object') {\n if (typeof field.relationTo === 'string') {\n fieldState.filterOptions = {\n [field.relationTo]: field.filterOptions,\n }\n } else {\n fieldState.filterOptions = field.relationTo.reduce((acc, relation) => {\n acc[relation] = field.filterOptions\n return acc\n }, {})\n }\n }\n\n if (typeof field.filterOptions === 'function') {\n const query = await resolveFilterOptions(field.filterOptions, {\n id,\n blockData,\n data: fullData,\n relationTo: field.relationTo,\n req,\n siblingData: data,\n user: req.user,\n })\n\n fieldState.filterOptions = query\n }\n }\n\n if (field.hasMany) {\n const relationshipValue = Array.isArray(data[field.name])\n ? data[field.name].map((relationship) => {\n if (Array.isArray(field.relationTo)) {\n return {\n relationTo: relationship.relationTo,\n value:\n relationship.value && typeof relationship.value === 'object'\n ? relationship.value?.id\n : relationship.value,\n }\n }\n if (typeof relationship === 'object' && relationship !== null) {\n return relationship.id\n }\n return relationship\n })\n : undefined\n\n fieldState.value = relationshipValue\n fieldState.initialValue = relationshipValue\n } else if (Array.isArray(field.relationTo)) {\n if (\n data[field.name] &&\n typeof data[field.name] === 'object' &&\n 'relationTo' in data[field.name] &&\n 'value' in data[field.name]\n ) {\n const value =\n typeof data[field.name]?.value === 'object' &&\n data[field.name]?.value &&\n 'id' in data[field.name].value\n ? data[field.name].value.id\n : data[field.name].value\n const relationshipValue = {\n relationTo: data[field.name]?.relationTo,\n value,\n }\n fieldState.value = relationshipValue\n fieldState.initialValue = relationshipValue\n }\n } else {\n const relationshipValue =\n data[field.name] && typeof data[field.name] === 'object' && 'id' in data[field.name]\n ? data[field.name].id\n : data[field.name]\n fieldState.value = relationshipValue\n fieldState.initialValue = relationshipValue\n }\n\n if (!filter || filter(args)) {\n state[path] = fieldState\n }\n\n break\n }\n\n default: {\n if (data[field.name] !== undefined) {\n fieldState.value = data[field.name]\n fieldState.initialValue = data[field.name]\n }\n\n // Add field to state\n if (!filter || filter(args)) {\n state[path] = fieldState\n }\n\n break\n }\n }\n } else if (fieldHasSubFields(field) && !fieldAffectsData(field)) {\n // Handle field types that do not use names (row, etc)\n\n if (!filter || filter(args)) {\n state[path] = {\n disableFormData: true,\n }\n\n if (passesCondition === false) {\n state[path].passesCondition = false\n }\n }\n\n await iterateFields({\n id,\n select,\n selectMode,\n // passthrough parent functionality\n addErrorPathToParent: addErrorPathToParentArg,\n anyParentLocalized: fieldIsLocalized(field) || anyParentLocalized,\n blockData,\n clientFieldSchemaMap,\n collectionSlug,\n data,\n fields: field.fields,\n fieldSchemaMap,\n filter,\n forceFullValue,\n fullData,\n includeSchema,\n omitParents,\n operation,\n parentIndexPath: indexPath,\n parentPassesCondition: passesCondition,\n parentPath,\n parentSchemaPath,\n permissions: parentPermissions, // TODO: Verify this is correct\n preferences,\n previousFormState,\n renderAllFields,\n renderFieldFn,\n req,\n skipConditionChecks,\n skipValidation,\n state,\n })\n } else if (field.type === 'tabs') {\n const promises = field.tabs.map((tab, tabIndex) => {\n const isNamedTab = tabHasName(tab)\n let tabSelect: SelectType | undefined\n\n const {\n indexPath: tabIndexPath,\n path: tabPath,\n schemaPath: tabSchemaPath,\n } = getFieldPaths({\n field: {\n ...tab,\n type: 'tab',\n },\n index: tabIndex,\n parentIndexPath: indexPath,\n parentPath,\n parentSchemaPath,\n })\n\n let childPermissions: SanitizedFieldsPermissions = undefined\n\n if (isNamedTab) {\n if (parentPermissions === true) {\n childPermissions = true\n } else {\n const tabPermissions = parentPermissions?.[tab.name]\n if (tabPermissions === true) {\n childPermissions = true\n } else {\n childPermissions = tabPermissions?.fields\n }\n }\n\n if (typeof select?.[tab.name] === 'object') {\n tabSelect = select?.[tab.name] as SelectType\n }\n } else {\n childPermissions = parentPermissions\n tabSelect = select\n }\n\n const pathSegments = path ? path.split('.') : []\n\n // If passesCondition is false then this should always result to false\n // If the tab has no admin.condition provided then fallback to passesCondition and let that decide the result\n let tabPassesCondition = passesCondition\n\n if (passesCondition && typeof tab.admin?.condition === 'function') {\n tabPassesCondition = tab.admin.condition(fullData, data, {\n blockData,\n path: pathSegments,\n user: req.user,\n })\n }\n\n if (tab?.id) {\n state[tab.id] = {\n passesCondition: tabPassesCondition,\n }\n }\n\n return iterateFields({\n id,\n addErrorPathToParent: addErrorPathToParentArg,\n anyParentLocalized: tab.localized || anyParentLocalized,\n blockData,\n clientFieldSchemaMap,\n collectionSlug,\n data: isNamedTab ? data?.[tab.name] || {} : data,\n fields: tab.fields,\n fieldSchemaMap,\n filter,\n forceFullValue,\n fullData,\n includeSchema,\n omitParents,\n operation,\n parentIndexPath: isNamedTab ? '' : tabIndexPath,\n parentPassesCondition: tabPassesCondition,\n parentPath: isNamedTab ? tabPath : parentPath,\n parentSchemaPath: isNamedTab ? tabSchemaPath : parentSchemaPath,\n permissions: childPermissions,\n preferences,\n previousFormState,\n renderAllFields,\n renderFieldFn,\n req,\n select: tabSelect,\n selectMode,\n skipConditionChecks,\n skipValidation,\n state,\n })\n })\n\n await Promise.all(promises)\n } else if (field.type === 'ui') {\n if (!filter || filter(args)) {\n state[path] = fieldState\n state[path].disableFormData = true\n }\n }\n\n if (requiresRender && renderFieldFn && !fieldIsHiddenOrDisabled(field)) {\n const fieldState = state[path]\n\n const fieldConfig = fieldSchemaMap.get(schemaPath)\n\n if (!fieldConfig) {\n if (schemaPath.endsWith('.blockType')) {\n return\n } else {\n throw new Error(`Field config not found for ${schemaPath}`)\n }\n }\n\n if (!fieldState) {\n // Some fields (ie `Tab`) do not live in form state\n // therefore we cannot attach customComponents to them\n return\n }\n\n renderFieldFn({\n id,\n clientFieldSchemaMap,\n collectionSlug,\n data: fullData,\n fieldConfig: fieldConfig as Field,\n fieldSchemaMap,\n fieldState,\n formState: state,\n indexPath,\n operation,\n parentPath,\n parentSchemaPath,\n path,\n permissions: fieldPermissions,\n preferences,\n previousFieldState: previousFormState?.[path],\n req,\n schemaPath,\n siblingData: data,\n })\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,37 @@
1
+ type QueuedFunction = () => Promise<void>;
2
+ type QueuedTaskOptions = {
3
+ /**
4
+ * A function that is called after the queue has processed a function
5
+ * Used to perform side effects after processing the queue
6
+ * @returns {void}
7
+ */
8
+ afterProcess?: () => void;
9
+ /**
10
+ * A function that can be used to prevent the queue from processing under certain conditions
11
+ * Can also be used to perform side effects before processing the queue
12
+ * @returns {boolean} If `false`, the queue will not process
13
+ */
14
+ beforeProcess?: () => boolean;
15
+ };
16
+ type QueueTask = (fn: QueuedFunction, options?: QueuedTaskOptions) => void;
17
+ /**
18
+ * A React hook that allows you to queue up functions to be executed in order.
19
+ * This is useful when you need to ensure long running networks requests are processed sequentially.
20
+ * Builds up a "queue" of functions to be executed in order, only ever processing the last function in the queue.
21
+ * This ensures that a long queue of tasks doesn't cause a backlog of tasks to be processed.
22
+ * E.g. if you queue a task and it begins running, then you queue 9 more tasks:
23
+ * 1. The currently task will finish
24
+ * 2. The next task in the queue will run
25
+ * 3. All remaining tasks will be discarded
26
+ * @returns {queueTask} A function used to queue a function.
27
+ * @example
28
+ * const { queueTask } = useQueues()
29
+ * queueTask(async () => {
30
+ * await fetch('https://api.example.com')
31
+ * })
32
+ */
1
33
  export declare function useQueues(): {
2
- queueTask: (fn: (signal: AbortSignal) => Promise<void>) => void;
34
+ queueTask: QueueTask;
3
35
  };
36
+ export {};
4
37
  //# sourceMappingURL=useQueues.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQueues.d.ts","sourceRoot":"","sources":["../../src/hooks/useQueues.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,IAAI;IAC3B,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA;CAChE,CA2CA"}
1
+ {"version":3,"file":"useQueues.d.ts","sourceRoot":"","sources":["../../src/hooks/useQueues.ts"],"names":[],"mappings":"AAEA,KAAK,cAAc,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;AAEzC,KAAK,iBAAiB,GAAG;IACvB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;CAC9B,CAAA;AAED,KAAK,SAAS,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAA;AAE1E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,IAAI;IAC3B,SAAS,EAAE,SAAS,CAAA;CACrB,CA8CA"}
@@ -1,40 +1,56 @@
1
1
  import { useCallback, useRef } from 'react';
2
+ /**
3
+ * A React hook that allows you to queue up functions to be executed in order.
4
+ * This is useful when you need to ensure long running networks requests are processed sequentially.
5
+ * Builds up a "queue" of functions to be executed in order, only ever processing the last function in the queue.
6
+ * This ensures that a long queue of tasks doesn't cause a backlog of tasks to be processed.
7
+ * E.g. if you queue a task and it begins running, then you queue 9 more tasks:
8
+ * 1. The currently task will finish
9
+ * 2. The next task in the queue will run
10
+ * 3. All remaining tasks will be discarded
11
+ * @returns {queueTask} A function used to queue a function.
12
+ * @example
13
+ * const { queueTask } = useQueues()
14
+ * queueTask(async () => {
15
+ * await fetch('https://api.example.com')
16
+ * })
17
+ */
2
18
  export function useQueues() {
3
- const runningTaskRef = useRef(null);
4
- const queuedTask = useRef(null);
5
- const abortControllerRef = useRef(null);
6
- const queueTask = useCallback(fn => {
7
- // Overwrite the queued task every time a new one arrives
8
- queuedTask.current = fn;
9
- // If a task is already running, abort it and return
10
- if (runningTaskRef.current !== null) {
11
- if (abortControllerRef.current) {
12
- abortControllerRef.current.abort();
19
+ const queue = useRef([]);
20
+ const isProcessing = useRef(false);
21
+ const queueTask = useCallback((fn, options) => {
22
+ queue.current.push(fn);
23
+ async function processQueue() {
24
+ if (isProcessing.current) {
25
+ return;
13
26
  }
14
- return;
15
- }
16
- const executeTask = async () => {
17
- while (queuedTask.current) {
18
- const taskToRun = queuedTask.current;
19
- queuedTask.current = null // Reset latest task before running
27
+ // Allow the consumer to prevent the queue from processing under certain conditions
28
+ if (typeof options?.beforeProcess === 'function') {
29
+ const shouldContinue = options.beforeProcess();
30
+ if (shouldContinue === false) {
31
+ return;
32
+ }
33
+ }
34
+ while (queue.current.length > 0) {
35
+ const latestTask = queue.current.pop() // Only process the last task in the queue
20
36
  ;
21
- const controller = new AbortController();
22
- abortControllerRef.current = controller;
37
+ queue.current = [] // Discard all other tasks
38
+ ;
39
+ isProcessing.current = true;
23
40
  try {
24
- runningTaskRef.current = taskToRun(controller.signal);
25
- await runningTaskRef.current // Wait for the task to complete
26
- ;
41
+ await latestTask();
27
42
  } catch (err) {
28
- if (err.name !== 'AbortError') {
29
- console.error('Error in queued function:', err) // eslint-disable-line no-console
30
- ;
31
- }
43
+ console.error('Error in queued function:', err) // eslint-disable-line no-console
44
+ ;
32
45
  } finally {
33
- runningTaskRef.current = null;
46
+ isProcessing.current = false;
47
+ if (typeof options?.afterProcess === 'function') {
48
+ options.afterProcess();
49
+ }
34
50
  }
35
51
  }
36
- };
37
- void executeTask();
52
+ }
53
+ void processQueue();
38
54
  }, []);
39
55
  return {
40
56
  queueTask