1 line
14 KiB
Plaintext
1 line
14 KiB
Plaintext
{"version":3,"file":"ReleaseAction.mjs","sources":["../../../admin/src/components/ReleaseAction.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useAPIErrorHandler,\n useNotification,\n useQueryParams,\n useRBAC,\n isFetchError,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n Flex,\n SingleSelect,\n SingleSelectOption,\n Modal,\n Field,\n} from '@strapi/design-system';\nimport { Formik, Form } from 'formik';\nimport { useIntl } from 'react-intl';\n\nimport { CreateManyReleaseActions } from '../../../shared/contracts/release-actions';\nimport { PERMISSIONS as releasePermissions } from '../constants';\nimport { useCreateManyReleaseActionsMutation, useGetReleasesQuery } from '../services/release';\n\nimport {\n type FormValues,\n INITIAL_VALUES,\n RELEASE_ACTION_FORM_SCHEMA,\n NoReleases,\n} from './ReleaseActionModal';\nimport { ReleaseActionOptions } from './ReleaseActionOptions';\n\nimport type { BulkActionComponent } from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\nconst getContentPermissions = (subject: string) => {\n const permissions = {\n publish: [\n {\n action: 'plugin::content-manager.explorer.publish',\n subject,\n id: '',\n actionParameters: {},\n properties: {},\n conditions: [],\n },\n ],\n };\n\n return permissions;\n};\n\nconst ReleaseAction: BulkActionComponent = ({ documents, model }) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const contentPermissions = getContentPermissions(model);\n const {\n allowedActions: { canPublish },\n } = useRBAC(contentPermissions);\n const {\n allowedActions: { canCreate },\n } = useRBAC(releasePermissions);\n\n // Get all the releases not published\n const response = useGetReleasesQuery();\n const releases = response.data?.data;\n const [createManyReleaseActions, { isLoading }] = useCreateManyReleaseActionsMutation();\n const documentIds = documents.map((doc) => doc.documentId);\n\n const handleSubmit = async (values: FormValues) => {\n const locale = query.plugins?.i18n?.locale;\n\n const releaseActionEntries: CreateManyReleaseActions.Request['body'] = documentIds.map(\n (entryDocumentId) => ({\n type: values.type,\n contentType: model as UID.ContentType,\n entryDocumentId,\n locale,\n })\n );\n\n const response = await createManyReleaseActions({\n body: releaseActionEntries,\n params: { releaseId: values.releaseId },\n });\n\n if ('data' in response) {\n // Handle success\n\n const notificationMessage = formatMessage(\n {\n id: 'content-releases.content-manager-list-view.add-to-release.notification.success.message',\n defaultMessage:\n '{entriesAlreadyInRelease} out of {totalEntries} entries were already in the release.',\n },\n {\n entriesAlreadyInRelease: response.data.meta.entriesAlreadyInRelease,\n totalEntries: response.data.meta.totalEntries,\n }\n );\n\n const notification = {\n type: 'success' as const,\n title: formatMessage(\n {\n id: 'content-releases.content-manager-list-view.add-to-release.notification.success.title',\n defaultMessage: 'Successfully added to release.',\n },\n {\n entriesAlreadyInRelease: response.data.meta.entriesAlreadyInRelease,\n totalEntries: response.data.meta.totalEntries,\n }\n ),\n message: response.data.meta.entriesAlreadyInRelease ? notificationMessage : '',\n };\n\n toggleNotification(notification);\n\n return true;\n }\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // Handle fetch error\n toggleNotification({\n type: 'warning',\n message: formatAPIError(response.error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'warning',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (!canCreate || !canPublish) return null;\n\n return {\n actionType: 'release',\n variant: 'tertiary',\n label: formatMessage({\n id: 'content-manager-list-view.add-to-release',\n defaultMessage: 'Add to Release',\n }),\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager-list-view.add-to-release',\n defaultMessage: 'Add to Release',\n }),\n content: ({ onClose }) => {\n return (\n <Formik\n onSubmit={async (values) => {\n const data = await handleSubmit(values);\n if (data) {\n return onClose();\n }\n }}\n validationSchema={RELEASE_ACTION_FORM_SCHEMA}\n initialValues={INITIAL_VALUES}\n >\n {({ values, setFieldValue }) => (\n <Form>\n {releases?.length === 0 ? (\n <NoReleases />\n ) : (\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Box paddingBottom={6}>\n <Field.Root required>\n <Field.Label>\n {formatMessage({\n id: 'content-releases.content-manager-list-view.add-to-release.select-label',\n defaultMessage: 'Select a release',\n })}\n </Field.Label>\n <SingleSelect\n placeholder={formatMessage({\n id: 'content-releases.content-manager-list-view.add-to-release.select-placeholder',\n defaultMessage: 'Select',\n })}\n onChange={(value) => setFieldValue('releaseId', value)}\n value={values.releaseId}\n >\n {releases?.map((release) => (\n <SingleSelectOption key={release.id} value={release.id}>\n {release.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n </Box>\n <Field.Label>\n {formatMessage({\n id: 'content-releases.content-manager-list-view.add-to-release.action-type-label',\n defaultMessage: 'What do you want to do with these entries?',\n })}\n </Field.Label>\n <ReleaseActionOptions\n selected={values.type}\n handleChange={(e) => setFieldValue('type', e.target.value)}\n name=\"type\"\n />\n </Flex>\n </Modal.Body>\n )}\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\" name=\"cancel\">\n {formatMessage({\n id: 'content-releases.content-manager-list-view.add-to-release.cancel-button',\n defaultMessage: 'Cancel',\n })}\n </Button>\n {/** * TODO: Ideally we would use isValid from Formik to disable the button,\n however currently it always returns true * for yup.string().required(), even when\n the value is falsy (including empty string) */}\n <Button type=\"submit\" disabled={!values.releaseId} loading={isLoading}>\n {formatMessage({\n id: 'content-releases.content-manager-list-view.add-to-release.continue-button',\n defaultMessage: 'Continue',\n })}\n </Button>\n </Modal.Footer>\n </Form>\n )}\n </Formik>\n );\n },\n },\n };\n};\n\nexport { ReleaseAction };\n"],"names":["getContentPermissions","subject","permissions","publish","action","id","actionParameters","properties","conditions","ReleaseAction","documents","model","formatMessage","useIntl","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","query","useQueryParams","contentPermissions","allowedActions","canPublish","useRBAC","canCreate","releasePermissions","response","useGetReleasesQuery","releases","data","createManyReleaseActions","isLoading","useCreateManyReleaseActionsMutation","documentIds","map","doc","documentId","handleSubmit","values","locale","plugins","i18n","releaseActionEntries","entryDocumentId","type","contentType","body","params","releaseId","notificationMessage","defaultMessage","entriesAlreadyInRelease","meta","totalEntries","notification","title","message","isFetchError","error","actionType","variant","label","dialog","content","onClose","_jsx","Formik","onSubmit","validationSchema","RELEASE_ACTION_FORM_SCHEMA","initialValues","INITIAL_VALUES","setFieldValue","_jsxs","Form","length","NoReleases","Modal","Body","Flex","direction","alignItems","gap","Box","paddingBottom","Field","Root","required","Label","SingleSelect","placeholder","onChange","value","release","SingleSelectOption","name","ReleaseActionOptions","selected","handleChange","e","target","Footer","Button","onClick","disabled","loading"],"mappings":"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"} |