diff --git a/packages/core/admin/admin/src/StrapiApp.tsx b/packages/core/admin/admin/src/StrapiApp.tsx index 3e1322b3cd1..dd90551d684 100644 --- a/packages/core/admin/admin/src/StrapiApp.tsx +++ b/packages/core/admin/admin/src/StrapiApp.tsx @@ -207,7 +207,7 @@ class StrapiApp { ) { console.warn(` [${link.intlLabel.defaultMessage}]: [deprecated] addMenuLink() was called with an async Component from the plugin "${link.intlLabel.defaultMessage}". This will be removed - in the future. Please use: \`Component: () => import(path)\` instead. + in the future. Please use: \`Component: () => import(path)\` ensuring you return a default export instead. `); } @@ -221,7 +221,15 @@ class StrapiApp { this.menu.push({ ...link, - Component: React.lazy(link.Component), + Component: React.lazy(async () => { + const mod = await link.Component(); + + if ('default' in mod) { + return mod; + } else { + return { default: mod }; + } + }), }); }; @@ -264,7 +272,7 @@ class StrapiApp { ) { console.warn(` [${link.intlLabel.defaultMessage}]: [deprecated] addSettingsLink() was called with an async Component from the plugin "${link.intlLabel.defaultMessage}". This will be removed - in the future. Please use: \`Component: () => import(path)\` instead. + in the future. Please use: \`Component: () => import(path)\` ensuring you return a default export instead. `); } @@ -286,7 +294,15 @@ class StrapiApp { this.settings[sectionId].links.push({ ...link, - Component: React.lazy(link.Component), + Component: React.lazy(async () => { + const mod = await link.Component(); + + if ('default' in mod) { + return mod; + } else { + return { default: mod }; + } + }), }); }; diff --git a/packages/core/admin/admin/src/pages/Settings/pages/Roles/EditPage.tsx b/packages/core/admin/admin/src/pages/Settings/pages/Roles/EditPage.tsx index 3bd70d2c8a3..dacbe26461e 100644 --- a/packages/core/admin/admin/src/pages/Settings/pages/Roles/EditPage.tsx +++ b/packages/core/admin/admin/src/pages/Settings/pages/Roles/EditPage.tsx @@ -270,7 +270,7 @@ const ProtectedEditPage = () => { } if (!canRead && !canUpdate) { - return ; + return ; } return ; diff --git a/packages/core/content-releases/admin/src/components/CMReleasesContainer.tsx b/packages/core/content-releases/admin/src/components/CMReleasesContainer.tsx index 35868ca6de1..ff464f46ef2 100644 --- a/packages/core/content-releases/admin/src/components/CMReleasesContainer.tsx +++ b/packages/core/content-releases/admin/src/components/CMReleasesContainer.tsx @@ -277,9 +277,8 @@ export const CMReleasesContainer = () => { /** * - Impossible to add entry to release before it exists * - Content types without draft and publish cannot add entries to release - * TODO v5: All contentTypes will have draft and publish enabled */ - if (isCreatingEntry || !contentType?.options?.draftAndPublish) { + if (isCreatingEntry) { return null; } diff --git a/packages/core/content-releases/admin/src/components/tests/ReleaseModal.test.tsx b/packages/core/content-releases/admin/src/components/tests/ReleaseModal.test.tsx index 2dd8636a1c5..6269971e06a 100644 --- a/packages/core/content-releases/admin/src/components/tests/ReleaseModal.test.tsx +++ b/packages/core/content-releases/admin/src/components/tests/ReleaseModal.test.tsx @@ -9,14 +9,15 @@ describe('ReleaseModal', () => { it('renders correctly the dialog content on create', async () => { const handleCloseMocked = jest.fn(); const { user } = render( - - - + , + { + initialEntries: [{ pathname: `/plugins/${pluginId}` }], + } ); const dialogContainer = screen.getByRole('dialog'); const dialogCancelButton = within(dialogContainer).getByRole('button', { diff --git a/packages/core/content-releases/admin/src/pages/App.tsx b/packages/core/content-releases/admin/src/pages/App.tsx index 9e39d1800e6..9c52d5f6c9a 100644 --- a/packages/core/content-releases/admin/src/pages/App.tsx +++ b/packages/core/content-releases/admin/src/pages/App.tsx @@ -1,8 +1,7 @@ import { CheckPagePermissions } from '@strapi/helper-plugin'; -import { Route, Switch } from 'react-router-dom'; +import { Route, Routes } from 'react-router-dom'; import { PERMISSIONS } from '../constants'; -import { pluginId } from '../pluginId'; import { ReleaseDetailsPage } from './ReleaseDetailsPage'; import { ReleasesPage } from './ReleasesPage'; @@ -10,10 +9,10 @@ import { ReleasesPage } from './ReleasesPage'; export const App = () => { return ( - - - - + + } /> + } /> + ); }; diff --git a/packages/core/content-releases/admin/src/pages/ReleaseDetailsPage.tsx b/packages/core/content-releases/admin/src/pages/ReleaseDetailsPage.tsx index 5453f05c2bd..075575efe12 100644 --- a/packages/core/content-releases/admin/src/pages/ReleaseDetailsPage.tsx +++ b/packages/core/content-releases/admin/src/pages/ReleaseDetailsPage.tsx @@ -34,7 +34,7 @@ import { } from '@strapi/helper-plugin'; import { ArrowLeft, CheckCircle, More, Pencil, Trash } from '@strapi/icons'; import { useIntl } from 'react-intl'; -import { useParams, useHistory, Link as ReactRouterLink, Redirect } from 'react-router-dom'; +import { useParams, useNavigate, Link as ReactRouterLink, Navigate } from 'react-router-dom'; import styled from 'styled-components'; import { ReleaseActionMenu } from '../components/ReleaseActionMenu'; @@ -179,7 +179,7 @@ interface ReleaseDetailsLayoutProps { children: React.ReactNode; } -export const ReleaseDetailsLayout = ({ +const ReleaseDetailsLayout = ({ toggleEditReleaseModal, toggleWarningSubmit, children, @@ -193,7 +193,12 @@ export const ReleaseDetailsLayout = ({ isLoading: isLoadingDetails, isError, error, - } = useGetReleaseQuery({ id: releaseId }); + } = useGetReleaseQuery( + { id: releaseId! }, + { + skip: !releaseId, + } + ); const [publishRelease, { isLoading: isPublishing }] = usePublishReleaseMutation(); const toggleNotification = useNotification(); const { formatAPIError } = useAPIErrorHandler(); @@ -212,8 +217,8 @@ export const ReleaseDetailsLayout = ({ handleTogglePopover(); }; - const handlePublishRelease = async () => { - const response = await publishRelease({ id: releaseId }); + const handlePublishRelease = (id: string) => async () => { + const response = await publishRelease({ id }); if ('data' in response) { // When the response returns an object with 'data', handle success @@ -254,16 +259,14 @@ export const ReleaseDetailsLayout = ({ if (isError || !release) { return ( - ); @@ -364,7 +367,7 @@ export const ReleaseDetailsLayout = ({