{"version":3,"file":"index-ymhMKzl6.mjs","sources":["../../admin/src/utils/getBreadcrumbDataML.js","../../admin/src/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.jsx","../../admin/src/components/PaginationFooter/index.jsx","../../admin/src/pages/App/MediaLibrary/components/BulkDeleteButton.jsx","../../admin/src/hooks/useBulkMove.js","../../admin/src/components/BulkMoveDialog/BulkMoveDialog.jsx","../../admin/src/pages/App/MediaLibrary/components/BulkMoveButton.jsx","../../admin/src/pages/App/MediaLibrary/components/BulkActions.jsx","../../admin/src/pages/App/MediaLibrary/components/EmptyOrNoPermissions.jsx","../../admin/src/pages/App/MediaLibrary/components/Filters.jsx","../../admin/src/pages/App/MediaLibrary/components/Header.jsx","../../admin/src/pages/App/MediaLibrary/index.jsx","../../admin/src/pages/App/index.jsx"],"sourcesContent":["import getFolderURL from './getFolderURL';\nimport getTrad from './getTrad';\n\nconst getBreadcrumbDataML = (folder, { pathname, query }) => {\n  let data = [\n    {\n      id: null,\n      label: { id: getTrad('plugin.name'), defaultMessage: 'Media Library' },\n      href: folder ? getFolderURL(pathname, query) : undefined,\n    },\n  ];\n\n  if (folder?.parent?.parent) {\n    data.push([]);\n  }\n\n  if (folder?.parent) {\n    data.push({\n      id: folder.parent.id,\n      label: folder.parent.name,\n      href: getFolderURL(pathname, query, {\n        folder: folder.parent.id,\n        folderPath: folder.parent.path,\n      }),\n    });\n  }\n\n  if (folder) {\n    data.push({\n      id: folder.id,\n      label: folder.name,\n    });\n  }\n\n  return data;\n};\n\nexport default getBreadcrumbDataML;\n","import React from 'react';\n\nimport { BaseCheckbox, Box } from '@strapi/design-system';\n\nimport { useFolderCard } from '../contexts/FolderCard';\n\nexport const FolderCardCheckbox = (props) => {\n  const { id } = useFolderCard();\n\n  return (\n    <Box position=\"relative\" zIndex={2}>\n      <BaseCheckbox aria-labelledby={`${id}-title`} {...props} />\n    </Box>\n  );\n};\n","import React from 'react';\n\nimport { Box, Flex } from '@strapi/design-system';\nimport { PageSizeURLQuery, PaginationURLQuery } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\n\nexport const PaginationFooter = ({ pagination }) => {\n  return (\n    <Box paddingTop={6}>\n      <Flex alignItems=\"flex-end\" justifyContent=\"space-between\">\n        <PageSizeURLQuery />\n        <PaginationURLQuery pagination={pagination} />\n      </Flex>\n    </Box>\n  );\n};\n\nPaginationFooter.defaultProps = {\n  pagination: {\n    pageCount: 0,\n    pageSize: 10,\n    total: 0,\n  },\n};\n\nPaginationFooter.propTypes = {\n  pagination: PropTypes.shape({\n    page: PropTypes.number,\n    pageCount: PropTypes.number,\n    pageSize: PropTypes.number,\n    total: PropTypes.number,\n  }),\n};\n","import React, { useState } from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport { ConfirmDialog } from '@strapi/helper-plugin';\nimport { Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { AssetDefinition, FolderDefinition } from '../../../../constants';\nimport { useBulkRemove } from '../../../../hooks/useBulkRemove';\n\nexport const BulkDeleteButton = ({ selected, onSuccess }) => {\n  const { formatMessage } = useIntl();\n  const [showConfirmDialog, setShowConfirmDialog] = useState(false);\n  const { isLoading, remove } = useBulkRemove();\n\n  const handleConfirmRemove = async () => {\n    await remove(selected);\n    onSuccess();\n  };\n\n  return (\n    <>\n      <Button\n        variant=\"danger-light\"\n        size=\"S\"\n        startIcon={<Trash />}\n        onClick={() => setShowConfirmDialog(true)}\n      >\n        {formatMessage({ id: 'global.delete', defaultMessage: 'Delete' })}\n      </Button>\n\n      <ConfirmDialog\n        isConfirmButtonLoading={isLoading}\n        isOpen={showConfirmDialog}\n        onToggleDialog={() => setShowConfirmDialog(false)}\n        onConfirm={handleConfirmRemove}\n      />\n    </>\n  );\n};\n\nBulkDeleteButton.propTypes = {\n  selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition).isRequired,\n  onSuccess: PropTypes.func.isRequired,\n};\n","import { useFetchClient, useNotification } from '@strapi/helper-plugin';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport pluginId from '../pluginId';\nimport { getTrad } from '../utils';\n\nexport const useBulkMove = () => {\n  const toggleNotification = useNotification();\n  const queryClient = useQueryClient();\n  const { post } = useFetchClient();\n\n  const bulkMoveQuery = ({ destinationFolderId, filesAndFolders }) => {\n    const payload = filesAndFolders.reduce((acc, selected) => {\n      const { id, type } = selected;\n      const key = type === 'asset' ? 'fileIds' : 'folderIds';\n\n      if (!acc[key]) {\n        acc[key] = [];\n      }\n\n      acc[key].push(id);\n\n      return acc;\n    }, {});\n\n    return post('/upload/actions/bulk-move', { ...payload, destinationFolderId });\n  };\n\n  const mutation = useMutation(bulkMoveQuery, {\n    onSuccess(res) {\n      const {\n        data: { data },\n      } = res;\n\n      if (data?.files?.length > 0) {\n        queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n        queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n      }\n\n      // folders need to be re-fetched in any case, because assets might have been\n      // moved into a sub-folder and therefore the count needs to be updated\n      queryClient.refetchQueries([pluginId, 'folders'], { active: true });\n\n      toggleNotification({\n        type: 'success',\n        message: {\n          id: getTrad('modal.move.success-label'),\n          defaultMessage: 'Elements have been moved successfully.',\n        },\n      });\n    },\n  });\n\n  const move = (destinationFolderId, filesAndFolders) =>\n    mutation.mutateAsync({ destinationFolderId, filesAndFolders });\n\n  return { ...mutation, move };\n};\n","import React from 'react';\n\nimport {\n  Button,\n  FieldLabel,\n  Flex,\n  Grid,\n  GridItem,\n  Loader,\n  ModalBody,\n  ModalFooter,\n  ModalHeader,\n  ModalLayout,\n  Typography,\n} from '@strapi/design-system';\nimport { Form, normalizeAPIError } from '@strapi/helper-plugin';\nimport { Formik } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { AssetDefinition, FolderDefinition } from '../../constants';\nimport { useBulkMove } from '../../hooks/useBulkMove';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { getTrad } from '../../utils';\nimport SelectTree from '../SelectTree';\n\nexport const BulkMoveDialog = ({ onClose, selected, currentFolder }) => {\n  const { formatMessage } = useIntl();\n  const { data: folderStructure, isLoading } = useFolderStructure();\n  const { move } = useBulkMove();\n\n  if (!folderStructure) {\n    return null;\n  }\n\n  const handleSubmit = async (values, { setErrors }) => {\n    try {\n      await move(values.destination.value, selected);\n      onClose();\n    } catch (error) {\n      const normalizedError = normalizeAPIError(error);\n\n      const formikErrors = normalizedError.errors.reduce((acc, error) => {\n        acc[error.values?.path?.length || 'destination'] = error.defaultMessage;\n\n        return acc;\n      }, {});\n\n      if (!isEmpty(formikErrors)) {\n        setErrors(formikErrors);\n      }\n    }\n  };\n\n  const handleClose = () => {\n    onClose();\n  };\n\n  if (isLoading) {\n    return (\n      <ModalLayout onClose={handleClose} labelledBy=\"title\">\n        <ModalBody>\n          <Flex justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n            <Loader>\n              {formatMessage({\n                id: getTrad('content.isLoading'),\n                defaultMessage: 'Content is loading.',\n              })}\n            </Loader>\n          </Flex>\n        </ModalBody>\n      </ModalLayout>\n    );\n  }\n\n  const initialFormData = {\n    destination: {\n      value: currentFolder?.id || '',\n      label: currentFolder?.name || folderStructure[0].label,\n    },\n  };\n\n  return (\n    <ModalLayout onClose={handleClose} labelledBy=\"title\">\n      <Formik validateOnChange={false} onSubmit={handleSubmit} initialValues={initialFormData}>\n        {({ values, errors, setFieldValue }) => (\n          <Form noValidate>\n            <ModalHeader>\n              <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n                {formatMessage({\n                  id: getTrad('modal.folder.move.title'),\n                  defaultMessage: 'Move elements to',\n                })}\n              </Typography>\n            </ModalHeader>\n\n            <ModalBody>\n              <Grid gap={4}>\n                <GridItem xs={12} col={12}>\n                  <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n                    <FieldLabel htmlFor=\"folder-destination\">\n                      {formatMessage({\n                        id: getTrad('form.input.label.folder-location'),\n                        defaultMessage: 'Location',\n                      })}\n                    </FieldLabel>\n\n                    <SelectTree\n                      options={folderStructure}\n                      onChange={(value) => {\n                        setFieldValue('destination', value);\n                      }}\n                      defaultValue={values.destination}\n                      name=\"destination\"\n                      menuPortalTarget={document.querySelector('body')}\n                      inputId=\"folder-destination\"\n                      error={errors?.destination}\n                      ariaErrorMessage=\"destination-error\"\n                    />\n\n                    {errors.destination && (\n                      <Typography\n                        variant=\"pi\"\n                        as=\"p\"\n                        id=\"folder-destination-error\"\n                        textColor=\"danger600\"\n                      >\n                        {errors.destination}\n                      </Typography>\n                    )}\n                  </Flex>\n                </GridItem>\n              </Grid>\n            </ModalBody>\n\n            <ModalFooter\n              startActions={\n                <Button onClick={handleClose} variant=\"tertiary\" name=\"cancel\">\n                  {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n                </Button>\n              }\n              endActions={\n                <Button type=\"submit\" loading={isLoading}>\n                  {formatMessage({ id: 'modal.folder.move.submit', defaultMessage: 'Move' })}\n                </Button>\n              }\n            />\n          </Form>\n        )}\n      </Formik>\n    </ModalLayout>\n  );\n};\n\nBulkMoveDialog.defaultProps = {\n  currentFolder: undefined,\n};\n\nBulkMoveDialog.propTypes = {\n  onClose: PropTypes.func.isRequired,\n  currentFolder: FolderDefinition,\n  selected: PropTypes.arrayOf(FolderDefinition, AssetDefinition).isRequired,\n};\n","import React, { useState } from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport { Folder } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { BulkMoveDialog } from '../../../../components/BulkMoveDialog';\nimport { AssetDefinition, FolderDefinition } from '../../../../constants';\n\nexport const BulkMoveButton = ({ selected, onSuccess, currentFolder }) => {\n  const { formatMessage } = useIntl();\n  const [showConfirmDialog, setShowConfirmDialog] = useState(false);\n\n  const handleConfirmMove = () => {\n    setShowConfirmDialog(false);\n    onSuccess();\n  };\n\n  return (\n    <>\n      <Button\n        variant=\"secondary\"\n        size=\"S\"\n        startIcon={<Folder />}\n        onClick={() => setShowConfirmDialog(true)}\n      >\n        {formatMessage({ id: 'global.move', defaultMessage: 'Move' })}\n      </Button>\n\n      {showConfirmDialog && (\n        <BulkMoveDialog\n          currentFolder={currentFolder}\n          onClose={handleConfirmMove}\n          selected={selected}\n        />\n      )}\n    </>\n  );\n};\n\nBulkMoveButton.defaultProps = {\n  currentFolder: undefined,\n};\n\nBulkMoveButton.propTypes = {\n  onSuccess: PropTypes.func.isRequired,\n  currentFolder: FolderDefinition,\n  selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition).isRequired,\n};\n","import React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { AssetDefinition, FolderDefinition } from '../../../../constants';\nimport getTrad from '../../../../utils/getTrad';\n\nimport { BulkDeleteButton } from './BulkDeleteButton';\nimport { BulkMoveButton } from './BulkMoveButton';\n\nexport const BulkActions = ({ selected, onSuccess, currentFolder }) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <Flex gap={2} paddingBottom={5}>\n      <Typography variant=\"epsilon\" textColor=\"neutral600\">\n        {formatMessage(\n          {\n            id: getTrad('list.assets.selected'),\n            defaultMessage:\n              '{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}} selected',\n          },\n          {\n            numberFolders: selected.filter(({ type }) => type === 'folder').length,\n            numberAssets: selected.filter(({ type }) => type === 'asset').length,\n          }\n        )}\n      </Typography>\n\n      <BulkDeleteButton selected={selected} onSuccess={onSuccess} />\n      <BulkMoveButton currentFolder={currentFolder} selected={selected} onSuccess={onSuccess} />\n    </Flex>\n  );\n};\n\nBulkActions.defaultProps = {\n  currentFolder: undefined,\n};\n\nBulkActions.propTypes = {\n  onSuccess: PropTypes.func.isRequired,\n  currentFolder: FolderDefinition,\n  selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition).isRequired,\n};\n","import React from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport { EmptyPermissions, Plus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { EmptyAssets } from '../../../../components/EmptyAssets';\nimport { getTrad } from '../../../../utils';\n\nconst getContentIntlMessage = ({ isFiltering, canCreate, canRead }) => {\n  if (isFiltering) {\n    return {\n      id: 'list.assets-empty.title-withSearch',\n      defaultMessage: 'There are no elements with the applied filters',\n    };\n  }\n\n  if (canRead) {\n    if (canCreate) {\n      return {\n        id: 'list.assets.empty-upload',\n        defaultMessage: 'Upload your first assets...',\n      };\n    }\n\n    return {\n      id: 'list.assets.empty',\n      defaultMessage: 'Media Library is empty',\n    };\n  }\n\n  return {\n    id: 'header.actions.no-permissions',\n    defaultMessage: 'No permissions to view',\n  };\n};\n\nexport const EmptyOrNoPermissions = ({ canCreate, isFiltering, canRead, onActionClick }) => {\n  const { formatMessage } = useIntl();\n  const content = getContentIntlMessage({ isFiltering, canCreate, canRead });\n\n  return (\n    <EmptyAssets\n      icon={!canRead ? EmptyPermissions : null}\n      action={\n        canCreate &&\n        !isFiltering && (\n          <Button variant=\"secondary\" startIcon={<Plus />} onClick={onActionClick}>\n            {formatMessage({\n              id: getTrad('header.actions.add-assets'),\n              defaultMessage: 'Add new assets',\n            })}\n          </Button>\n        )\n      }\n      content={formatMessage({\n        ...content,\n        id: getTrad(content.id),\n      })}\n    />\n  );\n};\n\nEmptyOrNoPermissions.propTypes = {\n  canCreate: PropTypes.bool.isRequired,\n  canRead: PropTypes.bool.isRequired,\n  isFiltering: PropTypes.bool.isRequired,\n  onActionClick: PropTypes.func.isRequired,\n};\n","import React, { useRef, useState } from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport { useQueryParams, useTracking } from '@strapi/helper-plugin';\nimport { Filter } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport FilterList from '../../../../components/FilterList';\nimport FilterPopover from '../../../../components/FilterPopover';\nimport displayedFilters from '../../../../utils/displayedFilters';\n\nexport const Filters = () => {\n  const buttonRef = useRef(null);\n  const [isVisible, setVisible] = useState(false);\n  const { formatMessage } = useIntl();\n  const { trackUsage } = useTracking();\n  const [{ query }, setQuery] = useQueryParams();\n  const filters = query?.filters?.$and || [];\n\n  const toggleFilter = () => setVisible((prev) => !prev);\n\n  const handleRemoveFilter = (nextFilters) => {\n    setQuery({ filters: { $and: nextFilters }, page: 1 });\n  };\n\n  const handleSubmit = (filters) => {\n    trackUsage('didFilterMediaLibraryElements', {\n      location: 'content-manager',\n      filter: Object.keys(filters[filters.length - 1])[0],\n    });\n    setQuery({ filters: { $and: filters }, page: 1 });\n  };\n\n  return (\n    <>\n      <Button\n        variant=\"tertiary\"\n        ref={buttonRef}\n        startIcon={<Filter />}\n        onClick={toggleFilter}\n        size=\"S\"\n      >\n        {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n      </Button>\n      {isVisible && (\n        <FilterPopover\n          displayedFilters={displayedFilters}\n          filters={filters}\n          onSubmit={handleSubmit}\n          onToggle={toggleFilter}\n          source={buttonRef}\n        />\n      )}\n      <FilterList\n        appliedFilters={filters}\n        filtersSchema={displayedFilters}\n        onRemoveFilter={handleRemoveFilter}\n      />\n    </>\n  );\n};\n","import React from 'react';\n\nimport { Button, Flex, HeaderLayout, Link } from '@strapi/design-system';\nimport { useQueryParams } from '@strapi/helper-plugin';\nimport { ArrowLeft, Plus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\n\nimport { Breadcrumbs } from '../../../../components/Breadcrumbs';\nimport { BreadcrumbsDefinition, FolderDefinition } from '../../../../constants';\nimport { getTrad } from '../../../../utils';\n\nexport const Header = ({\n  breadcrumbs,\n  canCreate,\n  folder,\n  onToggleEditFolderDialog,\n  onToggleUploadAssetDialog,\n}) => {\n  const { formatMessage } = useIntl();\n  const { pathname } = useLocation();\n  const [{ query }] = useQueryParams();\n  const backQuery = {\n    ...query,\n    folder: folder?.parent?.id ?? undefined,\n    folderPath: folder?.parent?.path ?? undefined,\n  };\n\n  return (\n    <HeaderLayout\n      title={formatMessage({\n        id: getTrad('plugin.name'),\n        defaultMessage: `Media Library`,\n      })}\n      subtitle={\n        breadcrumbs &&\n        folder && (\n          <Breadcrumbs\n            as=\"nav\"\n            label={formatMessage({\n              id: getTrad('header.breadcrumbs.nav.label'),\n              defaultMessage: 'Folders navigation',\n            })}\n            breadcrumbs={breadcrumbs}\n            currentFolderId={folder?.id}\n          />\n        )\n      }\n      navigationAction={\n        folder && (\n          <Link\n            startIcon={<ArrowLeft />}\n            to={`${pathname}?${stringify(backQuery, { encode: false })}`}\n          >\n            {formatMessage({\n              id: getTrad('header.actions.folder-level-up'),\n              defaultMessage: 'Back',\n            })}\n          </Link>\n        )\n      }\n      primaryAction={\n        canCreate && (\n          <Flex gap={2}>\n            <Button startIcon={<Plus />} variant=\"secondary\" onClick={onToggleEditFolderDialog}>\n              {formatMessage({\n                id: getTrad('header.actions.add-folder'),\n                defaultMessage: 'Add new folder',\n              })}\n            </Button>\n\n            <Button startIcon={<Plus />} onClick={onToggleUploadAssetDialog}>\n              {formatMessage({\n                id: getTrad('header.actions.add-assets'),\n                defaultMessage: 'Add new assets',\n              })}\n            </Button>\n          </Flex>\n        )\n      }\n    />\n  );\n};\n\nHeader.defaultProps = {\n  breadcrumbs: false,\n  folder: null,\n};\n\nHeader.propTypes = {\n  breadcrumbs: PropTypes.oneOfType([BreadcrumbsDefinition, PropTypes.bool]),\n  canCreate: PropTypes.bool.isRequired,\n  folder: FolderDefinition,\n  onToggleEditFolderDialog: PropTypes.func.isRequired,\n  onToggleUploadAssetDialog: PropTypes.func.isRequired,\n};\n","import React, { useRef, useState } from 'react';\n\nimport {\n  ActionLayout,\n  BaseCheckbox,\n  Box,\n  ContentLayout,\n  Divider,\n  Flex,\n  GridItem,\n  IconButton,\n  Layout,\n  Main,\n  Typography,\n  VisuallyHidden,\n} from '@strapi/design-system';\nimport {\n  AnErrorOccurred,\n  CheckPermissions,\n  LoadingIndicatorPage,\n  SearchURLQuery,\n  useFocusWhenNavigate,\n  usePersistentState,\n  useQueryParams,\n  useSelectionState,\n  useTracking,\n} from '@strapi/helper-plugin';\nimport { Cog, Grid, List, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link as ReactRouterLink, useHistory, useLocation } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { AssetGridList } from '../../../components/AssetGridList';\nimport { EditAssetDialog } from '../../../components/EditAssetDialog';\nimport { EditFolderDialog } from '../../../components/EditFolderDialog';\nimport {\n  FolderCard,\n  FolderCardBody,\n  FolderCardBodyAction,\n  FolderCardCheckbox,\n} from '../../../components/FolderCard';\nimport { FolderGridList } from '../../../components/FolderGridList';\nimport { PaginationFooter } from '../../../components/PaginationFooter';\nimport SortPicker from '../../../components/SortPicker';\nimport { TableList } from '../../../components/TableList';\nimport { UploadAssetDialog } from '../../../components/UploadAssetDialog/UploadAssetDialog';\nimport { localStorageKeys, PERMISSIONS, viewOptions } from '../../../constants';\nimport { useAssets } from '../../../hooks/useAssets';\nimport { useFolder } from '../../../hooks/useFolder';\nimport { useFolders } from '../../../hooks/useFolders';\nimport { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions';\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\nconst BoxWithHeight = styled(Box)`\n  height: ${32 / 16}rem;\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 { push } = useHistory();\n  const {\n    canRead,\n    canCreate,\n    canUpdate,\n    canCopyLink,\n    canDownload,\n    isLoading: permissionsLoading,\n  } = useMediaLibraryPermissions();\n  const currentFolderToEditRef = useRef();\n  const { formatMessage } = useIntl();\n  const { pathname } = useLocation();\n  const { trackUsage } = useTracking();\n  const [{ query }, setQuery] = useQueryParams();\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    errors: assetsError,\n  } = useAssets({\n    skipWhen: !canRead,\n    query,\n  });\n\n  const {\n    data: foldersData,\n    isLoading: foldersLoading,\n    errors: 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, {\n    enabled: canRead && !!query?.folder,\n  });\n\n  // Folder was not found: redirect to the media library root\n  if (currentFolderError?.response?.status === 404) {\n    push(pathname);\n  }\n\n  const folders =\n    foldersData?.map((folder) => ({\n      ...folder,\n      type: 'folder',\n      folderURL: getFolderURL(pathname, query, folder.id),\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 = isCurrentFolderLoading || foldersLoading || permissionsLoading || assetsLoading;\n  const [showUploadAssetDialog, setShowUploadAssetDialog] = useState(false);\n  const [showEditFolderDialog, setShowEditFolderDialog] = useState(false);\n  const [assetToEdit, setAssetToEdit] = useState(undefined);\n  const [folderToEdit, setFolderToEdit] = useState(undefined);\n  const [selected, { selectOne, selectAll }] = useSelectionState(['type', 'id'], []);\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 = (event, elements) => {\n    if (event.target.checked) {\n      trackUsage('didSelectAllMediaLibraryElements');\n    }\n\n    selectAll(elements);\n  };\n\n  const handleChangeSort = (value) => {\n    trackUsage('didSortMediaLibraryElements', {\n      location: 'upload',\n      sort: value,\n    });\n    setQuery({ sort: value });\n  };\n\n  const handleEditFolder = (folder) => {\n    setFolderToEdit(folder);\n    setShowEditFolderDialog(true);\n  };\n\n  const handleEditFolderClose = (payload) => {\n    setFolderToEdit(null);\n    toggleEditFolderDialog(payload);\n\n    if (currentFolderToEditRef.current) {\n      currentFolderToEditRef.current.focus();\n    }\n  };\n\n  const handleAssetDeleted = (numberOfAssets) => {\n    if (\n      numberOfAssets === assetCount &&\n      assetsData.pagination.page === assetsData.pagination.pageCount &&\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  useFocusWhenNavigate();\n\n  return (\n    <Layout>\n      <Main aria-busy={isLoading}>\n        <Header\n          breadcrumbs={\n            !isCurrentFolderLoading && getBreadcrumbDataML(currentFolder, { pathname, query })\n          }\n          canCreate={canCreate}\n          onToggleEditFolderDialog={toggleEditFolderDialog}\n          onToggleUploadAssetDialog={toggleUploadAssetDialog}\n          folder={currentFolder}\n        />\n        <ActionLayout\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                  <BaseCheckbox\n                    aria-label={formatMessage({\n                      id: getTrad('bulk.select.label'),\n                      defaultMessage: 'Select all folders & assets',\n                    })}\n                    indeterminate={indeterminateBulkSelect}\n                    value={\n                      (assetCount > 0 || folderCount > 0) &&\n                      selected.length === assetCount + folderCount\n                    }\n                    onChange={(e) => handleBulkSelect(e, [...assets, ...folders])}\n                  />\n                </BoxWithHeight>\n              )}\n              {canRead && isGridView && (\n                <SortPicker value={query?.sort} onChangeSort={handleChangeSort} />\n              )}\n              {canRead && <Filters />}\n            </>\n          }\n          endActions={\n            <>\n              <CheckPermissions permissions={PERMISSIONS.configureView}>\n                <ActionContainer>\n                  <IconButton\n                    forwardedAs={ReactRouterLink}\n                    to={{\n                      pathname: `${pathname}/configuration`,\n                      search: stringify(query, { encode: false }),\n                    }}\n                    icon={<Cog />}\n                    label={formatMessage({\n                      id: 'app.links.configure-view',\n                      defaultMessage: 'Configure the view',\n                    })}\n                  />\n                </ActionContainer>\n              </CheckPermissions>\n              <ActionContainer>\n                <IconButton\n                  icon={isGridView ? <List /> : <Grid />}\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              </ActionContainer>\n              <SearchURLQuery\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        <ContentLayout>\n          {selected.length > 0 && (\n            <BulkActions\n              currentFolder={currentFolder}\n              selected={selected}\n              onSuccess={handleBulkActionSuccess}\n            />\n          )}\n\n          {isLoading && <LoadingIndicatorPage />}\n\n          {(assetsError || foldersError) && <AnErrorOccurred />}\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                push(getFolderURL(pathname, query, { folder: folderID, folderPath }))\n              }\n              onEditAsset={setAssetToEdit}\n              onEditFolder={handleEditFolder}\n              onSelectOne={selectOne}\n              onSelectAll={handleBulkSelect}\n              rows={[...folders, ...assets]}\n              selected={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,\n                      folderPath: folder?.path,\n                    });\n\n                    return (\n                      <GridItem col={3} key={`folder-${folder.id}`}>\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                            selectOne && folder.isSelectable ? (\n                              <FolderCardCheckbox\n                                data-testid={`folder-checkbox-${folder.id}`}\n                                value={isSelected}\n                                onChange={() => selectOne(folder)}\n                              />\n                            ) : null\n                          }\n                          cardActions={\n                            <IconButton\n                              icon={<Pencil />}\n                              aria-label={formatMessage({\n                                id: getTrad('list.folder.edit'),\n                                defaultMessage: 'Edit folder',\n                              })}\n                              onClick={() => handleEditFolder(folder)}\n                            />\n                          }\n                        >\n                          <FolderCardBody>\n                            <FolderCardBodyAction to={url}>\n                              <Flex as=\"h2\" direction=\"column\" alignItems=\"start\" maxWidth=\"100%\">\n                                <TypographyMaxWidth fontWeight=\"semiBold\" ellipsis>\n                                  {folder.name}\n                                  <VisuallyHidden>:</VisuallyHidden>\n                                </TypographyMaxWidth>\n\n                                <TypographyMaxWidth\n                                  as=\"span\"\n                                  textColor=\"neutral600\"\n                                  variant=\"pi\"\n                                  ellipsis\n                                >\n                                  {formatMessage(\n                                    {\n                                      id: getTrad('list.folder.subtitle'),\n                                      defaultMessage:\n                                        '{folderCount, plural, =0 {# folder} one {# folder} other {# folders}}, {filesCount, plural, =0 {# asset} 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                      </GridItem>\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}\n                  onSelectAsset={selectOne}\n                  selectedAssets={selected.filter(({ type }) => type === 'asset')}\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\n          {assetsData?.pagination && <PaginationFooter pagination={assetsData.pagination} />}\n        </ContentLayout>\n      </Main>\n\n      {showUploadAssetDialog && (\n        <UploadAssetDialog\n          onClose={toggleUploadAssetDialog}\n          trackedLocation=\"upload\"\n          folderId={query?.folder}\n        />\n      )}\n\n      {showEditFolderDialog && (\n        <EditFolderDialog\n          onClose={handleEditFolderClose}\n          folder={folderToEdit}\n          parentFolderId={query?.folder}\n          location=\"upload\"\n        />\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          asset={assetToEdit}\n          canUpdate={canUpdate}\n          canCopyLink={canCopyLink}\n          canDownload={canDownload}\n          trackedLocation=\"upload\"\n        />\n      )}\n    </Layout>\n  );\n};\n","import React, { lazy, Suspense, useEffect } from 'react';\n\nimport { Main } from '@strapi/design-system';\nimport { LoadingIndicatorPage, useFocusWhenNavigate, useQueryParams } from '@strapi/helper-plugin';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { useConfig } from '../../hooks/useConfig';\nimport pluginID from '../../pluginId';\nimport { getTrad } from '../../utils';\n\nimport { MediaLibrary } from './MediaLibrary';\n\nconst ConfigureTheView = lazy(() => import('./ConfigureTheView'));\n\nconst Upload = () => {\n  const {\n    config: { isLoading, isError, data: config },\n  } = useConfig();\n\n  const [{ rawQuery }, setQuery] = useQueryParams();\n  const { formatMessage } = useIntl();\n  const title = formatMessage({ id: getTrad('plugin.name'), defaultMessage: 'Media Library' });\n\n  useEffect(() => {\n    if (isLoading || isError || rawQuery) {\n      return;\n    }\n    setQuery({ sort: config.sort, page: 1, pageSize: config.pageSize });\n  }, [isLoading, isError, config, rawQuery, setQuery]);\n\n  useFocusWhenNavigate();\n\n  return (\n    <Main aria-busy={isLoading}>\n      <Helmet title={title} />\n      {isLoading && <LoadingIndicatorPage />}\n      {rawQuery ? (\n        <Suspense fallback={<LoadingIndicatorPage />}>\n          <Switch>\n            <Route exact path={`/plugins/${pluginID}`} component={MediaLibrary} />\n            <Route\n              exact\n              path={`/plugins/${pluginID}/configuration`}\n              render={() => <ConfigureTheView config={config} />}\n            />\n          </Switch>\n        </Suspense>\n      ) : null}\n    </Main>\n  );\n};\n\nexport default Upload;\n"],"names":["error","filters","ReactRouterLink","Grid","currentFolder","pluginID"],"mappings":"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"}