{"version":3,"file":"MediaLibrary.mjs","sources":["../../../../admin/src/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  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 { 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 { localStorageKeys, viewOptions } from '../../constants';\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({\n        ...query,\n        page: 1,\n      });\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({ 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({\n        ...query,\n        page: assetsData.pagination.page - 1,\n      });\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(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","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","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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"}