{"version":3,"file":"BrowseStep.mjs","sources":["../../../../../admin/src/components/AssetDialog/BrowseStep/BrowseStep.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport {\n  Checkbox,\n  Box,\n  Button,\n  Divider,\n  Flex,\n  IconButton,\n  Typography,\n  VisuallyHidden,\n  Grid,\n} from '@strapi/design-system';\nimport { GridFour as GridIcon, List, Pencil, Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { localStorageKeys, viewOptions } from '../../../constants';\nimport { useFolder } from '../../../hooks/useFolder';\nimport { usePersistentState } from '../../../hooks/usePersistentState';\nimport {\n  getBreadcrumbDataCM,\n  toSingularTypes,\n  getTrad,\n  getAllowedFiles,\n  BreadcrumbDataFolder,\n  AllowedFiles,\n} from '../../../utils';\nimport { AssetGridList } from '../../AssetGridList/AssetGridList';\nimport { Breadcrumbs } from '../../Breadcrumbs/Breadcrumbs';\nimport { EmptyAssets } from '../../EmptyAssets/EmptyAssets';\nimport { FolderCard } from '../../FolderCard/FolderCard/FolderCard';\nimport { FolderCardBody } from '../../FolderCard/FolderCardBody/FolderCardBody';\nimport { FolderCardBodyAction } from '../../FolderCard/FolderCardBodyAction/FolderCardBodyAction';\nimport { FolderGridList } from '../../FolderGridList/FolderGridList';\nimport { SortPicker } from '../../SortPicker/SortPicker';\nimport { TableList, FolderRow, FileRow } from '../../TableList/TableList';\n\nimport { Filters, FilterStructure as ImportedFilterStructure } from './Filters';\nimport { PageSize } from './PageSize';\nimport { PaginationFooter } from './PaginationFooter/PaginationFooter';\nimport { SearchAsset } from './SearchAsset/SearchAsset';\nimport { isSelectable } from './utils/isSelectable';\n\nimport type { File, Query, FilterCondition } from '../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../shared/contracts/folders';\nimport type { AllowedTypes } from '../../AssetCard/AssetCard';\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\ntype NumberKeyedObject = Record<number, string>;\n\ntype StringFilter = {\n  [key: string]: string;\n};\n\ntype MimeFilter = {\n  [key: string]:\n    | string\n    | NumberKeyedObject\n    | Record<string, string | NumberKeyedObject>\n    | undefined;\n};\n\nexport type FilterStructure = {\n  [key: string]: MimeFilter | StringFilter | undefined;\n};\n\nexport type Filter = {\n  [key in 'mime' | 'createdAt' | 'updatedAt']?:\n    | {\n        [key in '$contains' | '$notContains' | '$eq' | '$not']?:\n          | string[]\n          | string\n          | { $contains: string[] };\n      }\n    | undefined;\n};\n\nexport interface FolderWithType extends Omit<Folder, 'children' | 'files'> {\n  folderURL?: string;\n  isSelectable?: boolean;\n  type?: string;\n  children?: Folder['children'] & {\n    count: number;\n  };\n  files?: Folder['files'] & {\n    count: number;\n  };\n}\n\nexport interface FileWithType extends File {\n  folderURL?: string;\n  isSelectable?: boolean;\n  type?: string;\n}\n\nexport interface BrowseStepProps {\n  allowedTypes?: AllowedTypes[];\n  assets: File[];\n  canCreate: boolean;\n  canRead: boolean;\n  folders?: FolderWithType[];\n  multiple?: boolean;\n  onAddAsset: () => void;\n  onChangeFilters: (filters: FilterCondition<string>[] | Filter[]) => void;\n  onChangeFolder: (id: number, path?: string) => void;\n  onChangePage: (page: number) => void;\n  onChangePageSize: (value: number) => void;\n  onChangeSort: (value: Query['sort'] | string) => void;\n  onChangeSearch: (_q?: Query['_q'] | null) => void;\n  onEditAsset: ((asset: FileWithType) => void) | null;\n  onEditFolder: ((folder: FolderRow) => void) | null;\n  onSelectAsset: (element: FileRow | FolderRow) => void;\n  onSelectAllAsset?: (checked: boolean | string, rows?: FolderRow[] | FileRow[]) => void;\n  queryObject: Query;\n  pagination: { pageCount: number };\n  selectedAssets: FileWithType[] | FolderWithType[];\n}\n\nexport const BrowseStep = ({\n  allowedTypes = [],\n  assets: rawAssets,\n  canCreate,\n  canRead,\n  folders = [],\n  multiple = false,\n  onAddAsset,\n  onChangeFilters,\n  onChangePage,\n  onChangePageSize,\n  onChangeSearch,\n  onChangeSort,\n  onChangeFolder,\n  onEditAsset,\n  onEditFolder,\n  onSelectAllAsset,\n  onSelectAsset,\n  pagination,\n  queryObject,\n  selectedAssets,\n}: BrowseStepProps) => {\n  const { formatMessage } = useIntl();\n  const [view, setView] = usePersistentState(localStorageKeys.modalView, viewOptions.GRID);\n  const isGridView = view === viewOptions.GRID;\n\n  const { data: currentFolder, isLoading: isCurrentFolderLoading } = useFolder(\n    queryObject?.folder as number | null | undefined,\n    {\n      enabled: canRead && !!queryObject?.folder,\n    }\n  );\n\n  const singularTypes = toSingularTypes(allowedTypes);\n  const assets = rawAssets.map((asset) => ({\n    ...asset,\n    isSelectable: isSelectable(singularTypes, asset?.mime),\n    type: 'asset',\n  }));\n\n  const breadcrumbs = !isCurrentFolderLoading\n    ? getBreadcrumbDataCM(currentFolder as BreadcrumbDataFolder)\n    : undefined;\n\n  const allAllowedAsset = getAllowedFiles(allowedTypes, assets as AllowedFiles[]);\n  const areAllAssetSelected =\n    allAllowedAsset.length > 0 &&\n    selectedAssets.length > 0 &&\n    allAllowedAsset.every(\n      (asset) => selectedAssets.findIndex((currAsset) => currAsset.id === asset.id) !== -1\n    );\n  const hasSomeAssetSelected = allAllowedAsset.some(\n    (asset) => selectedAssets.findIndex((currAsset) => currAsset.id === asset.id) !== -1\n  );\n  const isSearching = !!queryObject?._q;\n  const isFiltering = !!queryObject?.filters?.$and?.length && queryObject.filters.$and.length > 0;\n  const isSearchingOrFiltering = isSearching || isFiltering;\n  const assetCount = assets.length;\n  const folderCount = folders.length;\n  const handleClickFolderCard = (...args: Parameters<typeof onChangeFolder>) => {\n    // Search query will always fetch the same results\n    // we remove it here to allow navigating in a folder and see the result of this navigation\n    onChangeSearch('');\n    onChangeFolder(...args);\n  };\n\n  return (\n    <Box>\n      {onSelectAllAsset && (\n        <Box paddingBottom={4}>\n          <Flex justifyContent=\"space-between\" alignItems=\"flex-start\">\n            {(assetCount > 0 || folderCount > 0 || isFiltering) && (\n              <Flex gap={2} wrap=\"wrap\">\n                {multiple && isGridView && (\n                  <Flex\n                    paddingLeft={2}\n                    paddingRight={2}\n                    background=\"neutral0\"\n                    hasRadius\n                    borderColor=\"neutral200\"\n                    height=\"3.2rem\"\n                  >\n                    <Checkbox\n                      aria-label={formatMessage({\n                        id: getTrad('bulk.select.label'),\n                        defaultMessage: 'Select all assets',\n                      })}\n                      checked={\n                        !areAllAssetSelected && hasSomeAssetSelected\n                          ? 'indeterminate'\n                          : areAllAssetSelected\n                      }\n                      onCheckedChange={onSelectAllAsset}\n                    />\n                  </Flex>\n                )}\n                {isGridView && <SortPicker onChangeSort={onChangeSort} value={queryObject?.sort} />}\n                <Filters\n                  appliedFilters={queryObject?.filters?.$and as ImportedFilterStructure[]}\n                  onChangeFilters={onChangeFilters}\n                />\n              </Flex>\n            )}\n\n            {(assetCount > 0 || folderCount > 0 || isSearching) && (\n              <Flex marginLeft=\"auto\" shrink={0} gap={2}>\n                <ActionContainer paddingTop={1} paddingBottom={1}>\n                  <IconButton\n                    label={\n                      isGridView\n                        ? formatMessage({\n                            id: 'view-switch.list',\n                            defaultMessage: 'List View',\n                          })\n                        : formatMessage({\n                            id: '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                <SearchAsset onChangeSearch={onChangeSearch} queryValue={queryObject._q || ''} />\n              </Flex>\n            )}\n          </Flex>\n        </Box>\n      )}\n\n      {canRead && breadcrumbs?.length && breadcrumbs.length > 0 && currentFolder && (\n        <Box paddingTop={3}>\n          <Breadcrumbs\n            onChangeFolder={onChangeFolder}\n            label={formatMessage({\n              id: getTrad('header.breadcrumbs.nav.label'),\n              defaultMessage: 'Folders navigation',\n            })}\n            breadcrumbs={breadcrumbs as BreadcrumbDataFolder[]}\n            currentFolderId={queryObject?.folder as number | undefined}\n          />\n        </Box>\n      )}\n\n      {assetCount === 0 && folderCount === 0 && (\n        <Box paddingBottom={6}>\n          <EmptyAssets\n            size=\"S\"\n            count={6}\n            action={\n              canCreate &&\n              !isFiltering &&\n              !isSearching && (\n                <Button variant=\"secondary\" startIcon={<Plus />} onClick={onAddAsset}>\n                  {formatMessage({\n                    id: getTrad('header.actions.add-assets'),\n                    defaultMessage: 'Add new assets',\n                  })}\n                </Button>\n              )\n            }\n            content={\n              // eslint-disable-next-line no-nested-ternary\n              isSearchingOrFiltering\n                ? formatMessage({\n                    id: getTrad('list.assets-empty.title-withSearch'),\n                    defaultMessage: 'There are no assets with the applied filters',\n                  })\n                : canCreate && !isSearching\n                  ? formatMessage({\n                      id: getTrad('list.assets.empty'),\n                      defaultMessage: 'Upload your first assets...',\n                    })\n                  : formatMessage({\n                      id: getTrad('list.assets.empty.no-permissions'),\n                      defaultMessage: 'The asset list is empty',\n                    })\n            }\n          />\n        </Box>\n      )}\n\n      {!isGridView && (folderCount > 0 || assetCount > 0) && (\n        <TableList\n          allowedTypes={allowedTypes}\n          assetCount={assetCount}\n          folderCount={folderCount}\n          indeterminate={!areAllAssetSelected && hasSomeAssetSelected}\n          isFolderSelectionAllowed={false}\n          onChangeSort={onChangeSort}\n          onChangeFolder={handleClickFolderCard}\n          onEditAsset={onEditAsset}\n          onEditFolder={onEditFolder}\n          onSelectOne={onSelectAsset}\n          onSelectAll={onSelectAllAsset!}\n          rows={\n            [...folders.map((folder) => ({ ...folder, type: 'folder' })), ...assets] as\n              | FolderRow[]\n              | FileRow[]\n          }\n          selected={selectedAssets}\n          shouldDisableBulkSelect={!multiple}\n          sortQuery={queryObject?.sort ?? ''}\n        />\n      )}\n\n      {isGridView && (\n        <>\n          {folderCount > 0 && (\n            <FolderGridList\n              title={\n                (((isSearchingOrFiltering && assetCount > 0) || !isSearchingOrFiltering) &&\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                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                      ariaLabel={folder.name}\n                      id={`folder-${folder.id}`}\n                      onClick={() => handleClickFolderCard(folder.id, folder.path)}\n                      cardActions={\n                        onEditFolder && (\n                          <IconButton\n                            withTooltip={false}\n                            label={formatMessage({\n                              id: getTrad('list.folder.edit'),\n                              defaultMessage: 'Edit folder',\n                            })}\n                            onClick={() => onEditFolder(folder)}\n                          >\n                            <Pencil />\n                          </IconButton>\n                        )\n                      }\n                    >\n                      <FolderCardBody>\n                        <FolderCardBodyAction\n                          onClick={() => handleClickFolderCard(folder.id, folder.path)}\n                        >\n                          <Flex tag=\"h2\" direction=\"column\" alignItems=\"start\" maxWidth=\"100%\">\n                            <TypographyMaxWidth\n                              fontWeight=\"semiBold\"\n                              ellipsis\n                              textColor=\"neutral800\"\n                            >\n                              {folder.name}\n                              {/* VisuallyHidden dash here allows to separate folder title and count informations\n                              for voice reading structure purpose */}\n                              <VisuallyHidden>-</VisuallyHidden>\n                            </TypographyMaxWidth>\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.children?.count,\n                                  filesCount: folder.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}>\n              <Divider />\n            </Box>\n          )}\n\n          {assetCount > 0 && (\n            <Box paddingTop={6}>\n              <AssetGridList\n                allowedTypes={allowedTypes}\n                size=\"S\"\n                assets={assets}\n                onSelectAsset={onSelectAsset}\n                selectedAssets={selectedAssets as FileWithType[]}\n                onEditAsset={onEditAsset!}\n                title={\n                  ((!isSearchingOrFiltering || (isSearchingOrFiltering && folderCount > 0)) &&\n                    queryObject.page === 1 &&\n                    formatMessage(\n                      {\n                        id: getTrad('list.assets.title'),\n                        defaultMessage: 'Assets ({count})',\n                      },\n                      { count: assetCount }\n                    )) ||\n                  ''\n                }\n              />\n            </Box>\n          )}\n        </>\n      )}\n\n      {pagination.pageCount > 0 && (\n        <Flex\n          justifyContent=\"space-between\"\n          paddingTop={4}\n          position=\"relative\"\n          zIndex={1}\n          overflow=\"hidden\"\n        >\n          <PageSize\n            pageSize={queryObject.pageSize! as number}\n            onChangePageSize={onChangePageSize}\n          />\n          <PaginationFooter\n            activePage={queryObject.page as number}\n            onChangePage={onChangePage}\n            pagination={pagination}\n          />\n        </Flex>\n      )}\n    </Box>\n  );\n};\n"],"names":["TypographyMaxWidth","styled","Typography","ActionContainer","Box","theme","colors","neutral500","BrowseStep","allowedTypes","assets","rawAssets","canCreate","canRead","folders","multiple","onAddAsset","onChangeFilters","onChangePage","onChangePageSize","onChangeSearch","onChangeSort","onChangeFolder","onEditAsset","onEditFolder","onSelectAllAsset","onSelectAsset","pagination","queryObject","selectedAssets","formatMessage","useIntl","view","setView","usePersistentState","localStorageKeys","modalView","viewOptions","GRID","isGridView","data","currentFolder","isLoading","isCurrentFolderLoading","useFolder","folder","enabled","singularTypes","toSingularTypes","map","asset","isSelectable","mime","type","breadcrumbs","getBreadcrumbDataCM","undefined","allAllowedAsset","getAllowedFiles","areAllAssetSelected","length","every","findIndex","currAsset","id","hasSomeAssetSelected","some","isSearching","_q","isFiltering","filters","$and","isSearchingOrFiltering","assetCount","folderCount","handleClickFolderCard","args","_jsxs","_jsx","paddingBottom","Flex","justifyContent","alignItems","gap","wrap","paddingLeft","paddingRight","background","hasRadius","borderColor","height","Checkbox","aria-label","getTrad","defaultMessage","checked","onCheckedChange","SortPicker","value","sort","Filters","appliedFilters","marginLeft","shrink","paddingTop","IconButton","label","onClick","LIST","List","GridIcon","SearchAsset","queryValue","Breadcrumbs","currentFolderId","EmptyAssets","size","count","action","Button","variant","startIcon","Plus","content","TableList","indeterminate","isFolderSelectionAllowed","onSelectOne","onSelectAll","rows","selected","shouldDisableBulkSelect","sortQuery","_Fragment","FolderGridList","title","Grid","Item","col","m","s","xs","direction","FolderCard","ariaLabel","name","path","cardActions","withTooltip","Pencil","FolderCardBody","FolderCardBodyAction","tag","maxWidth","fontWeight","ellipsis","textColor","VisuallyHidden","children","filesCount","files","Divider","AssetGridList","page","pageCount","position","zIndex","overflow","PageSize","pageSize","PaginationFooter","activePage"],"mappings":"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"}