@strapi/upload 5.48.1 → 5.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/ai/components/AIAssetCard.js +3 -2
- package/dist/admin/ai/components/AIAssetCard.js.map +1 -1
- package/dist/admin/ai/components/AIUploadModal.js +3 -2
- package/dist/admin/ai/components/AIUploadModal.js.map +1 -1
- package/dist/admin/components/AssetCard/UploadingAssetCard.js +3 -2
- package/dist/admin/components/AssetCard/UploadingAssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/VideoAssetCard.js +3 -2
- package/dist/admin/components/AssetCard/VideoAssetCard.js.map +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.js +3 -2
- package/dist/admin/components/AssetDialog/AssetDialog.js.map +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.js +3 -2
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.js.map +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.js +3 -2
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.js.map +1 -1
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js +3 -2
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js.map +1 -1
- package/dist/admin/components/AssetGridList/Draggable.js +3 -2
- package/dist/admin/components/AssetGridList/Draggable.js.map +1 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js +3 -2
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js.map +1 -1
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js +5 -1
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js +8 -4
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js +7 -3
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +7 -3
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js +3 -2
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js.map +1 -1
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.js +8 -4
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.js.map +1 -1
- package/dist/admin/components/FilterPopover/FilterPopover.js +3 -2
- package/dist/admin/components/FilterPopover/FilterPopover.js.map +1 -1
- package/dist/admin/components/FolderCard/FolderCard/FolderCard.js +3 -2
- package/dist/admin/components/FolderCard/FolderCard/FolderCard.js.map +1 -1
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.js +5 -3
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.js.map +1 -1
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.mjs +2 -1
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js +3 -2
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js +3 -2
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +3 -2
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
- package/dist/admin/components/SelectTree/SelectTree.js +7 -3
- package/dist/admin/components/SelectTree/SelectTree.js.map +1 -1
- package/dist/admin/components/TableList/CellContent.js +5 -1
- package/dist/admin/components/TableList/CellContent.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +3 -2
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +3 -2
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js +3 -2
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js.map +1 -1
- package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.js +3 -2
- package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.js.map +1 -1
- package/dist/admin/future/components/Drawer.js +4 -3
- package/dist/admin/future/components/Drawer.js.map +1 -1
- package/dist/admin/future/pages/Assets/AssetsPage.js +29 -4
- package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
- package/dist/admin/future/pages/Assets/AssetsPage.mjs +28 -4
- package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +3 -2
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js +3 -2
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.js +3 -2
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js +389 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs +387 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/ImportFromUrlDialog.js +3 -2
- package/dist/admin/future/pages/Assets/components/ImportFromUrlDialog.js.map +1 -1
- package/dist/admin/future/pages/Assets/hooks/useFolderInfo.js +4 -4
- package/dist/admin/future/pages/Assets/hooks/useFolderInfo.js.map +1 -1
- package/dist/admin/future/pages/Assets/hooks/useFolderInfo.mjs +4 -4
- package/dist/admin/future/pages/Assets/hooks/useFolderInfo.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js +48 -2
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs +48 -2
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
- package/dist/admin/future/services/folders.js +28 -1
- package/dist/admin/future/services/folders.js.map +1 -1
- package/dist/admin/future/services/folders.mjs +28 -2
- package/dist/admin/future/services/folders.mjs.map +1 -1
- package/dist/admin/future/utils/files.js +5 -1
- package/dist/admin/future/utils/files.js.map +1 -1
- package/dist/admin/hooks/useAIMetadataJob.js +3 -2
- package/dist/admin/hooks/useAIMetadataJob.js.map +1 -1
- package/dist/admin/hooks/useAssets.js +3 -2
- package/dist/admin/hooks/useAssets.js.map +1 -1
- package/dist/admin/hooks/useCropImg.js +7 -3
- package/dist/admin/hooks/useCropImg.js.map +1 -1
- package/dist/admin/hooks/useEditAsset.js +3 -2
- package/dist/admin/hooks/useEditAsset.js.map +1 -1
- package/dist/admin/hooks/useFolders.js +3 -2
- package/dist/admin/hooks/useFolders.js.map +1 -1
- package/dist/admin/hooks/useModalQueryParams.js +3 -2
- package/dist/admin/hooks/useModalQueryParams.js.map +1 -1
- package/dist/admin/hooks/useSelectionState.js +3 -2
- package/dist/admin/hooks/useSelectionState.js.map +1 -1
- package/dist/admin/hooks/useUpload.js +3 -2
- package/dist/admin/hooks/useUpload.js.map +1 -1
- package/dist/admin/pages/App/App.js +3 -2
- package/dist/admin/pages/App/App.js.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +7 -3
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/state/reducer.js +7 -2
- package/dist/admin/pages/App/ConfigureTheView/state/reducer.js.map +1 -1
- package/dist/admin/pages/App/MediaLibrary.js +3 -2
- package/dist/admin/pages/App/MediaLibrary.js.map +1 -1
- package/dist/admin/pages/App/components/BulkMoveButton.js +3 -2
- package/dist/admin/pages/App/components/BulkMoveButton.js.map +1 -1
- package/dist/admin/pages/App/components/Filters.js +3 -2
- package/dist/admin/pages/App/components/Filters.js.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.js +7 -3
- package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage/reducer.js +5 -1
- package/dist/admin/pages/SettingsPage/reducer.js.map +1 -1
- package/dist/admin/src/components/MediaLibraryDialog/MediaLibraryDialog.d.ts +2 -1
- package/dist/admin/src/future/pages/Assets/components/FolderTree/FolderTree.d.ts +19 -0
- package/dist/admin/src/future/pages/Assets/hooks/useFolderNavigation.d.ts +2 -0
- package/dist/admin/src/future/services/folders.d.ts +2 -2
- package/dist/admin/translations/en.json.js +10 -1
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +10 -1
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/formatBytes.js +5 -1
- package/dist/admin/utils/formatBytes.js.map +1 -1
- package/dist/admin/utils/urlYupSchema.js +3 -2
- package/dist/admin/utils/urlYupSchema.js.map +1 -1
- package/dist/server/controllers/admin-upload.js +11 -4
- package/dist/server/controllers/admin-upload.js.map +1 -1
- package/dist/server/controllers/content-api.js +7 -2
- package/dist/server/controllers/content-api.js.map +1 -1
- package/dist/server/controllers/utils/find-entity-and-check-permissions.js +7 -3
- package/dist/server/controllers/utils/find-entity-and-check-permissions.js.map +1 -1
- package/dist/server/middlewares/upload.js +7 -2
- package/dist/server/middlewares/upload.js.map +1 -1
- package/dist/server/register.js +9 -4
- package/dist/server/register.js.map +1 -1
- package/dist/server/routes/content-api.js +3 -2
- package/dist/server/routes/content-api.js.map +1 -1
- package/dist/server/routes/validation/upload.js +3 -2
- package/dist/server/routes/validation/upload.js.map +1 -1
- package/dist/server/services/file.js +13 -6
- package/dist/server/services/file.js.map +1 -1
- package/dist/server/services/image-manipulation.js +18 -12
- package/dist/server/services/image-manipulation.js.map +1 -1
- package/dist/server/services/provider.js +24 -0
- package/dist/server/services/provider.js.map +1 -1
- package/dist/server/services/provider.mjs +24 -0
- package/dist/server/services/provider.mjs.map +1 -1
- package/dist/server/services/upload.js +99 -32
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs +69 -10
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/src/index.d.ts +1 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +1 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/provider.d.ts +2 -1
- package/dist/server/src/services/provider.d.ts.map +1 -1
- package/dist/server/src/services/upload.d.ts.map +1 -1
- package/dist/server/src/utils/mime-validation.d.ts.map +1 -1
- package/dist/server/utils/mime-validation.js +8 -2
- package/dist/server/utils/mime-validation.js.map +1 -1
- package/dist/server/utils/mime-validation.mjs +9 -3
- package/dist/server/utils/mime-validation.mjs.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetsPage.mjs","sources":["../../../../../admin/src/future/pages/Assets/AssetsPage.tsx"],"sourcesContent":["import { useRef, useCallback, useState, type ChangeEvent } from 'react';\n\nimport * as ToggleGroup from '@radix-ui/react-toggle-group';\nimport { Layouts, useElementOnScreen, usePersistentState } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Loader,\n MenuItem,\n SimpleMenu,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { ChevronDown, Files, Folder, GridFour as GridIcon, Link, List } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useUploadFilesMutation, useUploadFromUrlsMutation } from '../../services/api';\nimport { useGetFoldersQuery } from '../../services/folders';\nimport { getTranslationKey } from '../../utils/translations';\n\nimport {\n AssetDetailsDrawer,\n useAssetDetailsParam,\n} from './components/AssetDetails/AssetDetailsDrawer';\nimport { AssetsGrid } from './components/AssetsGrid';\nimport { AssetsTable } from './components/AssetsTable';\nimport { CreateFolderDialog } from './components/CreateFolderDialog';\nimport { DropFilesMessage, DropZoneWithOverlay } from './components/DropZone/UploadDropZone';\nimport { UploadDropZoneProvider } from './components/DropZone/UploadDropZoneContext';\nimport { ImportFromUrlDialog } from './components/ImportFromUrlDialog';\nimport { localStorageKeys, viewOptions } from './constants';\nimport { useFolderInfo } from './hooks/useFolderInfo';\nimport { useFolderNavigation } from './hooks/useFolderNavigation';\nimport { useInfiniteAssets } from './hooks/useInfiniteAssets';\n\nimport type { UploadFileInfo } from '../../../../../shared/contracts/files';\n\nconst INTERSECTION_OPTIONS: IntersectionObserverInit = { threshold: 0.1 };\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsView\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetsViewProps {\n view: number;\n folderId: number | null;\n onAssetItemClick: (assetId: number) => void;\n}\n\nconst AssetsView = ({ view, folderId, onAssetItemClick }: AssetsViewProps) => {\n const { formatMessage } = useIntl();\n const {\n assets,\n isLoading: isLoadingAssets,\n isFetchingMore,\n hasNextPage,\n fetchNextPage,\n error,\n } = useInfiniteAssets({ folder: folderId });\n const { data: folders = [], isLoading: isLoadingFolders } = useGetFoldersQuery({\n parentId: folderId,\n });\n\n const isGridView = view === viewOptions.GRID;\n const isLoading = isLoadingAssets || isLoadingFolders;\n\n const loadMoreRef = useElementOnScreen<HTMLDivElement>(\n useCallback(\n (isVisible) => {\n if (isVisible && hasNextPage && !isFetchingMore) {\n fetchNextPage();\n }\n },\n [hasNextPage, isFetchingMore, fetchNextPage]\n ),\n INTERSECTION_OPTIONS\n );\n\n if (isLoading) {\n return (\n <Flex justifyContent=\"center\" padding={8}>\n <Loader>{formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' })}</Loader>\n </Flex>\n );\n }\n\n if (error) {\n return (\n <Box padding={8}>\n <Typography textColor=\"danger600\">\n {formatMessage({\n id: getTranslationKey('list.assets.error'),\n defaultMessage: 'An error occurred while fetching assets.',\n })}\n </Typography>\n </Box>\n );\n }\n\n if (folders.length === 0 && assets.length === 0) {\n return (\n <Box padding={8}>\n <Typography textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n </Typography>\n </Box>\n );\n }\n return (\n <>\n {isGridView ? (\n <AssetsGrid folders={folders} assets={assets} onAssetItemClick={onAssetItemClick} />\n ) : (\n <AssetsTable assets={assets} folders={folders} onAssetItemClick={onAssetItemClick} />\n )}\n <div ref={loadMoreRef} style={{ height: 1 }} />\n {isFetchingMore && (\n <Flex justifyContent=\"center\" padding={4}>\n <Loader>\n {formatMessage({\n id: getTranslationKey('list.assets.loading-more'),\n defaultMessage: 'Loading more assets...',\n })}\n </Loader>\n </Flex>\n )}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledToggleGroup = styled(ToggleGroup.Root)`\n display: flex;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n overflow: hidden;\n`;\n\nconst StyledToggleItem = styled(ToggleGroup.Item)`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.spaces[2]};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n border: none;\n background: ${({ theme }) => theme.colors.neutral0};\n color: ${({ theme }) => theme.colors.neutral800};\n cursor: pointer;\n font-size: ${({ theme }) => theme.fontSizes[1]};\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &[data-state='on'] {\n background: ${({ theme }) => theme.colors.neutral150};\n }\n\n svg {\n width: 1.6rem;\n height: 1.6rem;\n }\n`;\n\nconst HeaderWrapper = styled(Box)`\n [data-strapi-header] {\n background: ${({ theme }) => theme.colors.neutral0};\n\n h1 {\n font-size: 1.8rem;\n }\n }\n`;\n\nexport const AssetsPage = () => {\n const { formatMessage } = useIntl();\n const { openDetails } = useAssetDetailsParam();\n\n const { currentFolderId } = useFolderNavigation();\n const { title, itemCount } = useFolderInfo(currentFolderId);\n const itemCountLabel = formatMessage(\n {\n id: getTranslationKey('header.content.item-count'),\n defaultMessage: '{count, plural, =1 {# item} other {# items}}',\n },\n { count: itemCount }\n );\n\n const [isCreateFolderDialogOpen, setIsCreateFolderDialogOpen] = useState(false);\n\n // View state\n const [view, setView] = usePersistentState(localStorageKeys.view, viewOptions.GRID);\n const isGridView = view === viewOptions.GRID;\n\n // Dialog state\n const [isUrlDialogOpen, setIsUrlDialogOpen] = useState(false);\n\n // Refs\n const fileInputRef = useRef<HTMLInputElement>(null);\n const uploadDropZoneRef = useRef<HTMLDivElement>(null);\n\n // Upload handlers\n const [uploadFiles] = useUploadFilesMutation();\n const [uploadFromUrls] = useUploadFromUrlsMutation();\n\n const uploadFilesToFolder = async (files: globalThis.File[], folderId: number | null) => {\n if (files.length === 0) return;\n\n const formData = new FormData();\n const fileInfoArray: UploadFileInfo[] = [];\n\n files.forEach((file) => {\n formData.append('files', file);\n fileInfoArray.push({\n name: file.name,\n caption: null,\n alternativeText: null,\n folder: folderId,\n });\n });\n\n formData.append('fileInfo', JSON.stringify(fileInfoArray));\n try {\n await uploadFiles({ formData, totalFiles: files.length }).unwrap();\n } catch (error) {\n // Error is already dispatched to store from the API queryFn\n }\n };\n\n const handleFileSelect = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = async (e: ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (files && files.length > 0) {\n await uploadFilesToFolder(Array.from(files), currentFolderId);\n }\n e.target.value = '';\n };\n\n const handleDrop = async (files: globalThis.File[]) => {\n await uploadFilesToFolder(files, currentFolderId);\n };\n\n const handleUrlUpload = async (urls: string[]) => {\n try {\n await uploadFromUrls({ urls, folderId: currentFolderId }).unwrap();\n } catch (error) {\n // Error is already dispatched to store from the API queryFn\n }\n };\n\n return (\n <>\n <UploadDropZoneProvider onDrop={handleDrop}>\n <Box ref={uploadDropZoneRef}>\n <Layouts.Root minHeight=\"100vh\" background=\"neutral0\">\n <VisuallyHidden>\n <input type=\"file\" ref={fileInputRef} onChange={handleFileChange} multiple />\n </VisuallyHidden>\n\n <HeaderWrapper>\n <Layouts.Header\n title={`${title} (${itemCountLabel})`}\n primaryAction={\n <SimpleMenu\n popoverPlacement=\"bottom-end\"\n variant=\"default\"\n endIcon={<ChevronDown />}\n label={formatMessage({ id: getTranslationKey('new'), defaultMessage: 'New' })}\n >\n <MenuItem\n onSelect={() => setIsCreateFolderDialogOpen(true)}\n startIcon={<Folder />}\n >\n {formatMessage({\n id: getTranslationKey('folder.create.title'),\n defaultMessage: 'New folder',\n })}\n </MenuItem>\n <MenuItem onSelect={handleFileSelect} startIcon={<Files />}>\n {formatMessage({\n id: getTranslationKey('import-files'),\n defaultMessage: 'Import files',\n })}\n </MenuItem>\n <MenuItem onSelect={() => setIsUrlDialogOpen(true)} startIcon={<Link />}>\n {formatMessage({\n id: getTranslationKey('import-from-url'),\n defaultMessage: 'Import from URL',\n })}\n </MenuItem>\n </SimpleMenu>\n }\n subtitle={\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap={4} width=\"100%\">\n <Flex gap={4} alignItems=\"center\">\n TODO: Filters and search\n </Flex>\n\n <Flex gap={4} alignItems=\"center\">\n <Box>TODO: Sort</Box>\n <StyledToggleGroup\n type=\"single\"\n value={isGridView ? 'grid' : 'table'}\n onValueChange={(value) =>\n value && setView(value === 'grid' ? viewOptions.GRID : viewOptions.TABLE)\n }\n aria-label={formatMessage({\n id: getTranslationKey('view.switch.label'),\n defaultMessage: 'View options',\n })}\n >\n <StyledToggleItem\n value=\"table\"\n aria-label={formatMessage({\n id: getTranslationKey('view.table'),\n defaultMessage: 'Table view',\n })}\n >\n <List />\n {formatMessage({\n id: getTranslationKey('view.table'),\n defaultMessage: 'Table view',\n })}\n </StyledToggleItem>\n <StyledToggleItem\n value=\"grid\"\n aria-label={formatMessage({\n id: getTranslationKey('view.grid'),\n defaultMessage: 'Grid view',\n })}\n >\n <GridIcon />\n {formatMessage({\n id: getTranslationKey('view.grid'),\n defaultMessage: 'Grid view',\n })}\n </StyledToggleItem>\n </StyledToggleGroup>\n </Flex>\n </Flex>\n }\n />\n </HeaderWrapper>\n\n <Layouts.Content>\n <DropZoneWithOverlay>\n <DropFilesMessage uploadDropZoneRef={uploadDropZoneRef} folderName={title} />\n <AssetsView view={view} folderId={currentFolderId} onAssetItemClick={openDetails} />\n </DropZoneWithOverlay>\n </Layouts.Content>\n </Layouts.Root>\n </Box>\n </UploadDropZoneProvider>\n <CreateFolderDialog\n open={isCreateFolderDialogOpen}\n folderName={title}\n parentFolderId={currentFolderId}\n onClose={() => setIsCreateFolderDialogOpen(false)}\n />\n <ImportFromUrlDialog\n open={isUrlDialogOpen}\n onClose={() => setIsUrlDialogOpen(false)}\n onUpload={handleUrlUpload}\n />\n <AssetDetailsDrawer />\n </>\n );\n};\n"],"names":["INTERSECTION_OPTIONS","threshold","AssetsView","view","folderId","onAssetItemClick","formatMessage","useIntl","assets","isLoading","isLoadingAssets","isFetchingMore","hasNextPage","fetchNextPage","error","useInfiniteAssets","folder","data","folders","isLoadingFolders","useGetFoldersQuery","parentId","isGridView","viewOptions","GRID","loadMoreRef","useElementOnScreen","useCallback","isVisible","_jsx","Flex","justifyContent","padding","Loader","id","defaultMessage","Box","Typography","textColor","getTranslationKey","length","_jsxs","_Fragment","AssetsGrid","AssetsTable","div","ref","style","height","StyledToggleGroup","styled","ToggleGroup","Root","theme","colors","neutral200","borderRadius","StyledToggleItem","Item","spaces","neutral0","neutral800","fontSizes","fontWeights","semiBold","primary100","neutral150","HeaderWrapper","AssetsPage","openDetails","useAssetDetailsParam","currentFolderId","useFolderNavigation","title","itemCount","useFolderInfo","itemCountLabel","count","isCreateFolderDialogOpen","setIsCreateFolderDialogOpen","useState","setView","usePersistentState","localStorageKeys","isUrlDialogOpen","setIsUrlDialogOpen","fileInputRef","useRef","uploadDropZoneRef","uploadFiles","useUploadFilesMutation","uploadFromUrls","useUploadFromUrlsMutation","uploadFilesToFolder","files","formData","FormData","fileInfoArray","forEach","file","append","push","name","caption","alternativeText","JSON","stringify","totalFiles","unwrap","handleFileSelect","current","click","handleFileChange","e","target","Array","from","value","handleDrop","handleUrlUpload","urls","UploadDropZoneProvider","onDrop","Layouts","minHeight","background","VisuallyHidden","input","type","onChange","multiple","Header","primaryAction","SimpleMenu","popoverPlacement","variant","endIcon","ChevronDown","label","MenuItem","onSelect","startIcon","Folder","Files","Link","subtitle","alignItems","gap","width","onValueChange","TABLE","aria-label","List","GridIcon","Content","DropZoneWithOverlay","DropFilesMessage","folderName","CreateFolderDialog","open","parentFolderId","onClose","ImportFromUrlDialog","onUpload","AssetDetailsDrawer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AssetsPage.mjs","sources":["../../../../../admin/src/future/pages/Assets/AssetsPage.tsx"],"sourcesContent":["import { useRef, useCallback, useState, useEffect, type ChangeEvent } from 'react';\n\nimport * as ToggleGroup from '@radix-ui/react-toggle-group';\nimport { Layouts, useElementOnScreen, usePersistentState } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Loader,\n MenuItem,\n SimpleMenu,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { ChevronDown, Files, Folder, GridFour as GridIcon, Link, List } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useUploadFromUrlsMutation, useUploadFilesMutation } from '../../services/api';\nimport { useGetFolderQuery, useGetFoldersQuery } from '../../services/folders';\nimport { getTranslationKey } from '../../utils/translations';\n\nimport {\n AssetDetailsDrawer,\n useAssetDetailsParam,\n} from './components/AssetDetails/AssetDetailsDrawer';\nimport { AssetsGrid } from './components/AssetsGrid';\nimport { AssetsTable } from './components/AssetsTable';\nimport { CreateFolderDialog } from './components/CreateFolderDialog';\nimport { DropFilesMessage, DropZoneWithOverlay } from './components/DropZone/UploadDropZone';\nimport { UploadDropZoneProvider } from './components/DropZone/UploadDropZoneContext';\nimport { FolderTree } from './components/FolderTree/FolderTree';\nimport { ImportFromUrlDialog } from './components/ImportFromUrlDialog';\nimport { localStorageKeys, viewOptions } from './constants';\nimport { useFolderInfo } from './hooks/useFolderInfo';\nimport { useFolderNavigation } from './hooks/useFolderNavigation';\nimport { useInfiniteAssets } from './hooks/useInfiniteAssets';\n\nimport type { UploadFileInfo } from '../../../../../shared/contracts/files';\n\nconst INTERSECTION_OPTIONS: IntersectionObserverInit = { threshold: 0.1 };\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsView\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetsViewProps {\n view: number;\n folderId: number | null;\n onAssetItemClick: (assetId: number) => void;\n}\n\nconst AssetsView = ({ view, folderId, onAssetItemClick }: AssetsViewProps) => {\n const { formatMessage } = useIntl();\n const {\n assets,\n isLoading: isLoadingAssets,\n isFetchingMore,\n hasNextPage,\n fetchNextPage,\n error,\n } = useInfiniteAssets({ folder: folderId });\n const { data: folders = [], isLoading: isLoadingFolders } = useGetFoldersQuery({\n parentId: folderId,\n });\n\n const isGridView = view === viewOptions.GRID;\n const isLoading = isLoadingAssets || isLoadingFolders;\n\n const loadMoreRef = useElementOnScreen<HTMLDivElement>(\n useCallback(\n (isVisible) => {\n if (isVisible && hasNextPage && !isFetchingMore) {\n fetchNextPage();\n }\n },\n [hasNextPage, isFetchingMore, fetchNextPage]\n ),\n INTERSECTION_OPTIONS\n );\n\n if (isLoading) {\n return (\n <Flex justifyContent=\"center\" padding={8}>\n <Loader>{formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' })}</Loader>\n </Flex>\n );\n }\n\n if (error) {\n return (\n <Box padding={8}>\n <Typography textColor=\"danger600\">\n {formatMessage({\n id: getTranslationKey('list.assets.error'),\n defaultMessage: 'An error occurred while fetching assets.',\n })}\n </Typography>\n </Box>\n );\n }\n\n if (folders.length === 0 && assets.length === 0) {\n return (\n <Box padding={8}>\n <Typography textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n </Typography>\n </Box>\n );\n }\n return (\n <>\n {isGridView ? (\n <AssetsGrid folders={folders} assets={assets} onAssetItemClick={onAssetItemClick} />\n ) : (\n <AssetsTable assets={assets} folders={folders} onAssetItemClick={onAssetItemClick} />\n )}\n <div ref={loadMoreRef} style={{ height: 1 }} />\n {isFetchingMore && (\n <Flex justifyContent=\"center\" padding={4}>\n <Loader>\n {formatMessage({\n id: getTranslationKey('list.assets.loading-more'),\n defaultMessage: 'Loading more assets...',\n })}\n </Loader>\n </Flex>\n )}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledToggleGroup = styled(ToggleGroup.Root)`\n display: flex;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n overflow: hidden;\n`;\n\nconst StyledToggleItem = styled(ToggleGroup.Item)`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.spaces[2]};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n border: none;\n background: ${({ theme }) => theme.colors.neutral0};\n color: ${({ theme }) => theme.colors.neutral800};\n cursor: pointer;\n font-size: ${({ theme }) => theme.fontSizes[1]};\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &[data-state='on'] {\n background: ${({ theme }) => theme.colors.neutral150};\n }\n\n svg {\n width: 1.6rem;\n height: 1.6rem;\n }\n`;\n\nconst HeaderWrapper = styled(Box)`\n [data-strapi-header] {\n background: ${({ theme }) => theme.colors.neutral0};\n\n h1 {\n font-size: 1.8rem;\n }\n }\n`;\n\nexport const AssetsPage = () => {\n const { formatMessage } = useIntl();\n const { openDetails } = useAssetDetailsParam();\n\n const { currentFolderId, navigateToFolderId, navigateToRoot } = useFolderNavigation();\n // Deleted or missing folders (404) need a fetch — handled here, not in\n // `useFolderNavigation` (which only strips malformed ?folder= values).\n const { error: currentFolderError } = useGetFolderQuery(\n { id: currentFolderId! },\n { skip: currentFolderId === null }\n );\n\n useEffect(() => {\n if (currentFolderError?.name === 'NotFoundError') {\n navigateToRoot();\n }\n }, [currentFolderError, navigateToRoot]);\n const { title, itemCount } = useFolderInfo(currentFolderId);\n const itemCountLabel = formatMessage(\n {\n id: getTranslationKey('header.content.item-count'),\n defaultMessage: '{count, plural, =1 {# item} other {# items}}',\n },\n { count: itemCount }\n );\n const pageHeaderTitle = title\n ? `${title} (${itemCountLabel})`\n : formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' });\n\n const [isCreateFolderDialogOpen, setIsCreateFolderDialogOpen] = useState(false);\n\n // View state\n const [view, setView] = usePersistentState(localStorageKeys.view, viewOptions.GRID);\n const isGridView = view === viewOptions.GRID;\n\n // Dialog state\n const [isUrlDialogOpen, setIsUrlDialogOpen] = useState(false);\n\n // Refs\n const fileInputRef = useRef<HTMLInputElement>(null);\n const uploadDropZoneRef = useRef<HTMLDivElement>(null);\n\n // Upload handlers\n const [uploadFiles] = useUploadFilesMutation();\n const [uploadFromUrls] = useUploadFromUrlsMutation();\n\n const uploadFilesToFolder = async (files: globalThis.File[], folderId: number | null) => {\n if (files.length === 0) return;\n\n const formData = new FormData();\n const fileInfoArray: UploadFileInfo[] = [];\n\n files.forEach((file) => {\n formData.append('files', file);\n fileInfoArray.push({\n name: file.name,\n caption: null,\n alternativeText: null,\n folder: folderId,\n });\n });\n\n formData.append('fileInfo', JSON.stringify(fileInfoArray));\n try {\n await uploadFiles({ formData, totalFiles: files.length }).unwrap();\n } catch (error) {\n // Error is already dispatched to store from the API queryFn\n }\n };\n\n const handleFileSelect = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = async (e: ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (files && files.length > 0) {\n await uploadFilesToFolder(Array.from(files), currentFolderId);\n }\n e.target.value = '';\n };\n\n const handleDrop = async (files: globalThis.File[]) => {\n await uploadFilesToFolder(files, currentFolderId);\n };\n\n const handleUrlUpload = async (urls: string[]) => {\n try {\n await uploadFromUrls({ urls, folderId: currentFolderId }).unwrap();\n } catch (error) {\n // Error is already dispatched to store from the API queryFn\n }\n };\n\n return (\n <>\n <UploadDropZoneProvider onDrop={handleDrop}>\n <Box ref={uploadDropZoneRef}>\n <Layouts.Root\n minHeight=\"100vh\"\n background=\"neutral0\"\n sideNav={\n <FolderTree currentFolderId={currentFolderId} onSelectFolder={navigateToFolderId} />\n }\n >\n <VisuallyHidden>\n <input type=\"file\" ref={fileInputRef} onChange={handleFileChange} multiple />\n </VisuallyHidden>\n\n <HeaderWrapper>\n <Layouts.Header\n title={pageHeaderTitle}\n primaryAction={\n <SimpleMenu\n popoverPlacement=\"bottom-end\"\n variant=\"default\"\n endIcon={<ChevronDown />}\n label={formatMessage({ id: getTranslationKey('new'), defaultMessage: 'New' })}\n >\n <MenuItem\n onSelect={() => setIsCreateFolderDialogOpen(true)}\n startIcon={<Folder />}\n >\n {formatMessage({\n id: getTranslationKey('folder.create.title'),\n defaultMessage: 'New folder',\n })}\n </MenuItem>\n <MenuItem onSelect={handleFileSelect} startIcon={<Files />}>\n {formatMessage({\n id: getTranslationKey('import-files'),\n defaultMessage: 'Import files',\n })}\n </MenuItem>\n <MenuItem onSelect={() => setIsUrlDialogOpen(true)} startIcon={<Link />}>\n {formatMessage({\n id: getTranslationKey('import-from-url'),\n defaultMessage: 'Import from URL',\n })}\n </MenuItem>\n </SimpleMenu>\n }\n subtitle={\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap={4} width=\"100%\">\n <Flex gap={4} alignItems=\"center\">\n TODO: Filters and search\n </Flex>\n\n <Flex gap={4} alignItems=\"center\">\n <Box>TODO: Sort</Box>\n <StyledToggleGroup\n type=\"single\"\n value={isGridView ? 'grid' : 'table'}\n onValueChange={(value) =>\n value && setView(value === 'grid' ? viewOptions.GRID : viewOptions.TABLE)\n }\n aria-label={formatMessage({\n id: getTranslationKey('view.switch.label'),\n defaultMessage: 'View options',\n })}\n >\n <StyledToggleItem\n value=\"table\"\n aria-label={formatMessage({\n id: getTranslationKey('view.table'),\n defaultMessage: 'Table view',\n })}\n >\n <List />\n {formatMessage({\n id: getTranslationKey('view.table'),\n defaultMessage: 'Table view',\n })}\n </StyledToggleItem>\n <StyledToggleItem\n value=\"grid\"\n aria-label={formatMessage({\n id: getTranslationKey('view.grid'),\n defaultMessage: 'Grid view',\n })}\n >\n <GridIcon />\n {formatMessage({\n id: getTranslationKey('view.grid'),\n defaultMessage: 'Grid view',\n })}\n </StyledToggleItem>\n </StyledToggleGroup>\n </Flex>\n </Flex>\n }\n />\n </HeaderWrapper>\n\n <Layouts.Content>\n <DropZoneWithOverlay>\n <DropFilesMessage uploadDropZoneRef={uploadDropZoneRef} folderName={title} />\n <AssetsView view={view} folderId={currentFolderId} onAssetItemClick={openDetails} />\n </DropZoneWithOverlay>\n </Layouts.Content>\n </Layouts.Root>\n </Box>\n </UploadDropZoneProvider>\n <CreateFolderDialog\n open={isCreateFolderDialogOpen}\n folderName={title}\n parentFolderId={currentFolderId}\n onClose={() => setIsCreateFolderDialogOpen(false)}\n />\n <ImportFromUrlDialog\n open={isUrlDialogOpen}\n onClose={() => setIsUrlDialogOpen(false)}\n onUpload={handleUrlUpload}\n />\n <AssetDetailsDrawer />\n </>\n );\n};\n"],"names":["INTERSECTION_OPTIONS","threshold","AssetsView","view","folderId","onAssetItemClick","formatMessage","useIntl","assets","isLoading","isLoadingAssets","isFetchingMore","hasNextPage","fetchNextPage","error","useInfiniteAssets","folder","data","folders","isLoadingFolders","useGetFoldersQuery","parentId","isGridView","viewOptions","GRID","loadMoreRef","useElementOnScreen","useCallback","isVisible","_jsx","Flex","justifyContent","padding","Loader","id","defaultMessage","Box","Typography","textColor","getTranslationKey","length","_jsxs","_Fragment","AssetsGrid","AssetsTable","div","ref","style","height","StyledToggleGroup","styled","ToggleGroup","Root","theme","colors","neutral200","borderRadius","StyledToggleItem","Item","spaces","neutral0","neutral800","fontSizes","fontWeights","semiBold","primary100","neutral150","HeaderWrapper","AssetsPage","openDetails","useAssetDetailsParam","currentFolderId","navigateToFolderId","navigateToRoot","useFolderNavigation","currentFolderError","useGetFolderQuery","skip","useEffect","name","title","itemCount","useFolderInfo","itemCountLabel","count","pageHeaderTitle","isCreateFolderDialogOpen","setIsCreateFolderDialogOpen","useState","setView","usePersistentState","localStorageKeys","isUrlDialogOpen","setIsUrlDialogOpen","fileInputRef","useRef","uploadDropZoneRef","uploadFiles","useUploadFilesMutation","uploadFromUrls","useUploadFromUrlsMutation","uploadFilesToFolder","files","formData","FormData","fileInfoArray","forEach","file","append","push","caption","alternativeText","JSON","stringify","totalFiles","unwrap","handleFileSelect","current","click","handleFileChange","e","target","Array","from","value","handleDrop","handleUrlUpload","urls","UploadDropZoneProvider","onDrop","Layouts","minHeight","background","sideNav","FolderTree","onSelectFolder","VisuallyHidden","input","type","onChange","multiple","Header","primaryAction","SimpleMenu","popoverPlacement","variant","endIcon","ChevronDown","label","MenuItem","onSelect","startIcon","Folder","Files","Link","subtitle","alignItems","gap","width","onValueChange","TABLE","aria-label","List","GridIcon","Content","DropZoneWithOverlay","DropFilesMessage","folderName","CreateFolderDialog","open","parentFolderId","onClose","ImportFromUrlDialog","onUpload","AssetDetailsDrawer"],"mappings":"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"}
|
|
@@ -19,7 +19,8 @@ var translations = require('../../../../utils/translations.js');
|
|
|
19
19
|
var useFolderInfo = require('../../hooks/useFolderInfo.js');
|
|
20
20
|
var AssetPreview = require('./AssetPreview.js');
|
|
21
21
|
|
|
22
|
-
function
|
|
22
|
+
function _interopNamespace(e) {
|
|
23
|
+
if (e && e.__esModule) return e;
|
|
23
24
|
var n = Object.create(null);
|
|
24
25
|
if (e) {
|
|
25
26
|
Object.keys(e).forEach(function (k) {
|
|
@@ -36,7 +37,7 @@ function _interopNamespaceDefault(e) {
|
|
|
36
37
|
return Object.freeze(n);
|
|
37
38
|
}
|
|
38
39
|
|
|
39
|
-
var React__namespace = /*#__PURE__*/
|
|
40
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
40
41
|
|
|
41
42
|
// Name of the parameter to look for in the URL to open the drawer
|
|
42
43
|
const URL_PARAM = 'assetId';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetDetailsDrawer.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Blocker,\n Form,\n useClipboard,\n useField,\n useForm,\n useNotification,\n useQueryParams,\n getDisplayName,\n} from '@strapi/admin/strapi-admin';\nimport {\n Alert,\n Box,\n Button,\n Dialog,\n Field,\n Flex,\n IconButton,\n Loader,\n SingleSelect,\n SingleSelectOption,\n TextInput,\n Tooltip,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport {\n ArrowLineRight,\n Download,\n FileError,\n Link,\n Trash,\n WarningCircle,\n ArrowsCounterClockwise,\n} from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { Drawer } from '../../../../components/Drawer';\nimport { AssetType } from '../../../../enums';\nimport {\n useDeleteAssetMutation,\n useGetAssetQuery,\n useReplaceAssetMutation,\n useUpdateAssetMutation,\n} from '../../../../services/assets';\nimport { useGetAllFoldersQuery } from '../../../../services/folders';\nimport { useGetSettingsQuery } from '../../../../services/settings';\nimport { downloadFile } from '../../../../utils/downloadFile';\nimport {\n formatBytes,\n getFileExtension,\n prefixFileUrlWithBackendUrl,\n} from '../../../../utils/files';\nimport { getAssetIcon } from '../../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../../utils/translations';\nimport { useFolderInfo } from '../../hooks/useFolderInfo';\n\nimport { AssetPreview } from './AssetPreview';\n\nimport type { AssetWithPopulatedCreatedBy } from '../../../../../../../shared/contracts/files';\n\n// Name of the parameter to look for in the URL to open the drawer\nconst URL_PARAM = 'assetId';\n\ninterface DrawerToast {\n type: 'success' | 'danger';\n message: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * DrawerNotifyContext — exposes the in-drawer toast setter so deep descendants\n * (footer action buttons) can report success/error without prop drilling.\n * -----------------------------------------------------------------------------------------------*/\n\ntype DrawerNotify = (toast: DrawerToast) => void;\n\nexport const DrawerNotifyContext = React.createContext<DrawerNotify | null>(null);\n\nconst useDrawerNotify = () => {\n const ctx = React.useContext(DrawerNotifyContext);\n if (!ctx) {\n throw new Error('useDrawerNotify must be used within AssetDetails');\n }\n return ctx;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetOperationsContext — drawer-scoped mutations + their pending state, so\n * leaf buttons (Delete, Replace) consume them without prop drilling and the\n * full-drawer busy overlay reads a single flag.\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetOperations {\n replaceAsset: (file: globalThis.File) => Promise<void>;\n deleteAsset: () => Promise<void>;\n isReplacing: boolean;\n isDeleting: boolean;\n}\n\nexport const AssetOperationsContext = React.createContext<AssetOperations | null>(null);\n\nconst useAssetOperation = () => {\n const ctx = React.useContext(AssetOperationsContext);\n if (!ctx) {\n throw new Error('useAssetOperation must be used within AssetDetails');\n }\n return ctx;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useAssetDetailsParam - sync drawer visibility with URL ?{URL_PARAM}={id}\n * -----------------------------------------------------------------------------------------------*/\n\nexport const useAssetDetailsParam = () => {\n const [{ query }, setQuery] = useQueryParams<{ [URL_PARAM]?: string }>();\n\n const detailsId = query?.[URL_PARAM];\n const assetId = detailsId ? parseInt(detailsId, 10) : null;\n const hasValidId = assetId !== null && !Number.isNaN(assetId);\n\n // Closing is driven by removing the URL param (a navigation), so navigation\n // guards like <Blocker> can intercept it. `isMounted` keeps the drawer in the\n // tree through the slide-out: it stays true once opened and only flips false\n // when the close animation actually ends (see onCloseAnimationEnd), so the\n // close duration lives entirely in CSS — no JS timer.\n const [isMounted, setIsMounted] = React.useState(hasValidId);\n const displayAssetId = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n if (hasValidId) {\n displayAssetId.current = assetId;\n setIsMounted(true);\n }\n }, [hasValidId, assetId]);\n\n const onCloseAnimationEnd = React.useCallback(\n (event: React.AnimationEvent) => {\n // Ignore animations bubbling up from descendants, and the slide-in.\n if (event.target === event.currentTarget && !hasValidId) {\n setIsMounted(false);\n }\n },\n [hasValidId]\n );\n\n const openDetails = React.useCallback(\n (id: number) => {\n setQuery({ [URL_PARAM]: String(id) }, 'push', true);\n },\n [setQuery]\n );\n\n const closeDetails = React.useCallback(() => {\n setQuery({ [URL_PARAM]: undefined }, 'remove', true);\n }, [setQuery]);\n\n return {\n assetId: hasValidId ? assetId : displayAssetId.current,\n isVisible: hasValidId,\n shouldRenderDrawer: isMounted,\n onCloseAnimationEnd,\n openDetails,\n closeDetails,\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DetailItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DetailItemProps {\n label: string;\n value: React.ReactNode;\n}\n\nconst DetailItemContainer = styled(Flex)`\n flex: 0 0 calc(50% - ${({ theme }) => theme.spaces[2]});\n`;\n\nconst DetailItem = ({ label, value }: DetailItemProps) => (\n <DetailItemContainer\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n gap={1}\n >\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n fontWeight=\"semiBold\"\n textTransform=\"uppercase\"\n >\n {label}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral700\">\n {value ?? '-'}\n </Typography>\n </DetailItemContainer>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DetailField\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Make the asset details Form behave as a flex column inside Drawer.Body so\n * the scrollable area can grow while the footer stays pinned at the bottom.\n * The Form component from `@strapi/admin/strapi-admin` only forwards `width`\n * + `height` to its Box, so we target the rendered `<form>` element via a\n * styled-components descendant rule.\n */\nconst FormShell = styled(Box)`\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n\n > form {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n position: relative;\n }\n`;\n\n/**\n * In-drawer toast container\n */\nconst DrawerToastSlot = styled(Box)`\n position: absolute;\n top: ${({ theme }) => theme.spaces[2]};\n left: 50%;\n transform: translateX(-50%);\n z-index: 10;\n width: calc(100% - ${({ theme }) => theme.spaces[2]});\n`;\n\n/**\n * Full-form overlay rendered during long-running drawer-scoped mutations\n * (e.g. replacing the binary). Sits above the toast slot (z-index 10) and\n * the in-drawer Alert so the user can't interact with the form mid-flight.\n */\nconst DrawerBusyOverlay = styled(Flex)`\n position: absolute;\n inset: 0;\n z-index: 20;\n align-items: center;\n justify-content: center;\n background: ${({ theme }) => theme.colors.neutral0};\n opacity: 0.7;\n`;\n\nconst StyledWarning = styled(WarningCircle)`\n width: 1.6rem;\n height: 1.6rem;\n\n path {\n fill: ${({ theme }) => theme.colors.warning500};\n }\n`;\n\ninterface DetailFieldProps {\n name: string;\n label: string;\n required?: boolean;\n}\n\nconst DetailField = ({ name, label, required }: DetailFieldProps) => {\n const { formatMessage } = useIntl();\n const field = useField<string>(name);\n const isSubmitting = useForm('DetailField', (state) => state.isSubmitting);\n const value = field.value ?? '';\n const emptyTooltipLabel = formatMessage(\n {\n id: getTranslationKey('asset-details.field.empty'),\n defaultMessage: '{label} is currently empty.',\n },\n { label }\n );\n\n return (\n <Field.Root name={name} required={required}>\n <Field.Label>{label}</Field.Label>\n <TextInput\n value={value}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) =>\n field.onChange(name, event.target.value)\n }\n endAction={\n !value ? (\n <Tooltip label={emptyTooltipLabel}>\n <StyledWarning aria-label={emptyTooltipLabel} role=\"img\" />\n </Tooltip>\n ) : undefined\n }\n type=\"text\"\n disabled={isSubmitting}\n />\n </Field.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LocationField\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LocationFieldProps {\n label: string;\n rootLabel: string;\n folders: Array<{ id: number; name: string }>;\n}\n\nconst LocationField = ({ label, rootLabel, folders }: LocationFieldProps) => {\n const field = useField<number | null>('folder');\n const isSubmitting = useForm('LocationField', (state) => state.isSubmitting);\n\n return (\n <Field.Root name=\"folder\" required>\n <Field.Label>{label}</Field.Label>\n {/* `null` is the canonical \"root of the Media Library\" value everywhere\n in the upload domain. The DS `SingleSelectOption.value` prop is typed\n `string | number`, so we use the empty string as a DOM-only sentinel\n for the root option and map it back to `null` on change. */}\n <SingleSelect\n value={field.value == null ? '' : String(field.value)}\n onChange={(value) => {\n const next = value === '' ? null : Number(value);\n field.onChange('folder', next);\n }}\n disabled={isSubmitting}\n >\n <SingleSelectOption value=\"\">{rootLabel}</SingleSelectOption>\n {folders.map((folder) => (\n <SingleSelectOption key={folder.id} value={String(folder.id)}>\n {folder.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteAssetButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst DeleteAssetButton = () => {\n const { formatMessage } = useIntl();\n const { deleteAsset, isDeleting } = useAssetOperation();\n const [isOpen, setIsOpen] = React.useState(false);\n\n const handleConfirm = async () => {\n await deleteAsset();\n setIsOpen(false);\n };\n\n const triggerLabel = formatMessage({\n id: getTranslationKey('asset-details.delete.trigger'),\n defaultMessage: 'Delete this file',\n });\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={setIsOpen}>\n <Dialog.Trigger>\n <IconButton withTooltip={false} label={triggerLabel} variant=\"danger-light\">\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: getTranslationKey('asset-details.delete.title'),\n defaultMessage: 'Delete this media file?',\n })}\n </Dialog.Header>\n <Dialog.Body\n icon={<WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />}\n textAlign=\"center\"\n >\n {formatMessage({\n id: getTranslationKey('asset-details.delete.description'),\n defaultMessage:\n 'This file cannot be recovered once deleted. If it is currently in use, linked content will break and image containers will be empty.',\n })}\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" disabled={isDeleting} fullWidth>\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Dialog.Cancel>\n <Dialog.Action>\n <Button variant=\"danger-light\" loading={isDeleting} onClick={handleConfirm} fullWidth>\n {formatMessage({ id: 'app.components.Button.confirm', defaultMessage: 'Confirm' })}\n </Button>\n </Dialog.Action>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CopyLinkButton — write the absolute asset URL to the clipboard.\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CopyLinkButtonProps {\n asset: AssetWithPopulatedCreatedBy;\n}\n\nconst CopyLinkButton = ({ asset }: CopyLinkButtonProps) => {\n const { formatMessage } = useIntl();\n const { copy } = useClipboard();\n const notify = useDrawerNotify();\n\n const handleCopy = async () => {\n const url = prefixFileUrlWithBackendUrl(asset.url);\n if (!url) return;\n const didCopy = await copy(url);\n notify({\n type: didCopy ? 'success' : 'danger',\n message: didCopy\n ? formatMessage({\n id: getTranslationKey('asset-details.copy-link.success'),\n defaultMessage: 'Link copied.',\n })\n : formatMessage({\n id: getTranslationKey('asset-details.copy-link.error'),\n defaultMessage: 'Failed to copy the link.',\n }),\n });\n };\n\n return (\n <IconButton\n withTooltip={false}\n label={formatMessage({\n id: getTranslationKey('asset-details.copy-link.trigger'),\n defaultMessage: 'Copy link',\n })}\n variant=\"tertiary\"\n onClick={handleCopy}\n >\n <Link />\n </IconButton>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DownloadAssetButton — fetch the file and trigger a browser download.\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DownloadAssetButtonProps {\n asset: AssetWithPopulatedCreatedBy;\n}\n\nconst DownloadAssetButton = ({ asset }: DownloadAssetButtonProps) => {\n const { formatMessage } = useIntl();\n const notify = useDrawerNotify();\n const [isDownloading, setIsDownloading] = React.useState(false);\n\n const handleDownload = async () => {\n const url = prefixFileUrlWithBackendUrl(asset.url);\n if (!url) return;\n setIsDownloading(true);\n try {\n await downloadFile(url, asset.name);\n } catch {\n notify({\n type: 'danger',\n message: formatMessage({\n id: getTranslationKey('asset-details.download.error'),\n defaultMessage: 'Failed to download the file.',\n }),\n });\n } finally {\n setIsDownloading(false);\n }\n };\n\n return (\n <IconButton\n withTooltip={false}\n label={formatMessage({\n id: getTranslationKey('asset-details.download.trigger'),\n defaultMessage: 'Download',\n })}\n variant=\"tertiary\"\n onClick={handleDownload}\n disabled={isDownloading}\n >\n <Download />\n </IconButton>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReplaceAssetButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst ReplaceAssetButton = () => {\n const { formatMessage } = useIntl();\n const { replaceAsset, isReplacing } = useAssetOperation();\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\n const { data: settings } = useGetSettingsQuery();\n const aiEnabled = settings?.data?.aiMetadata ?? false;\n\n const handleTriggerClick = () => {\n setIsDialogOpen(true);\n };\n\n const handleContinue = () => {\n // Confirm first, then open the native picker so the user only commits to\n // replacing after acknowledging the warning. The actual POST is delegated\n // to the parent (which owns the mutation + loading state).\n setIsDialogOpen(false);\n fileInputRef.current?.click();\n };\n\n const handleFileChange = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n // Reset the native input so the same file can be picked again later.\n event.target.value = '';\n if (!file) {\n return;\n }\n await replaceAsset(file);\n };\n\n return (\n <>\n <VisuallyHidden>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple={false}\n onChange={handleFileChange}\n aria-hidden\n tabIndex={-1}\n />\n </VisuallyHidden>\n <IconButton\n withTooltip={false}\n label={formatMessage({\n id: getTranslationKey('asset-details.replace.trigger'),\n defaultMessage: 'Replace this file',\n })}\n variant=\"tertiary\"\n onClick={handleTriggerClick}\n disabled={isReplacing}\n >\n <ArrowsCounterClockwise />\n </IconButton>\n <Dialog.Root open={isDialogOpen} onOpenChange={setIsDialogOpen}>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: getTranslationKey('asset-details.replace.title'),\n defaultMessage: 'Replace this media file?',\n })}\n </Dialog.Header>\n <Dialog.Body textAlign=\"center\">\n <Flex direction=\"column\" textAlign=\"center\">\n <Typography variant=\"omega\">\n {formatMessage({\n id: getTranslationKey('asset-details.replace.description'),\n defaultMessage: 'Current content will be permanently replaced.',\n })}\n </Typography>\n {aiEnabled ? (\n <Typography variant=\"omega\">\n {formatMessage({\n id: getTranslationKey('asset-details.replace.description.ai'),\n defaultMessage: 'AI will generate new metadata after upload.',\n })}\n </Typography>\n ) : null}\n </Flex>\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" fullWidth>\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Dialog.Cancel>\n <Dialog.Action>\n <Button variant=\"secondary\" onClick={handleContinue} fullWidth>\n {formatMessage({\n id: getTranslationKey('asset-details.replace.continue'),\n defaultMessage: 'Continue',\n })}\n </Button>\n </Dialog.Action>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetDetails\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetDetailsProps {\n asset: AssetWithPopulatedCreatedBy;\n closeDetails: () => void;\n}\n\ninterface AssetFormState {\n name: string;\n caption: string;\n alternativeText: string;\n folder: number | null;\n}\n\nexport const AssetDetails = ({ asset, closeDetails }: AssetDetailsProps) => {\n const { formatMessage, formatDate } = useIntl();\n const { data: folders = [] } = useGetAllFoldersQuery();\n const { toggleNotification } = useNotification();\n const [updateAsset] = useUpdateAssetMutation();\n const [replaceMutation, { isLoading: isReplacing }] = useReplaceAssetMutation();\n const [deleteMutation, { isLoading: isDeleting }] = useDeleteAssetMutation();\n\n // In-drawer toast slot\n const [drawerToast, setDrawerToast] = React.useState<DrawerToast | null>(null);\n React.useEffect(() => {\n if (!drawerToast) return;\n const timer = window.setTimeout(() => setDrawerToast(null), 5000);\n return () => window.clearTimeout(timer);\n }, [drawerToast]);\n\n // Local alias matching the DrawerNotifyContext signature, so the drawer's\n // own handlers (replace, update) read like the consumers do.\n const notify = React.useCallback<DrawerNotify>((toast) => setDrawerToast(toast), []);\n\n const isImage = asset.mime?.includes(AssetType.Image);\n\n const initialValues: AssetFormState = {\n name: asset.name ?? '',\n caption: asset.caption ?? '',\n alternativeText: asset.alternativeText ?? '',\n folder:\n typeof asset.folder === 'object' && asset.folder !== null\n ? ((asset.folder as { id: number }).id ?? null)\n : ((asset.folder as number | null | undefined) ?? null),\n };\n\n const handleSubmit = async (values: AssetFormState) => {\n const res = await updateAsset({\n id: asset.id,\n fileInfo: {\n name: values.name,\n caption: values.caption,\n alternativeText: values.alternativeText,\n folder: values.folder,\n },\n });\n\n if ('error' in res) {\n notify({\n type: 'danger',\n message: formatMessage({\n id: getTranslationKey('asset-details.update.error'),\n defaultMessage: 'Failed to update the file.',\n }),\n });\n return;\n }\n\n notify({\n type: 'success',\n message: formatMessage({\n id: getTranslationKey('asset-details.update.success'),\n defaultMessage: 'File updated',\n }),\n });\n };\n\n const { title: folderName } = useFolderInfo(\n typeof asset.folder === 'object' && asset.folder !== null\n ? ((asset.folder as { id: number }).id ?? null)\n : ((asset.folder as number | null | undefined) ?? null)\n );\n\n // Owns the replace upload so isReplacing can drive the busy overlay.\n const handleReplace = async (file: globalThis.File) => {\n const res = await replaceMutation({ id: asset.id, file });\n if ('error' in res) {\n const error = res.error as { data?: { error?: { message?: string }; message?: string } };\n const message =\n error?.data?.error?.message ??\n error?.data?.message ??\n formatMessage({\n id: getTranslationKey('asset-details.replace.error'),\n defaultMessage: 'Failed to replace the file.',\n });\n notify({ type: 'danger', message });\n return;\n }\n notify({\n type: 'success',\n message: formatMessage({\n id: getTranslationKey('asset-details.replace.success'),\n defaultMessage: 'File replaced.',\n }),\n });\n };\n\n // Owns the delete: on error notify in-drawer (drawer stays), on success fire\n // a persistent global notification then close the drawer.\n const handleDelete = async () => {\n const res = await deleteMutation(asset.id);\n if ('error' in res) {\n const error = res.error as { data?: { error?: { message?: string }; message?: string } };\n const message =\n error?.data?.error?.message ??\n error?.data?.message ??\n formatMessage({\n id: getTranslationKey('asset-details.delete.error'),\n defaultMessage: 'Failed to delete the asset.',\n });\n notify({ type: 'danger', message });\n return;\n }\n toggleNotification({\n type: 'success',\n message: formatMessage(\n {\n id: getTranslationKey('asset-details.delete.success'),\n defaultMessage: '1 element have been deleted from {folderName}',\n },\n { folderName }\n ),\n });\n closeDetails();\n };\n\n const operations = React.useMemo<AssetOperations>(\n () => ({\n replaceAsset: handleReplace,\n deleteAsset: handleDelete,\n isReplacing,\n isDeleting,\n }),\n // handleReplace / handleDelete close over asset+mutations and don't need a\n // stable identity here; the consumers re-render with the new context value.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isReplacing, isDeleting]\n );\n\n return (\n // `key={asset.id}` resets the form when the drawer switches to a different\n // asset so cached values from the previous asset don't bleed in.\n <DrawerNotifyContext.Provider value={notify}>\n <AssetOperationsContext.Provider value={operations}>\n <FormShell>\n <Form key={asset.id} method=\"POST\" initialValues={initialValues} onSubmit={handleSubmit}>\n {({ modified, isSubmitting, values, resetForm }) => {\n const nameIsEmpty = ((values as AssetFormState).name ?? '').trim() === '';\n return (\n <>\n {/* Guards every close path (X button, ESC, route change, browser\n back) by intercepting the navigation when the form is dirty.\n `onProceed` resets the form so the held navigation can complete.\n Lives inside <Form> so it can read the form context. */}\n <Blocker onProceed={resetForm} />\n {isReplacing || isDeleting ? (\n <DrawerBusyOverlay>\n <Loader>\n {formatMessage({\n id: getTranslationKey(\n isDeleting\n ? 'asset-details.delete.loading'\n : 'asset-details.replace.loading'\n ),\n defaultMessage: isDeleting ? 'Deleting the file…' : 'Replacing the file…',\n })}\n </Loader>\n </DrawerBusyOverlay>\n ) : null}\n {drawerToast ? (\n <DrawerToastSlot>\n <Alert\n variant={drawerToast.type === 'success' ? 'success' : 'danger'}\n closeLabel={formatMessage({ id: 'global.close', defaultMessage: 'Close' })}\n onClose={() => setDrawerToast(null)}\n >\n {drawerToast.message}\n </Alert>\n </DrawerToastSlot>\n ) : null}\n <Drawer.ScrollableContent>\n <AssetPreview\n asset={asset}\n actions={\n isImage ? (\n <Flex direction=\"column\" gap={2}>\n <ReplaceAssetButton />\n </Flex>\n ) : null\n }\n />\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={5}\n paddingRight={5}\n >\n <Typography variant=\"beta\" fontWeight=\"semiBold\" tag=\"h3\">\n {formatMessage({\n id: getTranslationKey('asset-details.fileInfo'),\n defaultMessage: 'File info',\n })}\n </Typography>\n <Flex\n wrap=\"wrap\"\n gap={4}\n background=\"neutral100\"\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={6}\n paddingRight={6}\n alignItems=\"flex-start\"\n >\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.creationDate'),\n defaultMessage: 'Creation date',\n })}\n value={\n asset.createdAt\n ? formatDate(new Date(asset.createdAt), {\n dateStyle: 'long',\n timeStyle: 'short',\n })\n : null\n }\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.lastUpdated'),\n defaultMessage: 'Last updated',\n })}\n value={\n asset.updatedAt\n ? formatDate(new Date(asset.updatedAt), {\n dateStyle: 'long',\n timeStyle: 'short',\n })\n : null\n }\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.createdBy'),\n defaultMessage: 'Created by',\n })}\n value={\n asset.createdBy\n ? (getDisplayName({\n firstname: asset.createdBy.firstname ?? undefined,\n lastname: asset.createdBy.lastname ?? undefined,\n username: asset.createdBy.username ?? undefined,\n email: asset.createdBy.email ?? undefined,\n }) ?? '-')\n : null\n }\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.size'),\n defaultMessage: 'Size',\n })}\n value={asset.size ? formatBytes(asset.size, 1) : null}\n />\n {isImage && (asset.width != null || asset.height != null) && (\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.dimensions'),\n defaultMessage: 'Dimensions',\n })}\n value={\n asset.width != null && asset.height != null\n ? `${asset.width} × ${asset.height}`\n : null\n }\n />\n )}\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.extension'),\n defaultMessage: 'Extension',\n })}\n value={getFileExtension(asset.ext)}\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.assetId'),\n defaultMessage: 'Asset ID',\n })}\n value={String(asset.id)}\n />\n </Flex>\n <DetailField\n name=\"name\"\n label={formatMessage({\n id: getTranslationKey('asset-details.fileName'),\n defaultMessage: 'File name',\n })}\n required\n />\n <LocationField\n label={formatMessage({\n id: getTranslationKey('asset-details.location'),\n defaultMessage: 'Location',\n })}\n rootLabel={formatMessage({\n id: getTranslationKey('plugin.home'),\n defaultMessage: 'Home',\n })}\n folders={folders}\n />\n {isImage && (\n <>\n <DetailField\n name=\"caption\"\n label={formatMessage({\n id: getTranslationKey('asset-details.caption'),\n defaultMessage: 'Caption',\n })}\n />\n <DetailField\n name=\"alternativeText\"\n label={formatMessage({\n id: getTranslationKey('asset-details.alternativeText'),\n defaultMessage: 'Alternative text',\n })}\n />\n </>\n )}\n </Flex>\n </Drawer.ScrollableContent>\n <Flex\n justifyContent=\"space-between\"\n alignItems=\"center\"\n gap={2}\n padding={3}\n borderColor=\"neutral150\"\n borderStyle=\"solid\"\n borderWidth=\"1px 0 0 0\"\n background=\"neutral0\"\n >\n <Flex gap={2}>\n <DeleteAssetButton />\n <CopyLinkButton asset={asset} />\n <DownloadAssetButton asset={asset} />\n </Flex>\n <Button\n type=\"submit\"\n variant=\"default\"\n loading={isSubmitting}\n // File name is required; block submit when it's empty or whitespace so the API can't 400 on a blank value.\n disabled={!modified || isSubmitting || nameIsEmpty}\n >\n {formatMessage({\n id: getTranslationKey('asset-details.save'),\n defaultMessage: 'Save changes',\n })}\n </Button>\n </Flex>\n </>\n );\n }}\n </Form>\n </FormShell>\n </AssetOperationsContext.Provider>\n </DrawerNotifyContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DrawerHeader\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DrawerHeaderProps {\n asset: AssetWithPopulatedCreatedBy;\n closeDetails: () => void;\n}\n\nconst DrawerHeader = ({ asset, closeDetails }: DrawerHeaderProps) => {\n const DocIcon = asset ? getAssetIcon(asset.mime, asset.ext) : FileError;\n return (\n <Flex\n gap={2}\n paddingLeft={5}\n paddingTop={3}\n paddingBottom={3}\n paddingRight={3}\n borderColor=\"neutral150\"\n borderStyle=\"solid\"\n borderWidth=\"0 0 1px 0\"\n >\n <DocIcon width={20} height={20} />\n <Drawer.Title asChild>\n <Typography variant=\"omega\" fontWeight=\"semiBold\" overflow=\"hidden\" ellipsis tag=\"h2\">\n {asset.name}\n </Typography>\n </Drawer.Title>\n <Box marginLeft=\"auto\">\n <Drawer.CloseButton onClose={closeDetails}>\n <ArrowLineRight />\n </Drawer.CloseButton>\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DrawerContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DrawerContentProps {\n assetId: number;\n closeDetails: () => void;\n}\n\nconst DrawerContent = ({ assetId, closeDetails }: DrawerContentProps) => {\n const { formatMessage } = useIntl();\n const {\n data: asset,\n isLoading,\n error,\n } = useGetAssetQuery(assetId, {\n refetchOnMountOrArgChange: false,\n refetchOnReconnect: false,\n refetchOnFocus: false,\n });\n\n if (isLoading) {\n return (\n <Flex justifyContent=\"center\" padding={8}>\n <Loader>{formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' })}</Loader>\n </Flex>\n );\n }\n\n if (error || !asset) {\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4} padding={4}>\n <Alert\n variant=\"danger\"\n closeLabel={formatMessage({ id: 'global.close', defaultMessage: 'Close' })}\n onClose={closeDetails}\n >\n {formatMessage({\n id: getTranslationKey('asset-details.error'),\n defaultMessage: 'Failed to load file details.',\n })}\n </Alert>\n </Flex>\n );\n }\n\n return (\n <>\n <DrawerHeader asset={asset} closeDetails={closeDetails} />\n <AssetDetails asset={asset} closeDetails={closeDetails} />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetDetailsDrawer\n * -----------------------------------------------------------------------------------------------*/\n\nexport const AssetDetailsDrawer = () => {\n const { formatMessage } = useIntl();\n const { assetId, isVisible, shouldRenderDrawer, onCloseAnimationEnd, closeDetails } =\n useAssetDetailsParam();\n\n if (!shouldRenderDrawer || assetId === null) {\n return null;\n }\n\n return (\n <Drawer.Root isVisible={isVisible} onClose={closeDetails}>\n {/* Wrapper div required: Dialog.Portal uses asChild and merges ref onto each child.\n VisuallyHidden does not forward refs, so we wrap it in a div that can receive the ref. */}\n <div>\n <VisuallyHidden>\n <Drawer.Title>\n {formatMessage({\n id: getTranslationKey('asset-details.title'),\n defaultMessage: 'File details',\n })}\n </Drawer.Title>\n <Drawer.Description>\n {formatMessage({\n id: getTranslationKey('asset-details.description'),\n defaultMessage: 'Displays file information and metadata',\n })}\n </Drawer.Description>\n </VisuallyHidden>\n </div>\n <Drawer.Body\n animationDirection=\"left\"\n width=\"41.6rem\"\n height=\"100vh\"\n onAnimationEnd={onCloseAnimationEnd}\n >\n <DrawerContent assetId={assetId} closeDetails={closeDetails} />\n </Drawer.Body>\n </Drawer.Root>\n );\n};\n"],"names":["URL_PARAM","DrawerNotifyContext","React","createContext","useDrawerNotify","ctx","useContext","Error","AssetOperationsContext","useAssetOperation","useAssetDetailsParam","query","setQuery","useQueryParams","detailsId","assetId","parseInt","hasValidId","Number","isNaN","isMounted","setIsMounted","useState","displayAssetId","useRef","useEffect","current","onCloseAnimationEnd","useCallback","event","target","currentTarget","openDetails","id","String","closeDetails","undefined","isVisible","shouldRenderDrawer","DetailItemContainer","styled","Flex","theme","spaces","DetailItem","label","value","_jsxs","direction","justifyContent","alignItems","gap","_jsx","Typography","variant","textColor","fontWeight","textTransform","FormShell","Box","DrawerToastSlot","DrawerBusyOverlay","colors","neutral0","StyledWarning","WarningCircle","warning500","DetailField","name","required","formatMessage","useIntl","field","useField","isSubmitting","useForm","state","emptyTooltipLabel","getTranslationKey","defaultMessage","Field","Root","Label","TextInput","onChange","endAction","Tooltip","aria-label","role","type","disabled","LocationField","rootLabel","folders","SingleSelect","next","SingleSelectOption","map","folder","DeleteAssetButton","deleteAsset","isDeleting","isOpen","setIsOpen","handleConfirm","triggerLabel","Dialog","open","onOpenChange","Trigger","IconButton","withTooltip","Trash","Content","Header","Body","icon","width","height","fill","textAlign","Footer","Cancel","Button","fullWidth","Action","loading","onClick","CopyLinkButton","asset","copy","useClipboard","notify","handleCopy","url","prefixFileUrlWithBackendUrl","didCopy","message","Link","DownloadAssetButton","isDownloading","setIsDownloading","handleDownload","downloadFile","Download","ReplaceAssetButton","replaceAsset","isReplacing","fileInputRef","isDialogOpen","setIsDialogOpen","data","settings","useGetSettingsQuery","aiEnabled","aiMetadata","handleTriggerClick","handleContinue","click","handleFileChange","file","files","_Fragment","VisuallyHidden","input","ref","multiple","aria-hidden","tabIndex","ArrowsCounterClockwise","AssetDetails","formatDate","useGetAllFoldersQuery","toggleNotification","useNotification","updateAsset","useUpdateAssetMutation","replaceMutation","isLoading","useReplaceAssetMutation","deleteMutation","useDeleteAssetMutation","drawerToast","setDrawerToast","timer","window","setTimeout","clearTimeout","toast","isImage","mime","includes","AssetType","Image","initialValues","caption","alternativeText","handleSubmit","values","res","fileInfo","title","folderName","useFolderInfo","handleReplace","error","handleDelete","operations","useMemo","Provider","Form","method","onSubmit","modified","resetForm","nameIsEmpty","trim","Blocker","onProceed","Loader","Alert","closeLabel","onClose","Drawer","ScrollableContent","AssetPreview","actions","paddingTop","paddingBottom","paddingLeft","paddingRight","tag","wrap","background","createdAt","Date","dateStyle","timeStyle","updatedAt","createdBy","getDisplayName","firstname","lastname","username","email","size","formatBytes","getFileExtension","ext","padding","borderColor","borderStyle","borderWidth","DrawerHeader","DocIcon","getAssetIcon","FileError","Title","asChild","overflow","ellipsis","marginLeft","CloseButton","ArrowLineRight","DrawerContent","useGetAssetQuery","refetchOnMountOrArgChange","refetchOnReconnect","refetchOnFocus","AssetDetailsDrawer","div","Description","animationDirection","onAnimationEnd"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AssetDetailsDrawer.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Blocker,\n Form,\n useClipboard,\n useField,\n useForm,\n useNotification,\n useQueryParams,\n getDisplayName,\n} from '@strapi/admin/strapi-admin';\nimport {\n Alert,\n Box,\n Button,\n Dialog,\n Field,\n Flex,\n IconButton,\n Loader,\n SingleSelect,\n SingleSelectOption,\n TextInput,\n Tooltip,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport {\n ArrowLineRight,\n Download,\n FileError,\n Link,\n Trash,\n WarningCircle,\n ArrowsCounterClockwise,\n} from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { Drawer } from '../../../../components/Drawer';\nimport { AssetType } from '../../../../enums';\nimport {\n useDeleteAssetMutation,\n useGetAssetQuery,\n useReplaceAssetMutation,\n useUpdateAssetMutation,\n} from '../../../../services/assets';\nimport { useGetAllFoldersQuery } from '../../../../services/folders';\nimport { useGetSettingsQuery } from '../../../../services/settings';\nimport { downloadFile } from '../../../../utils/downloadFile';\nimport {\n formatBytes,\n getFileExtension,\n prefixFileUrlWithBackendUrl,\n} from '../../../../utils/files';\nimport { getAssetIcon } from '../../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../../utils/translations';\nimport { useFolderInfo } from '../../hooks/useFolderInfo';\n\nimport { AssetPreview } from './AssetPreview';\n\nimport type { AssetWithPopulatedCreatedBy } from '../../../../../../../shared/contracts/files';\n\n// Name of the parameter to look for in the URL to open the drawer\nconst URL_PARAM = 'assetId';\n\ninterface DrawerToast {\n type: 'success' | 'danger';\n message: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * DrawerNotifyContext — exposes the in-drawer toast setter so deep descendants\n * (footer action buttons) can report success/error without prop drilling.\n * -----------------------------------------------------------------------------------------------*/\n\ntype DrawerNotify = (toast: DrawerToast) => void;\n\nexport const DrawerNotifyContext = React.createContext<DrawerNotify | null>(null);\n\nconst useDrawerNotify = () => {\n const ctx = React.useContext(DrawerNotifyContext);\n if (!ctx) {\n throw new Error('useDrawerNotify must be used within AssetDetails');\n }\n return ctx;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetOperationsContext — drawer-scoped mutations + their pending state, so\n * leaf buttons (Delete, Replace) consume them without prop drilling and the\n * full-drawer busy overlay reads a single flag.\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetOperations {\n replaceAsset: (file: globalThis.File) => Promise<void>;\n deleteAsset: () => Promise<void>;\n isReplacing: boolean;\n isDeleting: boolean;\n}\n\nexport const AssetOperationsContext = React.createContext<AssetOperations | null>(null);\n\nconst useAssetOperation = () => {\n const ctx = React.useContext(AssetOperationsContext);\n if (!ctx) {\n throw new Error('useAssetOperation must be used within AssetDetails');\n }\n return ctx;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useAssetDetailsParam - sync drawer visibility with URL ?{URL_PARAM}={id}\n * -----------------------------------------------------------------------------------------------*/\n\nexport const useAssetDetailsParam = () => {\n const [{ query }, setQuery] = useQueryParams<{ [URL_PARAM]?: string }>();\n\n const detailsId = query?.[URL_PARAM];\n const assetId = detailsId ? parseInt(detailsId, 10) : null;\n const hasValidId = assetId !== null && !Number.isNaN(assetId);\n\n // Closing is driven by removing the URL param (a navigation), so navigation\n // guards like <Blocker> can intercept it. `isMounted` keeps the drawer in the\n // tree through the slide-out: it stays true once opened and only flips false\n // when the close animation actually ends (see onCloseAnimationEnd), so the\n // close duration lives entirely in CSS — no JS timer.\n const [isMounted, setIsMounted] = React.useState(hasValidId);\n const displayAssetId = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n if (hasValidId) {\n displayAssetId.current = assetId;\n setIsMounted(true);\n }\n }, [hasValidId, assetId]);\n\n const onCloseAnimationEnd = React.useCallback(\n (event: React.AnimationEvent) => {\n // Ignore animations bubbling up from descendants, and the slide-in.\n if (event.target === event.currentTarget && !hasValidId) {\n setIsMounted(false);\n }\n },\n [hasValidId]\n );\n\n const openDetails = React.useCallback(\n (id: number) => {\n setQuery({ [URL_PARAM]: String(id) }, 'push', true);\n },\n [setQuery]\n );\n\n const closeDetails = React.useCallback(() => {\n setQuery({ [URL_PARAM]: undefined }, 'remove', true);\n }, [setQuery]);\n\n return {\n assetId: hasValidId ? assetId : displayAssetId.current,\n isVisible: hasValidId,\n shouldRenderDrawer: isMounted,\n onCloseAnimationEnd,\n openDetails,\n closeDetails,\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DetailItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DetailItemProps {\n label: string;\n value: React.ReactNode;\n}\n\nconst DetailItemContainer = styled(Flex)`\n flex: 0 0 calc(50% - ${({ theme }) => theme.spaces[2]});\n`;\n\nconst DetailItem = ({ label, value }: DetailItemProps) => (\n <DetailItemContainer\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n gap={1}\n >\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n fontWeight=\"semiBold\"\n textTransform=\"uppercase\"\n >\n {label}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral700\">\n {value ?? '-'}\n </Typography>\n </DetailItemContainer>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DetailField\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Make the asset details Form behave as a flex column inside Drawer.Body so\n * the scrollable area can grow while the footer stays pinned at the bottom.\n * The Form component from `@strapi/admin/strapi-admin` only forwards `width`\n * + `height` to its Box, so we target the rendered `<form>` element via a\n * styled-components descendant rule.\n */\nconst FormShell = styled(Box)`\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n\n > form {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n position: relative;\n }\n`;\n\n/**\n * In-drawer toast container\n */\nconst DrawerToastSlot = styled(Box)`\n position: absolute;\n top: ${({ theme }) => theme.spaces[2]};\n left: 50%;\n transform: translateX(-50%);\n z-index: 10;\n width: calc(100% - ${({ theme }) => theme.spaces[2]});\n`;\n\n/**\n * Full-form overlay rendered during long-running drawer-scoped mutations\n * (e.g. replacing the binary). Sits above the toast slot (z-index 10) and\n * the in-drawer Alert so the user can't interact with the form mid-flight.\n */\nconst DrawerBusyOverlay = styled(Flex)`\n position: absolute;\n inset: 0;\n z-index: 20;\n align-items: center;\n justify-content: center;\n background: ${({ theme }) => theme.colors.neutral0};\n opacity: 0.7;\n`;\n\nconst StyledWarning = styled(WarningCircle)`\n width: 1.6rem;\n height: 1.6rem;\n\n path {\n fill: ${({ theme }) => theme.colors.warning500};\n }\n`;\n\ninterface DetailFieldProps {\n name: string;\n label: string;\n required?: boolean;\n}\n\nconst DetailField = ({ name, label, required }: DetailFieldProps) => {\n const { formatMessage } = useIntl();\n const field = useField<string>(name);\n const isSubmitting = useForm('DetailField', (state) => state.isSubmitting);\n const value = field.value ?? '';\n const emptyTooltipLabel = formatMessage(\n {\n id: getTranslationKey('asset-details.field.empty'),\n defaultMessage: '{label} is currently empty.',\n },\n { label }\n );\n\n return (\n <Field.Root name={name} required={required}>\n <Field.Label>{label}</Field.Label>\n <TextInput\n value={value}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) =>\n field.onChange(name, event.target.value)\n }\n endAction={\n !value ? (\n <Tooltip label={emptyTooltipLabel}>\n <StyledWarning aria-label={emptyTooltipLabel} role=\"img\" />\n </Tooltip>\n ) : undefined\n }\n type=\"text\"\n disabled={isSubmitting}\n />\n </Field.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LocationField\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LocationFieldProps {\n label: string;\n rootLabel: string;\n folders: Array<{ id: number; name: string }>;\n}\n\nconst LocationField = ({ label, rootLabel, folders }: LocationFieldProps) => {\n const field = useField<number | null>('folder');\n const isSubmitting = useForm('LocationField', (state) => state.isSubmitting);\n\n return (\n <Field.Root name=\"folder\" required>\n <Field.Label>{label}</Field.Label>\n {/* `null` is the canonical \"root of the Media Library\" value everywhere\n in the upload domain. The DS `SingleSelectOption.value` prop is typed\n `string | number`, so we use the empty string as a DOM-only sentinel\n for the root option and map it back to `null` on change. */}\n <SingleSelect\n value={field.value == null ? '' : String(field.value)}\n onChange={(value) => {\n const next = value === '' ? null : Number(value);\n field.onChange('folder', next);\n }}\n disabled={isSubmitting}\n >\n <SingleSelectOption value=\"\">{rootLabel}</SingleSelectOption>\n {folders.map((folder) => (\n <SingleSelectOption key={folder.id} value={String(folder.id)}>\n {folder.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteAssetButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst DeleteAssetButton = () => {\n const { formatMessage } = useIntl();\n const { deleteAsset, isDeleting } = useAssetOperation();\n const [isOpen, setIsOpen] = React.useState(false);\n\n const handleConfirm = async () => {\n await deleteAsset();\n setIsOpen(false);\n };\n\n const triggerLabel = formatMessage({\n id: getTranslationKey('asset-details.delete.trigger'),\n defaultMessage: 'Delete this file',\n });\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={setIsOpen}>\n <Dialog.Trigger>\n <IconButton withTooltip={false} label={triggerLabel} variant=\"danger-light\">\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: getTranslationKey('asset-details.delete.title'),\n defaultMessage: 'Delete this media file?',\n })}\n </Dialog.Header>\n <Dialog.Body\n icon={<WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />}\n textAlign=\"center\"\n >\n {formatMessage({\n id: getTranslationKey('asset-details.delete.description'),\n defaultMessage:\n 'This file cannot be recovered once deleted. If it is currently in use, linked content will break and image containers will be empty.',\n })}\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" disabled={isDeleting} fullWidth>\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Dialog.Cancel>\n <Dialog.Action>\n <Button variant=\"danger-light\" loading={isDeleting} onClick={handleConfirm} fullWidth>\n {formatMessage({ id: 'app.components.Button.confirm', defaultMessage: 'Confirm' })}\n </Button>\n </Dialog.Action>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CopyLinkButton — write the absolute asset URL to the clipboard.\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CopyLinkButtonProps {\n asset: AssetWithPopulatedCreatedBy;\n}\n\nconst CopyLinkButton = ({ asset }: CopyLinkButtonProps) => {\n const { formatMessage } = useIntl();\n const { copy } = useClipboard();\n const notify = useDrawerNotify();\n\n const handleCopy = async () => {\n const url = prefixFileUrlWithBackendUrl(asset.url);\n if (!url) return;\n const didCopy = await copy(url);\n notify({\n type: didCopy ? 'success' : 'danger',\n message: didCopy\n ? formatMessage({\n id: getTranslationKey('asset-details.copy-link.success'),\n defaultMessage: 'Link copied.',\n })\n : formatMessage({\n id: getTranslationKey('asset-details.copy-link.error'),\n defaultMessage: 'Failed to copy the link.',\n }),\n });\n };\n\n return (\n <IconButton\n withTooltip={false}\n label={formatMessage({\n id: getTranslationKey('asset-details.copy-link.trigger'),\n defaultMessage: 'Copy link',\n })}\n variant=\"tertiary\"\n onClick={handleCopy}\n >\n <Link />\n </IconButton>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DownloadAssetButton — fetch the file and trigger a browser download.\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DownloadAssetButtonProps {\n asset: AssetWithPopulatedCreatedBy;\n}\n\nconst DownloadAssetButton = ({ asset }: DownloadAssetButtonProps) => {\n const { formatMessage } = useIntl();\n const notify = useDrawerNotify();\n const [isDownloading, setIsDownloading] = React.useState(false);\n\n const handleDownload = async () => {\n const url = prefixFileUrlWithBackendUrl(asset.url);\n if (!url) return;\n setIsDownloading(true);\n try {\n await downloadFile(url, asset.name);\n } catch {\n notify({\n type: 'danger',\n message: formatMessage({\n id: getTranslationKey('asset-details.download.error'),\n defaultMessage: 'Failed to download the file.',\n }),\n });\n } finally {\n setIsDownloading(false);\n }\n };\n\n return (\n <IconButton\n withTooltip={false}\n label={formatMessage({\n id: getTranslationKey('asset-details.download.trigger'),\n defaultMessage: 'Download',\n })}\n variant=\"tertiary\"\n onClick={handleDownload}\n disabled={isDownloading}\n >\n <Download />\n </IconButton>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReplaceAssetButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst ReplaceAssetButton = () => {\n const { formatMessage } = useIntl();\n const { replaceAsset, isReplacing } = useAssetOperation();\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\n const { data: settings } = useGetSettingsQuery();\n const aiEnabled = settings?.data?.aiMetadata ?? false;\n\n const handleTriggerClick = () => {\n setIsDialogOpen(true);\n };\n\n const handleContinue = () => {\n // Confirm first, then open the native picker so the user only commits to\n // replacing after acknowledging the warning. The actual POST is delegated\n // to the parent (which owns the mutation + loading state).\n setIsDialogOpen(false);\n fileInputRef.current?.click();\n };\n\n const handleFileChange = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n // Reset the native input so the same file can be picked again later.\n event.target.value = '';\n if (!file) {\n return;\n }\n await replaceAsset(file);\n };\n\n return (\n <>\n <VisuallyHidden>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple={false}\n onChange={handleFileChange}\n aria-hidden\n tabIndex={-1}\n />\n </VisuallyHidden>\n <IconButton\n withTooltip={false}\n label={formatMessage({\n id: getTranslationKey('asset-details.replace.trigger'),\n defaultMessage: 'Replace this file',\n })}\n variant=\"tertiary\"\n onClick={handleTriggerClick}\n disabled={isReplacing}\n >\n <ArrowsCounterClockwise />\n </IconButton>\n <Dialog.Root open={isDialogOpen} onOpenChange={setIsDialogOpen}>\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage({\n id: getTranslationKey('asset-details.replace.title'),\n defaultMessage: 'Replace this media file?',\n })}\n </Dialog.Header>\n <Dialog.Body textAlign=\"center\">\n <Flex direction=\"column\" textAlign=\"center\">\n <Typography variant=\"omega\">\n {formatMessage({\n id: getTranslationKey('asset-details.replace.description'),\n defaultMessage: 'Current content will be permanently replaced.',\n })}\n </Typography>\n {aiEnabled ? (\n <Typography variant=\"omega\">\n {formatMessage({\n id: getTranslationKey('asset-details.replace.description.ai'),\n defaultMessage: 'AI will generate new metadata after upload.',\n })}\n </Typography>\n ) : null}\n </Flex>\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" fullWidth>\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Dialog.Cancel>\n <Dialog.Action>\n <Button variant=\"secondary\" onClick={handleContinue} fullWidth>\n {formatMessage({\n id: getTranslationKey('asset-details.replace.continue'),\n defaultMessage: 'Continue',\n })}\n </Button>\n </Dialog.Action>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetDetails\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetDetailsProps {\n asset: AssetWithPopulatedCreatedBy;\n closeDetails: () => void;\n}\n\ninterface AssetFormState {\n name: string;\n caption: string;\n alternativeText: string;\n folder: number | null;\n}\n\nexport const AssetDetails = ({ asset, closeDetails }: AssetDetailsProps) => {\n const { formatMessage, formatDate } = useIntl();\n const { data: folders = [] } = useGetAllFoldersQuery();\n const { toggleNotification } = useNotification();\n const [updateAsset] = useUpdateAssetMutation();\n const [replaceMutation, { isLoading: isReplacing }] = useReplaceAssetMutation();\n const [deleteMutation, { isLoading: isDeleting }] = useDeleteAssetMutation();\n\n // In-drawer toast slot\n const [drawerToast, setDrawerToast] = React.useState<DrawerToast | null>(null);\n React.useEffect(() => {\n if (!drawerToast) return;\n const timer = window.setTimeout(() => setDrawerToast(null), 5000);\n return () => window.clearTimeout(timer);\n }, [drawerToast]);\n\n // Local alias matching the DrawerNotifyContext signature, so the drawer's\n // own handlers (replace, update) read like the consumers do.\n const notify = React.useCallback<DrawerNotify>((toast) => setDrawerToast(toast), []);\n\n const isImage = asset.mime?.includes(AssetType.Image);\n\n const initialValues: AssetFormState = {\n name: asset.name ?? '',\n caption: asset.caption ?? '',\n alternativeText: asset.alternativeText ?? '',\n folder:\n typeof asset.folder === 'object' && asset.folder !== null\n ? ((asset.folder as { id: number }).id ?? null)\n : ((asset.folder as number | null | undefined) ?? null),\n };\n\n const handleSubmit = async (values: AssetFormState) => {\n const res = await updateAsset({\n id: asset.id,\n fileInfo: {\n name: values.name,\n caption: values.caption,\n alternativeText: values.alternativeText,\n folder: values.folder,\n },\n });\n\n if ('error' in res) {\n notify({\n type: 'danger',\n message: formatMessage({\n id: getTranslationKey('asset-details.update.error'),\n defaultMessage: 'Failed to update the file.',\n }),\n });\n return;\n }\n\n notify({\n type: 'success',\n message: formatMessage({\n id: getTranslationKey('asset-details.update.success'),\n defaultMessage: 'File updated',\n }),\n });\n };\n\n const { title: folderName } = useFolderInfo(\n typeof asset.folder === 'object' && asset.folder !== null\n ? ((asset.folder as { id: number }).id ?? null)\n : ((asset.folder as number | null | undefined) ?? null)\n );\n\n // Owns the replace upload so isReplacing can drive the busy overlay.\n const handleReplace = async (file: globalThis.File) => {\n const res = await replaceMutation({ id: asset.id, file });\n if ('error' in res) {\n const error = res.error as { data?: { error?: { message?: string }; message?: string } };\n const message =\n error?.data?.error?.message ??\n error?.data?.message ??\n formatMessage({\n id: getTranslationKey('asset-details.replace.error'),\n defaultMessage: 'Failed to replace the file.',\n });\n notify({ type: 'danger', message });\n return;\n }\n notify({\n type: 'success',\n message: formatMessage({\n id: getTranslationKey('asset-details.replace.success'),\n defaultMessage: 'File replaced.',\n }),\n });\n };\n\n // Owns the delete: on error notify in-drawer (drawer stays), on success fire\n // a persistent global notification then close the drawer.\n const handleDelete = async () => {\n const res = await deleteMutation(asset.id);\n if ('error' in res) {\n const error = res.error as { data?: { error?: { message?: string }; message?: string } };\n const message =\n error?.data?.error?.message ??\n error?.data?.message ??\n formatMessage({\n id: getTranslationKey('asset-details.delete.error'),\n defaultMessage: 'Failed to delete the asset.',\n });\n notify({ type: 'danger', message });\n return;\n }\n toggleNotification({\n type: 'success',\n message: formatMessage(\n {\n id: getTranslationKey('asset-details.delete.success'),\n defaultMessage: '1 element have been deleted from {folderName}',\n },\n { folderName }\n ),\n });\n closeDetails();\n };\n\n const operations = React.useMemo<AssetOperations>(\n () => ({\n replaceAsset: handleReplace,\n deleteAsset: handleDelete,\n isReplacing,\n isDeleting,\n }),\n // handleReplace / handleDelete close over asset+mutations and don't need a\n // stable identity here; the consumers re-render with the new context value.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isReplacing, isDeleting]\n );\n\n return (\n // `key={asset.id}` resets the form when the drawer switches to a different\n // asset so cached values from the previous asset don't bleed in.\n <DrawerNotifyContext.Provider value={notify}>\n <AssetOperationsContext.Provider value={operations}>\n <FormShell>\n <Form key={asset.id} method=\"POST\" initialValues={initialValues} onSubmit={handleSubmit}>\n {({ modified, isSubmitting, values, resetForm }) => {\n const nameIsEmpty = ((values as AssetFormState).name ?? '').trim() === '';\n return (\n <>\n {/* Guards every close path (X button, ESC, route change, browser\n back) by intercepting the navigation when the form is dirty.\n `onProceed` resets the form so the held navigation can complete.\n Lives inside <Form> so it can read the form context. */}\n <Blocker onProceed={resetForm} />\n {isReplacing || isDeleting ? (\n <DrawerBusyOverlay>\n <Loader>\n {formatMessage({\n id: getTranslationKey(\n isDeleting\n ? 'asset-details.delete.loading'\n : 'asset-details.replace.loading'\n ),\n defaultMessage: isDeleting ? 'Deleting the file…' : 'Replacing the file…',\n })}\n </Loader>\n </DrawerBusyOverlay>\n ) : null}\n {drawerToast ? (\n <DrawerToastSlot>\n <Alert\n variant={drawerToast.type === 'success' ? 'success' : 'danger'}\n closeLabel={formatMessage({ id: 'global.close', defaultMessage: 'Close' })}\n onClose={() => setDrawerToast(null)}\n >\n {drawerToast.message}\n </Alert>\n </DrawerToastSlot>\n ) : null}\n <Drawer.ScrollableContent>\n <AssetPreview\n asset={asset}\n actions={\n isImage ? (\n <Flex direction=\"column\" gap={2}>\n <ReplaceAssetButton />\n </Flex>\n ) : null\n }\n />\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={5}\n paddingRight={5}\n >\n <Typography variant=\"beta\" fontWeight=\"semiBold\" tag=\"h3\">\n {formatMessage({\n id: getTranslationKey('asset-details.fileInfo'),\n defaultMessage: 'File info',\n })}\n </Typography>\n <Flex\n wrap=\"wrap\"\n gap={4}\n background=\"neutral100\"\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={6}\n paddingRight={6}\n alignItems=\"flex-start\"\n >\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.creationDate'),\n defaultMessage: 'Creation date',\n })}\n value={\n asset.createdAt\n ? formatDate(new Date(asset.createdAt), {\n dateStyle: 'long',\n timeStyle: 'short',\n })\n : null\n }\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.lastUpdated'),\n defaultMessage: 'Last updated',\n })}\n value={\n asset.updatedAt\n ? formatDate(new Date(asset.updatedAt), {\n dateStyle: 'long',\n timeStyle: 'short',\n })\n : null\n }\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.createdBy'),\n defaultMessage: 'Created by',\n })}\n value={\n asset.createdBy\n ? (getDisplayName({\n firstname: asset.createdBy.firstname ?? undefined,\n lastname: asset.createdBy.lastname ?? undefined,\n username: asset.createdBy.username ?? undefined,\n email: asset.createdBy.email ?? undefined,\n }) ?? '-')\n : null\n }\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.size'),\n defaultMessage: 'Size',\n })}\n value={asset.size ? formatBytes(asset.size, 1) : null}\n />\n {isImage && (asset.width != null || asset.height != null) && (\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.dimensions'),\n defaultMessage: 'Dimensions',\n })}\n value={\n asset.width != null && asset.height != null\n ? `${asset.width} × ${asset.height}`\n : null\n }\n />\n )}\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.extension'),\n defaultMessage: 'Extension',\n })}\n value={getFileExtension(asset.ext)}\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.assetId'),\n defaultMessage: 'Asset ID',\n })}\n value={String(asset.id)}\n />\n </Flex>\n <DetailField\n name=\"name\"\n label={formatMessage({\n id: getTranslationKey('asset-details.fileName'),\n defaultMessage: 'File name',\n })}\n required\n />\n <LocationField\n label={formatMessage({\n id: getTranslationKey('asset-details.location'),\n defaultMessage: 'Location',\n })}\n rootLabel={formatMessage({\n id: getTranslationKey('plugin.home'),\n defaultMessage: 'Home',\n })}\n folders={folders}\n />\n {isImage && (\n <>\n <DetailField\n name=\"caption\"\n label={formatMessage({\n id: getTranslationKey('asset-details.caption'),\n defaultMessage: 'Caption',\n })}\n />\n <DetailField\n name=\"alternativeText\"\n label={formatMessage({\n id: getTranslationKey('asset-details.alternativeText'),\n defaultMessage: 'Alternative text',\n })}\n />\n </>\n )}\n </Flex>\n </Drawer.ScrollableContent>\n <Flex\n justifyContent=\"space-between\"\n alignItems=\"center\"\n gap={2}\n padding={3}\n borderColor=\"neutral150\"\n borderStyle=\"solid\"\n borderWidth=\"1px 0 0 0\"\n background=\"neutral0\"\n >\n <Flex gap={2}>\n <DeleteAssetButton />\n <CopyLinkButton asset={asset} />\n <DownloadAssetButton asset={asset} />\n </Flex>\n <Button\n type=\"submit\"\n variant=\"default\"\n loading={isSubmitting}\n // File name is required; block submit when it's empty or whitespace so the API can't 400 on a blank value.\n disabled={!modified || isSubmitting || nameIsEmpty}\n >\n {formatMessage({\n id: getTranslationKey('asset-details.save'),\n defaultMessage: 'Save changes',\n })}\n </Button>\n </Flex>\n </>\n );\n }}\n </Form>\n </FormShell>\n </AssetOperationsContext.Provider>\n </DrawerNotifyContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DrawerHeader\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DrawerHeaderProps {\n asset: AssetWithPopulatedCreatedBy;\n closeDetails: () => void;\n}\n\nconst DrawerHeader = ({ asset, closeDetails }: DrawerHeaderProps) => {\n const DocIcon = asset ? getAssetIcon(asset.mime, asset.ext) : FileError;\n return (\n <Flex\n gap={2}\n paddingLeft={5}\n paddingTop={3}\n paddingBottom={3}\n paddingRight={3}\n borderColor=\"neutral150\"\n borderStyle=\"solid\"\n borderWidth=\"0 0 1px 0\"\n >\n <DocIcon width={20} height={20} />\n <Drawer.Title asChild>\n <Typography variant=\"omega\" fontWeight=\"semiBold\" overflow=\"hidden\" ellipsis tag=\"h2\">\n {asset.name}\n </Typography>\n </Drawer.Title>\n <Box marginLeft=\"auto\">\n <Drawer.CloseButton onClose={closeDetails}>\n <ArrowLineRight />\n </Drawer.CloseButton>\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DrawerContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DrawerContentProps {\n assetId: number;\n closeDetails: () => void;\n}\n\nconst DrawerContent = ({ assetId, closeDetails }: DrawerContentProps) => {\n const { formatMessage } = useIntl();\n const {\n data: asset,\n isLoading,\n error,\n } = useGetAssetQuery(assetId, {\n refetchOnMountOrArgChange: false,\n refetchOnReconnect: false,\n refetchOnFocus: false,\n });\n\n if (isLoading) {\n return (\n <Flex justifyContent=\"center\" padding={8}>\n <Loader>{formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' })}</Loader>\n </Flex>\n );\n }\n\n if (error || !asset) {\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4} padding={4}>\n <Alert\n variant=\"danger\"\n closeLabel={formatMessage({ id: 'global.close', defaultMessage: 'Close' })}\n onClose={closeDetails}\n >\n {formatMessage({\n id: getTranslationKey('asset-details.error'),\n defaultMessage: 'Failed to load file details.',\n })}\n </Alert>\n </Flex>\n );\n }\n\n return (\n <>\n <DrawerHeader asset={asset} closeDetails={closeDetails} />\n <AssetDetails asset={asset} closeDetails={closeDetails} />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetDetailsDrawer\n * -----------------------------------------------------------------------------------------------*/\n\nexport const AssetDetailsDrawer = () => {\n const { formatMessage } = useIntl();\n const { assetId, isVisible, shouldRenderDrawer, onCloseAnimationEnd, closeDetails } =\n useAssetDetailsParam();\n\n if (!shouldRenderDrawer || assetId === null) {\n return null;\n }\n\n return (\n <Drawer.Root isVisible={isVisible} onClose={closeDetails}>\n {/* Wrapper div required: Dialog.Portal uses asChild and merges ref onto each child.\n VisuallyHidden does not forward refs, so we wrap it in a div that can receive the ref. */}\n <div>\n <VisuallyHidden>\n <Drawer.Title>\n {formatMessage({\n id: getTranslationKey('asset-details.title'),\n defaultMessage: 'File details',\n })}\n </Drawer.Title>\n <Drawer.Description>\n {formatMessage({\n id: getTranslationKey('asset-details.description'),\n defaultMessage: 'Displays file information and metadata',\n })}\n </Drawer.Description>\n </VisuallyHidden>\n </div>\n <Drawer.Body\n animationDirection=\"left\"\n width=\"41.6rem\"\n height=\"100vh\"\n onAnimationEnd={onCloseAnimationEnd}\n >\n <DrawerContent assetId={assetId} closeDetails={closeDetails} />\n </Drawer.Body>\n </Drawer.Root>\n );\n};\n"],"names":["URL_PARAM","DrawerNotifyContext","React","createContext","useDrawerNotify","ctx","useContext","Error","AssetOperationsContext","useAssetOperation","useAssetDetailsParam","query","setQuery","useQueryParams","detailsId","assetId","parseInt","hasValidId","Number","isNaN","isMounted","setIsMounted","useState","displayAssetId","useRef","useEffect","current","onCloseAnimationEnd","useCallback","event","target","currentTarget","openDetails","id","String","closeDetails","undefined","isVisible","shouldRenderDrawer","DetailItemContainer","styled","Flex","theme","spaces","DetailItem","label","value","_jsxs","direction","justifyContent","alignItems","gap","_jsx","Typography","variant","textColor","fontWeight","textTransform","FormShell","Box","DrawerToastSlot","DrawerBusyOverlay","colors","neutral0","StyledWarning","WarningCircle","warning500","DetailField","name","required","formatMessage","useIntl","field","useField","isSubmitting","useForm","state","emptyTooltipLabel","getTranslationKey","defaultMessage","Field","Root","Label","TextInput","onChange","endAction","Tooltip","aria-label","role","type","disabled","LocationField","rootLabel","folders","SingleSelect","next","SingleSelectOption","map","folder","DeleteAssetButton","deleteAsset","isDeleting","isOpen","setIsOpen","handleConfirm","triggerLabel","Dialog","open","onOpenChange","Trigger","IconButton","withTooltip","Trash","Content","Header","Body","icon","width","height","fill","textAlign","Footer","Cancel","Button","fullWidth","Action","loading","onClick","CopyLinkButton","asset","copy","useClipboard","notify","handleCopy","url","prefixFileUrlWithBackendUrl","didCopy","message","Link","DownloadAssetButton","isDownloading","setIsDownloading","handleDownload","downloadFile","Download","ReplaceAssetButton","replaceAsset","isReplacing","fileInputRef","isDialogOpen","setIsDialogOpen","data","settings","useGetSettingsQuery","aiEnabled","aiMetadata","handleTriggerClick","handleContinue","click","handleFileChange","file","files","_Fragment","VisuallyHidden","input","ref","multiple","aria-hidden","tabIndex","ArrowsCounterClockwise","AssetDetails","formatDate","useGetAllFoldersQuery","toggleNotification","useNotification","updateAsset","useUpdateAssetMutation","replaceMutation","isLoading","useReplaceAssetMutation","deleteMutation","useDeleteAssetMutation","drawerToast","setDrawerToast","timer","window","setTimeout","clearTimeout","toast","isImage","mime","includes","AssetType","Image","initialValues","caption","alternativeText","handleSubmit","values","res","fileInfo","title","folderName","useFolderInfo","handleReplace","error","handleDelete","operations","useMemo","Provider","Form","method","onSubmit","modified","resetForm","nameIsEmpty","trim","Blocker","onProceed","Loader","Alert","closeLabel","onClose","Drawer","ScrollableContent","AssetPreview","actions","paddingTop","paddingBottom","paddingLeft","paddingRight","tag","wrap","background","createdAt","Date","dateStyle","timeStyle","updatedAt","createdBy","getDisplayName","firstname","lastname","username","email","size","formatBytes","getFileExtension","ext","padding","borderColor","borderStyle","borderWidth","DrawerHeader","DocIcon","getAssetIcon","FileError","Title","asChild","overflow","ellipsis","marginLeft","CloseButton","ArrowLineRight","DrawerContent","useGetAssetQuery","refetchOnMountOrArgChange","refetchOnReconnect","refetchOnFocus","AssetDetailsDrawer","div","Description","animationDirection","onAnimationEnd"],"mappings":"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"}
|
|
@@ -10,7 +10,8 @@ var files = require('../../../../utils/files.js');
|
|
|
10
10
|
var getAssetIcon = require('../../../../utils/getAssetIcon.js');
|
|
11
11
|
var translations = require('../../../../utils/translations.js');
|
|
12
12
|
|
|
13
|
-
function
|
|
13
|
+
function _interopNamespace(e) {
|
|
14
|
+
if (e && e.__esModule) return e;
|
|
14
15
|
var n = Object.create(null);
|
|
15
16
|
if (e) {
|
|
16
17
|
Object.keys(e).forEach(function (k) {
|
|
@@ -27,7 +28,7 @@ function _interopNamespaceDefault(e) {
|
|
|
27
28
|
return Object.freeze(n);
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
var React__namespace = /*#__PURE__*/
|
|
31
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
31
32
|
|
|
32
33
|
/* -------------------------------------------------------------------------------------------------
|
|
33
34
|
* Styled components
|