{"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 { Internal } from '@strapi/types';\ninterface Option {\n  uid: string;\n  label: string;\n  categoryName: string;\n}\n\ninterface SelectComponentProps {\n  componentToCreate?: Record<string, any> | null;\n  error?: string | null;\n  intlLabel: {\n    id: string;\n    defaultMessage: string;\n    values?: Record<string, any>;\n  };\n  isAddingAComponentToAnotherComponent: boolean;\n  isCreating: boolean;\n  isCreatingComponentWhileAddingAField: boolean;\n  name: string;\n  onChange: (value: any) => void;\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 }: any) => {\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,\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: any) => {\n          onChange({ target: { name, value, 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","type","SingleSelectOption","Error"],"mappings":"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"}