@strapi/upload 5.55.1 → 5.56.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/hooks/useAIMetadataAvailability.js +14 -0
- package/dist/admin/hooks/useAIMetadataAvailability.js.map +1 -0
- package/dist/admin/hooks/useAIMetadataAvailability.mjs +12 -0
- package/dist/admin/hooks/useAIMetadataAvailability.mjs.map +1 -0
- package/dist/admin/hooks/useAIMetadataEnabled.js +7 -5
- package/dist/admin/hooks/useAIMetadataEnabled.js.map +1 -1
- package/dist/admin/hooks/useAIMetadataEnabled.mjs +7 -5
- package/dist/admin/hooks/useAIMetadataEnabled.mjs.map +1 -1
- package/dist/admin/hooks/useTracking.js +2 -2
- package/dist/admin/hooks/useTracking.js.map +1 -1
- package/dist/admin/hooks/useTracking.mjs +2 -2
- package/dist/admin/hooks/useTracking.mjs.map +1 -1
- package/dist/admin/legacy/hooks/useAIMetadataAvailability.js +14 -0
- package/dist/admin/legacy/hooks/useAIMetadataAvailability.js.map +1 -0
- package/dist/admin/legacy/hooks/useAIMetadataAvailability.mjs +12 -0
- package/dist/admin/legacy/hooks/useAIMetadataAvailability.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useAIMetadataEnabled.js +23 -0
- package/dist/admin/legacy/hooks/useAIMetadataEnabled.js.map +1 -0
- package/dist/admin/legacy/hooks/useAIMetadataEnabled.mjs +21 -0
- package/dist/admin/legacy/hooks/useAIMetadataEnabled.mjs.map +1 -0
- package/dist/admin/legacy/hooks/useTracking.js +2 -2
- package/dist/admin/legacy/hooks/useTracking.js.map +1 -1
- package/dist/admin/legacy/hooks/useTracking.mjs +2 -2
- package/dist/admin/legacy/hooks/useTracking.mjs.map +1 -1
- package/dist/admin/legacy/pages/App/MediaLibrary.js +4 -4
- package/dist/admin/legacy/pages/App/MediaLibrary.js.map +1 -1
- package/dist/admin/legacy/pages/App/MediaLibrary.mjs +4 -4
- package/dist/admin/legacy/pages/App/MediaLibrary.mjs.map +1 -1
- package/dist/admin/pages/Assets/components/DeleteItemsDialog.js +4 -2
- package/dist/admin/pages/Assets/components/DeleteItemsDialog.js.map +1 -1
- package/dist/admin/pages/Assets/components/DeleteItemsDialog.mjs +4 -2
- package/dist/admin/pages/Assets/components/DeleteItemsDialog.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.js +2 -2
- package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs +2 -2
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/src/hooks/useAIMetadataAvailability.d.ts +5 -0
- package/dist/admin/src/hooks/useAIMetadataEnabled.d.ts +5 -3
- package/dist/admin/src/legacy/components/EditAssetDialog/PreviewBox/PreviewComponents.d.ts +2 -2
- package/dist/admin/src/legacy/hooks/useAIMetadataAvailability.d.ts +5 -0
- package/dist/admin/src/legacy/hooks/useAIMetadataEnabled.d.ts +12 -0
- package/dist/admin/src/legacy/hooks/useSettings.d.ts +1 -0
- package/dist/admin/src/pages/Assets/components/ActionsMenuContent.d.ts +2 -2
- package/dist/admin/translations/en.json.js +1 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +1 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/bootstrap.js +7 -0
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +7 -0
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/admin-folder-file.js +51 -4
- package/dist/server/controllers/admin-folder-file.js.map +1 -1
- package/dist/server/controllers/admin-folder-file.mjs +52 -5
- package/dist/server/controllers/admin-folder-file.mjs.map +1 -1
- package/dist/server/controllers/admin-settings.js +2 -1
- package/dist/server/controllers/admin-settings.js.map +1 -1
- package/dist/server/controllers/admin-settings.mjs +2 -1
- package/dist/server/controllers/admin-settings.mjs.map +1 -1
- package/dist/server/errors.js +12 -0
- package/dist/server/errors.js.map +1 -0
- package/dist/server/errors.mjs +10 -0
- package/dist/server/errors.mjs.map +1 -0
- package/dist/server/services/ai-metadata-provider.js +83 -0
- package/dist/server/services/ai-metadata-provider.js.map +1 -0
- package/dist/server/services/ai-metadata-provider.mjs +61 -0
- package/dist/server/services/ai-metadata-provider.mjs.map +1 -0
- package/dist/server/services/ai-metadata-strapi-managed.js +48 -0
- package/dist/server/services/ai-metadata-strapi-managed.js.map +1 -0
- package/dist/server/services/ai-metadata-strapi-managed.mjs +46 -0
- package/dist/server/services/ai-metadata-strapi-managed.mjs.map +1 -0
- package/dist/server/services/ai-metadata.js +5 -58
- package/dist/server/services/ai-metadata.js.map +1 -1
- package/dist/server/services/ai-metadata.mjs +6 -39
- package/dist/server/services/ai-metadata.mjs.map +1 -1
- package/dist/server/services/folder.js +4 -1
- package/dist/server/services/folder.js.map +1 -1
- package/dist/server/services/folder.mjs +4 -1
- package/dist/server/services/folder.mjs.map +1 -1
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +3 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/metrics.js +1 -1
- package/dist/server/services/metrics.js.map +1 -1
- package/dist/server/services/metrics.mjs +1 -1
- package/dist/server/services/metrics.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-folder-file.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
- package/dist/server/src/errors.d.ts +6 -0
- package/dist/server/src/errors.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +6 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/ambient-instance.d.ts +3 -1
- package/dist/server/src/mcp/ambient-instance.d.ts.map +1 -1
- package/dist/server/src/services/ai-metadata-provider.d.ts +26 -0
- package/dist/server/src/services/ai-metadata-provider.d.ts.map +1 -0
- package/dist/server/src/services/ai-metadata-strapi-managed.d.ts +7 -0
- package/dist/server/src/services/ai-metadata-strapi-managed.d.ts.map +1 -0
- package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
- package/dist/server/src/services/folder.d.ts +5 -2
- package/dist/server/src/services/folder.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +6 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/utils/images.d.ts +2 -2
- package/dist/server/src/utils/images.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/images.js +6 -7
- package/dist/server/utils/images.js.map +1 -1
- package/dist/server/utils/images.mjs +6 -7
- package/dist/server/utils/images.mjs.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/contracts/settings.d.ts +6 -0
- package/package.json +11 -11
- package/dist/admin/legacy/hooks/useAiAvailability.js +0 -22
- package/dist/admin/legacy/hooks/useAiAvailability.js.map +0 -1
- package/dist/admin/legacy/hooks/useAiAvailability.mjs +0 -20
- package/dist/admin/legacy/hooks/useAiAvailability.mjs.map +0 -1
- package/dist/admin/src/legacy/hooks/useAiAvailability.d.ts +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibrary.js","sources":["../../../../../admin/src/legacy/pages/App/MediaLibrary.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport {\n Page,\n SearchInput,\n Pagination,\n useTracking,\n useQueryParams,\n withEncodedUserParams,\n deepEncodeQueryValues,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport {\n Checkbox,\n Box,\n Divider,\n Flex,\n IconButton,\n Typography,\n VisuallyHidden,\n Grid,\n} from '@strapi/design-system';\nimport { Cog, GridFour as GridIcon, List, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link as ReactRouterLink, useNavigate, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { localStorageKeys, viewOptions } from '../../../constants';\nimport { AIUploadModal } from '../../ai/components/AIUploadModal';\nimport { AssetGridList } from '../../components/AssetGridList/AssetGridList';\nimport { EditAssetDialog } from '../../components/EditAssetDialog/EditAssetContent';\nimport { EditFolderDialog } from '../../components/EditFolderDialog/EditFolderDialog';\nimport { FolderCard } from '../../components/FolderCard/FolderCard/FolderCard';\nimport { FolderCardBody } from '../../components/FolderCard/FolderCardBody/FolderCardBody';\nimport { FolderCardBodyAction } from '../../components/FolderCard/FolderCardBodyAction/FolderCardBodyAction';\nimport { FolderCardCheckbox } from '../../components/FolderCard/FolderCardCheckbox/FolderCardCheckbox';\nimport { FolderGridList } from '../../components/FolderGridList/FolderGridList';\nimport { SortPicker } from '../../components/SortPicker/SortPicker';\nimport { TableList } from '../../components/TableList/TableList';\nimport { UploadAssetDialog } from '../../components/UploadAssetDialog/UploadAssetDialog';\nimport { useAIAvailability } from '../../hooks/useAiAvailability';\nimport { useAssets } from '../../hooks/useAssets';\nimport { useFolder } from '../../hooks/useFolder';\nimport { useFolders } from '../../hooks/useFolders';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { usePersistentState } from '../../hooks/usePersistentState';\nimport { useSelectionState } from '../../hooks/useSelectionState';\nimport { containsAssetFilter, getBreadcrumbDataML, getFolderURL, getTrad } from '../../utils';\n\nimport { BulkActions } from './components/BulkActions';\nimport { EmptyOrNoPermissions } from './components/EmptyOrNoPermissions';\nimport { Filters } from './components/Filters';\nimport { Header } from './components/Header';\n\nimport type { BulkActionsProps } from './components/BulkActions';\nimport type { HeaderProps } from './components/Header';\nimport type { Query } from '../../../../../shared/contracts/files';\nimport type { FolderDefinition } from '../../../../../shared/contracts/folders';\nimport type { AssetGridListProps } from '../../components/AssetGridList/AssetGridList';\nimport type { Asset } from '../../components/EditAssetDialog/EditAssetContent';\nimport type { FolderRow, FileRow, TableListProps } from '../../components/TableList/TableList';\n\nconst BoxWithHeight = styled(Box)`\n height: 3.2rem;\n display: flex;\n align-items: center;\n`;\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 100%;\n`;\n\nconst ActionContainer = styled(Box)`\n svg {\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n`;\n\nexport const MediaLibrary = () => {\n const navigate = useNavigate();\n const {\n canRead,\n canCreate,\n canUpdate,\n canCopyLink,\n canDownload,\n canConfigureView,\n isLoading: permissionsLoading,\n } = useMediaLibraryPermissions();\n const { isEnabled: isAiEnabled, status: aiAvailabilityStatus } = useAIAvailability();\n const currentFolderToEditRef = React.useRef<HTMLDivElement>();\n const { formatMessage } = useIntl();\n const { pathname } = useLocation();\n const { trackUsage } = useTracking();\n const [{ query }, setQuery] = useQueryParams<Query>();\n const isFiltering = Boolean(query._q || query.filters);\n const [view, setView] = usePersistentState(localStorageKeys.view, viewOptions.GRID);\n const isGridView = view === viewOptions.GRID;\n\n const {\n data: assetsData,\n isLoading: assetsLoading,\n error: assetsError,\n } = useAssets({\n skipWhen: !canRead,\n query,\n });\n\n const {\n data: foldersData,\n isLoading: foldersLoading,\n error: foldersError,\n } = useFolders({\n enabled: canRead && assetsData?.pagination?.page === 1 && !containsAssetFilter(query),\n query,\n });\n\n const {\n data: currentFolder,\n isLoading: isCurrentFolderLoading,\n error: currentFolderError,\n } = useFolder(query?.folder as number | null | undefined, {\n enabled: canRead && !!query?.folder,\n });\n\n // Folder was not found: redirect to the media library root\n if (currentFolderError?.name === 'NotFoundError') {\n navigate(pathname);\n }\n\n const folders =\n foldersData?.map((folder) => ({\n ...folder,\n type: 'folder',\n folderURL: getFolderURL(pathname, query, {\n folder: folder.id.toString(),\n folderPath: folder.path,\n }),\n isSelectable: canUpdate,\n })) ?? [];\n const folderCount = folders?.length || 0;\n const assets =\n assetsData?.results?.map((asset) => ({ ...asset, type: 'asset', isSelectable: canUpdate })) ||\n [];\n const assetCount = assets?.length ?? 0;\n const totalAssetCount = assetsData?.pagination?.total;\n\n const isLoading =\n isCurrentFolderLoading ||\n foldersLoading ||\n permissionsLoading ||\n assetsLoading ||\n aiAvailabilityStatus === 'loading';\n const [showUploadAssetDialog, setShowUploadAssetDialog] = React.useState(false);\n const [showEditFolderDialog, setShowEditFolderDialog] = React.useState(false);\n const [assetToEdit, setAssetToEdit] = React.useState<Asset | undefined>(undefined);\n const [folderToEdit, setFolderToEdit] = React.useState<FolderRow | undefined | null>(undefined);\n const [selected, { selectOne, selectAll, setSelections }] = useSelectionState<\n FolderRow | FileRow\n >(['type', 'id'], []);\n // reset selection when folder changes to hide bulk actions\n React.useEffect(() => {\n setSelections([]);\n }, [query.folder, setSelections]);\n\n const indeterminateBulkSelect =\n selected?.length > 0 && selected?.length !== assetCount + folderCount;\n const toggleUploadAssetDialog = () => setShowUploadAssetDialog((prev) => !prev);\n const toggleEditFolderDialog = ({ created = false } = {}) => {\n // folders are only displayed on the first page, therefore\n // we have to navigate the user to that page, in case a folder\n // was created successfully in order for them to see it\n if (created && query?.page !== '1') {\n setQuery(withEncodedUserParams(query, { page: 1 }));\n }\n\n setShowEditFolderDialog((prev) => !prev);\n };\n\n const handleBulkSelect = (\n checked: boolean | 'indeterminate',\n elements?: FolderRow[] | FileRow[]\n ) => {\n if (checked) {\n trackUsage('didSelectAllMediaLibraryElements');\n }\n\n selectAll(elements as (FolderRow | FileRow)[]);\n };\n\n const handleChangeSort = (value: Query['sort'] | string) => {\n trackUsage('didSortMediaLibraryElements', {\n location: 'upload',\n sort: value,\n });\n setQuery(withEncodedUserParams(query, { sort: value as Query['sort'] }));\n };\n\n const handleEditFolder = (folder: FolderRow) => {\n setFolderToEdit(folder);\n setShowEditFolderDialog(true);\n };\n\n const handleEditFolderClose = (payload?: { created?: boolean | undefined }) => {\n setFolderToEdit(null);\n toggleEditFolderDialog(payload);\n\n if (currentFolderToEditRef.current) {\n currentFolderToEditRef.current.focus();\n }\n };\n\n const handleAssetDeleted = (numberOfAssets: number) => {\n if (\n numberOfAssets === assetCount &&\n assetsData?.pagination?.page === assetsData?.pagination?.pageCount &&\n assetsData?.pagination?.page &&\n assetsData.pagination.page > 1\n ) {\n setQuery(withEncodedUserParams(query, { page: assetsData.pagination.page - 1 }));\n }\n };\n\n const handleBulkActionSuccess = () => {\n selectAll();\n\n handleAssetDeleted(selected.length);\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (assetsError || foldersError || aiAvailabilityStatus === 'error') {\n return <Page.Error />;\n }\n\n return (\n <Layouts.Root>\n <Page.Main>\n <Header\n breadcrumbs={\n !isCurrentFolderLoading\n ? (getBreadcrumbDataML(currentFolder!, {\n pathname,\n query,\n }) as HeaderProps['breadcrumbs'])\n : null\n }\n canCreate={canCreate}\n onToggleEditFolderDialog={toggleEditFolderDialog}\n onToggleUploadAssetDialog={toggleUploadAssetDialog}\n folder={currentFolder as HeaderProps['folder']}\n />\n <Layouts.Action\n startActions={\n <>\n {canUpdate && isGridView && (assetCount > 0 || folderCount > 0) && (\n <BoxWithHeight\n paddingLeft={2}\n paddingRight={2}\n background=\"neutral0\"\n hasRadius\n borderColor=\"neutral200\"\n >\n <Checkbox\n aria-label={formatMessage({\n id: getTrad('bulk.select.label'),\n defaultMessage: 'Select all folders & assets',\n })}\n checked={\n indeterminateBulkSelect\n ? 'indeterminate'\n : (assetCount > 0 || folderCount > 0) &&\n selected.length === assetCount + folderCount\n }\n onCheckedChange={(e) =>\n handleBulkSelect(e, [...assets, ...folders] as FolderRow[] | FileRow[])\n }\n />\n </BoxWithHeight>\n )}\n {canRead && isGridView && (\n <SortPicker value={query?.sort} onChangeSort={handleChangeSort} />\n )}\n {canRead && <Filters />}\n </>\n }\n endActions={\n <>\n {canConfigureView ? (\n <ActionContainer paddingTop={1} paddingBottom={1}>\n <IconButton\n tag={ReactRouterLink}\n to={{\n pathname: `${pathname}/configuration`,\n search: stringify(deepEncodeQueryValues(query), { encode: false }),\n }}\n label={formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n >\n <Cog />\n </IconButton>\n </ActionContainer>\n ) : null}\n <ActionContainer paddingTop={1} paddingBottom={1}>\n <IconButton\n label={\n isGridView\n ? formatMessage({\n id: getTrad('view-switch.list'),\n defaultMessage: 'List View',\n })\n : formatMessage({\n id: getTrad('view-switch.grid'),\n defaultMessage: 'Grid View',\n })\n }\n onClick={() => setView(isGridView ? viewOptions.LIST : viewOptions.GRID)}\n >\n {isGridView ? <List /> : <GridIcon />}\n </IconButton>\n </ActionContainer>\n <SearchInput\n label={formatMessage({\n id: getTrad('search.label'),\n defaultMessage: 'Search for an asset',\n })}\n trackedEvent=\"didSearchMediaLibraryElements\"\n trackedEventDetails={{ location: 'upload' }}\n />\n </>\n }\n />\n\n <Layouts.Content>\n {selected.length > 0 && (\n <BulkActions\n currentFolder={currentFolder as BulkActionsProps['currentFolder']}\n selected={selected as BulkActionsProps['selected']}\n onSuccess={handleBulkActionSuccess}\n />\n )}\n\n {folderCount === 0 && assetCount === 0 && (\n <EmptyOrNoPermissions\n canCreate={canCreate}\n canRead={canRead}\n isFiltering={isFiltering}\n onActionClick={toggleUploadAssetDialog}\n />\n )}\n\n {/* TODO: fix AssetListTable should handle no assets views (loading) */}\n {canRead && !isGridView && (assetCount > 0 || folderCount > 0) && (\n <TableList\n assetCount={assetCount}\n folderCount={folderCount}\n indeterminate={indeterminateBulkSelect}\n onChangeSort={handleChangeSort}\n onChangeFolder={(folderID, folderPath) =>\n navigate(getFolderURL(pathname, query, { folder: folderID.toString(), folderPath }))\n }\n onEditAsset={setAssetToEdit as TableListProps['onEditAsset']}\n onEditFolder={handleEditFolder}\n onSelectOne={selectOne}\n onSelectAll={handleBulkSelect as TableListProps['onSelectAll']}\n rows={[...folders, ...assets] as TableListProps['rows']}\n selected={selected as TableListProps['selected']}\n shouldDisableBulkSelect={!canUpdate}\n sortQuery={query?.sort ?? ''}\n />\n )}\n\n {canRead && isGridView && (\n <>\n {folderCount > 0 && (\n <FolderGridList\n title={\n // Folders title should only appear if:\n // user is filtering and there are assets to display, to divide both type of elements\n // user is not filtering\n (((isFiltering && assetCount > 0) || !isFiltering) &&\n formatMessage(\n {\n id: getTrad('list.folders.title'),\n defaultMessage: 'Folders ({count})',\n },\n { count: folderCount }\n )) ||\n ''\n }\n >\n {folders.map((folder) => {\n const selectedFolders = selected.filter(({ type }) => type === 'folder');\n const isSelected = !!selectedFolders.find(\n (currentFolder) => currentFolder.id === folder.id\n );\n\n const url = getFolderURL(pathname, query, {\n folder: folder?.id.toString(),\n folderPath: folder?.path,\n });\n\n return (\n <Grid.Item\n col={3}\n m={4}\n s={6}\n xs={12}\n key={`folder-${folder.id}`}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <FolderCard\n ref={\n folderToEdit && folder.id === folderToEdit.id\n ? currentFolderToEditRef\n : undefined\n }\n ariaLabel={folder.name}\n id={`folder-${folder.id}`}\n to={url}\n startAction={\n folder.isSelectable ? (\n <FolderCardCheckbox\n data-testid={`folder-checkbox-${folder.id}`}\n checked={isSelected}\n onCheckedChange={() => selectOne(folder)}\n />\n ) : null\n }\n cardActions={\n <IconButton\n label={formatMessage({\n id: getTrad('list.folder.edit'),\n defaultMessage: 'Edit folder',\n })}\n onClick={() => handleEditFolder(folder)}\n >\n <Pencil />\n </IconButton>\n }\n >\n <FolderCardBody>\n <FolderCardBodyAction to={url}>\n <Flex tag=\"h2\" direction=\"column\" alignItems=\"start\" maxWidth=\"100%\">\n <TypographyMaxWidth\n fontWeight=\"semiBold\"\n textColor=\"neutral800\"\n ellipsis\n >\n {folder.name}\n <VisuallyHidden>:</VisuallyHidden>\n </TypographyMaxWidth>\n\n <TypographyMaxWidth\n tag=\"span\"\n textColor=\"neutral600\"\n variant=\"pi\"\n ellipsis\n >\n {formatMessage(\n {\n id: getTrad('list.folder.subtitle'),\n defaultMessage:\n '{folderCount, plural, one {# folder} other {# folders}}, {filesCount, plural, one {# asset} other {# assets}}',\n },\n {\n folderCount: (folder as FolderDefinition).children?.count,\n filesCount: (folder as FolderDefinition).files?.count,\n }\n )}\n </TypographyMaxWidth>\n </Flex>\n </FolderCardBodyAction>\n </FolderCardBody>\n </FolderCard>\n </Grid.Item>\n );\n })}\n </FolderGridList>\n )}\n\n {assetCount > 0 && folderCount > 0 && (\n <Box paddingTop={6} paddingBottom={4}>\n <Divider />\n </Box>\n )}\n\n {assetCount > 0 && (\n <AssetGridList\n assets={assets}\n onEditAsset={setAssetToEdit as AssetGridListProps['onEditAsset']}\n onSelectAsset={selectOne}\n selectedAssets={\n selected.filter(\n ({ type }) => type === 'asset'\n ) as AssetGridListProps['selectedAssets']\n }\n title={\n // Assets title should only appear if:\n // - user is not filtering\n // - user is filtering and there are folders to display, to separate them\n // - user is on page 1 since folders won't appear on any other page than the first one (no need to visually separate them)\n ((!isFiltering || (isFiltering && folderCount > 0)) &&\n assetsData?.pagination?.page === 1 &&\n formatMessage(\n {\n id: getTrad('list.assets.title'),\n defaultMessage: 'Assets ({count})',\n },\n { count: totalAssetCount }\n )) ||\n ''\n }\n />\n )}\n </>\n )}\n <Pagination.Root {...assetsData?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n </Page.Main>\n {showUploadAssetDialog &&\n (isAiEnabled ? (\n <AIUploadModal\n open={showUploadAssetDialog}\n onClose={toggleUploadAssetDialog}\n folderId={query?.folder ? Number(query.folder) : null}\n />\n ) : (\n <UploadAssetDialog\n open={showUploadAssetDialog}\n onClose={toggleUploadAssetDialog}\n trackedLocation=\"upload\"\n folderId={query?.folder as string | number | null | undefined}\n />\n ))}\n {showEditFolderDialog && (\n <EditFolderDialog\n open={showEditFolderDialog}\n onClose={() => handleEditFolderClose()}\n folder={folderToEdit as FolderDefinition}\n parentFolderId={query?.folder as string | number | null | undefined}\n location=\"upload\"\n />\n )}\n {assetToEdit && (\n <EditAssetDialog\n onClose={(editedAsset) => {\n // The asset has been deleted\n if (editedAsset === null) {\n handleAssetDeleted(1);\n }\n\n setAssetToEdit(undefined);\n }}\n open={!!assetToEdit}\n asset={assetToEdit}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n trackedLocation=\"upload\"\n />\n )}\n </Layouts.Root>\n );\n};\n"],"names":["BoxWithHeight","styled","Box","TypographyMaxWidth","Typography","ActionContainer","theme","colors","neutral500","MediaLibrary","navigate","useNavigate","canRead","canCreate","canUpdate","canCopyLink","canDownload","canConfigureView","isLoading","permissionsLoading","useMediaLibraryPermissions","isEnabled","isAiEnabled","status","aiAvailabilityStatus","useAIAvailability","currentFolderToEditRef","React","useRef","formatMessage","useIntl","pathname","useLocation","trackUsage","useTracking","query","setQuery","useQueryParams","isFiltering","Boolean","_q","filters","view","setView","usePersistentState","localStorageKeys","viewOptions","GRID","isGridView","data","assetsData","assetsLoading","error","assetsError","useAssets","skipWhen","foldersData","foldersLoading","foldersError","useFolders","enabled","pagination","page","containsAssetFilter","currentFolder","isCurrentFolderLoading","currentFolderError","useFolder","folder","name","folders","map","type","folderURL","getFolderURL","id","toString","folderPath","path","isSelectable","folderCount","length","assets","results","asset","assetCount","totalAssetCount","total","showUploadAssetDialog","setShowUploadAssetDialog","useState","showEditFolderDialog","setShowEditFolderDialog","assetToEdit","setAssetToEdit","undefined","folderToEdit","setFolderToEdit","selected","selectOne","selectAll","setSelections","useSelectionState","useEffect","indeterminateBulkSelect","toggleUploadAssetDialog","prev","toggleEditFolderDialog","created","withEncodedUserParams","handleBulkSelect","checked","elements","handleChangeSort","value","location","sort","handleEditFolder","handleEditFolderClose","payload","current","focus","handleAssetDeleted","numberOfAssets","pageCount","handleBulkActionSuccess","_jsx","Page","Loading","Error","_jsxs","Layouts","Root","Main","Header","breadcrumbs","getBreadcrumbDataML","onToggleEditFolderDialog","onToggleUploadAssetDialog","Action","startActions","_Fragment","paddingLeft","paddingRight","background","hasRadius","borderColor","Checkbox","aria-label","getTrad","defaultMessage","onCheckedChange","e","SortPicker","onChangeSort","Filters","endActions","paddingTop","paddingBottom","IconButton","tag","ReactRouterLink","to","search","stringify","deepEncodeQueryValues","encode","label","Cog","onClick","LIST","List","GridIcon","SearchInput","trackedEvent","trackedEventDetails","Content","BulkActions","onSuccess","EmptyOrNoPermissions","onActionClick","TableList","indeterminate","onChangeFolder","folderID","onEditAsset","onEditFolder","onSelectOne","onSelectAll","rows","shouldDisableBulkSelect","sortQuery","FolderGridList","title","count","selectedFolders","filter","isSelected","find","url","Grid","Item","col","m","s","xs","direction","alignItems","FolderCard","ref","ariaLabel","startAction","FolderCardCheckbox","data-testid","cardActions","Pencil","FolderCardBody","FolderCardBodyAction","Flex","maxWidth","fontWeight","textColor","ellipsis","VisuallyHidden","variant","children","filesCount","files","Divider","AssetGridList","onSelectAsset","selectedAssets","Pagination","PageSize","Links","AIUploadModal","open","onClose","folderId","Number","UploadAssetDialog","trackedLocation","EditFolderDialog","parentFolderId","EditAssetDialog","editedAsset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MediaLibrary.js","sources":["../../../../../admin/src/legacy/pages/App/MediaLibrary.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport {\n Page,\n SearchInput,\n Pagination,\n useTracking,\n useQueryParams,\n withEncodedUserParams,\n deepEncodeQueryValues,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport {\n Checkbox,\n Box,\n Divider,\n Flex,\n IconButton,\n Typography,\n VisuallyHidden,\n Grid,\n} from '@strapi/design-system';\nimport { Cog, GridFour as GridIcon, List, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link as ReactRouterLink, useNavigate, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { localStorageKeys, viewOptions } from '../../../constants';\nimport { AIUploadModal } from '../../ai/components/AIUploadModal';\nimport { AssetGridList } from '../../components/AssetGridList/AssetGridList';\nimport { EditAssetDialog } from '../../components/EditAssetDialog/EditAssetContent';\nimport { EditFolderDialog } from '../../components/EditFolderDialog/EditFolderDialog';\nimport { FolderCard } from '../../components/FolderCard/FolderCard/FolderCard';\nimport { FolderCardBody } from '../../components/FolderCard/FolderCardBody/FolderCardBody';\nimport { FolderCardBodyAction } from '../../components/FolderCard/FolderCardBodyAction/FolderCardBodyAction';\nimport { FolderCardCheckbox } from '../../components/FolderCard/FolderCardCheckbox/FolderCardCheckbox';\nimport { FolderGridList } from '../../components/FolderGridList/FolderGridList';\nimport { SortPicker } from '../../components/SortPicker/SortPicker';\nimport { TableList } from '../../components/TableList/TableList';\nimport { UploadAssetDialog } from '../../components/UploadAssetDialog/UploadAssetDialog';\nimport { useAIMetadataEnabled } from '../../hooks/useAIMetadataEnabled';\nimport { useAssets } from '../../hooks/useAssets';\nimport { useFolder } from '../../hooks/useFolder';\nimport { useFolders } from '../../hooks/useFolders';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { usePersistentState } from '../../hooks/usePersistentState';\nimport { useSelectionState } from '../../hooks/useSelectionState';\nimport { containsAssetFilter, getBreadcrumbDataML, getFolderURL, getTrad } from '../../utils';\n\nimport { BulkActions } from './components/BulkActions';\nimport { EmptyOrNoPermissions } from './components/EmptyOrNoPermissions';\nimport { Filters } from './components/Filters';\nimport { Header } from './components/Header';\n\nimport type { BulkActionsProps } from './components/BulkActions';\nimport type { HeaderProps } from './components/Header';\nimport type { Query } from '../../../../../shared/contracts/files';\nimport type { FolderDefinition } from '../../../../../shared/contracts/folders';\nimport type { AssetGridListProps } from '../../components/AssetGridList/AssetGridList';\nimport type { Asset } from '../../components/EditAssetDialog/EditAssetContent';\nimport type { FolderRow, FileRow, TableListProps } from '../../components/TableList/TableList';\n\nconst BoxWithHeight = styled(Box)`\n height: 3.2rem;\n display: flex;\n align-items: center;\n`;\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 100%;\n`;\n\nconst ActionContainer = styled(Box)`\n svg {\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n`;\n\nexport const MediaLibrary = () => {\n const navigate = useNavigate();\n const {\n canRead,\n canCreate,\n canUpdate,\n canCopyLink,\n canDownload,\n canConfigureView,\n isLoading: permissionsLoading,\n } = useMediaLibraryPermissions();\n const { isEnabled: isAiEnabled, status: aiMetadataStatus } = useAIMetadataEnabled();\n const currentFolderToEditRef = React.useRef<HTMLDivElement>();\n const { formatMessage } = useIntl();\n const { pathname } = useLocation();\n const { trackUsage } = useTracking();\n const [{ query }, setQuery] = useQueryParams<Query>();\n const isFiltering = Boolean(query._q || query.filters);\n const [view, setView] = usePersistentState(localStorageKeys.view, viewOptions.GRID);\n const isGridView = view === viewOptions.GRID;\n\n const {\n data: assetsData,\n isLoading: assetsLoading,\n error: assetsError,\n } = useAssets({\n skipWhen: !canRead,\n query,\n });\n\n const {\n data: foldersData,\n isLoading: foldersLoading,\n error: foldersError,\n } = useFolders({\n enabled: canRead && assetsData?.pagination?.page === 1 && !containsAssetFilter(query),\n query,\n });\n\n const {\n data: currentFolder,\n isLoading: isCurrentFolderLoading,\n error: currentFolderError,\n } = useFolder(query?.folder as number | null | undefined, {\n enabled: canRead && !!query?.folder,\n });\n\n // Folder was not found: redirect to the media library root\n if (currentFolderError?.name === 'NotFoundError') {\n navigate(pathname);\n }\n\n const folders =\n foldersData?.map((folder) => ({\n ...folder,\n type: 'folder',\n folderURL: getFolderURL(pathname, query, {\n folder: folder.id.toString(),\n folderPath: folder.path,\n }),\n isSelectable: canUpdate,\n })) ?? [];\n const folderCount = folders?.length || 0;\n const assets =\n assetsData?.results?.map((asset) => ({ ...asset, type: 'asset', isSelectable: canUpdate })) ||\n [];\n const assetCount = assets?.length ?? 0;\n const totalAssetCount = assetsData?.pagination?.total;\n\n const isLoading =\n isCurrentFolderLoading ||\n foldersLoading ||\n permissionsLoading ||\n assetsLoading ||\n aiMetadataStatus === 'loading';\n const [showUploadAssetDialog, setShowUploadAssetDialog] = React.useState(false);\n const [showEditFolderDialog, setShowEditFolderDialog] = React.useState(false);\n const [assetToEdit, setAssetToEdit] = React.useState<Asset | undefined>(undefined);\n const [folderToEdit, setFolderToEdit] = React.useState<FolderRow | undefined | null>(undefined);\n const [selected, { selectOne, selectAll, setSelections }] = useSelectionState<\n FolderRow | FileRow\n >(['type', 'id'], []);\n // reset selection when folder changes to hide bulk actions\n React.useEffect(() => {\n setSelections([]);\n }, [query.folder, setSelections]);\n\n const indeterminateBulkSelect =\n selected?.length > 0 && selected?.length !== assetCount + folderCount;\n const toggleUploadAssetDialog = () => setShowUploadAssetDialog((prev) => !prev);\n const toggleEditFolderDialog = ({ created = false } = {}) => {\n // folders are only displayed on the first page, therefore\n // we have to navigate the user to that page, in case a folder\n // was created successfully in order for them to see it\n if (created && query?.page !== '1') {\n setQuery(withEncodedUserParams(query, { page: 1 }));\n }\n\n setShowEditFolderDialog((prev) => !prev);\n };\n\n const handleBulkSelect = (\n checked: boolean | 'indeterminate',\n elements?: FolderRow[] | FileRow[]\n ) => {\n if (checked) {\n trackUsage('didSelectAllMediaLibraryElements');\n }\n\n selectAll(elements as (FolderRow | FileRow)[]);\n };\n\n const handleChangeSort = (value: Query['sort'] | string) => {\n trackUsage('didSortMediaLibraryElements', {\n location: 'upload',\n sort: value,\n });\n setQuery(withEncodedUserParams(query, { sort: value as Query['sort'] }));\n };\n\n const handleEditFolder = (folder: FolderRow) => {\n setFolderToEdit(folder);\n setShowEditFolderDialog(true);\n };\n\n const handleEditFolderClose = (payload?: { created?: boolean | undefined }) => {\n setFolderToEdit(null);\n toggleEditFolderDialog(payload);\n\n if (currentFolderToEditRef.current) {\n currentFolderToEditRef.current.focus();\n }\n };\n\n const handleAssetDeleted = (numberOfAssets: number) => {\n if (\n numberOfAssets === assetCount &&\n assetsData?.pagination?.page === assetsData?.pagination?.pageCount &&\n assetsData?.pagination?.page &&\n assetsData.pagination.page > 1\n ) {\n setQuery(withEncodedUserParams(query, { page: assetsData.pagination.page - 1 }));\n }\n };\n\n const handleBulkActionSuccess = () => {\n selectAll();\n\n handleAssetDeleted(selected.length);\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (assetsError || foldersError || aiMetadataStatus === 'error') {\n return <Page.Error />;\n }\n\n return (\n <Layouts.Root>\n <Page.Main>\n <Header\n breadcrumbs={\n !isCurrentFolderLoading\n ? (getBreadcrumbDataML(currentFolder!, {\n pathname,\n query,\n }) as HeaderProps['breadcrumbs'])\n : null\n }\n canCreate={canCreate}\n onToggleEditFolderDialog={toggleEditFolderDialog}\n onToggleUploadAssetDialog={toggleUploadAssetDialog}\n folder={currentFolder as HeaderProps['folder']}\n />\n <Layouts.Action\n startActions={\n <>\n {canUpdate && isGridView && (assetCount > 0 || folderCount > 0) && (\n <BoxWithHeight\n paddingLeft={2}\n paddingRight={2}\n background=\"neutral0\"\n hasRadius\n borderColor=\"neutral200\"\n >\n <Checkbox\n aria-label={formatMessage({\n id: getTrad('bulk.select.label'),\n defaultMessage: 'Select all folders & assets',\n })}\n checked={\n indeterminateBulkSelect\n ? 'indeterminate'\n : (assetCount > 0 || folderCount > 0) &&\n selected.length === assetCount + folderCount\n }\n onCheckedChange={(e) =>\n handleBulkSelect(e, [...assets, ...folders] as FolderRow[] | FileRow[])\n }\n />\n </BoxWithHeight>\n )}\n {canRead && isGridView && (\n <SortPicker value={query?.sort} onChangeSort={handleChangeSort} />\n )}\n {canRead && <Filters />}\n </>\n }\n endActions={\n <>\n {canConfigureView ? (\n <ActionContainer paddingTop={1} paddingBottom={1}>\n <IconButton\n tag={ReactRouterLink}\n to={{\n pathname: `${pathname}/configuration`,\n search: stringify(deepEncodeQueryValues(query), { encode: false }),\n }}\n label={formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n >\n <Cog />\n </IconButton>\n </ActionContainer>\n ) : null}\n <ActionContainer paddingTop={1} paddingBottom={1}>\n <IconButton\n label={\n isGridView\n ? formatMessage({\n id: getTrad('view-switch.list'),\n defaultMessage: 'List View',\n })\n : formatMessage({\n id: getTrad('view-switch.grid'),\n defaultMessage: 'Grid View',\n })\n }\n onClick={() => setView(isGridView ? viewOptions.LIST : viewOptions.GRID)}\n >\n {isGridView ? <List /> : <GridIcon />}\n </IconButton>\n </ActionContainer>\n <SearchInput\n label={formatMessage({\n id: getTrad('search.label'),\n defaultMessage: 'Search for an asset',\n })}\n trackedEvent=\"didSearchMediaLibraryElements\"\n trackedEventDetails={{ location: 'upload' }}\n />\n </>\n }\n />\n\n <Layouts.Content>\n {selected.length > 0 && (\n <BulkActions\n currentFolder={currentFolder as BulkActionsProps['currentFolder']}\n selected={selected as BulkActionsProps['selected']}\n onSuccess={handleBulkActionSuccess}\n />\n )}\n\n {folderCount === 0 && assetCount === 0 && (\n <EmptyOrNoPermissions\n canCreate={canCreate}\n canRead={canRead}\n isFiltering={isFiltering}\n onActionClick={toggleUploadAssetDialog}\n />\n )}\n\n {/* TODO: fix AssetListTable should handle no assets views (loading) */}\n {canRead && !isGridView && (assetCount > 0 || folderCount > 0) && (\n <TableList\n assetCount={assetCount}\n folderCount={folderCount}\n indeterminate={indeterminateBulkSelect}\n onChangeSort={handleChangeSort}\n onChangeFolder={(folderID, folderPath) =>\n navigate(getFolderURL(pathname, query, { folder: folderID.toString(), folderPath }))\n }\n onEditAsset={setAssetToEdit as TableListProps['onEditAsset']}\n onEditFolder={handleEditFolder}\n onSelectOne={selectOne}\n onSelectAll={handleBulkSelect as TableListProps['onSelectAll']}\n rows={[...folders, ...assets] as TableListProps['rows']}\n selected={selected as TableListProps['selected']}\n shouldDisableBulkSelect={!canUpdate}\n sortQuery={query?.sort ?? ''}\n />\n )}\n\n {canRead && isGridView && (\n <>\n {folderCount > 0 && (\n <FolderGridList\n title={\n // Folders title should only appear if:\n // user is filtering and there are assets to display, to divide both type of elements\n // user is not filtering\n (((isFiltering && assetCount > 0) || !isFiltering) &&\n formatMessage(\n {\n id: getTrad('list.folders.title'),\n defaultMessage: 'Folders ({count})',\n },\n { count: folderCount }\n )) ||\n ''\n }\n >\n {folders.map((folder) => {\n const selectedFolders = selected.filter(({ type }) => type === 'folder');\n const isSelected = !!selectedFolders.find(\n (currentFolder) => currentFolder.id === folder.id\n );\n\n const url = getFolderURL(pathname, query, {\n folder: folder?.id.toString(),\n folderPath: folder?.path,\n });\n\n return (\n <Grid.Item\n col={3}\n m={4}\n s={6}\n xs={12}\n key={`folder-${folder.id}`}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <FolderCard\n ref={\n folderToEdit && folder.id === folderToEdit.id\n ? currentFolderToEditRef\n : undefined\n }\n ariaLabel={folder.name}\n id={`folder-${folder.id}`}\n to={url}\n startAction={\n folder.isSelectable ? (\n <FolderCardCheckbox\n data-testid={`folder-checkbox-${folder.id}`}\n checked={isSelected}\n onCheckedChange={() => selectOne(folder)}\n />\n ) : null\n }\n cardActions={\n <IconButton\n label={formatMessage({\n id: getTrad('list.folder.edit'),\n defaultMessage: 'Edit folder',\n })}\n onClick={() => handleEditFolder(folder)}\n >\n <Pencil />\n </IconButton>\n }\n >\n <FolderCardBody>\n <FolderCardBodyAction to={url}>\n <Flex tag=\"h2\" direction=\"column\" alignItems=\"start\" maxWidth=\"100%\">\n <TypographyMaxWidth\n fontWeight=\"semiBold\"\n textColor=\"neutral800\"\n ellipsis\n >\n {folder.name}\n <VisuallyHidden>:</VisuallyHidden>\n </TypographyMaxWidth>\n\n <TypographyMaxWidth\n tag=\"span\"\n textColor=\"neutral600\"\n variant=\"pi\"\n ellipsis\n >\n {formatMessage(\n {\n id: getTrad('list.folder.subtitle'),\n defaultMessage:\n '{folderCount, plural, one {# folder} other {# folders}}, {filesCount, plural, one {# asset} other {# assets}}',\n },\n {\n folderCount: (folder as FolderDefinition).children?.count,\n filesCount: (folder as FolderDefinition).files?.count,\n }\n )}\n </TypographyMaxWidth>\n </Flex>\n </FolderCardBodyAction>\n </FolderCardBody>\n </FolderCard>\n </Grid.Item>\n );\n })}\n </FolderGridList>\n )}\n\n {assetCount > 0 && folderCount > 0 && (\n <Box paddingTop={6} paddingBottom={4}>\n <Divider />\n </Box>\n )}\n\n {assetCount > 0 && (\n <AssetGridList\n assets={assets}\n onEditAsset={setAssetToEdit as AssetGridListProps['onEditAsset']}\n onSelectAsset={selectOne}\n selectedAssets={\n selected.filter(\n ({ type }) => type === 'asset'\n ) as AssetGridListProps['selectedAssets']\n }\n title={\n // Assets title should only appear if:\n // - user is not filtering\n // - user is filtering and there are folders to display, to separate them\n // - user is on page 1 since folders won't appear on any other page than the first one (no need to visually separate them)\n ((!isFiltering || (isFiltering && folderCount > 0)) &&\n assetsData?.pagination?.page === 1 &&\n formatMessage(\n {\n id: getTrad('list.assets.title'),\n defaultMessage: 'Assets ({count})',\n },\n { count: totalAssetCount }\n )) ||\n ''\n }\n />\n )}\n </>\n )}\n <Pagination.Root {...assetsData?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n </Page.Main>\n {showUploadAssetDialog &&\n (isAiEnabled ? (\n <AIUploadModal\n open={showUploadAssetDialog}\n onClose={toggleUploadAssetDialog}\n folderId={query?.folder ? Number(query.folder) : null}\n />\n ) : (\n <UploadAssetDialog\n open={showUploadAssetDialog}\n onClose={toggleUploadAssetDialog}\n trackedLocation=\"upload\"\n folderId={query?.folder as string | number | null | undefined}\n />\n ))}\n {showEditFolderDialog && (\n <EditFolderDialog\n open={showEditFolderDialog}\n onClose={() => handleEditFolderClose()}\n folder={folderToEdit as FolderDefinition}\n parentFolderId={query?.folder as string | number | null | undefined}\n location=\"upload\"\n />\n )}\n {assetToEdit && (\n <EditAssetDialog\n onClose={(editedAsset) => {\n // The asset has been deleted\n if (editedAsset === null) {\n handleAssetDeleted(1);\n }\n\n setAssetToEdit(undefined);\n }}\n open={!!assetToEdit}\n asset={assetToEdit}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n trackedLocation=\"upload\"\n />\n )}\n </Layouts.Root>\n );\n};\n"],"names":["BoxWithHeight","styled","Box","TypographyMaxWidth","Typography","ActionContainer","theme","colors","neutral500","MediaLibrary","navigate","useNavigate","canRead","canCreate","canUpdate","canCopyLink","canDownload","canConfigureView","isLoading","permissionsLoading","useMediaLibraryPermissions","isEnabled","isAiEnabled","status","aiMetadataStatus","useAIMetadataEnabled","currentFolderToEditRef","React","useRef","formatMessage","useIntl","pathname","useLocation","trackUsage","useTracking","query","setQuery","useQueryParams","isFiltering","Boolean","_q","filters","view","setView","usePersistentState","localStorageKeys","viewOptions","GRID","isGridView","data","assetsData","assetsLoading","error","assetsError","useAssets","skipWhen","foldersData","foldersLoading","foldersError","useFolders","enabled","pagination","page","containsAssetFilter","currentFolder","isCurrentFolderLoading","currentFolderError","useFolder","folder","name","folders","map","type","folderURL","getFolderURL","id","toString","folderPath","path","isSelectable","folderCount","length","assets","results","asset","assetCount","totalAssetCount","total","showUploadAssetDialog","setShowUploadAssetDialog","useState","showEditFolderDialog","setShowEditFolderDialog","assetToEdit","setAssetToEdit","undefined","folderToEdit","setFolderToEdit","selected","selectOne","selectAll","setSelections","useSelectionState","useEffect","indeterminateBulkSelect","toggleUploadAssetDialog","prev","toggleEditFolderDialog","created","withEncodedUserParams","handleBulkSelect","checked","elements","handleChangeSort","value","location","sort","handleEditFolder","handleEditFolderClose","payload","current","focus","handleAssetDeleted","numberOfAssets","pageCount","handleBulkActionSuccess","_jsx","Page","Loading","Error","_jsxs","Layouts","Root","Main","Header","breadcrumbs","getBreadcrumbDataML","onToggleEditFolderDialog","onToggleUploadAssetDialog","Action","startActions","_Fragment","paddingLeft","paddingRight","background","hasRadius","borderColor","Checkbox","aria-label","getTrad","defaultMessage","onCheckedChange","e","SortPicker","onChangeSort","Filters","endActions","paddingTop","paddingBottom","IconButton","tag","ReactRouterLink","to","search","stringify","deepEncodeQueryValues","encode","label","Cog","onClick","LIST","List","GridIcon","SearchInput","trackedEvent","trackedEventDetails","Content","BulkActions","onSuccess","EmptyOrNoPermissions","onActionClick","TableList","indeterminate","onChangeFolder","folderID","onEditAsset","onEditFolder","onSelectOne","onSelectAll","rows","shouldDisableBulkSelect","sortQuery","FolderGridList","title","count","selectedFolders","filter","isSelected","find","url","Grid","Item","col","m","s","xs","direction","alignItems","FolderCard","ref","ariaLabel","startAction","FolderCardCheckbox","data-testid","cardActions","Pencil","FolderCardBody","FolderCardBodyAction","Flex","maxWidth","fontWeight","textColor","ellipsis","VisuallyHidden","variant","children","filesCount","files","Divider","AssetGridList","onSelectAsset","selectedAssets","Pagination","PageSize","Links","AIUploadModal","open","onClose","folderId","Number","UploadAssetDialog","trackedLocation","EditFolderDialog","parentFolderId","EditAssetDialog","editedAsset"],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ import { FolderGridList } from '../../components/FolderGridList/FolderGridList.m
|
|
|
20
20
|
import { SortPicker } from '../../components/SortPicker/SortPicker.mjs';
|
|
21
21
|
import { TableList } from '../../components/TableList/TableList.mjs';
|
|
22
22
|
import { UploadAssetDialog } from '../../components/UploadAssetDialog/UploadAssetDialog.mjs';
|
|
23
|
-
import {
|
|
23
|
+
import { useAIMetadataEnabled } from '../../hooks/useAIMetadataEnabled.mjs';
|
|
24
24
|
import { useAssets } from '../../hooks/useAssets.mjs';
|
|
25
25
|
import { useFolder } from '../../hooks/useFolder.mjs';
|
|
26
26
|
import { useFolders } from '../../hooks/useFolders.mjs';
|
|
@@ -58,7 +58,7 @@ const ActionContainer = styled(Box)`
|
|
|
58
58
|
const MediaLibrary = ()=>{
|
|
59
59
|
const navigate = useNavigate();
|
|
60
60
|
const { canRead, canCreate, canUpdate, canCopyLink, canDownload, canConfigureView, isLoading: permissionsLoading } = useMediaLibraryPermissions();
|
|
61
|
-
const { isEnabled: isAiEnabled, status:
|
|
61
|
+
const { isEnabled: isAiEnabled, status: aiMetadataStatus } = useAIMetadataEnabled();
|
|
62
62
|
const currentFolderToEditRef = React.useRef();
|
|
63
63
|
const { formatMessage } = useIntl();
|
|
64
64
|
const { pathname } = useLocation();
|
|
@@ -99,7 +99,7 @@ const MediaLibrary = ()=>{
|
|
|
99
99
|
})) || [];
|
|
100
100
|
const assetCount = assets?.length ?? 0;
|
|
101
101
|
const totalAssetCount = assetsData?.pagination?.total;
|
|
102
|
-
const isLoading = isCurrentFolderLoading || foldersLoading || permissionsLoading || assetsLoading ||
|
|
102
|
+
const isLoading = isCurrentFolderLoading || foldersLoading || permissionsLoading || assetsLoading || aiMetadataStatus === 'loading';
|
|
103
103
|
const [showUploadAssetDialog, setShowUploadAssetDialog] = React.useState(false);
|
|
104
104
|
const [showEditFolderDialog, setShowEditFolderDialog] = React.useState(false);
|
|
105
105
|
const [assetToEdit, setAssetToEdit] = React.useState(undefined);
|
|
@@ -168,7 +168,7 @@ const MediaLibrary = ()=>{
|
|
|
168
168
|
if (isLoading) {
|
|
169
169
|
return /*#__PURE__*/ jsx(Page.Loading, {});
|
|
170
170
|
}
|
|
171
|
-
if (assetsError || foldersError ||
|
|
171
|
+
if (assetsError || foldersError || aiMetadataStatus === 'error') {
|
|
172
172
|
return /*#__PURE__*/ jsx(Page.Error, {});
|
|
173
173
|
}
|
|
174
174
|
return /*#__PURE__*/ jsxs(Layouts.Root, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibrary.mjs","sources":["../../../../../admin/src/legacy/pages/App/MediaLibrary.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport {\n Page,\n SearchInput,\n Pagination,\n useTracking,\n useQueryParams,\n withEncodedUserParams,\n deepEncodeQueryValues,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport {\n Checkbox,\n Box,\n Divider,\n Flex,\n IconButton,\n Typography,\n VisuallyHidden,\n Grid,\n} from '@strapi/design-system';\nimport { Cog, GridFour as GridIcon, List, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link as ReactRouterLink, useNavigate, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { localStorageKeys, viewOptions } from '../../../constants';\nimport { AIUploadModal } from '../../ai/components/AIUploadModal';\nimport { AssetGridList } from '../../components/AssetGridList/AssetGridList';\nimport { EditAssetDialog } from '../../components/EditAssetDialog/EditAssetContent';\nimport { EditFolderDialog } from '../../components/EditFolderDialog/EditFolderDialog';\nimport { FolderCard } from '../../components/FolderCard/FolderCard/FolderCard';\nimport { FolderCardBody } from '../../components/FolderCard/FolderCardBody/FolderCardBody';\nimport { FolderCardBodyAction } from '../../components/FolderCard/FolderCardBodyAction/FolderCardBodyAction';\nimport { FolderCardCheckbox } from '../../components/FolderCard/FolderCardCheckbox/FolderCardCheckbox';\nimport { FolderGridList } from '../../components/FolderGridList/FolderGridList';\nimport { SortPicker } from '../../components/SortPicker/SortPicker';\nimport { TableList } from '../../components/TableList/TableList';\nimport { UploadAssetDialog } from '../../components/UploadAssetDialog/UploadAssetDialog';\nimport { useAIAvailability } from '../../hooks/useAiAvailability';\nimport { useAssets } from '../../hooks/useAssets';\nimport { useFolder } from '../../hooks/useFolder';\nimport { useFolders } from '../../hooks/useFolders';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { usePersistentState } from '../../hooks/usePersistentState';\nimport { useSelectionState } from '../../hooks/useSelectionState';\nimport { containsAssetFilter, getBreadcrumbDataML, getFolderURL, getTrad } from '../../utils';\n\nimport { BulkActions } from './components/BulkActions';\nimport { EmptyOrNoPermissions } from './components/EmptyOrNoPermissions';\nimport { Filters } from './components/Filters';\nimport { Header } from './components/Header';\n\nimport type { BulkActionsProps } from './components/BulkActions';\nimport type { HeaderProps } from './components/Header';\nimport type { Query } from '../../../../../shared/contracts/files';\nimport type { FolderDefinition } from '../../../../../shared/contracts/folders';\nimport type { AssetGridListProps } from '../../components/AssetGridList/AssetGridList';\nimport type { Asset } from '../../components/EditAssetDialog/EditAssetContent';\nimport type { FolderRow, FileRow, TableListProps } from '../../components/TableList/TableList';\n\nconst BoxWithHeight = styled(Box)`\n height: 3.2rem;\n display: flex;\n align-items: center;\n`;\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 100%;\n`;\n\nconst ActionContainer = styled(Box)`\n svg {\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n`;\n\nexport const MediaLibrary = () => {\n const navigate = useNavigate();\n const {\n canRead,\n canCreate,\n canUpdate,\n canCopyLink,\n canDownload,\n canConfigureView,\n isLoading: permissionsLoading,\n } = useMediaLibraryPermissions();\n const { isEnabled: isAiEnabled, status: aiAvailabilityStatus } = useAIAvailability();\n const currentFolderToEditRef = React.useRef<HTMLDivElement>();\n const { formatMessage } = useIntl();\n const { pathname } = useLocation();\n const { trackUsage } = useTracking();\n const [{ query }, setQuery] = useQueryParams<Query>();\n const isFiltering = Boolean(query._q || query.filters);\n const [view, setView] = usePersistentState(localStorageKeys.view, viewOptions.GRID);\n const isGridView = view === viewOptions.GRID;\n\n const {\n data: assetsData,\n isLoading: assetsLoading,\n error: assetsError,\n } = useAssets({\n skipWhen: !canRead,\n query,\n });\n\n const {\n data: foldersData,\n isLoading: foldersLoading,\n error: foldersError,\n } = useFolders({\n enabled: canRead && assetsData?.pagination?.page === 1 && !containsAssetFilter(query),\n query,\n });\n\n const {\n data: currentFolder,\n isLoading: isCurrentFolderLoading,\n error: currentFolderError,\n } = useFolder(query?.folder as number | null | undefined, {\n enabled: canRead && !!query?.folder,\n });\n\n // Folder was not found: redirect to the media library root\n if (currentFolderError?.name === 'NotFoundError') {\n navigate(pathname);\n }\n\n const folders =\n foldersData?.map((folder) => ({\n ...folder,\n type: 'folder',\n folderURL: getFolderURL(pathname, query, {\n folder: folder.id.toString(),\n folderPath: folder.path,\n }),\n isSelectable: canUpdate,\n })) ?? [];\n const folderCount = folders?.length || 0;\n const assets =\n assetsData?.results?.map((asset) => ({ ...asset, type: 'asset', isSelectable: canUpdate })) ||\n [];\n const assetCount = assets?.length ?? 0;\n const totalAssetCount = assetsData?.pagination?.total;\n\n const isLoading =\n isCurrentFolderLoading ||\n foldersLoading ||\n permissionsLoading ||\n assetsLoading ||\n aiAvailabilityStatus === 'loading';\n const [showUploadAssetDialog, setShowUploadAssetDialog] = React.useState(false);\n const [showEditFolderDialog, setShowEditFolderDialog] = React.useState(false);\n const [assetToEdit, setAssetToEdit] = React.useState<Asset | undefined>(undefined);\n const [folderToEdit, setFolderToEdit] = React.useState<FolderRow | undefined | null>(undefined);\n const [selected, { selectOne, selectAll, setSelections }] = useSelectionState<\n FolderRow | FileRow\n >(['type', 'id'], []);\n // reset selection when folder changes to hide bulk actions\n React.useEffect(() => {\n setSelections([]);\n }, [query.folder, setSelections]);\n\n const indeterminateBulkSelect =\n selected?.length > 0 && selected?.length !== assetCount + folderCount;\n const toggleUploadAssetDialog = () => setShowUploadAssetDialog((prev) => !prev);\n const toggleEditFolderDialog = ({ created = false } = {}) => {\n // folders are only displayed on the first page, therefore\n // we have to navigate the user to that page, in case a folder\n // was created successfully in order for them to see it\n if (created && query?.page !== '1') {\n setQuery(withEncodedUserParams(query, { page: 1 }));\n }\n\n setShowEditFolderDialog((prev) => !prev);\n };\n\n const handleBulkSelect = (\n checked: boolean | 'indeterminate',\n elements?: FolderRow[] | FileRow[]\n ) => {\n if (checked) {\n trackUsage('didSelectAllMediaLibraryElements');\n }\n\n selectAll(elements as (FolderRow | FileRow)[]);\n };\n\n const handleChangeSort = (value: Query['sort'] | string) => {\n trackUsage('didSortMediaLibraryElements', {\n location: 'upload',\n sort: value,\n });\n setQuery(withEncodedUserParams(query, { sort: value as Query['sort'] }));\n };\n\n const handleEditFolder = (folder: FolderRow) => {\n setFolderToEdit(folder);\n setShowEditFolderDialog(true);\n };\n\n const handleEditFolderClose = (payload?: { created?: boolean | undefined }) => {\n setFolderToEdit(null);\n toggleEditFolderDialog(payload);\n\n if (currentFolderToEditRef.current) {\n currentFolderToEditRef.current.focus();\n }\n };\n\n const handleAssetDeleted = (numberOfAssets: number) => {\n if (\n numberOfAssets === assetCount &&\n assetsData?.pagination?.page === assetsData?.pagination?.pageCount &&\n assetsData?.pagination?.page &&\n assetsData.pagination.page > 1\n ) {\n setQuery(withEncodedUserParams(query, { page: assetsData.pagination.page - 1 }));\n }\n };\n\n const handleBulkActionSuccess = () => {\n selectAll();\n\n handleAssetDeleted(selected.length);\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (assetsError || foldersError || aiAvailabilityStatus === 'error') {\n return <Page.Error />;\n }\n\n return (\n <Layouts.Root>\n <Page.Main>\n <Header\n breadcrumbs={\n !isCurrentFolderLoading\n ? (getBreadcrumbDataML(currentFolder!, {\n pathname,\n query,\n }) as HeaderProps['breadcrumbs'])\n : null\n }\n canCreate={canCreate}\n onToggleEditFolderDialog={toggleEditFolderDialog}\n onToggleUploadAssetDialog={toggleUploadAssetDialog}\n folder={currentFolder as HeaderProps['folder']}\n />\n <Layouts.Action\n startActions={\n <>\n {canUpdate && isGridView && (assetCount > 0 || folderCount > 0) && (\n <BoxWithHeight\n paddingLeft={2}\n paddingRight={2}\n background=\"neutral0\"\n hasRadius\n borderColor=\"neutral200\"\n >\n <Checkbox\n aria-label={formatMessage({\n id: getTrad('bulk.select.label'),\n defaultMessage: 'Select all folders & assets',\n })}\n checked={\n indeterminateBulkSelect\n ? 'indeterminate'\n : (assetCount > 0 || folderCount > 0) &&\n selected.length === assetCount + folderCount\n }\n onCheckedChange={(e) =>\n handleBulkSelect(e, [...assets, ...folders] as FolderRow[] | FileRow[])\n }\n />\n </BoxWithHeight>\n )}\n {canRead && isGridView && (\n <SortPicker value={query?.sort} onChangeSort={handleChangeSort} />\n )}\n {canRead && <Filters />}\n </>\n }\n endActions={\n <>\n {canConfigureView ? (\n <ActionContainer paddingTop={1} paddingBottom={1}>\n <IconButton\n tag={ReactRouterLink}\n to={{\n pathname: `${pathname}/configuration`,\n search: stringify(deepEncodeQueryValues(query), { encode: false }),\n }}\n label={formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n >\n <Cog />\n </IconButton>\n </ActionContainer>\n ) : null}\n <ActionContainer paddingTop={1} paddingBottom={1}>\n <IconButton\n label={\n isGridView\n ? formatMessage({\n id: getTrad('view-switch.list'),\n defaultMessage: 'List View',\n })\n : formatMessage({\n id: getTrad('view-switch.grid'),\n defaultMessage: 'Grid View',\n })\n }\n onClick={() => setView(isGridView ? viewOptions.LIST : viewOptions.GRID)}\n >\n {isGridView ? <List /> : <GridIcon />}\n </IconButton>\n </ActionContainer>\n <SearchInput\n label={formatMessage({\n id: getTrad('search.label'),\n defaultMessage: 'Search for an asset',\n })}\n trackedEvent=\"didSearchMediaLibraryElements\"\n trackedEventDetails={{ location: 'upload' }}\n />\n </>\n }\n />\n\n <Layouts.Content>\n {selected.length > 0 && (\n <BulkActions\n currentFolder={currentFolder as BulkActionsProps['currentFolder']}\n selected={selected as BulkActionsProps['selected']}\n onSuccess={handleBulkActionSuccess}\n />\n )}\n\n {folderCount === 0 && assetCount === 0 && (\n <EmptyOrNoPermissions\n canCreate={canCreate}\n canRead={canRead}\n isFiltering={isFiltering}\n onActionClick={toggleUploadAssetDialog}\n />\n )}\n\n {/* TODO: fix AssetListTable should handle no assets views (loading) */}\n {canRead && !isGridView && (assetCount > 0 || folderCount > 0) && (\n <TableList\n assetCount={assetCount}\n folderCount={folderCount}\n indeterminate={indeterminateBulkSelect}\n onChangeSort={handleChangeSort}\n onChangeFolder={(folderID, folderPath) =>\n navigate(getFolderURL(pathname, query, { folder: folderID.toString(), folderPath }))\n }\n onEditAsset={setAssetToEdit as TableListProps['onEditAsset']}\n onEditFolder={handleEditFolder}\n onSelectOne={selectOne}\n onSelectAll={handleBulkSelect as TableListProps['onSelectAll']}\n rows={[...folders, ...assets] as TableListProps['rows']}\n selected={selected as TableListProps['selected']}\n shouldDisableBulkSelect={!canUpdate}\n sortQuery={query?.sort ?? ''}\n />\n )}\n\n {canRead && isGridView && (\n <>\n {folderCount > 0 && (\n <FolderGridList\n title={\n // Folders title should only appear if:\n // user is filtering and there are assets to display, to divide both type of elements\n // user is not filtering\n (((isFiltering && assetCount > 0) || !isFiltering) &&\n formatMessage(\n {\n id: getTrad('list.folders.title'),\n defaultMessage: 'Folders ({count})',\n },\n { count: folderCount }\n )) ||\n ''\n }\n >\n {folders.map((folder) => {\n const selectedFolders = selected.filter(({ type }) => type === 'folder');\n const isSelected = !!selectedFolders.find(\n (currentFolder) => currentFolder.id === folder.id\n );\n\n const url = getFolderURL(pathname, query, {\n folder: folder?.id.toString(),\n folderPath: folder?.path,\n });\n\n return (\n <Grid.Item\n col={3}\n m={4}\n s={6}\n xs={12}\n key={`folder-${folder.id}`}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <FolderCard\n ref={\n folderToEdit && folder.id === folderToEdit.id\n ? currentFolderToEditRef\n : undefined\n }\n ariaLabel={folder.name}\n id={`folder-${folder.id}`}\n to={url}\n startAction={\n folder.isSelectable ? (\n <FolderCardCheckbox\n data-testid={`folder-checkbox-${folder.id}`}\n checked={isSelected}\n onCheckedChange={() => selectOne(folder)}\n />\n ) : null\n }\n cardActions={\n <IconButton\n label={formatMessage({\n id: getTrad('list.folder.edit'),\n defaultMessage: 'Edit folder',\n })}\n onClick={() => handleEditFolder(folder)}\n >\n <Pencil />\n </IconButton>\n }\n >\n <FolderCardBody>\n <FolderCardBodyAction to={url}>\n <Flex tag=\"h2\" direction=\"column\" alignItems=\"start\" maxWidth=\"100%\">\n <TypographyMaxWidth\n fontWeight=\"semiBold\"\n textColor=\"neutral800\"\n ellipsis\n >\n {folder.name}\n <VisuallyHidden>:</VisuallyHidden>\n </TypographyMaxWidth>\n\n <TypographyMaxWidth\n tag=\"span\"\n textColor=\"neutral600\"\n variant=\"pi\"\n ellipsis\n >\n {formatMessage(\n {\n id: getTrad('list.folder.subtitle'),\n defaultMessage:\n '{folderCount, plural, one {# folder} other {# folders}}, {filesCount, plural, one {# asset} other {# assets}}',\n },\n {\n folderCount: (folder as FolderDefinition).children?.count,\n filesCount: (folder as FolderDefinition).files?.count,\n }\n )}\n </TypographyMaxWidth>\n </Flex>\n </FolderCardBodyAction>\n </FolderCardBody>\n </FolderCard>\n </Grid.Item>\n );\n })}\n </FolderGridList>\n )}\n\n {assetCount > 0 && folderCount > 0 && (\n <Box paddingTop={6} paddingBottom={4}>\n <Divider />\n </Box>\n )}\n\n {assetCount > 0 && (\n <AssetGridList\n assets={assets}\n onEditAsset={setAssetToEdit as AssetGridListProps['onEditAsset']}\n onSelectAsset={selectOne}\n selectedAssets={\n selected.filter(\n ({ type }) => type === 'asset'\n ) as AssetGridListProps['selectedAssets']\n }\n title={\n // Assets title should only appear if:\n // - user is not filtering\n // - user is filtering and there are folders to display, to separate them\n // - user is on page 1 since folders won't appear on any other page than the first one (no need to visually separate them)\n ((!isFiltering || (isFiltering && folderCount > 0)) &&\n assetsData?.pagination?.page === 1 &&\n formatMessage(\n {\n id: getTrad('list.assets.title'),\n defaultMessage: 'Assets ({count})',\n },\n { count: totalAssetCount }\n )) ||\n ''\n }\n />\n )}\n </>\n )}\n <Pagination.Root {...assetsData?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n </Page.Main>\n {showUploadAssetDialog &&\n (isAiEnabled ? (\n <AIUploadModal\n open={showUploadAssetDialog}\n onClose={toggleUploadAssetDialog}\n folderId={query?.folder ? Number(query.folder) : null}\n />\n ) : (\n <UploadAssetDialog\n open={showUploadAssetDialog}\n onClose={toggleUploadAssetDialog}\n trackedLocation=\"upload\"\n folderId={query?.folder as string | number | null | undefined}\n />\n ))}\n {showEditFolderDialog && (\n <EditFolderDialog\n open={showEditFolderDialog}\n onClose={() => handleEditFolderClose()}\n folder={folderToEdit as FolderDefinition}\n parentFolderId={query?.folder as string | number | null | undefined}\n location=\"upload\"\n />\n )}\n {assetToEdit && (\n <EditAssetDialog\n onClose={(editedAsset) => {\n // The asset has been deleted\n if (editedAsset === null) {\n handleAssetDeleted(1);\n }\n\n setAssetToEdit(undefined);\n }}\n open={!!assetToEdit}\n asset={assetToEdit}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n trackedLocation=\"upload\"\n />\n )}\n </Layouts.Root>\n );\n};\n"],"names":["BoxWithHeight","styled","Box","TypographyMaxWidth","Typography","ActionContainer","theme","colors","neutral500","MediaLibrary","navigate","useNavigate","canRead","canCreate","canUpdate","canCopyLink","canDownload","canConfigureView","isLoading","permissionsLoading","useMediaLibraryPermissions","isEnabled","isAiEnabled","status","aiAvailabilityStatus","useAIAvailability","currentFolderToEditRef","React","useRef","formatMessage","useIntl","pathname","useLocation","trackUsage","useTracking","query","setQuery","useQueryParams","isFiltering","Boolean","_q","filters","view","setView","usePersistentState","localStorageKeys","viewOptions","GRID","isGridView","data","assetsData","assetsLoading","error","assetsError","useAssets","skipWhen","foldersData","foldersLoading","foldersError","useFolders","enabled","pagination","page","containsAssetFilter","currentFolder","isCurrentFolderLoading","currentFolderError","useFolder","folder","name","folders","map","type","folderURL","getFolderURL","id","toString","folderPath","path","isSelectable","folderCount","length","assets","results","asset","assetCount","totalAssetCount","total","showUploadAssetDialog","setShowUploadAssetDialog","useState","showEditFolderDialog","setShowEditFolderDialog","assetToEdit","setAssetToEdit","undefined","folderToEdit","setFolderToEdit","selected","selectOne","selectAll","setSelections","useSelectionState","useEffect","indeterminateBulkSelect","toggleUploadAssetDialog","prev","toggleEditFolderDialog","created","withEncodedUserParams","handleBulkSelect","checked","elements","handleChangeSort","value","location","sort","handleEditFolder","handleEditFolderClose","payload","current","focus","handleAssetDeleted","numberOfAssets","pageCount","handleBulkActionSuccess","_jsx","Page","Loading","Error","_jsxs","Layouts","Root","Main","Header","breadcrumbs","getBreadcrumbDataML","onToggleEditFolderDialog","onToggleUploadAssetDialog","Action","startActions","_Fragment","paddingLeft","paddingRight","background","hasRadius","borderColor","Checkbox","aria-label","getTrad","defaultMessage","onCheckedChange","e","SortPicker","onChangeSort","Filters","endActions","paddingTop","paddingBottom","IconButton","tag","ReactRouterLink","to","search","stringify","deepEncodeQueryValues","encode","label","Cog","onClick","LIST","List","GridIcon","SearchInput","trackedEvent","trackedEventDetails","Content","BulkActions","onSuccess","EmptyOrNoPermissions","onActionClick","TableList","indeterminate","onChangeFolder","folderID","onEditAsset","onEditFolder","onSelectOne","onSelectAll","rows","shouldDisableBulkSelect","sortQuery","FolderGridList","title","count","selectedFolders","filter","isSelected","find","url","Grid","Item","col","m","s","xs","direction","alignItems","FolderCard","ref","ariaLabel","startAction","FolderCardCheckbox","data-testid","cardActions","Pencil","FolderCardBody","FolderCardBodyAction","Flex","maxWidth","fontWeight","textColor","ellipsis","VisuallyHidden","variant","children","filesCount","files","Divider","AssetGridList","onSelectAsset","selectedAssets","Pagination","PageSize","Links","AIUploadModal","open","onClose","folderId","Number","UploadAssetDialog","trackedLocation","EditFolderDialog","parentFolderId","EditAssetDialog","editedAsset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MediaLibrary.mjs","sources":["../../../../../admin/src/legacy/pages/App/MediaLibrary.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport {\n Page,\n SearchInput,\n Pagination,\n useTracking,\n useQueryParams,\n withEncodedUserParams,\n deepEncodeQueryValues,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport {\n Checkbox,\n Box,\n Divider,\n Flex,\n IconButton,\n Typography,\n VisuallyHidden,\n Grid,\n} from '@strapi/design-system';\nimport { Cog, GridFour as GridIcon, List, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link as ReactRouterLink, useNavigate, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { localStorageKeys, viewOptions } from '../../../constants';\nimport { AIUploadModal } from '../../ai/components/AIUploadModal';\nimport { AssetGridList } from '../../components/AssetGridList/AssetGridList';\nimport { EditAssetDialog } from '../../components/EditAssetDialog/EditAssetContent';\nimport { EditFolderDialog } from '../../components/EditFolderDialog/EditFolderDialog';\nimport { FolderCard } from '../../components/FolderCard/FolderCard/FolderCard';\nimport { FolderCardBody } from '../../components/FolderCard/FolderCardBody/FolderCardBody';\nimport { FolderCardBodyAction } from '../../components/FolderCard/FolderCardBodyAction/FolderCardBodyAction';\nimport { FolderCardCheckbox } from '../../components/FolderCard/FolderCardCheckbox/FolderCardCheckbox';\nimport { FolderGridList } from '../../components/FolderGridList/FolderGridList';\nimport { SortPicker } from '../../components/SortPicker/SortPicker';\nimport { TableList } from '../../components/TableList/TableList';\nimport { UploadAssetDialog } from '../../components/UploadAssetDialog/UploadAssetDialog';\nimport { useAIMetadataEnabled } from '../../hooks/useAIMetadataEnabled';\nimport { useAssets } from '../../hooks/useAssets';\nimport { useFolder } from '../../hooks/useFolder';\nimport { useFolders } from '../../hooks/useFolders';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { usePersistentState } from '../../hooks/usePersistentState';\nimport { useSelectionState } from '../../hooks/useSelectionState';\nimport { containsAssetFilter, getBreadcrumbDataML, getFolderURL, getTrad } from '../../utils';\n\nimport { BulkActions } from './components/BulkActions';\nimport { EmptyOrNoPermissions } from './components/EmptyOrNoPermissions';\nimport { Filters } from './components/Filters';\nimport { Header } from './components/Header';\n\nimport type { BulkActionsProps } from './components/BulkActions';\nimport type { HeaderProps } from './components/Header';\nimport type { Query } from '../../../../../shared/contracts/files';\nimport type { FolderDefinition } from '../../../../../shared/contracts/folders';\nimport type { AssetGridListProps } from '../../components/AssetGridList/AssetGridList';\nimport type { Asset } from '../../components/EditAssetDialog/EditAssetContent';\nimport type { FolderRow, FileRow, TableListProps } from '../../components/TableList/TableList';\n\nconst BoxWithHeight = styled(Box)`\n height: 3.2rem;\n display: flex;\n align-items: center;\n`;\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 100%;\n`;\n\nconst ActionContainer = styled(Box)`\n svg {\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n`;\n\nexport const MediaLibrary = () => {\n const navigate = useNavigate();\n const {\n canRead,\n canCreate,\n canUpdate,\n canCopyLink,\n canDownload,\n canConfigureView,\n isLoading: permissionsLoading,\n } = useMediaLibraryPermissions();\n const { isEnabled: isAiEnabled, status: aiMetadataStatus } = useAIMetadataEnabled();\n const currentFolderToEditRef = React.useRef<HTMLDivElement>();\n const { formatMessage } = useIntl();\n const { pathname } = useLocation();\n const { trackUsage } = useTracking();\n const [{ query }, setQuery] = useQueryParams<Query>();\n const isFiltering = Boolean(query._q || query.filters);\n const [view, setView] = usePersistentState(localStorageKeys.view, viewOptions.GRID);\n const isGridView = view === viewOptions.GRID;\n\n const {\n data: assetsData,\n isLoading: assetsLoading,\n error: assetsError,\n } = useAssets({\n skipWhen: !canRead,\n query,\n });\n\n const {\n data: foldersData,\n isLoading: foldersLoading,\n error: foldersError,\n } = useFolders({\n enabled: canRead && assetsData?.pagination?.page === 1 && !containsAssetFilter(query),\n query,\n });\n\n const {\n data: currentFolder,\n isLoading: isCurrentFolderLoading,\n error: currentFolderError,\n } = useFolder(query?.folder as number | null | undefined, {\n enabled: canRead && !!query?.folder,\n });\n\n // Folder was not found: redirect to the media library root\n if (currentFolderError?.name === 'NotFoundError') {\n navigate(pathname);\n }\n\n const folders =\n foldersData?.map((folder) => ({\n ...folder,\n type: 'folder',\n folderURL: getFolderURL(pathname, query, {\n folder: folder.id.toString(),\n folderPath: folder.path,\n }),\n isSelectable: canUpdate,\n })) ?? [];\n const folderCount = folders?.length || 0;\n const assets =\n assetsData?.results?.map((asset) => ({ ...asset, type: 'asset', isSelectable: canUpdate })) ||\n [];\n const assetCount = assets?.length ?? 0;\n const totalAssetCount = assetsData?.pagination?.total;\n\n const isLoading =\n isCurrentFolderLoading ||\n foldersLoading ||\n permissionsLoading ||\n assetsLoading ||\n aiMetadataStatus === 'loading';\n const [showUploadAssetDialog, setShowUploadAssetDialog] = React.useState(false);\n const [showEditFolderDialog, setShowEditFolderDialog] = React.useState(false);\n const [assetToEdit, setAssetToEdit] = React.useState<Asset | undefined>(undefined);\n const [folderToEdit, setFolderToEdit] = React.useState<FolderRow | undefined | null>(undefined);\n const [selected, { selectOne, selectAll, setSelections }] = useSelectionState<\n FolderRow | FileRow\n >(['type', 'id'], []);\n // reset selection when folder changes to hide bulk actions\n React.useEffect(() => {\n setSelections([]);\n }, [query.folder, setSelections]);\n\n const indeterminateBulkSelect =\n selected?.length > 0 && selected?.length !== assetCount + folderCount;\n const toggleUploadAssetDialog = () => setShowUploadAssetDialog((prev) => !prev);\n const toggleEditFolderDialog = ({ created = false } = {}) => {\n // folders are only displayed on the first page, therefore\n // we have to navigate the user to that page, in case a folder\n // was created successfully in order for them to see it\n if (created && query?.page !== '1') {\n setQuery(withEncodedUserParams(query, { page: 1 }));\n }\n\n setShowEditFolderDialog((prev) => !prev);\n };\n\n const handleBulkSelect = (\n checked: boolean | 'indeterminate',\n elements?: FolderRow[] | FileRow[]\n ) => {\n if (checked) {\n trackUsage('didSelectAllMediaLibraryElements');\n }\n\n selectAll(elements as (FolderRow | FileRow)[]);\n };\n\n const handleChangeSort = (value: Query['sort'] | string) => {\n trackUsage('didSortMediaLibraryElements', {\n location: 'upload',\n sort: value,\n });\n setQuery(withEncodedUserParams(query, { sort: value as Query['sort'] }));\n };\n\n const handleEditFolder = (folder: FolderRow) => {\n setFolderToEdit(folder);\n setShowEditFolderDialog(true);\n };\n\n const handleEditFolderClose = (payload?: { created?: boolean | undefined }) => {\n setFolderToEdit(null);\n toggleEditFolderDialog(payload);\n\n if (currentFolderToEditRef.current) {\n currentFolderToEditRef.current.focus();\n }\n };\n\n const handleAssetDeleted = (numberOfAssets: number) => {\n if (\n numberOfAssets === assetCount &&\n assetsData?.pagination?.page === assetsData?.pagination?.pageCount &&\n assetsData?.pagination?.page &&\n assetsData.pagination.page > 1\n ) {\n setQuery(withEncodedUserParams(query, { page: assetsData.pagination.page - 1 }));\n }\n };\n\n const handleBulkActionSuccess = () => {\n selectAll();\n\n handleAssetDeleted(selected.length);\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (assetsError || foldersError || aiMetadataStatus === 'error') {\n return <Page.Error />;\n }\n\n return (\n <Layouts.Root>\n <Page.Main>\n <Header\n breadcrumbs={\n !isCurrentFolderLoading\n ? (getBreadcrumbDataML(currentFolder!, {\n pathname,\n query,\n }) as HeaderProps['breadcrumbs'])\n : null\n }\n canCreate={canCreate}\n onToggleEditFolderDialog={toggleEditFolderDialog}\n onToggleUploadAssetDialog={toggleUploadAssetDialog}\n folder={currentFolder as HeaderProps['folder']}\n />\n <Layouts.Action\n startActions={\n <>\n {canUpdate && isGridView && (assetCount > 0 || folderCount > 0) && (\n <BoxWithHeight\n paddingLeft={2}\n paddingRight={2}\n background=\"neutral0\"\n hasRadius\n borderColor=\"neutral200\"\n >\n <Checkbox\n aria-label={formatMessage({\n id: getTrad('bulk.select.label'),\n defaultMessage: 'Select all folders & assets',\n })}\n checked={\n indeterminateBulkSelect\n ? 'indeterminate'\n : (assetCount > 0 || folderCount > 0) &&\n selected.length === assetCount + folderCount\n }\n onCheckedChange={(e) =>\n handleBulkSelect(e, [...assets, ...folders] as FolderRow[] | FileRow[])\n }\n />\n </BoxWithHeight>\n )}\n {canRead && isGridView && (\n <SortPicker value={query?.sort} onChangeSort={handleChangeSort} />\n )}\n {canRead && <Filters />}\n </>\n }\n endActions={\n <>\n {canConfigureView ? (\n <ActionContainer paddingTop={1} paddingBottom={1}>\n <IconButton\n tag={ReactRouterLink}\n to={{\n pathname: `${pathname}/configuration`,\n search: stringify(deepEncodeQueryValues(query), { encode: false }),\n }}\n label={formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n >\n <Cog />\n </IconButton>\n </ActionContainer>\n ) : null}\n <ActionContainer paddingTop={1} paddingBottom={1}>\n <IconButton\n label={\n isGridView\n ? formatMessage({\n id: getTrad('view-switch.list'),\n defaultMessage: 'List View',\n })\n : formatMessage({\n id: getTrad('view-switch.grid'),\n defaultMessage: 'Grid View',\n })\n }\n onClick={() => setView(isGridView ? viewOptions.LIST : viewOptions.GRID)}\n >\n {isGridView ? <List /> : <GridIcon />}\n </IconButton>\n </ActionContainer>\n <SearchInput\n label={formatMessage({\n id: getTrad('search.label'),\n defaultMessage: 'Search for an asset',\n })}\n trackedEvent=\"didSearchMediaLibraryElements\"\n trackedEventDetails={{ location: 'upload' }}\n />\n </>\n }\n />\n\n <Layouts.Content>\n {selected.length > 0 && (\n <BulkActions\n currentFolder={currentFolder as BulkActionsProps['currentFolder']}\n selected={selected as BulkActionsProps['selected']}\n onSuccess={handleBulkActionSuccess}\n />\n )}\n\n {folderCount === 0 && assetCount === 0 && (\n <EmptyOrNoPermissions\n canCreate={canCreate}\n canRead={canRead}\n isFiltering={isFiltering}\n onActionClick={toggleUploadAssetDialog}\n />\n )}\n\n {/* TODO: fix AssetListTable should handle no assets views (loading) */}\n {canRead && !isGridView && (assetCount > 0 || folderCount > 0) && (\n <TableList\n assetCount={assetCount}\n folderCount={folderCount}\n indeterminate={indeterminateBulkSelect}\n onChangeSort={handleChangeSort}\n onChangeFolder={(folderID, folderPath) =>\n navigate(getFolderURL(pathname, query, { folder: folderID.toString(), folderPath }))\n }\n onEditAsset={setAssetToEdit as TableListProps['onEditAsset']}\n onEditFolder={handleEditFolder}\n onSelectOne={selectOne}\n onSelectAll={handleBulkSelect as TableListProps['onSelectAll']}\n rows={[...folders, ...assets] as TableListProps['rows']}\n selected={selected as TableListProps['selected']}\n shouldDisableBulkSelect={!canUpdate}\n sortQuery={query?.sort ?? ''}\n />\n )}\n\n {canRead && isGridView && (\n <>\n {folderCount > 0 && (\n <FolderGridList\n title={\n // Folders title should only appear if:\n // user is filtering and there are assets to display, to divide both type of elements\n // user is not filtering\n (((isFiltering && assetCount > 0) || !isFiltering) &&\n formatMessage(\n {\n id: getTrad('list.folders.title'),\n defaultMessage: 'Folders ({count})',\n },\n { count: folderCount }\n )) ||\n ''\n }\n >\n {folders.map((folder) => {\n const selectedFolders = selected.filter(({ type }) => type === 'folder');\n const isSelected = !!selectedFolders.find(\n (currentFolder) => currentFolder.id === folder.id\n );\n\n const url = getFolderURL(pathname, query, {\n folder: folder?.id.toString(),\n folderPath: folder?.path,\n });\n\n return (\n <Grid.Item\n col={3}\n m={4}\n s={6}\n xs={12}\n key={`folder-${folder.id}`}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <FolderCard\n ref={\n folderToEdit && folder.id === folderToEdit.id\n ? currentFolderToEditRef\n : undefined\n }\n ariaLabel={folder.name}\n id={`folder-${folder.id}`}\n to={url}\n startAction={\n folder.isSelectable ? (\n <FolderCardCheckbox\n data-testid={`folder-checkbox-${folder.id}`}\n checked={isSelected}\n onCheckedChange={() => selectOne(folder)}\n />\n ) : null\n }\n cardActions={\n <IconButton\n label={formatMessage({\n id: getTrad('list.folder.edit'),\n defaultMessage: 'Edit folder',\n })}\n onClick={() => handleEditFolder(folder)}\n >\n <Pencil />\n </IconButton>\n }\n >\n <FolderCardBody>\n <FolderCardBodyAction to={url}>\n <Flex tag=\"h2\" direction=\"column\" alignItems=\"start\" maxWidth=\"100%\">\n <TypographyMaxWidth\n fontWeight=\"semiBold\"\n textColor=\"neutral800\"\n ellipsis\n >\n {folder.name}\n <VisuallyHidden>:</VisuallyHidden>\n </TypographyMaxWidth>\n\n <TypographyMaxWidth\n tag=\"span\"\n textColor=\"neutral600\"\n variant=\"pi\"\n ellipsis\n >\n {formatMessage(\n {\n id: getTrad('list.folder.subtitle'),\n defaultMessage:\n '{folderCount, plural, one {# folder} other {# folders}}, {filesCount, plural, one {# asset} other {# assets}}',\n },\n {\n folderCount: (folder as FolderDefinition).children?.count,\n filesCount: (folder as FolderDefinition).files?.count,\n }\n )}\n </TypographyMaxWidth>\n </Flex>\n </FolderCardBodyAction>\n </FolderCardBody>\n </FolderCard>\n </Grid.Item>\n );\n })}\n </FolderGridList>\n )}\n\n {assetCount > 0 && folderCount > 0 && (\n <Box paddingTop={6} paddingBottom={4}>\n <Divider />\n </Box>\n )}\n\n {assetCount > 0 && (\n <AssetGridList\n assets={assets}\n onEditAsset={setAssetToEdit as AssetGridListProps['onEditAsset']}\n onSelectAsset={selectOne}\n selectedAssets={\n selected.filter(\n ({ type }) => type === 'asset'\n ) as AssetGridListProps['selectedAssets']\n }\n title={\n // Assets title should only appear if:\n // - user is not filtering\n // - user is filtering and there are folders to display, to separate them\n // - user is on page 1 since folders won't appear on any other page than the first one (no need to visually separate them)\n ((!isFiltering || (isFiltering && folderCount > 0)) &&\n assetsData?.pagination?.page === 1 &&\n formatMessage(\n {\n id: getTrad('list.assets.title'),\n defaultMessage: 'Assets ({count})',\n },\n { count: totalAssetCount }\n )) ||\n ''\n }\n />\n )}\n </>\n )}\n <Pagination.Root {...assetsData?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n </Page.Main>\n {showUploadAssetDialog &&\n (isAiEnabled ? (\n <AIUploadModal\n open={showUploadAssetDialog}\n onClose={toggleUploadAssetDialog}\n folderId={query?.folder ? Number(query.folder) : null}\n />\n ) : (\n <UploadAssetDialog\n open={showUploadAssetDialog}\n onClose={toggleUploadAssetDialog}\n trackedLocation=\"upload\"\n folderId={query?.folder as string | number | null | undefined}\n />\n ))}\n {showEditFolderDialog && (\n <EditFolderDialog\n open={showEditFolderDialog}\n onClose={() => handleEditFolderClose()}\n folder={folderToEdit as FolderDefinition}\n parentFolderId={query?.folder as string | number | null | undefined}\n location=\"upload\"\n />\n )}\n {assetToEdit && (\n <EditAssetDialog\n onClose={(editedAsset) => {\n // The asset has been deleted\n if (editedAsset === null) {\n handleAssetDeleted(1);\n }\n\n setAssetToEdit(undefined);\n }}\n open={!!assetToEdit}\n asset={assetToEdit}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n trackedLocation=\"upload\"\n />\n )}\n </Layouts.Root>\n );\n};\n"],"names":["BoxWithHeight","styled","Box","TypographyMaxWidth","Typography","ActionContainer","theme","colors","neutral500","MediaLibrary","navigate","useNavigate","canRead","canCreate","canUpdate","canCopyLink","canDownload","canConfigureView","isLoading","permissionsLoading","useMediaLibraryPermissions","isEnabled","isAiEnabled","status","aiMetadataStatus","useAIMetadataEnabled","currentFolderToEditRef","React","useRef","formatMessage","useIntl","pathname","useLocation","trackUsage","useTracking","query","setQuery","useQueryParams","isFiltering","Boolean","_q","filters","view","setView","usePersistentState","localStorageKeys","viewOptions","GRID","isGridView","data","assetsData","assetsLoading","error","assetsError","useAssets","skipWhen","foldersData","foldersLoading","foldersError","useFolders","enabled","pagination","page","containsAssetFilter","currentFolder","isCurrentFolderLoading","currentFolderError","useFolder","folder","name","folders","map","type","folderURL","getFolderURL","id","toString","folderPath","path","isSelectable","folderCount","length","assets","results","asset","assetCount","totalAssetCount","total","showUploadAssetDialog","setShowUploadAssetDialog","useState","showEditFolderDialog","setShowEditFolderDialog","assetToEdit","setAssetToEdit","undefined","folderToEdit","setFolderToEdit","selected","selectOne","selectAll","setSelections","useSelectionState","useEffect","indeterminateBulkSelect","toggleUploadAssetDialog","prev","toggleEditFolderDialog","created","withEncodedUserParams","handleBulkSelect","checked","elements","handleChangeSort","value","location","sort","handleEditFolder","handleEditFolderClose","payload","current","focus","handleAssetDeleted","numberOfAssets","pageCount","handleBulkActionSuccess","_jsx","Page","Loading","Error","_jsxs","Layouts","Root","Main","Header","breadcrumbs","getBreadcrumbDataML","onToggleEditFolderDialog","onToggleUploadAssetDialog","Action","startActions","_Fragment","paddingLeft","paddingRight","background","hasRadius","borderColor","Checkbox","aria-label","getTrad","defaultMessage","onCheckedChange","e","SortPicker","onChangeSort","Filters","endActions","paddingTop","paddingBottom","IconButton","tag","ReactRouterLink","to","search","stringify","deepEncodeQueryValues","encode","label","Cog","onClick","LIST","List","GridIcon","SearchInput","trackedEvent","trackedEventDetails","Content","BulkActions","onSuccess","EmptyOrNoPermissions","onActionClick","TableList","indeterminate","onChangeFolder","folderID","onEditAsset","onEditFolder","onSelectOne","onSelectAll","rows","shouldDisableBulkSelect","sortQuery","FolderGridList","title","count","selectedFolders","filter","isSelected","find","url","Grid","Item","col","m","s","xs","direction","alignItems","FolderCard","ref","ariaLabel","startAction","FolderCardCheckbox","data-testid","cardActions","Pencil","FolderCardBody","FolderCardBodyAction","Flex","maxWidth","fontWeight","textColor","ellipsis","VisuallyHidden","variant","children","filesCount","files","Divider","AssetGridList","onSelectAsset","selectedAssets","Pagination","PageSize","Links","AIUploadModal","open","onClose","folderId","Number","UploadAssetDialog","trackedLocation","EditFolderDialog","parentFolderId","EditAssetDialog","editedAsset"],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
|
6
6
|
var designSystem = require('@strapi/design-system');
|
|
7
7
|
var icons = require('@strapi/icons');
|
|
8
8
|
var reactIntl = require('react-intl');
|
|
9
|
+
var useApiErrorMessage = require('../../../hooks/useApiErrorMessage.js');
|
|
9
10
|
var assets = require('../../../services/assets.js');
|
|
10
11
|
var translations = require('../../../utils/translations.js');
|
|
11
12
|
|
|
@@ -20,6 +21,7 @@ var translations = require('../../../utils/translations.js');
|
|
|
20
21
|
*/ const DeleteItemsDialog = ({ open, onClose, target, onSuccess, onPendingChange })=>{
|
|
21
22
|
const { formatMessage } = reactIntl.useIntl();
|
|
22
23
|
const { toggleNotification } = strapiAdmin.useNotification();
|
|
24
|
+
const getErrorMessage = useApiErrorMessage.useApiErrorMessage();
|
|
23
25
|
const [bulkDeleteItems, { isLoading: isDeleting }] = assets.useBulkDeleteItemsMutation();
|
|
24
26
|
const count = target.fileIds.length + target.folderIds.length;
|
|
25
27
|
React.useEffect(()=>{
|
|
@@ -43,10 +45,10 @@ var translations = require('../../../utils/translations.js');
|
|
|
43
45
|
// (Confirm again) or Cancel; only surface the error toast.
|
|
44
46
|
toggleNotification({
|
|
45
47
|
type: 'danger',
|
|
46
|
-
message: formatMessage({
|
|
48
|
+
message: getErrorMessage(res.error, formatMessage({
|
|
47
49
|
id: translations.getTranslationKey('list.bulk-actions.delete.error'),
|
|
48
50
|
defaultMessage: 'An error occurred while deleting the items.'
|
|
49
|
-
})
|
|
51
|
+
}))
|
|
50
52
|
});
|
|
51
53
|
return;
|
|
52
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteItemsDialog.js","sources":["../../../../../admin/src/pages/Assets/components/DeleteItemsDialog.tsx"],"sourcesContent":["import { useEffect, type MouseEvent } from 'react';\n\nimport { useNotification } from '@strapi/admin/strapi-admin';\nimport { Button, Dialog, Typography } from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useBulkDeleteItemsMutation } from '../../../services/assets';\nimport { getTranslationKey } from '../../../utils/translations';\n\ninterface DeleteItemsDialogProps {\n open: boolean;\n onClose: () => void;\n /** Explicit delete target — assets and/or folders, by id. */\n target: { fileIds: number[]; folderIds: number[] };\n /** Called after a successful delete, before the toast. */\n onSuccess?: () => void;\n /**\n * Mirrors the in-flight state out to the caller, so a host that has its own\n * controls (the bulk actions bar) can disable them for the duration.\n */\n onPendingChange?: (pending: boolean) => void;\n}\n\n/**\n * Confirm dialog for `POST /upload/actions/bulk-delete`. Fully controlled: the\n * caller owns `open` and renders its own trigger. Shared by the bulk actions bar\n * (selection-scoped) and the per-folder actions menu (item-scoped), so the\n * target is always passed in explicitly rather than read from the selection.\n *\n * Deleting a folder cascades server-side, which is why the copy warns about\n * folder contents even for a single item.\n */\nexport const DeleteItemsDialog = ({\n open,\n onClose,\n target,\n onSuccess,\n onPendingChange,\n}: DeleteItemsDialogProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const [bulkDeleteItems, { isLoading: isDeleting }] = useBulkDeleteItemsMutation();\n\n const count = target.fileIds.length + target.folderIds.length;\n\n useEffect(() => {\n onPendingChange?.(isDeleting);\n }, [isDeleting, onPendingChange]);\n\n const handleConfirmDelete = async (e: MouseEvent) => {\n // Radix AlertDialog.Action closes the dialog on click by default; prevent\n // that so the dialog stays open showing the loader while the request runs\n // (a bulk delete can take a while depending on the number of assets).\n e.preventDefault();\n\n // Guard re-entry while pending.\n if (isDeleting) {\n return;\n }\n\n const res = await bulkDeleteItems(target);\n\n if ('error' in res) {\n // Keep the dialog open and the selection intact so the user can retry\n // (Confirm again) or Cancel; only surface the error toast.\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n
|
|
1
|
+
{"version":3,"file":"DeleteItemsDialog.js","sources":["../../../../../admin/src/pages/Assets/components/DeleteItemsDialog.tsx"],"sourcesContent":["import { useEffect, type MouseEvent } from 'react';\n\nimport { useNotification } from '@strapi/admin/strapi-admin';\nimport { Button, Dialog, Typography } from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useApiErrorMessage } from '../../../hooks/useApiErrorMessage';\nimport { useBulkDeleteItemsMutation } from '../../../services/assets';\nimport { getTranslationKey } from '../../../utils/translations';\n\ninterface DeleteItemsDialogProps {\n open: boolean;\n onClose: () => void;\n /** Explicit delete target — assets and/or folders, by id. */\n target: { fileIds: number[]; folderIds: number[] };\n /** Called after a successful delete, before the toast. */\n onSuccess?: () => void;\n /**\n * Mirrors the in-flight state out to the caller, so a host that has its own\n * controls (the bulk actions bar) can disable them for the duration.\n */\n onPendingChange?: (pending: boolean) => void;\n}\n\n/**\n * Confirm dialog for `POST /upload/actions/bulk-delete`. Fully controlled: the\n * caller owns `open` and renders its own trigger. Shared by the bulk actions bar\n * (selection-scoped) and the per-folder actions menu (item-scoped), so the\n * target is always passed in explicitly rather than read from the selection.\n *\n * Deleting a folder cascades server-side, which is why the copy warns about\n * folder contents even for a single item.\n */\nexport const DeleteItemsDialog = ({\n open,\n onClose,\n target,\n onSuccess,\n onPendingChange,\n}: DeleteItemsDialogProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const getErrorMessage = useApiErrorMessage();\n const [bulkDeleteItems, { isLoading: isDeleting }] = useBulkDeleteItemsMutation();\n\n const count = target.fileIds.length + target.folderIds.length;\n\n useEffect(() => {\n onPendingChange?.(isDeleting);\n }, [isDeleting, onPendingChange]);\n\n const handleConfirmDelete = async (e: MouseEvent) => {\n // Radix AlertDialog.Action closes the dialog on click by default; prevent\n // that so the dialog stays open showing the loader while the request runs\n // (a bulk delete can take a while depending on the number of assets).\n e.preventDefault();\n\n // Guard re-entry while pending.\n if (isDeleting) {\n return;\n }\n\n const res = await bulkDeleteItems(target);\n\n if ('error' in res) {\n // Keep the dialog open and the selection intact so the user can retry\n // (Confirm again) or Cancel; only surface the error toast.\n toggleNotification({\n type: 'danger',\n message: getErrorMessage(\n res.error,\n formatMessage({\n id: getTranslationKey('list.bulk-actions.delete.error'),\n defaultMessage: 'An error occurred while deleting the items.',\n })\n ),\n });\n return;\n }\n\n onClose();\n toggleNotification({\n type: 'success',\n message: formatMessage(\n {\n id: getTranslationKey('list.bulk-actions.delete.success'),\n defaultMessage:\n '{count, plural, =1 {# item has been deleted} other {# items have been deleted}}',\n },\n { count }\n ),\n });\n onSuccess?.();\n };\n\n return (\n <Dialog.Root\n open={open}\n onOpenChange={(nextOpen: boolean) => {\n // The dialog must stay open while the request runs — a bulk delete\n // can't be aborted halfway, so the loader is the source of truth.\n if (!nextOpen && !isDeleting) {\n onClose();\n }\n }}\n >\n <Dialog.Content>\n <Dialog.Header>\n {formatMessage(\n {\n id: getTranslationKey('list.bulk-actions.delete.confirm.title'),\n defaultMessage: 'Delete {count, plural, =1 {# item} other {# items}}?',\n },\n { count }\n )}\n </Dialog.Header>\n <Dialog.Body\n icon={<WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />}\n textAlign=\"center\"\n >\n <Typography>\n {formatMessage({\n id: getTranslationKey('list.bulk-actions.delete.confirm.description.are-you-sure'),\n defaultMessage:\n 'These items cannot be recovered once deleted, and deleting a folder also deletes everything inside it. If they are currently in use, linked content will break and image containers will be empty.',\n })}\n </Typography>\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\n variant=\"danger-light\"\n loading={isDeleting}\n onClick={handleConfirmDelete}\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n </Dialog.Action>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n"],"names":["DeleteItemsDialog","open","onClose","target","onSuccess","onPendingChange","formatMessage","useIntl","toggleNotification","useNotification","getErrorMessage","useApiErrorMessage","bulkDeleteItems","isLoading","isDeleting","useBulkDeleteItemsMutation","count","fileIds","length","folderIds","useEffect","handleConfirmDelete","e","preventDefault","res","type","message","error","id","getTranslationKey","defaultMessage","_jsx","Dialog","Root","onOpenChange","nextOpen","_jsxs","Content","Header","Body","icon","WarningCircle","width","height","fill","textAlign","Typography","Footer","Cancel","Button","variant","disabled","fullWidth","Action","loading","onClick"],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { useNotification } from '@strapi/admin/strapi-admin';
|
|
|
4
4
|
import { Dialog, Typography, Button } from '@strapi/design-system';
|
|
5
5
|
import { WarningCircle } from '@strapi/icons';
|
|
6
6
|
import { useIntl } from 'react-intl';
|
|
7
|
+
import { useApiErrorMessage } from '../../../hooks/useApiErrorMessage.mjs';
|
|
7
8
|
import { useBulkDeleteItemsMutation } from '../../../services/assets.mjs';
|
|
8
9
|
import { getTranslationKey } from '../../../utils/translations.mjs';
|
|
9
10
|
|
|
@@ -18,6 +19,7 @@ import { getTranslationKey } from '../../../utils/translations.mjs';
|
|
|
18
19
|
*/ const DeleteItemsDialog = ({ open, onClose, target, onSuccess, onPendingChange })=>{
|
|
19
20
|
const { formatMessage } = useIntl();
|
|
20
21
|
const { toggleNotification } = useNotification();
|
|
22
|
+
const getErrorMessage = useApiErrorMessage();
|
|
21
23
|
const [bulkDeleteItems, { isLoading: isDeleting }] = useBulkDeleteItemsMutation();
|
|
22
24
|
const count = target.fileIds.length + target.folderIds.length;
|
|
23
25
|
useEffect(()=>{
|
|
@@ -41,10 +43,10 @@ import { getTranslationKey } from '../../../utils/translations.mjs';
|
|
|
41
43
|
// (Confirm again) or Cancel; only surface the error toast.
|
|
42
44
|
toggleNotification({
|
|
43
45
|
type: 'danger',
|
|
44
|
-
message: formatMessage({
|
|
46
|
+
message: getErrorMessage(res.error, formatMessage({
|
|
45
47
|
id: getTranslationKey('list.bulk-actions.delete.error'),
|
|
46
48
|
defaultMessage: 'An error occurred while deleting the items.'
|
|
47
|
-
})
|
|
49
|
+
}))
|
|
48
50
|
});
|
|
49
51
|
return;
|
|
50
52
|
}
|