@strapi/content-releases 5.12.1 → 5.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/assets/purchase-page-illustration-dark.svg.js +6 -0
- package/dist/admin/assets/purchase-page-illustration-dark.svg.js.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs +4 -0
- package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-light.svg.js +6 -0
- package/dist/admin/assets/purchase-page-illustration-light.svg.js.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-light.svg.mjs +4 -0
- package/dist/admin/assets/purchase-page-illustration-light.svg.mjs.map +1 -0
- package/dist/admin/components/EntryValidationPopover.js +344 -0
- package/dist/admin/components/EntryValidationPopover.js.map +1 -0
- package/dist/admin/components/EntryValidationPopover.mjs +342 -0
- package/dist/admin/components/EntryValidationPopover.mjs.map +1 -0
- package/dist/admin/components/RelativeTime.js +76 -0
- package/dist/admin/components/RelativeTime.js.map +1 -0
- package/dist/admin/components/RelativeTime.mjs +55 -0
- package/dist/admin/components/RelativeTime.mjs.map +1 -0
- package/dist/admin/components/ReleaseAction.js +201 -0
- package/dist/admin/components/ReleaseAction.js.map +1 -0
- package/dist/admin/components/ReleaseAction.mjs +199 -0
- package/dist/admin/components/ReleaseAction.mjs.map +1 -0
- package/dist/admin/components/ReleaseActionMenu.js +243 -0
- package/dist/admin/components/ReleaseActionMenu.js.map +1 -0
- package/dist/admin/components/ReleaseActionMenu.mjs +222 -0
- package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -0
- package/dist/admin/components/ReleaseActionModal.js +268 -0
- package/dist/admin/components/ReleaseActionModal.js.map +1 -0
- package/dist/admin/components/ReleaseActionModal.mjs +244 -0
- package/dist/admin/components/ReleaseActionModal.mjs.map +1 -0
- package/dist/admin/components/ReleaseActionOptions.js +104 -0
- package/dist/admin/components/ReleaseActionOptions.js.map +1 -0
- package/dist/admin/components/ReleaseActionOptions.mjs +102 -0
- package/dist/admin/components/ReleaseActionOptions.mjs.map +1 -0
- package/dist/admin/components/ReleaseListCell.js +103 -0
- package/dist/admin/components/ReleaseListCell.js.map +1 -0
- package/dist/admin/components/ReleaseListCell.mjs +100 -0
- package/dist/admin/components/ReleaseListCell.mjs.map +1 -0
- package/dist/admin/components/ReleaseModal.js +323 -0
- package/dist/admin/components/ReleaseModal.js.map +1 -0
- package/dist/admin/components/ReleaseModal.mjs +302 -0
- package/dist/admin/components/ReleaseModal.mjs.map +1 -0
- package/dist/admin/components/ReleasesPanel.js +138 -0
- package/dist/admin/components/ReleasesPanel.js.map +1 -0
- package/dist/admin/components/ReleasesPanel.mjs +136 -0
- package/dist/admin/components/ReleasesPanel.mjs.map +1 -0
- package/dist/admin/constants.js +77 -0
- package/dist/admin/constants.js.map +1 -0
- package/dist/admin/constants.mjs +75 -0
- package/dist/admin/constants.mjs.map +1 -0
- package/dist/admin/index.js +120 -14
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +121 -13
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/{chunks/hooks-DA5VbUAp.js → modules/hooks.js} +1 -1
- package/dist/admin/modules/hooks.js.map +1 -0
- package/dist/admin/{chunks/hooks-CFk_8Q0b.mjs → modules/hooks.mjs} +2 -2
- package/dist/admin/modules/hooks.mjs.map +1 -0
- package/dist/admin/pages/App.js +29 -0
- package/dist/admin/pages/App.js.map +1 -0
- package/dist/admin/pages/App.mjs +27 -0
- package/dist/admin/pages/App.mjs.map +1 -0
- package/dist/admin/pages/PurchaseContentReleases.js +192 -0
- package/dist/admin/pages/PurchaseContentReleases.js.map +1 -0
- package/dist/admin/pages/PurchaseContentReleases.mjs +190 -0
- package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -0
- package/dist/admin/pages/ReleaseDetailsPage.js +821 -0
- package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -0
- package/dist/admin/pages/ReleaseDetailsPage.mjs +800 -0
- package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -0
- package/dist/admin/pages/ReleasesPage.js +397 -0
- package/dist/admin/pages/ReleasesPage.js.map +1 -0
- package/dist/admin/pages/ReleasesPage.mjs +375 -0
- package/dist/admin/pages/ReleasesPage.mjs.map +1 -0
- package/dist/admin/{chunks/ReleasesSettingsPage-KRcoI1bC.js → pages/ReleasesSettingsPage.js} +9 -17
- package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -0
- package/dist/admin/{chunks/ReleasesSettingsPage-DUKdFdvx.mjs → pages/ReleasesSettingsPage.mjs} +5 -13
- package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -0
- package/dist/admin/pluginId.js +6 -0
- package/dist/admin/pluginId.js.map +1 -0
- package/dist/admin/pluginId.mjs +4 -0
- package/dist/admin/pluginId.mjs.map +1 -0
- package/dist/admin/services/release.js +464 -0
- package/dist/admin/services/release.js.map +1 -0
- package/dist/admin/services/release.mjs +447 -0
- package/dist/admin/services/release.mjs.map +1 -0
- package/dist/admin/store/hooks.js +8 -0
- package/dist/admin/store/hooks.js.map +1 -0
- package/dist/admin/store/hooks.mjs +6 -0
- package/dist/admin/store/hooks.mjs.map +1 -0
- package/dist/admin/{chunks/en-BOpqX2t_.js → translations/en.json.js} +2 -2
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/{chunks/en-aQo8Bn_U.mjs → translations/en.json.mjs} +1 -1
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/{chunks/uk-9T9su-bj.js → translations/uk.json.js} +2 -2
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/{chunks/uk-Bp9HotPq.mjs → translations/uk.json.mjs} +1 -1
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/utils/api.js +8 -0
- package/dist/admin/utils/api.js.map +1 -0
- package/dist/admin/utils/api.mjs +6 -0
- package/dist/admin/utils/api.mjs.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.js +11 -0
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
- package/dist/admin/utils/time.js +42 -0
- package/dist/admin/utils/time.js.map +1 -0
- package/dist/admin/utils/time.mjs +39 -0
- package/dist/admin/utils/time.mjs.map +1 -0
- package/dist/admin/{chunks/schemas-DS7NeFDN.js → validation/schemas.js} +1 -1
- package/dist/admin/validation/schemas.js.map +1 -0
- package/dist/admin/{chunks/schemas-DMt8h1z-.mjs → validation/schemas.mjs} +2 -2
- package/dist/admin/validation/schemas.mjs.map +1 -0
- package/dist/server/bootstrap.js +68 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/bootstrap.mjs +66 -0
- package/dist/server/bootstrap.mjs.map +1 -0
- package/dist/server/constants.js +74 -0
- package/dist/server/constants.js.map +1 -0
- package/dist/server/constants.mjs +69 -0
- package/dist/server/constants.mjs.map +1 -0
- package/dist/server/content-types/index.js +12 -0
- package/dist/server/content-types/index.js.map +1 -0
- package/dist/server/content-types/index.mjs +10 -0
- package/dist/server/content-types/index.mjs.map +1 -0
- package/dist/server/content-types/release/index.js +10 -0
- package/dist/server/content-types/release/index.js.map +1 -0
- package/dist/server/content-types/release/index.mjs +8 -0
- package/dist/server/content-types/release/index.mjs.map +1 -0
- package/dist/server/content-types/release/schema.js +58 -0
- package/dist/server/content-types/release/schema.js.map +1 -0
- package/dist/server/content-types/release/schema.mjs +56 -0
- package/dist/server/content-types/release/schema.mjs.map +1 -0
- package/dist/server/content-types/release-action/index.js +10 -0
- package/dist/server/content-types/release-action/index.js.map +1 -0
- package/dist/server/content-types/release-action/index.mjs +8 -0
- package/dist/server/content-types/release-action/index.mjs.map +1 -0
- package/dist/server/content-types/release-action/schema.js +55 -0
- package/dist/server/content-types/release-action/schema.js.map +1 -0
- package/dist/server/content-types/release-action/schema.mjs +53 -0
- package/dist/server/content-types/release-action/schema.mjs.map +1 -0
- package/dist/server/controllers/index.js +14 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/index.mjs +12 -0
- package/dist/server/controllers/index.mjs.map +1 -0
- package/dist/server/controllers/release-action.js +150 -0
- package/dist/server/controllers/release-action.js.map +1 -0
- package/dist/server/controllers/release-action.mjs +148 -0
- package/dist/server/controllers/release-action.mjs.map +1 -0
- package/dist/server/controllers/release.js +302 -0
- package/dist/server/controllers/release.js.map +1 -0
- package/dist/server/controllers/release.mjs +300 -0
- package/dist/server/controllers/release.mjs.map +1 -0
- package/dist/server/controllers/settings.js +37 -0
- package/dist/server/controllers/settings.js.map +1 -0
- package/dist/server/controllers/settings.mjs +35 -0
- package/dist/server/controllers/settings.mjs.map +1 -0
- package/dist/server/controllers/validation/release-action.js +34 -0
- package/dist/server/controllers/validation/release-action.js.map +1 -0
- package/dist/server/controllers/validation/release-action.mjs +30 -0
- package/dist/server/controllers/validation/release-action.mjs.map +1 -0
- package/dist/server/controllers/validation/release.js +26 -0
- package/dist/server/controllers/validation/release.js.map +1 -0
- package/dist/server/controllers/validation/release.mjs +22 -0
- package/dist/server/controllers/validation/release.mjs.map +1 -0
- package/dist/server/controllers/validation/settings.js +32 -0
- package/dist/server/controllers/validation/settings.js.map +1 -0
- package/dist/server/controllers/validation/settings.mjs +10 -0
- package/dist/server/controllers/validation/settings.mjs.map +1 -0
- package/dist/server/destroy.js +15 -0
- package/dist/server/destroy.js.map +1 -0
- package/dist/server/destroy.mjs +13 -0
- package/dist/server/destroy.mjs.map +1 -0
- package/dist/server/index.js +16 -2336
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +7 -2308
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/middlewares/documents.js +104 -0
- package/dist/server/middlewares/documents.js.map +1 -0
- package/dist/server/middlewares/documents.mjs +101 -0
- package/dist/server/middlewares/documents.mjs.map +1 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.js +51 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.js.map +1 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs +49 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs.map +1 -0
- package/dist/server/migrations/index.js +205 -0
- package/dist/server/migrations/index.js.map +1 -0
- package/dist/server/migrations/index.mjs +198 -0
- package/dist/server/migrations/index.mjs.map +1 -0
- package/dist/server/register.js +23 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +21 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/routes/index.js +14 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/index.mjs +12 -0
- package/dist/server/routes/index.mjs.map +1 -0
- package/dist/server/routes/release-action.js +100 -0
- package/dist/server/routes/release-action.js.map +1 -0
- package/dist/server/routes/release-action.mjs +98 -0
- package/dist/server/routes/release-action.mjs.map +1 -0
- package/dist/server/routes/release.js +154 -0
- package/dist/server/routes/release.js.map +1 -0
- package/dist/server/routes/release.mjs +152 -0
- package/dist/server/routes/release.mjs.map +1 -0
- package/dist/server/routes/settings.js +46 -0
- package/dist/server/routes/settings.js.map +1 -0
- package/dist/server/routes/settings.mjs +44 -0
- package/dist/server/routes/settings.mjs.map +1 -0
- package/dist/server/services/index.js +18 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +16 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/dist/server/services/release-action.js +323 -0
- package/dist/server/services/release-action.js.map +1 -0
- package/dist/server/services/release-action.mjs +321 -0
- package/dist/server/services/release-action.mjs.map +1 -0
- package/dist/server/services/release.js +324 -0
- package/dist/server/services/release.js.map +1 -0
- package/dist/server/services/release.mjs +322 -0
- package/dist/server/services/release.mjs.map +1 -0
- package/dist/server/services/scheduling.js +70 -0
- package/dist/server/services/scheduling.js.map +1 -0
- package/dist/server/services/scheduling.mjs +68 -0
- package/dist/server/services/scheduling.mjs.map +1 -0
- package/dist/server/services/settings.js +34 -0
- package/dist/server/services/settings.js.map +1 -0
- package/dist/server/services/settings.mjs +32 -0
- package/dist/server/services/settings.mjs.map +1 -0
- package/dist/server/services/validation.js +91 -0
- package/dist/server/services/validation.js.map +1 -0
- package/dist/server/services/validation.mjs +86 -0
- package/dist/server/services/validation.mjs.map +1 -0
- package/dist/server/utils/index.js +93 -0
- package/dist/server/utils/index.js.map +1 -0
- package/dist/server/utils/index.mjs +87 -0
- package/dist/server/utils/index.mjs.map +1 -0
- package/package.json +7 -7
- package/dist/admin/chunks/App-BkWgp5q_.mjs +0 -1845
- package/dist/admin/chunks/App-BkWgp5q_.mjs.map +0 -1
- package/dist/admin/chunks/App-CJiqPP7-.js +0 -1866
- package/dist/admin/chunks/App-CJiqPP7-.js.map +0 -1
- package/dist/admin/chunks/PurchaseContentReleases-CzayeVUD.mjs +0 -193
- package/dist/admin/chunks/PurchaseContentReleases-CzayeVUD.mjs.map +0 -1
- package/dist/admin/chunks/PurchaseContentReleases-Z9uEPb5b.js +0 -195
- package/dist/admin/chunks/PurchaseContentReleases-Z9uEPb5b.js.map +0 -1
- package/dist/admin/chunks/ReleasesSettingsPage-DUKdFdvx.mjs.map +0 -1
- package/dist/admin/chunks/ReleasesSettingsPage-KRcoI1bC.js.map +0 -1
- package/dist/admin/chunks/en-BOpqX2t_.js.map +0 -1
- package/dist/admin/chunks/en-aQo8Bn_U.mjs.map +0 -1
- package/dist/admin/chunks/hooks-CFk_8Q0b.mjs.map +0 -1
- package/dist/admin/chunks/hooks-DA5VbUAp.js.map +0 -1
- package/dist/admin/chunks/index-DBUaMD56.mjs +0 -1619
- package/dist/admin/chunks/index-DBUaMD56.mjs.map +0 -1
- package/dist/admin/chunks/index-vjWrvGN3.js +0 -1658
- package/dist/admin/chunks/index-vjWrvGN3.js.map +0 -1
- package/dist/admin/chunks/schemas-DMt8h1z-.mjs.map +0 -1
- package/dist/admin/chunks/schemas-DS7NeFDN.js.map +0 -1
- package/dist/admin/chunks/uk-9T9su-bj.js.map +0 -1
- package/dist/admin/chunks/uk-Bp9HotPq.mjs.map +0 -1
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
6
|
+
var designSystem = require('@strapi/design-system');
|
|
7
|
+
var icons = require('@strapi/icons');
|
|
8
|
+
var reactIntl = require('react-intl');
|
|
9
|
+
var reactRouterDom = require('react-router-dom');
|
|
10
|
+
var styledComponents = require('styled-components');
|
|
11
|
+
var constants = require('../constants.js');
|
|
12
|
+
var release = require('../services/release.js');
|
|
13
|
+
|
|
14
|
+
function _interopNamespaceDefault(e) {
|
|
15
|
+
var n = Object.create(null);
|
|
16
|
+
if (e) {
|
|
17
|
+
Object.keys(e).forEach(function (k) {
|
|
18
|
+
if (k !== 'default') {
|
|
19
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
20
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: function () { return e[k]; }
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
n.default = e;
|
|
28
|
+
return Object.freeze(n);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
32
|
+
|
|
33
|
+
const StyledMenuItem = styledComponents.styled(designSystem.Menu.Item)`
|
|
34
|
+
&:hover {
|
|
35
|
+
background: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}100`]};
|
|
36
|
+
|
|
37
|
+
svg {
|
|
38
|
+
fill: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}600`]};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
a {
|
|
42
|
+
color: ${({ theme })=>theme.colors.neutral800};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
svg {
|
|
47
|
+
color: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}500`]};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
span {
|
|
51
|
+
color: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}800`]};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
span,
|
|
55
|
+
a {
|
|
56
|
+
width: 100%;
|
|
57
|
+
}
|
|
58
|
+
`;
|
|
59
|
+
const DeleteReleaseActionItem = ({ releaseId, actionId })=>{
|
|
60
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
61
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
|
62
|
+
const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
63
|
+
const [deleteReleaseAction] = release.useDeleteReleaseActionMutation();
|
|
64
|
+
const { allowedActions: { canDeleteAction } } = strapiAdmin.useRBAC(constants.PERMISSIONS);
|
|
65
|
+
const handleDeleteAction = async ()=>{
|
|
66
|
+
const response = await deleteReleaseAction({
|
|
67
|
+
params: {
|
|
68
|
+
releaseId,
|
|
69
|
+
actionId
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
if ('data' in response) {
|
|
73
|
+
// Handle success
|
|
74
|
+
toggleNotification({
|
|
75
|
+
type: 'success',
|
|
76
|
+
message: formatMessage({
|
|
77
|
+
id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',
|
|
78
|
+
defaultMessage: 'Entry removed from release'
|
|
79
|
+
})
|
|
80
|
+
});
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if ('error' in response) {
|
|
84
|
+
if (strapiAdmin.isFetchError(response.error)) {
|
|
85
|
+
// Handle fetch error
|
|
86
|
+
toggleNotification({
|
|
87
|
+
type: 'danger',
|
|
88
|
+
message: formatAPIError(response.error)
|
|
89
|
+
});
|
|
90
|
+
} else {
|
|
91
|
+
// Handle generic error
|
|
92
|
+
toggleNotification({
|
|
93
|
+
type: 'danger',
|
|
94
|
+
message: formatMessage({
|
|
95
|
+
id: 'notification.error',
|
|
96
|
+
defaultMessage: 'An error occurred'
|
|
97
|
+
})
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
if (!canDeleteAction) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
return /*#__PURE__*/ jsxRuntime.jsx(StyledMenuItem, {
|
|
106
|
+
$variant: "danger",
|
|
107
|
+
onSelect: handleDeleteAction,
|
|
108
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
109
|
+
gap: 2,
|
|
110
|
+
children: [
|
|
111
|
+
/*#__PURE__*/ jsxRuntime.jsx(icons.Cross, {
|
|
112
|
+
width: "1.6rem",
|
|
113
|
+
height: "1.6rem"
|
|
114
|
+
}),
|
|
115
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
116
|
+
textColor: "danger600",
|
|
117
|
+
variant: "omega",
|
|
118
|
+
children: formatMessage({
|
|
119
|
+
id: 'content-releases.content-manager-edit-view.remove-from-release',
|
|
120
|
+
defaultMessage: 'Remove from release'
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
]
|
|
124
|
+
})
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
const ReleaseActionEntryLinkItem = ({ contentTypeUid, documentId, locale })=>{
|
|
128
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
129
|
+
const userPermissions = strapiAdmin.useAuth('ReleaseActionEntryLinkItem', (state)=>state.permissions);
|
|
130
|
+
// Confirm user has permissions to access the entry for the given locale
|
|
131
|
+
const canUpdateEntryForLocale = React__namespace.useMemo(()=>{
|
|
132
|
+
const updatePermissions = userPermissions.find((permission)=>permission.subject === contentTypeUid && permission.action === 'plugin::content-manager.explorer.update');
|
|
133
|
+
if (!updatePermissions) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
|
|
137
|
+
}, [
|
|
138
|
+
contentTypeUid,
|
|
139
|
+
locale,
|
|
140
|
+
userPermissions
|
|
141
|
+
]);
|
|
142
|
+
const { allowedActions: { canUpdate: canUpdateContentType } } = strapiAdmin.useRBAC({
|
|
143
|
+
updateContentType: [
|
|
144
|
+
{
|
|
145
|
+
action: 'plugin::content-manager.explorer.update',
|
|
146
|
+
subject: contentTypeUid
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
});
|
|
150
|
+
if (!canUpdateContentType || !canUpdateEntryForLocale) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
return /*#__PURE__*/ jsxRuntime.jsx(StyledMenuItem, {
|
|
154
|
+
/* @ts-expect-error inference isn't working in DS */ tag: reactRouterDom.NavLink,
|
|
155
|
+
isLink: true,
|
|
156
|
+
to: {
|
|
157
|
+
pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,
|
|
158
|
+
search: locale && `?plugins[i18n][locale]=${locale}`
|
|
159
|
+
},
|
|
160
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
161
|
+
gap: 2,
|
|
162
|
+
children: [
|
|
163
|
+
/*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {
|
|
164
|
+
width: "1.6rem",
|
|
165
|
+
height: "1.6rem"
|
|
166
|
+
}),
|
|
167
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
168
|
+
variant: "omega",
|
|
169
|
+
children: formatMessage({
|
|
170
|
+
id: 'content-releases.content-manager-edit-view.edit-entry',
|
|
171
|
+
defaultMessage: 'Edit entry'
|
|
172
|
+
})
|
|
173
|
+
})
|
|
174
|
+
]
|
|
175
|
+
})
|
|
176
|
+
});
|
|
177
|
+
};
|
|
178
|
+
const EditReleaseItem = ({ releaseId })=>{
|
|
179
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
180
|
+
return /* @ts-expect-error inference isn't working in DS */ /*#__PURE__*/ jsxRuntime.jsx(StyledMenuItem, {
|
|
181
|
+
tag: reactRouterDom.NavLink,
|
|
182
|
+
isLink: true,
|
|
183
|
+
to: `/plugins/content-releases/${releaseId}`,
|
|
184
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
185
|
+
gap: 2,
|
|
186
|
+
children: [
|
|
187
|
+
/*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {
|
|
188
|
+
width: "1.6rem",
|
|
189
|
+
height: "1.6rem"
|
|
190
|
+
}),
|
|
191
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
192
|
+
textColor: "neutral800",
|
|
193
|
+
variant: "omega",
|
|
194
|
+
children: formatMessage({
|
|
195
|
+
id: 'content-releases.content-manager-edit-view.edit-release',
|
|
196
|
+
defaultMessage: 'Edit release'
|
|
197
|
+
})
|
|
198
|
+
})
|
|
199
|
+
]
|
|
200
|
+
})
|
|
201
|
+
});
|
|
202
|
+
};
|
|
203
|
+
const Root = ({ children })=>{
|
|
204
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
205
|
+
const { allowedActions } = strapiAdmin.useRBAC(constants.PERMISSIONS);
|
|
206
|
+
return(// A user can access the dropdown if they have permissions to delete a release-action OR update a release
|
|
207
|
+
allowedActions.canDeleteAction || allowedActions.canUpdate ? /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Menu.Root, {
|
|
208
|
+
children: [
|
|
209
|
+
/*#__PURE__*/ jsxRuntime.jsx(StyledMoreButton, {
|
|
210
|
+
variant: "tertiary",
|
|
211
|
+
endIcon: null,
|
|
212
|
+
paddingLeft: "7px",
|
|
213
|
+
paddingRight: "7px",
|
|
214
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.AccessibleIcon, {
|
|
215
|
+
label: formatMessage({
|
|
216
|
+
id: 'content-releases.content-manager-edit-view.release-action-menu',
|
|
217
|
+
defaultMessage: 'Release action options'
|
|
218
|
+
}),
|
|
219
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(icons.More, {})
|
|
220
|
+
})
|
|
221
|
+
}),
|
|
222
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Content, {
|
|
223
|
+
top: 1,
|
|
224
|
+
popoverPlacement: "bottom-end",
|
|
225
|
+
children: children
|
|
226
|
+
})
|
|
227
|
+
]
|
|
228
|
+
}) : null);
|
|
229
|
+
};
|
|
230
|
+
const StyledMoreButton = styledComponents.styled(designSystem.Menu.Trigger)`
|
|
231
|
+
& > span {
|
|
232
|
+
display: flex;
|
|
233
|
+
}
|
|
234
|
+
`;
|
|
235
|
+
const ReleaseActionMenu = {
|
|
236
|
+
Root,
|
|
237
|
+
EditReleaseItem,
|
|
238
|
+
DeleteReleaseActionItem,
|
|
239
|
+
ReleaseActionEntryLinkItem
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
exports.ReleaseActionMenu = ReleaseActionMenu;
|
|
243
|
+
//# sourceMappingURL=ReleaseActionMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReleaseActionMenu.js","sources":["../../../admin/src/components/ReleaseActionMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useAuth,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { Flex, Typography, Menu, AccessibleIcon } from '@strapi/design-system';\nimport { Cross, More, Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DeleteReleaseAction, ReleaseAction } from '../../../shared/contracts/release-actions';\nimport { Release } from '../../../shared/contracts/releases';\nimport { PERMISSIONS } from '../constants';\nimport { useDeleteReleaseActionMutation } from '../services/release';\n\nconst StyledMenuItem = styled(Menu.Item)<{ $variant?: 'neutral' | 'danger' }>`\n &:hover {\n background: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}100`]};\n\n svg {\n fill: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}600`]};\n }\n\n a {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n }\n\n svg {\n color: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}500`]};\n }\n\n span {\n color: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}800`]};\n }\n\n span,\n a {\n width: 100%;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteReleaseActionItemProps\n * -----------------------------------------------------------------------------------------------*/\ninterface DeleteReleaseActionItemProps {\n releaseId: DeleteReleaseAction.Request['params']['releaseId'];\n actionId: DeleteReleaseAction.Request['params']['actionId'];\n}\n\nconst DeleteReleaseActionItem = ({ releaseId, actionId }: DeleteReleaseActionItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [deleteReleaseAction] = useDeleteReleaseActionMutation();\n const {\n allowedActions: { canDeleteAction },\n } = useRBAC(PERMISSIONS);\n\n const handleDeleteAction = async () => {\n const response = await deleteReleaseAction({\n params: { releaseId, actionId },\n });\n\n if ('data' in response) {\n // Handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',\n defaultMessage: 'Entry removed from release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // Handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (!canDeleteAction) {\n return null;\n }\n\n return (\n <StyledMenuItem $variant=\"danger\" onSelect={handleDeleteAction}>\n <Flex gap={2}>\n <Cross width=\"1.6rem\" height=\"1.6rem\" />\n <Typography textColor=\"danger600\" variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release',\n defaultMessage: 'Remove from release',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionEntryLinkItem\n * -----------------------------------------------------------------------------------------------*/\ninterface ReleaseActionEntryLinkItemProps {\n contentTypeUid: ReleaseAction['contentType'];\n documentId: ReleaseAction['entry']['documentId'];\n locale: ReleaseAction['locale'];\n}\n\nconst ReleaseActionEntryLinkItem = ({\n contentTypeUid,\n documentId,\n locale,\n}: ReleaseActionEntryLinkItemProps) => {\n const { formatMessage } = useIntl();\n const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state) => state.permissions);\n\n // Confirm user has permissions to access the entry for the given locale\n const canUpdateEntryForLocale = React.useMemo(() => {\n const updatePermissions = userPermissions.find(\n (permission) =>\n permission.subject === contentTypeUid &&\n permission.action === 'plugin::content-manager.explorer.update'\n );\n\n if (!updatePermissions) {\n return false;\n }\n\n return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));\n }, [contentTypeUid, locale, userPermissions]);\n\n const {\n allowedActions: { canUpdate: canUpdateContentType },\n } = useRBAC({\n updateContentType: [\n {\n action: 'plugin::content-manager.explorer.update',\n subject: contentTypeUid,\n },\n ],\n });\n\n if (!canUpdateContentType || !canUpdateEntryForLocale) {\n return null;\n }\n\n return (\n <StyledMenuItem\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={{\n pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,\n search: locale && `?plugins[i18n][locale]=${locale}`,\n }}\n >\n <Flex gap={2}>\n <Pencil width=\"1.6rem\" height=\"1.6rem\" />\n <Typography variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-entry',\n defaultMessage: 'Edit entry',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditReleaseItem\n * -----------------------------------------------------------------------------------------------*/\ninterface EditReleaseItemProps {\n releaseId: Release['id'];\n}\n\nconst EditReleaseItem = ({ releaseId }: EditReleaseItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n /* @ts-expect-error inference isn't working in DS */\n <StyledMenuItem tag={NavLink} isLink to={`/plugins/content-releases/${releaseId}`}>\n <Flex gap={2}>\n <Pencil width=\"1.6rem\" height=\"1.6rem\" />\n <Typography textColor=\"neutral800\" variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-release',\n defaultMessage: 'Edit release',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n hasTriggerBorder?: boolean;\n}\n\nconst Root = ({ children }: RootProps) => {\n const { formatMessage } = useIntl();\n\n const { allowedActions } = useRBAC(PERMISSIONS);\n\n return (\n // A user can access the dropdown if they have permissions to delete a release-action OR update a release\n allowedActions.canDeleteAction || allowedActions.canUpdate ? (\n <Menu.Root>\n <StyledMoreButton variant=\"tertiary\" endIcon={null} paddingLeft=\"7px\" paddingRight=\"7px\">\n <AccessibleIcon\n label={formatMessage({\n id: 'content-releases.content-manager-edit-view.release-action-menu',\n defaultMessage: 'Release action options',\n })}\n >\n <More />\n </AccessibleIcon>\n </StyledMoreButton>\n <Menu.Content top={1} popoverPlacement=\"bottom-end\">\n {children}\n </Menu.Content>\n </Menu.Root>\n ) : null\n );\n};\n\nconst StyledMoreButton = styled(Menu.Trigger)`\n & > span {\n display: flex;\n }\n`;\n\nexport const ReleaseActionMenu = {\n Root,\n EditReleaseItem,\n DeleteReleaseActionItem,\n ReleaseActionEntryLinkItem,\n};\n"],"names":["StyledMenuItem","styled","Menu","Item","theme","$variant","colors","neutral800","DeleteReleaseActionItem","releaseId","actionId","formatMessage","useIntl","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","deleteReleaseAction","useDeleteReleaseActionMutation","allowedActions","canDeleteAction","useRBAC","PERMISSIONS","handleDeleteAction","response","params","type","message","id","defaultMessage","isFetchError","error","_jsx","onSelect","_jsxs","Flex","gap","Cross","width","height","Typography","textColor","variant","ReleaseActionEntryLinkItem","contentTypeUid","documentId","locale","userPermissions","useAuth","state","permissions","canUpdateEntryForLocale","React","useMemo","updatePermissions","find","permission","subject","action","Boolean","properties","locales","includes","canUpdate","canUpdateContentType","updateContentType","tag","NavLink","isLink","to","pathname","search","Pencil","EditReleaseItem","Root","children","StyledMoreButton","endIcon","paddingLeft","paddingRight","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":"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"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useNotification, useAPIErrorHandler, useRBAC, useAuth, isFetchError } from '@strapi/admin/strapi-admin';
|
|
4
|
+
import { Menu, Flex, Typography, AccessibleIcon } from '@strapi/design-system';
|
|
5
|
+
import { Cross, Pencil, More } from '@strapi/icons';
|
|
6
|
+
import { useIntl } from 'react-intl';
|
|
7
|
+
import { NavLink } from 'react-router-dom';
|
|
8
|
+
import { styled } from 'styled-components';
|
|
9
|
+
import { PERMISSIONS } from '../constants.mjs';
|
|
10
|
+
import { useDeleteReleaseActionMutation } from '../services/release.mjs';
|
|
11
|
+
|
|
12
|
+
const StyledMenuItem = styled(Menu.Item)`
|
|
13
|
+
&:hover {
|
|
14
|
+
background: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}100`]};
|
|
15
|
+
|
|
16
|
+
svg {
|
|
17
|
+
fill: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}600`]};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
a {
|
|
21
|
+
color: ${({ theme })=>theme.colors.neutral800};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
svg {
|
|
26
|
+
color: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}500`]};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
span {
|
|
30
|
+
color: ${({ theme, $variant = 'neutral' })=>theme.colors[`${$variant}800`]};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
span,
|
|
34
|
+
a {
|
|
35
|
+
width: 100%;
|
|
36
|
+
}
|
|
37
|
+
`;
|
|
38
|
+
const DeleteReleaseActionItem = ({ releaseId, actionId })=>{
|
|
39
|
+
const { formatMessage } = useIntl();
|
|
40
|
+
const { toggleNotification } = useNotification();
|
|
41
|
+
const { formatAPIError } = useAPIErrorHandler();
|
|
42
|
+
const [deleteReleaseAction] = useDeleteReleaseActionMutation();
|
|
43
|
+
const { allowedActions: { canDeleteAction } } = useRBAC(PERMISSIONS);
|
|
44
|
+
const handleDeleteAction = async ()=>{
|
|
45
|
+
const response = await deleteReleaseAction({
|
|
46
|
+
params: {
|
|
47
|
+
releaseId,
|
|
48
|
+
actionId
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
if ('data' in response) {
|
|
52
|
+
// Handle success
|
|
53
|
+
toggleNotification({
|
|
54
|
+
type: 'success',
|
|
55
|
+
message: formatMessage({
|
|
56
|
+
id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',
|
|
57
|
+
defaultMessage: 'Entry removed from release'
|
|
58
|
+
})
|
|
59
|
+
});
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if ('error' in response) {
|
|
63
|
+
if (isFetchError(response.error)) {
|
|
64
|
+
// Handle fetch error
|
|
65
|
+
toggleNotification({
|
|
66
|
+
type: 'danger',
|
|
67
|
+
message: formatAPIError(response.error)
|
|
68
|
+
});
|
|
69
|
+
} else {
|
|
70
|
+
// Handle generic error
|
|
71
|
+
toggleNotification({
|
|
72
|
+
type: 'danger',
|
|
73
|
+
message: formatMessage({
|
|
74
|
+
id: 'notification.error',
|
|
75
|
+
defaultMessage: 'An error occurred'
|
|
76
|
+
})
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
if (!canDeleteAction) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
return /*#__PURE__*/ jsx(StyledMenuItem, {
|
|
85
|
+
$variant: "danger",
|
|
86
|
+
onSelect: handleDeleteAction,
|
|
87
|
+
children: /*#__PURE__*/ jsxs(Flex, {
|
|
88
|
+
gap: 2,
|
|
89
|
+
children: [
|
|
90
|
+
/*#__PURE__*/ jsx(Cross, {
|
|
91
|
+
width: "1.6rem",
|
|
92
|
+
height: "1.6rem"
|
|
93
|
+
}),
|
|
94
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
95
|
+
textColor: "danger600",
|
|
96
|
+
variant: "omega",
|
|
97
|
+
children: formatMessage({
|
|
98
|
+
id: 'content-releases.content-manager-edit-view.remove-from-release',
|
|
99
|
+
defaultMessage: 'Remove from release'
|
|
100
|
+
})
|
|
101
|
+
})
|
|
102
|
+
]
|
|
103
|
+
})
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
const ReleaseActionEntryLinkItem = ({ contentTypeUid, documentId, locale })=>{
|
|
107
|
+
const { formatMessage } = useIntl();
|
|
108
|
+
const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state)=>state.permissions);
|
|
109
|
+
// Confirm user has permissions to access the entry for the given locale
|
|
110
|
+
const canUpdateEntryForLocale = React.useMemo(()=>{
|
|
111
|
+
const updatePermissions = userPermissions.find((permission)=>permission.subject === contentTypeUid && permission.action === 'plugin::content-manager.explorer.update');
|
|
112
|
+
if (!updatePermissions) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
|
|
116
|
+
}, [
|
|
117
|
+
contentTypeUid,
|
|
118
|
+
locale,
|
|
119
|
+
userPermissions
|
|
120
|
+
]);
|
|
121
|
+
const { allowedActions: { canUpdate: canUpdateContentType } } = useRBAC({
|
|
122
|
+
updateContentType: [
|
|
123
|
+
{
|
|
124
|
+
action: 'plugin::content-manager.explorer.update',
|
|
125
|
+
subject: contentTypeUid
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
});
|
|
129
|
+
if (!canUpdateContentType || !canUpdateEntryForLocale) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
return /*#__PURE__*/ jsx(StyledMenuItem, {
|
|
133
|
+
/* @ts-expect-error inference isn't working in DS */ tag: NavLink,
|
|
134
|
+
isLink: true,
|
|
135
|
+
to: {
|
|
136
|
+
pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,
|
|
137
|
+
search: locale && `?plugins[i18n][locale]=${locale}`
|
|
138
|
+
},
|
|
139
|
+
children: /*#__PURE__*/ jsxs(Flex, {
|
|
140
|
+
gap: 2,
|
|
141
|
+
children: [
|
|
142
|
+
/*#__PURE__*/ jsx(Pencil, {
|
|
143
|
+
width: "1.6rem",
|
|
144
|
+
height: "1.6rem"
|
|
145
|
+
}),
|
|
146
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
147
|
+
variant: "omega",
|
|
148
|
+
children: formatMessage({
|
|
149
|
+
id: 'content-releases.content-manager-edit-view.edit-entry',
|
|
150
|
+
defaultMessage: 'Edit entry'
|
|
151
|
+
})
|
|
152
|
+
})
|
|
153
|
+
]
|
|
154
|
+
})
|
|
155
|
+
});
|
|
156
|
+
};
|
|
157
|
+
const EditReleaseItem = ({ releaseId })=>{
|
|
158
|
+
const { formatMessage } = useIntl();
|
|
159
|
+
return /* @ts-expect-error inference isn't working in DS */ /*#__PURE__*/ jsx(StyledMenuItem, {
|
|
160
|
+
tag: NavLink,
|
|
161
|
+
isLink: true,
|
|
162
|
+
to: `/plugins/content-releases/${releaseId}`,
|
|
163
|
+
children: /*#__PURE__*/ jsxs(Flex, {
|
|
164
|
+
gap: 2,
|
|
165
|
+
children: [
|
|
166
|
+
/*#__PURE__*/ jsx(Pencil, {
|
|
167
|
+
width: "1.6rem",
|
|
168
|
+
height: "1.6rem"
|
|
169
|
+
}),
|
|
170
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
171
|
+
textColor: "neutral800",
|
|
172
|
+
variant: "omega",
|
|
173
|
+
children: formatMessage({
|
|
174
|
+
id: 'content-releases.content-manager-edit-view.edit-release',
|
|
175
|
+
defaultMessage: 'Edit release'
|
|
176
|
+
})
|
|
177
|
+
})
|
|
178
|
+
]
|
|
179
|
+
})
|
|
180
|
+
});
|
|
181
|
+
};
|
|
182
|
+
const Root = ({ children })=>{
|
|
183
|
+
const { formatMessage } = useIntl();
|
|
184
|
+
const { allowedActions } = useRBAC(PERMISSIONS);
|
|
185
|
+
return(// A user can access the dropdown if they have permissions to delete a release-action OR update a release
|
|
186
|
+
allowedActions.canDeleteAction || allowedActions.canUpdate ? /*#__PURE__*/ jsxs(Menu.Root, {
|
|
187
|
+
children: [
|
|
188
|
+
/*#__PURE__*/ jsx(StyledMoreButton, {
|
|
189
|
+
variant: "tertiary",
|
|
190
|
+
endIcon: null,
|
|
191
|
+
paddingLeft: "7px",
|
|
192
|
+
paddingRight: "7px",
|
|
193
|
+
children: /*#__PURE__*/ jsx(AccessibleIcon, {
|
|
194
|
+
label: formatMessage({
|
|
195
|
+
id: 'content-releases.content-manager-edit-view.release-action-menu',
|
|
196
|
+
defaultMessage: 'Release action options'
|
|
197
|
+
}),
|
|
198
|
+
children: /*#__PURE__*/ jsx(More, {})
|
|
199
|
+
})
|
|
200
|
+
}),
|
|
201
|
+
/*#__PURE__*/ jsx(Menu.Content, {
|
|
202
|
+
top: 1,
|
|
203
|
+
popoverPlacement: "bottom-end",
|
|
204
|
+
children: children
|
|
205
|
+
})
|
|
206
|
+
]
|
|
207
|
+
}) : null);
|
|
208
|
+
};
|
|
209
|
+
const StyledMoreButton = styled(Menu.Trigger)`
|
|
210
|
+
& > span {
|
|
211
|
+
display: flex;
|
|
212
|
+
}
|
|
213
|
+
`;
|
|
214
|
+
const ReleaseActionMenu = {
|
|
215
|
+
Root,
|
|
216
|
+
EditReleaseItem,
|
|
217
|
+
DeleteReleaseActionItem,
|
|
218
|
+
ReleaseActionEntryLinkItem
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
export { ReleaseActionMenu };
|
|
222
|
+
//# sourceMappingURL=ReleaseActionMenu.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReleaseActionMenu.mjs","sources":["../../../admin/src/components/ReleaseActionMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useAuth,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport { Flex, Typography, Menu, AccessibleIcon } from '@strapi/design-system';\nimport { Cross, More, Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DeleteReleaseAction, ReleaseAction } from '../../../shared/contracts/release-actions';\nimport { Release } from '../../../shared/contracts/releases';\nimport { PERMISSIONS } from '../constants';\nimport { useDeleteReleaseActionMutation } from '../services/release';\n\nconst StyledMenuItem = styled(Menu.Item)<{ $variant?: 'neutral' | 'danger' }>`\n &:hover {\n background: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}100`]};\n\n svg {\n fill: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}600`]};\n }\n\n a {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n }\n\n svg {\n color: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}500`]};\n }\n\n span {\n color: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}800`]};\n }\n\n span,\n a {\n width: 100%;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteReleaseActionItemProps\n * -----------------------------------------------------------------------------------------------*/\ninterface DeleteReleaseActionItemProps {\n releaseId: DeleteReleaseAction.Request['params']['releaseId'];\n actionId: DeleteReleaseAction.Request['params']['actionId'];\n}\n\nconst DeleteReleaseActionItem = ({ releaseId, actionId }: DeleteReleaseActionItemProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [deleteReleaseAction] = useDeleteReleaseActionMutation();\n const {\n allowedActions: { canDeleteAction },\n } = useRBAC(PERMISSIONS);\n\n const handleDeleteAction = async () => {\n const response = await deleteReleaseAction({\n params: { releaseId, actionId },\n });\n\n if ('data' in response) {\n // Handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release.notification.success',\n defaultMessage: 'Entry removed from release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // Handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (!canDeleteAction) {\n return null;\n }\n\n return (\n <StyledMenuItem $variant=\"danger\" onSelect={handleDeleteAction}>\n <Flex gap={2}>\n <Cross width=\"1.6rem\" height=\"1.6rem\" />\n <Typography textColor=\"danger600\" variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release',\n defaultMessage: 'Remove from release',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionEntryLinkItem\n * -----------------------------------------------------------------------------------------------*/\ninterface ReleaseActionEntryLinkItemProps {\n contentTypeUid: ReleaseAction['contentType'];\n documentId: ReleaseAction['entry']['documentId'];\n locale: ReleaseAction['locale'];\n}\n\nconst ReleaseActionEntryLinkItem = ({\n contentTypeUid,\n documentId,\n locale,\n}: ReleaseActionEntryLinkItemProps) => {\n const { formatMessage } = useIntl();\n const userPermissions = useAuth('ReleaseActionEntryLinkItem', (state) => state.permissions);\n\n // Confirm user has permissions to access the entry for the given locale\n const canUpdateEntryForLocale = React.useMemo(() => {\n const updatePermissions = userPermissions.find(\n (permission) =>\n permission.subject === contentTypeUid &&\n permission.action === 'plugin::content-manager.explorer.update'\n );\n\n if (!updatePermissions) {\n return false;\n }\n\n return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));\n }, [contentTypeUid, locale, userPermissions]);\n\n const {\n allowedActions: { canUpdate: canUpdateContentType },\n } = useRBAC({\n updateContentType: [\n {\n action: 'plugin::content-manager.explorer.update',\n subject: contentTypeUid,\n },\n ],\n });\n\n if (!canUpdateContentType || !canUpdateEntryForLocale) {\n return null;\n }\n\n return (\n <StyledMenuItem\n /* @ts-expect-error inference isn't working in DS */\n tag={NavLink}\n isLink\n to={{\n pathname: `/content-manager/collection-types/${contentTypeUid}/${documentId}`,\n search: locale && `?plugins[i18n][locale]=${locale}`,\n }}\n >\n <Flex gap={2}>\n <Pencil width=\"1.6rem\" height=\"1.6rem\" />\n <Typography variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-entry',\n defaultMessage: 'Edit entry',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditReleaseItem\n * -----------------------------------------------------------------------------------------------*/\ninterface EditReleaseItemProps {\n releaseId: Release['id'];\n}\n\nconst EditReleaseItem = ({ releaseId }: EditReleaseItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n /* @ts-expect-error inference isn't working in DS */\n <StyledMenuItem tag={NavLink} isLink to={`/plugins/content-releases/${releaseId}`}>\n <Flex gap={2}>\n <Pencil width=\"1.6rem\" height=\"1.6rem\" />\n <Typography textColor=\"neutral800\" variant=\"omega\">\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-release',\n defaultMessage: 'Edit release',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n hasTriggerBorder?: boolean;\n}\n\nconst Root = ({ children }: RootProps) => {\n const { formatMessage } = useIntl();\n\n const { allowedActions } = useRBAC(PERMISSIONS);\n\n return (\n // A user can access the dropdown if they have permissions to delete a release-action OR update a release\n allowedActions.canDeleteAction || allowedActions.canUpdate ? (\n <Menu.Root>\n <StyledMoreButton variant=\"tertiary\" endIcon={null} paddingLeft=\"7px\" paddingRight=\"7px\">\n <AccessibleIcon\n label={formatMessage({\n id: 'content-releases.content-manager-edit-view.release-action-menu',\n defaultMessage: 'Release action options',\n })}\n >\n <More />\n </AccessibleIcon>\n </StyledMoreButton>\n <Menu.Content top={1} popoverPlacement=\"bottom-end\">\n {children}\n </Menu.Content>\n </Menu.Root>\n ) : null\n );\n};\n\nconst StyledMoreButton = styled(Menu.Trigger)`\n & > span {\n display: flex;\n }\n`;\n\nexport const ReleaseActionMenu = {\n Root,\n EditReleaseItem,\n DeleteReleaseActionItem,\n ReleaseActionEntryLinkItem,\n};\n"],"names":["StyledMenuItem","styled","Menu","Item","theme","$variant","colors","neutral800","DeleteReleaseActionItem","releaseId","actionId","formatMessage","useIntl","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","deleteReleaseAction","useDeleteReleaseActionMutation","allowedActions","canDeleteAction","useRBAC","PERMISSIONS","handleDeleteAction","response","params","type","message","id","defaultMessage","isFetchError","error","_jsx","onSelect","_jsxs","Flex","gap","Cross","width","height","Typography","textColor","variant","ReleaseActionEntryLinkItem","contentTypeUid","documentId","locale","userPermissions","useAuth","state","permissions","canUpdateEntryForLocale","React","useMemo","updatePermissions","find","permission","subject","action","Boolean","properties","locales","includes","canUpdate","canUpdateContentType","updateContentType","tag","NavLink","isLink","to","pathname","search","Pencil","EditReleaseItem","Root","children","StyledMoreButton","endIcon","paddingLeft","paddingRight","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":"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"}
|