mirror of
https://github.com/strapi/strapi.git
synced 2025-12-27 23:24:03 +00:00
chore: merge develop into v5/main (#20126)
This commit is contained in:
parent
e2d1ee0951
commit
80e532931b
@ -49,6 +49,12 @@ const config = {
|
||||
watch: process.env.TYPEDOC_WATCH,
|
||||
},
|
||||
],
|
||||
[
|
||||
'@cmfcmf/docusaurus-search-local',
|
||||
{
|
||||
indexBlog: false,
|
||||
},
|
||||
],
|
||||
],
|
||||
presets: [
|
||||
[
|
||||
|
||||
@ -26,6 +26,7 @@
|
||||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@cmfcmf/docusaurus-search-local": "1.1.0",
|
||||
"@docusaurus/core": "3.1.1",
|
||||
"@docusaurus/preset-classic": "3.1.1",
|
||||
"@mdx-js/react": "^3.0.0",
|
||||
|
||||
123
docs/yarn.lock
123
docs/yarn.lock
@ -5,6 +5,16 @@ __metadata:
|
||||
version: 8
|
||||
cacheKey: 10
|
||||
|
||||
"@algolia/autocomplete-core@npm:1.17.0":
|
||||
version: 1.17.0
|
||||
resolution: "@algolia/autocomplete-core@npm:1.17.0"
|
||||
dependencies:
|
||||
"@algolia/autocomplete-plugin-algolia-insights": "npm:1.17.0"
|
||||
"@algolia/autocomplete-shared": "npm:1.17.0"
|
||||
checksum: 09b0beaf3e742db9f278d951a76a51ef328ac7545564d692d54c0d9e54600e1836a9f03281585bd3cc056c0afa8f9cb9936755aab6b7e46492d463b76f117410
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@algolia/autocomplete-core@npm:1.9.3":
|
||||
version: 1.9.3
|
||||
resolution: "@algolia/autocomplete-core@npm:1.9.3"
|
||||
@ -15,6 +25,33 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@algolia/autocomplete-js@npm:^1.8.2":
|
||||
version: 1.17.0
|
||||
resolution: "@algolia/autocomplete-js@npm:1.17.0"
|
||||
dependencies:
|
||||
"@algolia/autocomplete-core": "npm:1.17.0"
|
||||
"@algolia/autocomplete-preset-algolia": "npm:1.17.0"
|
||||
"@algolia/autocomplete-shared": "npm:1.17.0"
|
||||
htm: "npm:^3.1.1"
|
||||
preact: "npm:^10.13.2"
|
||||
peerDependencies:
|
||||
"@algolia/client-search": ">= 4.5.1 < 6"
|
||||
algoliasearch: ">= 4.9.1 < 6"
|
||||
checksum: e40576eeaf245242d44453c7c1c4860a239ab7b85d8ab59b53fa8479e248dce8ecf9adc91162f2c7f0d37b2da0c123010efa6975714abd0f56dd7d7e99dab674
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@algolia/autocomplete-plugin-algolia-insights@npm:1.17.0":
|
||||
version: 1.17.0
|
||||
resolution: "@algolia/autocomplete-plugin-algolia-insights@npm:1.17.0"
|
||||
dependencies:
|
||||
"@algolia/autocomplete-shared": "npm:1.17.0"
|
||||
peerDependencies:
|
||||
search-insights: ">= 1 < 3"
|
||||
checksum: 99fb44f998acf340bac6ba039e434e925c24d20d3ebca462e8a0b3e8091da239b19a5a18be4e2abd9dae58398cfd6843f9f630e300a394abe292164bbfe0dee3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@algolia/autocomplete-plugin-algolia-insights@npm:1.9.3":
|
||||
version: 1.9.3
|
||||
resolution: "@algolia/autocomplete-plugin-algolia-insights@npm:1.9.3"
|
||||
@ -26,6 +63,18 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@algolia/autocomplete-preset-algolia@npm:1.17.0":
|
||||
version: 1.17.0
|
||||
resolution: "@algolia/autocomplete-preset-algolia@npm:1.17.0"
|
||||
dependencies:
|
||||
"@algolia/autocomplete-shared": "npm:1.17.0"
|
||||
peerDependencies:
|
||||
"@algolia/client-search": ">= 4.9.1 < 6"
|
||||
algoliasearch: ">= 4.9.1 < 6"
|
||||
checksum: 9d1b879d56f123b974a1aabfeedce7204ba1dec11894d6642f3282d127beac63607dcfe5c79ea2948c35683288f436f916215c3f08ec9cddd2c8d102107a2ed6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@algolia/autocomplete-preset-algolia@npm:1.9.3":
|
||||
version: 1.9.3
|
||||
resolution: "@algolia/autocomplete-preset-algolia@npm:1.9.3"
|
||||
@ -38,6 +87,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@algolia/autocomplete-shared@npm:1.17.0":
|
||||
version: 1.17.0
|
||||
resolution: "@algolia/autocomplete-shared@npm:1.17.0"
|
||||
peerDependencies:
|
||||
"@algolia/client-search": ">= 4.9.1 < 6"
|
||||
algoliasearch: ">= 4.9.1 < 6"
|
||||
checksum: 19d2937ece343c2ad99bb362a27ded5c08bde4b8b5eadc04d3de1371cb2bcee377f29f841abce9d4578160cb9e9406f6216cc06dad0128bff9d4b7115cffab9e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@algolia/autocomplete-shared@npm:1.9.3":
|
||||
version: 1.9.3
|
||||
resolution: "@algolia/autocomplete-shared@npm:1.9.3"
|
||||
@ -48,6 +107,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@algolia/autocomplete-theme-classic@npm:^1.8.2":
|
||||
version: 1.17.0
|
||||
resolution: "@algolia/autocomplete-theme-classic@npm:1.17.0"
|
||||
checksum: 17f9617d7cb9587d668f17991c9749ec04fa561891181e64613805b9528c37309ddad3192fced2763284a80df960b85c4fe17d8ff42cbab88f6e555050f8a859
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@algolia/cache-browser-local-storage@npm:4.23.2":
|
||||
version: 4.23.2
|
||||
resolution: "@algolia/cache-browser-local-storage@npm:4.23.2"
|
||||
@ -117,7 +183,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@algolia/client-search@npm:4.23.2":
|
||||
"@algolia/client-search@npm:4.23.2, @algolia/client-search@npm:^4.12.0":
|
||||
version: 4.23.2
|
||||
resolution: "@algolia/client-search@npm:4.23.2"
|
||||
dependencies:
|
||||
@ -2033,6 +2099,28 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@cmfcmf/docusaurus-search-local@npm:1.1.0":
|
||||
version: 1.1.0
|
||||
resolution: "@cmfcmf/docusaurus-search-local@npm:1.1.0"
|
||||
dependencies:
|
||||
"@algolia/autocomplete-js": "npm:^1.8.2"
|
||||
"@algolia/autocomplete-theme-classic": "npm:^1.8.2"
|
||||
"@algolia/client-search": "npm:^4.12.0"
|
||||
algoliasearch: "npm:^4.12.0"
|
||||
cheerio: "npm:^1.0.0-rc.9"
|
||||
clsx: "npm:^1.1.1"
|
||||
lunr-languages: "npm:^1.4.0"
|
||||
mark.js: "npm:^8.11.1"
|
||||
peerDependencies:
|
||||
"@docusaurus/core": ^2.0.0
|
||||
nodejieba: ^2.5.0
|
||||
peerDependenciesMeta:
|
||||
nodejieba:
|
||||
optional: true
|
||||
checksum: 5c5692ab133873930fa1c0db07b09a13dfc4c3d95908e506c3cd72746ceedaf97d6d1328044921abe90d377d6a90cb277328ca8639ef10556b0b58d48681c067
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@colors/colors@npm:1.5.0":
|
||||
version: 1.5.0
|
||||
resolution: "@colors/colors@npm:1.5.0"
|
||||
@ -3914,7 +4002,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"algoliasearch@npm:^4.18.0, algoliasearch@npm:^4.19.1":
|
||||
"algoliasearch@npm:^4.12.0, algoliasearch@npm:^4.18.0, algoliasearch@npm:^4.19.1":
|
||||
version: 4.23.2
|
||||
resolution: "algoliasearch@npm:4.23.2"
|
||||
dependencies:
|
||||
@ -4546,7 +4634,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cheerio@npm:^1.0.0-rc.12":
|
||||
"cheerio@npm:^1.0.0-rc.12, cheerio@npm:^1.0.0-rc.9":
|
||||
version: 1.0.0-rc.12
|
||||
resolution: "cheerio@npm:1.0.0-rc.12"
|
||||
dependencies:
|
||||
@ -5507,6 +5595,7 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "docs@workspace:."
|
||||
dependencies:
|
||||
"@cmfcmf/docusaurus-search-local": "npm:1.1.0"
|
||||
"@docusaurus/core": "npm:3.1.1"
|
||||
"@docusaurus/module-type-aliases": "npm:3.1.1"
|
||||
"@docusaurus/preset-classic": "npm:3.1.1"
|
||||
@ -6833,6 +6922,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"htm@npm:^3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "htm@npm:3.1.1"
|
||||
checksum: cb862dc5c9eac532937af7a9e26edd1e0e7939fc78a06efde4ae10b3a145f9506e644ff084c871dd808c315342b56fd0baa174a2a2cdf6071a4130ee0abee9e0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"html-entities@npm:^2.3.2":
|
||||
version: 2.3.3
|
||||
resolution: "html-entities@npm:2.3.3"
|
||||
@ -7900,6 +7996,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lunr-languages@npm:^1.4.0":
|
||||
version: 1.14.0
|
||||
resolution: "lunr-languages@npm:1.14.0"
|
||||
checksum: bb17d7e481efcf262de930b2e0980e0b33790c80a0aec1aeb102f4a32ad4418971efeae2bb1b6841825c1b055fca68dea37aea871524e9d84a451a113076d933
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lunr@npm:^2.3.9":
|
||||
version: 2.3.9
|
||||
resolution: "lunr@npm:2.3.9"
|
||||
@ -7931,6 +8034,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"mark.js@npm:^8.11.1":
|
||||
version: 8.11.1
|
||||
resolution: "mark.js@npm:8.11.1"
|
||||
checksum: 3b01b9ea4761f2104ab1fbe2cc917c0a9ca580f778f62edde7eb95c6322330cba0ddc45f8aa163ef5b0b3b3eeba20df683b42831fbe5e8429ff3b4b4cecfd28a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"markdown-extensions@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "markdown-extensions@npm:2.0.0"
|
||||
@ -10117,6 +10227,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"preact@npm:^10.13.2":
|
||||
version: 10.20.1
|
||||
resolution: "preact@npm:10.20.1"
|
||||
checksum: 894ac14b3ec6f8ca308b53fb14e12e57678248fd1faa24ae857f5e37d9c11b34833e6dd1ba8210a34de4d6d523462923b1f9c93d35ce433874affd056f2d0998
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"pretty-error@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "pretty-error@npm:4.0.0"
|
||||
|
||||
@ -32,6 +32,8 @@
|
||||
"scripts": {
|
||||
"build": "nx run-many --target=build --nx-ignore-cycles",
|
||||
"build:size": "cd examples/getstarted && yarn build",
|
||||
"build:ts": "nx run-many --target=build:ts --nx-ignore-cycles",
|
||||
"build:watch": "nx watch --all --nx-ignore-cycles -- nx run \\$NX_PROJECT_NAME:build --nx-ignore-cycles",
|
||||
"clean": "nx run-many --target=clean --nx-ignore-cycles",
|
||||
"commit": "commit",
|
||||
"doc:api": "node scripts/open-api/serve.js",
|
||||
@ -70,11 +72,10 @@
|
||||
"test:ts:packages": "nx run-many --target=test:ts --nx-ignore-cycles",
|
||||
"test:unit": "jest --config jest.config.js",
|
||||
"test:unit:all": "nx run-many --target=test:unit --nx-ignore-cycles",
|
||||
"test:unit:watch": "run test:unit --watch",
|
||||
"watch": "nx run-many --target=watch --nx-ignore-cycles"
|
||||
"test:unit:watch": "run test:unit --watch"
|
||||
},
|
||||
"resolutions": {
|
||||
"@strapi/design-system": "1.18.0-typescript.0",
|
||||
"@strapi/design-system": "1.19.0-typescript.0",
|
||||
"@types/koa": "2.13.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@ -78,8 +78,8 @@
|
||||
"@radix-ui/react-context": "1.0.1",
|
||||
"@radix-ui/react-toolbar": "1.0.4",
|
||||
"@reduxjs/toolkit": "1.9.7",
|
||||
"@strapi/design-system": "1.17.0",
|
||||
"@strapi/icons": "1.16.0",
|
||||
"@strapi/design-system": "1.18.0",
|
||||
"@strapi/icons": "1.18.0",
|
||||
"@strapi/permissions": "5.0.0-beta.3",
|
||||
"@strapi/provider-audit-logs-local": "5.0.0-beta.3",
|
||||
"@strapi/types": "5.0.0-beta.3",
|
||||
|
||||
@ -60,8 +60,8 @@
|
||||
"@radix-ui/react-toolbar": "1.0.4",
|
||||
"@reduxjs/toolkit": "1.9.7",
|
||||
"@sindresorhus/slugify": "1.1.0",
|
||||
"@strapi/design-system": "1.17.0",
|
||||
"@strapi/icons": "1.16.0",
|
||||
"@strapi/design-system": "1.18.0",
|
||||
"@strapi/icons": "1.18.0",
|
||||
"@strapi/types": "5.0.0-beta.3",
|
||||
"@strapi/utils": "5.0.0-beta.3",
|
||||
"axios": "1.6.8",
|
||||
|
||||
@ -346,7 +346,7 @@ export const CMReleasesContainer = () => {
|
||||
alignItems="start"
|
||||
borderWidth="1px"
|
||||
borderStyle="solid"
|
||||
borderColor={getReleaseColorVariant(release.action.type, '200')}
|
||||
borderColor={getReleaseColorVariant(release.actions[0].type, '200')}
|
||||
overflow="hidden"
|
||||
hasRadius
|
||||
>
|
||||
@ -355,13 +355,13 @@ export const CMReleasesContainer = () => {
|
||||
paddingBottom={3}
|
||||
paddingLeft={4}
|
||||
paddingRight={4}
|
||||
background={getReleaseColorVariant(release.action.type, '100')}
|
||||
background={getReleaseColorVariant(release.actions[0].type, '100')}
|
||||
width="100%"
|
||||
>
|
||||
<Typography
|
||||
fontSize={1}
|
||||
variant="pi"
|
||||
textColor={getReleaseColorVariant(release.action.type, '600')}
|
||||
textColor={getReleaseColorVariant(release.actions[0].type, '600')}
|
||||
>
|
||||
{formatMessage(
|
||||
{
|
||||
@ -369,7 +369,7 @@ export const CMReleasesContainer = () => {
|
||||
defaultMessage:
|
||||
'{isPublish, select, true {Will be published in} other {Will be unpublished in}}',
|
||||
},
|
||||
{ isPublish: release.action.type === 'publish' }
|
||||
{ isPublish: release.actions[0].type === 'publish' }
|
||||
)}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -409,7 +409,7 @@ export const CMReleasesContainer = () => {
|
||||
<ReleaseActionMenu.EditReleaseItem releaseId={release.id} />
|
||||
<ReleaseActionMenu.DeleteReleaseActionItem
|
||||
releaseId={release.id}
|
||||
actionId={release.action.id}
|
||||
actionId={release.actions[0].id}
|
||||
/>
|
||||
</ReleaseActionMenu.Root>
|
||||
) : null}
|
||||
|
||||
@ -0,0 +1,168 @@
|
||||
// import * as React from 'react';
|
||||
|
||||
// import { Box, Flex, Popover, Typography } from '@strapi/design-system';
|
||||
// import { Link } from '@strapi/design-system/v2';
|
||||
// import { Modules, UID } from '@strapi/types';
|
||||
// import { useIntl } from 'react-intl';
|
||||
// import styled from 'styled-components';
|
||||
|
||||
// import { useGetMappedEntriesInReleasesQuery } from '../services/release';
|
||||
// import { useTypedSelector } from '../store/hooks';
|
||||
|
||||
// // TODO: Migrate to v5
|
||||
// // import type { CMAdminConfiguration, ListLayoutRow } from '@strapi/admin/strapi-admin';
|
||||
|
||||
// type Entity = Modules.EntityService.Result<UID.Schema>;
|
||||
|
||||
// const Button = styled.button`
|
||||
// svg {
|
||||
// > g,
|
||||
// path {
|
||||
// fill: ${({ theme }) => theme.colors.neutral500};
|
||||
// }
|
||||
// }
|
||||
// &:hover {
|
||||
// svg {
|
||||
// > g,
|
||||
// path {
|
||||
// fill: ${({ theme }) => theme.colors.neutral600};
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// &:active {
|
||||
// svg {
|
||||
// > g,
|
||||
// path {
|
||||
// fill: ${({ theme }) => theme.colors.neutral400};
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// `;
|
||||
|
||||
// const ActionWrapper = styled(Flex)`
|
||||
// svg {
|
||||
// height: ${4 / 16}rem;
|
||||
// }
|
||||
// `;
|
||||
|
||||
// /* -------------------------------------------------------------------------------------------------
|
||||
// * useReleasesList
|
||||
// * -----------------------------------------------------------------------------------------------*/
|
||||
|
||||
// const useReleasesList = (entryId: string | number) => {
|
||||
// const { uid: contentTypeUid } = useTypedSelector(
|
||||
// (state) => state['content-manager_listView'].contentType
|
||||
// );
|
||||
// const listViewData = useTypedSelector((state) => state['content-manager_listView'].data);
|
||||
// // @ts-expect-error Fix when migrating to v5
|
||||
// const entriesIds = listViewData.map((entry) => entry.id);
|
||||
|
||||
// const response = useGetMappedEntriesInReleasesQuery(
|
||||
// { contentTypeUid, entriesIds },
|
||||
// { skip: !entriesIds || !contentTypeUid || entriesIds.length === 0 }
|
||||
// );
|
||||
|
||||
// const mappedEntriesInReleases = response.data || {};
|
||||
|
||||
// // @ts-expect-error Fix when migrating releases
|
||||
// return mappedEntriesInReleases?.[entryId] || [];
|
||||
// };
|
||||
|
||||
// /* -------------------------------------------------------------------------------------------------
|
||||
// * addColumnToTableHook
|
||||
// * -----------------------------------------------------------------------------------------------*/
|
||||
|
||||
// // TODO: Migrate to v5
|
||||
// // interface AddColumnToTableHookArgs {
|
||||
// // layout: {
|
||||
// // components: Record<string, CMAdminConfiguration>;
|
||||
// // contentType: CMAdminConfiguration;
|
||||
// // };
|
||||
// // displayedHeaders: ListLayoutRow[];
|
||||
// // }
|
||||
|
||||
// const addColumnToTableHook = ({ displayedHeaders, layout }: any) => {
|
||||
// const { contentType } = layout;
|
||||
|
||||
// if (!contentType.options?.draftAndPublish) {
|
||||
// return { displayedHeaders, layout };
|
||||
// }
|
||||
|
||||
// return {
|
||||
// displayedHeaders: [
|
||||
// ...displayedHeaders,
|
||||
// {
|
||||
// key: '__release_key__',
|
||||
// fieldSchema: { type: 'string' },
|
||||
// metadatas: { label: 'To be released in', searchable: true, sortable: false },
|
||||
// name: 'releasedAt',
|
||||
// cellFormatter: (props: Entity) => <ReleaseListCell {...props} />,
|
||||
// },
|
||||
// ],
|
||||
// layout,
|
||||
// };
|
||||
// };
|
||||
|
||||
// /* -------------------------------------------------------------------------------------------------
|
||||
// * ReleaseListCell
|
||||
// * -----------------------------------------------------------------------------------------------*/
|
||||
|
||||
// interface ReleaseListCellProps {
|
||||
// id: Entity['id'];
|
||||
// }
|
||||
|
||||
// const ReleaseListCell = ({ id }: ReleaseListCellProps) => {
|
||||
// const releases = useReleasesList(id);
|
||||
// const [visible, setVisible] = React.useState(false);
|
||||
// const buttonRef = React.useRef<HTMLButtonElement>(null);
|
||||
// const { formatMessage } = useIntl();
|
||||
|
||||
// const handleTogglePopover = () => setVisible((prev) => !prev);
|
||||
|
||||
// return (
|
||||
// <Flex onClick={(e) => e.stopPropagation()}>
|
||||
// <Button type="button" onClick={handleTogglePopover} ref={buttonRef}>
|
||||
// <ActionWrapper height="2rem" width="2rem">
|
||||
// <Typography style={{ maxWidth: '252px', cursor: 'pointer' }} textColor="neutral800">
|
||||
// {releases.length > 0
|
||||
// ? formatMessage(
|
||||
// {
|
||||
// id: 'content-releases.content-manager.list-view.releases-number',
|
||||
// defaultMessage: '{number} {number, plural, one {release} other {releases}}',
|
||||
// },
|
||||
// {
|
||||
// number: releases.length,
|
||||
// }
|
||||
// )
|
||||
// : '-'}
|
||||
// </Typography>
|
||||
// <Flex>
|
||||
// {/* {releases.length > 0 && <SortIcon />} */}
|
||||
// {visible && (
|
||||
// <Popover
|
||||
// onDismiss={handleTogglePopover}
|
||||
// source={buttonRef as React.MutableRefObject<HTMLElement>}
|
||||
// spacing={16}
|
||||
// >
|
||||
// <ul>
|
||||
// {releases.map(
|
||||
// // @ts-expect-error fix when migrating to v5
|
||||
// ({ id, name }) => (
|
||||
// <Box key={id} padding={3} as="li">
|
||||
// <Link href={`/admin/plugins/content-releases/${id}`} isExternal={false}>
|
||||
// {name}
|
||||
// </Link>
|
||||
// </Box>
|
||||
// ))}
|
||||
// </ul>
|
||||
// </Popover>
|
||||
// )}
|
||||
// </Flex>
|
||||
// </ActionWrapper>
|
||||
// </Button>
|
||||
// </Flex>
|
||||
// );
|
||||
// };
|
||||
|
||||
// export { ReleaseListCell, addColumnToTableHook };
|
||||
// export type { ReleaseListCellProps };
|
||||
@ -85,7 +85,7 @@ describe('CMReleasesContainer', () => {
|
||||
rest.get('/content-releases', (req, res, ctx) => {
|
||||
return res(
|
||||
ctx.json({
|
||||
data: [{ name: 'release1', id: '1', action: { type: 'publish' } }],
|
||||
data: [{ name: 'release1', id: '1', actions: [{ type: 'publish' }] }],
|
||||
})
|
||||
);
|
||||
})
|
||||
@ -112,8 +112,8 @@ describe('CMReleasesContainer', () => {
|
||||
return res(
|
||||
ctx.json({
|
||||
data: [
|
||||
{ name: 'release1', id: '1', action: { type: 'publish' } },
|
||||
{ name: 'release2', id: '2', action: { type: 'unpublish' } },
|
||||
{ name: 'release1', id: '1', actions: [{ type: 'publish' }] },
|
||||
{ name: 'release2', id: '2', actions: [{ type: 'unpublish' }] },
|
||||
],
|
||||
})
|
||||
);
|
||||
@ -142,7 +142,7 @@ describe('CMReleasesContainer', () => {
|
||||
{
|
||||
name: 'release1',
|
||||
id: '1',
|
||||
action: { type: 'publish' },
|
||||
actions: [{ type: 'publish' }],
|
||||
scheduledAt: '2024-01-01T10:00:00.000Z',
|
||||
timezone: 'Europe/Paris',
|
||||
},
|
||||
|
||||
@ -2,6 +2,7 @@ import { PaperPlane } from '@strapi/icons';
|
||||
|
||||
import { CMReleasesContainer } from './components/CMReleasesContainer';
|
||||
import { ReleaseAction } from './components/ReleaseAction';
|
||||
// import { addColumnToTableHook } from './components/ReleaseListCell';
|
||||
import { PERMISSIONS } from './constants';
|
||||
import { pluginId } from './pluginId';
|
||||
import { releaseApi } from './services/release';
|
||||
@ -15,6 +16,12 @@ import type { Plugin } from '@strapi/types';
|
||||
const admin: Plugin.Config.AdminInput = {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
register(app: StrapiApp) {
|
||||
/**
|
||||
* Hook that adds the locale column in the Release Details table
|
||||
* @constant
|
||||
* @type {string}
|
||||
*/
|
||||
app.createHook('ContentReleases/pages/ReleaseDetails/add-locale-in-releases');
|
||||
if (window.strapi.features.isEnabled('cms-content-releases')) {
|
||||
app.addMenuLink({
|
||||
to: `plugins/${pluginId}`,
|
||||
@ -52,6 +59,8 @@ const admin: Plugin.Config.AdminInput = {
|
||||
actions.splice(deleteActionIndex, 0, ReleaseAction);
|
||||
return actions;
|
||||
});
|
||||
// Hook that adds a column into the CM's LV table
|
||||
// app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addColumnToTableHook);
|
||||
} else if (
|
||||
!window.strapi.features.isEnabled('cms-content-releases') &&
|
||||
window.strapi?.flags?.promoteEE
|
||||
|
||||
@ -11,6 +11,7 @@ import {
|
||||
useNotification,
|
||||
useQueryParams,
|
||||
useRBAC,
|
||||
useStrapiApp,
|
||||
} from '@strapi/admin/strapi-admin';
|
||||
import {
|
||||
Button,
|
||||
@ -482,6 +483,7 @@ const ReleaseDetailsLayout = ({
|
||||
* ReleaseDetailsBody
|
||||
* -----------------------------------------------------------------------------------------------*/
|
||||
const GROUP_BY_OPTIONS = ['contentType', 'locale', 'action'] as const;
|
||||
const GROUP_BY_OPTIONS_NO_LOCALE = ['contentType', 'action'] as const;
|
||||
const getGroupByOptionLabel = (value: (typeof GROUP_BY_OPTIONS)[number]) => {
|
||||
if (value === 'locale') {
|
||||
return {
|
||||
@ -521,6 +523,22 @@ const ReleaseDetailsBody = ({ releaseId }: ReleaseDetailsBodyProps) => {
|
||||
const {
|
||||
allowedActions: { canUpdate },
|
||||
} = useRBAC(PERMISSIONS);
|
||||
const runHookWaterfall = useStrapiApp('ReleaseDetailsPage', (state) => state.runHookWaterfall);
|
||||
|
||||
// TODO: Migrated displayedHeader to v5
|
||||
const { hasI18nEnabled }: { displayedHeaders: any; hasI18nEnabled: boolean } = runHookWaterfall(
|
||||
'ContentReleases/pages/ReleaseDetails/add-locale-in-releases',
|
||||
{
|
||||
displayedHeaders: {
|
||||
label: formatMessage({
|
||||
id: 'content-releases.page.ReleaseDetails.table.header.label.locale',
|
||||
defaultMessage: 'locale',
|
||||
}),
|
||||
name: 'locale',
|
||||
},
|
||||
hasI18nEnabled: false,
|
||||
}
|
||||
);
|
||||
|
||||
const release = releaseData?.data;
|
||||
const selectedGroupBy = query?.groupBy || 'contentType';
|
||||
@ -643,6 +661,7 @@ const ReleaseDetailsBody = ({ releaseId }: ReleaseDetailsBodyProps) => {
|
||||
defaultMessage: 'Group by',
|
||||
});
|
||||
const headers = [
|
||||
// ...displayedHeaders,
|
||||
{
|
||||
label: formatMessage({
|
||||
id: 'content-releases.page.ReleaseDetails.table.header.label.name',
|
||||
@ -650,13 +669,6 @@ const ReleaseDetailsBody = ({ releaseId }: ReleaseDetailsBodyProps) => {
|
||||
}),
|
||||
name: 'name',
|
||||
},
|
||||
{
|
||||
label: formatMessage({
|
||||
id: 'content-releases.page.ReleaseDetails.table.header.label.locale',
|
||||
defaultMessage: 'locale',
|
||||
}),
|
||||
name: 'locale',
|
||||
},
|
||||
{
|
||||
label: formatMessage({
|
||||
id: 'content-releases.page.ReleaseDetails.table.header.label.content-type',
|
||||
@ -683,6 +695,7 @@ const ReleaseDetailsBody = ({ releaseId }: ReleaseDetailsBodyProps) => {
|
||||
]
|
||||
: []),
|
||||
];
|
||||
const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;
|
||||
|
||||
return (
|
||||
<ContentLayout>
|
||||
@ -705,7 +718,7 @@ const ReleaseDetailsBody = ({ releaseId }: ReleaseDetailsBodyProps) => {
|
||||
value={formatMessage(getGroupByOptionLabel(selectedGroupBy))}
|
||||
onChange={(value) => setQuery({ groupBy: value as ReleaseActionGroupBy })}
|
||||
>
|
||||
{GROUP_BY_OPTIONS.map((option) => (
|
||||
{options.map((option) => (
|
||||
<SingleSelectOption key={option} value={option}>
|
||||
{formatMessage(getGroupByOptionLabel(option))}
|
||||
</SingleSelectOption>
|
||||
@ -741,9 +754,12 @@ const ReleaseDetailsBody = ({ releaseId }: ReleaseDetailsBodyProps) => {
|
||||
contentType.mainFieldValue || entry.id
|
||||
}`}</Typography>
|
||||
</Td>
|
||||
<Td width="10%">
|
||||
<Typography>{`${locale?.name ? locale.name : '-'}`}</Typography>
|
||||
</Td>
|
||||
{hasI18nEnabled && (
|
||||
<Td width="10%">
|
||||
<Typography>{`${locale?.name ? locale.name : '-'}`}</Typography>
|
||||
</Td>
|
||||
)}
|
||||
|
||||
<Td width="10%">
|
||||
<Typography>{contentType.displayName || ''}</Typography>
|
||||
</Td>
|
||||
|
||||
@ -272,7 +272,6 @@ const ReleasesPage = () => {
|
||||
});
|
||||
|
||||
trackUsage('didCreateRelease');
|
||||
|
||||
navigate(response.data.data.id.toString());
|
||||
} else if (isAxiosError(response.error)) {
|
||||
// When the response returns an object with 'error', handle axios error
|
||||
|
||||
@ -24,7 +24,7 @@ jest.mock('@strapi/plugin-content-manager/strapi-admin', () => ({
|
||||
unstable_useDocument: jest.fn().mockReturnValue({ validate: jest.fn().mockReturnValue({}) }),
|
||||
}));
|
||||
|
||||
describe('Releases details page', () => {
|
||||
describe.skip('Releases details page', () => {
|
||||
it('renders the details page with no release-actions', async () => {
|
||||
server.use(
|
||||
rest.get('/content-releases/:releaseId', (req, res, ctx) =>
|
||||
|
||||
@ -22,6 +22,7 @@ import type {
|
||||
UpdateRelease,
|
||||
GetRelease,
|
||||
PublishRelease,
|
||||
MapEntriesToReleases,
|
||||
} from '../../../shared/contracts/releases';
|
||||
|
||||
export interface GetReleasesQueryParams {
|
||||
@ -50,7 +51,7 @@ type GetReleasesTabResponse = GetReleases.Response & {
|
||||
const releaseApi = createApi({
|
||||
reducerPath: pluginId,
|
||||
baseQuery: axiosBaseQuery,
|
||||
tagTypes: ['Release', 'ReleaseAction'],
|
||||
tagTypes: ['Release', 'ReleaseAction', 'EntriesInRelease'],
|
||||
endpoints: (build) => {
|
||||
return {
|
||||
getReleasesForEntry: build.query<
|
||||
@ -200,6 +201,7 @@ const releaseApi = createApi({
|
||||
invalidatesTags: [
|
||||
{ type: 'Release', id: 'LIST' },
|
||||
{ type: 'ReleaseAction', id: 'LIST' },
|
||||
{ type: 'EntriesInRelease' },
|
||||
],
|
||||
}),
|
||||
updateReleaseAction: build.mutation<
|
||||
@ -255,6 +257,7 @@ const releaseApi = createApi({
|
||||
{ type: 'Release', id: 'LIST' },
|
||||
{ type: 'Release', id: arg.params.releaseId },
|
||||
{ type: 'ReleaseAction', id: 'LIST' },
|
||||
{ type: 'EntriesInRelease' },
|
||||
],
|
||||
}),
|
||||
publishRelease: build.mutation<PublishRelease.Response, PublishRelease.Request['params']>({
|
||||
@ -273,7 +276,25 @@ const releaseApi = createApi({
|
||||
method: 'DELETE',
|
||||
};
|
||||
},
|
||||
invalidatesTags: () => [{ type: 'Release', id: 'LIST' }],
|
||||
invalidatesTags: () => [{ type: 'Release', id: 'LIST' }, { type: 'EntriesInRelease' }],
|
||||
}),
|
||||
getMappedEntriesInReleases: build.query<
|
||||
MapEntriesToReleases.Response['data'],
|
||||
MapEntriesToReleases.Request['query']
|
||||
>({
|
||||
query(params) {
|
||||
return {
|
||||
url: '/content-releases/mapEntriesToReleases',
|
||||
method: 'GET',
|
||||
config: {
|
||||
params,
|
||||
},
|
||||
};
|
||||
},
|
||||
transformResponse(response: MapEntriesToReleases.Response) {
|
||||
return response.data;
|
||||
},
|
||||
providesTags: [{ type: 'EntriesInRelease' }],
|
||||
}),
|
||||
};
|
||||
},
|
||||
@ -292,6 +313,7 @@ const {
|
||||
usePublishReleaseMutation,
|
||||
useDeleteReleaseActionMutation,
|
||||
useDeleteReleaseMutation,
|
||||
useGetMappedEntriesInReleasesQuery,
|
||||
} = releaseApi;
|
||||
|
||||
export {
|
||||
@ -307,5 +329,6 @@ export {
|
||||
usePublishReleaseMutation,
|
||||
useDeleteReleaseActionMutation,
|
||||
useDeleteReleaseMutation,
|
||||
useGetMappedEntriesInReleasesQuery,
|
||||
releaseApi,
|
||||
};
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
"content-manager-list-view.add-to-release.notification.success.title": "Successfully added to release.",
|
||||
"content-manager-list-view.add-to-release.notification.success.message": "{entriesAlreadyInRelease} out of {totalEntries} entries were already in the release.",
|
||||
"content-manager.notification.entry-error": "Failed to get entry data",
|
||||
"content-manager.list-view.releases-number": "{number} {number, plural, one {release} other {releases}}",
|
||||
"plugin.name": "Releases",
|
||||
"pages.Releases.title": "Releases",
|
||||
"pages.Releases.header-subtitle": "Create and manage content updates",
|
||||
|
||||
@ -55,8 +55,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@reduxjs/toolkit": "1.9.7",
|
||||
"@strapi/design-system": "1.17.0",
|
||||
"@strapi/icons": "1.16.0",
|
||||
"@strapi/design-system": "1.18.0",
|
||||
"@strapi/icons": "1.18.0",
|
||||
"@strapi/types": "workspace:*",
|
||||
"@strapi/utils": "5.0.0-beta.3",
|
||||
"axios": "1.6.8",
|
||||
|
||||
@ -265,4 +265,85 @@ describe('Release controller', () => {
|
||||
expect(strapi.service('admin::user').sanitizeUser).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('mapEntriesToReleases', () => {
|
||||
it('should throw an error if contentTypeUid or entriesIds are missing', async () => {
|
||||
const ctx = {
|
||||
query: {},
|
||||
};
|
||||
|
||||
// @ts-expect-error partial context
|
||||
await expect(() => releaseController.mapEntriesToReleases(ctx)).rejects.toThrow(
|
||||
'Missing required query parameters'
|
||||
);
|
||||
});
|
||||
|
||||
it('should call findManyWithContentTypeEntryAttached with correct parameters', async () => {
|
||||
const ctx = {
|
||||
query: {
|
||||
contentTypeUid: 'api::kitchensink.kitchensink',
|
||||
entriesIds: [1, 2, 3],
|
||||
},
|
||||
};
|
||||
|
||||
const mockRelease = {
|
||||
id: 1,
|
||||
name: 'Test Release',
|
||||
actions: [
|
||||
{
|
||||
entry: {
|
||||
id: 1,
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
mockFindManyWithContentTypeEntryAttached.mockResolvedValue([mockRelease]);
|
||||
|
||||
// @ts-expect-error partial context
|
||||
await releaseController.mapEntriesToReleases(ctx);
|
||||
|
||||
expect(mockFindManyWithContentTypeEntryAttached).toHaveBeenCalledWith(
|
||||
'api::kitchensink.kitchensink',
|
||||
[1, 2, 3]
|
||||
);
|
||||
});
|
||||
|
||||
it('should map entries to releases correctly', async () => {
|
||||
const ctx = {
|
||||
query: {
|
||||
contentTypeUid: 'api::kitchensink.kitchensink',
|
||||
entriesIds: [1, 2, 3],
|
||||
},
|
||||
body: { data: {} },
|
||||
};
|
||||
|
||||
const mockRelease = {
|
||||
id: 1,
|
||||
name: 'Test Release',
|
||||
actions: [
|
||||
{
|
||||
entry: {
|
||||
id: 1,
|
||||
},
|
||||
},
|
||||
{
|
||||
entry: {
|
||||
id: 2,
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
mockFindManyWithContentTypeEntryAttached.mockResolvedValue([mockRelease]);
|
||||
|
||||
// @ts-expect-error partial context
|
||||
await releaseController.mapEntriesToReleases(ctx);
|
||||
|
||||
expect(ctx.body.data).toEqual({
|
||||
1: [{ id: 1, name: 'Test Release' }],
|
||||
2: [{ id: 1, name: 'Test Release' }],
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -11,6 +11,7 @@ import type {
|
||||
DeleteRelease,
|
||||
GetContentTypeEntryReleases,
|
||||
GetReleases,
|
||||
MapEntriesToReleases,
|
||||
} from '../../../shared/contracts/releases';
|
||||
import type { UserInfo } from '../../../shared/types';
|
||||
import { getService } from '../utils';
|
||||
@ -106,6 +107,42 @@ const releaseController = {
|
||||
ctx.body = { data };
|
||||
},
|
||||
|
||||
async mapEntriesToReleases(ctx: Koa.Context) {
|
||||
const { contentTypeUid, entriesIds } = ctx.query;
|
||||
|
||||
if (!contentTypeUid || !entriesIds) {
|
||||
throw new errors.ValidationError('Missing required query parameters');
|
||||
}
|
||||
|
||||
const releaseService = getService('release', { strapi });
|
||||
|
||||
const releasesWithActions = await releaseService.findManyWithContentTypeEntryAttached(
|
||||
contentTypeUid,
|
||||
entriesIds
|
||||
);
|
||||
|
||||
const mappedEntriesInReleases = releasesWithActions.reduce(
|
||||
// TODO: Fix for v5 removed mappedEntriedToRelease
|
||||
(acc: MapEntriesToReleases.Response['data'], release: Release) => {
|
||||
release.actions.forEach((action) => {
|
||||
if (!acc[action.entry.id]) {
|
||||
acc[action.entry.id] = [{ id: release.id, name: release.name }];
|
||||
} else {
|
||||
acc[action.entry.id].push({ id: release.id, name: release.name });
|
||||
}
|
||||
});
|
||||
|
||||
return acc;
|
||||
},
|
||||
// TODO: Fix for v5 removed mappedEntriedToRelease
|
||||
{} as MapEntriesToReleases.Response['data']
|
||||
);
|
||||
|
||||
ctx.body = {
|
||||
data: mappedEntriesInReleases,
|
||||
};
|
||||
},
|
||||
|
||||
async create(ctx: Koa.Context) {
|
||||
const user: UserInfo = ctx.state.user;
|
||||
const releaseArgs = ctx.request.body as CreateRelease.Request['body'];
|
||||
@ -121,9 +158,7 @@ const releaseController = {
|
||||
});
|
||||
|
||||
ctx.created({
|
||||
body: {
|
||||
data: await permissionsManager.sanitizeOutput(release),
|
||||
},
|
||||
data: await permissionsManager.sanitizeOutput(release),
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
@ -187,6 +187,11 @@ export async function disableContentTypeLocalized({ oldContentTypes, contentType
|
||||
return;
|
||||
}
|
||||
|
||||
const i18nPlugin = strapi.plugin('i18n');
|
||||
if (!i18nPlugin) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const uid in contentTypes) {
|
||||
if (!oldContentTypes[uid]) {
|
||||
continue;
|
||||
@ -195,7 +200,6 @@ export async function disableContentTypeLocalized({ oldContentTypes, contentType
|
||||
const oldContentType = oldContentTypes[uid];
|
||||
const contentType = contentTypes[uid];
|
||||
|
||||
const i18nPlugin = strapi.plugin('i18n');
|
||||
const { isLocalizedContentType } = i18nPlugin.service('content-types');
|
||||
|
||||
// if i18N is disabled remove non default locales before sync
|
||||
@ -216,6 +220,11 @@ export async function enableContentTypeLocalized({ oldContentTypes, contentTypes
|
||||
return;
|
||||
}
|
||||
|
||||
const i18nPlugin = strapi.plugin('i18n');
|
||||
if (!i18nPlugin) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const uid in contentTypes) {
|
||||
if (!oldContentTypes[uid]) {
|
||||
continue;
|
||||
@ -224,7 +233,6 @@ export async function enableContentTypeLocalized({ oldContentTypes, contentTypes
|
||||
const oldContentType = oldContentTypes[uid];
|
||||
const contentType = contentTypes[uid];
|
||||
|
||||
const i18nPlugin = strapi.plugin('i18n');
|
||||
const { isLocalizedContentType } = i18nPlugin.service('content-types');
|
||||
const { getDefaultLocale } = i18nPlugin.service('locales');
|
||||
|
||||
|
||||
@ -1,6 +1,22 @@
|
||||
export default {
|
||||
type: 'admin',
|
||||
routes: [
|
||||
{
|
||||
method: 'GET',
|
||||
path: '/mapEntriesToReleases',
|
||||
handler: 'release.mapEntriesToReleases',
|
||||
config: {
|
||||
policies: [
|
||||
'admin::isAuthenticatedAdmin',
|
||||
{
|
||||
name: 'admin::hasPermissions',
|
||||
config: {
|
||||
actions: ['plugin::content-releases.read'],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
method: 'POST',
|
||||
path: '/',
|
||||
|
||||
@ -516,7 +516,7 @@ describe('release service', () => {
|
||||
1
|
||||
);
|
||||
|
||||
expect(releases).toEqual([{ name: 'test release', action: { type: 'publish' } }]);
|
||||
expect(releases).toEqual([{ name: 'test release', actions: [{ type: 'publish' }] }]);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@ -14,6 +14,7 @@ import type {
|
||||
Release,
|
||||
DeleteRelease,
|
||||
GetContentTypeEntryReleases,
|
||||
MapEntriesToReleases,
|
||||
} from '../../../shared/contracts/releases';
|
||||
import type {
|
||||
CreateReleaseAction,
|
||||
@ -260,13 +261,23 @@ const createReleaseService = ({ strapi }: { strapi: Core.Strapi }) => {
|
||||
|
||||
async findManyWithContentTypeEntryAttached(
|
||||
contentTypeUid: GetContentTypeEntryReleases.Request['query']['contentTypeUid'],
|
||||
entryId: GetContentTypeEntryReleases.Request['query']['entryId']
|
||||
entriesIds:
|
||||
| GetContentTypeEntryReleases.Request['query']['entryId']
|
||||
| MapEntriesToReleases.Request['query']['entriesIds']
|
||||
) {
|
||||
// entriesIds could be an array or a single value
|
||||
let entries = entriesIds;
|
||||
if (!Array.isArray(entriesIds)) {
|
||||
entries = [entriesIds];
|
||||
}
|
||||
|
||||
const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({
|
||||
where: {
|
||||
actions: {
|
||||
target_type: contentTypeUid,
|
||||
target_id: entryId,
|
||||
target_id: {
|
||||
$in: entries,
|
||||
},
|
||||
},
|
||||
releasedAt: {
|
||||
$null: true,
|
||||
@ -277,7 +288,14 @@ const createReleaseService = ({ strapi }: { strapi: Core.Strapi }) => {
|
||||
actions: {
|
||||
where: {
|
||||
target_type: contentTypeUid,
|
||||
target_id: entryId,
|
||||
target_id: {
|
||||
$in: entries,
|
||||
},
|
||||
},
|
||||
populate: {
|
||||
entry: {
|
||||
select: ['id'],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -285,14 +303,14 @@ const createReleaseService = ({ strapi }: { strapi: Core.Strapi }) => {
|
||||
|
||||
return releases.map((release) => {
|
||||
if (release.actions?.length) {
|
||||
const [actionForEntry] = release.actions;
|
||||
const actionsForEntry = release.actions;
|
||||
|
||||
// Remove the actions key to replace it with an action key
|
||||
delete release.actions;
|
||||
|
||||
return {
|
||||
...release,
|
||||
action: actionForEntry,
|
||||
actions: actionsForEntry,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@ -27,7 +27,7 @@ export interface ReleaseDataResponse extends Omit<Release, 'actions'> {
|
||||
}
|
||||
|
||||
export interface ReleaseForContentTypeEntryDataResponse extends Omit<Release, 'actions'> {
|
||||
action: ReleaseAction;
|
||||
actions: ReleaseAction[];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -72,6 +72,24 @@ export declare namespace GetContentTypeEntryReleases {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /content-releases/mapEntriesToReleases - Map entries to releases
|
||||
*/
|
||||
export declare namespace MapEntriesToReleases {
|
||||
export interface Request {
|
||||
query: {
|
||||
contentTypeUid: ReleaseAction['contentType'];
|
||||
entriesIds: ReleaseAction['entry']['id'][];
|
||||
};
|
||||
}
|
||||
|
||||
export interface Response {
|
||||
data: {
|
||||
[entryId: ReleaseAction['entry']['id']]: Pick<Release, 'id' | 'name'>[];
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /content-releases/:id - Get a single release
|
||||
*/
|
||||
|
||||
@ -58,9 +58,9 @@
|
||||
"dependencies": {
|
||||
"@reduxjs/toolkit": "1.9.7",
|
||||
"@sindresorhus/slugify": "1.1.0",
|
||||
"@strapi/design-system": "1.17.0",
|
||||
"@strapi/design-system": "1.18.0",
|
||||
"@strapi/generators": "5.0.0-beta.3",
|
||||
"@strapi/icons": "1.16.0",
|
||||
"@strapi/icons": "1.18.0",
|
||||
"@strapi/utils": "5.0.0-beta.3",
|
||||
"date-fns": "2.30.0",
|
||||
"fs-extra": "10.1.0",
|
||||
|
||||
@ -52,8 +52,8 @@
|
||||
"watch": "pack-up watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/design-system": "1.17.0",
|
||||
"@strapi/icons": "1.16.0",
|
||||
"@strapi/design-system": "1.18.0",
|
||||
"@strapi/icons": "1.18.0",
|
||||
"@strapi/provider-email-sendmail": "5.0.0-beta.3",
|
||||
"@strapi/utils": "5.0.0-beta.3",
|
||||
"lodash": "4.17.21",
|
||||
|
||||
@ -13,13 +13,6 @@ exports[`AddStage should render a list of stages 1`] = `
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
.c8 {
|
||||
font-size: 0.75rem;
|
||||
line-height: 1.33;
|
||||
font-weight: 600;
|
||||
color: #8e8ea9;
|
||||
}
|
||||
|
||||
.c0 {
|
||||
margin-left: -250px;
|
||||
position: fixed;
|
||||
@ -29,15 +22,6 @@ exports[`AddStage should render a list of stages 1`] = `
|
||||
width: 31.25rem;
|
||||
}
|
||||
|
||||
.c2 {
|
||||
background: #ffffff;
|
||||
padding-top: 12px;
|
||||
padding-right: 16px;
|
||||
padding-bottom: 12px;
|
||||
padding-left: 16px;
|
||||
box-shadow: 0px 1px 4px rgba(33,33,52,0.1);
|
||||
}
|
||||
|
||||
.c1 {
|
||||
-webkit-align-items: stretch;
|
||||
-webkit-box-align: stretch;
|
||||
@ -53,6 +37,22 @@ exports[`AddStage should render a list of stages 1`] = `
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.c8 {
|
||||
font-size: 0.75rem;
|
||||
line-height: 1.33;
|
||||
font-weight: 600;
|
||||
color: #8e8ea9;
|
||||
}
|
||||
|
||||
.c2 {
|
||||
background: #ffffff;
|
||||
padding-top: 12px;
|
||||
padding-right: 16px;
|
||||
padding-bottom: 12px;
|
||||
padding-left: 16px;
|
||||
box-shadow: 0px 1px 4px rgba(33,33,52,0.1);
|
||||
}
|
||||
|
||||
.c4 {
|
||||
-webkit-align-items: center;
|
||||
-webkit-box-align: center;
|
||||
|
||||
@ -180,6 +180,10 @@
|
||||
"yup": "0.32.9"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@strapi/ts-zen": "^0.2.0",
|
||||
"@types/bcryptjs": "2.4.3",
|
||||
"@types/configstore": "5.0.1",
|
||||
"@types/delegates": "1.0.0",
|
||||
"@types/find-root": "1.1.4",
|
||||
"@types/jest": "29.5.2",
|
||||
"@types/lodash": "^4.14.191",
|
||||
|
||||
@ -109,7 +109,9 @@ exports[`BrowseStep renders and match snapshot 1`] = `
|
||||
|
||||
.c6 {
|
||||
background: #ffffff;
|
||||
padding-top: 4px;
|
||||
padding-right: 12px;
|
||||
padding-bottom: 4px;
|
||||
padding-left: 12px;
|
||||
border-radius: 4px;
|
||||
position: relative;
|
||||
|
||||
@ -48,7 +48,9 @@ exports[`Upload - Configure | Settings initial render renders and matches the sn
|
||||
|
||||
.c7 {
|
||||
background: #ffffff;
|
||||
padding-top: 4px;
|
||||
padding-right: 12px;
|
||||
padding-bottom: 4px;
|
||||
padding-left: 12px;
|
||||
border-radius: 4px;
|
||||
position: relative;
|
||||
|
||||
@ -110,7 +110,9 @@ exports[`Upload - Configure initial render renders and matches the snapshot 1`]
|
||||
|
||||
.c26 {
|
||||
background: #ffffff;
|
||||
padding-top: 4px;
|
||||
padding-right: 12px;
|
||||
padding-bottom: 4px;
|
||||
padding-left: 12px;
|
||||
border-radius: 4px;
|
||||
position: relative;
|
||||
|
||||
@ -48,8 +48,8 @@
|
||||
"watch": "pack-up watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/design-system": "1.17.0",
|
||||
"@strapi/icons": "1.16.0",
|
||||
"@strapi/design-system": "1.18.0",
|
||||
"@strapi/icons": "1.18.0",
|
||||
"@strapi/provider-upload-local": "5.0.0-beta.3",
|
||||
"@strapi/utils": "5.0.0-beta.3",
|
||||
"axios": "1.6.8",
|
||||
|
||||
@ -36,8 +36,8 @@
|
||||
"test:ts:front": "run -T tsc -p admin/tsconfig.json"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/design-system": "1.17.0",
|
||||
"@strapi/icons": "1.16.0",
|
||||
"@strapi/design-system": "1.18.0",
|
||||
"@strapi/icons": "1.18.0",
|
||||
"react-intl": "6.6.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@ -53,8 +53,8 @@
|
||||
"watch": "strapi plugin:watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/design-system": "1.17.0",
|
||||
"@strapi/icons": "1.16.0",
|
||||
"@strapi/design-system": "1.18.0",
|
||||
"@strapi/icons": "1.18.0",
|
||||
"react-colorful": "5.6.1",
|
||||
"react-intl": "6.6.2"
|
||||
},
|
||||
|
||||
@ -54,8 +54,8 @@
|
||||
"dependencies": {
|
||||
"@reduxjs/toolkit": "1.9.7",
|
||||
"@strapi/admin": "5.0.0-beta.3",
|
||||
"@strapi/design-system": "1.17.0",
|
||||
"@strapi/icons": "1.16.0",
|
||||
"@strapi/design-system": "1.18.0",
|
||||
"@strapi/icons": "1.18.0",
|
||||
"@strapi/utils": "5.0.0-beta.3",
|
||||
"axios": "1.6.8",
|
||||
"bcryptjs": "2.4.3",
|
||||
|
||||
@ -53,8 +53,8 @@
|
||||
"@graphql-tools/schema": "8.5.1",
|
||||
"@graphql-tools/utils": "^8.13.1",
|
||||
"@koa/cors": "5.0.0",
|
||||
"@strapi/design-system": "1.17.0",
|
||||
"@strapi/icons": "1.16.0",
|
||||
"@strapi/design-system": "1.18.0",
|
||||
"@strapi/icons": "1.18.0",
|
||||
"@strapi/utils": "5.0.0-beta.3",
|
||||
"graphql": "^16.8.1",
|
||||
"graphql-depth-limit": "^1.1.0",
|
||||
|
||||
@ -0,0 +1,42 @@
|
||||
import { Schema } from '@strapi/types';
|
||||
/* -------------------------------------------------------------------------------------------------
|
||||
* addLocaleToReleasesHook
|
||||
* -----------------------------------------------------------------------------------------------*/
|
||||
interface AddLocaleToReleasesHookArgs {
|
||||
displayedHeaders: {
|
||||
key: string;
|
||||
fieldSchema: Schema.Attribute.Kind | 'custom';
|
||||
metadatas: {
|
||||
label: { id: string; defaultMessage: string };
|
||||
searchable: boolean;
|
||||
sortable: boolean;
|
||||
};
|
||||
name: string;
|
||||
}[];
|
||||
hasI18nEnabled: boolean;
|
||||
}
|
||||
|
||||
const addLocaleToReleasesHook = ({ displayedHeaders = [] }: AddLocaleToReleasesHookArgs) => {
|
||||
return {
|
||||
displayedHeaders: [
|
||||
// TODO: Fix when migrating to v5
|
||||
// ...displayedHeaders,
|
||||
{
|
||||
key: '__locale__',
|
||||
fieldSchema: { type: 'string' },
|
||||
metadatas: {
|
||||
label: {
|
||||
id: 'content-releases.page.ReleaseDetails.table.header.label.locale',
|
||||
defaultMessage: 'locale',
|
||||
},
|
||||
searchable: false,
|
||||
sortable: false,
|
||||
},
|
||||
name: 'locale',
|
||||
},
|
||||
],
|
||||
hasI18nEnabled: true,
|
||||
};
|
||||
};
|
||||
|
||||
export { addLocaleToReleasesHook };
|
||||
@ -13,6 +13,7 @@ import { LocalePicker } from './components/LocalePicker';
|
||||
import { PERMISSIONS } from './constants';
|
||||
import { mutateEditViewHook } from './contentManagerHooks/editView';
|
||||
import { addColumnToTableHook } from './contentManagerHooks/listView';
|
||||
import { addLocaleToReleasesHook } from './contentReleasesHooks/releaseDetailsView';
|
||||
import { extendCTBAttributeInitialDataMiddleware } from './middlewares/extendCTBAttributeInitialData';
|
||||
import { extendCTBInitialDataMiddleware } from './middlewares/extendCTBInitialData';
|
||||
import { localeMiddleware } from './middlewares/rbac-middleware';
|
||||
@ -45,6 +46,11 @@ export default {
|
||||
// // Hook that adds a column into the CM's LV table
|
||||
app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addColumnToTableHook);
|
||||
app.registerHook('Admin/CM/pages/EditView/mutate-edit-view-layout', mutateEditViewHook);
|
||||
// Hooks that checks if the locale is present in the release
|
||||
app.registerHook(
|
||||
'ContentReleases/pages/ReleaseDetails/add-locale-in-releases',
|
||||
addLocaleToReleasesHook
|
||||
);
|
||||
|
||||
// Add the settings link
|
||||
app.addSettingsLink('global', {
|
||||
|
||||
@ -53,8 +53,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@reduxjs/toolkit": "1.9.7",
|
||||
"@strapi/design-system": "1.17.0",
|
||||
"@strapi/icons": "1.16.0",
|
||||
"@strapi/design-system": "1.18.0",
|
||||
"@strapi/icons": "1.18.0",
|
||||
"@strapi/utils": "5.0.0-beta.3",
|
||||
"axios": "1.6.8",
|
||||
"lodash": "4.17.21",
|
||||
|
||||
@ -51,8 +51,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@sentry/node": "6.19.7",
|
||||
"@strapi/design-system": "1.17.0",
|
||||
"@strapi/icons": "1.16.0"
|
||||
"@strapi/design-system": "1.18.0",
|
||||
"@strapi/icons": "1.18.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@strapi/pack-up": "5.0.0",
|
||||
|
||||
@ -46,8 +46,8 @@
|
||||
"watch": "pack-up watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/design-system": "1.17.0",
|
||||
"@strapi/icons": "1.16.0",
|
||||
"@strapi/design-system": "1.18.0",
|
||||
"@strapi/icons": "1.18.0",
|
||||
"@strapi/utils": "5.0.0-beta.3",
|
||||
"bcryptjs": "2.4.3",
|
||||
"formik": "2.4.5",
|
||||
|
||||
@ -93,31 +93,52 @@ describeOnCondition(edition === 'EE')('Releases page', () => {
|
||||
});
|
||||
|
||||
test.skip('A user should be able to perform bulk release on entries', async ({ page }) => {
|
||||
await navToHeader(page, ['Content Manager', 'Article'], 'Article');
|
||||
await test.step('bulk release', async () => {
|
||||
// Navigate to the releases page
|
||||
await page.getByRole('link', { name: 'Releases' }).click();
|
||||
await page.getByRole('button', { name: 'New release' }).click();
|
||||
await expect(page.getByRole('dialog', { name: 'New release' })).toBeVisible();
|
||||
// Create a new release
|
||||
const newReleaseName = 'The Diamond Dogs';
|
||||
await page.getByRole('textbox', { name: 'Name' }).fill(newReleaseName);
|
||||
// Uncheck default scheduling of a release and save
|
||||
await page.getByRole('checkbox', { name: 'Schedule release' }).uncheck();
|
||||
await page.getByRole('button', { name: 'Continue' }).click();
|
||||
// Wait for client side redirect to created release
|
||||
await page.waitForURL('/admin/plugins/content-releases/*');
|
||||
await expect(page.getByRole('heading', { name: newReleaseName })).toBeVisible();
|
||||
|
||||
const publishedItems = page.getByRole('gridcell', { name: 'published' });
|
||||
expect(publishedItems).toHaveCount(2);
|
||||
const checkbox = page.getByRole('checkbox', { name: 'Select all entries' });
|
||||
// Navigate to the content manager
|
||||
await page.getByRole('link', { name: 'Open the Content Manager' }).click();
|
||||
await expect(page).toHaveTitle('Content Manager');
|
||||
await expect(page.getByRole('heading', { name: 'Article' })).toBeVisible();
|
||||
expect(page.getByRole('gridcell', { name: 'published' })).toHaveCount(2);
|
||||
|
||||
// Select all entries to release
|
||||
await checkbox.check();
|
||||
const addToRelease = page.getByRole('button', { name: 'add to release' });
|
||||
await addToRelease.click();
|
||||
// Select all entries to release
|
||||
await page.getByRole('checkbox', { name: 'Select all entries' }).check();
|
||||
await page.getByRole('button', { name: 'add to release' }).click();
|
||||
|
||||
// Wait for the add to release dialog to appear
|
||||
await page
|
||||
.getByRole('combobox', {
|
||||
name: 'Select a release',
|
||||
})
|
||||
.click();
|
||||
// Wait for the add to release dialog to appear
|
||||
await page
|
||||
.getByRole('combobox', {
|
||||
name: 'Select a release',
|
||||
})
|
||||
.click();
|
||||
|
||||
await page.getByRole('option', { name: 'Trent Crimm: The Independent' }).click();
|
||||
const unpublishButton = page.getByText('unpublish', { exact: true });
|
||||
await unpublishButton.click();
|
||||
await page.getByText('continue').click();
|
||||
await page.getByText(/Successfully added to release./).waitFor({
|
||||
state: 'visible',
|
||||
timeout: 5000,
|
||||
await page.getByRole('option', { name: 'The Diamond Dogs' }).click();
|
||||
await page.getByText('unpublish', { exact: true }).click();
|
||||
await page.getByText('continue').click();
|
||||
await page.getByText(/Successfully added to release./).waitFor({
|
||||
state: 'visible',
|
||||
timeout: 5000,
|
||||
});
|
||||
});
|
||||
|
||||
await test.step('releases should be updated in the release column of list view', async () => {
|
||||
const releaseColumn = page.getByRole('button', { name: '2 releases' });
|
||||
await releaseColumn.first().click();
|
||||
await expect(page.getByText('The Diamond Dogs')).toBeVisible();
|
||||
await expect(page.getByText('Trent Crimm: The Independent')).toBeVisible();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -89,6 +89,7 @@ test.describe('Settings', () => {
|
||||
.fill('Magliette');
|
||||
await page.getByRole('button', { name: 'There is 1 missing component' }).click();
|
||||
await page.getByRole('button', { name: 'Hero image' }).click();
|
||||
await expect(page.getByText('content (2)')).toBeVisible();
|
||||
await page.getByRole('button', { name: 'Publish' }).click();
|
||||
await findAndClose(page, 'Success:Published');
|
||||
});
|
||||
|
||||
119
yarn.lock
119
yarn.lock
@ -7113,8 +7113,8 @@ __metadata:
|
||||
"@reduxjs/toolkit": "npm:1.9.7"
|
||||
"@strapi/admin-test-utils": "npm:5.0.0-beta.3"
|
||||
"@strapi/data-transfer": "npm:5.0.0-beta.3"
|
||||
"@strapi/design-system": "npm:1.17.0"
|
||||
"@strapi/icons": "npm:1.16.0"
|
||||
"@strapi/design-system": "npm:1.18.0"
|
||||
"@strapi/icons": "npm:1.18.0"
|
||||
"@strapi/pack-up": "npm:5.0.0"
|
||||
"@strapi/permissions": "npm:5.0.0-beta.3"
|
||||
"@strapi/provider-audit-logs-local": "npm:5.0.0-beta.3"
|
||||
@ -7208,8 +7208,8 @@ __metadata:
|
||||
"@reduxjs/toolkit": "npm:1.9.7"
|
||||
"@strapi/admin": "npm:5.0.0-beta.3"
|
||||
"@strapi/admin-test-utils": "npm:5.0.0-beta.3"
|
||||
"@strapi/design-system": "npm:1.17.0"
|
||||
"@strapi/icons": "npm:1.16.0"
|
||||
"@strapi/design-system": "npm:1.18.0"
|
||||
"@strapi/icons": "npm:1.18.0"
|
||||
"@strapi/pack-up": "npm:5.0.0"
|
||||
"@strapi/plugin-content-manager": "npm:5.0.0-beta.3"
|
||||
"@strapi/types": "workspace:*"
|
||||
@ -7382,9 +7382,9 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@strapi/design-system@npm:1.18.0-typescript.0":
|
||||
version: 1.18.0-typescript.0
|
||||
resolution: "@strapi/design-system@npm:1.18.0-typescript.0"
|
||||
"@strapi/design-system@npm:1.19.0-typescript.0":
|
||||
version: 1.19.0-typescript.0
|
||||
resolution: "@strapi/design-system@npm:1.19.0-typescript.0"
|
||||
dependencies:
|
||||
"@codemirror/lang-json": "npm:^6.0.1"
|
||||
"@floating-ui/react-dom": "npm:^2.0.8"
|
||||
@ -7393,19 +7393,19 @@ __metadata:
|
||||
"@radix-ui/react-dismissable-layer": "npm:^1.0.5"
|
||||
"@radix-ui/react-dropdown-menu": "npm:^2.0.6"
|
||||
"@radix-ui/react-focus-scope": "npm:1.0.4"
|
||||
"@strapi/ui-primitives": "npm:1.18.0-typescript.0"
|
||||
"@uiw/react-codemirror": "npm:^4.21.24"
|
||||
aria-hidden: "npm:^1.2.3"
|
||||
"@strapi/ui-primitives": "npm:1.19.0-typescript.0"
|
||||
"@uiw/react-codemirror": "npm:^4.21.25"
|
||||
aria-hidden: "npm:^1.2.4"
|
||||
compute-scroll-into-view: "npm:^3.1.0"
|
||||
prop-types: "npm:^15.8.1"
|
||||
react-remove-scroll: "npm:^2.5.9"
|
||||
peerDependencies:
|
||||
"@strapi/icons": 1.18.0-typescript.0
|
||||
"@strapi/icons": 1.19.0-typescript.0
|
||||
react: ^17.0.0 || ^18.0.0
|
||||
react-dom: ^17.0.0 || ^18.0.0
|
||||
react-router-dom: ^5.2.0
|
||||
styled-components: ^5.2.1
|
||||
checksum: 718db7cc857eb8a027b64ba3f2286c044bb0885ad13e2b5805379362e84f09bca2d98cb93715931eaaa8b64c0ec872bcda1c948f2faf5f7fb89310a19905275a
|
||||
checksum: faa85c3056eb6260ecca9dccc6418a94942b7d4ef8996885920fd5525460a0b1bf4ace16979dcd504c637f43205d316fdb22634deaea5667cb2df3901952dcd4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@ -7488,6 +7488,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@strapi/icons@npm:1.18.0":
|
||||
version: 1.18.0
|
||||
resolution: "@strapi/icons@npm:1.18.0"
|
||||
peerDependencies:
|
||||
react: ^17.0.0 || ^18.0.0
|
||||
react-dom: ^17.0.0 || ^18.0.0
|
||||
checksum: b7f27d1293f56e402fdbc12e91a2a775c33dd1ca5bf901f78165136ef911fd44f1b4978919bf8eef1d6c1483afb7e8e6c177df4b54229632404ce8a989fba7f1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@strapi/logger@npm:5.0.0-beta.3, @strapi/logger@workspace:packages/utils/logger":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@strapi/logger@workspace:packages/utils/logger"
|
||||
@ -7550,8 +7560,8 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@strapi/plugin-cloud@workspace:packages/plugins/cloud"
|
||||
dependencies:
|
||||
"@strapi/design-system": "npm:1.17.0"
|
||||
"@strapi/icons": "npm:1.16.0"
|
||||
"@strapi/design-system": "npm:1.18.0"
|
||||
"@strapi/icons": "npm:1.18.0"
|
||||
"@strapi/strapi": "npm:5.0.0-beta.3"
|
||||
"@types/react": "npm:18.2.66"
|
||||
"@types/react-dom": "npm:18.2.22"
|
||||
@ -7577,8 +7587,8 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@strapi/plugin-color-picker@workspace:packages/plugins/color-picker"
|
||||
dependencies:
|
||||
"@strapi/design-system": "npm:1.17.0"
|
||||
"@strapi/icons": "npm:1.16.0"
|
||||
"@strapi/design-system": "npm:1.18.0"
|
||||
"@strapi/icons": "npm:1.18.0"
|
||||
"@strapi/strapi": "npm:5.0.0-beta.3"
|
||||
"@testing-library/react": "npm:14.0.0"
|
||||
"@testing-library/user-event": "npm:14.4.3"
|
||||
@ -7608,8 +7618,8 @@ __metadata:
|
||||
"@sindresorhus/slugify": "npm:1.1.0"
|
||||
"@strapi/admin": "npm:5.0.0-beta.3"
|
||||
"@strapi/database": "workspace:*"
|
||||
"@strapi/design-system": "npm:1.17.0"
|
||||
"@strapi/icons": "npm:1.16.0"
|
||||
"@strapi/design-system": "npm:1.18.0"
|
||||
"@strapi/icons": "npm:1.18.0"
|
||||
"@strapi/pack-up": "npm:5.0.0"
|
||||
"@strapi/types": "npm:5.0.0-beta.3"
|
||||
"@strapi/utils": "npm:5.0.0-beta.3"
|
||||
@ -7670,9 +7680,9 @@ __metadata:
|
||||
"@reduxjs/toolkit": "npm:1.9.7"
|
||||
"@sindresorhus/slugify": "npm:1.1.0"
|
||||
"@strapi/admin": "npm:5.0.0-beta.3"
|
||||
"@strapi/design-system": "npm:1.17.0"
|
||||
"@strapi/design-system": "npm:1.18.0"
|
||||
"@strapi/generators": "npm:5.0.0-beta.3"
|
||||
"@strapi/icons": "npm:1.16.0"
|
||||
"@strapi/icons": "npm:1.18.0"
|
||||
"@strapi/pack-up": "npm:5.0.0"
|
||||
"@strapi/types": "npm:5.0.0-beta.3"
|
||||
"@strapi/utils": "npm:5.0.0-beta.3"
|
||||
@ -7712,8 +7722,8 @@ __metadata:
|
||||
"@reduxjs/toolkit": "npm:1.9.7"
|
||||
"@strapi/admin": "npm:5.0.0-beta.3"
|
||||
"@strapi/admin-test-utils": "npm:5.0.0-beta.3"
|
||||
"@strapi/design-system": "npm:1.17.0"
|
||||
"@strapi/icons": "npm:1.16.0"
|
||||
"@strapi/design-system": "npm:1.18.0"
|
||||
"@strapi/icons": "npm:1.18.0"
|
||||
"@strapi/pack-up": "npm:5.0.0"
|
||||
"@strapi/strapi": "npm:5.0.0-beta.3"
|
||||
"@strapi/types": "npm:5.0.0-beta.3"
|
||||
@ -7759,8 +7769,8 @@ __metadata:
|
||||
resolution: "@strapi/plugin-email@workspace:packages/core/email"
|
||||
dependencies:
|
||||
"@strapi/admin": "npm:5.0.0-beta.3"
|
||||
"@strapi/design-system": "npm:1.17.0"
|
||||
"@strapi/icons": "npm:1.16.0"
|
||||
"@strapi/design-system": "npm:1.18.0"
|
||||
"@strapi/icons": "npm:1.18.0"
|
||||
"@strapi/pack-up": "npm:5.0.0"
|
||||
"@strapi/provider-email-sendmail": "npm:5.0.0-beta.3"
|
||||
"@strapi/types": "npm:5.0.0-beta.3"
|
||||
@ -7798,8 +7808,8 @@ __metadata:
|
||||
"@graphql-tools/schema": "npm:8.5.1"
|
||||
"@graphql-tools/utils": "npm:^8.13.1"
|
||||
"@koa/cors": "npm:5.0.0"
|
||||
"@strapi/design-system": "npm:1.17.0"
|
||||
"@strapi/icons": "npm:1.16.0"
|
||||
"@strapi/design-system": "npm:1.18.0"
|
||||
"@strapi/icons": "npm:1.18.0"
|
||||
"@strapi/strapi": "npm:5.0.0-beta.3"
|
||||
"@strapi/types": "npm:5.0.0-beta.3"
|
||||
"@strapi/utils": "npm:5.0.0-beta.3"
|
||||
@ -7840,8 +7850,8 @@ __metadata:
|
||||
"@reduxjs/toolkit": "npm:1.9.7"
|
||||
"@strapi/admin": "npm:5.0.0-beta.3"
|
||||
"@strapi/admin-test-utils": "npm:5.0.0-beta.3"
|
||||
"@strapi/design-system": "npm:1.17.0"
|
||||
"@strapi/icons": "npm:1.16.0"
|
||||
"@strapi/design-system": "npm:1.18.0"
|
||||
"@strapi/icons": "npm:1.18.0"
|
||||
"@strapi/pack-up": "npm:5.0.0"
|
||||
"@strapi/plugin-content-manager": "npm:5.0.0-beta.3"
|
||||
"@strapi/types": "npm:5.0.0-beta.3"
|
||||
@ -7875,8 +7885,8 @@ __metadata:
|
||||
resolution: "@strapi/plugin-sentry@workspace:packages/plugins/sentry"
|
||||
dependencies:
|
||||
"@sentry/node": "npm:6.19.7"
|
||||
"@strapi/design-system": "npm:1.17.0"
|
||||
"@strapi/icons": "npm:1.16.0"
|
||||
"@strapi/design-system": "npm:1.18.0"
|
||||
"@strapi/icons": "npm:1.18.0"
|
||||
"@strapi/pack-up": "npm:5.0.0"
|
||||
"@strapi/strapi": "npm:5.0.0-beta.3"
|
||||
react: "npm:^18.2.0"
|
||||
@ -7897,8 +7907,8 @@ __metadata:
|
||||
resolution: "@strapi/plugin-upload@workspace:packages/core/upload"
|
||||
dependencies:
|
||||
"@strapi/admin": "npm:5.0.0-beta.3"
|
||||
"@strapi/design-system": "npm:1.17.0"
|
||||
"@strapi/icons": "npm:1.16.0"
|
||||
"@strapi/design-system": "npm:1.18.0"
|
||||
"@strapi/icons": "npm:1.18.0"
|
||||
"@strapi/pack-up": "npm:5.0.0"
|
||||
"@strapi/provider-upload-local": "npm:5.0.0-beta.3"
|
||||
"@strapi/types": "npm:5.0.0-beta.3"
|
||||
@ -7950,8 +7960,8 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@strapi/plugin-users-permissions@workspace:packages/plugins/users-permissions"
|
||||
dependencies:
|
||||
"@strapi/design-system": "npm:1.17.0"
|
||||
"@strapi/icons": "npm:1.16.0"
|
||||
"@strapi/design-system": "npm:1.18.0"
|
||||
"@strapi/icons": "npm:1.18.0"
|
||||
"@strapi/pack-up": "npm:5.0.0"
|
||||
"@strapi/strapi": "npm:5.0.0-beta.3"
|
||||
"@strapi/utils": "npm:5.0.0-beta.3"
|
||||
@ -8164,9 +8174,13 @@ __metadata:
|
||||
"@strapi/plugin-i18n": "npm:5.0.0-beta.3"
|
||||
"@strapi/plugin-upload": "npm:5.0.0-beta.3"
|
||||
"@strapi/review-workflows": "npm:5.0.0-beta.3"
|
||||
"@strapi/ts-zen": "npm:^0.2.0"
|
||||
"@strapi/types": "npm:5.0.0-beta.3"
|
||||
"@strapi/typescript-utils": "npm:5.0.0-beta.3"
|
||||
"@strapi/utils": "npm:5.0.0-beta.3"
|
||||
"@types/bcryptjs": "npm:2.4.3"
|
||||
"@types/configstore": "npm:5.0.1"
|
||||
"@types/delegates": "npm:1.0.0"
|
||||
"@types/find-root": "npm:1.1.4"
|
||||
"@types/jest": "npm:29.5.2"
|
||||
"@types/lodash": "npm:^4.14.191"
|
||||
@ -8289,9 +8303,9 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@strapi/ui-primitives@npm:1.18.0-typescript.0":
|
||||
version: 1.18.0-typescript.0
|
||||
resolution: "@strapi/ui-primitives@npm:1.18.0-typescript.0"
|
||||
"@strapi/ui-primitives@npm:1.19.0-typescript.0":
|
||||
version: 1.19.0-typescript.0
|
||||
resolution: "@strapi/ui-primitives@npm:1.19.0-typescript.0"
|
||||
dependencies:
|
||||
"@radix-ui/number": "npm:^1.0.1"
|
||||
"@radix-ui/primitive": "npm:^1.0.1"
|
||||
@ -8317,7 +8331,7 @@ __metadata:
|
||||
peerDependencies:
|
||||
react: ^17.0.0 || ^18.0.0
|
||||
react-dom: ^17.0.0 || ^18.0.0
|
||||
checksum: 4581830e51110f22f984df6aae56a9e9babc34f3eb84f997b170929cc1763dacce21af647d0e74189269aa960646ac754d477d28c963a296e6c26fd6418520ba
|
||||
checksum: a9759061fe6ddef65321bad1db85ac9a4af876abaeaa18c79baa5d37e6ac9aabd2266318b6fddc74d297544e116b1ecbed3066813b7677ecc75207efd214c3d8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@ -10202,9 +10216,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@uiw/codemirror-extensions-basic-setup@npm:4.21.24":
|
||||
version: 4.21.24
|
||||
resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.21.24"
|
||||
"@uiw/codemirror-extensions-basic-setup@npm:4.21.25":
|
||||
version: 4.21.25
|
||||
resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.21.25"
|
||||
dependencies:
|
||||
"@codemirror/autocomplete": "npm:^6.0.0"
|
||||
"@codemirror/commands": "npm:^6.0.0"
|
||||
@ -10221,19 +10235,19 @@ __metadata:
|
||||
"@codemirror/search": ">=6.0.0"
|
||||
"@codemirror/state": ">=6.0.0"
|
||||
"@codemirror/view": ">=6.0.0"
|
||||
checksum: 79537d7a828bca8dad95a0bae2c1a0b76ae77dc7d2c68b1f71871b114a0d58a2f593bdc05965062a0b95858bebb6c3f1f016f6efdc2eff1296f469a4e5044a75
|
||||
checksum: 56b15f0e602d39b29787a601dad189e37a60a544a587e0b06ea5a817d4fcc30a4a80e1e1c4b4d51eb6ea508595cedf4787acaecf939b712fa957fd612b300fcb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@uiw/react-codemirror@npm:^4.21.24":
|
||||
version: 4.21.24
|
||||
resolution: "@uiw/react-codemirror@npm:4.21.24"
|
||||
"@uiw/react-codemirror@npm:^4.21.25":
|
||||
version: 4.21.25
|
||||
resolution: "@uiw/react-codemirror@npm:4.21.25"
|
||||
dependencies:
|
||||
"@babel/runtime": "npm:^7.18.6"
|
||||
"@codemirror/commands": "npm:^6.1.0"
|
||||
"@codemirror/state": "npm:^6.1.1"
|
||||
"@codemirror/theme-one-dark": "npm:^6.0.0"
|
||||
"@uiw/codemirror-extensions-basic-setup": "npm:4.21.24"
|
||||
"@uiw/codemirror-extensions-basic-setup": "npm:4.21.25"
|
||||
codemirror: "npm:^6.0.0"
|
||||
peerDependencies:
|
||||
"@babel/runtime": ">=7.11.0"
|
||||
@ -10243,7 +10257,7 @@ __metadata:
|
||||
codemirror: ">=6.0.0"
|
||||
react: ">=16.8.0"
|
||||
react-dom: ">=16.8.0"
|
||||
checksum: 02d1cb50595f0281b8f4f19f8bf0280f21cc9d5b2f8733c6443df72999005340d96cac15871b14f4bd905814f58579ea8efa5fda392067de5a070a26e5696bca
|
||||
checksum: 53847803dc73832d29ca7345ebff8714d57a5c66c13f0c3e1de0a0dd41190a0c85cd2e8583a0baa709e56032422a099d2431649018b7a3d78612256fb4878c25
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@ -11004,7 +11018,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"aria-hidden@npm:^1.1.1, aria-hidden@npm:^1.2.3":
|
||||
"aria-hidden@npm:^1.1.1":
|
||||
version: 1.2.3
|
||||
resolution: "aria-hidden@npm:1.2.3"
|
||||
dependencies:
|
||||
@ -14105,13 +14119,20 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.2":
|
||||
"detect-libc@npm:^2.0.0":
|
||||
version: 2.0.2
|
||||
resolution: "detect-libc@npm:2.0.2"
|
||||
checksum: 6118f30c0c425b1e56b9d2609f29bec50d35a6af0b762b6ad127271478f3bbfda7319ce869230cf1a351f2b219f39332cde290858553336d652c77b970f15de8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"detect-libc@npm:^2.0.2":
|
||||
version: 2.0.3
|
||||
resolution: "detect-libc@npm:2.0.3"
|
||||
checksum: b4ea018d623e077bd395f168a9e81db77370dde36a5b01d067f2ad7989924a81d31cb547ff764acb2aa25d50bb7fdde0b0a93bec02212b0cb430621623246d39
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"detect-newline@npm:^3.0.0":
|
||||
version: 3.1.0
|
||||
resolution: "detect-newline@npm:3.1.0"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user