202 lines
10 KiB
JavaScript
202 lines
10 KiB
JavaScript
'use strict';
|
|
|
|
var jsxRuntime = require('react/jsx-runtime');
|
|
require('react');
|
|
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
var designSystem = require('@strapi/design-system');
|
|
var formik = require('formik');
|
|
var reactIntl = require('react-intl');
|
|
var constants = require('../constants.js');
|
|
var release = require('../services/release.js');
|
|
var ReleaseActionModal = require('./ReleaseActionModal.js');
|
|
var ReleaseActionOptions = require('./ReleaseActionOptions.js');
|
|
|
|
const getContentPermissions = (subject)=>{
|
|
const permissions = {
|
|
publish: [
|
|
{
|
|
action: 'plugin::content-manager.explorer.publish',
|
|
subject,
|
|
id: '',
|
|
actionParameters: {},
|
|
properties: {},
|
|
conditions: []
|
|
}
|
|
]
|
|
};
|
|
return permissions;
|
|
};
|
|
const ReleaseAction = ({ documents, model })=>{
|
|
const { formatMessage } = reactIntl.useIntl();
|
|
const { toggleNotification } = strapiAdmin.useNotification();
|
|
const { formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
const [{ query }] = strapiAdmin.useQueryParams();
|
|
const contentPermissions = getContentPermissions(model);
|
|
const { allowedActions: { canPublish } } = strapiAdmin.useRBAC(contentPermissions);
|
|
const { allowedActions: { canCreate } } = strapiAdmin.useRBAC(constants.PERMISSIONS);
|
|
// Get all the releases not published
|
|
const response = release.useGetReleasesQuery();
|
|
const releases = response.data?.data;
|
|
const [createManyReleaseActions, { isLoading }] = release.useCreateManyReleaseActionsMutation();
|
|
const documentIds = documents.map((doc)=>doc.documentId);
|
|
const handleSubmit = async (values)=>{
|
|
const locale = query.plugins?.i18n?.locale;
|
|
const releaseActionEntries = documentIds.map((entryDocumentId)=>({
|
|
type: values.type,
|
|
contentType: model,
|
|
entryDocumentId,
|
|
locale
|
|
}));
|
|
const response = await createManyReleaseActions({
|
|
body: releaseActionEntries,
|
|
params: {
|
|
releaseId: values.releaseId
|
|
}
|
|
});
|
|
if ('data' in response) {
|
|
// Handle success
|
|
const notificationMessage = formatMessage({
|
|
id: 'content-releases.content-manager-list-view.add-to-release.notification.success.message',
|
|
defaultMessage: '{entriesAlreadyInRelease} out of {totalEntries} entries were already in the release.'
|
|
}, {
|
|
entriesAlreadyInRelease: response.data.meta.entriesAlreadyInRelease,
|
|
totalEntries: response.data.meta.totalEntries
|
|
});
|
|
const notification = {
|
|
type: 'success',
|
|
title: formatMessage({
|
|
id: 'content-releases.content-manager-list-view.add-to-release.notification.success.title',
|
|
defaultMessage: 'Successfully added to release.'
|
|
}, {
|
|
entriesAlreadyInRelease: response.data.meta.entriesAlreadyInRelease,
|
|
totalEntries: response.data.meta.totalEntries
|
|
}),
|
|
message: response.data.meta.entriesAlreadyInRelease ? notificationMessage : ''
|
|
};
|
|
toggleNotification(notification);
|
|
return true;
|
|
}
|
|
if ('error' in response) {
|
|
if (strapiAdmin.isFetchError(response.error)) {
|
|
// Handle fetch error
|
|
toggleNotification({
|
|
type: 'warning',
|
|
message: formatAPIError(response.error)
|
|
});
|
|
} else {
|
|
// Handle generic error
|
|
toggleNotification({
|
|
type: 'warning',
|
|
message: formatMessage({
|
|
id: 'notification.error',
|
|
defaultMessage: 'An error occurred'
|
|
})
|
|
});
|
|
}
|
|
}
|
|
};
|
|
if (!canCreate || !canPublish) return null;
|
|
return {
|
|
actionType: 'release',
|
|
variant: 'tertiary',
|
|
label: formatMessage({
|
|
id: 'content-manager-list-view.add-to-release',
|
|
defaultMessage: 'Add to Release'
|
|
}),
|
|
dialog: {
|
|
type: 'modal',
|
|
title: formatMessage({
|
|
id: 'content-manager-list-view.add-to-release',
|
|
defaultMessage: 'Add to Release'
|
|
}),
|
|
content: ({ onClose })=>{
|
|
return /*#__PURE__*/ jsxRuntime.jsx(formik.Formik, {
|
|
onSubmit: async (values)=>{
|
|
const data = await handleSubmit(values);
|
|
if (data) {
|
|
return onClose();
|
|
}
|
|
},
|
|
validationSchema: ReleaseActionModal.RELEASE_ACTION_FORM_SCHEMA,
|
|
initialValues: ReleaseActionModal.INITIAL_VALUES,
|
|
children: ({ values, setFieldValue })=>/*#__PURE__*/ jsxRuntime.jsxs(formik.Form, {
|
|
children: [
|
|
releases?.length === 0 ? /*#__PURE__*/ jsxRuntime.jsx(ReleaseActionModal.NoReleases, {}) : /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
|
|
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
direction: "column",
|
|
alignItems: "stretch",
|
|
gap: 2,
|
|
children: [
|
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
paddingBottom: 6,
|
|
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
|
|
required: true,
|
|
children: [
|
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
|
|
children: formatMessage({
|
|
id: 'content-releases.content-manager-list-view.add-to-release.select-label',
|
|
defaultMessage: 'Select a release'
|
|
})
|
|
}),
|
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
|
|
placeholder: formatMessage({
|
|
id: 'content-releases.content-manager-list-view.add-to-release.select-placeholder',
|
|
defaultMessage: 'Select'
|
|
}),
|
|
onChange: (value)=>setFieldValue('releaseId', value),
|
|
value: values.releaseId,
|
|
children: releases?.map((release)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
|
|
value: release.id,
|
|
children: release.name
|
|
}, release.id))
|
|
})
|
|
]
|
|
})
|
|
}),
|
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
|
|
children: formatMessage({
|
|
id: 'content-releases.content-manager-list-view.add-to-release.action-type-label',
|
|
defaultMessage: 'What do you want to do with these entries?'
|
|
})
|
|
}),
|
|
/*#__PURE__*/ jsxRuntime.jsx(ReleaseActionOptions.ReleaseActionOptions, {
|
|
selected: values.type,
|
|
handleChange: (e)=>setFieldValue('type', e.target.value),
|
|
name: "type"
|
|
})
|
|
]
|
|
})
|
|
}),
|
|
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Footer, {
|
|
children: [
|
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
onClick: onClose,
|
|
variant: "tertiary",
|
|
name: "cancel",
|
|
children: formatMessage({
|
|
id: 'content-releases.content-manager-list-view.add-to-release.cancel-button',
|
|
defaultMessage: 'Cancel'
|
|
})
|
|
}),
|
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
type: "submit",
|
|
disabled: !values.releaseId,
|
|
loading: isLoading,
|
|
children: formatMessage({
|
|
id: 'content-releases.content-manager-list-view.add-to-release.continue-button',
|
|
defaultMessage: 'Continue'
|
|
})
|
|
})
|
|
]
|
|
})
|
|
]
|
|
})
|
|
});
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
exports.ReleaseAction = ReleaseAction;
|
|
//# sourceMappingURL=ReleaseAction.js.map
|