@payloadcms/ui 3.69.0-internal.2883df2 → 3.69.0-internal.35bf893
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/AddNewRelation/index.js +1 -1
- package/dist/elements/AddNewRelation/index.js.map +1 -1
- package/dist/elements/AppHeader/index.d.ts.map +1 -1
- package/dist/elements/AppHeader/index.js +4 -2
- package/dist/elements/AppHeader/index.js.map +1 -1
- package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
- package/dist/elements/DeleteDocument/index.js +2 -1
- package/dist/elements/DeleteDocument/index.js.map +1 -1
- package/dist/elements/DocumentControls/index.d.ts.map +1 -1
- package/dist/elements/DocumentControls/index.js +4 -2
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
- package/dist/elements/DuplicateDocument/index.js +10 -5
- package/dist/elements/DuplicateDocument/index.js.map +1 -1
- package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/EditMany/DrawerContent.js +16 -4
- package/dist/elements/EditMany/DrawerContent.js.map +1 -1
- package/dist/elements/FolderView/BrowseByFolderButton/index.d.ts.map +1 -1
- package/dist/elements/FolderView/BrowseByFolderButton/index.js +4 -2
- package/dist/elements/FolderView/BrowseByFolderButton/index.js.map +1 -1
- package/dist/elements/IDLabel/index.d.ts.map +1 -1
- package/dist/elements/IDLabel/index.js +14 -11
- package/dist/elements/IDLabel/index.js.map +1 -1
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +6 -4
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/Logout/index.d.ts.map +1 -1
- package/dist/elements/Logout/index.js +11 -8
- package/dist/elements/Logout/index.js.map +1 -1
- package/dist/elements/PermanentlyDeleteButton/index.d.ts.map +1 -1
- package/dist/elements/PermanentlyDeleteButton/index.js +2 -1
- package/dist/elements/PermanentlyDeleteButton/index.js.map +1 -1
- package/dist/elements/Popup/PopupButtonList/index.scss +1 -0
- package/dist/elements/Popup/PopupTrigger/index.d.ts +1 -1
- package/dist/elements/Popup/PopupTrigger/index.d.ts.map +1 -1
- package/dist/elements/Popup/PopupTrigger/index.js +24 -92
- package/dist/elements/Popup/PopupTrigger/index.js.map +1 -1
- package/dist/elements/Popup/index.d.ts +32 -1
- package/dist/elements/Popup/index.d.ts.map +1 -1
- package/dist/elements/Popup/index.js +249 -122
- package/dist/elements/Popup/index.js.map +1 -1
- package/dist/elements/Popup/index.scss +49 -231
- package/dist/elements/PublishButton/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/index.js +3 -1
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/QueryPresets/QueryPresetBar/index.d.ts.map +1 -1
- package/dist/elements/QueryPresets/QueryPresetBar/index.js +15 -6
- package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
- package/dist/elements/RestoreButton/index.d.ts.map +1 -1
- package/dist/elements/RestoreButton/index.js +2 -1
- package/dist/elements/RestoreButton/index.js.map +1 -1
- package/dist/elements/StayLoggedIn/index.d.ts.map +1 -1
- package/dist/elements/StayLoggedIn/index.js +20 -17
- package/dist/elements/StayLoggedIn/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +12 -9
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/exports/client/index.js +24 -24
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/shared/index.js +1 -1
- package/dist/exports/shared/index.js.map +3 -3
- package/dist/fields/Relationship/Input.d.ts.map +1 -1
- package/dist/fields/Relationship/Input.js +3 -2
- package/dist/fields/Relationship/Input.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js +2 -2
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js.map +1 -1
- package/dist/graphics/Account/index.d.ts.map +1 -1
- package/dist/graphics/Account/index.js +4 -2
- package/dist/graphics/Account/index.js.map +1 -1
- package/dist/providers/Auth/index.d.ts.map +1 -1
- package/dist/providers/Auth/index.js +29 -8
- package/dist/providers/Auth/index.js.map +1 -1
- package/dist/providers/Folders/index.d.ts.map +1 -1
- package/dist/providers/Folders/index.js +3 -2
- package/dist/providers/Folders/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.js +2 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
- package/dist/scss/app.scss +2 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/buildFormState.js +2 -2
- package/dist/utilities/buildFormState.js.map +1 -1
- package/dist/utilities/handleBackToDashboard.d.ts +2 -1
- package/dist/utilities/handleBackToDashboard.d.ts.map +1 -1
- package/dist/utilities/handleBackToDashboard.js +4 -2
- package/dist/utilities/handleBackToDashboard.js.map +1 -1
- package/dist/utilities/handleGoBack.d.ts +2 -1
- package/dist/utilities/handleGoBack.d.ts.map +1 -1
- package/dist/utilities/handleGoBack.js +4 -2
- package/dist/utilities/handleGoBack.js.map +1 -1
- package/dist/views/CollectionFolder/index.js +5 -3
- package/dist/views/CollectionFolder/index.js.map +1 -1
- package/dist/views/Edit/SetDocumentStepNav/index.d.ts.map +1 -1
- package/dist/views/Edit/SetDocumentStepNav/index.js +23 -17
- package/dist/views/Edit/SetDocumentStepNav/index.js.map +1 -1
- package/dist/views/Edit/index.d.ts.map +1 -1
- package/dist/views/Edit/index.js +9 -5
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +5 -3
- package/dist/views/List/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -177,7 +177,8 @@ export function FolderProvider({
|
|
|
177
177
|
startRouteTransition(() => {
|
|
178
178
|
router.push(formatAdminURL({
|
|
179
179
|
adminRoute: config.routes.admin,
|
|
180
|
-
path: `/collections/${collectionSlug}/${docID}
|
|
180
|
+
path: `/collections/${collectionSlug}/${docID}`,
|
|
181
|
+
serverURL
|
|
181
182
|
}));
|
|
182
183
|
clearSelections();
|
|
183
184
|
});
|
|
@@ -188,7 +189,7 @@ export function FolderProvider({
|
|
|
188
189
|
if (typeof onItemClickFromProps === 'function') {
|
|
189
190
|
onItemClickFromProps(getItem(`${collectionSlug}-${docID}`));
|
|
190
191
|
}
|
|
191
|
-
}, [clearSelections, config.routes.admin, drawerDepth, folderCollectionSlug, getFolderRoute, getItem, onItemClickFromProps, router, startRouteTransition]);
|
|
192
|
+
}, [serverURL, clearSelections, config.routes.admin, drawerDepth, folderCollectionSlug, getFolderRoute, getItem, onItemClickFromProps, router, startRouteTransition]);
|
|
192
193
|
const handleShiftSelection = React.useCallback(targetIndex => {
|
|
193
194
|
const allItems = [...subfolders, ...documents];
|
|
194
195
|
// Find existing selection boundaries
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useRouter","useSearchParams","extractID","formatAdminURL","formatFolderOrDocumentItem","qs","React","toast","useDrawerDepth","parseSearchParams","useConfig","useLocale","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","locale","localeCode","code","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","queryParams","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","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","depth","req","fetch","api","body","credentials","headers","method","status","error","ids","Object","entries","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 { useLocale } from '../Locale/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 const locale = useLocale()\n const localeCode = locale ? locale.code : undefined\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 locale: localeCode,\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, localeCode],\n )\n\n const refineFolderData: FolderContextValue['refineFolderData'] = React.useCallback(\n ({ query, updateURL }) => {\n if (updateURL) {\n const queryParams = mergeQuery(query)\n\n startRouteTransition(() =>\n router.replace(\n `${qs.stringify({ ...queryParams, relationTo: JSON.stringify(queryParams.relationTo) }, { addQueryPrefix: true })}`,\n ),\n )\n\n setCurrentQuery(queryParams)\n }\n },\n [mergeQuery, router, startRouteTransition],\n )\n\n const getFolderRoute: FolderContextValue['getFolderRoute'] = React.useCallback(\n (toFolderID) => {\n const queryParams = qs.stringify(mergeQuery({ page: '1', search: '' }), {\n addQueryPrefix: true,\n })\n return formatAdminURL({\n adminRoute: config.routes.admin,\n path: `${baseFolderPath}${toFolderID ? `/${toFolderID}` : ''}${queryParams}`,\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 queryParams = qs.stringify(\n {\n depth: 0,\n locale: localeCode,\n },\n {\n addQueryPrefix: true,\n },\n )\n const req = await fetch(\n `${serverURL}${routes.api}/${folderCollectionSlug}/${folderID}${queryParams}`,\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 queryParams = qs.stringify(\n {\n depth: 0,\n limit: 0,\n locale: localeCode,\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}${queryParams}`, {\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 [\n folderID,\n clearSelections,\n folderCollectionSlug,\n folderFieldName,\n routes.api,\n serverURL,\n t,\n localeCode,\n ],\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":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useRouter","useSearchParams","extractID","formatAdminURL","formatFolderOrDocumentItem","qs","React","toast","useDrawerDepth","parseSearchParams","useConfig","useLocale","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","locale","localeCode","code","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","queryParams","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","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","depth","req","fetch","api","body","credentials","headers","method","status","error","ids","Object","entries","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 { useLocale } from '../Locale/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 const locale = useLocale()\n const localeCode = locale ? locale.code : undefined\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 locale: localeCode,\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, localeCode],\n )\n\n const refineFolderData: FolderContextValue['refineFolderData'] = React.useCallback(\n ({ query, updateURL }) => {\n if (updateURL) {\n const queryParams = mergeQuery(query)\n\n startRouteTransition(() =>\n router.replace(\n `${qs.stringify({ ...queryParams, relationTo: JSON.stringify(queryParams.relationTo) }, { addQueryPrefix: true })}`,\n ),\n )\n\n setCurrentQuery(queryParams)\n }\n },\n [mergeQuery, router, startRouteTransition],\n )\n\n const getFolderRoute: FolderContextValue['getFolderRoute'] = React.useCallback(\n (toFolderID) => {\n const queryParams = qs.stringify(mergeQuery({ page: '1', search: '' }), {\n addQueryPrefix: true,\n })\n return formatAdminURL({\n adminRoute: config.routes.admin,\n path: `${baseFolderPath}${toFolderID ? `/${toFolderID}` : ''}${queryParams}`,\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 serverURL,\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 serverURL,\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 queryParams = qs.stringify(\n {\n depth: 0,\n locale: localeCode,\n },\n {\n addQueryPrefix: true,\n },\n )\n const req = await fetch(\n `${serverURL}${routes.api}/${folderCollectionSlug}/${folderID}${queryParams}`,\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 queryParams = qs.stringify(\n {\n depth: 0,\n limit: 0,\n locale: localeCode,\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}${queryParams}`, {\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 [\n folderID,\n clearSelections,\n folderCollectionSlug,\n folderFieldName,\n routes.api,\n serverURL,\n t,\n localeCode,\n ],\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":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderCell.d.ts","sourceRoot":"","sources":["../../../../src/providers/TableColumns/buildColumnState/renderCell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EAEzB,QAAQ,EACR,KAAK,EACL,OAAO,EACP,cAAc,EACd,SAAS,EACV,MAAM,SAAS,CAAA;AAehB,KAAK,cAAc,GAAG;IACpB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,EAAE,yBAAyB,CAAC,iBAAiB,CAAC,CAAA;IACtE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAA;IACtB,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,cAAc,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAC9B,CAAA;AACD,wBAAgB,UAAU,CAAC,EACzB,WAAW,EACX,cAAc,EACd,WAAW,EACX,eAAe,EACf,GAAG,EACH,mBAAmB,EACnB,IAAI,EACJ,cAAc,EACd,OAAO,EACP,GAAG,EACH,QAAQ,EACR,WAAW,EACX,QAAQ,GACT,EAAE,cAAc,+
|
|
1
|
+
{"version":3,"file":"renderCell.d.ts","sourceRoot":"","sources":["../../../../src/providers/TableColumns/buildColumnState/renderCell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EAEzB,QAAQ,EACR,KAAK,EACL,OAAO,EACP,cAAc,EACd,SAAS,EACV,MAAM,SAAS,CAAA;AAehB,KAAK,cAAc,GAAG;IACpB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,EAAE,yBAAyB,CAAC,iBAAiB,CAAC,CAAA;IACtE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAA;IACtB,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,cAAc,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAC9B,CAAA;AACD,wBAAgB,UAAU,CAAC,EACzB,WAAW,EACX,cAAc,EACd,WAAW,EACX,eAAe,EACf,GAAG,EACH,mBAAmB,EACnB,IAAI,EACJ,cAAc,EACd,OAAO,EACP,GAAG,EACH,QAAQ,EACR,WAAW,EACX,QAAQ,GACT,EAAE,cAAc,+BAsLhB"}
|
|
@@ -41,7 +41,8 @@ export function renderCell({
|
|
|
41
41
|
const adminRoute = req.payload.config.routes?.admin || '/admin';
|
|
42
42
|
const defaultURL = formatAdminURL({
|
|
43
43
|
adminRoute,
|
|
44
|
-
path: `/collections/${collectionSlug}${viewType === 'trash' ? '/trash' : ''}/${encodeURIComponent(String(doc.id))}
|
|
44
|
+
path: `/collections/${collectionSlug}${viewType === 'trash' ? '/trash' : ''}/${encodeURIComponent(String(doc.id))}`,
|
|
45
|
+
serverURL: req.payload.config.serverURL
|
|
45
46
|
});
|
|
46
47
|
const customURL = formatDocURL({
|
|
47
48
|
collectionSlug,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderCell.js","names":["MissingEditorProp","formatAdminURL","RenderCustomComponent","RenderServerComponent","DefaultCell","RenderDefaultCell","hasOptionLabelJSXElement","findValueFromPath","renderCell","clientField","collectionSlug","columnIndex","customCellProps","doc","enableRowSelections","i18n","isLinkedColumn","payload","req","rowIndex","serverField","viewType","baseCellClientProps","cellData","undefined","field","rowData","accessor","name","shouldLink","customLinkURL","collectionConfig","collections","config","formatDocURL","admin","adminRoute","routes","defaultURL","path","encodeURIComponent","String","id","customURL","_displayStatus","enrichedClientField","type","hasChangedOption","options","some","opt","value","label","t","cellClientProps","link","linkURL","cellServerProps","className","onClick","CustomCell","editor","Error","components","clientProps","Component","CellComponent","importMap","serverProps","CustomCellComponent","Cell","_jsx","CustomComponent","Fallback"],"sources":["../../../../src/providers/TableColumns/buildColumnState/renderCell.tsx"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type {\n ClientField,\n DefaultCellComponentProps,\n DefaultServerCellComponentProps,\n Document,\n Field,\n Payload,\n PayloadRequest,\n ViewTypes,\n} from 'payload'\n\nimport { MissingEditorProp } from 'payload'\nimport { formatAdminURL } from 'payload/shared'\n\nimport { RenderCustomComponent } from '../../../elements/RenderCustomComponent/index.js'\nimport { RenderServerComponent } from '../../../elements/RenderServerComponent/index.js'\nimport {\n DefaultCell,\n RenderDefaultCell,\n // eslint-disable-next-line payload/no-imports-from-exports-dir -- MUST reference the exports dir: https://github.com/payloadcms/payload/issues/12002#issuecomment-2791493587\n} from '../../../exports/client/index.js'\nimport { hasOptionLabelJSXElement } from '../../../utilities/hasOptionLabelJSXElement.js'\nimport { findValueFromPath } from './findValueFromPath.js'\n\ntype RenderCellArgs = {\n readonly clientField: ClientField\n readonly collectionSlug: string\n readonly columnIndex: number\n readonly customCellProps: DefaultCellComponentProps['customCellProps']\n readonly doc: Document\n readonly enableRowSelections: boolean\n readonly i18n: I18nClient\n readonly isLinkedColumn: boolean\n readonly payload: Payload\n readonly req?: PayloadRequest\n readonly rowIndex: number\n readonly serverField: Field\n readonly viewType?: ViewTypes\n}\nexport function renderCell({\n clientField,\n collectionSlug,\n columnIndex,\n customCellProps,\n doc,\n enableRowSelections,\n i18n,\n isLinkedColumn,\n payload,\n req,\n rowIndex,\n serverField,\n viewType,\n}: RenderCellArgs) {\n const baseCellClientProps: DefaultCellComponentProps = {\n cellData: undefined,\n collectionSlug,\n customCellProps,\n field: clientField,\n rowData: undefined,\n viewType,\n }\n\n const accessor: string | undefined =\n ('accessor' in clientField ? (clientField.accessor as string) : undefined) ??\n ('name' in clientField ? clientField.name : undefined)\n\n // Check if there's a custom formatDocURL function for this linked column\n let shouldLink = isLinkedColumn\n let customLinkURL: string | undefined\n\n if (isLinkedColumn && req) {\n const collectionConfig = payload.collections[collectionSlug]?.config\n const formatDocURL = collectionConfig?.admin?.formatDocURL\n\n if (typeof formatDocURL === 'function') {\n // Generate the default URL that would normally be used\n const adminRoute = req.payload.config.routes?.admin || '/admin'\n const defaultURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}${viewType === 'trash' ? '/trash' : ''}/${encodeURIComponent(String(doc.id))}`,\n })\n\n const customURL = formatDocURL({\n collectionSlug,\n defaultURL,\n doc,\n req,\n viewType,\n })\n\n if (customURL === null) {\n // formatDocURL returned null = disable linking entirely\n shouldLink = false\n } else if (typeof customURL === 'string') {\n // formatDocURL returned a string = use custom URL\n shouldLink = true\n customLinkURL = customURL\n } else {\n // formatDocURL returned unexpected type = disable linking for safety\n shouldLink = false\n }\n }\n }\n\n // For _status field, use _displayStatus if available (for showing \"changed\" status in list view)\n const cellData =\n 'name' in clientField && accessor === '_status' && '_displayStatus' in doc\n ? doc._displayStatus\n : 'name' in clientField\n ? findValueFromPath(doc, accessor)\n : undefined\n\n // For _status field, add 'changed' option for display purposes\n // The 'changed' status is computed at runtime\n let enrichedClientField = clientField\n if ('name' in clientField && accessor === '_status' && clientField.type === 'select') {\n const hasChangedOption = clientField.options?.some(\n (opt) => (typeof opt === 'object' ? opt.value : opt) === 'changed',\n )\n if (!hasChangedOption) {\n enrichedClientField = {\n ...clientField,\n options: [\n ...(clientField.options || []),\n {\n label: i18n.t('version:draftHasPublishedVersion'),\n value: 'changed',\n },\n ],\n }\n }\n }\n\n const cellClientProps: DefaultCellComponentProps = {\n ...baseCellClientProps,\n cellData,\n field: enrichedClientField,\n link: shouldLink,\n linkURL: customLinkURL,\n rowData: doc,\n }\n\n const cellServerProps: DefaultServerCellComponentProps = {\n cellData: cellClientProps.cellData,\n className: baseCellClientProps.className,\n collectionConfig: payload.collections[collectionSlug].config,\n collectionSlug,\n columnIndex,\n customCellProps: baseCellClientProps.customCellProps,\n field: serverField,\n i18n,\n link: shouldLink,\n linkURL: customLinkURL,\n onClick: baseCellClientProps.onClick,\n payload,\n rowData: doc,\n }\n\n let CustomCell = null\n\n if (serverField?.type === 'richText') {\n if (!serverField?.editor) {\n throw new MissingEditorProp(serverField) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof serverField?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n if (!serverField.admin) {\n serverField.admin = {}\n }\n\n if (!serverField.admin.components) {\n serverField.admin.components = {}\n }\n\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: serverField.editor.CellComponent,\n importMap: payload.importMap,\n serverProps: cellServerProps,\n })\n } else {\n const CustomCellComponent = serverField?.admin?.components?.Cell\n\n if (CustomCellComponent) {\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: CustomCellComponent,\n importMap: payload.importMap,\n serverProps: cellServerProps,\n })\n } else if (\n cellClientProps.cellData &&\n cellClientProps.field &&\n hasOptionLabelJSXElement(cellClientProps)\n ) {\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: DefaultCell,\n importMap: payload.importMap,\n })\n } else {\n const CustomCellComponent = serverField?.admin?.components?.Cell\n\n if (CustomCellComponent) {\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: CustomCellComponent,\n importMap: payload.importMap,\n serverProps: cellServerProps,\n })\n } else {\n CustomCell = undefined\n }\n }\n }\n\n return (\n <RenderCustomComponent\n CustomComponent={CustomCell}\n Fallback={\n <RenderDefaultCell\n clientProps={cellClientProps}\n columnIndex={columnIndex}\n enableRowSelections={enableRowSelections}\n isLinkedColumn={isLinkedColumn}\n />\n }\n key={`${rowIndex}-${columnIndex}`}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"renderCell.js","names":["MissingEditorProp","formatAdminURL","RenderCustomComponent","RenderServerComponent","DefaultCell","RenderDefaultCell","hasOptionLabelJSXElement","findValueFromPath","renderCell","clientField","collectionSlug","columnIndex","customCellProps","doc","enableRowSelections","i18n","isLinkedColumn","payload","req","rowIndex","serverField","viewType","baseCellClientProps","cellData","undefined","field","rowData","accessor","name","shouldLink","customLinkURL","collectionConfig","collections","config","formatDocURL","admin","adminRoute","routes","defaultURL","path","encodeURIComponent","String","id","serverURL","customURL","_displayStatus","enrichedClientField","type","hasChangedOption","options","some","opt","value","label","t","cellClientProps","link","linkURL","cellServerProps","className","onClick","CustomCell","editor","Error","components","clientProps","Component","CellComponent","importMap","serverProps","CustomCellComponent","Cell","_jsx","CustomComponent","Fallback"],"sources":["../../../../src/providers/TableColumns/buildColumnState/renderCell.tsx"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type {\n ClientField,\n DefaultCellComponentProps,\n DefaultServerCellComponentProps,\n Document,\n Field,\n Payload,\n PayloadRequest,\n ViewTypes,\n} from 'payload'\n\nimport { MissingEditorProp } from 'payload'\nimport { formatAdminURL } from 'payload/shared'\n\nimport { RenderCustomComponent } from '../../../elements/RenderCustomComponent/index.js'\nimport { RenderServerComponent } from '../../../elements/RenderServerComponent/index.js'\nimport {\n DefaultCell,\n RenderDefaultCell,\n // eslint-disable-next-line payload/no-imports-from-exports-dir -- MUST reference the exports dir: https://github.com/payloadcms/payload/issues/12002#issuecomment-2791493587\n} from '../../../exports/client/index.js'\nimport { hasOptionLabelJSXElement } from '../../../utilities/hasOptionLabelJSXElement.js'\nimport { findValueFromPath } from './findValueFromPath.js'\n\ntype RenderCellArgs = {\n readonly clientField: ClientField\n readonly collectionSlug: string\n readonly columnIndex: number\n readonly customCellProps: DefaultCellComponentProps['customCellProps']\n readonly doc: Document\n readonly enableRowSelections: boolean\n readonly i18n: I18nClient\n readonly isLinkedColumn: boolean\n readonly payload: Payload\n readonly req?: PayloadRequest\n readonly rowIndex: number\n readonly serverField: Field\n readonly viewType?: ViewTypes\n}\nexport function renderCell({\n clientField,\n collectionSlug,\n columnIndex,\n customCellProps,\n doc,\n enableRowSelections,\n i18n,\n isLinkedColumn,\n payload,\n req,\n rowIndex,\n serverField,\n viewType,\n}: RenderCellArgs) {\n const baseCellClientProps: DefaultCellComponentProps = {\n cellData: undefined,\n collectionSlug,\n customCellProps,\n field: clientField,\n rowData: undefined,\n viewType,\n }\n\n const accessor: string | undefined =\n ('accessor' in clientField ? (clientField.accessor as string) : undefined) ??\n ('name' in clientField ? clientField.name : undefined)\n\n // Check if there's a custom formatDocURL function for this linked column\n let shouldLink = isLinkedColumn\n let customLinkURL: string | undefined\n\n if (isLinkedColumn && req) {\n const collectionConfig = payload.collections[collectionSlug]?.config\n const formatDocURL = collectionConfig?.admin?.formatDocURL\n\n if (typeof formatDocURL === 'function') {\n // Generate the default URL that would normally be used\n const adminRoute = req.payload.config.routes?.admin || '/admin'\n const defaultURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}${viewType === 'trash' ? '/trash' : ''}/${encodeURIComponent(String(doc.id))}`,\n serverURL: req.payload.config.serverURL,\n })\n\n const customURL = formatDocURL({\n collectionSlug,\n defaultURL,\n doc,\n req,\n viewType,\n })\n\n if (customURL === null) {\n // formatDocURL returned null = disable linking entirely\n shouldLink = false\n } else if (typeof customURL === 'string') {\n // formatDocURL returned a string = use custom URL\n shouldLink = true\n customLinkURL = customURL\n } else {\n // formatDocURL returned unexpected type = disable linking for safety\n shouldLink = false\n }\n }\n }\n\n // For _status field, use _displayStatus if available (for showing \"changed\" status in list view)\n const cellData =\n 'name' in clientField && accessor === '_status' && '_displayStatus' in doc\n ? doc._displayStatus\n : 'name' in clientField\n ? findValueFromPath(doc, accessor)\n : undefined\n\n // For _status field, add 'changed' option for display purposes\n // The 'changed' status is computed at runtime\n let enrichedClientField = clientField\n if ('name' in clientField && accessor === '_status' && clientField.type === 'select') {\n const hasChangedOption = clientField.options?.some(\n (opt) => (typeof opt === 'object' ? opt.value : opt) === 'changed',\n )\n if (!hasChangedOption) {\n enrichedClientField = {\n ...clientField,\n options: [\n ...(clientField.options || []),\n {\n label: i18n.t('version:draftHasPublishedVersion'),\n value: 'changed',\n },\n ],\n }\n }\n }\n\n const cellClientProps: DefaultCellComponentProps = {\n ...baseCellClientProps,\n cellData,\n field: enrichedClientField,\n link: shouldLink,\n linkURL: customLinkURL,\n rowData: doc,\n }\n\n const cellServerProps: DefaultServerCellComponentProps = {\n cellData: cellClientProps.cellData,\n className: baseCellClientProps.className,\n collectionConfig: payload.collections[collectionSlug].config,\n collectionSlug,\n columnIndex,\n customCellProps: baseCellClientProps.customCellProps,\n field: serverField,\n i18n,\n link: shouldLink,\n linkURL: customLinkURL,\n onClick: baseCellClientProps.onClick,\n payload,\n rowData: doc,\n }\n\n let CustomCell = null\n\n if (serverField?.type === 'richText') {\n if (!serverField?.editor) {\n throw new MissingEditorProp(serverField) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof serverField?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n if (!serverField.admin) {\n serverField.admin = {}\n }\n\n if (!serverField.admin.components) {\n serverField.admin.components = {}\n }\n\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: serverField.editor.CellComponent,\n importMap: payload.importMap,\n serverProps: cellServerProps,\n })\n } else {\n const CustomCellComponent = serverField?.admin?.components?.Cell\n\n if (CustomCellComponent) {\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: CustomCellComponent,\n importMap: payload.importMap,\n serverProps: cellServerProps,\n })\n } else if (\n cellClientProps.cellData &&\n cellClientProps.field &&\n hasOptionLabelJSXElement(cellClientProps)\n ) {\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: DefaultCell,\n importMap: payload.importMap,\n })\n } else {\n const CustomCellComponent = serverField?.admin?.components?.Cell\n\n if (CustomCellComponent) {\n CustomCell = RenderServerComponent({\n clientProps: cellClientProps,\n Component: CustomCellComponent,\n importMap: payload.importMap,\n serverProps: cellServerProps,\n })\n } else {\n CustomCell = undefined\n }\n }\n }\n\n return (\n <RenderCustomComponent\n CustomComponent={CustomCell}\n Fallback={\n <RenderDefaultCell\n clientProps={cellClientProps}\n columnIndex={columnIndex}\n enableRowSelections={enableRowSelections}\n isLinkedColumn={isLinkedColumn}\n />\n }\n key={`${rowIndex}-${columnIndex}`}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/scss/app.scss
CHANGED
|
@@ -31,7 +31,8 @@
|
|
|
31
31
|
--style-radius-m: #{$style-radius-m};
|
|
32
32
|
--style-radius-l: #{$style-radius-l};
|
|
33
33
|
|
|
34
|
-
--z-popup
|
|
34
|
+
// --z-popup needs to be higher than --z-modal to ensure the popup is displayed when modal is open
|
|
35
|
+
--z-popup: 60;
|
|
35
36
|
--z-nav: 20;
|
|
36
37
|
--z-modal: 30;
|
|
37
38
|
--z-status: 40;
|