import { AssetGridList, Breadcrumbs, EditAssetDialog, EditFolderDialog, EmptyAssets, FilterList, FilterPopover, FolderCard, FolderCardBody, FolderCardBodyAction, FolderGridList, SelectTree, SortPicker, TableList, UploadAssetDialog, containsAssetFilter, displayedFilters, getFolderURL, normalizeAPIError, useAssets, useBulkRemove, useFolder, useFolderCard, useFolderStructure, useFolders, useMediaLibraryPermissions, usePersistentState, useSelectionState } from "./chunk-7KYK3FTC.js"; import { useConfig } from "./chunk-JF4AI5LV.js"; import { getTrad, localStorageKeys, pluginId, viewOptions } from "./chunk-ALMC553V.js"; import "./chunk-QF6GPHA4.js"; import "./chunk-S3HPKOXW.js"; import "./chunk-JRLAXHTE.js"; import "./chunk-E4IFZ6ZT.js"; import { useMutation, useQueryClient } from "./chunk-QLEKUQKW.js"; import "./chunk-4J3VOWQV.js"; import "./chunk-PFI4R5WA.js"; import "./chunk-B3BGMYGX.js"; import "./chunk-W6ICJ5TB.js"; import "./chunk-IHYIPMY2.js"; import "./chunk-UWHSN2C7.js"; import "./chunk-ERK7O2GM.js"; import { useFetchClient } from "./chunk-FCIM6RNO.js"; import { SearchInput } from "./chunk-J33IXKN4.js"; import { ConfirmDialog } from "./chunk-NP53ZCXD.js"; import "./chunk-KFLQQE5L.js"; import "./chunk-ED4XR3VQ.js"; import "./chunk-MBK4V2X7.js"; import { require_isEmpty } from "./chunk-YJEURQPS.js"; import "./chunk-5ESYXDTN.js"; import "./chunk-K65KIEAL.js"; import "./chunk-B7ZLODDO.js"; import { Form, Formik } from "./chunk-PW7XKCYO.js"; import "./chunk-RMBEU7DO.js"; import "./chunk-RI2W2UZ6.js"; import "./chunk-IY256CNP.js"; import "./chunk-IFOFBKTA.js"; import "./chunk-XLSIZGJF.js"; import "./chunk-EGNP2T5O.js"; import { useTracking } from "./chunk-GSN7U3BK.js"; import "./chunk-T3B5F2LV.js"; import "./chunk-YXDCVYVT.js"; import "./chunk-QIJGNK42.js"; import "./chunk-7PUJSL55.js"; import "./chunk-C2ZJTFO7.js"; import "./chunk-C75BZXCZ.js"; import { Pagination } from "./chunk-APGTER6B.js"; import "./chunk-ZM6TT53G.js"; import "./chunk-6AXVGFVQ.js"; import "./chunk-BFLP6DBI.js"; import "./chunk-CMLQV3Z2.js"; import "./chunk-D4WYVNVM.js"; import "./chunk-MMOBCIZG.js"; import "./chunk-IGCTEXRF.js"; import { Layouts } from "./chunk-TIVRAWTC.js"; import "./chunk-PQINNV4N.js"; import "./chunk-VYSYYPOB.js"; import { ForwardRef$H, Page } from "./chunk-5CAWUBTQ.js"; import { useQueryParams } from "./chunk-W2TBR6J3.js"; import "./chunk-QEGMJR7H.js"; import { require_lib } from "./chunk-LCL5TIBZ.js"; import "./chunk-WOQNBAGN.js"; import "./chunk-BHLYCXQ7.js"; import "./chunk-76QM3EFM.js"; import "./chunk-CE4VABH2.js"; import "./chunk-5VODLFKF.js"; import { useNotification } from "./chunk-N55RVBRV.js"; import { Box, Button, CheckboxImpl, Dialog, Divider, Field, Flex, Grid, IconButton, Link as Link2, Loader, Modal, Popover, Typography, VisuallyHidden, useIntl } from "./chunk-7XB6XSWQ.js"; import "./chunk-5ZC4PE57.js"; import { Link, NavLink, Route, Routes, useLocation, useNavigate } from "./chunk-TUXTO2Z5.js"; import "./chunk-FOD4ENRR.js"; import { ForwardRef$1h, ForwardRef$1v, ForwardRef$2p, ForwardRef$39, ForwardRef$3h, ForwardRef$3j, ForwardRef$4d, ForwardRef$5j, ForwardRef$j } from "./chunk-WRD5KPDH.js"; import { require_jsx_runtime } from "./chunk-NIAJZ5MX.js"; import { dt } from "./chunk-ACIMPXWY.js"; import { require_react } from "./chunk-MADUDGYZ.js"; import { __toESM } from "./chunk-PLDDJCW6.js"; // node_modules/@strapi/upload/dist/admin/pages/App/App.mjs var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); var React4 = __toESM(require_react(), 1); var import_qs8 = __toESM(require_lib(), 1); // node_modules/@strapi/upload/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); var React3 = __toESM(require_react(), 1); var import_qs7 = __toESM(require_lib(), 1); // node_modules/@strapi/upload/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.mjs var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); var FolderCardCheckbox = (props) => { const { id } = useFolderCard(); return (0, import_jsx_runtime.jsx)(Box, { position: "relative", zIndex: 2, children: (0, import_jsx_runtime.jsx)(CheckboxImpl, { "aria-labelledby": `${id}-title`, ...props }) }); }; // node_modules/@strapi/upload/dist/admin/utils/getBreadcrumbDataML.mjs var getBreadcrumbDataML = (folder, { pathname, query }) => { var _a, _b; const data = [ { id: null, label: { id: getTrad("plugin.name"), defaultMessage: "Media Library" }, href: folder ? getFolderURL(pathname, query || {}) : void 0 } ]; if ((folder == null ? void 0 : folder.parent) && typeof (folder == null ? void 0 : folder.parent) !== "number" && ((_a = folder == null ? void 0 : folder.parent) == null ? void 0 : _a.parent)) { data.push([]); } if ((folder == null ? void 0 : folder.parent) && typeof folder.parent !== "number") { data.push({ id: folder.parent.id, label: folder.parent.name, href: getFolderURL(pathname, query || {}, { folder: (_b = folder.parent.id) == null ? void 0 : _b.toString(), folderPath: folder.parent.path }) }); } if (folder) { data.push({ id: folder.id, label: folder.name }); } return data; }; // node_modules/@strapi/upload/dist/admin/pages/App/MediaLibrary/components/BulkActions.mjs var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); var import_qs3 = __toESM(require_lib(), 1); // node_modules/@strapi/upload/dist/admin/pages/App/MediaLibrary/components/BulkDeleteButton.mjs var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); var BulkDeleteButton = ({ selected, onSuccess }) => { const { formatMessage } = useIntl(); const { remove } = useBulkRemove(); const handleConfirmRemove = async () => { await remove(selected); onSuccess(); }; return (0, import_jsx_runtime2.jsxs)(Dialog.Root, { children: [ (0, import_jsx_runtime2.jsx)(Dialog.Trigger, { children: (0, import_jsx_runtime2.jsx)(Button, { variant: "danger-light", size: "S", startIcon: (0, import_jsx_runtime2.jsx)(ForwardRef$j, {}), children: formatMessage({ id: "global.delete", defaultMessage: "Delete" }) }) }), (0, import_jsx_runtime2.jsx)(ConfirmDialog, { onConfirm: handleConfirmRemove }) ] }); }; // node_modules/@strapi/upload/dist/admin/pages/App/MediaLibrary/components/BulkMoveButton.mjs var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); var React = __toESM(require_react(), 1); // node_modules/@strapi/upload/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); var import_isEmpty = __toESM(require_isEmpty(), 1); // node_modules/@strapi/upload/dist/admin/hooks/useBulkMove.mjs var import_qs = __toESM(require_lib(), 1); var useBulkMove = () => { const { formatMessage } = useIntl(); const { toggleNotification } = useNotification(); const queryClient = useQueryClient(); const { post } = useFetchClient(); const bulkMoveQuery = ({ destinationFolderId, filesAndFolders }) => { const payload = filesAndFolders.reduce((acc, selected) => { const { id, type } = selected; const key = type === "asset" ? "fileIds" : "folderIds"; if (!acc[key]) { acc[key] = []; } acc[key].push(id); return acc; }, {}); return post("/upload/actions/bulk-move", { ...payload, destinationFolderId }); }; const mutation = useMutation(bulkMoveQuery, { onSuccess(res) { var _a; const { data: { data } } = res; if (((_a = data == null ? void 0 : data.files) == null ? void 0 : _a.length) > 0) { queryClient.refetchQueries([ pluginId, "assets" ], { active: true }); queryClient.refetchQueries([ pluginId, "asset-count" ], { active: true }); } queryClient.refetchQueries([ pluginId, "folders" ], { active: true }); toggleNotification({ type: "success", message: formatMessage({ id: getTrad("modal.move.success-label"), defaultMessage: "Elements have been moved successfully." }) }); } }); const move = (destinationFolderId, filesAndFolders) => mutation.mutateAsync({ destinationFolderId, filesAndFolders }); return { ...mutation, move }; }; // node_modules/@strapi/upload/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs var import_qs2 = __toESM(require_lib(), 1); var BulkMoveDialog = ({ onClose, selected = [], currentFolder }) => { const { formatMessage } = useIntl(); const { data: folderStructure, isLoading } = useFolderStructure(); const { move } = useBulkMove(); if (!folderStructure) { return null; } const handleSubmit = async (values, { setErrors }) => { var _a; try { if (typeof values.destination !== "string") { const destinationValue = values.destination.value; await move(destinationValue, selected); onClose(); } } catch (error) { const normalizedError = normalizeAPIError(error); if (normalizedError && "errors" in normalizedError) { const formikErrors = (_a = normalizedError.errors) == null ? void 0 : _a.reduce((acc, error2) => { var _a2, _b; acc[((_b = (_a2 = error2.values) == null ? void 0 : _a2.path) == null ? void 0 : _b.length) || "destination"] = error2.defaultMessage; return acc; }, {}); if (!(0, import_isEmpty.default)(formikErrors)) { setErrors(formikErrors); } } } }; if (isLoading) { return (0, import_jsx_runtime3.jsx)(Modal.Content, { children: (0, import_jsx_runtime3.jsx)(Modal.Body, { children: (0, import_jsx_runtime3.jsx)(Flex, { justifyContent: "center", paddingTop: 4, paddingBottom: 4, children: (0, import_jsx_runtime3.jsx)(Loader, { children: formatMessage({ id: getTrad("content.isLoading"), defaultMessage: "Content is loading." }) }) }) }) }); } const initialFormData = { destination: { value: (currentFolder == null ? void 0 : currentFolder.id) || "", label: (currentFolder == null ? void 0 : currentFolder.name) || folderStructure[0].label } }; return (0, import_jsx_runtime3.jsx)(Modal.Content, { children: (0, import_jsx_runtime3.jsx)(Formik, { validateOnChange: false, onSubmit: handleSubmit, initialValues: initialFormData, children: ({ values, errors, setFieldValue }) => (0, import_jsx_runtime3.jsxs)(Form, { noValidate: true, children: [ (0, import_jsx_runtime3.jsx)(Modal.Header, { children: (0, import_jsx_runtime3.jsx)(Modal.Title, { children: formatMessage({ id: getTrad("modal.folder.move.title"), defaultMessage: "Move elements to" }) }) }), (0, import_jsx_runtime3.jsx)(Modal.Body, { children: (0, import_jsx_runtime3.jsx)(Grid.Root, { gap: 4, children: (0, import_jsx_runtime3.jsx)(Grid.Item, { xs: 12, col: 12, direction: "column", alignItems: "stretch", children: (0, import_jsx_runtime3.jsxs)(Field.Root, { id: "folder-destination", children: [ (0, import_jsx_runtime3.jsx)(Field.Label, { children: formatMessage({ id: getTrad("form.input.label.folder-location"), defaultMessage: "Location" }) }), (0, import_jsx_runtime3.jsx)(SelectTree, { options: folderStructure, onChange: (value) => { setFieldValue("destination", value); }, defaultValue: typeof values.destination !== "string" ? values.destination : void 0, name: "destination", menuPortalTarget: document.querySelector("body"), inputId: "folder-destination", error: errors == null ? void 0 : errors.destination, ariaErrorMessage: "destination-error" }), errors.destination && (0, import_jsx_runtime3.jsx)(Typography, { variant: "pi", tag: "p", textColor: "danger600", children: errors.destination }) ] }) }) }) }), (0, import_jsx_runtime3.jsxs)(Modal.Footer, { children: [ (0, import_jsx_runtime3.jsx)(Modal.Close, { children: (0, import_jsx_runtime3.jsx)(Button, { variant: "tertiary", name: "cancel", children: formatMessage({ id: "cancel", defaultMessage: "Cancel" }) }) }), (0, import_jsx_runtime3.jsx)(Button, { type: "submit", loading: isLoading, children: formatMessage({ id: "modal.folder.move.submit", defaultMessage: "Move" }) }) ] }) ] }) }) }); }; // node_modules/@strapi/upload/dist/admin/pages/App/MediaLibrary/components/BulkMoveButton.mjs var BulkMoveButton = ({ selected = [], onSuccess, currentFolder }) => { const { formatMessage } = useIntl(); const [showConfirmDialog, setShowConfirmDialog] = React.useState(false); const handleConfirmMove = () => { setShowConfirmDialog(false); onSuccess(); }; return (0, import_jsx_runtime4.jsxs)(Modal.Root, { open: showConfirmDialog, onOpenChange: setShowConfirmDialog, children: [ (0, import_jsx_runtime4.jsx)(Modal.Trigger, { children: (0, import_jsx_runtime4.jsx)(Button, { variant: "secondary", size: "S", startIcon: (0, import_jsx_runtime4.jsx)(ForwardRef$3h, {}), children: formatMessage({ id: "global.move", defaultMessage: "Move" }) }) }), (0, import_jsx_runtime4.jsx)(BulkMoveDialog, { currentFolder, onClose: handleConfirmMove, selected }) ] }); }; // node_modules/@strapi/upload/dist/admin/pages/App/MediaLibrary/components/BulkActions.mjs var BulkActions = ({ selected = [], onSuccess, currentFolder }) => { const { formatMessage } = useIntl(); const numberAssets = selected == null ? void 0 : selected.reduce(function(_this, val) { var _a; return (val == null ? void 0 : val.type) === "folder" && "files" in val && (val == null ? void 0 : val.files) && "count" in val.files ? _this + ((_a = val == null ? void 0 : val.files) == null ? void 0 : _a.count) : _this + 1; }, 0); return (0, import_jsx_runtime5.jsxs)(Flex, { gap: 2, paddingBottom: 5, children: [ (0, import_jsx_runtime5.jsx)(Typography, { variant: "epsilon", textColor: "neutral600", children: formatMessage({ id: getTrad("list.assets.selected"), defaultMessage: "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}} selected" }, { numberFolders: selected == null ? void 0 : selected.filter(({ type }) => type === "folder").length, numberAssets }) }), (0, import_jsx_runtime5.jsx)(BulkDeleteButton, { selected, onSuccess }), (0, import_jsx_runtime5.jsx)(BulkMoveButton, { currentFolder, selected, onSuccess }) ] }); }; // node_modules/@strapi/upload/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.mjs var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); var import_qs4 = __toESM(require_lib(), 1); var getContentIntlMessage = ({ isFiltering, canCreate, canRead }) => { if (isFiltering) { return { id: "list.assets-empty.title-withSearch", defaultMessage: "There are no elements with the applied filters" }; } if (canRead) { if (canCreate) { return { id: "list.assets.empty-upload", defaultMessage: "Upload your first assets..." }; } return { id: "list.assets.empty", defaultMessage: "Media Library is empty" }; } return { id: "header.actions.no-permissions", defaultMessage: "No permissions to view" }; }; var EmptyOrNoPermissions = ({ canCreate, isFiltering, canRead, onActionClick }) => { const { formatMessage } = useIntl(); const content = getContentIntlMessage({ isFiltering, canCreate, canRead }); return (0, import_jsx_runtime6.jsx)(EmptyAssets, { icon: !canRead ? ForwardRef$H : void 0, action: canCreate && !isFiltering && (0, import_jsx_runtime6.jsx)(Button, { variant: "secondary", startIcon: (0, import_jsx_runtime6.jsx)(ForwardRef$1h, {}), onClick: onActionClick, children: formatMessage({ id: getTrad("header.actions.add-assets"), defaultMessage: "Add new assets" }) }), content: formatMessage({ ...content, id: getTrad(content.id) }) }); }; // node_modules/@strapi/upload/dist/admin/pages/App/MediaLibrary/components/Filters.mjs var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); var React2 = __toESM(require_react(), 1); var import_qs5 = __toESM(require_lib(), 1); var Filters = () => { var _a; const [open, setOpen] = React2.useState(false); const { formatMessage } = useIntl(); const { trackUsage } = useTracking(); const [{ query }, setQuery] = useQueryParams(); const filters = ((_a = query == null ? void 0 : query.filters) == null ? void 0 : _a.$and) || []; const handleRemoveFilter = (nextFilters) => { setQuery({ filters: { $and: nextFilters }, page: 1 }); }; const handleSubmit = (filters2) => { trackUsage("didFilterMediaLibraryElements", { location: "content-manager", filter: Object.keys(filters2[filters2.length - 1])[0] }); setQuery({ filters: { $and: filters2 }, page: 1 }); }; return (0, import_jsx_runtime7.jsxs)(Popover.Root, { open, onOpenChange: setOpen, children: [ (0, import_jsx_runtime7.jsx)(Popover.Trigger, { children: (0, import_jsx_runtime7.jsx)(Button, { variant: "tertiary", startIcon: (0, import_jsx_runtime7.jsx)(ForwardRef$3j, {}), size: "S", children: formatMessage({ id: "app.utils.filters", defaultMessage: "Filters" }) }) }), (0, import_jsx_runtime7.jsx)(FilterPopover, { displayedFilters, filters, onSubmit: handleSubmit, onToggle: setOpen }), (0, import_jsx_runtime7.jsx)(FilterList, { appliedFilters: filters, filtersSchema: displayedFilters, onRemoveFilter: handleRemoveFilter }) ] }); }; // node_modules/@strapi/upload/dist/admin/pages/App/MediaLibrary/components/Header.mjs var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); var import_qs6 = __toESM(require_lib(), 1); var Header = ({ breadcrumbs = null, canCreate, folder = null, onToggleEditFolderDialog, onToggleUploadAssetDialog }) => { const { formatMessage } = useIntl(); const { pathname } = useLocation(); const [{ query }] = useQueryParams(); const backQuery = { ...query, folder: (folder == null ? void 0 : folder.parent) && typeof folder.parent !== "number" && folder.parent.id ? folder.parent.id : void 0, folderPath: (folder == null ? void 0 : folder.parent) && typeof folder.parent !== "number" && folder.parent.path ? folder.parent.path : void 0 }; return (0, import_jsx_runtime8.jsx)(Layouts.Header, { title: formatMessage({ id: getTrad("plugin.name"), defaultMessage: `Media Library` }), subtitle: breadcrumbs && typeof breadcrumbs !== "boolean" && folder && (0, import_jsx_runtime8.jsx)(Breadcrumbs, { label: formatMessage({ id: getTrad("header.breadcrumbs.nav.label"), defaultMessage: "Folders navigation" }), breadcrumbs, currentFolderId: folder == null ? void 0 : folder.id }), navigationAction: folder && (0, import_jsx_runtime8.jsx)(Link2, { tag: NavLink, startIcon: (0, import_jsx_runtime8.jsx)(ForwardRef$5j, {}), to: `${pathname}?${(0, import_qs6.stringify)(backQuery, { encode: false })}`, children: formatMessage({ id: getTrad("header.actions.folder-level-up"), defaultMessage: "Back" }) }), primaryAction: canCreate && (0, import_jsx_runtime8.jsxs)(Flex, { gap: 2, children: [ (0, import_jsx_runtime8.jsx)(Button, { startIcon: (0, import_jsx_runtime8.jsx)(ForwardRef$1h, {}), variant: "secondary", onClick: onToggleEditFolderDialog, children: formatMessage({ id: getTrad("header.actions.add-folder"), defaultMessage: "Add new folder" }) }), (0, import_jsx_runtime8.jsx)(Button, { startIcon: (0, import_jsx_runtime8.jsx)(ForwardRef$1h, {}), onClick: onToggleUploadAssetDialog, children: formatMessage({ id: getTrad("header.actions.add-assets"), defaultMessage: "Add new assets" }) }) ] }) }); }; // node_modules/@strapi/upload/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs var BoxWithHeight = dt(Box)` height: 3.2rem; display: flex; align-items: center; `; var TypographyMaxWidth = dt(Typography)` max-width: 100%; `; var ActionContainer = dt(Box)` svg { path { fill: ${({ theme }) => theme.colors.neutral500}; } } `; var MediaLibrary = () => { var _a, _b, _c, _d; const navigate = useNavigate(); const { canRead, canCreate, canUpdate, canCopyLink, canDownload, canConfigureView, isLoading: permissionsLoading } = useMediaLibraryPermissions(); const currentFolderToEditRef = React3.useRef(); const { formatMessage } = useIntl(); const { pathname } = useLocation(); const { trackUsage } = useTracking(); const [{ query }, setQuery] = useQueryParams(); const isFiltering = Boolean(query._q || query.filters); const [view, setView] = usePersistentState(localStorageKeys.view, viewOptions.GRID); const isGridView = view === viewOptions.GRID; const { data: assetsData, isLoading: assetsLoading, error: assetsError } = useAssets({ skipWhen: !canRead, query }); const { data: foldersData, isLoading: foldersLoading, error: foldersError } = useFolders({ enabled: canRead && ((_a = assetsData == null ? void 0 : assetsData.pagination) == null ? void 0 : _a.page) === 1 && !containsAssetFilter(query), query }); const { data: currentFolder, isLoading: isCurrentFolderLoading, error: currentFolderError } = useFolder(query == null ? void 0 : query.folder, { enabled: canRead && !!(query == null ? void 0 : query.folder) }); if ((currentFolderError == null ? void 0 : currentFolderError.name) === "NotFoundError") { navigate(pathname); } const folders = (foldersData == null ? void 0 : foldersData.map((folder) => ({ ...folder, type: "folder", folderURL: getFolderURL(pathname, query, { folder: folder.id.toString(), folderPath: folder.path }), isSelectable: canUpdate }))) ?? []; const folderCount = (folders == null ? void 0 : folders.length) || 0; const assets = ((_b = assetsData == null ? void 0 : assetsData.results) == null ? void 0 : _b.map((asset) => ({ ...asset, type: "asset", isSelectable: canUpdate }))) || []; const assetCount = (assets == null ? void 0 : assets.length) ?? 0; const totalAssetCount = (_c = assetsData == null ? void 0 : assetsData.pagination) == null ? void 0 : _c.total; const isLoading = isCurrentFolderLoading || foldersLoading || permissionsLoading || assetsLoading; const [showUploadAssetDialog, setShowUploadAssetDialog] = React3.useState(false); const [showEditFolderDialog, setShowEditFolderDialog] = React3.useState(false); const [assetToEdit, setAssetToEdit] = React3.useState(void 0); const [folderToEdit, setFolderToEdit] = React3.useState(void 0); const [selected, { selectOne, selectAll }] = useSelectionState([ "type", "id" ], []); const indeterminateBulkSelect = (selected == null ? void 0 : selected.length) > 0 && (selected == null ? void 0 : selected.length) !== assetCount + folderCount; const toggleUploadAssetDialog = () => setShowUploadAssetDialog((prev) => !prev); const toggleEditFolderDialog = ({ created = false } = {}) => { if (created && (query == null ? void 0 : query.page) !== "1") { setQuery({ ...query, page: 1 }); } setShowEditFolderDialog((prev) => !prev); }; const handleBulkSelect = (checked, elements) => { if (checked) { trackUsage("didSelectAllMediaLibraryElements"); } selectAll(elements); }; const handleChangeSort = (value) => { trackUsage("didSortMediaLibraryElements", { location: "upload", sort: value }); setQuery({ sort: value }); }; const handleEditFolder = (folder) => { setFolderToEdit(folder); setShowEditFolderDialog(true); }; const handleEditFolderClose = (payload) => { setFolderToEdit(null); toggleEditFolderDialog(payload); if (currentFolderToEditRef.current) { currentFolderToEditRef.current.focus(); } }; const handleAssetDeleted = (numberOfAssets) => { var _a2, _b2, _c2; if (numberOfAssets === assetCount && ((_a2 = assetsData == null ? void 0 : assetsData.pagination) == null ? void 0 : _a2.page) === ((_b2 = assetsData == null ? void 0 : assetsData.pagination) == null ? void 0 : _b2.pageCount) && ((_c2 = assetsData == null ? void 0 : assetsData.pagination) == null ? void 0 : _c2.page) && assetsData.pagination.page > 1) { setQuery({ ...query, page: assetsData.pagination.page - 1 }); } }; const handleBulkActionSuccess = () => { selectAll(); handleAssetDeleted(selected.length); }; if (isLoading) { return (0, import_jsx_runtime9.jsx)(Page.Loading, {}); } if (assetsError || foldersError) { return (0, import_jsx_runtime9.jsx)(Page.Error, {}); } return (0, import_jsx_runtime9.jsxs)(Layouts.Root, { children: [ (0, import_jsx_runtime9.jsxs)(Page.Main, { children: [ (0, import_jsx_runtime9.jsx)(Header, { breadcrumbs: !isCurrentFolderLoading ? getBreadcrumbDataML(currentFolder, { pathname, query }) : null, canCreate, onToggleEditFolderDialog: toggleEditFolderDialog, onToggleUploadAssetDialog: toggleUploadAssetDialog, folder: currentFolder }), (0, import_jsx_runtime9.jsx)(Layouts.Action, { startActions: (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [ canUpdate && isGridView && (assetCount > 0 || folderCount > 0) && (0, import_jsx_runtime9.jsx)(BoxWithHeight, { paddingLeft: 2, paddingRight: 2, background: "neutral0", hasRadius: true, borderColor: "neutral200", children: (0, import_jsx_runtime9.jsx)(CheckboxImpl, { "aria-label": formatMessage({ id: getTrad("bulk.select.label"), defaultMessage: "Select all folders & assets" }), checked: indeterminateBulkSelect ? "indeterminate" : (assetCount > 0 || folderCount > 0) && selected.length === assetCount + folderCount, onCheckedChange: (e) => handleBulkSelect(e, [ ...assets, ...folders ]) }) }), canRead && isGridView && (0, import_jsx_runtime9.jsx)(SortPicker, { value: query == null ? void 0 : query.sort, onChangeSort: handleChangeSort }), canRead && (0, import_jsx_runtime9.jsx)(Filters, {}) ] }), endActions: (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [ canConfigureView ? (0, import_jsx_runtime9.jsx)(ActionContainer, { paddingTop: 1, paddingBottom: 1, children: (0, import_jsx_runtime9.jsx)(IconButton, { tag: Link, to: { pathname: `${pathname}/configuration`, search: (0, import_qs7.stringify)(query, { encode: false }) }, label: formatMessage({ id: "app.links.configure-view", defaultMessage: "Configure the view" }), children: (0, import_jsx_runtime9.jsx)(ForwardRef$4d, {}) }) }) : null, (0, import_jsx_runtime9.jsx)(ActionContainer, { paddingTop: 1, paddingBottom: 1, children: (0, import_jsx_runtime9.jsx)(IconButton, { label: isGridView ? formatMessage({ id: getTrad("view-switch.list"), defaultMessage: "List View" }) : formatMessage({ id: getTrad("view-switch.grid"), defaultMessage: "Grid View" }), onClick: () => setView(isGridView ? viewOptions.LIST : viewOptions.GRID), children: isGridView ? (0, import_jsx_runtime9.jsx)(ForwardRef$2p, {}) : (0, import_jsx_runtime9.jsx)(ForwardRef$39, {}) }) }), (0, import_jsx_runtime9.jsx)(SearchInput, { label: formatMessage({ id: getTrad("search.label"), defaultMessage: "Search for an asset" }), trackedEvent: "didSearchMediaLibraryElements", trackedEventDetails: { location: "upload" } }) ] }) }), (0, import_jsx_runtime9.jsxs)(Layouts.Content, { children: [ selected.length > 0 && (0, import_jsx_runtime9.jsx)(BulkActions, { currentFolder, selected, onSuccess: handleBulkActionSuccess }), folderCount === 0 && assetCount === 0 && (0, import_jsx_runtime9.jsx)(EmptyOrNoPermissions, { canCreate, canRead, isFiltering, onActionClick: toggleUploadAssetDialog }), canRead && !isGridView && (assetCount > 0 || folderCount > 0) && (0, import_jsx_runtime9.jsx)(TableList, { assetCount, folderCount, indeterminate: indeterminateBulkSelect, onChangeSort: handleChangeSort, onChangeFolder: (folderID, folderPath) => navigate(getFolderURL(pathname, query, { folder: folderID.toString(), folderPath })), onEditAsset: setAssetToEdit, onEditFolder: handleEditFolder, onSelectOne: selectOne, onSelectAll: handleBulkSelect, rows: [ ...folders, ...assets ], selected, shouldDisableBulkSelect: !canUpdate, sortQuery: (query == null ? void 0 : query.sort) ?? "" }), canRead && isGridView && (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [ folderCount > 0 && (0, import_jsx_runtime9.jsx)(FolderGridList, { title: (isFiltering && assetCount > 0 || !isFiltering) && formatMessage({ id: getTrad("list.folders.title"), defaultMessage: "Folders ({count})" }, { count: folderCount }) || "", children: folders.map((folder) => { var _a2, _b2; const selectedFolders = selected.filter(({ type }) => type === "folder"); const isSelected = !!selectedFolders.find((currentFolder2) => currentFolder2.id === folder.id); const url = getFolderURL(pathname, query, { folder: folder == null ? void 0 : folder.id.toString(), folderPath: folder == null ? void 0 : folder.path }); return (0, import_jsx_runtime9.jsx)(Grid.Item, { col: 3, direction: "column", alignItems: "stretch", children: (0, import_jsx_runtime9.jsx)(FolderCard, { ref: folderToEdit && folder.id === folderToEdit.id ? currentFolderToEditRef : void 0, ariaLabel: folder.name, id: `folder-${folder.id}`, to: url, startAction: folder.isSelectable ? (0, import_jsx_runtime9.jsx)(FolderCardCheckbox, { "data-testid": `folder-checkbox-${folder.id}`, checked: isSelected, onCheckedChange: () => selectOne(folder) }) : null, cardActions: (0, import_jsx_runtime9.jsx)(IconButton, { label: formatMessage({ id: getTrad("list.folder.edit"), defaultMessage: "Edit folder" }), onClick: () => handleEditFolder(folder), children: (0, import_jsx_runtime9.jsx)(ForwardRef$1v, {}) }), children: (0, import_jsx_runtime9.jsx)(FolderCardBody, { children: (0, import_jsx_runtime9.jsx)(FolderCardBodyAction, { to: url, children: (0, import_jsx_runtime9.jsxs)(Flex, { tag: "h2", direction: "column", alignItems: "start", maxWidth: "100%", children: [ (0, import_jsx_runtime9.jsxs)(TypographyMaxWidth, { fontWeight: "semiBold", textColor: "neutral800", ellipsis: true, children: [ folder.name, (0, import_jsx_runtime9.jsx)(VisuallyHidden, { children: ":" }) ] }), (0, import_jsx_runtime9.jsx)(TypographyMaxWidth, { tag: "span", textColor: "neutral600", variant: "pi", ellipsis: true, children: formatMessage({ id: getTrad("list.folder.subtitle"), defaultMessage: "{folderCount, plural, =0 {# folder} one {# folder} other {# folders}}, {filesCount, plural, =0 {# asset} one {# asset} other {# assets}}" }, { folderCount: (_a2 = folder.children) == null ? void 0 : _a2.count, filesCount: (_b2 = folder.files) == null ? void 0 : _b2.count }) }) ] }) }) }) }) }, `folder-${folder.id}`); }) }), assetCount > 0 && folderCount > 0 && (0, import_jsx_runtime9.jsx)(Box, { paddingTop: 6, paddingBottom: 4, children: (0, import_jsx_runtime9.jsx)(Divider, {}) }), assetCount > 0 && (0, import_jsx_runtime9.jsx)(AssetGridList, { assets, onEditAsset: setAssetToEdit, onSelectAsset: selectOne, selectedAssets: selected.filter(({ type }) => type === "asset"), title: (!isFiltering || isFiltering && folderCount > 0) && ((_d = assetsData == null ? void 0 : assetsData.pagination) == null ? void 0 : _d.page) === 1 && formatMessage({ id: getTrad("list.assets.title"), defaultMessage: "Assets ({count})" }, { count: totalAssetCount }) || "" }) ] }), (0, import_jsx_runtime9.jsxs)(Pagination.Root, { ...assetsData == null ? void 0 : assetsData.pagination, children: [ (0, import_jsx_runtime9.jsx)(Pagination.PageSize, {}), (0, import_jsx_runtime9.jsx)(Pagination.Links, {}) ] }) ] }) ] }), showUploadAssetDialog && (0, import_jsx_runtime9.jsx)(UploadAssetDialog, { open: showUploadAssetDialog, onClose: toggleUploadAssetDialog, trackedLocation: "upload", folderId: query == null ? void 0 : query.folder }), showEditFolderDialog && (0, import_jsx_runtime9.jsx)(EditFolderDialog, { open: showEditFolderDialog, onClose: () => handleEditFolderClose(), folder: folderToEdit, parentFolderId: query == null ? void 0 : query.folder, location: "upload" }), assetToEdit && (0, import_jsx_runtime9.jsx)(EditAssetDialog, { onClose: (editedAsset) => { if (editedAsset === null) { handleAssetDeleted(1); } setAssetToEdit(void 0); }, open: !!assetToEdit, asset: assetToEdit, canUpdate, canCopyLink, canDownload, trackedLocation: "upload" }) ] }); }; // node_modules/@strapi/upload/dist/admin/pages/App/App.mjs var ConfigureTheView = React4.lazy(async () => import("./ConfigureTheView-OFTYFMGX.js").then((mod) => ({ default: mod.ConfigureTheView }))); var Upload = () => { const { config: { isLoading, isError, data: config } } = useConfig(); const [{ rawQuery }, setQuery] = useQueryParams(); const { formatMessage } = useIntl(); const title = formatMessage({ id: getTrad("plugin.name"), defaultMessage: "Media Library" }); React4.useEffect(() => { if (isLoading || isError || rawQuery) { return; } setQuery({ sort: config.sort, page: 1, pageSize: config.pageSize }); }, [ isLoading, isError, config, rawQuery, setQuery ]); if (isLoading) { return (0, import_jsx_runtime10.jsx)(Page.Loading, {}); } return (0, import_jsx_runtime10.jsxs)(Page.Main, { children: [ (0, import_jsx_runtime10.jsx)(Page.Title, { children: title }), rawQuery ? (0, import_jsx_runtime10.jsx)(React4.Suspense, { fallback: (0, import_jsx_runtime10.jsx)(Page.Loading, {}), children: (0, import_jsx_runtime10.jsxs)(Routes, { children: [ (0, import_jsx_runtime10.jsx)(Route, { index: true, element: (0, import_jsx_runtime10.jsx)(MediaLibrary, {}) }), (0, import_jsx_runtime10.jsx)(Route, { path: "configuration", element: (0, import_jsx_runtime10.jsx)(ConfigureTheView, { config }) }) ] }) }) : null ] }); }; export { Upload }; //# sourceMappingURL=App-SVHNQJEN.js.map