@strapi/upload 5.0.0-rc.9 → 5.0.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/_chunks/{index-DesgImRq.mjs → index-BE_75e6q.mjs} +2 -2
- package/dist/_chunks/{index-DesgImRq.mjs.map → index-BE_75e6q.mjs.map} +1 -1
- package/dist/_chunks/{index-Sh4Ok2WQ.mjs → index-BsdHnx77.mjs} +3 -3
- package/dist/_chunks/{index-Sh4Ok2WQ.mjs.map → index-BsdHnx77.mjs.map} +1 -1
- package/dist/_chunks/{index-CSluxLTa.js → index-BxlIY8_C.js} +3 -3
- package/dist/_chunks/{index-CSluxLTa.js.map → index-BxlIY8_C.js.map} +1 -1
- package/dist/_chunks/{index-CFUyRUTZ.mjs → index-C-azC_fq.mjs} +2 -2
- package/dist/_chunks/{index-CFUyRUTZ.mjs.map → index-C-azC_fq.mjs.map} +1 -1
- package/dist/_chunks/{index-CWKAMMzh.mjs → index-C43LhapC.mjs} +11 -8
- package/dist/_chunks/index-C43LhapC.mjs.map +1 -0
- package/dist/_chunks/{index-Bx7HNHAW.js → index-DREq-dKv.js} +11 -8
- package/dist/_chunks/index-DREq-dKv.js.map +1 -0
- package/dist/_chunks/{index-CzxDuy-_.js → index-WoakSQD0.js} +2 -2
- package/dist/_chunks/{index-CzxDuy-_.js.map → index-WoakSQD0.js.map} +1 -1
- package/dist/_chunks/{index-BGp6u8jt.js → index-mZzQHKD_.js} +2 -2
- package/dist/_chunks/{index-BGp6u8jt.js.map → index-mZzQHKD_.js.map} +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/package.json +8 -8
- package/dist/_chunks/index-Bx7HNHAW.js.map +0 -1
- package/dist/_chunks/index-CWKAMMzh.mjs.map +0 -1
- package/strapi-server.js +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CSluxLTa.js","sources":["../../admin/src/utils/getBreadcrumbDataML.js","../../admin/src/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.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 { Checkbox, 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 <Checkbox aria-labelledby={`${id}-title`} {...props} />\n </Box>\n );\n};\n","import * as React from 'react';\n\nimport { ConfirmDialog } from '@strapi/admin/strapi-admin';\nimport { Button, Dialog } from '@strapi/design-system';\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 { remove } = useBulkRemove();\n\n const handleConfirmRemove = async () => {\n await remove(selected);\n onSuccess();\n };\n\n return (\n <Dialog.Root>\n <Dialog.Trigger>\n <Button variant=\"danger-light\" size=\"S\" startIcon={<Trash />}>\n {formatMessage({ id: 'global.delete', defaultMessage: 'Delete' })}\n </Button>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleConfirmRemove} />\n </Dialog.Root>\n );\n};\n\nBulkDeleteButton.propTypes = {\n selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition).isRequired,\n onSuccess: PropTypes.func.isRequired,\n};\n","import { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport pluginId from '../pluginId';\nimport { getTrad } from '../utils';\n\nexport const useBulkMove = () => {\n const { formatMessage } = useIntl();\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: formatMessage({\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 { Button, Flex, Grid, Field, Loader, Modal, Typography } from '@strapi/design-system';\nimport { Form, 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 { normalizeAPIError } from '../../utils/normalizeAPIError';\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 if (isLoading) {\n return (\n <Modal.Content>\n <Modal.Body>\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 </Modal.Body>\n </Modal.Content>\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 <Modal.Content>\n <Formik validateOnChange={false} onSubmit={handleSubmit} initialValues={initialFormData}>\n {({ values, errors, setFieldValue }) => (\n <Form noValidate>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('modal.folder.move.title'),\n defaultMessage: 'Move elements to',\n })}\n </Modal.Title>\n </Modal.Header>\n\n <Modal.Body>\n <Grid.Root gap={4}>\n <Grid.Item xs={12} col={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root id=\"folder-destination\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\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 variant=\"pi\" tag=\"p\" textColor=\"danger600\">\n {errors.destination}\n </Typography>\n )}\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Close>\n <Button type=\"submit\" loading={isLoading}>\n {formatMessage({ id: 'modal.folder.move.submit', defaultMessage: 'Move' })}\n </Button>\n </Modal.Footer>\n </Form>\n )}\n </Formik>\n </Modal.Content>\n );\n};\n\nBulkMoveDialog.defaultProps = {\n currentFolder: undefined,\n selected: [],\n};\n\nBulkMoveDialog.propTypes = {\n onClose: PropTypes.func.isRequired,\n currentFolder: FolderDefinition,\n selected: PropTypes.arrayOf(FolderDefinition, AssetDefinition),\n};\n","import React, { useState } from 'react';\n\nimport { Button, Modal } 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 <Modal.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Modal.Trigger>\n <Button variant=\"secondary\" size=\"S\" startIcon={<Folder />}>\n {formatMessage({ id: 'global.move', defaultMessage: 'Move' })}\n </Button>\n </Modal.Trigger>\n <BulkMoveDialog\n currentFolder={currentFolder}\n onClose={handleConfirmMove}\n selected={selected}\n />\n </Modal.Root>\n );\n};\n\nBulkMoveButton.defaultProps = {\n currentFolder: undefined,\n selected: [],\n};\n\nBulkMoveButton.propTypes = {\n onSuccess: PropTypes.func.isRequired,\n currentFolder: FolderDefinition,\n selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition),\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 selected: [],\n};\n\nBulkActions.propTypes = {\n onSuccess: PropTypes.func.isRequired,\n currentFolder: FolderDefinition,\n selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition),\n};\n","import React from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyPermissions } from '@strapi/icons/symbols';\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 : undefined}\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 * as React from 'react';\n\nimport { useTracking, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Button, Popover } from '@strapi/design-system';\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 [open, setOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }, setQuery] = useQueryParams();\n const filters = query?.filters?.$and || [];\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 <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Button variant=\"tertiary\" startIcon={<Filter />} size=\"S\">\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n <FilterPopover\n displayedFilters={displayedFilters}\n filters={filters}\n onSubmit={handleSubmit}\n onToggle={setOpen}\n />\n <FilterList\n appliedFilters={filters}\n filtersSchema={displayedFilters}\n onRemoveFilter={handleRemoveFilter}\n />\n </Popover.Root>\n );\n};\n","import React from 'react';\n\nimport { useQueryParams, Layouts } from '@strapi/admin/strapi-admin';\nimport { Button, Flex, Link } from '@strapi/design-system';\nimport { ArrowLeft, Plus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useLocation, NavLink } 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 <Layouts.Header\n title={formatMessage({\n id: getTrad('plugin.name'),\n defaultMessage: `Media Library`,\n })}\n subtitle={\n breadcrumbs &&\n folder && (\n <Breadcrumbs\n tag=\"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 tag={NavLink}\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 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 { 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 SortPicker from '../../../components/SortPicker';\nimport { TableList } from '../../../components/TableList';\nimport { UploadAssetDialog } from '../../../components/UploadAssetDialog/UploadAssetDialog';\nimport { localStorageKeys, viewOptions } from '../../../constants';\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\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 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 navigate(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 = (checked, elements) => {\n if (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 if (isLoading) {\n return <Page.Loading />;\n }\n\n if (assetsError || foldersError) {\n return <Page.Error />;\n }\n\n return (\n <Layouts.Root>\n <Page.Main>\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 <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) => 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 {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}\n selected={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, 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 <Grid.Item\n col={3}\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 selectOne && 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 aria-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, =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 </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}\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 <Pagination.Root {...assetsData.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n </Page.Main>\n {showUploadAssetDialog && (\n <UploadAssetDialog\n open={showUploadAssetDialog}\n onClose={toggleUploadAssetDialog}\n trackedLocation=\"upload\"\n folderId={query?.folder}\n />\n )}\n {showEditFolderDialog && (\n <EditFolderDialog\n open={showEditFolderDialog}\n onClose={handleEditFolderClose}\n folder={folderToEdit}\n parentFolderId={query?.folder}\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","import React, { lazy, Suspense, useEffect } from 'react';\n\nimport { Page, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Route, Routes } from 'react-router-dom';\n\nimport { useConfig } from '../../hooks/useConfig';\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 if (isLoading) {\n return (\n <>\n <Page.Title>{title}</Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n return (\n <Page.Main>\n {rawQuery ? (\n <Suspense fallback={<Page.Loading />}>\n <Routes>\n <Route index element={<MediaLibrary />} />\n <Route path=\"configuration\" element={<ConfigureTheView config={config} />} />\n </Routes>\n </Suspense>\n ) : null}\n </Page.Main>\n );\n};\n\nexport default Upload;\n"],"names":["getTrad","getFolderURL","useFolderCard","jsx","Box","Checkbox","useIntl","useBulkRemove","jsxs","Dialog","Button","Trash","ConfirmDialog","PropTypes","AssetDefinition","FolderDefinition","useNotification","useQueryClient","useFetchClient","useMutation","pluginId","useFolderStructure","normalizeAPIError","error","isEmpty","Modal","Flex","Loader","Formik","Form","Grid","Field","SelectTree","Typography","useState","Folder","EmptyAssets","EmptyPermissions","Plus","React","useTracking","useQueryParams","filters","Popover","Filter","FilterPopover","displayedFilters","FilterList","useLocation","Layouts","Breadcrumbs","Link","NavLink","ArrowLeft","stringify","BreadcrumbsDefinition","styled","useNavigate","useMediaLibraryPermissions","useRef","usePersistentState","localStorageKeys","viewOptions","useAssets","useFolders","containsAssetFilter","useFolder","useSelectionState","Page","Fragment","SortPicker","IconButton","ReactRouterLink","Cog","List","GridIcon","SearchInput","TableList","FolderGridList","currentFolder","FolderCard","Pencil","FolderCardBody","FolderCardBodyAction","VisuallyHidden","Divider","AssetGridList","Pagination","UploadAssetDialog","EditFolderDialog","EditAssetDialog","lazy","useConfig","useEffect","Suspense","Routes","Route"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-BxlIY8_C.js","sources":["../../admin/src/utils/getBreadcrumbDataML.js","../../admin/src/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.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 { Checkbox, 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 <Checkbox aria-labelledby={`${id}-title`} {...props} />\n </Box>\n );\n};\n","import * as React from 'react';\n\nimport { ConfirmDialog } from '@strapi/admin/strapi-admin';\nimport { Button, Dialog } from '@strapi/design-system';\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 { remove } = useBulkRemove();\n\n const handleConfirmRemove = async () => {\n await remove(selected);\n onSuccess();\n };\n\n return (\n <Dialog.Root>\n <Dialog.Trigger>\n <Button variant=\"danger-light\" size=\"S\" startIcon={<Trash />}>\n {formatMessage({ id: 'global.delete', defaultMessage: 'Delete' })}\n </Button>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleConfirmRemove} />\n </Dialog.Root>\n );\n};\n\nBulkDeleteButton.propTypes = {\n selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition).isRequired,\n onSuccess: PropTypes.func.isRequired,\n};\n","import { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport pluginId from '../pluginId';\nimport { getTrad } from '../utils';\n\nexport const useBulkMove = () => {\n const { formatMessage } = useIntl();\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: formatMessage({\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 { Button, Flex, Grid, Field, Loader, Modal, Typography } from '@strapi/design-system';\nimport { Form, 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 { normalizeAPIError } from '../../utils/normalizeAPIError';\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 if (isLoading) {\n return (\n <Modal.Content>\n <Modal.Body>\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 </Modal.Body>\n </Modal.Content>\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 <Modal.Content>\n <Formik validateOnChange={false} onSubmit={handleSubmit} initialValues={initialFormData}>\n {({ values, errors, setFieldValue }) => (\n <Form noValidate>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('modal.folder.move.title'),\n defaultMessage: 'Move elements to',\n })}\n </Modal.Title>\n </Modal.Header>\n\n <Modal.Body>\n <Grid.Root gap={4}>\n <Grid.Item xs={12} col={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root id=\"folder-destination\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\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 variant=\"pi\" tag=\"p\" textColor=\"danger600\">\n {errors.destination}\n </Typography>\n )}\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Close>\n <Button type=\"submit\" loading={isLoading}>\n {formatMessage({ id: 'modal.folder.move.submit', defaultMessage: 'Move' })}\n </Button>\n </Modal.Footer>\n </Form>\n )}\n </Formik>\n </Modal.Content>\n );\n};\n\nBulkMoveDialog.defaultProps = {\n currentFolder: undefined,\n selected: [],\n};\n\nBulkMoveDialog.propTypes = {\n onClose: PropTypes.func.isRequired,\n currentFolder: FolderDefinition,\n selected: PropTypes.arrayOf(FolderDefinition, AssetDefinition),\n};\n","import React, { useState } from 'react';\n\nimport { Button, Modal } 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 <Modal.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Modal.Trigger>\n <Button variant=\"secondary\" size=\"S\" startIcon={<Folder />}>\n {formatMessage({ id: 'global.move', defaultMessage: 'Move' })}\n </Button>\n </Modal.Trigger>\n <BulkMoveDialog\n currentFolder={currentFolder}\n onClose={handleConfirmMove}\n selected={selected}\n />\n </Modal.Root>\n );\n};\n\nBulkMoveButton.defaultProps = {\n currentFolder: undefined,\n selected: [],\n};\n\nBulkMoveButton.propTypes = {\n onSuccess: PropTypes.func.isRequired,\n currentFolder: FolderDefinition,\n selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition),\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 selected: [],\n};\n\nBulkActions.propTypes = {\n onSuccess: PropTypes.func.isRequired,\n currentFolder: FolderDefinition,\n selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition),\n};\n","import React from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyPermissions } from '@strapi/icons/symbols';\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 : undefined}\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 * as React from 'react';\n\nimport { useTracking, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Button, Popover } from '@strapi/design-system';\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 [open, setOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }, setQuery] = useQueryParams();\n const filters = query?.filters?.$and || [];\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 <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Button variant=\"tertiary\" startIcon={<Filter />} size=\"S\">\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n <FilterPopover\n displayedFilters={displayedFilters}\n filters={filters}\n onSubmit={handleSubmit}\n onToggle={setOpen}\n />\n <FilterList\n appliedFilters={filters}\n filtersSchema={displayedFilters}\n onRemoveFilter={handleRemoveFilter}\n />\n </Popover.Root>\n );\n};\n","import React from 'react';\n\nimport { useQueryParams, Layouts } from '@strapi/admin/strapi-admin';\nimport { Button, Flex, Link } from '@strapi/design-system';\nimport { ArrowLeft, Plus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useLocation, NavLink } 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 <Layouts.Header\n title={formatMessage({\n id: getTrad('plugin.name'),\n defaultMessage: `Media Library`,\n })}\n subtitle={\n breadcrumbs &&\n folder && (\n <Breadcrumbs\n tag=\"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 tag={NavLink}\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 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 { 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 SortPicker from '../../../components/SortPicker';\nimport { TableList } from '../../../components/TableList';\nimport { UploadAssetDialog } from '../../../components/UploadAssetDialog/UploadAssetDialog';\nimport { localStorageKeys, viewOptions } from '../../../constants';\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\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 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 navigate(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 = (checked, elements) => {\n if (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 if (isLoading) {\n return <Page.Loading />;\n }\n\n if (assetsError || foldersError) {\n return <Page.Error />;\n }\n\n return (\n <Layouts.Root>\n <Page.Main>\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 <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) => 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 {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}\n selected={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, 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 <Grid.Item\n col={3}\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 selectOne && 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 aria-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, =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 </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}\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 <Pagination.Root {...assetsData.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n </Page.Main>\n {showUploadAssetDialog && (\n <UploadAssetDialog\n open={showUploadAssetDialog}\n onClose={toggleUploadAssetDialog}\n trackedLocation=\"upload\"\n folderId={query?.folder}\n />\n )}\n {showEditFolderDialog && (\n <EditFolderDialog\n open={showEditFolderDialog}\n onClose={handleEditFolderClose}\n folder={folderToEdit}\n parentFolderId={query?.folder}\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","import React, { lazy, Suspense, useEffect } from 'react';\n\nimport { Page, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Route, Routes } from 'react-router-dom';\n\nimport { useConfig } from '../../hooks/useConfig';\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 if (isLoading) {\n return (\n <>\n <Page.Title>{title}</Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n return (\n <Page.Main>\n {rawQuery ? (\n <Suspense fallback={<Page.Loading />}>\n <Routes>\n <Route index element={<MediaLibrary />} />\n <Route path=\"configuration\" element={<ConfigureTheView config={config} />} />\n </Routes>\n </Suspense>\n ) : null}\n </Page.Main>\n );\n};\n\nexport default Upload;\n"],"names":["getTrad","getFolderURL","useFolderCard","jsx","Box","Checkbox","useIntl","useBulkRemove","jsxs","Dialog","Button","Trash","ConfirmDialog","PropTypes","AssetDefinition","FolderDefinition","useNotification","useQueryClient","useFetchClient","useMutation","pluginId","useFolderStructure","normalizeAPIError","error","isEmpty","Modal","Flex","Loader","Formik","Form","Grid","Field","SelectTree","Typography","useState","Folder","EmptyAssets","EmptyPermissions","Plus","React","useTracking","useQueryParams","filters","Popover","Filter","FilterPopover","displayedFilters","FilterList","useLocation","Layouts","Breadcrumbs","Link","NavLink","ArrowLeft","stringify","BreadcrumbsDefinition","styled","useNavigate","useMediaLibraryPermissions","useRef","usePersistentState","localStorageKeys","viewOptions","useAssets","useFolders","containsAssetFilter","useFolder","useSelectionState","Page","Fragment","SortPicker","IconButton","ReactRouterLink","Cog","List","GridIcon","SearchInput","TableList","FolderGridList","currentFolder","FolderCard","Pencil","FolderCardBody","FolderCardBodyAction","VisuallyHidden","Divider","AssetGridList","Pagination","UploadAssetDialog","EditFolderDialog","EditAssetDialog","lazy","useConfig","useEffect","Suspense","Routes","Route"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { Check } from "@strapi/icons";
|
|
|
6
6
|
import isEqual from "lodash/isEqual";
|
|
7
7
|
import { useIntl } from "react-intl";
|
|
8
8
|
import { useQuery, useMutation } from "react-query";
|
|
9
|
-
import { g as getTrad, P as PERMISSIONS } from "./index-
|
|
9
|
+
import { g as getTrad, P as PERMISSIONS } from "./index-C43LhapC.mjs";
|
|
10
10
|
import "byte-size";
|
|
11
11
|
import "date-fns";
|
|
12
12
|
import "qs";
|
|
@@ -259,4 +259,4 @@ export {
|
|
|
259
259
|
SettingsPage,
|
|
260
260
|
ProtectedSettingsPage as default
|
|
261
261
|
};
|
|
262
|
-
//# sourceMappingURL=index-
|
|
262
|
+
//# sourceMappingURL=index-C-azC_fq.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CFUyRUTZ.mjs","sources":["../../admin/src/pages/SettingsPage/init.js","../../admin/src/pages/SettingsPage/reducer.js","../../admin/src/pages/SettingsPage/index.jsx"],"sourcesContent":["const init = (initialState) => {\n return initialState;\n};\n\nexport default init;\n","import { produce } from 'immer';\nimport set from 'lodash/set';\n\nconst initialState = {\n initialData: {\n responsiveDimensions: true,\n sizeOptimization: true,\n autoOrientation: false,\n videoPreview: false,\n },\n modifiedData: {\n responsiveDimensions: true,\n sizeOptimization: true,\n autoOrientation: false,\n videoPreview: false,\n },\n};\n\nconst reducer = (state, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (drafState) => {\n switch (action.type) {\n case 'GET_DATA_SUCCEEDED': {\n drafState.initialData = action.data;\n drafState.modifiedData = action.data;\n break;\n }\n case 'ON_CHANGE': {\n set(drafState, ['modifiedData', ...action.keys.split('.')], action.value);\n break;\n }\n default:\n return state;\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import React, { useReducer } from 'react';\n\nimport { Page, useNotification, useFetchClient, Layouts } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Flex, Grid, Toggle, Typography, Field } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\n\nimport { PERMISSIONS } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport init from './init';\nimport reducer, { initialState } from './reducer';\n\nexport const SettingsPage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { get, put } = useFetchClient();\n\n const [{ initialData, modifiedData }, dispatch] = useReducer(reducer, initialState, init);\n\n const { data, isLoading, refetch } = useQuery({\n queryKey: ['upload', 'settings'],\n async queryFn() {\n const {\n data: { data },\n } = await get('/upload/settings');\n\n return data;\n },\n });\n\n React.useEffect(() => {\n if (data) {\n dispatch({\n type: 'GET_DATA_SUCCEEDED',\n data,\n });\n }\n }, [data]);\n\n const isSaveButtonDisabled = isEqual(initialData, modifiedData);\n\n const { mutateAsync, isLoading: isSubmiting } = useMutation({\n async mutationFn(body) {\n return put('/upload/settings', body);\n },\n onSuccess() {\n refetch();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.form.success.fields' }),\n });\n },\n onError(err) {\n console.error(err);\n },\n });\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n\n if (isSaveButtonDisabled) {\n return;\n }\n\n await mutateAsync(modifiedData);\n };\n\n const handleChange = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name,\n value,\n });\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main tabIndex={-1}>\n <Page.Title>\n {formatMessage({\n id: getTrad('page.title'),\n defaultMessage: 'Settings - Media Libray',\n })}\n </Page.Title>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n title={formatMessage({\n id: getTrad('settings.header.label'),\n defaultMessage: 'Media Library',\n })}\n primaryAction={\n <Button\n disabled={isSaveButtonDisabled}\n loading={isSubmiting}\n type=\"submit\"\n startIcon={<Check />}\n size=\"S\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n subtitle={formatMessage({\n id: getTrad('settings.sub-header.label'),\n defaultMessage: 'Configure the settings for the Media Library',\n })}\n />\n <Layouts.Content>\n <Layouts.Root>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={12}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTrad('settings.blockTitle'),\n defaultMessage: 'Asset management',\n })}\n </Typography>\n </Flex>\n <Grid.Root gap={6}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.responsiveDimensions.description'),\n defaultMessage:\n 'Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.',\n })}\n name=\"responsiveDimensions\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.responsiveDimensions.label'),\n defaultMessage: 'Responsive friendly upload',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData.responsiveDimensions}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'responsiveDimensions', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.sizeOptimization.description'),\n defaultMessage:\n 'Enabling this option will reduce the image size and slightly reduce its quality.',\n })}\n name=\"sizeOptimization\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.sizeOptimization.label'),\n defaultMessage: 'Size optimization',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData.sizeOptimization}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'sizeOptimization', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.autoOrientation.description'),\n defaultMessage:\n 'Enabling this option will automatically rotate the image according to EXIF orientation tag.',\n })}\n name=\"autoOrientation\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.autoOrientation.label'),\n defaultMessage: 'Auto orientation',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData.autoOrientation}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'autoOrientation', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n </Flex>\n </Layouts.Root>\n </Layouts.Content>\n </form>\n </Page.Main>\n );\n};\n\nconst ProtectedSettingsPage = () => (\n <Page.Protect permissions={PERMISSIONS.settings}>\n <SettingsPage />\n </Page.Protect>\n);\n\nexport default ProtectedSettingsPage;\n"],"names":["initialState","data","React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-C-azC_fq.mjs","sources":["../../admin/src/pages/SettingsPage/init.js","../../admin/src/pages/SettingsPage/reducer.js","../../admin/src/pages/SettingsPage/index.jsx"],"sourcesContent":["const init = (initialState) => {\n return initialState;\n};\n\nexport default init;\n","import { produce } from 'immer';\nimport set from 'lodash/set';\n\nconst initialState = {\n initialData: {\n responsiveDimensions: true,\n sizeOptimization: true,\n autoOrientation: false,\n videoPreview: false,\n },\n modifiedData: {\n responsiveDimensions: true,\n sizeOptimization: true,\n autoOrientation: false,\n videoPreview: false,\n },\n};\n\nconst reducer = (state, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (drafState) => {\n switch (action.type) {\n case 'GET_DATA_SUCCEEDED': {\n drafState.initialData = action.data;\n drafState.modifiedData = action.data;\n break;\n }\n case 'ON_CHANGE': {\n set(drafState, ['modifiedData', ...action.keys.split('.')], action.value);\n break;\n }\n default:\n return state;\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import React, { useReducer } from 'react';\n\nimport { Page, useNotification, useFetchClient, Layouts } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Flex, Grid, Toggle, Typography, Field } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\n\nimport { PERMISSIONS } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport init from './init';\nimport reducer, { initialState } from './reducer';\n\nexport const SettingsPage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { get, put } = useFetchClient();\n\n const [{ initialData, modifiedData }, dispatch] = useReducer(reducer, initialState, init);\n\n const { data, isLoading, refetch } = useQuery({\n queryKey: ['upload', 'settings'],\n async queryFn() {\n const {\n data: { data },\n } = await get('/upload/settings');\n\n return data;\n },\n });\n\n React.useEffect(() => {\n if (data) {\n dispatch({\n type: 'GET_DATA_SUCCEEDED',\n data,\n });\n }\n }, [data]);\n\n const isSaveButtonDisabled = isEqual(initialData, modifiedData);\n\n const { mutateAsync, isLoading: isSubmiting } = useMutation({\n async mutationFn(body) {\n return put('/upload/settings', body);\n },\n onSuccess() {\n refetch();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.form.success.fields' }),\n });\n },\n onError(err) {\n console.error(err);\n },\n });\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n\n if (isSaveButtonDisabled) {\n return;\n }\n\n await mutateAsync(modifiedData);\n };\n\n const handleChange = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name,\n value,\n });\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main tabIndex={-1}>\n <Page.Title>\n {formatMessage({\n id: getTrad('page.title'),\n defaultMessage: 'Settings - Media Libray',\n })}\n </Page.Title>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n title={formatMessage({\n id: getTrad('settings.header.label'),\n defaultMessage: 'Media Library',\n })}\n primaryAction={\n <Button\n disabled={isSaveButtonDisabled}\n loading={isSubmiting}\n type=\"submit\"\n startIcon={<Check />}\n size=\"S\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n subtitle={formatMessage({\n id: getTrad('settings.sub-header.label'),\n defaultMessage: 'Configure the settings for the Media Library',\n })}\n />\n <Layouts.Content>\n <Layouts.Root>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={12}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTrad('settings.blockTitle'),\n defaultMessage: 'Asset management',\n })}\n </Typography>\n </Flex>\n <Grid.Root gap={6}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.responsiveDimensions.description'),\n defaultMessage:\n 'Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.',\n })}\n name=\"responsiveDimensions\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.responsiveDimensions.label'),\n defaultMessage: 'Responsive friendly upload',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData.responsiveDimensions}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'responsiveDimensions', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.sizeOptimization.description'),\n defaultMessage:\n 'Enabling this option will reduce the image size and slightly reduce its quality.',\n })}\n name=\"sizeOptimization\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.sizeOptimization.label'),\n defaultMessage: 'Size optimization',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData.sizeOptimization}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'sizeOptimization', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.autoOrientation.description'),\n defaultMessage:\n 'Enabling this option will automatically rotate the image according to EXIF orientation tag.',\n })}\n name=\"autoOrientation\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.autoOrientation.label'),\n defaultMessage: 'Auto orientation',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData.autoOrientation}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'autoOrientation', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n </Flex>\n </Layouts.Root>\n </Layouts.Content>\n </form>\n </Page.Main>\n );\n};\n\nconst ProtectedSettingsPage = () => (\n <Page.Protect permissions={PERMISSIONS.settings}>\n <SettingsPage />\n </Page.Protect>\n);\n\nexport default ProtectedSettingsPage;\n"],"names":["initialState","data","React"],"mappings":"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"}
|
|
@@ -32,7 +32,7 @@ const __variableDynamicImportRuntimeHelper = (glob, path) => {
|
|
|
32
32
|
});
|
|
33
33
|
};
|
|
34
34
|
const name$1 = "@strapi/upload";
|
|
35
|
-
const version = "5.0.0-rc.
|
|
35
|
+
const version = "5.0.0-rc.30";
|
|
36
36
|
const description = "Makes it easy to upload images and files to your Strapi Application.";
|
|
37
37
|
const license = "SEE LICENSE IN LICENSE";
|
|
38
38
|
const author = {
|
|
@@ -77,8 +77,8 @@ const scripts = {
|
|
|
77
77
|
watch: "pack-up watch"
|
|
78
78
|
};
|
|
79
79
|
const dependencies = {
|
|
80
|
-
"@strapi/design-system": "2.0.0-rc.
|
|
81
|
-
"@strapi/icons": "2.0.0-rc.
|
|
80
|
+
"@strapi/design-system": "2.0.0-rc.11",
|
|
81
|
+
"@strapi/icons": "2.0.0-rc.11",
|
|
82
82
|
"@strapi/provider-upload-local": "workspace:*",
|
|
83
83
|
"@strapi/utils": "workspace:*",
|
|
84
84
|
"byte-size": "8.1.1",
|
|
@@ -815,7 +815,10 @@ const useSelectionState = (keys, initialValue) => {
|
|
|
815
815
|
}
|
|
816
816
|
};
|
|
817
817
|
const selectOnly = (nextSelection) => {
|
|
818
|
-
|
|
818
|
+
const index2 = selections.findIndex(
|
|
819
|
+
(currentSelection) => keys.every((key) => currentSelection[key] === nextSelection[key])
|
|
820
|
+
);
|
|
821
|
+
if (index2 > -1) {
|
|
819
822
|
setSelections([]);
|
|
820
823
|
} else {
|
|
821
824
|
setSelections([nextSelection]);
|
|
@@ -5526,7 +5529,7 @@ const FromUrlForm = ({ onClose, onAddAsset, trackedLocation }) => {
|
|
|
5526
5529
|
error: error?.message || (errors.urls ? formatMessage({ id: errors.urls, defaultMessage: "An error occured" }) : void 0),
|
|
5527
5530
|
children: [
|
|
5528
5531
|
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({ id: getTrad("input.url.label"), defaultMessage: "URL" }) }),
|
|
5529
|
-
/* @__PURE__ */ jsx(Textarea, { onChange: handleChange, value: values.urls }),
|
|
5532
|
+
/* @__PURE__ */ jsx(Textarea, { name: "urls", onChange: handleChange, value: values.urls }),
|
|
5530
5533
|
/* @__PURE__ */ jsx(Field.Hint, {}),
|
|
5531
5534
|
/* @__PURE__ */ jsx(Field.Error, {})
|
|
5532
5535
|
]
|
|
@@ -6538,7 +6541,7 @@ const index = {
|
|
|
6538
6541
|
defaultMessage: "Media Library"
|
|
6539
6542
|
},
|
|
6540
6543
|
permissions: PERMISSIONS.main,
|
|
6541
|
-
Component: () => import("./index-
|
|
6544
|
+
Component: () => import("./index-BsdHnx77.mjs"),
|
|
6542
6545
|
position: 4
|
|
6543
6546
|
});
|
|
6544
6547
|
app.addSettingsLink("global", {
|
|
@@ -6548,7 +6551,7 @@ const index = {
|
|
|
6548
6551
|
defaultMessage: "Media Library"
|
|
6549
6552
|
},
|
|
6550
6553
|
to: "media-library",
|
|
6551
|
-
Component: () => import("./index-
|
|
6554
|
+
Component: () => import("./index-C-azC_fq.mjs"),
|
|
6552
6555
|
permissions: PERMISSIONS.settings
|
|
6553
6556
|
});
|
|
6554
6557
|
app.addFields({ type: "media", Component: MediaLibraryInput });
|
|
@@ -6619,4 +6622,4 @@ export {
|
|
|
6619
6622
|
FolderCardBodyAction as y,
|
|
6620
6623
|
AssetGridList as z
|
|
6621
6624
|
};
|
|
6622
|
-
//# sourceMappingURL=index-
|
|
6625
|
+
//# sourceMappingURL=index-C43LhapC.mjs.map
|