{"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 { Menu, AccessibleIcon, IconButton } 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\n// TODO: has to be fixed in the DS - https://github.com/strapi/design-system/issues/1934\nconst StyledMenuLink = styled(Menu.Item)`\n span,\n &:hover span {\n color: ${({ theme }) => theme.colors['neutral800']};\n }\n\n svg path,\n &:hover svg path {\n fill: ${({ theme }) => theme.colors['neutral500']};\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 } onSelect={handleDeleteAction}>\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.remove-from-release',\n defaultMessage: 'Remove from release',\n })}\n \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 }\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-entry',\n defaultMessage: 'Edit entry',\n })}\n \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 }\n >\n {formatMessage({\n id: 'content-releases.content-manager-edit-view.edit-release',\n defaultMessage: 'Edit release',\n })}\n \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 \n \n \n \n }\n />\n \n {children}\n \n \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":["StyledMenuLink","styled","Menu","Item","theme","colors","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","variant","startIcon","Cross","onSelect","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","_jsxs","StyledMoreButton","endIcon","IconButton","icon","AccessibleIcon","label","More","Content","top","popoverPlacement","Trigger","ReleaseActionMenu"],"mappings":"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"}