@payloadcms/ui 3.40.0-internal.e3ed6ab → 3.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/elements/Button/index.scss +2 -2
  2. package/dist/elements/ColumnSelector/index.d.ts.map +1 -1
  3. package/dist/elements/ColumnSelector/index.js +1 -0
  4. package/dist/elements/ColumnSelector/index.js.map +1 -1
  5. package/dist/elements/FolderView/CurrentFolderActions/index.js +1 -1
  6. package/dist/elements/FolderView/CurrentFolderActions/index.js.map +1 -1
  7. package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts.map +1 -1
  8. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js +274 -143
  9. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js.map +1 -1
  10. package/dist/elements/FolderView/Drawers/NewFolder/index.js +1 -1
  11. package/dist/elements/FolderView/Drawers/NewFolder/index.js.map +1 -1
  12. package/dist/elements/FolderView/Drawers/RenameFolder/index.js +1 -1
  13. package/dist/elements/FolderView/Drawers/RenameFolder/index.js.map +1 -1
  14. package/dist/elements/FolderView/FolderFileCard/index.scss +24 -2
  15. package/dist/elements/PublishButton/ScheduleDrawer/index.js +1 -1
  16. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  17. package/dist/elements/Table/index.scss +9 -9
  18. package/dist/elements/WhereBuilder/field-types.d.ts +4 -0
  19. package/dist/elements/WhereBuilder/field-types.d.ts.map +1 -1
  20. package/dist/elements/WhereBuilder/field-types.js +5 -4
  21. package/dist/elements/WhereBuilder/field-types.js.map +1 -1
  22. package/dist/elements/WhereBuilder/reduceFields.d.ts.map +1 -1
  23. package/dist/elements/WhereBuilder/reduceFields.js +3 -2
  24. package/dist/elements/WhereBuilder/reduceFields.js.map +1 -1
  25. package/dist/exports/client/index.d.ts +1 -0
  26. package/dist/exports/client/index.d.ts.map +1 -1
  27. package/dist/exports/client/index.js +10 -10
  28. package/dist/exports/client/index.js.map +3 -3
  29. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  30. package/dist/fields/Blocks/BlockRow.js +1 -0
  31. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  32. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  33. package/dist/fields/Relationship/Input.js +7 -3
  34. package/dist/fields/Relationship/Input.js.map +1 -1
  35. package/dist/fields/Textarea/Input.d.ts.map +1 -1
  36. package/dist/fields/Textarea/Input.js +15 -10
  37. package/dist/fields/Textarea/Input.js.map +1 -1
  38. package/dist/fields/Textarea/index.scss +6 -3
  39. package/dist/fields/Upload/Input.js +1 -1
  40. package/dist/fields/Upload/Input.js.map +1 -1
  41. package/dist/providers/Folders/index.d.ts.map +1 -1
  42. package/dist/providers/Folders/index.js +31 -13
  43. package/dist/providers/Folders/index.js.map +1 -1
  44. package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
  45. package/dist/providers/TableColumns/buildColumnState/index.js +5 -0
  46. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  47. package/dist/styles.css +1 -1
  48. package/dist/views/BrowseByFolder/index.d.ts.map +1 -1
  49. package/dist/views/BrowseByFolder/index.js +8 -17
  50. package/dist/views/BrowseByFolder/index.js.map +1 -1
  51. package/dist/views/CollectionFolder/index.d.ts.map +1 -1
  52. package/dist/views/CollectionFolder/index.js +8 -17
  53. package/dist/views/CollectionFolder/index.js.map +1 -1
  54. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"Input.js","names":["useModal","qs","React","useCallback","useEffect","useMemo","useBulkUpload","Button","useDocumentDrawer","Dropzone","useListDrawer","RenderCustomComponent","ShimmerEffect","FieldDescription","FieldError","FieldLabel","useAuth","useLocale","useTranslation","fieldBaseClass","UploadComponentHasMany","UploadComponentHasOne","baseClass","UploadInput","props","AfterInput","allowCreate","api","BeforeInput","className","Description","description","displayPreview","Error","filterOptions","filterOptionsFromProps","hasMany","isSortable","Label","label","localized","maxRows","onChange","onChangeFromProps","path","readOnly","relationTo","required","serverURL","showError","style","value","populatedDocs","setPopulatedDocs","useState","activeRelationTo","setActiveRelationTo","Array","isArray","openModal","drawerSlug","setCollectionSlug","setCurrentActivePath","setInitialFiles","setMaxFiles","setOnSuccess","permissions","code","i18n","t","id","not_in","concat","ListDrawer","closeDrawer","closeListDrawer","openDrawer","openListDrawer","collectionSlugs","CreateDocDrawer","closeCreateDocDrawer","openCreateDocDrawer","collectionSlug","loadedValueDocsRef","useRef","canCreate","collections","create","newValue","populateDocs","ids","relatedCollectionSlug","length","query","depth","draft","limit","locale","where","and","in","response","fetch","body","stringify","credentials","headers","language","method","ok","json","sortedDocs","map","docs","find","doc","String","includes","undefined","index","filename","isPlaceholder","onUploadSuccess","newDocs","mergedValue","currentDocs","firstDoc","onLocalFileSelection","fileList","fileListToUse","dataTransfer","DataTransfer","items","add","files","onListBulkSelect","selectedDocIDs","isSelected","push","loadedDocs","onDocCreate","data","onListSelect","selectedDoc","reloadDoc","docID","updatedDocsToPropogate","existingDocIndex","findIndex","hasExisting","updatedDocs","onReorder","newValueIDs","onRemove","loadInitialDocs","current","showDropzone","_jsxs","filter","Boolean","join","replace","_jsx","CustomComponent","Fallback","_Fragment","fileDocs","readonly","height","fileDoc","disabled","multipleFiles","buttonStyle","onClick","size","onSave","enableRowSelections","onBulkSelect","onSelect"],"sources":["../../../src/fields/Upload/Input.tsx"],"sourcesContent":["'use client'\n\nimport type {\n ClientCollectionConfig,\n FieldLabelClientProps,\n FilterOptionsResult,\n JsonObject,\n StaticDescription,\n StaticLabel,\n UploadFieldClient,\n UploadField as UploadFieldType,\n Where,\n} from 'payload'\nimport type { MarkOptional } from 'ts-essentials'\n\nimport { useModal } from '@faceless-ui/modal'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo } from 'react'\n\nimport type { ListDrawerProps } from '../../elements/ListDrawer/types.js'\nimport type { PopulateDocs, ReloadDoc } from './types.js'\n\nimport { useBulkUpload } from '../../elements/BulkUpload/index.js'\nimport { Button } from '../../elements/Button/index.js'\nimport { useDocumentDrawer } from '../../elements/DocumentDrawer/index.js'\nimport { Dropzone } from '../../elements/Dropzone/index.js'\nimport { useListDrawer } from '../../elements/ListDrawer/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { ShimmerEffect } from '../../elements/ShimmerEffect/index.js'\nimport { FieldDescription } from '../../fields/FieldDescription/index.js'\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { UploadComponentHasMany } from './HasMany/index.js'\nimport { UploadComponentHasOne } from './HasOne/index.js'\nimport './index.scss'\n\nexport const baseClass = 'upload'\n\ntype PopulatedDocs = { relationTo: string; value: JsonObject }[]\n\nexport type UploadInputProps = {\n readonly AfterInput?: React.ReactNode\n readonly allowCreate?: boolean\n /**\n * Controls the visibility of the \"Create new collection\" button\n */\n readonly api?: string\n readonly BeforeInput?: React.ReactNode\n readonly className?: string\n readonly collection?: ClientCollectionConfig\n readonly customUploadActions?: React.ReactNode[]\n readonly Description?: React.ReactNode\n readonly description?: StaticDescription\n readonly displayPreview?: boolean\n readonly Error?: React.ReactNode\n readonly filterOptions?: FilterOptionsResult\n readonly hasMany?: boolean\n readonly hideRemoveFile?: boolean\n readonly isSortable?: boolean\n readonly Label?: React.ReactNode\n readonly label?: StaticLabel\n readonly labelProps?: FieldLabelClientProps<MarkOptional<UploadFieldClient, 'type'>>\n readonly localized?: boolean\n readonly maxRows?: number\n readonly onChange?: (e) => void\n readonly path: string\n readonly readOnly?: boolean\n readonly relationTo: UploadFieldType['relationTo']\n readonly required?: boolean\n readonly serverURL?: string\n readonly showError?: boolean\n readonly style?: React.CSSProperties\n readonly value?: (number | string)[] | (number | string)\n}\n\nexport function UploadInput(props: UploadInputProps) {\n const {\n AfterInput,\n allowCreate,\n api,\n BeforeInput,\n className,\n Description,\n description,\n displayPreview,\n Error,\n filterOptions: filterOptionsFromProps,\n hasMany,\n isSortable,\n Label,\n label,\n localized,\n maxRows,\n onChange: onChangeFromProps,\n path,\n readOnly,\n relationTo,\n required,\n serverURL,\n showError,\n style,\n value,\n } = props\n\n const [populatedDocs, setPopulatedDocs] = React.useState<\n {\n relationTo: string\n value: JsonObject\n }[]\n >()\n\n const [activeRelationTo, setActiveRelationTo] = React.useState<string>(\n Array.isArray(relationTo) ? relationTo[0] : relationTo,\n )\n\n const { openModal } = useModal()\n const {\n drawerSlug,\n setCollectionSlug,\n setCurrentActivePath,\n setInitialFiles,\n setMaxFiles,\n setOnSuccess,\n } = useBulkUpload()\n const { permissions } = useAuth()\n const { code } = useLocale()\n const { i18n, t } = useTranslation()\n\n const filterOptions: FilterOptionsResult = useMemo(() => {\n return {\n ...filterOptionsFromProps,\n [activeRelationTo]: {\n ...((filterOptionsFromProps?.[activeRelationTo] as any) || {}),\n id: {\n ...((filterOptionsFromProps?.[activeRelationTo] as any)?.id || {}),\n not_in: ((filterOptionsFromProps?.[activeRelationTo] as any)?.id?.not_in || []).concat(\n ...(Array.isArray(value) || value ? [value] : []),\n ),\n },\n },\n }\n }, [value, activeRelationTo, filterOptionsFromProps])\n\n const [ListDrawer, , { closeDrawer: closeListDrawer, openDrawer: openListDrawer }] =\n useListDrawer({\n collectionSlugs: typeof relationTo === 'string' ? [relationTo] : relationTo,\n filterOptions,\n })\n\n const [\n CreateDocDrawer,\n ,\n { closeDrawer: closeCreateDocDrawer, openDrawer: openCreateDocDrawer },\n ] = useDocumentDrawer({\n collectionSlug: activeRelationTo,\n })\n\n /**\n * Prevent initial retrieval of documents from running more than once\n */\n const loadedValueDocsRef = React.useRef<boolean>(false)\n\n const canCreate = useMemo(() => {\n if (!allowCreate) {\n return false\n }\n\n if (typeof activeRelationTo === 'string') {\n if (permissions?.collections && permissions.collections?.[activeRelationTo]?.create) {\n return true\n }\n }\n\n return false\n }, [activeRelationTo, permissions, allowCreate])\n\n const onChange = React.useCallback(\n (newValue) => {\n if (typeof onChangeFromProps === 'function') {\n onChangeFromProps(newValue)\n }\n },\n [onChangeFromProps],\n )\n\n const populateDocs = React.useCallback<PopulateDocs>(\n async (ids, relatedCollectionSlug) => {\n if (!ids.length) {\n return\n }\n\n const query: {\n [key: string]: unknown\n where: Where\n } = {\n depth: 0,\n draft: true,\n limit: ids.length,\n locale: code,\n where: {\n and: [\n {\n id: {\n in: ids,\n },\n },\n ],\n },\n }\n\n const response = await fetch(`${serverURL}${api}/${relatedCollectionSlug}`, {\n body: qs.stringify(query),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n method: 'POST',\n })\n if (response.ok) {\n const json = await response.json()\n let sortedDocs = ids.map((id) =>\n json.docs.find((doc) => {\n return String(doc.id) === String(id)\n }),\n )\n\n if (sortedDocs.includes(undefined) && hasMany) {\n sortedDocs = sortedDocs.map((doc, index) =>\n doc\n ? doc\n : {\n id: ids[index],\n filename: `${t('general:untitled')} - ID: ${ids[index]}`,\n isPlaceholder: true,\n },\n )\n }\n\n return { ...json, docs: sortedDocs }\n }\n\n return null\n },\n [code, serverURL, api, i18n.language, t, hasMany],\n )\n\n const onUploadSuccess = useCallback(\n (newDocs: JsonObject[]) => {\n if (hasMany) {\n const mergedValue = [\n ...(Array.isArray(value) ? value : []),\n ...newDocs.map((doc) => doc.id),\n ]\n onChange(mergedValue)\n setPopulatedDocs((currentDocs) => [\n ...(currentDocs || []),\n ...newDocs.map((doc) => ({\n relationTo: activeRelationTo,\n value: doc,\n })),\n ])\n } else {\n const firstDoc = newDocs[0]\n onChange(firstDoc.id)\n setPopulatedDocs([\n {\n relationTo: activeRelationTo,\n value: firstDoc,\n },\n ])\n }\n },\n [value, onChange, activeRelationTo, hasMany],\n )\n\n const onLocalFileSelection = React.useCallback(\n (fileList?: FileList) => {\n let fileListToUse = fileList\n if (!hasMany && fileList && fileList.length > 1) {\n const dataTransfer = new DataTransfer()\n dataTransfer.items.add(fileList[0])\n fileListToUse = dataTransfer.files\n }\n if (fileListToUse) {\n setInitialFiles(fileListToUse)\n }\n setCollectionSlug(relationTo)\n if (typeof maxRows === 'number') {\n setMaxFiles(maxRows)\n }\n setCurrentActivePath(path)\n openModal(drawerSlug)\n },\n [\n drawerSlug,\n hasMany,\n openModal,\n relationTo,\n setCollectionSlug,\n setInitialFiles,\n maxRows,\n setMaxFiles,\n path,\n setCurrentActivePath,\n ],\n )\n\n // only hasMany can bulk select\n const onListBulkSelect = React.useCallback<NonNullable<ListDrawerProps['onBulkSelect']>>(\n async (docs) => {\n const selectedDocIDs = []\n\n for (const [id, isSelected] of docs) {\n if (isSelected) {\n selectedDocIDs.push(id)\n }\n }\n\n const loadedDocs = await populateDocs(selectedDocIDs, activeRelationTo)\n if (loadedDocs) {\n setPopulatedDocs((currentDocs) => [\n ...(currentDocs || []),\n ...loadedDocs.docs.map((doc) => ({\n relationTo: activeRelationTo,\n value: doc,\n })),\n ])\n }\n onChange([...(Array.isArray(value) ? value : []), ...selectedDocIDs])\n closeListDrawer()\n },\n [activeRelationTo, closeListDrawer, onChange, populateDocs, value],\n )\n\n const onDocCreate = React.useCallback(\n (data) => {\n if (data.doc) {\n setPopulatedDocs((currentDocs) => [\n ...(currentDocs || []),\n {\n relationTo: activeRelationTo,\n value: data.doc,\n },\n ])\n\n onChange(data.doc.id)\n }\n closeCreateDocDrawer()\n },\n [closeCreateDocDrawer, activeRelationTo, onChange],\n )\n\n const onListSelect = useCallback<NonNullable<ListDrawerProps['onSelect']>>(\n async ({ collectionSlug, doc }) => {\n const loadedDocs = await populateDocs([doc.id], collectionSlug)\n const selectedDoc = loadedDocs ? loadedDocs.docs?.[0] : null\n setPopulatedDocs((currentDocs) => {\n if (selectedDoc) {\n if (hasMany) {\n return [\n ...(currentDocs || []),\n {\n relationTo: activeRelationTo,\n value: selectedDoc,\n },\n ]\n }\n return [\n {\n relationTo: activeRelationTo,\n value: selectedDoc,\n },\n ]\n }\n return currentDocs\n })\n if (hasMany) {\n onChange([...(Array.isArray(value) ? value : []), doc.id])\n } else {\n onChange(doc.id)\n }\n closeListDrawer()\n },\n [closeListDrawer, hasMany, populateDocs, onChange, value, activeRelationTo],\n )\n\n const reloadDoc = React.useCallback<ReloadDoc>(\n async (docID, collectionSlug) => {\n const { docs } = await populateDocs([docID], collectionSlug)\n\n if (docs[0]) {\n let updatedDocsToPropogate = []\n setPopulatedDocs((currentDocs) => {\n const existingDocIndex = currentDocs?.findIndex((doc) => {\n const hasExisting = doc.value?.id === docs[0].id || doc.value?.isPlaceholder\n return hasExisting && doc.relationTo === collectionSlug\n })\n if (existingDocIndex > -1) {\n const updatedDocs = [...currentDocs]\n updatedDocs[existingDocIndex] = {\n relationTo: collectionSlug,\n value: docs[0],\n }\n updatedDocsToPropogate = updatedDocs\n return updatedDocs\n }\n })\n\n if (updatedDocsToPropogate.length && hasMany) {\n onChange(updatedDocsToPropogate.map((doc) => doc.value?.id))\n }\n }\n },\n [populateDocs, onChange, hasMany],\n )\n\n // only hasMany can reorder\n const onReorder = React.useCallback(\n (newValue) => {\n const newValueIDs = newValue.map(({ value }) => value.id)\n onChange(newValueIDs)\n setPopulatedDocs(newValue)\n },\n [onChange],\n )\n\n const onRemove = React.useCallback(\n (newValue?: PopulatedDocs) => {\n const newValueIDs = newValue ? newValue.map(({ value }) => value.id) : null\n onChange(hasMany ? newValueIDs : newValueIDs ? newValueIDs[0] : null)\n setPopulatedDocs(newValue ? newValue : [])\n },\n [onChange, hasMany],\n )\n\n useEffect(() => {\n async function loadInitialDocs() {\n if (value) {\n loadedValueDocsRef.current = true\n const loadedDocs = await populateDocs(\n Array.isArray(value) ? value : [value],\n activeRelationTo,\n )\n if (loadedDocs) {\n setPopulatedDocs(\n loadedDocs.docs.map((doc) => ({ relationTo: activeRelationTo, value: doc })),\n )\n }\n }\n }\n\n if (!loadedValueDocsRef.current) {\n void loadInitialDocs()\n }\n }, [populateDocs, activeRelationTo, value])\n\n useEffect(() => {\n setOnSuccess(path, onUploadSuccess)\n }, [value, path, onUploadSuccess, setOnSuccess])\n\n const showDropzone =\n !value ||\n (hasMany && Array.isArray(value) && (typeof maxRows !== 'number' || value.length < maxRows)) ||\n (!hasMany && populatedDocs?.[0] && typeof populatedDocs[0].value === 'undefined')\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path?.replace(/\\./g, '__')}`}\n style={style}\n >\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n }\n />\n <div className={`${baseClass}__wrap`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n </div>\n {BeforeInput}\n <div className={`${baseClass}__dropzoneAndUpload`}>\n {hasMany && Array.isArray(value) && value.length > 0 ? (\n <>\n {populatedDocs && populatedDocs?.length > 0 ? (\n <UploadComponentHasMany\n displayPreview={displayPreview}\n fileDocs={populatedDocs}\n isSortable={isSortable && !readOnly}\n onRemove={onRemove}\n onReorder={onReorder}\n readonly={readOnly}\n reloadDoc={reloadDoc}\n serverURL={serverURL}\n />\n ) : (\n <div className={`${baseClass}__loadingRows`}>\n {value.map((id) => (\n <ShimmerEffect height=\"40px\" key={id} />\n ))}\n </div>\n )}\n </>\n ) : null}\n {!hasMany && value ? (\n <>\n {populatedDocs && populatedDocs?.length > 0 && populatedDocs[0].value ? (\n <UploadComponentHasOne\n displayPreview={displayPreview}\n fileDoc={populatedDocs[0]}\n onRemove={onRemove}\n readonly={readOnly}\n reloadDoc={reloadDoc}\n serverURL={serverURL}\n />\n ) : populatedDocs && value && !populatedDocs?.[0]?.value ? (\n <>\n {t('general:untitled')} - ID: {value}\n </>\n ) : (\n <ShimmerEffect height=\"62px\" />\n )}\n </>\n ) : null}\n {showDropzone ? (\n <Dropzone\n disabled={readOnly || !canCreate}\n multipleFiles={hasMany}\n onChange={onLocalFileSelection}\n >\n <div className={`${baseClass}__dropzoneContent`}>\n <div className={`${baseClass}__dropzoneContent__buttons`}>\n {canCreate && (\n <>\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__createNewToggler`}\n disabled={readOnly || !canCreate}\n onClick={() => {\n if (!readOnly) {\n if (hasMany) {\n onLocalFileSelection()\n } else {\n openCreateDocDrawer()\n }\n }\n }}\n size=\"small\"\n >\n {t('general:createNew')}\n </Button>\n <span className={`${baseClass}__dropzoneContent__orText`}>\n {t('general:or')}\n </span>\n </>\n )}\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__listToggler`}\n disabled={readOnly}\n onClick={openListDrawer}\n size=\"small\"\n >\n {t('fields:chooseFromExisting')}\n </Button>\n <CreateDocDrawer onSave={onDocCreate} />\n <ListDrawer\n allowCreate={canCreate}\n enableRowSelections={hasMany}\n onBulkSelect={onListBulkSelect}\n onSelect={onListSelect}\n />\n </div>\n\n {canCreate && !readOnly && (\n <p className={`${baseClass}__dragAndDropText`}>\n {t('general:or')} {t('upload:dragAndDrop')}\n </p>\n )}\n </div>\n </Dropzone>\n ) : (\n <>\n {!readOnly &&\n !populatedDocs &&\n (!value ||\n typeof maxRows !== 'number' ||\n (Array.isArray(value) && value.length < maxRows)) ? (\n <ShimmerEffect height=\"40px\" />\n ) : null}\n </>\n )}\n </div>\n {AfterInput}\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Input.js","names":["useModal","qs","React","useCallback","useEffect","useMemo","useBulkUpload","Button","useDocumentDrawer","Dropzone","useListDrawer","RenderCustomComponent","ShimmerEffect","FieldDescription","FieldError","FieldLabel","useAuth","useLocale","useTranslation","fieldBaseClass","UploadComponentHasMany","UploadComponentHasOne","baseClass","UploadInput","props","AfterInput","allowCreate","api","BeforeInput","className","Description","description","displayPreview","Error","filterOptions","filterOptionsFromProps","hasMany","isSortable","Label","label","localized","maxRows","onChange","onChangeFromProps","path","readOnly","relationTo","required","serverURL","showError","style","value","populatedDocs","setPopulatedDocs","useState","activeRelationTo","setActiveRelationTo","Array","isArray","openModal","drawerSlug","setCollectionSlug","setCurrentActivePath","setInitialFiles","setMaxFiles","setOnSuccess","permissions","code","i18n","t","id","not_in","concat","ListDrawer","closeDrawer","closeListDrawer","openDrawer","openListDrawer","collectionSlugs","CreateDocDrawer","closeCreateDocDrawer","openCreateDocDrawer","collectionSlug","loadedValueDocsRef","useRef","canCreate","collections","create","newValue","populateDocs","ids","relatedCollectionSlug","length","query","depth","draft","limit","locale","where","and","in","response","fetch","body","stringify","credentials","headers","language","method","ok","json","sortedDocs","map","docs","find","doc","String","includes","undefined","index","filename","isPlaceholder","onUploadSuccess","newDocs","mergedValue","currentDocs","firstDoc","onLocalFileSelection","fileList","fileListToUse","dataTransfer","DataTransfer","items","add","files","onListBulkSelect","selectedDocIDs","isSelected","push","loadedDocs","onDocCreate","data","onListSelect","selectedDoc","reloadDoc","docID","updatedDocsToPropogate","existingDocIndex","findIndex","hasExisting","updatedDocs","onReorder","newValueIDs","onRemove","loadInitialDocs","current","showDropzone","_jsxs","filter","Boolean","join","replace","_jsx","CustomComponent","Fallback","_Fragment","fileDocs","readonly","height","fileDoc","disabled","multipleFiles","buttonStyle","onClick","size","onSave","enableRowSelections","onBulkSelect","onSelect"],"sources":["../../../src/fields/Upload/Input.tsx"],"sourcesContent":["'use client'\n\nimport type {\n ClientCollectionConfig,\n FieldLabelClientProps,\n FilterOptionsResult,\n JsonObject,\n StaticDescription,\n StaticLabel,\n UploadFieldClient,\n UploadField as UploadFieldType,\n Where,\n} from 'payload'\nimport type { MarkOptional } from 'ts-essentials'\n\nimport { useModal } from '@faceless-ui/modal'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo } from 'react'\n\nimport type { ListDrawerProps } from '../../elements/ListDrawer/types.js'\nimport type { PopulateDocs, ReloadDoc } from './types.js'\n\nimport { useBulkUpload } from '../../elements/BulkUpload/index.js'\nimport { Button } from '../../elements/Button/index.js'\nimport { useDocumentDrawer } from '../../elements/DocumentDrawer/index.js'\nimport { Dropzone } from '../../elements/Dropzone/index.js'\nimport { useListDrawer } from '../../elements/ListDrawer/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { ShimmerEffect } from '../../elements/ShimmerEffect/index.js'\nimport { FieldDescription } from '../../fields/FieldDescription/index.js'\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { UploadComponentHasMany } from './HasMany/index.js'\nimport { UploadComponentHasOne } from './HasOne/index.js'\nimport './index.scss'\n\nexport const baseClass = 'upload'\n\ntype PopulatedDocs = { relationTo: string; value: JsonObject }[]\n\nexport type UploadInputProps = {\n readonly AfterInput?: React.ReactNode\n readonly allowCreate?: boolean\n /**\n * Controls the visibility of the \"Create new collection\" button\n */\n readonly api?: string\n readonly BeforeInput?: React.ReactNode\n readonly className?: string\n readonly collection?: ClientCollectionConfig\n readonly customUploadActions?: React.ReactNode[]\n readonly Description?: React.ReactNode\n readonly description?: StaticDescription\n readonly displayPreview?: boolean\n readonly Error?: React.ReactNode\n readonly filterOptions?: FilterOptionsResult\n readonly hasMany?: boolean\n readonly hideRemoveFile?: boolean\n readonly isSortable?: boolean\n readonly Label?: React.ReactNode\n readonly label?: StaticLabel\n readonly labelProps?: FieldLabelClientProps<MarkOptional<UploadFieldClient, 'type'>>\n readonly localized?: boolean\n readonly maxRows?: number\n readonly onChange?: (e) => void\n readonly path: string\n readonly readOnly?: boolean\n readonly relationTo: UploadFieldType['relationTo']\n readonly required?: boolean\n readonly serverURL?: string\n readonly showError?: boolean\n readonly style?: React.CSSProperties\n readonly value?: (number | string)[] | (number | string)\n}\n\nexport function UploadInput(props: UploadInputProps) {\n const {\n AfterInput,\n allowCreate,\n api,\n BeforeInput,\n className,\n Description,\n description,\n displayPreview,\n Error,\n filterOptions: filterOptionsFromProps,\n hasMany,\n isSortable,\n Label,\n label,\n localized,\n maxRows,\n onChange: onChangeFromProps,\n path,\n readOnly,\n relationTo,\n required,\n serverURL,\n showError,\n style,\n value,\n } = props\n\n const [populatedDocs, setPopulatedDocs] = React.useState<\n {\n relationTo: string\n value: JsonObject\n }[]\n >()\n\n const [activeRelationTo, setActiveRelationTo] = React.useState<string>(\n Array.isArray(relationTo) ? relationTo[0] : relationTo,\n )\n\n const { openModal } = useModal()\n const {\n drawerSlug,\n setCollectionSlug,\n setCurrentActivePath,\n setInitialFiles,\n setMaxFiles,\n setOnSuccess,\n } = useBulkUpload()\n const { permissions } = useAuth()\n const { code } = useLocale()\n const { i18n, t } = useTranslation()\n\n const filterOptions: FilterOptionsResult = useMemo(() => {\n return {\n ...filterOptionsFromProps,\n [activeRelationTo]: {\n ...((filterOptionsFromProps?.[activeRelationTo] as any) || {}),\n id: {\n ...((filterOptionsFromProps?.[activeRelationTo] as any)?.id || {}),\n not_in: ((filterOptionsFromProps?.[activeRelationTo] as any)?.id?.not_in || []).concat(\n ...(Array.isArray(value) || value ? [value] : []),\n ),\n },\n },\n }\n }, [value, activeRelationTo, filterOptionsFromProps])\n\n const [ListDrawer, , { closeDrawer: closeListDrawer, openDrawer: openListDrawer }] =\n useListDrawer({\n collectionSlugs: typeof relationTo === 'string' ? [relationTo] : relationTo,\n filterOptions,\n })\n\n const [\n CreateDocDrawer,\n ,\n { closeDrawer: closeCreateDocDrawer, openDrawer: openCreateDocDrawer },\n ] = useDocumentDrawer({\n collectionSlug: activeRelationTo,\n })\n\n /**\n * Prevent initial retrieval of documents from running more than once\n */\n const loadedValueDocsRef = React.useRef<boolean>(false)\n\n const canCreate = useMemo(() => {\n if (!allowCreate) {\n return false\n }\n\n if (typeof activeRelationTo === 'string') {\n if (permissions?.collections && permissions.collections?.[activeRelationTo]?.create) {\n return true\n }\n }\n\n return false\n }, [activeRelationTo, permissions, allowCreate])\n\n const onChange = React.useCallback(\n (newValue) => {\n if (typeof onChangeFromProps === 'function') {\n onChangeFromProps(newValue)\n }\n },\n [onChangeFromProps],\n )\n\n const populateDocs = React.useCallback<PopulateDocs>(\n async (ids, relatedCollectionSlug) => {\n if (!ids.length) {\n return\n }\n\n const query: {\n [key: string]: unknown\n where: Where\n } = {\n depth: 0,\n draft: true,\n limit: ids.length,\n locale: code,\n where: {\n and: [\n {\n id: {\n in: ids,\n },\n },\n ],\n },\n }\n\n const response = await fetch(`${serverURL}${api}/${relatedCollectionSlug}`, {\n body: qs.stringify(query),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-Payload-HTTP-Method-Override': 'GET',\n },\n method: 'POST',\n })\n if (response.ok) {\n const json = await response.json()\n let sortedDocs = ids.map((id) =>\n json.docs.find((doc) => {\n return String(doc.id) === String(id)\n }),\n )\n\n if (sortedDocs.includes(undefined) && hasMany) {\n sortedDocs = sortedDocs.map((doc, index) =>\n doc\n ? doc\n : {\n id: ids[index],\n filename: `${t('general:untitled')} - ID: ${ids[index]}`,\n isPlaceholder: true,\n },\n )\n }\n\n return { ...json, docs: sortedDocs }\n }\n\n return null\n },\n [code, serverURL, api, i18n.language, t, hasMany],\n )\n\n const onUploadSuccess = useCallback(\n (newDocs: JsonObject[]) => {\n if (hasMany) {\n const mergedValue = [\n ...(Array.isArray(value) ? value : []),\n ...newDocs.map((doc) => doc.id),\n ]\n onChange(mergedValue)\n setPopulatedDocs((currentDocs) => [\n ...(currentDocs || []),\n ...newDocs.map((doc) => ({\n relationTo: activeRelationTo,\n value: doc,\n })),\n ])\n } else {\n const firstDoc = newDocs[0]\n onChange(firstDoc.id)\n setPopulatedDocs([\n {\n relationTo: activeRelationTo,\n value: firstDoc,\n },\n ])\n }\n },\n [value, onChange, activeRelationTo, hasMany],\n )\n\n const onLocalFileSelection = React.useCallback(\n (fileList?: FileList) => {\n let fileListToUse = fileList\n if (!hasMany && fileList && fileList.length > 1) {\n const dataTransfer = new DataTransfer()\n dataTransfer.items.add(fileList[0])\n fileListToUse = dataTransfer.files\n }\n if (fileListToUse) {\n setInitialFiles(fileListToUse)\n }\n setCollectionSlug(relationTo)\n if (typeof maxRows === 'number') {\n setMaxFiles(maxRows)\n }\n setCurrentActivePath(path)\n openModal(drawerSlug)\n },\n [\n drawerSlug,\n hasMany,\n openModal,\n relationTo,\n setCollectionSlug,\n setInitialFiles,\n maxRows,\n setMaxFiles,\n path,\n setCurrentActivePath,\n ],\n )\n\n // only hasMany can bulk select\n const onListBulkSelect = React.useCallback<NonNullable<ListDrawerProps['onBulkSelect']>>(\n async (docs) => {\n const selectedDocIDs = []\n\n for (const [id, isSelected] of docs) {\n if (isSelected) {\n selectedDocIDs.push(id)\n }\n }\n\n const loadedDocs = await populateDocs(selectedDocIDs, activeRelationTo)\n if (loadedDocs) {\n setPopulatedDocs((currentDocs) => [\n ...(currentDocs || []),\n ...loadedDocs.docs.map((doc) => ({\n relationTo: activeRelationTo,\n value: doc,\n })),\n ])\n }\n onChange([...(Array.isArray(value) ? value : []), ...selectedDocIDs])\n closeListDrawer()\n },\n [activeRelationTo, closeListDrawer, onChange, populateDocs, value],\n )\n\n const onDocCreate = React.useCallback(\n (data) => {\n if (data.doc) {\n setPopulatedDocs((currentDocs) => [\n ...(currentDocs || []),\n {\n relationTo: activeRelationTo,\n value: data.doc,\n },\n ])\n\n onChange(data.doc.id)\n }\n closeCreateDocDrawer()\n },\n [closeCreateDocDrawer, activeRelationTo, onChange],\n )\n\n const onListSelect = useCallback<NonNullable<ListDrawerProps['onSelect']>>(\n async ({ collectionSlug, doc }) => {\n const loadedDocs = await populateDocs([doc.id], collectionSlug)\n const selectedDoc = loadedDocs ? loadedDocs.docs?.[0] : null\n setPopulatedDocs((currentDocs) => {\n if (selectedDoc) {\n if (hasMany) {\n return [\n ...(currentDocs || []),\n {\n relationTo: activeRelationTo,\n value: selectedDoc,\n },\n ]\n }\n return [\n {\n relationTo: activeRelationTo,\n value: selectedDoc,\n },\n ]\n }\n return currentDocs\n })\n if (hasMany) {\n onChange([...(Array.isArray(value) ? value : []), doc.id])\n } else {\n onChange(doc.id)\n }\n closeListDrawer()\n },\n [closeListDrawer, hasMany, populateDocs, onChange, value, activeRelationTo],\n )\n\n const reloadDoc = React.useCallback<ReloadDoc>(\n async (docID, collectionSlug) => {\n const { docs } = await populateDocs([docID], collectionSlug)\n\n if (docs[0]) {\n let updatedDocsToPropogate = []\n setPopulatedDocs((currentDocs) => {\n const existingDocIndex = currentDocs?.findIndex((doc) => {\n const hasExisting = doc.value?.id === docs[0].id || doc.value?.isPlaceholder\n return hasExisting && doc.relationTo === collectionSlug\n })\n if (existingDocIndex > -1) {\n const updatedDocs = [...currentDocs]\n updatedDocs[existingDocIndex] = {\n relationTo: collectionSlug,\n value: docs[0],\n }\n updatedDocsToPropogate = updatedDocs\n return updatedDocs\n }\n })\n\n if (updatedDocsToPropogate.length && hasMany) {\n onChange(updatedDocsToPropogate.map((doc) => doc.value?.id))\n }\n }\n },\n [populateDocs, onChange, hasMany],\n )\n\n // only hasMany can reorder\n const onReorder = React.useCallback(\n (newValue) => {\n const newValueIDs = newValue.map(({ value }) => value.id)\n onChange(newValueIDs)\n setPopulatedDocs(newValue)\n },\n [onChange],\n )\n\n const onRemove = React.useCallback(\n (newValue?: PopulatedDocs) => {\n const newValueIDs = newValue ? newValue.map(({ value }) => value.id) : null\n onChange(hasMany ? newValueIDs : newValueIDs ? newValueIDs[0] : null)\n setPopulatedDocs(newValue ? newValue : [])\n },\n [onChange, hasMany],\n )\n\n useEffect(() => {\n async function loadInitialDocs() {\n if (value) {\n loadedValueDocsRef.current = true\n const loadedDocs = await populateDocs(\n Array.isArray(value) ? value : [value],\n activeRelationTo,\n )\n if (loadedDocs) {\n setPopulatedDocs(\n loadedDocs.docs.map((doc) => ({ relationTo: activeRelationTo, value: doc })),\n )\n }\n }\n }\n\n if (!loadedValueDocsRef.current) {\n void loadInitialDocs()\n }\n }, [populateDocs, activeRelationTo, value])\n\n useEffect(() => {\n setOnSuccess(path, onUploadSuccess)\n }, [value, path, onUploadSuccess, setOnSuccess])\n\n const showDropzone =\n !value ||\n (hasMany && Array.isArray(value) && (typeof maxRows !== 'number' || value.length < maxRows)) ||\n (!hasMany && populatedDocs?.[0] && typeof populatedDocs[0].value === 'undefined')\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path?.replace(/\\./g, '__')}`}\n style={style}\n >\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n }\n />\n <div className={`${baseClass}__wrap`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n </div>\n {BeforeInput}\n <div className={`${baseClass}__dropzoneAndUpload`}>\n {hasMany && Array.isArray(value) && value.length > 0 ? (\n <>\n {populatedDocs && populatedDocs?.length > 0 ? (\n <UploadComponentHasMany\n displayPreview={displayPreview}\n fileDocs={populatedDocs}\n isSortable={isSortable && !readOnly}\n onRemove={onRemove}\n onReorder={onReorder}\n readonly={readOnly}\n reloadDoc={reloadDoc}\n serverURL={serverURL}\n />\n ) : (\n <div className={`${baseClass}__loadingRows`}>\n {value.map((id) => (\n <ShimmerEffect height=\"40px\" key={id} />\n ))}\n </div>\n )}\n </>\n ) : null}\n {!hasMany && value ? (\n <>\n {populatedDocs && populatedDocs?.length > 0 && populatedDocs[0].value ? (\n <UploadComponentHasOne\n displayPreview={displayPreview}\n fileDoc={populatedDocs[0]}\n onRemove={onRemove}\n readonly={readOnly}\n reloadDoc={reloadDoc}\n serverURL={serverURL}\n />\n ) : populatedDocs && value && !populatedDocs?.[0]?.value ? (\n <>\n {t('general:untitled')} - ID: {value}\n </>\n ) : (\n <ShimmerEffect height=\"62px\" />\n )}\n </>\n ) : null}\n {showDropzone ? (\n <Dropzone\n disabled={readOnly || !canCreate}\n multipleFiles={hasMany}\n onChange={onLocalFileSelection}\n >\n <div className={`${baseClass}__dropzoneContent`}>\n <div className={`${baseClass}__dropzoneContent__buttons`}>\n {canCreate && (\n <>\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__createNewToggler`}\n disabled={readOnly || !canCreate}\n onClick={() => {\n if (!readOnly) {\n if (hasMany) {\n onLocalFileSelection()\n } else {\n openCreateDocDrawer()\n }\n }\n }}\n size=\"small\"\n >\n {t('general:createNew')}\n </Button>\n <span className={`${baseClass}__dropzoneContent__orText`}>\n {t('general:or')}\n </span>\n </>\n )}\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__listToggler`}\n disabled={readOnly}\n onClick={openListDrawer}\n size=\"small\"\n >\n {t('fields:chooseFromExisting')}\n </Button>\n <CreateDocDrawer onSave={onDocCreate} />\n <ListDrawer\n allowCreate={canCreate}\n enableRowSelections={hasMany}\n onBulkSelect={onListBulkSelect}\n onSelect={onListSelect}\n />\n </div>\n\n {canCreate && !readOnly && (\n <p className={`${baseClass}__dragAndDropText`}>\n {t('general:or')} {t('upload:dragAndDrop')}\n </p>\n )}\n </div>\n </Dropzone>\n ) : (\n <>\n {!readOnly &&\n !populatedDocs &&\n (!value ||\n typeof maxRows !== 'number' ||\n (Array.isArray(value) && value.length < maxRows)) ? (\n <ShimmerEffect height=\"40px\" />\n ) : null}\n </>\n )}\n </div>\n {AfterInput}\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Folders/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Folders/index.tsx"],"names":[],"mappings":"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"}
@@ -71,6 +71,7 @@ export function FolderProvider({
71
71
  sort,
72
72
  subfolders: subfoldersFromProps = []
73
73
  }) {
74
+ const parentFolderContext = useFolder();
74
75
  const {
75
76
  config,
76
77
  getEntityConfig
@@ -585,7 +586,26 @@ export function FolderProvider({
585
586
  * Does NOT handle the request to the server.
586
587
  * Used when a document needs to be added to the current state.
587
588
  */
588
- const addItems = React.useCallback(items_1 => {
589
+ const addItems = React.useCallback(itemsToAdd => {
590
+ const {
591
+ items: items_1,
592
+ parentItems
593
+ } = itemsToAdd.reduce((acc_1, item_5) => {
594
+ const destinationFolderID = item_5.value.folderID || null;
595
+ if (item_5.value.folderID && item_5.value.folderID === activeFolderID || !activeFolderID && !item_5.value.folderID) {
596
+ acc_1.items.push(item_5);
597
+ }
598
+ if (parentFolderContext && (parentFolderContext.folderID && destinationFolderID === parentFolderContext.folderID || !parentFolderContext.folderID && !item_5.value.folderID)) {
599
+ acc_1.parentItems.push(item_5);
600
+ }
601
+ return acc_1;
602
+ }, {
603
+ items: [],
604
+ parentItems: []
605
+ });
606
+ if (parentItems.length) {
607
+ parentFolderContext.addItems(parentItems);
608
+ }
589
609
  if (!items_1.length) {
590
610
  return;
591
611
  }
@@ -620,7 +640,7 @@ export function FolderProvider({
620
640
  setSubfolders(sortedSubfolders_1);
621
641
  setAllSubfolders(sortedAllSubfolders);
622
642
  }
623
- }, [documents, separateItems, sortItems, subfolders]);
643
+ }, [activeFolderID, documents, separateItems, sortItems, subfolders]);
624
644
  /**
625
645
  * Used to move items to a different folder.
626
646
  *
@@ -636,7 +656,7 @@ export function FolderProvider({
636
656
  }
637
657
  const movingCurrentFolder = items_2.length === 1 && items_2[0].relationTo === folderCollectionSlug && items_2[0].value.id === activeFolderID;
638
658
  if (movingCurrentFolder) {
639
- const req = await fetch(`${serverURL}${routes.api}/${folderCollectionSlug}/${activeFolderID}`, {
659
+ const req = await fetch(`${serverURL}${routes.api}/${folderCollectionSlug}/${activeFolderID}?depth=0`, {
640
660
  body: JSON.stringify({
641
661
  [folderFieldName]: toFolderID_0 || null
642
662
  }),
@@ -747,10 +767,10 @@ export function FolderProvider({
747
767
  // no need to sort, just remove the items from the current state
748
768
  const filteredDocuments_0 = successfullyMovedDocumentItems.length ? documents.filter(({
749
769
  itemKey: itemKey_1
750
- }) => !successfullyMovedDocumentItems.some(item_5 => item_5.itemKey === itemKey_1)) : undefined;
770
+ }) => !successfullyMovedDocumentItems.some(item_6 => item_6.itemKey === itemKey_1)) : undefined;
751
771
  const filteredSubfolders_0 = successfullyMovedFolderItems.length ? subfolders.filter(({
752
772
  itemKey: itemKey_2
753
- }) => !successfullyMovedFolderItems.some(item_6 => item_6.itemKey === itemKey_2)) : undefined;
773
+ }) => !successfullyMovedFolderItems.some(item_7 => item_7.itemKey === itemKey_2)) : undefined;
754
774
  if (filteredDocuments_0) {
755
775
  setDocuments(filteredDocuments_0);
756
776
  }
@@ -807,15 +827,13 @@ export function FolderProvider({
807
827
  addItems,
808
828
  breadcrumbs,
809
829
  clearSelections,
810
- currentFolder: breadcrumbs?.[0]?.id ? {
811
- itemKey: `${folderCollectionSlug}-${activeFolderID}`,
830
+ currentFolder: breadcrumbs?.[0]?.id ? formatFolderOrDocumentItem({
831
+ folderFieldName,
832
+ isUpload: false,
812
833
  relationTo: folderCollectionSlug,
813
- value: {
814
- id: activeFolderID,
815
- _folderOrDocumentTitle: breadcrumbs[breadcrumbs.length - 1]?.name,
816
- folderID: breadcrumbs[breadcrumbs.length - 2]?.id || null
817
- }
818
- } : null,
834
+ useAsTitle: folderCollectionConfig.admin.useAsTitle,
835
+ value: breadcrumbs[breadcrumbs.length - 1]
836
+ }) : null,
819
837
  documents,
820
838
  filterItems,
821
839
  focusedRowIndex,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useRouter","extractID","formatAdminURL","formatFolderOrDocumentItem","qs","React","toast","useDrawerDepth","useConfig","useRouteTransition","useTranslation","getMetaSelection","getShiftSelection","groupItemIDsByRelation","Context","createContext","addItems","breadcrumbs","clearSelections","currentFolder","documents","filterItems","undefined","focusedRowIndex","folderCollectionConfig","folderCollectionSlug","folderFieldName","folderID","getSelectedItems","isDragging","lastSelectedIndex","moveToFolder","Promise","resolve","onItemClick","onItemKeyPress","removeItems","renameFolder","search","selectedIndexes","Set","setBreadcrumbs","setFocusedRowIndex","setFolderID","setIsDragging","sortAndUpdateState","sortDirection","sortOn","subfolders","visibleCollectionSlugs","filterOutItems","items","relationTo","searchLower","toLowerCase","filter","item","itemTitle","value","_folderOrDocumentTitle","itemRelationTo","includes","FolderProvider","allowMultiSelection","_breadcrumbsFromProps","children","collectionSlug","allDocumentsFromProps","filteredCollectionSlugs","folderCollectionSlugs","_folderIDFromProps","_searchFromProps","sort","subfoldersFromProps","config","getEntityConfig","folders","fieldName","routes","serverURL","drawerDepth","t","router","startRouteTransition","useState","collections","find","collection","slug","setSelectedIndexes","setLastSelectedIndex","setVisibleCollectionSlugs","activeFolderID","setActiveFolderID","allSubfolders","setAllSubfolders","setSubfolders","allDocuments","setAllDocuments","setDocuments","setSearch","baseFolderPath","admin","browseByFolder","setSortDirection","startsWith","setSortOn","replace","lastClickTime","useRef","totalCount","length","formatFolderURL","useCallback","args","newFolderID","params","sortBy","adminRoute","path","stringify","addQueryPrefix","getFolderData","_search","searchFilter","trim","query","folderDataReq","fetch","api","credentials","headers","status","folderDataRes","json","setNewActiveFolderID","toFolderID","push","Array","from","reduce","acc","index","navigateAfterSelection","docID","event","code","ctrlKey","metaKey","shiftKey","isShiftPressed","isCtrlPressed","newSelectedIndexes","preventDefault","nextIndex","Math","min","selectFromIndex","selectToIndex","prevIndex","max","size","_","i","currentSelection","toggleIndex","doubleClicked","type","has","now","Date","current","_relationTo","isArray","filteredDocuments","filteredSubfolders","res","sortItems","documentsToSort","sortDirectionArg","sortOnArg","subfoldersToSort","sortedDocuments","sortedSubfolders","sortDirectionToUse","sortOnToUse","newURL","a","b","aValue","bValue","localeCompare","separateItems","separatedItems","prevDocs","itemKey","some","prevFolders","sortedAllDocuments","sortedAllSubfolders","itemsToMove","movingCurrentFolder","id","req","body","JSON","method","error","updatedDoc","folderRes","prevBreadcrumbs","map","breadcrumb","movingToCurrentFolder","successfullyMovedFolderItems","successfullyMovedDocumentItems","ids","Object","entries","collectionConfig","limit","where","in","docs","formattedItems","doc","isUpload","Boolean","upload","useAsTitle","console","updatedFolderID","newName","name","folder","_jsx","useFolder","context","use","Error"],"sources":["../../../src/providers/Folders/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, CollectionSlug, Document } from 'payload'\nimport type { FolderBreadcrumb, FolderOrDocument, GetFolderDataResult } from 'payload/shared'\n\nimport { useRouter } from 'next/navigation.js'\nimport { extractID, formatAdminURL, formatFolderOrDocumentItem } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { useDrawerDepth } from '../../elements/Drawer/index.js'\nimport { useConfig } from '../Config/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\nimport { useTranslation } from '../Translation/index.js'\nimport { getMetaSelection, getShiftSelection, groupItemIDsByRelation } from './selection.js'\ntype SortKeys = keyof Pick<\n FolderOrDocument['value'],\n '_folderOrDocumentTitle' | 'createdAt' | 'updatedAt'\n>\ntype SortDirection = 'asc' | 'desc'\nexport type FileCardData = {\n filename: string\n id: number | string\n mimeType: string\n name: string\n url: string\n}\n\nexport type FolderContextValue = {\n addItems: (args: FolderOrDocument[]) => void\n breadcrumbs?: FolderBreadcrumb[]\n clearSelections: () => void\n currentFolder?: FolderOrDocument | null\n documents?: FolderOrDocument[]\n filterItems: (args: { relationTo?: CollectionSlug[]; search?: string }) => Promise<void>\n focusedRowIndex: number\n folderCollectionConfig: ClientCollectionConfig\n folderCollectionSlug: string\n folderFieldName: string\n folderID?: number | string\n getSelectedItems?: () => FolderOrDocument[]\n isDragging: boolean\n lastSelectedIndex: null | number\n moveToFolder: (args: {\n itemsToMove: FolderOrDocument[]\n toFolderID?: number | string\n }) => Promise<void>\n onItemClick: (args: {\n event: React.MouseEvent\n index: number\n item: FolderOrDocument\n }) => Promise<void> | void\n onItemKeyPress: (args: {\n event: React.KeyboardEvent\n index: number\n item: FolderOrDocument\n }) => Promise<void> | void\n removeItems: (args: FolderOrDocument[]) => void\n renameFolder: (args: { folderID: number | string; newName: string }) => void\n search: string\n selectedIndexes: Set<number>\n setBreadcrumbs: React.Dispatch<React.SetStateAction<FolderBreadcrumb[]>>\n setFocusedRowIndex: React.Dispatch<React.SetStateAction<number>>\n setFolderID: (args: { folderID: number | string }) => Promise<void> | void\n setIsDragging: React.Dispatch<React.SetStateAction<boolean>>\n sortAndUpdateState: (args: {\n documentsToSort?: FolderOrDocument[]\n sortDirection?: 'asc' | 'desc'\n sortOn?: SortKeys\n subfoldersToSort?: FolderOrDocument[]\n }) => void\n sortDirection: SortDirection\n sortOn: SortKeys\n subfolders?: FolderOrDocument[]\n visibleCollectionSlugs: CollectionSlug[]\n}\n\nconst Context = React.createContext<FolderContextValue>({\n addItems: () => {},\n breadcrumbs: [],\n clearSelections: () => {},\n currentFolder: null,\n documents: [],\n filterItems: () => undefined,\n focusedRowIndex: -1,\n folderCollectionConfig: null,\n folderCollectionSlug: '',\n folderFieldName: 'folder',\n folderID: undefined,\n getSelectedItems: () => [],\n isDragging: false,\n lastSelectedIndex: null,\n moveToFolder: () => Promise.resolve(undefined),\n onItemClick: () => undefined,\n onItemKeyPress: () => undefined,\n removeItems: () => undefined,\n renameFolder: () => undefined,\n search: '',\n selectedIndexes: new Set(),\n setBreadcrumbs: () => {},\n setFocusedRowIndex: () => -1,\n setFolderID: () => null,\n setIsDragging: () => false,\n sortAndUpdateState: () => undefined,\n sortDirection: 'asc',\n sortOn: '_folderOrDocumentTitle',\n subfolders: [],\n visibleCollectionSlugs: [],\n})\n\nfunction filterOutItems({\n items,\n relationTo,\n search,\n}: {\n items: FolderOrDocument[]\n relationTo?: CollectionSlug[]\n search?: string\n}) {\n if (typeof search !== 'string' && relationTo === undefined) {\n return items\n }\n\n const searchLower = (search || '').toLowerCase()\n\n return items.filter((item) => {\n const itemTitle = item.value._folderOrDocumentTitle.toLowerCase()\n const itemRelationTo = item.relationTo\n\n return (\n (relationTo ? relationTo.includes(itemRelationTo) : true) &&\n (!searchLower || itemTitle.includes(searchLower))\n )\n })\n}\n\nexport type FolderProviderProps = {\n readonly allowMultiSelection?: boolean\n /**\n * Breadcrumbs for the current folder\n */\n readonly breadcrumbs?: FolderBreadcrumb[]\n /**\n * Children to render inside the provider\n */\n readonly children: React.ReactNode\n /**\n * Required for collection-folder views\n */\n readonly collectionSlug?: CollectionSlug\n /**\n * All documents in the current folder\n */\n readonly documents: FolderOrDocument[]\n /**\n * The collection slugs that are being viewed\n */\n readonly filteredCollectionSlugs?: CollectionSlug[]\n /**\n * Folder enabled collection slugs\n */\n readonly folderCollectionSlugs: CollectionSlug[]\n /**\n * The ID of the current folder\n */\n readonly folderID?: number | string\n /**\n * The intial search query\n */\n readonly search?: string\n /**\n * The sort order of the documents\n *\n * @example\n * `name` for descending\n * `-name` for ascending\n */\n readonly sort?: `-${SortKeys}` | SortKeys\n /**\n * All subfolders in the current folder\n */\n readonly subfolders: FolderOrDocument[]\n}\nexport function FolderProvider({\n allowMultiSelection = true,\n breadcrumbs: _breadcrumbsFromProps = [],\n children,\n collectionSlug,\n documents: allDocumentsFromProps = [],\n filteredCollectionSlugs,\n folderCollectionSlugs = [],\n folderID: _folderIDFromProps = undefined,\n search: _searchFromProps,\n sort,\n subfolders: subfoldersFromProps = [],\n}: FolderProviderProps) {\n const { config, getEntityConfig } = useConfig()\n const folderFieldName = config.folders.fieldName\n const { routes, serverURL } = config\n const drawerDepth = useDrawerDepth()\n const { t } = useTranslation()\n const router = useRouter()\n const { startRouteTransition } = useRouteTransition()\n\n const [folderCollectionConfig] = React.useState(() =>\n config.collections.find((collection) => collection.slug === config.folders.slug),\n )\n const folderCollectionSlug = folderCollectionConfig.slug\n\n const [isDragging, setIsDragging] = React.useState(false)\n const [selectedIndexes, setSelectedIndexes] = React.useState<Set<number>>(() => new Set())\n const [focusedRowIndex, setFocusedRowIndex] = React.useState(-1)\n const [lastSelectedIndex, setLastSelectedIndex] = React.useState<null | number>(null)\n const [visibleCollectionSlugs, setVisibleCollectionSlugs] = React.useState<CollectionSlug[]>(\n filteredCollectionSlugs || [...folderCollectionSlugs, folderCollectionSlug],\n )\n const [activeFolderID, setActiveFolderID] =\n React.useState<FolderContextValue['folderID']>(_folderIDFromProps)\n const [breadcrumbs, setBreadcrumbs] =\n React.useState<FolderContextValue['breadcrumbs']>(_breadcrumbsFromProps)\n const [allSubfolders, setAllSubfolders] = React.useState<FolderOrDocument[]>(subfoldersFromProps)\n const [subfolders, setSubfolders] = React.useState<FolderContextValue['subfolders']>(() => {\n return filterOutItems({\n items: allSubfolders,\n relationTo: visibleCollectionSlugs.includes(folderCollectionSlug)\n ? [folderCollectionSlug]\n : [],\n search: _searchFromProps,\n })\n })\n const [allDocuments, setAllDocuments] = React.useState<FolderOrDocument[]>(allDocumentsFromProps)\n const [documents, setDocuments] = React.useState<FolderContextValue['documents']>(() =>\n filterOutItems({\n items: allDocuments,\n relationTo: visibleCollectionSlugs,\n search: _searchFromProps,\n }),\n )\n const [search, setSearch] = React.useState<string | undefined>(_searchFromProps)\n const [baseFolderPath] = React.useState<`/${string}`>(() => {\n if (collectionSlug) {\n return `/collections/${collectionSlug}/${folderCollectionSlug}`\n } else {\n return config.admin.routes.browseByFolder\n }\n })\n const [sortDirection, setSortDirection] = React.useState<SortDirection>(() => {\n if (sort) {\n return sort.startsWith('-') ? 'desc' : 'asc'\n }\n return 'asc'\n })\n const [sortOn, setSortOn] = React.useState<SortKeys>(() => {\n if (sort) {\n return sort.replace(/^-/, '') as SortKeys\n }\n return '_folderOrDocumentTitle'\n })\n\n const lastClickTime = React.useRef<null | number>(null)\n const totalCount = subfolders.length + documents.length\n\n const formatFolderURL = React.useCallback(\n (args: {\n folderID?: number | string\n relationTo?: string[]\n search?: string\n sortBy?: SortKeys\n sortDirection?: SortDirection\n }) => {\n const newFolderID = 'folderID' in args ? args.folderID : activeFolderID\n const params = {\n relationTo:\n 'relationTo' in args\n ? args.relationTo\n : collectionSlug\n ? undefined\n : visibleCollectionSlugs,\n search: 'search' in args ? args.search : search,\n sortBy: 'sortBy' in args ? args.sortBy : sortOn,\n sortDirection: 'sortDirection' in args ? args.sortDirection : sortDirection,\n }\n\n return formatAdminURL({\n adminRoute: config.routes.admin,\n path: `${baseFolderPath}${newFolderID ? `/${newFolderID}` : ''}${qs.stringify(params, {\n addQueryPrefix: true,\n })}`,\n })\n },\n [\n activeFolderID,\n baseFolderPath,\n collectionSlug,\n config.routes.admin,\n search,\n sortDirection,\n sortOn,\n visibleCollectionSlugs,\n ],\n )\n\n const clearSelections = React.useCallback(() => {\n setFocusedRowIndex(-1)\n setSelectedIndexes(new Set())\n setLastSelectedIndex(undefined)\n }, [])\n\n /**\n * Used to populate drawer data.\n *\n * This is used when the user navigates to a folder.\n */\n const getFolderData = React.useCallback(\n async ({ folderID, search: _search = undefined }): Promise<GetFolderDataResult> => {\n // if folderID is not set, we want to search all documents\n const searchFilter = !folderID\n ? ((typeof _search === 'string' ? _search : search) || '').trim()\n : undefined\n const query = qs.stringify(\n {\n collectionSlug,\n folderID,\n search: searchFilter,\n },\n { addQueryPrefix: true },\n )\n\n const folderDataReq = await fetch(\n `${serverURL}${routes.api}/${folderCollectionSlug}/populate-folder-data${query}`,\n {\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n },\n )\n\n if (folderDataReq.status === 200) {\n const folderDataRes: GetFolderDataResult = await folderDataReq.json()\n setAllSubfolders(folderDataRes.subfolders || [])\n setAllDocuments(folderDataRes.documents || [])\n return folderDataRes\n } else {\n return {\n breadcrumbs: [],\n documents: [],\n subfolders: [],\n }\n }\n },\n [folderCollectionSlug, search, routes.api, serverURL, collectionSlug],\n )\n\n const setNewActiveFolderID: FolderContextValue['setFolderID'] = React.useCallback(\n async ({ folderID: toFolderID }) => {\n clearSelections()\n if (drawerDepth === 1) {\n // not in a drawer (default is 1)\n startRouteTransition(() =>\n router.push(\n formatFolderURL({\n folderID: toFolderID,\n }),\n ),\n )\n } else {\n const folderDataRes = await getFolderData({ folderID: toFolderID })\n setBreadcrumbs(folderDataRes?.breadcrumbs || [])\n setSubfolders(folderDataRes?.subfolders || [])\n setDocuments(folderDataRes?.documents || [])\n setActiveFolderID(toFolderID)\n }\n },\n [clearSelections, drawerDepth, startRouteTransition, router, formatFolderURL, getFolderData],\n )\n\n const getSelectedItems = React.useCallback(() => {\n return Array.from(selectedIndexes).reduce((acc, index) => {\n const item = [...subfolders, ...documents][index]\n if (item) {\n acc.push(item)\n }\n return acc\n }, [])\n }, [documents, selectedIndexes, subfolders])\n\n const navigateAfterSelection = React.useCallback(\n async ({ collectionSlug, docID }: { collectionSlug: string; docID: number | string }) => {\n if (collectionSlug === folderCollectionSlug) {\n await setNewActiveFolderID({ folderID: docID })\n } else if (collectionSlug) {\n router.push(\n formatAdminURL({\n adminRoute: config.routes.admin,\n path: `/collections/${collectionSlug}/${docID}`,\n }),\n )\n }\n },\n [setNewActiveFolderID, folderCollectionSlug, router, config.routes.admin],\n )\n\n const onItemKeyPress: FolderContextValue['onItemKeyPress'] = React.useCallback(\n async ({ event, index, item }) => {\n const { code, ctrlKey, metaKey, shiftKey } = event\n const isShiftPressed = shiftKey\n const isCtrlPressed = ctrlKey || metaKey\n let newSelectedIndexes: Set<number> = selectedIndexes\n\n switch (code) {\n case 'ArrowDown': {\n event.preventDefault()\n const nextIndex = Math.min(index + 1, totalCount - 1)\n setFocusedRowIndex(nextIndex)\n\n if (isCtrlPressed) {\n break\n }\n\n if (allowMultiSelection && isShiftPressed) {\n newSelectedIndexes = getShiftSelection({\n selectFromIndex: Math.min(lastSelectedIndex, totalCount),\n selectToIndex: Math.min(nextIndex, totalCount),\n })\n } else {\n setLastSelectedIndex(nextIndex)\n newSelectedIndexes = new Set([nextIndex])\n }\n break\n }\n case 'ArrowUp': {\n event.preventDefault()\n const prevIndex = Math.max(index - 1, 0)\n setFocusedRowIndex(prevIndex)\n\n if (isCtrlPressed) {\n break\n }\n\n if (allowMultiSelection && isShiftPressed) {\n newSelectedIndexes = getShiftSelection({\n selectFromIndex: lastSelectedIndex,\n selectToIndex: prevIndex,\n })\n } else {\n setLastSelectedIndex(prevIndex)\n newSelectedIndexes = new Set([prevIndex])\n }\n break\n }\n case 'Enter': {\n if (selectedIndexes.size === 1) {\n newSelectedIndexes = new Set([])\n setFocusedRowIndex(undefined)\n }\n break\n }\n case 'Escape': {\n setFocusedRowIndex(undefined)\n setSelectedIndexes(new Set([]))\n newSelectedIndexes = new Set([])\n break\n }\n case 'KeyA': {\n if (allowMultiSelection && isCtrlPressed) {\n event.preventDefault()\n setFocusedRowIndex(totalCount - 1)\n newSelectedIndexes = new Set(Array.from({ length: totalCount }, (_, i) => i))\n }\n break\n }\n case 'Space': {\n if (allowMultiSelection && isShiftPressed) {\n event.preventDefault()\n newSelectedIndexes = getMetaSelection({\n currentSelection: newSelectedIndexes,\n toggleIndex: index,\n })\n setLastSelectedIndex(index)\n } else {\n event.preventDefault()\n newSelectedIndexes = new Set([index])\n setLastSelectedIndex(index)\n }\n break\n }\n case 'Tab': {\n if (allowMultiSelection && isShiftPressed) {\n const prevIndex = index - 1\n if (prevIndex < 0 && newSelectedIndexes.size > 0) {\n setFocusedRowIndex(prevIndex)\n }\n } else {\n const nextIndex = index + 1\n if (nextIndex === totalCount && newSelectedIndexes.size > 0) {\n setFocusedRowIndex(totalCount - 1)\n }\n }\n break\n }\n }\n\n setSelectedIndexes(newSelectedIndexes)\n if (selectedIndexes.size === 1 && code === 'Enter') {\n await navigateAfterSelection({\n collectionSlug: item.relationTo,\n docID: extractID(item.value),\n })\n }\n },\n [allowMultiSelection, lastSelectedIndex, navigateAfterSelection, selectedIndexes, totalCount],\n )\n\n const onItemClick: FolderContextValue['onItemClick'] = React.useCallback(\n async ({ event, index, item }) => {\n let doubleClicked: boolean = false\n const isCtrlPressed = event.ctrlKey || event.metaKey\n const isShiftPressed = event.shiftKey\n let newSelectedIndexes = new Set(selectedIndexes)\n\n if (allowMultiSelection && isCtrlPressed) {\n newSelectedIndexes = getMetaSelection({\n currentSelection: newSelectedIndexes,\n toggleIndex: index,\n })\n } else if (allowMultiSelection && isShiftPressed && lastSelectedIndex !== undefined) {\n newSelectedIndexes = getShiftSelection({\n selectFromIndex: lastSelectedIndex,\n selectToIndex: index,\n })\n } else if (allowMultiSelection && event.type === 'pointermove') {\n // on drag start of an unselected item\n if (!selectedIndexes.has(index)) {\n newSelectedIndexes = new Set([index])\n }\n setLastSelectedIndex(index)\n } else {\n // Normal click - select single item\n newSelectedIndexes = new Set([index])\n const now = Date.now()\n doubleClicked = now - lastClickTime.current < 400 && lastSelectedIndex === index\n lastClickTime.current = now\n setLastSelectedIndex(index)\n }\n\n if (newSelectedIndexes.size === 0) {\n setFocusedRowIndex(undefined)\n } else {\n setFocusedRowIndex(index)\n }\n\n setSelectedIndexes(newSelectedIndexes)\n if (doubleClicked) {\n await navigateAfterSelection({\n collectionSlug: item.relationTo,\n docID: extractID(item.value),\n })\n }\n },\n [selectedIndexes, lastSelectedIndex, allowMultiSelection, navigateAfterSelection],\n )\n\n const filterItems: FolderContextValue['filterItems'] = React.useCallback(\n async ({ relationTo: _relationTo, search: _search }) => {\n const relationTo = Array.isArray(_relationTo) ? _relationTo : visibleCollectionSlugs\n const searchFilter = ((typeof _search === 'string' ? _search : search) || '').trim()\n\n let filteredDocuments: FolderOrDocument[] = allDocuments\n let filteredSubfolders: FolderOrDocument[] = allSubfolders\n\n if (collectionSlug && !activeFolderID && _search !== search) {\n // this allows us to search all documents in the collection when we are not in a folder and in the folder-collection view\n const res = await getFolderData({\n folderID: activeFolderID,\n search: searchFilter,\n })\n filteredDocuments = filterOutItems({\n items: res.documents,\n relationTo,\n search: searchFilter,\n })\n filteredSubfolders = filterOutItems({\n items: res.subfolders,\n relationTo: [folderCollectionSlug],\n search: searchFilter,\n })\n } else {\n filteredDocuments = filterOutItems({\n items: allDocuments,\n relationTo,\n search: searchFilter,\n })\n filteredSubfolders = filterOutItems({\n items: allSubfolders,\n relationTo: relationTo.includes(folderCollectionSlug) ? [folderCollectionSlug] : [],\n search: searchFilter,\n })\n }\n\n setDocuments(filteredDocuments)\n setSubfolders(filteredSubfolders)\n setSearch(searchFilter)\n setVisibleCollectionSlugs(relationTo)\n\n if (drawerDepth === 1) {\n router.replace(\n formatFolderURL({\n relationTo,\n search: searchFilter || undefined,\n }),\n )\n }\n },\n [\n collectionSlug,\n visibleCollectionSlugs,\n search,\n activeFolderID,\n allDocuments,\n allSubfolders,\n folderCollectionSlug,\n drawerDepth,\n getFolderData,\n router,\n formatFolderURL,\n ],\n )\n\n const sortItems = React.useCallback(\n ({\n documentsToSort,\n sortDirection: sortDirectionArg,\n sortOn: sortOnArg,\n subfoldersToSort,\n }: Parameters<FolderContextValue['sortAndUpdateState']>[0]): {\n newURL?: string\n sortedDocuments?: FolderOrDocument[]\n sortedSubfolders?: FolderOrDocument[]\n } => {\n let sortedDocuments: FolderOrDocument[] | undefined\n let sortedSubfolders: FolderOrDocument[] | undefined\n const sortDirectionToUse = sortDirectionArg || sortDirection\n const sortOnToUse = sortOnArg || sortOn\n\n if (sortOnArg) {\n setSortOn(sortOnArg)\n }\n\n if (sortDirectionArg) {\n setSortDirection(sortDirectionArg)\n }\n\n const newURL = formatFolderURL({\n sortBy: sortOnArg || sortOn,\n sortDirection: sortDirectionArg || sortDirection,\n })\n\n if (documentsToSort) {\n sortedDocuments = [...documentsToSort].sort((a, b) => {\n const aValue = a.value[sortOnToUse]\n const bValue = b.value[sortOnToUse]\n\n if (aValue == null && bValue == null) {\n return 0\n }\n if (aValue == null) {\n return sortDirectionToUse === 'asc' ? 1 : -1\n }\n if (bValue == null) {\n return sortDirectionToUse === 'asc' ? -1 : 1\n }\n\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n return sortDirectionToUse === 'asc'\n ? aValue.localeCompare(bValue)\n : bValue.localeCompare(aValue)\n }\n\n return 0\n })\n }\n\n if (subfoldersToSort) {\n sortedSubfolders = [...subfoldersToSort].sort((a, b) => {\n const aValue = a.value[sortOnToUse]\n const bValue = b.value[sortOnToUse]\n\n if (aValue == null && bValue == null) {\n return 0\n }\n if (aValue == null) {\n return sortDirectionToUse === 'asc' ? 1 : -1\n }\n if (bValue == null) {\n return sortDirectionToUse === 'asc' ? -1 : 1\n }\n\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n return sortDirectionToUse === 'asc'\n ? aValue.localeCompare(bValue)\n : bValue.localeCompare(aValue)\n }\n\n return 0\n })\n }\n\n return {\n newURL,\n sortedDocuments,\n sortedSubfolders,\n }\n },\n [formatFolderURL, sortDirection, sortOn],\n )\n\n const sortAndUpdateState: FolderContextValue['sortAndUpdateState'] = React.useCallback(\n ({ documentsToSort, sortDirection: sortDirectionArg, sortOn: sortOnArg, subfoldersToSort }) => {\n const { newURL, sortedDocuments, sortedSubfolders } = sortItems({\n documentsToSort,\n sortDirection: sortDirectionArg,\n sortOn: sortOnArg,\n subfoldersToSort,\n })\n\n if (sortedDocuments) {\n setDocuments(sortedDocuments)\n }\n if (sortedSubfolders) {\n setSubfolders(sortedSubfolders)\n }\n\n if (drawerDepth === 1) {\n // not in a drawer (default is 1)\n startRouteTransition(() => {\n router.replace(newURL)\n })\n }\n },\n [drawerDepth, router, sortItems, startRouteTransition],\n )\n\n const separateItems = React.useCallback(\n (\n items: FolderOrDocument[],\n ): {\n documents: FolderOrDocument[]\n folders: FolderOrDocument[]\n } => {\n return items.reduce(\n (acc, item) => {\n if (item.relationTo === folderCollectionSlug) {\n acc.folders.push(item)\n } else {\n acc.documents.push(item)\n }\n return acc\n },\n { documents: [] as FolderOrDocument[], folders: [] as FolderOrDocument[] },\n )\n },\n [folderCollectionSlug],\n )\n\n /**\n * Used to remove items from the current state.\n *\n * Does NOT handle the request to the server.\n * Useful when a document is deleted and it needs to be removed\n * from the current state.\n */\n const removeItems: FolderContextValue['removeItems'] = React.useCallback(\n (items) => {\n if (!items.length) {\n return\n }\n\n const separatedItems = separateItems(items)\n\n if (separatedItems.documents.length) {\n setDocuments((prevDocs) => {\n return prevDocs.filter(\n ({ itemKey }) => !separatedItems.documents.some((item) => item.itemKey === itemKey),\n )\n })\n }\n\n if (separatedItems.folders.length) {\n setSubfolders((prevFolders) => {\n return prevFolders.filter(\n ({ itemKey }) => !separatedItems.folders.some((item) => item.itemKey === itemKey),\n )\n })\n }\n\n clearSelections()\n },\n [clearSelections, separateItems, setDocuments, setSubfolders],\n )\n\n /**\n * Used to add items to the current state.\n *\n * Does NOT handle the request to the server.\n * Used when a document needs to be added to the current state.\n */\n const addItems = React.useCallback(\n (items: FolderOrDocument[]) => {\n if (!items.length) {\n return\n }\n\n const separatedItems = separateItems(items)\n\n let documentsToSort = undefined\n let subfoldersToSort = undefined\n\n if (separatedItems.documents.length) {\n documentsToSort = [...documents, ...separatedItems.documents]\n }\n\n if (separatedItems.folders.length) {\n subfoldersToSort = [...subfolders, ...separatedItems.folders]\n }\n\n const { sortedDocuments, sortedSubfolders } = sortItems({\n documentsToSort,\n subfoldersToSort,\n })\n\n const { sortedDocuments: sortedAllDocuments, sortedSubfolders: sortedAllSubfolders } =\n sortItems({\n documentsToSort,\n subfoldersToSort,\n })\n\n if (sortedDocuments) {\n setDocuments(sortedDocuments)\n setAllDocuments(sortedAllDocuments)\n }\n if (sortedSubfolders) {\n setSubfolders(sortedSubfolders)\n setAllSubfolders(sortedAllSubfolders)\n }\n },\n [documents, separateItems, sortItems, subfolders],\n )\n\n /**\n * Used to move items to a different folder.\n *\n * Handles the request to the server and updates the state.\n */\n const moveToFolder: FolderContextValue['moveToFolder'] = React.useCallback(\n async (args) => {\n const { itemsToMove: items, toFolderID } = args\n if (!items.length) {\n return\n }\n\n const movingCurrentFolder =\n items.length === 1 &&\n items[0].relationTo === folderCollectionSlug &&\n items[0].value.id === activeFolderID\n\n if (movingCurrentFolder) {\n const req = await fetch(\n `${serverURL}${routes.api}/${folderCollectionSlug}/${activeFolderID}`,\n {\n body: JSON.stringify({ [folderFieldName]: toFolderID || null }),\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n method: 'PATCH',\n },\n )\n if (req.status !== 200) {\n toast.error(t('general:error'))\n } else {\n const updatedDoc = await req.json()\n const folderRes = await getFolderData({\n folderID: updatedDoc.id,\n })\n setBreadcrumbs(folderRes?.breadcrumbs || [])\n setSubfolders(folderRes?.subfolders || [])\n setDocuments(folderRes?.documents || [])\n setActiveFolderID(updatedDoc.id)\n }\n setBreadcrumbs((prevBreadcrumbs) => {\n return prevBreadcrumbs.map((breadcrumb) => {\n if (breadcrumb.id === activeFolderID) {\n return {\n ...breadcrumb,\n id: toFolderID,\n }\n }\n return breadcrumb\n })\n })\n } else {\n const movingToCurrentFolder: boolean = toFolderID === activeFolderID\n const successfullyMovedFolderItems: FolderOrDocument[] = []\n const successfullyMovedDocumentItems: FolderOrDocument[] = []\n\n for (const [collectionSlug, ids] of Object.entries(groupItemIDsByRelation(items))) {\n const collectionConfig = getEntityConfig({ collectionSlug })\n const query = qs.stringify(\n {\n limit: 0,\n where: {\n id: {\n in: ids,\n },\n },\n },\n {\n addQueryPrefix: true,\n },\n )\n try {\n const res = await fetch(`${serverURL}${routes.api}/${collectionSlug}${query}`, {\n body: JSON.stringify({ [folderFieldName]: toFolderID || null }),\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n method: 'PATCH',\n })\n if (res.status === 200) {\n const json = await res.json()\n const { docs } = json as { docs: Document[] }\n const formattedItems: FolderOrDocument[] = docs.map<FolderOrDocument>(\n (doc: Document) =>\n formatFolderOrDocumentItem({\n folderFieldName: config.folders.fieldName,\n isUpload: Boolean(collectionConfig.upload),\n relationTo: collectionSlug,\n useAsTitle: collectionConfig.admin.useAsTitle,\n value: doc,\n }),\n )\n if (collectionSlug === folderCollectionSlug) {\n successfullyMovedFolderItems.push(...formattedItems)\n } else {\n successfullyMovedDocumentItems.push(...formattedItems)\n }\n }\n } catch (error) {\n toast.error(t('general:error'))\n // eslint-disable-next-line no-console\n console.error(error)\n continue\n }\n }\n\n if (movingToCurrentFolder) {\n // need to sort if we are moving (adding) items to the current folder\n const { newURL, sortedDocuments, sortedSubfolders } = sortItems({\n documentsToSort: successfullyMovedDocumentItems.length\n ? [...documents, ...successfullyMovedDocumentItems]\n : undefined,\n subfoldersToSort: successfullyMovedFolderItems.length\n ? [...subfolders, ...successfullyMovedFolderItems]\n : undefined,\n })\n\n if (sortedDocuments) {\n setDocuments(sortedDocuments)\n }\n if (sortedSubfolders) {\n setSubfolders(sortedSubfolders)\n }\n\n if (drawerDepth === 1 && newURL) {\n // not in a drawer (default is 1)\n router.replace(newURL)\n }\n } else {\n // no need to sort, just remove the items from the current state\n const filteredDocuments = successfullyMovedDocumentItems.length\n ? documents.filter(\n ({ itemKey }) =>\n !successfullyMovedDocumentItems.some((item) => item.itemKey === itemKey),\n )\n : undefined\n const filteredSubfolders = successfullyMovedFolderItems.length\n ? subfolders.filter(\n ({ itemKey }) =>\n !successfullyMovedFolderItems.some((item) => item.itemKey === itemKey),\n )\n : undefined\n\n if (filteredDocuments) {\n setDocuments(filteredDocuments)\n }\n if (filteredSubfolders) {\n setSubfolders(filteredSubfolders)\n }\n }\n }\n\n clearSelections()\n },\n [\n folderCollectionSlug,\n activeFolderID,\n clearSelections,\n serverURL,\n routes.api,\n t,\n getFolderData,\n getEntityConfig,\n sortItems,\n documents,\n subfolders,\n drawerDepth,\n router,\n ],\n )\n\n /**\n * Used to rename a folder in the current state.\n *\n * Does NOT handle the request to the server.\n * Used when the user renames a folder using the drawer\n * and it needs to be updated in the current state.\n */\n const renameFolder: FolderContextValue['renameFolder'] = React.useCallback(\n ({ folderID: updatedFolderID, newName }) => {\n if (activeFolderID === updatedFolderID) {\n // updating the curent folder\n setBreadcrumbs((prevBreadcrumbs) => {\n return prevBreadcrumbs.map((breadcrumb) => {\n if (breadcrumb.id === updatedFolderID) {\n return {\n ...breadcrumb,\n name: newName,\n }\n }\n return breadcrumb\n })\n })\n } else {\n setSubfolders((prevFolders) => {\n return prevFolders.map((folder) => {\n if (folder.value.id === updatedFolderID && folder.relationTo === folderCollectionSlug) {\n return {\n ...folder,\n value: {\n ...folder.value,\n _folderOrDocumentTitle: newName,\n },\n }\n }\n return folder\n })\n })\n }\n },\n [folderCollectionSlug, setSubfolders, activeFolderID],\n )\n\n return (\n <Context\n value={{\n addItems,\n breadcrumbs,\n clearSelections,\n currentFolder: breadcrumbs?.[0]?.id\n ? {\n itemKey: `${folderCollectionSlug}-${activeFolderID}`,\n relationTo: folderCollectionSlug,\n value: {\n id: activeFolderID,\n _folderOrDocumentTitle: breadcrumbs[breadcrumbs.length - 1]?.name,\n folderID: breadcrumbs[breadcrumbs.length - 2]?.id || null,\n },\n }\n : null,\n documents,\n filterItems,\n focusedRowIndex,\n folderCollectionConfig,\n folderCollectionSlug,\n folderFieldName,\n folderID: activeFolderID,\n getSelectedItems,\n isDragging,\n lastSelectedIndex,\n moveToFolder,\n onItemClick,\n onItemKeyPress,\n removeItems,\n renameFolder,\n search,\n selectedIndexes,\n setBreadcrumbs,\n setFocusedRowIndex,\n setFolderID: setNewActiveFolderID,\n setIsDragging,\n sortAndUpdateState,\n sortDirection,\n sortOn,\n subfolders,\n visibleCollectionSlugs,\n }}\n >\n {children}\n </Context>\n )\n}\n\nexport function useFolder(): FolderContextValue {\n const context = React.use(Context)\n\n if (context === undefined) {\n throw new Error('useFolder must be used within a FolderProvider')\n }\n\n return context\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useRouter","extractID","formatAdminURL","formatFolderOrDocumentItem","qs","React","toast","useDrawerDepth","useConfig","useRouteTransition","useTranslation","getMetaSelection","getShiftSelection","groupItemIDsByRelation","Context","createContext","addItems","breadcrumbs","clearSelections","currentFolder","documents","filterItems","undefined","focusedRowIndex","folderCollectionConfig","folderCollectionSlug","folderFieldName","folderID","getSelectedItems","isDragging","lastSelectedIndex","moveToFolder","Promise","resolve","onItemClick","onItemKeyPress","removeItems","renameFolder","search","selectedIndexes","Set","setBreadcrumbs","setFocusedRowIndex","setFolderID","setIsDragging","sortAndUpdateState","sortDirection","sortOn","subfolders","visibleCollectionSlugs","filterOutItems","items","relationTo","searchLower","toLowerCase","filter","item","itemTitle","value","_folderOrDocumentTitle","itemRelationTo","includes","FolderProvider","allowMultiSelection","_breadcrumbsFromProps","children","collectionSlug","allDocumentsFromProps","filteredCollectionSlugs","folderCollectionSlugs","_folderIDFromProps","_searchFromProps","sort","subfoldersFromProps","parentFolderContext","useFolder","config","getEntityConfig","folders","fieldName","routes","serverURL","drawerDepth","t","router","startRouteTransition","useState","collections","find","collection","slug","setSelectedIndexes","setLastSelectedIndex","setVisibleCollectionSlugs","activeFolderID","setActiveFolderID","allSubfolders","setAllSubfolders","setSubfolders","allDocuments","setAllDocuments","setDocuments","setSearch","baseFolderPath","admin","browseByFolder","setSortDirection","startsWith","setSortOn","replace","lastClickTime","useRef","totalCount","length","formatFolderURL","useCallback","args","newFolderID","params","sortBy","adminRoute","path","stringify","addQueryPrefix","getFolderData","_search","searchFilter","trim","query","folderDataReq","fetch","api","credentials","headers","status","folderDataRes","json","setNewActiveFolderID","toFolderID","push","Array","from","reduce","acc","index","navigateAfterSelection","docID","event","code","ctrlKey","metaKey","shiftKey","isShiftPressed","isCtrlPressed","newSelectedIndexes","preventDefault","nextIndex","Math","min","selectFromIndex","selectToIndex","prevIndex","max","size","_","i","currentSelection","toggleIndex","doubleClicked","type","has","now","Date","current","_relationTo","isArray","filteredDocuments","filteredSubfolders","res","sortItems","documentsToSort","sortDirectionArg","sortOnArg","subfoldersToSort","sortedDocuments","sortedSubfolders","sortDirectionToUse","sortOnToUse","newURL","a","b","aValue","bValue","localeCompare","separateItems","separatedItems","prevDocs","itemKey","some","prevFolders","itemsToAdd","parentItems","destinationFolderID","sortedAllDocuments","sortedAllSubfolders","itemsToMove","movingCurrentFolder","id","req","body","JSON","method","error","updatedDoc","folderRes","prevBreadcrumbs","map","breadcrumb","movingToCurrentFolder","successfullyMovedFolderItems","successfullyMovedDocumentItems","ids","Object","entries","collectionConfig","limit","where","in","docs","formattedItems","doc","isUpload","Boolean","upload","useAsTitle","console","updatedFolderID","newName","name","folder","_jsx","context","use","Error"],"sources":["../../../src/providers/Folders/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig, CollectionSlug, Document } from 'payload'\nimport type { FolderBreadcrumb, FolderOrDocument, GetFolderDataResult } from 'payload/shared'\n\nimport { useRouter } from 'next/navigation.js'\nimport { extractID, formatAdminURL, formatFolderOrDocumentItem } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { useDrawerDepth } from '../../elements/Drawer/index.js'\nimport { useConfig } from '../Config/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\nimport { useTranslation } from '../Translation/index.js'\nimport { getMetaSelection, getShiftSelection, groupItemIDsByRelation } from './selection.js'\ntype SortKeys = keyof Pick<\n FolderOrDocument['value'],\n '_folderOrDocumentTitle' | 'createdAt' | 'updatedAt'\n>\ntype SortDirection = 'asc' | 'desc'\nexport type FileCardData = {\n filename: string\n id: number | string\n mimeType: string\n name: string\n url: string\n}\n\nexport type FolderContextValue = {\n addItems: (args: FolderOrDocument[]) => void\n breadcrumbs?: FolderBreadcrumb[]\n clearSelections: () => void\n currentFolder?: FolderOrDocument | null\n documents?: FolderOrDocument[]\n filterItems: (args: { relationTo?: CollectionSlug[]; search?: string }) => Promise<void>\n focusedRowIndex: number\n folderCollectionConfig: ClientCollectionConfig\n folderCollectionSlug: string\n folderFieldName: string\n folderID?: number | string\n getSelectedItems?: () => FolderOrDocument[]\n isDragging: boolean\n lastSelectedIndex: null | number\n moveToFolder: (args: {\n itemsToMove: FolderOrDocument[]\n toFolderID?: number | string\n }) => Promise<void>\n onItemClick: (args: {\n event: React.MouseEvent\n index: number\n item: FolderOrDocument\n }) => Promise<void> | void\n onItemKeyPress: (args: {\n event: React.KeyboardEvent\n index: number\n item: FolderOrDocument\n }) => Promise<void> | void\n removeItems: (args: FolderOrDocument[]) => void\n renameFolder: (args: { folderID: number | string; newName: string }) => void\n search: string\n selectedIndexes: Set<number>\n setBreadcrumbs: React.Dispatch<React.SetStateAction<FolderBreadcrumb[]>>\n setFocusedRowIndex: React.Dispatch<React.SetStateAction<number>>\n setFolderID: (args: { folderID: number | string }) => Promise<void> | void\n setIsDragging: React.Dispatch<React.SetStateAction<boolean>>\n sortAndUpdateState: (args: {\n documentsToSort?: FolderOrDocument[]\n sortDirection?: 'asc' | 'desc'\n sortOn?: SortKeys\n subfoldersToSort?: FolderOrDocument[]\n }) => void\n sortDirection: SortDirection\n sortOn: SortKeys\n subfolders?: FolderOrDocument[]\n visibleCollectionSlugs: CollectionSlug[]\n}\n\nconst Context = React.createContext<FolderContextValue>({\n addItems: () => {},\n breadcrumbs: [],\n clearSelections: () => {},\n currentFolder: null,\n documents: [],\n filterItems: () => undefined,\n focusedRowIndex: -1,\n folderCollectionConfig: null,\n folderCollectionSlug: '',\n folderFieldName: 'folder',\n folderID: undefined,\n getSelectedItems: () => [],\n isDragging: false,\n lastSelectedIndex: null,\n moveToFolder: () => Promise.resolve(undefined),\n onItemClick: () => undefined,\n onItemKeyPress: () => undefined,\n removeItems: () => undefined,\n renameFolder: () => undefined,\n search: '',\n selectedIndexes: new Set(),\n setBreadcrumbs: () => {},\n setFocusedRowIndex: () => -1,\n setFolderID: () => null,\n setIsDragging: () => false,\n sortAndUpdateState: () => undefined,\n sortDirection: 'asc',\n sortOn: '_folderOrDocumentTitle',\n subfolders: [],\n visibleCollectionSlugs: [],\n})\n\nfunction filterOutItems({\n items,\n relationTo,\n search,\n}: {\n items: FolderOrDocument[]\n relationTo?: CollectionSlug[]\n search?: string\n}) {\n if (typeof search !== 'string' && relationTo === undefined) {\n return items\n }\n\n const searchLower = (search || '').toLowerCase()\n\n return items.filter((item) => {\n const itemTitle = item.value._folderOrDocumentTitle.toLowerCase()\n const itemRelationTo = item.relationTo\n\n return (\n (relationTo ? relationTo.includes(itemRelationTo) : true) &&\n (!searchLower || itemTitle.includes(searchLower))\n )\n })\n}\n\nexport type FolderProviderProps = {\n readonly allowMultiSelection?: boolean\n /**\n * Breadcrumbs for the current folder\n */\n readonly breadcrumbs?: FolderBreadcrumb[]\n /**\n * Children to render inside the provider\n */\n readonly children: React.ReactNode\n /**\n * Required for collection-folder views\n */\n readonly collectionSlug?: CollectionSlug\n /**\n * All documents in the current folder\n */\n readonly documents: FolderOrDocument[]\n /**\n * The collection slugs that are being viewed\n */\n readonly filteredCollectionSlugs?: CollectionSlug[]\n /**\n * Folder enabled collection slugs\n */\n readonly folderCollectionSlugs: CollectionSlug[]\n /**\n * The ID of the current folder\n */\n readonly folderID?: number | string\n /**\n * The intial search query\n */\n readonly search?: string\n /**\n * The sort order of the documents\n *\n * @example\n * `name` for descending\n * `-name` for ascending\n */\n readonly sort?: `-${SortKeys}` | SortKeys\n /**\n * All subfolders in the current folder\n */\n readonly subfolders: FolderOrDocument[]\n}\nexport function FolderProvider({\n allowMultiSelection = true,\n breadcrumbs: _breadcrumbsFromProps = [],\n children,\n collectionSlug,\n documents: allDocumentsFromProps = [],\n filteredCollectionSlugs,\n folderCollectionSlugs = [],\n folderID: _folderIDFromProps = undefined,\n search: _searchFromProps,\n sort,\n subfolders: subfoldersFromProps = [],\n}: FolderProviderProps) {\n const parentFolderContext = useFolder()\n const { config, getEntityConfig } = useConfig()\n const folderFieldName = config.folders.fieldName\n const { routes, serverURL } = config\n const drawerDepth = useDrawerDepth()\n const { t } = useTranslation()\n const router = useRouter()\n const { startRouteTransition } = useRouteTransition()\n\n const [folderCollectionConfig] = React.useState(() =>\n config.collections.find((collection) => collection.slug === config.folders.slug),\n )\n const folderCollectionSlug = folderCollectionConfig.slug\n\n const [isDragging, setIsDragging] = React.useState(false)\n const [selectedIndexes, setSelectedIndexes] = React.useState<Set<number>>(() => new Set())\n const [focusedRowIndex, setFocusedRowIndex] = React.useState(-1)\n const [lastSelectedIndex, setLastSelectedIndex] = React.useState<null | number>(null)\n const [visibleCollectionSlugs, setVisibleCollectionSlugs] = React.useState<CollectionSlug[]>(\n filteredCollectionSlugs || [...folderCollectionSlugs, folderCollectionSlug],\n )\n const [activeFolderID, setActiveFolderID] =\n React.useState<FolderContextValue['folderID']>(_folderIDFromProps)\n const [breadcrumbs, setBreadcrumbs] =\n React.useState<FolderContextValue['breadcrumbs']>(_breadcrumbsFromProps)\n const [allSubfolders, setAllSubfolders] = React.useState<FolderOrDocument[]>(subfoldersFromProps)\n const [subfolders, setSubfolders] = React.useState<FolderContextValue['subfolders']>(() => {\n return filterOutItems({\n items: allSubfolders,\n relationTo: visibleCollectionSlugs.includes(folderCollectionSlug)\n ? [folderCollectionSlug]\n : [],\n search: _searchFromProps,\n })\n })\n const [allDocuments, setAllDocuments] = React.useState<FolderOrDocument[]>(allDocumentsFromProps)\n const [documents, setDocuments] = React.useState<FolderContextValue['documents']>(() =>\n filterOutItems({\n items: allDocuments,\n relationTo: visibleCollectionSlugs,\n search: _searchFromProps,\n }),\n )\n const [search, setSearch] = React.useState<string | undefined>(_searchFromProps)\n const [baseFolderPath] = React.useState<`/${string}`>(() => {\n if (collectionSlug) {\n return `/collections/${collectionSlug}/${folderCollectionSlug}`\n } else {\n return config.admin.routes.browseByFolder\n }\n })\n const [sortDirection, setSortDirection] = React.useState<SortDirection>(() => {\n if (sort) {\n return sort.startsWith('-') ? 'desc' : 'asc'\n }\n return 'asc'\n })\n const [sortOn, setSortOn] = React.useState<SortKeys>(() => {\n if (sort) {\n return sort.replace(/^-/, '') as SortKeys\n }\n return '_folderOrDocumentTitle'\n })\n\n const lastClickTime = React.useRef<null | number>(null)\n const totalCount = subfolders.length + documents.length\n\n const formatFolderURL = React.useCallback(\n (args: {\n folderID?: number | string\n relationTo?: string[]\n search?: string\n sortBy?: SortKeys\n sortDirection?: SortDirection\n }) => {\n const newFolderID = 'folderID' in args ? args.folderID : activeFolderID\n const params = {\n relationTo:\n 'relationTo' in args\n ? args.relationTo\n : collectionSlug\n ? undefined\n : visibleCollectionSlugs,\n search: 'search' in args ? args.search : search,\n sortBy: 'sortBy' in args ? args.sortBy : sortOn,\n sortDirection: 'sortDirection' in args ? args.sortDirection : sortDirection,\n }\n\n return formatAdminURL({\n adminRoute: config.routes.admin,\n path: `${baseFolderPath}${newFolderID ? `/${newFolderID}` : ''}${qs.stringify(params, {\n addQueryPrefix: true,\n })}`,\n })\n },\n [\n activeFolderID,\n baseFolderPath,\n collectionSlug,\n config.routes.admin,\n search,\n sortDirection,\n sortOn,\n visibleCollectionSlugs,\n ],\n )\n\n const clearSelections = React.useCallback(() => {\n setFocusedRowIndex(-1)\n setSelectedIndexes(new Set())\n setLastSelectedIndex(undefined)\n }, [])\n\n /**\n * Used to populate drawer data.\n *\n * This is used when the user navigates to a folder.\n */\n const getFolderData = React.useCallback(\n async ({ folderID, search: _search = undefined }): Promise<GetFolderDataResult> => {\n // if folderID is not set, we want to search all documents\n const searchFilter = !folderID\n ? ((typeof _search === 'string' ? _search : search) || '').trim()\n : undefined\n const query = qs.stringify(\n {\n collectionSlug,\n folderID,\n search: searchFilter,\n },\n { addQueryPrefix: true },\n )\n\n const folderDataReq = await fetch(\n `${serverURL}${routes.api}/${folderCollectionSlug}/populate-folder-data${query}`,\n {\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n },\n )\n\n if (folderDataReq.status === 200) {\n const folderDataRes: GetFolderDataResult = await folderDataReq.json()\n setAllSubfolders(folderDataRes.subfolders || [])\n setAllDocuments(folderDataRes.documents || [])\n return folderDataRes\n } else {\n return {\n breadcrumbs: [],\n documents: [],\n subfolders: [],\n }\n }\n },\n [folderCollectionSlug, search, routes.api, serverURL, collectionSlug],\n )\n\n const setNewActiveFolderID: FolderContextValue['setFolderID'] = React.useCallback(\n async ({ folderID: toFolderID }) => {\n clearSelections()\n if (drawerDepth === 1) {\n // not in a drawer (default is 1)\n startRouteTransition(() =>\n router.push(\n formatFolderURL({\n folderID: toFolderID,\n }),\n ),\n )\n } else {\n const folderDataRes = await getFolderData({ folderID: toFolderID })\n setBreadcrumbs(folderDataRes?.breadcrumbs || [])\n setSubfolders(folderDataRes?.subfolders || [])\n setDocuments(folderDataRes?.documents || [])\n setActiveFolderID(toFolderID)\n }\n },\n [clearSelections, drawerDepth, startRouteTransition, router, formatFolderURL, getFolderData],\n )\n\n const getSelectedItems = React.useCallback(() => {\n return Array.from(selectedIndexes).reduce((acc, index) => {\n const item = [...subfolders, ...documents][index]\n if (item) {\n acc.push(item)\n }\n return acc\n }, [])\n }, [documents, selectedIndexes, subfolders])\n\n const navigateAfterSelection = React.useCallback(\n async ({ collectionSlug, docID }: { collectionSlug: string; docID: number | string }) => {\n if (collectionSlug === folderCollectionSlug) {\n await setNewActiveFolderID({ folderID: docID })\n } else if (collectionSlug) {\n router.push(\n formatAdminURL({\n adminRoute: config.routes.admin,\n path: `/collections/${collectionSlug}/${docID}`,\n }),\n )\n }\n },\n [setNewActiveFolderID, folderCollectionSlug, router, config.routes.admin],\n )\n\n const onItemKeyPress: FolderContextValue['onItemKeyPress'] = React.useCallback(\n async ({ event, index, item }) => {\n const { code, ctrlKey, metaKey, shiftKey } = event\n const isShiftPressed = shiftKey\n const isCtrlPressed = ctrlKey || metaKey\n let newSelectedIndexes: Set<number> = selectedIndexes\n\n switch (code) {\n case 'ArrowDown': {\n event.preventDefault()\n const nextIndex = Math.min(index + 1, totalCount - 1)\n setFocusedRowIndex(nextIndex)\n\n if (isCtrlPressed) {\n break\n }\n\n if (allowMultiSelection && isShiftPressed) {\n newSelectedIndexes = getShiftSelection({\n selectFromIndex: Math.min(lastSelectedIndex, totalCount),\n selectToIndex: Math.min(nextIndex, totalCount),\n })\n } else {\n setLastSelectedIndex(nextIndex)\n newSelectedIndexes = new Set([nextIndex])\n }\n break\n }\n case 'ArrowUp': {\n event.preventDefault()\n const prevIndex = Math.max(index - 1, 0)\n setFocusedRowIndex(prevIndex)\n\n if (isCtrlPressed) {\n break\n }\n\n if (allowMultiSelection && isShiftPressed) {\n newSelectedIndexes = getShiftSelection({\n selectFromIndex: lastSelectedIndex,\n selectToIndex: prevIndex,\n })\n } else {\n setLastSelectedIndex(prevIndex)\n newSelectedIndexes = new Set([prevIndex])\n }\n break\n }\n case 'Enter': {\n if (selectedIndexes.size === 1) {\n newSelectedIndexes = new Set([])\n setFocusedRowIndex(undefined)\n }\n break\n }\n case 'Escape': {\n setFocusedRowIndex(undefined)\n setSelectedIndexes(new Set([]))\n newSelectedIndexes = new Set([])\n break\n }\n case 'KeyA': {\n if (allowMultiSelection && isCtrlPressed) {\n event.preventDefault()\n setFocusedRowIndex(totalCount - 1)\n newSelectedIndexes = new Set(Array.from({ length: totalCount }, (_, i) => i))\n }\n break\n }\n case 'Space': {\n if (allowMultiSelection && isShiftPressed) {\n event.preventDefault()\n newSelectedIndexes = getMetaSelection({\n currentSelection: newSelectedIndexes,\n toggleIndex: index,\n })\n setLastSelectedIndex(index)\n } else {\n event.preventDefault()\n newSelectedIndexes = new Set([index])\n setLastSelectedIndex(index)\n }\n break\n }\n case 'Tab': {\n if (allowMultiSelection && isShiftPressed) {\n const prevIndex = index - 1\n if (prevIndex < 0 && newSelectedIndexes.size > 0) {\n setFocusedRowIndex(prevIndex)\n }\n } else {\n const nextIndex = index + 1\n if (nextIndex === totalCount && newSelectedIndexes.size > 0) {\n setFocusedRowIndex(totalCount - 1)\n }\n }\n break\n }\n }\n\n setSelectedIndexes(newSelectedIndexes)\n if (selectedIndexes.size === 1 && code === 'Enter') {\n await navigateAfterSelection({\n collectionSlug: item.relationTo,\n docID: extractID(item.value),\n })\n }\n },\n [allowMultiSelection, lastSelectedIndex, navigateAfterSelection, selectedIndexes, totalCount],\n )\n\n const onItemClick: FolderContextValue['onItemClick'] = React.useCallback(\n async ({ event, index, item }) => {\n let doubleClicked: boolean = false\n const isCtrlPressed = event.ctrlKey || event.metaKey\n const isShiftPressed = event.shiftKey\n let newSelectedIndexes = new Set(selectedIndexes)\n\n if (allowMultiSelection && isCtrlPressed) {\n newSelectedIndexes = getMetaSelection({\n currentSelection: newSelectedIndexes,\n toggleIndex: index,\n })\n } else if (allowMultiSelection && isShiftPressed && lastSelectedIndex !== undefined) {\n newSelectedIndexes = getShiftSelection({\n selectFromIndex: lastSelectedIndex,\n selectToIndex: index,\n })\n } else if (allowMultiSelection && event.type === 'pointermove') {\n // on drag start of an unselected item\n if (!selectedIndexes.has(index)) {\n newSelectedIndexes = new Set([index])\n }\n setLastSelectedIndex(index)\n } else {\n // Normal click - select single item\n newSelectedIndexes = new Set([index])\n const now = Date.now()\n doubleClicked = now - lastClickTime.current < 400 && lastSelectedIndex === index\n lastClickTime.current = now\n setLastSelectedIndex(index)\n }\n\n if (newSelectedIndexes.size === 0) {\n setFocusedRowIndex(undefined)\n } else {\n setFocusedRowIndex(index)\n }\n\n setSelectedIndexes(newSelectedIndexes)\n if (doubleClicked) {\n await navigateAfterSelection({\n collectionSlug: item.relationTo,\n docID: extractID(item.value),\n })\n }\n },\n [selectedIndexes, lastSelectedIndex, allowMultiSelection, navigateAfterSelection],\n )\n\n const filterItems: FolderContextValue['filterItems'] = React.useCallback(\n async ({ relationTo: _relationTo, search: _search }) => {\n const relationTo = Array.isArray(_relationTo) ? _relationTo : visibleCollectionSlugs\n const searchFilter = ((typeof _search === 'string' ? _search : search) || '').trim()\n\n let filteredDocuments: FolderOrDocument[] = allDocuments\n let filteredSubfolders: FolderOrDocument[] = allSubfolders\n\n if (collectionSlug && !activeFolderID && _search !== search) {\n // this allows us to search all documents in the collection when we are not in a folder and in the folder-collection view\n const res = await getFolderData({\n folderID: activeFolderID,\n search: searchFilter,\n })\n filteredDocuments = filterOutItems({\n items: res.documents,\n relationTo,\n search: searchFilter,\n })\n filteredSubfolders = filterOutItems({\n items: res.subfolders,\n relationTo: [folderCollectionSlug],\n search: searchFilter,\n })\n } else {\n filteredDocuments = filterOutItems({\n items: allDocuments,\n relationTo,\n search: searchFilter,\n })\n filteredSubfolders = filterOutItems({\n items: allSubfolders,\n relationTo: relationTo.includes(folderCollectionSlug) ? [folderCollectionSlug] : [],\n search: searchFilter,\n })\n }\n\n setDocuments(filteredDocuments)\n setSubfolders(filteredSubfolders)\n setSearch(searchFilter)\n setVisibleCollectionSlugs(relationTo)\n\n if (drawerDepth === 1) {\n router.replace(\n formatFolderURL({\n relationTo,\n search: searchFilter || undefined,\n }),\n )\n }\n },\n [\n collectionSlug,\n visibleCollectionSlugs,\n search,\n activeFolderID,\n allDocuments,\n allSubfolders,\n folderCollectionSlug,\n drawerDepth,\n getFolderData,\n router,\n formatFolderURL,\n ],\n )\n\n const sortItems = React.useCallback(\n ({\n documentsToSort,\n sortDirection: sortDirectionArg,\n sortOn: sortOnArg,\n subfoldersToSort,\n }: Parameters<FolderContextValue['sortAndUpdateState']>[0]): {\n newURL?: string\n sortedDocuments?: FolderOrDocument[]\n sortedSubfolders?: FolderOrDocument[]\n } => {\n let sortedDocuments: FolderOrDocument[] | undefined\n let sortedSubfolders: FolderOrDocument[] | undefined\n const sortDirectionToUse = sortDirectionArg || sortDirection\n const sortOnToUse = sortOnArg || sortOn\n\n if (sortOnArg) {\n setSortOn(sortOnArg)\n }\n\n if (sortDirectionArg) {\n setSortDirection(sortDirectionArg)\n }\n\n const newURL = formatFolderURL({\n sortBy: sortOnArg || sortOn,\n sortDirection: sortDirectionArg || sortDirection,\n })\n\n if (documentsToSort) {\n sortedDocuments = [...documentsToSort].sort((a, b) => {\n const aValue = a.value[sortOnToUse]\n const bValue = b.value[sortOnToUse]\n\n if (aValue == null && bValue == null) {\n return 0\n }\n if (aValue == null) {\n return sortDirectionToUse === 'asc' ? 1 : -1\n }\n if (bValue == null) {\n return sortDirectionToUse === 'asc' ? -1 : 1\n }\n\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n return sortDirectionToUse === 'asc'\n ? aValue.localeCompare(bValue)\n : bValue.localeCompare(aValue)\n }\n\n return 0\n })\n }\n\n if (subfoldersToSort) {\n sortedSubfolders = [...subfoldersToSort].sort((a, b) => {\n const aValue = a.value[sortOnToUse]\n const bValue = b.value[sortOnToUse]\n\n if (aValue == null && bValue == null) {\n return 0\n }\n if (aValue == null) {\n return sortDirectionToUse === 'asc' ? 1 : -1\n }\n if (bValue == null) {\n return sortDirectionToUse === 'asc' ? -1 : 1\n }\n\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n return sortDirectionToUse === 'asc'\n ? aValue.localeCompare(bValue)\n : bValue.localeCompare(aValue)\n }\n\n return 0\n })\n }\n\n return {\n newURL,\n sortedDocuments,\n sortedSubfolders,\n }\n },\n [formatFolderURL, sortDirection, sortOn],\n )\n\n const sortAndUpdateState: FolderContextValue['sortAndUpdateState'] = React.useCallback(\n ({ documentsToSort, sortDirection: sortDirectionArg, sortOn: sortOnArg, subfoldersToSort }) => {\n const { newURL, sortedDocuments, sortedSubfolders } = sortItems({\n documentsToSort,\n sortDirection: sortDirectionArg,\n sortOn: sortOnArg,\n subfoldersToSort,\n })\n\n if (sortedDocuments) {\n setDocuments(sortedDocuments)\n }\n if (sortedSubfolders) {\n setSubfolders(sortedSubfolders)\n }\n\n if (drawerDepth === 1) {\n // not in a drawer (default is 1)\n startRouteTransition(() => {\n router.replace(newURL)\n })\n }\n },\n [drawerDepth, router, sortItems, startRouteTransition],\n )\n\n const separateItems = React.useCallback(\n (\n items: FolderOrDocument[],\n ): {\n documents: FolderOrDocument[]\n folders: FolderOrDocument[]\n } => {\n return items.reduce(\n (acc, item) => {\n if (item.relationTo === folderCollectionSlug) {\n acc.folders.push(item)\n } else {\n acc.documents.push(item)\n }\n return acc\n },\n { documents: [] as FolderOrDocument[], folders: [] as FolderOrDocument[] },\n )\n },\n [folderCollectionSlug],\n )\n\n /**\n * Used to remove items from the current state.\n *\n * Does NOT handle the request to the server.\n * Useful when a document is deleted and it needs to be removed\n * from the current state.\n */\n const removeItems: FolderContextValue['removeItems'] = React.useCallback(\n (items) => {\n if (!items.length) {\n return\n }\n\n const separatedItems = separateItems(items)\n\n if (separatedItems.documents.length) {\n setDocuments((prevDocs) => {\n return prevDocs.filter(\n ({ itemKey }) => !separatedItems.documents.some((item) => item.itemKey === itemKey),\n )\n })\n }\n\n if (separatedItems.folders.length) {\n setSubfolders((prevFolders) => {\n return prevFolders.filter(\n ({ itemKey }) => !separatedItems.folders.some((item) => item.itemKey === itemKey),\n )\n })\n }\n\n clearSelections()\n },\n [clearSelections, separateItems, setDocuments, setSubfolders],\n )\n\n /**\n * Used to add items to the current state.\n *\n * Does NOT handle the request to the server.\n * Used when a document needs to be added to the current state.\n */\n const addItems: FolderContextValue['addItems'] = React.useCallback(\n (itemsToAdd) => {\n const { items, parentItems } = itemsToAdd.reduce(\n (acc, item) => {\n const destinationFolderID = item.value.folderID || null\n if (\n (item.value.folderID && item.value.folderID === activeFolderID) ||\n (!activeFolderID && !item.value.folderID)\n ) {\n acc.items.push(item)\n }\n\n if (\n parentFolderContext &&\n ((parentFolderContext.folderID &&\n destinationFolderID === parentFolderContext.folderID) ||\n (!parentFolderContext.folderID && !item.value.folderID))\n ) {\n acc.parentItems.push(item)\n }\n\n return acc\n },\n { items: [], parentItems: [] },\n )\n\n if (parentItems.length) {\n parentFolderContext.addItems(parentItems)\n }\n\n if (!items.length) {\n return\n }\n\n const separatedItems = separateItems(items)\n\n let documentsToSort = undefined\n let subfoldersToSort = undefined\n\n if (separatedItems.documents.length) {\n documentsToSort = [...documents, ...separatedItems.documents]\n }\n\n if (separatedItems.folders.length) {\n subfoldersToSort = [...subfolders, ...separatedItems.folders]\n }\n\n const { sortedDocuments, sortedSubfolders } = sortItems({\n documentsToSort,\n subfoldersToSort,\n })\n\n const { sortedDocuments: sortedAllDocuments, sortedSubfolders: sortedAllSubfolders } =\n sortItems({\n documentsToSort,\n subfoldersToSort,\n })\n\n if (sortedDocuments) {\n setDocuments(sortedDocuments)\n setAllDocuments(sortedAllDocuments)\n }\n if (sortedSubfolders) {\n setSubfolders(sortedSubfolders)\n setAllSubfolders(sortedAllSubfolders)\n }\n },\n [activeFolderID, documents, separateItems, sortItems, subfolders],\n )\n\n /**\n * Used to move items to a different folder.\n *\n * Handles the request to the server and updates the state.\n */\n const moveToFolder: FolderContextValue['moveToFolder'] = React.useCallback(\n async (args) => {\n const { itemsToMove: items, toFolderID } = args\n if (!items.length) {\n return\n }\n\n const movingCurrentFolder =\n items.length === 1 &&\n items[0].relationTo === folderCollectionSlug &&\n items[0].value.id === activeFolderID\n\n if (movingCurrentFolder) {\n const req = await fetch(\n `${serverURL}${routes.api}/${folderCollectionSlug}/${activeFolderID}?depth=0`,\n {\n body: JSON.stringify({ [folderFieldName]: toFolderID || null }),\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n method: 'PATCH',\n },\n )\n if (req.status !== 200) {\n toast.error(t('general:error'))\n } else {\n const updatedDoc = await req.json()\n const folderRes = await getFolderData({\n folderID: updatedDoc.id,\n })\n setBreadcrumbs(folderRes?.breadcrumbs || [])\n setSubfolders(folderRes?.subfolders || [])\n setDocuments(folderRes?.documents || [])\n setActiveFolderID(updatedDoc.id)\n }\n setBreadcrumbs((prevBreadcrumbs) => {\n return prevBreadcrumbs.map((breadcrumb) => {\n if (breadcrumb.id === activeFolderID) {\n return {\n ...breadcrumb,\n id: toFolderID,\n }\n }\n return breadcrumb\n })\n })\n } else {\n const movingToCurrentFolder: boolean = toFolderID === activeFolderID\n const successfullyMovedFolderItems: FolderOrDocument[] = []\n const successfullyMovedDocumentItems: FolderOrDocument[] = []\n\n for (const [collectionSlug, ids] of Object.entries(groupItemIDsByRelation(items))) {\n const collectionConfig = getEntityConfig({ collectionSlug })\n const query = qs.stringify(\n {\n limit: 0,\n where: {\n id: {\n in: ids,\n },\n },\n },\n {\n addQueryPrefix: true,\n },\n )\n try {\n const res = await fetch(`${serverURL}${routes.api}/${collectionSlug}${query}`, {\n body: JSON.stringify({ [folderFieldName]: toFolderID || null }),\n credentials: 'include',\n headers: {\n 'content-type': 'application/json',\n },\n method: 'PATCH',\n })\n if (res.status === 200) {\n const json = await res.json()\n const { docs } = json as { docs: Document[] }\n const formattedItems: FolderOrDocument[] = docs.map<FolderOrDocument>(\n (doc: Document) =>\n formatFolderOrDocumentItem({\n folderFieldName: config.folders.fieldName,\n isUpload: Boolean(collectionConfig.upload),\n relationTo: collectionSlug,\n useAsTitle: collectionConfig.admin.useAsTitle,\n value: doc,\n }),\n )\n if (collectionSlug === folderCollectionSlug) {\n successfullyMovedFolderItems.push(...formattedItems)\n } else {\n successfullyMovedDocumentItems.push(...formattedItems)\n }\n }\n } catch (error) {\n toast.error(t('general:error'))\n // eslint-disable-next-line no-console\n console.error(error)\n continue\n }\n }\n\n if (movingToCurrentFolder) {\n // need to sort if we are moving (adding) items to the current folder\n const { newURL, sortedDocuments, sortedSubfolders } = sortItems({\n documentsToSort: successfullyMovedDocumentItems.length\n ? [...documents, ...successfullyMovedDocumentItems]\n : undefined,\n subfoldersToSort: successfullyMovedFolderItems.length\n ? [...subfolders, ...successfullyMovedFolderItems]\n : undefined,\n })\n\n if (sortedDocuments) {\n setDocuments(sortedDocuments)\n }\n if (sortedSubfolders) {\n setSubfolders(sortedSubfolders)\n }\n\n if (drawerDepth === 1 && newURL) {\n // not in a drawer (default is 1)\n router.replace(newURL)\n }\n } else {\n // no need to sort, just remove the items from the current state\n const filteredDocuments = successfullyMovedDocumentItems.length\n ? documents.filter(\n ({ itemKey }) =>\n !successfullyMovedDocumentItems.some((item) => item.itemKey === itemKey),\n )\n : undefined\n const filteredSubfolders = successfullyMovedFolderItems.length\n ? subfolders.filter(\n ({ itemKey }) =>\n !successfullyMovedFolderItems.some((item) => item.itemKey === itemKey),\n )\n : undefined\n\n if (filteredDocuments) {\n setDocuments(filteredDocuments)\n }\n if (filteredSubfolders) {\n setSubfolders(filteredSubfolders)\n }\n }\n }\n\n clearSelections()\n },\n [\n folderCollectionSlug,\n activeFolderID,\n clearSelections,\n serverURL,\n routes.api,\n t,\n getFolderData,\n getEntityConfig,\n sortItems,\n documents,\n subfolders,\n drawerDepth,\n router,\n ],\n )\n\n /**\n * Used to rename a folder in the current state.\n *\n * Does NOT handle the request to the server.\n * Used when the user renames a folder using the drawer\n * and it needs to be updated in the current state.\n */\n const renameFolder: FolderContextValue['renameFolder'] = React.useCallback(\n ({ folderID: updatedFolderID, newName }) => {\n if (activeFolderID === updatedFolderID) {\n // updating the curent folder\n setBreadcrumbs((prevBreadcrumbs) => {\n return prevBreadcrumbs.map((breadcrumb) => {\n if (breadcrumb.id === updatedFolderID) {\n return {\n ...breadcrumb,\n name: newName,\n }\n }\n return breadcrumb\n })\n })\n } else {\n setSubfolders((prevFolders) => {\n return prevFolders.map((folder) => {\n if (folder.value.id === updatedFolderID && folder.relationTo === folderCollectionSlug) {\n return {\n ...folder,\n value: {\n ...folder.value,\n _folderOrDocumentTitle: newName,\n },\n }\n }\n return folder\n })\n })\n }\n },\n [folderCollectionSlug, setSubfolders, activeFolderID],\n )\n\n return (\n <Context\n value={{\n addItems,\n breadcrumbs,\n clearSelections,\n currentFolder: breadcrumbs?.[0]?.id\n ? formatFolderOrDocumentItem({\n folderFieldName,\n isUpload: false,\n relationTo: folderCollectionSlug,\n useAsTitle: folderCollectionConfig.admin.useAsTitle,\n value: breadcrumbs[breadcrumbs.length - 1],\n })\n : null,\n documents,\n filterItems,\n focusedRowIndex,\n folderCollectionConfig,\n folderCollectionSlug,\n folderFieldName,\n folderID: activeFolderID,\n getSelectedItems,\n isDragging,\n lastSelectedIndex,\n moveToFolder,\n onItemClick,\n onItemKeyPress,\n removeItems,\n renameFolder,\n search,\n selectedIndexes,\n setBreadcrumbs,\n setFocusedRowIndex,\n setFolderID: setNewActiveFolderID,\n setIsDragging,\n sortAndUpdateState,\n sortDirection,\n sortOn,\n subfolders,\n visibleCollectionSlugs,\n }}\n >\n {children}\n </Context>\n )\n}\n\nexport function useFolder(): FolderContextValue {\n const context = React.use(Context)\n\n if (context === undefined) {\n throw new Error('useFolder must be used within a FolderProvider')\n }\n\n return context\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/providers/TableColumns/buildColumnState/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAEV,WAAW,EACX,cAAc,EACd,MAAM,EACN,yBAAyB,EACzB,QAAQ,EACR,KAAK,EACL,eAAe,EACf,aAAa,EACb,OAAO,EACP,yBAAyB,EAG1B,MAAM,SAAS,CAAA;AAUhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAY5E,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,iBAAiB,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IAC7C,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACpC,eAAe,EAAE,yBAAyB,CAAC,iBAAiB,CAAC,CAAA;IAC7D,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,mBAAmB,EAAE,OAAO,CAAA;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,KAAK,EAAE,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAC1C,UAAU,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;CAC7D,GAAG,CACA;IACE,cAAc,EAAE,cAAc,CAAA;IAC9B,QAAQ,EAAE,aAAa,CAAA;IACvB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAC5B,GACD;IACE,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B,QAAQ,EAAE,aAAa,CAAA;IACvB,IAAI,EAAE;QACJ,UAAU,EAAE,cAAc,CAAA;QAC1B,KAAK,EAAE,QAAQ,CAAA;KAChB,EAAE,CAAA;CACJ,CACJ,CAAA;AAED,eAAO,MAAM,gBAAgB,SAAU,oBAAoB,KAAG,MAAM,EA6LnE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/providers/TableColumns/buildColumnState/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAEV,WAAW,EACX,cAAc,EACd,MAAM,EACN,yBAAyB,EACzB,QAAQ,EACR,KAAK,EACL,eAAe,EACf,aAAa,EACb,OAAO,EACP,yBAAyB,EAG1B,MAAM,SAAS,CAAA;AAUhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAY5E,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,iBAAiB,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IAC7C,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACpC,eAAe,EAAE,yBAAyB,CAAC,iBAAiB,CAAC,CAAA;IAC7D,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,mBAAmB,EAAE,OAAO,CAAA;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,KAAK,EAAE,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAC1C,UAAU,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;CAC7D,GAAG,CACA;IACE,cAAc,EAAE,cAAc,CAAA;IAC9B,QAAQ,EAAE,aAAa,CAAA;IACvB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAC5B,GACD;IACE,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B,QAAQ,EAAE,aAAa,CAAA;IACvB,IAAI,EAAE;QACJ,UAAU,EAAE,cAAc,CAAA;QAC1B,KAAK,EAAE,QAAQ,CAAA;KAChB,EAAE,CAAA;CACJ,CACJ,CAAA;AAED,eAAO,MAAM,gBAAgB,SAAU,oBAAoB,KAAG,MAAM,EAwMnE,CAAA"}