{"version":3,"file":"WorkflowAttributes.mjs","sources":["../../../../../admin/src/routes/settings/components/WorkflowAttributes.tsx"],"sourcesContent":["import { InputRenderer, useField, useForm } from '@strapi/admin/strapi-admin';\nimport {\n  Field,\n  Grid,\n  MultiSelect,\n  MultiSelectGroup,\n  MultiSelectOption,\n  Typography,\n  useCollator,\n  SingleSelect,\n  SingleSelectOption,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useGetContentTypesQuery } from '../../../services/content-manager';\nimport { useReviewWorkflows } from '../hooks/useReviewWorkflows';\n\nimport type { WorkflowStage } from './Stages';\n\n/* -------------------------------------------------------------------------------------------------\n * WorkflowAttributes\n * -----------------------------------------------------------------------------------------------*/\ninterface WorkflowAttributesProps {\n  canUpdate?: boolean;\n}\n\nconst WorkflowAttributes = ({ canUpdate = true }: WorkflowAttributesProps) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <Grid.Root background=\"neutral0\" hasRadius gap={4} padding={6} shadow=\"tableShadow\">\n      <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n        <InputRenderer\n          disabled={!canUpdate}\n          label={formatMessage({\n            id: 'Settings.review-workflows.workflow.name.label',\n            defaultMessage: 'Workflow Name',\n          })}\n          name=\"name\"\n          required\n          type=\"text\"\n        />\n      </Grid.Item>\n      <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n        <ContentTypesSelector disabled={!canUpdate} />\n      </Grid.Item>\n      <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n        <StageSelector disabled={!canUpdate} />\n      </Grid.Item>\n    </Grid.Root>\n  );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ContentTypesSelector\n * -----------------------------------------------------------------------------------------------*/\ninterface ContentTypesSelectorProps {\n  disabled?: boolean;\n}\n\nconst ContentTypesSelector = ({ disabled }: ContentTypesSelectorProps) => {\n  const { formatMessage, locale } = useIntl();\n  const { data: contentTypes, isLoading } = useGetContentTypesQuery();\n  const { workflows } = useReviewWorkflows();\n  const currentWorkflow = useForm('ContentTypesSelector', (state) => state.values);\n\n  const { error, value, onChange } = useField('contentTypes');\n\n  const formatter = useCollator(locale, {\n    sensitivity: 'base',\n  });\n\n  const isDisabled =\n    disabled ||\n    isLoading ||\n    !contentTypes ||\n    (contentTypes.collectionType.length === 0 && contentTypes.singleType.length === 0);\n\n  const collectionTypes = (contentTypes?.collectionType ?? [])\n    .toSorted((a, b) => formatter.compare(a.info.displayName, b.info.displayName))\n    .map((contentType) => ({\n      label: contentType.info.displayName,\n      value: contentType.uid,\n    }));\n\n  const singleTypes = (contentTypes?.singleType ?? []).map((contentType) => ({\n    label: contentType.info.displayName,\n    value: contentType.uid,\n  }));\n\n  return (\n    <Field.Root error={error} name={'contentTypes'}>\n      <Field.Label>\n        {formatMessage({\n          id: 'Settings.review-workflows.workflow.contentTypes.label',\n          defaultMessage: 'Associated to',\n        })}\n      </Field.Label>\n      <MultiSelect\n        customizeContent={(value) =>\n          formatMessage(\n            {\n              id: 'Settings.review-workflows.workflow.contentTypes.displayValue',\n              defaultMessage:\n                '{count} {count, plural, one {content type} other {content types}} selected',\n            },\n            { count: value?.length }\n          )\n        }\n        disabled={isDisabled}\n        onChange={(values) => {\n          onChange('contentTypes', values);\n        }}\n        value={value}\n        placeholder={formatMessage({\n          id: 'Settings.review-workflows.workflow.contentTypes.placeholder',\n          defaultMessage: 'Select',\n        })}\n      >\n        {[\n          ...(collectionTypes.length > 0\n            ? [\n                {\n                  label: formatMessage({\n                    id: 'Settings.review-workflows.workflow.contentTypes.collectionTypes.label',\n                    defaultMessage: 'Collection Types',\n                  }),\n                  children: collectionTypes,\n                },\n              ]\n            : []),\n\n          ...(singleTypes.length > 0\n            ? [\n                {\n                  label: formatMessage({\n                    id: 'Settings.review-workflows.workflow.contentTypes.singleTypes.label',\n                    defaultMessage: 'Single Types',\n                  }),\n                  children: singleTypes,\n                },\n              ]\n            : []),\n        ].map((opt) => {\n          return (\n            <MultiSelectGroup\n              key={opt.label}\n              label={opt.label}\n              values={opt.children.map((child) => child.value.toString())}\n            >\n              {opt.children.map((child) => {\n                const { name: assignedWorkflowName } =\n                  workflows?.find(\n                    (workflow) =>\n                      ((currentWorkflow && workflow.id !== currentWorkflow.id) ||\n                        !currentWorkflow) &&\n                      workflow.contentTypes.includes(child.value)\n                  ) ?? {};\n\n                return (\n                  <NestedOption key={child.value} value={child.value}>\n                    <Typography>\n                      {\n                        // @ts-expect-error - formatMessage options doesn't expect to be a React component but that's what we need actually for the <i> and <em> components\n                        formatMessage(\n                          {\n                            id: 'Settings.review-workflows.workflow.contentTypes.assigned.notice',\n                            defaultMessage:\n                              '{label} {name, select, undefined {} other {<i>(assigned to <em>{name}</em> workflow)</i>}}',\n                          },\n                          {\n                            label: child.label,\n                            name: assignedWorkflowName,\n                            em: (...children) => (\n                              <Typography tag=\"em\" fontWeight=\"bold\">\n                                {children}\n                              </Typography>\n                            ),\n                            i: (...children) => (\n                              <ContentTypeTakeNotice>{children}</ContentTypeTakeNotice>\n                            ),\n                          }\n                        )\n                      }\n                    </Typography>\n                  </NestedOption>\n                );\n              })}\n            </MultiSelectGroup>\n          );\n        })}\n      </MultiSelect>\n    </Field.Root>\n  );\n};\n\nconst NestedOption = styled(MultiSelectOption)`\n  padding-left: ${({ theme }) => theme.spaces[7]};\n`;\n\nconst ContentTypeTakeNotice = styled(Typography)`\n  font-style: italic;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * StageSelector\n * -----------------------------------------------------------------------------------------------*/\ninterface StageSelectorProps {\n  disabled?: boolean;\n}\n\nconst StageSelector = ({ disabled }: StageSelectorProps) => {\n  const { value: stages = [] } = useField<WorkflowStage[]>('stages');\n  const { formatMessage } = useIntl();\n\n  const { error, value, onChange } = useField('stageRequiredToPublish');\n\n  // stages with empty names are not valid, so we avoid them from being used to avoid errors\n  const validStages = stages.filter((stage) => stage.name);\n\n  return (\n    <Field.Root\n      error={error}\n      name=\"stageRequiredToPublish\"\n      hint={formatMessage({\n        id: 'settings.review-workflows.workflow.stageRequiredToPublish.hint',\n        defaultMessage:\n          'Prevents entries from being published if they are not at the required stage.',\n      })}\n    >\n      <Field.Label>\n        {formatMessage({\n          id: 'settings.review-workflows.workflow.stageRequiredToPublish.label',\n          defaultMessage: 'Required stage for publishing',\n        })}\n      </Field.Label>\n      <SingleSelect\n        disabled={disabled}\n        onChange={(value) => {\n          onChange('stageRequiredToPublish', value);\n        }}\n        value={value}\n      >\n        <SingleSelectOption value={''}>\n          {formatMessage({\n            id: 'settings.review-workflows.workflow.stageRequiredToPublish.any',\n            defaultMessage: 'Any stage',\n          })}\n        </SingleSelectOption>\n        {validStages.map((stage, i) => (\n          <SingleSelectOption\n            key={`requiredToPublishStage-${stage.id || stage.__temp_key__}`}\n            value={stage.id?.toString() || stage.__temp_key__}\n          >\n            {stage.name}\n          </SingleSelectOption>\n        ))}\n      </SingleSelect>\n      <Field.Hint />\n    </Field.Root>\n  );\n};\n\nexport { WorkflowAttributes };\nexport type { WorkflowAttributesProps };\n"],"names":["WorkflowAttributes","canUpdate","formatMessage","useIntl","_jsxs","Grid","Root","background","hasRadius","gap","padding","shadow","_jsx","Item","col","xs","direction","alignItems","InputRenderer","disabled","label","id","defaultMessage","name","required","type","ContentTypesSelector","StageSelector","locale","data","contentTypes","isLoading","useGetContentTypesQuery","workflows","useReviewWorkflows","currentWorkflow","useForm","state","values","error","value","onChange","useField","formatter","useCollator","sensitivity","isDisabled","collectionType","length","singleType","collectionTypes","toSorted","a","b","compare","info","displayName","map","contentType","uid","singleTypes","Field","Label","MultiSelect","customizeContent","count","placeholder","children","opt","MultiSelectGroup","child","toString","assignedWorkflowName","find","workflow","includes","NestedOption","Typography","em","tag","fontWeight","i","ContentTypeTakeNotice","styled","MultiSelectOption","theme","spaces","stages","validStages","filter","stage","hint","SingleSelect","SingleSelectOption","__temp_key__","Hint"],"mappings":"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"}