{"version":3,"file":"EntryValidationPopover.mjs","sources":["../../../admin/src/components/EntryValidationPopover.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { FormErrors, FormValues } from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument } from '@strapi/content-manager/strapi-admin';\nimport { Button, LinkButton, Flex, Typography, Popover } from '@strapi/design-system';\nimport { CheckCircle, CrossCircle, ArrowsCounterClockwise, CaretDown } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl, MessageDescriptor } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport type {\n  ReleaseAction,\n  ReleaseActionEntry,\n  Stage,\n} from '../../../shared/contracts/release-actions';\nimport type { Struct } from '@strapi/types';\n\nconst StyledPopoverFlex = styled(Flex)`\n  width: 100%;\n  max-width: 256px;\n\n  & > * {\n    border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n  }\n\n  & > *:last-child {\n    border-bottom: none;\n  }\n`;\n\nconst ButtonContent = styled(Flex)`\n  svg {\n    fill: currentColor;\n  }\n`;\n\nconst CustomStatusButton = ({\n  children,\n  icon,\n  color,\n}: {\n  icon: React.ReactElement;\n  color: string;\n} & React.PropsWithChildren) => {\n  return (\n    <Popover.Trigger>\n      <Button variant=\"ghost\" endIcon={<CaretDown />}>\n        <ButtonContent color={color} gap={2}>\n          {icon}\n          <Typography textColor={color} variant=\"omega\" fontWeight=\"bold\">\n            {children}\n          </Typography>\n        </ButtonContent>\n      </Button>\n    </Popover.Trigger>\n  );\n};\n\ninterface EntryValidationPopoverProps {\n  action: ReleaseAction['type'];\n  schema?: Struct.ContentTypeSchema & {\n    hasReviewWorkflow: boolean;\n    stageRequiredToPublish?: Stage;\n  };\n  entry: ReleaseActionEntry;\n  status: ReleaseAction['status'];\n}\n\ninterface ValidationStatusProps {\n  action: ReleaseAction['type'];\n  status: ReleaseAction['status'];\n  hasErrors: boolean | null;\n  requiredStage?: Stage;\n  entryStage?: Stage;\n}\n\nconst EntryStatusTrigger = ({\n  action,\n  status,\n  hasErrors,\n  requiredStage,\n  entryStage,\n}: ValidationStatusProps) => {\n  const { formatMessage } = useIntl();\n\n  if (action === 'publish') {\n    if (hasErrors || (requiredStage && requiredStage.id !== entryStage?.id)) {\n      return (\n        <CustomStatusButton icon={<CrossCircle />} color=\"danger600\">\n          {formatMessage({\n            id: 'content-releases.pages.ReleaseDetails.entry-validation.not-ready',\n            defaultMessage: 'Not ready to publish',\n          })}\n        </CustomStatusButton>\n      );\n    }\n\n    if (status === 'draft') {\n      return (\n        <CustomStatusButton icon={<CheckCircle />} color=\"success600\">\n          {formatMessage({\n            id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish',\n            defaultMessage: 'Ready to publish',\n          })}\n        </CustomStatusButton>\n      );\n    }\n\n    if (status === 'modified') {\n      return (\n        <CustomStatusButton icon={<ArrowsCounterClockwise />} color=\"alternative600\">\n          {formatMessage({\n            id: 'content-releases.pages.ReleaseDetails.entry-validation.modified',\n            defaultMessage: 'Ready to publish changes',\n          })}\n        </CustomStatusButton>\n      );\n    }\n\n    return (\n      <CustomStatusButton icon={<CheckCircle />} color=\"success600\">\n        {formatMessage({\n          id: 'content-releases.pages.ReleaseDetails.entry-validation.already-published',\n          defaultMessage: 'Already published',\n        })}\n      </CustomStatusButton>\n    );\n  }\n\n  if (status === 'published') {\n    return (\n      <CustomStatusButton icon={<CheckCircle />} color=\"success600\">\n        {formatMessage({\n          id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-unpublish',\n          defaultMessage: 'Ready to unpublish',\n        })}\n      </CustomStatusButton>\n    );\n  }\n\n  return (\n    <CustomStatusButton icon={<CheckCircle />} color=\"success600\">\n      {formatMessage({\n        id: 'content-releases.pages.ReleaseDetails.entry-validation.already-unpublished',\n        defaultMessage: 'Already unpublished',\n      })}\n    </CustomStatusButton>\n  );\n};\n\ninterface FieldsValidationProps {\n  hasErrors: boolean;\n  errors: FormErrors<FormValues> | null;\n  kind?: string;\n  contentTypeUid?: string;\n  documentId?: string;\n  locale?: string;\n}\n\nconst FieldsValidation = ({\n  hasErrors,\n  errors,\n  kind,\n  contentTypeUid,\n  documentId,\n  locale,\n}: FieldsValidationProps) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <Flex direction=\"column\" gap={1} width=\"100%\" padding={5}>\n      <Flex gap={2} width=\"100%\">\n        <Typography fontWeight=\"bold\">\n          {formatMessage({\n            id: 'content-releases.pages.ReleaseDetails.entry-validation.fields',\n            defaultMessage: 'Fields',\n          })}\n        </Typography>\n        {hasErrors ? <CrossCircle fill=\"danger600\" /> : <CheckCircle fill=\"success600\" />}\n      </Flex>\n      <Typography width=\"100%\" textColor=\"neutral600\">\n        {hasErrors\n          ? formatMessage(\n              {\n                id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.error',\n                defaultMessage: '{errors} errors on fields.',\n              },\n              { errors: errors ? Object.keys(errors).length : 0 }\n            )\n          : formatMessage({\n              id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.success',\n              defaultMessage: 'All fields are filled correctly.',\n            })}\n      </Typography>\n      {hasErrors && (\n        <LinkButton\n          tag={Link}\n          to={{\n            pathname: `/content-manager/${kind === 'collectionType' ? 'collection-types' : 'single-types'}/${contentTypeUid}/${documentId}`,\n            search: locale\n              ? stringify({\n                  plugins: {\n                    i18n: {\n                      locale,\n                    },\n                  },\n                })\n              : '',\n          }}\n          variant=\"secondary\"\n          fullWidth\n          state={{ forceValidation: true }}\n        >\n          {formatMessage({\n            id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.see-errors',\n            defaultMessage: 'See errors',\n          })}\n        </LinkButton>\n      )}\n    </Flex>\n  );\n};\n\nconst getReviewStageIcon = ({\n  contentTypeHasReviewWorkflow,\n  requiredStage,\n  entryStage,\n}: {\n  contentTypeHasReviewWorkflow: boolean;\n  requiredStage?: Stage;\n  entryStage?: Stage;\n}) => {\n  if (!contentTypeHasReviewWorkflow) {\n    return <CheckCircle fill=\"neutral200\" />;\n  }\n  if (requiredStage && requiredStage.id !== entryStage?.id) {\n    return <CrossCircle fill=\"danger600\" />;\n  }\n  return <CheckCircle fill=\"success600\" />;\n};\n\nconst getReviewStageMessage = ({\n  contentTypeHasReviewWorkflow,\n  requiredStage,\n  entryStage,\n  formatMessage,\n}: {\n  contentTypeHasReviewWorkflow: boolean;\n  requiredStage?: Stage;\n  entryStage?: Stage;\n  formatMessage: (messageDescriptor: MessageDescriptor, values?: Record<string, string>) => string;\n}) => {\n  if (!contentTypeHasReviewWorkflow) {\n    return formatMessage({\n      id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-enabled',\n      defaultMessage: 'This entry is not associated to any workflow.',\n    });\n  }\n\n  if (requiredStage && requiredStage.id !== entryStage?.id) {\n    return formatMessage(\n      {\n        id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-ready',\n        defaultMessage: 'This entry is not at the required stage for publishing. ({stageName})',\n      },\n      {\n        stageName: requiredStage?.name ?? '',\n      }\n    );\n  }\n\n  if (requiredStage && requiredStage.id === entryStage?.id) {\n    return formatMessage(\n      {\n        id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.ready',\n        defaultMessage: 'This entry is at the required stage for publishing. ({stageName})',\n      },\n      {\n        stageName: requiredStage?.name ?? '',\n      }\n    );\n  }\n\n  return formatMessage({\n    id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.stage-not-required',\n    defaultMessage: 'No required stage for publication',\n  });\n};\n\nconst ReviewStageValidation = ({\n  contentTypeHasReviewWorkflow,\n  requiredStage,\n  entryStage,\n}: {\n  contentTypeHasReviewWorkflow: boolean;\n  requiredStage?: Stage;\n  entryStage?: Stage;\n}) => {\n  const { formatMessage } = useIntl();\n\n  const Icon = getReviewStageIcon({\n    contentTypeHasReviewWorkflow,\n    requiredStage,\n    entryStage,\n  });\n\n  return (\n    <Flex direction=\"column\" gap={1} width=\"100%\" padding={5}>\n      <Flex gap={2} width=\"100%\">\n        <Typography fontWeight=\"bold\">\n          {formatMessage({\n            id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage',\n            defaultMessage: 'Review stage',\n          })}\n        </Typography>\n        {Icon}\n      </Flex>\n      <Typography textColor=\"neutral600\">\n        {getReviewStageMessage({\n          contentTypeHasReviewWorkflow,\n          requiredStage,\n          entryStage,\n          formatMessage,\n        })}\n      </Typography>\n    </Flex>\n  );\n};\n\nexport const EntryValidationPopover = ({\n  schema,\n  entry,\n  status,\n  action,\n}: EntryValidationPopoverProps) => {\n  const { validate, isLoading } = unstable_useDocument(\n    {\n      collectionType: schema?.kind ?? '',\n      model: schema?.uid ?? '',\n    },\n    {\n      // useDocument makes a request to get more data about the entry, but we only want to have the validation function so we skip the request\n      skip: true,\n    }\n  );\n\n  // Validation errors\n  const errors = isLoading ? null : validate(entry);\n  const hasErrors = errors ? Object.keys(errors).length > 0 : false;\n\n  // Entry stage\n  const contentTypeHasReviewWorkflow = schema?.hasReviewWorkflow ?? false;\n  const requiredStage = schema?.stageRequiredToPublish;\n  const entryStage = entry.strapi_stage;\n\n  if (isLoading) {\n    return null;\n  }\n\n  return (\n    <Popover.Root>\n      <EntryStatusTrigger\n        action={action}\n        status={status}\n        hasErrors={hasErrors}\n        requiredStage={requiredStage}\n        entryStage={entryStage}\n      />\n      <Popover.Content>\n        <StyledPopoverFlex direction=\"column\">\n          <FieldsValidation\n            hasErrors={hasErrors}\n            errors={errors}\n            contentTypeUid={schema?.uid}\n            kind={schema?.kind}\n            documentId={entry.documentId}\n            locale={entry.locale}\n          />\n          <ReviewStageValidation\n            contentTypeHasReviewWorkflow={contentTypeHasReviewWorkflow}\n            requiredStage={requiredStage}\n            entryStage={entryStage}\n          />\n        </StyledPopoverFlex>\n      </Popover.Content>\n    </Popover.Root>\n  );\n};\n"],"names":["StyledPopoverFlex","styled","Flex","theme","colors","neutral150","ButtonContent","CustomStatusButton","children","icon","color","_jsx","Popover","Trigger","Button","variant","endIcon","CaretDown","_jsxs","gap","Typography","textColor","fontWeight","EntryStatusTrigger","action","status","hasErrors","requiredStage","entryStage","formatMessage","useIntl","id","CrossCircle","defaultMessage","CheckCircle","ArrowsCounterClockwise","FieldsValidation","errors","kind","contentTypeUid","documentId","locale","direction","width","padding","fill","Object","keys","length","LinkButton","tag","Link","to","pathname","search","stringify","plugins","i18n","fullWidth","state","forceValidation","getReviewStageIcon","contentTypeHasReviewWorkflow","getReviewStageMessage","stageName","name","ReviewStageValidation","Icon","EntryValidationPopover","schema","entry","validate","isLoading","unstable_useDocument","collectionType","model","uid","skip","hasReviewWorkflow","stageRequiredToPublish","strapi_stage","Root","Content"],"mappings":"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"}