@payloadcms/ui 3.41.0-internal.c079756 → 3.41.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.
Files changed (122) hide show
  1. package/dist/elements/BulkUpload/EditForm/index.d.ts.map +1 -1
  2. package/dist/elements/BulkUpload/EditForm/index.js +2 -1
  3. package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
  4. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  5. package/dist/elements/DocumentControls/index.js +2 -1
  6. package/dist/elements/DocumentControls/index.js.map +1 -1
  7. package/dist/elements/DocumentDrawer/DrawerHeader/index.d.ts +1 -0
  8. package/dist/elements/DocumentDrawer/DrawerHeader/index.d.ts.map +1 -1
  9. package/dist/elements/DocumentDrawer/DrawerHeader/index.js +30 -19
  10. package/dist/elements/DocumentDrawer/DrawerHeader/index.js.map +1 -1
  11. package/dist/elements/DocumentDrawer/DrawerHeader/index.scss +16 -8
  12. package/dist/elements/DrawerActionHeader/index.d.ts +2 -1
  13. package/dist/elements/DrawerActionHeader/index.d.ts.map +1 -1
  14. package/dist/elements/DrawerActionHeader/index.js +41 -30
  15. package/dist/elements/DrawerActionHeader/index.js.map +1 -1
  16. package/dist/elements/DrawerActionHeader/index.scss +2 -2
  17. package/dist/elements/EmailAndUsername/index.d.ts.map +1 -1
  18. package/dist/elements/EmailAndUsername/index.js +3 -0
  19. package/dist/elements/EmailAndUsername/index.js.map +1 -1
  20. package/dist/elements/FolderView/Cell/index.client.d.ts +6 -5
  21. package/dist/elements/FolderView/Cell/index.client.d.ts.map +1 -1
  22. package/dist/elements/FolderView/Cell/index.client.js +6 -3
  23. package/dist/elements/FolderView/Cell/index.client.js.map +1 -1
  24. package/dist/elements/FolderView/Cell/index.server.d.ts.map +1 -1
  25. package/dist/elements/FolderView/Cell/index.server.js +4 -0
  26. package/dist/elements/FolderView/Cell/index.server.js.map +1 -1
  27. package/dist/elements/FolderView/CollectionTypePill/index.d.ts.map +1 -1
  28. package/dist/elements/FolderView/CollectionTypePill/index.js +20 -18
  29. package/dist/elements/FolderView/CollectionTypePill/index.js.map +1 -1
  30. package/dist/elements/FolderView/CurrentFolderActions/index.d.ts.map +1 -1
  31. package/dist/elements/FolderView/CurrentFolderActions/index.js +20 -14
  32. package/dist/elements/FolderView/CurrentFolderActions/index.js.map +1 -1
  33. package/dist/elements/FolderView/Drawers/EditFolderAction/index.d.ts +9 -0
  34. package/dist/elements/FolderView/Drawers/EditFolderAction/index.d.ts.map +1 -0
  35. package/dist/elements/FolderView/Drawers/EditFolderAction/index.js +36 -0
  36. package/dist/elements/FolderView/Drawers/EditFolderAction/index.js.map +1 -0
  37. package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts +2 -0
  38. package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts.map +1 -1
  39. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js +120 -101
  40. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js.map +1 -1
  41. package/dist/elements/FolderView/Drawers/MoveToFolder/index.scss +1 -1
  42. package/dist/elements/FolderView/Field/index.server.d.ts.map +1 -1
  43. package/dist/elements/FolderView/Field/index.server.js +4 -0
  44. package/dist/elements/FolderView/Field/index.server.js.map +1 -1
  45. package/dist/elements/FolderView/MoveDocToFolder/index.d.ts +19 -16
  46. package/dist/elements/FolderView/MoveDocToFolder/index.d.ts.map +1 -1
  47. package/dist/elements/FolderView/MoveDocToFolder/index.js +52 -41
  48. package/dist/elements/FolderView/MoveDocToFolder/index.js.map +1 -1
  49. package/dist/elements/ListFolderPills/index.d.ts +4 -3
  50. package/dist/elements/ListFolderPills/index.d.ts.map +1 -1
  51. package/dist/elements/ListFolderPills/index.js +5 -1
  52. package/dist/elements/ListFolderPills/index.js.map +1 -1
  53. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.d.ts.map +1 -1
  54. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js +75 -55
  55. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js.map +1 -1
  56. package/dist/elements/Upload/index.scss +2 -3
  57. package/dist/elements/WhereBuilder/reduceFields.d.ts.map +1 -1
  58. package/dist/elements/WhereBuilder/reduceFields.js +1 -28
  59. package/dist/elements/WhereBuilder/reduceFields.js.map +1 -1
  60. package/dist/exports/client/{CodeEditor-7N7BMHRP.js → CodeEditor-Z3ZZJH7C.js} +2 -2
  61. package/dist/exports/client/chunk-CNCOIY3Y.js +26 -0
  62. package/dist/exports/client/{chunk-QPA2ZA5J.js.map → chunk-CNCOIY3Y.js.map} +3 -3
  63. package/dist/exports/client/index.d.ts +0 -1
  64. package/dist/exports/client/index.d.ts.map +1 -1
  65. package/dist/exports/client/index.js +22 -22
  66. package/dist/exports/client/index.js.map +4 -4
  67. package/dist/exports/shared/index.js +2 -2
  68. package/dist/exports/shared/index.js.map +1 -1
  69. package/dist/fields/Number/index.d.ts.map +1 -1
  70. package/dist/fields/Number/index.js +4 -3
  71. package/dist/fields/Number/index.js.map +1 -1
  72. package/dist/fields/Text/Input.d.ts.map +1 -1
  73. package/dist/fields/Text/Input.js +55 -52
  74. package/dist/fields/Text/Input.js.map +1 -1
  75. package/dist/fields/Text/index.d.ts.map +1 -1
  76. package/dist/fields/Text/index.js +4 -0
  77. package/dist/fields/Text/index.js.map +1 -1
  78. package/dist/fields/Text/types.d.ts +4 -1
  79. package/dist/fields/Text/types.d.ts.map +1 -1
  80. package/dist/fields/Text/types.js.map +1 -1
  81. package/dist/providers/Config/index.d.ts.map +1 -1
  82. package/dist/providers/Config/index.js +12 -6
  83. package/dist/providers/Config/index.js.map +1 -1
  84. package/dist/providers/Folders/index.d.ts +10 -2
  85. package/dist/providers/Folders/index.d.ts.map +1 -1
  86. package/dist/providers/Folders/index.js +7 -5
  87. package/dist/providers/Folders/index.js.map +1 -1
  88. package/dist/styles.css +1 -1
  89. package/dist/utilities/formatDocTitle/formatDateTitle.d.ts +3 -3
  90. package/dist/utilities/formatDocTitle/formatDateTitle.d.ts.map +1 -1
  91. package/dist/utilities/formatDocTitle/formatDateTitle.js.map +1 -1
  92. package/dist/views/BrowseByFolder/index.d.ts.map +1 -1
  93. package/dist/views/BrowseByFolder/index.js +4 -3
  94. package/dist/views/BrowseByFolder/index.js.map +1 -1
  95. package/dist/views/CollectionFolder/ListSelection/index.d.ts.map +1 -1
  96. package/dist/views/CollectionFolder/ListSelection/index.js +36 -37
  97. package/dist/views/CollectionFolder/ListSelection/index.js.map +1 -1
  98. package/dist/views/CollectionFolder/index.d.ts.map +1 -1
  99. package/dist/views/CollectionFolder/index.js +7 -4
  100. package/dist/views/CollectionFolder/index.js.map +1 -1
  101. package/dist/views/Edit/index.d.ts.map +1 -1
  102. package/dist/views/Edit/index.js +5 -3
  103. package/dist/views/Edit/index.js.map +1 -1
  104. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  105. package/dist/views/List/ListHeader/index.js +2 -1
  106. package/dist/views/List/ListHeader/index.js.map +1 -1
  107. package/package.json +4 -4
  108. package/dist/elements/FolderView/Drawers/DrawerHeader/index.d.ts +0 -10
  109. package/dist/elements/FolderView/Drawers/DrawerHeader/index.d.ts.map +0 -1
  110. package/dist/elements/FolderView/Drawers/DrawerHeader/index.js +0 -55
  111. package/dist/elements/FolderView/Drawers/DrawerHeader/index.js.map +0 -1
  112. package/dist/elements/FolderView/Drawers/DrawerHeader/index.scss +0 -30
  113. package/dist/elements/FolderView/Drawers/NewFolder/index.d.ts +0 -9
  114. package/dist/elements/FolderView/Drawers/NewFolder/index.d.ts.map +0 -1
  115. package/dist/elements/FolderView/Drawers/NewFolder/index.js +0 -157
  116. package/dist/elements/FolderView/Drawers/NewFolder/index.js.map +0 -1
  117. package/dist/elements/FolderView/Drawers/RenameFolder/index.d.ts +0 -13
  118. package/dist/elements/FolderView/Drawers/RenameFolder/index.d.ts.map +0 -1
  119. package/dist/elements/FolderView/Drawers/RenameFolder/index.js +0 -140
  120. package/dist/elements/FolderView/Drawers/RenameFolder/index.js.map +0 -1
  121. package/dist/exports/client/chunk-QPA2ZA5J.js +0 -26
  122. /package/dist/exports/client/{CodeEditor-7N7BMHRP.js.map → CodeEditor-Z3ZZJH7C.js.map} +0 -0
@@ -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","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":[]}
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","folderCollectionSlugs","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","_folderIDFromProps","_searchFromProps","sort","subfoldersFromProps","parentFolderContext","useFolder","config","getEntityConfig","routes","serverURL","drawerDepth","t","router","startRouteTransition","useState","collections","find","collection","folders","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 /**\n * Folder enabled collection slugs that can be populated within the provider\n */\n readonly folderCollectionSlugs?: CollectionSlug[]\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 folderCollectionSlugs: [],\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 that can be populated within the provider\n */\n readonly folderCollectionSlugs: CollectionSlug[]\n /**\n * The name of the field that contains the folder relation\n */\n readonly folderFieldName: string\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 folderFieldName,\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 { 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(\n (collection) => config.folders && collection.slug === config.folders.slug,\n ),\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, parentFolderContext],\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,\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 folderFieldName,\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 folderCollectionSlugs,\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":[]}