{"version":3,"file":"SelectComponents.mjs","sources":["../../../admin/src/components/SelectComponents.tsx"],"sourcesContent":["import { Field, MultiSelectNested } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../utils';\nimport { findAttribute } from '../utils/findAttribute';\n\nimport { useDataManager } from './DataManager/useDataManager';\n\nimport type { Component } from '../types';\nimport type { Internal } from '@strapi/types';\n\ntype SelectComponentsProps = {\n  dynamicZoneTarget: string;\n  intlLabel: {\n    id: string;\n    defaultMessage: string;\n    values?: object;\n  };\n  name: string;\n  onChange: (value: {\n    target: {\n      name: string;\n      value: string[];\n      type?: string;\n    };\n  }) => void;\n  value: string[];\n  targetUid: Internal.UID.ContentType;\n};\n\nexport const SelectComponents = ({\n  dynamicZoneTarget,\n  intlLabel,\n  name,\n  onChange,\n  value,\n  targetUid,\n}: SelectComponentsProps) => {\n  const { formatMessage } = useIntl();\n  const { componentsGroupedByCategory, contentTypes } = useDataManager();\n  const dzSchema = findAttribute(contentTypes[targetUid].attributes, dynamicZoneTarget);\n\n  if (!dzSchema) {\n    return null;\n  }\n\n  const alreadyUsedComponents = 'components' in dzSchema ? dzSchema?.components : [];\n\n  const filteredComponentsGroupedByCategory = Object.keys(componentsGroupedByCategory).reduce(\n    (acc, current) => {\n      const filteredComponents = componentsGroupedByCategory[current].filter(({ uid }) => {\n        return !alreadyUsedComponents.includes(uid);\n      });\n\n      if (filteredComponents.length > 0) {\n        acc[current] = filteredComponents;\n      }\n\n      return acc;\n    },\n    {} as Record<string, Component[]>\n  );\n  const options = Object.entries(filteredComponentsGroupedByCategory).reduce(\n    (acc, current) => {\n      const [categoryName, components] = current;\n      const section = {\n        label: categoryName,\n        children: components.map(({ uid, info: { displayName } }) => {\n          return { label: displayName, value: uid };\n        }),\n      };\n\n      acc.push(section);\n\n      return acc;\n    },\n    [] as Array<{ label: string; children: Array<{ label: string; value: string }> }>\n  );\n\n  const displayedValue = formatMessage(\n    {\n      id: getTrad('components.SelectComponents.displayed-value'),\n      defaultMessage:\n        '{number, plural, =0 {# components} one {# component} other {# components}} selected',\n    },\n    { number: value?.length ?? 0 }\n  );\n\n  return (\n    <Field.Root name={name}>\n      <Field.Label>{formatMessage(intlLabel)}</Field.Label>\n      <MultiSelectNested\n        id=\"select1\"\n        customizeContent={() => displayedValue}\n        onChange={(values) => {\n          onChange({ target: { name, value: values, type: 'select-components' } });\n        }}\n        options={options}\n        value={value || []}\n      />\n    </Field.Root>\n  );\n};\n"],"names":["SelectComponents","dynamicZoneTarget","intlLabel","name","onChange","value","targetUid","formatMessage","useIntl","componentsGroupedByCategory","contentTypes","useDataManager","dzSchema","findAttribute","attributes","alreadyUsedComponents","components","filteredComponentsGroupedByCategory","Object","keys","reduce","acc","current","filteredComponents","filter","uid","includes","length","options","entries","categoryName","section","label","children","map","info","displayName","push","displayedValue","id","getTrad","defaultMessage","number","_jsxs","Field","Root","_jsx","Label","MultiSelectNested","customizeContent","values","target","type"],"mappings":";;;;;;;AA8BO,MAAMA,gBAAAA,GAAmB,CAAC,EAC/BC,iBAAiB,EACjBC,SAAS,EACTC,IAAI,EACJC,QAAQ,EACRC,KAAK,EACLC,SAAS,EACa,GAAA;IACtB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,2BAA2B,EAAEC,YAAY,EAAE,GAAGC,cAAAA,EAAAA;AACtD,IAAA,MAAMC,WAAWC,aAAAA,CAAcH,YAAY,CAACJ,SAAAA,CAAU,CAACQ,UAAU,EAAEb,iBAAAA,CAAAA;AAEnE,IAAA,IAAI,CAACW,QAAAA,EAAU;QACb,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,MAAMG,qBAAAA,GAAwB,YAAA,IAAgBH,QAAAA,GAAWA,QAAAA,EAAUI,aAAa,EAAE;IAElF,MAAMC,mCAAAA,GAAsCC,OAAOC,IAAI,CAACV,6BAA6BW,MAAM,CACzF,CAACC,GAAAA,EAAKC,OAAAA,GAAAA;QACJ,MAAMC,kBAAAA,GAAqBd,2BAA2B,CAACa,OAAAA,CAAQ,CAACE,MAAM,CAAC,CAAC,EAAEC,GAAG,EAAE,GAAA;YAC7E,OAAO,CAACV,qBAAAA,CAAsBW,QAAQ,CAACD,GAAAA,CAAAA;AACzC,QAAA,CAAA,CAAA;QAEA,IAAIF,kBAAAA,CAAmBI,MAAM,GAAG,CAAA,EAAG;YACjCN,GAAG,CAACC,QAAQ,GAAGC,kBAAAA;AACjB,QAAA;QAEA,OAAOF,GAAAA;AACT,IAAA,CAAA,EACA,EAAC,CAAA;IAEH,MAAMO,OAAAA,GAAUV,OAAOW,OAAO,CAACZ,qCAAqCG,MAAM,CACxE,CAACC,GAAAA,EAAKC,OAAAA,GAAAA;QACJ,MAAM,CAACQ,YAAAA,EAAcd,UAAAA,CAAW,GAAGM,OAAAA;AACnC,QAAA,MAAMS,OAAAA,GAAU;YACdC,KAAAA,EAAOF,YAAAA;YACPG,QAAAA,EAAUjB,UAAAA,CAAWkB,GAAG,CAAC,CAAC,EAAET,GAAG,EAAEU,IAAAA,EAAM,EAAEC,WAAW,EAAE,EAAE,GAAA;gBACtD,OAAO;oBAAEJ,KAAAA,EAAOI,WAAAA;oBAAa/B,KAAAA,EAAOoB;AAAI,iBAAA;AAC1C,YAAA,CAAA;AACF,SAAA;AAEAJ,QAAAA,GAAAA,CAAIgB,IAAI,CAACN,OAAAA,CAAAA;QAET,OAAOV,GAAAA;AACT,IAAA,CAAA,EACA,EAAE,CAAA;AAGJ,IAAA,MAAMiB,iBAAiB/B,aAAAA,CACrB;AACEgC,QAAAA,EAAAA,EAAIC,OAAAA,CAAQ,6CAAA,CAAA;QACZC,cAAAA,EACE;KACJ,EACA;AAAEC,QAAAA,MAAAA,EAAQrC,OAAOsB,MAAAA,IAAU;AAAE,KAAA,CAAA;IAG/B,qBACEgB,IAAA,CAACC,MAAMC,IAAI,EAAA;QAAC1C,IAAAA,EAAMA,IAAAA;;AAChB,0BAAA2C,GAAA,CAACF,MAAMG,KAAK,EAAA;0BAAExC,aAAAA,CAAcL,SAAAA;;0BAC5B4C,GAAA,CAACE,iBAAAA,EAAAA;gBACCT,EAAAA,EAAG,SAAA;AACHU,gBAAAA,gBAAAA,EAAkB,IAAMX,cAAAA;AACxBlC,gBAAAA,QAAAA,EAAU,CAAC8C,MAAAA,GAAAA;oBACT9C,QAAAA,CAAS;wBAAE+C,MAAAA,EAAQ;AAAEhD,4BAAAA,IAAAA;4BAAME,KAAAA,EAAO6C,MAAAA;4BAAQE,IAAAA,EAAM;AAAoB;AAAE,qBAAA,CAAA;AACxE,gBAAA,CAAA;gBACAxB,OAAAA,EAASA,OAAAA;AACTvB,gBAAAA,KAAAA,EAAOA,SAAS;;;;AAIxB;;;;"}