@payloadcms/ui 3.32.0-internal.a8b166f → 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 (57) 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/elements/ListControls/useQueryPresets.d.ts.map +1 -1
  5. package/dist/elements/ListControls/useQueryPresets.js +10 -1
  6. package/dist/elements/ListControls/useQueryPresets.js.map +1 -1
  7. package/dist/elements/Table/DefaultCell/fields/File/index.d.ts.map +1 -1
  8. package/dist/elements/Table/DefaultCell/fields/File/index.js +7 -19
  9. package/dist/elements/Table/DefaultCell/fields/File/index.js.map +1 -1
  10. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  11. package/dist/elements/Table/DefaultCell/index.js +13 -0
  12. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  13. package/dist/exports/client/index.js +23 -23
  14. package/dist/exports/client/index.js.map +4 -4
  15. package/dist/fields/Array/index.d.ts.map +1 -1
  16. package/dist/fields/Array/index.js +46 -50
  17. package/dist/fields/Array/index.js.map +1 -1
  18. package/dist/fields/Blocks/index.d.ts.map +1 -1
  19. package/dist/fields/Blocks/index.js +46 -50
  20. package/dist/fields/Blocks/index.js.map +1 -1
  21. package/dist/fields/Upload/HasMany/index.d.ts +1 -1
  22. package/dist/fields/Upload/HasMany/index.d.ts.map +1 -1
  23. package/dist/fields/Upload/HasMany/index.js +11 -1
  24. package/dist/fields/Upload/HasMany/index.js.map +1 -1
  25. package/dist/fields/Upload/HasOne/index.d.ts.map +1 -1
  26. package/dist/fields/Upload/HasOne/index.js +12 -2
  27. package/dist/fields/Upload/HasOne/index.js.map +1 -1
  28. package/dist/fields/Upload/RelationshipContent/index.js +28 -27
  29. package/dist/fields/Upload/RelationshipContent/index.js.map +1 -1
  30. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  31. package/dist/forms/Form/fieldReducer.js +51 -8
  32. package/dist/forms/Form/fieldReducer.js.map +1 -1
  33. package/dist/forms/Form/index.d.ts.map +1 -1
  34. package/dist/forms/Form/index.js +56 -42
  35. package/dist/forms/Form/index.js.map +1 -1
  36. package/dist/forms/Form/initContextState.d.ts.map +1 -1
  37. package/dist/forms/Form/initContextState.js +1 -0
  38. package/dist/forms/Form/initContextState.js.map +1 -1
  39. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  40. package/dist/forms/Form/mergeServerFormState.js +24 -6
  41. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  42. package/dist/forms/Form/types.d.ts +5 -0
  43. package/dist/forms/Form/types.d.ts.map +1 -1
  44. package/dist/forms/Form/types.js.map +1 -1
  45. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  46. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +0 -2
  47. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  48. package/dist/hooks/useQueues.d.ts +34 -1
  49. package/dist/hooks/useQueues.d.ts.map +1 -1
  50. package/dist/hooks/useQueues.js +44 -28
  51. package/dist/hooks/useQueues.js.map +1 -1
  52. package/dist/styles.css +1 -1
  53. package/dist/utilities/getBestFitFromSizes.d.ts +25 -0
  54. package/dist/utilities/getBestFitFromSizes.d.ts.map +1 -0
  55. package/dist/utilities/getBestFitFromSizes.js +45 -0
  56. package/dist/utilities/getBestFitFromSizes.js.map +1 -0
  57. package/package.json +5 -5
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"useQueues.js","names":["useCallback","useRef","useQueues","runningTaskRef","queuedTask","abortControllerRef","queueTask","fn","current","abort","executeTask","taskToRun","controller","AbortController","signal","err","name","console","error"],"sources":["../../src/hooks/useQueues.ts"],"sourcesContent":["import { useCallback, useRef } from 'react'\n\nexport function useQueues(): {\n queueTask: (fn: (signal: AbortSignal) => Promise<void>) => void\n} {\n const runningTaskRef = useRef<null | Promise<void>>(null)\n const queuedTask = useRef<((signal: AbortSignal) => Promise<void>) | null>(null)\n const abortControllerRef = useRef<AbortController | null>(null)\n\n const queueTask = useCallback((fn: (signal: AbortSignal) => Promise<void>) => {\n // Overwrite the queued task every time a new one arrives\n queuedTask.current = fn\n\n // If a task is already running, abort it and return\n if (runningTaskRef.current !== null) {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort()\n }\n\n return\n }\n\n const executeTask = async () => {\n while (queuedTask.current) {\n const taskToRun = queuedTask.current\n queuedTask.current = null // Reset latest task before running\n\n const controller = new AbortController()\n abortControllerRef.current = controller\n\n try {\n runningTaskRef.current = taskToRun(controller.signal)\n await runningTaskRef.current // Wait for the task to complete\n } catch (err) {\n if (err.name !== 'AbortError') {\n console.error('Error in queued function:', err) // eslint-disable-line no-console\n }\n } finally {\n runningTaskRef.current = null\n }\n }\n }\n\n void executeTask()\n }, [])\n\n return { queueTask }\n}\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,MAAM,QAAQ;AAEpC,OAAO,SAASC,UAAA;EAGd,MAAMC,cAAA,GAAiBF,MAAA,CAA6B;EACpD,MAAMG,UAAA,GAAaH,MAAA,CAAwD;EAC3E,MAAMI,kBAAA,GAAqBJ,MAAA,CAA+B;EAE1D,MAAMK,SAAA,GAAYN,WAAA,CAAaO,EAAA;IAC7B;IACAH,UAAA,CAAWI,OAAO,GAAGD,EAAA;IAErB;IACA,IAAIJ,cAAA,CAAeK,OAAO,KAAK,MAAM;MACnC,IAAIH,kBAAA,CAAmBG,OAAO,EAAE;QAC9BH,kBAAA,CAAmBG,OAAO,CAACC,KAAK;MAClC;MAEA;IACF;IAEA,MAAMC,WAAA,GAAc,MAAAA,CAAA;MAClB,OAAON,UAAA,CAAWI,OAAO,EAAE;QACzB,MAAMG,SAAA,GAAYP,UAAA,CAAWI,OAAO;QACpCJ,UAAA,CAAWI,OAAO,GAAG,KAAK;QAAA;QAE1B,MAAMI,UAAA,GAAa,IAAIC,eAAA;QACvBR,kBAAA,CAAmBG,OAAO,GAAGI,UAAA;QAE7B,IAAI;UACFT,cAAA,CAAeK,OAAO,GAAGG,SAAA,CAAUC,UAAA,CAAWE,MAAM;UACpD,MAAMX,cAAA,CAAeK,OAAO,CAAC;UAAA;QAC/B,EAAE,OAAOO,GAAA,EAAK;UACZ,IAAIA,GAAA,CAAIC,IAAI,KAAK,cAAc;YAC7BC,OAAA,CAAQC,KAAK,CAAC,6BAA6BH,GAAA,EAAK;YAAA;UAClD;QACF,UAAU;UACRZ,cAAA,CAAeK,OAAO,GAAG;QAC3B;MACF;IACF;IAEA,KAAKE,WAAA;EACP,GAAG,EAAE;EAEL,OAAO;IAAEJ;EAAU;AACrB","ignoreList":[]}
1
+ {"version":3,"file":"useQueues.js","names":["useCallback","useRef","useQueues","queue","isProcessing","queueTask","fn","options","current","push","processQueue","beforeProcess","shouldContinue","length","latestTask","pop","err","console","error","afterProcess"],"sources":["../../src/hooks/useQueues.ts"],"sourcesContent":["import { useCallback, useRef } from 'react'\n\ntype QueuedFunction = () => Promise<void>\n\ntype QueuedTaskOptions = {\n /**\n * A function that is called after the queue has processed a function\n * Used to perform side effects after processing the queue\n * @returns {void}\n */\n afterProcess?: () => void\n /**\n * A function that can be used to prevent the queue from processing under certain conditions\n * Can also be used to perform side effects before processing the queue\n * @returns {boolean} If `false`, the queue will not process\n */\n beforeProcess?: () => boolean\n}\n\ntype QueueTask = (fn: QueuedFunction, options?: QueuedTaskOptions) => void\n\n/**\n * A React hook that allows you to queue up functions to be executed in order.\n * This is useful when you need to ensure long running networks requests are processed sequentially.\n * Builds up a \"queue\" of functions to be executed in order, only ever processing the last function in the queue.\n * This ensures that a long queue of tasks doesn't cause a backlog of tasks to be processed.\n * E.g. if you queue a task and it begins running, then you queue 9 more tasks:\n * 1. The currently task will finish\n * 2. The next task in the queue will run\n * 3. All remaining tasks will be discarded\n * @returns {queueTask} A function used to queue a function.\n * @example\n * const { queueTask } = useQueues()\n * queueTask(async () => {\n * await fetch('https://api.example.com')\n * })\n */\nexport function useQueues(): {\n queueTask: QueueTask\n} {\n const queue = useRef<QueuedFunction[]>([])\n\n const isProcessing = useRef(false)\n\n const queueTask = useCallback<QueueTask>((fn, options) => {\n queue.current.push(fn)\n\n async function processQueue() {\n if (isProcessing.current) {\n return\n }\n\n // Allow the consumer to prevent the queue from processing under certain conditions\n if (typeof options?.beforeProcess === 'function') {\n const shouldContinue = options.beforeProcess()\n\n if (shouldContinue === false) {\n return\n }\n }\n\n while (queue.current.length > 0) {\n const latestTask = queue.current.pop() // Only process the last task in the queue\n queue.current = [] // Discard all other tasks\n\n isProcessing.current = true\n\n try {\n await latestTask()\n } catch (err) {\n console.error('Error in queued function:', err) // eslint-disable-line no-console\n } finally {\n isProcessing.current = false\n\n if (typeof options?.afterProcess === 'function') {\n options.afterProcess()\n }\n }\n }\n }\n\n void processQueue()\n }, [])\n\n return { queueTask }\n}\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,MAAM,QAAQ;AAqBpC;;;;;;;;;;;;;;;;AAgBA,OAAO,SAASC,UAAA;EAGd,MAAMC,KAAA,GAAQF,MAAA,CAAyB,EAAE;EAEzC,MAAMG,YAAA,GAAeH,MAAA,CAAO;EAE5B,MAAMI,SAAA,GAAYL,WAAA,CAAuB,CAACM,EAAA,EAAIC,OAAA;IAC5CJ,KAAA,CAAMK,OAAO,CAACC,IAAI,CAACH,EAAA;IAEnB,eAAeI,aAAA;MACb,IAAIN,YAAA,CAAaI,OAAO,EAAE;QACxB;MACF;MAEA;MACA,IAAI,OAAOD,OAAA,EAASI,aAAA,KAAkB,YAAY;QAChD,MAAMC,cAAA,GAAiBL,OAAA,CAAQI,aAAa;QAE5C,IAAIC,cAAA,KAAmB,OAAO;UAC5B;QACF;MACF;MAEA,OAAOT,KAAA,CAAMK,OAAO,CAACK,MAAM,GAAG,GAAG;QAC/B,MAAMC,UAAA,GAAaX,KAAA,CAAMK,OAAO,CAACO,GAAG,GAAG;QAAA;QACvCZ,KAAA,CAAMK,OAAO,GAAG,EAAE,CAAC;QAAA;QAEnBJ,YAAA,CAAaI,OAAO,GAAG;QAEvB,IAAI;UACF,MAAMM,UAAA;QACR,EAAE,OAAOE,GAAA,EAAK;UACZC,OAAA,CAAQC,KAAK,CAAC,6BAA6BF,GAAA,EAAK;UAAA;QAClD,UAAU;UACRZ,YAAA,CAAaI,OAAO,GAAG;UAEvB,IAAI,OAAOD,OAAA,EAASY,YAAA,KAAiB,YAAY;YAC/CZ,OAAA,CAAQY,YAAY;UACtB;QACF;MACF;IACF;IAEA,KAAKT,YAAA;EACP,GAAG,EAAE;EAEL,OAAO;IAAEL;EAAU;AACrB","ignoreList":[]}