@payloadcms/ui 3.48.0-canary.6 → 3.48.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.
- package/dist/elements/FolderView/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/elements/FolderView/Breadcrumbs/index.js.map +1 -1
- package/dist/elements/FolderView/CurrentFolderActions/index.d.ts.map +1 -1
- package/dist/elements/FolderView/CurrentFolderActions/index.js +1 -0
- package/dist/elements/FolderView/CurrentFolderActions/index.js.map +1 -1
- package/dist/elements/FolderView/DragOverlaySelection/index.d.ts +2 -3
- package/dist/elements/FolderView/DragOverlaySelection/index.d.ts.map +1 -1
- package/dist/elements/FolderView/DragOverlaySelection/index.js +2 -7
- package/dist/elements/FolderView/DragOverlaySelection/index.js.map +1 -1
- package/dist/elements/FolderView/DraggableTableRow/index.d.ts.map +1 -1
- package/dist/elements/FolderView/DraggableTableRow/index.js +0 -1
- package/dist/elements/FolderView/DraggableTableRow/index.js.map +1 -1
- package/dist/elements/FolderView/DraggableWithClick/index.d.ts +2 -2
- package/dist/elements/FolderView/DraggableWithClick/index.d.ts.map +1 -1
- package/dist/elements/FolderView/DraggableWithClick/index.js +11 -6
- package/dist/elements/FolderView/DraggableWithClick/index.js.map +1 -1
- package/dist/elements/FolderView/DraggableWithClick/index.scss +1 -1
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts +2 -0
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts.map +1 -1
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.js +53 -44
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.js.map +1 -1
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.scss +4 -0
- package/dist/elements/FolderView/FilterFolderTypePill/index.d.ts +4 -0
- package/dist/elements/FolderView/FilterFolderTypePill/index.d.ts.map +1 -0
- package/dist/elements/FolderView/{CollectionTypePill → FilterFolderTypePill}/index.js +1 -1
- package/dist/elements/FolderView/FilterFolderTypePill/index.js.map +1 -0
- package/dist/elements/FolderView/FolderField/index.server.d.ts +4 -0
- package/dist/elements/FolderView/FolderField/index.server.d.ts.map +1 -0
- package/dist/elements/FolderView/{Field → FolderField}/index.server.js +1 -1
- package/dist/elements/FolderView/FolderField/index.server.js.map +1 -0
- package/dist/elements/FolderView/FolderFileCard/index.d.ts +2 -1
- package/dist/elements/FolderView/FolderFileCard/index.d.ts.map +1 -1
- package/dist/elements/FolderView/FolderFileCard/index.js +89 -48
- package/dist/elements/FolderView/FolderFileCard/index.js.map +1 -1
- package/dist/elements/FolderView/FolderFileCard/index.scss +30 -18
- package/dist/elements/FolderView/FolderFileTable/index.d.ts.map +1 -1
- package/dist/elements/FolderView/FolderFileTable/index.js +41 -28
- package/dist/elements/FolderView/FolderFileTable/index.js.map +1 -1
- package/dist/elements/FolderView/FolderTypeField/index.d.ts +6 -0
- package/dist/elements/FolderView/FolderTypeField/index.d.ts.map +1 -0
- package/dist/elements/FolderView/FolderTypeField/index.js +127 -0
- package/dist/elements/FolderView/FolderTypeField/index.js.map +1 -0
- package/dist/elements/FolderView/MoveDocToFolder/index.d.ts.map +1 -1
- package/dist/elements/FolderView/MoveDocToFolder/index.js +2 -1
- package/dist/elements/FolderView/MoveDocToFolder/index.js.map +1 -1
- package/dist/elements/FolderView/SortByPill/index.d.ts.map +1 -1
- package/dist/elements/FolderView/SortByPill/index.js +11 -9
- package/dist/elements/FolderView/SortByPill/index.js.map +1 -1
- package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.d.ts +2 -1
- package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.d.ts.map +1 -1
- package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js +25 -22
- package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js.map +1 -1
- package/dist/exports/client/index.d.ts +2 -1
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +10 -10
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/rsc/index.d.ts +1 -1
- package/dist/exports/rsc/index.d.ts.map +1 -1
- package/dist/exports/rsc/index.js +1 -1
- package/dist/exports/rsc/index.js.map +1 -1
- package/dist/fields/Checkbox/Input.d.ts.map +1 -1
- package/dist/fields/Checkbox/Input.js +113 -45
- package/dist/fields/Checkbox/Input.js.map +1 -1
- package/dist/fields/Select/index.d.ts +2 -0
- package/dist/fields/Select/index.d.ts.map +1 -1
- package/dist/fields/Select/index.js +1 -1
- package/dist/fields/Select/index.js.map +1 -1
- package/dist/providers/Folders/groupItemIDsByRelation.d.ts +3 -0
- package/dist/providers/Folders/groupItemIDsByRelation.d.ts.map +1 -0
- package/dist/providers/Folders/groupItemIDsByRelation.js +10 -0
- package/dist/providers/Folders/groupItemIDsByRelation.js.map +1 -0
- package/dist/providers/Folders/index.d.ts +4 -1
- package/dist/providers/Folders/index.d.ts.map +1 -1
- package/dist/providers/Folders/index.js +264 -105
- package/dist/providers/Folders/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/getFolderResultsComponentAndData.d.ts +3 -7
- package/dist/utilities/getFolderResultsComponentAndData.d.ts.map +1 -1
- package/dist/utilities/getFolderResultsComponentAndData.js +36 -20
- package/dist/utilities/getFolderResultsComponentAndData.js.map +1 -1
- package/dist/views/BrowseByFolder/index.js +27 -12
- package/dist/views/BrowseByFolder/index.js.map +1 -1
- package/dist/views/CollectionFolder/ListSelection/index.d.ts +2 -0
- package/dist/views/CollectionFolder/ListSelection/index.d.ts.map +1 -1
- package/dist/views/CollectionFolder/ListSelection/index.js +18 -14
- package/dist/views/CollectionFolder/ListSelection/index.js.map +1 -1
- package/dist/views/CollectionFolder/index.js +21 -8
- package/dist/views/CollectionFolder/index.js.map +1 -1
- package/package.json +5 -5
- package/dist/elements/FolderView/CollectionTypePill/index.d.ts +0 -4
- package/dist/elements/FolderView/CollectionTypePill/index.d.ts.map +0 -1
- package/dist/elements/FolderView/CollectionTypePill/index.js.map +0 -1
- package/dist/elements/FolderView/Field/index.server.d.ts +0 -4
- package/dist/elements/FolderView/Field/index.server.d.ts.map +0 -1
- package/dist/elements/FolderView/Field/index.server.js.map +0 -1
- package/dist/providers/Folders/selection.d.ts +0 -11
- package/dist/providers/Folders/selection.d.ts.map +0 -1
- package/dist/providers/Folders/selection.js +0 -38
- package/dist/providers/Folders/selection.js.map +0 -1
- /package/dist/elements/FolderView/{CollectionTypePill → FilterFolderTypePill}/index.scss +0 -0
- /package/dist/elements/FolderView/{Field → FolderField}/index.scss +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useRouter","useSearchParams","extractID","formatAdminURL","formatFolderOrDocumentItem","qs","React","toast","useDrawerDepth","parseSearchParams","useConfig","useRouteTransition","useTranslation","getMetaSelection","getShiftSelection","groupItemIDsByRelation","Context","createContext","activeCollectionFolderSlugs","allCollectionFolderSlugs","allowCreateCollectionSlugs","breadcrumbs","clearSelections","currentFolder","documents","focusedRowIndex","folderCollectionConfig","folderCollectionSlug","folderFieldName","folderID","undefined","FolderResultsComponent","getFolderRoute","getSelectedItems","isDragging","itemKeysToMove","lastSelectedIndex","moveToFolder","Promise","resolve","onItemClick","onItemKeyPress","refineFolderData","search","selectedItemKeys","Set","setBreadcrumbs","setFocusedRowIndex","setIsDragging","sort","subfolders","FolderProvider","activeCollectionSlugs","allowMultiSelection","baseFolderPath","_breadcrumbsFromProps","children","InitialFolderResultsComponent","onItemClickFromProps","parentFolderContext","useFolder","config","routes","serverURL","drawerDepth","t","router","startRouteTransition","setFolderResultsComponent","useState","collections","find","collection","folders","slug","rawSearchParams","searchParams","useMemo","currentQuery","setCurrentQuery","setSelectedItemKeys","setLastSelectedIndex","lastClickTime","useRef","totalCount","length","useCallback","mergeQuery","newQuery","page","mergedQuery","query","updateURL","replace","stringify","addQueryPrefix","toFolderID","adminRoute","admin","path","getItem","itemKey","doc","Array","from","reduce","acc","item","push","navigateAfterSelection","collectionSlug","docID","event","index","code","ctrlKey","metaKey","shiftKey","isShiftPressed","isCtrlPressed","newSelectedIndexes","preventDefault","nextIndex","Math","min","selectFromIndex","selectToIndex","prevIndex","max","size","_","i","currentSelection","toggleIndex","has","add","relationTo","value","doubleClicked","type","now","Date","current","args","itemsToMove","items","movingCurrentFolder","id","req","fetch","api","body","JSON","credentials","headers","method","status","error","ids","Object","entries","depth","limit","where","in","console","useEffect","_jsx","isUpload","useAsTitle","context","use","Error"],"sources":["../../../src/providers/Folders/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, CollectionSlug, FolderSortKeys } from 'payload'\nimport type { FolderBreadcrumb, FolderDocumentItemKey, FolderOrDocument } from 'payload/shared'\n\nimport { useRouter, useSearchParams } 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 { parseSearchParams } from '../../utilities/parseSearchParams.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'\n\ntype FolderQueryParams = {\n page?: string\n relationTo?: CollectionSlug[]\n search?: string\n sort?: string\n}\n\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 /**\n * The collection slugs that a view can be filtered by\n * Used in the browse-by-folder view\n */\n activeCollectionFolderSlugs: CollectionSlug[]\n /**\n * Folder enabled collection slugs that can be populated within the provider\n */\n readonly allCollectionFolderSlugs?: CollectionSlug[]\n allowCreateCollectionSlugs: CollectionSlug[]\n breadcrumbs?: FolderBreadcrumb[]\n clearSelections: () => void\n currentFolder?: FolderOrDocument | null\n documents?: FolderOrDocument[]\n focusedRowIndex: number\n folderCollectionConfig: ClientCollectionConfig\n folderCollectionSlug: string\n folderFieldName: string\n folderID?: number | string\n FolderResultsComponent: React.ReactNode\n getFolderRoute: (toFolderID?: number | string) => string\n getSelectedItems?: () => FolderOrDocument[]\n isDragging: boolean\n itemKeysToMove?: Set<FolderDocumentItemKey>\n lastSelectedIndex: null | number\n moveToFolder: (args: {\n itemsToMove: FolderOrDocument[]\n toFolderID?: number | string\n }) => Promise<void>\n onItemClick: (args: { event: React.MouseEvent; index: number; item: FolderOrDocument }) => void\n onItemKeyPress: (args: {\n event: React.KeyboardEvent\n index: number\n item: FolderOrDocument\n }) => void\n refineFolderData: (args: { query?: FolderQueryParams; updateURL: boolean }) => void\n search: string\n readonly selectedItemKeys: Set<FolderDocumentItemKey>\n setBreadcrumbs: React.Dispatch<React.SetStateAction<FolderBreadcrumb[]>>\n setFocusedRowIndex: React.Dispatch<React.SetStateAction<number>>\n setIsDragging: React.Dispatch<React.SetStateAction<boolean>>\n sort: FolderSortKeys\n subfolders?: FolderOrDocument[]\n}\n\nconst Context = React.createContext<FolderContextValue>({\n activeCollectionFolderSlugs: [],\n allCollectionFolderSlugs: [],\n allowCreateCollectionSlugs: [],\n breadcrumbs: [],\n clearSelections: () => {},\n currentFolder: null,\n documents: [],\n focusedRowIndex: -1,\n folderCollectionConfig: null,\n folderCollectionSlug: '',\n folderFieldName: 'folder',\n folderID: undefined,\n FolderResultsComponent: null,\n getFolderRoute: () => '',\n getSelectedItems: () => [],\n isDragging: false,\n itemKeysToMove: undefined,\n lastSelectedIndex: null,\n moveToFolder: () => Promise.resolve(undefined),\n onItemClick: () => undefined,\n onItemKeyPress: () => undefined,\n refineFolderData: () => undefined,\n search: '',\n selectedItemKeys: new Set<FolderDocumentItemKey>(),\n setBreadcrumbs: () => {},\n setFocusedRowIndex: () => -1,\n setIsDragging: () => false,\n sort: '_folderOrDocumentTitle',\n subfolders: [],\n})\n\nexport type FolderProviderProps = {\n /**\n * The collection slugs that are being viewed\n */\n readonly activeCollectionFolderSlugs?: CollectionSlug[]\n /**\n * Folder enabled collection slugs that can be populated within the provider\n */\n readonly allCollectionFolderSlugs: CollectionSlug[]\n /**\n * Array of slugs that can be created in the folder view\n */\n readonly allowCreateCollectionSlugs: CollectionSlug[]\n readonly allowMultiSelection?: boolean\n /**\n * The base folder route path\n *\n * @example\n * `/collections/:collectionSlug/:folderCollectionSlug`\n * or\n * `/browse-by-folder`\n */\n readonly baseFolderPath?: `/${string}`\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 * All documents in the current folder\n */\n readonly documents: FolderOrDocument[]\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 component to render the folder results\n */\n readonly FolderResultsComponent: React.ReactNode\n /**\n * Optional function to call when an item is clicked\n */\n readonly onItemClick?: (itme: FolderOrDocument) => void\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?: FolderSortKeys\n /**\n * All subfolders in the current folder\n */\n readonly subfolders: FolderOrDocument[]\n}\nexport function FolderProvider({\n activeCollectionFolderSlugs: activeCollectionSlugs,\n allCollectionFolderSlugs = [],\n allowCreateCollectionSlugs,\n allowMultiSelection = true,\n baseFolderPath,\n breadcrumbs: _breadcrumbsFromProps = [],\n children,\n documents,\n folderFieldName,\n folderID,\n FolderResultsComponent: InitialFolderResultsComponent,\n onItemClick: onItemClickFromProps,\n search,\n sort = '_folderOrDocumentTitle',\n subfolders,\n}: FolderProviderProps) {\n const parentFolderContext = useFolder()\n const { config } = 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 [FolderResultsComponent, setFolderResultsComponent] = React.useState(\n InitialFolderResultsComponent || (() => null),\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 rawSearchParams = useSearchParams()\n const searchParams = React.useMemo(() => parseSearchParams(rawSearchParams), [rawSearchParams])\n const [currentQuery, setCurrentQuery] = React.useState<FolderQueryParams>(searchParams)\n\n const [isDragging, setIsDragging] = React.useState(false)\n const [selectedItemKeys, setSelectedItemKeys] = React.useState<Set<FolderDocumentItemKey>>(\n () => new Set(),\n )\n const [focusedRowIndex, setFocusedRowIndex] = React.useState(-1)\n const [lastSelectedIndex, setLastSelectedIndex] = React.useState<null | number>(null)\n const [breadcrumbs, setBreadcrumbs] =\n React.useState<FolderContextValue['breadcrumbs']>(_breadcrumbsFromProps)\n const lastClickTime = React.useRef<null | number>(null)\n const totalCount = subfolders.length + documents.length\n\n const clearSelections = React.useCallback(() => {\n setFocusedRowIndex(-1)\n setSelectedItemKeys(new Set())\n setLastSelectedIndex(undefined)\n }, [])\n\n const mergeQuery = React.useCallback(\n (newQuery: Partial<FolderQueryParams> = {}): Partial<FolderQueryParams> => {\n let page = 'page' in newQuery ? newQuery.page : currentQuery?.page\n\n if ('search' in newQuery) {\n page = '1'\n }\n\n const mergedQuery = {\n ...currentQuery,\n ...newQuery,\n page,\n search: 'search' in newQuery ? newQuery.search : currentQuery?.search,\n sort: 'sort' in newQuery ? newQuery.sort : (currentQuery?.sort ?? undefined),\n }\n\n return mergedQuery\n },\n [currentQuery],\n )\n\n const refineFolderData: FolderContextValue['refineFolderData'] = React.useCallback(\n ({ query, updateURL }) => {\n if (updateURL) {\n const newQuery = mergeQuery(query)\n startRouteTransition(() =>\n router.replace(`${qs.stringify(newQuery, { addQueryPrefix: true })}`),\n )\n\n setCurrentQuery(newQuery)\n }\n },\n [mergeQuery, router, startRouteTransition],\n )\n\n const getFolderRoute: FolderContextValue['getFolderRoute'] = React.useCallback(\n (toFolderID) => {\n const newQuery = mergeQuery({ page: '1', search: '' })\n return formatAdminURL({\n adminRoute: config.routes.admin,\n path: `${baseFolderPath}${toFolderID ? `/${toFolderID}` : ''}${qs.stringify(newQuery, { addQueryPrefix: true })}`,\n serverURL: config.serverURL,\n })\n },\n [baseFolderPath, config.routes.admin, config.serverURL, mergeQuery],\n )\n\n const getItem = React.useCallback(\n (itemKey: FolderDocumentItemKey) => {\n return [...subfolders, ...documents].find((doc) => doc.itemKey === itemKey)\n },\n [documents, subfolders],\n )\n\n const getSelectedItems = React.useCallback(() => {\n return Array.from(selectedItemKeys).reduce((acc, itemKey) => {\n const item = getItem(itemKey)\n if (item) {\n acc.push(item)\n }\n return acc\n }, [])\n }, [selectedItemKeys, getItem])\n\n const navigateAfterSelection = React.useCallback(\n ({ collectionSlug, docID }: { collectionSlug: string; docID?: number | string }) => {\n if (drawerDepth === 1) {\n // not in a drawer (default is 1)\n clearSelections()\n if (collectionSlug === folderCollectionSlug) {\n // clicked on folder, take the user to the folder view\n startRouteTransition(() => router.push(getFolderRoute(docID)))\n } else if (collectionSlug) {\n // clicked on document, take the user to the documet view\n startRouteTransition(() => {\n router.push(\n formatAdminURL({\n adminRoute: config.routes.admin,\n path: `/collections/${collectionSlug}/${docID}`,\n }),\n )\n })\n }\n }\n\n if (typeof onItemClickFromProps === 'function') {\n onItemClickFromProps(getItem(`${collectionSlug}-${docID}`))\n }\n },\n [\n clearSelections,\n config.routes.admin,\n drawerDepth,\n folderCollectionSlug,\n getFolderRoute,\n getItem,\n onItemClickFromProps,\n router,\n startRouteTransition,\n ],\n )\n\n const onItemKeyPress: FolderContextValue['onItemKeyPress'] = React.useCallback(\n ({ event, index, item }) => {\n const { code, ctrlKey, metaKey, shiftKey } = event\n const isShiftPressed = shiftKey\n const isCtrlPressed = ctrlKey || metaKey\n let newSelectedIndexes: Set<number> | undefined = undefined\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 (selectedItemKeys.size === 1) {\n newSelectedIndexes = new Set([])\n setFocusedRowIndex(undefined)\n }\n break\n }\n case 'Escape': {\n setFocusedRowIndex(undefined)\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 && selectedItemKeys.size > 0) {\n setFocusedRowIndex(totalCount - 1)\n }\n }\n break\n }\n }\n\n if (!newSelectedIndexes) {\n return\n }\n\n setSelectedItemKeys(\n [...subfolders, ...documents].reduce((acc, item, index) => {\n if (newSelectedIndexes?.size && newSelectedIndexes.has(index)) {\n acc.add(item.itemKey)\n }\n return acc\n }, new Set<FolderDocumentItemKey>()),\n )\n\n if (selectedItemKeys.size === 1 && code === 'Enter') {\n navigateAfterSelection({\n collectionSlug: item.relationTo,\n docID: extractID(item.value),\n })\n }\n },\n [\n allowMultiSelection,\n documents,\n lastSelectedIndex,\n navigateAfterSelection,\n subfolders,\n totalCount,\n selectedItemKeys,\n ],\n )\n\n const onItemClick: FolderContextValue['onItemClick'] = React.useCallback(\n ({ event, index, item }) => {\n let doubleClicked: boolean = false\n const isCtrlPressed = event.ctrlKey || event.metaKey\n const isShiftPressed = event.shiftKey\n let newSelectedIndexes: Set<number> | undefined = undefined\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 (!selectedItemKeys.has(item.itemKey)) {\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) {\n setFocusedRowIndex(undefined)\n } else {\n setFocusedRowIndex(index)\n }\n\n if (newSelectedIndexes) {\n setSelectedItemKeys(\n [...subfolders, ...documents].reduce((acc, item, index) => {\n if (newSelectedIndexes.size && newSelectedIndexes.has(index)) {\n acc.add(item.itemKey)\n }\n return acc\n }, new Set<FolderDocumentItemKey>()),\n )\n }\n\n if (doubleClicked) {\n navigateAfterSelection({\n collectionSlug: item.relationTo,\n docID: extractID(item.value),\n })\n }\n },\n [\n selectedItemKeys,\n allowMultiSelection,\n lastSelectedIndex,\n subfolders,\n documents,\n navigateAfterSelection,\n ],\n )\n\n /**\n * Makes requests to the server to update the folder field on passed in documents\n *\n * Might rewrite this in the future to return the promises so errors can be handled contextually\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 === folderID\n\n if (movingCurrentFolder) {\n const req = await fetch(\n `${serverURL}${routes.api}/${folderCollectionSlug}/${folderID}?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 }\n } else {\n for (const [collectionSlug, ids] of Object.entries(groupItemIDsByRelation(items))) {\n const query = qs.stringify(\n {\n depth: 0,\n limit: 0,\n where: {\n id: {\n in: ids,\n },\n },\n },\n {\n addQueryPrefix: true,\n },\n )\n try {\n 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 } 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\n clearSelections()\n },\n [folderID, clearSelections, folderCollectionSlug, folderFieldName, routes.api, serverURL, t],\n )\n\n // If a new component is provided, update the state so children can re-render with the new component\n React.useEffect(() => {\n if (InitialFolderResultsComponent) {\n setFolderResultsComponent(InitialFolderResultsComponent)\n }\n }, [InitialFolderResultsComponent])\n\n return (\n <Context\n value={{\n activeCollectionFolderSlugs: activeCollectionSlugs || allCollectionFolderSlugs,\n allCollectionFolderSlugs,\n allowCreateCollectionSlugs,\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 focusedRowIndex,\n folderCollectionConfig,\n folderCollectionSlug,\n folderFieldName,\n folderID,\n FolderResultsComponent,\n getFolderRoute,\n getSelectedItems,\n isDragging,\n itemKeysToMove: parentFolderContext.selectedItemKeys,\n lastSelectedIndex,\n moveToFolder,\n onItemClick,\n onItemKeyPress,\n refineFolderData,\n search,\n selectedItemKeys,\n setBreadcrumbs,\n setFocusedRowIndex,\n setIsDragging,\n sort,\n subfolders,\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","useSearchParams","extractID","formatAdminURL","formatFolderOrDocumentItem","qs","React","toast","useDrawerDepth","parseSearchParams","useConfig","useRouteTransition","useTranslation","groupItemIDsByRelation","Context","createContext","activeCollectionFolderSlugs","allCollectionFolderSlugs","allowCreateCollectionSlugs","breadcrumbs","checkIfItemIsDisabled","clearSelections","currentFolder","documents","dragOverlayItem","undefined","focusedRowIndex","folderCollectionConfig","folderCollectionSlug","folderFieldName","folderID","FolderResultsComponent","folderType","getFolderRoute","getSelectedItems","isDragging","itemKeysToMove","moveToFolder","Promise","resolve","onItemClick","onItemKeyPress","refineFolderData","search","selectedFolderCollections","selectedItemKeys","Set","setBreadcrumbs","setFocusedRowIndex","setIsDragging","sort","subfolders","FolderProvider","activeCollectionSlugs","allowMultiSelection","baseFolderPath","_breadcrumbsFromProps","children","InitialFolderResultsComponent","onItemClickFromProps","parentFolderContext","useFolder","config","routes","serverURL","drawerDepth","t","router","startRouteTransition","currentlySelectedIndexes","useRef","setSelectedFolderCollections","useState","setFolderResultsComponent","collections","find","collection","folders","slug","rawSearchParams","searchParams","useMemo","currentQuery","setCurrentQuery","setSelectedItemKeys","setDragOverlayItem","lastClickTime","totalCount","length","useCallback","current","mergeQuery","newQuery","page","mergedQuery","relationTo","query","updateURL","replace","stringify","JSON","addQueryPrefix","toFolderID","adminRoute","admin","path","getItem","itemKey","doc","Array","from","reduce","acc","item","push","navigateAfterSelection","collectionSlug","docID","handleShiftSelection","targetIndex","allItems","existingIndexes","idx","has","firstSelectedIndex","Math","min","lastSelectedIndex","max","isWithinBounds","anchorIndex","distanceToFirst","abs","distanceToLast","startIndex","endIndex","newRangeIndexes","_","i","updateSelections","indexes","newSelectedFolderCollections","newSelectedItemKeys","index","includes","add","value","forEach","event","currentItem","code","ctrlKey","metaKey","shiftKey","isShiftPressed","isCtrlPressed","isCurrentlySelected","currentItemIndex","findIndex","preventDefault","isBackward","newItemIndex","selectedIndexes","newItem","size","prevIndex","nextIndex","clickedItem","doubleClicked","overlayItemKey","type","now","Date","args","itemsToMove","items","movingCurrentFolder","id","req","fetch","api","body","credentials","headers","method","status","error","ids","Object","entries","depth","limit","where","in","console","folderAcceptsItem","isArray","Boolean","some","isSelected","useEffect","_jsx","isUpload","useAsTitle","context","use","Error"],"sources":["../../../src/providers/Folders/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, CollectionSlug, FolderSortKeys } from 'payload'\nimport type { FolderBreadcrumb, FolderDocumentItemKey, FolderOrDocument } from 'payload/shared'\n\nimport { useRouter, useSearchParams } 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 { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { useConfig } from '../Config/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\nimport { useTranslation } from '../Translation/index.js'\nimport { groupItemIDsByRelation } from './groupItemIDsByRelation.js'\n\ntype FolderQueryParams = {\n page?: string\n relationTo?: CollectionSlug[]\n search?: string\n sort?: string\n}\n\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 /**\n * The collection slugs that a view can be filtered by\n * Used in the browse-by-folder view\n */\n activeCollectionFolderSlugs: CollectionSlug[]\n /**\n * Folder enabled collection slugs that can be populated within the provider\n */\n readonly allCollectionFolderSlugs?: CollectionSlug[]\n allowCreateCollectionSlugs: CollectionSlug[]\n breadcrumbs?: FolderBreadcrumb[]\n checkIfItemIsDisabled: (item: FolderOrDocument) => boolean\n clearSelections: () => void\n currentFolder?: FolderOrDocument | null\n documents?: FolderOrDocument[]\n dragOverlayItem?: FolderOrDocument | undefined\n focusedRowIndex: number\n folderCollectionConfig: ClientCollectionConfig\n folderCollectionSlug: string\n folderFieldName: string\n folderID?: number | string\n FolderResultsComponent: React.ReactNode\n folderType: CollectionSlug[] | undefined\n getFolderRoute: (toFolderID?: number | string) => string\n getSelectedItems?: () => FolderOrDocument[]\n isDragging: boolean\n itemKeysToMove?: Set<FolderDocumentItemKey>\n moveToFolder: (args: {\n itemsToMove: FolderOrDocument[]\n toFolderID?: number | string\n }) => Promise<void>\n onItemClick: (args: { event: React.MouseEvent; index: number; item: FolderOrDocument }) => void\n onItemKeyPress: (args: {\n event: React.KeyboardEvent\n index: number\n item: FolderOrDocument\n }) => void\n refineFolderData: (args: { query?: FolderQueryParams; updateURL: boolean }) => void\n search: string\n selectedFolderCollections?: CollectionSlug[]\n readonly selectedItemKeys: Set<FolderDocumentItemKey>\n setBreadcrumbs: React.Dispatch<React.SetStateAction<FolderBreadcrumb[]>>\n setFocusedRowIndex: React.Dispatch<React.SetStateAction<number>>\n setIsDragging: React.Dispatch<React.SetStateAction<boolean>>\n sort: FolderSortKeys\n subfolders?: FolderOrDocument[]\n}\n\nconst Context = React.createContext<FolderContextValue>({\n activeCollectionFolderSlugs: [],\n allCollectionFolderSlugs: [],\n allowCreateCollectionSlugs: [],\n breadcrumbs: [],\n checkIfItemIsDisabled: () => false,\n clearSelections: () => {},\n currentFolder: null,\n documents: [],\n dragOverlayItem: undefined,\n focusedRowIndex: -1,\n folderCollectionConfig: null,\n folderCollectionSlug: '',\n folderFieldName: 'folder',\n folderID: undefined,\n FolderResultsComponent: null,\n folderType: undefined,\n getFolderRoute: () => '',\n getSelectedItems: () => [],\n isDragging: false,\n itemKeysToMove: undefined,\n moveToFolder: () => Promise.resolve(undefined),\n onItemClick: () => undefined,\n onItemKeyPress: () => undefined,\n refineFolderData: () => undefined,\n search: '',\n selectedFolderCollections: undefined,\n selectedItemKeys: new Set<FolderDocumentItemKey>(),\n setBreadcrumbs: () => {},\n setFocusedRowIndex: () => -1,\n setIsDragging: () => false,\n sort: 'name',\n subfolders: [],\n})\n\nexport type FolderProviderProps = {\n /**\n * The collection slugs that are being viewed\n */\n readonly activeCollectionFolderSlugs?: CollectionSlug[]\n /**\n * Folder enabled collection slugs that can be populated within the provider\n */\n readonly allCollectionFolderSlugs: CollectionSlug[]\n /**\n * Array of slugs that can be created in the folder view\n */\n readonly allowCreateCollectionSlugs: CollectionSlug[]\n readonly allowMultiSelection?: boolean\n /**\n * The base folder route path\n *\n * @example\n * `/collections/:collectionSlug/:folderCollectionSlug`\n * or\n * `/browse-by-folder`\n */\n readonly baseFolderPath?: `/${string}`\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 * All documents in the current folder\n */\n readonly documents: FolderOrDocument[]\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 component to render the folder results\n */\n readonly FolderResultsComponent: React.ReactNode\n /**\n * Optional function to call when an item is clicked\n */\n readonly onItemClick?: (itme: FolderOrDocument) => void\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?: FolderSortKeys\n /**\n * All subfolders in the current folder\n */\n readonly subfolders: FolderOrDocument[]\n}\nexport function FolderProvider({\n activeCollectionFolderSlugs: activeCollectionSlugs,\n allCollectionFolderSlugs = [],\n allowCreateCollectionSlugs,\n allowMultiSelection = true,\n baseFolderPath,\n breadcrumbs: _breadcrumbsFromProps = [],\n children,\n documents,\n folderFieldName,\n folderID,\n FolderResultsComponent: InitialFolderResultsComponent,\n onItemClick: onItemClickFromProps,\n search,\n sort = 'name',\n subfolders,\n}: FolderProviderProps) {\n const parentFolderContext = useFolder()\n const { config } = 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 currentlySelectedIndexes = React.useRef(new Set<number>())\n\n const [selectedFolderCollections, setSelectedFolderCollections] = React.useState<\n CollectionSlug[]\n >([])\n const [FolderResultsComponent, setFolderResultsComponent] = React.useState(\n InitialFolderResultsComponent || (() => null),\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 rawSearchParams = useSearchParams()\n const searchParams = React.useMemo(() => parseSearchParams(rawSearchParams), [rawSearchParams])\n const [currentQuery, setCurrentQuery] = React.useState<FolderQueryParams>(searchParams)\n\n const [isDragging, setIsDragging] = React.useState(false)\n const [selectedItemKeys, setSelectedItemKeys] = React.useState<Set<FolderDocumentItemKey>>(\n () => new Set(),\n )\n const [focusedRowIndex, setFocusedRowIndex] = React.useState(-1)\n // This is used to determine what data to display on the drag overlay\n const [dragOverlayItem, setDragOverlayItem] = React.useState<FolderOrDocument | undefined>()\n const [breadcrumbs, setBreadcrumbs] =\n React.useState<FolderContextValue['breadcrumbs']>(_breadcrumbsFromProps)\n const lastClickTime = React.useRef<null | number>(null)\n const totalCount = subfolders.length + documents.length\n\n const clearSelections = React.useCallback(() => {\n setFocusedRowIndex(-1)\n setSelectedItemKeys(new Set())\n setDragOverlayItem(undefined)\n currentlySelectedIndexes.current = new Set()\n }, [])\n\n const mergeQuery = React.useCallback(\n (newQuery: Partial<FolderQueryParams> = {}): Partial<FolderQueryParams> => {\n let page = 'page' in newQuery ? newQuery.page : currentQuery?.page\n\n if ('search' in newQuery) {\n page = '1'\n }\n\n const mergedQuery = {\n ...currentQuery,\n ...newQuery,\n page,\n relationTo: 'relationTo' in newQuery ? newQuery.relationTo : currentQuery?.relationTo,\n search: 'search' in newQuery ? newQuery.search : currentQuery?.search,\n sort: 'sort' in newQuery ? newQuery.sort : (currentQuery?.sort ?? undefined),\n }\n\n return mergedQuery\n },\n [currentQuery],\n )\n\n const refineFolderData: FolderContextValue['refineFolderData'] = React.useCallback(\n ({ query, updateURL }) => {\n if (updateURL) {\n const newQuery = mergeQuery(query)\n\n startRouteTransition(() =>\n router.replace(\n `${qs.stringify({ ...newQuery, relationTo: JSON.stringify(newQuery.relationTo) }, { addQueryPrefix: true })}`,\n ),\n )\n\n setCurrentQuery(newQuery)\n }\n },\n [mergeQuery, router, startRouteTransition],\n )\n\n const getFolderRoute: FolderContextValue['getFolderRoute'] = React.useCallback(\n (toFolderID) => {\n const newQuery = mergeQuery({ page: '1', search: '' })\n return formatAdminURL({\n adminRoute: config.routes.admin,\n path: `${baseFolderPath}${toFolderID ? `/${toFolderID}` : ''}${qs.stringify(newQuery, { addQueryPrefix: true })}`,\n serverURL: config.serverURL,\n })\n },\n [baseFolderPath, config.routes.admin, config.serverURL, mergeQuery],\n )\n\n const getItem = React.useCallback(\n (itemKey: FolderDocumentItemKey) => {\n return [...subfolders, ...documents].find((doc) => doc.itemKey === itemKey)\n },\n [documents, subfolders],\n )\n\n const getSelectedItems = React.useCallback(() => {\n return Array.from(selectedItemKeys).reduce((acc, itemKey) => {\n const item = getItem(itemKey)\n if (item) {\n acc.push(item)\n }\n return acc\n }, [])\n }, [selectedItemKeys, getItem])\n\n const navigateAfterSelection = React.useCallback(\n ({ collectionSlug, docID }: { collectionSlug: string; docID?: number | string }) => {\n if (drawerDepth === 1) {\n // not in a drawer (default is 1)\n if (collectionSlug === folderCollectionSlug) {\n // clicked on folder, take the user to the folder view\n startRouteTransition(() => {\n router.push(getFolderRoute(docID))\n clearSelections()\n })\n } else if (collectionSlug) {\n // clicked on document, take the user to the documet view\n startRouteTransition(() => {\n router.push(\n formatAdminURL({\n adminRoute: config.routes.admin,\n path: `/collections/${collectionSlug}/${docID}`,\n }),\n )\n clearSelections()\n })\n }\n } else {\n clearSelections()\n }\n\n if (typeof onItemClickFromProps === 'function') {\n onItemClickFromProps(getItem(`${collectionSlug}-${docID}`))\n }\n },\n [\n clearSelections,\n config.routes.admin,\n drawerDepth,\n folderCollectionSlug,\n getFolderRoute,\n getItem,\n onItemClickFromProps,\n router,\n startRouteTransition,\n ],\n )\n\n const handleShiftSelection = React.useCallback(\n (targetIndex: number) => {\n const allItems = [...subfolders, ...documents]\n\n // Find existing selection boundaries\n const existingIndexes = allItems.reduce((acc, item, idx) => {\n if (selectedItemKeys.has(item.itemKey)) {\n acc.push(idx)\n }\n return acc\n }, [])\n\n if (existingIndexes.length === 0) {\n // No existing selection, just select target\n return [targetIndex]\n }\n\n const firstSelectedIndex = Math.min(...existingIndexes)\n const lastSelectedIndex = Math.max(...existingIndexes)\n const isWithinBounds = targetIndex >= firstSelectedIndex && targetIndex <= lastSelectedIndex\n\n // Choose anchor based on whether we're contracting or extending\n let anchorIndex = targetIndex\n if (isWithinBounds) {\n // Contracting: if target is at a boundary, use target as anchor\n // Otherwise, use furthest boundary to maintain opposite edge\n if (targetIndex === firstSelectedIndex || targetIndex === lastSelectedIndex) {\n anchorIndex = targetIndex\n } else {\n const distanceToFirst = Math.abs(targetIndex - firstSelectedIndex)\n const distanceToLast = Math.abs(targetIndex - lastSelectedIndex)\n anchorIndex = distanceToFirst >= distanceToLast ? firstSelectedIndex : lastSelectedIndex\n }\n } else {\n // Extending: use closest boundary\n const distanceToFirst = Math.abs(targetIndex - firstSelectedIndex)\n const distanceToLast = Math.abs(targetIndex - lastSelectedIndex)\n anchorIndex = distanceToFirst <= distanceToLast ? firstSelectedIndex : lastSelectedIndex\n }\n\n // Create range from anchor to target\n const startIndex = Math.min(anchorIndex, targetIndex)\n const endIndex = Math.max(anchorIndex, targetIndex)\n const newRangeIndexes = Array.from(\n { length: endIndex - startIndex + 1 },\n (_, i) => startIndex + i,\n )\n\n if (isWithinBounds) {\n // Contracting: replace with new range\n return newRangeIndexes\n } else {\n // Extending: union with existing\n return [...new Set([...existingIndexes, ...newRangeIndexes])]\n }\n },\n [subfolders, documents, selectedItemKeys],\n )\n\n const updateSelections = React.useCallback(\n ({ indexes }: { indexes: number[] }) => {\n const allItems = [...subfolders, ...documents]\n const { newSelectedFolderCollections, newSelectedItemKeys } = allItems.reduce(\n (acc, item, index) => {\n if (indexes.includes(index)) {\n acc.newSelectedItemKeys.add(item.itemKey)\n if (item.relationTo === folderCollectionSlug) {\n item.value.folderType?.forEach((collectionSlug) => {\n if (!acc.newSelectedFolderCollections.includes(collectionSlug)) {\n acc.newSelectedFolderCollections.push(collectionSlug)\n }\n })\n } else {\n if (!acc.newSelectedFolderCollections.includes(item.relationTo)) {\n acc.newSelectedFolderCollections.push(item.relationTo)\n }\n }\n }\n return acc\n },\n {\n newSelectedFolderCollections: [] satisfies CollectionSlug[],\n newSelectedItemKeys: new Set<FolderDocumentItemKey>(),\n },\n )\n\n setSelectedFolderCollections(newSelectedFolderCollections)\n setSelectedItemKeys(newSelectedItemKeys)\n },\n [documents, folderCollectionSlug, subfolders],\n )\n\n const onItemKeyPress: FolderContextValue['onItemKeyPress'] = React.useCallback(\n ({ event, item: currentItem }) => {\n const { code, ctrlKey, metaKey, shiftKey } = event\n const isShiftPressed = shiftKey\n const isCtrlPressed = ctrlKey || metaKey\n const isCurrentlySelected = selectedItemKeys.has(currentItem.itemKey)\n const allItems = [...subfolders, ...documents]\n const currentItemIndex = allItems.findIndex((item) => item.itemKey === currentItem.itemKey)\n\n switch (code) {\n case 'ArrowDown':\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'ArrowUp': {\n event.preventDefault()\n\n if (currentItemIndex === -1) {\n break\n }\n\n const isBackward = code === 'ArrowLeft' || code === 'ArrowUp'\n const newItemIndex = isBackward ? currentItemIndex - 1 : currentItemIndex + 1\n\n if (newItemIndex < 0 || newItemIndex > totalCount - 1) {\n // out of bounds, keep current selection\n return\n }\n\n setFocusedRowIndex(newItemIndex)\n\n if (isCtrlPressed) {\n break\n }\n\n if (isShiftPressed && allowMultiSelection) {\n const selectedIndexes = handleShiftSelection(newItemIndex)\n updateSelections({ indexes: selectedIndexes })\n return\n }\n\n // Single selection without shift\n if (!isShiftPressed) {\n const newItem = allItems[newItemIndex]\n setSelectedItemKeys(new Set([newItem.itemKey]))\n }\n\n break\n }\n case 'Enter': {\n if (selectedItemKeys.size === 1) {\n setFocusedRowIndex(undefined)\n navigateAfterSelection({\n collectionSlug: currentItem.relationTo,\n docID: extractID(currentItem.value),\n })\n return\n }\n break\n }\n case 'Escape': {\n clearSelections()\n break\n }\n case 'KeyA': {\n if (allowMultiSelection && isCtrlPressed) {\n event.preventDefault()\n setFocusedRowIndex(totalCount - 1)\n updateSelections({\n indexes: Array.from({ length: totalCount }, (_, i) => i),\n })\n }\n break\n }\n case 'Space': {\n if (allowMultiSelection && isShiftPressed) {\n event.preventDefault()\n const allItems = [...subfolders, ...documents]\n updateSelections({\n indexes: allItems.reduce((acc, item, idx) => {\n if (item.itemKey === currentItem.itemKey) {\n if (isCurrentlySelected) {\n return acc\n } else {\n acc.push(idx)\n }\n } else if (selectedItemKeys.has(item.itemKey)) {\n acc.push(idx)\n }\n return acc\n }, []),\n })\n } else {\n event.preventDefault()\n updateSelections({\n indexes: isCurrentlySelected ? [] : [currentItemIndex],\n })\n }\n break\n }\n case 'Tab': {\n if (allowMultiSelection && isShiftPressed) {\n const prevIndex = currentItemIndex - 1\n if (prevIndex < 0 && selectedItemKeys?.size > 0) {\n setFocusedRowIndex(prevIndex)\n }\n } else {\n const nextIndex = currentItemIndex + 1\n if (nextIndex === totalCount && selectedItemKeys.size > 0) {\n setFocusedRowIndex(totalCount - 1)\n }\n }\n break\n }\n }\n },\n [\n selectedItemKeys,\n subfolders,\n documents,\n allowMultiSelection,\n handleShiftSelection,\n updateSelections,\n navigateAfterSelection,\n clearSelections,\n totalCount,\n ],\n )\n\n const onItemClick: FolderContextValue['onItemClick'] = React.useCallback(\n ({ event, item: clickedItem }) => {\n let doubleClicked: boolean = false\n const isCtrlPressed = event.ctrlKey || event.metaKey\n const isShiftPressed = event.shiftKey\n const isCurrentlySelected = selectedItemKeys.has(clickedItem.itemKey)\n const allItems = [...subfolders, ...documents]\n const currentItemIndex = allItems.findIndex((item) => item.itemKey === clickedItem.itemKey)\n\n if (allowMultiSelection && isCtrlPressed) {\n event.preventDefault()\n let overlayItemKey: FolderDocumentItemKey | undefined\n const indexes = allItems.reduce((acc, item, idx) => {\n if (item.itemKey === clickedItem.itemKey) {\n if (isCurrentlySelected && event.type !== 'pointermove') {\n return acc\n } else {\n acc.push(idx)\n overlayItemKey = item.itemKey\n }\n } else if (selectedItemKeys.has(item.itemKey)) {\n acc.push(idx)\n }\n return acc\n }, [])\n\n updateSelections({ indexes })\n\n if (overlayItemKey) {\n setDragOverlayItem(getItem(overlayItemKey))\n }\n } else if (allowMultiSelection && isShiftPressed) {\n if (currentItemIndex !== -1) {\n const selectedIndexes = handleShiftSelection(currentItemIndex)\n updateSelections({ indexes: selectedIndexes })\n }\n } else if (allowMultiSelection && event.type === 'pointermove') {\n // on drag start of an unselected item\n if (!isCurrentlySelected) {\n updateSelections({\n indexes: allItems.reduce((acc, item, idx) => {\n if (item.itemKey === clickedItem.itemKey) {\n acc.push(idx)\n }\n return acc\n }, []),\n })\n }\n setDragOverlayItem(getItem(clickedItem.itemKey))\n } else {\n // Normal click - select single item\n const now = Date.now()\n doubleClicked =\n now - lastClickTime.current < 400 && dragOverlayItem?.itemKey === clickedItem.itemKey\n lastClickTime.current = now\n if (!doubleClicked) {\n updateSelections({\n indexes: isCurrentlySelected && selectedItemKeys.size === 1 ? [] : [currentItemIndex],\n })\n }\n setDragOverlayItem(getItem(clickedItem.itemKey))\n }\n\n if (doubleClicked) {\n navigateAfterSelection({\n collectionSlug: clickedItem.relationTo,\n docID: extractID(clickedItem.value),\n })\n }\n },\n [\n selectedItemKeys,\n subfolders,\n documents,\n allowMultiSelection,\n dragOverlayItem,\n getItem,\n updateSelections,\n navigateAfterSelection,\n handleShiftSelection,\n ],\n )\n\n /**\n * Makes requests to the server to update the folder field on passed in documents\n *\n * Might rewrite this in the future to return the promises so errors can be handled contextually\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 === folderID\n\n if (movingCurrentFolder) {\n const req = await fetch(\n `${serverURL}${routes.api}/${folderCollectionSlug}/${folderID}?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 }\n } else {\n for (const [collectionSlug, ids] of Object.entries(groupItemIDsByRelation(items))) {\n const query = qs.stringify(\n {\n depth: 0,\n limit: 0,\n where: {\n id: {\n in: ids,\n },\n },\n },\n {\n addQueryPrefix: true,\n },\n )\n try {\n 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 } 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\n clearSelections()\n },\n [folderID, clearSelections, folderCollectionSlug, folderFieldName, routes.api, serverURL, t],\n )\n\n const checkIfItemIsDisabled: FolderContextValue['checkIfItemIsDisabled'] = React.useCallback(\n (item) => {\n function folderAcceptsItem({\n item,\n selectedFolderCollections,\n }: {\n item: FolderOrDocument\n selectedFolderCollections: string[]\n }): boolean {\n if (\n !item.value.folderType ||\n (Array.isArray(item.value.folderType) && item.value.folderType.length === 0)\n ) {\n // Enable folder that accept all collections\n return false\n }\n\n if (selectedFolderCollections.length === 0) {\n // If no collections are selected, enable folders that accept all collections\n return Boolean(item.value.folderType || item.value.folderType.length > 0)\n }\n\n // Disable folders that do not accept all of the selected collections\n return selectedFolderCollections.some((slug) => {\n return !item.value.folderType.includes(slug)\n })\n }\n\n if (isDragging) {\n const isSelected = selectedItemKeys.has(item.itemKey)\n if (isSelected) {\n return true\n } else if (item.relationTo === folderCollectionSlug) {\n return folderAcceptsItem({ item, selectedFolderCollections })\n } else {\n // Non folder items are disabled on drag\n return true\n }\n } else if (parentFolderContext?.selectedItemKeys?.size) {\n // Disable selected items from being navigated to in move to drawer\n if (parentFolderContext.selectedItemKeys.has(item.itemKey)) {\n return true\n }\n // Moving items to folder\n if (item.relationTo === folderCollectionSlug) {\n return folderAcceptsItem({\n item,\n selectedFolderCollections: parentFolderContext.selectedFolderCollections,\n })\n }\n // If the item is not a folder, it is disabled on move\n return true\n }\n },\n [\n selectedFolderCollections,\n isDragging,\n selectedItemKeys,\n folderCollectionSlug,\n parentFolderContext?.selectedFolderCollections,\n parentFolderContext?.selectedItemKeys,\n ],\n )\n\n // If a new component is provided, update the state so children can re-render with the new component\n React.useEffect(() => {\n if (InitialFolderResultsComponent) {\n setFolderResultsComponent(InitialFolderResultsComponent)\n }\n }, [InitialFolderResultsComponent])\n\n return (\n <Context\n value={{\n activeCollectionFolderSlugs: activeCollectionSlugs || allCollectionFolderSlugs,\n allCollectionFolderSlugs,\n allowCreateCollectionSlugs,\n breadcrumbs,\n checkIfItemIsDisabled,\n clearSelections,\n currentFolder:\n breadcrumbs?.[breadcrumbs.length - 1]?.id !== undefined\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 dragOverlayItem,\n focusedRowIndex,\n folderCollectionConfig,\n folderCollectionSlug,\n folderFieldName,\n folderID,\n FolderResultsComponent,\n folderType: breadcrumbs?.[breadcrumbs.length - 1]?.folderType,\n getFolderRoute,\n getSelectedItems,\n isDragging,\n itemKeysToMove: parentFolderContext.selectedItemKeys,\n moveToFolder,\n onItemClick,\n onItemKeyPress,\n refineFolderData,\n search,\n selectedFolderCollections,\n selectedItemKeys,\n setBreadcrumbs,\n setFocusedRowIndex,\n setIsDragging,\n sort,\n subfolders,\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":[]}
|