@payloadcms/ui 3.0.0-beta.79 → 3.0.0-beta.80
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/Nav/context.d.ts +3 -0
- package/dist/elements/Nav/context.d.ts.map +1 -1
- package/dist/elements/Nav/context.js +16 -7
- package/dist/elements/Nav/context.js.map +1 -1
- package/dist/exports/client/index.js +7 -7
- package/dist/exports/client/index.js.map +3 -3
- package/dist/fields/Array/index.js +1 -1
- package/dist/fields/Array/index.js.map +1 -1
- package/dist/fields/Blocks/index.js +1 -1
- package/dist/fields/Blocks/index.js.map +1 -1
- package/dist/fields/Code/index.js +1 -1
- package/dist/fields/Code/index.js.map +1 -1
- package/dist/fields/Collapsible/index.js +1 -1
- package/dist/fields/Collapsible/index.js.map +1 -1
- package/dist/fields/DateTime/index.js +1 -1
- package/dist/fields/DateTime/index.js.map +1 -1
- package/dist/fields/Group/index.js +1 -1
- package/dist/fields/Group/index.js.map +1 -1
- package/dist/fields/JSON/index.d.ts.map +1 -1
- package/dist/fields/JSON/index.js +1 -1
- package/dist/fields/JSON/index.js.map +1 -1
- package/dist/fields/Point/index.js +1 -1
- package/dist/fields/Point/index.js.map +1 -1
- package/dist/fields/Relationship/index.js +1 -1
- package/dist/fields/Relationship/index.js.map +1 -1
- package/dist/fields/Row/index.d.ts.map +1 -1
- package/dist/fields/Row/index.js +1 -1
- package/dist/fields/Row/index.js.map +1 -1
- package/dist/fields/Tabs/index.js +1 -1
- package/dist/fields/Tabs/index.js.map +1 -1
- package/dist/fields/Text/index.js +1 -1
- package/dist/fields/Text/index.js.map +1 -1
- package/dist/fields/Textarea/index.js +1 -1
- package/dist/fields/Textarea/index.js.map +1 -1
- package/dist/fields/Upload/index.js +1 -1
- package/dist/fields/Upload/index.js.map +1 -1
- package/dist/providers/Root/index.d.ts +1 -0
- package/dist/providers/Root/index.d.ts.map +1 -1
- package/dist/providers/Root/index.js +2 -1
- package/dist/providers/Root/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Point/index.tsx"],"sourcesContent":["'use client'\nimport type { PointFieldProps, PointFieldValidation } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useCallback } from 'react'\n\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\n\nconst baseClass = 'point'\n\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { RenderComponent } from '../../providers/Config/RenderComponent.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { FieldError } from '../FieldError/index.js'\nimport { FieldLabel } from '../FieldLabel/index.js'\n\nexport const PointFieldComponent: React.FC<PointFieldProps> = (props) => {\n const {\n descriptionProps,\n errorProps,\n field,\n field: {\n name,\n _path: pathFromProps,\n admin: {\n className,\n description,\n placeholder,\n readOnly: readOnlyFromAdmin,\n step,\n style,\n width,\n },\n label,\n required,\n },\n labelProps,\n readOnly: readOnlyFromTopLevelProps,\n validate,\n } = props\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const { i18n, t } = useTranslation()\n\n const memoizedValidate: PointFieldValidation = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, required })\n }\n },\n [validate, required],\n )\n\n const { path: pathFromContext, readOnly: readOnlyFromContext } = useFieldProps()\n const readOnly = readOnlyFromProps || readOnlyFromContext\n\n const {\n path,\n setValue,\n showError,\n value = [null, null],\n } = useField<[number, number]>({\n path: pathFromContext ?? pathFromProps ?? name,\n validate: memoizedValidate,\n })\n\n const handleChange = useCallback(\n (e, index: 0 | 1) => {\n let val = parseFloat(e.target.value)\n if (Number.isNaN(val)) {\n val = e.target.value\n }\n const coordinates = [...value]\n coordinates[index] = val\n setValue(coordinates)\n },\n [setValue, value],\n )\n\n const getCoordinateFieldLabel = (type: 'latitude' | 'longitude') => {\n const suffix = type === 'longitude' ? t('fields:longitude') : t('fields:latitude')\n const fieldLabel = label ? getTranslation(label, i18n) : ''\n\n return {\n ...labelProps,\n label: `${fieldLabel}${fieldLabel ? ' - ' : ''}${suffix}`,\n }\n }\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n style={{\n ...style,\n width,\n }}\n >\n <ul className={`${baseClass}__wrap`}>\n <li>\n <FieldLabel\n Label={field?.admin?.components?.Label}\n {...getCoordinateFieldLabel('longitude')}\n />\n <div className=\"input-wrapper\">\n <RenderComponent mappedComponent={field?.admin?.components?.beforeInput} />\n {/* disable eslint rule because the label is dynamic */}\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n disabled={readOnly}\n id={`field-longitude-${path.replace(/\\./g, '__')}`}\n name={`${path}.longitude`}\n onChange={(e) => handleChange(e, 0)}\n placeholder={getTranslation(placeholder, i18n)}\n step={step}\n type=\"number\"\n value={value && typeof value[0] === 'number' ? value[0] : ''}\n />\n <RenderComponent mappedComponent={field?.admin?.components?.afterInput} />\n </div>\n </li>\n <li>\n <FieldLabel\n Label={field?.admin?.components?.Label}\n {...getCoordinateFieldLabel('latitude')}\n />\n <div className=\"input-wrapper\">\n <FieldError\n CustomError={field?.admin?.components?.Error}\n path={path}\n {...(errorProps || {})}\n />\n <RenderComponent mappedComponent={field?.admin?.components?.beforeInput} />\n {/* disable eslint rule because the label is dynamic */}\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n disabled={readOnly}\n id={`field-latitude-${path.replace(/\\./g, '__')}`}\n name={`${path}.latitude`}\n onChange={(e) => handleChange(e, 1)}\n placeholder={getTranslation(placeholder, i18n)}\n step={step}\n type=\"number\"\n value={value && typeof value[1] === 'number' ? value[1] : ''}\n />\n <RenderComponent mappedComponent={field?.admin?.components?.afterInput} />\n </div>\n </li>\n </ul>\n <FieldDescription\n Description={field?.admin?.components?.Description}\n description={description}\n {...(descriptionProps || {})}\n />\n </div>\n )\n}\n\nexport const PointField = withCondition(PointFieldComponent)\n"],"names":["getTranslation","React","useCallback","useField","withCondition","useTranslation","fieldBaseClass","baseClass","useFieldProps","RenderComponent","FieldDescription","FieldError","FieldLabel","PointFieldComponent","props","descriptionProps","errorProps","field","name","_path","pathFromProps","admin","className","description","placeholder","readOnly","readOnlyFromAdmin","step","style","width","label","required","labelProps","readOnlyFromTopLevelProps","validate","readOnlyFromProps","i18n","t","memoizedValidate","value","options","path","pathFromContext","readOnlyFromContext","setValue","showError","handleChange","e","index","val","parseFloat","target","Number","isNaN","coordinates","getCoordinateFieldLabel","type","suffix","fieldLabel","div","filter","Boolean","join","ul","li","Label","components","mappedComponent","beforeInput","input","disabled","id","replace","onChange","afterInput","CustomError","Error","Description","PointField"],"mappings":"AAAA;;AAGA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,SAASC,WAAW,QAAQ,QAAO;AAE1C,SAASC,QAAQ,QAAQ,gCAA+B;AACxD,SAASC,aAAa,QAAQ,qCAAoC;AAClE,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,cAAc,QAAQ,qBAAoB;AACnD,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,SAASC,aAAa,QAAQ,0CAAyC;AACvE,SAASC,eAAe,QAAQ,4CAA2C;AAC3E,SAASC,gBAAgB,QAAQ,+BAA8B;AAC/D,SAASC,UAAU,QAAQ,yBAAwB;AACnD,SAASC,UAAU,QAAQ,yBAAwB;AAEnD,OAAO,MAAMC,sBAAiD,CAACC;IAC7D,MAAM,EACJC,gBAAgB,EAChBC,UAAU,EACVC,KAAK,EACLA,OAAO,EACLC,IAAI,EACJC,OAAOC,aAAa,EACpBC,OAAO,EACLC,SAAS,EACTC,WAAW,EACXC,WAAW,EACXC,UAAUC,iBAAiB,EAC3BC,IAAI,EACJC,KAAK,EACLC,KAAK,EACN,
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Point/index.tsx"],"sourcesContent":["'use client'\nimport type { PointFieldProps, PointFieldValidation } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useCallback } from 'react'\n\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\n\nconst baseClass = 'point'\n\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { RenderComponent } from '../../providers/Config/RenderComponent.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { FieldError } from '../FieldError/index.js'\nimport { FieldLabel } from '../FieldLabel/index.js'\n\nexport const PointFieldComponent: React.FC<PointFieldProps> = (props) => {\n const {\n descriptionProps,\n errorProps,\n field,\n field: {\n name,\n _path: pathFromProps,\n admin: {\n className,\n description,\n placeholder,\n readOnly: readOnlyFromAdmin,\n step,\n style,\n width,\n } = {},\n label,\n required,\n },\n labelProps,\n readOnly: readOnlyFromTopLevelProps,\n validate,\n } = props\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const { i18n, t } = useTranslation()\n\n const memoizedValidate: PointFieldValidation = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, required })\n }\n },\n [validate, required],\n )\n\n const { path: pathFromContext, readOnly: readOnlyFromContext } = useFieldProps()\n const readOnly = readOnlyFromProps || readOnlyFromContext\n\n const {\n path,\n setValue,\n showError,\n value = [null, null],\n } = useField<[number, number]>({\n path: pathFromContext ?? pathFromProps ?? name,\n validate: memoizedValidate,\n })\n\n const handleChange = useCallback(\n (e, index: 0 | 1) => {\n let val = parseFloat(e.target.value)\n if (Number.isNaN(val)) {\n val = e.target.value\n }\n const coordinates = [...value]\n coordinates[index] = val\n setValue(coordinates)\n },\n [setValue, value],\n )\n\n const getCoordinateFieldLabel = (type: 'latitude' | 'longitude') => {\n const suffix = type === 'longitude' ? t('fields:longitude') : t('fields:latitude')\n const fieldLabel = label ? getTranslation(label, i18n) : ''\n\n return {\n ...labelProps,\n label: `${fieldLabel}${fieldLabel ? ' - ' : ''}${suffix}`,\n }\n }\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n style={{\n ...style,\n width,\n }}\n >\n <ul className={`${baseClass}__wrap`}>\n <li>\n <FieldLabel\n Label={field?.admin?.components?.Label}\n {...getCoordinateFieldLabel('longitude')}\n />\n <div className=\"input-wrapper\">\n <RenderComponent mappedComponent={field?.admin?.components?.beforeInput} />\n {/* disable eslint rule because the label is dynamic */}\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n disabled={readOnly}\n id={`field-longitude-${path.replace(/\\./g, '__')}`}\n name={`${path}.longitude`}\n onChange={(e) => handleChange(e, 0)}\n placeholder={getTranslation(placeholder, i18n)}\n step={step}\n type=\"number\"\n value={value && typeof value[0] === 'number' ? value[0] : ''}\n />\n <RenderComponent mappedComponent={field?.admin?.components?.afterInput} />\n </div>\n </li>\n <li>\n <FieldLabel\n Label={field?.admin?.components?.Label}\n {...getCoordinateFieldLabel('latitude')}\n />\n <div className=\"input-wrapper\">\n <FieldError\n CustomError={field?.admin?.components?.Error}\n path={path}\n {...(errorProps || {})}\n />\n <RenderComponent mappedComponent={field?.admin?.components?.beforeInput} />\n {/* disable eslint rule because the label is dynamic */}\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n disabled={readOnly}\n id={`field-latitude-${path.replace(/\\./g, '__')}`}\n name={`${path}.latitude`}\n onChange={(e) => handleChange(e, 1)}\n placeholder={getTranslation(placeholder, i18n)}\n step={step}\n type=\"number\"\n value={value && typeof value[1] === 'number' ? value[1] : ''}\n />\n <RenderComponent mappedComponent={field?.admin?.components?.afterInput} />\n </div>\n </li>\n </ul>\n <FieldDescription\n Description={field?.admin?.components?.Description}\n description={description}\n {...(descriptionProps || {})}\n />\n </div>\n )\n}\n\nexport const PointField = withCondition(PointFieldComponent)\n"],"names":["getTranslation","React","useCallback","useField","withCondition","useTranslation","fieldBaseClass","baseClass","useFieldProps","RenderComponent","FieldDescription","FieldError","FieldLabel","PointFieldComponent","props","descriptionProps","errorProps","field","name","_path","pathFromProps","admin","className","description","placeholder","readOnly","readOnlyFromAdmin","step","style","width","label","required","labelProps","readOnlyFromTopLevelProps","validate","readOnlyFromProps","i18n","t","memoizedValidate","value","options","path","pathFromContext","readOnlyFromContext","setValue","showError","handleChange","e","index","val","parseFloat","target","Number","isNaN","coordinates","getCoordinateFieldLabel","type","suffix","fieldLabel","div","filter","Boolean","join","ul","li","Label","components","mappedComponent","beforeInput","input","disabled","id","replace","onChange","afterInput","CustomError","Error","Description","PointField"],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ import { SingleValue } from './select-components/SingleValue/index.js';
|
|
|
26
26
|
const maxResultsPerRequest = 10;
|
|
27
27
|
const baseClass = 'relationship';
|
|
28
28
|
const RelationshipFieldComponent = (props)=>{
|
|
29
|
-
const { descriptionProps, errorProps, field, field: { name, _path: pathFromProps, admin: { allowCreate = true, className, description, isSortable = true, readOnly: readOnlyFromAdmin, sortOptions, style, width }, hasMany, label, relationTo, required }, labelProps, readOnly: readOnlyFromTopLevelProps, validate } = props;
|
|
29
|
+
const { descriptionProps, errorProps, field, field: { name, _path: pathFromProps, admin: { allowCreate = true, className, description, isSortable = true, readOnly: readOnlyFromAdmin, sortOptions, style, width } = {}, hasMany, label, relationTo, required }, labelProps, readOnly: readOnlyFromTopLevelProps, validate } = props;
|
|
30
30
|
const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin;
|
|
31
31
|
const { config } = useConfig();
|
|
32
32
|
const { collections, routes: { api }, serverURL } = config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { PaginatedDocs, RelationshipFieldProps, Where } from 'payload'\n\nimport { wordBoundariesRegex } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\n\nimport type { DocumentDrawerProps } from '../../elements/DocumentDrawer/types.js'\nimport type { GetResults, Option, Value } from './types.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDebouncedCallback } from '../../hooks/useDebouncedCallback.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { FieldError } from '../FieldError/index.js'\nimport { FieldLabel } from '../FieldLabel/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { AddNewRelation } from './AddNew/index.js'\nimport { createRelationMap } from './createRelationMap.js'\nimport { findOptionsByValue } from './findOptionsByValue.js'\nimport './index.scss'\nimport { optionsReducer } from './optionsReducer.js'\nimport { MultiValueLabel } from './select-components/MultiValueLabel/index.js'\nimport { SingleValue } from './select-components/SingleValue/index.js'\n\nconst maxResultsPerRequest = 10\n\nconst baseClass = 'relationship'\n\nconst RelationshipFieldComponent: React.FC<RelationshipFieldProps> = (props) => {\n const {\n descriptionProps,\n errorProps,\n field,\n field: {\n name,\n _path: pathFromProps,\n admin: {\n allowCreate = true,\n className,\n description,\n isSortable = true,\n readOnly: readOnlyFromAdmin,\n sortOptions,\n style,\n width,\n },\n hasMany,\n label,\n relationTo,\n required,\n },\n labelProps,\n readOnly: readOnlyFromTopLevelProps,\n validate,\n } = props\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const { config } = useConfig()\n\n const {\n collections,\n routes: { api },\n serverURL,\n } = config\n\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n const { code: locale } = useLocale()\n const hasMultipleRelations = Array.isArray(relationTo)\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n const [lastFullyLoadedRelation, setLastFullyLoadedRelation] = useState(-1)\n const [lastLoadedPage, setLastLoadedPage] = useState<Record<string, number>>({})\n const [errorLoading, setErrorLoading] = useState('')\n const [search, setSearch] = useState('')\n const [isLoading, setIsLoading] = useState(false)\n const [enableWordBoundarySearch, setEnableWordBoundarySearch] = useState(false)\n const menuIsOpen = useRef(false)\n const hasLoadedFirstPageRef = useRef(false)\n\n const memoizedValidate = useCallback(\n (value, validationOptions) => {\n if (typeof validate === 'function') {\n return validate(value, { ...validationOptions, required })\n }\n },\n [validate, required],\n )\n const { path: pathFromContext, readOnly: readOnlyFromContext } = useFieldProps()\n\n const {\n filterOptions,\n formInitializing,\n formProcessing,\n initialValue,\n path,\n setValue,\n showError,\n value,\n } = useField<Value | Value[]>({\n path: pathFromContext ?? pathFromProps ?? name,\n validate: memoizedValidate,\n })\n\n const readOnly = readOnlyFromProps || readOnlyFromContext || formInitializing\n\n const valueRef = useRef(value)\n valueRef.current = value\n\n const [drawerIsOpen, setDrawerIsOpen] = useState(false)\n\n const getResults: GetResults = useCallback(\n async ({\n lastFullyLoadedRelation: lastFullyLoadedRelationArg,\n lastLoadedPage: lastLoadedPageArg,\n onSuccess,\n search: searchArg,\n sort,\n value: valueArg,\n }) => {\n if (!permissions) {\n return\n }\n const lastFullyLoadedRelationToUse =\n typeof lastFullyLoadedRelationArg !== 'undefined' ? lastFullyLoadedRelationArg : -1\n\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n const relationsToFetch =\n lastFullyLoadedRelationToUse === -1\n ? relations\n : relations.slice(lastFullyLoadedRelationToUse + 1)\n\n let resultsFetched = 0\n const relationMap = createRelationMap({\n hasMany,\n relationTo,\n value: valueArg,\n })\n\n if (!errorLoading) {\n await relationsToFetch.reduce(async (priorRelation, relation) => {\n const relationFilterOption = filterOptions?.[relation]\n\n let lastLoadedPageToUse\n if (search !== searchArg) {\n lastLoadedPageToUse = 1\n } else {\n lastLoadedPageToUse = lastLoadedPageArg[relation] + 1\n }\n await priorRelation\n\n if (relationFilterOption === false) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n return Promise.resolve()\n }\n\n if (resultsFetched < 10) {\n const collection = collections.find((coll) => coll.slug === relation)\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n let fieldToSort = collection?.defaultSort || 'id'\n if (typeof sortOptions === 'string') {\n fieldToSort = sortOptions\n } else if (sortOptions?.[relation]) {\n fieldToSort = sortOptions[relation]\n }\n\n const query: {\n [key: string]: unknown\n where: Where\n } = {\n depth: 0,\n draft: true,\n limit: maxResultsPerRequest,\n locale,\n page: lastLoadedPageToUse,\n sort: fieldToSort,\n where: {\n and: [\n {\n id: {\n not_in: relationMap[relation],\n },\n },\n ],\n },\n }\n\n if (searchArg) {\n query.where.and.push({\n [fieldToSearch]: {\n like: searchArg,\n },\n })\n }\n\n if (relationFilterOption && typeof relationFilterOption !== 'boolean') {\n query.where.and.push(relationFilterOption)\n }\n\n const response = await fetch(`${serverURL}${api}/${relation}`, {\n body: qs.stringify(query),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n method: 'POST',\n })\n\n if (response.ok) {\n const data: PaginatedDocs<unknown> = await response.json()\n setLastLoadedPage((prevState) => {\n return {\n ...prevState,\n [relation]: lastLoadedPageToUse,\n }\n })\n\n if (!data.nextPage) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n }\n\n if (data.docs.length > 0) {\n resultsFetched += data.docs.length\n\n dispatchOptions({\n type: 'ADD',\n collection,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n docs: data.docs,\n i18n,\n sort,\n })\n }\n } else if (response.status === 403) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n dispatchOptions({\n type: 'ADD',\n collection,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n docs: [],\n i18n,\n ids: relationMap[relation],\n sort,\n })\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n }\n }, Promise.resolve())\n\n if (typeof onSuccess === 'function') onSuccess()\n }\n },\n [\n permissions,\n relationTo,\n hasMany,\n errorLoading,\n search,\n collections,\n locale,\n filterOptions,\n serverURL,\n sortOptions,\n api,\n i18n,\n config,\n t,\n ],\n )\n\n const updateSearch = useDebouncedCallback((searchArg: string, valueArg: Value | Value[]) => {\n void getResults({ lastLoadedPage: {}, search: searchArg, sort: true, value: valueArg })\n setSearch(searchArg)\n }, 300)\n\n const handleInputChange = useCallback(\n (searchArg: string, valueArg: Value | Value[]) => {\n if (search !== searchArg) {\n setLastLoadedPage({})\n updateSearch(searchArg, valueArg, searchArg !== '')\n }\n },\n [search, updateSearch],\n )\n\n // ///////////////////////////////////\n // Ensure we have an option for each value\n // ///////////////////////////////////\n\n useEffect(() => {\n const relationMap = createRelationMap({\n hasMany,\n relationTo,\n value,\n })\n\n void Object.entries(relationMap).reduce(async (priorRelation, [relation, ids]) => {\n await priorRelation\n\n const idsToLoad = ids.filter((id) => {\n return !options.find((optionGroup) =>\n optionGroup?.options?.find(\n (option) => option.value === id && option.relationTo === relation,\n ),\n )\n })\n\n if (idsToLoad.length > 0) {\n const query = {\n depth: 0,\n draft: true,\n limit: idsToLoad.length,\n locale,\n where: {\n id: {\n in: idsToLoad,\n },\n },\n }\n\n if (!errorLoading) {\n const response = await fetch(`${serverURL}${api}/${relation}`, {\n body: qs.stringify(query),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n method: 'POST',\n })\n\n const collection = collections.find((coll) => coll.slug === relation)\n let docs = []\n\n if (response.ok) {\n const data = await response.json()\n docs = data.docs\n }\n\n dispatchOptions({\n type: 'ADD',\n collection,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n docs,\n i18n,\n ids: idsToLoad,\n sort: true,\n })\n }\n }\n }, Promise.resolve())\n }, [\n options,\n value,\n hasMany,\n errorLoading,\n collections,\n hasMultipleRelations,\n serverURL,\n api,\n i18n,\n relationTo,\n locale,\n config,\n ])\n\n // Determine if we should switch to word boundary search\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n const isIdOnly = relations.reduce((idOnly, relation) => {\n const collection = collections.find((coll) => coll.slug === relation)\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n return fieldToSearch === 'id' && idOnly\n }, true)\n setEnableWordBoundarySearch(!isIdOnly)\n }, [relationTo, collections])\n\n // When (`relationTo` || `filterOptions` || `locale`) changes, reset component\n // Note - effect should not run on first run\n useEffect(() => {\n // If the menu is open while filterOptions changes\n // due to latency of getFormState and fast clicking into this field,\n // re-fetch options\n\n if (hasLoadedFirstPageRef.current && menuIsOpen.current) {\n setIsLoading(true)\n void getResults({\n lastLoadedPage: {},\n onSuccess: () => {\n hasLoadedFirstPageRef.current = true\n setIsLoading(false)\n },\n value: valueRef.current,\n })\n }\n\n // If the menu is not open, still reset the field state\n // because we need to get new options next time the menu\n // opens by the user\n\n dispatchOptions({ type: 'CLEAR' })\n setLastFullyLoadedRelation(-1)\n setLastLoadedPage({})\n hasLoadedFirstPageRef.current = false\n }, [\n relationTo,\n filterOptions,\n locale,\n menuIsOpen,\n getResults,\n valueRef,\n hasLoadedFirstPageRef,\n path,\n ])\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n dispatchOptions({\n type: 'UPDATE',\n collection: args.collectionConfig,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n doc: args.doc,\n i18n,\n })\n },\n [i18n, config],\n )\n\n const filterOption = useCallback((item: Option, searchFilter: string) => {\n if (!searchFilter) {\n return true\n }\n const r = wordBoundariesRegex(searchFilter || '')\n // breaking the labels to search into smaller parts increases performance\n const breakApartThreshold = 250\n let string = item.label\n // strings less than breakApartThreshold length won't be chunked\n while (string.length > breakApartThreshold) {\n // slicing by the next space after the length of the search input prevents slicing the string up by partial words\n const indexOfSpace = string.indexOf(' ', searchFilter.length)\n if (r.test(string.slice(0, indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1))) {\n return true\n }\n string = string.slice(indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1)\n }\n return r.test(string.slice(-breakApartThreshold))\n }, [])\n\n const valueToRender = findOptionsByValue({ options, value })\n\n if (!Array.isArray(valueToRender) && valueToRender?.value === 'null') valueToRender.value = null\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n errorLoading && 'error-loading',\n readOnly && `${baseClass}--read-only`,\n !readOnly && allowCreate && `${baseClass}--allow-create`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n style={{\n ...style,\n width,\n }}\n >\n <FieldLabel\n Label={field?.admin?.components?.Label}\n label={label}\n required={required}\n {...(labelProps || {})}\n />\n <div className={`${fieldBaseClass}__wrap`}>\n <FieldError\n CustomError={field?.admin?.components?.Error}\n path={path}\n {...(errorProps || {})}\n />\n {!errorLoading && (\n <div className={`${baseClass}__wrap`}>\n <ReactSelect\n backspaceRemovesValue={!drawerIsOpen}\n components={{\n MultiValueLabel,\n SingleValue,\n }}\n customProps={{\n disableKeyDown: drawerIsOpen,\n disableMouseDown: drawerIsOpen,\n onSave,\n setDrawerIsOpen,\n }}\n disabled={readOnly || formProcessing || drawerIsOpen}\n filterOption={enableWordBoundarySearch ? filterOption : undefined}\n getOptionValue={(option) => {\n if (!option) return undefined\n return hasMany && Array.isArray(relationTo)\n ? `${option.relationTo}_${option.value}`\n : option.value\n }}\n isLoading={isLoading}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={\n !readOnly\n ? (selected) => {\n if (selected === null) {\n setValue(hasMany ? [] : null)\n } else if (hasMany && Array.isArray(selected)) {\n setValue(\n selected\n ? selected.map((option) => {\n if (hasMultipleRelations) {\n return {\n relationTo: option.relationTo,\n value: option.value,\n }\n }\n\n return option.value\n })\n : null,\n )\n } else if (hasMultipleRelations && !Array.isArray(selected)) {\n setValue({\n relationTo: selected.relationTo,\n value: selected.value,\n })\n } else if (!Array.isArray(selected)) {\n setValue(selected.value)\n }\n }\n : undefined\n }\n onInputChange={(newSearch) => handleInputChange(newSearch, value)}\n onMenuClose={() => {\n menuIsOpen.current = false\n }}\n onMenuOpen={() => {\n menuIsOpen.current = true\n\n if (!hasLoadedFirstPageRef.current) {\n setIsLoading(true)\n void getResults({\n lastLoadedPage: {},\n onSuccess: () => {\n hasLoadedFirstPageRef.current = true\n setIsLoading(false)\n },\n value: initialValue,\n })\n }\n }}\n onMenuScrollToBottom={() => {\n void getResults({\n lastFullyLoadedRelation,\n lastLoadedPage,\n search,\n sort: false,\n value: initialValue,\n })\n }}\n options={options}\n showError={showError}\n value={valueToRender ?? null}\n />\n {!readOnly && allowCreate && (\n <AddNewRelation\n {...{\n dispatchOptions,\n hasMany,\n options,\n path,\n relationTo,\n setValue,\n value,\n }}\n />\n )}\n </div>\n )}\n {errorLoading && <div className={`${baseClass}__error-loading`}>{errorLoading}</div>}\n <FieldDescription\n Description={field?.admin?.components?.Description}\n description={description}\n {...(descriptionProps || {})}\n />\n </div>\n </div>\n )\n}\n\nexport const RelationshipField = withCondition(RelationshipFieldComponent)\n"],"names":["wordBoundariesRegex","qs","React","useCallback","useEffect","useReducer","useRef","useState","ReactSelect","useFieldProps","useField","withCondition","useDebouncedCallback","useAuth","useConfig","useLocale","useTranslation","FieldDescription","FieldError","FieldLabel","fieldBaseClass","AddNewRelation","createRelationMap","findOptionsByValue","optionsReducer","MultiValueLabel","SingleValue","maxResultsPerRequest","baseClass","RelationshipFieldComponent","props","descriptionProps","errorProps","field","name","_path","pathFromProps","admin","allowCreate","className","description","isSortable","readOnly","readOnlyFromAdmin","sortOptions","style","width","hasMany","label","relationTo","required","labelProps","readOnlyFromTopLevelProps","validate","readOnlyFromProps","config","collections","routes","api","serverURL","i18n","t","permissions","code","locale","hasMultipleRelations","Array","isArray","options","dispatchOptions","lastFullyLoadedRelation","setLastFullyLoadedRelation","lastLoadedPage","setLastLoadedPage","errorLoading","setErrorLoading","search","setSearch","isLoading","setIsLoading","enableWordBoundarySearch","setEnableWordBoundarySearch","menuIsOpen","hasLoadedFirstPageRef","memoizedValidate","value","validationOptions","path","pathFromContext","readOnlyFromContext","filterOptions","formInitializing","formProcessing","initialValue","setValue","showError","valueRef","current","drawerIsOpen","setDrawerIsOpen","getResults","lastFullyLoadedRelationArg","lastLoadedPageArg","onSuccess","searchArg","sort","valueArg","lastFullyLoadedRelationToUse","relations","relationsToFetch","slice","resultsFetched","relationMap","reduce","priorRelation","relation","relationFilterOption","lastLoadedPageToUse","indexOf","Promise","resolve","collection","find","coll","slug","fieldToSearch","useAsTitle","fieldToSort","defaultSort","query","depth","draft","limit","page","where","and","id","not_in","push","like","response","fetch","body","stringify","credentials","headers","language","method","ok","data","json","prevState","nextPage","docs","length","type","status","ids","updateSearch","handleInputChange","Object","entries","idsToLoad","filter","optionGroup","option","in","isIdOnly","idOnly","onSave","args","collectionConfig","doc","filterOption","item","searchFilter","r","breakApartThreshold","string","indexOfSpace","test","valueToRender","div","Boolean","join","replace","Label","components","CustomError","Error","backspaceRemovesValue","customProps","disableKeyDown","disableMouseDown","disabled","undefined","getOptionValue","isMulti","onChange","selected","map","onInputChange","newSearch","onMenuClose","onMenuOpen","onMenuScrollToBottom","Description","RelationshipField"],"mappings":"AAAA;;AAGA,SAASA,mBAAmB,QAAQ,iBAAgB;AACpD,YAAYC,QAAQ,SAAQ;AAC5B,OAAOC,SAASC,WAAW,EAAEC,SAAS,EAAEC,UAAU,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAKnF,SAASC,WAAW,QAAQ,sCAAqC;AACjE,SAASC,aAAa,QAAQ,0CAAyC;AACvE,SAASC,QAAQ,QAAQ,gCAA+B;AACxD,SAASC,aAAa,QAAQ,qCAAoC;AAClE,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,OAAO,QAAQ,gCAA+B;AACvD,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,gBAAgB,QAAQ,+BAA8B;AAC/D,SAASC,UAAU,QAAQ,yBAAwB;AACnD,SAASC,UAAU,QAAQ,yBAAwB;AACnD,SAASC,cAAc,QAAQ,qBAAoB;AACnD,SAASC,cAAc,QAAQ,oBAAmB;AAClD,SAASC,iBAAiB,QAAQ,yBAAwB;AAC1D,SAASC,kBAAkB,QAAQ,0BAAyB;AAC5D,OAAO,eAAc;AACrB,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,eAAe,QAAQ,+CAA8C;AAC9E,SAASC,WAAW,QAAQ,2CAA0C;AAEtE,MAAMC,uBAAuB;AAE7B,MAAMC,YAAY;AAElB,MAAMC,6BAA+D,CAACC;IACpE,MAAM,EACJC,gBAAgB,EAChBC,UAAU,EACVC,KAAK,EACLA,OAAO,EACLC,IAAI,EACJC,OAAOC,aAAa,EACpBC,OAAO,EACLC,cAAc,IAAI,EAClBC,SAAS,EACTC,WAAW,EACXC,aAAa,IAAI,EACjBC,UAAUC,iBAAiB,EAC3BC,WAAW,EACXC,KAAK,EACLC,KAAK,EACN,EACDC,OAAO,EACPC,KAAK,EACLC,UAAU,EACVC,QAAQ,EACT,EACDC,UAAU,EACVT,UAAUU,yBAAyB,EACnCC,QAAQ,EACT,GAAGvB;IACJ,MAAMwB,oBAAoBF,6BAA6BT;IAEvD,MAAM,EAAEY,MAAM,EAAE,GAAGzC;IAEnB,MAAM,EACJ0C,WAAW,EACXC,QAAQ,EAAEC,GAAG,EAAE,EACfC,SAAS,EACV,GAAGJ;IAEJ,MAAM,EAAEK,IAAI,EAAEC,CAAC,EAAE,GAAG7C;IACpB,MAAM,EAAE8C,WAAW,EAAE,GAAGjD;IACxB,MAAM,EAAEkD,MAAMC,MAAM,EAAE,GAAGjD;IACzB,MAAMkD,uBAAuBC,MAAMC,OAAO,CAAClB;IAC3C,MAAM,CAACmB,SAASC,gBAAgB,GAAGhE,WAAWmB,gBAAgB,EAAE;IAChE,MAAM,CAAC8C,yBAAyBC,2BAA2B,GAAGhE,SAAS,CAAC;IACxE,MAAM,CAACiE,gBAAgBC,kBAAkB,GAAGlE,SAAiC,CAAC;IAC9E,MAAM,CAACmE,cAAcC,gBAAgB,GAAGpE,SAAS;IACjD,MAAM,CAACqE,QAAQC,UAAU,GAAGtE,SAAS;IACrC,MAAM,CAACuE,WAAWC,aAAa,GAAGxE,SAAS;IAC3C,MAAM,CAACyE,0BAA0BC,4BAA4B,GAAG1E,SAAS;IACzE,MAAM2E,aAAa5E,OAAO;IAC1B,MAAM6E,wBAAwB7E,OAAO;IAErC,MAAM8E,mBAAmBjF,YACvB,CAACkF,OAAOC;QACN,IAAI,OAAOjC,aAAa,YAAY;YAClC,OAAOA,SAASgC,OAAO;gBAAE,GAAGC,iBAAiB;gBAAEpC;YAAS;QAC1D;IACF,GACA;QAACG;QAAUH;KAAS;IAEtB,MAAM,EAAEqC,MAAMC,eAAe,EAAE9C,UAAU+C,mBAAmB,EAAE,GAAGhF;IAEjE,MAAM,EACJiF,aAAa,EACbC,gBAAgB,EAChBC,cAAc,EACdC,YAAY,EACZN,IAAI,EACJO,QAAQ,EACRC,SAAS,EACTV,KAAK,EACN,GAAG3E,SAA0B;QAC5B6E,MAAMC,mBAAmBpD,iBAAiBF;QAC1CmB,UAAU+B;IACZ;IAEA,MAAM1C,WAAWY,qBAAqBmC,uBAAuBE;IAE7D,MAAMK,WAAW1F,OAAO+E;IACxBW,SAASC,OAAO,GAAGZ;IAEnB,MAAM,CAACa,cAAcC,gBAAgB,GAAG5F,SAAS;IAEjD,MAAM6F,aAAyBjG,YAC7B,OAAO,EACLmE,yBAAyB+B,0BAA0B,EACnD7B,gBAAgB8B,iBAAiB,EACjCC,SAAS,EACT3B,QAAQ4B,SAAS,EACjBC,IAAI,EACJpB,OAAOqB,QAAQ,EAChB;QACC,IAAI,CAAC5C,aAAa;YAChB;QACF;QACA,MAAM6C,+BACJ,OAAON,+BAA+B,cAAcA,6BAA6B,CAAC;QAEpF,MAAMO,YAAY1C,MAAMC,OAAO,CAAClB,cAAcA,aAAa;YAACA;SAAW;QACvE,MAAM4D,mBACJF,iCAAiC,CAAC,IAC9BC,YACAA,UAAUE,KAAK,CAACH,+BAA+B;QAErD,IAAII,iBAAiB;QACrB,MAAMC,cAAc1F,kBAAkB;YACpCyB;YACAE;YACAoC,OAAOqB;QACT;QAEA,IAAI,CAAChC,cAAc;YACjB,MAAMmC,iBAAiBI,MAAM,CAAC,OAAOC,eAAeC;gBAClD,MAAMC,uBAAuB1B,eAAe,CAACyB,SAAS;gBAEtD,IAAIE;gBACJ,IAAIzC,WAAW4B,WAAW;oBACxBa,sBAAsB;gBACxB,OAAO;oBACLA,sBAAsBf,iBAAiB,CAACa,SAAS,GAAG;gBACtD;gBACA,MAAMD;gBAEN,IAAIE,yBAAyB,OAAO;oBAClC7C,2BAA2BqC,UAAUU,OAAO,CAACH;oBAC7C,OAAOI,QAAQC,OAAO;gBACxB;gBAEA,IAAIT,iBAAiB,IAAI;oBACvB,MAAMU,aAAajE,YAAYkE,IAAI,CAAC,CAACC,OAASA,KAAKC,IAAI,KAAKT;oBAC5D,MAAMU,gBAAgBJ,YAAYpF,OAAOyF,cAAc;oBACvD,IAAIC,cAAcN,YAAYO,eAAe;oBAC7C,IAAI,OAAOpF,gBAAgB,UAAU;wBACnCmF,cAAcnF;oBAChB,OAAO,IAAIA,aAAa,CAACuE,SAAS,EAAE;wBAClCY,cAAcnF,WAAW,CAACuE,SAAS;oBACrC;oBAEA,MAAMc,QAGF;wBACFC,OAAO;wBACPC,OAAO;wBACPC,OAAOzG;wBACPqC;wBACAqE,MAAMhB;wBACNZ,MAAMsB;wBACNO,OAAO;4BACLC,KAAK;gCACH;oCACEC,IAAI;wCACFC,QAAQzB,WAAW,CAACG,SAAS;oCAC/B;gCACF;6BACD;wBACH;oBACF;oBAEA,IAAIX,WAAW;wBACbyB,MAAMK,KAAK,CAACC,GAAG,CAACG,IAAI,CAAC;4BACnB,CAACb,cAAc,EAAE;gCACfc,MAAMnC;4BACR;wBACF;oBACF;oBAEA,IAAIY,wBAAwB,OAAOA,yBAAyB,WAAW;wBACrEa,MAAMK,KAAK,CAACC,GAAG,CAACG,IAAI,CAACtB;oBACvB;oBAEA,MAAMwB,WAAW,MAAMC,MAAM,CAAC,EAAElF,UAAU,EAAED,IAAI,CAAC,EAAEyD,SAAS,CAAC,EAAE;wBAC7D2B,MAAM7I,GAAG8I,SAAS,CAACd;wBACnBe,aAAa;wBACbC,SAAS;4BACP,mBAAmBrF,KAAKsF,QAAQ;4BAChC,gBAAgB;4BAChB,0BAA0B;wBAC5B;wBACAC,QAAQ;oBACV;oBAEA,IAAIP,SAASQ,EAAE,EAAE;wBACf,MAAMC,OAA+B,MAAMT,SAASU,IAAI;wBACxD7E,kBAAkB,CAAC8E;4BACjB,OAAO;gCACL,GAAGA,SAAS;gCACZ,CAACpC,SAAS,EAAEE;4BACd;wBACF;wBAEA,IAAI,CAACgC,KAAKG,QAAQ,EAAE;4BAClBjF,2BAA2BqC,UAAUU,OAAO,CAACH;wBAC/C;wBAEA,IAAIkC,KAAKI,IAAI,CAACC,MAAM,GAAG,GAAG;4BACxB3C,kBAAkBsC,KAAKI,IAAI,CAACC,MAAM;4BAElCrF,gBAAgB;gCACdsF,MAAM;gCACNlC;gCACA,iBAAiB;gCACjB,6BAA6B;gCAC7BlE;gCACAkG,MAAMJ,KAAKI,IAAI;gCACf7F;gCACA6C;4BACF;wBACF;oBACF,OAAO,IAAImC,SAASgB,MAAM,KAAK,KAAK;wBAClCrF,2BAA2BqC,UAAUU,OAAO,CAACH;wBAC7C9C,gBAAgB;4BACdsF,MAAM;4BACNlC;4BACA,iBAAiB;4BACjB,6BAA6B;4BAC7BlE;4BACAkG,MAAM,EAAE;4BACR7F;4BACAiG,KAAK7C,WAAW,CAACG,SAAS;4BAC1BV;wBACF;oBACF,OAAO;wBACL9B,gBAAgBd,EAAE;oBACpB;gBACF;YACF,GAAG0D,QAAQC,OAAO;YAElB,IAAI,OAAOjB,cAAc,YAAYA;QACvC;IACF,GACA;QACEzC;QACAb;QACAF;QACA2B;QACAE;QACApB;QACAQ;QACA0B;QACA/B;QACAf;QACAc;QACAE;QACAL;QACAM;KACD;IAGH,MAAMiG,eAAelJ,qBAAqB,CAAC4F,WAAmBE;QAC5D,KAAKN,WAAW;YAAE5B,gBAAgB,CAAC;YAAGI,QAAQ4B;YAAWC,MAAM;YAAMpB,OAAOqB;QAAS;QACrF7B,UAAU2B;IACZ,GAAG;IAEH,MAAMuD,oBAAoB5J,YACxB,CAACqG,WAAmBE;QAClB,IAAI9B,WAAW4B,WAAW;YACxB/B,kBAAkB,CAAC;YACnBqF,aAAatD,WAAWE,UAAUF,cAAc;QAClD;IACF,GACA;QAAC5B;QAAQkF;KAAa;IAGxB,sCAAsC;IACtC,0CAA0C;IAC1C,sCAAsC;IAEtC1J,UAAU;QACR,MAAM4G,cAAc1F,kBAAkB;YACpCyB;YACAE;YACAoC;QACF;QAEA,KAAK2E,OAAOC,OAAO,CAACjD,aAAaC,MAAM,CAAC,OAAOC,eAAe,CAACC,UAAU0C,IAAI;YAC3E,MAAM3C;YAEN,MAAMgD,YAAYL,IAAIM,MAAM,CAAC,CAAC3B;gBAC5B,OAAO,CAACpE,QAAQsD,IAAI,CAAC,CAAC0C,cACpBA,aAAahG,SAASsD,KACpB,CAAC2C,SAAWA,OAAOhF,KAAK,KAAKmD,MAAM6B,OAAOpH,UAAU,KAAKkE;YAG/D;YAEA,IAAI+C,UAAUR,MAAM,GAAG,GAAG;gBACxB,MAAMzB,QAAQ;oBACZC,OAAO;oBACPC,OAAO;oBACPC,OAAO8B,UAAUR,MAAM;oBACvB1F;oBACAsE,OAAO;wBACLE,IAAI;4BACF8B,IAAIJ;wBACN;oBACF;gBACF;gBAEA,IAAI,CAACxF,cAAc;oBACjB,MAAMkE,WAAW,MAAMC,MAAM,CAAC,EAAElF,UAAU,EAAED,IAAI,CAAC,EAAEyD,SAAS,CAAC,EAAE;wBAC7D2B,MAAM7I,GAAG8I,SAAS,CAACd;wBACnBe,aAAa;wBACbC,SAAS;4BACP,mBAAmBrF,KAAKsF,QAAQ;4BAChC,gBAAgB;4BAChB,0BAA0B;wBAC5B;wBACAC,QAAQ;oBACV;oBAEA,MAAM1B,aAAajE,YAAYkE,IAAI,CAAC,CAACC,OAASA,KAAKC,IAAI,KAAKT;oBAC5D,IAAIsC,OAAO,EAAE;oBAEb,IAAIb,SAASQ,EAAE,EAAE;wBACf,MAAMC,OAAO,MAAMT,SAASU,IAAI;wBAChCG,OAAOJ,KAAKI,IAAI;oBAClB;oBAEApF,gBAAgB;wBACdsF,MAAM;wBACNlC;wBACA,iBAAiB;wBACjB,6BAA6B;wBAC7BlE;wBACAkG;wBACA7F;wBACAiG,KAAKK;wBACLzD,MAAM;oBACR;gBACF;YACF;QACF,GAAGc,QAAQC,OAAO;IACpB,GAAG;QACDpD;QACAiB;QACAtC;QACA2B;QACAlB;QACAS;QACAN;QACAD;QACAE;QACAX;QACAe;QACAT;KACD;IAED,wDAAwD;IACxDnD,UAAU;QACR,MAAMwG,YAAY1C,MAAMC,OAAO,CAAClB,cAAcA,aAAa;YAACA;SAAW;QACvE,MAAMsH,WAAW3D,UAAUK,MAAM,CAAC,CAACuD,QAAQrD;YACzC,MAAMM,aAAajE,YAAYkE,IAAI,CAAC,CAACC,OAASA,KAAKC,IAAI,KAAKT;YAC5D,MAAMU,gBAAgBJ,YAAYpF,OAAOyF,cAAc;YACvD,OAAOD,kBAAkB,QAAQ2C;QACnC,GAAG;QACHvF,4BAA4B,CAACsF;IAC/B,GAAG;QAACtH;QAAYO;KAAY;IAE5B,8EAA8E;IAC9E,4CAA4C;IAC5CpD,UAAU;QACR,kDAAkD;QAClD,oEAAoE;QACpE,mBAAmB;QAEnB,IAAI+E,sBAAsBc,OAAO,IAAIf,WAAWe,OAAO,EAAE;YACvDlB,aAAa;YACb,KAAKqB,WAAW;gBACd5B,gBAAgB,CAAC;gBACjB+B,WAAW;oBACTpB,sBAAsBc,OAAO,GAAG;oBAChClB,aAAa;gBACf;gBACAM,OAAOW,SAASC,OAAO;YACzB;QACF;QAEA,uDAAuD;QACvD,wDAAwD;QACxD,oBAAoB;QAEpB5B,gBAAgB;YAAEsF,MAAM;QAAQ;QAChCpF,2BAA2B,CAAC;QAC5BE,kBAAkB,CAAC;QACnBU,sBAAsBc,OAAO,GAAG;IAClC,GAAG;QACDhD;QACAyC;QACA1B;QACAkB;QACAkB;QACAJ;QACAb;QACAI;KACD;IAED,MAAMkF,SAAStK,YACb,CAACuK;QACCrG,gBAAgB;YACdsF,MAAM;YACNlC,YAAYiD,KAAKC,gBAAgB;YACjC,iBAAiB;YACjB,6BAA6B;YAC7BpH;YACAqH,KAAKF,KAAKE,GAAG;YACbhH;QACF;IACF,GACA;QAACA;QAAML;KAAO;IAGhB,MAAMsH,eAAe1K,YAAY,CAAC2K,MAAcC;QAC9C,IAAI,CAACA,cAAc;YACjB,OAAO;QACT;QACA,MAAMC,IAAIhL,oBAAoB+K,gBAAgB;QAC9C,yEAAyE;QACzE,MAAME,sBAAsB;QAC5B,IAAIC,SAASJ,KAAK9H,KAAK;QACvB,gEAAgE;QAChE,MAAOkI,OAAOxB,MAAM,GAAGuB,oBAAqB;YAC1C,iHAAiH;YACjH,MAAME,eAAeD,OAAO5D,OAAO,CAAC,KAAKyD,aAAarB,MAAM;YAC5D,IAAIsB,EAAEI,IAAI,CAACF,OAAOpE,KAAK,CAAC,GAAGqE,iBAAiB,CAAC,IAAIJ,aAAarB,MAAM,GAAGyB,eAAe,KAAK;gBACzF,OAAO;YACT;YACAD,SAASA,OAAOpE,KAAK,CAACqE,iBAAiB,CAAC,IAAIJ,aAAarB,MAAM,GAAGyB,eAAe;QACnF;QACA,OAAOH,EAAEI,IAAI,CAACF,OAAOpE,KAAK,CAAC,CAACmE;IAC9B,GAAG,EAAE;IAEL,MAAMI,gBAAgB9J,mBAAmB;QAAE6C;QAASiB;IAAM;IAE1D,IAAI,CAACnB,MAAMC,OAAO,CAACkH,kBAAkBA,eAAehG,UAAU,QAAQgG,cAAchG,KAAK,GAAG;IAE5F,qBACE,MAACiG;QACC/I,WAAW;YACTnB;YACAQ;YACAW;YACAwD,aAAa;YACbrB,gBAAgB;YAChBhC,YAAY,CAAC,EAAEd,UAAU,WAAW,CAAC;YACrC,CAACc,YAAYJ,eAAe,CAAC,EAAEV,UAAU,cAAc,CAAC;SACzD,CACEuI,MAAM,CAACoB,SACPC,IAAI,CAAC;QACRhD,IAAI,CAAC,MAAM,EAAEjD,KAAKkG,OAAO,CAAC,OAAO,MAAM,CAAC;QACxC5I,OAAO;YACL,GAAGA,KAAK;YACRC;QACF;;0BAEA,KAAC3B;gBACCuK,OAAOzJ,OAAOI,OAAOsJ,YAAYD;gBACjC1I,OAAOA;gBACPE,UAAUA;gBACT,GAAIC,cAAc,CAAC,CAAC;;0BAEvB,MAACmI;gBAAI/I,WAAW,CAAC,EAAEnB,eAAe,MAAM,CAAC;;kCACvC,KAACF;wBACC0K,aAAa3J,OAAOI,OAAOsJ,YAAYE;wBACvCtG,MAAMA;wBACL,GAAIvD,cAAc,CAAC,CAAC;;oBAEtB,CAAC0C,8BACA,MAAC4G;wBAAI/I,WAAW,CAAC,EAAEX,UAAU,MAAM,CAAC;;0CAClC,KAACpB;gCACCsL,uBAAuB,CAAC5F;gCACxByF,YAAY;oCACVlK;oCACAC;gCACF;gCACAqK,aAAa;oCACXC,gBAAgB9F;oCAChB+F,kBAAkB/F;oCAClBuE;oCACAtE;gCACF;gCACA+F,UAAUxJ,YAAYkD,kBAAkBM;gCACxC2E,cAAc7F,2BAA2B6F,eAAesB;gCACxDC,gBAAgB,CAAC/B;oCACf,IAAI,CAACA,QAAQ,OAAO8B;oCACpB,OAAOpJ,WAAWmB,MAAMC,OAAO,CAAClB,cAC5B,CAAC,EAAEoH,OAAOpH,UAAU,CAAC,CAAC,EAAEoH,OAAOhF,KAAK,CAAC,CAAC,GACtCgF,OAAOhF,KAAK;gCAClB;gCACAP,WAAWA;gCACXuH,SAAStJ;gCACTN,YAAYA;gCACZ6J,UACE,CAAC5J,WACG,CAAC6J;oCACC,IAAIA,aAAa,MAAM;wCACrBzG,SAAS/C,UAAU,EAAE,GAAG;oCAC1B,OAAO,IAAIA,WAAWmB,MAAMC,OAAO,CAACoI,WAAW;wCAC7CzG,SACEyG,WACIA,SAASC,GAAG,CAAC,CAACnC;4CACZ,IAAIpG,sBAAsB;gDACxB,OAAO;oDACLhB,YAAYoH,OAAOpH,UAAU;oDAC7BoC,OAAOgF,OAAOhF,KAAK;gDACrB;4CACF;4CAEA,OAAOgF,OAAOhF,KAAK;wCACrB,KACA;oCAER,OAAO,IAAIpB,wBAAwB,CAACC,MAAMC,OAAO,CAACoI,WAAW;wCAC3DzG,SAAS;4CACP7C,YAAYsJ,SAAStJ,UAAU;4CAC/BoC,OAAOkH,SAASlH,KAAK;wCACvB;oCACF,OAAO,IAAI,CAACnB,MAAMC,OAAO,CAACoI,WAAW;wCACnCzG,SAASyG,SAASlH,KAAK;oCACzB;gCACF,IACA8G;gCAENM,eAAe,CAACC,YAAc3C,kBAAkB2C,WAAWrH;gCAC3DsH,aAAa;oCACXzH,WAAWe,OAAO,GAAG;gCACvB;gCACA2G,YAAY;oCACV1H,WAAWe,OAAO,GAAG;oCAErB,IAAI,CAACd,sBAAsBc,OAAO,EAAE;wCAClClB,aAAa;wCACb,KAAKqB,WAAW;4CACd5B,gBAAgB,CAAC;4CACjB+B,WAAW;gDACTpB,sBAAsBc,OAAO,GAAG;gDAChClB,aAAa;4CACf;4CACAM,OAAOQ;wCACT;oCACF;gCACF;gCACAgH,sBAAsB;oCACpB,KAAKzG,WAAW;wCACd9B;wCACAE;wCACAI;wCACA6B,MAAM;wCACNpB,OAAOQ;oCACT;gCACF;gCACAzB,SAASA;gCACT2B,WAAWA;gCACXV,OAAOgG,iBAAiB;;4BAEzB,CAAC3I,YAAYJ,6BACZ,KAACjB;gCAEGgD;gCACAtB;gCACAqB;gCACAmB;gCACAtC;gCACA6C;gCACAT;;;;oBAMTX,8BAAgB,KAAC4G;wBAAI/I,WAAW,CAAC,EAAEX,UAAU,eAAe,CAAC;kCAAG8C;;kCACjE,KAACzD;wBACC6L,aAAa7K,OAAOI,OAAOsJ,YAAYmB;wBACvCtK,aAAaA;wBACZ,GAAIT,oBAAoB,CAAC,CAAC;;;;;;AAKrC;AAEA,OAAO,MAAMgL,oBAAoBpM,cAAckB,4BAA2B"}
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { PaginatedDocs, RelationshipFieldProps, Where } from 'payload'\n\nimport { wordBoundariesRegex } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\n\nimport type { DocumentDrawerProps } from '../../elements/DocumentDrawer/types.js'\nimport type { GetResults, Option, Value } from './types.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDebouncedCallback } from '../../hooks/useDebouncedCallback.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { FieldError } from '../FieldError/index.js'\nimport { FieldLabel } from '../FieldLabel/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { AddNewRelation } from './AddNew/index.js'\nimport { createRelationMap } from './createRelationMap.js'\nimport { findOptionsByValue } from './findOptionsByValue.js'\nimport './index.scss'\nimport { optionsReducer } from './optionsReducer.js'\nimport { MultiValueLabel } from './select-components/MultiValueLabel/index.js'\nimport { SingleValue } from './select-components/SingleValue/index.js'\n\nconst maxResultsPerRequest = 10\n\nconst baseClass = 'relationship'\n\nconst RelationshipFieldComponent: React.FC<RelationshipFieldProps> = (props) => {\n const {\n descriptionProps,\n errorProps,\n field,\n field: {\n name,\n _path: pathFromProps,\n admin: {\n allowCreate = true,\n className,\n description,\n isSortable = true,\n readOnly: readOnlyFromAdmin,\n sortOptions,\n style,\n width,\n } = {},\n hasMany,\n label,\n relationTo,\n required,\n },\n labelProps,\n readOnly: readOnlyFromTopLevelProps,\n validate,\n } = props\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const { config } = useConfig()\n\n const {\n collections,\n routes: { api },\n serverURL,\n } = config\n\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n const { code: locale } = useLocale()\n const hasMultipleRelations = Array.isArray(relationTo)\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n const [lastFullyLoadedRelation, setLastFullyLoadedRelation] = useState(-1)\n const [lastLoadedPage, setLastLoadedPage] = useState<Record<string, number>>({})\n const [errorLoading, setErrorLoading] = useState('')\n const [search, setSearch] = useState('')\n const [isLoading, setIsLoading] = useState(false)\n const [enableWordBoundarySearch, setEnableWordBoundarySearch] = useState(false)\n const menuIsOpen = useRef(false)\n const hasLoadedFirstPageRef = useRef(false)\n\n const memoizedValidate = useCallback(\n (value, validationOptions) => {\n if (typeof validate === 'function') {\n return validate(value, { ...validationOptions, required })\n }\n },\n [validate, required],\n )\n const { path: pathFromContext, readOnly: readOnlyFromContext } = useFieldProps()\n\n const {\n filterOptions,\n formInitializing,\n formProcessing,\n initialValue,\n path,\n setValue,\n showError,\n value,\n } = useField<Value | Value[]>({\n path: pathFromContext ?? pathFromProps ?? name,\n validate: memoizedValidate,\n })\n\n const readOnly = readOnlyFromProps || readOnlyFromContext || formInitializing\n\n const valueRef = useRef(value)\n valueRef.current = value\n\n const [drawerIsOpen, setDrawerIsOpen] = useState(false)\n\n const getResults: GetResults = useCallback(\n async ({\n lastFullyLoadedRelation: lastFullyLoadedRelationArg,\n lastLoadedPage: lastLoadedPageArg,\n onSuccess,\n search: searchArg,\n sort,\n value: valueArg,\n }) => {\n if (!permissions) {\n return\n }\n const lastFullyLoadedRelationToUse =\n typeof lastFullyLoadedRelationArg !== 'undefined' ? lastFullyLoadedRelationArg : -1\n\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n const relationsToFetch =\n lastFullyLoadedRelationToUse === -1\n ? relations\n : relations.slice(lastFullyLoadedRelationToUse + 1)\n\n let resultsFetched = 0\n const relationMap = createRelationMap({\n hasMany,\n relationTo,\n value: valueArg,\n })\n\n if (!errorLoading) {\n await relationsToFetch.reduce(async (priorRelation, relation) => {\n const relationFilterOption = filterOptions?.[relation]\n\n let lastLoadedPageToUse\n if (search !== searchArg) {\n lastLoadedPageToUse = 1\n } else {\n lastLoadedPageToUse = lastLoadedPageArg[relation] + 1\n }\n await priorRelation\n\n if (relationFilterOption === false) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n return Promise.resolve()\n }\n\n if (resultsFetched < 10) {\n const collection = collections.find((coll) => coll.slug === relation)\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n let fieldToSort = collection?.defaultSort || 'id'\n if (typeof sortOptions === 'string') {\n fieldToSort = sortOptions\n } else if (sortOptions?.[relation]) {\n fieldToSort = sortOptions[relation]\n }\n\n const query: {\n [key: string]: unknown\n where: Where\n } = {\n depth: 0,\n draft: true,\n limit: maxResultsPerRequest,\n locale,\n page: lastLoadedPageToUse,\n sort: fieldToSort,\n where: {\n and: [\n {\n id: {\n not_in: relationMap[relation],\n },\n },\n ],\n },\n }\n\n if (searchArg) {\n query.where.and.push({\n [fieldToSearch]: {\n like: searchArg,\n },\n })\n }\n\n if (relationFilterOption && typeof relationFilterOption !== 'boolean') {\n query.where.and.push(relationFilterOption)\n }\n\n const response = await fetch(`${serverURL}${api}/${relation}`, {\n body: qs.stringify(query),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n method: 'POST',\n })\n\n if (response.ok) {\n const data: PaginatedDocs<unknown> = await response.json()\n setLastLoadedPage((prevState) => {\n return {\n ...prevState,\n [relation]: lastLoadedPageToUse,\n }\n })\n\n if (!data.nextPage) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n }\n\n if (data.docs.length > 0) {\n resultsFetched += data.docs.length\n\n dispatchOptions({\n type: 'ADD',\n collection,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n docs: data.docs,\n i18n,\n sort,\n })\n }\n } else if (response.status === 403) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n dispatchOptions({\n type: 'ADD',\n collection,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n docs: [],\n i18n,\n ids: relationMap[relation],\n sort,\n })\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n }\n }, Promise.resolve())\n\n if (typeof onSuccess === 'function') onSuccess()\n }\n },\n [\n permissions,\n relationTo,\n hasMany,\n errorLoading,\n search,\n collections,\n locale,\n filterOptions,\n serverURL,\n sortOptions,\n api,\n i18n,\n config,\n t,\n ],\n )\n\n const updateSearch = useDebouncedCallback((searchArg: string, valueArg: Value | Value[]) => {\n void getResults({ lastLoadedPage: {}, search: searchArg, sort: true, value: valueArg })\n setSearch(searchArg)\n }, 300)\n\n const handleInputChange = useCallback(\n (searchArg: string, valueArg: Value | Value[]) => {\n if (search !== searchArg) {\n setLastLoadedPage({})\n updateSearch(searchArg, valueArg, searchArg !== '')\n }\n },\n [search, updateSearch],\n )\n\n // ///////////////////////////////////\n // Ensure we have an option for each value\n // ///////////////////////////////////\n\n useEffect(() => {\n const relationMap = createRelationMap({\n hasMany,\n relationTo,\n value,\n })\n\n void Object.entries(relationMap).reduce(async (priorRelation, [relation, ids]) => {\n await priorRelation\n\n const idsToLoad = ids.filter((id) => {\n return !options.find((optionGroup) =>\n optionGroup?.options?.find(\n (option) => option.value === id && option.relationTo === relation,\n ),\n )\n })\n\n if (idsToLoad.length > 0) {\n const query = {\n depth: 0,\n draft: true,\n limit: idsToLoad.length,\n locale,\n where: {\n id: {\n in: idsToLoad,\n },\n },\n }\n\n if (!errorLoading) {\n const response = await fetch(`${serverURL}${api}/${relation}`, {\n body: qs.stringify(query),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n method: 'POST',\n })\n\n const collection = collections.find((coll) => coll.slug === relation)\n let docs = []\n\n if (response.ok) {\n const data = await response.json()\n docs = data.docs\n }\n\n dispatchOptions({\n type: 'ADD',\n collection,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n docs,\n i18n,\n ids: idsToLoad,\n sort: true,\n })\n }\n }\n }, Promise.resolve())\n }, [\n options,\n value,\n hasMany,\n errorLoading,\n collections,\n hasMultipleRelations,\n serverURL,\n api,\n i18n,\n relationTo,\n locale,\n config,\n ])\n\n // Determine if we should switch to word boundary search\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n const isIdOnly = relations.reduce((idOnly, relation) => {\n const collection = collections.find((coll) => coll.slug === relation)\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n return fieldToSearch === 'id' && idOnly\n }, true)\n setEnableWordBoundarySearch(!isIdOnly)\n }, [relationTo, collections])\n\n // When (`relationTo` || `filterOptions` || `locale`) changes, reset component\n // Note - effect should not run on first run\n useEffect(() => {\n // If the menu is open while filterOptions changes\n // due to latency of getFormState and fast clicking into this field,\n // re-fetch options\n\n if (hasLoadedFirstPageRef.current && menuIsOpen.current) {\n setIsLoading(true)\n void getResults({\n lastLoadedPage: {},\n onSuccess: () => {\n hasLoadedFirstPageRef.current = true\n setIsLoading(false)\n },\n value: valueRef.current,\n })\n }\n\n // If the menu is not open, still reset the field state\n // because we need to get new options next time the menu\n // opens by the user\n\n dispatchOptions({ type: 'CLEAR' })\n setLastFullyLoadedRelation(-1)\n setLastLoadedPage({})\n hasLoadedFirstPageRef.current = false\n }, [\n relationTo,\n filterOptions,\n locale,\n menuIsOpen,\n getResults,\n valueRef,\n hasLoadedFirstPageRef,\n path,\n ])\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n dispatchOptions({\n type: 'UPDATE',\n collection: args.collectionConfig,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n doc: args.doc,\n i18n,\n })\n },\n [i18n, config],\n )\n\n const filterOption = useCallback((item: Option, searchFilter: string) => {\n if (!searchFilter) {\n return true\n }\n const r = wordBoundariesRegex(searchFilter || '')\n // breaking the labels to search into smaller parts increases performance\n const breakApartThreshold = 250\n let string = item.label\n // strings less than breakApartThreshold length won't be chunked\n while (string.length > breakApartThreshold) {\n // slicing by the next space after the length of the search input prevents slicing the string up by partial words\n const indexOfSpace = string.indexOf(' ', searchFilter.length)\n if (r.test(string.slice(0, indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1))) {\n return true\n }\n string = string.slice(indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1)\n }\n return r.test(string.slice(-breakApartThreshold))\n }, [])\n\n const valueToRender = findOptionsByValue({ options, value })\n\n if (!Array.isArray(valueToRender) && valueToRender?.value === 'null') valueToRender.value = null\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n errorLoading && 'error-loading',\n readOnly && `${baseClass}--read-only`,\n !readOnly && allowCreate && `${baseClass}--allow-create`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n style={{\n ...style,\n width,\n }}\n >\n <FieldLabel\n Label={field?.admin?.components?.Label}\n label={label}\n required={required}\n {...(labelProps || {})}\n />\n <div className={`${fieldBaseClass}__wrap`}>\n <FieldError\n CustomError={field?.admin?.components?.Error}\n path={path}\n {...(errorProps || {})}\n />\n {!errorLoading && (\n <div className={`${baseClass}__wrap`}>\n <ReactSelect\n backspaceRemovesValue={!drawerIsOpen}\n components={{\n MultiValueLabel,\n SingleValue,\n }}\n customProps={{\n disableKeyDown: drawerIsOpen,\n disableMouseDown: drawerIsOpen,\n onSave,\n setDrawerIsOpen,\n }}\n disabled={readOnly || formProcessing || drawerIsOpen}\n filterOption={enableWordBoundarySearch ? filterOption : undefined}\n getOptionValue={(option) => {\n if (!option) return undefined\n return hasMany && Array.isArray(relationTo)\n ? `${option.relationTo}_${option.value}`\n : option.value\n }}\n isLoading={isLoading}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={\n !readOnly\n ? (selected) => {\n if (selected === null) {\n setValue(hasMany ? [] : null)\n } else if (hasMany && Array.isArray(selected)) {\n setValue(\n selected\n ? selected.map((option) => {\n if (hasMultipleRelations) {\n return {\n relationTo: option.relationTo,\n value: option.value,\n }\n }\n\n return option.value\n })\n : null,\n )\n } else if (hasMultipleRelations && !Array.isArray(selected)) {\n setValue({\n relationTo: selected.relationTo,\n value: selected.value,\n })\n } else if (!Array.isArray(selected)) {\n setValue(selected.value)\n }\n }\n : undefined\n }\n onInputChange={(newSearch) => handleInputChange(newSearch, value)}\n onMenuClose={() => {\n menuIsOpen.current = false\n }}\n onMenuOpen={() => {\n menuIsOpen.current = true\n\n if (!hasLoadedFirstPageRef.current) {\n setIsLoading(true)\n void getResults({\n lastLoadedPage: {},\n onSuccess: () => {\n hasLoadedFirstPageRef.current = true\n setIsLoading(false)\n },\n value: initialValue,\n })\n }\n }}\n onMenuScrollToBottom={() => {\n void getResults({\n lastFullyLoadedRelation,\n lastLoadedPage,\n search,\n sort: false,\n value: initialValue,\n })\n }}\n options={options}\n showError={showError}\n value={valueToRender ?? null}\n />\n {!readOnly && allowCreate && (\n <AddNewRelation\n {...{\n dispatchOptions,\n hasMany,\n options,\n path,\n relationTo,\n setValue,\n value,\n }}\n />\n )}\n </div>\n )}\n {errorLoading && <div className={`${baseClass}__error-loading`}>{errorLoading}</div>}\n <FieldDescription\n Description={field?.admin?.components?.Description}\n description={description}\n {...(descriptionProps || {})}\n />\n </div>\n </div>\n )\n}\n\nexport const RelationshipField = withCondition(RelationshipFieldComponent)\n"],"names":["wordBoundariesRegex","qs","React","useCallback","useEffect","useReducer","useRef","useState","ReactSelect","useFieldProps","useField","withCondition","useDebouncedCallback","useAuth","useConfig","useLocale","useTranslation","FieldDescription","FieldError","FieldLabel","fieldBaseClass","AddNewRelation","createRelationMap","findOptionsByValue","optionsReducer","MultiValueLabel","SingleValue","maxResultsPerRequest","baseClass","RelationshipFieldComponent","props","descriptionProps","errorProps","field","name","_path","pathFromProps","admin","allowCreate","className","description","isSortable","readOnly","readOnlyFromAdmin","sortOptions","style","width","hasMany","label","relationTo","required","labelProps","readOnlyFromTopLevelProps","validate","readOnlyFromProps","config","collections","routes","api","serverURL","i18n","t","permissions","code","locale","hasMultipleRelations","Array","isArray","options","dispatchOptions","lastFullyLoadedRelation","setLastFullyLoadedRelation","lastLoadedPage","setLastLoadedPage","errorLoading","setErrorLoading","search","setSearch","isLoading","setIsLoading","enableWordBoundarySearch","setEnableWordBoundarySearch","menuIsOpen","hasLoadedFirstPageRef","memoizedValidate","value","validationOptions","path","pathFromContext","readOnlyFromContext","filterOptions","formInitializing","formProcessing","initialValue","setValue","showError","valueRef","current","drawerIsOpen","setDrawerIsOpen","getResults","lastFullyLoadedRelationArg","lastLoadedPageArg","onSuccess","searchArg","sort","valueArg","lastFullyLoadedRelationToUse","relations","relationsToFetch","slice","resultsFetched","relationMap","reduce","priorRelation","relation","relationFilterOption","lastLoadedPageToUse","indexOf","Promise","resolve","collection","find","coll","slug","fieldToSearch","useAsTitle","fieldToSort","defaultSort","query","depth","draft","limit","page","where","and","id","not_in","push","like","response","fetch","body","stringify","credentials","headers","language","method","ok","data","json","prevState","nextPage","docs","length","type","status","ids","updateSearch","handleInputChange","Object","entries","idsToLoad","filter","optionGroup","option","in","isIdOnly","idOnly","onSave","args","collectionConfig","doc","filterOption","item","searchFilter","r","breakApartThreshold","string","indexOfSpace","test","valueToRender","div","Boolean","join","replace","Label","components","CustomError","Error","backspaceRemovesValue","customProps","disableKeyDown","disableMouseDown","disabled","undefined","getOptionValue","isMulti","onChange","selected","map","onInputChange","newSearch","onMenuClose","onMenuOpen","onMenuScrollToBottom","Description","RelationshipField"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Row/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,cAAc,CAAA;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Row/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,cAAc,CAAA;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAA;AA+B9B,eAAO,MAAM,QAAQ,yBAAmC,CAAA"}
|
package/dist/fields/Row/index.js
CHANGED
|
@@ -10,7 +10,7 @@ import { RowProvider, useRow } from './provider.js';
|
|
|
10
10
|
export { RowProvider, useRow };
|
|
11
11
|
const baseClass = 'row';
|
|
12
12
|
const RowFieldComponent = (props)=>{
|
|
13
|
-
const { field: { admin: { className }, fields }, forceRender = false } = props;
|
|
13
|
+
const { field: { admin: { className } = {}, fields }, forceRender = false } = props;
|
|
14
14
|
const { indexPath, path, readOnly, schemaPath, siblingPermissions } = useFieldProps();
|
|
15
15
|
return /*#__PURE__*/ _jsx(RowProvider, {
|
|
16
16
|
children: /*#__PURE__*/ _jsx("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Row/index.tsx"],"sourcesContent":["'use client'\nimport type { RowFieldProps } from 'payload'\n\nimport React from 'react'\n\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\nimport { RowProvider, useRow } from './provider.js'\n\nexport { RowProvider, useRow }\n\nconst baseClass = 'row'\n\nconst RowFieldComponent: React.FC<RowFieldProps> = (props) => {\n const {\n field: {
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Row/index.tsx"],"sourcesContent":["'use client'\nimport type { RowFieldProps } from 'payload'\n\nimport React from 'react'\n\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\nimport { RowProvider, useRow } from './provider.js'\n\nexport { RowProvider, useRow }\n\nconst baseClass = 'row'\n\nconst RowFieldComponent: React.FC<RowFieldProps> = (props) => {\n const {\n field: { admin: { className } = {}, fields },\n forceRender = false,\n } = props\n\n const { indexPath, path, readOnly, schemaPath, siblingPermissions } = useFieldProps()\n\n return (\n <RowProvider>\n <div className={[fieldBaseClass, baseClass, className].filter(Boolean).join(' ')}>\n <RenderFields\n className={`${baseClass}__fields`}\n fields={fields}\n forceRender={forceRender}\n indexPath={indexPath}\n margins={false}\n path={path}\n permissions={siblingPermissions}\n readOnly={readOnly}\n schemaPath={schemaPath}\n />\n </div>\n </RowProvider>\n )\n}\n\nexport const RowField = withCondition(RowFieldComponent)\n"],"names":["React","useFieldProps","RenderFields","withCondition","fieldBaseClass","RowProvider","useRow","baseClass","RowFieldComponent","props","field","admin","className","fields","forceRender","indexPath","path","readOnly","schemaPath","siblingPermissions","div","filter","Boolean","join","margins","permissions","RowField"],"mappings":"AAAA;;AAGA,OAAOA,WAAW,QAAO;AAEzB,SAASC,aAAa,QAAQ,0CAAyC;AACvE,SAASC,YAAY,QAAQ,oCAAmC;AAChE,SAASC,aAAa,QAAQ,qCAAoC;AAClE,SAASC,cAAc,QAAQ,qBAAoB;AACnD,OAAO,eAAc;AACrB,SAASC,WAAW,EAAEC,MAAM,QAAQ,gBAAe;AAEnD,SAASD,WAAW,EAAEC,MAAM,GAAE;AAE9B,MAAMC,YAAY;AAElB,MAAMC,oBAA6C,CAACC;IAClD,MAAM,EACJC,OAAO,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAG,CAAC,CAAC,EAAEC,MAAM,EAAE,EAC5CC,cAAc,KAAK,EACpB,GAAGL;IAEJ,MAAM,EAAEM,SAAS,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,kBAAkB,EAAE,GAAGlB;IAEtE,qBACE,KAACI;kBACC,cAAA,KAACe;YAAIR,WAAW;gBAACR;gBAAgBG;gBAAWK;aAAU,CAACS,MAAM,CAACC,SAASC,IAAI,CAAC;sBAC1E,cAAA,KAACrB;gBACCU,WAAW,CAAC,EAAEL,UAAU,QAAQ,CAAC;gBACjCM,QAAQA;gBACRC,aAAaA;gBACbC,WAAWA;gBACXS,SAAS;gBACTR,MAAMA;gBACNS,aAAaN;gBACbF,UAAUA;gBACVC,YAAYA;;;;AAKtB;AAEA,OAAO,MAAMQ,WAAWvB,cAAcK,mBAAkB"}
|
|
@@ -18,7 +18,7 @@ import { TabsProvider } from './provider.js';
|
|
|
18
18
|
const baseClass = 'tabs-field';
|
|
19
19
|
export { TabsProvider };
|
|
20
20
|
const TabsFieldComponent = (props)=>{
|
|
21
|
-
const { field, field: { _path: pathFromProps, admin: { className, readOnly: readOnlyFromAdmin }, tabs = [] }, forceRender = false, readOnly: readOnlyFromTopLevelProps } = props;
|
|
21
|
+
const { field, field: { _path: pathFromProps, admin: { className, readOnly: readOnlyFromAdmin } = {}, tabs = [] }, forceRender = false, readOnly: readOnlyFromTopLevelProps } = props;
|
|
22
22
|
const { indexPath, path: pathFromContext, readOnly: readOnlyFromContext, schemaPath, siblingPermissions } = useFieldProps();
|
|
23
23
|
const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin;
|
|
24
24
|
const readOnly = readOnlyFromProps || readOnlyFromContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Tabs/index.tsx"],"sourcesContent":["'use client'\nimport type { DocumentPreferences, TabsFieldProps } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { tabHasName, toKebabCase } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { useCollapsible } from '../../elements/Collapsible/provider.js'\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { TabComponent } from './Tab/index.js'\nimport './index.scss'\nimport { TabsProvider } from './provider.js'\n\nconst baseClass = 'tabs-field'\n\nexport { TabsProvider }\n\nconst TabsFieldComponent: React.FC<TabsFieldProps> = (props) => {\n const {\n field,\n field: {\n _path: pathFromProps,\n admin: { className, readOnly: readOnlyFromAdmin },\n tabs = [],\n },\n forceRender = false,\n readOnly: readOnlyFromTopLevelProps,\n } = props\n\n const {\n indexPath,\n path: pathFromContext,\n readOnly: readOnlyFromContext,\n schemaPath,\n siblingPermissions,\n } = useFieldProps()\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const readOnly = readOnlyFromProps || readOnlyFromContext\n const path = pathFromContext ?? pathFromProps\n const { getPreference, setPreference } = usePreferences()\n const { preferencesKey } = useDocumentInfo()\n const { i18n } = useTranslation()\n const { isWithinCollapsible } = useCollapsible()\n const [activeTabIndex, setActiveTabIndex] = useState<number>(0)\n const tabsPrefKey = `tabs-${indexPath}`\n\n useEffect(() => {\n if (preferencesKey) {\n const getInitialPref = async () => {\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n const initialIndex = path\n ? existingPreferences?.fields?.[path]?.tabIndex\n : existingPreferences?.fields?.[tabsPrefKey]?.tabIndex\n setActiveTabIndex(initialIndex || 0)\n }\n void getInitialPref()\n }\n }, [path, getPreference, preferencesKey, tabsPrefKey])\n\n const handleTabChange = useCallback(\n async (incomingTabIndex: number): Promise<void> => {\n setActiveTabIndex(incomingTabIndex)\n\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n\n if (preferencesKey) {\n void setPreference(preferencesKey, {\n ...existingPreferences,\n ...(path\n ? {\n fields: {\n ...(existingPreferences?.fields || {}),\n [path]: {\n ...existingPreferences?.fields?.[path],\n tabIndex: incomingTabIndex,\n },\n },\n }\n : {\n fields: {\n ...existingPreferences?.fields,\n [tabsPrefKey]: {\n ...existingPreferences?.fields?.[tabsPrefKey],\n tabIndex: incomingTabIndex,\n },\n },\n }),\n })\n }\n },\n [preferencesKey, getPreference, setPreference, path, tabsPrefKey],\n )\n\n const activeTabConfig = tabs[activeTabIndex]\n\n function generateTabPath() {\n let tabPath = path\n if (path && tabHasName(activeTabConfig) && activeTabConfig.name) {\n tabPath = `${path}.${activeTabConfig.name}`\n } else if (!path && tabHasName(activeTabConfig) && activeTabConfig.name) {\n tabPath = activeTabConfig.name\n }\n\n return tabPath\n }\n\n return (\n <div\n className={[\n fieldBaseClass,\n className,\n baseClass,\n isWithinCollapsible && `${baseClass}--within-collapsible`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <TabsProvider>\n <div className={`${baseClass}__tabs-wrap`}>\n <div className={`${baseClass}__tabs`}>\n {tabs.map((tab, tabIndex) => {\n return (\n <TabComponent\n isActive={activeTabIndex === tabIndex}\n key={tabIndex}\n parentPath={path}\n setIsActive={() => {\n void handleTabChange(tabIndex)\n }}\n tab={tab}\n />\n )\n })}\n </div>\n </div>\n <div className={`${baseClass}__content-wrap`}>\n {activeTabConfig && (\n <div\n className={[\n `${baseClass}__tab`,\n activeTabConfig.label &&\n `${baseClass}__tabConfigLabel-${toKebabCase(\n getTranslation(activeTabConfig.label, i18n),\n )}`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <FieldDescription Description={field?.admin?.components?.Description} />\n <RenderFields\n fields={activeTabConfig.fields}\n forceRender={forceRender}\n key={\n activeTabConfig.label\n ? getTranslation(activeTabConfig.label, i18n)\n : activeTabConfig['name']\n }\n margins=\"small\"\n path={generateTabPath()}\n permissions={\n 'name' in activeTabConfig && siblingPermissions?.[activeTabConfig.name]?.fields\n ? siblingPermissions[activeTabConfig.name]?.fields\n : siblingPermissions\n }\n readOnly={readOnly}\n schemaPath={`${schemaPath ? `${schemaPath}` : ''}${tabHasName(activeTabConfig) && activeTabConfig.name ? `.${activeTabConfig.name}` : ''}`}\n />\n </div>\n )}\n </div>\n </TabsProvider>\n </div>\n )\n}\n\nexport const TabsField = withCondition(TabsFieldComponent)\n"],"names":["getTranslation","tabHasName","toKebabCase","React","useCallback","useEffect","useState","useCollapsible","useFieldProps","RenderFields","withCondition","useDocumentInfo","usePreferences","useTranslation","FieldDescription","fieldBaseClass","TabComponent","TabsProvider","baseClass","TabsFieldComponent","props","field","_path","pathFromProps","admin","className","readOnly","readOnlyFromAdmin","tabs","forceRender","readOnlyFromTopLevelProps","indexPath","path","pathFromContext","readOnlyFromContext","schemaPath","siblingPermissions","readOnlyFromProps","getPreference","setPreference","preferencesKey","i18n","isWithinCollapsible","activeTabIndex","setActiveTabIndex","tabsPrefKey","getInitialPref","existingPreferences","initialIndex","fields","tabIndex","handleTabChange","incomingTabIndex","activeTabConfig","generateTabPath","tabPath","name","div","filter","Boolean","join","map","tab","isActive","parentPath","setIsActive","label","Description","components","margins","permissions","TabsField"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Tabs/index.tsx"],"sourcesContent":["'use client'\nimport type { DocumentPreferences, TabsFieldProps } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { tabHasName, toKebabCase } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { useCollapsible } from '../../elements/Collapsible/provider.js'\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { TabComponent } from './Tab/index.js'\nimport './index.scss'\nimport { TabsProvider } from './provider.js'\n\nconst baseClass = 'tabs-field'\n\nexport { TabsProvider }\n\nconst TabsFieldComponent: React.FC<TabsFieldProps> = (props) => {\n const {\n field,\n field: {\n _path: pathFromProps,\n admin: { className, readOnly: readOnlyFromAdmin } = {},\n tabs = [],\n },\n forceRender = false,\n readOnly: readOnlyFromTopLevelProps,\n } = props\n\n const {\n indexPath,\n path: pathFromContext,\n readOnly: readOnlyFromContext,\n schemaPath,\n siblingPermissions,\n } = useFieldProps()\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const readOnly = readOnlyFromProps || readOnlyFromContext\n const path = pathFromContext ?? pathFromProps\n const { getPreference, setPreference } = usePreferences()\n const { preferencesKey } = useDocumentInfo()\n const { i18n } = useTranslation()\n const { isWithinCollapsible } = useCollapsible()\n const [activeTabIndex, setActiveTabIndex] = useState<number>(0)\n const tabsPrefKey = `tabs-${indexPath}`\n\n useEffect(() => {\n if (preferencesKey) {\n const getInitialPref = async () => {\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n const initialIndex = path\n ? existingPreferences?.fields?.[path]?.tabIndex\n : existingPreferences?.fields?.[tabsPrefKey]?.tabIndex\n setActiveTabIndex(initialIndex || 0)\n }\n void getInitialPref()\n }\n }, [path, getPreference, preferencesKey, tabsPrefKey])\n\n const handleTabChange = useCallback(\n async (incomingTabIndex: number): Promise<void> => {\n setActiveTabIndex(incomingTabIndex)\n\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n\n if (preferencesKey) {\n void setPreference(preferencesKey, {\n ...existingPreferences,\n ...(path\n ? {\n fields: {\n ...(existingPreferences?.fields || {}),\n [path]: {\n ...existingPreferences?.fields?.[path],\n tabIndex: incomingTabIndex,\n },\n },\n }\n : {\n fields: {\n ...existingPreferences?.fields,\n [tabsPrefKey]: {\n ...existingPreferences?.fields?.[tabsPrefKey],\n tabIndex: incomingTabIndex,\n },\n },\n }),\n })\n }\n },\n [preferencesKey, getPreference, setPreference, path, tabsPrefKey],\n )\n\n const activeTabConfig = tabs[activeTabIndex]\n\n function generateTabPath() {\n let tabPath = path\n if (path && tabHasName(activeTabConfig) && activeTabConfig.name) {\n tabPath = `${path}.${activeTabConfig.name}`\n } else if (!path && tabHasName(activeTabConfig) && activeTabConfig.name) {\n tabPath = activeTabConfig.name\n }\n\n return tabPath\n }\n\n return (\n <div\n className={[\n fieldBaseClass,\n className,\n baseClass,\n isWithinCollapsible && `${baseClass}--within-collapsible`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <TabsProvider>\n <div className={`${baseClass}__tabs-wrap`}>\n <div className={`${baseClass}__tabs`}>\n {tabs.map((tab, tabIndex) => {\n return (\n <TabComponent\n isActive={activeTabIndex === tabIndex}\n key={tabIndex}\n parentPath={path}\n setIsActive={() => {\n void handleTabChange(tabIndex)\n }}\n tab={tab}\n />\n )\n })}\n </div>\n </div>\n <div className={`${baseClass}__content-wrap`}>\n {activeTabConfig && (\n <div\n className={[\n `${baseClass}__tab`,\n activeTabConfig.label &&\n `${baseClass}__tabConfigLabel-${toKebabCase(\n getTranslation(activeTabConfig.label, i18n),\n )}`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <FieldDescription Description={field?.admin?.components?.Description} />\n <RenderFields\n fields={activeTabConfig.fields}\n forceRender={forceRender}\n key={\n activeTabConfig.label\n ? getTranslation(activeTabConfig.label, i18n)\n : activeTabConfig['name']\n }\n margins=\"small\"\n path={generateTabPath()}\n permissions={\n 'name' in activeTabConfig && siblingPermissions?.[activeTabConfig.name]?.fields\n ? siblingPermissions[activeTabConfig.name]?.fields\n : siblingPermissions\n }\n readOnly={readOnly}\n schemaPath={`${schemaPath ? `${schemaPath}` : ''}${tabHasName(activeTabConfig) && activeTabConfig.name ? `.${activeTabConfig.name}` : ''}`}\n />\n </div>\n )}\n </div>\n </TabsProvider>\n </div>\n )\n}\n\nexport const TabsField = withCondition(TabsFieldComponent)\n"],"names":["getTranslation","tabHasName","toKebabCase","React","useCallback","useEffect","useState","useCollapsible","useFieldProps","RenderFields","withCondition","useDocumentInfo","usePreferences","useTranslation","FieldDescription","fieldBaseClass","TabComponent","TabsProvider","baseClass","TabsFieldComponent","props","field","_path","pathFromProps","admin","className","readOnly","readOnlyFromAdmin","tabs","forceRender","readOnlyFromTopLevelProps","indexPath","path","pathFromContext","readOnlyFromContext","schemaPath","siblingPermissions","readOnlyFromProps","getPreference","setPreference","preferencesKey","i18n","isWithinCollapsible","activeTabIndex","setActiveTabIndex","tabsPrefKey","getInitialPref","existingPreferences","initialIndex","fields","tabIndex","handleTabChange","incomingTabIndex","activeTabConfig","generateTabPath","tabPath","name","div","filter","Boolean","join","map","tab","isActive","parentPath","setIsActive","label","Description","components","margins","permissions","TabsField"],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { TextInput } from './Input.js';
|
|
|
11
11
|
import './index.scss';
|
|
12
12
|
export { TextInput };
|
|
13
13
|
const TextFieldComponent = (props)=>{
|
|
14
|
-
const { field, field: { name, _path: pathFromProps, admin: { className, description, placeholder, readOnly: readOnlyFromAdmin, rtl, style, width }, hasMany, label, localized, maxLength, maxRows, minLength, minRows, required }, inputRef, readOnly: readOnlyFromTopLevelProps, validate } = props;
|
|
14
|
+
const { field, field: { name, _path: pathFromProps, admin: { className, description, placeholder, readOnly: readOnlyFromAdmin, rtl, style, width } = {}, hasMany, label, localized, maxLength, maxRows, minLength, minRows, required }, inputRef, readOnly: readOnlyFromTopLevelProps, validate } = props;
|
|
15
15
|
const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin;
|
|
16
16
|
const locale = useLocale();
|
|
17
17
|
const { config: { localization: localizationConfig } } = useConfig();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Text/index.tsx"],"sourcesContent":["'use client'\nimport type { TextFieldProps } from 'payload'\n\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { Option } from '../../elements/ReactSelect/types.js'\nimport type { TextInputProps } from './types.js'\n\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { isFieldRTL } from '../shared/index.js'\nimport { TextInput } from './Input.js'\nimport './index.scss'\n\nexport { TextInput, TextInputProps }\n\nconst TextFieldComponent: React.FC<TextFieldProps> = (props) => {\n const {\n field,\n field: {\n name,\n _path: pathFromProps,\n admin: {\n className,\n description,\n placeholder,\n readOnly: readOnlyFromAdmin,\n rtl,\n style,\n width,\n },\n hasMany,\n label,\n localized,\n maxLength,\n maxRows,\n minLength,\n minRows,\n required,\n },\n inputRef,\n readOnly: readOnlyFromTopLevelProps,\n validate,\n } = props\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const locale = useLocale()\n\n const {\n config: { localization: localizationConfig },\n } = useConfig()\n\n const memoizedValidate = useCallback(\n (value, options) => {\n if (typeof validate === 'function')\n return validate(value, { ...options, maxLength, minLength, required })\n },\n [validate, minLength, maxLength, required],\n )\n\n const { path: pathFromContext, readOnly: readOnlyFromContext } = useFieldProps()\n\n const { formInitializing, formProcessing, path, setValue, showError, value } = useField({\n path: pathFromContext ?? pathFromProps ?? name,\n validate: memoizedValidate,\n })\n\n const disabled = readOnlyFromProps || readOnlyFromContext || formProcessing || formInitializing\n\n const renderRTL = isFieldRTL({\n fieldLocalized: localized,\n fieldRTL: rtl,\n locale,\n localizationConfig: localizationConfig || undefined,\n })\n\n const [valueToRender, setValueToRender] = useState<\n { id: string; label: string; value: { value: number } }[]\n >([]) // Only for hasMany\n\n const handleHasManyChange = useCallback(\n (selectedOption) => {\n if (!disabled) {\n let newValue\n if (!selectedOption) {\n newValue = []\n } else if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => option.value?.value || option.value)\n } else {\n newValue = [selectedOption.value?.value || selectedOption.value]\n }\n\n setValue(newValue)\n }\n },\n [disabled, setValue],\n )\n\n // useEffect update valueToRender:\n useEffect(() => {\n if (hasMany && Array.isArray(value)) {\n setValueToRender(\n value.map((val, index) => {\n return {\n id: `${val}${index}`, // append index to avoid duplicate keys but allow duplicate numbers\n label: `${val}`,\n value: {\n // React-select automatically uses \"label-value\" as a key, so we will get that react duplicate key warning if we just pass in the value as multiple values can be the same. So we need to append the index to the toString() of the value to avoid that warning, as it uses that as the key.\n toString: () => `${val}${index}`,\n value: val?.value || val,\n },\n }\n }),\n )\n }\n }, [value, hasMany])\n\n return (\n <TextInput\n Description={field?.admin?.components?.Description}\n Error={field?.admin?.components?.Error}\n Label={field?.admin?.components?.Label}\n afterInput={field?.admin?.components?.afterInput}\n beforeInput={field?.admin?.components?.beforeInput}\n className={className}\n description={description}\n hasMany={hasMany}\n inputRef={inputRef}\n label={label}\n maxRows={maxRows}\n minRows={minRows}\n onChange={\n hasMany\n ? handleHasManyChange\n : (e) => {\n setValue(e.target.value)\n }\n }\n path={path}\n placeholder={placeholder}\n readOnly={disabled}\n required={required}\n rtl={renderRTL}\n showError={showError}\n style={style}\n value={(value as string) || ''}\n valueToRender={valueToRender as Option[]}\n width={width}\n />\n )\n}\n\nexport const TextField = withCondition(TextFieldComponent)\n"],"names":["React","useCallback","useEffect","useState","useFieldProps","useField","withCondition","useConfig","useLocale","isFieldRTL","TextInput","TextFieldComponent","props","field","name","_path","pathFromProps","admin","className","description","placeholder","readOnly","readOnlyFromAdmin","rtl","style","width","hasMany","label","localized","maxLength","maxRows","minLength","minRows","required","inputRef","readOnlyFromTopLevelProps","validate","readOnlyFromProps","locale","config","localization","localizationConfig","memoizedValidate","value","options","path","pathFromContext","readOnlyFromContext","formInitializing","formProcessing","setValue","showError","disabled","renderRTL","fieldLocalized","fieldRTL","undefined","valueToRender","setValueToRender","handleHasManyChange","selectedOption","newValue","Array","isArray","map","option","val","index","id","toString","Description","components","Error","Label","afterInput","beforeInput","onChange","e","target","TextField"],"mappings":"AAAA;;AAGA,OAAOA,SAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAK/D,SAASC,aAAa,QAAQ,0CAAyC;AACvE,SAASC,QAAQ,QAAQ,gCAA+B;AACxD,SAASC,aAAa,QAAQ,qCAAoC;AAClE,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,UAAU,QAAQ,qBAAoB;AAC/C,SAASC,SAAS,QAAQ,aAAY;AACtC,OAAO,eAAc;AAErB,SAASA,SAAS,GAAkB;AAEpC,MAAMC,qBAA+C,CAACC;IACpD,MAAM,EACJC,KAAK,EACLA,OAAO,EACLC,IAAI,EACJC,OAAOC,aAAa,EACpBC,OAAO,EACLC,SAAS,EACTC,WAAW,EACXC,WAAW,EACXC,UAAUC,iBAAiB,EAC3BC,GAAG,EACHC,KAAK,EACLC,KAAK,EACN,
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Text/index.tsx"],"sourcesContent":["'use client'\nimport type { TextFieldProps } from 'payload'\n\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { Option } from '../../elements/ReactSelect/types.js'\nimport type { TextInputProps } from './types.js'\n\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { isFieldRTL } from '../shared/index.js'\nimport { TextInput } from './Input.js'\nimport './index.scss'\n\nexport { TextInput, TextInputProps }\n\nconst TextFieldComponent: React.FC<TextFieldProps> = (props) => {\n const {\n field,\n field: {\n name,\n _path: pathFromProps,\n admin: {\n className,\n description,\n placeholder,\n readOnly: readOnlyFromAdmin,\n rtl,\n style,\n width,\n } = {},\n hasMany,\n label,\n localized,\n maxLength,\n maxRows,\n minLength,\n minRows,\n required,\n },\n inputRef,\n readOnly: readOnlyFromTopLevelProps,\n validate,\n } = props\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const locale = useLocale()\n\n const {\n config: { localization: localizationConfig },\n } = useConfig()\n\n const memoizedValidate = useCallback(\n (value, options) => {\n if (typeof validate === 'function')\n return validate(value, { ...options, maxLength, minLength, required })\n },\n [validate, minLength, maxLength, required],\n )\n\n const { path: pathFromContext, readOnly: readOnlyFromContext } = useFieldProps()\n\n const { formInitializing, formProcessing, path, setValue, showError, value } = useField({\n path: pathFromContext ?? pathFromProps ?? name,\n validate: memoizedValidate,\n })\n\n const disabled = readOnlyFromProps || readOnlyFromContext || formProcessing || formInitializing\n\n const renderRTL = isFieldRTL({\n fieldLocalized: localized,\n fieldRTL: rtl,\n locale,\n localizationConfig: localizationConfig || undefined,\n })\n\n const [valueToRender, setValueToRender] = useState<\n { id: string; label: string; value: { value: number } }[]\n >([]) // Only for hasMany\n\n const handleHasManyChange = useCallback(\n (selectedOption) => {\n if (!disabled) {\n let newValue\n if (!selectedOption) {\n newValue = []\n } else if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => option.value?.value || option.value)\n } else {\n newValue = [selectedOption.value?.value || selectedOption.value]\n }\n\n setValue(newValue)\n }\n },\n [disabled, setValue],\n )\n\n // useEffect update valueToRender:\n useEffect(() => {\n if (hasMany && Array.isArray(value)) {\n setValueToRender(\n value.map((val, index) => {\n return {\n id: `${val}${index}`, // append index to avoid duplicate keys but allow duplicate numbers\n label: `${val}`,\n value: {\n // React-select automatically uses \"label-value\" as a key, so we will get that react duplicate key warning if we just pass in the value as multiple values can be the same. So we need to append the index to the toString() of the value to avoid that warning, as it uses that as the key.\n toString: () => `${val}${index}`,\n value: val?.value || val,\n },\n }\n }),\n )\n }\n }, [value, hasMany])\n\n return (\n <TextInput\n Description={field?.admin?.components?.Description}\n Error={field?.admin?.components?.Error}\n Label={field?.admin?.components?.Label}\n afterInput={field?.admin?.components?.afterInput}\n beforeInput={field?.admin?.components?.beforeInput}\n className={className}\n description={description}\n hasMany={hasMany}\n inputRef={inputRef}\n label={label}\n maxRows={maxRows}\n minRows={minRows}\n onChange={\n hasMany\n ? handleHasManyChange\n : (e) => {\n setValue(e.target.value)\n }\n }\n path={path}\n placeholder={placeholder}\n readOnly={disabled}\n required={required}\n rtl={renderRTL}\n showError={showError}\n style={style}\n value={(value as string) || ''}\n valueToRender={valueToRender as Option[]}\n width={width}\n />\n )\n}\n\nexport const TextField = withCondition(TextFieldComponent)\n"],"names":["React","useCallback","useEffect","useState","useFieldProps","useField","withCondition","useConfig","useLocale","isFieldRTL","TextInput","TextFieldComponent","props","field","name","_path","pathFromProps","admin","className","description","placeholder","readOnly","readOnlyFromAdmin","rtl","style","width","hasMany","label","localized","maxLength","maxRows","minLength","minRows","required","inputRef","readOnlyFromTopLevelProps","validate","readOnlyFromProps","locale","config","localization","localizationConfig","memoizedValidate","value","options","path","pathFromContext","readOnlyFromContext","formInitializing","formProcessing","setValue","showError","disabled","renderRTL","fieldLocalized","fieldRTL","undefined","valueToRender","setValueToRender","handleHasManyChange","selectedOption","newValue","Array","isArray","map","option","val","index","id","toString","Description","components","Error","Label","afterInput","beforeInput","onChange","e","target","TextField"],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ import { TextareaInput } from './Input.js';
|
|
|
12
12
|
import './index.scss';
|
|
13
13
|
export { TextareaInput };
|
|
14
14
|
const TextareaFieldComponent = (props)=>{
|
|
15
|
-
const { field, field: { name, _path: pathFromProps, admin: { className, description, placeholder, readOnly: readOnlyFromAdmin, rows, rtl, style, width }, label, localized, maxLength, minLength, required }, locale, readOnly: readOnlyFromTopLevelProps, validate } = props;
|
|
15
|
+
const { field, field: { name, _path: pathFromProps, admin: { className, description, placeholder, readOnly: readOnlyFromAdmin, rows, rtl, style, width } = {}, label, localized, maxLength, minLength, required }, locale, readOnly: readOnlyFromTopLevelProps, validate } = props;
|
|
16
16
|
const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin;
|
|
17
17
|
const { i18n } = useTranslation();
|
|
18
18
|
const { config: { localization } } = useConfig();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Textarea/index.tsx"],"sourcesContent":["'use client'\nimport type { TextareaFieldProps, TextareaFieldValidation } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useCallback } from 'react'\n\nimport type { TextAreaInputProps } from './types.js'\n\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { isFieldRTL } from '../shared/index.js'\nimport { TextareaInput } from './Input.js'\nimport './index.scss'\n\nexport { TextAreaInputProps, TextareaInput }\n\nconst TextareaFieldComponent: React.FC<TextareaFieldProps> = (props) => {\n const {\n field,\n field: {\n name,\n _path: pathFromProps,\n admin: {\n className,\n description,\n placeholder,\n readOnly: readOnlyFromAdmin,\n rows,\n rtl,\n style,\n width,\n },\n label,\n localized,\n maxLength,\n minLength,\n required,\n },\n locale,\n readOnly: readOnlyFromTopLevelProps,\n validate,\n } = props\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const { i18n } = useTranslation()\n\n const {\n config: { localization },\n } = useConfig()\n\n const isRTL = isFieldRTL({\n fieldLocalized: localized,\n fieldRTL: rtl,\n locale,\n localizationConfig: localization || undefined,\n })\n\n const memoizedValidate: TextareaFieldValidation = useCallback(\n (value, options) => {\n if (typeof validate === 'function')\n return validate(value, { ...options, maxLength, minLength, required })\n },\n [validate, required, maxLength, minLength],\n )\n\n const { path: pathFromContext, readOnly: readOnlyFromContext } = useFieldProps()\n\n const { formInitializing, formProcessing, path, setValue, showError, value } = useField<string>({\n path: pathFromContext ?? pathFromProps ?? name,\n validate: memoizedValidate,\n })\n\n const disabled = readOnlyFromProps || readOnlyFromContext || formProcessing || formInitializing\n\n return (\n <TextareaInput\n Description={field?.admin?.components?.Description}\n Error={field?.admin?.components?.Error}\n Label={field?.admin?.components?.Label}\n afterInput={field?.admin?.components?.afterInput}\n beforeInput={field?.admin?.components?.beforeInput}\n className={className}\n description={description}\n label={label}\n onChange={(e) => {\n setValue(e.target.value)\n }}\n path={path}\n placeholder={getTranslation(placeholder, i18n)}\n readOnly={disabled}\n required={required}\n rows={rows}\n rtl={isRTL}\n showError={showError}\n style={style}\n value={value}\n width={width}\n />\n )\n}\n\nexport const TextareaField = withCondition(TextareaFieldComponent)\n"],"names":["getTranslation","React","useCallback","useFieldProps","useField","withCondition","useConfig","useTranslation","isFieldRTL","TextareaInput","TextareaFieldComponent","props","field","name","_path","pathFromProps","admin","className","description","placeholder","readOnly","readOnlyFromAdmin","rows","rtl","style","width","label","localized","maxLength","minLength","required","locale","readOnlyFromTopLevelProps","validate","readOnlyFromProps","i18n","config","localization","isRTL","fieldLocalized","fieldRTL","localizationConfig","undefined","memoizedValidate","value","options","path","pathFromContext","readOnlyFromContext","formInitializing","formProcessing","setValue","showError","disabled","Description","components","Error","Label","afterInput","beforeInput","onChange","e","target","TextareaField"],"mappings":"AAAA;;AAGA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,SAASC,WAAW,QAAQ,QAAO;AAI1C,SAASC,aAAa,QAAQ,0CAAyC;AACvE,SAASC,QAAQ,QAAQ,gCAA+B;AACxD,SAASC,aAAa,QAAQ,qCAAoC;AAClE,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,UAAU,QAAQ,qBAAoB;AAC/C,SAASC,aAAa,QAAQ,aAAY;AAC1C,OAAO,eAAc;AAErB,SAA6BA,aAAa,GAAE;AAE5C,MAAMC,yBAAuD,CAACC;IAC5D,MAAM,EACJC,KAAK,EACLA,OAAO,EACLC,IAAI,EACJC,OAAOC,aAAa,EACpBC,OAAO,EACLC,SAAS,EACTC,WAAW,EACXC,WAAW,EACXC,UAAUC,iBAAiB,EAC3BC,IAAI,EACJC,GAAG,EACHC,KAAK,EACLC,KAAK,EACN,
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Textarea/index.tsx"],"sourcesContent":["'use client'\nimport type { TextareaFieldProps, TextareaFieldValidation } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useCallback } from 'react'\n\nimport type { TextAreaInputProps } from './types.js'\n\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { isFieldRTL } from '../shared/index.js'\nimport { TextareaInput } from './Input.js'\nimport './index.scss'\n\nexport { TextAreaInputProps, TextareaInput }\n\nconst TextareaFieldComponent: React.FC<TextareaFieldProps> = (props) => {\n const {\n field,\n field: {\n name,\n _path: pathFromProps,\n admin: {\n className,\n description,\n placeholder,\n readOnly: readOnlyFromAdmin,\n rows,\n rtl,\n style,\n width,\n } = {},\n label,\n localized,\n maxLength,\n minLength,\n required,\n },\n locale,\n readOnly: readOnlyFromTopLevelProps,\n validate,\n } = props\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const { i18n } = useTranslation()\n\n const {\n config: { localization },\n } = useConfig()\n\n const isRTL = isFieldRTL({\n fieldLocalized: localized,\n fieldRTL: rtl,\n locale,\n localizationConfig: localization || undefined,\n })\n\n const memoizedValidate: TextareaFieldValidation = useCallback(\n (value, options) => {\n if (typeof validate === 'function')\n return validate(value, { ...options, maxLength, minLength, required })\n },\n [validate, required, maxLength, minLength],\n )\n\n const { path: pathFromContext, readOnly: readOnlyFromContext } = useFieldProps()\n\n const { formInitializing, formProcessing, path, setValue, showError, value } = useField<string>({\n path: pathFromContext ?? pathFromProps ?? name,\n validate: memoizedValidate,\n })\n\n const disabled = readOnlyFromProps || readOnlyFromContext || formProcessing || formInitializing\n\n return (\n <TextareaInput\n Description={field?.admin?.components?.Description}\n Error={field?.admin?.components?.Error}\n Label={field?.admin?.components?.Label}\n afterInput={field?.admin?.components?.afterInput}\n beforeInput={field?.admin?.components?.beforeInput}\n className={className}\n description={description}\n label={label}\n onChange={(e) => {\n setValue(e.target.value)\n }}\n path={path}\n placeholder={getTranslation(placeholder, i18n)}\n readOnly={disabled}\n required={required}\n rows={rows}\n rtl={isRTL}\n showError={showError}\n style={style}\n value={value}\n width={width}\n />\n )\n}\n\nexport const TextareaField = withCondition(TextareaFieldComponent)\n"],"names":["getTranslation","React","useCallback","useFieldProps","useField","withCondition","useConfig","useTranslation","isFieldRTL","TextareaInput","TextareaFieldComponent","props","field","name","_path","pathFromProps","admin","className","description","placeholder","readOnly","readOnlyFromAdmin","rows","rtl","style","width","label","localized","maxLength","minLength","required","locale","readOnlyFromTopLevelProps","validate","readOnlyFromProps","i18n","config","localization","isRTL","fieldLocalized","fieldRTL","localizationConfig","undefined","memoizedValidate","value","options","path","pathFromContext","readOnlyFromContext","formInitializing","formProcessing","setValue","showError","disabled","Description","components","Error","Label","afterInput","beforeInput","onChange","e","target","TextareaField"],"mappings":"AAAA;;AAGA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,SAASC,WAAW,QAAQ,QAAO;AAI1C,SAASC,aAAa,QAAQ,0CAAyC;AACvE,SAASC,QAAQ,QAAQ,gCAA+B;AACxD,SAASC,aAAa,QAAQ,qCAAoC;AAClE,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,UAAU,QAAQ,qBAAoB;AAC/C,SAASC,aAAa,QAAQ,aAAY;AAC1C,OAAO,eAAc;AAErB,SAA6BA,aAAa,GAAE;AAE5C,MAAMC,yBAAuD,CAACC;IAC5D,MAAM,EACJC,KAAK,EACLA,OAAO,EACLC,IAAI,EACJC,OAAOC,aAAa,EACpBC,OAAO,EACLC,SAAS,EACTC,WAAW,EACXC,WAAW,EACXC,UAAUC,iBAAiB,EAC3BC,IAAI,EACJC,GAAG,EACHC,KAAK,EACLC,KAAK,EACN,GAAG,CAAC,CAAC,EACNC,KAAK,EACLC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACT,EACDC,MAAM,EACNX,UAAUY,yBAAyB,EACnCC,QAAQ,EACT,GAAGtB;IACJ,MAAMuB,oBAAoBF,6BAA6BX;IAEvD,MAAM,EAAEc,IAAI,EAAE,GAAG5B;IAEjB,MAAM,EACJ6B,QAAQ,EAAEC,YAAY,EAAE,EACzB,GAAG/B;IAEJ,MAAMgC,QAAQ9B,WAAW;QACvB+B,gBAAgBZ;QAChBa,UAAUjB;QACVQ;QACAU,oBAAoBJ,gBAAgBK;IACtC;IAEA,MAAMC,mBAA4CzC,YAChD,CAAC0C,OAAOC;QACN,IAAI,OAAOZ,aAAa,YACtB,OAAOA,SAASW,OAAO;YAAE,GAAGC,OAAO;YAAEjB;YAAWC;YAAWC;QAAS;IACxE,GACA;QAACG;QAAUH;QAAUF;QAAWC;KAAU;IAG5C,MAAM,EAAEiB,MAAMC,eAAe,EAAE3B,UAAU4B,mBAAmB,EAAE,GAAG7C;IAEjE,MAAM,EAAE8C,gBAAgB,EAAEC,cAAc,EAAEJ,IAAI,EAAEK,QAAQ,EAAEC,SAAS,EAAER,KAAK,EAAE,GAAGxC,SAAiB;QAC9F0C,MAAMC,mBAAmBhC,iBAAiBF;QAC1CoB,UAAUU;IACZ;IAEA,MAAMU,WAAWnB,qBAAqBc,uBAAuBE,kBAAkBD;IAE/E,qBACE,KAACxC;QACC6C,aAAa1C,OAAOI,OAAOuC,YAAYD;QACvCE,OAAO5C,OAAOI,OAAOuC,YAAYC;QACjCC,OAAO7C,OAAOI,OAAOuC,YAAYE;QACjCC,YAAY9C,OAAOI,OAAOuC,YAAYG;QACtCC,aAAa/C,OAAOI,OAAOuC,YAAYI;QACvC1C,WAAWA;QACXC,aAAaA;QACbQ,OAAOA;QACPkC,UAAU,CAACC;YACTV,SAASU,EAAEC,MAAM,CAAClB,KAAK;QACzB;QACAE,MAAMA;QACN3B,aAAanB,eAAemB,aAAagB;QACzCf,UAAUiC;QACVvB,UAAUA;QACVR,MAAMA;QACNC,KAAKe;QACLc,WAAWA;QACX5B,OAAOA;QACPoB,OAAOA;QACPnB,OAAOA;;AAGb;AAEA,OAAO,MAAMsC,gBAAgB1D,cAAcK,wBAAuB"}
|
|
@@ -10,7 +10,7 @@ import { UploadInput } from './Input.js';
|
|
|
10
10
|
import './index.scss';
|
|
11
11
|
export { UploadInput };
|
|
12
12
|
const UploadComponent = (props)=>{
|
|
13
|
-
const { field, field: { _path: pathFromProps, admin: { className, readOnly: readOnlyFromAdmin, style, width }, label, relationTo, required }, readOnly: readOnlyFromTopLevelProps, validate } = props;
|
|
13
|
+
const { field, field: { _path: pathFromProps, admin: { className, readOnly: readOnlyFromAdmin, style, width } = {}, label, relationTo, required }, readOnly: readOnlyFromTopLevelProps, validate } = props;
|
|
14
14
|
const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin;
|
|
15
15
|
const { config: { collections, routes: { api: apiRoute }, serverURL } } = useConfig();
|
|
16
16
|
const { permissions } = useAuth();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Upload/index.tsx"],"sourcesContent":["'use client'\n\nimport type { UploadFieldProps } from 'payload'\n\nimport React, { useCallback, useMemo } from 'react'\n\nimport type { UploadInputProps } from './Input.js'\n\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { UploadInput } from './Input.js'\nimport './index.scss'\n\nexport { UploadFieldProps, UploadInput }\nexport type { UploadInputProps }\n\nconst UploadComponent: React.FC<UploadFieldProps> = (props) => {\n const {\n field,\n field: {\n _path: pathFromProps,\n admin: { className, readOnly: readOnlyFromAdmin, style, width },\n label,\n relationTo,\n required,\n },\n readOnly: readOnlyFromTopLevelProps,\n validate,\n } = props\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const {\n config: {\n collections,\n routes: { api: apiRoute },\n serverURL,\n },\n } = useConfig()\n\n const { permissions } = useAuth()\n\n const collection = collections.find((coll) => coll.slug === relationTo)\n\n const memoizedValidate = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, required })\n }\n },\n [validate, required],\n )\n\n const { path: pathFromContext, readOnly: readOnlyFromContext } = useFieldProps()\n\n // Checks if the user has permissions to create a new document in the related collection\n const canCreate = useMemo(() => {\n if (permissions?.collections && permissions.collections?.[relationTo]?.create) {\n if (permissions.collections[relationTo].create?.permission === true) {\n return true\n }\n }\n\n return false\n }, [relationTo, permissions])\n\n const { filterOptions, formInitializing, formProcessing, setValue, showError, value } =\n useField<string>({\n path: pathFromContext ?? pathFromProps,\n validate: memoizedValidate,\n })\n\n const disabled = readOnlyFromProps || readOnlyFromContext || formProcessing || formInitializing\n\n const onChange = useCallback(\n (incomingValue) => {\n const incomingID = incomingValue?.id || incomingValue\n setValue(incomingID)\n },\n [setValue],\n )\n\n if (collection.upload) {\n return (\n <UploadInput\n Description={field?.admin?.components?.Description}\n Error={field?.admin?.components?.Error}\n Label={field?.admin?.components?.Label}\n allowNewUpload={canCreate}\n api={apiRoute}\n className={className}\n collection={collection}\n filterOptions={filterOptions}\n label={label}\n onChange={onChange}\n readOnly={disabled}\n relationTo={relationTo}\n required={required}\n serverURL={serverURL}\n showError={showError}\n style={style}\n value={value}\n width={width}\n />\n )\n }\n\n return null\n}\n\nexport const UploadField = withCondition(UploadComponent)\n"],"names":["React","useCallback","useMemo","useFieldProps","useField","withCondition","useAuth","useConfig","UploadInput","UploadComponent","props","field","_path","pathFromProps","admin","className","readOnly","readOnlyFromAdmin","style","width","label","relationTo","required","readOnlyFromTopLevelProps","validate","readOnlyFromProps","config","collections","routes","api","apiRoute","serverURL","permissions","collection","find","coll","slug","memoizedValidate","value","options","path","pathFromContext","readOnlyFromContext","canCreate","create","permission","filterOptions","formInitializing","formProcessing","setValue","showError","disabled","onChange","incomingValue","incomingID","id","upload","Description","components","Error","Label","allowNewUpload","UploadField"],"mappings":"AAAA;;AAIA,OAAOA,SAASC,WAAW,EAAEC,OAAO,QAAQ,QAAO;AAInD,SAASC,aAAa,QAAQ,0CAAyC;AACvE,SAASC,QAAQ,QAAQ,gCAA+B;AACxD,SAASC,aAAa,QAAQ,qCAAoC;AAClE,SAASC,OAAO,QAAQ,gCAA+B;AACvD,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,WAAW,QAAQ,aAAY;AACxC,OAAO,eAAc;AAErB,SAA2BA,WAAW,GAAE;AAGxC,MAAMC,kBAA8C,CAACC;IACnD,MAAM,EACJC,KAAK,EACLA,OAAO,EACLC,OAAOC,aAAa,EACpBC,OAAO,EAAEC,SAAS,EAAEC,UAAUC,iBAAiB,EAAEC,KAAK,EAAEC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Upload/index.tsx"],"sourcesContent":["'use client'\n\nimport type { UploadFieldProps } from 'payload'\n\nimport React, { useCallback, useMemo } from 'react'\n\nimport type { UploadInputProps } from './Input.js'\n\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { UploadInput } from './Input.js'\nimport './index.scss'\n\nexport { UploadFieldProps, UploadInput }\nexport type { UploadInputProps }\n\nconst UploadComponent: React.FC<UploadFieldProps> = (props) => {\n const {\n field,\n field: {\n _path: pathFromProps,\n admin: { className, readOnly: readOnlyFromAdmin, style, width } = {},\n label,\n relationTo,\n required,\n },\n readOnly: readOnlyFromTopLevelProps,\n validate,\n } = props\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const {\n config: {\n collections,\n routes: { api: apiRoute },\n serverURL,\n },\n } = useConfig()\n\n const { permissions } = useAuth()\n\n const collection = collections.find((coll) => coll.slug === relationTo)\n\n const memoizedValidate = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, required })\n }\n },\n [validate, required],\n )\n\n const { path: pathFromContext, readOnly: readOnlyFromContext } = useFieldProps()\n\n // Checks if the user has permissions to create a new document in the related collection\n const canCreate = useMemo(() => {\n if (permissions?.collections && permissions.collections?.[relationTo]?.create) {\n if (permissions.collections[relationTo].create?.permission === true) {\n return true\n }\n }\n\n return false\n }, [relationTo, permissions])\n\n const { filterOptions, formInitializing, formProcessing, setValue, showError, value } =\n useField<string>({\n path: pathFromContext ?? pathFromProps,\n validate: memoizedValidate,\n })\n\n const disabled = readOnlyFromProps || readOnlyFromContext || formProcessing || formInitializing\n\n const onChange = useCallback(\n (incomingValue) => {\n const incomingID = incomingValue?.id || incomingValue\n setValue(incomingID)\n },\n [setValue],\n )\n\n if (collection.upload) {\n return (\n <UploadInput\n Description={field?.admin?.components?.Description}\n Error={field?.admin?.components?.Error}\n Label={field?.admin?.components?.Label}\n allowNewUpload={canCreate}\n api={apiRoute}\n className={className}\n collection={collection}\n filterOptions={filterOptions}\n label={label}\n onChange={onChange}\n readOnly={disabled}\n relationTo={relationTo}\n required={required}\n serverURL={serverURL}\n showError={showError}\n style={style}\n value={value}\n width={width}\n />\n )\n }\n\n return null\n}\n\nexport const UploadField = withCondition(UploadComponent)\n"],"names":["React","useCallback","useMemo","useFieldProps","useField","withCondition","useAuth","useConfig","UploadInput","UploadComponent","props","field","_path","pathFromProps","admin","className","readOnly","readOnlyFromAdmin","style","width","label","relationTo","required","readOnlyFromTopLevelProps","validate","readOnlyFromProps","config","collections","routes","api","apiRoute","serverURL","permissions","collection","find","coll","slug","memoizedValidate","value","options","path","pathFromContext","readOnlyFromContext","canCreate","create","permission","filterOptions","formInitializing","formProcessing","setValue","showError","disabled","onChange","incomingValue","incomingID","id","upload","Description","components","Error","Label","allowNewUpload","UploadField"],"mappings":"AAAA;;AAIA,OAAOA,SAASC,WAAW,EAAEC,OAAO,QAAQ,QAAO;AAInD,SAASC,aAAa,QAAQ,0CAAyC;AACvE,SAASC,QAAQ,QAAQ,gCAA+B;AACxD,SAASC,aAAa,QAAQ,qCAAoC;AAClE,SAASC,OAAO,QAAQ,gCAA+B;AACvD,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,WAAW,QAAQ,aAAY;AACxC,OAAO,eAAc;AAErB,SAA2BA,WAAW,GAAE;AAGxC,MAAMC,kBAA8C,CAACC;IACnD,MAAM,EACJC,KAAK,EACLA,OAAO,EACLC,OAAOC,aAAa,EACpBC,OAAO,EAAEC,SAAS,EAAEC,UAAUC,iBAAiB,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAG,CAAC,CAAC,EACpEC,KAAK,EACLC,UAAU,EACVC,QAAQ,EACT,EACDN,UAAUO,yBAAyB,EACnCC,QAAQ,EACT,GAAGd;IACJ,MAAMe,oBAAoBF,6BAA6BN;IAEvD,MAAM,EACJS,QAAQ,EACNC,WAAW,EACXC,QAAQ,EAAEC,KAAKC,QAAQ,EAAE,EACzBC,SAAS,EACV,EACF,GAAGxB;IAEJ,MAAM,EAAEyB,WAAW,EAAE,GAAG1B;IAExB,MAAM2B,aAAaN,YAAYO,IAAI,CAAC,CAACC,OAASA,KAAKC,IAAI,KAAKf;IAE5D,MAAMgB,mBAAmBpC,YACvB,CAACqC,OAAOC;QACN,IAAI,OAAOf,aAAa,YAAY;YAClC,OAAOA,SAASc,OAAO;gBAAE,GAAGC,OAAO;gBAAEjB;YAAS;QAChD;IACF,GACA;QAACE;QAAUF;KAAS;IAGtB,MAAM,EAAEkB,MAAMC,eAAe,EAAEzB,UAAU0B,mBAAmB,EAAE,GAAGvC;IAEjE,wFAAwF;IACxF,MAAMwC,YAAYzC,QAAQ;QACxB,IAAI8B,aAAaL,eAAeK,YAAYL,WAAW,EAAE,CAACN,WAAW,EAAEuB,QAAQ;YAC7E,IAAIZ,YAAYL,WAAW,CAACN,WAAW,CAACuB,MAAM,EAAEC,eAAe,MAAM;gBACnE,OAAO;YACT;QACF;QAEA,OAAO;IACT,GAAG;QAACxB;QAAYW;KAAY;IAE5B,MAAM,EAAEc,aAAa,EAAEC,gBAAgB,EAAEC,cAAc,EAAEC,QAAQ,EAAEC,SAAS,EAAEZ,KAAK,EAAE,GACnFlC,SAAiB;QACfoC,MAAMC,mBAAmB5B;QACzBW,UAAUa;IACZ;IAEF,MAAMc,WAAW1B,qBAAqBiB,uBAAuBM,kBAAkBD;IAE/E,MAAMK,WAAWnD,YACf,CAACoD;QACC,MAAMC,aAAaD,eAAeE,MAAMF;QACxCJ,SAASK;IACX,GACA;QAACL;KAAS;IAGZ,IAAIhB,WAAWuB,MAAM,EAAE;QACrB,qBACE,KAAChD;YACCiD,aAAa9C,OAAOG,OAAO4C,YAAYD;YACvCE,OAAOhD,OAAOG,OAAO4C,YAAYC;YACjCC,OAAOjD,OAAOG,OAAO4C,YAAYE;YACjCC,gBAAgBlB;YAChBd,KAAKC;YACLf,WAAWA;YACXkB,YAAYA;YACZa,eAAeA;YACf1B,OAAOA;YACPgC,UAAUA;YACVpC,UAAUmC;YACV9B,YAAYA;YACZC,UAAUA;YACVS,WAAWA;YACXmB,WAAWA;YACXhC,OAAOA;YACPoB,OAAOA;YACPnB,OAAOA;;IAGb;IAEA,OAAO;AACT;AAEA,OAAO,MAAM2C,cAAczD,cAAcI,iBAAgB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Root/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAK/E,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAsB9C,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,MAAM,EAAE,YAAY,CAAA;IACpB,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAA;IAClC,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAA;IACtD,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,eAAe,CAAA;IAChC,WAAW,EAAE,WAAW,CAAA;IACxB,0BAA0B,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,KAAK,EAAE,KAAK,CAAA;IACZ,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,CAAA;IACxC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Root/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAK/E,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAsB9C,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,MAAM,EAAE,YAAY,CAAA;IACpB,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAA;IAClC,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAA;IACtD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,eAAe,CAAA;IAChC,WAAW,EAAE,WAAW,CAAA;IACxB,0BAA0B,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,KAAK,EAAE,KAAK,CAAA;IACZ,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,CAAA;IACxC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA0ExC,CAAA"}
|
|
@@ -23,7 +23,7 @@ import { SearchParamsProvider } from '../SearchParams/index.js';
|
|
|
23
23
|
import { ThemeProvider } from '../Theme/index.js';
|
|
24
24
|
import { ToastContainer } from '../ToastContainer/index.js';
|
|
25
25
|
import { TranslationProvider } from '../Translation/index.js';
|
|
26
|
-
export const RootProvider = ({ children, config, dateFNSKey, fallbackLang, languageCode, languageOptions, permissions, switchLanguageServerAction, theme, translations, user })=>{
|
|
26
|
+
export const RootProvider = ({ children, config, dateFNSKey, fallbackLang, isNavOpen, languageCode, languageOptions, permissions, switchLanguageServerAction, theme, translations, user })=>{
|
|
27
27
|
return /*#__PURE__*/ _jsxs(Fragment, {
|
|
28
28
|
children: [
|
|
29
29
|
/*#__PURE__*/ _jsx(RouteCache, {
|
|
@@ -67,6 +67,7 @@ export const RootProvider = ({ children, config, dateFNSKey, fallbackLang, langu
|
|
|
67
67
|
children: /*#__PURE__*/ _jsx(DocumentEventsProvider, {
|
|
68
68
|
children: /*#__PURE__*/ _jsx(ActionsProvider, {
|
|
69
69
|
children: /*#__PURE__*/ _jsx(NavProvider, {
|
|
70
|
+
initialIsOpen: isNavOpen,
|
|
70
71
|
children: children
|
|
71
72
|
})
|
|
72
73
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/providers/Root/index.tsx"],"sourcesContent":["'use client'\nimport type { I18nClient, Language } from '@payloadcms/translations'\nimport type { ClientConfig, LanguageOptions, Permissions, User } from 'payload'\n\nimport { ModalContainer, ModalProvider } from '@faceless-ui/modal'\nimport { ScrollInfoProvider } from '@faceless-ui/scroll-info'\nimport { WindowInfoProvider } from '@faceless-ui/window-info'\nimport React, { Fragment } from 'react'\n\nimport type { Theme } from '../Theme/index.js'\n\nimport { LoadingOverlayProvider } from '../../elements/LoadingOverlay/index.js'\nimport { NavProvider } from '../../elements/Nav/context.js'\nimport { StayLoggedInModal } from '../../elements/StayLoggedIn/index.js'\nimport { StepNavProvider } from '../../elements/StepNav/index.js'\nimport { fieldComponents } from '../../fields/index.js'\nimport { ActionsProvider } from '../Actions/index.js'\nimport { AuthProvider } from '../Auth/index.js'\nimport { ClientFunctionProvider } from '../ClientFunction/index.js'\nimport { ConfigProvider } from '../Config/index.js'\nimport { DocumentEventsProvider } from '../DocumentEvents/index.js'\nimport { FieldComponentsProvider } from '../FieldComponents/index.js'\nimport { LocaleProvider } from '../Locale/index.js'\nimport { ParamsProvider } from '../Params/index.js'\nimport { PreferencesProvider } from '../Preferences/index.js'\nimport { RouteCache } from '../RouteCache/index.js'\nimport { SearchParamsProvider } from '../SearchParams/index.js'\nimport { ThemeProvider } from '../Theme/index.js'\nimport { ToastContainer } from '../ToastContainer/index.js'\nimport { TranslationProvider } from '../Translation/index.js'\n\ntype Props = {\n children: React.ReactNode\n config: ClientConfig\n dateFNSKey: Language['dateFNSKey']\n fallbackLang: ClientConfig['i18n']['fallbackLanguage']\n languageCode: string\n languageOptions: LanguageOptions\n permissions: Permissions\n switchLanguageServerAction?: (lang: string) => Promise<void>\n theme: Theme\n translations: I18nClient['translations']\n user: User | null\n}\n\nexport const RootProvider: React.FC<Props> = ({\n children,\n config,\n dateFNSKey,\n fallbackLang,\n languageCode,\n languageOptions,\n permissions,\n switchLanguageServerAction,\n theme,\n translations,\n user,\n}) => {\n return (\n <Fragment>\n <RouteCache>\n <ConfigProvider config={config}>\n <FieldComponentsProvider fieldComponents={fieldComponents}>\n <ClientFunctionProvider>\n <TranslationProvider\n dateFNSKey={dateFNSKey}\n fallbackLang={fallbackLang}\n language={languageCode}\n languageOptions={languageOptions}\n switchLanguageServerAction={switchLanguageServerAction}\n translations={translations}\n >\n <WindowInfoProvider\n breakpoints={{\n l: '(max-width: 1440px)',\n m: '(max-width: 1024px)',\n s: '(max-width: 768px)',\n xs: '(max-width: 400px)',\n }}\n >\n <ScrollInfoProvider>\n <SearchParamsProvider>\n <ModalProvider classPrefix=\"payload\" transTime={0} zIndex=\"var(--z-modal)\">\n <AuthProvider permissions={permissions} user={user}>\n <PreferencesProvider>\n <ThemeProvider cookiePrefix={config.cookiePrefix} theme={theme}>\n <ParamsProvider>\n <LocaleProvider>\n <StepNavProvider>\n <LoadingOverlayProvider>\n <DocumentEventsProvider>\n <ActionsProvider>\n <NavProvider
|
|
1
|
+
{"version":3,"sources":["../../../src/providers/Root/index.tsx"],"sourcesContent":["'use client'\nimport type { I18nClient, Language } from '@payloadcms/translations'\nimport type { ClientConfig, LanguageOptions, Permissions, User } from 'payload'\n\nimport { ModalContainer, ModalProvider } from '@faceless-ui/modal'\nimport { ScrollInfoProvider } from '@faceless-ui/scroll-info'\nimport { WindowInfoProvider } from '@faceless-ui/window-info'\nimport React, { Fragment } from 'react'\n\nimport type { Theme } from '../Theme/index.js'\n\nimport { LoadingOverlayProvider } from '../../elements/LoadingOverlay/index.js'\nimport { NavProvider } from '../../elements/Nav/context.js'\nimport { StayLoggedInModal } from '../../elements/StayLoggedIn/index.js'\nimport { StepNavProvider } from '../../elements/StepNav/index.js'\nimport { fieldComponents } from '../../fields/index.js'\nimport { ActionsProvider } from '../Actions/index.js'\nimport { AuthProvider } from '../Auth/index.js'\nimport { ClientFunctionProvider } from '../ClientFunction/index.js'\nimport { ConfigProvider } from '../Config/index.js'\nimport { DocumentEventsProvider } from '../DocumentEvents/index.js'\nimport { FieldComponentsProvider } from '../FieldComponents/index.js'\nimport { LocaleProvider } from '../Locale/index.js'\nimport { ParamsProvider } from '../Params/index.js'\nimport { PreferencesProvider } from '../Preferences/index.js'\nimport { RouteCache } from '../RouteCache/index.js'\nimport { SearchParamsProvider } from '../SearchParams/index.js'\nimport { ThemeProvider } from '../Theme/index.js'\nimport { ToastContainer } from '../ToastContainer/index.js'\nimport { TranslationProvider } from '../Translation/index.js'\n\ntype Props = {\n children: React.ReactNode\n config: ClientConfig\n dateFNSKey: Language['dateFNSKey']\n fallbackLang: ClientConfig['i18n']['fallbackLanguage']\n isNavOpen?: boolean\n languageCode: string\n languageOptions: LanguageOptions\n permissions: Permissions\n switchLanguageServerAction?: (lang: string) => Promise<void>\n theme: Theme\n translations: I18nClient['translations']\n user: User | null\n}\n\nexport const RootProvider: React.FC<Props> = ({\n children,\n config,\n dateFNSKey,\n fallbackLang,\n isNavOpen,\n languageCode,\n languageOptions,\n permissions,\n switchLanguageServerAction,\n theme,\n translations,\n user,\n}) => {\n return (\n <Fragment>\n <RouteCache>\n <ConfigProvider config={config}>\n <FieldComponentsProvider fieldComponents={fieldComponents}>\n <ClientFunctionProvider>\n <TranslationProvider\n dateFNSKey={dateFNSKey}\n fallbackLang={fallbackLang}\n language={languageCode}\n languageOptions={languageOptions}\n switchLanguageServerAction={switchLanguageServerAction}\n translations={translations}\n >\n <WindowInfoProvider\n breakpoints={{\n l: '(max-width: 1440px)',\n m: '(max-width: 1024px)',\n s: '(max-width: 768px)',\n xs: '(max-width: 400px)',\n }}\n >\n <ScrollInfoProvider>\n <SearchParamsProvider>\n <ModalProvider classPrefix=\"payload\" transTime={0} zIndex=\"var(--z-modal)\">\n <AuthProvider permissions={permissions} user={user}>\n <PreferencesProvider>\n <ThemeProvider cookiePrefix={config.cookiePrefix} theme={theme}>\n <ParamsProvider>\n <LocaleProvider>\n <StepNavProvider>\n <LoadingOverlayProvider>\n <DocumentEventsProvider>\n <ActionsProvider>\n <NavProvider initialIsOpen={isNavOpen}>\n {children}\n </NavProvider>\n </ActionsProvider>\n </DocumentEventsProvider>\n </LoadingOverlayProvider>\n </StepNavProvider>\n </LocaleProvider>\n </ParamsProvider>\n </ThemeProvider>\n </PreferencesProvider>\n <ModalContainer />\n <StayLoggedInModal />\n </AuthProvider>\n </ModalProvider>\n </SearchParamsProvider>\n </ScrollInfoProvider>\n </WindowInfoProvider>\n </TranslationProvider>\n </ClientFunctionProvider>\n </FieldComponentsProvider>\n </ConfigProvider>\n </RouteCache>\n <ToastContainer />\n </Fragment>\n )\n}\n"],"names":["ModalContainer","ModalProvider","ScrollInfoProvider","WindowInfoProvider","React","Fragment","LoadingOverlayProvider","NavProvider","StayLoggedInModal","StepNavProvider","fieldComponents","ActionsProvider","AuthProvider","ClientFunctionProvider","ConfigProvider","DocumentEventsProvider","FieldComponentsProvider","LocaleProvider","ParamsProvider","PreferencesProvider","RouteCache","SearchParamsProvider","ThemeProvider","ToastContainer","TranslationProvider","RootProvider","children","config","dateFNSKey","fallbackLang","isNavOpen","languageCode","languageOptions","permissions","switchLanguageServerAction","theme","translations","user","language","breakpoints","l","m","s","xs","classPrefix","transTime","zIndex","cookiePrefix","initialIsOpen"],"mappings":"AAAA;;AAIA,SAASA,cAAc,EAAEC,aAAa,QAAQ,qBAAoB;AAClE,SAASC,kBAAkB,QAAQ,2BAA0B;AAC7D,SAASC,kBAAkB,QAAQ,2BAA0B;AAC7D,OAAOC,SAASC,QAAQ,QAAQ,QAAO;AAIvC,SAASC,sBAAsB,QAAQ,yCAAwC;AAC/E,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,eAAe,QAAQ,kCAAiC;AACjE,SAASC,eAAe,QAAQ,wBAAuB;AACvD,SAASC,eAAe,QAAQ,sBAAqB;AACrD,SAASC,YAAY,QAAQ,mBAAkB;AAC/C,SAASC,sBAAsB,QAAQ,6BAA4B;AACnE,SAASC,cAAc,QAAQ,qBAAoB;AACnD,SAASC,sBAAsB,QAAQ,6BAA4B;AACnE,SAASC,uBAAuB,QAAQ,8BAA6B;AACrE,SAASC,cAAc,QAAQ,qBAAoB;AACnD,SAASC,cAAc,QAAQ,qBAAoB;AACnD,SAASC,mBAAmB,QAAQ,0BAAyB;AAC7D,SAASC,UAAU,QAAQ,yBAAwB;AACnD,SAASC,oBAAoB,QAAQ,2BAA0B;AAC/D,SAASC,aAAa,QAAQ,oBAAmB;AACjD,SAASC,cAAc,QAAQ,6BAA4B;AAC3D,SAASC,mBAAmB,QAAQ,0BAAyB;AAiB7D,OAAO,MAAMC,eAAgC,CAAC,EAC5CC,QAAQ,EACRC,MAAM,EACNC,UAAU,EACVC,YAAY,EACZC,SAAS,EACTC,YAAY,EACZC,eAAe,EACfC,WAAW,EACXC,0BAA0B,EAC1BC,KAAK,EACLC,YAAY,EACZC,IAAI,EACL;IACC,qBACE,MAAChC;;0BACC,KAACe;0BACC,cAAA,KAACN;oBAAea,QAAQA;8BACtB,cAAA,KAACX;wBAAwBN,iBAAiBA;kCACxC,cAAA,KAACG;sCACC,cAAA,KAACW;gCACCI,YAAYA;gCACZC,cAAcA;gCACdS,UAAUP;gCACVC,iBAAiBA;gCACjBE,4BAA4BA;gCAC5BE,cAAcA;0CAEd,cAAA,KAACjC;oCACCoC,aAAa;wCACXC,GAAG;wCACHC,GAAG;wCACHC,GAAG;wCACHC,IAAI;oCACN;8CAEA,cAAA,KAACzC;kDACC,cAAA,KAACmB;sDACC,cAAA,KAACpB;gDAAc2C,aAAY;gDAAUC,WAAW;gDAAGC,QAAO;0DACxD,cAAA,MAAClC;oDAAaqB,aAAaA;oDAAaI,MAAMA;;sEAC5C,KAAClB;sEACC,cAAA,KAACG;gEAAcyB,cAAcpB,OAAOoB,YAAY;gEAAEZ,OAAOA;0EACvD,cAAA,KAACjB;8EACC,cAAA,KAACD;kFACC,cAAA,KAACR;sFACC,cAAA,KAACH;0FACC,cAAA,KAACS;8FACC,cAAA,KAACJ;kGACC,cAAA,KAACJ;4FAAYyC,eAAelB;sGACzBJ;;;;;;;;;;sEAUnB,KAAC1B;sEACD,KAACQ;;;;;;;;;;;;0BAWrB,KAACe;;;AAGP,EAAC"}
|