@payloadcms/ui 3.0.0-alpha.46 → 3.0.0-alpha.48

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 (74) hide show
  1. package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  2. package/dist/elements/DocumentDrawer/DrawerContent.js +22 -14
  3. package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
  4. package/dist/elements/DocumentDrawer/types.d.ts +3 -1
  5. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  6. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  7. package/dist/elements/DocumentHeader/index.d.ts.map +1 -1
  8. package/dist/elements/DocumentHeader/index.js +2 -3
  9. package/dist/elements/DocumentHeader/index.js.map +1 -1
  10. package/dist/elements/RenderTitle/index.d.ts +1 -2
  11. package/dist/elements/RenderTitle/index.d.ts.map +1 -1
  12. package/dist/elements/RenderTitle/index.js +2 -3
  13. package/dist/elements/RenderTitle/index.js.map +1 -1
  14. package/dist/elements/RenderTitle/types.d.ts +1 -0
  15. package/dist/elements/RenderTitle/types.d.ts.map +1 -1
  16. package/dist/elements/RenderTitle/types.js.map +1 -1
  17. package/dist/elements/ThumbnailCard/index.d.ts.map +1 -1
  18. package/dist/elements/ThumbnailCard/index.js +8 -4
  19. package/dist/elements/ThumbnailCard/index.js.map +1 -1
  20. package/dist/elements/ThumbnailCard/types.d.ts +4 -2
  21. package/dist/elements/ThumbnailCard/types.d.ts.map +1 -1
  22. package/dist/elements/ThumbnailCard/types.js.map +1 -1
  23. package/dist/forms/Form/index.d.ts.map +1 -1
  24. package/dist/forms/Form/index.js +5 -8
  25. package/dist/forms/Form/index.js.map +1 -1
  26. package/dist/forms/Form/mergeServerFormState.d.ts +7 -0
  27. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  28. package/dist/forms/Form/mergeServerFormState.js +7 -1
  29. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  30. package/dist/forms/Label/index.d.ts.map +1 -1
  31. package/dist/forms/Label/index.js +7 -1
  32. package/dist/forms/Label/index.js.map +1 -1
  33. package/dist/forms/RenderFields/RenderField.js +2 -2
  34. package/dist/forms/RenderFields/RenderField.js.map +1 -1
  35. package/dist/forms/fields/Array/index.d.ts.map +1 -1
  36. package/dist/forms/fields/Array/index.js +0 -1
  37. package/dist/forms/fields/Array/index.js.map +1 -1
  38. package/dist/forms/fields/Blocks/index.d.ts.map +1 -1
  39. package/dist/forms/fields/Blocks/index.js +0 -1
  40. package/dist/forms/fields/Blocks/index.js.map +1 -1
  41. package/dist/forms/fields/Checkbox/index.d.ts.map +1 -1
  42. package/dist/forms/fields/Checkbox/index.js +2 -1
  43. package/dist/forms/fields/Checkbox/index.js.map +1 -1
  44. package/dist/forms/fields/JSON/index.d.ts.map +1 -1
  45. package/dist/forms/fields/JSON/index.js +4 -2
  46. package/dist/forms/fields/JSON/index.js.map +1 -1
  47. package/dist/forms/fields/Relationship/optionsReducer.d.ts.map +1 -1
  48. package/dist/forms/fields/Relationship/optionsReducer.js +12 -8
  49. package/dist/forms/fields/Relationship/optionsReducer.js.map +1 -1
  50. package/dist/forms/fields/Tabs/index.d.ts.map +1 -1
  51. package/dist/forms/fields/Tabs/index.js +4 -5
  52. package/dist/forms/fields/Tabs/index.js.map +1 -1
  53. package/dist/forms/fields/Tabs/types.d.ts +2 -0
  54. package/dist/forms/fields/Tabs/types.d.ts.map +1 -1
  55. package/dist/forms/fields/Tabs/types.js.map +1 -1
  56. package/dist/forms/utilities/buildStateFromSchema/addFieldStatePromise.d.ts.map +1 -1
  57. package/dist/forms/utilities/buildStateFromSchema/addFieldStatePromise.js +11 -1
  58. package/dist/forms/utilities/buildStateFromSchema/addFieldStatePromise.js.map +1 -1
  59. package/dist/hooks/usePayloadAPI.d.ts.map +1 -1
  60. package/dist/hooks/usePayloadAPI.js +12 -2
  61. package/dist/hooks/usePayloadAPI.js.map +1 -1
  62. package/dist/prod/styles.css +1 -1
  63. package/dist/utilities/buildComponentMap/mapFields.d.ts.map +1 -1
  64. package/dist/utilities/buildComponentMap/mapFields.js +6 -9
  65. package/dist/utilities/buildComponentMap/mapFields.js.map +1 -1
  66. package/dist/utilities/formatDocTitle.d.ts +7 -7
  67. package/dist/utilities/formatDocTitle.d.ts.map +1 -1
  68. package/dist/utilities/formatDocTitle.js +21 -16
  69. package/dist/utilities/formatDocTitle.js.map +1 -1
  70. package/dist/utilities/generateFieldID.d.ts +2 -0
  71. package/dist/utilities/generateFieldID.d.ts.map +1 -0
  72. package/dist/utilities/generateFieldID.js +5 -0
  73. package/dist/utilities/generateFieldID.js.map +1 -0
  74. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/forms/Form/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload/types'\n\n/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\nimport isDeepEqual from 'deep-equal'\nimport { useRouter } from 'next/navigation.js'\nimport { serialize } from 'object-to-formdata'\nimport { wait } from 'payload/utilities'\nimport QueryString from 'qs'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport type { Context as FormContextType, GetDataByPath, Props, SubmitOptions } from './types.js'\n\nimport { useDebouncedEffect } from '../../hooks/useDebouncedEffect.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 { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/OperationProvider/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { getFormState } from '../../utilities/getFormState.js'\nimport {\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n} from './context.js'\nimport errorMessages from './errorMessages.js'\nimport { fieldReducer } from './fieldReducer.js'\nimport getDataByPathFunc from './getDataByPath.js'\nimport getSiblingDataFunc from './getSiblingData.js'\nimport initContextState from './initContextState.js'\nimport { mergeServerFormState } from './mergeServerFormState.js'\nimport reduceFieldsToValues from './reduceFieldsToValues.js'\n\nconst baseClass = 'form'\n\nconst Form: React.FC<Props> = (props) => {\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n\n const {\n action,\n children,\n className,\n disableSuccessStatus,\n disabled,\n // fields: fieldsFromProps = collection?.fields || global?.fields,\n beforeSubmit,\n handleResponse,\n initialState, // fully formed initial field state\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 { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { refreshCookie, user } = useAuth()\n const operation = useOperation()\n const { formQueryParams } = useFormQueryParams()\n\n const config = useConfig()\n const {\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const [modified, setModified] = useState(false)\n const [processing, setProcessing] = useState(false)\n const [submitted, setSubmitted] = useState(false)\n const formRef = useRef<HTMLFormElement>(null)\n const contextRef = useRef({} as FormContextType)\n\n const fieldsReducer = useReducer(fieldReducer, {}, () => initialState)\n /**\n * `fields` is the current, up-to-date state/data of all fields in the form. It can be modified by using dispatchFields,\n * which calls the fieldReducer, which then updates the state.\n */\n const [fields, dispatchFields] = fieldsReducer\n\n contextRef.current.fields = fields\n\n const validateForm = useCallback(async () => {\n const validatedFieldState = {}\n let isValid = true\n\n const dataFromContext = contextRef.current.getData()\n const data = dataFromContext\n\n const validationPromises = Object.entries(contextRef.current.fields).map(\n async ([path, field]) => {\n const validatedField = {\n ...field,\n valid: true,\n }\n\n if (field.passesCondition !== false) {\n let validationResult: boolean | string = true\n\n if (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 id,\n config,\n data,\n operation,\n siblingData: contextRef.current.getSiblingData(path),\n t,\n user,\n })\n }\n\n if (typeof validationResult === 'string') {\n validatedField.errorMessage = validationResult\n validatedField.valid = false\n isValid = false\n }\n }\n\n validatedFieldState[path] = validatedField\n },\n )\n\n await Promise.all(validationPromises)\n\n if (!isDeepEqual(contextRef.current.fields, validatedFieldState)) {\n dispatchFields({ type: 'REPLACE_STATE', state: validatedFieldState })\n }\n\n return isValid\n }, [id, user, operation, t, dispatchFields, config])\n\n const submit = useCallback(\n async (options: SubmitOptions = {}, e): Promise<void> => {\n const {\n action: actionArg,\n method: methodToUse = method,\n overrides = {},\n skipValidation,\n } = options\n\n if (disabled) {\n if (e) {\n e.preventDefault()\n }\n return\n }\n\n if (e) {\n e.stopPropagation()\n e.preventDefault()\n }\n\n setProcessing(true)\n setSubmitted(true)\n\n if (waitForAutocomplete) await wait(100)\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: fields,\n })\n\n revalidatedFormState = result\n }, Promise.resolve())\n\n const isValid = Object.entries(revalidatedFormState).every(([, field]) => field.valid)\n\n if (!isValid) {\n setProcessing(false)\n return dispatchFields({ type: 'REPLACE_STATE', state: revalidatedFormState })\n }\n }\n\n const isValid = skipValidation ? true : await contextRef.current.validateForm()\n\n // If not valid, prevent submission\n if (!isValid) {\n toast.error(t('error:correctInvalidFields'))\n setProcessing(false)\n\n return\n }\n\n // If submit handler comes through via props, run that\n if (onSubmit) {\n const data = {\n ...reduceFieldsToValues(fields, true),\n ...overrides,\n }\n\n onSubmit(fields, data)\n }\n\n const formData = contextRef.current.createFormData(overrides)\n\n try {\n let res\n const actionEndpoint =\n actionArg ||\n (typeof action === 'string'\n ? `${action}${QueryString.stringify(formQueryParams, { addQueryPrefix: true })}`\n : null)\n\n if (actionEndpoint) {\n res = await requests[methodToUse.toLowerCase()](actionEndpoint, {\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\n if (typeof handleResponse === 'function') {\n handleResponse(res)\n return\n }\n\n setProcessing(false)\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) json = await res.json()\n\n if (res.status < 400) {\n setSubmitted(false)\n\n if (typeof onSuccess === 'function') onSuccess(json)\n\n if (redirect) {\n router.push(redirect)\n } else if (!disableSuccessStatus) {\n toast.success(json.message || t('general:submissionSuccessful'), { autoClose: 3000 })\n }\n } else {\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n if (json.message) {\n toast.error(json.message)\n\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)) {\n err.data.forEach((dataError) => {\n if (dataError?.field) {\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 fieldErrors.forEach((err) => {\n dispatchFields({\n type: 'UPDATE',\n ...(contextRef.current?.fields?.[err.field] || {}),\n errorMessage: err.message,\n path: err.field,\n valid: false,\n })\n })\n\n nonFieldErrors.forEach((err) => {\n toast.error(err.message || t('error:unknown'))\n })\n\n return\n }\n\n const message = errorMessages?.[res.status] || res?.statusText || t('error:unknown')\n\n toast.error(message)\n }\n } catch (err) {\n setProcessing(false)\n\n toast.error(err)\n }\n },\n [\n action,\n disableSuccessStatus,\n disabled,\n dispatchFields,\n fields,\n handleResponse,\n method,\n onSubmit,\n onSuccess,\n redirect,\n router,\n t,\n i18n,\n waitForAutocomplete,\n beforeSubmit,\n formQueryParams,\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 const getDataByPath = useCallback<GetDataByPath>(\n (path: string) => getDataByPathFunc(contextRef.current.fields, path),\n [],\n )\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const createFormData = useCallback((overrides: any = {}) => {\n const data = reduceFieldsToValues(contextRef.current.fields, true)\n\n const file = data?.file\n\n if (file) {\n delete data.file\n }\n\n const dataWithOverrides = {\n ...data,\n ...overrides,\n }\n\n const dataToSerialize = {\n _payload: JSON.stringify(dataWithOverrides),\n file,\n }\n\n // nullAsUndefineds is important to allow uploads and relationship fields to clear themselves\n const formData = serialize(dataToSerialize, { indices: true, nullsAsUndefineds: false })\n\n return formData\n }, [])\n\n const reset = useCallback(\n async (data: unknown) => {\n const newState = await getFormState({\n apiRoute,\n body: {\n id,\n collectionSlug,\n data,\n globalSlug,\n operation,\n schemaPath: collectionSlug || globalSlug,\n },\n serverURL,\n })\n\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state: newState })\n },\n [apiRoute, collectionSlug, dispatchFields, globalSlug, id, operation, serverURL],\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 getFieldStateBySchemaPath = useCallback(\n async ({ data, schemaPath }) => {\n const fieldSchema = await getFormState({\n apiRoute,\n body: {\n collectionSlug,\n data,\n globalSlug,\n schemaPath,\n },\n serverURL,\n })\n return fieldSchema\n },\n [apiRoute, collectionSlug, globalSlug, serverURL],\n )\n\n const addFieldRow: FormContextType['addFieldRow'] = useCallback(\n async ({ data, path, rowIndex, schemaPath }) => {\n const subFieldState = await getFieldStateBySchemaPath({ data, schemaPath })\n\n dispatchFields({\n type: 'ADD_ROW',\n blockType: data?.blockType,\n path,\n rowIndex,\n subFieldState,\n })\n },\n [getFieldStateBySchemaPath, dispatchFields],\n )\n\n const removeFieldRow: FormContextType['removeFieldRow'] = useCallback(\n ({ path, rowIndex }) => {\n dispatchFields({ type: 'REMOVE_ROW', path, rowIndex })\n },\n [dispatchFields],\n )\n\n const replaceFieldRow: FormContextType['replaceFieldRow'] = useCallback(\n async ({ data, path, rowIndex, schemaPath }) => {\n const subFieldState = await getFieldStateBySchemaPath({ data, schemaPath })\n\n dispatchFields({\n type: 'REPLACE_ROW',\n blockType: data?.blockType,\n path,\n rowIndex,\n subFieldState,\n })\n },\n [getFieldStateBySchemaPath, dispatchFields],\n )\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.setSubmitted = setSubmitted\n contextRef.current.disabled = disabled\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.replaceFieldRow = replaceFieldRow\n contextRef.current.uuid = uuid\n\n useEffect(() => {\n if (typeof submittedFromProps === 'boolean') setSubmitted(submittedFromProps)\n }, [submittedFromProps])\n\n useEffect(() => {\n if (initialState) {\n contextRef.current = { ...initContextState } as FormContextType\n dispatchFields({ type: 'REPLACE_STATE', state: initialState })\n }\n }, [initialState, dispatchFields])\n\n useThrottledEffect(\n () => {\n refreshCookie()\n },\n 15000,\n [fields],\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 useDebouncedEffect(\n () => {\n const executeOnChange = async () => {\n if (Array.isArray(onChange)) {\n let revalidatedFormState: FormState\n\n await onChange.reduce(async (priorOnChange, onChangeFn) => {\n await priorOnChange\n\n const result = await onChangeFn({\n formState: fields,\n })\n\n revalidatedFormState = result\n }, Promise.resolve())\n\n const { changed, newState } = mergeServerFormState(fields, revalidatedFormState)\n\n if (changed) {\n dispatchFields({ type: 'REPLACE_STATE', optimize: false, state: newState })\n }\n }\n }\n\n void executeOnChange() // eslint-disable-line @typescript-eslint/no-floating-promises\n },\n 150,\n [fields, dispatchFields, onChange],\n )\n\n const actionString =\n typeof action === 'string'\n ? `${action}${QueryString.stringify(formQueryParams, { addQueryPrefix: true })}`\n : ''\n\n return (\n <form\n action={method ? actionString : action}\n className={classes}\n method={method}\n noValidate\n onSubmit={(e) => contextRef.current.submit({}, e)}\n ref={formRef}\n >\n <FormContext.Provider value={contextRef.current}>\n <FormWatchContext.Provider\n value={{\n fields,\n ...contextRef.current,\n }}\n >\n <SubmittedContext.Provider value={submitted}>\n <ProcessingContext.Provider value={processing}>\n <ModifiedContext.Provider value={modified}>\n <FormFieldsContext.Provider value={fieldsReducer}>\n {children}\n </FormFieldsContext.Provider>\n </ModifiedContext.Provider>\n </ProcessingContext.Provider>\n </SubmittedContext.Provider>\n </FormWatchContext.Provider>\n </FormContext.Provider>\n </form>\n )\n}\n\n// eslint-disable-next-line no-restricted-exports\nexport default Form\n"],"names":["isDeepEqual","useRouter","serialize","wait","QueryString","React","useCallback","useEffect","useReducer","useRef","useState","toast","useDebouncedEffect","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useFormQueryParams","useLocale","useOperation","useTranslation","requests","getFormState","FormContext","FormFieldsContext","FormWatchContext","ModifiedContext","ProcessingContext","SubmittedContext","errorMessages","fieldReducer","getDataByPathFunc","getSiblingDataFunc","initContextState","mergeServerFormState","reduceFieldsToValues","baseClass","Form","props","id","collectionSlug","globalSlug","action","children","className","disableSuccessStatus","disabled","beforeSubmit","handleResponse","initialState","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","code","locale","i18n","t","refreshCookie","user","operation","formQueryParams","config","routes","api","apiRoute","serverURL","modified","setModified","processing","setProcessing","setSubmitted","formRef","contextRef","fieldsReducer","fields","dispatchFields","current","validateForm","validatedFieldState","isValid","dataFromContext","getData","data","validationPromises","Object","entries","map","path","field","validatedField","valid","passesCondition","validationResult","validate","valueToValidate","value","rows","Array","isArray","getDataByPath","siblingData","getSiblingData","errorMessage","Promise","all","type","state","submit","options","e","actionArg","methodToUse","overrides","skipValidation","preventDefault","stopPropagation","revalidatedFormState","reduce","priorOnChange","beforeSubmitFn","result","formState","resolve","every","error","formData","createFormData","res","actionEndpoint","stringify","addQueryPrefix","toLowerCase","body","headers","language","contentType","get","isJSON","indexOf","json","status","push","success","message","autoClose","errors","fieldErrors","nonFieldErrors","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","forEach","dataError","statusText","getFields","getField","file","dataWithOverrides","dataToSerialize","_payload","JSON","indices","nullsAsUndefineds","reset","newState","schemaPath","replaceState","getFieldStateBySchemaPath","fieldSchema","addFieldRow","rowIndex","subFieldState","blockType","removeFieldRow","replaceFieldRow","classes","filter","Boolean","join","executeOnChange","onChangeFn","changed","optimize","actionString","form","noValidate","ref","Provider"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/forms/Form/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload/types'\n\n/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\nimport isDeepEqual from 'deep-equal'\nimport { useRouter } from 'next/navigation.js'\nimport { serialize } from 'object-to-formdata'\nimport { wait } from 'payload/utilities'\nimport QueryString from 'qs'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport type { Context as FormContextType, GetDataByPath, Props, SubmitOptions } from './types.js'\n\nimport { useDebouncedEffect } from '../../hooks/useDebouncedEffect.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 { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/OperationProvider/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { getFormState } from '../../utilities/getFormState.js'\nimport {\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n} from './context.js'\nimport errorMessages from './errorMessages.js'\nimport { fieldReducer } from './fieldReducer.js'\nimport getDataByPathFunc from './getDataByPath.js'\nimport getSiblingDataFunc from './getSiblingData.js'\nimport initContextState from './initContextState.js'\nimport { mergeServerFormState } from './mergeServerFormState.js'\nimport reduceFieldsToValues from './reduceFieldsToValues.js'\n\nconst baseClass = 'form'\n\nconst Form: React.FC<Props> = (props) => {\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n\n const {\n action,\n children,\n className,\n disableSuccessStatus,\n disabled,\n // fields: fieldsFromProps = collection?.fields || global?.fields,\n beforeSubmit,\n handleResponse,\n initialState, // fully formed initial field state\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 { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { refreshCookie, user } = useAuth()\n const operation = useOperation()\n const { formQueryParams } = useFormQueryParams()\n\n const config = useConfig()\n const {\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const [modified, setModified] = useState(false)\n const [processing, setProcessing] = useState(false)\n const [submitted, setSubmitted] = useState(false)\n const formRef = useRef<HTMLFormElement>(null)\n const contextRef = useRef({} as FormContextType)\n\n const fieldsReducer = useReducer(fieldReducer, {}, () => initialState)\n /**\n * `fields` is the current, up-to-date state/data of all fields in the form. It can be modified by using dispatchFields,\n * which calls the fieldReducer, which then updates the state.\n */\n const [fields, dispatchFields] = fieldsReducer\n\n contextRef.current.fields = fields\n\n const validateForm = useCallback(async () => {\n const validatedFieldState = {}\n let isValid = true\n\n const dataFromContext = contextRef.current.getData()\n const data = dataFromContext\n\n const validationPromises = Object.entries(contextRef.current.fields).map(\n async ([path, field]) => {\n const validatedField = {\n ...field,\n valid: true,\n }\n\n if (field.passesCondition !== false) {\n let validationResult: boolean | string = true\n\n if (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 id,\n config,\n data,\n operation,\n siblingData: contextRef.current.getSiblingData(path),\n t,\n user,\n })\n }\n\n if (typeof validationResult === 'string') {\n validatedField.errorMessage = validationResult\n validatedField.valid = false\n isValid = false\n }\n }\n\n validatedFieldState[path] = validatedField\n },\n )\n\n await Promise.all(validationPromises)\n\n if (!isDeepEqual(contextRef.current.fields, validatedFieldState)) {\n dispatchFields({ type: 'REPLACE_STATE', state: validatedFieldState })\n }\n\n return isValid\n }, [id, user, operation, t, dispatchFields, config])\n\n const submit = useCallback(\n async (options: SubmitOptions = {}, e): Promise<void> => {\n const {\n action: actionArg,\n method: methodToUse = method,\n overrides = {},\n skipValidation,\n } = options\n\n if (disabled) {\n if (e) {\n e.preventDefault()\n }\n return\n }\n\n if (e) {\n e.stopPropagation()\n e.preventDefault()\n }\n\n setProcessing(true)\n setSubmitted(true)\n\n if (waitForAutocomplete) await wait(100)\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: fields,\n })\n\n revalidatedFormState = result\n }, Promise.resolve())\n\n const isValid = Object.entries(revalidatedFormState).every(([, field]) => field.valid)\n\n if (!isValid) {\n setProcessing(false)\n return dispatchFields({ type: 'REPLACE_STATE', state: revalidatedFormState })\n }\n }\n\n const isValid = skipValidation ? true : await contextRef.current.validateForm()\n\n // If not valid, prevent submission\n if (!isValid) {\n toast.error(t('error:correctInvalidFields'))\n setProcessing(false)\n\n return\n }\n\n // If submit handler comes through via props, run that\n if (onSubmit) {\n const data = {\n ...reduceFieldsToValues(fields, true),\n ...overrides,\n }\n\n onSubmit(fields, data)\n }\n\n const formData = contextRef.current.createFormData(overrides)\n\n try {\n let res\n const actionEndpoint =\n actionArg ||\n (typeof action === 'string'\n ? `${action}${QueryString.stringify(formQueryParams, { addQueryPrefix: true })}`\n : null)\n\n if (actionEndpoint) {\n res = await requests[methodToUse.toLowerCase()](actionEndpoint, {\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\n if (typeof handleResponse === 'function') {\n handleResponse(res)\n return\n }\n\n setProcessing(false)\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) json = await res.json()\n\n if (res.status < 400) {\n setSubmitted(false)\n\n if (typeof onSuccess === 'function') onSuccess(json)\n\n if (redirect) {\n router.push(redirect)\n } else if (!disableSuccessStatus) {\n toast.success(json.message || t('general:submissionSuccessful'), { autoClose: 3000 })\n }\n } else {\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n if (json.message) {\n toast.error(json.message)\n\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)) {\n err.data.forEach((dataError) => {\n if (dataError?.field) {\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 fieldErrors.forEach((err) => {\n dispatchFields({\n type: 'UPDATE',\n ...(contextRef.current?.fields?.[err.field] || {}),\n errorMessage: err.message,\n path: err.field,\n valid: false,\n })\n })\n\n nonFieldErrors.forEach((err) => {\n toast.error(err.message || t('error:unknown'))\n })\n\n return\n }\n\n const message = errorMessages?.[res.status] || res?.statusText || t('error:unknown')\n\n toast.error(message)\n }\n } catch (err) {\n setProcessing(false)\n\n toast.error(err)\n }\n },\n [\n action,\n disableSuccessStatus,\n disabled,\n dispatchFields,\n fields,\n handleResponse,\n method,\n onSubmit,\n onSuccess,\n redirect,\n router,\n t,\n i18n,\n waitForAutocomplete,\n beforeSubmit,\n formQueryParams,\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 const getDataByPath = useCallback<GetDataByPath>(\n (path: string) => getDataByPathFunc(contextRef.current.fields, path),\n [],\n )\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const createFormData = useCallback((overrides: any = {}) => {\n const data = reduceFieldsToValues(contextRef.current.fields, true)\n\n const file = data?.file\n\n if (file) {\n delete data.file\n }\n\n const dataWithOverrides = {\n ...data,\n ...overrides,\n }\n\n const dataToSerialize = {\n _payload: JSON.stringify(dataWithOverrides),\n file,\n }\n\n // nullAsUndefineds is important to allow uploads and relationship fields to clear themselves\n const formData = serialize(dataToSerialize, { indices: true, nullsAsUndefineds: false })\n\n return formData\n }, [])\n\n const reset = useCallback(\n async (data: unknown) => {\n const newState = await getFormState({\n apiRoute,\n body: {\n id,\n collectionSlug,\n data,\n globalSlug,\n operation,\n schemaPath: collectionSlug || globalSlug,\n },\n serverURL,\n })\n\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state: newState })\n },\n [apiRoute, collectionSlug, dispatchFields, globalSlug, id, operation, serverURL],\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 getFieldStateBySchemaPath = useCallback(\n async ({ data, schemaPath }) => {\n const fieldSchema = await getFormState({\n apiRoute,\n body: {\n collectionSlug,\n data,\n globalSlug,\n schemaPath,\n },\n serverURL,\n })\n return fieldSchema\n },\n [apiRoute, collectionSlug, globalSlug, serverURL],\n )\n\n const addFieldRow: FormContextType['addFieldRow'] = useCallback(\n async ({ data, path, rowIndex, schemaPath }) => {\n const subFieldState = await getFieldStateBySchemaPath({ data, schemaPath })\n\n dispatchFields({\n type: 'ADD_ROW',\n blockType: data?.blockType,\n path,\n rowIndex,\n subFieldState,\n })\n },\n [getFieldStateBySchemaPath, dispatchFields],\n )\n\n const removeFieldRow: FormContextType['removeFieldRow'] = useCallback(\n ({ path, rowIndex }) => {\n dispatchFields({ type: 'REMOVE_ROW', path, rowIndex })\n },\n [dispatchFields],\n )\n\n const replaceFieldRow: FormContextType['replaceFieldRow'] = useCallback(\n async ({ data, path, rowIndex, schemaPath }) => {\n const subFieldState = await getFieldStateBySchemaPath({ data, schemaPath })\n\n dispatchFields({\n type: 'REPLACE_ROW',\n blockType: data?.blockType,\n path,\n rowIndex,\n subFieldState,\n })\n },\n [getFieldStateBySchemaPath, dispatchFields],\n )\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.setSubmitted = setSubmitted\n contextRef.current.disabled = disabled\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.replaceFieldRow = replaceFieldRow\n contextRef.current.uuid = uuid\n\n useEffect(() => {\n if (typeof submittedFromProps === 'boolean') setSubmitted(submittedFromProps)\n }, [submittedFromProps])\n\n useEffect(() => {\n if (initialState) {\n contextRef.current = { ...initContextState } as FormContextType\n dispatchFields({ type: 'REPLACE_STATE', state: initialState })\n }\n }, [initialState, dispatchFields])\n\n useThrottledEffect(\n () => {\n refreshCookie()\n },\n 15000,\n [fields],\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 useDebouncedEffect(\n () => {\n const executeOnChange = async () => {\n if (Array.isArray(onChange)) {\n let revalidatedFormState: FormState = fields\n\n for (const onChangeFn of onChange) {\n revalidatedFormState = await onChangeFn({\n formState: revalidatedFormState,\n })\n }\n\n const { changed, newState } = mergeServerFormState(fields, revalidatedFormState)\n\n if (changed) {\n dispatchFields({ type: 'REPLACE_STATE', optimize: false, state: newState })\n }\n }\n }\n\n void executeOnChange() // eslint-disable-line @typescript-eslint/no-floating-promises\n },\n 150,\n [fields, dispatchFields, onChange],\n )\n\n const actionString =\n typeof action === 'string'\n ? `${action}${QueryString.stringify(formQueryParams, { addQueryPrefix: true })}`\n : ''\n\n return (\n <form\n action={method ? actionString : action}\n className={classes}\n method={method}\n noValidate\n onSubmit={(e) => contextRef.current.submit({}, e)}\n ref={formRef}\n >\n <FormContext.Provider value={contextRef.current}>\n <FormWatchContext.Provider\n value={{\n fields,\n ...contextRef.current,\n }}\n >\n <SubmittedContext.Provider value={submitted}>\n <ProcessingContext.Provider value={processing}>\n <ModifiedContext.Provider value={modified}>\n <FormFieldsContext.Provider value={fieldsReducer}>\n {children}\n </FormFieldsContext.Provider>\n </ModifiedContext.Provider>\n </ProcessingContext.Provider>\n </SubmittedContext.Provider>\n </FormWatchContext.Provider>\n </FormContext.Provider>\n </form>\n )\n}\n\nexport default Form\n"],"names":["isDeepEqual","useRouter","serialize","wait","QueryString","React","useCallback","useEffect","useReducer","useRef","useState","toast","useDebouncedEffect","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useFormQueryParams","useLocale","useOperation","useTranslation","requests","getFormState","FormContext","FormFieldsContext","FormWatchContext","ModifiedContext","ProcessingContext","SubmittedContext","errorMessages","fieldReducer","getDataByPathFunc","getSiblingDataFunc","initContextState","mergeServerFormState","reduceFieldsToValues","baseClass","Form","props","id","collectionSlug","globalSlug","action","children","className","disableSuccessStatus","disabled","beforeSubmit","handleResponse","initialState","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","code","locale","i18n","t","refreshCookie","user","operation","formQueryParams","config","routes","api","apiRoute","serverURL","modified","setModified","processing","setProcessing","setSubmitted","formRef","contextRef","fieldsReducer","fields","dispatchFields","current","validateForm","validatedFieldState","isValid","dataFromContext","getData","data","validationPromises","Object","entries","map","path","field","validatedField","valid","passesCondition","validationResult","validate","valueToValidate","value","rows","Array","isArray","getDataByPath","siblingData","getSiblingData","errorMessage","Promise","all","type","state","submit","options","e","actionArg","methodToUse","overrides","skipValidation","preventDefault","stopPropagation","revalidatedFormState","reduce","priorOnChange","beforeSubmitFn","result","formState","resolve","every","error","formData","createFormData","res","actionEndpoint","stringify","addQueryPrefix","toLowerCase","body","headers","language","contentType","get","isJSON","indexOf","json","status","push","success","message","autoClose","errors","fieldErrors","nonFieldErrors","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","forEach","dataError","statusText","getFields","getField","file","dataWithOverrides","dataToSerialize","_payload","JSON","indices","nullsAsUndefineds","reset","newState","schemaPath","replaceState","getFieldStateBySchemaPath","fieldSchema","addFieldRow","rowIndex","subFieldState","blockType","removeFieldRow","replaceFieldRow","classes","filter","Boolean","join","executeOnChange","onChangeFn","changed","optimize","actionString","form","noValidate","ref","Provider"],"mappings":"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"}
@@ -1,4 +1,11 @@
1
1
  import type { FormState } from 'payload/types';
2
+ /**
3
+ * Merges certain properties from the server state into the client state. These do not include values,
4
+ * as we do not want to update them on the client like that, which would cause flickering.
5
+ *
6
+ * We want to use this to update the error state, and other properties that are not user input, as the error state
7
+ * is the thing we want to keep in sync with the server (where it's calculated) on the client.
8
+ */
2
9
  export declare const mergeServerFormState: (oldState: FormState, newState: FormState) => {
3
10
  changed: boolean;
4
11
  newState: FormState;
@@ -1 +1 @@
1
- {"version":3,"file":"mergeServerFormState.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/mergeServerFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAM9C,eAAO,MAAM,oBAAoB,aACrB,SAAS,YACT,SAAS;aACP,OAAO;cAAY,SAAS;CAkCzC,CAAA"}
1
+ {"version":3,"file":"mergeServerFormState.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/mergeServerFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAM9C;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,aACrB,SAAS,YACT,SAAS;aACP,OAAO;cAAY,SAAS;CAkCzC,CAAA"}
@@ -4,7 +4,13 @@ const propsToCheck = [
4
4
  'valid',
5
5
  'errorMessage'
6
6
  ];
7
- export const mergeServerFormState = (oldState, newState)=>{
7
+ /**
8
+ * Merges certain properties from the server state into the client state. These do not include values,
9
+ * as we do not want to update them on the client like that, which would cause flickering.
10
+ *
11
+ * We want to use this to update the error state, and other properties that are not user input, as the error state
12
+ * is the thing we want to keep in sync with the server (where it's calculated) on the client.
13
+ */ export const mergeServerFormState = (oldState, newState)=>{
8
14
  let changed = false;
9
15
  Object.entries(newState).forEach(([path, newFieldState])=>{
10
16
  newFieldState.initialValue = oldState[path]?.initialValue;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/forms/Form/mergeServerFormState.ts"],"sourcesContent":["import type { FormState } from 'payload/types'\n\nimport { arraysHaveSameStrings } from '../../utilities/arraysHaveSameStrings.js'\n\nconst propsToCheck = ['passesCondition', 'valid', 'errorMessage']\n\nexport const mergeServerFormState = (\n oldState: FormState,\n newState: FormState,\n): { changed: boolean; newState: FormState } => {\n let changed = false\n\n Object.entries(newState).forEach(([path, newFieldState]) => {\n newFieldState.initialValue = oldState[path]?.initialValue\n newFieldState.value = oldState[path].value\n\n const oldErrorPaths: string[] = []\n const newErrorPaths: string[] = []\n\n if (oldState[path].errorPaths instanceof Set) {\n oldState[path].errorPaths.forEach((path) => oldErrorPaths.push(path))\n }\n\n if (\n newFieldState.errorPaths &&\n !Array.isArray(newFieldState.errorPaths) &&\n typeof newFieldState.errorPaths\n ) {\n Object.values(newFieldState.errorPaths).forEach((path) => newErrorPaths.push(path))\n }\n\n if (!arraysHaveSameStrings(oldErrorPaths, newErrorPaths)) {\n changed = true\n }\n\n propsToCheck.forEach((prop) => {\n if (newFieldState[prop] != oldState[path][prop]) {\n changed = true\n }\n })\n })\n\n return { changed, newState }\n}\n"],"names":["arraysHaveSameStrings","propsToCheck","mergeServerFormState","oldState","newState","changed","Object","entries","forEach","path","newFieldState","initialValue","value","oldErrorPaths","newErrorPaths","errorPaths","Set","push","Array","isArray","values","prop"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,2CAA0C;AAEhF,MAAMC,eAAe;IAAC;IAAmB;IAAS;CAAe;AAEjE,OAAO,MAAMC,uBAAuB,CAClCC,UACAC;IAEA,IAAIC,UAAU;IAEdC,OAAOC,OAAO,CAACH,UAAUI,OAAO,CAAC,CAAC,CAACC,MAAMC,cAAc;QACrDA,cAAcC,YAAY,GAAGR,QAAQ,CAACM,KAAK,EAAEE;QAC7CD,cAAcE,KAAK,GAAGT,QAAQ,CAACM,KAAK,CAACG,KAAK;QAE1C,MAAMC,gBAA0B,EAAE;QAClC,MAAMC,gBAA0B,EAAE;QAElC,IAAIX,QAAQ,CAACM,KAAK,CAACM,UAAU,YAAYC,KAAK;YAC5Cb,QAAQ,CAACM,KAAK,CAACM,UAAU,CAACP,OAAO,CAAC,CAACC,OAASI,cAAcI,IAAI,CAACR;QACjE;QAEA,IACEC,cAAcK,UAAU,IACxB,CAACG,MAAMC,OAAO,CAACT,cAAcK,UAAU,KACvC,OAAOL,cAAcK,UAAU,EAC/B;YACAT,OAAOc,MAAM,CAACV,cAAcK,UAAU,EAAEP,OAAO,CAAC,CAACC,OAASK,cAAcG,IAAI,CAACR;QAC/E;QAEA,IAAI,CAACT,sBAAsBa,eAAeC,gBAAgB;YACxDT,UAAU;QACZ;QAEAJ,aAAaO,OAAO,CAAC,CAACa;YACpB,IAAIX,aAAa,CAACW,KAAK,IAAIlB,QAAQ,CAACM,KAAK,CAACY,KAAK,EAAE;gBAC/ChB,UAAU;YACZ;QACF;IACF;IAEA,OAAO;QAAEA;QAASD;IAAS;AAC7B,EAAC"}
1
+ {"version":3,"sources":["../../../src/forms/Form/mergeServerFormState.ts"],"sourcesContent":["import type { FormState } from 'payload/types'\n\nimport { arraysHaveSameStrings } from '../../utilities/arraysHaveSameStrings.js'\n\nconst propsToCheck = ['passesCondition', 'valid', 'errorMessage']\n\n/**\n * Merges certain properties from the server state into the client state. These do not include values,\n * as we do not want to update them on the client like that, which would cause flickering.\n *\n * We want to use this to update the error state, and other properties that are not user input, as the error state\n * is the thing we want to keep in sync with the server (where it's calculated) on the client.\n */\nexport const mergeServerFormState = (\n oldState: FormState,\n newState: FormState,\n): { changed: boolean; newState: FormState } => {\n let changed = false\n\n Object.entries(newState).forEach(([path, newFieldState]) => {\n newFieldState.initialValue = oldState[path]?.initialValue\n newFieldState.value = oldState[path].value\n\n const oldErrorPaths: string[] = []\n const newErrorPaths: string[] = []\n\n if (oldState[path].errorPaths instanceof Set) {\n oldState[path].errorPaths.forEach((path) => oldErrorPaths.push(path))\n }\n\n if (\n newFieldState.errorPaths &&\n !Array.isArray(newFieldState.errorPaths) &&\n typeof newFieldState.errorPaths\n ) {\n Object.values(newFieldState.errorPaths).forEach((path) => newErrorPaths.push(path))\n }\n\n if (!arraysHaveSameStrings(oldErrorPaths, newErrorPaths)) {\n changed = true\n }\n\n propsToCheck.forEach((prop) => {\n if (newFieldState[prop] != oldState[path][prop]) {\n changed = true\n }\n })\n })\n\n return { changed, newState }\n}\n"],"names":["arraysHaveSameStrings","propsToCheck","mergeServerFormState","oldState","newState","changed","Object","entries","forEach","path","newFieldState","initialValue","value","oldErrorPaths","newErrorPaths","errorPaths","Set","push","Array","isArray","values","prop"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,2CAA0C;AAEhF,MAAMC,eAAe;IAAC;IAAmB;IAAS;CAAe;AAEjE;;;;;;CAMC,GACD,OAAO,MAAMC,uBAAuB,CAClCC,UACAC;IAEA,IAAIC,UAAU;IAEdC,OAAOC,OAAO,CAACH,UAAUI,OAAO,CAAC,CAAC,CAACC,MAAMC,cAAc;QACrDA,cAAcC,YAAY,GAAGR,QAAQ,CAACM,KAAK,EAAEE;QAC7CD,cAAcE,KAAK,GAAGT,QAAQ,CAACM,KAAK,CAACG,KAAK;QAE1C,MAAMC,gBAA0B,EAAE;QAClC,MAAMC,gBAA0B,EAAE;QAElC,IAAIX,QAAQ,CAACM,KAAK,CAACM,UAAU,YAAYC,KAAK;YAC5Cb,QAAQ,CAACM,KAAK,CAACM,UAAU,CAACP,OAAO,CAAC,CAACC,OAASI,cAAcI,IAAI,CAACR;QACjE;QAEA,IACEC,cAAcK,UAAU,IACxB,CAACG,MAAMC,OAAO,CAACT,cAAcK,UAAU,KACvC,OAAOL,cAAcK,UAAU,EAC/B;YACAT,OAAOc,MAAM,CAACV,cAAcK,UAAU,EAAEP,OAAO,CAAC,CAACC,OAASK,cAAcG,IAAI,CAACR;QAC/E;QAEA,IAAI,CAACT,sBAAsBa,eAAeC,gBAAgB;YACxDT,UAAU;QACZ;QAEAJ,aAAaO,OAAO,CAAC,CAACa;YACpB,IAAIX,aAAa,CAACW,KAAK,IAAIlB,QAAQ,CAACM,KAAK,CAACY,KAAK,EAAE;gBAC/ChB,UAAU;YACZ;QACF;IACF;IAEA,OAAO;QAAEA;QAASD;IAAS;AAC7B,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Label/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAG/C,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,cAAc,CAAA;AAErB,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAe/B,CAAA;AAED,eAAe,KAAK,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Label/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAG/C,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,cAAc,CAAA;AAErB,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAkB/B,CAAA;AAED,eAAe,KAAK,CAAA"}
@@ -2,8 +2,14 @@
2
2
  import { getTranslation } from '@payloadcms/translations';
3
3
  import React from 'react';
4
4
  import { useTranslation } from '../../providers/Translation/index.js';
5
+ import { generateFieldID } from '../../utilities/generateFieldID.js';
6
+ import { useFieldPath } from '../FieldPathProvider/index.js';
7
+ import { useForm } from '../Form/context.js';
5
8
  const Label = (props)=>{
6
- const { htmlFor, label, required = false } = props;
9
+ const { htmlFor: htmlForFromProps, label, required = false } = props;
10
+ const { uuid } = useForm();
11
+ const { path } = useFieldPath();
12
+ const htmlFor = htmlForFromProps || generateFieldID(path, uuid);
7
13
  const { i18n } = useTranslation();
8
14
  if (label) {
9
15
  return /*#__PURE__*/ React.createElement("label", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/forms/Label/index.tsx"],"sourcesContent":["'use client'\nimport type { LabelProps } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport './index.scss'\n\nconst Label: React.FC<LabelProps> = (props) => {\n const { htmlFor, label, required = false } = props\n\n const { i18n } = useTranslation()\n\n if (label) {\n return (\n <label className=\"field-label\" htmlFor={htmlFor}>\n {getTranslation(label, i18n)}\n {required && <span className=\"required\">*</span>}\n </label>\n )\n }\n\n return null\n}\n\nexport default Label\n"],"names":["getTranslation","React","useTranslation","Label","props","htmlFor","label","required","i18n","className","span"],"mappings":"AAAA;AAGA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,WAAW,QAAO;AAEzB,SAASC,cAAc,QAAQ,uCAAsC;AAGrE,MAAMC,QAA8B,CAACC;IACnC,MAAM,EAAEC,OAAO,EAAEC,KAAK,EAAEC,WAAW,KAAK,EAAE,GAAGH;IAE7C,MAAM,EAAEI,IAAI,EAAE,GAAGN;IAEjB,IAAII,OAAO;QACT,qBACE,oBAACA;YAAMG,WAAU;YAAcJ,SAASA;WACrCL,eAAeM,OAAOE,OACtBD,0BAAY,oBAACG;YAAKD,WAAU;WAAW;IAG9C;IAEA,OAAO;AACT;AAEA,eAAeN,MAAK"}
1
+ {"version":3,"sources":["../../../src/forms/Label/index.tsx"],"sourcesContent":["'use client'\nimport type { LabelProps } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { generateFieldID } from '../../utilities/generateFieldID.js'\nimport { useFieldPath } from '../FieldPathProvider/index.js'\nimport { useForm } from '../Form/context.js'\nimport './index.scss'\n\nconst Label: React.FC<LabelProps> = (props) => {\n const { htmlFor: htmlForFromProps, label, required = false } = props\n const { uuid } = useForm()\n const { path } = useFieldPath()\n const htmlFor = htmlForFromProps || generateFieldID(path, uuid)\n\n const { i18n } = useTranslation()\n\n if (label) {\n return (\n <label className=\"field-label\" htmlFor={htmlFor}>\n {getTranslation(label, i18n)}\n {required && <span className=\"required\">*</span>}\n </label>\n )\n }\n\n return null\n}\n\nexport default Label\n"],"names":["getTranslation","React","useTranslation","generateFieldID","useFieldPath","useForm","Label","props","htmlFor","htmlForFromProps","label","required","uuid","path","i18n","className","span"],"mappings":"AAAA;AAGA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,WAAW,QAAO;AAEzB,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,YAAY,QAAQ,gCAA+B;AAC5D,SAASC,OAAO,QAAQ,qBAAoB;AAG5C,MAAMC,QAA8B,CAACC;IACnC,MAAM,EAAEC,SAASC,gBAAgB,EAAEC,KAAK,EAAEC,WAAW,KAAK,EAAE,GAAGJ;IAC/D,MAAM,EAAEK,IAAI,EAAE,GAAGP;IACjB,MAAM,EAAEQ,IAAI,EAAE,GAAGT;IACjB,MAAMI,UAAUC,oBAAoBN,gBAAgBU,MAAMD;IAE1D,MAAM,EAAEE,IAAI,EAAE,GAAGZ;IAEjB,IAAIQ,OAAO;QACT,qBACE,oBAACA;YAAMK,WAAU;YAAcP,SAASA;WACrCR,eAAeU,OAAOI,OACtBH,0BAAY,oBAACK;YAAKD,WAAU;WAAW;IAG9C;IAEA,OAAO;AACT;AAEA,eAAeT,MAAK"}
@@ -8,8 +8,8 @@ export const RenderField = (props)=>{
8
8
  const { path: pathFromContext, schemaPath: schemaPathFromContext } = useFieldPath();
9
9
  const readOnlyFromContext = useReadOnly();
10
10
  const operation = useOperation();
11
- const path = `${pathFromContext ? `${pathFromContext}.` : ''}${name || ''}`;
12
- const schemaPath = `${schemaPathFromContext ? `${schemaPathFromContext}.` : ''}${name || ''}`;
11
+ const path = `${pathFromContext ? `${pathFromContext}.` : ''}${name ? `${name}` : ''}`;
12
+ const schemaPath = `${schemaPathFromContext ? `${schemaPathFromContext}` : ''}${name ? `.${name}` : ''}`;
13
13
  // if the user cannot read the field, then filter it out
14
14
  // this is different from `admin.readOnly` which is executed based on `operation`
15
15
  if (fieldPermissions?.read?.permission === false) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/forms/RenderFields/RenderField.tsx"],"sourcesContent":["'use client'\nimport type { FieldPermissions } from 'payload/auth'\n\nimport React from 'react'\n\nimport { useOperation } from '../../providers/OperationProvider/index.js'\nimport { FieldPathProvider, useFieldPath } from '../FieldPathProvider/index.js'\nimport { ReadOnlyProvider, useReadOnly } from '../ReadOnlyProvider/index.js'\n\nexport const RenderField: React.FC<{\n Field: React.ReactNode\n fieldPermissions: FieldPermissions\n name?: string\n readOnly?: boolean\n}> = (props) => {\n const { name, Field, fieldPermissions, readOnly: readOnlyFromProps } = props\n\n const { path: pathFromContext, schemaPath: schemaPathFromContext } = useFieldPath()\n\n const readOnlyFromContext = useReadOnly()\n\n const operation = useOperation()\n\n const path = `${pathFromContext ? `${pathFromContext}.` : ''}${name || ''}`\n const schemaPath = `${schemaPathFromContext ? `${schemaPathFromContext}.` : ''}${name || ''}`\n\n // if the user cannot read the field, then filter it out\n // this is different from `admin.readOnly` which is executed based on `operation`\n if (fieldPermissions?.read?.permission === false) {\n return null\n }\n\n // `admin.readOnly` displays the value but prevents the field from being edited\n let readOnly = readOnlyFromProps\n\n // if parent field is `readOnly: true`, but this field is `readOnly: false`, the field should still be editable\n if (readOnlyFromContext && readOnly !== false) readOnly = true\n\n // if the user does not have access control to begin with, force it to be read-only\n if (fieldPermissions?.[operation]?.permission === false) {\n readOnly = true\n }\n\n return (\n <ReadOnlyProvider readOnly={readOnly}>\n <FieldPathProvider path={path} schemaPath={schemaPath}>\n {Field}\n </FieldPathProvider>\n </ReadOnlyProvider>\n )\n}\n"],"names":["React","useOperation","FieldPathProvider","useFieldPath","ReadOnlyProvider","useReadOnly","RenderField","props","name","Field","fieldPermissions","readOnly","readOnlyFromProps","path","pathFromContext","schemaPath","schemaPathFromContext","readOnlyFromContext","operation","read","permission"],"mappings":"AAAA;AAGA,OAAOA,WAAW,QAAO;AAEzB,SAASC,YAAY,QAAQ,6CAA4C;AACzE,SAASC,iBAAiB,EAAEC,YAAY,QAAQ,gCAA+B;AAC/E,SAASC,gBAAgB,EAAEC,WAAW,QAAQ,+BAA8B;AAE5E,OAAO,MAAMC,cAKR,CAACC;IACJ,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAEC,gBAAgB,EAAEC,UAAUC,iBAAiB,EAAE,GAAGL;IAEvE,MAAM,EAAEM,MAAMC,eAAe,EAAEC,YAAYC,qBAAqB,EAAE,GAAGb;IAErE,MAAMc,sBAAsBZ;IAE5B,MAAMa,YAAYjB;IAElB,MAAMY,OAAO,CAAC,EAAEC,kBAAkB,CAAC,EAAEA,gBAAgB,CAAC,CAAC,GAAG,GAAG,EAAEN,QAAQ,GAAG,CAAC;IAC3E,MAAMO,aAAa,CAAC,EAAEC,wBAAwB,CAAC,EAAEA,sBAAsB,CAAC,CAAC,GAAG,GAAG,EAAER,QAAQ,GAAG,CAAC;IAE7F,wDAAwD;IACxD,iFAAiF;IACjF,IAAIE,kBAAkBS,MAAMC,eAAe,OAAO;QAChD,OAAO;IACT;IAEA,+EAA+E;IAC/E,IAAIT,WAAWC;IAEf,+GAA+G;IAC/G,IAAIK,uBAAuBN,aAAa,OAAOA,WAAW;IAE1D,mFAAmF;IACnF,IAAID,kBAAkB,CAACQ,UAAU,EAAEE,eAAe,OAAO;QACvDT,WAAW;IACb;IAEA,qBACE,oBAACP;QAAiBO,UAAUA;qBAC1B,oBAACT;QAAkBW,MAAMA;QAAME,YAAYA;OACxCN;AAIT,EAAC"}
1
+ {"version":3,"sources":["../../../src/forms/RenderFields/RenderField.tsx"],"sourcesContent":["'use client'\nimport type { FieldPermissions } from 'payload/auth'\n\nimport React from 'react'\n\nimport { useOperation } from '../../providers/OperationProvider/index.js'\nimport { FieldPathProvider, useFieldPath } from '../FieldPathProvider/index.js'\nimport { ReadOnlyProvider, useReadOnly } from '../ReadOnlyProvider/index.js'\n\nexport const RenderField: React.FC<{\n Field: React.ReactNode\n fieldPermissions: FieldPermissions\n name?: string\n readOnly?: boolean\n}> = (props) => {\n const { name, Field, fieldPermissions, readOnly: readOnlyFromProps } = props\n\n const { path: pathFromContext, schemaPath: schemaPathFromContext } = useFieldPath()\n\n const readOnlyFromContext = useReadOnly()\n\n const operation = useOperation()\n\n const path = `${pathFromContext ? `${pathFromContext}.` : ''}${name ? `${name}` : ''}`\n const schemaPath = `${schemaPathFromContext ? `${schemaPathFromContext}` : ''}${name ? `.${name}` : ''}`\n\n // if the user cannot read the field, then filter it out\n // this is different from `admin.readOnly` which is executed based on `operation`\n if (fieldPermissions?.read?.permission === false) {\n return null\n }\n\n // `admin.readOnly` displays the value but prevents the field from being edited\n let readOnly = readOnlyFromProps\n\n // if parent field is `readOnly: true`, but this field is `readOnly: false`, the field should still be editable\n if (readOnlyFromContext && readOnly !== false) readOnly = true\n\n // if the user does not have access control to begin with, force it to be read-only\n if (fieldPermissions?.[operation]?.permission === false) {\n readOnly = true\n }\n\n return (\n <ReadOnlyProvider readOnly={readOnly}>\n <FieldPathProvider path={path} schemaPath={schemaPath}>\n {Field}\n </FieldPathProvider>\n </ReadOnlyProvider>\n )\n}\n"],"names":["React","useOperation","FieldPathProvider","useFieldPath","ReadOnlyProvider","useReadOnly","RenderField","props","name","Field","fieldPermissions","readOnly","readOnlyFromProps","path","pathFromContext","schemaPath","schemaPathFromContext","readOnlyFromContext","operation","read","permission"],"mappings":"AAAA;AAGA,OAAOA,WAAW,QAAO;AAEzB,SAASC,YAAY,QAAQ,6CAA4C;AACzE,SAASC,iBAAiB,EAAEC,YAAY,QAAQ,gCAA+B;AAC/E,SAASC,gBAAgB,EAAEC,WAAW,QAAQ,+BAA8B;AAE5E,OAAO,MAAMC,cAKR,CAACC;IACJ,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAEC,gBAAgB,EAAEC,UAAUC,iBAAiB,EAAE,GAAGL;IAEvE,MAAM,EAAEM,MAAMC,eAAe,EAAEC,YAAYC,qBAAqB,EAAE,GAAGb;IAErE,MAAMc,sBAAsBZ;IAE5B,MAAMa,YAAYjB;IAElB,MAAMY,OAAO,CAAC,EAAEC,kBAAkB,CAAC,EAAEA,gBAAgB,CAAC,CAAC,GAAG,GAAG,EAAEN,OAAO,CAAC,EAAEA,KAAK,CAAC,GAAG,GAAG,CAAC;IACtF,MAAMO,aAAa,CAAC,EAAEC,wBAAwB,CAAC,EAAEA,sBAAsB,CAAC,GAAG,GAAG,EAAER,OAAO,CAAC,CAAC,EAAEA,KAAK,CAAC,GAAG,GAAG,CAAC;IAExG,wDAAwD;IACxD,iFAAiF;IACjF,IAAIE,kBAAkBS,MAAMC,eAAe,OAAO;QAChD,OAAO;IACT;IAEA,+EAA+E;IAC/E,IAAIT,WAAWC;IAEf,+GAA+G;IAC/G,IAAIK,uBAAuBN,aAAa,OAAOA,WAAW;IAE1D,mFAAmF;IACnF,IAAID,kBAAkB,CAACQ,UAAU,EAAEE,eAAe,OAAO;QACvDT,WAAW;IACb;IAEA,qBACE,oBAACP;QAAiBO,UAAUA;qBAC1B,oBAACT;QAAkBW,MAAMA;QAAME,YAAYA;OACxCN;AAIT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/forms/fields/Array/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAkBvC,OAAO,cAAc,CAAA;AAIrB,QAAA,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA6PnC,CAAA;AAGD,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/forms/fields/Array/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAkBvC,OAAO,cAAc,CAAA;AAIrB,QAAA,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA6PnC,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -244,7 +244,6 @@ const ArrayFieldType = (props)=>{
244
244
  label: getTranslation(labels.singular, i18n)
245
245
  })));
246
246
  };
247
- // eslint-disable-next-line no-restricted-exports
248
247
  export default ArrayFieldType;
249
248
 
250
249
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/forms/fields/Array/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useCallback } from 'react'\n\nimport type { Props } from './types.js'\n\nimport Banner from '../../../elements/Banner/index.js'\nimport { Button } from '../../../elements/Button/index.js'\nimport DraggableSortableItem from '../../../elements/DraggableSortable/DraggableSortableItem/index.js'\nimport DraggableSortable from '../../../elements/DraggableSortable/index.js'\nimport { ErrorPill } from '../../../elements/ErrorPill/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../../providers/Locale/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { scrollToID } from '../../../utilities/scrollToID.js'\nimport { useForm, useFormSubmitted } from '../../Form/context.js'\nimport LabelComp from '../../Label/index.js'\nimport { NullifyLocaleField } from '../../NullifyField/index.js'\nimport useField from '../../useField/index.js'\nimport { fieldBaseClass } from '../shared.js'\nimport { ArrayRow } from './ArrayRow.js'\nimport './index.scss'\n\nconst baseClass = 'array-field'\n\nconst ArrayFieldType: React.FC<Props> = (props) => {\n const {\n name,\n Description,\n Error,\n Label: LabelFromProps,\n className,\n fieldMap,\n forceRender = false,\n indexPath,\n label,\n localized,\n path: pathFromProps,\n permissions,\n readOnly,\n required,\n validate,\n } = props\n\n const Label = LabelFromProps || <LabelComp label={label} required={required} />\n\n const minRows = 'minRows' in props ? props?.minRows : 0\n const maxRows = 'maxRows' in props ? props?.maxRows : undefined\n\n const { setDocFieldPreferences } = useDocumentInfo()\n const { addFieldRow, dispatchFields, setModified } = useForm()\n const submitted = useFormSubmitted()\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { localization } = useConfig()\n\n const editingDefaultLocale = (() => {\n if (localization && localization.fallback) {\n const defaultLocale = localization.defaultLocale || 'en'\n return locale === defaultLocale\n }\n\n return true\n })()\n\n // Handle labeling for Arrays, Global Arrays, and Blocks\n const getLabels = (p: Props) => {\n if ('labels' in p && p?.labels) return p.labels\n if ('label' in p && p?.label) return { plural: undefined, singular: p.label }\n return { plural: t('general:rows'), singular: t('general:row') }\n }\n\n const labels = getLabels(props)\n\n const memoizedValidate = useCallback(\n (value, options) => {\n // alternative locales can be null\n if (!editingDefaultLocale && value === null) {\n return true\n }\n if (typeof validate === 'function') {\n return validate(value, { ...options, maxRows, minRows, required })\n }\n },\n [maxRows, minRows, required, validate, editingDefaultLocale],\n )\n\n const {\n path,\n rows = [],\n schemaPath,\n showError,\n valid,\n value,\n } = useField<number>({\n hasRows: true,\n path: pathFromProps || name,\n validate: memoizedValidate,\n })\n\n const addRow = useCallback(\n async (rowIndex: number) => {\n await addFieldRow({ path, rowIndex, schemaPath })\n setModified(true)\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex + 1}`)\n }, 0)\n },\n [addFieldRow, path, setModified, schemaPath],\n )\n\n const duplicateRow = useCallback(\n (rowIndex: number) => {\n dispatchFields({ type: 'DUPLICATE_ROW', path, rowIndex })\n setModified(true)\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex}`)\n }, 0)\n },\n [dispatchFields, path, setModified],\n )\n\n const removeRow = useCallback(\n (rowIndex: number) => {\n dispatchFields({ type: 'REMOVE_ROW', path, rowIndex })\n setModified(true)\n },\n [dispatchFields, path, setModified],\n )\n\n const moveRow = useCallback(\n (moveFromIndex: number, moveToIndex: number) => {\n dispatchFields({ type: 'MOVE_ROW', moveFromIndex, moveToIndex, path })\n setModified(true)\n },\n [dispatchFields, path, setModified],\n )\n\n const toggleCollapseAll = useCallback(\n (collapsed: boolean) => {\n dispatchFields({ type: 'SET_ALL_ROWS_COLLAPSED', collapsed, path, setDocFieldPreferences })\n },\n [dispatchFields, path, setDocFieldPreferences],\n )\n\n const setCollapse = useCallback(\n (rowID: string, collapsed: boolean) => {\n dispatchFields({ type: 'SET_ROW_COLLAPSED', collapsed, path, rowID, setDocFieldPreferences })\n },\n [dispatchFields, path, setDocFieldPreferences],\n )\n\n const hasMaxRows = maxRows && rows.length >= maxRows\n\n const fieldErrorCount =\n rows.reduce((total, row) => total + (row?.errorPaths?.size || 0), 0) + (valid ? 0 : 1)\n\n const fieldHasErrors = submitted && fieldErrorCount > 0\n\n const showRequired = readOnly && rows.length === 0\n const showMinRows = rows.length < minRows || (required && rows.length === 0)\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n fieldHasErrors ? `${baseClass}--has-error` : `${baseClass}--has-no-error`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n >\n {showError && <div className={`${baseClass}__error-wrap`}>{Error}</div>}\n <header className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-wrap`}>\n <div className={`${baseClass}__header-content`}>\n <h3 className={`${baseClass}__title`}>{Label}</h3>\n {fieldHasErrors && fieldErrorCount > 0 && (\n <ErrorPill count={fieldErrorCount} i18n={i18n} withMessage />\n )}\n </div>\n {rows.length > 0 && (\n <ul className={`${baseClass}__header-actions`}>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(true)}\n type=\"button\"\n >\n {t('fields:collapseAll')}\n </button>\n </li>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(false)}\n type=\"button\"\n >\n {t('fields:showAll')}\n </button>\n </li>\n </ul>\n )}\n </div>\n {Description}\n </header>\n <NullifyLocaleField fieldValue={value} localized={localized} path={path} />\n {(rows.length > 0 || (!valid && (showRequired || showMinRows))) && (\n <DraggableSortable\n className={`${baseClass}__draggable-rows`}\n ids={rows.map((row) => row.id)}\n onDragEnd={({ moveFromIndex, moveToIndex }) => moveRow(moveFromIndex, moveToIndex)}\n >\n {rows.map((row, i) => (\n <DraggableSortableItem disabled={readOnly} id={row.id} key={row.id}>\n {(draggableSortableItemProps) => (\n <ArrayRow\n {...draggableSortableItemProps}\n addRow={addRow}\n duplicateRow={duplicateRow}\n // CustomRowLabel={CustomRowLabel}\n fieldMap={fieldMap}\n forceRender={forceRender}\n hasMaxRows={hasMaxRows}\n indexPath={indexPath}\n labels={labels}\n moveRow={moveRow}\n path={path}\n permissions={permissions}\n readOnly={readOnly}\n removeRow={removeRow}\n row={row}\n rowCount={rows.length}\n rowIndex={i}\n setCollapse={setCollapse}\n />\n )}\n </DraggableSortableItem>\n ))}\n {!valid && (\n <React.Fragment>\n {showRequired && (\n <Banner>\n {t('validation:fieldHasNo', { label: getTranslation(labels.plural, i18n) })}\n </Banner>\n )}\n {showMinRows && (\n <Banner type=\"error\">\n {t('validation:requiresAtLeast', {\n count: minRows,\n label:\n getTranslation(minRows ? labels.plural : labels.singular, i18n) ||\n t(minRows > 1 ? 'general:row' : 'general:rows'),\n })}\n </Banner>\n )}\n </React.Fragment>\n )}\n </DraggableSortable>\n )}\n {!readOnly && !hasMaxRows && (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-row`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={() => addRow(value || 0)}\n >\n {t('fields:addLabel', { label: getTranslation(labels.singular, i18n) })}\n </Button>\n )}\n </div>\n )\n}\n\n// eslint-disable-next-line no-restricted-exports\nexport default ArrayFieldType\n"],"names":["getTranslation","React","useCallback","Banner","Button","DraggableSortableItem","DraggableSortable","ErrorPill","useConfig","useDocumentInfo","useLocale","useTranslation","scrollToID","useForm","useFormSubmitted","LabelComp","NullifyLocaleField","useField","fieldBaseClass","ArrayRow","baseClass","ArrayFieldType","props","name","Description","Error","Label","LabelFromProps","className","fieldMap","forceRender","indexPath","label","localized","path","pathFromProps","permissions","readOnly","required","validate","minRows","maxRows","undefined","setDocFieldPreferences","addFieldRow","dispatchFields","setModified","submitted","code","locale","i18n","t","localization","editingDefaultLocale","fallback","defaultLocale","getLabels","p","labels","plural","singular","memoizedValidate","value","options","rows","schemaPath","showError","valid","hasRows","addRow","rowIndex","setTimeout","duplicateRow","type","removeRow","moveRow","moveFromIndex","moveToIndex","toggleCollapseAll","collapsed","setCollapse","rowID","hasMaxRows","length","fieldErrorCount","reduce","total","row","errorPaths","size","fieldHasErrors","showRequired","showMinRows","div","filter","Boolean","join","id","replace","header","h3","count","withMessage","ul","li","button","onClick","fieldValue","ids","map","onDragEnd","i","disabled","key","draggableSortableItemProps","rowCount","Fragment","buttonStyle","icon","iconPosition","iconStyle"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/forms/fields/Array/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useCallback } from 'react'\n\nimport type { Props } from './types.js'\n\nimport Banner from '../../../elements/Banner/index.js'\nimport { Button } from '../../../elements/Button/index.js'\nimport DraggableSortableItem from '../../../elements/DraggableSortable/DraggableSortableItem/index.js'\nimport DraggableSortable from '../../../elements/DraggableSortable/index.js'\nimport { ErrorPill } from '../../../elements/ErrorPill/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../../providers/Locale/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { scrollToID } from '../../../utilities/scrollToID.js'\nimport { useForm, useFormSubmitted } from '../../Form/context.js'\nimport LabelComp from '../../Label/index.js'\nimport { NullifyLocaleField } from '../../NullifyField/index.js'\nimport useField from '../../useField/index.js'\nimport { fieldBaseClass } from '../shared.js'\nimport { ArrayRow } from './ArrayRow.js'\nimport './index.scss'\n\nconst baseClass = 'array-field'\n\nconst ArrayFieldType: React.FC<Props> = (props) => {\n const {\n name,\n Description,\n Error,\n Label: LabelFromProps,\n className,\n fieldMap,\n forceRender = false,\n indexPath,\n label,\n localized,\n path: pathFromProps,\n permissions,\n readOnly,\n required,\n validate,\n } = props\n\n const Label = LabelFromProps || <LabelComp label={label} required={required} />\n\n const minRows = 'minRows' in props ? props?.minRows : 0\n const maxRows = 'maxRows' in props ? props?.maxRows : undefined\n\n const { setDocFieldPreferences } = useDocumentInfo()\n const { addFieldRow, dispatchFields, setModified } = useForm()\n const submitted = useFormSubmitted()\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { localization } = useConfig()\n\n const editingDefaultLocale = (() => {\n if (localization && localization.fallback) {\n const defaultLocale = localization.defaultLocale || 'en'\n return locale === defaultLocale\n }\n\n return true\n })()\n\n // Handle labeling for Arrays, Global Arrays, and Blocks\n const getLabels = (p: Props) => {\n if ('labels' in p && p?.labels) return p.labels\n if ('label' in p && p?.label) return { plural: undefined, singular: p.label }\n return { plural: t('general:rows'), singular: t('general:row') }\n }\n\n const labels = getLabels(props)\n\n const memoizedValidate = useCallback(\n (value, options) => {\n // alternative locales can be null\n if (!editingDefaultLocale && value === null) {\n return true\n }\n if (typeof validate === 'function') {\n return validate(value, { ...options, maxRows, minRows, required })\n }\n },\n [maxRows, minRows, required, validate, editingDefaultLocale],\n )\n\n const {\n path,\n rows = [],\n schemaPath,\n showError,\n valid,\n value,\n } = useField<number>({\n hasRows: true,\n path: pathFromProps || name,\n validate: memoizedValidate,\n })\n\n const addRow = useCallback(\n async (rowIndex: number) => {\n await addFieldRow({ path, rowIndex, schemaPath })\n setModified(true)\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex + 1}`)\n }, 0)\n },\n [addFieldRow, path, setModified, schemaPath],\n )\n\n const duplicateRow = useCallback(\n (rowIndex: number) => {\n dispatchFields({ type: 'DUPLICATE_ROW', path, rowIndex })\n setModified(true)\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex}`)\n }, 0)\n },\n [dispatchFields, path, setModified],\n )\n\n const removeRow = useCallback(\n (rowIndex: number) => {\n dispatchFields({ type: 'REMOVE_ROW', path, rowIndex })\n setModified(true)\n },\n [dispatchFields, path, setModified],\n )\n\n const moveRow = useCallback(\n (moveFromIndex: number, moveToIndex: number) => {\n dispatchFields({ type: 'MOVE_ROW', moveFromIndex, moveToIndex, path })\n setModified(true)\n },\n [dispatchFields, path, setModified],\n )\n\n const toggleCollapseAll = useCallback(\n (collapsed: boolean) => {\n dispatchFields({ type: 'SET_ALL_ROWS_COLLAPSED', collapsed, path, setDocFieldPreferences })\n },\n [dispatchFields, path, setDocFieldPreferences],\n )\n\n const setCollapse = useCallback(\n (rowID: string, collapsed: boolean) => {\n dispatchFields({ type: 'SET_ROW_COLLAPSED', collapsed, path, rowID, setDocFieldPreferences })\n },\n [dispatchFields, path, setDocFieldPreferences],\n )\n\n const hasMaxRows = maxRows && rows.length >= maxRows\n\n const fieldErrorCount =\n rows.reduce((total, row) => total + (row?.errorPaths?.size || 0), 0) + (valid ? 0 : 1)\n\n const fieldHasErrors = submitted && fieldErrorCount > 0\n\n const showRequired = readOnly && rows.length === 0\n const showMinRows = rows.length < minRows || (required && rows.length === 0)\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n fieldHasErrors ? `${baseClass}--has-error` : `${baseClass}--has-no-error`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n >\n {showError && <div className={`${baseClass}__error-wrap`}>{Error}</div>}\n <header className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-wrap`}>\n <div className={`${baseClass}__header-content`}>\n <h3 className={`${baseClass}__title`}>{Label}</h3>\n {fieldHasErrors && fieldErrorCount > 0 && (\n <ErrorPill count={fieldErrorCount} i18n={i18n} withMessage />\n )}\n </div>\n {rows.length > 0 && (\n <ul className={`${baseClass}__header-actions`}>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(true)}\n type=\"button\"\n >\n {t('fields:collapseAll')}\n </button>\n </li>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(false)}\n type=\"button\"\n >\n {t('fields:showAll')}\n </button>\n </li>\n </ul>\n )}\n </div>\n {Description}\n </header>\n <NullifyLocaleField fieldValue={value} localized={localized} path={path} />\n {(rows.length > 0 || (!valid && (showRequired || showMinRows))) && (\n <DraggableSortable\n className={`${baseClass}__draggable-rows`}\n ids={rows.map((row) => row.id)}\n onDragEnd={({ moveFromIndex, moveToIndex }) => moveRow(moveFromIndex, moveToIndex)}\n >\n {rows.map((row, i) => (\n <DraggableSortableItem disabled={readOnly} id={row.id} key={row.id}>\n {(draggableSortableItemProps) => (\n <ArrayRow\n {...draggableSortableItemProps}\n addRow={addRow}\n duplicateRow={duplicateRow}\n // CustomRowLabel={CustomRowLabel}\n fieldMap={fieldMap}\n forceRender={forceRender}\n hasMaxRows={hasMaxRows}\n indexPath={indexPath}\n labels={labels}\n moveRow={moveRow}\n path={path}\n permissions={permissions}\n readOnly={readOnly}\n removeRow={removeRow}\n row={row}\n rowCount={rows.length}\n rowIndex={i}\n setCollapse={setCollapse}\n />\n )}\n </DraggableSortableItem>\n ))}\n {!valid && (\n <React.Fragment>\n {showRequired && (\n <Banner>\n {t('validation:fieldHasNo', { label: getTranslation(labels.plural, i18n) })}\n </Banner>\n )}\n {showMinRows && (\n <Banner type=\"error\">\n {t('validation:requiresAtLeast', {\n count: minRows,\n label:\n getTranslation(minRows ? labels.plural : labels.singular, i18n) ||\n t(minRows > 1 ? 'general:row' : 'general:rows'),\n })}\n </Banner>\n )}\n </React.Fragment>\n )}\n </DraggableSortable>\n )}\n {!readOnly && !hasMaxRows && (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-row`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={() => addRow(value || 0)}\n >\n {t('fields:addLabel', { label: getTranslation(labels.singular, i18n) })}\n </Button>\n )}\n </div>\n )\n}\n\nexport default ArrayFieldType\n"],"names":["getTranslation","React","useCallback","Banner","Button","DraggableSortableItem","DraggableSortable","ErrorPill","useConfig","useDocumentInfo","useLocale","useTranslation","scrollToID","useForm","useFormSubmitted","LabelComp","NullifyLocaleField","useField","fieldBaseClass","ArrayRow","baseClass","ArrayFieldType","props","name","Description","Error","Label","LabelFromProps","className","fieldMap","forceRender","indexPath","label","localized","path","pathFromProps","permissions","readOnly","required","validate","minRows","maxRows","undefined","setDocFieldPreferences","addFieldRow","dispatchFields","setModified","submitted","code","locale","i18n","t","localization","editingDefaultLocale","fallback","defaultLocale","getLabels","p","labels","plural","singular","memoizedValidate","value","options","rows","schemaPath","showError","valid","hasRows","addRow","rowIndex","setTimeout","duplicateRow","type","removeRow","moveRow","moveFromIndex","moveToIndex","toggleCollapseAll","collapsed","setCollapse","rowID","hasMaxRows","length","fieldErrorCount","reduce","total","row","errorPaths","size","fieldHasErrors","showRequired","showMinRows","div","filter","Boolean","join","id","replace","header","h3","count","withMessage","ul","li","button","onClick","fieldValue","ids","map","onDragEnd","i","disabled","key","draggableSortableItemProps","rowCount","Fragment","buttonStyle","icon","iconPosition","iconStyle"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/forms/fields/Blocks/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAgC,MAAM,OAAO,CAAA;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAqBvC,OAAO,cAAc,CAAA;AAIrB,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA4RhC,CAAA;AAGD,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/forms/fields/Blocks/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAgC,MAAM,OAAO,CAAA;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAqBvC,OAAO,cAAc,CAAA;AAIrB,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA4RhC,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -259,7 +259,6 @@ const BlocksField = (props)=>{
259
259
  labels: labels
260
260
  })));
261
261
  };
262
- // eslint-disable-next-line no-restricted-exports
263
262
  export default BlocksField;
264
263
 
265
264
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/forms/fields/Blocks/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { Fragment, useCallback } from 'react'\n\nimport type { Props } from './types.js'\n\nimport Banner from '../../../elements/Banner/index.js'\nimport { Button } from '../../../elements/Button/index.js'\nimport DraggableSortableItem from '../../../elements/DraggableSortable/DraggableSortableItem/index.js'\nimport DraggableSortable from '../../../elements/DraggableSortable/index.js'\nimport { DrawerToggler } from '../../../elements/Drawer/index.js'\nimport { useDrawerSlug } from '../../../elements/Drawer/useDrawerSlug.js'\nimport { ErrorPill } from '../../../elements/ErrorPill/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../../providers/Locale/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { scrollToID } from '../../../utilities/scrollToID.js'\nimport { useForm, useFormSubmitted } from '../../Form/context.js'\nimport LabelComp from '../../Label/index.js'\nimport { NullifyLocaleField } from '../../NullifyField/index.js'\nimport useField from '../../useField/index.js'\nimport { fieldBaseClass } from '../shared.js'\nimport { BlockRow } from './BlockRow.js'\nimport { BlocksDrawer } from './BlocksDrawer/index.js'\nimport './index.scss'\n\nconst baseClass = 'blocks-field'\n\nconst BlocksField: React.FC<Props> = (props) => {\n const { i18n, t } = useTranslation()\n\n const {\n name,\n Description,\n Error,\n Label: LabelFromProps,\n className,\n forceRender = false,\n indexPath,\n label,\n localized,\n path: pathFromProps,\n permissions,\n readOnly,\n required,\n validate,\n } = props\n\n const Label = LabelFromProps || <LabelComp label={label} required={required} />\n\n const minRows = 'minRows' in props ? props?.minRows : 0\n const maxRows = 'maxRows' in props ? props?.maxRows : undefined\n const blocks = 'blocks' in props ? props?.blocks : undefined\n const labelsFromProps = 'labels' in props ? props?.labels : undefined\n\n const { setDocFieldPreferences } = useDocumentInfo()\n const { addFieldRow, dispatchFields, setModified } = useForm()\n const { code: locale } = useLocale()\n const { localization } = useConfig()\n const drawerSlug = useDrawerSlug('blocks-drawer')\n const submitted = useFormSubmitted()\n\n const labels = {\n plural: t('fields:blocks'),\n singular: t('fields:block'),\n ...labelsFromProps,\n }\n\n const editingDefaultLocale = (() => {\n if (localization && localization.fallback) {\n const defaultLocale = localization.defaultLocale || 'en'\n return locale === defaultLocale\n }\n\n return true\n })()\n\n const memoizedValidate = useCallback(\n (value, options) => {\n // alternative locales can be null\n if (!editingDefaultLocale && value === null) {\n return true\n }\n if (typeof validate === 'function') {\n return validate(value, { ...options, maxRows, minRows, required })\n }\n },\n [maxRows, minRows, required, validate, editingDefaultLocale],\n )\n\n const {\n path,\n rows = [],\n schemaPath,\n showError,\n valid,\n value,\n } = useField<number>({\n hasRows: true,\n path: pathFromProps || name,\n validate: memoizedValidate,\n })\n\n const addRow = useCallback(\n async (rowIndex: number, blockType: string) => {\n await addFieldRow({\n data: { blockType },\n path,\n rowIndex,\n schemaPath: `${schemaPath}.${blockType}`,\n })\n setModified(true)\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex + 1}`)\n }, 0)\n },\n [addFieldRow, path, setModified, schemaPath],\n )\n\n const duplicateRow = useCallback(\n (rowIndex: number) => {\n dispatchFields({ type: 'DUPLICATE_ROW', path, rowIndex })\n setModified(true)\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex + 1}`)\n }, 0)\n },\n [dispatchFields, path, setModified],\n )\n\n const removeRow = useCallback(\n (rowIndex: number) => {\n dispatchFields({\n type: 'REMOVE_ROW',\n path,\n rowIndex,\n })\n\n setModified(true)\n },\n [path, dispatchFields, setModified],\n )\n\n const moveRow = useCallback(\n (moveFromIndex: number, moveToIndex: number) => {\n dispatchFields({ type: 'MOVE_ROW', moveFromIndex, moveToIndex, path })\n setModified(true)\n },\n [dispatchFields, path, setModified],\n )\n\n const toggleCollapseAll = useCallback(\n (collapsed: boolean) => {\n dispatchFields({ type: 'SET_ALL_ROWS_COLLAPSED', collapsed, path, setDocFieldPreferences })\n },\n [dispatchFields, path, setDocFieldPreferences],\n )\n\n const setCollapse = useCallback(\n (rowID: string, collapsed: boolean) => {\n dispatchFields({ type: 'SET_ROW_COLLAPSED', collapsed, path, rowID, setDocFieldPreferences })\n },\n [dispatchFields, path, setDocFieldPreferences],\n )\n\n const hasMaxRows = maxRows && rows.length >= maxRows\n\n const fieldErrorCount = rows.reduce((total, row) => total + (row?.errorPaths?.size || 0), 0)\n const fieldHasErrors = submitted && fieldErrorCount + (valid ? 0 : 1) > 0\n\n const showMinRows = rows.length < minRows || (required && rows.length === 0)\n const showRequired = readOnly && rows.length === 0\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n fieldHasErrors ? `${baseClass}--has-error` : `${baseClass}--has-no-error`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n >\n {showError && <div className={`${baseClass}__error-wrap`}>{Error}</div>}\n <header className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-wrap`}>\n <div className={`${baseClass}__heading-with-error`}>\n <h3>{Label}</h3>\n {fieldHasErrors && fieldErrorCount > 0 && (\n <ErrorPill count={fieldErrorCount} i18n={i18n} withMessage />\n )}\n </div>\n {rows.length > 0 && (\n <ul className={`${baseClass}__header-actions`}>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(true)}\n type=\"button\"\n >\n {t('fields:collapseAll')}\n </button>\n </li>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(false)}\n type=\"button\"\n >\n {t('fields:showAll')}\n </button>\n </li>\n </ul>\n )}\n </div>\n {Description}\n </header>\n <NullifyLocaleField fieldValue={value} localized={localized} path={path} />\n {(rows.length > 0 || (!valid && (showRequired || showMinRows))) && (\n <DraggableSortable\n className={`${baseClass}__rows`}\n ids={rows.map((row) => row.id)}\n onDragEnd={({ moveFromIndex, moveToIndex }) => moveRow(moveFromIndex, moveToIndex)}\n >\n {rows.map((row, i) => {\n const { blockType } = row\n const blockToRender = blocks.find((block) => block.slug === blockType)\n\n if (blockToRender) {\n return (\n <DraggableSortableItem disabled={readOnly} id={row.id} key={row.id}>\n {(draggableSortableItemProps) => (\n <BlockRow\n {...draggableSortableItemProps}\n addRow={addRow}\n block={blockToRender}\n blocks={blocks}\n duplicateRow={duplicateRow}\n forceRender={forceRender}\n hasMaxRows={hasMaxRows}\n indexPath={indexPath}\n labels={labels}\n moveRow={moveRow}\n path={path}\n permissions={permissions}\n readOnly={readOnly}\n removeRow={removeRow}\n row={row}\n rowCount={rows.length}\n rowIndex={i}\n schemaPath={schemaPath}\n setCollapse={setCollapse}\n />\n )}\n </DraggableSortableItem>\n )\n }\n\n return null\n })}\n {!editingDefaultLocale && (\n <React.Fragment>\n {showMinRows && (\n <Banner type=\"error\">\n {t('validation:requiresAtLeast', {\n count: minRows,\n label: getTranslation(\n minRows === 1 || typeof minRows === 'undefined'\n ? labels.singular\n : labels.plural,\n i18n,\n ),\n })}\n </Banner>\n )}\n {showRequired && (\n <Banner>\n {t('validation:fieldHasNo', { label: getTranslation(labels.plural, i18n) })}\n </Banner>\n )}\n </React.Fragment>\n )}\n </DraggableSortable>\n )}\n {!readOnly && !hasMaxRows && (\n <Fragment>\n <DrawerToggler className={`${baseClass}__drawer-toggler`} slug={drawerSlug}>\n <Button\n buttonStyle=\"icon-label\"\n el=\"span\"\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n >\n {t('fields:addLabel', { label: getTranslation(labels.singular, i18n) })}\n </Button>\n </DrawerToggler>\n <BlocksDrawer\n addRow={addRow}\n addRowIndex={rows?.length || 0}\n blocks={blocks}\n drawerSlug={drawerSlug}\n labels={labels}\n />\n </Fragment>\n )}\n </div>\n )\n}\n\n// eslint-disable-next-line no-restricted-exports\nexport default BlocksField\n"],"names":["getTranslation","React","Fragment","useCallback","Banner","Button","DraggableSortableItem","DraggableSortable","DrawerToggler","useDrawerSlug","ErrorPill","useConfig","useDocumentInfo","useLocale","useTranslation","scrollToID","useForm","useFormSubmitted","LabelComp","NullifyLocaleField","useField","fieldBaseClass","BlockRow","BlocksDrawer","baseClass","BlocksField","props","i18n","t","name","Description","Error","Label","LabelFromProps","className","forceRender","indexPath","label","localized","path","pathFromProps","permissions","readOnly","required","validate","minRows","maxRows","undefined","blocks","labelsFromProps","labels","setDocFieldPreferences","addFieldRow","dispatchFields","setModified","code","locale","localization","drawerSlug","submitted","plural","singular","editingDefaultLocale","fallback","defaultLocale","memoizedValidate","value","options","rows","schemaPath","showError","valid","hasRows","addRow","rowIndex","blockType","data","setTimeout","duplicateRow","type","removeRow","moveRow","moveFromIndex","moveToIndex","toggleCollapseAll","collapsed","setCollapse","rowID","hasMaxRows","length","fieldErrorCount","reduce","total","row","errorPaths","size","fieldHasErrors","showMinRows","showRequired","div","filter","Boolean","join","id","replace","header","h3","count","withMessage","ul","li","button","onClick","fieldValue","ids","map","onDragEnd","i","blockToRender","find","block","slug","disabled","key","draggableSortableItemProps","rowCount","buttonStyle","el","icon","iconPosition","iconStyle","addRowIndex"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/forms/fields/Blocks/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { Fragment, useCallback } from 'react'\n\nimport type { Props } from './types.js'\n\nimport Banner from '../../../elements/Banner/index.js'\nimport { Button } from '../../../elements/Button/index.js'\nimport DraggableSortableItem from '../../../elements/DraggableSortable/DraggableSortableItem/index.js'\nimport DraggableSortable from '../../../elements/DraggableSortable/index.js'\nimport { DrawerToggler } from '../../../elements/Drawer/index.js'\nimport { useDrawerSlug } from '../../../elements/Drawer/useDrawerSlug.js'\nimport { ErrorPill } from '../../../elements/ErrorPill/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../../providers/Locale/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { scrollToID } from '../../../utilities/scrollToID.js'\nimport { useForm, useFormSubmitted } from '../../Form/context.js'\nimport LabelComp from '../../Label/index.js'\nimport { NullifyLocaleField } from '../../NullifyField/index.js'\nimport useField from '../../useField/index.js'\nimport { fieldBaseClass } from '../shared.js'\nimport { BlockRow } from './BlockRow.js'\nimport { BlocksDrawer } from './BlocksDrawer/index.js'\nimport './index.scss'\n\nconst baseClass = 'blocks-field'\n\nconst BlocksField: React.FC<Props> = (props) => {\n const { i18n, t } = useTranslation()\n\n const {\n name,\n Description,\n Error,\n Label: LabelFromProps,\n className,\n forceRender = false,\n indexPath,\n label,\n localized,\n path: pathFromProps,\n permissions,\n readOnly,\n required,\n validate,\n } = props\n\n const Label = LabelFromProps || <LabelComp label={label} required={required} />\n\n const minRows = 'minRows' in props ? props?.minRows : 0\n const maxRows = 'maxRows' in props ? props?.maxRows : undefined\n const blocks = 'blocks' in props ? props?.blocks : undefined\n const labelsFromProps = 'labels' in props ? props?.labels : undefined\n\n const { setDocFieldPreferences } = useDocumentInfo()\n const { addFieldRow, dispatchFields, setModified } = useForm()\n const { code: locale } = useLocale()\n const { localization } = useConfig()\n const drawerSlug = useDrawerSlug('blocks-drawer')\n const submitted = useFormSubmitted()\n\n const labels = {\n plural: t('fields:blocks'),\n singular: t('fields:block'),\n ...labelsFromProps,\n }\n\n const editingDefaultLocale = (() => {\n if (localization && localization.fallback) {\n const defaultLocale = localization.defaultLocale || 'en'\n return locale === defaultLocale\n }\n\n return true\n })()\n\n const memoizedValidate = useCallback(\n (value, options) => {\n // alternative locales can be null\n if (!editingDefaultLocale && value === null) {\n return true\n }\n if (typeof validate === 'function') {\n return validate(value, { ...options, maxRows, minRows, required })\n }\n },\n [maxRows, minRows, required, validate, editingDefaultLocale],\n )\n\n const {\n path,\n rows = [],\n schemaPath,\n showError,\n valid,\n value,\n } = useField<number>({\n hasRows: true,\n path: pathFromProps || name,\n validate: memoizedValidate,\n })\n\n const addRow = useCallback(\n async (rowIndex: number, blockType: string) => {\n await addFieldRow({\n data: { blockType },\n path,\n rowIndex,\n schemaPath: `${schemaPath}.${blockType}`,\n })\n setModified(true)\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex + 1}`)\n }, 0)\n },\n [addFieldRow, path, setModified, schemaPath],\n )\n\n const duplicateRow = useCallback(\n (rowIndex: number) => {\n dispatchFields({ type: 'DUPLICATE_ROW', path, rowIndex })\n setModified(true)\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex + 1}`)\n }, 0)\n },\n [dispatchFields, path, setModified],\n )\n\n const removeRow = useCallback(\n (rowIndex: number) => {\n dispatchFields({\n type: 'REMOVE_ROW',\n path,\n rowIndex,\n })\n\n setModified(true)\n },\n [path, dispatchFields, setModified],\n )\n\n const moveRow = useCallback(\n (moveFromIndex: number, moveToIndex: number) => {\n dispatchFields({ type: 'MOVE_ROW', moveFromIndex, moveToIndex, path })\n setModified(true)\n },\n [dispatchFields, path, setModified],\n )\n\n const toggleCollapseAll = useCallback(\n (collapsed: boolean) => {\n dispatchFields({ type: 'SET_ALL_ROWS_COLLAPSED', collapsed, path, setDocFieldPreferences })\n },\n [dispatchFields, path, setDocFieldPreferences],\n )\n\n const setCollapse = useCallback(\n (rowID: string, collapsed: boolean) => {\n dispatchFields({ type: 'SET_ROW_COLLAPSED', collapsed, path, rowID, setDocFieldPreferences })\n },\n [dispatchFields, path, setDocFieldPreferences],\n )\n\n const hasMaxRows = maxRows && rows.length >= maxRows\n\n const fieldErrorCount = rows.reduce((total, row) => total + (row?.errorPaths?.size || 0), 0)\n const fieldHasErrors = submitted && fieldErrorCount + (valid ? 0 : 1) > 0\n\n const showMinRows = rows.length < minRows || (required && rows.length === 0)\n const showRequired = readOnly && rows.length === 0\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n fieldHasErrors ? `${baseClass}--has-error` : `${baseClass}--has-no-error`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n >\n {showError && <div className={`${baseClass}__error-wrap`}>{Error}</div>}\n <header className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-wrap`}>\n <div className={`${baseClass}__heading-with-error`}>\n <h3>{Label}</h3>\n {fieldHasErrors && fieldErrorCount > 0 && (\n <ErrorPill count={fieldErrorCount} i18n={i18n} withMessage />\n )}\n </div>\n {rows.length > 0 && (\n <ul className={`${baseClass}__header-actions`}>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(true)}\n type=\"button\"\n >\n {t('fields:collapseAll')}\n </button>\n </li>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(false)}\n type=\"button\"\n >\n {t('fields:showAll')}\n </button>\n </li>\n </ul>\n )}\n </div>\n {Description}\n </header>\n <NullifyLocaleField fieldValue={value} localized={localized} path={path} />\n {(rows.length > 0 || (!valid && (showRequired || showMinRows))) && (\n <DraggableSortable\n className={`${baseClass}__rows`}\n ids={rows.map((row) => row.id)}\n onDragEnd={({ moveFromIndex, moveToIndex }) => moveRow(moveFromIndex, moveToIndex)}\n >\n {rows.map((row, i) => {\n const { blockType } = row\n const blockToRender = blocks.find((block) => block.slug === blockType)\n\n if (blockToRender) {\n return (\n <DraggableSortableItem disabled={readOnly} id={row.id} key={row.id}>\n {(draggableSortableItemProps) => (\n <BlockRow\n {...draggableSortableItemProps}\n addRow={addRow}\n block={blockToRender}\n blocks={blocks}\n duplicateRow={duplicateRow}\n forceRender={forceRender}\n hasMaxRows={hasMaxRows}\n indexPath={indexPath}\n labels={labels}\n moveRow={moveRow}\n path={path}\n permissions={permissions}\n readOnly={readOnly}\n removeRow={removeRow}\n row={row}\n rowCount={rows.length}\n rowIndex={i}\n schemaPath={schemaPath}\n setCollapse={setCollapse}\n />\n )}\n </DraggableSortableItem>\n )\n }\n\n return null\n })}\n {!editingDefaultLocale && (\n <React.Fragment>\n {showMinRows && (\n <Banner type=\"error\">\n {t('validation:requiresAtLeast', {\n count: minRows,\n label: getTranslation(\n minRows === 1 || typeof minRows === 'undefined'\n ? labels.singular\n : labels.plural,\n i18n,\n ),\n })}\n </Banner>\n )}\n {showRequired && (\n <Banner>\n {t('validation:fieldHasNo', { label: getTranslation(labels.plural, i18n) })}\n </Banner>\n )}\n </React.Fragment>\n )}\n </DraggableSortable>\n )}\n {!readOnly && !hasMaxRows && (\n <Fragment>\n <DrawerToggler className={`${baseClass}__drawer-toggler`} slug={drawerSlug}>\n <Button\n buttonStyle=\"icon-label\"\n el=\"span\"\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n >\n {t('fields:addLabel', { label: getTranslation(labels.singular, i18n) })}\n </Button>\n </DrawerToggler>\n <BlocksDrawer\n addRow={addRow}\n addRowIndex={rows?.length || 0}\n blocks={blocks}\n drawerSlug={drawerSlug}\n labels={labels}\n />\n </Fragment>\n )}\n </div>\n )\n}\n\nexport default BlocksField\n"],"names":["getTranslation","React","Fragment","useCallback","Banner","Button","DraggableSortableItem","DraggableSortable","DrawerToggler","useDrawerSlug","ErrorPill","useConfig","useDocumentInfo","useLocale","useTranslation","scrollToID","useForm","useFormSubmitted","LabelComp","NullifyLocaleField","useField","fieldBaseClass","BlockRow","BlocksDrawer","baseClass","BlocksField","props","i18n","t","name","Description","Error","Label","LabelFromProps","className","forceRender","indexPath","label","localized","path","pathFromProps","permissions","readOnly","required","validate","minRows","maxRows","undefined","blocks","labelsFromProps","labels","setDocFieldPreferences","addFieldRow","dispatchFields","setModified","code","locale","localization","drawerSlug","submitted","plural","singular","editingDefaultLocale","fallback","defaultLocale","memoizedValidate","value","options","rows","schemaPath","showError","valid","hasRows","addRow","rowIndex","blockType","data","setTimeout","duplicateRow","type","removeRow","moveRow","moveFromIndex","moveToIndex","toggleCollapseAll","collapsed","setCollapse","rowID","hasMaxRows","length","fieldErrorCount","reduce","total","row","errorPaths","size","fieldHasErrors","showMinRows","showRequired","div","filter","Boolean","join","id","replace","header","h3","count","withMessage","ul","li","button","onClick","fieldValue","ids","map","onDragEnd","i","blockToRender","find","block","slug","disabled","key","draggableSortableItemProps","rowCount","buttonStyle","el","icon","iconPosition","iconStyle","addRowIndex"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/forms/fields/Checkbox/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAQvC,OAAO,cAAc,CAAA;;AA6FrB,wBAAsC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/forms/fields/Checkbox/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AASvC,OAAO,cAAc,CAAA;;AA6FrB,wBAAsC"}
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
  import React, { useCallback } from 'react';
3
+ import { generateFieldID } from '../../../utilities/generateFieldID.js';
3
4
  import { useForm } from '../../Form/context.js';
4
5
  import LabelComp from '../../Label/index.js';
5
6
  import useField from '../../useField/index.js';
@@ -42,7 +43,7 @@ const Checkbox = (props)=>{
42
43
  value
43
44
  ]);
44
45
  const checked = checkedFromProps || Boolean(value);
45
- const fieldID = id || `field-${path?.replace(/\./g, '__')}${uuid ? `-${uuid}` : ''}`;
46
+ const fieldID = id || generateFieldID(path, uuid);
46
47
  return /*#__PURE__*/ React.createElement("div", {
47
48
  className: [
48
49
  fieldBaseClass,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/forms/fields/Checkbox/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientValidate } from 'payload/types'\n\nimport React, { useCallback } from 'react'\n\nimport type { Props } from './types.js'\n\nimport { useForm } from '../../Form/context.js'\nimport LabelComp from '../../Label/index.js'\nimport useField from '../../useField/index.js'\nimport { withCondition } from '../../withCondition/index.js'\nimport { fieldBaseClass } from '../shared.js'\nimport { CheckboxInput } from './Input.js'\nimport './index.scss'\n\nconst baseClass = 'checkbox'\n\nconst Checkbox: React.FC<Props> = (props) => {\n const {\n id,\n name,\n AfterInput,\n BeforeInput,\n Description,\n Error,\n Label: LabelFromProps,\n checked: checkedFromProps,\n className,\n disableFormData,\n label,\n onChange: onChangeFromProps,\n partialChecked,\n path: pathFromProps,\n readOnly,\n required,\n style,\n validate,\n width,\n } = props\n\n const { uuid } = useForm()\n\n const Label = LabelFromProps || <LabelComp label={label} required={required} />\n\n const memoizedValidate: ClientValidate = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, required })\n }\n },\n [validate, required],\n )\n\n const { path, setValue, showError, value } = useField({\n disableFormData,\n path: pathFromProps || name,\n validate: memoizedValidate,\n })\n\n const onToggle = useCallback(() => {\n if (!readOnly) {\n setValue(!value)\n if (typeof onChangeFromProps === 'function') onChangeFromProps(!value)\n }\n }, [onChangeFromProps, readOnly, setValue, value])\n\n const checked = checkedFromProps || Boolean(value)\n\n const fieldID = id || `field-${path?.replace(/\\./g, '__')}${uuid ? `-${uuid}` : ''}`\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n showError && 'error',\n className,\n value && `${baseClass}--checked`,\n readOnly && `${baseClass}--read-only`,\n ]\n .filter(Boolean)\n .join(' ')}\n style={{\n ...style,\n width,\n }}\n >\n <div className={`${baseClass}__error-wrap`}>{Error}</div>\n <CheckboxInput\n AfterInput={AfterInput}\n BeforeInput={BeforeInput}\n Label={Label}\n checked={checked}\n id={fieldID}\n inputRef={null}\n name={path}\n onToggle={onToggle}\n partialChecked={partialChecked}\n readOnly={readOnly}\n required={required}\n />\n {Description}\n </div>\n )\n}\n\nexport default withCondition(Checkbox)\n"],"names":["React","useCallback","useForm","LabelComp","useField","withCondition","fieldBaseClass","CheckboxInput","baseClass","Checkbox","props","id","name","AfterInput","BeforeInput","Description","Error","Label","LabelFromProps","checked","checkedFromProps","className","disableFormData","label","onChange","onChangeFromProps","partialChecked","path","pathFromProps","readOnly","required","style","validate","width","uuid","memoizedValidate","value","options","setValue","showError","onToggle","Boolean","fieldID","replace","div","filter","join","inputRef"],"mappings":"AAAA;AAGA,OAAOA,SAASC,WAAW,QAAQ,QAAO;AAI1C,SAASC,OAAO,QAAQ,wBAAuB;AAC/C,OAAOC,eAAe,uBAAsB;AAC5C,OAAOC,cAAc,0BAAyB;AAC9C,SAASC,aAAa,QAAQ,+BAA8B;AAC5D,SAASC,cAAc,QAAQ,eAAc;AAC7C,SAASC,aAAa,QAAQ,aAAY;AAG1C,MAAMC,YAAY;AAElB,MAAMC,WAA4B,CAACC;IACjC,MAAM,EACJC,EAAE,EACFC,IAAI,EACJC,UAAU,EACVC,WAAW,EACXC,WAAW,EACXC,KAAK,EACLC,OAAOC,cAAc,EACrBC,SAASC,gBAAgB,EACzBC,SAAS,EACTC,eAAe,EACfC,KAAK,EACLC,UAAUC,iBAAiB,EAC3BC,cAAc,EACdC,MAAMC,aAAa,EACnBC,QAAQ,EACRC,QAAQ,EACRC,KAAK,EACLC,QAAQ,EACRC,KAAK,EACN,GAAGvB;IAEJ,MAAM,EAAEwB,IAAI,EAAE,GAAGhC;IAEjB,MAAMe,QAAQC,gCAAkB,oBAACf;QAAUoB,OAAOA;QAAOO,UAAUA;;IAEnE,MAAMK,mBAAmClC,YACvC,CAACmC,OAAOC;QACN,IAAI,OAAOL,aAAa,YAAY;YAClC,OAAOA,SAASI,OAAO;gBAAE,GAAGC,OAAO;gBAAEP;YAAS;QAChD;IACF,GACA;QAACE;QAAUF;KAAS;IAGtB,MAAM,EAAEH,IAAI,EAAEW,QAAQ,EAAEC,SAAS,EAAEH,KAAK,EAAE,GAAGhC,SAAS;QACpDkB;QACAK,MAAMC,iBAAiBhB;QACvBoB,UAAUG;IACZ;IAEA,MAAMK,WAAWvC,YAAY;QAC3B,IAAI,CAAC4B,UAAU;YACbS,SAAS,CAACF;YACV,IAAI,OAAOX,sBAAsB,YAAYA,kBAAkB,CAACW;QAClE;IACF,GAAG;QAACX;QAAmBI;QAAUS;QAAUF;KAAM;IAEjD,MAAMjB,UAAUC,oBAAoBqB,QAAQL;IAE5C,MAAMM,UAAU/B,MAAM,CAAC,MAAM,EAAEgB,MAAMgB,QAAQ,OAAO,MAAM,EAAET,OAAO,CAAC,CAAC,EAAEA,KAAK,CAAC,GAAG,GAAG,CAAC;IAEpF,qBACE,oBAACU;QACCvB,WAAW;YACTf;YACAE;YACA+B,aAAa;YACblB;YACAe,SAAS,CAAC,EAAE5B,UAAU,SAAS,CAAC;YAChCqB,YAAY,CAAC,EAAErB,UAAU,WAAW,CAAC;SACtC,CACEqC,MAAM,CAACJ,SACPK,IAAI,CAAC;QACRf,OAAO;YACL,GAAGA,KAAK;YACRE;QACF;qBAEA,oBAACW;QAAIvB,WAAW,CAAC,EAAEb,UAAU,YAAY,CAAC;OAAGQ,sBAC7C,oBAACT;QACCM,YAAYA;QACZC,aAAaA;QACbG,OAAOA;QACPE,SAASA;QACTR,IAAI+B;QACJK,UAAU;QACVnC,MAAMe;QACNa,UAAUA;QACVd,gBAAgBA;QAChBG,UAAUA;QACVC,UAAUA;QAEXf;AAGP;AAEA,eAAeV,cAAcI,UAAS"}
1
+ {"version":3,"sources":["../../../../src/forms/fields/Checkbox/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientValidate } from 'payload/types'\n\nimport React, { useCallback } from 'react'\n\nimport type { Props } from './types.js'\n\nimport { generateFieldID } from '../../../utilities/generateFieldID.js'\nimport { useForm } from '../../Form/context.js'\nimport LabelComp from '../../Label/index.js'\nimport useField from '../../useField/index.js'\nimport { withCondition } from '../../withCondition/index.js'\nimport { fieldBaseClass } from '../shared.js'\nimport { CheckboxInput } from './Input.js'\nimport './index.scss'\n\nconst baseClass = 'checkbox'\n\nconst Checkbox: React.FC<Props> = (props) => {\n const {\n id,\n name,\n AfterInput,\n BeforeInput,\n Description,\n Error,\n Label: LabelFromProps,\n checked: checkedFromProps,\n className,\n disableFormData,\n label,\n onChange: onChangeFromProps,\n partialChecked,\n path: pathFromProps,\n readOnly,\n required,\n style,\n validate,\n width,\n } = props\n\n const { uuid } = useForm()\n\n const Label = LabelFromProps || <LabelComp label={label} required={required} />\n\n const memoizedValidate: ClientValidate = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, required })\n }\n },\n [validate, required],\n )\n\n const { path, setValue, showError, value } = useField({\n disableFormData,\n path: pathFromProps || name,\n validate: memoizedValidate,\n })\n\n const onToggle = useCallback(() => {\n if (!readOnly) {\n setValue(!value)\n if (typeof onChangeFromProps === 'function') onChangeFromProps(!value)\n }\n }, [onChangeFromProps, readOnly, setValue, value])\n\n const checked = checkedFromProps || Boolean(value)\n\n const fieldID = id || generateFieldID(path, uuid)\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n showError && 'error',\n className,\n value && `${baseClass}--checked`,\n readOnly && `${baseClass}--read-only`,\n ]\n .filter(Boolean)\n .join(' ')}\n style={{\n ...style,\n width,\n }}\n >\n <div className={`${baseClass}__error-wrap`}>{Error}</div>\n <CheckboxInput\n AfterInput={AfterInput}\n BeforeInput={BeforeInput}\n Label={Label}\n checked={checked}\n id={fieldID}\n inputRef={null}\n name={path}\n onToggle={onToggle}\n partialChecked={partialChecked}\n readOnly={readOnly}\n required={required}\n />\n {Description}\n </div>\n )\n}\n\nexport default withCondition(Checkbox)\n"],"names":["React","useCallback","generateFieldID","useForm","LabelComp","useField","withCondition","fieldBaseClass","CheckboxInput","baseClass","Checkbox","props","id","name","AfterInput","BeforeInput","Description","Error","Label","LabelFromProps","checked","checkedFromProps","className","disableFormData","label","onChange","onChangeFromProps","partialChecked","path","pathFromProps","readOnly","required","style","validate","width","uuid","memoizedValidate","value","options","setValue","showError","onToggle","Boolean","fieldID","div","filter","join","inputRef"],"mappings":"AAAA;AAGA,OAAOA,SAASC,WAAW,QAAQ,QAAO;AAI1C,SAASC,eAAe,QAAQ,wCAAuC;AACvE,SAASC,OAAO,QAAQ,wBAAuB;AAC/C,OAAOC,eAAe,uBAAsB;AAC5C,OAAOC,cAAc,0BAAyB;AAC9C,SAASC,aAAa,QAAQ,+BAA8B;AAC5D,SAASC,cAAc,QAAQ,eAAc;AAC7C,SAASC,aAAa,QAAQ,aAAY;AAG1C,MAAMC,YAAY;AAElB,MAAMC,WAA4B,CAACC;IACjC,MAAM,EACJC,EAAE,EACFC,IAAI,EACJC,UAAU,EACVC,WAAW,EACXC,WAAW,EACXC,KAAK,EACLC,OAAOC,cAAc,EACrBC,SAASC,gBAAgB,EACzBC,SAAS,EACTC,eAAe,EACfC,KAAK,EACLC,UAAUC,iBAAiB,EAC3BC,cAAc,EACdC,MAAMC,aAAa,EACnBC,QAAQ,EACRC,QAAQ,EACRC,KAAK,EACLC,QAAQ,EACRC,KAAK,EACN,GAAGvB;IAEJ,MAAM,EAAEwB,IAAI,EAAE,GAAGhC;IAEjB,MAAMe,QAAQC,gCAAkB,oBAACf;QAAUoB,OAAOA;QAAOO,UAAUA;;IAEnE,MAAMK,mBAAmCnC,YACvC,CAACoC,OAAOC;QACN,IAAI,OAAOL,aAAa,YAAY;YAClC,OAAOA,SAASI,OAAO;gBAAE,GAAGC,OAAO;gBAAEP;YAAS;QAChD;IACF,GACA;QAACE;QAAUF;KAAS;IAGtB,MAAM,EAAEH,IAAI,EAAEW,QAAQ,EAAEC,SAAS,EAAEH,KAAK,EAAE,GAAGhC,SAAS;QACpDkB;QACAK,MAAMC,iBAAiBhB;QACvBoB,UAAUG;IACZ;IAEA,MAAMK,WAAWxC,YAAY;QAC3B,IAAI,CAAC6B,UAAU;YACbS,SAAS,CAACF;YACV,IAAI,OAAOX,sBAAsB,YAAYA,kBAAkB,CAACW;QAClE;IACF,GAAG;QAACX;QAAmBI;QAAUS;QAAUF;KAAM;IAEjD,MAAMjB,UAAUC,oBAAoBqB,QAAQL;IAE5C,MAAMM,UAAU/B,MAAMV,gBAAgB0B,MAAMO;IAE5C,qBACE,oBAACS;QACCtB,WAAW;YACTf;YACAE;YACA+B,aAAa;YACblB;YACAe,SAAS,CAAC,EAAE5B,UAAU,SAAS,CAAC;YAChCqB,YAAY,CAAC,EAAErB,UAAU,WAAW,CAAC;SACtC,CACEoC,MAAM,CAACH,SACPI,IAAI,CAAC;QACRd,OAAO;YACL,GAAGA,KAAK;YACRE;QACF;qBAEA,oBAACU;QAAItB,WAAW,CAAC,EAAEb,UAAU,YAAY,CAAC;OAAGQ,sBAC7C,oBAACT;QACCM,YAAYA;QACZC,aAAaA;QACbG,OAAOA;QACPE,SAASA;QACTR,IAAI+B;QACJI,UAAU;QACVlC,MAAMe;QACNa,UAAUA;QACVd,gBAAgBA;QAChBG,UAAUA;QACVC,UAAUA;QAEXf;AAGP;AAEA,eAAeV,cAAcI,UAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/forms/fields/JSON/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAOvC,OAAO,cAAc,CAAA;;AAwGrB,wBAAuC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/forms/fields/JSON/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAOvC,OAAO,cAAc,CAAA;;AA4GrB,wBAAuC"}
@@ -12,6 +12,7 @@ const JSONField = (props)=>{
12
12
  label: label,
13
13
  required: required
14
14
  });
15
+ // eslint-disable-next-line react/destructuring-assignment
15
16
  const editorOptions = 'editorOptions' in props ? props.editorOptions : {};
16
17
  const [stringValue, setStringValue] = useState();
17
18
  const [jsonError, setJsonError] = useState();
@@ -36,9 +37,10 @@ const JSONField = (props)=>{
36
37
  if (readOnly) return;
37
38
  setStringValue(val);
38
39
  try {
39
- setValue(JSON.parse(val));
40
+ setValue(val ? JSON.stringify(JSON.parse(val)) : null);
40
41
  setJsonError(undefined);
41
42
  } catch (e) {
43
+ setValue(val ? val : null);
42
44
  setJsonError(e);
43
45
  }
44
46
  }, [
@@ -48,7 +50,7 @@ const JSONField = (props)=>{
48
50
  ]);
49
51
  useEffect(()=>{
50
52
  if (hasLoadedValue) return;
51
- setStringValue(JSON.stringify(value ? value : initialValue, null, 2));
53
+ setStringValue(value || initialValue ? JSON.stringify(value ? value : initialValue, null, 2) : '');
52
54
  setHasLoadedValue(true);
53
55
  }, [
54
56
  initialValue,