{"version":3,"file":"ReleaseActionModal.mjs","sources":["../../../admin/src/components/ReleaseActionModal.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 { unstable_useDocumentLayout as useDocumentLayout } from '@strapi/content-manager/strapi-admin';\nimport {\n Box,\n Button,\n Flex,\n SingleSelect,\n SingleSelectOption,\n EmptyStateLayout,\n LinkButton,\n Field,\n Modal,\n} from '@strapi/design-system';\nimport { PaperPlane } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useFormik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { Link as ReactRouterLink } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { CreateReleaseAction } from '../../../shared/contracts/release-actions';\nimport { PERMISSIONS } from '../constants';\nimport { useCreateReleaseActionMutation, useGetReleasesForEntryQuery } from '../services/release';\n\nimport { ReleaseActionOptions } from './ReleaseActionOptions';\n\nimport type {\n DocumentActionComponent,\n DocumentActionProps,\n} from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * AddActionToReleaseModal\n * -----------------------------------------------------------------------------------------------*/\nexport const RELEASE_ACTION_FORM_SCHEMA = yup.object().shape({\n type: yup.string().oneOf(['publish', 'unpublish']).required(),\n releaseId: yup.string().required(),\n});\n\nexport interface FormValues {\n type: CreateReleaseAction.Request['body']['type'];\n releaseId: CreateReleaseAction.Request['params']['releaseId'];\n}\n\nexport const INITIAL_VALUES = {\n type: 'publish',\n releaseId: '',\n} satisfies FormValues;\n\ninterface AddActionToReleaseModalProps {\n contentType: string;\n documentId?: string;\n onInputChange: (field: keyof FormValues, value: string | number) => void;\n values: FormValues;\n}\n\nexport const NoReleases = () => {\n const { formatMessage } = useIntl();\n return (\n }\n content={formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.no-releases-message',\n defaultMessage:\n 'No available releases. Open the list of releases and create a new one from there.',\n })}\n action={\n \n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.redirect-button',\n defaultMessage: 'Open the list of releases',\n })}\n \n }\n shadow=\"none\"\n />\n );\n};\n\nconst AddActionToReleaseModal = ({\n contentType,\n documentId,\n onInputChange,\n values,\n}: AddActionToReleaseModalProps) => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const locale = query.plugins?.i18n?.locale;\n\n // Get all 'pending' releases that do not have the entry attached\n const response = useGetReleasesForEntryQuery({\n contentType,\n entryDocumentId: documentId,\n hasEntryAttached: false,\n locale,\n });\n\n const releases = response.data?.data;\n\n if (releases?.length === 0) {\n return ;\n }\n\n return (\n \n \n \n \n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.select-label',\n defaultMessage: 'Select a release',\n })}\n \n onInputChange('releaseId', value)}\n value={values.releaseId}\n >\n {releases?.map((release) => (\n \n {release.name}\n \n ))}\n \n \n \n \n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.action-type-label',\n defaultMessage: 'What do you want to do with this entry?',\n })}\n \n onInputChange('type', e.target.value)}\n name=\"type\"\n />\n \n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseActionModalForm\n * -----------------------------------------------------------------------------------------------*/\n\nconst ReleaseActionModalForm: DocumentActionComponent = ({\n documentId,\n document,\n model,\n collectionType,\n}: DocumentActionProps) => {\n const { formatMessage } = useIntl();\n const { allowedActions } = useRBAC(PERMISSIONS);\n const { canCreateAction } = allowedActions;\n const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const locale = query.plugins?.i18n?.locale;\n\n const handleSubmit = async (e: React.FormEvent, onClose: () => void) => {\n try {\n await formik.handleSubmit(e);\n onClose();\n } catch (error) {\n if (isFetchError(error)) {\n // Handle axios error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n } else {\n // Handle generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n }\n };\n\n const formik = useFormik({\n initialValues: INITIAL_VALUES,\n validationSchema: RELEASE_ACTION_FORM_SCHEMA,\n onSubmit: async (values: FormValues) => {\n if (collectionType === 'collection-types' && !documentId) {\n throw new Error('Document id is required');\n }\n\n const response = await createReleaseAction({\n body: {\n type: values.type,\n contentType: model as UID.ContentType,\n entryDocumentId: documentId,\n locale,\n },\n params: { releaseId: values.releaseId },\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.add-to-release.notification.success',\n defaultMessage: 'Entry added to release',\n }),\n });\n\n return;\n }\n\n if ('error' in response) {\n throw response.error;\n }\n },\n });\n\n const {\n edit: { options },\n } = useDocumentLayout(model);\n\n // Project is not EE or contentType does not have draftAndPublish enabled\n if (!window.strapi.isEE || !options?.draftAndPublish || !canCreateAction) {\n return null;\n }\n\n if (collectionType === 'collection-types' && (!documentId || documentId === 'create')) {\n return null;\n }\n\n return {\n label: formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release',\n defaultMessage: 'Add to release',\n }),\n icon: ,\n // Entry is creating so we don't want to allow adding it to a release\n disabled: !document,\n position: ['panel', 'table-row'],\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release',\n defaultMessage: 'Add to release',\n }),\n content: (\n \n ),\n footer: ({ onClose }) => (\n \n \n handleSubmit(e, onClose)}\n disabled={!formik.values.releaseId}\n loading={isLoading}\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.add-to-release.continue-button',\n defaultMessage: 'Continue',\n })}\n \n \n ),\n },\n };\n};\n\nexport { ReleaseActionModalForm };\n"],"names":["RELEASE_ACTION_FORM_SCHEMA","yup","object","shape","type","string","oneOf","required","releaseId","INITIAL_VALUES","NoReleases","formatMessage","useIntl","_jsx","EmptyStateLayout","icon","EmptyDocuments","width","content","id","defaultMessage","action","LinkButton","to","pathname","tag","ReactRouterLink","variant","shadow","AddActionToReleaseModal","contentType","documentId","onInputChange","values","query","useQueryParams","locale","plugins","i18n","response","useGetReleasesForEntryQuery","entryDocumentId","hasEntryAttached","releases","data","length","_jsxs","Flex","direction","alignItems","gap","Box","paddingBottom","Field","Root","Label","SingleSelect","placeholder","name","onChange","value","map","release","SingleSelectOption","ReleaseActionOptions","selected","handleChange","e","target","ReleaseActionModalForm","document","model","collectionType","allowedActions","useRBAC","PERMISSIONS","canCreateAction","createReleaseAction","isLoading","useCreateReleaseActionMutation","toggleNotification","useNotification","formatAPIError","useAPIErrorHandler","handleSubmit","onClose","formik","error","isFetchError","message","useFormik","initialValues","validationSchema","onSubmit","Error","body","params","edit","options","useDocumentLayout","window","strapi","isEE","draftAndPublish","label","PaperPlane","disabled","position","dialog","title","setFieldValue","footer","Modal","Footer","Button","onClick","loading"],"mappings":"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"}