diff --git a/packages/core/admin/admin/src/components/ConfirmDialog.tsx b/packages/core/admin/admin/src/components/ConfirmDialog.tsx index c80d47fbd2..736edc7236 100644 --- a/packages/core/admin/admin/src/components/ConfirmDialog.tsx +++ b/packages/core/admin/admin/src/components/ConfirmDialog.tsx @@ -8,7 +8,7 @@ import { useIntl } from 'react-intl'; * ConfirmDialog * -----------------------------------------------------------------------------------------------*/ interface ConfirmDialogProps extends Pick, Pick { - onConfirm?: () => Promise | void; + onConfirm?: (e?: React.MouseEvent) => Promise | void; children?: React.ReactNode; endAction?: React.ReactNode; startAction?: React.ReactNode; @@ -66,14 +66,14 @@ const ConfirmDialog = ({ defaultMessage: 'Are you sure?', }); - const handleConfirm = async () => { + const handleConfirm = async (e: React.MouseEvent) => { if (!onConfirm) { return; } try { setIsConfirming(true); - await onConfirm(); + await onConfirm(e); } finally { setIsConfirming(false); } diff --git a/packages/core/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.tsx b/packages/core/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.tsx index a6e1d4aa6e..5fb5bf4ee7 100644 --- a/packages/core/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.tsx +++ b/packages/core/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.tsx @@ -309,7 +309,7 @@ const ListPage = () => { {webhook.url} - + e.stopPropagation()}> handleClickFolderCard(folder.id, folder.path)} > - + {folder.name} {/* VisuallyHidden dash here allows to separate folder title and count informations for voice reading structure purpose */} diff --git a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/tests/__snapshots__/index.test.jsx.snap b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/tests/__snapshots__/index.test.jsx.snap index 1f917dcc67..d5774156c0 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/tests/__snapshots__/index.test.jsx.snap +++ b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/tests/__snapshots__/index.test.jsx.snap @@ -278,7 +278,7 @@ exports[`BrowseStep renders and match snapshot 1`] = ` overflow: hidden; text-overflow: ellipsis; font-weight: 500; - color: currentcolor; + color: #32324d; } .c56 { diff --git a/packages/core/upload/admin/src/components/AssetDialog/index.jsx b/packages/core/upload/admin/src/components/AssetDialog/index.jsx index dd6fa73f47..5f74968066 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/index.jsx +++ b/packages/core/upload/admin/src/components/AssetDialog/index.jsx @@ -214,7 +214,7 @@ export const AssetContent = ({ - 0 ? 'selected' : 'browse'}> + 0 ? 'selected' : 'browse'}> @@ -283,7 +283,7 @@ export const AssetContent = ({ /> - + onValidate(selectedAssets)} /> ); @@ -342,3 +342,9 @@ AssetDialog.propTypes = { onValidate: PropTypes.func.isRequired, trackedLocation: PropTypes.string, }; + +const TabsRoot = styled(Tabs.Root)` + display: flex; + flex-direction: column; + overflow: hidden; +`; diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/CroppingActions.jsx b/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/CroppingActions.jsx index fd12d2dec4..b0cf5bb27e 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/CroppingActions.jsx +++ b/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/CroppingActions.jsx @@ -4,7 +4,7 @@ import { Flex, FocusTrap, IconButton, Menu } from '@strapi/design-system'; import { Check, Cross } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { styled } from 'styled-components'; +import { styled, useTheme } from 'styled-components'; import getTrad from '../../../utils/getTrad'; @@ -12,6 +12,7 @@ import { CroppingActionRow } from './components'; export const CroppingActions = ({ onCancel, onValidate, onDuplicate }) => { const { formatMessage } = useIntl(); + const theme = useTheme(); return ( @@ -45,7 +46,7 @@ export const CroppingActions = ({ onCancel, onValidate, onDuplicate }) => { fill="#C0C0D0" /> - + {formatMessage({ id: getTrad('checkControl.crop-original'), diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/components.jsx b/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/components.jsx index 0f4e7e68bb..d6e87ea2ca 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/components.jsx +++ b/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/components.jsx @@ -7,7 +7,8 @@ export const RelativeBox = styled(Box)` export const Wrapper = styled.div` position: relative; - text-align: center; + display: flex; + justify-content: center; background: repeating-conic-gradient( ${({ theme }) => theme.colors.neutral100} 0% 25%, transparent 0% 50% diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/RemoveAssetDialog.jsx b/packages/core/upload/admin/src/components/EditAssetDialog/RemoveAssetDialog.jsx index 702f22fdf0..c4266c1582 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/RemoveAssetDialog.jsx +++ b/packages/core/upload/admin/src/components/EditAssetDialog/RemoveAssetDialog.jsx @@ -8,9 +8,12 @@ import { useRemoveAsset } from '../../hooks/useRemoveAsset'; export const RemoveAssetDialog = ({ open, onClose, asset }) => { // `null` means asset is deleted - const { removeAsset } = useRemoveAsset(() => onClose(null)); + const { removeAsset } = useRemoveAsset(() => { + onClose(null); + }); - const handleConfirm = async () => { + const handleConfirm = async (event) => { + event.preventDefault(); await removeAsset(asset.id); }; diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/tests/__snapshots__/EditAssetDialog.test.jsx.snap b/packages/core/upload/admin/src/components/EditAssetDialog/tests/__snapshots__/EditAssetDialog.test.jsx.snap index a5a9b48313..14b16a02d9 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/tests/__snapshots__/EditAssetDialog.test.jsx.snap +++ b/packages/core/upload/admin/src/components/EditAssetDialog/tests/__snapshots__/EditAssetDialog.test.jsx.snap @@ -485,7 +485,8 @@ exports[` renders and matches the snapshot 1`] = ` .c24 { position: relative; - text-align: center; + display: flex; + justify-content: center; background: repeating-conic-gradient( #f6f6f9 0% 25%, transparent 0% 50% ) 50%/20px 20px; } diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/tests/__snapshots__/index.test.jsx.snap b/packages/core/upload/admin/src/components/EditAssetDialog/tests/__snapshots__/index.test.jsx.snap index 39310ab985..68b3a9863d 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/tests/__snapshots__/index.test.jsx.snap +++ b/packages/core/upload/admin/src/components/EditAssetDialog/tests/__snapshots__/index.test.jsx.snap @@ -485,7 +485,8 @@ exports[` renders and matches the snapshot 1`] = ` .c24 { position: relative; - text-align: center; + display: flex; + justify-content: center; background: repeating-conic-gradient( #f6f6f9 0% 25%, transparent 0% 50% ) 50%/20px 20px; } diff --git a/packages/core/upload/admin/src/components/MediaLibraryInput/index.jsx b/packages/core/upload/admin/src/components/MediaLibraryInput/index.jsx index d1e3baed3a..07f779a509 100644 --- a/packages/core/upload/admin/src/components/MediaLibraryInput/index.jsx +++ b/packages/core/upload/admin/src/components/MediaLibraryInput/index.jsx @@ -179,38 +179,44 @@ export const MediaLibraryInput = forwardRef( trackedLocation="content-manager" /> - { - setStep(undefined); - setFolderId(null); - }} - open={step === STEPS.AssetSelect} - onValidate={handleValidation} - multiple={multiple} - onAddAsset={() => setStep(STEPS.AssetUpload)} - onAddFolder={() => setStep(STEPS.FolderCreate)} - onChangeFolder={(folder) => setFolderId(folder)} - trackedLocation="content-manager" - /> + {step === STEPS.AssetSelect && ( + { + setStep(undefined); + setFolderId(null); + }} + open={step === STEPS.AssetSelect} + onValidate={handleValidation} + multiple={multiple} + onAddAsset={() => setStep(STEPS.AssetUpload)} + onAddFolder={() => setStep(STEPS.FolderCreate)} + onChangeFolder={(folder) => setFolderId(folder)} + trackedLocation="content-manager" + /> + )} - setStep(STEPS.AssetSelect)} - initialAssetsToAdd={droppedAssets} - addUploadedFiles={handleFilesUploadSucceeded} - trackedLocation="content-manager" - folderId={folderId} - validateAssetsTypes={validateAssetsTypes} - /> + {step === STEPS.AssetUpload && ( + setStep(STEPS.AssetSelect)} + initialAssetsToAdd={droppedAssets} + addUploadedFiles={handleFilesUploadSucceeded} + trackedLocation="content-manager" + folderId={folderId} + validateAssetsTypes={validateAssetsTypes} + /> + )} - setStep(STEPS.AssetSelect)} - parentFolderId={folderId} - /> + {step === STEPS.FolderCreate && ( + setStep(STEPS.AssetSelect)} + parentFolderId={folderId} + /> + )} ); } diff --git a/packages/core/upload/admin/src/components/SelectTree/SelectTree.jsx b/packages/core/upload/admin/src/components/SelectTree/SelectTree.jsx index 1a1ad42bb8..4e32f8397f 100644 --- a/packages/core/upload/admin/src/components/SelectTree/SelectTree.jsx +++ b/packages/core/upload/admin/src/components/SelectTree/SelectTree.jsx @@ -199,6 +199,11 @@ const getSelectStyles = (theme, error) => { color: theme.colors.neutral800, gridTemplateColumns: '0 100%', }), + menuPortal: (base) => ({ + ...base, + zIndex: theme.zIndices.dialog, + pointerEvents: 'auto', + }), menu(base) { return { ...base, @@ -220,10 +225,6 @@ const getSelectStyles = (theme, error) => { paddingRight: theme.spaces[1], paddingBottom: theme.spaces[1], }), - menuPortal: (base) => ({ - ...base, - zIndex: 100, - }), option(base, state) { let backgroundColor = base.backgroundColor; diff --git a/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.jsx b/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.jsx index 2a1f8cd189..85c451b2f5 100644 --- a/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.jsx +++ b/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.jsx @@ -77,7 +77,7 @@ export const PendingAssetStep = ({ }; return ( -
+ <> {formatMessage({ @@ -159,7 +159,7 @@ export const PendingAssetStep = ({ - - + ); }; diff --git a/packages/core/upload/admin/src/components/UploadAssetDialog/UploadAssetDialog.jsx b/packages/core/upload/admin/src/components/UploadAssetDialog/UploadAssetDialog.jsx index 93cb557be9..eb3642966d 100644 --- a/packages/core/upload/admin/src/components/UploadAssetDialog/UploadAssetDialog.jsx +++ b/packages/core/upload/admin/src/components/UploadAssetDialog/UploadAssetDialog.jsx @@ -93,16 +93,18 @@ export const UploadAssetDialog = ({ return ( - - {step === Steps.AddAsset && ( + {step === Steps.AddAsset && ( + - )} + + )} - {step === Steps.PendingAsset && ( + {step === Steps.PendingAsset && ( + - )} + + )} - {assetToEdit && ( + {assetToEdit && ( + - )} - + + )} ); }; diff --git a/packages/core/upload/admin/src/pages/App/ConfigureTheView/index.jsx b/packages/core/upload/admin/src/pages/App/ConfigureTheView/index.jsx index 0379da844e..90e6fa9556 100644 --- a/packages/core/upload/admin/src/pages/App/ConfigureTheView/index.jsx +++ b/packages/core/upload/admin/src/pages/App/ConfigureTheView/index.jsx @@ -44,7 +44,7 @@ const ConfigureTheView = ({ config }) => { const handleConfirm = async () => { trackUsage('willEditMediaLibraryConfig'); await mutateConfig.mutateAsync(modifiedData); - toggleWarningSubmit(); + setWarningSubmit(false); dispatch(setLoaded()); toggleNotification({ type: 'success', diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/Header.jsx b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/Header.jsx index 940aa61457..a08985b0e9 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/Header.jsx +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/Header.jsx @@ -6,7 +6,7 @@ import { ArrowLeft, Plus } from '@strapi/icons'; import PropTypes from 'prop-types'; import { stringify } from 'qs'; import { useIntl } from 'react-intl'; -import { useLocation } from 'react-router-dom'; +import { useLocation, NavLink } from 'react-router-dom'; import { Breadcrumbs } from '../../../../components/Breadcrumbs'; import { BreadcrumbsDefinition, FolderDefinition } from '../../../../constants'; @@ -51,6 +51,7 @@ export const Header = ({ navigationAction={ folder && ( } to={`${pathname}?${stringify(backQuery, { encode: false })}`} > diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/__snapshots__/Header.test.jsx.snap b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/__snapshots__/Header.test.jsx.snap index cc7f872b48..faccfe4db0 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/__snapshots__/Header.test.jsx.snap +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/__snapshots__/Header.test.jsx.snap @@ -262,10 +262,11 @@ exports[`Header renders 1`] = ` class="c1" > { - - - { - // The asset has been deleted - if (editedAsset === null) { - handleAssetDeleted(1); - } + {showUploadAssetDialog && ( + + )} + {showEditFolderDialog && ( + + )} + {assetToEdit && ( + { + // The asset has been deleted + if (editedAsset === null) { + handleAssetDeleted(1); + } - setAssetToEdit(undefined); - }} - open={!!assetToEdit} - asset={assetToEdit} - canUpdate={canUpdate} - canCopyLink={canCopyLink} - canDownload={canDownload} - trackedLocation="upload" - /> + setAssetToEdit(undefined); + }} + open={!!assetToEdit} + asset={assetToEdit} + canUpdate={canUpdate} + canCopyLink={canCopyLink} + canDownload={canDownload} + trackedLocation="upload" + /> + )} ); }; diff --git a/tests/api/core/content-manager/api/number-of-draft-relations.test.api.js b/tests/api/core/content-manager/api/number-of-draft-relations.test.api.js index fd9a68c28c..d245dd8bbd 100644 --- a/tests/api/core/content-manager/api/number-of-draft-relations.test.api.js +++ b/tests/api/core/content-manager/api/number-of-draft-relations.test.api.js @@ -475,7 +475,7 @@ describe('CM API - Number of draft relations', () => { }); // Given products have a oneToMany relation with categories, adding categoryIds[0] here // steals the relation from p1. Hence why we are expecting totalDraftRelations to equal 3 below - + const p2 = await rq({ method: 'POST', url: `/content-manager/collection-types/${UID_PRODUCT}`,