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 = ({