@payloadcms/ui 3.39.1 → 3.40.0-canary.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/elements/BulkUpload/EditForm/index.js +1 -1
  2. package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
  3. package/dist/elements/Button/index.scss +2 -2
  4. package/dist/elements/DocumentControls/index.js +1 -1
  5. package/dist/elements/DocumentControls/index.js.map +1 -1
  6. package/dist/elements/FolderView/CollectionTypePill/index.js +1 -1
  7. package/dist/elements/FolderView/CollectionTypePill/index.js.map +1 -1
  8. package/dist/elements/FolderView/CurrentFolderActions/index.js +1 -1
  9. package/dist/elements/FolderView/CurrentFolderActions/index.js.map +1 -1
  10. package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts.map +1 -1
  11. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js +274 -143
  12. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js.map +1 -1
  13. package/dist/elements/FolderView/Drawers/NewFolder/index.js +1 -1
  14. package/dist/elements/FolderView/Drawers/NewFolder/index.js.map +1 -1
  15. package/dist/elements/FolderView/Drawers/RenameFolder/index.js +1 -1
  16. package/dist/elements/FolderView/Drawers/RenameFolder/index.js.map +1 -1
  17. package/dist/elements/FolderView/FolderFileCard/index.scss +24 -2
  18. package/dist/elements/Table/DefaultCell/fields/File/index.d.ts.map +1 -1
  19. package/dist/elements/Table/DefaultCell/fields/File/index.js +1 -2
  20. package/dist/elements/Table/DefaultCell/fields/File/index.js.map +1 -1
  21. package/dist/elements/Table/index.scss +9 -9
  22. package/dist/exports/client/index.js +10 -10
  23. package/dist/exports/client/index.js.map +4 -4
  24. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  25. package/dist/fields/Blocks/BlockRow.js +1 -0
  26. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  27. package/dist/fields/Select/Input.d.ts +1 -0
  28. package/dist/fields/Select/Input.d.ts.map +1 -1
  29. package/dist/fields/Select/Input.js +50 -47
  30. package/dist/fields/Select/Input.js.map +1 -1
  31. package/dist/fields/Select/index.d.ts.map +1 -1
  32. package/dist/fields/Select/index.js +4 -0
  33. package/dist/fields/Select/index.js.map +1 -1
  34. package/dist/fields/Upload/HasMany/index.d.ts.map +1 -1
  35. package/dist/fields/Upload/HasMany/index.js +1 -2
  36. package/dist/fields/Upload/HasMany/index.js.map +1 -1
  37. package/dist/fields/Upload/HasOne/index.d.ts.map +1 -1
  38. package/dist/fields/Upload/HasOne/index.js +1 -2
  39. package/dist/fields/Upload/HasOne/index.js.map +1 -1
  40. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  41. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +19 -0
  42. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  43. package/dist/forms/useField/index.d.ts.map +1 -1
  44. package/dist/forms/useField/index.js +60 -57
  45. package/dist/forms/useField/index.js.map +1 -1
  46. package/dist/forms/useField/types.d.ts +2 -1
  47. package/dist/forms/useField/types.d.ts.map +1 -1
  48. package/dist/forms/useField/types.js.map +1 -1
  49. package/dist/providers/Folders/index.d.ts.map +1 -1
  50. package/dist/providers/Folders/index.js +31 -13
  51. package/dist/providers/Folders/index.js.map +1 -1
  52. package/dist/styles.css +1 -1
  53. package/dist/views/BrowseByFolder/index.d.ts.map +1 -1
  54. package/dist/views/BrowseByFolder/index.js +8 -17
  55. package/dist/views/BrowseByFolder/index.js.map +1 -1
  56. package/dist/views/CollectionFolder/index.d.ts.map +1 -1
  57. package/dist/views/CollectionFolder/index.js +8 -17
  58. package/dist/views/CollectionFolder/index.js.map +1 -1
  59. package/dist/views/List/ListHeader/index.js +1 -1
  60. package/dist/views/List/ListHeader/index.js.map +1 -1
  61. package/package.json +5 -5
  62. package/dist/utilities/getBestFitFromSizes.d.ts +0 -25
  63. package/dist/utilities/getBestFitFromSizes.d.ts.map +0 -1
  64. package/dist/utilities/getBestFitFromSizes.js +0 -45
  65. package/dist/utilities/getBestFitFromSizes.js.map +0 -1
@@ -71,6 +71,7 @@ export function FolderProvider({
71
71
  sort,
72
72
  subfolders: subfoldersFromProps = []
73
73
  }) {
74
+ const parentFolderContext = useFolder();
74
75
  const {
75
76
  config,
76
77
  getEntityConfig
@@ -585,7 +586,26 @@ export function FolderProvider({
585
586
  * Does NOT handle the request to the server.
586
587
  * Used when a document needs to be added to the current state.
587
588
  */
588
- const addItems = React.useCallback(items_1 => {
589
+ const addItems = React.useCallback(itemsToAdd => {
590
+ const {
591
+ items: items_1,
592
+ parentItems
593
+ } = itemsToAdd.reduce((acc_1, item_5) => {
594
+ const destinationFolderID = item_5.value.folderID || null;
595
+ if (item_5.value.folderID && item_5.value.folderID === activeFolderID || !activeFolderID && !item_5.value.folderID) {
596
+ acc_1.items.push(item_5);
597
+ }
598
+ if (parentFolderContext && (parentFolderContext.folderID && destinationFolderID === parentFolderContext.folderID || !parentFolderContext.folderID && !item_5.value.folderID)) {
599
+ acc_1.parentItems.push(item_5);
600
+ }
601
+ return acc_1;
602
+ }, {
603
+ items: [],
604
+ parentItems: []
605
+ });
606
+ if (parentItems.length) {
607
+ parentFolderContext.addItems(parentItems);
608
+ }
589
609
  if (!items_1.length) {
590
610
  return;
591
611
  }
@@ -620,7 +640,7 @@ export function FolderProvider({
620
640
  setSubfolders(sortedSubfolders_1);
621
641
  setAllSubfolders(sortedAllSubfolders);
622
642
  }
623
- }, [documents, separateItems, sortItems, subfolders]);
643
+ }, [activeFolderID, documents, separateItems, sortItems, subfolders]);
624
644
  /**
625
645
  * Used to move items to a different folder.
626
646
  *
@@ -636,7 +656,7 @@ export function FolderProvider({
636
656
  }
637
657
  const movingCurrentFolder = items_2.length === 1 && items_2[0].relationTo === folderCollectionSlug && items_2[0].value.id === activeFolderID;
638
658
  if (movingCurrentFolder) {
639
- const req = await fetch(`${serverURL}${routes.api}/${folderCollectionSlug}/${activeFolderID}`, {
659
+ const req = await fetch(`${serverURL}${routes.api}/${folderCollectionSlug}/${activeFolderID}?depth=0`, {
640
660
  body: JSON.stringify({
641
661
  [folderFieldName]: toFolderID_0 || null
642
662
  }),
@@ -747,10 +767,10 @@ export function FolderProvider({
747
767
  // no need to sort, just remove the items from the current state
748
768
  const filteredDocuments_0 = successfullyMovedDocumentItems.length ? documents.filter(({
749
769
  itemKey: itemKey_1
750
- }) => !successfullyMovedDocumentItems.some(item_5 => item_5.itemKey === itemKey_1)) : undefined;
770
+ }) => !successfullyMovedDocumentItems.some(item_6 => item_6.itemKey === itemKey_1)) : undefined;
751
771
  const filteredSubfolders_0 = successfullyMovedFolderItems.length ? subfolders.filter(({
752
772
  itemKey: itemKey_2
753
- }) => !successfullyMovedFolderItems.some(item_6 => item_6.itemKey === itemKey_2)) : undefined;
773
+ }) => !successfullyMovedFolderItems.some(item_7 => item_7.itemKey === itemKey_2)) : undefined;
754
774
  if (filteredDocuments_0) {
755
775
  setDocuments(filteredDocuments_0);
756
776
  }
@@ -807,15 +827,13 @@ export function FolderProvider({
807
827
  addItems,
808
828
  breadcrumbs,
809
829
  clearSelections,
810
- currentFolder: breadcrumbs?.[0]?.id ? {
811
- itemKey: `${folderCollectionSlug}-${activeFolderID}`,
830
+ currentFolder: breadcrumbs?.[0]?.id ? formatFolderOrDocumentItem({
831
+ folderFieldName,
832
+ isUpload: false,
812
833
  relationTo: folderCollectionSlug,
813
- value: {
814
- id: activeFolderID,
815
- _folderOrDocumentTitle: breadcrumbs[breadcrumbs.length - 1]?.name,
816
- folderID: breadcrumbs[breadcrumbs.length - 2]?.id || null
817
- }
818
- } : null,
834
+ useAsTitle: folderCollectionConfig.admin.useAsTitle,
835
+ value: breadcrumbs[breadcrumbs.length - 1]
836
+ }) : null,
819
837
  documents,
820
838
  filterItems,
821
839
  focusedRowIndex,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useRouter","extractID","formatAdminURL","formatFolderOrDocumentItem","qs","React","toast","useDrawerDepth","useConfig","useRouteTransition","useTranslation","getMetaSelection","getShiftSelection","groupItemIDsByRelation","Context","createContext","addItems","breadcrumbs","clearSelections","currentFolder","documents","filterItems","undefined","focusedRowIndex","folderCollectionConfig","folderCollectionSlug","folderFieldName","folderID","getSelectedItems","isDragging","lastSelectedIndex","moveToFolder","Promise","resolve","onItemClick","onItemKeyPress","removeItems","renameFolder","search","selectedIndexes","Set","setBreadcrumbs","setFocusedRowIndex","setFolderID","setIsDragging","sortAndUpdateState","sortDirection","sortOn","subfolders","visibleCollectionSlugs","filterOutItems","items","relationTo","searchLower","toLowerCase","filter","item","itemTitle","value","_folderOrDocumentTitle","itemRelationTo","includes","FolderProvider","allowMultiSelection","_breadcrumbsFromProps","children","collectionSlug","allDocumentsFromProps","filteredCollectionSlugs","folderCollectionSlugs","_folderIDFromProps","_searchFromProps","sort","subfoldersFromProps","config","getEntityConfig","folders","fieldName","routes","serverURL","drawerDepth","t","router","startRouteTransition","useState","collections","find","collection","slug","setSelectedIndexes","setLastSelectedIndex","setVisibleCollectionSlugs","activeFolderID","setActiveFolderID","allSubfolders","setAllSubfolders","setSubfolders","allDocuments","setAllDocuments","setDocuments","setSearch","baseFolderPath","admin","browseByFolder","setSortDirection","startsWith","setSortOn","replace","lastClickTime","useRef","totalCount","length","formatFolderURL","useCallback","args","newFolderID","params","sortBy","adminRoute","path","stringify","addQueryPrefix","getFolderData","_search","searchFilter","trim","query","folderDataReq","fetch","api","credentials","headers","status","folderDataRes","json","setNewActiveFolderID","toFolderID","push","Array","from","reduce","acc","index","navigateAfterSelection","docID","event","code","ctrlKey","metaKey","shiftKey","isShiftPressed","isCtrlPressed","newSelectedIndexes","preventDefault","nextIndex","Math","min","selectFromIndex","selectToIndex","prevIndex","max","size","_","i","currentSelection","toggleIndex","doubleClicked","type","has","now","Date","current","_relationTo","isArray","filteredDocuments","filteredSubfolders","res","sortItems","documentsToSort","sortDirectionArg","sortOnArg","subfoldersToSort","sortedDocuments","sortedSubfolders","sortDirectionToUse","sortOnToUse","newURL","a","b","aValue","bValue","localeCompare","separateItems","separatedItems","prevDocs","itemKey","some","prevFolders","sortedAllDocuments","sortedAllSubfolders","itemsToMove","movingCurrentFolder","id","req","body","JSON","method","error","updatedDoc","folderRes","prevBreadcrumbs","map","breadcrumb","movingToCurrentFolder","successfullyMovedFolderItems","successfullyMovedDocumentItems","ids","Object","entries","collectionConfig","limit","where","in","docs","formattedItems","doc","isUpload","Boolean","upload","useAsTitle","console","updatedFolderID","newName","name","folder","_jsx","useFolder","context","use","Error"],"sources":["../../../src/providers/Folders/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, CollectionSlug, Document } from 'payload'\nimport type { FolderBreadcrumb, FolderOrDocument, GetFolderDataResult } from 'payload/shared'\n\nimport { useRouter } from 'next/navigation.js'\nimport { extractID, formatAdminURL, formatFolderOrDocumentItem } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { useDrawerDepth } from '../../elements/Drawer/index.js'\nimport { useConfig } from '../Config/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\nimport { useTranslation } from '../Translation/index.js'\nimport { getMetaSelection, getShiftSelection, groupItemIDsByRelation } from './selection.js'\ntype SortKeys = keyof Pick<\n FolderOrDocument['value'],\n '_folderOrDocumentTitle' | 'createdAt' | 'updatedAt'\n>\ntype SortDirection = 'asc' | 'desc'\nexport type FileCardData = {\n filename: string\n id: number | string\n mimeType: string\n name: string\n url: string\n}\n\nexport type FolderContextValue = {\n addItems: (args: FolderOrDocument[]) => void\n breadcrumbs?: FolderBreadcrumb[]\n clearSelections: () => void\n currentFolder?: FolderOrDocument | null\n documents?: FolderOrDocument[]\n filterItems: (args: { relationTo?: CollectionSlug[]; search?: string }) => Promise<void>\n focusedRowIndex: number\n folderCollectionConfig: ClientCollectionConfig\n folderCollectionSlug: string\n folderFieldName: string\n folderID?: number | string\n getSelectedItems?: () => FolderOrDocument[]\n isDragging: boolean\n lastSelectedIndex: null | number\n moveToFolder: (args: {\n itemsToMove: FolderOrDocument[]\n toFolderID?: number | string\n }) => Promise<void>\n onItemClick: (args: {\n event: React.MouseEvent\n index: number\n item: FolderOrDocument\n }) => Promise<void> | void\n onItemKeyPress: (args: {\n event: React.KeyboardEvent\n index: number\n item: FolderOrDocument\n }) => Promise<void> | void\n removeItems: (args: FolderOrDocument[]) => void\n renameFolder: (args: { folderID: number | string; newName: string }) => void\n search: string\n selectedIndexes: Set<number>\n setBreadcrumbs: React.Dispatch<React.SetStateAction<FolderBreadcrumb[]>>\n setFocusedRowIndex: React.Dispatch<React.SetStateAction<number>>\n setFolderID: (args: { folderID: number | string }) => Promise<void> | void\n setIsDragging: React.Dispatch<React.SetStateAction<boolean>>\n sortAndUpdateState: (args: {\n documentsToSort?: FolderOrDocument[]\n sortDirection?: 'asc' | 'desc'\n sortOn?: SortKeys\n subfoldersToSort?: FolderOrDocument[]\n }) => void\n sortDirection: SortDirection\n sortOn: SortKeys\n subfolders?: FolderOrDocument[]\n visibleCollectionSlugs: CollectionSlug[]\n}\n\nconst Context = React.createContext<FolderContextValue>({\n addItems: () => {},\n breadcrumbs: [],\n clearSelections: () => {},\n currentFolder: null,\n documents: [],\n filterItems: () => undefined,\n focusedRowIndex: -1,\n folderCollectionConfig: null,\n folderCollectionSlug: '',\n folderFieldName: 'folder',\n folderID: undefined,\n getSelectedItems: () => [],\n isDragging: false,\n lastSelectedIndex: null,\n moveToFolder: () => Promise.resolve(undefined),\n onItemClick: () => undefined,\n onItemKeyPress: () => undefined,\n removeItems: () => undefined,\n renameFolder: () => undefined,\n search: '',\n selectedIndexes: new Set(),\n setBreadcrumbs: () => {},\n setFocusedRowIndex: () => -1,\n setFolderID: () => null,\n setIsDragging: () => false,\n sortAndUpdateState: () => undefined,\n sortDirection: 'asc',\n sortOn: '_folderOrDocumentTitle',\n subfolders: [],\n visibleCollectionSlugs: [],\n})\n\nfunction filterOutItems({\n items,\n relationTo,\n search,\n}: {\n items: FolderOrDocument[]\n relationTo?: CollectionSlug[]\n search?: string\n}) {\n if (typeof search !== 'string' && relationTo === undefined) {\n return items\n }\n\n const searchLower = (search || '').toLowerCase()\n\n return items.filter((item) => {\n const itemTitle = item.value._folderOrDocumentTitle.toLowerCase()\n const itemRelationTo = item.relationTo\n\n return (\n (relationTo ? relationTo.includes(itemRelationTo) : true) &&\n (!searchLower || itemTitle.includes(searchLower))\n )\n })\n}\n\nexport type FolderProviderProps = {\n readonly allowMultiSelection?: boolean\n /**\n * Breadcrumbs for the current folder\n */\n readonly breadcrumbs?: FolderBreadcrumb[]\n /**\n * Children to render inside the provider\n */\n readonly children: React.ReactNode\n /**\n * Required for collection-folder views\n */\n readonly collectionSlug?: CollectionSlug\n /**\n * All documents in the current folder\n */\n readonly documents: FolderOrDocument[]\n /**\n * The collection slugs that are being viewed\n */\n readonly filteredCollectionSlugs?: CollectionSlug[]\n /**\n * Folder enabled collection slugs\n */\n readonly folderCollectionSlugs: CollectionSlug[]\n /**\n * The ID of the current folder\n */\n readonly folderID?: number | string\n /**\n * The intial search query\n */\n readonly search?: string\n /**\n * The sort order of the documents\n *\n * @example\n * `name` for descending\n * `-name` for ascending\n */\n readonly sort?: `-${SortKeys}` | SortKeys\n /**\n * All subfolders in the current folder\n */\n readonly subfolders: FolderOrDocument[]\n}\nexport function FolderProvider({\n allowMultiSelection = true,\n breadcrumbs: _breadcrumbsFromProps = [],\n children,\n collectionSlug,\n documents: allDocumentsFromProps = [],\n filteredCollectionSlugs,\n folderCollectionSlugs = [],\n folderID: _folderIDFromProps = undefined,\n search: _searchFromProps,\n sort,\n subfolders: subfoldersFromProps = [],\n}: FolderProviderProps) {\n const { config, getEntityConfig } = useConfig()\n const folderFieldName = config.folders.fieldName\n const { routes, serverURL } = config\n const drawerDepth = useDrawerDepth()\n const { t } = useTranslation()\n const router = useRouter()\n const { startRouteTransition } = useRouteTransition()\n\n const [folderCollectionConfig] = React.useState(() =>\n config.collections.find((collection) => collection.slug === config.folders.slug),\n )\n const folderCollectionSlug = folderCollectionConfig.slug\n\n const [isDragging, setIsDragging] = React.useState(false)\n const [selectedIndexes, setSelectedIndexes] = React.useState<Set<number>>(() => new Set())\n const [focusedRowIndex, setFocusedRowIndex] = React.useState(-1)\n const [lastSelectedIndex, setLastSelectedIndex] = React.useState<null | number>(null)\n const [visibleCollectionSlugs, setVisibleCollectionSlugs] = React.useState<CollectionSlug[]>(\n filteredCollectionSlugs || [...folderCollectionSlugs, folderCollectionSlug],\n )\n const [activeFolderID, setActiveFolderID] =\n React.useState<FolderContextValue['folderID']>(_folderIDFromProps)\n const [breadcrumbs, setBreadcrumbs] =\n React.useState<FolderContextValue['breadcrumbs']>(_breadcrumbsFromProps)\n const [allSubfolders, setAllSubfolders] = React.useState<FolderOrDocument[]>(subfoldersFromProps)\n const [subfolders, setSubfolders] = React.useState<FolderContextValue['subfolders']>(() => {\n return filterOutItems({\n items: allSubfolders,\n relationTo: visibleCollectionSlugs.includes(folderCollectionSlug)\n ? [folderCollectionSlug]\n : [],\n search: _searchFromProps,\n })\n })\n const [allDocuments, setAllDocuments] = React.useState<FolderOrDocument[]>(allDocumentsFromProps)\n const [documents, setDocuments] = React.useState<FolderContextValue['documents']>(() =>\n filterOutItems({\n items: allDocuments,\n relationTo: visibleCollectionSlugs,\n search: _searchFromProps,\n }),\n )\n const [search, setSearch] = React.useState<string | undefined>(_searchFromProps)\n const [baseFolderPath] = React.useState<`/${string}`>(() => {\n if (collectionSlug) {\n return `/collections/${collectionSlug}/${folderCollectionSlug}`\n } else {\n return config.admin.routes.browseByFolder\n }\n })\n const [sortDirection, setSortDirection] = React.useState<SortDirection>(() => {\n if (sort) {\n return sort.startsWith('-') ? 'desc' : 'asc'\n }\n return 'asc'\n })\n const [sortOn, setSortOn] = React.useState<SortKeys>(() => {\n if (sort) {\n return sort.replace(/^-/, '') as SortKeys\n }\n return '_folderOrDocumentTitle'\n })\n\n const lastClickTime = React.useRef<null | number>(null)\n const totalCount = subfolders.length + documents.length\n\n const formatFolderURL = React.useCallback(\n (args: {\n folderID?: number | string\n relationTo?: string[]\n search?: string\n sortBy?: SortKeys\n sortDirection?: SortDirection\n }) => {\n const newFolderID = 'folderID' in args ? args.folderID : activeFolderID\n const params = {\n relationTo:\n 'relationTo' in args\n ? args.relationTo\n : collectionSlug\n ? undefined\n : visibleCollectionSlugs,\n search: 'search' in args ? args.search : search,\n sortBy: 'sortBy' in args ? args.sortBy : sortOn,\n sortDirection: 'sortDirection' in args ? args.sortDirection : sortDirection,\n }\n\n return formatAdminURL({\n adminRoute: config.routes.admin,\n path: `${baseFolderPath}${newFolderID ? `/${newFolderID}` : ''}${qs.stringify(params, {\n addQueryPrefix: true,\n })}`,\n })\n },\n [\n activeFolderID,\n baseFolderPath,\n collectionSlug,\n config.routes.admin,\n search,\n sortDirection,\n sortOn,\n visibleCollectionSlugs,\n ],\n )\n\n const clearSelections = React.useCallback(() => {\n setFocusedRowIndex(-1)\n setSelectedIndexes(new Set())\n setLastSelectedIndex(undefined)\n }, [])\n\n /**\n * Used to populate drawer data.\n *\n * This is used when the user navigates to a folder.\n */\n const getFolderData = React.useCallback(\n async ({ folderID, search: _search = undefined }): Promise<GetFolderDataResult> => {\n // if folderID is not set, we want to search all documents\n const searchFilter = !folderID\n ? ((typeof _search === 'string' ? _search : search) || '').trim()\n : undefined\n const query = qs.stringify(\n {\n collectionSlug,\n folderID,\n search: searchFilter,\n },\n { addQueryPrefix: true },\n )\n\n const folderDataReq = await fetch(\n `${serverURL}${routes.api}/${folderCollectionSlug}/populate-folder-data${query}`,\n {\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n },\n )\n\n if (folderDataReq.status === 200) {\n const folderDataRes: GetFolderDataResult = await folderDataReq.json()\n setAllSubfolders(folderDataRes.subfolders || [])\n setAllDocuments(folderDataRes.documents || [])\n return folderDataRes\n } else {\n return {\n breadcrumbs: [],\n documents: [],\n subfolders: [],\n }\n }\n },\n [folderCollectionSlug, search, routes.api, serverURL, collectionSlug],\n )\n\n const setNewActiveFolderID: FolderContextValue['setFolderID'] = React.useCallback(\n async ({ folderID: toFolderID }) => {\n clearSelections()\n if (drawerDepth === 1) {\n // not in a drawer (default is 1)\n startRouteTransition(() =>\n router.push(\n formatFolderURL({\n folderID: toFolderID,\n }),\n ),\n )\n } else {\n const folderDataRes = await getFolderData({ folderID: toFolderID })\n setBreadcrumbs(folderDataRes?.breadcrumbs || [])\n setSubfolders(folderDataRes?.subfolders || [])\n setDocuments(folderDataRes?.documents || [])\n setActiveFolderID(toFolderID)\n }\n },\n [clearSelections, drawerDepth, startRouteTransition, router, formatFolderURL, getFolderData],\n )\n\n const getSelectedItems = React.useCallback(() => {\n return Array.from(selectedIndexes).reduce((acc, index) => {\n const item = [...subfolders, ...documents][index]\n if (item) {\n acc.push(item)\n }\n return acc\n }, [])\n }, [documents, selectedIndexes, subfolders])\n\n const navigateAfterSelection = React.useCallback(\n async ({ collectionSlug, docID }: { collectionSlug: string; docID: number | string }) => {\n if (collectionSlug === folderCollectionSlug) {\n await setNewActiveFolderID({ folderID: docID })\n } else if (collectionSlug) {\n router.push(\n formatAdminURL({\n adminRoute: config.routes.admin,\n path: `/collections/${collectionSlug}/${docID}`,\n }),\n )\n }\n },\n [setNewActiveFolderID, folderCollectionSlug, router, config.routes.admin],\n )\n\n const onItemKeyPress: FolderContextValue['onItemKeyPress'] = React.useCallback(\n async ({ event, index, item }) => {\n const { code, ctrlKey, metaKey, shiftKey } = event\n const isShiftPressed = shiftKey\n const isCtrlPressed = ctrlKey || metaKey\n let newSelectedIndexes: Set<number> = selectedIndexes\n\n switch (code) {\n case 'ArrowDown': {\n event.preventDefault()\n const nextIndex = Math.min(index + 1, totalCount - 1)\n setFocusedRowIndex(nextIndex)\n\n if (isCtrlPressed) {\n break\n }\n\n if (allowMultiSelection && isShiftPressed) {\n newSelectedIndexes = getShiftSelection({\n selectFromIndex: Math.min(lastSelectedIndex, totalCount),\n selectToIndex: Math.min(nextIndex, totalCount),\n })\n } else {\n setLastSelectedIndex(nextIndex)\n newSelectedIndexes = new Set([nextIndex])\n }\n break\n }\n case 'ArrowUp': {\n event.preventDefault()\n const prevIndex = Math.max(index - 1, 0)\n setFocusedRowIndex(prevIndex)\n\n if (isCtrlPressed) {\n break\n }\n\n if (allowMultiSelection && isShiftPressed) {\n newSelectedIndexes = getShiftSelection({\n selectFromIndex: lastSelectedIndex,\n selectToIndex: prevIndex,\n })\n } else {\n setLastSelectedIndex(prevIndex)\n newSelectedIndexes = new Set([prevIndex])\n }\n break\n }\n case 'Enter': {\n if (selectedIndexes.size === 1) {\n newSelectedIndexes = new Set([])\n setFocusedRowIndex(undefined)\n }\n break\n }\n case 'Escape': {\n setFocusedRowIndex(undefined)\n setSelectedIndexes(new Set([]))\n newSelectedIndexes = new Set([])\n break\n }\n case 'KeyA': {\n if (allowMultiSelection && isCtrlPressed) {\n event.preventDefault()\n setFocusedRowIndex(totalCount - 1)\n newSelectedIndexes = new Set(Array.from({ length: totalCount }, (_, i) => i))\n }\n break\n }\n case 'Space': {\n if (allowMultiSelection && isShiftPressed) {\n event.preventDefault()\n newSelectedIndexes = getMetaSelection({\n currentSelection: newSelectedIndexes,\n toggleIndex: index,\n })\n setLastSelectedIndex(index)\n } else {\n event.preventDefault()\n newSelectedIndexes = new Set([index])\n setLastSelectedIndex(index)\n }\n break\n }\n case 'Tab': {\n if (allowMultiSelection && isShiftPressed) {\n const prevIndex = index - 1\n if (prevIndex < 0 && newSelectedIndexes.size > 0) {\n setFocusedRowIndex(prevIndex)\n }\n } else {\n const nextIndex = index + 1\n if (nextIndex === totalCount && newSelectedIndexes.size > 0) {\n setFocusedRowIndex(totalCount - 1)\n }\n }\n break\n }\n }\n\n setSelectedIndexes(newSelectedIndexes)\n if (selectedIndexes.size === 1 && code === 'Enter') {\n await navigateAfterSelection({\n collectionSlug: item.relationTo,\n docID: extractID(item.value),\n })\n }\n },\n [allowMultiSelection, lastSelectedIndex, navigateAfterSelection, selectedIndexes, totalCount],\n )\n\n const onItemClick: FolderContextValue['onItemClick'] = React.useCallback(\n async ({ event, index, item }) => {\n let doubleClicked: boolean = false\n const isCtrlPressed = event.ctrlKey || event.metaKey\n const isShiftPressed = event.shiftKey\n let newSelectedIndexes = new Set(selectedIndexes)\n\n if (allowMultiSelection && isCtrlPressed) {\n newSelectedIndexes = getMetaSelection({\n currentSelection: newSelectedIndexes,\n toggleIndex: index,\n })\n } else if (allowMultiSelection && isShiftPressed && lastSelectedIndex !== undefined) {\n newSelectedIndexes = getShiftSelection({\n selectFromIndex: lastSelectedIndex,\n selectToIndex: index,\n })\n } else if (allowMultiSelection && event.type === 'pointermove') {\n // on drag start of an unselected item\n if (!selectedIndexes.has(index)) {\n newSelectedIndexes = new Set([index])\n }\n setLastSelectedIndex(index)\n } else {\n // Normal click - select single item\n newSelectedIndexes = new Set([index])\n const now = Date.now()\n doubleClicked = now - lastClickTime.current < 400 && lastSelectedIndex === index\n lastClickTime.current = now\n setLastSelectedIndex(index)\n }\n\n if (newSelectedIndexes.size === 0) {\n setFocusedRowIndex(undefined)\n } else {\n setFocusedRowIndex(index)\n }\n\n setSelectedIndexes(newSelectedIndexes)\n if (doubleClicked) {\n await navigateAfterSelection({\n collectionSlug: item.relationTo,\n docID: extractID(item.value),\n })\n }\n },\n [selectedIndexes, lastSelectedIndex, allowMultiSelection, navigateAfterSelection],\n )\n\n const filterItems: FolderContextValue['filterItems'] = React.useCallback(\n async ({ relationTo: _relationTo, search: _search }) => {\n const relationTo = Array.isArray(_relationTo) ? _relationTo : visibleCollectionSlugs\n const searchFilter = ((typeof _search === 'string' ? _search : search) || '').trim()\n\n let filteredDocuments: FolderOrDocument[] = allDocuments\n let filteredSubfolders: FolderOrDocument[] = allSubfolders\n\n if (collectionSlug && !activeFolderID && _search !== search) {\n // this allows us to search all documents in the collection when we are not in a folder and in the folder-collection view\n const res = await getFolderData({\n folderID: activeFolderID,\n search: searchFilter,\n })\n filteredDocuments = filterOutItems({\n items: res.documents,\n relationTo,\n search: searchFilter,\n })\n filteredSubfolders = filterOutItems({\n items: res.subfolders,\n relationTo: [folderCollectionSlug],\n search: searchFilter,\n })\n } else {\n filteredDocuments = filterOutItems({\n items: allDocuments,\n relationTo,\n search: searchFilter,\n })\n filteredSubfolders = filterOutItems({\n items: allSubfolders,\n relationTo: relationTo.includes(folderCollectionSlug) ? [folderCollectionSlug] : [],\n search: searchFilter,\n })\n }\n\n setDocuments(filteredDocuments)\n setSubfolders(filteredSubfolders)\n setSearch(searchFilter)\n setVisibleCollectionSlugs(relationTo)\n\n if (drawerDepth === 1) {\n router.replace(\n formatFolderURL({\n relationTo,\n search: searchFilter || undefined,\n }),\n )\n }\n },\n [\n collectionSlug,\n visibleCollectionSlugs,\n search,\n activeFolderID,\n allDocuments,\n allSubfolders,\n folderCollectionSlug,\n drawerDepth,\n getFolderData,\n router,\n formatFolderURL,\n ],\n )\n\n const sortItems = React.useCallback(\n ({\n documentsToSort,\n sortDirection: sortDirectionArg,\n sortOn: sortOnArg,\n subfoldersToSort,\n }: Parameters<FolderContextValue['sortAndUpdateState']>[0]): {\n newURL?: string\n sortedDocuments?: FolderOrDocument[]\n sortedSubfolders?: FolderOrDocument[]\n } => {\n let sortedDocuments: FolderOrDocument[] | undefined\n let sortedSubfolders: FolderOrDocument[] | undefined\n const sortDirectionToUse = sortDirectionArg || sortDirection\n const sortOnToUse = sortOnArg || sortOn\n\n if (sortOnArg) {\n setSortOn(sortOnArg)\n }\n\n if (sortDirectionArg) {\n setSortDirection(sortDirectionArg)\n }\n\n const newURL = formatFolderURL({\n sortBy: sortOnArg || sortOn,\n sortDirection: sortDirectionArg || sortDirection,\n })\n\n if (documentsToSort) {\n sortedDocuments = [...documentsToSort].sort((a, b) => {\n const aValue = a.value[sortOnToUse]\n const bValue = b.value[sortOnToUse]\n\n if (aValue == null && bValue == null) {\n return 0\n }\n if (aValue == null) {\n return sortDirectionToUse === 'asc' ? 1 : -1\n }\n if (bValue == null) {\n return sortDirectionToUse === 'asc' ? -1 : 1\n }\n\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n return sortDirectionToUse === 'asc'\n ? aValue.localeCompare(bValue)\n : bValue.localeCompare(aValue)\n }\n\n return 0\n })\n }\n\n if (subfoldersToSort) {\n sortedSubfolders = [...subfoldersToSort].sort((a, b) => {\n const aValue = a.value[sortOnToUse]\n const bValue = b.value[sortOnToUse]\n\n if (aValue == null && bValue == null) {\n return 0\n }\n if (aValue == null) {\n return sortDirectionToUse === 'asc' ? 1 : -1\n }\n if (bValue == null) {\n return sortDirectionToUse === 'asc' ? -1 : 1\n }\n\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n return sortDirectionToUse === 'asc'\n ? aValue.localeCompare(bValue)\n : bValue.localeCompare(aValue)\n }\n\n return 0\n })\n }\n\n return {\n newURL,\n sortedDocuments,\n sortedSubfolders,\n }\n },\n [formatFolderURL, sortDirection, sortOn],\n )\n\n const sortAndUpdateState: FolderContextValue['sortAndUpdateState'] = React.useCallback(\n ({ documentsToSort, sortDirection: sortDirectionArg, sortOn: sortOnArg, subfoldersToSort }) => {\n const { newURL, sortedDocuments, sortedSubfolders } = sortItems({\n documentsToSort,\n sortDirection: sortDirectionArg,\n sortOn: sortOnArg,\n subfoldersToSort,\n })\n\n if (sortedDocuments) {\n setDocuments(sortedDocuments)\n }\n if (sortedSubfolders) {\n setSubfolders(sortedSubfolders)\n }\n\n if (drawerDepth === 1) {\n // not in a drawer (default is 1)\n startRouteTransition(() => {\n router.replace(newURL)\n })\n }\n },\n [drawerDepth, router, sortItems, startRouteTransition],\n )\n\n const separateItems = React.useCallback(\n (\n items: FolderOrDocument[],\n ): {\n documents: FolderOrDocument[]\n folders: FolderOrDocument[]\n } => {\n return items.reduce(\n (acc, item) => {\n if (item.relationTo === folderCollectionSlug) {\n acc.folders.push(item)\n } else {\n acc.documents.push(item)\n }\n return acc\n },\n { documents: [] as FolderOrDocument[], folders: [] as FolderOrDocument[] },\n )\n },\n [folderCollectionSlug],\n )\n\n /**\n * Used to remove items from the current state.\n *\n * Does NOT handle the request to the server.\n * Useful when a document is deleted and it needs to be removed\n * from the current state.\n */\n const removeItems: FolderContextValue['removeItems'] = React.useCallback(\n (items) => {\n if (!items.length) {\n return\n }\n\n const separatedItems = separateItems(items)\n\n if (separatedItems.documents.length) {\n setDocuments((prevDocs) => {\n return prevDocs.filter(\n ({ itemKey }) => !separatedItems.documents.some((item) => item.itemKey === itemKey),\n )\n })\n }\n\n if (separatedItems.folders.length) {\n setSubfolders((prevFolders) => {\n return prevFolders.filter(\n ({ itemKey }) => !separatedItems.folders.some((item) => item.itemKey === itemKey),\n )\n })\n }\n\n clearSelections()\n },\n [clearSelections, separateItems, setDocuments, setSubfolders],\n )\n\n /**\n * Used to add items to the current state.\n *\n * Does NOT handle the request to the server.\n * Used when a document needs to be added to the current state.\n */\n const addItems = React.useCallback(\n (items: FolderOrDocument[]) => {\n if (!items.length) {\n return\n }\n\n const separatedItems = separateItems(items)\n\n let documentsToSort = undefined\n let subfoldersToSort = undefined\n\n if (separatedItems.documents.length) {\n documentsToSort = [...documents, ...separatedItems.documents]\n }\n\n if (separatedItems.folders.length) {\n subfoldersToSort = [...subfolders, ...separatedItems.folders]\n }\n\n const { sortedDocuments, sortedSubfolders } = sortItems({\n documentsToSort,\n subfoldersToSort,\n })\n\n const { sortedDocuments: sortedAllDocuments, sortedSubfolders: sortedAllSubfolders } =\n sortItems({\n documentsToSort,\n subfoldersToSort,\n })\n\n if (sortedDocuments) {\n setDocuments(sortedDocuments)\n setAllDocuments(sortedAllDocuments)\n }\n if (sortedSubfolders) {\n setSubfolders(sortedSubfolders)\n setAllSubfolders(sortedAllSubfolders)\n }\n },\n [documents, separateItems, sortItems, subfolders],\n )\n\n /**\n * Used to move items to a different folder.\n *\n * Handles the request to the server and updates the state.\n */\n const moveToFolder: FolderContextValue['moveToFolder'] = React.useCallback(\n async (args) => {\n const { itemsToMove: items, toFolderID } = args\n if (!items.length) {\n return\n }\n\n const movingCurrentFolder =\n items.length === 1 &&\n items[0].relationTo === folderCollectionSlug &&\n items[0].value.id === activeFolderID\n\n if (movingCurrentFolder) {\n const req = await fetch(\n `${serverURL}${routes.api}/${folderCollectionSlug}/${activeFolderID}`,\n {\n body: JSON.stringify({ [folderFieldName]: toFolderID || null }),\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n method: 'PATCH',\n },\n )\n if (req.status !== 200) {\n toast.error(t('general:error'))\n } else {\n const updatedDoc = await req.json()\n const folderRes = await getFolderData({\n folderID: updatedDoc.id,\n })\n setBreadcrumbs(folderRes?.breadcrumbs || [])\n setSubfolders(folderRes?.subfolders || [])\n setDocuments(folderRes?.documents || [])\n setActiveFolderID(updatedDoc.id)\n }\n setBreadcrumbs((prevBreadcrumbs) => {\n return prevBreadcrumbs.map((breadcrumb) => {\n if (breadcrumb.id === activeFolderID) {\n return {\n ...breadcrumb,\n id: toFolderID,\n }\n }\n return breadcrumb\n })\n })\n } else {\n const movingToCurrentFolder: boolean = toFolderID === activeFolderID\n const successfullyMovedFolderItems: FolderOrDocument[] = []\n const successfullyMovedDocumentItems: FolderOrDocument[] = []\n\n for (const [collectionSlug, ids] of Object.entries(groupItemIDsByRelation(items))) {\n const collectionConfig = getEntityConfig({ collectionSlug })\n const query = qs.stringify(\n {\n limit: 0,\n where: {\n id: {\n in: ids,\n },\n },\n },\n {\n addQueryPrefix: true,\n },\n )\n try {\n const res = await fetch(`${serverURL}${routes.api}/${collectionSlug}${query}`, {\n body: JSON.stringify({ [folderFieldName]: toFolderID || null }),\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n method: 'PATCH',\n })\n if (res.status === 200) {\n const json = await res.json()\n const { docs } = json as { docs: Document[] }\n const formattedItems: FolderOrDocument[] = docs.map<FolderOrDocument>(\n (doc: Document) =>\n formatFolderOrDocumentItem({\n folderFieldName: config.folders.fieldName,\n isUpload: Boolean(collectionConfig.upload),\n relationTo: collectionSlug,\n useAsTitle: collectionConfig.admin.useAsTitle,\n value: doc,\n }),\n )\n if (collectionSlug === folderCollectionSlug) {\n successfullyMovedFolderItems.push(...formattedItems)\n } else {\n successfullyMovedDocumentItems.push(...formattedItems)\n }\n }\n } catch (error) {\n toast.error(t('general:error'))\n // eslint-disable-next-line no-console\n console.error(error)\n continue\n }\n }\n\n if (movingToCurrentFolder) {\n // need to sort if we are moving (adding) items to the current folder\n const { newURL, sortedDocuments, sortedSubfolders } = sortItems({\n documentsToSort: successfullyMovedDocumentItems.length\n ? [...documents, ...successfullyMovedDocumentItems]\n : undefined,\n subfoldersToSort: successfullyMovedFolderItems.length\n ? [...subfolders, ...successfullyMovedFolderItems]\n : undefined,\n })\n\n if (sortedDocuments) {\n setDocuments(sortedDocuments)\n }\n if (sortedSubfolders) {\n setSubfolders(sortedSubfolders)\n }\n\n if (drawerDepth === 1 && newURL) {\n // not in a drawer (default is 1)\n router.replace(newURL)\n }\n } else {\n // no need to sort, just remove the items from the current state\n const filteredDocuments = successfullyMovedDocumentItems.length\n ? documents.filter(\n ({ itemKey }) =>\n !successfullyMovedDocumentItems.some((item) => item.itemKey === itemKey),\n )\n : undefined\n const filteredSubfolders = successfullyMovedFolderItems.length\n ? subfolders.filter(\n ({ itemKey }) =>\n !successfullyMovedFolderItems.some((item) => item.itemKey === itemKey),\n )\n : undefined\n\n if (filteredDocuments) {\n setDocuments(filteredDocuments)\n }\n if (filteredSubfolders) {\n setSubfolders(filteredSubfolders)\n }\n }\n }\n\n clearSelections()\n },\n [\n folderCollectionSlug,\n activeFolderID,\n clearSelections,\n serverURL,\n routes.api,\n t,\n getFolderData,\n getEntityConfig,\n sortItems,\n documents,\n subfolders,\n drawerDepth,\n router,\n ],\n )\n\n /**\n * Used to rename a folder in the current state.\n *\n * Does NOT handle the request to the server.\n * Used when the user renames a folder using the drawer\n * and it needs to be updated in the current state.\n */\n const renameFolder: FolderContextValue['renameFolder'] = React.useCallback(\n ({ folderID: updatedFolderID, newName }) => {\n if (activeFolderID === updatedFolderID) {\n // updating the curent folder\n setBreadcrumbs((prevBreadcrumbs) => {\n return prevBreadcrumbs.map((breadcrumb) => {\n if (breadcrumb.id === updatedFolderID) {\n return {\n ...breadcrumb,\n name: newName,\n }\n }\n return breadcrumb\n })\n })\n } else {\n setSubfolders((prevFolders) => {\n return prevFolders.map((folder) => {\n if (folder.value.id === updatedFolderID && folder.relationTo === folderCollectionSlug) {\n return {\n ...folder,\n value: {\n ...folder.value,\n _folderOrDocumentTitle: newName,\n },\n }\n }\n return folder\n })\n })\n }\n },\n [folderCollectionSlug, setSubfolders, activeFolderID],\n )\n\n return (\n <Context\n value={{\n addItems,\n breadcrumbs,\n clearSelections,\n currentFolder: breadcrumbs?.[0]?.id\n ? {\n itemKey: `${folderCollectionSlug}-${activeFolderID}`,\n relationTo: folderCollectionSlug,\n value: {\n id: activeFolderID,\n _folderOrDocumentTitle: breadcrumbs[breadcrumbs.length - 1]?.name,\n folderID: breadcrumbs[breadcrumbs.length - 2]?.id || null,\n },\n }\n : null,\n documents,\n filterItems,\n focusedRowIndex,\n folderCollectionConfig,\n folderCollectionSlug,\n folderFieldName,\n folderID: activeFolderID,\n getSelectedItems,\n isDragging,\n lastSelectedIndex,\n moveToFolder,\n onItemClick,\n onItemKeyPress,\n removeItems,\n renameFolder,\n search,\n selectedIndexes,\n setBreadcrumbs,\n setFocusedRowIndex,\n setFolderID: setNewActiveFolderID,\n setIsDragging,\n sortAndUpdateState,\n sortDirection,\n sortOn,\n subfolders,\n visibleCollectionSlugs,\n }}\n >\n {children}\n </Context>\n )\n}\n\nexport function useFolder(): FolderContextValue {\n const context = React.use(Context)\n\n if (context === undefined) {\n throw new Error('useFolder must be used within a FolderProvider')\n }\n\n return context\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useRouter","extractID","formatAdminURL","formatFolderOrDocumentItem","qs","React","toast","useDrawerDepth","useConfig","useRouteTransition","useTranslation","getMetaSelection","getShiftSelection","groupItemIDsByRelation","Context","createContext","addItems","breadcrumbs","clearSelections","currentFolder","documents","filterItems","undefined","focusedRowIndex","folderCollectionConfig","folderCollectionSlug","folderFieldName","folderID","getSelectedItems","isDragging","lastSelectedIndex","moveToFolder","Promise","resolve","onItemClick","onItemKeyPress","removeItems","renameFolder","search","selectedIndexes","Set","setBreadcrumbs","setFocusedRowIndex","setFolderID","setIsDragging","sortAndUpdateState","sortDirection","sortOn","subfolders","visibleCollectionSlugs","filterOutItems","items","relationTo","searchLower","toLowerCase","filter","item","itemTitle","value","_folderOrDocumentTitle","itemRelationTo","includes","FolderProvider","allowMultiSelection","_breadcrumbsFromProps","children","collectionSlug","allDocumentsFromProps","filteredCollectionSlugs","folderCollectionSlugs","_folderIDFromProps","_searchFromProps","sort","subfoldersFromProps","parentFolderContext","useFolder","config","getEntityConfig","folders","fieldName","routes","serverURL","drawerDepth","t","router","startRouteTransition","useState","collections","find","collection","slug","setSelectedIndexes","setLastSelectedIndex","setVisibleCollectionSlugs","activeFolderID","setActiveFolderID","allSubfolders","setAllSubfolders","setSubfolders","allDocuments","setAllDocuments","setDocuments","setSearch","baseFolderPath","admin","browseByFolder","setSortDirection","startsWith","setSortOn","replace","lastClickTime","useRef","totalCount","length","formatFolderURL","useCallback","args","newFolderID","params","sortBy","adminRoute","path","stringify","addQueryPrefix","getFolderData","_search","searchFilter","trim","query","folderDataReq","fetch","api","credentials","headers","status","folderDataRes","json","setNewActiveFolderID","toFolderID","push","Array","from","reduce","acc","index","navigateAfterSelection","docID","event","code","ctrlKey","metaKey","shiftKey","isShiftPressed","isCtrlPressed","newSelectedIndexes","preventDefault","nextIndex","Math","min","selectFromIndex","selectToIndex","prevIndex","max","size","_","i","currentSelection","toggleIndex","doubleClicked","type","has","now","Date","current","_relationTo","isArray","filteredDocuments","filteredSubfolders","res","sortItems","documentsToSort","sortDirectionArg","sortOnArg","subfoldersToSort","sortedDocuments","sortedSubfolders","sortDirectionToUse","sortOnToUse","newURL","a","b","aValue","bValue","localeCompare","separateItems","separatedItems","prevDocs","itemKey","some","prevFolders","itemsToAdd","parentItems","destinationFolderID","sortedAllDocuments","sortedAllSubfolders","itemsToMove","movingCurrentFolder","id","req","body","JSON","method","error","updatedDoc","folderRes","prevBreadcrumbs","map","breadcrumb","movingToCurrentFolder","successfullyMovedFolderItems","successfullyMovedDocumentItems","ids","Object","entries","collectionConfig","limit","where","in","docs","formattedItems","doc","isUpload","Boolean","upload","useAsTitle","console","updatedFolderID","newName","name","folder","_jsx","context","use","Error"],"sources":["../../../src/providers/Folders/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, CollectionSlug, Document } from 'payload'\nimport type { FolderBreadcrumb, FolderOrDocument, GetFolderDataResult } from 'payload/shared'\n\nimport { useRouter } from 'next/navigation.js'\nimport { extractID, formatAdminURL, formatFolderOrDocumentItem } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { useDrawerDepth } from '../../elements/Drawer/index.js'\nimport { useConfig } from '../Config/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\nimport { useTranslation } from '../Translation/index.js'\nimport { getMetaSelection, getShiftSelection, groupItemIDsByRelation } from './selection.js'\ntype SortKeys = keyof Pick<\n FolderOrDocument['value'],\n '_folderOrDocumentTitle' | 'createdAt' | 'updatedAt'\n>\ntype SortDirection = 'asc' | 'desc'\nexport type FileCardData = {\n filename: string\n id: number | string\n mimeType: string\n name: string\n url: string\n}\n\nexport type FolderContextValue = {\n addItems: (args: FolderOrDocument[]) => void\n breadcrumbs?: FolderBreadcrumb[]\n clearSelections: () => void\n currentFolder?: FolderOrDocument | null\n documents?: FolderOrDocument[]\n filterItems: (args: { relationTo?: CollectionSlug[]; search?: string }) => Promise<void>\n focusedRowIndex: number\n folderCollectionConfig: ClientCollectionConfig\n folderCollectionSlug: string\n folderFieldName: string\n folderID?: number | string\n getSelectedItems?: () => FolderOrDocument[]\n isDragging: boolean\n lastSelectedIndex: null | number\n moveToFolder: (args: {\n itemsToMove: FolderOrDocument[]\n toFolderID?: number | string\n }) => Promise<void>\n onItemClick: (args: {\n event: React.MouseEvent\n index: number\n item: FolderOrDocument\n }) => Promise<void> | void\n onItemKeyPress: (args: {\n event: React.KeyboardEvent\n index: number\n item: FolderOrDocument\n }) => Promise<void> | void\n removeItems: (args: FolderOrDocument[]) => void\n renameFolder: (args: { folderID: number | string; newName: string }) => void\n search: string\n selectedIndexes: Set<number>\n setBreadcrumbs: React.Dispatch<React.SetStateAction<FolderBreadcrumb[]>>\n setFocusedRowIndex: React.Dispatch<React.SetStateAction<number>>\n setFolderID: (args: { folderID: number | string }) => Promise<void> | void\n setIsDragging: React.Dispatch<React.SetStateAction<boolean>>\n sortAndUpdateState: (args: {\n documentsToSort?: FolderOrDocument[]\n sortDirection?: 'asc' | 'desc'\n sortOn?: SortKeys\n subfoldersToSort?: FolderOrDocument[]\n }) => void\n sortDirection: SortDirection\n sortOn: SortKeys\n subfolders?: FolderOrDocument[]\n visibleCollectionSlugs: CollectionSlug[]\n}\n\nconst Context = React.createContext<FolderContextValue>({\n addItems: () => {},\n breadcrumbs: [],\n clearSelections: () => {},\n currentFolder: null,\n documents: [],\n filterItems: () => undefined,\n focusedRowIndex: -1,\n folderCollectionConfig: null,\n folderCollectionSlug: '',\n folderFieldName: 'folder',\n folderID: undefined,\n getSelectedItems: () => [],\n isDragging: false,\n lastSelectedIndex: null,\n moveToFolder: () => Promise.resolve(undefined),\n onItemClick: () => undefined,\n onItemKeyPress: () => undefined,\n removeItems: () => undefined,\n renameFolder: () => undefined,\n search: '',\n selectedIndexes: new Set(),\n setBreadcrumbs: () => {},\n setFocusedRowIndex: () => -1,\n setFolderID: () => null,\n setIsDragging: () => false,\n sortAndUpdateState: () => undefined,\n sortDirection: 'asc',\n sortOn: '_folderOrDocumentTitle',\n subfolders: [],\n visibleCollectionSlugs: [],\n})\n\nfunction filterOutItems({\n items,\n relationTo,\n search,\n}: {\n items: FolderOrDocument[]\n relationTo?: CollectionSlug[]\n search?: string\n}) {\n if (typeof search !== 'string' && relationTo === undefined) {\n return items\n }\n\n const searchLower = (search || '').toLowerCase()\n\n return items.filter((item) => {\n const itemTitle = item.value._folderOrDocumentTitle.toLowerCase()\n const itemRelationTo = item.relationTo\n\n return (\n (relationTo ? relationTo.includes(itemRelationTo) : true) &&\n (!searchLower || itemTitle.includes(searchLower))\n )\n })\n}\n\nexport type FolderProviderProps = {\n readonly allowMultiSelection?: boolean\n /**\n * Breadcrumbs for the current folder\n */\n readonly breadcrumbs?: FolderBreadcrumb[]\n /**\n * Children to render inside the provider\n */\n readonly children: React.ReactNode\n /**\n * Required for collection-folder views\n */\n readonly collectionSlug?: CollectionSlug\n /**\n * All documents in the current folder\n */\n readonly documents: FolderOrDocument[]\n /**\n * The collection slugs that are being viewed\n */\n readonly filteredCollectionSlugs?: CollectionSlug[]\n /**\n * Folder enabled collection slugs\n */\n readonly folderCollectionSlugs: CollectionSlug[]\n /**\n * The ID of the current folder\n */\n readonly folderID?: number | string\n /**\n * The intial search query\n */\n readonly search?: string\n /**\n * The sort order of the documents\n *\n * @example\n * `name` for descending\n * `-name` for ascending\n */\n readonly sort?: `-${SortKeys}` | SortKeys\n /**\n * All subfolders in the current folder\n */\n readonly subfolders: FolderOrDocument[]\n}\nexport function FolderProvider({\n allowMultiSelection = true,\n breadcrumbs: _breadcrumbsFromProps = [],\n children,\n collectionSlug,\n documents: allDocumentsFromProps = [],\n filteredCollectionSlugs,\n folderCollectionSlugs = [],\n folderID: _folderIDFromProps = undefined,\n search: _searchFromProps,\n sort,\n subfolders: subfoldersFromProps = [],\n}: FolderProviderProps) {\n const parentFolderContext = useFolder()\n const { config, getEntityConfig } = useConfig()\n const folderFieldName = config.folders.fieldName\n const { routes, serverURL } = config\n const drawerDepth = useDrawerDepth()\n const { t } = useTranslation()\n const router = useRouter()\n const { startRouteTransition } = useRouteTransition()\n\n const [folderCollectionConfig] = React.useState(() =>\n config.collections.find((collection) => collection.slug === config.folders.slug),\n )\n const folderCollectionSlug = folderCollectionConfig.slug\n\n const [isDragging, setIsDragging] = React.useState(false)\n const [selectedIndexes, setSelectedIndexes] = React.useState<Set<number>>(() => new Set())\n const [focusedRowIndex, setFocusedRowIndex] = React.useState(-1)\n const [lastSelectedIndex, setLastSelectedIndex] = React.useState<null | number>(null)\n const [visibleCollectionSlugs, setVisibleCollectionSlugs] = React.useState<CollectionSlug[]>(\n filteredCollectionSlugs || [...folderCollectionSlugs, folderCollectionSlug],\n )\n const [activeFolderID, setActiveFolderID] =\n React.useState<FolderContextValue['folderID']>(_folderIDFromProps)\n const [breadcrumbs, setBreadcrumbs] =\n React.useState<FolderContextValue['breadcrumbs']>(_breadcrumbsFromProps)\n const [allSubfolders, setAllSubfolders] = React.useState<FolderOrDocument[]>(subfoldersFromProps)\n const [subfolders, setSubfolders] = React.useState<FolderContextValue['subfolders']>(() => {\n return filterOutItems({\n items: allSubfolders,\n relationTo: visibleCollectionSlugs.includes(folderCollectionSlug)\n ? [folderCollectionSlug]\n : [],\n search: _searchFromProps,\n })\n })\n const [allDocuments, setAllDocuments] = React.useState<FolderOrDocument[]>(allDocumentsFromProps)\n const [documents, setDocuments] = React.useState<FolderContextValue['documents']>(() =>\n filterOutItems({\n items: allDocuments,\n relationTo: visibleCollectionSlugs,\n search: _searchFromProps,\n }),\n )\n const [search, setSearch] = React.useState<string | undefined>(_searchFromProps)\n const [baseFolderPath] = React.useState<`/${string}`>(() => {\n if (collectionSlug) {\n return `/collections/${collectionSlug}/${folderCollectionSlug}`\n } else {\n return config.admin.routes.browseByFolder\n }\n })\n const [sortDirection, setSortDirection] = React.useState<SortDirection>(() => {\n if (sort) {\n return sort.startsWith('-') ? 'desc' : 'asc'\n }\n return 'asc'\n })\n const [sortOn, setSortOn] = React.useState<SortKeys>(() => {\n if (sort) {\n return sort.replace(/^-/, '') as SortKeys\n }\n return '_folderOrDocumentTitle'\n })\n\n const lastClickTime = React.useRef<null | number>(null)\n const totalCount = subfolders.length + documents.length\n\n const formatFolderURL = React.useCallback(\n (args: {\n folderID?: number | string\n relationTo?: string[]\n search?: string\n sortBy?: SortKeys\n sortDirection?: SortDirection\n }) => {\n const newFolderID = 'folderID' in args ? args.folderID : activeFolderID\n const params = {\n relationTo:\n 'relationTo' in args\n ? args.relationTo\n : collectionSlug\n ? undefined\n : visibleCollectionSlugs,\n search: 'search' in args ? args.search : search,\n sortBy: 'sortBy' in args ? args.sortBy : sortOn,\n sortDirection: 'sortDirection' in args ? args.sortDirection : sortDirection,\n }\n\n return formatAdminURL({\n adminRoute: config.routes.admin,\n path: `${baseFolderPath}${newFolderID ? `/${newFolderID}` : ''}${qs.stringify(params, {\n addQueryPrefix: true,\n })}`,\n })\n },\n [\n activeFolderID,\n baseFolderPath,\n collectionSlug,\n config.routes.admin,\n search,\n sortDirection,\n sortOn,\n visibleCollectionSlugs,\n ],\n )\n\n const clearSelections = React.useCallback(() => {\n setFocusedRowIndex(-1)\n setSelectedIndexes(new Set())\n setLastSelectedIndex(undefined)\n }, [])\n\n /**\n * Used to populate drawer data.\n *\n * This is used when the user navigates to a folder.\n */\n const getFolderData = React.useCallback(\n async ({ folderID, search: _search = undefined }): Promise<GetFolderDataResult> => {\n // if folderID is not set, we want to search all documents\n const searchFilter = !folderID\n ? ((typeof _search === 'string' ? _search : search) || '').trim()\n : undefined\n const query = qs.stringify(\n {\n collectionSlug,\n folderID,\n search: searchFilter,\n },\n { addQueryPrefix: true },\n )\n\n const folderDataReq = await fetch(\n `${serverURL}${routes.api}/${folderCollectionSlug}/populate-folder-data${query}`,\n {\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n },\n )\n\n if (folderDataReq.status === 200) {\n const folderDataRes: GetFolderDataResult = await folderDataReq.json()\n setAllSubfolders(folderDataRes.subfolders || [])\n setAllDocuments(folderDataRes.documents || [])\n return folderDataRes\n } else {\n return {\n breadcrumbs: [],\n documents: [],\n subfolders: [],\n }\n }\n },\n [folderCollectionSlug, search, routes.api, serverURL, collectionSlug],\n )\n\n const setNewActiveFolderID: FolderContextValue['setFolderID'] = React.useCallback(\n async ({ folderID: toFolderID }) => {\n clearSelections()\n if (drawerDepth === 1) {\n // not in a drawer (default is 1)\n startRouteTransition(() =>\n router.push(\n formatFolderURL({\n folderID: toFolderID,\n }),\n ),\n )\n } else {\n const folderDataRes = await getFolderData({ folderID: toFolderID })\n setBreadcrumbs(folderDataRes?.breadcrumbs || [])\n setSubfolders(folderDataRes?.subfolders || [])\n setDocuments(folderDataRes?.documents || [])\n setActiveFolderID(toFolderID)\n }\n },\n [clearSelections, drawerDepth, startRouteTransition, router, formatFolderURL, getFolderData],\n )\n\n const getSelectedItems = React.useCallback(() => {\n return Array.from(selectedIndexes).reduce((acc, index) => {\n const item = [...subfolders, ...documents][index]\n if (item) {\n acc.push(item)\n }\n return acc\n }, [])\n }, [documents, selectedIndexes, subfolders])\n\n const navigateAfterSelection = React.useCallback(\n async ({ collectionSlug, docID }: { collectionSlug: string; docID: number | string }) => {\n if (collectionSlug === folderCollectionSlug) {\n await setNewActiveFolderID({ folderID: docID })\n } else if (collectionSlug) {\n router.push(\n formatAdminURL({\n adminRoute: config.routes.admin,\n path: `/collections/${collectionSlug}/${docID}`,\n }),\n )\n }\n },\n [setNewActiveFolderID, folderCollectionSlug, router, config.routes.admin],\n )\n\n const onItemKeyPress: FolderContextValue['onItemKeyPress'] = React.useCallback(\n async ({ event, index, item }) => {\n const { code, ctrlKey, metaKey, shiftKey } = event\n const isShiftPressed = shiftKey\n const isCtrlPressed = ctrlKey || metaKey\n let newSelectedIndexes: Set<number> = selectedIndexes\n\n switch (code) {\n case 'ArrowDown': {\n event.preventDefault()\n const nextIndex = Math.min(index + 1, totalCount - 1)\n setFocusedRowIndex(nextIndex)\n\n if (isCtrlPressed) {\n break\n }\n\n if (allowMultiSelection && isShiftPressed) {\n newSelectedIndexes = getShiftSelection({\n selectFromIndex: Math.min(lastSelectedIndex, totalCount),\n selectToIndex: Math.min(nextIndex, totalCount),\n })\n } else {\n setLastSelectedIndex(nextIndex)\n newSelectedIndexes = new Set([nextIndex])\n }\n break\n }\n case 'ArrowUp': {\n event.preventDefault()\n const prevIndex = Math.max(index - 1, 0)\n setFocusedRowIndex(prevIndex)\n\n if (isCtrlPressed) {\n break\n }\n\n if (allowMultiSelection && isShiftPressed) {\n newSelectedIndexes = getShiftSelection({\n selectFromIndex: lastSelectedIndex,\n selectToIndex: prevIndex,\n })\n } else {\n setLastSelectedIndex(prevIndex)\n newSelectedIndexes = new Set([prevIndex])\n }\n break\n }\n case 'Enter': {\n if (selectedIndexes.size === 1) {\n newSelectedIndexes = new Set([])\n setFocusedRowIndex(undefined)\n }\n break\n }\n case 'Escape': {\n setFocusedRowIndex(undefined)\n setSelectedIndexes(new Set([]))\n newSelectedIndexes = new Set([])\n break\n }\n case 'KeyA': {\n if (allowMultiSelection && isCtrlPressed) {\n event.preventDefault()\n setFocusedRowIndex(totalCount - 1)\n newSelectedIndexes = new Set(Array.from({ length: totalCount }, (_, i) => i))\n }\n break\n }\n case 'Space': {\n if (allowMultiSelection && isShiftPressed) {\n event.preventDefault()\n newSelectedIndexes = getMetaSelection({\n currentSelection: newSelectedIndexes,\n toggleIndex: index,\n })\n setLastSelectedIndex(index)\n } else {\n event.preventDefault()\n newSelectedIndexes = new Set([index])\n setLastSelectedIndex(index)\n }\n break\n }\n case 'Tab': {\n if (allowMultiSelection && isShiftPressed) {\n const prevIndex = index - 1\n if (prevIndex < 0 && newSelectedIndexes.size > 0) {\n setFocusedRowIndex(prevIndex)\n }\n } else {\n const nextIndex = index + 1\n if (nextIndex === totalCount && newSelectedIndexes.size > 0) {\n setFocusedRowIndex(totalCount - 1)\n }\n }\n break\n }\n }\n\n setSelectedIndexes(newSelectedIndexes)\n if (selectedIndexes.size === 1 && code === 'Enter') {\n await navigateAfterSelection({\n collectionSlug: item.relationTo,\n docID: extractID(item.value),\n })\n }\n },\n [allowMultiSelection, lastSelectedIndex, navigateAfterSelection, selectedIndexes, totalCount],\n )\n\n const onItemClick: FolderContextValue['onItemClick'] = React.useCallback(\n async ({ event, index, item }) => {\n let doubleClicked: boolean = false\n const isCtrlPressed = event.ctrlKey || event.metaKey\n const isShiftPressed = event.shiftKey\n let newSelectedIndexes = new Set(selectedIndexes)\n\n if (allowMultiSelection && isCtrlPressed) {\n newSelectedIndexes = getMetaSelection({\n currentSelection: newSelectedIndexes,\n toggleIndex: index,\n })\n } else if (allowMultiSelection && isShiftPressed && lastSelectedIndex !== undefined) {\n newSelectedIndexes = getShiftSelection({\n selectFromIndex: lastSelectedIndex,\n selectToIndex: index,\n })\n } else if (allowMultiSelection && event.type === 'pointermove') {\n // on drag start of an unselected item\n if (!selectedIndexes.has(index)) {\n newSelectedIndexes = new Set([index])\n }\n setLastSelectedIndex(index)\n } else {\n // Normal click - select single item\n newSelectedIndexes = new Set([index])\n const now = Date.now()\n doubleClicked = now - lastClickTime.current < 400 && lastSelectedIndex === index\n lastClickTime.current = now\n setLastSelectedIndex(index)\n }\n\n if (newSelectedIndexes.size === 0) {\n setFocusedRowIndex(undefined)\n } else {\n setFocusedRowIndex(index)\n }\n\n setSelectedIndexes(newSelectedIndexes)\n if (doubleClicked) {\n await navigateAfterSelection({\n collectionSlug: item.relationTo,\n docID: extractID(item.value),\n })\n }\n },\n [selectedIndexes, lastSelectedIndex, allowMultiSelection, navigateAfterSelection],\n )\n\n const filterItems: FolderContextValue['filterItems'] = React.useCallback(\n async ({ relationTo: _relationTo, search: _search }) => {\n const relationTo = Array.isArray(_relationTo) ? _relationTo : visibleCollectionSlugs\n const searchFilter = ((typeof _search === 'string' ? _search : search) || '').trim()\n\n let filteredDocuments: FolderOrDocument[] = allDocuments\n let filteredSubfolders: FolderOrDocument[] = allSubfolders\n\n if (collectionSlug && !activeFolderID && _search !== search) {\n // this allows us to search all documents in the collection when we are not in a folder and in the folder-collection view\n const res = await getFolderData({\n folderID: activeFolderID,\n search: searchFilter,\n })\n filteredDocuments = filterOutItems({\n items: res.documents,\n relationTo,\n search: searchFilter,\n })\n filteredSubfolders = filterOutItems({\n items: res.subfolders,\n relationTo: [folderCollectionSlug],\n search: searchFilter,\n })\n } else {\n filteredDocuments = filterOutItems({\n items: allDocuments,\n relationTo,\n search: searchFilter,\n })\n filteredSubfolders = filterOutItems({\n items: allSubfolders,\n relationTo: relationTo.includes(folderCollectionSlug) ? [folderCollectionSlug] : [],\n search: searchFilter,\n })\n }\n\n setDocuments(filteredDocuments)\n setSubfolders(filteredSubfolders)\n setSearch(searchFilter)\n setVisibleCollectionSlugs(relationTo)\n\n if (drawerDepth === 1) {\n router.replace(\n formatFolderURL({\n relationTo,\n search: searchFilter || undefined,\n }),\n )\n }\n },\n [\n collectionSlug,\n visibleCollectionSlugs,\n search,\n activeFolderID,\n allDocuments,\n allSubfolders,\n folderCollectionSlug,\n drawerDepth,\n getFolderData,\n router,\n formatFolderURL,\n ],\n )\n\n const sortItems = React.useCallback(\n ({\n documentsToSort,\n sortDirection: sortDirectionArg,\n sortOn: sortOnArg,\n subfoldersToSort,\n }: Parameters<FolderContextValue['sortAndUpdateState']>[0]): {\n newURL?: string\n sortedDocuments?: FolderOrDocument[]\n sortedSubfolders?: FolderOrDocument[]\n } => {\n let sortedDocuments: FolderOrDocument[] | undefined\n let sortedSubfolders: FolderOrDocument[] | undefined\n const sortDirectionToUse = sortDirectionArg || sortDirection\n const sortOnToUse = sortOnArg || sortOn\n\n if (sortOnArg) {\n setSortOn(sortOnArg)\n }\n\n if (sortDirectionArg) {\n setSortDirection(sortDirectionArg)\n }\n\n const newURL = formatFolderURL({\n sortBy: sortOnArg || sortOn,\n sortDirection: sortDirectionArg || sortDirection,\n })\n\n if (documentsToSort) {\n sortedDocuments = [...documentsToSort].sort((a, b) => {\n const aValue = a.value[sortOnToUse]\n const bValue = b.value[sortOnToUse]\n\n if (aValue == null && bValue == null) {\n return 0\n }\n if (aValue == null) {\n return sortDirectionToUse === 'asc' ? 1 : -1\n }\n if (bValue == null) {\n return sortDirectionToUse === 'asc' ? -1 : 1\n }\n\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n return sortDirectionToUse === 'asc'\n ? aValue.localeCompare(bValue)\n : bValue.localeCompare(aValue)\n }\n\n return 0\n })\n }\n\n if (subfoldersToSort) {\n sortedSubfolders = [...subfoldersToSort].sort((a, b) => {\n const aValue = a.value[sortOnToUse]\n const bValue = b.value[sortOnToUse]\n\n if (aValue == null && bValue == null) {\n return 0\n }\n if (aValue == null) {\n return sortDirectionToUse === 'asc' ? 1 : -1\n }\n if (bValue == null) {\n return sortDirectionToUse === 'asc' ? -1 : 1\n }\n\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n return sortDirectionToUse === 'asc'\n ? aValue.localeCompare(bValue)\n : bValue.localeCompare(aValue)\n }\n\n return 0\n })\n }\n\n return {\n newURL,\n sortedDocuments,\n sortedSubfolders,\n }\n },\n [formatFolderURL, sortDirection, sortOn],\n )\n\n const sortAndUpdateState: FolderContextValue['sortAndUpdateState'] = React.useCallback(\n ({ documentsToSort, sortDirection: sortDirectionArg, sortOn: sortOnArg, subfoldersToSort }) => {\n const { newURL, sortedDocuments, sortedSubfolders } = sortItems({\n documentsToSort,\n sortDirection: sortDirectionArg,\n sortOn: sortOnArg,\n subfoldersToSort,\n })\n\n if (sortedDocuments) {\n setDocuments(sortedDocuments)\n }\n if (sortedSubfolders) {\n setSubfolders(sortedSubfolders)\n }\n\n if (drawerDepth === 1) {\n // not in a drawer (default is 1)\n startRouteTransition(() => {\n router.replace(newURL)\n })\n }\n },\n [drawerDepth, router, sortItems, startRouteTransition],\n )\n\n const separateItems = React.useCallback(\n (\n items: FolderOrDocument[],\n ): {\n documents: FolderOrDocument[]\n folders: FolderOrDocument[]\n } => {\n return items.reduce(\n (acc, item) => {\n if (item.relationTo === folderCollectionSlug) {\n acc.folders.push(item)\n } else {\n acc.documents.push(item)\n }\n return acc\n },\n { documents: [] as FolderOrDocument[], folders: [] as FolderOrDocument[] },\n )\n },\n [folderCollectionSlug],\n )\n\n /**\n * Used to remove items from the current state.\n *\n * Does NOT handle the request to the server.\n * Useful when a document is deleted and it needs to be removed\n * from the current state.\n */\n const removeItems: FolderContextValue['removeItems'] = React.useCallback(\n (items) => {\n if (!items.length) {\n return\n }\n\n const separatedItems = separateItems(items)\n\n if (separatedItems.documents.length) {\n setDocuments((prevDocs) => {\n return prevDocs.filter(\n ({ itemKey }) => !separatedItems.documents.some((item) => item.itemKey === itemKey),\n )\n })\n }\n\n if (separatedItems.folders.length) {\n setSubfolders((prevFolders) => {\n return prevFolders.filter(\n ({ itemKey }) => !separatedItems.folders.some((item) => item.itemKey === itemKey),\n )\n })\n }\n\n clearSelections()\n },\n [clearSelections, separateItems, setDocuments, setSubfolders],\n )\n\n /**\n * Used to add items to the current state.\n *\n * Does NOT handle the request to the server.\n * Used when a document needs to be added to the current state.\n */\n const addItems: FolderContextValue['addItems'] = React.useCallback(\n (itemsToAdd) => {\n const { items, parentItems } = itemsToAdd.reduce(\n (acc, item) => {\n const destinationFolderID = item.value.folderID || null\n if (\n (item.value.folderID && item.value.folderID === activeFolderID) ||\n (!activeFolderID && !item.value.folderID)\n ) {\n acc.items.push(item)\n }\n\n if (\n parentFolderContext &&\n ((parentFolderContext.folderID &&\n destinationFolderID === parentFolderContext.folderID) ||\n (!parentFolderContext.folderID && !item.value.folderID))\n ) {\n acc.parentItems.push(item)\n }\n\n return acc\n },\n { items: [], parentItems: [] },\n )\n\n if (parentItems.length) {\n parentFolderContext.addItems(parentItems)\n }\n\n if (!items.length) {\n return\n }\n\n const separatedItems = separateItems(items)\n\n let documentsToSort = undefined\n let subfoldersToSort = undefined\n\n if (separatedItems.documents.length) {\n documentsToSort = [...documents, ...separatedItems.documents]\n }\n\n if (separatedItems.folders.length) {\n subfoldersToSort = [...subfolders, ...separatedItems.folders]\n }\n\n const { sortedDocuments, sortedSubfolders } = sortItems({\n documentsToSort,\n subfoldersToSort,\n })\n\n const { sortedDocuments: sortedAllDocuments, sortedSubfolders: sortedAllSubfolders } =\n sortItems({\n documentsToSort,\n subfoldersToSort,\n })\n\n if (sortedDocuments) {\n setDocuments(sortedDocuments)\n setAllDocuments(sortedAllDocuments)\n }\n if (sortedSubfolders) {\n setSubfolders(sortedSubfolders)\n setAllSubfolders(sortedAllSubfolders)\n }\n },\n [activeFolderID, documents, separateItems, sortItems, subfolders],\n )\n\n /**\n * Used to move items to a different folder.\n *\n * Handles the request to the server and updates the state.\n */\n const moveToFolder: FolderContextValue['moveToFolder'] = React.useCallback(\n async (args) => {\n const { itemsToMove: items, toFolderID } = args\n if (!items.length) {\n return\n }\n\n const movingCurrentFolder =\n items.length === 1 &&\n items[0].relationTo === folderCollectionSlug &&\n items[0].value.id === activeFolderID\n\n if (movingCurrentFolder) {\n const req = await fetch(\n `${serverURL}${routes.api}/${folderCollectionSlug}/${activeFolderID}?depth=0`,\n {\n body: JSON.stringify({ [folderFieldName]: toFolderID || null }),\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n method: 'PATCH',\n },\n )\n if (req.status !== 200) {\n toast.error(t('general:error'))\n } else {\n const updatedDoc = await req.json()\n const folderRes = await getFolderData({\n folderID: updatedDoc.id,\n })\n setBreadcrumbs(folderRes?.breadcrumbs || [])\n setSubfolders(folderRes?.subfolders || [])\n setDocuments(folderRes?.documents || [])\n setActiveFolderID(updatedDoc.id)\n }\n setBreadcrumbs((prevBreadcrumbs) => {\n return prevBreadcrumbs.map((breadcrumb) => {\n if (breadcrumb.id === activeFolderID) {\n return {\n ...breadcrumb,\n id: toFolderID,\n }\n }\n return breadcrumb\n })\n })\n } else {\n const movingToCurrentFolder: boolean = toFolderID === activeFolderID\n const successfullyMovedFolderItems: FolderOrDocument[] = []\n const successfullyMovedDocumentItems: FolderOrDocument[] = []\n\n for (const [collectionSlug, ids] of Object.entries(groupItemIDsByRelation(items))) {\n const collectionConfig = getEntityConfig({ collectionSlug })\n const query = qs.stringify(\n {\n limit: 0,\n where: {\n id: {\n in: ids,\n },\n },\n },\n {\n addQueryPrefix: true,\n },\n )\n try {\n const res = await fetch(`${serverURL}${routes.api}/${collectionSlug}${query}`, {\n body: JSON.stringify({ [folderFieldName]: toFolderID || null }),\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n method: 'PATCH',\n })\n if (res.status === 200) {\n const json = await res.json()\n const { docs } = json as { docs: Document[] }\n const formattedItems: FolderOrDocument[] = docs.map<FolderOrDocument>(\n (doc: Document) =>\n formatFolderOrDocumentItem({\n folderFieldName: config.folders.fieldName,\n isUpload: Boolean(collectionConfig.upload),\n relationTo: collectionSlug,\n useAsTitle: collectionConfig.admin.useAsTitle,\n value: doc,\n }),\n )\n if (collectionSlug === folderCollectionSlug) {\n successfullyMovedFolderItems.push(...formattedItems)\n } else {\n successfullyMovedDocumentItems.push(...formattedItems)\n }\n }\n } catch (error) {\n toast.error(t('general:error'))\n // eslint-disable-next-line no-console\n console.error(error)\n continue\n }\n }\n\n if (movingToCurrentFolder) {\n // need to sort if we are moving (adding) items to the current folder\n const { newURL, sortedDocuments, sortedSubfolders } = sortItems({\n documentsToSort: successfullyMovedDocumentItems.length\n ? [...documents, ...successfullyMovedDocumentItems]\n : undefined,\n subfoldersToSort: successfullyMovedFolderItems.length\n ? [...subfolders, ...successfullyMovedFolderItems]\n : undefined,\n })\n\n if (sortedDocuments) {\n setDocuments(sortedDocuments)\n }\n if (sortedSubfolders) {\n setSubfolders(sortedSubfolders)\n }\n\n if (drawerDepth === 1 && newURL) {\n // not in a drawer (default is 1)\n router.replace(newURL)\n }\n } else {\n // no need to sort, just remove the items from the current state\n const filteredDocuments = successfullyMovedDocumentItems.length\n ? documents.filter(\n ({ itemKey }) =>\n !successfullyMovedDocumentItems.some((item) => item.itemKey === itemKey),\n )\n : undefined\n const filteredSubfolders = successfullyMovedFolderItems.length\n ? subfolders.filter(\n ({ itemKey }) =>\n !successfullyMovedFolderItems.some((item) => item.itemKey === itemKey),\n )\n : undefined\n\n if (filteredDocuments) {\n setDocuments(filteredDocuments)\n }\n if (filteredSubfolders) {\n setSubfolders(filteredSubfolders)\n }\n }\n }\n\n clearSelections()\n },\n [\n folderCollectionSlug,\n activeFolderID,\n clearSelections,\n serverURL,\n routes.api,\n t,\n getFolderData,\n getEntityConfig,\n sortItems,\n documents,\n subfolders,\n drawerDepth,\n router,\n ],\n )\n\n /**\n * Used to rename a folder in the current state.\n *\n * Does NOT handle the request to the server.\n * Used when the user renames a folder using the drawer\n * and it needs to be updated in the current state.\n */\n const renameFolder: FolderContextValue['renameFolder'] = React.useCallback(\n ({ folderID: updatedFolderID, newName }) => {\n if (activeFolderID === updatedFolderID) {\n // updating the curent folder\n setBreadcrumbs((prevBreadcrumbs) => {\n return prevBreadcrumbs.map((breadcrumb) => {\n if (breadcrumb.id === updatedFolderID) {\n return {\n ...breadcrumb,\n name: newName,\n }\n }\n return breadcrumb\n })\n })\n } else {\n setSubfolders((prevFolders) => {\n return prevFolders.map((folder) => {\n if (folder.value.id === updatedFolderID && folder.relationTo === folderCollectionSlug) {\n return {\n ...folder,\n value: {\n ...folder.value,\n _folderOrDocumentTitle: newName,\n },\n }\n }\n return folder\n })\n })\n }\n },\n [folderCollectionSlug, setSubfolders, activeFolderID],\n )\n\n return (\n <Context\n value={{\n addItems,\n breadcrumbs,\n clearSelections,\n currentFolder: breadcrumbs?.[0]?.id\n ? formatFolderOrDocumentItem({\n folderFieldName,\n isUpload: false,\n relationTo: folderCollectionSlug,\n useAsTitle: folderCollectionConfig.admin.useAsTitle,\n value: breadcrumbs[breadcrumbs.length - 1],\n })\n : null,\n documents,\n filterItems,\n focusedRowIndex,\n folderCollectionConfig,\n folderCollectionSlug,\n folderFieldName,\n folderID: activeFolderID,\n getSelectedItems,\n isDragging,\n lastSelectedIndex,\n moveToFolder,\n onItemClick,\n onItemKeyPress,\n removeItems,\n renameFolder,\n search,\n selectedIndexes,\n setBreadcrumbs,\n setFocusedRowIndex,\n setFolderID: setNewActiveFolderID,\n setIsDragging,\n sortAndUpdateState,\n sortDirection,\n sortOn,\n subfolders,\n visibleCollectionSlugs,\n }}\n >\n {children}\n </Context>\n )\n}\n\nexport function useFolder(): FolderContextValue {\n const context = React.use(Context)\n\n if (context === undefined) {\n throw new Error('useFolder must be used within a FolderProvider')\n }\n\n return context\n}\n"],"mappings":"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","ignoreList":[]}