{"version":3,"file":"SelectComponent.mjs","sources":["../../../admin/src/components/SelectComponent.tsx"],"sourcesContent":["import { SingleSelectOption, SingleSelect, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { MAX_COMPONENT_DEPTH } from '../constants';\nimport { getChildrenMaxDepth, getComponentDepth } from '../utils/getMaxDepth';\n\nimport { useDataManager } from './DataManager/useDataManager';\n\nimport type { FormChangeHandler, IntlLabel } from '../types';\nimport type { Internal } from '@strapi/types';\ninterface Option {\n  uid: Internal.UID.Component;\n  label?: string;\n  categoryName?: string;\n}\n\ntype ComponentToCreate = {\n  displayName?: string;\n  category?: string;\n};\n\ninterface SelectComponentProps {\n  componentToCreate?: ComponentToCreate | null;\n  error?: string | null;\n  intlLabel: IntlLabel;\n  isAddingAComponentToAnotherComponent: boolean;\n  isCreating: boolean;\n  isCreatingComponentWhileAddingAField: boolean;\n  name: string;\n  onChange: FormChangeHandler<string, 'select-category'>;\n  targetUid: Internal.UID.Schema;\n  value: string;\n  forTarget: string;\n}\n\nexport const SelectComponent = ({\n  error = null,\n  intlLabel,\n  isAddingAComponentToAnotherComponent,\n  isCreating,\n  isCreatingComponentWhileAddingAField,\n  componentToCreate,\n  name,\n  onChange,\n  targetUid,\n  forTarget,\n  value,\n}: SelectComponentProps) => {\n  const { formatMessage } = useIntl();\n  const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n  const label = formatMessage(intlLabel);\n\n  const {\n    componentsGroupedByCategory,\n    componentsThatHaveOtherComponentInTheirAttributes,\n    nestedComponents,\n  } = useDataManager();\n\n  const isTargetAComponent = forTarget === 'component';\n\n  let options: Option[] = Object.entries(componentsGroupedByCategory).reduce(\n    (acc: Option[], current) => {\n      const [categoryName, components] = current;\n      const compos = components.map((component) => {\n        return {\n          uid: component.uid,\n          label: component.info.displayName,\n          categoryName,\n        };\n      });\n\n      return [...acc, ...compos];\n    },\n    []\n  );\n\n  if (isAddingAComponentToAnotherComponent) {\n    options = options.filter(({ uid }) => {\n      const maxDepth = getChildrenMaxDepth(uid, componentsThatHaveOtherComponentInTheirAttributes);\n      const componentDepth = getComponentDepth(targetUid, nestedComponents);\n      const totalDepth = maxDepth + componentDepth;\n      return totalDepth <= MAX_COMPONENT_DEPTH;\n    });\n  }\n\n  if (isTargetAComponent) {\n    options = options.filter((option) => {\n      return option.uid !== targetUid;\n    });\n  }\n\n  if (isCreatingComponentWhileAddingAField) {\n    options = [\n      {\n        uid: value as Internal.UID.Component,\n        label: componentToCreate?.displayName,\n        categoryName: componentToCreate?.category,\n      },\n    ];\n  }\n\n  return (\n    <Field.Root error={errorMessage} name={name}>\n      <Field.Label>{label}</Field.Label>\n      <SingleSelect\n        disabled={isCreatingComponentWhileAddingAField || !isCreating}\n        onChange={(value: string | number) => {\n          onChange({ target: { name, value: value.toString(), type: 'select-category' } });\n        }}\n        value={value || ''}\n      >\n        {options.map((option) => {\n          return (\n            <SingleSelectOption key={option.uid} value={option.uid}>\n              {`${option.categoryName} - ${option.label}`}\n            </SingleSelectOption>\n          );\n        })}\n      </SingleSelect>\n      <Field.Error />\n    </Field.Root>\n  );\n};\n"],"names":["SelectComponent","error","intlLabel","isAddingAComponentToAnotherComponent","isCreating","isCreatingComponentWhileAddingAField","componentToCreate","name","onChange","targetUid","forTarget","value","formatMessage","useIntl","errorMessage","id","defaultMessage","label","componentsGroupedByCategory","componentsThatHaveOtherComponentInTheirAttributes","nestedComponents","useDataManager","isTargetAComponent","options","Object","entries","reduce","acc","current","categoryName","components","compos","map","component","uid","info","displayName","filter","maxDepth","getChildrenMaxDepth","componentDepth","getComponentDepth","totalDepth","MAX_COMPONENT_DEPTH","option","category","_jsxs","Field","Root","_jsx","Label","SingleSelect","disabled","target","toString","type","SingleSelectOption","Error"],"mappings":"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"}