@payloadcms/ui 3.56.0-internal.299316b → 3.56.0-internal.33536e7

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 (61) hide show
  1. package/dist/elements/ConfirmationModal/index.d.ts.map +1 -1
  2. package/dist/elements/ConfirmationModal/index.js +1 -0
  3. package/dist/elements/ConfirmationModal/index.js.map +1 -1
  4. package/dist/elements/DocumentLocked/index.d.ts.map +1 -1
  5. package/dist/elements/DocumentLocked/index.js +1 -0
  6. package/dist/elements/DocumentLocked/index.js.map +1 -1
  7. package/dist/elements/DocumentTakeOver/index.d.ts.map +1 -1
  8. package/dist/elements/DocumentTakeOver/index.js +1 -0
  9. package/dist/elements/DocumentTakeOver/index.js.map +1 -1
  10. package/dist/elements/Drawer/index.d.ts.map +1 -1
  11. package/dist/elements/Drawer/index.js +1 -0
  12. package/dist/elements/Drawer/index.js.map +1 -1
  13. package/dist/elements/EmailAndUsername/index.d.ts.map +1 -1
  14. package/dist/elements/EmailAndUsername/index.js +31 -24
  15. package/dist/elements/EmailAndUsername/index.js.map +1 -1
  16. package/dist/elements/FullscreenModal/index.d.ts.map +1 -1
  17. package/dist/elements/FullscreenModal/index.js +1 -0
  18. package/dist/elements/FullscreenModal/index.js.map +1 -1
  19. package/dist/elements/ListControls/getTextFieldsToBeSearched.d.ts.map +1 -1
  20. package/dist/elements/ListControls/getTextFieldsToBeSearched.js +9 -1
  21. package/dist/elements/ListControls/getTextFieldsToBeSearched.js.map +1 -1
  22. package/dist/elements/LivePreview/Window/index.js +37 -35
  23. package/dist/elements/LivePreview/Window/index.js.map +1 -1
  24. package/dist/elements/WhereBuilder/Condition/index.d.ts +1 -1
  25. package/dist/elements/WhereBuilder/Condition/index.js +2 -2
  26. package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
  27. package/dist/elements/WhereBuilder/index.js +6 -6
  28. package/dist/elements/WhereBuilder/index.js.map +1 -1
  29. package/dist/exports/client/{CodeEditor-URFJPG6I.js → CodeEditor-4J4OH4TD.js} +2 -2
  30. package/dist/exports/client/chunk-HBCG32CP.js +26 -0
  31. package/dist/exports/client/{chunk-KPQQ5IUL.js.map → chunk-HBCG32CP.js.map} +3 -3
  32. package/dist/exports/client/index.d.ts +2 -1
  33. package/dist/exports/client/index.d.ts.map +1 -1
  34. package/dist/exports/client/index.js +12 -12
  35. package/dist/exports/client/index.js.map +3 -3
  36. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  37. package/dist/fields/Relationship/Input.js +9 -5
  38. package/dist/fields/Relationship/Input.js.map +1 -1
  39. package/dist/forms/Form/createNestedClientFieldPath.js +1 -1
  40. package/dist/forms/Form/createNestedClientFieldPath.js.map +1 -1
  41. package/dist/forms/Form/index.d.ts.map +1 -1
  42. package/dist/forms/Form/index.js +8 -1
  43. package/dist/forms/Form/index.js.map +1 -1
  44. package/dist/forms/RenderFields/context.d.ts +29 -0
  45. package/dist/forms/RenderFields/context.d.ts.map +1 -1
  46. package/dist/forms/RenderFields/context.js +30 -2
  47. package/dist/forms/RenderFields/context.js.map +1 -1
  48. package/dist/providers/Config/index.d.ts +17 -2
  49. package/dist/providers/Config/index.d.ts.map +1 -1
  50. package/dist/providers/Config/index.js +57 -20
  51. package/dist/providers/Config/index.js.map +1 -1
  52. package/dist/utilities/buildFormState.d.ts.map +1 -1
  53. package/dist/utilities/buildFormState.js +2 -1
  54. package/dist/utilities/buildFormState.js.map +1 -1
  55. package/dist/utilities/reduceFieldsToOptions.d.ts +3 -3
  56. package/dist/utilities/reduceFieldsToOptions.d.ts.map +1 -1
  57. package/dist/utilities/reduceFieldsToOptions.js +9 -14
  58. package/dist/utilities/reduceFieldsToOptions.js.map +1 -1
  59. package/package.json +5 -5
  60. package/dist/exports/client/chunk-KPQQ5IUL.js +0 -26
  61. /package/dist/exports/client/{CodeEditor-URFJPG6I.js.map → CodeEditor-4J4OH4TD.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["dequal","useRouter","serialize","deepCopyObjectSimpleWithoutReactComponents","getDataByPath","getDataByPathFunc","getSiblingData","getSiblingDataFunc","reduceFieldsToValues","wait","React","useCallback","useEffect","useReducer","useRef","useState","toast","FieldErrorsToast","useDebouncedEffect","useEffectEvent","useQueues","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useLocale","useOperation","useRouteTransition","useServerFunctions","useTranslation","useUploadHandlers","abortAndIgnore","handleAbortRef","requests","BackgroundProcessingContext","DocumentFormContext","FormContext","FormFieldsContext","FormWatchContext","InitializingContext","ModifiedContext","ProcessingContext","SubmittedContext","useDocumentForm","errorMessages","fieldReducer","initContextState","baseClass","Form","props","id","collectionSlug","docConfig","docPermissions","getDocPreferences","globalSlug","action","beforeSubmit","children","className","disabled","disabledFromProps","disableSuccessStatus","disableValidationOnSubmit","el","handleResponse","initialState","isDocumentForm","isInitializing","initializingFromProps","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","documentForm","code","locale","i18n","t","refreshCookie","user","operation","queueTask","getFormState","startRouteTransition","getUploadHandler","config","setDisabled","isMounted","setIsMounted","modified","setModified","isValid","setIsValid","initializing","setInitializing","processing","setProcessing","backgroundProcessing","setBackgroundProcessing","setSubmitted","formRef","contextRef","abortResetFormRef","isFirstRenderRef","fieldsReducer","formState","dispatchFields","current","fields","prevFormState","validateForm","validatedFieldState","data","getData","validationPromises","Object","entries","map","path","field","validatedField","pathSegments","split","passesCondition","validationResult","valid","validate","valueToValidate","value","rows","Array","isArray","blockData","event","preferences","req","payload","siblingData","errorMessage","Promise","all","type","state","submit","options","e","acceptValues","actionArg","context","disableFormWhileProcessing","disableSuccessStatusFromArgs","methodToUse","overrides","overridesFromArgs","skipValidation","disableToast","preventDefault","errorToast","successToast","promise","resolve","reject","hasFormSubmitAction","success","error","loading","stopPropagation","serializableFormState","revalidatedFormState","reduce","priorOnChange","beforeSubmitFn","result","every","key","formData","createFormData","mergeOverrideData","Boolean","res","toLowerCase","body","headers","language","contentType","get","isJSON","indexOf","json","status","newFormState","prevStateRef","serverState","push","message","errors","fieldErrors","nonFieldErrors","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","forEach","dataError","_jsx","statusText","console","getFields","getField","dataFromArgs","file","upload","handler","filename","name","clientUploadContext","updateFilename","JSON","stringify","mimeType","size","dataToSerialize","_payload","indices","nullsAsUndefineds","reset","controller","docPreferences","newState","renderAllFields","schemaPath","signal","replaceState","addFieldRow","blockType","rowIndex","rowIndexArg","subFieldState","newRows","length","moveFieldRow","moveFromIndex","moveToIndex","removeFieldRow","replaceFieldRow","currentRows","abortOnChange","optimize","sanitize","classes","filter","join","executeOnChange","onChangeFn","DocumentFormContextComponent","Fragment","documentFormContextProps","El","noValidate","ref","Provider","useAllFormFields","useForm","useFormFields","useFormModified","useFormProcessing","useFormSubmitted","useWatchForm"],"sources":["../../../src/forms/Form/index.tsx"],"sourcesContent":["'use client'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { useRouter } from 'next/navigation.js'\nimport { serialize } from 'object-to-formdata'\nimport { type FormState, type PayloadRequest } from 'payload'\nimport {\n deepCopyObjectSimpleWithoutReactComponents,\n getDataByPath as getDataByPathFunc,\n getSiblingData as getSiblingDataFunc,\n reduceFieldsToValues,\n wait,\n} from 'payload/shared'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type {\n CreateFormData,\n Context as FormContextType,\n FormProps,\n GetDataByPath,\n Submit,\n SubmitOptions,\n} from './types.js'\n\nimport { FieldErrorsToast } from '../../elements/Toasts/fieldErrors.js'\nimport { useDebouncedEffect } from '../../hooks/useDebouncedEffect.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useQueues } from '../../hooks/useQueues.js'\nimport { useThrottledEffect } from '../../hooks/useThrottledEffect.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useUploadHandlers } from '../../providers/UploadHandlers/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { requests } from '../../utilities/api.js'\nimport {\n BackgroundProcessingContext,\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n InitializingContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useDocumentForm,\n} from './context.js'\nimport { errorMessages } from './errorMessages.js'\nimport { fieldReducer } from './fieldReducer.js'\nimport { initContextState } from './initContextState.js'\n\nconst baseClass = 'form'\n\nexport const Form: React.FC<FormProps> = (props) => {\n const { id, collectionSlug, docConfig, docPermissions, getDocPreferences, globalSlug } =\n useDocumentInfo()\n\n const {\n action,\n beforeSubmit,\n children,\n className,\n disabled: disabledFromProps,\n disableSuccessStatus,\n disableValidationOnSubmit,\n // fields: fieldsFromProps = collection?.fields || global?.fields,\n el,\n handleResponse,\n initialState, // fully formed initial field state\n isDocumentForm,\n isInitializing: initializingFromProps,\n onChange,\n onSubmit,\n onSuccess,\n redirect,\n submitted: submittedFromProps,\n uuid,\n waitForAutocomplete,\n } = props\n\n const method = 'method' in props ? props?.method : undefined\n\n const router = useRouter()\n\n const documentForm = useDocumentForm()\n\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { refreshCookie, user } = useAuth()\n const operation = useOperation()\n const { queueTask } = useQueues()\n\n const { getFormState } = useServerFunctions()\n const { startRouteTransition } = useRouteTransition()\n const { getUploadHandler } = useUploadHandlers()\n\n const { config } = useConfig()\n\n const [disabled, setDisabled] = useState(disabledFromProps || false)\n const [isMounted, setIsMounted] = useState(false)\n const [modified, setModified] = useState(false)\n\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 const [isValid, setIsValid] = useState(true)\n const [initializing, setInitializing] = useState(initializingFromProps)\n\n const [processing, setProcessing] = useState(false)\n const [backgroundProcessing, setBackgroundProcessing] = useState(false)\n\n const [submitted, setSubmitted] = useState(false)\n const formRef = useRef<HTMLFormElement>(null)\n const contextRef = useRef({} as FormContextType)\n const abortResetFormRef = useRef<AbortController>(null)\n const isFirstRenderRef = useRef(true)\n\n const fieldsReducer = useReducer(fieldReducer, {}, () => initialState)\n\n const [formState, dispatchFields] = fieldsReducer\n\n contextRef.current.fields = formState\n\n const prevFormState = useRef(formState)\n\n const validateForm = useCallback(async () => {\n const validatedFieldState = {}\n let isValid = true\n\n const data = contextRef.current.getData()\n\n const validationPromises = Object.entries(contextRef.current.fields).map(\n async ([path, field]) => {\n const validatedField = field\n const pathSegments = path ? path.split('.') : []\n\n if (field.passesCondition !== false) {\n let validationResult: boolean | string = validatedField.valid\n\n if ('validate' in field && typeof field.validate === 'function') {\n let valueToValidate = field.value\n\n if (field?.rows && Array.isArray(field.rows)) {\n valueToValidate = contextRef.current.getDataByPath(path)\n }\n\n validationResult = await field.validate(valueToValidate, {\n ...field,\n id,\n collectionSlug,\n // If there is a parent document form, we can get the data from that form\n blockData: undefined, // Will be expensive to get - not worth to pass to client-side validation, as this can be obtained by the user using `useFormFields()`\n data: documentForm?.getData ? documentForm.getData() : data,\n event: 'submit',\n operation,\n path: pathSegments,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: contextRef.current.getSiblingData(path),\n })\n\n if (typeof validationResult === 'string') {\n validatedField.errorMessage = validationResult\n validatedField.valid = false\n } else {\n validatedField.valid = true\n validatedField.errorMessage = undefined\n }\n }\n\n if (validatedField.valid === false) {\n isValid = false\n }\n }\n\n validatedFieldState[path] = validatedField\n },\n )\n\n await Promise.all(validationPromises)\n\n if (!dequal(contextRef.current.fields, validatedFieldState)) {\n dispatchFields({ type: 'REPLACE_STATE', state: validatedFieldState })\n }\n\n setIsValid(isValid)\n\n return isValid\n }, [collectionSlug, config, dispatchFields, id, operation, t, user, documentForm])\n\n const submit = useCallback<Submit>(\n async (options, e) => {\n const {\n acceptValues = true,\n action: actionArg = action,\n context,\n disableFormWhileProcessing = true,\n disableSuccessStatus: disableSuccessStatusFromArgs,\n method: methodToUse = method,\n overrides: overridesFromArgs = {},\n skipValidation,\n } = options || ({} as SubmitOptions)\n\n const disableToast = disableSuccessStatusFromArgs ?? disableSuccessStatus\n\n if (disabled) {\n if (e) {\n e.preventDefault()\n }\n return\n }\n\n // create new toast promise which will resolve manually later\n let errorToast, successToast\n\n const promise = new Promise((resolve, reject) => {\n successToast = resolve\n errorToast = reject\n })\n\n const hasFormSubmitAction =\n actionArg || typeof action === 'string' || typeof action === 'function'\n\n if (redirect || disableToast || !hasFormSubmitAction) {\n // Do not show submitting toast, as the promise toast may never disappear under these conditions.\n // Instead, make successToast() or errorToast() throw toast.success / toast.error\n successToast = (data) => toast.success(data)\n errorToast = (data) => toast.error(data)\n } else {\n toast.promise(promise, {\n error: (data) => {\n return data as string\n },\n loading: t('general:submitting'),\n success: (data) => {\n return data as string\n },\n })\n }\n\n if (e) {\n e.stopPropagation()\n e.preventDefault()\n }\n\n if (disableFormWhileProcessing) {\n setProcessing(true)\n setDisabled(true)\n }\n\n if (waitForAutocomplete) {\n await wait(100)\n }\n\n const data = reduceFieldsToValues(contextRef.current.fields, true)\n\n const serializableFormState = deepCopyObjectSimpleWithoutReactComponents(\n contextRef.current.fields,\n )\n\n // Execute server side validations\n if (Array.isArray(beforeSubmit)) {\n let revalidatedFormState: FormState\n\n await beforeSubmit.reduce(async (priorOnChange, beforeSubmitFn) => {\n await priorOnChange\n\n const result = await beforeSubmitFn({\n formState: serializableFormState,\n })\n\n revalidatedFormState = result\n }, Promise.resolve())\n\n const isValid = Object.entries(revalidatedFormState).every(\n ([, field]) => field.valid !== false,\n )\n\n setIsValid(isValid)\n\n if (!isValid) {\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return dispatchFields({ type: 'REPLACE_STATE', state: revalidatedFormState })\n }\n }\n\n const isValid =\n skipValidation || disableValidationOnSubmit ? true : await contextRef.current.validateForm()\n\n setIsValid(isValid)\n\n // If not valid, prevent submission\n if (!isValid) {\n errorToast(t('error:correctInvalidFields'))\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n let overrides = {}\n\n if (typeof overridesFromArgs === 'function') {\n overrides = overridesFromArgs(contextRef.current.fields)\n } else if (typeof overridesFromArgs === 'object') {\n overrides = overridesFromArgs\n }\n\n // If submit handler comes through via props, run that\n if (onSubmit) {\n for (const [key, value] of Object.entries(overrides)) {\n data[key] = value\n }\n\n onSubmit(contextRef.current.fields, data)\n }\n\n if (!hasFormSubmitAction) {\n // No action provided, so we should return. An example where this happens are lexical link drawers. Upon submitting the drawer, we\n // want to close it without submitting the form. Stuff like validation would be handled by lexical before this, through beforeSubmit\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n const formData = await contextRef.current.createFormData(overrides, {\n data,\n mergeOverrideData: Boolean(typeof overridesFromArgs !== 'function'),\n })\n\n try {\n let res\n\n if (typeof actionArg === 'string') {\n res = await requests[methodToUse.toLowerCase()](actionArg, {\n body: formData,\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n } else if (typeof action === 'function') {\n res = await action(formData)\n }\n\n setModified(false)\n setDisabled(false)\n\n if (typeof handleResponse === 'function') {\n handleResponse(res, successToast, errorToast)\n return\n }\n\n const contentType = res.headers.get('content-type')\n const isJSON = contentType && contentType.indexOf('application/json') !== -1\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let json: Record<string, any> = {}\n\n if (isJSON) {\n json = await res.json()\n }\n\n if (res.status < 400) {\n if (typeof onSuccess === 'function') {\n const newFormState = await onSuccess(json, {\n context,\n formState: serializableFormState,\n })\n\n if (newFormState) {\n dispatchFields({\n type: 'MERGE_SERVER_STATE',\n acceptValues,\n prevStateRef: prevFormState,\n serverState: newFormState,\n })\n }\n }\n\n setSubmitted(false)\n setProcessing(false)\n\n if (redirect) {\n startRouteTransition(() => router.push(redirect))\n } else if (!disableToast) {\n successToast(json.message || t('general:submissionSuccessful'))\n }\n } else {\n setProcessing(false)\n setSubmitted(true)\n\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n\n if (json.message) {\n errorToast(json.message)\n return\n }\n\n if (Array.isArray(json.errors)) {\n const [fieldErrors, nonFieldErrors] = json.errors.reduce(\n ([fieldErrs, nonFieldErrs], err) => {\n const newFieldErrs = []\n const newNonFieldErrs = []\n\n if (err?.message) {\n newNonFieldErrs.push(err)\n }\n\n if (Array.isArray(err?.data?.errors)) {\n err.data?.errors.forEach((dataError) => {\n if (dataError?.path) {\n newFieldErrs.push(dataError)\n } else {\n newNonFieldErrs.push(dataError)\n }\n })\n }\n\n return [\n [...fieldErrs, ...newFieldErrs],\n [...nonFieldErrs, ...newNonFieldErrs],\n ]\n },\n [[], []],\n )\n\n setIsValid(false)\n\n dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n errorToast(<FieldErrorsToast errorMessage={err.message || t('error:unknown')} />)\n })\n\n return\n }\n\n const message = errorMessages?.[res.status] || res?.statusText || t('error:unknown')\n\n errorToast(message)\n }\n\n return { formState: contextRef.current.fields, res }\n } catch (err) {\n console.error('Error submitting form', err) // eslint-disable-line no-console\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n errorToast(err.message)\n }\n },\n [\n beforeSubmit,\n startRouteTransition,\n action,\n disableSuccessStatus,\n disableValidationOnSubmit,\n disabled,\n dispatchFields,\n handleResponse,\n method,\n onSubmit,\n onSuccess,\n redirect,\n router,\n t,\n i18n,\n waitForAutocomplete,\n ],\n )\n\n const getFields = useCallback(() => contextRef.current.fields, [])\n\n const getField = useCallback((path: string) => contextRef.current.fields[path], [])\n\n const getData = useCallback(() => reduceFieldsToValues(contextRef.current.fields, true), [])\n\n const getSiblingData = useCallback(\n (path: string) => getSiblingDataFunc(contextRef.current.fields, path),\n [],\n )\n\n const getDataByPath = useCallback<GetDataByPath>(\n (path: string) => getDataByPathFunc(contextRef.current.fields, path),\n [],\n )\n\n const createFormData = useCallback<CreateFormData>(\n async (overrides, { data: dataFromArgs, mergeOverrideData = true }) => {\n let data = dataFromArgs || reduceFieldsToValues(contextRef.current.fields, true)\n\n let file = data?.file\n\n if (docConfig && 'upload' in docConfig && docConfig.upload && file) {\n delete data.file\n\n const handler = getUploadHandler({ collectionSlug })\n\n if (typeof handler === 'function') {\n let filename = file.name\n const clientUploadContext = await handler({\n file,\n updateFilename: (value) => {\n filename = value\n },\n })\n\n file = JSON.stringify({\n clientUploadContext,\n collectionSlug,\n filename,\n mimeType: file.type,\n size: file.size,\n })\n }\n }\n\n if (mergeOverrideData) {\n data = {\n ...data,\n ...overrides,\n }\n } else {\n data = overrides\n }\n\n const dataToSerialize: Record<string, unknown> = {\n _payload: JSON.stringify(data),\n }\n\n if (docConfig && 'upload' in docConfig && docConfig.upload && file) {\n dataToSerialize.file = file\n }\n\n // nullAsUndefineds is important to allow uploads and relationship fields to clear themselves\n const formData = serialize(dataToSerialize, {\n indices: true,\n nullsAsUndefineds: false,\n })\n\n return formData\n },\n [collectionSlug, docConfig, getUploadHandler],\n )\n\n const reset = useCallback(\n async (data: unknown) => {\n const controller = handleAbortRef(abortResetFormRef)\n\n const docPreferences = await getDocPreferences()\n\n const { state: newState } = await getFormState({\n id,\n collectionSlug,\n data,\n docPermissions,\n docPreferences,\n globalSlug,\n locale,\n operation,\n renderAllFields: true,\n schemaPath: collectionSlug ? collectionSlug : globalSlug,\n signal: controller.signal,\n skipValidation: true,\n })\n\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state: newState })\n\n abortResetFormRef.current = null\n },\n [\n collectionSlug,\n dispatchFields,\n globalSlug,\n id,\n operation,\n getFormState,\n docPermissions,\n getDocPreferences,\n locale,\n ],\n )\n\n const replaceState = useCallback(\n (state: FormState) => {\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state })\n },\n [dispatchFields],\n )\n\n const addFieldRow: FormContextType['addFieldRow'] = useCallback(\n ({ blockType, path, rowIndex: rowIndexArg, subFieldState }) => {\n const newRows: unknown[] = getDataByPath(path) || []\n const rowIndex = rowIndexArg === undefined ? newRows.length : rowIndexArg\n\n // dispatch ADD_ROW adds a blank row to local form state.\n // This performs no form state request, as the debounced onChange effect will do that for us.\n dispatchFields({\n type: 'ADD_ROW',\n blockType,\n path,\n rowIndex,\n subFieldState,\n })\n\n setModified(true)\n },\n [dispatchFields, getDataByPath],\n )\n\n const moveFieldRow: FormContextType['moveFieldRow'] = useCallback(\n ({ moveFromIndex, moveToIndex, path }) => {\n dispatchFields({\n type: 'MOVE_ROW',\n moveFromIndex,\n moveToIndex,\n path,\n })\n\n setModified(true)\n },\n [dispatchFields],\n )\n\n const removeFieldRow: FormContextType['removeFieldRow'] = useCallback(\n ({ path, rowIndex }) => {\n dispatchFields({ type: 'REMOVE_ROW', path, rowIndex })\n\n setModified(true)\n },\n [dispatchFields],\n )\n\n const replaceFieldRow: FormContextType['replaceFieldRow'] = useCallback(\n ({ blockType, path, rowIndex: rowIndexArg, subFieldState }) => {\n const currentRows: unknown[] = getDataByPath(path)\n const rowIndex = rowIndexArg === undefined ? currentRows.length : rowIndexArg\n\n dispatchFields({\n type: 'REPLACE_ROW',\n blockType,\n path,\n rowIndex,\n subFieldState,\n })\n\n setModified(true)\n },\n [dispatchFields, getDataByPath],\n )\n\n useEffect(() => {\n const abortOnChange = abortResetFormRef.current\n\n return () => {\n abortAndIgnore(abortOnChange)\n }\n }, [])\n\n useEffect(() => {\n if (initializingFromProps !== undefined) {\n setInitializing(initializingFromProps)\n }\n }, [initializingFromProps])\n\n contextRef.current.submit = submit\n contextRef.current.getFields = getFields\n contextRef.current.getField = getField\n contextRef.current.getData = getData\n contextRef.current.getSiblingData = getSiblingData\n contextRef.current.getDataByPath = getDataByPath\n contextRef.current.validateForm = validateForm\n contextRef.current.createFormData = createFormData\n contextRef.current.setModified = setModified\n contextRef.current.setProcessing = setProcessing\n contextRef.current.setBackgroundProcessing = setBackgroundProcessing\n\n contextRef.current.setSubmitted = setSubmitted\n contextRef.current.setIsValid = setIsValid\n contextRef.current.disabled = disabled\n contextRef.current.setDisabled = setDisabled\n contextRef.current.formRef = formRef\n contextRef.current.reset = reset\n contextRef.current.replaceState = replaceState\n contextRef.current.dispatchFields = dispatchFields\n contextRef.current.addFieldRow = addFieldRow\n contextRef.current.removeFieldRow = removeFieldRow\n contextRef.current.moveFieldRow = moveFieldRow\n contextRef.current.replaceFieldRow = replaceFieldRow\n contextRef.current.uuid = uuid\n contextRef.current.initializing = initializing\n contextRef.current.isValid = isValid\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n useEffect(() => {\n if (typeof disabledFromProps === 'boolean') {\n setDisabled(disabledFromProps)\n }\n }, [disabledFromProps])\n\n useEffect(() => {\n if (typeof submittedFromProps === 'boolean') {\n setSubmitted(submittedFromProps)\n }\n }, [submittedFromProps])\n\n useEffect(() => {\n if (initialState) {\n contextRef.current = { ...initContextState } as FormContextType\n dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n sanitize: true,\n state: initialState,\n })\n }\n }, [initialState, dispatchFields])\n\n useThrottledEffect(\n () => {\n refreshCookie()\n },\n 15000,\n [formState],\n )\n\n useEffect(() => {\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n setModified(false)\n }, [locale])\n\n const classes = [className, baseClass].filter(Boolean).join(' ')\n\n const executeOnChange = useEffectEvent((submitted: boolean) => {\n queueTask(async () => {\n if (Array.isArray(onChange)) {\n let serverState: FormState\n\n for (const onChangeFn of onChange) {\n // Edit view default onChange is in packages/ui/src/views/Edit/index.tsx. This onChange usually sends a form state request\n serverState = await onChangeFn({\n formState: deepCopyObjectSimpleWithoutReactComponents(formState),\n submitted,\n })\n }\n\n dispatchFields({\n type: 'MERGE_SERVER_STATE',\n prevStateRef: prevFormState,\n serverState,\n })\n }\n })\n })\n\n useDebouncedEffect(\n () => {\n if ((isFirstRenderRef.current || !dequal(formState, prevFormState.current)) && modified) {\n executeOnChange(submitted)\n }\n\n prevFormState.current = formState\n isFirstRenderRef.current = false\n },\n [modified, submitted, formState],\n 250,\n )\n\n const DocumentFormContextComponent: React.FC<any> = isDocumentForm\n ? DocumentFormContext\n : React.Fragment\n\n const documentFormContextProps = isDocumentForm\n ? {\n value: contextRef.current,\n }\n : {}\n\n const El: 'form' = (el as unknown as 'form') || 'form'\n\n return (\n <El\n action={typeof action === 'function' ? void action : action}\n className={classes}\n method={method}\n noValidate\n onSubmit={(e) => void contextRef.current.submit({}, e)}\n ref={formRef}\n >\n <DocumentFormContextComponent {...documentFormContextProps}>\n <FormContext value={contextRef.current}>\n <FormWatchContext\n value={{\n fields: formState,\n ...contextRef.current,\n }}\n >\n <SubmittedContext value={submitted}>\n <InitializingContext value={!isMounted || (isMounted && initializing)}>\n <ProcessingContext value={processing}>\n <BackgroundProcessingContext value={backgroundProcessing}>\n <ModifiedContext value={modified}>\n {/* eslint-disable-next-line @eslint-react/no-context-provider */}\n <FormFieldsContext.Provider value={fieldsReducer}>\n {children}\n </FormFieldsContext.Provider>\n </ModifiedContext>\n </BackgroundProcessingContext>\n </ProcessingContext>\n </InitializingContext>\n </SubmittedContext>\n </FormWatchContext>\n </FormContext>\n </DocumentFormContextComponent>\n </El>\n )\n}\n\nexport {\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useAllFormFields,\n useDocumentForm,\n useForm,\n useFormFields,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n useWatchForm,\n} from './context.js'\n\nexport { FormProps }\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["dequal","useRouter","serialize","deepCopyObjectSimpleWithoutReactComponents","getDataByPath","getDataByPathFunc","getSiblingData","getSiblingDataFunc","reduceFieldsToValues","wait","React","useCallback","useEffect","useReducer","useRef","useState","toast","FieldErrorsToast","useDebouncedEffect","useEffectEvent","useQueues","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useLocale","useOperation","useRouteTransition","useServerFunctions","useTranslation","useUploadHandlers","abortAndIgnore","handleAbortRef","requests","BackgroundProcessingContext","DocumentFormContext","FormContext","FormFieldsContext","FormWatchContext","InitializingContext","ModifiedContext","ProcessingContext","SubmittedContext","useDocumentForm","errorMessages","fieldReducer","initContextState","baseClass","Form","props","id","collectionSlug","docConfig","docPermissions","getDocPreferences","globalSlug","validateDrafts","versions","drafts","validate","action","beforeSubmit","children","className","disabled","disabledFromProps","disableSuccessStatus","disableValidationOnSubmit","el","handleResponse","initialState","isDocumentForm","isInitializing","initializingFromProps","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","documentForm","code","locale","i18n","t","refreshCookie","user","operation","queueTask","getFormState","startRouteTransition","getUploadHandler","config","getEntityConfig","setDisabled","isMounted","setIsMounted","modified","setModified","isValid","setIsValid","initializing","setInitializing","processing","setProcessing","backgroundProcessing","setBackgroundProcessing","setSubmitted","formRef","contextRef","abortResetFormRef","isFirstRenderRef","fieldsReducer","formState","dispatchFields","current","fields","prevFormState","validateForm","validatedFieldState","data","getData","validationPromises","Object","entries","map","path","field","validatedField","pathSegments","split","passesCondition","validationResult","valid","valueToValidate","value","rows","Array","isArray","blockData","event","preferences","req","payload","siblingData","errorMessage","Promise","all","type","state","submit","options","e","acceptValues","actionArg","context","disableFormWhileProcessing","disableSuccessStatusFromArgs","methodToUse","overrides","overridesFromArgs","skipValidation","disableToast","preventDefault","errorToast","successToast","promise","resolve","reject","hasFormSubmitAction","success","error","loading","stopPropagation","serializableFormState","revalidatedFormState","reduce","priorOnChange","beforeSubmitFn","result","every","key","formData","createFormData","mergeOverrideData","Boolean","res","toLowerCase","body","headers","language","contentType","get","isJSON","indexOf","json","status","newFormState","prevStateRef","serverState","push","message","errors","fieldErrors","nonFieldErrors","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","forEach","dataError","_jsx","statusText","console","getFields","getField","dataFromArgs","file","upload","handler","filename","name","clientUploadContext","updateFilename","JSON","stringify","mimeType","size","dataToSerialize","_payload","indices","nullsAsUndefineds","reset","controller","docPreferences","newState","renderAllFields","schemaPath","signal","replaceState","addFieldRow","blockType","rowIndex","rowIndexArg","subFieldState","newRows","length","moveFieldRow","moveFromIndex","moveToIndex","removeFieldRow","replaceFieldRow","currentRows","abortOnChange","optimize","sanitize","classes","filter","join","executeOnChange","onChangeFn","DocumentFormContextComponent","Fragment","documentFormContextProps","El","noValidate","ref","Provider","useAllFormFields","useForm","useFormFields","useFormModified","useFormProcessing","useFormSubmitted","useWatchForm"],"sources":["../../../src/forms/Form/index.tsx"],"sourcesContent":["'use client'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { useRouter } from 'next/navigation.js'\nimport { serialize } from 'object-to-formdata'\nimport { type FormState, type PayloadRequest } from 'payload'\nimport {\n deepCopyObjectSimpleWithoutReactComponents,\n getDataByPath as getDataByPathFunc,\n getSiblingData as getSiblingDataFunc,\n reduceFieldsToValues,\n wait,\n} from 'payload/shared'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type {\n CreateFormData,\n Context as FormContextType,\n FormProps,\n GetDataByPath,\n Submit,\n SubmitOptions,\n} from './types.js'\n\nimport { FieldErrorsToast } from '../../elements/Toasts/fieldErrors.js'\nimport { useDebouncedEffect } from '../../hooks/useDebouncedEffect.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useQueues } from '../../hooks/useQueues.js'\nimport { useThrottledEffect } from '../../hooks/useThrottledEffect.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useUploadHandlers } from '../../providers/UploadHandlers/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { requests } from '../../utilities/api.js'\nimport {\n BackgroundProcessingContext,\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n InitializingContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useDocumentForm,\n} from './context.js'\nimport { errorMessages } from './errorMessages.js'\nimport { fieldReducer } from './fieldReducer.js'\nimport { initContextState } from './initContextState.js'\n\nconst baseClass = 'form'\n\nexport const Form: React.FC<FormProps> = (props) => {\n const { id, collectionSlug, docConfig, docPermissions, getDocPreferences, globalSlug } =\n useDocumentInfo()\n\n const validateDrafts =\n docConfig?.versions?.drafts && typeof docConfig?.versions?.drafts === 'object'\n ? (docConfig.versions.drafts.validate ?? false)\n : false\n\n const {\n action,\n beforeSubmit,\n children,\n className,\n disabled: disabledFromProps,\n disableSuccessStatus,\n disableValidationOnSubmit,\n // fields: fieldsFromProps = collection?.fields || global?.fields,\n el,\n handleResponse,\n initialState, // fully formed initial field state\n isDocumentForm,\n isInitializing: initializingFromProps,\n onChange,\n onSubmit,\n onSuccess,\n redirect,\n submitted: submittedFromProps,\n uuid,\n waitForAutocomplete,\n } = props\n\n const method = 'method' in props ? props?.method : undefined\n\n const router = useRouter()\n\n const documentForm = useDocumentForm()\n\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { refreshCookie, user } = useAuth()\n const operation = useOperation()\n const { queueTask } = useQueues()\n\n const { getFormState } = useServerFunctions()\n const { startRouteTransition } = useRouteTransition()\n const { getUploadHandler } = useUploadHandlers()\n\n const { config, getEntityConfig } = useConfig()\n\n const [disabled, setDisabled] = useState(disabledFromProps || false)\n const [isMounted, setIsMounted] = useState(false)\n const [modified, setModified] = useState(false)\n\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 const [isValid, setIsValid] = useState(true)\n const [initializing, setInitializing] = useState(initializingFromProps)\n\n const [processing, setProcessing] = useState(false)\n const [backgroundProcessing, setBackgroundProcessing] = useState(false)\n\n const [submitted, setSubmitted] = useState(false)\n const formRef = useRef<HTMLFormElement>(null)\n const contextRef = useRef({} as FormContextType)\n const abortResetFormRef = useRef<AbortController>(null)\n const isFirstRenderRef = useRef(true)\n\n const fieldsReducer = useReducer(fieldReducer, {}, () => initialState)\n\n const [formState, dispatchFields] = fieldsReducer\n\n contextRef.current.fields = formState\n\n const prevFormState = useRef(formState)\n\n const validateForm = useCallback(async () => {\n const validatedFieldState = {}\n let isValid = true\n\n const data = contextRef.current.getData()\n\n const validationPromises = Object.entries(contextRef.current.fields).map(\n async ([path, field]) => {\n const validatedField = field\n const pathSegments = path ? path.split('.') : []\n\n if (field.passesCondition !== false) {\n let validationResult: boolean | string = validatedField.valid\n\n if ('validate' in field && typeof field.validate === 'function') {\n let valueToValidate = field.value\n\n if (field?.rows && Array.isArray(field.rows)) {\n valueToValidate = contextRef.current.getDataByPath(path)\n }\n\n validationResult = await field.validate(valueToValidate, {\n ...field,\n id,\n collectionSlug,\n // If there is a parent document form, we can get the data from that form\n blockData: undefined, // Will be expensive to get - not worth to pass to client-side validation, as this can be obtained by the user using `useFormFields()`\n data: documentForm?.getData ? documentForm.getData() : data,\n event: 'submit',\n operation,\n path: pathSegments,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: contextRef.current.getSiblingData(path),\n })\n\n if (typeof validationResult === 'string') {\n validatedField.errorMessage = validationResult\n validatedField.valid = false\n } else {\n validatedField.valid = true\n validatedField.errorMessage = undefined\n }\n }\n\n if (validatedField.valid === false) {\n isValid = false\n }\n }\n\n validatedFieldState[path] = validatedField\n },\n )\n\n await Promise.all(validationPromises)\n\n if (!dequal(contextRef.current.fields, validatedFieldState)) {\n dispatchFields({ type: 'REPLACE_STATE', state: validatedFieldState })\n }\n\n setIsValid(isValid)\n\n return isValid\n }, [collectionSlug, config, dispatchFields, id, operation, t, user, documentForm])\n\n const submit = useCallback<Submit>(\n async (options, e) => {\n const {\n acceptValues = true,\n action: actionArg = action,\n context,\n disableFormWhileProcessing = true,\n disableSuccessStatus: disableSuccessStatusFromArgs,\n method: methodToUse = method,\n overrides: overridesFromArgs = {},\n skipValidation,\n } = options || ({} as SubmitOptions)\n\n const disableToast = disableSuccessStatusFromArgs ?? disableSuccessStatus\n\n if (disabled) {\n if (e) {\n e.preventDefault()\n }\n return\n }\n\n // create new toast promise which will resolve manually later\n let errorToast, successToast\n\n const promise = new Promise((resolve, reject) => {\n successToast = resolve\n errorToast = reject\n })\n\n const hasFormSubmitAction =\n actionArg || typeof action === 'string' || typeof action === 'function'\n\n if (redirect || disableToast || !hasFormSubmitAction) {\n // Do not show submitting toast, as the promise toast may never disappear under these conditions.\n // Instead, make successToast() or errorToast() throw toast.success / toast.error\n successToast = (data) => toast.success(data)\n errorToast = (data) => toast.error(data)\n } else {\n toast.promise(promise, {\n error: (data) => {\n return data as string\n },\n loading: t('general:submitting'),\n success: (data) => {\n return data as string\n },\n })\n }\n\n if (e) {\n e.stopPropagation()\n e.preventDefault()\n }\n\n if (disableFormWhileProcessing) {\n setProcessing(true)\n setDisabled(true)\n }\n\n if (waitForAutocomplete) {\n await wait(100)\n }\n\n const data = reduceFieldsToValues(contextRef.current.fields, true)\n\n const serializableFormState = deepCopyObjectSimpleWithoutReactComponents(\n contextRef.current.fields,\n )\n\n // Execute server side validations\n if (Array.isArray(beforeSubmit)) {\n let revalidatedFormState: FormState\n\n await beforeSubmit.reduce(async (priorOnChange, beforeSubmitFn) => {\n await priorOnChange\n\n const result = await beforeSubmitFn({\n formState: serializableFormState,\n })\n\n revalidatedFormState = result\n }, Promise.resolve())\n\n const isValid = Object.entries(revalidatedFormState).every(\n ([, field]) => field.valid !== false,\n )\n\n setIsValid(isValid)\n\n if (!isValid) {\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return dispatchFields({ type: 'REPLACE_STATE', state: revalidatedFormState })\n }\n }\n\n const isValid =\n skipValidation || disableValidationOnSubmit ? true : await contextRef.current.validateForm()\n\n setIsValid(isValid)\n\n // If not valid, prevent submission\n if (!isValid) {\n errorToast(t('error:correctInvalidFields'))\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n let overrides = {}\n\n if (typeof overridesFromArgs === 'function') {\n overrides = overridesFromArgs(contextRef.current.fields)\n } else if (typeof overridesFromArgs === 'object') {\n overrides = overridesFromArgs\n }\n\n // If submit handler comes through via props, run that\n if (onSubmit) {\n for (const [key, value] of Object.entries(overrides)) {\n data[key] = value\n }\n\n onSubmit(contextRef.current.fields, data)\n }\n\n if (!hasFormSubmitAction) {\n // No action provided, so we should return. An example where this happens are lexical link drawers. Upon submitting the drawer, we\n // want to close it without submitting the form. Stuff like validation would be handled by lexical before this, through beforeSubmit\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n const formData = await contextRef.current.createFormData(overrides, {\n data,\n mergeOverrideData: Boolean(typeof overridesFromArgs !== 'function'),\n })\n\n try {\n let res\n\n if (typeof actionArg === 'string') {\n res = await requests[methodToUse.toLowerCase()](actionArg, {\n body: formData,\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n } else if (typeof action === 'function') {\n res = await action(formData)\n }\n\n setModified(false)\n setDisabled(false)\n\n if (typeof handleResponse === 'function') {\n handleResponse(res, successToast, errorToast)\n return\n }\n\n const contentType = res.headers.get('content-type')\n const isJSON = contentType && contentType.indexOf('application/json') !== -1\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let json: Record<string, any> = {}\n\n if (isJSON) {\n json = await res.json()\n }\n\n if (res.status < 400) {\n if (typeof onSuccess === 'function') {\n const newFormState = await onSuccess(json, {\n context,\n formState: serializableFormState,\n })\n\n if (newFormState) {\n dispatchFields({\n type: 'MERGE_SERVER_STATE',\n acceptValues,\n prevStateRef: prevFormState,\n serverState: newFormState,\n })\n }\n }\n\n setSubmitted(false)\n setProcessing(false)\n\n if (redirect) {\n startRouteTransition(() => router.push(redirect))\n } else if (!disableToast) {\n successToast(json.message || t('general:submissionSuccessful'))\n }\n } else {\n setProcessing(false)\n setSubmitted(true)\n\n // When there was an error submitting a draft,\n // set the form state to unsubmitted, to not trigger visible form validation on changes after the failed submit.\n if (!validateDrafts && overridesFromArgs['_status'] === 'draft') {\n setSubmitted(false)\n }\n\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n\n if (json.message) {\n errorToast(json.message)\n return\n }\n\n if (Array.isArray(json.errors)) {\n const [fieldErrors, nonFieldErrors] = json.errors.reduce(\n ([fieldErrs, nonFieldErrs], err) => {\n const newFieldErrs = []\n const newNonFieldErrs = []\n\n if (err?.message) {\n newNonFieldErrs.push(err)\n }\n\n if (Array.isArray(err?.data?.errors)) {\n err.data?.errors.forEach((dataError) => {\n if (dataError?.path) {\n newFieldErrs.push(dataError)\n } else {\n newNonFieldErrs.push(dataError)\n }\n })\n }\n\n return [\n [...fieldErrs, ...newFieldErrs],\n [...nonFieldErrs, ...newNonFieldErrs],\n ]\n },\n [[], []],\n )\n\n setIsValid(false)\n\n dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n errorToast(<FieldErrorsToast errorMessage={err.message || t('error:unknown')} />)\n })\n\n return\n }\n\n const message = errorMessages?.[res.status] || res?.statusText || t('error:unknown')\n\n errorToast(message)\n }\n\n return { formState: contextRef.current.fields, res }\n } catch (err) {\n console.error('Error submitting form', err) // eslint-disable-line no-console\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n errorToast(err.message)\n }\n },\n [\n beforeSubmit,\n startRouteTransition,\n action,\n disableSuccessStatus,\n disableValidationOnSubmit,\n disabled,\n dispatchFields,\n handleResponse,\n method,\n onSubmit,\n onSuccess,\n redirect,\n router,\n t,\n i18n,\n waitForAutocomplete,\n ],\n )\n\n const getFields = useCallback(() => contextRef.current.fields, [])\n\n const getField = useCallback((path: string) => contextRef.current.fields[path], [])\n\n const getData = useCallback(() => reduceFieldsToValues(contextRef.current.fields, true), [])\n\n const getSiblingData = useCallback(\n (path: string) => getSiblingDataFunc(contextRef.current.fields, path),\n [],\n )\n\n const getDataByPath = useCallback<GetDataByPath>(\n (path: string) => getDataByPathFunc(contextRef.current.fields, path),\n [],\n )\n\n const createFormData = useCallback<CreateFormData>(\n async (overrides, { data: dataFromArgs, mergeOverrideData = true }) => {\n let data = dataFromArgs || reduceFieldsToValues(contextRef.current.fields, true)\n\n let file = data?.file\n\n if (docConfig && 'upload' in docConfig && docConfig.upload && file) {\n delete data.file\n\n const handler = getUploadHandler({ collectionSlug })\n\n if (typeof handler === 'function') {\n let filename = file.name\n const clientUploadContext = await handler({\n file,\n updateFilename: (value) => {\n filename = value\n },\n })\n\n file = JSON.stringify({\n clientUploadContext,\n collectionSlug,\n filename,\n mimeType: file.type,\n size: file.size,\n })\n }\n }\n\n if (mergeOverrideData) {\n data = {\n ...data,\n ...overrides,\n }\n } else {\n data = overrides\n }\n\n const dataToSerialize: Record<string, unknown> = {\n _payload: JSON.stringify(data),\n }\n\n if (docConfig && 'upload' in docConfig && docConfig.upload && file) {\n dataToSerialize.file = file\n }\n\n // nullAsUndefineds is important to allow uploads and relationship fields to clear themselves\n const formData = serialize(dataToSerialize, {\n indices: true,\n nullsAsUndefineds: false,\n })\n\n return formData\n },\n [collectionSlug, docConfig, getUploadHandler],\n )\n\n const reset = useCallback(\n async (data: unknown) => {\n const controller = handleAbortRef(abortResetFormRef)\n\n const docPreferences = await getDocPreferences()\n\n const { state: newState } = await getFormState({\n id,\n collectionSlug,\n data,\n docPermissions,\n docPreferences,\n globalSlug,\n locale,\n operation,\n renderAllFields: true,\n schemaPath: collectionSlug ? collectionSlug : globalSlug,\n signal: controller.signal,\n skipValidation: true,\n })\n\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state: newState })\n\n abortResetFormRef.current = null\n },\n [\n collectionSlug,\n dispatchFields,\n globalSlug,\n id,\n operation,\n getFormState,\n docPermissions,\n getDocPreferences,\n locale,\n ],\n )\n\n const replaceState = useCallback(\n (state: FormState) => {\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state })\n },\n [dispatchFields],\n )\n\n const addFieldRow: FormContextType['addFieldRow'] = useCallback(\n ({ blockType, path, rowIndex: rowIndexArg, subFieldState }) => {\n const newRows: unknown[] = getDataByPath(path) || []\n const rowIndex = rowIndexArg === undefined ? newRows.length : rowIndexArg\n\n // dispatch ADD_ROW adds a blank row to local form state.\n // This performs no form state request, as the debounced onChange effect will do that for us.\n dispatchFields({\n type: 'ADD_ROW',\n blockType,\n path,\n rowIndex,\n subFieldState,\n })\n\n setModified(true)\n },\n [dispatchFields, getDataByPath],\n )\n\n const moveFieldRow: FormContextType['moveFieldRow'] = useCallback(\n ({ moveFromIndex, moveToIndex, path }) => {\n dispatchFields({\n type: 'MOVE_ROW',\n moveFromIndex,\n moveToIndex,\n path,\n })\n\n setModified(true)\n },\n [dispatchFields],\n )\n\n const removeFieldRow: FormContextType['removeFieldRow'] = useCallback(\n ({ path, rowIndex }) => {\n dispatchFields({ type: 'REMOVE_ROW', path, rowIndex })\n\n setModified(true)\n },\n [dispatchFields],\n )\n\n const replaceFieldRow: FormContextType['replaceFieldRow'] = useCallback(\n ({ blockType, path, rowIndex: rowIndexArg, subFieldState }) => {\n const currentRows: unknown[] = getDataByPath(path)\n const rowIndex = rowIndexArg === undefined ? currentRows.length : rowIndexArg\n\n dispatchFields({\n type: 'REPLACE_ROW',\n blockType,\n path,\n rowIndex,\n subFieldState,\n })\n\n setModified(true)\n },\n [dispatchFields, getDataByPath],\n )\n\n useEffect(() => {\n const abortOnChange = abortResetFormRef.current\n\n return () => {\n abortAndIgnore(abortOnChange)\n }\n }, [])\n\n useEffect(() => {\n if (initializingFromProps !== undefined) {\n setInitializing(initializingFromProps)\n }\n }, [initializingFromProps])\n\n contextRef.current.submit = submit\n contextRef.current.getFields = getFields\n contextRef.current.getField = getField\n contextRef.current.getData = getData\n contextRef.current.getSiblingData = getSiblingData\n contextRef.current.getDataByPath = getDataByPath\n contextRef.current.validateForm = validateForm\n contextRef.current.createFormData = createFormData\n contextRef.current.setModified = setModified\n contextRef.current.setProcessing = setProcessing\n contextRef.current.setBackgroundProcessing = setBackgroundProcessing\n\n contextRef.current.setSubmitted = setSubmitted\n contextRef.current.setIsValid = setIsValid\n contextRef.current.disabled = disabled\n contextRef.current.setDisabled = setDisabled\n contextRef.current.formRef = formRef\n contextRef.current.reset = reset\n contextRef.current.replaceState = replaceState\n contextRef.current.dispatchFields = dispatchFields\n contextRef.current.addFieldRow = addFieldRow\n contextRef.current.removeFieldRow = removeFieldRow\n contextRef.current.moveFieldRow = moveFieldRow\n contextRef.current.replaceFieldRow = replaceFieldRow\n contextRef.current.uuid = uuid\n contextRef.current.initializing = initializing\n contextRef.current.isValid = isValid\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n useEffect(() => {\n if (typeof disabledFromProps === 'boolean') {\n setDisabled(disabledFromProps)\n }\n }, [disabledFromProps])\n\n useEffect(() => {\n if (typeof submittedFromProps === 'boolean') {\n setSubmitted(submittedFromProps)\n }\n }, [submittedFromProps])\n\n useEffect(() => {\n if (initialState) {\n contextRef.current = { ...initContextState } as FormContextType\n dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n sanitize: true,\n state: initialState,\n })\n }\n }, [initialState, dispatchFields])\n\n useThrottledEffect(\n () => {\n refreshCookie()\n },\n 15000,\n [formState],\n )\n\n useEffect(() => {\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n setModified(false)\n }, [locale])\n\n const classes = [className, baseClass].filter(Boolean).join(' ')\n\n const executeOnChange = useEffectEvent((submitted: boolean) => {\n queueTask(async () => {\n if (Array.isArray(onChange)) {\n let serverState: FormState\n\n for (const onChangeFn of onChange) {\n // Edit view default onChange is in packages/ui/src/views/Edit/index.tsx. This onChange usually sends a form state request\n serverState = await onChangeFn({\n formState: deepCopyObjectSimpleWithoutReactComponents(formState),\n submitted,\n })\n }\n\n dispatchFields({\n type: 'MERGE_SERVER_STATE',\n prevStateRef: prevFormState,\n serverState,\n })\n }\n })\n })\n\n useDebouncedEffect(\n () => {\n if ((isFirstRenderRef.current || !dequal(formState, prevFormState.current)) && modified) {\n executeOnChange(submitted)\n }\n\n prevFormState.current = formState\n isFirstRenderRef.current = false\n },\n [modified, submitted, formState],\n 250,\n )\n\n const DocumentFormContextComponent: React.FC<any> = isDocumentForm\n ? DocumentFormContext\n : React.Fragment\n\n const documentFormContextProps = isDocumentForm\n ? {\n value: contextRef.current,\n }\n : {}\n\n const El: 'form' = (el as unknown as 'form') || 'form'\n\n return (\n <El\n action={typeof action === 'function' ? void action : action}\n className={classes}\n method={method}\n noValidate\n onSubmit={(e) => void contextRef.current.submit({}, e)}\n ref={formRef}\n >\n <DocumentFormContextComponent {...documentFormContextProps}>\n <FormContext value={contextRef.current}>\n <FormWatchContext\n value={{\n fields: formState,\n ...contextRef.current,\n }}\n >\n <SubmittedContext value={submitted}>\n <InitializingContext value={!isMounted || (isMounted && initializing)}>\n <ProcessingContext value={processing}>\n <BackgroundProcessingContext value={backgroundProcessing}>\n <ModifiedContext value={modified}>\n {/* eslint-disable-next-line @eslint-react/no-context-provider */}\n <FormFieldsContext.Provider value={fieldsReducer}>\n {children}\n </FormFieldsContext.Provider>\n </ModifiedContext>\n </BackgroundProcessingContext>\n </ProcessingContext>\n </InitializingContext>\n </SubmittedContext>\n </FormWatchContext>\n </FormContext>\n </DocumentFormContextComponent>\n </El>\n )\n}\n\nexport {\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useAllFormFields,\n useDocumentForm,\n useForm,\n useFormFields,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n useWatchForm,\n} from './context.js'\n\nexport { FormProps }\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,33 @@
1
1
  import React from 'react';
2
+ /**
3
+ * All fields are wrapped in a `FieldPathContext` provider by default.
4
+ * The `useFieldPath` hook will return this value if it exists, not the path the field was explicitly given.
5
+ * This means if you render a field directly, you will need to wrap it with a new `FieldPathContext` provider.
6
+ * Otherwise, it will return the parent's path, not the path it was explicitly given.
7
+ * @example
8
+ * ```tsx
9
+ * 'use client'
10
+ * import React from 'react'
11
+ * import { TextField, FieldPathContext } from '@payloadcms/ui'
12
+ * import type { TextFieldClientComponent } from 'payload'
13
+ *
14
+ * export const MyCustomField: TextFieldClientComponent = (props) => {
15
+ * return (
16
+ * <FieldPathContext value="path.to.some.other.field">
17
+ * <TextField {...props} />
18
+ * </FieldPathContext>
19
+ * )
20
+ * }
21
+ * ```
22
+ *
23
+ * @experimental This is an experimental API and may change at any time. Use at your own discretion.
24
+ */
2
25
  export declare const FieldPathContext: React.Context<string>;
26
+ /**
27
+ * Gets the current field path from the nearest `FieldPathContext` provider.
28
+ * All fields are wrapped in this context by default.
29
+ *
30
+ * @experimental This is an experimental API and may change at any time. Use at your own discretion.
31
+ */
3
32
  export declare const useFieldPath: () => string;
4
33
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/forms/RenderFields/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,eAAO,MAAM,gBAAgB,uBAAyC,CAAA;AAEtE,eAAO,MAAM,YAAY,cASxB,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/forms/RenderFields/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,gBAAgB,uBAAyC,CAAA;AAEtE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,cASxB,CAAA"}
@@ -1,10 +1,38 @@
1
1
  import React from 'react';
2
+ /**
3
+ * All fields are wrapped in a `FieldPathContext` provider by default.
4
+ * The `useFieldPath` hook will return this value if it exists, not the path the field was explicitly given.
5
+ * This means if you render a field directly, you will need to wrap it with a new `FieldPathContext` provider.
6
+ * Otherwise, it will return the parent's path, not the path it was explicitly given.
7
+ * @example
8
+ * ```tsx
9
+ * 'use client'
10
+ * import React from 'react'
11
+ * import { TextField, FieldPathContext } from '@payloadcms/ui'
12
+ * import type { TextFieldClientComponent } from 'payload'
13
+ *
14
+ * export const MyCustomField: TextFieldClientComponent = (props) => {
15
+ * return (
16
+ * <FieldPathContext value="path.to.some.other.field">
17
+ * <TextField {...props} />
18
+ * </FieldPathContext>
19
+ * )
20
+ * }
21
+ * ```
22
+ *
23
+ * @experimental This is an experimental API and may change at any time. Use at your own discretion.
24
+ */
2
25
  export const FieldPathContext = React.createContext(undefined);
26
+ /**
27
+ * Gets the current field path from the nearest `FieldPathContext` provider.
28
+ * All fields are wrapped in this context by default.
29
+ *
30
+ * @experimental This is an experimental API and may change at any time. Use at your own discretion.
31
+ */
3
32
  export const useFieldPath = () => {
4
33
  const context = React.useContext(FieldPathContext);
5
34
  if (!context) {
6
- // swallow the error, not all fields are wrapped in a FieldPathContext
7
- return undefined;
35
+ return;
8
36
  }
9
37
  return context;
10
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":["React","FieldPathContext","createContext","undefined","useFieldPath","context","useContext"],"sources":["../../../src/forms/RenderFields/context.ts"],"sourcesContent":["import React from 'react'\n\nexport const FieldPathContext = React.createContext<string>(undefined)\n\nexport const useFieldPath = () => {\n const context = React.useContext(FieldPathContext)\n\n if (!context) {\n // swallow the error, not all fields are wrapped in a FieldPathContext\n return undefined\n }\n\n return context\n}\n"],"mappings":"AAAA,OAAOA,KAAA,MAAW;AAElB,OAAO,MAAMC,gBAAA,GAAmBD,KAAA,CAAME,aAAa,CAASC,SAAA;AAE5D,OAAO,MAAMC,YAAA,GAAeA,CAAA;EAC1B,MAAMC,OAAA,GAAUL,KAAA,CAAMM,UAAU,CAACL,gBAAA;EAEjC,IAAI,CAACI,OAAA,EAAS;IACZ;IACA,OAAOF,SAAA;EACT;EAEA,OAAOE,OAAA;AACT","ignoreList":[]}
1
+ {"version":3,"file":"context.js","names":["React","FieldPathContext","createContext","undefined","useFieldPath","context","useContext"],"sources":["../../../src/forms/RenderFields/context.ts"],"sourcesContent":["import React from 'react'\n\n/**\n * All fields are wrapped in a `FieldPathContext` provider by default.\n * The `useFieldPath` hook will return this value if it exists, not the path the field was explicitly given.\n * This means if you render a field directly, you will need to wrap it with a new `FieldPathContext` provider.\n * Otherwise, it will return the parent's path, not the path it was explicitly given.\n * @example\n * ```tsx\n * 'use client'\n * import React from 'react'\n * import { TextField, FieldPathContext } from '@payloadcms/ui'\n * import type { TextFieldClientComponent } from 'payload'\n *\n * export const MyCustomField: TextFieldClientComponent = (props) => {\n * return (\n * <FieldPathContext value=\"path.to.some.other.field\">\n * <TextField {...props} />\n * </FieldPathContext>\n * )\n * }\n * ```\n *\n * @experimental This is an experimental API and may change at any time. Use at your own discretion.\n */\nexport const FieldPathContext = React.createContext<string>(undefined)\n\n/**\n * Gets the current field path from the nearest `FieldPathContext` provider.\n * All fields are wrapped in this context by default.\n *\n * @experimental This is an experimental API and may change at any time. Use at your own discretion.\n */\nexport const useFieldPath = () => {\n const context = React.useContext(FieldPathContext)\n\n if (!context) {\n // swallow the error, not all fields are wrapped in a FieldPathContext\n return undefined\n }\n\n return context\n}\n"],"mappings":"AAAA,OAAOA,KAAA,MAAW;AAElB;;;;;;;;;;;;;;;;;;;;;;;AAuBA,OAAO,MAAMC,gBAAA,GAAmBD,KAAA,CAAME,aAAa,CAASC,SAAA;AAE5D;;;;;;AAMA,OAAO,MAAMC,YAAA,GAAeA,CAAA;EAC1B,MAAAC,OAAA,GAAgBL,KAAA,CAAAM,UAAA,CAAAL,gBAAiB;EAAA,KAE5BI,OAAA;IAAA;EAAA;EAAA,OAKEA,OAAA;AAAA,CACT","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { ClientCollectionConfig, ClientConfig, ClientGlobalConfig, CollectionSlug, GlobalSlug, UnsanitizedClientConfig } from 'payload';
1
+ import type { ClientCollectionConfig, ClientConfig, ClientGlobalConfig, CollectionSlug, GlobalSlug } from 'payload';
2
2
  import React from 'react';
3
3
  type GetEntityConfigFn = {
4
4
  (args: {
@@ -26,8 +26,23 @@ export type ClientConfigContext = {
26
26
  };
27
27
  export declare const ConfigProvider: React.FC<{
28
28
  readonly children: React.ReactNode;
29
- readonly config: ClientConfig | UnsanitizedClientConfig;
29
+ readonly config: ClientConfig;
30
30
  }>;
31
31
  export declare const useConfig: () => ClientConfigContext;
32
+ /**
33
+ * This provider shadows the `ConfigProvider` on the _page_ level, allowing us to
34
+ * update the config when needed, e.g. after authentication.
35
+ * The layout `ConfigProvider` is not updated on page navigation / authentication,
36
+ * as the layout does not re-render in those cases.
37
+ *
38
+ * If the config here has the same reference as the config from the layout, we
39
+ * simply reuse the context from the layout to avoid unnecessary re-renders.
40
+ *
41
+ * @experimental This component is experimental and may change or be removed in future releases. Use at your own discretion.
42
+ */
43
+ export declare const PageConfigProvider: React.FC<{
44
+ readonly children: React.ReactNode;
45
+ readonly config: ClientConfig;
46
+ }>;
32
47
  export {};
33
48
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Config/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,uBAAuB,EACxB,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAgF,MAAM,OAAO,CAAA;AAEpG,KAAK,iBAAiB,GAAG;IAGvB,CAAC,IAAI,EAAE;QAAE,cAAc,EAAE,EAAE,GAAG,cAAc,CAAC;QAAC,UAAU,CAAC,EAAE,KAAK,CAAA;KAAE,GAAG,sBAAsB,CAAA;IAI3F,CAAC,IAAI,EAAE;QAAE,cAAc,CAAC,EAAE,KAAK,CAAC;QAAC,UAAU,EAAE,EAAE,GAAG,UAAU,CAAA;KAAE,GAAG,kBAAkB,CAAA;IAGnF,CAAC,IAAI,EAAE;QACL,cAAc,CAAC,EAAE,EAAE,GAAG,cAAc,CAAA;QACpC,UAAU,CAAC,EAAE,EAAE,GAAG,UAAU,CAAA;KAC7B,GAAG,sBAAsB,GAAG,kBAAkB,GAAG,IAAI,CAAA;CACvD,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,YAAY,CAAA;IACpB;;;;OAIG;IACH,eAAe,EAAE,iBAAiB,CAAA;IAClC,SAAS,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAA;CAC1C,CAAA;AAsBD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,uBAAuB,CAAA;CACxD,CAsDA,CAAA;AAED,eAAO,MAAM,SAAS,QAAO,mBAA6C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Config/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,UAAU,EACX,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAgF,MAAM,OAAO,CAAA;AAEpG,KAAK,iBAAiB,GAAG;IAGvB,CAAC,IAAI,EAAE;QAAE,cAAc,EAAE,EAAE,GAAG,cAAc,CAAC;QAAC,UAAU,CAAC,EAAE,KAAK,CAAA;KAAE,GAAG,sBAAsB,CAAA;IAI3F,CAAC,IAAI,EAAE;QAAE,cAAc,CAAC,EAAE,KAAK,CAAC;QAAC,UAAU,EAAE,EAAE,GAAG,UAAU,CAAA;KAAE,GAAG,kBAAkB,CAAA;IAGnF,CAAC,IAAI,EAAE;QACL,cAAc,CAAC,EAAE,EAAE,GAAG,cAAc,CAAA;QACpC,UAAU,CAAC,EAAE,EAAE,GAAG,UAAU,CAAA;KAC7B,GAAG,sBAAsB,GAAG,kBAAkB,GAAG,IAAI,CAAA;CACvD,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,YAAY,CAAA;IACpB;;;;OAIG;IACH,eAAe,EAAE,iBAAiB,CAAA;IAClC,SAAS,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAA;CAC1C,CAAA;AAID,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAC9B,CAqDA,CAAA;AAED,eAAO,MAAM,SAAS,QAAO,mBAA6C,CAAA;AAE1E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAC9B,CAyBA,CAAA"}
@@ -1,33 +1,16 @@
1
1
  /* eslint-disable perfectionist/sort-object-types */ // Need to disable this rule because the order of the overloads is important
2
2
  'use client';
3
3
 
4
+ import { c as _c } from "react/compiler-runtime";
4
5
  import { jsx as _jsx } from "react/jsx-runtime";
5
6
  import React, { createContext, use, useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
7
  const RootConfigContext = /*#__PURE__*/createContext(undefined);
7
- function sanitizeClientConfig(unSanitizedConfig) {
8
- if (!unSanitizedConfig?.blocks?.length || unSanitizedConfig.blocksMap) {
9
- ;
10
- unSanitizedConfig.blocksMap = {};
11
- return unSanitizedConfig;
12
- }
13
- const sanitizedConfig = {
14
- ...unSanitizedConfig
15
- };
16
- sanitizedConfig.blocksMap = {};
17
- for (const block of unSanitizedConfig.blocks) {
18
- sanitizedConfig.blocksMap[block.slug] = block;
19
- }
20
- return sanitizedConfig;
21
- }
22
8
  export const ConfigProvider = ({
23
9
  children,
24
10
  config: configFromProps
25
11
  }) => {
26
- const [config, setConfigFn] = useState(() => sanitizeClientConfig(configFromProps));
12
+ const [config, setConfig] = useState(configFromProps);
27
13
  const isFirstRenderRef = useRef(true);
28
- const setConfig = useCallback(newConfig => {
29
- setConfigFn(sanitizeClientConfig(newConfig));
30
- }, []);
31
14
  // Need to update local config state if config from props changes, for HMR.
32
15
  // That way, config changes will be updated in the UI immediately without needing a refresh.
33
16
  useEffect(() => {
@@ -68,11 +51,65 @@ export const ConfigProvider = ({
68
51
  config,
69
52
  getEntityConfig,
70
53
  setConfig
71
- }), [config, getEntityConfig]);
54
+ }), [config, getEntityConfig, setConfig]);
72
55
  return /*#__PURE__*/_jsx(RootConfigContext, {
73
56
  value: value,
74
57
  children: children
75
58
  });
76
59
  };
77
60
  export const useConfig = () => use(RootConfigContext);
61
+ /**
62
+ * This provider shadows the `ConfigProvider` on the _page_ level, allowing us to
63
+ * update the config when needed, e.g. after authentication.
64
+ * The layout `ConfigProvider` is not updated on page navigation / authentication,
65
+ * as the layout does not re-render in those cases.
66
+ *
67
+ * If the config here has the same reference as the config from the layout, we
68
+ * simply reuse the context from the layout to avoid unnecessary re-renders.
69
+ *
70
+ * @experimental This component is experimental and may change or be removed in future releases. Use at your own discretion.
71
+ */
72
+ export const PageConfigProvider = t0 => {
73
+ const $ = _c(7);
74
+ const {
75
+ children,
76
+ config: configFromProps
77
+ } = t0;
78
+ const {
79
+ config: rootConfig,
80
+ setConfig: setRootConfig
81
+ } = useConfig();
82
+ let t1;
83
+ let t2;
84
+ if ($[0] !== configFromProps || $[1] !== setRootConfig) {
85
+ t1 = () => {
86
+ setRootConfig(configFromProps);
87
+ };
88
+ t2 = [configFromProps, setRootConfig];
89
+ $[0] = configFromProps;
90
+ $[1] = setRootConfig;
91
+ $[2] = t1;
92
+ $[3] = t2;
93
+ } else {
94
+ t1 = $[2];
95
+ t2 = $[3];
96
+ }
97
+ useEffect(t1, t2);
98
+ if (rootConfig !== configFromProps && rootConfig.unauthenticated !== configFromProps.unauthenticated) {
99
+ let t3;
100
+ if ($[4] !== children || $[5] !== configFromProps) {
101
+ t3 = _jsx(ConfigProvider, {
102
+ config: configFromProps,
103
+ children
104
+ });
105
+ $[4] = children;
106
+ $[5] = configFromProps;
107
+ $[6] = t3;
108
+ } else {
109
+ t3 = $[6];
110
+ }
111
+ return t3;
112
+ }
113
+ return children;
114
+ };
78
115
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","RootConfigContext","undefined","sanitizeClientConfig","unSanitizedConfig","blocks","length","blocksMap","sanitizedConfig","block","slug","ConfigProvider","children","config","configFromProps","setConfigFn","isFirstRenderRef","setConfig","newConfig","current","collectionsBySlug","globalsBySlug","collection","collections","global","globals","getEntityConfig","args","collectionSlug","globalSlug","value","_jsx","useConfig"],"sources":["../../../src/providers/Config/index.tsx"],"sourcesContent":["/* eslint-disable perfectionist/sort-object-types */ // Need to disable this rule because the order of the overloads is important\n'use client'\nimport type {\n ClientCollectionConfig,\n ClientConfig,\n ClientGlobalConfig,\n CollectionSlug,\n GlobalSlug,\n UnsanitizedClientConfig,\n} from 'payload'\n\nimport React, { createContext, use, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\ntype GetEntityConfigFn = {\n // Overload #1: collectionSlug only\n // @todo remove \"{} |\" in 4.0, which would be a breaking change\n (args: { collectionSlug: {} | CollectionSlug; globalSlug?: never }): ClientCollectionConfig\n\n // Overload #2: globalSlug only\n // @todo remove \"{} |\" in 4.0, which would be a breaking change\n (args: { collectionSlug?: never; globalSlug: {} | GlobalSlug }): ClientGlobalConfig\n\n // Overload #3: both/none (fall back to union | null)\n (args: {\n collectionSlug?: {} | CollectionSlug\n globalSlug?: {} | GlobalSlug\n }): ClientCollectionConfig | ClientGlobalConfig | null\n}\n\nexport type ClientConfigContext = {\n config: ClientConfig\n /**\n * Get a collection or global config by its slug. This is preferred over\n * using `config.collections.find` or `config.globals.find`, because\n * getEntityConfig uses a lookup map for O(1) lookups.\n */\n getEntityConfig: GetEntityConfigFn\n setConfig: (config: ClientConfig) => void\n}\n\nconst RootConfigContext = createContext<ClientConfigContext | undefined>(undefined)\n\nfunction sanitizeClientConfig(\n unSanitizedConfig: ClientConfig | UnsanitizedClientConfig,\n): ClientConfig {\n if (!unSanitizedConfig?.blocks?.length || (unSanitizedConfig as ClientConfig).blocksMap) {\n ;(unSanitizedConfig as ClientConfig).blocksMap = {}\n return unSanitizedConfig as ClientConfig\n }\n const sanitizedConfig: ClientConfig = { ...unSanitizedConfig } as ClientConfig\n\n sanitizedConfig.blocksMap = {}\n\n for (const block of unSanitizedConfig.blocks) {\n sanitizedConfig.blocksMap[block.slug] = block\n }\n\n return sanitizedConfig\n}\n\nexport const ConfigProvider: React.FC<{\n readonly children: React.ReactNode\n readonly config: ClientConfig | UnsanitizedClientConfig\n}> = ({ children, config: configFromProps }) => {\n const [config, setConfigFn] = useState<ClientConfig>(() => sanitizeClientConfig(configFromProps))\n\n const isFirstRenderRef = useRef(true)\n\n const setConfig = useCallback((newConfig: ClientConfig | UnsanitizedClientConfig) => {\n setConfigFn(sanitizeClientConfig(newConfig))\n }, [])\n\n // Need to update local config state if config from props changes, for HMR.\n // That way, config changes will be updated in the UI immediately without needing a refresh.\n useEffect(() => {\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false\n return\n }\n\n setConfig(configFromProps)\n }, [configFromProps, setConfig])\n\n // Build lookup maps for collections and globals so we can do O(1) lookups by slug\n const { collectionsBySlug, globalsBySlug } = useMemo(() => {\n const collectionsBySlug: Record<string, ClientCollectionConfig> = {}\n const globalsBySlug: Record<string, ClientGlobalConfig> = {}\n\n for (const collection of config.collections) {\n collectionsBySlug[collection.slug] = collection\n }\n\n for (const global of config.globals) {\n globalsBySlug[global.slug] = global\n }\n\n return { collectionsBySlug, globalsBySlug }\n }, [config])\n\n const getEntityConfig = useCallback<GetEntityConfigFn>(\n (args) => {\n if ('collectionSlug' in args) {\n return collectionsBySlug[args.collectionSlug] ?? null\n }\n\n if ('globalSlug' in args) {\n return globalsBySlug[args.globalSlug] ?? null\n }\n\n return null as any\n },\n [collectionsBySlug, globalsBySlug],\n )\n\n const value = useMemo(() => ({ config, getEntityConfig, setConfig }), [config, getEntityConfig])\n\n return <RootConfigContext value={value}>{children}</RootConfigContext>\n}\n\nexport const useConfig = (): ClientConfigContext => use(RootConfigContext)\n"],"mappings":"AAAA,sDAAsD;AACtD;;;AAUA,OAAOA,KAAA,IAASC,aAAa,EAAEC,GAAG,EAAEC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AA6B7F,MAAMC,iBAAA,gBAAoBP,aAAA,CAA+CQ,SAAA;AAEzE,SAASC,qBACPC,iBAAyD;EAEzD,IAAI,CAACA,iBAAA,EAAmBC,MAAA,EAAQC,MAAA,IAAUF,iBAAC,CAAmCG,SAAS,EAAE;;IACrFH,iBAAA,CAAmCG,SAAS,GAAG,CAAC;IAClD,OAAOH,iBAAA;EACT;EACA,MAAMI,eAAA,GAAgC;IAAE,GAAGJ;EAAkB;EAE7DI,eAAA,CAAgBD,SAAS,GAAG,CAAC;EAE7B,KAAK,MAAME,KAAA,IAASL,iBAAA,CAAkBC,MAAM,EAAE;IAC5CG,eAAA,CAAgBD,SAAS,CAACE,KAAA,CAAMC,IAAI,CAAC,GAAGD,KAAA;EAC1C;EAEA,OAAOD,eAAA;AACT;AAEA,OAAO,MAAMG,cAAA,GAGRA,CAAC;EAAEC,QAAQ;EAAEC,MAAA,EAAQC;AAAe,CAAE;EACzC,MAAM,CAACD,MAAA,EAAQE,WAAA,CAAY,GAAGf,QAAA,CAAuB,MAAMG,oBAAA,CAAqBW,eAAA;EAEhF,MAAME,gBAAA,GAAmBjB,MAAA,CAAO;EAEhC,MAAMkB,SAAA,GAAYrB,WAAA,CAAasB,SAAA;IAC7BH,WAAA,CAAYZ,oBAAA,CAAqBe,SAAA;EACnC,GAAG,EAAE;EAEL;EACA;EACArB,SAAA,CAAU;IACR,IAAImB,gBAAA,CAAiBG,OAAO,EAAE;MAC5BH,gBAAA,CAAiBG,OAAO,GAAG;MAC3B;IACF;IAEAF,SAAA,CAAUH,eAAA;EACZ,GAAG,CAACA,eAAA,EAAiBG,SAAA,CAAU;EAE/B;EACA,MAAM;IAAEG,iBAAiB,EAAjBA,mBAAiB;IAAEC,aAAa,EAAbA;EAAa,CAAE,GAAGvB,OAAA,CAAQ;IACnD,MAAMsB,iBAAA,GAA4D,CAAC;IACnE,MAAMC,aAAA,GAAoD,CAAC;IAE3D,KAAK,MAAMC,UAAA,IAAcT,MAAA,CAAOU,WAAW,EAAE;MAC3CH,iBAAiB,CAACE,UAAA,CAAWZ,IAAI,CAAC,GAAGY,UAAA;IACvC;IAEA,KAAK,MAAME,MAAA,IAAUX,MAAA,CAAOY,OAAO,EAAE;MACnCJ,aAAa,CAACG,MAAA,CAAOd,IAAI,CAAC,GAAGc,MAAA;IAC/B;IAEA,OAAO;MAAEJ,iBAAA;MAAmBC;IAAc;EAC5C,GAAG,CAACR,MAAA,CAAO;EAEX,MAAMa,eAAA,GAAkB9B,WAAA,CACrB+B,IAAA;IACC,IAAI,oBAAoBA,IAAA,EAAM;MAC5B,OAAOP,mBAAiB,CAACO,IAAA,CAAKC,cAAc,CAAC,IAAI;IACnD;IAEA,IAAI,gBAAgBD,IAAA,EAAM;MACxB,OAAON,eAAa,CAACM,IAAA,CAAKE,UAAU,CAAC,IAAI;IAC3C;IAEA,OAAO;EACT,GACA,CAACT,mBAAA,EAAmBC,eAAA,CAAc;EAGpC,MAAMS,KAAA,GAAQhC,OAAA,CAAQ,OAAO;IAAEe,MAAA;IAAQa,eAAA;IAAiBT;EAAU,IAAI,CAACJ,MAAA,EAAQa,eAAA,CAAgB;EAE/F,oBAAOK,IAAA,CAAC9B,iBAAA;IAAkB6B,KAAA,EAAOA,KAAA;cAAQlB;;AAC3C;AAEA,OAAO,MAAMoB,SAAA,GAAYA,CAAA,KAA2BrC,GAAA,CAAIM,iBAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","RootConfigContext","undefined","ConfigProvider","children","config","configFromProps","setConfig","isFirstRenderRef","current","collectionsBySlug","globalsBySlug","collection","collections","slug","global","globals","getEntityConfig","args","collectionSlug","globalSlug","value","_jsx","useConfig","PageConfigProvider","t0","$","rootConfig","setRootConfig","t1","t2","unauthenticated","t3"],"sources":["../../../src/providers/Config/index.tsx"],"sourcesContent":["/* eslint-disable perfectionist/sort-object-types */ // Need to disable this rule because the order of the overloads is important\n'use client'\nimport type {\n ClientCollectionConfig,\n ClientConfig,\n ClientGlobalConfig,\n CollectionSlug,\n GlobalSlug,\n} from 'payload'\n\nimport React, { createContext, use, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\ntype GetEntityConfigFn = {\n // Overload #1: collectionSlug only\n // @todo remove \"{} |\" in 4.0, which would be a breaking change\n (args: { collectionSlug: {} | CollectionSlug; globalSlug?: never }): ClientCollectionConfig\n\n // Overload #2: globalSlug only\n // @todo remove \"{} |\" in 4.0, which would be a breaking change\n (args: { collectionSlug?: never; globalSlug: {} | GlobalSlug }): ClientGlobalConfig\n\n // Overload #3: both/none (fall back to union | null)\n (args: {\n collectionSlug?: {} | CollectionSlug\n globalSlug?: {} | GlobalSlug\n }): ClientCollectionConfig | ClientGlobalConfig | null\n}\n\nexport type ClientConfigContext = {\n config: ClientConfig\n /**\n * Get a collection or global config by its slug. This is preferred over\n * using `config.collections.find` or `config.globals.find`, because\n * getEntityConfig uses a lookup map for O(1) lookups.\n */\n getEntityConfig: GetEntityConfigFn\n setConfig: (config: ClientConfig) => void\n}\n\nconst RootConfigContext = createContext<ClientConfigContext | undefined>(undefined)\n\nexport const ConfigProvider: React.FC<{\n readonly children: React.ReactNode\n readonly config: ClientConfig\n}> = ({ children, config: configFromProps }) => {\n const [config, setConfig] = useState<ClientConfig>(configFromProps)\n\n const isFirstRenderRef = useRef(true)\n\n // Need to update local config state if config from props changes, for HMR.\n // That way, config changes will be updated in the UI immediately without needing a refresh.\n useEffect(() => {\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false\n return\n }\n\n setConfig(configFromProps)\n }, [configFromProps, setConfig])\n\n // Build lookup maps for collections and globals so we can do O(1) lookups by slug\n const { collectionsBySlug, globalsBySlug } = useMemo(() => {\n const collectionsBySlug: Record<string, ClientCollectionConfig> = {}\n const globalsBySlug: Record<string, ClientGlobalConfig> = {}\n\n for (const collection of config.collections) {\n collectionsBySlug[collection.slug] = collection\n }\n\n for (const global of config.globals) {\n globalsBySlug[global.slug] = global\n }\n\n return { collectionsBySlug, globalsBySlug }\n }, [config])\n\n const getEntityConfig = useCallback<GetEntityConfigFn>(\n (args) => {\n if ('collectionSlug' in args) {\n return collectionsBySlug[args.collectionSlug] ?? null\n }\n\n if ('globalSlug' in args) {\n return globalsBySlug[args.globalSlug] ?? null\n }\n\n return null as any\n },\n [collectionsBySlug, globalsBySlug],\n )\n\n const value = useMemo(\n () => ({ config, getEntityConfig, setConfig }),\n [config, getEntityConfig, setConfig],\n )\n\n return <RootConfigContext value={value}>{children}</RootConfigContext>\n}\n\nexport const useConfig = (): ClientConfigContext => use(RootConfigContext)\n\n/**\n * This provider shadows the `ConfigProvider` on the _page_ level, allowing us to\n * update the config when needed, e.g. after authentication.\n * The layout `ConfigProvider` is not updated on page navigation / authentication,\n * as the layout does not re-render in those cases.\n *\n * If the config here has the same reference as the config from the layout, we\n * simply reuse the context from the layout to avoid unnecessary re-renders.\n *\n * @experimental This component is experimental and may change or be removed in future releases. Use at your own discretion.\n */\nexport const PageConfigProvider: React.FC<{\n readonly children: React.ReactNode\n readonly config: ClientConfig\n}> = ({ children, config: configFromProps }) => {\n const { config: rootConfig, setConfig: setRootConfig } = useConfig()\n\n /**\n * This `useEffect` is required in order for the _page_ to be able to refresh the client config,\n * which may have been cached on the _layout_ level, where the `ConfigProvider` is managed.\n * Since the layout does not re-render on page navigation / authentication, we need to manually\n * update the config, as the user may have been authenticated in the process, which affects the client config.\n */\n useEffect(() => {\n setRootConfig(configFromProps)\n }, [configFromProps, setRootConfig])\n\n // If this component receives a different config than what is in context from the layout, it is stale.\n // While stale, we instantiate a new context provider that provides the new config until the root context is updated.\n // Unfortunately, referential equality alone does not work bc the reference is lost during server/client serialization,\n // so we need to also compare the `unauthenticated` property.\n if (\n rootConfig !== configFromProps &&\n rootConfig.unauthenticated !== configFromProps.unauthenticated\n ) {\n return <ConfigProvider config={configFromProps}>{children}</ConfigProvider>\n }\n\n return children\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"buildFormState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACf,MAAM,SAAS,CAAA;AAYhB,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAA;CACnC,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,CACA;IACE,OAAO,EAAE,MAAM,CAAA;CAChB,GACD,WAAW,CACd,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAAG,2BAA2B,CAAA;AAE1F,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAChD,kBAAkB,EAClB,OAAO,CAAC,oBAAoB,CAAC,CAsD9B,CAAA;AAED,eAAO,MAAM,cAAc,SACnB,kBAAkB,KACvB,OAAO,CAAC,2BAA2B,CA0JrC,CAAA"}
1
+ {"version":3,"file":"buildFormState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACf,MAAM,SAAS,CAAA;AAYhB,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAA;CACnC,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,CACA;IACE,OAAO,EAAE,MAAM,CAAA;CAChB,GACD,WAAW,CACd,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAAG,2BAA2B,CAAA;AAE1F,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAChD,kBAAkB,EAClB,OAAO,CAAC,oBAAoB,CAAC,CAsD9B,CAAA;AAED,eAAO,MAAM,cAAc,SACnB,kBAAkB,KACvB,OAAO,CAAC,2BAA2B,CAgKrC,CAAA"}
@@ -85,6 +85,7 @@ export const buildFormState = async args => {
85
85
  returnLockStatus,
86
86
  schemaPath = collectionSlug || globalSlug,
87
87
  select,
88
+ skipClientConfigAuth,
88
89
  skipValidation,
89
90
  updateLastEdited
90
91
  } = args;
@@ -104,7 +105,7 @@ export const buildFormState = async args => {
104
105
  config,
105
106
  i18n,
106
107
  importMap: req.payload.importMap,
107
- user: req.user
108
+ user: skipClientConfigAuth ? true : req.user
108
109
  }),
109
110
  globalSlug,
110
111
  i18n,