@payloadcms/ui 3.0.0-beta.33 → 3.0.0-beta.35
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/EditUpload/index.d.ts +2 -4
- package/dist/elements/EditUpload/index.d.ts.map +1 -1
- package/dist/elements/EditUpload/index.js +19 -16
- package/dist/elements/EditUpload/index.js.map +1 -1
- package/dist/elements/Save/index.d.ts.map +1 -1
- package/dist/elements/Save/index.js +3 -1
- package/dist/elements/Save/index.js.map +1 -1
- package/dist/elements/SaveDraft/index.d.ts.map +1 -1
- package/dist/elements/SaveDraft/index.js +3 -1
- package/dist/elements/SaveDraft/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Relationship/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Relationship/index.js +8 -0
- package/dist/elements/Table/DefaultCell/fields/Relationship/index.js.map +1 -1
- package/dist/elements/Tooltip/index.d.ts +4 -0
- package/dist/elements/Tooltip/index.d.ts.map +1 -1
- package/dist/elements/Tooltip/index.js +10 -5
- package/dist/elements/Tooltip/index.js.map +1 -1
- package/dist/elements/Tooltip/index.scss +5 -3
- package/dist/elements/Upload/index.d.ts.map +1 -1
- package/dist/elements/Upload/index.js +8 -7
- package/dist/elements/Upload/index.js.map +1 -1
- package/dist/fields/Array/index.d.ts.map +1 -1
- package/dist/fields/Array/index.js +2 -4
- package/dist/fields/Array/index.js.map +1 -1
- package/dist/fields/Array/index.scss +0 -4
- package/dist/fields/Blocks/index.d.ts.map +1 -1
- package/dist/fields/Blocks/index.js +2 -4
- package/dist/fields/Blocks/index.js.map +1 -1
- package/dist/fields/Blocks/index.scss +0 -4
- package/dist/fields/Checkbox/index.d.ts.map +1 -1
- package/dist/fields/Checkbox/index.js +1 -3
- package/dist/fields/Checkbox/index.js.map +1 -1
- package/dist/fields/Checkbox/index.scss +0 -4
- package/dist/fields/Code/index.js +8 -6
- package/dist/fields/Code/index.js.map +1 -1
- package/dist/fields/ConfirmPassword/index.d.ts.map +1 -1
- package/dist/fields/ConfirmPassword/index.js +6 -4
- package/dist/fields/ConfirmPassword/index.js.map +1 -1
- package/dist/fields/DateTime/index.d.ts.map +1 -1
- package/dist/fields/DateTime/index.js +7 -9
- package/dist/fields/DateTime/index.js.map +1 -1
- package/dist/fields/DateTime/index.scss +0 -6
- package/dist/fields/Email/index.js +8 -6
- package/dist/fields/Email/index.js.map +1 -1
- package/dist/fields/JSON/index.d.ts.map +1 -1
- package/dist/fields/JSON/index.js +12 -6
- package/dist/fields/JSON/index.js.map +1 -1
- package/dist/fields/Number/index.d.ts.map +1 -1
- package/dist/fields/Number/index.js +4 -2
- package/dist/fields/Number/index.js.map +1 -1
- package/dist/fields/Password/index.d.ts.map +1 -1
- package/dist/fields/Password/index.js +8 -6
- package/dist/fields/Password/index.js.map +1 -1
- package/dist/fields/RadioGroup/index.d.ts.map +1 -1
- package/dist/fields/RadioGroup/index.js +8 -8
- package/dist/fields/RadioGroup/index.js.map +1 -1
- package/dist/fields/RadioGroup/index.scss +0 -4
- package/dist/fields/Relationship/index.d.ts.map +1 -1
- package/dist/fields/Relationship/index.js +15 -14
- package/dist/fields/Relationship/index.js.map +1 -1
- package/dist/fields/Select/index.d.ts.map +1 -1
- package/dist/fields/Select/index.js +12 -6
- package/dist/fields/Select/index.js.map +1 -1
- package/dist/fields/Text/Input.d.ts.map +1 -1
- package/dist/fields/Text/Input.js +8 -6
- package/dist/fields/Text/Input.js.map +1 -1
- package/dist/fields/Textarea/Input.d.ts.map +1 -1
- package/dist/fields/Textarea/Input.js +8 -6
- package/dist/fields/Textarea/Input.js.map +1 -1
- package/dist/fields/Upload/Input.d.ts.map +1 -1
- package/dist/fields/Upload/Input.js +7 -5
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/forms/FieldError/index.js +3 -2
- package/dist/forms/FieldError/index.js.map +1 -1
- package/dist/forms/FieldError/index.scss +1 -2
- package/dist/forms/RenderFields/index.scss +5 -0
- package/dist/hooks/useIntersect.js +1 -1
- package/dist/hooks/useIntersect.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { PaginatedDocs } from 'payload/database'\nimport type { Where } from 'payload/types'\n\nimport { wordBoundariesRegex } from 'payload/utilities'\nimport qs from 'qs'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\n\nimport type { DocumentDrawerProps } from '../../elements/DocumentDrawer/types.js'\nimport type { GetResults, Option, RelationshipFieldProps, Value } from './types.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { FieldDescription } from '../../forms/FieldDescription/index.js'\nimport { FieldError } from '../../forms/FieldError/index.js'\nimport { FieldLabel } from '../../forms/FieldLabel/index.js'\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { useFormProcessing } from '../../forms/Form/context.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 { 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\nexport { RelationshipFieldProps }\n\nconst RelationshipField: React.FC<RelationshipFieldProps> = (props) => {\n const {\n name,\n CustomDescription,\n CustomError,\n CustomLabel,\n allowCreate = true,\n className,\n descriptionProps,\n errorProps,\n hasMany,\n isSortable = true,\n label,\n labelProps,\n path: pathFromProps,\n readOnly: readOnlyFromProps,\n relationTo,\n required,\n sortOptions,\n style,\n validate,\n width,\n } = props\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 formProcessing = useFormProcessing()\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 const readOnly = readOnlyFromProps || readOnlyFromContext\n\n const { filterOptions, initialValue, path, setValue, showError, value } = useField<\n Value | Value[]\n >({\n path: pathFromContext || pathFromProps || name,\n validate: memoizedValidate,\n })\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 let fieldToSearch = collection?.defaultSort || collection?.admin?.useAsTitle || 'id'\n if (!searchArg) {\n if (typeof sortOptions === 'string') {\n fieldToSearch = sortOptions\n } else if (sortOptions?.[relation]) {\n fieldToSearch = sortOptions[relation]\n }\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: fieldToSearch,\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}?${qs.stringify(query)}`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\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}?${qs.stringify(query)}`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\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 ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n style={{\n ...style,\n width,\n }}\n >\n <FieldError CustomError={CustomError} path={path} {...(errorProps || {})} />\n <FieldLabel\n CustomLabel={CustomLabel}\n label={label}\n required={required}\n {...(labelProps || {})}\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 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) {\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) {\n setValue({\n relationTo: selected.relationTo,\n value: selected.value,\n })\n } else {\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 {CustomDescription !== undefined ? (\n CustomDescription\n ) : (\n <FieldDescription {...(descriptionProps || {})} />\n )}\n </div>\n )\n}\n\nexport const Relationship = withCondition(RelationshipField)\n"],"names":["wordBoundariesRegex","qs","React","useCallback","useEffect","useReducer","useRef","useState","ReactSelect","FieldDescription","FieldError","FieldLabel","useFieldProps","useFormProcessing","useField","withCondition","useDebouncedCallback","useAuth","useConfig","useLocale","useTranslation","fieldBaseClass","AddNewRelation","createRelationMap","findOptionsByValue","optionsReducer","MultiValueLabel","SingleValue","maxResultsPerRequest","baseClass","RelationshipField","props","name","CustomDescription","CustomError","CustomLabel","allowCreate","className","descriptionProps","errorProps","hasMany","isSortable","label","labelProps","path","pathFromProps","readOnly","readOnlyFromProps","relationTo","required","sortOptions","style","validate","width","config","collections","routes","api","serverURL","i18n","t","permissions","code","locale","formProcessing","hasMultipleRelations","Array","isArray","options","dispatchOptions","lastFullyLoadedRelation","setLastFullyLoadedRelation","lastLoadedPage","setLastLoadedPage","errorLoading","setErrorLoading","search","setSearch","isLoading","setIsLoading","enableWordBoundarySearch","setEnableWordBoundarySearch","menuIsOpen","hasLoadedFirstPageRef","memoizedValidate","value","validationOptions","pathFromContext","readOnlyFromContext","filterOptions","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","defaultSort","admin","useAsTitle","query","depth","draft","limit","page","where","and","id","not_in","push","like","response","fetch","stringify","credentials","headers","language","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","backspaceRemovesValue","components","customProps","disableKeyDown","disableMouseDown","disabled","undefined","isMulti","onChange","selected","map","onInputChange","newSearch","onMenuClose","onMenuOpen","onMenuScrollToBottom","Relationship"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { PaginatedDocs } from 'payload/database'\nimport type { Where } from 'payload/types'\n\nimport { wordBoundariesRegex } from 'payload/utilities'\nimport qs from 'qs'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\n\nimport type { DocumentDrawerProps } from '../../elements/DocumentDrawer/types.js'\nimport type { GetResults, Option, RelationshipFieldProps, Value } from './types.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { FieldDescription } from '../../forms/FieldDescription/index.js'\nimport { FieldError } from '../../forms/FieldError/index.js'\nimport { FieldLabel } from '../../forms/FieldLabel/index.js'\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { useFormProcessing } from '../../forms/Form/context.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 { 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\nexport { RelationshipFieldProps }\n\nconst RelationshipField: React.FC<RelationshipFieldProps> = (props) => {\n const {\n name,\n CustomDescription,\n CustomError,\n CustomLabel,\n allowCreate = true,\n className,\n descriptionProps,\n errorProps,\n hasMany,\n isSortable = true,\n label,\n labelProps,\n path: pathFromProps,\n readOnly: readOnlyFromProps,\n relationTo,\n required,\n sortOptions,\n style,\n validate,\n width,\n } = props\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 formProcessing = useFormProcessing()\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 const readOnly = readOnlyFromProps || readOnlyFromContext\n\n const { filterOptions, initialValue, path, setValue, showError, value } = useField<\n Value | Value[]\n >({\n path: pathFromContext || pathFromProps || name,\n validate: memoizedValidate,\n })\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}?${qs.stringify(query)}`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\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}?${qs.stringify(query)}`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\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 ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n style={{\n ...style,\n width,\n }}\n >\n <FieldLabel\n CustomLabel={CustomLabel}\n label={label}\n required={required}\n {...(labelProps || {})}\n />\n <div className={`${fieldBaseClass}__wrap`}>\n <FieldError CustomError={CustomError} path={path} {...(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 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) {\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) {\n setValue({\n relationTo: selected.relationTo,\n value: selected.value,\n })\n } else {\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 {CustomDescription !== undefined ? (\n CustomDescription\n ) : (\n <FieldDescription {...(descriptionProps || {})} />\n )}\n </div>\n </div>\n )\n}\n\nexport const Relationship = withCondition(RelationshipField)\n"],"names":["wordBoundariesRegex","qs","React","useCallback","useEffect","useReducer","useRef","useState","ReactSelect","FieldDescription","FieldError","FieldLabel","useFieldProps","useFormProcessing","useField","withCondition","useDebouncedCallback","useAuth","useConfig","useLocale","useTranslation","fieldBaseClass","AddNewRelation","createRelationMap","findOptionsByValue","optionsReducer","MultiValueLabel","SingleValue","maxResultsPerRequest","baseClass","RelationshipField","props","name","CustomDescription","CustomError","CustomLabel","allowCreate","className","descriptionProps","errorProps","hasMany","isSortable","label","labelProps","path","pathFromProps","readOnly","readOnlyFromProps","relationTo","required","sortOptions","style","validate","width","config","collections","routes","api","serverURL","i18n","t","permissions","code","locale","formProcessing","hasMultipleRelations","Array","isArray","options","dispatchOptions","lastFullyLoadedRelation","setLastFullyLoadedRelation","lastLoadedPage","setLastLoadedPage","errorLoading","setErrorLoading","search","setSearch","isLoading","setIsLoading","enableWordBoundarySearch","setEnableWordBoundarySearch","menuIsOpen","hasLoadedFirstPageRef","memoizedValidate","value","validationOptions","pathFromContext","readOnlyFromContext","filterOptions","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","admin","useAsTitle","fieldToSort","defaultSort","query","depth","draft","limit","page","where","and","id","not_in","push","like","response","fetch","stringify","credentials","headers","language","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","backspaceRemovesValue","components","customProps","disableKeyDown","disableMouseDown","disabled","undefined","isMulti","onChange","selected","map","onInputChange","newSearch","onMenuClose","onMenuOpen","onMenuScrollToBottom","Relationship"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Select/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,MAAM,EAAgB,MAAM,eAAe,CAAA;AAGzE,OAAO,KAAgC,MAAM,OAAO,CAAA;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAWvD,OAAO,cAAc,CAAA;AAErB,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Select/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,MAAM,EAAgB,MAAM,eAAe,CAAA;AAGzE,OAAO,KAAgC,MAAM,OAAO,CAAA;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAWvD,OAAO,cAAc,CAAA;AAErB,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AA2JD,eAAO,MAAM,MAAM,4BAA6B,CAAA"}
|
|
@@ -96,16 +96,22 @@ const SelectField = (props)=>{
|
|
|
96
96
|
...style,
|
|
97
97
|
width
|
|
98
98
|
}
|
|
99
|
-
}, /*#__PURE__*/ React.createElement(
|
|
100
|
-
CustomError: CustomError,
|
|
101
|
-
path: path,
|
|
102
|
-
...errorProps || {}
|
|
103
|
-
}), /*#__PURE__*/ React.createElement(FieldLabel, {
|
|
99
|
+
}, /*#__PURE__*/ React.createElement(FieldLabel, {
|
|
104
100
|
CustomLabel: CustomLabel,
|
|
105
101
|
label: label,
|
|
106
102
|
required: required,
|
|
107
103
|
...labelProps || {}
|
|
108
|
-
}), /*#__PURE__*/ React.createElement(
|
|
104
|
+
}), /*#__PURE__*/ React.createElement(FieldError, {
|
|
105
|
+
CustomError: CustomError,
|
|
106
|
+
path: path,
|
|
107
|
+
...errorProps || {}
|
|
108
|
+
}), /*#__PURE__*/ React.createElement("div", {
|
|
109
|
+
className: `${fieldBaseClass}__wrap`
|
|
110
|
+
}, /*#__PURE__*/ React.createElement(FieldError, {
|
|
111
|
+
CustomError: CustomError,
|
|
112
|
+
path: path,
|
|
113
|
+
...errorProps || {}
|
|
114
|
+
}), BeforeInput, /*#__PURE__*/ React.createElement(ReactSelect, {
|
|
109
115
|
disabled: readOnly,
|
|
110
116
|
isClearable: isClearable,
|
|
111
117
|
isMulti: hasMany,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Select/index.tsx"],"sourcesContent":["/* eslint-disable react/destructuring-assignment */\n'use client'\nimport type { ClientValidate, Option, OptionObject } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useCallback, useState } from 'react'\n\nimport type { FormFieldBase } from '../shared/index.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { FieldDescription } from '../../forms/FieldDescription/index.js'\nimport { FieldError } from '../../forms/FieldError/index.js'\nimport { FieldLabel } from '../../forms/FieldLabel/index.js'\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\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\nexport type SelectFieldProps = FormFieldBase & {\n hasMany?: boolean\n isClearable?: boolean\n isSortable?: boolean\n name?: string\n onChange?: (e: string) => void\n options?: Option[]\n path?: string\n value?: string\n width?: string\n}\n\nconst formatOptions = (options: Option[]): OptionObject[] =>\n options.map((option) => {\n if (typeof option === 'object' && (option.value || option.value === '')) {\n return option\n }\n\n return {\n label: option,\n value: option,\n } as OptionObject\n })\n\nconst SelectField: React.FC<SelectFieldProps> = (props) => {\n const {\n name,\n AfterInput,\n BeforeInput,\n CustomDescription,\n CustomError,\n CustomLabel,\n className,\n descriptionProps,\n errorProps,\n hasMany = false,\n isClearable = true,\n isSortable = true,\n label,\n labelProps,\n onChange: onChangeFromProps,\n options: optionsFromProps = [],\n path: pathFromProps,\n readOnly: readOnlyFromProps,\n required,\n style,\n validate,\n width,\n } = props\n\n const { i18n } = useTranslation()\n\n const [options] = useState(formatOptions(optionsFromProps))\n\n const memoizedValidate: ClientValidate = useCallback(\n (value, validationOptions) => {\n if (typeof validate === 'function')\n return validate(value, { ...validationOptions, hasMany, options, required })\n },\n [validate, required, hasMany, options],\n )\n\n const { path: pathFromContext, readOnly: readOnlyFromContext } = useFieldProps()\n const readOnly = readOnlyFromProps || readOnlyFromContext\n\n const { path, setValue, showError, value } = useField({\n path: pathFromContext || pathFromProps || name,\n validate: memoizedValidate,\n })\n\n let valueToRender\n\n if (hasMany && Array.isArray(value)) {\n valueToRender = value.map((val) => {\n const matchingOption = options.find((option) => option.value === val)\n return {\n label: matchingOption ? getTranslation(matchingOption.label, i18n) : val,\n value: matchingOption?.value ?? val,\n }\n })\n } else if (value) {\n const matchingOption = options.find((option) => option.value === value)\n valueToRender = {\n label: matchingOption ? getTranslation(matchingOption.label, i18n) : value,\n value: matchingOption?.value ?? value,\n }\n }\n\n const onChange = useCallback(\n (selectedOption) => {\n if (!readOnly) {\n let newValue\n if (!selectedOption) {\n newValue = null\n } else if (hasMany) {\n if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => option.value)\n } else {\n newValue = []\n }\n } else {\n newValue = selectedOption.value\n }\n\n if (typeof onChangeFromProps === 'function') {\n onChangeFromProps(newValue)\n }\n\n setValue(newValue)\n }\n },\n [readOnly, hasMany, setValue, onChangeFromProps],\n )\n\n return (\n <div\n className={[\n fieldBaseClass,\n 'select',\n className,\n showError && 'error',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n style={{\n ...style,\n width,\n }}\n >\n <FieldError CustomError={CustomError} path={path} {...(errorProps || {})} />\n <
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Select/index.tsx"],"sourcesContent":["/* eslint-disable react/destructuring-assignment */\n'use client'\nimport type { ClientValidate, Option, OptionObject } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useCallback, useState } from 'react'\n\nimport type { FormFieldBase } from '../shared/index.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { FieldDescription } from '../../forms/FieldDescription/index.js'\nimport { FieldError } from '../../forms/FieldError/index.js'\nimport { FieldLabel } from '../../forms/FieldLabel/index.js'\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\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\nexport type SelectFieldProps = FormFieldBase & {\n hasMany?: boolean\n isClearable?: boolean\n isSortable?: boolean\n name?: string\n onChange?: (e: string) => void\n options?: Option[]\n path?: string\n value?: string\n width?: string\n}\n\nconst formatOptions = (options: Option[]): OptionObject[] =>\n options.map((option) => {\n if (typeof option === 'object' && (option.value || option.value === '')) {\n return option\n }\n\n return {\n label: option,\n value: option,\n } as OptionObject\n })\n\nconst SelectField: React.FC<SelectFieldProps> = (props) => {\n const {\n name,\n AfterInput,\n BeforeInput,\n CustomDescription,\n CustomError,\n CustomLabel,\n className,\n descriptionProps,\n errorProps,\n hasMany = false,\n isClearable = true,\n isSortable = true,\n label,\n labelProps,\n onChange: onChangeFromProps,\n options: optionsFromProps = [],\n path: pathFromProps,\n readOnly: readOnlyFromProps,\n required,\n style,\n validate,\n width,\n } = props\n\n const { i18n } = useTranslation()\n\n const [options] = useState(formatOptions(optionsFromProps))\n\n const memoizedValidate: ClientValidate = useCallback(\n (value, validationOptions) => {\n if (typeof validate === 'function')\n return validate(value, { ...validationOptions, hasMany, options, required })\n },\n [validate, required, hasMany, options],\n )\n\n const { path: pathFromContext, readOnly: readOnlyFromContext } = useFieldProps()\n const readOnly = readOnlyFromProps || readOnlyFromContext\n\n const { path, setValue, showError, value } = useField({\n path: pathFromContext || pathFromProps || name,\n validate: memoizedValidate,\n })\n\n let valueToRender\n\n if (hasMany && Array.isArray(value)) {\n valueToRender = value.map((val) => {\n const matchingOption = options.find((option) => option.value === val)\n return {\n label: matchingOption ? getTranslation(matchingOption.label, i18n) : val,\n value: matchingOption?.value ?? val,\n }\n })\n } else if (value) {\n const matchingOption = options.find((option) => option.value === value)\n valueToRender = {\n label: matchingOption ? getTranslation(matchingOption.label, i18n) : value,\n value: matchingOption?.value ?? value,\n }\n }\n\n const onChange = useCallback(\n (selectedOption) => {\n if (!readOnly) {\n let newValue\n if (!selectedOption) {\n newValue = null\n } else if (hasMany) {\n if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => option.value)\n } else {\n newValue = []\n }\n } else {\n newValue = selectedOption.value\n }\n\n if (typeof onChangeFromProps === 'function') {\n onChangeFromProps(newValue)\n }\n\n setValue(newValue)\n }\n },\n [readOnly, hasMany, setValue, onChangeFromProps],\n )\n\n return (\n <div\n className={[\n fieldBaseClass,\n 'select',\n className,\n showError && 'error',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n style={{\n ...style,\n width,\n }}\n >\n <FieldLabel\n CustomLabel={CustomLabel}\n label={label}\n required={required}\n {...(labelProps || {})}\n />\n <FieldError CustomError={CustomError} path={path} {...(errorProps || {})} />\n <div className={`${fieldBaseClass}__wrap`}>\n <FieldError CustomError={CustomError} path={path} {...(errorProps || {})} />\n {BeforeInput}\n <ReactSelect\n disabled={readOnly}\n isClearable={isClearable}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={onChange}\n options={options.map((option) => ({\n ...option,\n label: getTranslation(option.label, i18n),\n }))}\n showError={showError}\n value={valueToRender as OptionObject}\n />\n {AfterInput}\n </div>\n {CustomDescription !== undefined ? (\n CustomDescription\n ) : (\n <FieldDescription {...(descriptionProps || {})} />\n )}\n </div>\n )\n}\n\nexport const Select = withCondition(SelectField)\n"],"names":["getTranslation","React","useCallback","useState","ReactSelect","FieldDescription","FieldError","FieldLabel","useFieldProps","useField","withCondition","useTranslation","fieldBaseClass","formatOptions","options","map","option","value","label","SelectField","props","name","AfterInput","BeforeInput","CustomDescription","CustomError","CustomLabel","className","descriptionProps","errorProps","hasMany","isClearable","isSortable","labelProps","onChange","onChangeFromProps","optionsFromProps","path","pathFromProps","readOnly","readOnlyFromProps","required","style","validate","width","i18n","memoizedValidate","validationOptions","pathFromContext","readOnlyFromContext","setValue","showError","valueToRender","Array","isArray","val","matchingOption","find","selectedOption","newValue","div","filter","Boolean","join","id","replace","disabled","isMulti","undefined","Select"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/fields/Text/Input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAQhD,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/fields/Text/Input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAQhD,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA4G9C,CAAA"}
|
|
@@ -23,15 +23,17 @@ export const TextInput = (props)=>{
|
|
|
23
23
|
...style,
|
|
24
24
|
width
|
|
25
25
|
}
|
|
26
|
-
}, /*#__PURE__*/ React.createElement(
|
|
27
|
-
CustomError: CustomError,
|
|
28
|
-
path: path,
|
|
29
|
-
...errorProps || {}
|
|
30
|
-
}), /*#__PURE__*/ React.createElement(FieldLabel, {
|
|
26
|
+
}, /*#__PURE__*/ React.createElement(FieldLabel, {
|
|
31
27
|
CustomLabel: CustomLabel,
|
|
32
28
|
label: label,
|
|
33
29
|
required: required,
|
|
34
30
|
...labelProps || {}
|
|
31
|
+
}), /*#__PURE__*/ React.createElement("div", {
|
|
32
|
+
className: `${fieldBaseClass}__wrap`
|
|
33
|
+
}, /*#__PURE__*/ React.createElement(FieldError, {
|
|
34
|
+
CustomError: CustomError,
|
|
35
|
+
path: path,
|
|
36
|
+
...errorProps || {}
|
|
35
37
|
}), hasMany ? /*#__PURE__*/ React.createElement(ReactSelect, {
|
|
36
38
|
className: `field-${path.replace(/\./g, '__')}`,
|
|
37
39
|
disabled: readOnly,
|
|
@@ -67,7 +69,7 @@ export const TextInput = (props)=>{
|
|
|
67
69
|
ref: inputRef,
|
|
68
70
|
type: "text",
|
|
69
71
|
value: value || ''
|
|
70
|
-
}), AfterInput), CustomDescription !== undefined ? CustomDescription : /*#__PURE__*/ React.createElement(FieldDescription, descriptionProps || {}));
|
|
72
|
+
}), AfterInput), CustomDescription !== undefined ? CustomDescription : /*#__PURE__*/ React.createElement(FieldDescription, descriptionProps || {})));
|
|
71
73
|
};
|
|
72
74
|
|
|
73
75
|
//# sourceMappingURL=Input.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Text/Input.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport type { TextInputProps } from './types.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { FieldDescription } from '../../forms/FieldDescription/index.js'\nimport { FieldError } from '../../forms/FieldError/index.js'\nimport { FieldLabel } from '../../forms/FieldLabel/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\n\nexport const TextInput: React.FC<TextInputProps> = (props) => {\n const {\n AfterInput,\n BeforeInput,\n CustomDescription,\n CustomError,\n CustomLabel,\n className,\n descriptionProps,\n errorProps,\n hasMany,\n inputRef,\n label,\n labelProps,\n maxRows,\n onChange,\n onKeyDown,\n path,\n placeholder,\n readOnly,\n required,\n rtl,\n showError,\n style,\n value,\n valueToRender,\n width,\n } = props\n\n const { i18n, t } = useTranslation()\n\n return (\n <div\n className={[\n fieldBaseClass,\n 'text',\n className,\n showError && 'error',\n readOnly && 'read-only',\n hasMany && 'has-many',\n ]\n .filter(Boolean)\n .join(' ')}\n style={{\n ...style,\n width,\n }}\n >\n <
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Text/Input.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport type { TextInputProps } from './types.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { FieldDescription } from '../../forms/FieldDescription/index.js'\nimport { FieldError } from '../../forms/FieldError/index.js'\nimport { FieldLabel } from '../../forms/FieldLabel/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\n\nexport const TextInput: React.FC<TextInputProps> = (props) => {\n const {\n AfterInput,\n BeforeInput,\n CustomDescription,\n CustomError,\n CustomLabel,\n className,\n descriptionProps,\n errorProps,\n hasMany,\n inputRef,\n label,\n labelProps,\n maxRows,\n onChange,\n onKeyDown,\n path,\n placeholder,\n readOnly,\n required,\n rtl,\n showError,\n style,\n value,\n valueToRender,\n width,\n } = props\n\n const { i18n, t } = useTranslation()\n\n return (\n <div\n className={[\n fieldBaseClass,\n 'text',\n className,\n showError && 'error',\n readOnly && 'read-only',\n hasMany && 'has-many',\n ]\n .filter(Boolean)\n .join(' ')}\n style={{\n ...style,\n width,\n }}\n >\n <FieldLabel\n CustomLabel={CustomLabel}\n label={label}\n required={required}\n {...(labelProps || {})}\n />\n <div className={`${fieldBaseClass}__wrap`}>\n <FieldError CustomError={CustomError} path={path} {...(errorProps || {})} />\n\n {hasMany ? (\n <ReactSelect\n className={`field-${path.replace(/\\./g, '__')}`}\n disabled={readOnly}\n // prevent adding additional options if maxRows is reached\n filterOption={() =>\n !maxRows ? true : !(Array.isArray(value) && maxRows && value.length >= maxRows)\n }\n isClearable\n isCreatable\n isMulti\n isSortable\n noOptionsMessage={() => {\n const isOverHasMany = Array.isArray(value) && value.length >= maxRows\n if (isOverHasMany) {\n return t('validation:limitReached', { max: maxRows, value: value.length + 1 })\n }\n return null\n }}\n onChange={onChange}\n options={[]}\n placeholder={t('general:enterAValue')}\n showError={showError}\n value={valueToRender}\n />\n ) : (\n <div>\n {BeforeInput}\n <input\n data-rtl={rtl}\n disabled={readOnly}\n id={`field-${path?.replace(/\\./g, '__')}`}\n name={path}\n onChange={onChange}\n onKeyDown={onKeyDown}\n placeholder={getTranslation(placeholder, i18n)}\n ref={inputRef}\n type=\"text\"\n value={value || ''}\n />\n {AfterInput}\n </div>\n )}\n {CustomDescription !== undefined ? (\n CustomDescription\n ) : (\n <FieldDescription {...(descriptionProps || {})} />\n )}\n </div>\n </div>\n )\n}\n"],"names":["getTranslation","React","ReactSelect","FieldDescription","FieldError","FieldLabel","useTranslation","fieldBaseClass","TextInput","props","AfterInput","BeforeInput","CustomDescription","CustomError","CustomLabel","className","descriptionProps","errorProps","hasMany","inputRef","label","labelProps","maxRows","onChange","onKeyDown","path","placeholder","readOnly","required","rtl","showError","style","value","valueToRender","width","i18n","t","div","filter","Boolean","join","replace","disabled","filterOption","Array","isArray","length","isClearable","isCreatable","isMulti","isSortable","noOptionsMessage","isOverHasMany","max","options","input","data-rtl","id","name","ref","type","undefined"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,WAAW,QAAO;AAIzB,SAASC,WAAW,QAAQ,sCAAqC;AACjE,SAASC,gBAAgB,QAAQ,wCAAuC;AACxE,SAASC,UAAU,QAAQ,kCAAiC;AAC5D,SAASC,UAAU,QAAQ,kCAAiC;AAC5D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,cAAc,QAAQ,qBAAoB;AAGnD,OAAO,MAAMC,YAAsC,CAACC;IAClD,MAAM,EACJC,UAAU,EACVC,WAAW,EACXC,iBAAiB,EACjBC,WAAW,EACXC,WAAW,EACXC,SAAS,EACTC,gBAAgB,EAChBC,UAAU,EACVC,OAAO,EACPC,QAAQ,EACRC,KAAK,EACLC,UAAU,EACVC,OAAO,EACPC,QAAQ,EACRC,SAAS,EACTC,IAAI,EACJC,WAAW,EACXC,QAAQ,EACRC,QAAQ,EACRC,GAAG,EACHC,SAAS,EACTC,KAAK,EACLC,KAAK,EACLC,aAAa,EACbC,KAAK,EACN,GAAGzB;IAEJ,MAAM,EAAE0B,IAAI,EAAEC,CAAC,EAAE,GAAG9B;IAEpB,qBACE,oBAAC+B;QACCtB,WAAW;YACTR;YACA;YACAQ;YACAe,aAAa;YACbH,YAAY;YACZT,WAAW;SACZ,CACEoB,MAAM,CAACC,SACPC,IAAI,CAAC;QACRT,OAAO;YACL,GAAGA,KAAK;YACRG;QACF;qBAEA,oBAAC7B;QACCS,aAAaA;QACbM,OAAOA;QACPQ,UAAUA;QACT,GAAIP,cAAc,CAAC,CAAC;sBAEvB,oBAACgB;QAAItB,WAAW,CAAC,EAAER,eAAe,MAAM,CAAC;qBACvC,oBAACH;QAAWS,aAAaA;QAAaY,MAAMA;QAAO,GAAIR,cAAc,CAAC,CAAC;QAEtEC,wBACC,oBAAChB;QACCa,WAAW,CAAC,MAAM,EAAEU,KAAKgB,OAAO,CAAC,OAAO,MAAM,CAAC;QAC/CC,UAAUf;QACV,0DAA0D;QAC1DgB,cAAc,IACZ,CAACrB,UAAU,OAAO,CAAEsB,CAAAA,MAAMC,OAAO,CAACb,UAAUV,WAAWU,MAAMc,MAAM,IAAIxB,OAAM;QAE/EyB,aAAAA;QACAC,aAAAA;QACAC,SAAAA;QACAC,YAAAA;QACAC,kBAAkB;YAChB,MAAMC,gBAAgBR,MAAMC,OAAO,CAACb,UAAUA,MAAMc,MAAM,IAAIxB;YAC9D,IAAI8B,eAAe;gBACjB,OAAOhB,EAAE,2BAA2B;oBAAEiB,KAAK/B;oBAASU,OAAOA,MAAMc,MAAM,GAAG;gBAAE;YAC9E;YACA,OAAO;QACT;QACAvB,UAAUA;QACV+B,SAAS,EAAE;QACX5B,aAAaU,EAAE;QACfN,WAAWA;QACXE,OAAOC;uBAGT,oBAACI,aACE1B,2BACD,oBAAC4C;QACCC,YAAU3B;QACVa,UAAUf;QACV8B,IAAI,CAAC,MAAM,EAAEhC,MAAMgB,QAAQ,OAAO,MAAM,CAAC;QACzCiB,MAAMjC;QACNF,UAAUA;QACVC,WAAWA;QACXE,aAAa1B,eAAe0B,aAAaS;QACzCwB,KAAKxC;QACLyC,MAAK;QACL5B,OAAOA,SAAS;QAEjBtB,aAGJE,sBAAsBiD,YACrBjD,kCAEA,oBAACT,kBAAsBa,oBAAoB,CAAC;AAKtD,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/fields/Textarea/Input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAOpD,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,
|
|
1
|
+
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/fields/Textarea/Input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAOpD,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA6EtD,CAAA"}
|
|
@@ -21,15 +21,17 @@ export const TextareaInput = (props)=>{
|
|
|
21
21
|
...style,
|
|
22
22
|
width
|
|
23
23
|
}
|
|
24
|
-
}, /*#__PURE__*/ React.createElement(
|
|
25
|
-
CustomError: CustomError,
|
|
26
|
-
path: path,
|
|
27
|
-
...errorProps || {}
|
|
28
|
-
}), /*#__PURE__*/ React.createElement(FieldLabel, {
|
|
24
|
+
}, /*#__PURE__*/ React.createElement(FieldLabel, {
|
|
29
25
|
CustomLabel: CustomLabel,
|
|
30
26
|
label: label,
|
|
31
27
|
required: required,
|
|
32
28
|
...labelProps || {}
|
|
29
|
+
}), /*#__PURE__*/ React.createElement("div", {
|
|
30
|
+
className: `${fieldBaseClass}__wrap`
|
|
31
|
+
}, /*#__PURE__*/ React.createElement(FieldError, {
|
|
32
|
+
CustomError: CustomError,
|
|
33
|
+
path: path,
|
|
34
|
+
...errorProps || {}
|
|
33
35
|
}), BeforeInput, /*#__PURE__*/ React.createElement("label", {
|
|
34
36
|
className: "textarea-outer",
|
|
35
37
|
htmlFor: `field-${path.replace(/\./g, '__')}`
|
|
@@ -48,7 +50,7 @@ export const TextareaInput = (props)=>{
|
|
|
48
50
|
placeholder: getTranslation(placeholder, i18n),
|
|
49
51
|
rows: rows,
|
|
50
52
|
value: value || ''
|
|
51
|
-
}))), AfterInput, CustomDescription !== undefined ? CustomDescription : /*#__PURE__*/ React.createElement(FieldDescription, descriptionProps || {}));
|
|
53
|
+
}))), AfterInput, CustomDescription !== undefined ? CustomDescription : /*#__PURE__*/ React.createElement(FieldDescription, descriptionProps || {})));
|
|
52
54
|
};
|
|
53
55
|
|
|
54
56
|
//# sourceMappingURL=Input.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Textarea/Input.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport type { TextAreaInputProps } from './types.js'\n\nimport { FieldDescription } from '../../forms/FieldDescription/index.js'\nimport { FieldError } from '../../forms/FieldError/index.js'\nimport { FieldLabel } from '../../forms/FieldLabel/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\n\nexport const TextareaInput: React.FC<TextAreaInputProps> = (props) => {\n const {\n AfterInput,\n BeforeInput,\n CustomDescription,\n CustomError,\n CustomLabel,\n className,\n descriptionProps,\n errorProps,\n label,\n labelProps,\n onChange,\n path,\n placeholder,\n readOnly,\n required,\n rows,\n rtl,\n showError,\n style,\n value,\n width,\n } = props\n\n const { i18n } = useTranslation()\n\n return (\n <div\n className={[\n fieldBaseClass,\n 'textarea',\n className,\n showError && 'error',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n style={{\n ...style,\n width,\n }}\n >\n <
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Textarea/Input.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport type { TextAreaInputProps } from './types.js'\n\nimport { FieldDescription } from '../../forms/FieldDescription/index.js'\nimport { FieldError } from '../../forms/FieldError/index.js'\nimport { FieldLabel } from '../../forms/FieldLabel/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\n\nexport const TextareaInput: React.FC<TextAreaInputProps> = (props) => {\n const {\n AfterInput,\n BeforeInput,\n CustomDescription,\n CustomError,\n CustomLabel,\n className,\n descriptionProps,\n errorProps,\n label,\n labelProps,\n onChange,\n path,\n placeholder,\n readOnly,\n required,\n rows,\n rtl,\n showError,\n style,\n value,\n width,\n } = props\n\n const { i18n } = useTranslation()\n\n return (\n <div\n className={[\n fieldBaseClass,\n 'textarea',\n className,\n showError && 'error',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n style={{\n ...style,\n width,\n }}\n >\n <FieldLabel\n CustomLabel={CustomLabel}\n label={label}\n required={required}\n {...(labelProps || {})}\n />\n <div className={`${fieldBaseClass}__wrap`}>\n <FieldError CustomError={CustomError} path={path} {...(errorProps || {})} />\n {BeforeInput}\n <label className=\"textarea-outer\" htmlFor={`field-${path.replace(/\\./g, '__')}`}>\n <div className=\"textarea-inner\">\n <div className=\"textarea-clone\" data-value={value || placeholder || ''} />\n <textarea\n className=\"textarea-element\"\n data-rtl={rtl}\n disabled={readOnly}\n id={`field-${path.replace(/\\./g, '__')}`}\n name={path}\n onChange={onChange}\n placeholder={getTranslation(placeholder, i18n)}\n rows={rows}\n value={value || ''}\n />\n </div>\n </label>\n {AfterInput}\n {CustomDescription !== undefined ? (\n CustomDescription\n ) : (\n <FieldDescription {...(descriptionProps || {})} />\n )}\n </div>\n </div>\n )\n}\n"],"names":["getTranslation","React","FieldDescription","FieldError","FieldLabel","useTranslation","fieldBaseClass","TextareaInput","props","AfterInput","BeforeInput","CustomDescription","CustomError","CustomLabel","className","descriptionProps","errorProps","label","labelProps","onChange","path","placeholder","readOnly","required","rows","rtl","showError","style","value","width","i18n","div","filter","Boolean","join","htmlFor","replace","data-value","textarea","data-rtl","disabled","id","name","undefined"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,WAAW,QAAO;AAIzB,SAASC,gBAAgB,QAAQ,wCAAuC;AACxE,SAASC,UAAU,QAAQ,kCAAiC;AAC5D,SAASC,UAAU,QAAQ,kCAAiC;AAC5D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,cAAc,QAAQ,qBAAoB;AAGnD,OAAO,MAAMC,gBAA8C,CAACC;IAC1D,MAAM,EACJC,UAAU,EACVC,WAAW,EACXC,iBAAiB,EACjBC,WAAW,EACXC,WAAW,EACXC,SAAS,EACTC,gBAAgB,EAChBC,UAAU,EACVC,KAAK,EACLC,UAAU,EACVC,QAAQ,EACRC,IAAI,EACJC,WAAW,EACXC,QAAQ,EACRC,QAAQ,EACRC,IAAI,EACJC,GAAG,EACHC,SAAS,EACTC,KAAK,EACLC,KAAK,EACLC,KAAK,EACN,GAAGrB;IAEJ,MAAM,EAAEsB,IAAI,EAAE,GAAGzB;IAEjB,qBACE,oBAAC0B;QACCjB,WAAW;YACTR;YACA;YACAQ;YACAY,aAAa;YACbJ,YAAY;SACb,CACEU,MAAM,CAACC,SACPC,IAAI,CAAC;QACRP,OAAO;YACL,GAAGA,KAAK;YACRE;QACF;qBAEA,oBAACzB;QACCS,aAAaA;QACbI,OAAOA;QACPM,UAAUA;QACT,GAAIL,cAAc,CAAC,CAAC;sBAEvB,oBAACa;QAAIjB,WAAW,CAAC,EAAER,eAAe,MAAM,CAAC;qBACvC,oBAACH;QAAWS,aAAaA;QAAaQ,MAAMA;QAAO,GAAIJ,cAAc,CAAC,CAAC;QACtEN,2BACD,oBAACO;QAAMH,WAAU;QAAiBqB,SAAS,CAAC,MAAM,EAAEf,KAAKgB,OAAO,CAAC,OAAO,MAAM,CAAC;qBAC7E,oBAACL;QAAIjB,WAAU;qBACb,oBAACiB;QAAIjB,WAAU;QAAiBuB,cAAYT,SAASP,eAAe;sBACpE,oBAACiB;QACCxB,WAAU;QACVyB,YAAUd;QACVe,UAAUlB;QACVmB,IAAI,CAAC,MAAM,EAAErB,KAAKgB,OAAO,CAAC,OAAO,MAAM,CAAC;QACxCM,MAAMtB;QACND,UAAUA;QACVE,aAAarB,eAAeqB,aAAaS;QACzCN,MAAMA;QACNI,OAAOA,SAAS;UAIrBnB,YACAE,sBAAsBgC,YACrBhC,kCAEA,oBAACT,kBAAsBa,oBAAoB,CAAC;AAKtD,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/fields/Upload/Input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAG7F,OAAO,KAA2C,MAAM,OAAO,CAAA;AAI/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAWlD,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,GAAG;IACvE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAA,KAAK,IAAI,CAAA;IACtB,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/fields/Upload/Input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAG7F,OAAO,KAA2C,MAAM,OAAO,CAAA;AAI/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAWlD,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,GAAG;IACvE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAA,KAAK,IAAI,CAAA;IACtB,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA8JlD,CAAA"}
|
|
@@ -85,14 +85,16 @@ export const UploadInput = (props)=>{
|
|
|
85
85
|
...style,
|
|
86
86
|
width
|
|
87
87
|
}
|
|
88
|
-
}, /*#__PURE__*/ React.createElement(
|
|
89
|
-
CustomError: CustomError,
|
|
90
|
-
...errorProps || {}
|
|
91
|
-
}), /*#__PURE__*/ React.createElement(FieldLabel, {
|
|
88
|
+
}, /*#__PURE__*/ React.createElement(FieldLabel, {
|
|
92
89
|
CustomLabel: CustomLabel,
|
|
93
90
|
label: label,
|
|
94
91
|
required: required,
|
|
95
92
|
...labelProps || {}
|
|
93
|
+
}), /*#__PURE__*/ React.createElement("div", {
|
|
94
|
+
className: `${fieldBaseClass}__wrap`
|
|
95
|
+
}, /*#__PURE__*/ React.createElement(FieldError, {
|
|
96
|
+
CustomError: CustomError,
|
|
97
|
+
...errorProps || {}
|
|
96
98
|
}), collection?.upload && /*#__PURE__*/ React.createElement(React.Fragment, null, fileDoc && !missingFile && /*#__PURE__*/ React.createElement(FileDetails, {
|
|
97
99
|
collectionSlug: relationTo,
|
|
98
100
|
doc: fileDoc,
|
|
@@ -124,7 +126,7 @@ export const UploadInput = (props)=>{
|
|
|
124
126
|
onSave: onSave
|
|
125
127
|
}), !readOnly && /*#__PURE__*/ React.createElement(ListDrawer, {
|
|
126
128
|
onSelect: onSelect
|
|
127
|
-
}));
|
|
129
|
+
})));
|
|
128
130
|
}
|
|
129
131
|
return null;
|
|
130
132
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Upload/Input.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, FilterOptionsResult, UploadField } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { DocumentDrawerProps } from '../../elements/DocumentDrawer/types.js'\nimport type { ListDrawerProps } from '../../elements/ListDrawer/types.js'\nimport type { UploadFieldProps } from './types.js'\n\nimport { Button } from '../../elements/Button/index.js'\nimport { useDocumentDrawer } from '../../elements/DocumentDrawer/index.js'\nimport { FileDetails } from '../../elements/FileDetails/index.js'\nimport { useListDrawer } from '../../elements/ListDrawer/index.js'\nimport { FieldDescription } from '../../forms/FieldDescription/index.js'\nimport { FieldError } from '../../forms/FieldError/index.js'\nimport { FieldLabel } from '../../forms/FieldLabel/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\n\nconst baseClass = 'upload'\n\nexport type UploadInputProps = Omit<UploadFieldProps, 'filterOptions'> & {\n api?: string\n collection?: ClientCollectionConfig\n filterOptions?: FilterOptionsResult\n onChange?: (e) => void\n relationTo?: UploadField['relationTo']\n serverURL?: string\n showError?: boolean\n value?: string\n}\n\nexport const UploadInput: React.FC<UploadInputProps> = (props) => {\n const {\n CustomDescription,\n CustomError,\n CustomLabel,\n api = '/api',\n className,\n collection,\n descriptionProps,\n errorProps,\n filterOptions,\n label,\n labelProps,\n onChange,\n readOnly,\n relationTo,\n required,\n serverURL,\n showError,\n style,\n value,\n width,\n } = props\n\n const { i18n, t } = useTranslation()\n\n const [fileDoc, setFileDoc] = useState(undefined)\n const [missingFile, setMissingFile] = useState(false)\n const [collectionSlugs] = useState([collection?.slug])\n\n const [DocumentDrawer, DocumentDrawerToggler, { closeDrawer }] = useDocumentDrawer({\n collectionSlug: collectionSlugs[0],\n })\n\n const [ListDrawer, ListDrawerToggler, { closeDrawer: closeListDrawer }] = useListDrawer({\n collectionSlugs,\n filterOptions,\n })\n\n useEffect(() => {\n if (value !== null && typeof value !== 'undefined' && value !== '') {\n const fetchFile = async () => {\n const response = await fetch(`${serverURL}${api}/${relationTo}/${value}`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n if (response.ok) {\n const json = await response.json()\n setFileDoc(json)\n } else {\n setMissingFile(true)\n setFileDoc(undefined)\n }\n }\n\n void fetchFile()\n } else {\n setFileDoc(undefined)\n }\n }, [value, relationTo, api, serverURL, i18n])\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n setMissingFile(false)\n onChange(args.doc)\n closeDrawer()\n },\n [onChange, closeDrawer],\n )\n\n const onSelect = useCallback<ListDrawerProps['onSelect']>(\n (args) => {\n setMissingFile(false)\n onChange({\n id: args.docID,\n })\n closeListDrawer()\n },\n [onChange, closeListDrawer],\n )\n\n if (collection.upload) {\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 <FieldError CustomError={CustomError} {...(errorProps || {})} />\n <FieldLabel\n CustomLabel={CustomLabel}\n label={label}\n required={required}\n {...(labelProps || {})}\n />\n {collection?.upload && (\n <React.Fragment>\n {fileDoc && !missingFile && (\n <FileDetails\n collectionSlug={relationTo}\n doc={fileDoc}\n handleRemove={\n readOnly\n ? undefined\n : () => {\n onChange(null)\n }\n }\n uploadConfig={collection.upload}\n />\n )}\n {(!fileDoc || missingFile) && (\n <div className={`${baseClass}__wrap`}>\n <div className={`${baseClass}__buttons`}>\n <DocumentDrawerToggler className={`${baseClass}__toggler`} disabled={readOnly}>\n <Button buttonStyle=\"secondary\" disabled={readOnly} el=\"div\">\n {t('fields:uploadNewLabel', {\n label: getTranslation(collection.labels.singular, i18n),\n })}\n </Button>\n </DocumentDrawerToggler>\n <ListDrawerToggler className={`${baseClass}__toggler`} disabled={readOnly}>\n <Button buttonStyle=\"secondary\" disabled={readOnly} el=\"div\">\n {t('fields:chooseFromExisting')}\n </Button>\n </ListDrawerToggler>\n </div>\n </div>\n )}\n {CustomDescription !== undefined ? (\n CustomDescription\n ) : (\n <FieldDescription {...(descriptionProps || {})} />\n )}\n </React.Fragment>\n )}\n {!readOnly && <DocumentDrawer onSave={onSave} />}\n {!readOnly && <ListDrawer onSelect={onSelect} />}\n </div>\n )\n }\n\n return null\n}\n"],"names":["getTranslation","React","useCallback","useEffect","useState","Button","useDocumentDrawer","FileDetails","useListDrawer","FieldDescription","FieldError","FieldLabel","useTranslation","fieldBaseClass","baseClass","UploadInput","props","CustomDescription","CustomError","CustomLabel","api","className","collection","descriptionProps","errorProps","filterOptions","label","labelProps","onChange","readOnly","relationTo","required","serverURL","showError","style","value","width","i18n","t","fileDoc","setFileDoc","undefined","missingFile","setMissingFile","collectionSlugs","slug","DocumentDrawer","DocumentDrawerToggler","closeDrawer","collectionSlug","ListDrawer","ListDrawerToggler","closeListDrawer","fetchFile","response","fetch","credentials","headers","language","ok","json","onSave","args","doc","onSelect","id","docID","upload","div","filter","Boolean","join","Fragment","handleRemove","uploadConfig","disabled","buttonStyle","el","labels","singular"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Upload/Input.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, FilterOptionsResult, UploadField } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { DocumentDrawerProps } from '../../elements/DocumentDrawer/types.js'\nimport type { ListDrawerProps } from '../../elements/ListDrawer/types.js'\nimport type { UploadFieldProps } from './types.js'\n\nimport { Button } from '../../elements/Button/index.js'\nimport { useDocumentDrawer } from '../../elements/DocumentDrawer/index.js'\nimport { FileDetails } from '../../elements/FileDetails/index.js'\nimport { useListDrawer } from '../../elements/ListDrawer/index.js'\nimport { FieldDescription } from '../../forms/FieldDescription/index.js'\nimport { FieldError } from '../../forms/FieldError/index.js'\nimport { FieldLabel } from '../../forms/FieldLabel/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\n\nconst baseClass = 'upload'\n\nexport type UploadInputProps = Omit<UploadFieldProps, 'filterOptions'> & {\n api?: string\n collection?: ClientCollectionConfig\n filterOptions?: FilterOptionsResult\n onChange?: (e) => void\n relationTo?: UploadField['relationTo']\n serverURL?: string\n showError?: boolean\n value?: string\n}\n\nexport const UploadInput: React.FC<UploadInputProps> = (props) => {\n const {\n CustomDescription,\n CustomError,\n CustomLabel,\n api = '/api',\n className,\n collection,\n descriptionProps,\n errorProps,\n filterOptions,\n label,\n labelProps,\n onChange,\n readOnly,\n relationTo,\n required,\n serverURL,\n showError,\n style,\n value,\n width,\n } = props\n\n const { i18n, t } = useTranslation()\n\n const [fileDoc, setFileDoc] = useState(undefined)\n const [missingFile, setMissingFile] = useState(false)\n const [collectionSlugs] = useState([collection?.slug])\n\n const [DocumentDrawer, DocumentDrawerToggler, { closeDrawer }] = useDocumentDrawer({\n collectionSlug: collectionSlugs[0],\n })\n\n const [ListDrawer, ListDrawerToggler, { closeDrawer: closeListDrawer }] = useListDrawer({\n collectionSlugs,\n filterOptions,\n })\n\n useEffect(() => {\n if (value !== null && typeof value !== 'undefined' && value !== '') {\n const fetchFile = async () => {\n const response = await fetch(`${serverURL}${api}/${relationTo}/${value}`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n if (response.ok) {\n const json = await response.json()\n setFileDoc(json)\n } else {\n setMissingFile(true)\n setFileDoc(undefined)\n }\n }\n\n void fetchFile()\n } else {\n setFileDoc(undefined)\n }\n }, [value, relationTo, api, serverURL, i18n])\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n setMissingFile(false)\n onChange(args.doc)\n closeDrawer()\n },\n [onChange, closeDrawer],\n )\n\n const onSelect = useCallback<ListDrawerProps['onSelect']>(\n (args) => {\n setMissingFile(false)\n onChange({\n id: args.docID,\n })\n closeListDrawer()\n },\n [onChange, closeListDrawer],\n )\n\n if (collection.upload) {\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 <FieldLabel\n CustomLabel={CustomLabel}\n label={label}\n required={required}\n {...(labelProps || {})}\n />\n <div className={`${fieldBaseClass}__wrap`}>\n <FieldError CustomError={CustomError} {...(errorProps || {})} />\n\n {collection?.upload && (\n <React.Fragment>\n {fileDoc && !missingFile && (\n <FileDetails\n collectionSlug={relationTo}\n doc={fileDoc}\n handleRemove={\n readOnly\n ? undefined\n : () => {\n onChange(null)\n }\n }\n uploadConfig={collection.upload}\n />\n )}\n {(!fileDoc || missingFile) && (\n <div className={`${baseClass}__wrap`}>\n <div className={`${baseClass}__buttons`}>\n <DocumentDrawerToggler className={`${baseClass}__toggler`} disabled={readOnly}>\n <Button buttonStyle=\"secondary\" disabled={readOnly} el=\"div\">\n {t('fields:uploadNewLabel', {\n label: getTranslation(collection.labels.singular, i18n),\n })}\n </Button>\n </DocumentDrawerToggler>\n <ListDrawerToggler className={`${baseClass}__toggler`} disabled={readOnly}>\n <Button buttonStyle=\"secondary\" disabled={readOnly} el=\"div\">\n {t('fields:chooseFromExisting')}\n </Button>\n </ListDrawerToggler>\n </div>\n </div>\n )}\n {CustomDescription !== undefined ? (\n CustomDescription\n ) : (\n <FieldDescription {...(descriptionProps || {})} />\n )}\n </React.Fragment>\n )}\n {!readOnly && <DocumentDrawer onSave={onSave} />}\n {!readOnly && <ListDrawer onSelect={onSelect} />}\n </div>\n </div>\n )\n }\n\n return null\n}\n"],"names":["getTranslation","React","useCallback","useEffect","useState","Button","useDocumentDrawer","FileDetails","useListDrawer","FieldDescription","FieldError","FieldLabel","useTranslation","fieldBaseClass","baseClass","UploadInput","props","CustomDescription","CustomError","CustomLabel","api","className","collection","descriptionProps","errorProps","filterOptions","label","labelProps","onChange","readOnly","relationTo","required","serverURL","showError","style","value","width","i18n","t","fileDoc","setFileDoc","undefined","missingFile","setMissingFile","collectionSlugs","slug","DocumentDrawer","DocumentDrawerToggler","closeDrawer","collectionSlug","ListDrawer","ListDrawerToggler","closeListDrawer","fetchFile","response","fetch","credentials","headers","language","ok","json","onSave","args","doc","onSelect","id","docID","upload","div","filter","Boolean","join","Fragment","handleRemove","uploadConfig","disabled","buttonStyle","el","labels","singular"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -13,11 +13,12 @@ const DefaultFieldError = (props)=>{
|
|
|
13
13
|
const { errorMessage, valid } = field || {};
|
|
14
14
|
const message = messageFromProps || errorMessage;
|
|
15
15
|
const showMessage = showErrorFromProps || hasSubmitted && valid === false;
|
|
16
|
-
if (showMessage) {
|
|
16
|
+
if (showMessage && message?.length) {
|
|
17
17
|
return /*#__PURE__*/ React.createElement(Tooltip, {
|
|
18
18
|
alignCaret: alignCaret,
|
|
19
19
|
className: baseClass,
|
|
20
|
-
delay: 0
|
|
20
|
+
delay: 0,
|
|
21
|
+
staticPositioning: true
|
|
21
22
|
}, message);
|
|
22
23
|
}
|
|
23
24
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/forms/FieldError/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ErrorProps } from 'payload/types'\n\nimport React from 'react'\n\nimport { Tooltip } from '../../elements/Tooltip/index.js'\nimport { useFieldProps } from '../FieldPropsProvider/index.js'\nimport { useFormFields, useFormSubmitted } from '../Form/context.js'\nimport './index.scss'\n\nconst baseClass = 'field-error'\n\nconst DefaultFieldError: React.FC<ErrorProps> = (props) => {\n const {\n alignCaret = 'right',\n message: messageFromProps,\n path: pathFromProps,\n showError: showErrorFromProps,\n } = props\n\n const { path: pathFromContext } = useFieldProps()\n const path = pathFromContext || pathFromProps\n\n const hasSubmitted = useFormSubmitted()\n const field = useFormFields(([fields]) => (fields && fields?.[path]) || null)\n\n const { errorMessage, valid } = field || {}\n\n const message = messageFromProps || errorMessage\n const showMessage = showErrorFromProps || (hasSubmitted && valid === false)\n\n if (showMessage) {\n return (\n <Tooltip alignCaret={alignCaret} className={baseClass} delay={0}>\n {message}\n </Tooltip>\n )\n }\n\n return null\n}\n\nexport const FieldError: React.FC<ErrorProps> = (props) => {\n const { CustomError } = props\n\n if (CustomError !== undefined) {\n return CustomError\n }\n\n return <DefaultFieldError {...props} />\n}\n"],"names":["React","Tooltip","useFieldProps","useFormFields","useFormSubmitted","baseClass","DefaultFieldError","props","alignCaret","message","messageFromProps","path","pathFromProps","showError","showErrorFromProps","pathFromContext","hasSubmitted","field","fields","errorMessage","valid","showMessage","className","delay","FieldError","CustomError","undefined"],"rangeMappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/forms/FieldError/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ErrorProps } from 'payload/types'\n\nimport React from 'react'\n\nimport { Tooltip } from '../../elements/Tooltip/index.js'\nimport { useFieldProps } from '../FieldPropsProvider/index.js'\nimport { useFormFields, useFormSubmitted } from '../Form/context.js'\nimport './index.scss'\n\nconst baseClass = 'field-error'\n\nconst DefaultFieldError: React.FC<ErrorProps> = (props) => {\n const {\n alignCaret = 'right',\n message: messageFromProps,\n path: pathFromProps,\n showError: showErrorFromProps,\n } = props\n\n const { path: pathFromContext } = useFieldProps()\n const path = pathFromContext || pathFromProps\n\n const hasSubmitted = useFormSubmitted()\n const field = useFormFields(([fields]) => (fields && fields?.[path]) || null)\n\n const { errorMessage, valid } = field || {}\n\n const message = messageFromProps || errorMessage\n const showMessage = showErrorFromProps || (hasSubmitted && valid === false)\n\n if (showMessage && message?.length) {\n return (\n <Tooltip alignCaret={alignCaret} className={baseClass} delay={0} staticPositioning>\n {message}\n </Tooltip>\n )\n }\n\n return null\n}\n\nexport const FieldError: React.FC<ErrorProps> = (props) => {\n const { CustomError } = props\n\n if (CustomError !== undefined) {\n return CustomError\n }\n\n return <DefaultFieldError {...props} />\n}\n"],"names":["React","Tooltip","useFieldProps","useFormFields","useFormSubmitted","baseClass","DefaultFieldError","props","alignCaret","message","messageFromProps","path","pathFromProps","showError","showErrorFromProps","pathFromContext","hasSubmitted","field","fields","errorMessage","valid","showMessage","length","className","delay","staticPositioning","FieldError","CustomError","undefined"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AAIA,OAAOA,WAAW,QAAO;AAEzB,SAASC,OAAO,QAAQ,kCAAiC;AACzD,SAASC,aAAa,QAAQ,iCAAgC;AAC9D,SAASC,aAAa,EAAEC,gBAAgB,QAAQ,qBAAoB;AAGpE,MAAMC,YAAY;AAElB,MAAMC,oBAA0C,CAACC;IAC/C,MAAM,EACJC,aAAa,OAAO,EACpBC,SAASC,gBAAgB,EACzBC,MAAMC,aAAa,EACnBC,WAAWC,kBAAkB,EAC9B,GAAGP;IAEJ,MAAM,EAAEI,MAAMI,eAAe,EAAE,GAAGb;IAClC,MAAMS,OAAOI,mBAAmBH;IAEhC,MAAMI,eAAeZ;IACrB,MAAMa,QAAQd,cAAc,CAAC,CAACe,OAAO,GAAK,AAACA,UAAUA,QAAQ,CAACP,KAAK,IAAK;IAExE,MAAM,EAAEQ,YAAY,EAAEC,KAAK,EAAE,GAAGH,SAAS,CAAC;IAE1C,MAAMR,UAAUC,oBAAoBS;IACpC,MAAME,cAAcP,sBAAuBE,gBAAgBI,UAAU;IAErE,IAAIC,eAAeZ,SAASa,QAAQ;QAClC,qBACE,oBAACrB;YAAQO,YAAYA;YAAYe,WAAWlB;YAAWmB,OAAO;YAAGC,mBAAAA;WAC9DhB;IAGP;IAEA,OAAO;AACT;AAEA,OAAO,MAAMiB,aAAmC,CAACnB;IAC/C,MAAM,EAAEoB,WAAW,EAAE,GAAGpB;IAExB,IAAIoB,gBAAgBC,WAAW;QAC7B,OAAOD;IACT;IAEA,qBAAO,oBAACrB,mBAAsBC;AAChC,EAAC"}
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
.field-error.tooltip {
|
|
4
4
|
font-family: var(--font-body);
|
|
5
|
-
top: 0;
|
|
6
|
-
bottom: auto;
|
|
7
5
|
left: auto;
|
|
8
6
|
max-width: 75%;
|
|
9
7
|
right: calc(var(--base) * 0.5);
|
|
@@ -12,5 +10,6 @@
|
|
|
12
10
|
|
|
13
11
|
&::after {
|
|
14
12
|
border-top-color: var(--theme-error-500);
|
|
13
|
+
border-bottom-color: var(--theme-error-500);
|
|
15
14
|
}
|
|
16
15
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
export const useIntersect = ({ root = null, rootMargin = '0px', threshold = 0 } = {}, disable)=>{
|
|
4
4
|
const [entry, updateEntry] = useState();
|
|
5
5
|
const [node, setNode] = useState(null);
|
|
6
|
-
const observer = useRef(typeof window !== 'undefined' && 'IntersectionObserver' in window ? new window.IntersectionObserver(([ent])=>updateEntry(ent), {
|
|
6
|
+
const observer = useRef(typeof window !== 'undefined' && 'IntersectionObserver' in window && !disable ? new window.IntersectionObserver(([ent])=>updateEntry(ent), {
|
|
7
7
|
root,
|
|
8
8
|
rootMargin,
|
|
9
9
|
threshold
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useIntersect.ts"],"sourcesContent":["'use client'\n/* eslint-disable no-shadow */\nimport { useEffect, useRef, useState } from 'react'\n\ntype Intersect = [setNode: React.Dispatch<Element>, entry: IntersectionObserverEntry]\n\nexport const useIntersect = (\n { root = null, rootMargin = '0px', threshold = 0 } = {},\n disable?: boolean,\n): Intersect => {\n const [entry, updateEntry] = useState<IntersectionObserverEntry>()\n const [node, setNode] = useState(null)\n\n const observer = useRef(\n typeof window !== 'undefined' && 'IntersectionObserver' in window\n ? new window.IntersectionObserver(([ent]) => updateEntry(ent), {\n root,\n rootMargin,\n threshold,\n })\n : null,\n )\n\n useEffect(() => {\n if (disable) {\n return\n }\n const { current: currentObserver } = observer\n currentObserver.disconnect()\n\n if (node) currentObserver.observe(node)\n\n return () => currentObserver.disconnect()\n }, [node, disable])\n\n return [setNode, entry]\n}\n"],"names":["useEffect","useRef","useState","useIntersect","root","rootMargin","threshold","disable","entry","updateEntry","node","setNode","observer","window","IntersectionObserver","ent","current","currentObserver","disconnect","observe"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,4BAA4B,GAC5B,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAInD,OAAO,MAAMC,eAAe,CAC1B,EAAEC,OAAO,IAAI,EAAEC,aAAa,KAAK,EAAEC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,EACvDC;IAEA,MAAM,CAACC,OAAOC,YAAY,GAAGP;IAC7B,MAAM,CAACQ,MAAMC,QAAQ,GAAGT,SAAS;IAEjC,MAAMU,WAAWX,OACf,OAAOY,WAAW,eAAe,0BAA0BA,
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useIntersect.ts"],"sourcesContent":["'use client'\n/* eslint-disable no-shadow */\nimport { useEffect, useRef, useState } from 'react'\n\ntype Intersect = [setNode: React.Dispatch<Element>, entry: IntersectionObserverEntry]\n\nexport const useIntersect = (\n { root = null, rootMargin = '0px', threshold = 0 } = {},\n disable?: boolean,\n): Intersect => {\n const [entry, updateEntry] = useState<IntersectionObserverEntry>()\n const [node, setNode] = useState(null)\n\n const observer = useRef(\n typeof window !== 'undefined' && 'IntersectionObserver' in window && !disable\n ? new window.IntersectionObserver(([ent]) => updateEntry(ent), {\n root,\n rootMargin,\n threshold,\n })\n : null,\n )\n\n useEffect(() => {\n if (disable) {\n return\n }\n const { current: currentObserver } = observer\n currentObserver.disconnect()\n\n if (node) currentObserver.observe(node)\n\n return () => currentObserver.disconnect()\n }, [node, disable])\n\n return [setNode, entry]\n}\n"],"names":["useEffect","useRef","useState","useIntersect","root","rootMargin","threshold","disable","entry","updateEntry","node","setNode","observer","window","IntersectionObserver","ent","current","currentObserver","disconnect","observe"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,4BAA4B,GAC5B,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAInD,OAAO,MAAMC,eAAe,CAC1B,EAAEC,OAAO,IAAI,EAAEC,aAAa,KAAK,EAAEC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,EACvDC;IAEA,MAAM,CAACC,OAAOC,YAAY,GAAGP;IAC7B,MAAM,CAACQ,MAAMC,QAAQ,GAAGT,SAAS;IAEjC,MAAMU,WAAWX,OACf,OAAOY,WAAW,eAAe,0BAA0BA,UAAU,CAACN,UAClE,IAAIM,OAAOC,oBAAoB,CAAC,CAAC,CAACC,IAAI,GAAKN,YAAYM,MAAM;QAC3DX;QACAC;QACAC;IACF,KACA;IAGNN,UAAU;QACR,IAAIO,SAAS;YACX;QACF;QACA,MAAM,EAAES,SAASC,eAAe,EAAE,GAAGL;QACrCK,gBAAgBC,UAAU;QAE1B,IAAIR,MAAMO,gBAAgBE,OAAO,CAACT;QAElC,OAAO,IAAMO,gBAAgBC,UAAU;IACzC,GAAG;QAACR;QAAMH;KAAQ;IAElB,OAAO;QAACI;QAASH;KAAM;AACzB,EAAC"}
|