@payloadcms/ui 3.36.0-canary.9 → 3.36.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Relationship/index.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAwE,MAAM,OAAO,CAAA;AAuB5F,OAAO,cAAc,CAAA;AAovBrB,eAAO,MAAM,iBAAiB;;;;;+EAA4C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Relationship/index.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAwE,MAAM,OAAO,CAAA;AAuB5F,OAAO,cAAc,CAAA;AA0wBrB,eAAO,MAAM,iBAAiB;;;;;+EAA4C,CAAA"}
@@ -129,20 +129,35 @@ const RelationshipFieldComponent = props => {
129
129
  const listDrawerFilterOptions = useMemo(() => {
130
130
  let newFilterOptions = filterOptions;
131
131
  if (value_0) {
132
- ;
133
- (Array.isArray(value_0) ? value_0 : [value_0]).forEach(val => {
134
- ;
135
- (Array.isArray(relationTo) ? relationTo : [relationTo]).forEach(relationTo_0 => {
136
- newFilterOptions = {
137
- ...(filterOptions || {}),
138
- [relationTo_0]: {
139
- ...(typeof filterOptions?.[relationTo_0] === 'object' ? filterOptions[relationTo_0] : {}),
132
+ const valuesByRelation = (Array.isArray(value_0) ? value_0 : [value_0]).reduce((acc, val) => {
133
+ if (typeof val === 'object' && val.relationTo) {
134
+ if (!acc[val.relationTo]) {
135
+ acc[val.relationTo] = [];
136
+ }
137
+ acc[val.relationTo].push(val.value);
138
+ } else if (val) {
139
+ const relation = Array.isArray(relationTo) ? undefined : relationTo;
140
+ if (relation) {
141
+ if (!acc[relation]) {
142
+ acc[relation] = [];
143
+ }
144
+ acc[relation].push(val);
145
+ }
146
+ }
147
+ return acc;
148
+ }, {});
149
+ (Array.isArray(relationTo) ? relationTo : [relationTo]).forEach(relation_0 => {
150
+ newFilterOptions = {
151
+ ...(newFilterOptions || {}),
152
+ [relation_0]: {
153
+ ...(typeof filterOptions?.[relation_0] === 'object' ? filterOptions[relation_0] : {}),
154
+ ...(valuesByRelation[relation_0] ? {
140
155
  id: {
141
- not_in: [typeof val === 'object' ? val.value : val]
156
+ not_in: valuesByRelation[relation_0]
142
157
  }
143
- }
144
- };
145
- });
158
+ } : {})
159
+ }
160
+ };
146
161
  });
147
162
  }
148
163
  return newFilterOptions;
@@ -165,8 +180,7 @@ const RelationshipFieldComponent = props => {
165
180
  } : doc.id;
166
181
  if (hasMany) {
167
182
  const withSelection = Array.isArray(value_0) ? value_0 : [];
168
- withSelection.push(formattedSelection);
169
- setValue(withSelection);
183
+ setValue([...withSelection, formattedSelection]);
170
184
  } else {
171
185
  setValue(formattedSelection);
172
186
  }
@@ -195,29 +209,29 @@ const RelationshipFieldComponent = props => {
195
209
  value: valueArg
196
210
  });
197
211
  if (!errorLoading) {
198
- await relationsToFetch.reduce(async (priorRelation, relation) => {
199
- const relationFilterOption = filterOptions_0?.[relation];
212
+ await relationsToFetch.reduce(async (priorRelation, relation_1) => {
213
+ const relationFilterOption = filterOptions_0?.[relation_1];
200
214
  let lastLoadedPageToUse;
201
215
  if (search !== searchArg) {
202
216
  lastLoadedPageToUse = 1;
203
217
  } else {
204
- lastLoadedPageToUse = lastLoadedPageArg[relation] + 1;
218
+ lastLoadedPageToUse = lastLoadedPageArg[relation_1] + 1;
205
219
  }
206
220
  await priorRelation;
207
221
  if (relationFilterOption === false) {
208
- setLastFullyLoadedRelation(relations.indexOf(relation));
222
+ setLastFullyLoadedRelation(relations.indexOf(relation_1));
209
223
  return Promise.resolve();
210
224
  }
211
225
  if (resultsFetched < 10) {
212
226
  const collection = getEntityConfig({
213
- collectionSlug: relation
227
+ collectionSlug: relation_1
214
228
  });
215
229
  const fieldToSearch = collection?.admin?.useAsTitle || 'id';
216
230
  let fieldToSort = collection?.defaultSort || 'id';
217
231
  if (typeof sortOptions === 'string') {
218
232
  fieldToSort = sortOptions;
219
- } else if (sortOptions?.[relation]) {
220
- fieldToSort = sortOptions[relation];
233
+ } else if (sortOptions?.[relation_1]) {
234
+ fieldToSort = sortOptions[relation_1];
221
235
  }
222
236
  const query = {
223
237
  depth: 0,
@@ -225,11 +239,14 @@ const RelationshipFieldComponent = props => {
225
239
  limit: maxResultsPerRequest,
226
240
  locale,
227
241
  page: lastLoadedPageToUse,
242
+ select: {
243
+ [fieldToSearch]: true
244
+ },
228
245
  sort: fieldToSort,
229
246
  where: {
230
247
  and: [{
231
248
  id: {
232
- not_in: relationMap[relation]
249
+ not_in: relationMap[relation_1]
233
250
  }
234
251
  }]
235
252
  }
@@ -244,7 +261,7 @@ const RelationshipFieldComponent = props => {
244
261
  if (relationFilterOption && typeof relationFilterOption !== 'boolean') {
245
262
  query.where.and.push(relationFilterOption);
246
263
  }
247
- const response = await fetch(`${serverURL}${api}/${relation}`, {
264
+ const response = await fetch(`${serverURL}${api}/${relation_1}`, {
248
265
  body: qs.stringify(query),
249
266
  credentials: 'include',
250
267
  headers: {
@@ -259,11 +276,11 @@ const RelationshipFieldComponent = props => {
259
276
  setLastLoadedPage(prevState => {
260
277
  return {
261
278
  ...prevState,
262
- [relation]: lastLoadedPageToUse
279
+ [relation_1]: lastLoadedPageToUse
263
280
  };
264
281
  });
265
282
  if (!data.nextPage) {
266
- setLastFullyLoadedRelation(relations.indexOf(relation));
283
+ setLastFullyLoadedRelation(relations.indexOf(relation_1));
267
284
  }
268
285
  if (data.docs.length > 0) {
269
286
  resultsFetched += data.docs.length;
@@ -277,14 +294,14 @@ const RelationshipFieldComponent = props => {
277
294
  });
278
295
  }
279
296
  } else if (response.status === 403) {
280
- setLastFullyLoadedRelation(relations.indexOf(relation));
297
+ setLastFullyLoadedRelation(relations.indexOf(relation_1));
281
298
  dispatchOptions({
282
299
  type: 'ADD',
283
300
  collection,
284
301
  config,
285
302
  docs: [],
286
303
  i18n,
287
- ids: relationMap[relation],
304
+ ids: relationMap[relation_1],
288
305
  sort
289
306
  });
290
307
  } else {
@@ -319,10 +336,10 @@ const RelationshipFieldComponent = props => {
319
336
  relationTo,
320
337
  value: value_1
321
338
  });
322
- void Object.entries(relationMap_0).reduce(async (priorRelation_0, [relation_0, ids]) => {
339
+ void Object.entries(relationMap_0).reduce(async (priorRelation_0, [relation_2, ids]) => {
323
340
  await priorRelation_0;
324
341
  const idsToLoad = ids.filter(id => {
325
- return !options.find(optionGroup => optionGroup?.options?.find(option => option.value === id && option.relationTo === relation_0));
342
+ return !options.find(optionGroup => optionGroup?.options?.find(option => option.value === id && option.relationTo === relation_2));
326
343
  });
327
344
  if (idsToLoad.length > 0) {
328
345
  const query_0 = {
@@ -337,7 +354,7 @@ const RelationshipFieldComponent = props => {
337
354
  }
338
355
  };
339
356
  if (!errorLoading) {
340
- const response_0 = await fetch(`${serverURL}${api}/${relation_0}`, {
357
+ const response_0 = await fetch(`${serverURL}${api}/${relation_2}`, {
341
358
  body: qs.stringify(query_0),
342
359
  credentials: 'include',
343
360
  headers: {
@@ -348,7 +365,7 @@ const RelationshipFieldComponent = props => {
348
365
  method: 'POST'
349
366
  });
350
367
  const collection_0 = getEntityConfig({
351
- collectionSlug: relation_0
368
+ collectionSlug: relation_2
352
369
  });
353
370
  let docs = [];
354
371
  if (response_0.ok) {
@@ -383,9 +400,9 @@ const RelationshipFieldComponent = props => {
383
400
  // Determine if we should switch to word boundary search
384
401
  useEffect(() => {
385
402
  const relations_0 = Array.isArray(relationTo) ? relationTo : [relationTo];
386
- const isIdOnly = relations_0.reduce((idOnly, relation_1) => {
403
+ const isIdOnly = relations_0.reduce((idOnly, relation_3) => {
387
404
  const collection_1 = getEntityConfig({
388
- collectionSlug: relation_1
405
+ collectionSlug: relation_3
389
406
  });
390
407
  const fieldToSearch_0 = collection_1?.admin?.useAsTitle || 'id';
391
408
  return fieldToSearch_0 === 'id' && idOnly;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["dequal","wordBoundariesRegex","qs","React","useCallback","useEffect","useMemo","useReducer","useRef","useState","AddNewRelation","useDocumentDrawer","useListDrawer","ReactSelect","RenderCustomComponent","FieldDescription","FieldError","FieldLabel","useField","withCondition","useDebouncedCallback","useEffectEvent","useAuth","useConfig","useLocale","useTranslation","mergeFieldStyles","fieldBaseClass","createRelationMap","findOptionsByValue","optionsReducer","MultiValueLabel","SingleValue","maxResultsPerRequest","baseClass","RelationshipFieldComponent","props","field","admin","allowCreate","allowEdit","appearance","className","description","isSortable","sortOptions","hasMany","label","localized","relationTo","required","path","pathFromProps","readOnly","validate","config","getEntityConfig","routes","api","serverURL","i18n","t","permissions","code","locale","hasMultipleRelations","Array","isArray","currentlyOpenRelationship","setCurrentlyOpenRelationship","id","undefined","collectionSlug","hasReadPermission","lastFullyLoadedRelation","setLastFullyLoadedRelation","lastLoadedPage","setLastLoadedPage","errorLoading","setErrorLoading","search","setSearch","isLoading","setIsLoading","enableWordBoundarySearch","setEnableWordBoundarySearch","menuIsOpen","setMenuIsOpen","hasLoadedFirstPageRef","memoizedValidate","value","validationOptions","customComponents","AfterInput","BeforeInput","Description","Error","Label","disabled","filterOptions","initialValue","setValue","showError","potentiallyStalePath","options","dispatchOptions","valueRef","current","DocumentDrawer","isDrawerOpen","openDrawer","listDrawerFilterOptions","newFilterOptions","forEach","val","not_in","ListDrawer","closeDrawer","closeListDrawer","isListDrawerOpen","openListDrawer","collectionSlugs","onListSelect","doc","formattedSelection","withSelection","push","openDrawerWhenRelationChanges","getResults","lastFullyLoadedRelationArg","lastLoadedPageArg","onSuccess","searchArg","sort","valueArg","lastFullyLoadedRelationToUse","relations","relationsToFetch","slice","resultsFetched","relationMap","reduce","priorRelation","relation","relationFilterOption","lastLoadedPageToUse","indexOf","Promise","resolve","collection","fieldToSearch","useAsTitle","fieldToSort","defaultSort","query","depth","draft","limit","page","where","and","like","response","fetch","body","stringify","credentials","headers","language","method","ok","data","json","prevState","nextPage","docs","length","type","status","ids","updateSearch","handleInputChange","handleValueChange","Object","entries","idsToLoad","filter","find","optionGroup","option","in","prevValue","isFirstRenderRef","isIdOnly","idOnly","getResultsEffectEvent","args","exemptValues","onSave","collectionConfig","currentValue","docID","unchanged","some","valuesToSet","map","slug","onDuplicate","concat","onDelete","filterOption","item","searchFilter","r","breakApartThreshold","labelString","String","indexOfSpace","test","onDocumentDrawerOpen","valueToRender","styles","_jsxs","Boolean","join","replace","style","_jsx","CustomComponent","Fallback","backspaceRemovesValue","components","DropdownIndicator","customProps","disableKeyDown","disableMouseDown","getOptionValue","isMulti","isSearchable","onChange","selected","onInputChange","newSearch","onMenuClose","onMenuOpen","onMenuScrollToBottom","enableRowSelections","onSelect","RelationshipField"],"sources":["../../../src/fields/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type {\n FilterOptionsResult,\n PaginatedDocs,\n RelationshipFieldClientComponent,\n Where,\n} from 'payload'\n\nimport { dequal } from 'dequal/lite'\nimport { wordBoundariesRegex } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react'\n\nimport type { DocumentDrawerProps } from '../../elements/DocumentDrawer/types.js'\nimport type { ListDrawerProps } from '../../elements/ListDrawer/types.js'\nimport type { ReactSelectAdapterProps } from '../../elements/ReactSelect/types.js'\nimport type { GetResults, Option, Value } from './types.js'\n\nimport { AddNewRelation } from '../../elements/AddNewRelation/index.js'\nimport { useDocumentDrawer } from '../../elements/DocumentDrawer/index.js'\nimport { useListDrawer } from '../../elements/ListDrawer/index.js'\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { FieldDescription } from '../../fields/FieldDescription/index.js'\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDebouncedCallback } from '../../hooks/useDebouncedCallback.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.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 './index.scss'\nimport { mergeFieldStyles } from '../mergeFieldStyles.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { createRelationMap } from './createRelationMap.js'\nimport { findOptionsByValue } from './findOptionsByValue.js'\nimport { optionsReducer } from './optionsReducer.js'\nimport { MultiValueLabel } from './select-components/MultiValueLabel/index.js'\nimport { SingleValue } from './select-components/SingleValue/index.js'\n\nconst maxResultsPerRequest = 10\n\nconst baseClass = 'relationship'\n\nconst RelationshipFieldComponent: RelationshipFieldClientComponent = (props) => {\n const {\n field,\n field: {\n admin: {\n allowCreate = true,\n allowEdit = true,\n appearance = 'select',\n className,\n description,\n isSortable = true,\n sortOptions,\n } = {},\n hasMany,\n label,\n localized,\n relationTo,\n required,\n },\n path: pathFromProps,\n readOnly,\n validate,\n } = props\n\n const { config, getEntityConfig } = useConfig()\n\n const {\n routes: { api },\n serverURL,\n } = config\n\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n const { code: locale } = useLocale()\n const hasMultipleRelations = Array.isArray(relationTo)\n\n const [currentlyOpenRelationship, setCurrentlyOpenRelationship] = useState<\n Parameters<ReactSelectAdapterProps['customProps']['onDocumentDrawerOpen']>[0]\n >({\n id: undefined,\n collectionSlug: undefined,\n hasReadPermission: false,\n })\n\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, setMenuIsOpen] = useState(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\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n disabled,\n filterOptions,\n initialValue,\n path,\n setValue,\n showError,\n value,\n } = useField<Value | Value[]>({\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n\n const valueRef = useRef(value)\n valueRef.current = value\n\n const [DocumentDrawer, , { isDrawerOpen, openDrawer }] = useDocumentDrawer({\n id: currentlyOpenRelationship.id,\n collectionSlug: currentlyOpenRelationship.collectionSlug,\n })\n\n // Filter selected values from displaying in the list drawer\n const listDrawerFilterOptions = useMemo<FilterOptionsResult>(() => {\n let newFilterOptions = filterOptions\n\n if (value) {\n ;(Array.isArray(value) ? value : [value]).forEach((val) => {\n ;(Array.isArray(relationTo) ? relationTo : [relationTo]).forEach((relationTo) => {\n newFilterOptions = {\n ...(filterOptions || {}),\n [relationTo]: {\n ...(typeof filterOptions?.[relationTo] === 'object' ? filterOptions[relationTo] : {}),\n id: {\n not_in: [typeof val === 'object' ? val.value : val],\n },\n },\n }\n })\n })\n }\n\n return newFilterOptions\n }, [filterOptions, value, relationTo])\n\n const [\n ListDrawer,\n ,\n { closeDrawer: closeListDrawer, isDrawerOpen: isListDrawerOpen, openDrawer: openListDrawer },\n ] = useListDrawer({\n collectionSlugs: hasMultipleRelations ? relationTo : [relationTo],\n filterOptions: listDrawerFilterOptions,\n })\n\n const onListSelect = useCallback<NonNullable<ListDrawerProps['onSelect']>>(\n ({ collectionSlug, doc }) => {\n const formattedSelection = hasMultipleRelations\n ? {\n relationTo: collectionSlug,\n value: doc.id,\n }\n : doc.id\n\n if (hasMany) {\n const withSelection = Array.isArray(value) ? value : []\n withSelection.push(formattedSelection)\n setValue(withSelection)\n } else {\n setValue(formattedSelection)\n }\n\n closeListDrawer()\n },\n [hasMany, hasMultipleRelations, setValue, closeListDrawer, value],\n )\n\n const openDrawerWhenRelationChanges = useRef(false)\n\n const getResults: GetResults = useCallback(\n async ({\n filterOptions,\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 = getEntityConfig({ collectionSlug: relation })\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n let fieldToSort = collection?.defaultSort || 'id'\n if (typeof sortOptions === 'string') {\n fieldToSort = sortOptions\n } else if (sortOptions?.[relation]) {\n fieldToSort = sortOptions[relation]\n }\n\n const query: {\n [key: string]: unknown\n where: Where\n } = {\n depth: 0,\n draft: true,\n limit: maxResultsPerRequest,\n locale,\n page: lastLoadedPageToUse,\n sort: fieldToSort,\n where: {\n and: [\n {\n id: {\n not_in: relationMap[relation],\n },\n },\n ],\n },\n }\n\n if (searchArg) {\n query.where.and.push({\n [fieldToSearch]: {\n like: searchArg,\n },\n })\n }\n\n if (relationFilterOption && typeof relationFilterOption !== 'boolean') {\n query.where.and.push(relationFilterOption)\n }\n\n const response = await fetch(`${serverURL}${api}/${relation}`, {\n body: qs.stringify(query),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n method: 'POST',\n })\n\n if (response.ok) {\n const data: PaginatedDocs<unknown> = await response.json()\n setLastLoadedPage((prevState) => {\n return {\n ...prevState,\n [relation]: lastLoadedPageToUse,\n }\n })\n\n if (!data.nextPage) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n }\n\n if (data.docs.length > 0) {\n resultsFetched += data.docs.length\n\n dispatchOptions({\n type: 'ADD',\n collection,\n 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 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') {\n onSuccess()\n }\n }\n },\n [\n permissions,\n relationTo,\n hasMany,\n errorLoading,\n search,\n getEntityConfig,\n locale,\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({\n filterOptions,\n lastLoadedPage: {},\n search: searchArg,\n sort: true,\n value: valueArg,\n })\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 const handleValueChange = useEffectEvent((value: Value | Value[]) => {\n const relationMap = createRelationMap({\n hasMany,\n relationTo,\n value,\n })\n\n void Object.entries(relationMap).reduce(async (priorRelation, [relation, ids]) => {\n await priorRelation\n\n const idsToLoad = ids.filter((id) => {\n return !options.find((optionGroup) =>\n optionGroup?.options?.find(\n (option) => option.value === id && option.relationTo === relation,\n ),\n )\n })\n\n if (idsToLoad.length > 0) {\n const query = {\n depth: 0,\n draft: true,\n limit: idsToLoad.length,\n locale,\n where: {\n id: {\n in: idsToLoad,\n },\n },\n }\n\n if (!errorLoading) {\n const response = await fetch(`${serverURL}${api}/${relation}`, {\n body: qs.stringify(query),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n method: 'POST',\n })\n\n const collection = getEntityConfig({ collectionSlug: 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 config,\n docs,\n i18n,\n ids: idsToLoad,\n sort: true,\n })\n }\n }\n }, Promise.resolve())\n })\n\n const prevValue = useRef(value)\n const isFirstRenderRef = useRef(true)\n // ///////////////////////////////////\n // Ensure we have an option for each value\n // ///////////////////////////////////\n useEffect(() => {\n if (isFirstRenderRef.current || !dequal(value, prevValue.current)) {\n handleValueChange(value)\n }\n isFirstRenderRef.current = false\n prevValue.current = value\n }, [value])\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 = getEntityConfig({ collectionSlug: relation })\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n return fieldToSearch === 'id' && idOnly\n }, true)\n setEnableWordBoundarySearch(!isIdOnly)\n }, [relationTo, getEntityConfig])\n\n const getResultsEffectEvent: GetResults = useEffectEvent(async (args) => {\n return await getResults(args)\n })\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 form state and fast clicking into this field,\n // re-fetch options\n if (hasLoadedFirstPageRef.current && menuIsOpen) {\n setIsLoading(true)\n void getResultsEffectEvent({\n filterOptions,\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 opens\n dispatchOptions({\n type: 'CLEAR',\n exemptValues: valueRef.current,\n })\n\n setLastFullyLoadedRelation(-1)\n setLastLoadedPage({})\n }, [relationTo, filterOptions, locale, path, menuIsOpen])\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n dispatchOptions({\n type: 'UPDATE',\n collection: args.collectionConfig,\n config,\n doc: args.doc,\n i18n,\n })\n\n const currentValue = valueRef.current\n const docID = args.doc.id\n\n if (hasMany) {\n const unchanged = (currentValue as Option[]).some((option) =>\n typeof option === 'string' ? option === docID : option.value === docID,\n )\n\n const valuesToSet = (currentValue as Option[]).map((option) =>\n option.value === docID\n ? { relationTo: args.collectionConfig.slug, value: docID }\n : option,\n )\n\n setValue(valuesToSet, unchanged)\n } else {\n const unchanged = currentValue === docID\n\n setValue({ relationTo: args.collectionConfig.slug, value: docID }, unchanged)\n }\n },\n [i18n, config, hasMany, setValue],\n )\n\n const onDuplicate = useCallback<DocumentDrawerProps['onDuplicate']>(\n (args) => {\n dispatchOptions({\n type: 'ADD',\n collection: args.collectionConfig,\n config,\n docs: [args.doc],\n i18n,\n sort: true,\n })\n\n if (hasMany) {\n setValue(\n valueRef.current\n ? (valueRef.current as Option[]).concat({\n relationTo: args.collectionConfig.slug,\n value: args.doc.id,\n } as Option)\n : null,\n )\n } else {\n setValue({\n relationTo: args.collectionConfig.slug,\n value: args.doc.id,\n })\n }\n },\n [i18n, config, hasMany, setValue],\n )\n\n const onDelete = useCallback<DocumentDrawerProps['onDelete']>(\n (args) => {\n dispatchOptions({\n id: args.id,\n type: 'REMOVE',\n collection: args.collectionConfig,\n config,\n i18n,\n })\n\n if (hasMany) {\n setValue(\n valueRef.current\n ? (valueRef.current as Option[]).filter((option) => {\n return option.value !== args.id\n })\n : null,\n )\n } else {\n setValue(null)\n }\n\n return\n },\n [i18n, config, hasMany, setValue],\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 labelString = String(item.label)\n // strings less than breakApartThreshold length won't be chunked\n while (labelString.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 = labelString.indexOf(' ', searchFilter.length)\n if (\n r.test(labelString.slice(0, indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1))\n ) {\n return true\n }\n labelString = labelString.slice(indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1)\n }\n return r.test(labelString.slice(-breakApartThreshold))\n }, [])\n\n const onDocumentDrawerOpen = useCallback<\n ReactSelectAdapterProps['customProps']['onDocumentDrawerOpen']\n >(({ id, collectionSlug, hasReadPermission }) => {\n openDrawerWhenRelationChanges.current = true\n setCurrentlyOpenRelationship({\n id,\n collectionSlug,\n hasReadPermission,\n })\n }, [])\n\n useEffect(() => {\n if (openDrawerWhenRelationChanges.current) {\n openDrawer()\n openDrawerWhenRelationChanges.current = false\n }\n }, [openDrawer, currentlyOpenRelationship])\n\n const valueToRender = findOptionsByValue({ allowEdit, options, value })\n\n if (!Array.isArray(valueToRender) && valueToRender?.value === 'null') {\n valueToRender.value = null\n }\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n errorLoading && 'error-loading',\n (readOnly || disabled) && `${baseClass}--read-only`,\n !(readOnly || disabled) && allowCreate && `${baseClass}--allow-create`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n style={styles}\n >\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n }\n />\n <div className={`${fieldBaseClass}__wrap`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n {BeforeInput}\n {!errorLoading && (\n <div className={`${baseClass}__wrap`}>\n <ReactSelect\n backspaceRemovesValue={!(isDrawerOpen || isListDrawerOpen)}\n components={{\n MultiValueLabel,\n SingleValue,\n ...(appearance !== 'select' && { DropdownIndicator: null }),\n }}\n customProps={{\n disableKeyDown: isDrawerOpen || isListDrawerOpen,\n disableMouseDown: isDrawerOpen || isListDrawerOpen,\n onDocumentDrawerOpen,\n onSave,\n }}\n disabled={readOnly || disabled || isDrawerOpen || isListDrawerOpen}\n filterOption={enableWordBoundarySearch ? filterOption : undefined}\n getOptionValue={(option) => {\n if (!option) {\n return undefined\n }\n return hasMany && Array.isArray(relationTo)\n ? `${option.relationTo}_${option.value}`\n : (option.value as string)\n }}\n isLoading={appearance === 'select' && isLoading}\n isMulti={hasMany}\n isSearchable={appearance === 'select'}\n isSortable={isSortable}\n menuIsOpen={appearance === 'select' ? menuIsOpen : false}\n onChange={\n !(readOnly || disabled)\n ? (selected) => {\n if (selected === null) {\n setValue(hasMany ? [] : null)\n } else if (hasMany && Array.isArray(selected)) {\n setValue(\n selected\n ? selected.map((option) => {\n if (hasMultipleRelations) {\n return {\n relationTo: option.relationTo,\n value: option.value,\n }\n }\n\n return option.value\n })\n : null,\n )\n } else if (hasMultipleRelations && !Array.isArray(selected)) {\n setValue({\n relationTo: selected.relationTo,\n value: selected.value,\n })\n } else if (!Array.isArray(selected)) {\n setValue(selected.value)\n }\n }\n : undefined\n }\n onInputChange={(newSearch) => handleInputChange(newSearch, value)}\n onMenuClose={() => {\n setMenuIsOpen(false)\n }}\n onMenuOpen={() => {\n if (appearance === 'drawer') {\n openListDrawer()\n } else if (appearance === 'select') {\n setMenuIsOpen(true)\n if (!hasLoadedFirstPageRef.current) {\n setIsLoading(true)\n void getResults({\n filterOptions,\n lastLoadedPage: {},\n onSuccess: () => {\n hasLoadedFirstPageRef.current = true\n setIsLoading(false)\n },\n value: initialValue,\n })\n }\n }\n }}\n onMenuScrollToBottom={() => {\n void getResults({\n filterOptions,\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 || disabled) && allowCreate && (\n <AddNewRelation\n hasMany={hasMany}\n path={path}\n relationTo={relationTo}\n setValue={setValue}\n value={value}\n />\n )}\n </div>\n )}\n {errorLoading && <div className={`${baseClass}__error-loading`}>{errorLoading}</div>}\n {AfterInput}\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n {currentlyOpenRelationship.collectionSlug && currentlyOpenRelationship.hasReadPermission && (\n <DocumentDrawer onDelete={onDelete} onDuplicate={onDuplicate} onSave={onSave} />\n )}\n {appearance === 'drawer' && !readOnly && (\n <ListDrawer allowCreate={allowCreate} enableRowSelections={false} onSelect={onListSelect} />\n )}\n </div>\n )\n}\n\nexport const RelationshipField = withCondition(RelationshipFieldComponent)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["dequal","wordBoundariesRegex","qs","React","useCallback","useEffect","useMemo","useReducer","useRef","useState","AddNewRelation","useDocumentDrawer","useListDrawer","ReactSelect","RenderCustomComponent","FieldDescription","FieldError","FieldLabel","useField","withCondition","useDebouncedCallback","useEffectEvent","useAuth","useConfig","useLocale","useTranslation","mergeFieldStyles","fieldBaseClass","createRelationMap","findOptionsByValue","optionsReducer","MultiValueLabel","SingleValue","maxResultsPerRequest","baseClass","RelationshipFieldComponent","props","field","admin","allowCreate","allowEdit","appearance","className","description","isSortable","sortOptions","hasMany","label","localized","relationTo","required","path","pathFromProps","readOnly","validate","config","getEntityConfig","routes","api","serverURL","i18n","t","permissions","code","locale","hasMultipleRelations","Array","isArray","currentlyOpenRelationship","setCurrentlyOpenRelationship","id","undefined","collectionSlug","hasReadPermission","lastFullyLoadedRelation","setLastFullyLoadedRelation","lastLoadedPage","setLastLoadedPage","errorLoading","setErrorLoading","search","setSearch","isLoading","setIsLoading","enableWordBoundarySearch","setEnableWordBoundarySearch","menuIsOpen","setMenuIsOpen","hasLoadedFirstPageRef","memoizedValidate","value","validationOptions","customComponents","AfterInput","BeforeInput","Description","Error","Label","disabled","filterOptions","initialValue","setValue","showError","potentiallyStalePath","options","dispatchOptions","valueRef","current","DocumentDrawer","isDrawerOpen","openDrawer","listDrawerFilterOptions","newFilterOptions","valuesByRelation","reduce","acc","val","push","relation","forEach","not_in","ListDrawer","closeDrawer","closeListDrawer","isListDrawerOpen","openListDrawer","collectionSlugs","onListSelect","doc","formattedSelection","withSelection","openDrawerWhenRelationChanges","getResults","lastFullyLoadedRelationArg","lastLoadedPageArg","onSuccess","searchArg","sort","valueArg","lastFullyLoadedRelationToUse","relations","relationsToFetch","slice","resultsFetched","relationMap","priorRelation","relationFilterOption","lastLoadedPageToUse","indexOf","Promise","resolve","collection","fieldToSearch","useAsTitle","fieldToSort","defaultSort","query","depth","draft","limit","page","select","where","and","like","response","fetch","body","stringify","credentials","headers","language","method","ok","data","json","prevState","nextPage","docs","length","type","status","ids","updateSearch","handleInputChange","handleValueChange","Object","entries","idsToLoad","filter","find","optionGroup","option","in","prevValue","isFirstRenderRef","isIdOnly","idOnly","getResultsEffectEvent","args","exemptValues","onSave","collectionConfig","currentValue","docID","unchanged","some","valuesToSet","map","slug","onDuplicate","concat","onDelete","filterOption","item","searchFilter","r","breakApartThreshold","labelString","String","indexOfSpace","test","onDocumentDrawerOpen","valueToRender","styles","_jsxs","Boolean","join","replace","style","_jsx","CustomComponent","Fallback","backspaceRemovesValue","components","DropdownIndicator","customProps","disableKeyDown","disableMouseDown","getOptionValue","isMulti","isSearchable","onChange","selected","onInputChange","newSearch","onMenuClose","onMenuOpen","onMenuScrollToBottom","enableRowSelections","onSelect","RelationshipField"],"sources":["../../../src/fields/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type {\n FilterOptionsResult,\n PaginatedDocs,\n RelationshipFieldClientComponent,\n Where,\n} from 'payload'\n\nimport { dequal } from 'dequal/lite'\nimport { wordBoundariesRegex } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react'\n\nimport type { DocumentDrawerProps } from '../../elements/DocumentDrawer/types.js'\nimport type { ListDrawerProps } from '../../elements/ListDrawer/types.js'\nimport type { ReactSelectAdapterProps } from '../../elements/ReactSelect/types.js'\nimport type { GetResults, Option, Value } from './types.js'\n\nimport { AddNewRelation } from '../../elements/AddNewRelation/index.js'\nimport { useDocumentDrawer } from '../../elements/DocumentDrawer/index.js'\nimport { useListDrawer } from '../../elements/ListDrawer/index.js'\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { FieldDescription } from '../../fields/FieldDescription/index.js'\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDebouncedCallback } from '../../hooks/useDebouncedCallback.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.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 './index.scss'\nimport { mergeFieldStyles } from '../mergeFieldStyles.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { createRelationMap } from './createRelationMap.js'\nimport { findOptionsByValue } from './findOptionsByValue.js'\nimport { optionsReducer } from './optionsReducer.js'\nimport { MultiValueLabel } from './select-components/MultiValueLabel/index.js'\nimport { SingleValue } from './select-components/SingleValue/index.js'\n\nconst maxResultsPerRequest = 10\n\nconst baseClass = 'relationship'\n\nconst RelationshipFieldComponent: RelationshipFieldClientComponent = (props) => {\n const {\n field,\n field: {\n admin: {\n allowCreate = true,\n allowEdit = true,\n appearance = 'select',\n className,\n description,\n isSortable = true,\n sortOptions,\n } = {},\n hasMany,\n label,\n localized,\n relationTo,\n required,\n },\n path: pathFromProps,\n readOnly,\n validate,\n } = props\n\n const { config, getEntityConfig } = useConfig()\n\n const {\n routes: { api },\n serverURL,\n } = config\n\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n const { code: locale } = useLocale()\n const hasMultipleRelations = Array.isArray(relationTo)\n\n const [currentlyOpenRelationship, setCurrentlyOpenRelationship] = useState<\n Parameters<ReactSelectAdapterProps['customProps']['onDocumentDrawerOpen']>[0]\n >({\n id: undefined,\n collectionSlug: undefined,\n hasReadPermission: false,\n })\n\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, setMenuIsOpen] = useState(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\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n disabled,\n filterOptions,\n initialValue,\n path,\n setValue,\n showError,\n value,\n } = useField<Value | Value[]>({\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n\n const valueRef = useRef(value)\n valueRef.current = value\n\n const [DocumentDrawer, , { isDrawerOpen, openDrawer }] = useDocumentDrawer({\n id: currentlyOpenRelationship.id,\n collectionSlug: currentlyOpenRelationship.collectionSlug,\n })\n\n // Filter selected values from displaying in the list drawer\n const listDrawerFilterOptions = useMemo<FilterOptionsResult>(() => {\n let newFilterOptions = filterOptions\n\n if (value) {\n const valuesByRelation = (Array.isArray(value) ? value : [value]).reduce((acc, val) => {\n if (typeof val === 'object' && val.relationTo) {\n if (!acc[val.relationTo]) {\n acc[val.relationTo] = []\n }\n acc[val.relationTo].push(val.value)\n } else if (val) {\n const relation = Array.isArray(relationTo) ? undefined : relationTo\n if (relation) {\n if (!acc[relation]) {\n acc[relation] = []\n }\n acc[relation].push(val)\n }\n }\n return acc\n }, {})\n\n ;(Array.isArray(relationTo) ? relationTo : [relationTo]).forEach((relation) => {\n newFilterOptions = {\n ...(newFilterOptions || {}),\n [relation]: {\n ...(typeof filterOptions?.[relation] === 'object' ? filterOptions[relation] : {}),\n ...(valuesByRelation[relation]\n ? {\n id: {\n not_in: valuesByRelation[relation],\n },\n }\n : {}),\n },\n }\n })\n }\n\n return newFilterOptions\n }, [filterOptions, value, relationTo])\n\n const [\n ListDrawer,\n ,\n { closeDrawer: closeListDrawer, isDrawerOpen: isListDrawerOpen, openDrawer: openListDrawer },\n ] = useListDrawer({\n collectionSlugs: hasMultipleRelations ? relationTo : [relationTo],\n filterOptions: listDrawerFilterOptions,\n })\n\n const onListSelect = useCallback<NonNullable<ListDrawerProps['onSelect']>>(\n ({ collectionSlug, doc }) => {\n const formattedSelection = hasMultipleRelations\n ? {\n relationTo: collectionSlug,\n value: doc.id,\n }\n : doc.id\n\n if (hasMany) {\n const withSelection = Array.isArray(value) ? value : []\n setValue([...withSelection, formattedSelection])\n } else {\n setValue(formattedSelection)\n }\n\n closeListDrawer()\n },\n [hasMany, hasMultipleRelations, setValue, closeListDrawer, value],\n )\n\n const openDrawerWhenRelationChanges = useRef(false)\n\n const getResults: GetResults = useCallback(\n async ({\n filterOptions,\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 = getEntityConfig({ collectionSlug: 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 select: {\n [fieldToSearch]: true,\n },\n sort: fieldToSort,\n where: {\n and: [\n {\n id: {\n not_in: relationMap[relation],\n },\n },\n ],\n },\n }\n\n if (searchArg) {\n query.where.and.push({\n [fieldToSearch]: {\n like: searchArg,\n },\n })\n }\n\n if (relationFilterOption && typeof relationFilterOption !== 'boolean') {\n query.where.and.push(relationFilterOption)\n }\n\n const response = await fetch(`${serverURL}${api}/${relation}`, {\n body: qs.stringify(query),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n method: 'POST',\n })\n\n if (response.ok) {\n const data: PaginatedDocs<unknown> = await response.json()\n setLastLoadedPage((prevState) => {\n return {\n ...prevState,\n [relation]: lastLoadedPageToUse,\n }\n })\n\n if (!data.nextPage) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n }\n\n if (data.docs.length > 0) {\n resultsFetched += data.docs.length\n\n dispatchOptions({\n type: 'ADD',\n collection,\n 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 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') {\n onSuccess()\n }\n }\n },\n [\n permissions,\n relationTo,\n hasMany,\n errorLoading,\n search,\n getEntityConfig,\n locale,\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({\n filterOptions,\n lastLoadedPage: {},\n search: searchArg,\n sort: true,\n value: valueArg,\n })\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 const handleValueChange = useEffectEvent((value: Value | Value[]) => {\n const relationMap = createRelationMap({\n hasMany,\n relationTo,\n value,\n })\n\n void Object.entries(relationMap).reduce(async (priorRelation, [relation, ids]) => {\n await priorRelation\n\n const idsToLoad = ids.filter((id) => {\n return !options.find((optionGroup) =>\n optionGroup?.options?.find(\n (option) => option.value === id && option.relationTo === relation,\n ),\n )\n })\n\n if (idsToLoad.length > 0) {\n const query = {\n depth: 0,\n draft: true,\n limit: idsToLoad.length,\n locale,\n where: {\n id: {\n in: idsToLoad,\n },\n },\n }\n\n if (!errorLoading) {\n const response = await fetch(`${serverURL}${api}/${relation}`, {\n body: qs.stringify(query),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n method: 'POST',\n })\n\n const collection = getEntityConfig({ collectionSlug: 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 config,\n docs,\n i18n,\n ids: idsToLoad,\n sort: true,\n })\n }\n }\n }, Promise.resolve())\n })\n\n const prevValue = useRef(value)\n const isFirstRenderRef = useRef(true)\n // ///////////////////////////////////\n // Ensure we have an option for each value\n // ///////////////////////////////////\n useEffect(() => {\n if (isFirstRenderRef.current || !dequal(value, prevValue.current)) {\n handleValueChange(value)\n }\n isFirstRenderRef.current = false\n prevValue.current = value\n }, [value])\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 = getEntityConfig({ collectionSlug: relation })\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n return fieldToSearch === 'id' && idOnly\n }, true)\n setEnableWordBoundarySearch(!isIdOnly)\n }, [relationTo, getEntityConfig])\n\n const getResultsEffectEvent: GetResults = useEffectEvent(async (args) => {\n return await getResults(args)\n })\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 form state and fast clicking into this field,\n // re-fetch options\n if (hasLoadedFirstPageRef.current && menuIsOpen) {\n setIsLoading(true)\n void getResultsEffectEvent({\n filterOptions,\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 opens\n dispatchOptions({\n type: 'CLEAR',\n exemptValues: valueRef.current,\n })\n\n setLastFullyLoadedRelation(-1)\n setLastLoadedPage({})\n }, [relationTo, filterOptions, locale, path, menuIsOpen])\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n dispatchOptions({\n type: 'UPDATE',\n collection: args.collectionConfig,\n config,\n doc: args.doc,\n i18n,\n })\n\n const currentValue = valueRef.current\n const docID = args.doc.id\n\n if (hasMany) {\n const unchanged = (currentValue as Option[]).some((option) =>\n typeof option === 'string' ? option === docID : option.value === docID,\n )\n\n const valuesToSet = (currentValue as Option[]).map((option) =>\n option.value === docID\n ? { relationTo: args.collectionConfig.slug, value: docID }\n : option,\n )\n\n setValue(valuesToSet, unchanged)\n } else {\n const unchanged = currentValue === docID\n\n setValue({ relationTo: args.collectionConfig.slug, value: docID }, unchanged)\n }\n },\n [i18n, config, hasMany, setValue],\n )\n\n const onDuplicate = useCallback<DocumentDrawerProps['onDuplicate']>(\n (args) => {\n dispatchOptions({\n type: 'ADD',\n collection: args.collectionConfig,\n config,\n docs: [args.doc],\n i18n,\n sort: true,\n })\n\n if (hasMany) {\n setValue(\n valueRef.current\n ? (valueRef.current as Option[]).concat({\n relationTo: args.collectionConfig.slug,\n value: args.doc.id,\n } as Option)\n : null,\n )\n } else {\n setValue({\n relationTo: args.collectionConfig.slug,\n value: args.doc.id,\n })\n }\n },\n [i18n, config, hasMany, setValue],\n )\n\n const onDelete = useCallback<DocumentDrawerProps['onDelete']>(\n (args) => {\n dispatchOptions({\n id: args.id,\n type: 'REMOVE',\n collection: args.collectionConfig,\n config,\n i18n,\n })\n\n if (hasMany) {\n setValue(\n valueRef.current\n ? (valueRef.current as Option[]).filter((option) => {\n return option.value !== args.id\n })\n : null,\n )\n } else {\n setValue(null)\n }\n\n return\n },\n [i18n, config, hasMany, setValue],\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 labelString = String(item.label)\n // strings less than breakApartThreshold length won't be chunked\n while (labelString.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 = labelString.indexOf(' ', searchFilter.length)\n if (\n r.test(labelString.slice(0, indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1))\n ) {\n return true\n }\n labelString = labelString.slice(indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1)\n }\n return r.test(labelString.slice(-breakApartThreshold))\n }, [])\n\n const onDocumentDrawerOpen = useCallback<\n ReactSelectAdapterProps['customProps']['onDocumentDrawerOpen']\n >(({ id, collectionSlug, hasReadPermission }) => {\n openDrawerWhenRelationChanges.current = true\n setCurrentlyOpenRelationship({\n id,\n collectionSlug,\n hasReadPermission,\n })\n }, [])\n\n useEffect(() => {\n if (openDrawerWhenRelationChanges.current) {\n openDrawer()\n openDrawerWhenRelationChanges.current = false\n }\n }, [openDrawer, currentlyOpenRelationship])\n\n const valueToRender = findOptionsByValue({ allowEdit, options, value })\n\n if (!Array.isArray(valueToRender) && valueToRender?.value === 'null') {\n valueToRender.value = null\n }\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n errorLoading && 'error-loading',\n (readOnly || disabled) && `${baseClass}--read-only`,\n !(readOnly || disabled) && allowCreate && `${baseClass}--allow-create`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n style={styles}\n >\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n }\n />\n <div className={`${fieldBaseClass}__wrap`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n {BeforeInput}\n {!errorLoading && (\n <div className={`${baseClass}__wrap`}>\n <ReactSelect\n backspaceRemovesValue={!(isDrawerOpen || isListDrawerOpen)}\n components={{\n MultiValueLabel,\n SingleValue,\n ...(appearance !== 'select' && { DropdownIndicator: null }),\n }}\n customProps={{\n disableKeyDown: isDrawerOpen || isListDrawerOpen,\n disableMouseDown: isDrawerOpen || isListDrawerOpen,\n onDocumentDrawerOpen,\n onSave,\n }}\n disabled={readOnly || disabled || isDrawerOpen || isListDrawerOpen}\n filterOption={enableWordBoundarySearch ? filterOption : undefined}\n getOptionValue={(option) => {\n if (!option) {\n return undefined\n }\n return hasMany && Array.isArray(relationTo)\n ? `${option.relationTo}_${option.value}`\n : (option.value as string)\n }}\n isLoading={appearance === 'select' && isLoading}\n isMulti={hasMany}\n isSearchable={appearance === 'select'}\n isSortable={isSortable}\n menuIsOpen={appearance === 'select' ? menuIsOpen : false}\n onChange={\n !(readOnly || disabled)\n ? (selected) => {\n if (selected === null) {\n setValue(hasMany ? [] : null)\n } else if (hasMany && Array.isArray(selected)) {\n setValue(\n selected\n ? selected.map((option) => {\n if (hasMultipleRelations) {\n return {\n relationTo: option.relationTo,\n value: option.value,\n }\n }\n\n return option.value\n })\n : null,\n )\n } else if (hasMultipleRelations && !Array.isArray(selected)) {\n setValue({\n relationTo: selected.relationTo,\n value: selected.value,\n })\n } else if (!Array.isArray(selected)) {\n setValue(selected.value)\n }\n }\n : undefined\n }\n onInputChange={(newSearch) => handleInputChange(newSearch, value)}\n onMenuClose={() => {\n setMenuIsOpen(false)\n }}\n onMenuOpen={() => {\n if (appearance === 'drawer') {\n openListDrawer()\n } else if (appearance === 'select') {\n setMenuIsOpen(true)\n if (!hasLoadedFirstPageRef.current) {\n setIsLoading(true)\n void getResults({\n filterOptions,\n lastLoadedPage: {},\n onSuccess: () => {\n hasLoadedFirstPageRef.current = true\n setIsLoading(false)\n },\n value: initialValue,\n })\n }\n }\n }}\n onMenuScrollToBottom={() => {\n void getResults({\n filterOptions,\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 || disabled) && allowCreate && (\n <AddNewRelation\n hasMany={hasMany}\n path={path}\n relationTo={relationTo}\n setValue={setValue}\n value={value}\n />\n )}\n </div>\n )}\n {errorLoading && <div className={`${baseClass}__error-loading`}>{errorLoading}</div>}\n {AfterInput}\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n {currentlyOpenRelationship.collectionSlug && currentlyOpenRelationship.hasReadPermission && (\n <DocumentDrawer onDelete={onDelete} onDuplicate={onDuplicate} onSave={onSave} />\n )}\n {appearance === 'drawer' && !readOnly && (\n <ListDrawer allowCreate={allowCreate} enableRowSelections={false} onSelect={onListSelect} />\n )}\n </div>\n )\n}\n\nexport const RelationshipField = withCondition(RelationshipFieldComponent)\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"copyDataFromLocale.d.ts","sourceRoot":"","sources":["../../src/utilities/copyDataFromLocale.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EAKnB,KAAK,cAAc,EACpB,MAAM,SAAS,CAAA;AAMhB,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,GAAG,EAAE,cAAc,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAmKD,eAAO,MAAM,yBAAyB,SAAgB,sBAAsB,0EAiB3E,CAAA;AAED,eAAO,MAAM,kBAAkB,SAAgB,sBAAsB,0CA0HpE,CAAA"}
1
+ {"version":3,"file":"copyDataFromLocale.d.ts","sourceRoot":"","sources":["../../src/utilities/copyDataFromLocale.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EAKnB,KAAK,cAAc,EACpB,MAAM,SAAS,CAAA;AAMhB,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,GAAG,EAAE,cAAc,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AA8KD,eAAO,MAAM,yBAAyB,SAAgB,sBAAsB,0EAiB3E,CAAA;AAED,eAAO,MAAM,kBAAkB,SAAgB,sBAAsB,0CA2HpE,CAAA"}
@@ -108,6 +108,19 @@ function mergeData(fromLocaleData, toLocaleData, fields, req, parentIsLocalized)
108
108
  iterateFields(fields, fromLocaleData, toLocaleData, req, parentIsLocalized);
109
109
  return toLocaleData;
110
110
  }
111
+ function removeIds(data) {
112
+ if (Array.isArray(data)) {
113
+ return data.map(removeIds);
114
+ }
115
+ if (typeof data === 'object' && data !== null) {
116
+ const {
117
+ id: _id,
118
+ ...rest
119
+ } = data;
120
+ return Object.fromEntries(Object.entries(rest).map(([key, value]) => [key, removeIds(value)]));
121
+ }
122
+ return data;
123
+ }
111
124
  export const copyDataFromLocaleHandler = async args => {
112
125
  const {
113
126
  req
@@ -196,13 +209,11 @@ export const copyDataFromLocale = async args => {
196
209
  if (toLocaleData.status === 'rejected') {
197
210
  throw new Error(`Error fetching data from locale "${toLocale}"`);
198
211
  }
199
- const {
200
- id,
201
- ...fromLocaleDataWithoutID
202
- } = fromLocaleData.value;
212
+ const fromLocaleDataWithoutID = removeIds(fromLocaleData.value);
213
+ const toLocaleDataWithoutID = removeIds(toLocaleData.value);
203
214
  return globalSlug ? await payload.updateGlobal({
204
215
  slug: globalSlug,
205
- data: overrideData ? fromLocaleDataWithoutID : mergeData(fromLocaleData.value, toLocaleData.value, globals[globalSlug].config.fields, req, false),
216
+ data: overrideData ? fromLocaleDataWithoutID : mergeData(fromLocaleDataWithoutID, toLocaleDataWithoutID, globals[globalSlug].config.fields, req, false),
206
217
  locale: toLocale,
207
218
  overrideAccess: false,
208
219
  req,
@@ -210,7 +221,7 @@ export const copyDataFromLocale = async args => {
210
221
  }) : await payload.update({
211
222
  id: docID,
212
223
  collection: collectionSlug,
213
- data: overrideData ? fromLocaleDataWithoutID : mergeData(fromLocaleData.value, toLocaleData.value, collections[collectionSlug].config.fields, req, false),
224
+ data: overrideData ? fromLocaleDataWithoutID : mergeData(fromLocaleDataWithoutID, toLocaleDataWithoutID, collections[collectionSlug].config.fields, req, false),
214
225
  locale: toLocale,
215
226
  overrideAccess: false,
216
227
  req,
@@ -1 +1 @@
1
- {"version":3,"file":"copyDataFromLocale.js","names":["ObjectIdImport","formatErrors","fieldAffectsData","fieldShouldBeLocalized","tabHasName","ObjectId","default","iterateFields","fields","fromLocaleData","toLocaleData","req","parentIsLocalized","map","field","type","name","undefined","includes","item","index","id","toHexString","localized","blockData","block","payload","blocks","blockType","blockReferences","find","slug","length","tabs","tab","mergeData","copyDataFromLocaleHandler","args","copyDataFromLocale","err","logger","error","msg","fromLocale","toLocale","message","collectionSlug","docID","globalSlug","overrideData","collections","globals","user","incomingUserSlug","collection","adminUserSlug","config","admin","adminAccessFunction","access","canAccessAdmin","Error","Promise","allSettled","findGlobal","depth","locale","overrideAccess","findByID","joins","status","fromLocaleDataWithoutID","value","updateGlobal","data","update"],"sources":["../../src/utilities/copyDataFromLocale.ts"],"sourcesContent":["import ObjectIdImport from 'bson-objectid'\nimport {\n type CollectionSlug,\n type Data,\n type Field,\n type FlattenedBlock,\n formatErrors,\n type PayloadRequest,\n} from 'payload'\nimport { fieldAffectsData, fieldShouldBeLocalized, tabHasName } from 'payload/shared'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\nexport type CopyDataFromLocaleArgs = {\n collectionSlug?: CollectionSlug\n docID?: number | string\n fromLocale: string\n globalSlug?: string\n overrideData?: boolean\n req: PayloadRequest\n toLocale: string\n}\n\nfunction iterateFields(\n fields: Field[],\n fromLocaleData: Data,\n toLocaleData: Data,\n req: PayloadRequest,\n parentIsLocalized: boolean,\n): void {\n fields.map((field) => {\n if (fieldAffectsData(field)) {\n switch (field.type) {\n case 'array':\n // if the field has no value, take the source value\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n break\n }\n\n // if the field has a value - loop over the data from target\n if (field.name in toLocaleData) {\n toLocaleData[field.name].map((item: Data, index: number) => {\n if (fromLocaleData[field.name]?.[index]) {\n // Generate new IDs if the field is localized to prevent errors with relational DBs.\n if (fieldShouldBeLocalized({ field, parentIsLocalized })) {\n toLocaleData[field.name][index].id = new ObjectId().toHexString()\n }\n\n iterateFields(\n field.fields,\n fromLocaleData[field.name][index],\n item,\n req,\n parentIsLocalized || field.localized,\n )\n }\n })\n }\n break\n\n case 'blocks':\n // if the field has no value, take the source value\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n break\n }\n\n // if the field has a value - loop over the data from target\n if (field.name in toLocaleData) {\n toLocaleData[field.name].map((blockData: Data, index: number) => {\n const block =\n req.payload.blocks[blockData.blockType] ??\n ((field.blockReferences ?? field.blocks).find(\n (block) => typeof block !== 'string' && block.slug === blockData.blockType,\n ) as FlattenedBlock | undefined)\n\n // Generate new IDs if the field is localized to prevent errors with relational DBs.\n if (fieldShouldBeLocalized({ field, parentIsLocalized })) {\n toLocaleData[field.name][index].id = new ObjectId().toHexString()\n }\n\n if (block?.fields?.length) {\n iterateFields(\n block?.fields,\n fromLocaleData[field.name][index],\n blockData,\n req,\n parentIsLocalized || field.localized,\n )\n }\n })\n }\n\n break\n\n case 'checkbox':\n case 'code':\n case 'date':\n case 'email':\n case 'json':\n case 'number':\n case 'point':\n case 'radio':\n case 'relationship':\n case 'richText':\n case 'select':\n case 'text':\n case 'textarea':\n case 'upload':\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n }\n break\n\n case 'group': {\n if (field.name in toLocaleData && fromLocaleData?.[field.name] !== undefined) {\n iterateFields(\n field.fields,\n fromLocaleData[field.name],\n toLocaleData[field.name],\n req,\n parentIsLocalized || field.localized,\n )\n }\n break\n }\n }\n } else {\n switch (field.type) {\n case 'collapsible':\n case 'row':\n iterateFields(field.fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n break\n\n case 'tabs':\n field.tabs.map((tab) => {\n if (tabHasName(tab)) {\n if (tab.name in toLocaleData && fromLocaleData?.[tab.name] !== undefined) {\n iterateFields(\n tab.fields,\n fromLocaleData[tab.name],\n toLocaleData[tab.name],\n req,\n parentIsLocalized,\n )\n }\n } else {\n iterateFields(tab.fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n }\n })\n break\n }\n }\n })\n}\n\nfunction mergeData(\n fromLocaleData: Data,\n toLocaleData: Data,\n fields: Field[],\n req: PayloadRequest,\n parentIsLocalized: boolean,\n): Data {\n iterateFields(fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n\n return toLocaleData\n}\n\nexport const copyDataFromLocaleHandler = async (args: CopyDataFromLocaleArgs) => {\n const { req } = args\n\n try {\n return await copyDataFromLocale(args)\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `There was an error copying data from \"${args.fromLocale}\" to \"${args.toLocale}\"`,\n })\n\n if (err.message === 'Unauthorized') {\n return null\n }\n\n return formatErrors(err)\n }\n}\n\nexport const copyDataFromLocale = async (args: CopyDataFromLocaleArgs) => {\n const {\n collectionSlug,\n docID,\n fromLocale,\n globalSlug,\n overrideData = false,\n req: {\n payload,\n payload: { collections, globals },\n user,\n },\n req,\n toLocale,\n } = args\n\n const incomingUserSlug = user?.collection\n\n const adminUserSlug = payload.config.admin.user\n\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req: args.req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n }\n\n const [fromLocaleData, toLocaleData] = await Promise.allSettled([\n globalSlug\n ? payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n locale: fromLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n })\n : payload.findByID({\n id: docID,\n collection: collectionSlug,\n depth: 0,\n joins: false,\n locale: fromLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n }),\n globalSlug\n ? payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n locale: toLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n })\n : payload.findByID({\n id: docID,\n collection: collectionSlug,\n depth: 0,\n joins: false,\n locale: toLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n }),\n ])\n\n if (fromLocaleData.status === 'rejected') {\n throw new Error(`Error fetching data from locale \"${fromLocale}\"`)\n }\n\n if (toLocaleData.status === 'rejected') {\n throw new Error(`Error fetching data from locale \"${toLocale}\"`)\n }\n\n const { id, ...fromLocaleDataWithoutID } = fromLocaleData.value\n\n return globalSlug\n ? await payload.updateGlobal({\n slug: globalSlug,\n data: overrideData\n ? fromLocaleDataWithoutID\n : mergeData(\n fromLocaleData.value,\n toLocaleData.value,\n globals[globalSlug].config.fields,\n req,\n false,\n ),\n locale: toLocale,\n overrideAccess: false,\n req,\n user,\n })\n : await payload.update({\n id: docID,\n collection: collectionSlug,\n data: overrideData\n ? fromLocaleDataWithoutID\n : mergeData(\n fromLocaleData.value,\n toLocaleData.value,\n collections[collectionSlug].config.fields,\n req,\n false,\n ),\n locale: toLocale,\n overrideAccess: false,\n req,\n user,\n })\n}\n"],"mappings":"AAAA,OAAOA,cAAA,MAAoB;AAC3B,SAKEC,YAAY,QAEP;AACP,SAASC,gBAAgB,EAAEC,sBAAsB,EAAEC,UAAU,QAAQ;AAErE,MAAMC,QAAA,GAAYL,cAAA,CAAeM,OAAO,IACtCN,cAAA;AAYF,SAASO,cACPC,MAAe,EACfC,cAAoB,EACpBC,YAAkB,EAClBC,GAAmB,EACnBC,iBAA0B;EAE1BJ,MAAA,CAAOK,GAAG,CAAEC,KAAA;IACV,IAAIZ,gBAAA,CAAiBY,KAAA,GAAQ;MAC3B,QAAQA,KAAA,CAAMC,IAAI;QAChB,KAAK;UACH;UACA,IACED,KAAA,CAAME,IAAI,IAAIN,YAAA;UACd;UACA,CAAC,MAAMO,SAAA,CAAU,CAACC,QAAQ,CAACR,YAAY,CAACI,KAAA,CAAME,IAAI,CAAC,KACnDF,KAAA,CAAME,IAAI,IAAIP,cAAA,EACd;YACAC,YAAY,CAACI,KAAA,CAAME,IAAI,CAAC,GAAGP,cAAc,CAACK,KAAA,CAAME,IAAI,CAAC;YACrD;UACF;UAEA;UACA,IAAIF,KAAA,CAAME,IAAI,IAAIN,YAAA,EAAc;YAC9BA,YAAY,CAACI,KAAA,CAAME,IAAI,CAAC,CAACH,GAAG,CAAC,CAACM,IAAA,EAAYC,KAAA;cACxC,IAAIX,cAAc,CAACK,KAAA,CAAME,IAAI,CAAC,GAAGI,KAAA,CAAM,EAAE;gBACvC;gBACA,IAAIjB,sBAAA,CAAuB;kBAAEW,KAAA;kBAAOF;gBAAkB,IAAI;kBACxDF,YAAY,CAACI,KAAA,CAAME,IAAI,CAAC,CAACI,KAAA,CAAM,CAACC,EAAE,GAAG,IAAIhB,QAAA,GAAWiB,WAAW;gBACjE;gBAEAf,aAAA,CACEO,KAAA,CAAMN,MAAM,EACZC,cAAc,CAACK,KAAA,CAAME,IAAI,CAAC,CAACI,KAAA,CAAM,EACjCD,IAAA,EACAR,GAAA,EACAC,iBAAA,IAAqBE,KAAA,CAAMS,SAAS;cAExC;YACF;UACF;UACA;QAEF,KAAK;UACH;UACA,IACET,KAAA,CAAME,IAAI,IAAIN,YAAA;UACd;UACA,CAAC,MAAMO,SAAA,CAAU,CAACC,QAAQ,CAACR,YAAY,CAACI,KAAA,CAAME,IAAI,CAAC,KACnDF,KAAA,CAAME,IAAI,IAAIP,cAAA,EACd;YACAC,YAAY,CAACI,KAAA,CAAME,IAAI,CAAC,GAAGP,cAAc,CAACK,KAAA,CAAME,IAAI,CAAC;YACrD;UACF;UAEA;UACA,IAAIF,KAAA,CAAME,IAAI,IAAIN,YAAA,EAAc;YAC9BA,YAAY,CAACI,KAAA,CAAME,IAAI,CAAC,CAACH,GAAG,CAAC,CAACW,SAAA,EAAiBJ,KAAA;cAC7C,MAAMK,KAAA,GACJd,GAAA,CAAIe,OAAO,CAACC,MAAM,CAACH,SAAA,CAAUI,SAAS,CAAC,IACtC,CAACd,KAAA,CAAMe,eAAe,IAAIf,KAAA,CAAMa,MAAM,EAAEG,IAAI,CAC1CL,KAAA,IAAU,OAAOA,KAAA,KAAU,YAAYA,KAAA,CAAMM,IAAI,KAAKP,SAAA,CAAUI,SAAS;cAG9E;cACA,IAAIzB,sBAAA,CAAuB;gBAAEW,KAAA;gBAAOF;cAAkB,IAAI;gBACxDF,YAAY,CAACI,KAAA,CAAME,IAAI,CAAC,CAACI,KAAA,CAAM,CAACC,EAAE,GAAG,IAAIhB,QAAA,GAAWiB,WAAW;cACjE;cAEA,IAAIG,KAAA,EAAOjB,MAAA,EAAQwB,MAAA,EAAQ;gBACzBzB,aAAA,CACEkB,KAAA,EAAOjB,MAAA,EACPC,cAAc,CAACK,KAAA,CAAME,IAAI,CAAC,CAACI,KAAA,CAAM,EACjCI,SAAA,EACAb,GAAA,EACAC,iBAAA,IAAqBE,KAAA,CAAMS,SAAS;cAExC;YACF;UACF;UAEA;QAEF,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;UACH,IACET,KAAA,CAAME,IAAI,IAAIN,YAAA;UACd;UACA,CAAC,MAAMO,SAAA,CAAU,CAACC,QAAQ,CAACR,YAAY,CAACI,KAAA,CAAME,IAAI,CAAC,KACnDF,KAAA,CAAME,IAAI,IAAIP,cAAA,EACd;YACAC,YAAY,CAACI,KAAA,CAAME,IAAI,CAAC,GAAGP,cAAc,CAACK,KAAA,CAAME,IAAI,CAAC;UACvD;UACA;QAEF,KAAK;UAAS;YACZ,IAAIF,KAAA,CAAME,IAAI,IAAIN,YAAA,IAAgBD,cAAA,GAAiBK,KAAA,CAAME,IAAI,CAAC,KAAKC,SAAA,EAAW;cAC5EV,aAAA,CACEO,KAAA,CAAMN,MAAM,EACZC,cAAc,CAACK,KAAA,CAAME,IAAI,CAAC,EAC1BN,YAAY,CAACI,KAAA,CAAME,IAAI,CAAC,EACxBL,GAAA,EACAC,iBAAA,IAAqBE,KAAA,CAAMS,SAAS;YAExC;YACA;UACF;MACF;IACF,OAAO;MACL,QAAQT,KAAA,CAAMC,IAAI;QAChB,KAAK;QACL,KAAK;UACHR,aAAA,CAAcO,KAAA,CAAMN,MAAM,EAAEC,cAAA,EAAgBC,YAAA,EAAcC,GAAA,EAAKC,iBAAA;UAC/D;QAEF,KAAK;UACHE,KAAA,CAAMmB,IAAI,CAACpB,GAAG,CAAEqB,GAAA;YACd,IAAI9B,UAAA,CAAW8B,GAAA,GAAM;cACnB,IAAIA,GAAA,CAAIlB,IAAI,IAAIN,YAAA,IAAgBD,cAAA,GAAiByB,GAAA,CAAIlB,IAAI,CAAC,KAAKC,SAAA,EAAW;gBACxEV,aAAA,CACE2B,GAAA,CAAI1B,MAAM,EACVC,cAAc,CAACyB,GAAA,CAAIlB,IAAI,CAAC,EACxBN,YAAY,CAACwB,GAAA,CAAIlB,IAAI,CAAC,EACtBL,GAAA,EACAC,iBAAA;cAEJ;YACF,OAAO;cACLL,aAAA,CAAc2B,GAAA,CAAI1B,MAAM,EAAEC,cAAA,EAAgBC,YAAA,EAAcC,GAAA,EAAKC,iBAAA;YAC/D;UACF;UACA;MACJ;IACF;EACF;AACF;AAEA,SAASuB,UACP1B,cAAoB,EACpBC,YAAkB,EAClBF,MAAe,EACfG,GAAmB,EACnBC,iBAA0B;EAE1BL,aAAA,CAAcC,MAAA,EAAQC,cAAA,EAAgBC,YAAA,EAAcC,GAAA,EAAKC,iBAAA;EAEzD,OAAOF,YAAA;AACT;AAEA,OAAO,MAAM0B,yBAAA,GAA4B,MAAOC,IAAA;EAC9C,MAAM;IAAE1B;EAAG,CAAE,GAAG0B,IAAA;EAEhB,IAAI;IACF,OAAO,MAAMC,kBAAA,CAAmBD,IAAA;EAClC,EAAE,OAAOE,GAAA,EAAK;IACZ5B,GAAA,CAAIe,OAAO,CAACc,MAAM,CAACC,KAAK,CAAC;MACvBF,GAAA;MACAG,GAAA,EAAK,yCAAyCL,IAAA,CAAKM,UAAU,SAASN,IAAA,CAAKO,QAAQ;IACrF;IAEA,IAAIL,GAAA,CAAIM,OAAO,KAAK,gBAAgB;MAClC,OAAO;IACT;IAEA,OAAO5C,YAAA,CAAasC,GAAA;EACtB;AACF;AAEA,OAAO,MAAMD,kBAAA,GAAqB,MAAOD,IAAA;EACvC,MAAM;IACJS,cAAc;IACdC,KAAK;IACLJ,UAAU;IACVK,UAAU;IACVC,YAAA,GAAe,KAAK;IACpBtC,GAAA,EAAK;MACHe,OAAO;MACPA,OAAA,EAAS;QAAEwB,WAAW;QAAEC;MAAO,CAAE;MACjCC;IAAI,CACL;IACDzC,GAAG;IACHiC;EAAQ,CACT,GAAGP,IAAA;EAEJ,MAAMgB,gBAAA,GAAmBD,IAAA,EAAME,UAAA;EAE/B,MAAMC,aAAA,GAAgB7B,OAAA,CAAQ8B,MAAM,CAACC,KAAK,CAACL,IAAI;EAE/C;EACA,IAAIC,gBAAA,EAAkB;IACpB,MAAMK,mBAAA,GAAsBhC,OAAA,CAAQwB,WAAW,CAACG,gBAAA,CAAiB,CAACG,MAAM,CAACG,MAAM,EAAEF,KAAA;IAEjF;IACA,IAAIC,mBAAA,EAAqB;MACvB,MAAME,cAAA,GAAiB,MAAMF,mBAAA,CAAoB;QAAE/C,GAAA,EAAK0B,IAAA,CAAK1B;MAAI;MAEjE,IAAI,CAACiD,cAAA,EAAgB;QACnB,MAAM,IAAIC,KAAA,CAAM;MAClB;MACA;IACF,OAAO,IAAIN,aAAA,KAAkBF,gBAAA,EAAkB;MAC7C,MAAM,IAAIQ,KAAA,CAAM;IAClB;EACF;EAEA,MAAM,CAACpD,cAAA,EAAgBC,YAAA,CAAa,GAAG,MAAMoD,OAAA,CAAQC,UAAU,CAAC,CAC9Df,UAAA,GACItB,OAAA,CAAQsC,UAAU,CAAC;IACjBjC,IAAA,EAAMiB,UAAA;IACNiB,KAAA,EAAO;IACPC,MAAA,EAAQvB,UAAA;IACRwB,cAAA,EAAgB;IAChBf;EAEF,KACA1B,OAAA,CAAQ0C,QAAQ,CAAC;IACf/C,EAAA,EAAI0B,KAAA;IACJO,UAAA,EAAYR,cAAA;IACZmB,KAAA,EAAO;IACPI,KAAA,EAAO;IACPH,MAAA,EAAQvB,UAAA;IACRwB,cAAA,EAAgB;IAChBf;EAEF,IACJJ,UAAA,GACItB,OAAA,CAAQsC,UAAU,CAAC;IACjBjC,IAAA,EAAMiB,UAAA;IACNiB,KAAA,EAAO;IACPC,MAAA,EAAQtB,QAAA;IACRuB,cAAA,EAAgB;IAChBf;EAEF,KACA1B,OAAA,CAAQ0C,QAAQ,CAAC;IACf/C,EAAA,EAAI0B,KAAA;IACJO,UAAA,EAAYR,cAAA;IACZmB,KAAA,EAAO;IACPI,KAAA,EAAO;IACPH,MAAA,EAAQtB,QAAA;IACRuB,cAAA,EAAgB;IAChBf;EAEF,GACL;EAED,IAAI3C,cAAA,CAAe6D,MAAM,KAAK,YAAY;IACxC,MAAM,IAAIT,KAAA,CAAM,oCAAoClB,UAAA,GAAa;EACnE;EAEA,IAAIjC,YAAA,CAAa4D,MAAM,KAAK,YAAY;IACtC,MAAM,IAAIT,KAAA,CAAM,oCAAoCjB,QAAA,GAAW;EACjE;EAEA,MAAM;IAAEvB,EAAE;IAAE,GAAGkD;EAAA,CAAyB,GAAG9D,cAAA,CAAe+D,KAAK;EAE/D,OAAOxB,UAAA,GACH,MAAMtB,OAAA,CAAQ+C,YAAY,CAAC;IACzB1C,IAAA,EAAMiB,UAAA;IACN0B,IAAA,EAAMzB,YAAA,GACFsB,uBAAA,GACApC,SAAA,CACE1B,cAAA,CAAe+D,KAAK,EACpB9D,YAAA,CAAa8D,KAAK,EAClBrB,OAAO,CAACH,UAAA,CAAW,CAACQ,MAAM,CAAChD,MAAM,EACjCG,GAAA,EACA;IAENuD,MAAA,EAAQtB,QAAA;IACRuB,cAAA,EAAgB;IAChBxD,GAAA;IACAyC;EACF,KACA,MAAM1B,OAAA,CAAQiD,MAAM,CAAC;IACnBtD,EAAA,EAAI0B,KAAA;IACJO,UAAA,EAAYR,cAAA;IACZ4B,IAAA,EAAMzB,YAAA,GACFsB,uBAAA,GACApC,SAAA,CACE1B,cAAA,CAAe+D,KAAK,EACpB9D,YAAA,CAAa8D,KAAK,EAClBtB,WAAW,CAACJ,cAAA,CAAe,CAACU,MAAM,CAAChD,MAAM,EACzCG,GAAA,EACA;IAENuD,MAAA,EAAQtB,QAAA;IACRuB,cAAA,EAAgB;IAChBxD,GAAA;IACAyC;EACF;AACN","ignoreList":[]}
1
+ {"version":3,"file":"copyDataFromLocale.js","names":["ObjectIdImport","formatErrors","fieldAffectsData","fieldShouldBeLocalized","tabHasName","ObjectId","default","iterateFields","fields","fromLocaleData","toLocaleData","req","parentIsLocalized","map","field","type","name","undefined","includes","item","index","id","toHexString","localized","blockData","block","payload","blocks","blockType","blockReferences","find","slug","length","tabs","tab","mergeData","removeIds","data","Array","isArray","_id","rest","Object","fromEntries","entries","key","value","copyDataFromLocaleHandler","args","copyDataFromLocale","err","logger","error","msg","fromLocale","toLocale","message","collectionSlug","docID","globalSlug","overrideData","collections","globals","user","incomingUserSlug","collection","adminUserSlug","config","admin","adminAccessFunction","access","canAccessAdmin","Error","Promise","allSettled","findGlobal","depth","locale","overrideAccess","findByID","joins","status","fromLocaleDataWithoutID","toLocaleDataWithoutID","updateGlobal","update"],"sources":["../../src/utilities/copyDataFromLocale.ts"],"sourcesContent":["import ObjectIdImport from 'bson-objectid'\nimport {\n type CollectionSlug,\n type Data,\n type Field,\n type FlattenedBlock,\n formatErrors,\n type PayloadRequest,\n} from 'payload'\nimport { fieldAffectsData, fieldShouldBeLocalized, tabHasName } from 'payload/shared'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\nexport type CopyDataFromLocaleArgs = {\n collectionSlug?: CollectionSlug\n docID?: number | string\n fromLocale: string\n globalSlug?: string\n overrideData?: boolean\n req: PayloadRequest\n toLocale: string\n}\n\nfunction iterateFields(\n fields: Field[],\n fromLocaleData: Data,\n toLocaleData: Data,\n req: PayloadRequest,\n parentIsLocalized: boolean,\n): void {\n fields.map((field) => {\n if (fieldAffectsData(field)) {\n switch (field.type) {\n case 'array':\n // if the field has no value, take the source value\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n break\n }\n\n // if the field has a value - loop over the data from target\n if (field.name in toLocaleData) {\n toLocaleData[field.name].map((item: Data, index: number) => {\n if (fromLocaleData[field.name]?.[index]) {\n // Generate new IDs if the field is localized to prevent errors with relational DBs.\n if (fieldShouldBeLocalized({ field, parentIsLocalized })) {\n toLocaleData[field.name][index].id = new ObjectId().toHexString()\n }\n\n iterateFields(\n field.fields,\n fromLocaleData[field.name][index],\n item,\n req,\n parentIsLocalized || field.localized,\n )\n }\n })\n }\n break\n\n case 'blocks':\n // if the field has no value, take the source value\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n break\n }\n\n // if the field has a value - loop over the data from target\n if (field.name in toLocaleData) {\n toLocaleData[field.name].map((blockData: Data, index: number) => {\n const block =\n req.payload.blocks[blockData.blockType] ??\n ((field.blockReferences ?? field.blocks).find(\n (block) => typeof block !== 'string' && block.slug === blockData.blockType,\n ) as FlattenedBlock | undefined)\n\n // Generate new IDs if the field is localized to prevent errors with relational DBs.\n if (fieldShouldBeLocalized({ field, parentIsLocalized })) {\n toLocaleData[field.name][index].id = new ObjectId().toHexString()\n }\n\n if (block?.fields?.length) {\n iterateFields(\n block?.fields,\n fromLocaleData[field.name][index],\n blockData,\n req,\n parentIsLocalized || field.localized,\n )\n }\n })\n }\n\n break\n\n case 'checkbox':\n case 'code':\n case 'date':\n case 'email':\n case 'json':\n case 'number':\n case 'point':\n case 'radio':\n case 'relationship':\n case 'richText':\n case 'select':\n case 'text':\n case 'textarea':\n case 'upload':\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n }\n break\n\n case 'group': {\n if (field.name in toLocaleData && fromLocaleData?.[field.name] !== undefined) {\n iterateFields(\n field.fields,\n fromLocaleData[field.name],\n toLocaleData[field.name],\n req,\n parentIsLocalized || field.localized,\n )\n }\n break\n }\n }\n } else {\n switch (field.type) {\n case 'collapsible':\n case 'row':\n iterateFields(field.fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n break\n\n case 'tabs':\n field.tabs.map((tab) => {\n if (tabHasName(tab)) {\n if (tab.name in toLocaleData && fromLocaleData?.[tab.name] !== undefined) {\n iterateFields(\n tab.fields,\n fromLocaleData[tab.name],\n toLocaleData[tab.name],\n req,\n parentIsLocalized,\n )\n }\n } else {\n iterateFields(tab.fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n }\n })\n break\n }\n }\n })\n}\n\nfunction mergeData(\n fromLocaleData: Data,\n toLocaleData: Data,\n fields: Field[],\n req: PayloadRequest,\n parentIsLocalized: boolean,\n): Data {\n iterateFields(fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n\n return toLocaleData\n}\n\nfunction removeIds(data: Data): Data {\n if (Array.isArray(data)) {\n return data.map(removeIds)\n }\n if (typeof data === 'object' && data !== null) {\n const { id: _id, ...rest } = data\n return Object.fromEntries(Object.entries(rest).map(([key, value]) => [key, removeIds(value)]))\n }\n return data\n}\n\nexport const copyDataFromLocaleHandler = async (args: CopyDataFromLocaleArgs) => {\n const { req } = args\n\n try {\n return await copyDataFromLocale(args)\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `There was an error copying data from \"${args.fromLocale}\" to \"${args.toLocale}\"`,\n })\n\n if (err.message === 'Unauthorized') {\n return null\n }\n\n return formatErrors(err)\n }\n}\n\nexport const copyDataFromLocale = async (args: CopyDataFromLocaleArgs) => {\n const {\n collectionSlug,\n docID,\n fromLocale,\n globalSlug,\n overrideData = false,\n req: {\n payload,\n payload: { collections, globals },\n user,\n },\n req,\n toLocale,\n } = args\n\n const incomingUserSlug = user?.collection\n\n const adminUserSlug = payload.config.admin.user\n\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req: args.req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n }\n\n const [fromLocaleData, toLocaleData] = await Promise.allSettled([\n globalSlug\n ? payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n locale: fromLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n })\n : payload.findByID({\n id: docID,\n collection: collectionSlug,\n depth: 0,\n joins: false,\n locale: fromLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n }),\n globalSlug\n ? payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n locale: toLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n })\n : payload.findByID({\n id: docID,\n collection: collectionSlug,\n depth: 0,\n joins: false,\n locale: toLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n }),\n ])\n\n if (fromLocaleData.status === 'rejected') {\n throw new Error(`Error fetching data from locale \"${fromLocale}\"`)\n }\n\n if (toLocaleData.status === 'rejected') {\n throw new Error(`Error fetching data from locale \"${toLocale}\"`)\n }\n\n const fromLocaleDataWithoutID = removeIds(fromLocaleData.value)\n const toLocaleDataWithoutID = removeIds(toLocaleData.value)\n\n return globalSlug\n ? await payload.updateGlobal({\n slug: globalSlug,\n data: overrideData\n ? fromLocaleDataWithoutID\n : mergeData(\n fromLocaleDataWithoutID,\n toLocaleDataWithoutID,\n globals[globalSlug].config.fields,\n req,\n false,\n ),\n locale: toLocale,\n overrideAccess: false,\n req,\n user,\n })\n : await payload.update({\n id: docID,\n collection: collectionSlug,\n data: overrideData\n ? fromLocaleDataWithoutID\n : mergeData(\n fromLocaleDataWithoutID,\n toLocaleDataWithoutID,\n collections[collectionSlug].config.fields,\n req,\n false,\n ),\n locale: toLocale,\n overrideAccess: false,\n req,\n user,\n })\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/ui",
3
- "version": "3.36.0-canary.9",
3
+ "version": "3.36.0",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -132,7 +132,7 @@
132
132
  "ts-essentials": "10.0.3",
133
133
  "use-context-selector": "2.0.0",
134
134
  "uuid": "10.0.0",
135
- "@payloadcms/translations": "3.36.0-canary.9"
135
+ "@payloadcms/translations": "3.36.0"
136
136
  },
137
137
  "devDependencies": {
138
138
  "@babel/cli": "7.26.4",
@@ -148,14 +148,14 @@
148
148
  "esbuild": "0.24.2",
149
149
  "esbuild-sass-plugin": "3.3.1",
150
150
  "eslint-plugin-react-compiler": "19.0.0-beta-e993439-20250405",
151
- "@payloadcms/eslint-config": "3.28.0",
152
- "payload": "3.36.0-canary.9"
151
+ "payload": "3.36.0",
152
+ "@payloadcms/eslint-config": "3.28.0"
153
153
  },
154
154
  "peerDependencies": {
155
155
  "next": "^15.2.3",
156
156
  "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
157
157
  "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
158
- "payload": "3.36.0-canary.9"
158
+ "payload": "3.36.0"
159
159
  },
160
160
  "engines": {
161
161
  "node": "^18.20.2 || >=20.9.0"