@payloadcms/ui 3.0.0-beta.95 → 3.0.0-beta.96
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.
- package/dist/elements/Autosave/index.d.ts.map +1 -1
- package/dist/elements/Autosave/index.js +6 -2
- package/dist/elements/Autosave/index.js.map +1 -1
- package/dist/elements/Banner/index.d.ts.map +1 -1
- package/dist/elements/Banner/index.js +6 -2
- package/dist/elements/Banner/index.js.map +1 -1
- package/dist/elements/BulkUpload/ActionsBar/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/ActionsBar/index.js.map +1 -1
- package/dist/elements/BulkUpload/ActionsBar/index.scss +4 -4
- package/dist/elements/BulkUpload/AddFilesView/index.js +1 -0
- package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
- package/dist/elements/BulkUpload/AddFilesView/index.scss +1 -1
- package/dist/elements/BulkUpload/EditForm/index.js +6 -2
- package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
- package/dist/elements/BulkUpload/FileSidebar/index.scss +8 -10
- package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.js +3 -1
- package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
- package/dist/elements/BulkUpload/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/index.js.map +1 -1
- package/dist/elements/Button/index.d.ts.map +1 -1
- package/dist/elements/Button/index.js +23 -15
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/Collapsible/index.d.ts.map +1 -1
- package/dist/elements/Collapsible/index.js.map +1 -1
- package/dist/elements/ColumnSelector/index.d.ts.map +1 -1
- package/dist/elements/ColumnSelector/index.js.map +1 -1
- package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/elements/DatePicker/DatePicker.js.map +1 -1
- package/dist/elements/DraggableSortable/index.d.ts.map +1 -1
- package/dist/elements/DraggableSortable/index.js.map +1 -1
- package/dist/elements/Drawer/index.d.ts.map +1 -1
- package/dist/elements/Drawer/index.js.map +1 -1
- package/dist/elements/Dropzone/index.scss +1 -1
- package/dist/elements/EditUpload/index.d.ts.map +1 -1
- package/dist/elements/EditUpload/index.js +23 -11
- package/dist/elements/EditUpload/index.js.map +1 -1
- package/dist/elements/ErrorPill/index.d.ts.map +1 -1
- package/dist/elements/ErrorPill/index.js +3 -1
- package/dist/elements/ErrorPill/index.js.map +1 -1
- package/dist/elements/FieldSelect/index.d.ts.map +1 -1
- package/dist/elements/FieldSelect/index.js +3 -1
- package/dist/elements/FieldSelect/index.js.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/ListDrawer/index.scss +1 -1
- package/dist/elements/Pagination/index.d.ts.map +1 -1
- package/dist/elements/Pagination/index.js +19 -9
- package/dist/elements/Pagination/index.js.map +1 -1
- package/dist/elements/PerPage/index.d.ts.map +1 -1
- package/dist/elements/PerPage/index.js.map +1 -1
- package/dist/elements/Pill/index.d.ts.map +1 -1
- package/dist/elements/Pill/index.js +11 -5
- package/dist/elements/Pill/index.js.map +1 -1
- package/dist/elements/Popup/PopupTrigger/index.d.ts.map +1 -1
- package/dist/elements/Popup/PopupTrigger/index.js +3 -1
- package/dist/elements/Popup/PopupTrigger/index.js.map +1 -1
- package/dist/elements/Popup/index.d.ts.map +1 -1
- package/dist/elements/Popup/index.js +3 -1
- package/dist/elements/Popup/index.js.map +1 -1
- package/dist/elements/PreviewButton/usePreviewURL.d.ts.map +1 -1
- package/dist/elements/PreviewButton/usePreviewURL.js +18 -6
- package/dist/elements/PreviewButton/usePreviewURL.js.map +1 -1
- package/dist/elements/PreviewSizes/index.d.ts.map +1 -1
- package/dist/elements/PreviewSizes/index.js +15 -5
- package/dist/elements/PreviewSizes/index.js.map +1 -1
- package/dist/elements/PublishButton/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/index.js +5 -3
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/ReactSelect/DropdownIndicator/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/DropdownIndicator/index.js +3 -1
- package/dist/elements/ReactSelect/DropdownIndicator/index.js.map +1 -1
- package/dist/elements/ReactSelect/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/index.js +3 -1
- package/dist/elements/ReactSelect/index.js.map +1 -1
- package/dist/elements/SaveButton/index.d.ts.map +1 -1
- package/dist/elements/SaveButton/index.js +5 -3
- package/dist/elements/SaveButton/index.js.map +1 -1
- package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
- package/dist/elements/SaveDraftButton/index.js +11 -5
- package/dist/elements/SaveDraftButton/index.js.map +1 -1
- package/dist/elements/SearchFilter/index.d.ts.map +1 -1
- package/dist/elements/SearchFilter/index.js +3 -1
- package/dist/elements/SearchFilter/index.js.map +1 -1
- package/dist/elements/ShimmerEffect/index.d.ts.map +1 -1
- package/dist/elements/ShimmerEffect/index.js.map +1 -1
- package/dist/elements/SortColumn/index.d.ts.map +1 -1
- package/dist/elements/SortColumn/index.js.map +1 -1
- package/dist/elements/SortComplex/index.d.ts.map +1 -1
- package/dist/elements/SortComplex/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/File/index.scss +5 -5
- package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -1
- package/dist/elements/TableColumns/buildColumnState.js +9 -3
- package/dist/elements/TableColumns/buildColumnState.js.map +1 -1
- package/dist/elements/TableColumns/index.d.ts.map +1 -1
- package/dist/elements/TableColumns/index.js.map +1 -1
- package/dist/elements/Tooltip/index.d.ts.map +1 -1
- package/dist/elements/Tooltip/index.js.map +1 -1
- package/dist/elements/Upload/index.d.ts.map +1 -1
- package/dist/elements/Upload/index.js +37 -32
- package/dist/elements/Upload/index.js.map +1 -1
- package/dist/elements/Upload/index.scss +27 -1
- package/dist/elements/WhereBuilder/reduceClientFields.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/reduceClientFields.js +3 -1
- package/dist/elements/WhereBuilder/reduceClientFields.js.map +1 -1
- package/dist/exports/client/{CodeEditor-P66JEENA.js → CodeEditor-CHKRX3U2.js} +4 -4
- package/dist/exports/client/{CodeEditor-P66JEENA.js.map → CodeEditor-CHKRX3U2.js.map} +4 -4
- package/dist/exports/client/{DatePicker-E6IJFDN2.js → DatePicker-OLRZVTAD.js} +2 -2
- package/dist/exports/client/{chunk-XKP472RX.js → chunk-BGA6EPOL.js} +1 -1
- package/dist/exports/client/{chunk-XKP472RX.js.map → chunk-BGA6EPOL.js.map} +2 -2
- package/dist/exports/client/{chunk-OBXEO4WP.js → chunk-JINNHJP7.js} +1 -1
- package/dist/exports/client/{chunk-OBXEO4WP.js.map → chunk-JINNHJP7.js.map} +2 -2
- package/dist/exports/client/index.js +19 -19
- package/dist/exports/client/index.js.map +3 -3
- package/dist/exports/shared/index.js.map +2 -2
- package/dist/fields/Array/index.d.ts.map +1 -1
- package/dist/fields/Array/index.js.map +1 -1
- package/dist/fields/Blocks/BlocksDrawer/index.d.ts.map +1 -1
- package/dist/fields/Blocks/BlocksDrawer/index.js +3 -1
- package/dist/fields/Blocks/BlocksDrawer/index.js.map +1 -1
- package/dist/fields/Checkbox/index.d.ts.map +1 -1
- package/dist/fields/Checkbox/index.js.map +1 -1
- package/dist/fields/Collapsible/index.d.ts.map +1 -1
- package/dist/fields/Collapsible/index.js.map +1 -1
- package/dist/fields/DateTime/index.d.ts.map +1 -1
- package/dist/fields/DateTime/index.js.map +1 -1
- package/dist/fields/JSON/index.d.ts.map +1 -1
- package/dist/fields/JSON/index.js +16 -8
- package/dist/fields/JSON/index.js.map +1 -1
- package/dist/fields/RadioGroup/index.d.ts.map +1 -1
- package/dist/fields/RadioGroup/index.js.map +1 -1
- package/dist/fields/Relationship/index.d.ts.map +1 -1
- package/dist/fields/Relationship/index.js +9 -3
- package/dist/fields/Relationship/index.js.map +1 -1
- package/dist/fields/Relationship/select-components/MultiValueLabel/index.d.ts.map +1 -1
- package/dist/fields/Relationship/select-components/MultiValueLabel/index.js.map +1 -1
- package/dist/fields/Select/index.d.ts.map +1 -1
- package/dist/fields/Select/index.js +8 -6
- package/dist/fields/Select/index.js.map +1 -1
- package/dist/fields/Text/index.d.ts.map +1 -1
- package/dist/fields/Text/index.js.map +1 -1
- package/dist/fields/Textarea/index.d.ts.map +1 -1
- package/dist/fields/Textarea/index.js.map +1 -1
- package/dist/fields/Upload/HasMany/index.d.ts.map +1 -1
- package/dist/fields/Upload/HasMany/index.js.map +1 -1
- package/dist/fields/Upload/HasOne/index.scss +0 -1
- package/dist/fields/Upload/Input.d.ts.map +1 -1
- package/dist/fields/Upload/Input.js +575 -268
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/fields/Upload/RelationshipContent/index.d.ts.map +1 -1
- package/dist/fields/Upload/RelationshipContent/index.js +9 -4
- package/dist/fields/Upload/RelationshipContent/index.js.map +1 -1
- package/dist/fields/Upload/RelationshipContent/index.scss +6 -3
- package/dist/fields/Upload/UploadCard/index.scss +3 -3
- package/dist/fields/Upload/index.d.ts.map +1 -1
- package/dist/fields/Upload/index.js +4 -3
- package/dist/fields/Upload/index.js.map +1 -1
- package/dist/fields/Upload/index.scss +8 -6
- package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
- package/dist/forms/Form/fieldReducer.js +6 -2
- package/dist/forms/Form/fieldReducer.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +18 -6
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
- package/dist/forms/Form/mergeServerFormState.js +3 -1
- package/dist/forms/Form/mergeServerFormState.js.map +1 -1
- package/dist/forms/Form/rowHelpers.d.ts.map +1 -1
- package/dist/forms/Form/rowHelpers.js +9 -3
- package/dist/forms/Form/rowHelpers.js.map +1 -1
- package/dist/forms/Form/rows.d.ts.map +1 -1
- package/dist/forms/Form/rows.js +3 -1
- package/dist/forms/Form/rows.js.map +1 -1
- package/dist/forms/NullifyField/index.d.ts.map +1 -1
- package/dist/forms/NullifyField/index.js.map +1 -1
- package/dist/forms/RenderFields/RenderField.d.ts.map +1 -1
- package/dist/forms/RenderFields/RenderField.js +3 -1
- package/dist/forms/RenderFields/RenderField.js.map +1 -1
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.js +6 -2
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.js.map +1 -1
- package/dist/graphics/Account/index.d.ts.map +1 -1
- package/dist/graphics/Account/index.js.map +1 -1
- package/dist/hooks/useHotkey.d.ts.map +1 -1
- package/dist/hooks/useHotkey.js.map +1 -1
- package/dist/hooks/useIntersect.d.ts.map +1 -1
- package/dist/hooks/useIntersect.js.map +1 -1
- package/dist/providers/Auth/index.d.ts.map +1 -1
- package/dist/providers/Auth/index.js +6 -2
- package/dist/providers/Auth/index.js.map +1 -1
- package/dist/providers/Config/createClientConfig/collections.d.ts.map +1 -1
- package/dist/providers/Config/createClientConfig/collections.js +3 -1
- package/dist/providers/Config/createClientConfig/collections.js.map +1 -1
- package/dist/providers/Config/createClientConfig/getCreateMappedComponent.d.ts.map +1 -1
- package/dist/providers/Config/createClientConfig/getCreateMappedComponent.js +3 -1
- package/dist/providers/Config/createClientConfig/getCreateMappedComponent.js.map +1 -1
- package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/index.js +12 -4
- package/dist/providers/DocumentInfo/index.js.map +1 -1
- package/dist/providers/ListQuery/index.d.ts.map +1 -1
- package/dist/providers/ListQuery/index.js +6 -2
- package/dist/providers/ListQuery/index.js.map +1 -1
- package/dist/providers/Locale/index.d.ts.map +1 -1
- package/dist/providers/Locale/index.js.map +1 -1
- package/dist/providers/Preferences/index.d.ts.map +1 -1
- package/dist/providers/Preferences/index.js +3 -1
- package/dist/providers/Preferences/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/buildFormState.d.ts.map +1 -1
- package/dist/utilities/buildFormState.js +6 -2
- package/dist/utilities/buildFormState.js.map +1 -1
- package/dist/utilities/reduceFieldsToValuesWithValidation.d.ts.map +1 -1
- package/dist/utilities/reduceFieldsToValuesWithValidation.js +6 -2
- package/dist/utilities/reduceFieldsToValuesWithValidation.js.map +1 -1
- package/package.json +8 -8
- /package/dist/exports/client/{DatePicker-E6IJFDN2.js.map → DatePicker-OLRZVTAD.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["dequal","useRouter","serialize","getDataByPath","getDataByPathFunc","getSiblingData","getSiblingDataFunc","reduceFieldsToValues","wait","React","useCallback","useEffect","useReducer","useRef","useState","toast","useDebouncedEffect","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useLocale","useOperation","useTranslation","requests","getFormState","FormContext","FormFieldsContext","FormWatchContext","InitializingContext","ModifiedContext","ProcessingContext","SubmittedContext","errorMessages","fieldReducer","initContextState","mergeServerFormState","baseClass","Form","props","id","collectionSlug","globalSlug","action","beforeSubmit","children","className","disableSuccessStatus","disableValidationOnSubmit","disabled","disabledFromProps","handleResponse","initialState","isInitializing","initializingFromProps","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","code","locale","i18n","t","refreshCookie","user","operation","config","routes","api","apiRoute","serverURL","setDisabled","isMounted","setIsMounted","modified","setModified","initializing","setInitializing","processing","setProcessing","setSubmitted","formRef","contextRef","fieldsReducer","fields","dispatchFields","current","validateForm","validatedFieldState","isValid","dataFromContext","getData","data","validationPromises","Object","entries","map","path","field","validatedField","passesCondition","validationResult","valid","validate","valueToValidate","value","rows","Array","isArray","preferences","req","payload","siblingData","errorMessage","Promise","all","type","state","submit","options","e","actionArg","methodToUse","overrides","skipValidation","preventDefault","successToast","errorToast","promise","resolve","reject","hasFormSubmitAction","success","error","loading","stopPropagation","revalidatedFormState","reduce","priorOnChange","beforeSubmitFn","result","formState","every","formData","createFormData","res","toLowerCase","body","headers","language","contentType","get","isJSON","indexOf","json","status","push","message","errors","fieldErrors","nonFieldErrors","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","forEach","dataError","statusText","console","getFields","getField","file","dataWithOverrides","dataToSerialize","_payload","JSON","stringify","indices","nullsAsUndefineds","reset","newState","schemaPath","replaceState","getFieldStateBySchemaPath","fieldSchema","addFieldRow","rowIndex","subFieldState","blockType","removeFieldRow","replaceFieldRow","optimize","classes","filter","Boolean","join","executeOnChange","onChangeFn","changed","_jsx","noValidate","ref","Provider","useAllFormFields","useForm","useFormFields","useFormModified","useFormProcessing","useFormSubmitted","useWatchForm"],"sources":["../../../src/forms/Form/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, PayloadRequest } from 'payload'\n\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { useRouter } from 'next/navigation.js'\nimport { serialize } from 'object-to-formdata'\nimport {\n getDataByPath as getDataByPathFunc,\n getSiblingData as getSiblingDataFunc,\n reduceFieldsToValues,\n wait,\n} from 'payload/shared'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type {\n Context as FormContextType,\n FormProps,\n GetDataByPath,\n SubmitOptions,\n} 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 { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/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 InitializingContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n} from './context.js'\nimport { errorMessages } from './errorMessages.js'\nimport { fieldReducer } from './fieldReducer.js'\nimport { initContextState } from './initContextState.js'\nimport { mergeServerFormState } from './mergeServerFormState.js'\n\nconst baseClass = 'form'\n\nexport const Form: React.FC<FormProps> = (props) => {\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n\n const {\n action,\n beforeSubmit,\n children,\n className,\n disableSuccessStatus,\n disableValidationOnSubmit,\n disabled: disabledFromProps,\n // fields: fieldsFromProps = collection?.fields || global?.fields,\n handleResponse,\n initialState, // fully formed initial field state\n isInitializing: initializingFromProps,\n onChange,\n onSubmit,\n onSuccess,\n redirect,\n submitted: submittedFromProps,\n uuid,\n waitForAutocomplete,\n } = props\n\n const method = 'method' in props ? props?.method : undefined\n\n const router = useRouter()\n\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { refreshCookie, user } = useAuth()\n const operation = useOperation()\n\n const { config } = useConfig()\n const {\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const [disabled, setDisabled] = useState(disabledFromProps || false)\n const [isMounted, setIsMounted] = useState(false)\n const [modified, setModified] = useState(false)\n const [initializing, setInitializing] = useState(initializingFromProps)\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 /**\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 = field\n\n if (field.passesCondition !== false) {\n let validationResult: boolean | string = validatedField.valid\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 ...field,\n id,\n collectionSlug,\n data,\n operation,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: contextRef.current.getSiblingData(path),\n })\n\n if (typeof validationResult === 'string') {\n validatedField.errorMessage = validationResult\n validatedField.valid = false\n } else {\n validatedField.valid = true\n validatedField.errorMessage = undefined\n }\n }\n\n if (validatedField.valid === false) {\n isValid = false\n }\n }\n\n validatedFieldState[path] = validatedField\n },\n )\n\n await Promise.all(validationPromises)\n\n if (!dequal(contextRef.current.fields, validatedFieldState)) {\n dispatchFields({ type: 'REPLACE_STATE', state: validatedFieldState })\n }\n\n return isValid\n }, [collectionSlug, config, dispatchFields, id, operation, t, user])\n\n const submit = useCallback(\n async (options: SubmitOptions = {}, e): Promise<void> => {\n const {\n action: actionArg = action,\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 // create new toast promise which will resolve manually later\n let successToast, errorToast\n const promise = new Promise((resolve, reject) => {\n successToast = resolve\n errorToast = reject\n })\n\n const hasFormSubmitAction =\n actionArg || typeof action === 'string' || typeof action === 'function'\n\n if (redirect || disableSuccessStatus || !hasFormSubmitAction) {\n // Do not show submitting toast, as the promise toast may never disappear under these conditions.\n // Instead, make successToast() or errorToast() throw toast.success / toast.error\n successToast = (data) => toast.success(data)\n errorToast = (data) => toast.error(data)\n } else {\n toast.promise(promise, {\n error: (data) => {\n return data as string\n },\n loading: t('general:submitting'),\n success: (data) => {\n return data as string\n },\n })\n }\n\n if (e) {\n e.stopPropagation()\n e.preventDefault()\n }\n\n setProcessing(true)\n setDisabled(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 setSubmitted(true)\n setDisabled(false)\n return dispatchFields({ type: 'REPLACE_STATE', state: revalidatedFormState })\n }\n }\n\n const isValid =\n skipValidation || disableValidationOnSubmit ? true : await contextRef.current.validateForm()\n\n // If not valid, prevent submission\n if (!isValid) {\n errorToast(t('error:correctInvalidFields'))\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n // 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 if (!hasFormSubmitAction) {\n // No action provided, so we should return. An example where this happens are lexical link drawers. Upon submitting the drawer, we\n // want to close it without submitting the form. Stuff like validation would be handled by lexical before this, through beforeSubmit\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n const formData = contextRef.current.createFormData(overrides)\n\n try {\n let res\n\n if (typeof actionArg === 'string') {\n res = await requests[methodToUse.toLowerCase()](actionArg, {\n body: formData,\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n } else if (typeof action === 'function') {\n res = await action(formData)\n }\n\n setModified(false)\n setDisabled(false)\n\n if (typeof handleResponse === 'function') {\n handleResponse(res, successToast, errorToast)\n return\n }\n\n const contentType = res.headers.get('content-type')\n const isJSON = contentType && contentType.indexOf('application/json') !== -1\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let json: Record<string, any> = {}\n\n if (isJSON) json = await res.json()\n if (res.status < 400) {\n if (typeof onSuccess === 'function') await onSuccess(json)\n setSubmitted(false)\n setProcessing(false)\n\n if (redirect) {\n router.push(redirect)\n } else if (!disableSuccessStatus) {\n successToast(json.message || t('general:submissionSuccessful'))\n }\n } else {\n setProcessing(false)\n setSubmitted(true)\n\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n if (json.message) {\n errorToast(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?.errors)) {\n err.data?.errors.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 dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n errorToast(err.message || t('error:unknown'))\n })\n\n return\n }\n\n const message = errorMessages?.[res.status] || res?.statusText || t('error:unknown')\n\n errorToast(message)\n }\n } catch (err) {\n console.error('Error submitting form', err)\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n\n errorToast(err.message)\n }\n },\n [\n beforeSubmit,\n action,\n disableSuccessStatus,\n disableValidationOnSubmit,\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 ],\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 useEffect(() => {\n if (initializingFromProps !== undefined) {\n setInitializing(initializingFromProps)\n }\n }, [initializingFromProps])\n\n contextRef.current.submit = submit\n contextRef.current.getFields = getFields\n contextRef.current.getField = getField\n contextRef.current.getData = getData\n contextRef.current.getSiblingData = getSiblingData\n contextRef.current.getDataByPath = getDataByPath\n contextRef.current.validateForm = validateForm\n contextRef.current.createFormData = createFormData\n contextRef.current.setModified = setModified\n contextRef.current.setProcessing = setProcessing\n contextRef.current.setSubmitted = setSubmitted\n contextRef.current.disabled = disabled\n contextRef.current.setDisabled = setDisabled\n contextRef.current.formRef = formRef\n contextRef.current.reset = reset\n contextRef.current.replaceState = replaceState\n contextRef.current.dispatchFields = dispatchFields\n contextRef.current.addFieldRow = addFieldRow\n contextRef.current.removeFieldRow = removeFieldRow\n contextRef.current.replaceFieldRow = replaceFieldRow\n contextRef.current.uuid = uuid\n contextRef.current.initializing = initializing\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n useEffect(() => {\n if (typeof disabledFromProps === 'boolean') setDisabled(disabledFromProps)\n }, [disabledFromProps])\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', optimize: false, 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 = contextRef.current.fields\n\n for (const onChangeFn of onChange) {\n revalidatedFormState = await onChangeFn({\n formState: revalidatedFormState,\n })\n }\n\n const { changed, newState } = mergeServerFormState(\n contextRef.current.fields || {},\n revalidatedFormState,\n )\n\n if (changed) {\n dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n state: newState,\n })\n }\n }\n }\n\n if (modified) void executeOnChange()\n },\n 150,\n // Make sure we trigger this whenever modified changes (not just when `fields` changes), otherwise we will miss merging server form state for the first form update/onChange. Here's why:\n // `fields` updates before `modified`, because setModified is in a setTimeout. So on the first change, modified is false, so we don't trigger the effect even though we should.\n [contextRef.current.fields, dispatchFields, onChange, modified],\n )\n\n return (\n <form\n action={typeof action === 'function' ? void action : action}\n className={classes}\n method={method}\n noValidate\n onSubmit={(e) => void contextRef.current.submit({}, e)}\n ref={formRef}\n >\n <FormContext.Provider value={contextRef.current}>\n <FormWatchContext.Provider\n value={{\n fields,\n ...contextRef.current,\n }}\n >\n <SubmittedContext.Provider value={submitted}>\n <InitializingContext.Provider value={!isMounted || (isMounted && initializing)}>\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 </InitializingContext.Provider>\n </SubmittedContext.Provider>\n </FormWatchContext.Provider>\n </FormContext.Provider>\n </form>\n )\n}\n\nexport {\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useAllFormFields,\n useForm,\n useFormFields,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n useWatchForm,\n} from './context.js'\n\nexport { FormProps }\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["dequal","useRouter","serialize","getDataByPath","getDataByPathFunc","getSiblingData","getSiblingDataFunc","reduceFieldsToValues","wait","React","useCallback","useEffect","useReducer","useRef","useState","toast","useDebouncedEffect","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useLocale","useOperation","useTranslation","requests","getFormState","FormContext","FormFieldsContext","FormWatchContext","InitializingContext","ModifiedContext","ProcessingContext","SubmittedContext","errorMessages","fieldReducer","initContextState","mergeServerFormState","baseClass","Form","props","id","collectionSlug","globalSlug","action","beforeSubmit","children","className","disableSuccessStatus","disableValidationOnSubmit","disabled","disabledFromProps","handleResponse","initialState","isInitializing","initializingFromProps","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","code","locale","i18n","t","refreshCookie","user","operation","config","routes","api","apiRoute","serverURL","setDisabled","isMounted","setIsMounted","modified","setModified","initializing","setInitializing","processing","setProcessing","setSubmitted","formRef","contextRef","fieldsReducer","fields","dispatchFields","current","validateForm","validatedFieldState","isValid","dataFromContext","getData","data","validationPromises","Object","entries","map","path","field","validatedField","passesCondition","validationResult","valid","validate","valueToValidate","value","rows","Array","isArray","preferences","req","payload","siblingData","errorMessage","Promise","all","type","state","submit","options","e","actionArg","methodToUse","overrides","skipValidation","preventDefault","successToast","errorToast","promise","resolve","reject","hasFormSubmitAction","success","error","loading","stopPropagation","revalidatedFormState","reduce","priorOnChange","beforeSubmitFn","result","formState","every","formData","createFormData","res","toLowerCase","body","headers","language","contentType","get","isJSON","indexOf","json","status","push","message","errors","fieldErrors","nonFieldErrors","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","forEach","dataError","statusText","console","getFields","getField","file","dataWithOverrides","dataToSerialize","_payload","JSON","stringify","indices","nullsAsUndefineds","reset","newState","schemaPath","replaceState","getFieldStateBySchemaPath","fieldSchema","addFieldRow","rowIndex","subFieldState","blockType","removeFieldRow","replaceFieldRow","optimize","classes","filter","Boolean","join","executeOnChange","onChangeFn","changed","_jsx","noValidate","ref","Provider","useAllFormFields","useForm","useFormFields","useFormModified","useFormProcessing","useFormSubmitted","useWatchForm"],"sources":["../../../src/forms/Form/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, PayloadRequest } from 'payload'\n\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { useRouter } from 'next/navigation.js'\nimport { serialize } from 'object-to-formdata'\nimport {\n getDataByPath as getDataByPathFunc,\n getSiblingData as getSiblingDataFunc,\n reduceFieldsToValues,\n wait,\n} from 'payload/shared'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type {\n Context as FormContextType,\n FormProps,\n GetDataByPath,\n SubmitOptions,\n} 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 { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/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 InitializingContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n} from './context.js'\nimport { errorMessages } from './errorMessages.js'\nimport { fieldReducer } from './fieldReducer.js'\nimport { initContextState } from './initContextState.js'\nimport { mergeServerFormState } from './mergeServerFormState.js'\n\nconst baseClass = 'form'\n\nexport const Form: React.FC<FormProps> = (props) => {\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n\n const {\n action,\n beforeSubmit,\n children,\n className,\n disableSuccessStatus,\n disableValidationOnSubmit,\n disabled: disabledFromProps,\n // fields: fieldsFromProps = collection?.fields || global?.fields,\n handleResponse,\n initialState, // fully formed initial field state\n isInitializing: initializingFromProps,\n onChange,\n onSubmit,\n onSuccess,\n redirect,\n submitted: submittedFromProps,\n uuid,\n waitForAutocomplete,\n } = props\n\n const method = 'method' in props ? props?.method : undefined\n\n const router = useRouter()\n\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { refreshCookie, user } = useAuth()\n const operation = useOperation()\n\n const { config } = useConfig()\n const {\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const [disabled, setDisabled] = useState(disabledFromProps || false)\n const [isMounted, setIsMounted] = useState(false)\n const [modified, setModified] = useState(false)\n const [initializing, setInitializing] = useState(initializingFromProps)\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 /**\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 = field\n\n if (field.passesCondition !== false) {\n let validationResult: boolean | string = validatedField.valid\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 ...field,\n id,\n collectionSlug,\n data,\n operation,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: contextRef.current.getSiblingData(path),\n })\n\n if (typeof validationResult === 'string') {\n validatedField.errorMessage = validationResult\n validatedField.valid = false\n } else {\n validatedField.valid = true\n validatedField.errorMessage = undefined\n }\n }\n\n if (validatedField.valid === false) {\n isValid = false\n }\n }\n\n validatedFieldState[path] = validatedField\n },\n )\n\n await Promise.all(validationPromises)\n\n if (!dequal(contextRef.current.fields, validatedFieldState)) {\n dispatchFields({ type: 'REPLACE_STATE', state: validatedFieldState })\n }\n\n return isValid\n }, [collectionSlug, config, dispatchFields, id, operation, t, user])\n\n const submit = useCallback(\n async (options: SubmitOptions = {}, e): Promise<void> => {\n const {\n action: actionArg = action,\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 // create new toast promise which will resolve manually later\n let successToast, errorToast\n const promise = new Promise((resolve, reject) => {\n successToast = resolve\n errorToast = reject\n })\n\n const hasFormSubmitAction =\n actionArg || typeof action === 'string' || typeof action === 'function'\n\n if (redirect || disableSuccessStatus || !hasFormSubmitAction) {\n // Do not show submitting toast, as the promise toast may never disappear under these conditions.\n // Instead, make successToast() or errorToast() throw toast.success / toast.error\n successToast = (data) => toast.success(data)\n errorToast = (data) => toast.error(data)\n } else {\n toast.promise(promise, {\n error: (data) => {\n return data as string\n },\n loading: t('general:submitting'),\n success: (data) => {\n return data as string\n },\n })\n }\n\n if (e) {\n e.stopPropagation()\n e.preventDefault()\n }\n\n setProcessing(true)\n setDisabled(true)\n\n if (waitForAutocomplete) {\n await wait(100)\n }\n\n // Execute server side validations\n if (Array.isArray(beforeSubmit)) {\n let revalidatedFormState: FormState\n\n await beforeSubmit.reduce(async (priorOnChange, beforeSubmitFn) => {\n await priorOnChange\n\n const result = await beforeSubmitFn({\n formState: 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 setSubmitted(true)\n setDisabled(false)\n return dispatchFields({ type: 'REPLACE_STATE', state: revalidatedFormState })\n }\n }\n\n const isValid =\n skipValidation || disableValidationOnSubmit ? true : await contextRef.current.validateForm()\n\n // If not valid, prevent submission\n if (!isValid) {\n errorToast(t('error:correctInvalidFields'))\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n // 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 if (!hasFormSubmitAction) {\n // No action provided, so we should return. An example where this happens are lexical link drawers. Upon submitting the drawer, we\n // want to close it without submitting the form. Stuff like validation would be handled by lexical before this, through beforeSubmit\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n const formData = contextRef.current.createFormData(overrides)\n\n try {\n let res\n\n if (typeof actionArg === 'string') {\n res = await requests[methodToUse.toLowerCase()](actionArg, {\n body: formData,\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n } else if (typeof action === 'function') {\n res = await action(formData)\n }\n\n setModified(false)\n setDisabled(false)\n\n if (typeof handleResponse === 'function') {\n handleResponse(res, successToast, errorToast)\n return\n }\n\n const contentType = res.headers.get('content-type')\n const isJSON = contentType && contentType.indexOf('application/json') !== -1\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let json: Record<string, any> = {}\n\n if (isJSON) {\n json = await res.json()\n }\n if (res.status < 400) {\n if (typeof onSuccess === 'function') {\n await onSuccess(json)\n }\n setSubmitted(false)\n setProcessing(false)\n\n if (redirect) {\n router.push(redirect)\n } else if (!disableSuccessStatus) {\n successToast(json.message || t('general:submissionSuccessful'))\n }\n } else {\n setProcessing(false)\n setSubmitted(true)\n\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n if (json.message) {\n errorToast(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?.errors)) {\n err.data?.errors.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 dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n errorToast(err.message || t('error:unknown'))\n })\n\n return\n }\n\n const message = errorMessages?.[res.status] || res?.statusText || t('error:unknown')\n\n errorToast(message)\n }\n } catch (err) {\n console.error('Error submitting form', err)\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n\n errorToast(err.message)\n }\n },\n [\n beforeSubmit,\n action,\n disableSuccessStatus,\n disableValidationOnSubmit,\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 ],\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 useEffect(() => {\n if (initializingFromProps !== undefined) {\n setInitializing(initializingFromProps)\n }\n }, [initializingFromProps])\n\n contextRef.current.submit = submit\n contextRef.current.getFields = getFields\n contextRef.current.getField = getField\n contextRef.current.getData = getData\n contextRef.current.getSiblingData = getSiblingData\n contextRef.current.getDataByPath = getDataByPath\n contextRef.current.validateForm = validateForm\n contextRef.current.createFormData = createFormData\n contextRef.current.setModified = setModified\n contextRef.current.setProcessing = setProcessing\n contextRef.current.setSubmitted = setSubmitted\n contextRef.current.disabled = disabled\n contextRef.current.setDisabled = setDisabled\n contextRef.current.formRef = formRef\n contextRef.current.reset = reset\n contextRef.current.replaceState = replaceState\n contextRef.current.dispatchFields = dispatchFields\n contextRef.current.addFieldRow = addFieldRow\n contextRef.current.removeFieldRow = removeFieldRow\n contextRef.current.replaceFieldRow = replaceFieldRow\n contextRef.current.uuid = uuid\n contextRef.current.initializing = initializing\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n useEffect(() => {\n if (typeof disabledFromProps === 'boolean') {\n setDisabled(disabledFromProps)\n }\n }, [disabledFromProps])\n\n useEffect(() => {\n if (typeof submittedFromProps === 'boolean') {\n setSubmitted(submittedFromProps)\n }\n }, [submittedFromProps])\n\n useEffect(() => {\n if (initialState) {\n contextRef.current = { ...initContextState } as FormContextType\n dispatchFields({ type: 'REPLACE_STATE', optimize: false, 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 = contextRef.current.fields\n\n for (const onChangeFn of onChange) {\n revalidatedFormState = await onChangeFn({\n formState: revalidatedFormState,\n })\n }\n\n const { changed, newState } = mergeServerFormState(\n contextRef.current.fields || {},\n revalidatedFormState,\n )\n\n if (changed) {\n dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n state: newState,\n })\n }\n }\n }\n\n if (modified) {\n void executeOnChange()\n }\n },\n 150,\n // Make sure we trigger this whenever modified changes (not just when `fields` changes), otherwise we will miss merging server form state for the first form update/onChange. Here's why:\n // `fields` updates before `modified`, because setModified is in a setTimeout. So on the first change, modified is false, so we don't trigger the effect even though we should.\n [contextRef.current.fields, dispatchFields, onChange, modified],\n )\n\n return (\n <form\n action={typeof action === 'function' ? void action : action}\n className={classes}\n method={method}\n noValidate\n onSubmit={(e) => void contextRef.current.submit({}, e)}\n ref={formRef}\n >\n <FormContext.Provider value={contextRef.current}>\n <FormWatchContext.Provider\n value={{\n fields,\n ...contextRef.current,\n }}\n >\n <SubmittedContext.Provider value={submitted}>\n <InitializingContext.Provider value={!isMounted || (isMounted && initializing)}>\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 </InitializingContext.Provider>\n </SubmittedContext.Provider>\n </FormWatchContext.Provider>\n </FormContext.Provider>\n </form>\n )\n}\n\nexport {\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useAllFormFields,\n useForm,\n useFormFields,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n useWatchForm,\n} from './context.js'\n\nexport { FormProps }\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeServerFormState.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/mergeServerFormState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAQxC;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,kBAChB,SAAS,iBACT,SAAS,KACvB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"mergeServerFormState.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/mergeServerFormState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAQxC;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,kBAChB,SAAS,iBACT,SAAS,KACvB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAwDzC,CAAA"}
|
|
@@ -15,7 +15,9 @@ export const mergeServerFormState = (existingState, incomingState) => {
|
|
|
15
15
|
const newState = {};
|
|
16
16
|
if (existingState) {
|
|
17
17
|
Object.entries(existingState).forEach(([path, newFieldState]) => {
|
|
18
|
-
if (!incomingState[path])
|
|
18
|
+
if (!incomingState[path]) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
19
21
|
/**
|
|
20
22
|
* Handle error paths
|
|
21
23
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeServerFormState.js","names":["dequal","mergeErrorPaths","serverPropsToAccept","mergeServerFormState","existingState","incomingState","changed","newState","Object","entries","forEach","path","newFieldState","errorPathsResult","errorPaths","result","filterOptions","prop"],"sources":["../../../src/forms/Form/mergeServerFormState.ts"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload'\n\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\n\nimport { mergeErrorPaths } from './mergeErrorPaths.js'\n\nconst serverPropsToAccept = ['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 existingState: FormState,\n incomingState: FormState,\n): { changed: boolean; newState: FormState } => {\n let changed = false\n\n const newState = {}\n\n if (existingState) {\n Object.entries(existingState).forEach(([path, newFieldState]) => {\n if (!incomingState[path]) return\n\n /**\n * Handle error paths\n */\n\n const errorPathsResult = mergeErrorPaths(\n newFieldState.errorPaths,\n incomingState[path].errorPaths as unknown as string[],\n )\n if (errorPathsResult.result) {\n if (errorPathsResult.changed) {\n changed = errorPathsResult.changed\n }\n newFieldState.errorPaths = errorPathsResult.result\n }\n\n /**\n * Handle filterOptions\n */\n if (incomingState[path]?.filterOptions || newFieldState.filterOptions) {\n if (!dequal(incomingState[path]?.filterOptions, newFieldState.filterOptions)) {\n changed = true\n newFieldState.filterOptions = incomingState[path].filterOptions\n }\n }\n\n /**\n * Handle the rest which is in serverPropsToAccept\n */\n serverPropsToAccept.forEach((prop) => {\n if (incomingState[path]?.[prop] !== newFieldState[prop]) {\n changed = true\n if (!(prop in incomingState[path])) {\n delete newFieldState[prop]\n } else {\n newFieldState[prop] = incomingState[path][prop]\n }\n }\n })\n\n // Conditions don't work if we don't memcopy the new state, as the object references would otherwise be the same\n newState[path] = { ...newFieldState }\n })\n }\n\n return { changed, newState }\n}\n"],"mappings":"AAAA;;AAGA,SAASA,MAAM,QAAQ,cAAa,CAAC;AAErC,SAASC,eAAe,QAAQ;AAEhC,MAAMC,mBAAA,GAAsB,CAAC,mBAAmB,SAAS,eAAe;AAExE;;;;;;;AAOA,OAAO,MAAMC,oBAAA,GAAuBA,CAClCC,aAAA,EACAC,aAAA;EAEA,IAAIC,OAAA,GAAU;EAEd,MAAMC,QAAA,GAAW,CAAC;EAElB,IAAIH,aAAA,EAAe;IACjBI,MAAA,CAAOC,OAAO,CAACL,aAAA,EAAeM,OAAO,CAAC,CAAC,CAACC,IAAA,EAAMC,aAAA,CAAc;MAC1D,IAAI,CAACP,aAAa,CAACM,IAAA,CAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"mergeServerFormState.js","names":["dequal","mergeErrorPaths","serverPropsToAccept","mergeServerFormState","existingState","incomingState","changed","newState","Object","entries","forEach","path","newFieldState","errorPathsResult","errorPaths","result","filterOptions","prop"],"sources":["../../../src/forms/Form/mergeServerFormState.ts"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload'\n\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\n\nimport { mergeErrorPaths } from './mergeErrorPaths.js'\n\nconst serverPropsToAccept = ['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 existingState: FormState,\n incomingState: FormState,\n): { changed: boolean; newState: FormState } => {\n let changed = false\n\n const newState = {}\n\n if (existingState) {\n Object.entries(existingState).forEach(([path, newFieldState]) => {\n if (!incomingState[path]) {\n return\n }\n\n /**\n * Handle error paths\n */\n\n const errorPathsResult = mergeErrorPaths(\n newFieldState.errorPaths,\n incomingState[path].errorPaths as unknown as string[],\n )\n if (errorPathsResult.result) {\n if (errorPathsResult.changed) {\n changed = errorPathsResult.changed\n }\n newFieldState.errorPaths = errorPathsResult.result\n }\n\n /**\n * Handle filterOptions\n */\n if (incomingState[path]?.filterOptions || newFieldState.filterOptions) {\n if (!dequal(incomingState[path]?.filterOptions, newFieldState.filterOptions)) {\n changed = true\n newFieldState.filterOptions = incomingState[path].filterOptions\n }\n }\n\n /**\n * Handle the rest which is in serverPropsToAccept\n */\n serverPropsToAccept.forEach((prop) => {\n if (incomingState[path]?.[prop] !== newFieldState[prop]) {\n changed = true\n if (!(prop in incomingState[path])) {\n delete newFieldState[prop]\n } else {\n newFieldState[prop] = incomingState[path][prop]\n }\n }\n })\n\n // Conditions don't work if we don't memcopy the new state, as the object references would otherwise be the same\n newState[path] = { ...newFieldState }\n })\n }\n\n return { changed, newState }\n}\n"],"mappings":"AAAA;;AAGA,SAASA,MAAM,QAAQ,cAAa,CAAC;AAErC,SAASC,eAAe,QAAQ;AAEhC,MAAMC,mBAAA,GAAsB,CAAC,mBAAmB,SAAS,eAAe;AAExE;;;;;;;AAOA,OAAO,MAAMC,oBAAA,GAAuBA,CAClCC,aAAA,EACAC,aAAA;EAEA,IAAIC,OAAA,GAAU;EAEd,MAAMC,QAAA,GAAW,CAAC;EAElB,IAAIH,aAAA,EAAe;IACjBI,MAAA,CAAOC,OAAO,CAACL,aAAA,EAAeM,OAAO,CAAC,CAAC,CAACC,IAAA,EAAMC,aAAA,CAAc;MAC1D,IAAI,CAACP,aAAa,CAACM,IAAA,CAAK,EAAE;QACxB;MACF;MAEA;;;MAIA,MAAME,gBAAA,GAAmBZ,eAAA,CACvBW,aAAA,CAAcE,UAAU,EACxBT,aAAa,CAACM,IAAA,CAAK,CAACG,UAAU;MAEhC,IAAID,gBAAA,CAAiBE,MAAM,EAAE;QAC3B,IAAIF,gBAAA,CAAiBP,OAAO,EAAE;UAC5BA,OAAA,GAAUO,gBAAA,CAAiBP,OAAO;QACpC;QACAM,aAAA,CAAcE,UAAU,GAAGD,gBAAA,CAAiBE,MAAM;MACpD;MAEA;;;MAGA,IAAIV,aAAa,CAACM,IAAA,CAAK,EAAEK,aAAA,IAAiBJ,aAAA,CAAcI,aAAa,EAAE;QACrE,IAAI,CAAChB,MAAA,CAAOK,aAAa,CAACM,IAAA,CAAK,EAAEK,aAAA,EAAeJ,aAAA,CAAcI,aAAa,GAAG;UAC5EV,OAAA,GAAU;UACVM,aAAA,CAAcI,aAAa,GAAGX,aAAa,CAACM,IAAA,CAAK,CAACK,aAAa;QACjE;MACF;MAEA;;;MAGAd,mBAAA,CAAoBQ,OAAO,CAAEO,IAAA;QAC3B,IAAIZ,aAAa,CAACM,IAAA,CAAK,GAAGM,IAAA,CAAK,KAAKL,aAAa,CAACK,IAAA,CAAK,EAAE;UACvDX,OAAA,GAAU;UACV,IAAI,EAAEW,IAAA,IAAQZ,aAAa,CAACM,IAAA,CAAK,CAAD,EAAI;YAClC,OAAOC,aAAa,CAACK,IAAA,CAAK;UAC5B,OAAO;YACLL,aAAa,CAACK,IAAA,CAAK,GAAGZ,aAAa,CAACM,IAAA,CAAK,CAACM,IAAA,CAAK;UACjD;QACF;MACF;MAEA;MACAV,QAAQ,CAACI,IAAA,CAAK,GAAG;QAAE,GAAGC;MAAc;IACtC;EACF;EAEA,OAAO;IAAEN,OAAA;IAASC;EAAS;AAC7B","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rowHelpers.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/rowHelpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAElC,eAAO,MAAM,0BAA0B,gCAIpC;IACD,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,GAAG,EAAE,CAAA;CACZ,KAAG;IACF,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,WAAW,EAAE,GAAG,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"rowHelpers.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/rowHelpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAElC,eAAO,MAAM,0BAA0B,gCAIpC;IACD,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,GAAG,EAAE,CAAA;CACZ,KAAG;IACF,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,WAAW,EAAE,GAAG,EAAE,CAAA;CAkBnB,CAAA;AAED,eAAO,MAAM,aAAa;;;MAGtB;IACF,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,WAAW,EAAE,GAAG,EAAE,CAAA;CAgBnB,CAAA"}
|
|
@@ -6,8 +6,12 @@ export const extractRowsAndCollapsedIDs = ({
|
|
|
6
6
|
rows
|
|
7
7
|
}) => {
|
|
8
8
|
return rows.reduce((acc, row) => {
|
|
9
|
-
if (rowID === row.id)
|
|
10
|
-
|
|
9
|
+
if (rowID === row.id) {
|
|
10
|
+
row.collapsed = collapsed;
|
|
11
|
+
}
|
|
12
|
+
if (row.collapsed) {
|
|
13
|
+
acc.collapsedIDs.push(row.id);
|
|
14
|
+
}
|
|
11
15
|
acc.updatedRows.push(row);
|
|
12
16
|
return acc;
|
|
13
17
|
}, {
|
|
@@ -21,7 +25,9 @@ export const toggleAllRows = ({
|
|
|
21
25
|
}) => {
|
|
22
26
|
return rows.reduce((acc, row) => {
|
|
23
27
|
row.collapsed = collapsed;
|
|
24
|
-
if (collapsed)
|
|
28
|
+
if (collapsed) {
|
|
29
|
+
acc.collapsedIDs.push(row.id);
|
|
30
|
+
}
|
|
25
31
|
acc.updatedRows.push(row);
|
|
26
32
|
return acc;
|
|
27
33
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rowHelpers.js","names":["extractRowsAndCollapsedIDs","collapsed","rowID","rows","reduce","acc","row","id","collapsedIDs","push","updatedRows","toggleAllRows"],"sources":["../../../src/forms/Form/rowHelpers.ts"],"sourcesContent":["'use client'\nimport type { Row } from 'payload'\n\nexport const extractRowsAndCollapsedIDs = ({\n collapsed,\n rowID,\n rows,\n}: {\n collapsed: boolean\n rowID: string\n rows: Row[]\n}): {\n collapsedIDs: string[]\n updatedRows: Row[]\n} => {\n return rows.reduce(\n (acc, row) => {\n if (rowID === row.id) row.collapsed = collapsed\n if (row.collapsed) acc.collapsedIDs.push(row.id)\n acc.updatedRows.push(row)\n return acc\n },\n {\n collapsedIDs: [],\n updatedRows: [],\n },\n )\n}\n\nexport const toggleAllRows = ({\n collapsed,\n rows,\n}): {\n collapsedIDs: string[]\n updatedRows: Row[]\n} => {\n return rows.reduce(\n (acc, row) => {\n row.collapsed = collapsed\n if (collapsed) acc.collapsedIDs.push(row.id)\n acc.updatedRows.push(row)\n return acc\n },\n {\n collapsedIDs: [],\n updatedRows: [],\n },\n )\n}\n"],"mappings":"AAAA;;AAGA,OAAO,MAAMA,0BAAA,GAA6BA,CAAC;EACzCC,SAAS;EACTC,KAAK;EACLC;AAAI,CAKL;EAIC,OAAOA,IAAA,CAAKC,MAAM,CAChB,CAACC,GAAA,EAAKC,GAAA;IACJ,IAAIJ,KAAA,KAAUI,GAAA,CAAIC,EAAE,
|
|
1
|
+
{"version":3,"file":"rowHelpers.js","names":["extractRowsAndCollapsedIDs","collapsed","rowID","rows","reduce","acc","row","id","collapsedIDs","push","updatedRows","toggleAllRows"],"sources":["../../../src/forms/Form/rowHelpers.ts"],"sourcesContent":["'use client'\nimport type { Row } from 'payload'\n\nexport const extractRowsAndCollapsedIDs = ({\n collapsed,\n rowID,\n rows,\n}: {\n collapsed: boolean\n rowID: string\n rows: Row[]\n}): {\n collapsedIDs: string[]\n updatedRows: Row[]\n} => {\n return rows.reduce(\n (acc, row) => {\n if (rowID === row.id) {\n row.collapsed = collapsed\n }\n if (row.collapsed) {\n acc.collapsedIDs.push(row.id)\n }\n acc.updatedRows.push(row)\n return acc\n },\n {\n collapsedIDs: [],\n updatedRows: [],\n },\n )\n}\n\nexport const toggleAllRows = ({\n collapsed,\n rows,\n}): {\n collapsedIDs: string[]\n updatedRows: Row[]\n} => {\n return rows.reduce(\n (acc, row) => {\n row.collapsed = collapsed\n if (collapsed) {\n acc.collapsedIDs.push(row.id)\n }\n acc.updatedRows.push(row)\n return acc\n },\n {\n collapsedIDs: [],\n updatedRows: [],\n },\n )\n}\n"],"mappings":"AAAA;;AAGA,OAAO,MAAMA,0BAAA,GAA6BA,CAAC;EACzCC,SAAS;EACTC,KAAK;EACLC;AAAI,CAKL;EAIC,OAAOA,IAAA,CAAKC,MAAM,CAChB,CAACC,GAAA,EAAKC,GAAA;IACJ,IAAIJ,KAAA,KAAUI,GAAA,CAAIC,EAAE,EAAE;MACpBD,GAAA,CAAIL,SAAS,GAAGA,SAAA;IAClB;IACA,IAAIK,GAAA,CAAIL,SAAS,EAAE;MACjBI,GAAA,CAAIG,YAAY,CAACC,IAAI,CAACH,GAAA,CAAIC,EAAE;IAC9B;IACAF,GAAA,CAAIK,WAAW,CAACD,IAAI,CAACH,GAAA;IACrB,OAAOD,GAAA;EACT,GACA;IACEG,YAAA,EAAc,EAAE;IAChBE,WAAA,EAAa;EACf;AAEJ;AAEA,OAAO,MAAMC,aAAA,GAAgBA,CAAC;EAC5BV,SAAS;EACTE;AAAI,CACL;EAIC,OAAOA,IAAA,CAAKC,MAAM,CAChB,CAACC,GAAA,EAAKC,GAAA;IACJA,GAAA,CAAIL,SAAS,GAAGA,SAAA;IAChB,IAAIA,SAAA,EAAW;MACbI,GAAA,CAAIG,YAAY,CAACC,IAAI,CAACH,GAAA,CAAIC,EAAE;IAC9B;IACAF,GAAA,CAAIK,WAAW,CAACD,IAAI,CAACH,GAAA;IACrB,OAAOD,GAAA;EACT,GACA;IACEG,YAAA,EAAc,EAAE;IAChBE,WAAA,EAAa;EACf;AAEJ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/rows.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,KAAK,MAAM,GAAG;IACZ,eAAe,EAAE,SAAS,CAAA;IAC1B,IAAI,EAAE,SAAS,EAAE,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,YAAY,SAAU,MAAM,UAAU,SAAS,KAAG,
|
|
1
|
+
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/rows.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,KAAK,MAAM,GAAG;IACZ,eAAe,EAAE,SAAS,CAAA;IAC1B,IAAI,EAAE,SAAS,EAAE,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,YAAY,SAAU,MAAM,UAAU,SAAS,KAAG,MAuB9D,CAAA;AAED,eAAO,MAAM,WAAW,SAAU,MAAM,QAAQ,SAAS,EAAE,KAAG,SAa7D,CAAA"}
|
package/dist/forms/Form/rows.js
CHANGED
|
@@ -6,7 +6,9 @@ export const separateRows = (path, fields) => {
|
|
|
6
6
|
const newRows = incomingRows;
|
|
7
7
|
if (fieldPath.indexOf(`${path}.`) === 0) {
|
|
8
8
|
const [rowIndex] = fieldPath.replace(`${path}.`, '').split('.');
|
|
9
|
-
if (!newRows[rowIndex])
|
|
9
|
+
if (!newRows[rowIndex]) {
|
|
10
|
+
newRows[rowIndex] = {};
|
|
11
|
+
}
|
|
10
12
|
newRows[rowIndex][fieldPath.replace(`${path}.${String(rowIndex)}.`, '')] = {
|
|
11
13
|
...field
|
|
12
14
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rows.js","names":["separateRows","path","fields","remainingFields","rows","Object","entries","reduce","incomingRows","fieldPath","field","newRows","indexOf","rowIndex","replace","split","String","flattenRows","row","i","subFields","subPath","subField"],"sources":["../../../src/forms/Form/rows.ts"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload'\n\ntype Result = {\n remainingFields: FormState\n rows: FormState[]\n}\n\nexport const separateRows = (path: string, fields: FormState): Result => {\n const remainingFields: FormState = {}\n\n const rows = Object.entries(fields).reduce((incomingRows, [fieldPath, field]) => {\n const newRows = incomingRows\n\n if (fieldPath.indexOf(`${path}.`) === 0) {\n const [rowIndex] = fieldPath.replace(`${path}.`, '').split('.')\n if (!newRows[rowIndex]) newRows[rowIndex] = {}\n newRows[rowIndex][fieldPath.replace(`${path}.${String(rowIndex)}.`, '')] = { ...field }\n } else {\n remainingFields[fieldPath] = field\n }\n\n return newRows\n }, [])\n\n return {\n remainingFields,\n rows,\n }\n}\n\nexport const flattenRows = (path: string, rows: FormState[]): FormState => {\n return rows.reduce(\n (fields, row, i) => ({\n ...fields,\n ...Object.entries(row).reduce((subFields, [subPath, subField]) => {\n return {\n ...subFields,\n [`${path}.${i}.${subPath}`]: { ...subField },\n }\n }, {}),\n }),\n {},\n )\n}\n"],"mappings":"AAAA;;AAQA,OAAO,MAAMA,YAAA,GAAeA,CAACC,IAAA,EAAcC,MAAA;EACzC,MAAMC,eAAA,GAA6B,CAAC;EAEpC,MAAMC,IAAA,GAAOC,MAAA,CAAOC,OAAO,CAACJ,MAAA,EAAQK,MAAM,CAAC,CAACC,YAAA,EAAc,CAACC,SAAA,EAAWC,KAAA,CAAM;IAC1E,MAAMC,OAAA,GAAUH,YAAA;IAEhB,IAAIC,SAAA,CAAUG,OAAO,CAAC,GAAGX,IAAA,GAAO,MAAM,GAAG;MACvC,MAAM,CAACY,QAAA,CAAS,GAAGJ,SAAA,CAAUK,OAAO,CAAC,GAAGb,IAAA,GAAO,EAAE,IAAIc,KAAK,CAAC;MAC3D,IAAI,CAACJ,OAAO,CAACE,QAAA,CAAS,
|
|
1
|
+
{"version":3,"file":"rows.js","names":["separateRows","path","fields","remainingFields","rows","Object","entries","reduce","incomingRows","fieldPath","field","newRows","indexOf","rowIndex","replace","split","String","flattenRows","row","i","subFields","subPath","subField"],"sources":["../../../src/forms/Form/rows.ts"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload'\n\ntype Result = {\n remainingFields: FormState\n rows: FormState[]\n}\n\nexport const separateRows = (path: string, fields: FormState): Result => {\n const remainingFields: FormState = {}\n\n const rows = Object.entries(fields).reduce((incomingRows, [fieldPath, field]) => {\n const newRows = incomingRows\n\n if (fieldPath.indexOf(`${path}.`) === 0) {\n const [rowIndex] = fieldPath.replace(`${path}.`, '').split('.')\n if (!newRows[rowIndex]) {\n newRows[rowIndex] = {}\n }\n newRows[rowIndex][fieldPath.replace(`${path}.${String(rowIndex)}.`, '')] = { ...field }\n } else {\n remainingFields[fieldPath] = field\n }\n\n return newRows\n }, [])\n\n return {\n remainingFields,\n rows,\n }\n}\n\nexport const flattenRows = (path: string, rows: FormState[]): FormState => {\n return rows.reduce(\n (fields, row, i) => ({\n ...fields,\n ...Object.entries(row).reduce((subFields, [subPath, subField]) => {\n return {\n ...subFields,\n [`${path}.${i}.${subPath}`]: { ...subField },\n }\n }, {}),\n }),\n {},\n )\n}\n"],"mappings":"AAAA;;AAQA,OAAO,MAAMA,YAAA,GAAeA,CAACC,IAAA,EAAcC,MAAA;EACzC,MAAMC,eAAA,GAA6B,CAAC;EAEpC,MAAMC,IAAA,GAAOC,MAAA,CAAOC,OAAO,CAACJ,MAAA,EAAQK,MAAM,CAAC,CAACC,YAAA,EAAc,CAACC,SAAA,EAAWC,KAAA,CAAM;IAC1E,MAAMC,OAAA,GAAUH,YAAA;IAEhB,IAAIC,SAAA,CAAUG,OAAO,CAAC,GAAGX,IAAA,GAAO,MAAM,GAAG;MACvC,MAAM,CAACY,QAAA,CAAS,GAAGJ,SAAA,CAAUK,OAAO,CAAC,GAAGb,IAAA,GAAO,EAAE,IAAIc,KAAK,CAAC;MAC3D,IAAI,CAACJ,OAAO,CAACE,QAAA,CAAS,EAAE;QACtBF,OAAO,CAACE,QAAA,CAAS,GAAG,CAAC;MACvB;MACAF,OAAO,CAACE,QAAA,CAAS,CAACJ,SAAA,CAAUK,OAAO,CAAC,GAAGb,IAAA,IAAQe,MAAA,CAAOH,QAAA,IAAY,EAAE,IAAI,GAAG;QAAE,GAAGH;MAAM;IACxF,OAAO;MACLP,eAAe,CAACM,SAAA,CAAU,GAAGC,KAAA;IAC/B;IAEA,OAAOC,OAAA;EACT,GAAG,EAAE;EAEL,OAAO;IACLR,eAAA;IACAC;EACF;AACF;AAEA,OAAO,MAAMa,WAAA,GAAcA,CAAChB,IAAA,EAAcG,IAAA;EACxC,OAAOA,IAAA,CAAKG,MAAM,CAChB,CAACL,MAAA,EAAQgB,GAAA,EAAKC,CAAA,MAAO;IACnB,GAAGjB,MAAM;IACT,GAAGG,MAAA,CAAOC,OAAO,CAACY,GAAA,EAAKX,MAAM,CAAC,CAACa,SAAA,EAAW,CAACC,OAAA,EAASC,QAAA,CAAS;MAC3D,OAAO;QACL,GAAGF,SAAS;QACZ,CAAC,GAAGnB,IAAA,IAAQkB,CAAA,IAAKE,OAAA,EAAS,GAAG;UAAE,GAAGC;QAAS;MAC7C;IACF,GAAG,CAAC;EACN,IACA,CAAC;AAEL","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/NullifyField/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,IAAI,GAAG,MAAM,CAAA;IACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/NullifyField/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,IAAI,GAAG,MAAM,CAAA;IACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAgDhE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","React","Banner","CheckboxField","useConfig","useLocale","useTranslation","NullifyLocaleField","t0","$","fieldValue","localized","path","code","currentLocale","config","t1","localization","checked","setChecked","useState","defaultLocale","t","fallback","hideCheckbox","Array","isArray","length","t2","_jsx","children","field","label","id","replace"],"sources":["../../../src/forms/NullifyField/index.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\n\nimport { Banner } from '../../elements/Banner/index.js'\nimport { CheckboxField } from '../../fields/Checkbox/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\n\ntype NullifyLocaleFieldProps = {\n readonly fieldValue?: [] | null | number\n readonly localized: boolean\n readonly path: string\n}\n\nexport const NullifyLocaleField: React.FC<NullifyLocaleFieldProps> = ({\n fieldValue,\n localized,\n path,\n}) => {\n const { code: currentLocale } = useLocale()\n const {\n config: { localization },\n } = useConfig()\n const [checked, setChecked] = React.useState<boolean>(typeof fieldValue !== 'number')\n const defaultLocale =\n localization && localization.defaultLocale ? localization.defaultLocale : 'en'\n const { t } = useTranslation()\n\n if (!localized || currentLocale === defaultLocale || (localization && !localization.fallback)) {\n // hide when field is not localized or editing default locale or when fallback is disabled\n return null\n }\n\n if (fieldValue) {\n let hideCheckbox = false\n if (typeof fieldValue === 'number' && fieldValue > 0) hideCheckbox = true\n if (Array.isArray(fieldValue) && fieldValue.length > 0) hideCheckbox = true\n\n if (hideCheckbox) {\n if (checked) setChecked(false) // uncheck when field has value\n return null\n }\n }\n\n return (\n <Banner>\n <CheckboxField\n checked={checked}\n field={{\n label: t('general:fallbackToDefaultLocale'),\n }}\n id={`field-${path.replace(/\\./g, '__')}`}\n // onToggle={onChange}\n />\n </Banner>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,YAAYC,KAAA,MAAW;AAEvB,SAASC,MAAM,QAAQ;AACvB,SAASC,aAAa,QAAQ;AAC9B,SAASC,SAAS,QAAQ;AAC1B,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAQ/B,OAAO,MAAMC,kBAAA,GAAwDC,EAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EAAC;IAAAU,UAAA;IAAAC,SAAA;IAAAC;EAAA,IAAAJ,EAIrE;EACC;IAAAK,IAAA,EAAAC;EAAA,IAAgCT,SAAA;EAChC;IAAAU,MAAA,EAAAC;EAAA,IAEIZ,SAAA;EADM;IAAAa;EAAA,IAAAD,EAAgB;EAE1B,OAAAE,OAAA,EAAAC,UAAA,IAA8BlB,KAAA,CAAAmB,QAAA,CAAwB,OAAOV,UAAA,KAAe;EAC5E,MAAAW,aAAA,GACEJ,YAAA,IAAgBA,YAAA,CAAAI,aAA0B,GAAGJ,YAAA,CAAAI,aAAA,GAA6B;EAC5E;IAAAC;EAAA,IAAchB,cAAA;EAAA,IAEV,CAACK,SAAA,IAAaG,aAAA,KAAkBO,aAAA,IAAkBJ,YAAA,KAAiBA,YAAA,CAAAM,QAAqB;IAAA;EAAA;EAAA,IAKxFb,UAAA;IACF,IAAAc,YAAA;IAAmB,IACf,OAAOd,UAAA,KAAe,YAAYA,UAAA,IAAa;
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","React","Banner","CheckboxField","useConfig","useLocale","useTranslation","NullifyLocaleField","t0","$","fieldValue","localized","path","code","currentLocale","config","t1","localization","checked","setChecked","useState","defaultLocale","t","fallback","hideCheckbox","Array","isArray","length","t2","_jsx","children","field","label","id","replace"],"sources":["../../../src/forms/NullifyField/index.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\n\nimport { Banner } from '../../elements/Banner/index.js'\nimport { CheckboxField } from '../../fields/Checkbox/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\n\ntype NullifyLocaleFieldProps = {\n readonly fieldValue?: [] | null | number\n readonly localized: boolean\n readonly path: string\n}\n\nexport const NullifyLocaleField: React.FC<NullifyLocaleFieldProps> = ({\n fieldValue,\n localized,\n path,\n}) => {\n const { code: currentLocale } = useLocale()\n const {\n config: { localization },\n } = useConfig()\n const [checked, setChecked] = React.useState<boolean>(typeof fieldValue !== 'number')\n const defaultLocale =\n localization && localization.defaultLocale ? localization.defaultLocale : 'en'\n const { t } = useTranslation()\n\n if (!localized || currentLocale === defaultLocale || (localization && !localization.fallback)) {\n // hide when field is not localized or editing default locale or when fallback is disabled\n return null\n }\n\n if (fieldValue) {\n let hideCheckbox = false\n if (typeof fieldValue === 'number' && fieldValue > 0) {\n hideCheckbox = true\n }\n if (Array.isArray(fieldValue) && fieldValue.length > 0) {\n hideCheckbox = true\n }\n\n if (hideCheckbox) {\n if (checked) {\n setChecked(false)\n } // uncheck when field has value\n return null\n }\n }\n\n return (\n <Banner>\n <CheckboxField\n checked={checked}\n field={{\n label: t('general:fallbackToDefaultLocale'),\n }}\n id={`field-${path.replace(/\\./g, '__')}`}\n // onToggle={onChange}\n />\n </Banner>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,YAAYC,KAAA,MAAW;AAEvB,SAASC,MAAM,QAAQ;AACvB,SAASC,aAAa,QAAQ;AAC9B,SAASC,SAAS,QAAQ;AAC1B,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAQ/B,OAAO,MAAMC,kBAAA,GAAwDC,EAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EAAC;IAAAU,UAAA;IAAAC,SAAA;IAAAC;EAAA,IAAAJ,EAIrE;EACC;IAAAK,IAAA,EAAAC;EAAA,IAAgCT,SAAA;EAChC;IAAAU,MAAA,EAAAC;EAAA,IAEIZ,SAAA;EADM;IAAAa;EAAA,IAAAD,EAAgB;EAE1B,OAAAE,OAAA,EAAAC,UAAA,IAA8BlB,KAAA,CAAAmB,QAAA,CAAwB,OAAOV,UAAA,KAAe;EAC5E,MAAAW,aAAA,GACEJ,YAAA,IAAgBA,YAAA,CAAAI,aAA0B,GAAGJ,YAAA,CAAAI,aAAA,GAA6B;EAC5E;IAAAC;EAAA,IAAchB,cAAA;EAAA,IAEV,CAACK,SAAA,IAAaG,aAAA,KAAkBO,aAAA,IAAkBJ,YAAA,KAAiBA,YAAA,CAAAM,QAAqB;IAAA;EAAA;EAAA,IAKxFb,UAAA;IACF,IAAAc,YAAA;IAAmB,IACf,OAAOd,UAAA,KAAe,YAAYA,UAAA,IAAa;MACjDc,YAAA,CAAAA,CAAA,CAAAA,IAAA;IAAA;IAAA,IAEEC,KAAA,CAAAC,OAAA,CAAchB,UAAA,KAAeA,UAAA,CAAAiB,MAAA,IAAoB;MACnDH,YAAA,CAAAA,CAAA,CAAAA,IAAA;IAAA;IAAA,IAGEA,YAAA;MAAA,IACEN,OAAA;QACFC,UAAA,MAAW;MAAA;MAAA;IAAA;EAAA;EAAA,IAAAS,EAAA;EAAA,IAAAnB,CAAA,QAAAa,CAAA,IAAAb,CAAA,QAAAG,IAAA,IAAAH,CAAA,QAAAS,OAAA;IAOfU,EAAA,GAAAC,IAAA,CAAA3B,MAAA;MAAA4B,QAAA,EACED,IAAA,CAAA1B,aAAA;QAAAe,OAAA;QAAAa,KAAA;UAAAC,KAAA,EAGWV,CAAA,CAAE;QAAA;QAAAW,EAAA,EAEP,SAASrB,IAAA,CAAAsB,OAAA,QAAoB;MAAO,C;;;;;;;;;SAN5CN,E;CAWJ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderField.d.ts","sourceRoot":"","sources":["../../../src/forms/RenderFields/RenderField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE5D,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,mBAAmB,CAAC,EAAE;QAC7B,KAAK,EAAE,WAAW,CAAA;QAClB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,CAAA;IACD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAA;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,kBAAkB,EAAE;QAC3B,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAA;KACtC,CAAA;CACF,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"RenderField.d.ts","sourceRoot":"","sources":["../../../src/forms/RenderFields/RenderField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE5D,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,mBAAmB,CAAC,EAAE;QAC7B,KAAK,EAAE,WAAW,CAAA;QAClB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,CAAA;IACD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAA;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,kBAAkB,EAAE;QAC3B,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAA;KACtC,CAAA;CACF,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAsFvC,CAAA"}
|
|
@@ -34,7 +34,9 @@ export const RenderField = ({
|
|
|
34
34
|
// `admin.readOnly` displays the value but prevents the field from being edited
|
|
35
35
|
fieldComponentProps.readOnly = fieldComponentProps?.field?.admin?.readOnly;
|
|
36
36
|
// if parent field is `readOnly: true`, but this field is `readOnly: false`, the field should still be editable
|
|
37
|
-
if (readOnlyFromContext && fieldComponentProps.readOnly !== false)
|
|
37
|
+
if (readOnlyFromContext && fieldComponentProps.readOnly !== false) {
|
|
38
|
+
fieldComponentProps.readOnly = true;
|
|
39
|
+
}
|
|
38
40
|
// if the user does not have access control to begin with, force it to be read-only
|
|
39
41
|
if (permissions?.[operation]?.permission === false) {
|
|
40
42
|
fieldComponentProps.readOnly = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderField.js","names":["React","HiddenField","RenderComponent","useFieldComponents","useOperation","FieldPropsProvider","useFieldProps","RenderField","name","fieldComponentProps","indexPath","path","pathFromProps","permissions","schemaPath","schemaPathFromProps","siblingPermissions","fieldComponents","operation","readOnly","readOnlyFromContext","filter","Boolean","join","read","permission","field","admin","disabled","RenderedField","components","Field","hidden","_jsx","forceRender","Component","type","clientProps","mappedComponent","custom"],"sources":["../../../src/forms/RenderFields/RenderField.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientField, FieldPermissions } from 'payload'\n\nimport React from 'react'\n\nimport { HiddenField } from '../../fields/Hidden/index.js'\nimport { RenderComponent } from '../../providers/Config/RenderComponent.js'\nimport { useFieldComponents } from '../../providers/FieldComponents/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { FieldPropsProvider, useFieldProps } from '../FieldPropsProvider/index.js'\n\ntype Props = {\n readonly fieldComponentProps?: {\n field: ClientField\n forceRender?: boolean\n readOnly?: boolean\n }\n readonly indexPath?: string\n readonly isHidden?: boolean\n readonly name?: string\n readonly path: string\n readonly permissions?: FieldPermissions\n readonly schemaPath: string\n readonly siblingPermissions: {\n [fieldName: string]: FieldPermissions\n }\n}\n\nexport const RenderField: React.FC<Props> = ({\n name,\n fieldComponentProps,\n indexPath,\n path: pathFromProps,\n permissions,\n schemaPath: schemaPathFromProps,\n siblingPermissions,\n}) => {\n const fieldComponents = useFieldComponents()\n const operation = useOperation()\n const { readOnly: readOnlyFromContext } = useFieldProps()\n\n if (!fieldComponents) {\n return null\n }\n\n const path = [pathFromProps, name].filter(Boolean).join('.')\n const schemaPath = [schemaPathFromProps, name].filter(Boolean).join('.')\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 (permissions?.read?.permission === false || fieldComponentProps?.field?.admin?.disabled) {\n return null\n }\n\n // `admin.readOnly` displays the value but prevents the field from being edited\n fieldComponentProps.readOnly = fieldComponentProps?.field?.admin?.readOnly\n\n // if parent field is `readOnly: true`, but this field is `readOnly: false`, the field should still be editable\n if (readOnlyFromContext && fieldComponentProps.readOnly !== false)\n fieldComponentProps.readOnly = true\n\n // if the user does not have access control to begin with, force it to be read-only\n if (permissions?.[operation]?.permission === false) {\n fieldComponentProps.readOnly = true\n }\n\n let RenderedField: React.ReactElement\n\n if (fieldComponentProps?.field?.admin?.components?.Field === null) {\n return null\n }\n\n // hide from admin if field is `admin.hidden: true`\n if (\n 'admin' in fieldComponentProps.field &&\n 'hidden' in fieldComponentProps.field.admin &&\n fieldComponentProps.field.admin.hidden\n ) {\n RenderedField = (\n <HiddenField\n field={fieldComponentProps.field}\n forceRender={fieldComponentProps.forceRender}\n readOnly={fieldComponentProps.readOnly}\n />\n )\n } else {\n RenderedField = (\n <RenderComponent\n Component={fieldComponents?.[fieldComponentProps?.field?.type]}\n clientProps={{\n field: fieldComponentProps.field,\n forceRender: fieldComponentProps.forceRender,\n readOnly: fieldComponentProps.readOnly,\n }}\n mappedComponent={fieldComponentProps?.field?.admin?.components?.Field}\n />\n )\n }\n\n return (\n <FieldPropsProvider\n custom={fieldComponentProps?.field?.admin?.custom}\n indexPath={indexPath}\n path={path}\n permissions={permissions}\n readOnly={fieldComponentProps.readOnly}\n schemaPath={schemaPath}\n siblingPermissions={siblingPermissions}\n type={fieldComponentProps?.field?.type}\n >\n {RenderedField}\n </FieldPropsProvider>\n )\n}\n"],"mappings":"AAAA;;;AAIA,OAAOA,KAAA,MAAW;AAElB,SAASC,WAAW,QAAQ;AAC5B,SAASC,eAAe,QAAQ;AAChC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,YAAY,QAAQ;AAC7B,SAASC,kBAAkB,EAAEC,aAAa,QAAQ;AAmBlD,OAAO,MAAMC,WAAA,GAA+BA,CAAC;EAC3CC,IAAI;EACJC,mBAAmB;EACnBC,SAAS;EACTC,IAAA,EAAMC,aAAa;EACnBC,WAAW;EACXC,UAAA,EAAYC,mBAAmB;EAC/BC;AAAkB,CACnB;EACC,MAAMC,eAAA,GAAkBd,kBAAA;EACxB,MAAMe,SAAA,GAAYd,YAAA;EAClB,MAAM;IAAEe,QAAA,EAAUC;EAAmB,CAAE,GAAGd,aAAA;EAE1C,IAAI,CAACW,eAAA,EAAiB;IACpB,OAAO;EACT;EAEA,MAAMN,IAAA,GAAO,CAACC,aAAA,EAAeJ,IAAA,CAAK,CAACa,MAAM,CAACC,OAAA,EAASC,IAAI,CAAC;EACxD,MAAMT,UAAA,GAAa,CAACC,mBAAA,EAAqBP,IAAA,CAAK,CAACa,MAAM,CAACC,OAAA,EAASC,IAAI,CAAC;EAEpE;EACA;EACA,IAAIV,WAAA,EAAaW,IAAA,EAAMC,UAAA,KAAe,SAAShB,mBAAA,EAAqBiB,KAAA,EAAOC,KAAA,EAAOC,QAAA,EAAU;IAC1F,OAAO;EACT;EAEA;EACAnB,mBAAA,CAAoBU,QAAQ,GAAGV,mBAAA,EAAqBiB,KAAA,EAAOC,KAAA,EAAOR,QAAA;EAElE;EACA,IAAIC,mBAAA,IAAuBX,mBAAA,CAAoBU,QAAQ,KAAK,
|
|
1
|
+
{"version":3,"file":"RenderField.js","names":["React","HiddenField","RenderComponent","useFieldComponents","useOperation","FieldPropsProvider","useFieldProps","RenderField","name","fieldComponentProps","indexPath","path","pathFromProps","permissions","schemaPath","schemaPathFromProps","siblingPermissions","fieldComponents","operation","readOnly","readOnlyFromContext","filter","Boolean","join","read","permission","field","admin","disabled","RenderedField","components","Field","hidden","_jsx","forceRender","Component","type","clientProps","mappedComponent","custom"],"sources":["../../../src/forms/RenderFields/RenderField.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientField, FieldPermissions } from 'payload'\n\nimport React from 'react'\n\nimport { HiddenField } from '../../fields/Hidden/index.js'\nimport { RenderComponent } from '../../providers/Config/RenderComponent.js'\nimport { useFieldComponents } from '../../providers/FieldComponents/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { FieldPropsProvider, useFieldProps } from '../FieldPropsProvider/index.js'\n\ntype Props = {\n readonly fieldComponentProps?: {\n field: ClientField\n forceRender?: boolean\n readOnly?: boolean\n }\n readonly indexPath?: string\n readonly isHidden?: boolean\n readonly name?: string\n readonly path: string\n readonly permissions?: FieldPermissions\n readonly schemaPath: string\n readonly siblingPermissions: {\n [fieldName: string]: FieldPermissions\n }\n}\n\nexport const RenderField: React.FC<Props> = ({\n name,\n fieldComponentProps,\n indexPath,\n path: pathFromProps,\n permissions,\n schemaPath: schemaPathFromProps,\n siblingPermissions,\n}) => {\n const fieldComponents = useFieldComponents()\n const operation = useOperation()\n const { readOnly: readOnlyFromContext } = useFieldProps()\n\n if (!fieldComponents) {\n return null\n }\n\n const path = [pathFromProps, name].filter(Boolean).join('.')\n const schemaPath = [schemaPathFromProps, name].filter(Boolean).join('.')\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 (permissions?.read?.permission === false || fieldComponentProps?.field?.admin?.disabled) {\n return null\n }\n\n // `admin.readOnly` displays the value but prevents the field from being edited\n fieldComponentProps.readOnly = fieldComponentProps?.field?.admin?.readOnly\n\n // if parent field is `readOnly: true`, but this field is `readOnly: false`, the field should still be editable\n if (readOnlyFromContext && fieldComponentProps.readOnly !== false) {\n fieldComponentProps.readOnly = true\n }\n\n // if the user does not have access control to begin with, force it to be read-only\n if (permissions?.[operation]?.permission === false) {\n fieldComponentProps.readOnly = true\n }\n\n let RenderedField: React.ReactElement\n\n if (fieldComponentProps?.field?.admin?.components?.Field === null) {\n return null\n }\n\n // hide from admin if field is `admin.hidden: true`\n if (\n 'admin' in fieldComponentProps.field &&\n 'hidden' in fieldComponentProps.field.admin &&\n fieldComponentProps.field.admin.hidden\n ) {\n RenderedField = (\n <HiddenField\n field={fieldComponentProps.field}\n forceRender={fieldComponentProps.forceRender}\n readOnly={fieldComponentProps.readOnly}\n />\n )\n } else {\n RenderedField = (\n <RenderComponent\n Component={fieldComponents?.[fieldComponentProps?.field?.type]}\n clientProps={{\n field: fieldComponentProps.field,\n forceRender: fieldComponentProps.forceRender,\n readOnly: fieldComponentProps.readOnly,\n }}\n mappedComponent={fieldComponentProps?.field?.admin?.components?.Field}\n />\n )\n }\n\n return (\n <FieldPropsProvider\n custom={fieldComponentProps?.field?.admin?.custom}\n indexPath={indexPath}\n path={path}\n permissions={permissions}\n readOnly={fieldComponentProps.readOnly}\n schemaPath={schemaPath}\n siblingPermissions={siblingPermissions}\n type={fieldComponentProps?.field?.type}\n >\n {RenderedField}\n </FieldPropsProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/forms/buildStateFromSchema/calculateDefaultValues/promise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAO5D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,WAAW,EAAE,IAAI,CAAA;IACjB,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAGD,eAAO,MAAM,mBAAmB,GAAU,CAAC,mDAOxC,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/forms/buildStateFromSchema/calculateDefaultValues/promise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAO5D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,WAAW,EAAE,IAAI,CAAA;IACjB,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAGD,eAAO,MAAM,mBAAmB,GAAU,CAAC,mDAOxC,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CA+IxB,CAAA"}
|
|
@@ -24,7 +24,9 @@ export const defaultValuePromise = async ({
|
|
|
24
24
|
switch (field.type) {
|
|
25
25
|
case 'group':
|
|
26
26
|
{
|
|
27
|
-
if (typeof siblingData[field.name] !== 'object')
|
|
27
|
+
if (typeof siblingData[field.name] !== 'object') {
|
|
28
|
+
siblingData[field.name] = {};
|
|
29
|
+
}
|
|
28
30
|
const groupData = siblingData[field.name];
|
|
29
31
|
await iterateFields({
|
|
30
32
|
id,
|
|
@@ -96,7 +98,9 @@ export const defaultValuePromise = async ({
|
|
|
96
98
|
{
|
|
97
99
|
let tabSiblingData;
|
|
98
100
|
if (tabHasName(field)) {
|
|
99
|
-
if (typeof siblingData[field.name] !== 'object')
|
|
101
|
+
if (typeof siblingData[field.name] !== 'object') {
|
|
102
|
+
siblingData[field.name] = {};
|
|
103
|
+
}
|
|
100
104
|
tabSiblingData = siblingData[field.name];
|
|
101
105
|
} else {
|
|
102
106
|
tabSiblingData = siblingData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.js","names":["getDefaultValue","fieldAffectsData","tabHasName","iterateFields","defaultValuePromise","id","data","field","locale","siblingData","user","name","defaultValue","value","type","groupData","fields","rows","Array","isArray","promises","forEach","row","push","Promise","all","blockTypeToMatch","blockType","block","blocks","find","slug","tabSiblingData","tabs","map","tab"],"sources":["../../../../src/forms/buildStateFromSchema/calculateDefaultValues/promise.ts"],"sourcesContent":["import type { Data, Field, TabAsField, User } from 'payload'\n\nimport { getDefaultValue } from 'payload'\nimport { fieldAffectsData, tabHasName } from 'payload/shared'\n\nimport { iterateFields } from './iterateFields.js'\n\ntype Args<T> = {\n data: T\n field: Field | TabAsField\n id?: number | string\n locale: string | undefined\n siblingData: Data\n user: User\n}\n\n// TODO: Make this works for rich text subfields\nexport const defaultValuePromise = async <T>({\n id,\n data,\n field,\n locale,\n siblingData,\n user,\n}: Args<T>): Promise<void> => {\n if (fieldAffectsData(field)) {\n if (\n typeof siblingData[field.name] === 'undefined' &&\n typeof field.defaultValue !== 'undefined'\n ) {\n siblingData[field.name] = await getDefaultValue({\n defaultValue: field.defaultValue,\n locale,\n user,\n value: siblingData[field.name],\n })\n }\n }\n\n // Traverse subfields\n switch (field.type) {\n case 'group': {\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n\n const groupData = siblingData[field.name] as Record<string, unknown>\n\n await iterateFields({\n id,\n data,\n fields: field.fields,\n locale,\n siblingData: groupData,\n user,\n })\n\n break\n }\n\n case 'array': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row) => {\n promises.push(\n iterateFields({\n id,\n data,\n fields: field.fields,\n locale,\n siblingData: row,\n user,\n }),\n )\n })\n await Promise.all(promises)\n }\n break\n }\n\n case 'blocks': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row) => {\n const blockTypeToMatch = row.blockType\n const block = field.blocks.find((blockType) => blockType.slug === blockTypeToMatch)\n\n if (block) {\n row.blockType = blockTypeToMatch\n\n promises.push(\n iterateFields({\n id,\n data,\n fields: block.fields,\n locale,\n siblingData: row,\n user,\n }),\n )\n }\n })\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'row':\n case 'collapsible': {\n await iterateFields({\n id,\n data,\n fields: field.fields,\n locale,\n siblingData,\n user,\n })\n\n break\n }\n\n case 'tab': {\n let tabSiblingData\n if (tabHasName(field)) {\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n\n tabSiblingData = siblingData[field.name] as Record<string, unknown>\n } else {\n tabSiblingData = siblingData\n }\n\n await iterateFields({\n id,\n data,\n fields: field.fields,\n locale,\n siblingData: tabSiblingData,\n user,\n })\n\n break\n }\n\n case 'tabs': {\n await iterateFields({\n id,\n data,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n locale,\n siblingData,\n user,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"mappings":"AAEA,SAASA,eAAe,QAAQ;AAChC,SAASC,gBAAgB,EAAEC,UAAU,QAAQ;AAE7C,SAASC,aAAa,QAAQ;AAW9B;AACA,OAAO,MAAMC,mBAAA,GAAsB,MAAAA,CAAU;EAC3CC,EAAE;EACFC,IAAI;EACJC,KAAK;EACLC,MAAM;EACNC,WAAW;EACXC;AAAI,CACI;EACR,IAAIT,gBAAA,CAAiBM,KAAA,GAAQ;IAC3B,IACE,OAAOE,WAAW,CAACF,KAAA,CAAMI,IAAI,CAAC,KAAK,eACnC,OAAOJ,KAAA,CAAMK,YAAY,KAAK,aAC9B;MACAH,WAAW,CAACF,KAAA,CAAMI,IAAI,CAAC,GAAG,MAAMX,eAAA,CAAgB;QAC9CY,YAAA,EAAcL,KAAA,CAAMK,YAAY;QAChCJ,MAAA;QACAE,IAAA;QACAG,KAAA,EAAOJ,WAAW,CAACF,KAAA,CAAMI,IAAI;MAC/B;IACF;EACF;EAEA;EACA,QAAQJ,KAAA,CAAMO,IAAI;IAChB,KAAK;MAAS;QACZ,IAAI,OAAOL,WAAW,CAACF,KAAA,CAAMI,IAAI,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"promise.js","names":["getDefaultValue","fieldAffectsData","tabHasName","iterateFields","defaultValuePromise","id","data","field","locale","siblingData","user","name","defaultValue","value","type","groupData","fields","rows","Array","isArray","promises","forEach","row","push","Promise","all","blockTypeToMatch","blockType","block","blocks","find","slug","tabSiblingData","tabs","map","tab"],"sources":["../../../../src/forms/buildStateFromSchema/calculateDefaultValues/promise.ts"],"sourcesContent":["import type { Data, Field, TabAsField, User } from 'payload'\n\nimport { getDefaultValue } from 'payload'\nimport { fieldAffectsData, tabHasName } from 'payload/shared'\n\nimport { iterateFields } from './iterateFields.js'\n\ntype Args<T> = {\n data: T\n field: Field | TabAsField\n id?: number | string\n locale: string | undefined\n siblingData: Data\n user: User\n}\n\n// TODO: Make this works for rich text subfields\nexport const defaultValuePromise = async <T>({\n id,\n data,\n field,\n locale,\n siblingData,\n user,\n}: Args<T>): Promise<void> => {\n if (fieldAffectsData(field)) {\n if (\n typeof siblingData[field.name] === 'undefined' &&\n typeof field.defaultValue !== 'undefined'\n ) {\n siblingData[field.name] = await getDefaultValue({\n defaultValue: field.defaultValue,\n locale,\n user,\n value: siblingData[field.name],\n })\n }\n }\n\n // Traverse subfields\n switch (field.type) {\n case 'group': {\n if (typeof siblingData[field.name] !== 'object') {\n siblingData[field.name] = {}\n }\n\n const groupData = siblingData[field.name] as Record<string, unknown>\n\n await iterateFields({\n id,\n data,\n fields: field.fields,\n locale,\n siblingData: groupData,\n user,\n })\n\n break\n }\n\n case 'array': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row) => {\n promises.push(\n iterateFields({\n id,\n data,\n fields: field.fields,\n locale,\n siblingData: row,\n user,\n }),\n )\n })\n await Promise.all(promises)\n }\n break\n }\n\n case 'blocks': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row) => {\n const blockTypeToMatch = row.blockType\n const block = field.blocks.find((blockType) => blockType.slug === blockTypeToMatch)\n\n if (block) {\n row.blockType = blockTypeToMatch\n\n promises.push(\n iterateFields({\n id,\n data,\n fields: block.fields,\n locale,\n siblingData: row,\n user,\n }),\n )\n }\n })\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'row':\n case 'collapsible': {\n await iterateFields({\n id,\n data,\n fields: field.fields,\n locale,\n siblingData,\n user,\n })\n\n break\n }\n\n case 'tab': {\n let tabSiblingData\n if (tabHasName(field)) {\n if (typeof siblingData[field.name] !== 'object') {\n siblingData[field.name] = {}\n }\n\n tabSiblingData = siblingData[field.name] as Record<string, unknown>\n } else {\n tabSiblingData = siblingData\n }\n\n await iterateFields({\n id,\n data,\n fields: field.fields,\n locale,\n siblingData: tabSiblingData,\n user,\n })\n\n break\n }\n\n case 'tabs': {\n await iterateFields({\n id,\n data,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n locale,\n siblingData,\n user,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graphics/Account/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AASzB,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graphics/Account/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AASzB,eAAO,MAAM,OAAO,yBAiCnB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","usePathname","React","useAuth","RenderComponent","useConfig","formatAdminURL","DefaultAccountIcon","GravatarAccountIcon","Account","$","config","t0","admin","t1","routes","t2","avatar","components","t3","t4","Avatar","CustomAvatar","account","accountRoute","adminRoute","user","pathname","isOnAccountPage","path","t5","_jsx","clientProps","active","mappedComponent","email","Symbol","for"],"sources":["../../../src/graphics/Account/index.tsx"],"sourcesContent":["'use client'\nimport { usePathname } from 'next/navigation.js'\nimport React from 'react'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { RenderComponent } from '../../providers/Config/RenderComponent.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { DefaultAccountIcon } from './Default/index.js'\nimport { GravatarAccountIcon } from './Gravatar/index.js'\n\nexport const Account = () => {\n const {\n config: {\n admin: {\n avatar,\n components: { Avatar: CustomAvatar },\n routes: { account: accountRoute },\n },\n routes: { admin: adminRoute },\n },\n } = useConfig()\n\n const { user } = useAuth()\n const pathname = usePathname()\n const isOnAccountPage = pathname === formatAdminURL({ adminRoute, path: accountRoute })\n\n if (CustomAvatar) {\n return (\n <RenderComponent\n clientProps={{\n active: isOnAccountPage,\n }}\n mappedComponent={CustomAvatar}\n />\n )\n }\n\n if (!user?.email || avatar === 'default') return <DefaultAccountIcon active={isOnAccountPage} />\n if (avatar === 'gravatar') return <GravatarAccountIcon />\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,SAASC,WAAW,QAAQ;AAC5B,OAAOC,KAAA,MAAW;AAElB,SAASC,OAAO,QAAQ;AACxB,SAASC,eAAe,QAAQ;AAChC,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAC/B,SAASC,kBAAkB,QAAQ;AACnC,SAASC,mBAAmB,QAAQ;AAEpC,OAAO,MAAMC,OAAA,GAAUA,CAAA;EAAA,MAAAC,CAAA,GAAAV,EAAA;EACrB;IAAAW,MAAA,EAAAC;EAAA,IASIP,SAAA;EARM;IAAAQ,KAAA,EAAAC,EAAA;IAAAC,MAAA,EAAAC;EAAA,IAAAJ,EAOP;EANQ;IAAAK,MAAA;IAAAC,UAAA,EAAAC,EAAA;IAAAJ,MAAA,EAAAK;EAAA,IAAAN,EAIN;EAFa;IAAAO,MAAA,EAAAC;EAAA,IAAAH,EAAwB;EAC5B;IAAAI,OAAA,EAAAC;EAAA,IAAAJ,EAAyB;EAE3B;IAAAP,KAAA,EAAAY;EAAA,IAAAT,EAAqB;EAIjC;IAAAU;EAAA,IAAiBvB,OAAA;EACjB,MAAAwB,QAAA,GAAiB1B,WAAA;EACjB,MAAA2B,eAAA,GAAwBD,QAAA,KAAarB,cAAA;IAAAmB,UAAA;IAAAI,IAAA,EAAmCL;EAAA,CAAa;EAAA,IAEjFF,YAAA;IAAA,IAAAQ,EAAA;IAAA,IAAApB,CAAA,QAAAkB,eAAA,IAAAlB,CAAA,QAAAY,YAAA;MAEAQ,EAAA,GAAAC,IAAA,CAAA3B,eAAA;QAAA4B,WAAA;UAAAC,MAAA,EAEYL;QAAA;QAAAM,eAAA,EAEOZ;MAAA,C;;;;;;;WAJnBQ,E;;MASA,CAACJ,IAAA,EAAAS,KAAA,IAAelB,MAAA,KAAW;IAAA,IAAAa,EAAA;IAAA,IAAApB,CAAA,QAAAkB,eAAA;
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","usePathname","React","useAuth","RenderComponent","useConfig","formatAdminURL","DefaultAccountIcon","GravatarAccountIcon","Account","$","config","t0","admin","t1","routes","t2","avatar","components","t3","t4","Avatar","CustomAvatar","account","accountRoute","adminRoute","user","pathname","isOnAccountPage","path","t5","_jsx","clientProps","active","mappedComponent","email","Symbol","for"],"sources":["../../../src/graphics/Account/index.tsx"],"sourcesContent":["'use client'\nimport { usePathname } from 'next/navigation.js'\nimport React from 'react'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { RenderComponent } from '../../providers/Config/RenderComponent.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { DefaultAccountIcon } from './Default/index.js'\nimport { GravatarAccountIcon } from './Gravatar/index.js'\n\nexport const Account = () => {\n const {\n config: {\n admin: {\n avatar,\n components: { Avatar: CustomAvatar },\n routes: { account: accountRoute },\n },\n routes: { admin: adminRoute },\n },\n } = useConfig()\n\n const { user } = useAuth()\n const pathname = usePathname()\n const isOnAccountPage = pathname === formatAdminURL({ adminRoute, path: accountRoute })\n\n if (CustomAvatar) {\n return (\n <RenderComponent\n clientProps={{\n active: isOnAccountPage,\n }}\n mappedComponent={CustomAvatar}\n />\n )\n }\n\n if (!user?.email || avatar === 'default') {\n return <DefaultAccountIcon active={isOnAccountPage} />\n }\n if (avatar === 'gravatar') {\n return <GravatarAccountIcon />\n }\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,SAASC,WAAW,QAAQ;AAC5B,OAAOC,KAAA,MAAW;AAElB,SAASC,OAAO,QAAQ;AACxB,SAASC,eAAe,QAAQ;AAChC,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAC/B,SAASC,kBAAkB,QAAQ;AACnC,SAASC,mBAAmB,QAAQ;AAEpC,OAAO,MAAMC,OAAA,GAAUA,CAAA;EAAA,MAAAC,CAAA,GAAAV,EAAA;EACrB;IAAAW,MAAA,EAAAC;EAAA,IASIP,SAAA;EARM;IAAAQ,KAAA,EAAAC,EAAA;IAAAC,MAAA,EAAAC;EAAA,IAAAJ,EAOP;EANQ;IAAAK,MAAA;IAAAC,UAAA,EAAAC,EAAA;IAAAJ,MAAA,EAAAK;EAAA,IAAAN,EAIN;EAFa;IAAAO,MAAA,EAAAC;EAAA,IAAAH,EAAwB;EAC5B;IAAAI,OAAA,EAAAC;EAAA,IAAAJ,EAAyB;EAE3B;IAAAP,KAAA,EAAAY;EAAA,IAAAT,EAAqB;EAIjC;IAAAU;EAAA,IAAiBvB,OAAA;EACjB,MAAAwB,QAAA,GAAiB1B,WAAA;EACjB,MAAA2B,eAAA,GAAwBD,QAAA,KAAarB,cAAA;IAAAmB,UAAA;IAAAI,IAAA,EAAmCL;EAAA,CAAa;EAAA,IAEjFF,YAAA;IAAA,IAAAQ,EAAA;IAAA,IAAApB,CAAA,QAAAkB,eAAA,IAAAlB,CAAA,QAAAY,YAAA;MAEAQ,EAAA,GAAAC,IAAA,CAAA3B,eAAA;QAAA4B,WAAA;UAAAC,MAAA,EAEYL;QAAA;QAAAM,eAAA,EAEOZ;MAAA,C;;;;;;;WAJnBQ,E;;MASA,CAACJ,IAAA,EAAAS,KAAA,IAAelB,MAAA,KAAW;IAAA,IAAAa,EAAA;IAAA,IAAApB,CAAA,QAAAkB,eAAA;MACtBE,EAAA,GAAAC,IAAA,CAAAxB,kBAAA;QAAA0B,MAAA,EAA4BL;MAAA,C;;;;;;WAA5BE,E;;MAELb,MAAA,KAAW;IAAA,IAAAa,EAAA;IAAA,IAAApB,CAAA,QAAA0B,MAAA,CAAAC,GAAA;MACNP,EAAA,GAAAC,IAAA,CAAAvB,mBAAA,IAAC;MAAAE,CAAA,MAAAoB,EAAA;IAAA;MAAAA,EAAA,GAAApB,CAAA;IAAA;IAAA,OAADoB,EAAC;EAAA;AAAA,CAEZ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHotkey.d.ts","sourceRoot":"","sources":["../../src/hooks/useHotkey.ts"],"names":[],"mappings":"AA6DA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,YACX;IACP,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,QACK,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,KAC/B,
|
|
1
|
+
{"version":3,"file":"useHotkey.d.ts","sourceRoot":"","sources":["../../src/hooks/useHotkey.ts"],"names":[],"mappings":"AA6DA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,YACX;IACP,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,QACK,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,KAC/B,IAmEF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHotkey.js","names":["c","_c","useModal","setsAreEqual","useCallback","useEffect","pressedKeys","Map","map","altleft","altright","controlleft","controlright","ctrlleft","ctrlright","escape","metaleft","metaright","osleft","osright","shiftleft","shiftright","stripKey","key","toLowerCase","trim","replace","pushToKeys","code","forEach","time","pressedKey","delete","set","Date","now","removeFromKeys","clear","useHotkey","options","func","$","cmdCtrlKey","editDepth","keyCodes","modalState","t0","event","e","detail","undefined","hasCmd","window","navigator","userAgent","includes","pressedWithoutModifier","keys","filter","key_0","Set","has","ctrlKey","maxEditDepth","Object","key_1","isOpen","length","keydown","keyup","_temp","t1","t2","document","addEventListener","removeEventListener","e_0"],"sources":["../../src/hooks/useHotkey.ts"],"sourcesContent":["'use client'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { setsAreEqual } from 'payload/shared'\nimport { useCallback, useEffect } from 'react'\n\n// Required to be outside of hook, else debounce would be necessary\n// and then one could not prevent the default behaviour.\n\n// It maps the pressed keys with the time they were pressed, in order to implement a maximum time\n// for the user to press the next key in the sequence\n\n// This is necessary to prevent a bug where the keyup event, which unsets the key as pressed\n// is not fired when the window is not focused.\n// When the user then comes back to the window, the key is still registered as pressed, even though it's not.\nconst pressedKeys = new Map<string, number>([])\n\nconst map = {\n altleft: 'alt',\n altright: 'alt',\n controlleft: 'ctrl',\n controlright: 'ctrl',\n ctrlleft: 'ctrl',\n ctrlright: 'ctrl',\n escape: 'esc',\n metaleft: 'meta',\n metaright: 'meta',\n osleft: 'meta',\n osright: 'meta',\n shiftleft: 'shift',\n shiftright: 'shift',\n}\n\nconst stripKey = (key: string) => {\n return (map[key.toLowerCase()] || key).trim().toLowerCase().replace('key', '')\n}\n\nconst pushToKeys = (code: string) => {\n const key = stripKey(code)\n\n // There is a weird bug with macos that if the keys are not cleared they remain in the\n // pressed keys set.\n if (key === 'meta') {\n pressedKeys.forEach(\n (time, pressedKey) => pressedKey !== 'meta' && pressedKeys.delete(pressedKey),\n )\n }\n\n pressedKeys.set(key, Date.now())\n}\n\nconst removeFromKeys = (code: string) => {\n const key = stripKey(code)\n // There is a weird bug with macos that if the keys are not cleared they remain in the\n // pressed keys set.\n if (key === 'meta') {\n pressedKeys.clear()\n }\n pressedKeys.delete(key)\n}\n\n/**\n * Hook function to work with hotkeys.\n * @param param0.keyCode {string[]} The keys to listen for (`Event.code` without `'Key'` and lowercased)\n * @param param0.cmdCtrlKey {boolean} Whether Ctrl on windows or Cmd on mac must be pressed\n * @param param0.editDepth {boolean} This ensures that the hotkey is only triggered for the most top-level drawer in case there are nested drawers\n * @param func The callback function\n */\nexport const useHotkey = (\n options: {\n cmdCtrlKey: boolean\n editDepth: number\n keyCodes: string[]\n },\n func: (e: KeyboardEvent) => void,\n): void => {\n const { cmdCtrlKey, editDepth, keyCodes } = options\n\n const { modalState } = useModal()\n\n const keydown = useCallback(\n (event: CustomEvent | KeyboardEvent) => {\n const e: KeyboardEvent = event.detail?.key ? event.detail : event\n if (e.key === undefined) {\n // Autofill events, or other synthetic events, can be ignored\n return\n }\n\n // Filter out pressed keys which have been pressed > 3 seconds ago\n pressedKeys.forEach((time, key) => {\n if (Date.now() - time > 3000) {\n pressedKeys.delete(key)\n }\n })\n\n if (e.code) pushToKeys(e.code)\n\n // Check for Mac and iPad\n const hasCmd = window.navigator.userAgent.includes('Mac OS X')\n const pressedWithoutModifier = [...pressedKeys.keys()].filter(\n (key) => !['alt', 'ctrl', 'meta', 'shift'].includes(key),\n )\n\n // Check whether arrays contain the same values (regardless of number of occurrences)\n if (\n setsAreEqual(new Set(pressedWithoutModifier), new Set(keyCodes)) &&\n (!cmdCtrlKey || (hasCmd && pressedKeys.has('meta')) || (!hasCmd && e.ctrlKey))\n ) {\n // get the maximum edit depth by counting the number of open drawers. modalState is and object which contains the state of all drawers.\n const maxEditDepth =\n Object.keys(modalState).filter((key) => modalState[key]?.isOpen)?.length + 1 || 1\n\n if (maxEditDepth !== editDepth) {\n // We only want to execute the hotkey from the most top-level drawer / edit depth.\n return\n }\n // execute the function associated with the maximum edit depth\n func(e)\n }\n },\n [keyCodes, cmdCtrlKey, editDepth, modalState, func],\n )\n\n const keyup = useCallback((e: KeyboardEvent) => {\n if (e.code) removeFromKeys(e.code)\n }, [])\n\n useEffect(() => {\n document.addEventListener('keydown', keydown, false)\n document.addEventListener('bypassKeyDown', keydown, false) // this is called if the keydown event's propagation is stopped by react-select\n document.addEventListener('keyup', keyup, false)\n\n return () => {\n document.removeEventListener('keydown', keydown)\n document.removeEventListener('bypassKeyDown', keydown)\n document.removeEventListener('keyup', keyup)\n }\n }, [keydown, keyup])\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAEA,SAASC,QAAQ,QAAQ;AACzB,SAASC,YAAY,QAAQ;AAC7B,SAASC,WAAW,EAAEC,SAAS,QAAQ;AAEvC;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA,MAAMC,WAAA,GAAc,IAAIC,GAAA,CAAoB,EAAE;AAE9C,MAAMC,GAAA,GAAM;EACVC,OAAA,EAAS;EACTC,QAAA,EAAU;EACVC,WAAA,EAAa;EACbC,YAAA,EAAc;EACdC,QAAA,EAAU;EACVC,SAAA,EAAW;EACXC,MAAA,EAAQ;EACRC,QAAA,EAAU;EACVC,SAAA,EAAW;EACXC,MAAA,EAAQ;EACRC,OAAA,EAAS;EACTC,SAAA,EAAW;EACXC,UAAA,EAAY;AACd;AAEA,MAAMC,QAAA,GAAYC,GAAA;EAChB,OAAO,CAACf,GAAG,CAACe,GAAA,CAAIC,WAAW,GAAG,IAAID,GAAE,EAAGE,IAAI,GAAGD,WAAW,GAAGE,OAAO,CAAC,OAAO;AAC7E;AAEA,MAAMC,UAAA,GAAcC,IAAA;EAClB,MAAML,GAAA,GAAMD,QAAA,CAASM,IAAA;EAErB;EACA;EACA,IAAIL,GAAA,KAAQ,QAAQ;IAClBjB,WAAA,CAAYuB,OAAO,CACjB,CAACC,IAAA,EAAMC,UAAA,KAAeA,UAAA,KAAe,UAAUzB,WAAA,CAAY0B,MAAM,CAACD,UAAA;EAEtE;EAEAzB,WAAA,CAAY2B,GAAG,CAACV,GAAA,EAAKW,IAAA,CAAKC,GAAG;AAC/B;AAEA,MAAMC,cAAA,GAAkBR,IAAA;EACtB,MAAML,GAAA,GAAMD,QAAA,CAASM,IAAA;EACrB;EACA;EACA,IAAIL,GAAA,KAAQ,QAAQ;IAClBjB,WAAA,CAAY+B,KAAK;EACnB;EACA/B,WAAA,CAAY0B,MAAM,CAACT,GAAA;AACrB;AAEA;;;;;;;AAOA,OAAO,MAAMe,SAAA,GAAYA,CAAAC,OAAA,EAAAC,IAAA;EAAA,MAAAC,CAAA,GAAAxC,EAAA;EAQvB;IAAAyC,UAAA;IAAAC,SAAA;IAAAC;EAAA,IAA4CL,OAAA;EAE5C;IAAAM;EAAA,IAAuB3C,QAAA;EAAA,IAAA4C,EAAA;EAAA,IAAAL,CAAA,QAAAG,QAAA,IAAAH,CAAA,QAAAC,UAAA,IAAAD,CAAA,QAAAI,UAAA,IAAAJ,CAAA,QAAAE,SAAA,IAAAF,CAAA,QAAAD,IAAA;IAGrBM,EAAA,GAAAC,KAAA;MACE,MAAAC,CAAA,GAAyBD,KAAA,CAAAE,MAAA,EAAA1B,GAAA,GAAoBwB,KAAA,CAAAE,MAAA,GAAeF,KAAA;MAAA,IACxDC,CAAA,CAAAzB,GAAA,KAAA2B,SAAU;QAAA;MAAA;MAMd5C,WAAA,CAAAuB,OAAA,EAAAC,IAAA,EAAAP,GAAA;QAAA,IACMW,IAAA,CAAAC,GAAA,CAAQ,IAAKL,IAAA,OAAO;UACtBxB,WAAA,CAAA0B,MAAA,CAAmBT,GAAA;QAAA;MAAA,CAEvB;MAAA,IAEIyB,CAAA,CAAApB,IAAA;
|
|
1
|
+
{"version":3,"file":"useHotkey.js","names":["c","_c","useModal","setsAreEqual","useCallback","useEffect","pressedKeys","Map","map","altleft","altright","controlleft","controlright","ctrlleft","ctrlright","escape","metaleft","metaright","osleft","osright","shiftleft","shiftright","stripKey","key","toLowerCase","trim","replace","pushToKeys","code","forEach","time","pressedKey","delete","set","Date","now","removeFromKeys","clear","useHotkey","options","func","$","cmdCtrlKey","editDepth","keyCodes","modalState","t0","event","e","detail","undefined","hasCmd","window","navigator","userAgent","includes","pressedWithoutModifier","keys","filter","key_0","Set","has","ctrlKey","maxEditDepth","Object","key_1","isOpen","length","keydown","keyup","_temp","t1","t2","document","addEventListener","removeEventListener","e_0"],"sources":["../../src/hooks/useHotkey.ts"],"sourcesContent":["'use client'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { setsAreEqual } from 'payload/shared'\nimport { useCallback, useEffect } from 'react'\n\n// Required to be outside of hook, else debounce would be necessary\n// and then one could not prevent the default behaviour.\n\n// It maps the pressed keys with the time they were pressed, in order to implement a maximum time\n// for the user to press the next key in the sequence\n\n// This is necessary to prevent a bug where the keyup event, which unsets the key as pressed\n// is not fired when the window is not focused.\n// When the user then comes back to the window, the key is still registered as pressed, even though it's not.\nconst pressedKeys = new Map<string, number>([])\n\nconst map = {\n altleft: 'alt',\n altright: 'alt',\n controlleft: 'ctrl',\n controlright: 'ctrl',\n ctrlleft: 'ctrl',\n ctrlright: 'ctrl',\n escape: 'esc',\n metaleft: 'meta',\n metaright: 'meta',\n osleft: 'meta',\n osright: 'meta',\n shiftleft: 'shift',\n shiftright: 'shift',\n}\n\nconst stripKey = (key: string) => {\n return (map[key.toLowerCase()] || key).trim().toLowerCase().replace('key', '')\n}\n\nconst pushToKeys = (code: string) => {\n const key = stripKey(code)\n\n // There is a weird bug with macos that if the keys are not cleared they remain in the\n // pressed keys set.\n if (key === 'meta') {\n pressedKeys.forEach(\n (time, pressedKey) => pressedKey !== 'meta' && pressedKeys.delete(pressedKey),\n )\n }\n\n pressedKeys.set(key, Date.now())\n}\n\nconst removeFromKeys = (code: string) => {\n const key = stripKey(code)\n // There is a weird bug with macos that if the keys are not cleared they remain in the\n // pressed keys set.\n if (key === 'meta') {\n pressedKeys.clear()\n }\n pressedKeys.delete(key)\n}\n\n/**\n * Hook function to work with hotkeys.\n * @param param0.keyCode {string[]} The keys to listen for (`Event.code` without `'Key'` and lowercased)\n * @param param0.cmdCtrlKey {boolean} Whether Ctrl on windows or Cmd on mac must be pressed\n * @param param0.editDepth {boolean} This ensures that the hotkey is only triggered for the most top-level drawer in case there are nested drawers\n * @param func The callback function\n */\nexport const useHotkey = (\n options: {\n cmdCtrlKey: boolean\n editDepth: number\n keyCodes: string[]\n },\n func: (e: KeyboardEvent) => void,\n): void => {\n const { cmdCtrlKey, editDepth, keyCodes } = options\n\n const { modalState } = useModal()\n\n const keydown = useCallback(\n (event: CustomEvent | KeyboardEvent) => {\n const e: KeyboardEvent = event.detail?.key ? event.detail : event\n if (e.key === undefined) {\n // Autofill events, or other synthetic events, can be ignored\n return\n }\n\n // Filter out pressed keys which have been pressed > 3 seconds ago\n pressedKeys.forEach((time, key) => {\n if (Date.now() - time > 3000) {\n pressedKeys.delete(key)\n }\n })\n\n if (e.code) {\n pushToKeys(e.code)\n }\n\n // Check for Mac and iPad\n const hasCmd = window.navigator.userAgent.includes('Mac OS X')\n const pressedWithoutModifier = [...pressedKeys.keys()].filter(\n (key) => !['alt', 'ctrl', 'meta', 'shift'].includes(key),\n )\n\n // Check whether arrays contain the same values (regardless of number of occurrences)\n if (\n setsAreEqual(new Set(pressedWithoutModifier), new Set(keyCodes)) &&\n (!cmdCtrlKey || (hasCmd && pressedKeys.has('meta')) || (!hasCmd && e.ctrlKey))\n ) {\n // get the maximum edit depth by counting the number of open drawers. modalState is and object which contains the state of all drawers.\n const maxEditDepth =\n Object.keys(modalState).filter((key) => modalState[key]?.isOpen)?.length + 1 || 1\n\n if (maxEditDepth !== editDepth) {\n // We only want to execute the hotkey from the most top-level drawer / edit depth.\n return\n }\n // execute the function associated with the maximum edit depth\n func(e)\n }\n },\n [keyCodes, cmdCtrlKey, editDepth, modalState, func],\n )\n\n const keyup = useCallback((e: KeyboardEvent) => {\n if (e.code) {\n removeFromKeys(e.code)\n }\n }, [])\n\n useEffect(() => {\n document.addEventListener('keydown', keydown, false)\n document.addEventListener('bypassKeyDown', keydown, false) // this is called if the keydown event's propagation is stopped by react-select\n document.addEventListener('keyup', keyup, false)\n\n return () => {\n document.removeEventListener('keydown', keydown)\n document.removeEventListener('bypassKeyDown', keydown)\n document.removeEventListener('keyup', keyup)\n }\n }, [keydown, keyup])\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIntersect.d.ts","sourceRoot":"","sources":["../../src/hooks/useIntersect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,KAAK,SAAS,GAAG;IACf,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;IACpC,KAAK,EAAE,yBAAyB;IAChC,IAAI,EAAE,WAAW;CAClB,CAAA;AAED,eAAO,MAAM,YAAY;;;;aAEb,OAAO,KAChB,
|
|
1
|
+
{"version":3,"file":"useIntersect.d.ts","sourceRoot":"","sources":["../../src/hooks/useIntersect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,KAAK,SAAS,GAAG;IACf,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;IACpC,KAAK,EAAE,yBAAyB;IAChC,IAAI,EAAE,WAAW;CAClB,CAAA;AAED,eAAO,MAAM,YAAY;;;;aAEb,OAAO,KAChB,SA6BF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIntersect.js","names":["c","_c","useEffect","useRef","useState","useIntersect","t0","disable","$","t1","undefined","root","t2","rootMargin","t3","threshold","t4","entry","updateEntry","node","setNode","t5","window","IntersectionObserver","t6","ent","observer","t7","current","currentObserver","disconnect","observe","t8"],"sources":["../../src/hooks/useIntersect.ts"],"sourcesContent":["'use client'\n\nimport type React from 'react'\n\nimport { useEffect, useRef, useState } from 'react'\n\ntype Intersect = [\n setNode: React.Dispatch<HTMLElement>,\n entry: IntersectionObserverEntry,\n node: HTMLElement,\n]\n\nexport const useIntersect = (\n { root = null, rootMargin = '0px', threshold = 0 } = {},\n disable?: boolean,\n): Intersect => {\n const [entry, updateEntry] = useState<IntersectionObserverEntry>()\n const [node, setNode] = useState(null)\n\n const observer = useRef(\n typeof window !== 'undefined' && 'IntersectionObserver' in window && !disable\n ? new window.IntersectionObserver(([ent]) => updateEntry(ent), {\n root,\n rootMargin,\n threshold,\n })\n : null,\n )\n\n useEffect(() => {\n if (disable) {\n return\n }\n const { current: currentObserver } = observer\n currentObserver.disconnect()\n\n if (node) currentObserver.observe(node)\n\n return () => currentObserver.disconnect()\n }, [node, disable])\n\n return [setNode, entry, node]\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAIA,SAASC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAQ5C,OAAO,MAAMC,YAAA,GAAeA,CAAAC,EAAA,EAAAC,OAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAAA,IAAAQ,EAAA;EAAA,IAAAD,CAAA,QAAAF,EAAA;IAC1BG,EAAA,GAAAH,EAAuD,KAAAI,SAAA,QAAvDJ,EAAuD;IAAAE,CAAA,MAAAF,EAAA;IAAAE,CAAA,MAAAC,EAAA;EAAA;IAAAA,EAAA,GAAAD,CAAA;EAAA;EAAvD;IAAAG,IAAA,EAAAC,EAAA;IAAAC,UAAA,EAAAC,EAAA;IAAAC,SAAA,EAAAC;EAAA,IAAAP,EAAuD;EAArD,MAAAE,IAAA,GAAAC,EAAW,KAAAF,SAAA,UAAXE,EAAW;EAAE,MAAAC,UAAA,GAAAC,EAAkB,KAAAJ,SAAA,GAAL,KAAK,GAAlBI,EAAkB;EAAE,MAAAC,SAAA,GAAAC,EAAa,KAAAN,SAAA,OAAbM,EAAa;EAGhD,OAAAC,KAAA,EAAAC,WAAA,IAA6Bd,QAAA;EAC7B,OAAAe,IAAA,EAAAC,OAAA,IAAwBhB,QAAA,KAAS;EAAA,IAAAiB,EAAA;EAAA,IAAAb,CAAA,QAAAD,OAAA,IAAAC,CAAA,QAAAG,IAAA,IAAAH,CAAA,QAAAK,UAAA,IAAAL,CAAA,QAAAO,SAAA;IAG/BM,EAAA,UAAAC,MAAA,KAAkB,eAAe,0BAAAA,MAA0B,KAAWf,OAAA,OAAAe,MAAA,CAAAC,oBAAA,CAAAC,EAAA;MACjC,OAAAC,GAAA,IAAAD,EAAK;MAAA,OAAKN,WAAA,CAAYO,GAAA;IAAA;MAAAd,IAAA;MAAAE,UAAA;MAAAE;IAAA,SAKvD;IAAAP,CAAA,MAAAD,OAAA;IAAAC,CAAA,MAAAG,IAAA;IAAAH,CAAA,MAAAK,UAAA;IAAAL,CAAA,MAAAO,SAAA;IAAAP,CAAA,MAAAa,EAAA;EAAA;IAAAA,EAAA,GAAAb,CAAA;EAAA;EAPN,MAAAkB,QAAA,GAAiBvB,MAAA,CACfkB,EAMI;EAAA,IAAAG,EAAA;EAAA,IAAAG,EAAA;EAAA,IAAAnB,CAAA,QAAAD,OAAA,IAAAC,CAAA,QAAAW,IAAA;IAGIK,EAAA,GAAAA,CAAA;MAAA,IACJjB,OAAA;QAAA;MAAA;MAGJ;QAAAqB,OAAA,EAAAC;MAAA,IAAqCH,QAAA;MACrCG,eAAA,CAAAC,UAAA,CAA0B;MAAA,IAEtBX,IAAA;
|
|
1
|
+
{"version":3,"file":"useIntersect.js","names":["c","_c","useEffect","useRef","useState","useIntersect","t0","disable","$","t1","undefined","root","t2","rootMargin","t3","threshold","t4","entry","updateEntry","node","setNode","t5","window","IntersectionObserver","t6","ent","observer","t7","current","currentObserver","disconnect","observe","t8"],"sources":["../../src/hooks/useIntersect.ts"],"sourcesContent":["'use client'\n\nimport type React from 'react'\n\nimport { useEffect, useRef, useState } from 'react'\n\ntype Intersect = [\n setNode: React.Dispatch<HTMLElement>,\n entry: IntersectionObserverEntry,\n node: HTMLElement,\n]\n\nexport const useIntersect = (\n { root = null, rootMargin = '0px', threshold = 0 } = {},\n disable?: boolean,\n): Intersect => {\n const [entry, updateEntry] = useState<IntersectionObserverEntry>()\n const [node, setNode] = useState(null)\n\n const observer = useRef(\n typeof window !== 'undefined' && 'IntersectionObserver' in window && !disable\n ? new window.IntersectionObserver(([ent]) => updateEntry(ent), {\n root,\n rootMargin,\n threshold,\n })\n : null,\n )\n\n useEffect(() => {\n if (disable) {\n return\n }\n const { current: currentObserver } = observer\n currentObserver.disconnect()\n\n if (node) {\n currentObserver.observe(node)\n }\n\n return () => currentObserver.disconnect()\n }, [node, disable])\n\n return [setNode, entry, node]\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAIA,SAASC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAQ5C,OAAO,MAAMC,YAAA,GAAeA,CAAAC,EAAA,EAAAC,OAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAAA,IAAAQ,EAAA;EAAA,IAAAD,CAAA,QAAAF,EAAA;IAC1BG,EAAA,GAAAH,EAAuD,KAAAI,SAAA,QAAvDJ,EAAuD;IAAAE,CAAA,MAAAF,EAAA;IAAAE,CAAA,MAAAC,EAAA;EAAA;IAAAA,EAAA,GAAAD,CAAA;EAAA;EAAvD;IAAAG,IAAA,EAAAC,EAAA;IAAAC,UAAA,EAAAC,EAAA;IAAAC,SAAA,EAAAC;EAAA,IAAAP,EAAuD;EAArD,MAAAE,IAAA,GAAAC,EAAW,KAAAF,SAAA,UAAXE,EAAW;EAAE,MAAAC,UAAA,GAAAC,EAAkB,KAAAJ,SAAA,GAAL,KAAK,GAAlBI,EAAkB;EAAE,MAAAC,SAAA,GAAAC,EAAa,KAAAN,SAAA,OAAbM,EAAa;EAGhD,OAAAC,KAAA,EAAAC,WAAA,IAA6Bd,QAAA;EAC7B,OAAAe,IAAA,EAAAC,OAAA,IAAwBhB,QAAA,KAAS;EAAA,IAAAiB,EAAA;EAAA,IAAAb,CAAA,QAAAD,OAAA,IAAAC,CAAA,QAAAG,IAAA,IAAAH,CAAA,QAAAK,UAAA,IAAAL,CAAA,QAAAO,SAAA;IAG/BM,EAAA,UAAAC,MAAA,KAAkB,eAAe,0BAAAA,MAA0B,KAAWf,OAAA,OAAAe,MAAA,CAAAC,oBAAA,CAAAC,EAAA;MACjC,OAAAC,GAAA,IAAAD,EAAK;MAAA,OAAKN,WAAA,CAAYO,GAAA;IAAA;MAAAd,IAAA;MAAAE,UAAA;MAAAE;IAAA,SAKvD;IAAAP,CAAA,MAAAD,OAAA;IAAAC,CAAA,MAAAG,IAAA;IAAAH,CAAA,MAAAK,UAAA;IAAAL,CAAA,MAAAO,SAAA;IAAAP,CAAA,MAAAa,EAAA;EAAA;IAAAA,EAAA,GAAAb,CAAA;EAAA;EAPN,MAAAkB,QAAA,GAAiBvB,MAAA,CACfkB,EAMI;EAAA,IAAAG,EAAA;EAAA,IAAAG,EAAA;EAAA,IAAAnB,CAAA,QAAAD,OAAA,IAAAC,CAAA,QAAAW,IAAA;IAGIK,EAAA,GAAAA,CAAA;MAAA,IACJjB,OAAA;QAAA;MAAA;MAGJ;QAAAqB,OAAA,EAAAC;MAAA,IAAqCH,QAAA;MACrCG,eAAA,CAAAC,UAAA,CAA0B;MAAA,IAEtBX,IAAA;QACFU,eAAA,CAAAE,OAAA,CAAwBZ,IAAA;MAAA;MAAA,aAGbU,eAAA,CAAAC,UAAA,CAA0B;IAAA;IACtCH,EAAA,IAACR,IAAA,EAAMZ,OAAA;IAAQC,CAAA,MAAAD,OAAA;IAAAC,CAAA,MAAAW,IAAA;IAAAX,CAAA,MAAAgB,EAAA;IAAAhB,CAAA,OAAAmB,EAAA;EAAA;IAAAH,EAAA,GAAAhB,CAAA;IAAAmB,EAAA,GAAAnB,CAAA;EAAA;EAZlBN,SAAA,CAAUsB,EAYV,EAAGG,EAAe;EAAA,IAAAK,EAAA;EAAA,IAAAxB,CAAA,SAAAS,KAAA,IAAAT,CAAA,SAAAW,IAAA;IAEXa,EAAA,IAACZ,OAAA,EAASH,KAAA,EAAOE,IAAA;IAAKX,CAAA,OAAAS,KAAA;IAAAT,CAAA,OAAAW,IAAA;IAAAX,CAAA,OAAAwB,EAAA;EAAA;IAAAA,EAAA,GAAAxB,CAAA;EAAA;EAAA,OAAtBwB,EAAsB;AAAA,CAC/B","ignoreList":[]}
|