{"version":3,"file":"DynamicEnum-Lh31j-z3.mjs","sources":["../../admin/src/components/DynamicEnum.tsx"],"sourcesContent":["import {\n  SingleSelect,\n  SingleSelectOption,\n  MultiSelect,\n  MultiSelectOption,\n  Field,\n} from '@strapi/design-system';\n// import { Stack } from '@strapi/design-system/Stack';\nimport { getFetchClient /*, InputProps */ } from '@strapi/strapi/admin';\nimport { MouseEvent, useEffect, useState } from 'react';\nimport { useIntl, MessageDescriptor } from 'react-intl';\nimport pluginId from '../pluginId';\n\nexport type DynamicEnumOptions = {\n  lookupSingleType: string;\n  lookupField: string;\n};\n\nfunction isMessageDescriptor(message?: MessageDescriptor | string): message is MessageDescriptor {\n  return (message as MessageDescriptor)?.id !== undefined;\n}\n\nexport type DynamicEnumProps = {\n  attribute: {\n    options: DynamicEnumOptions;\n  };\n  description?: MessageDescriptor | string;\n  placeholder?: MessageDescriptor | string;\n  hint: string;\n  name: string;\n  label?: MessageDescriptor | string;\n  onChange: (value: { target: { name: string; value?: string | string[]; type: string } }) => void;\n  contentTypeUID: string;\n  type: string;\n  value?: string | string[];\n  required?: boolean;\n  error?: MessageDescriptor | string;\n  disabled?: boolean;\n};\n\nexport const makeDynamicEnum =\n  (multiSelect: boolean): React.FunctionComponent<DynamicEnumProps> =>\n  (props) => {\n    const {\n      value,\n      onChange,\n      name,\n      label,\n      required,\n      hint,\n      attribute,\n      placeholder,\n      disabled,\n      type,\n      error,\n    } = props;\n\n    const configuration = attribute.options;\n\n    const { formatMessage } = useIntl();\n    const [isLoading, setIsLoading] = useState<boolean>(false);\n    const [options, setOptions] = useState<string[]>([]);\n    const [optionsLoadingError, setLoadingError] = useState<any | undefined>();\n\n    const translate = (message?: MessageDescriptor | string) =>\n      isMessageDescriptor(message) ? formatMessage(message) : message;\n\n    const loadEnumOptions = async () => {\n      if (isLoading) return;\n      setIsLoading(true);\n      try {\n        const { get } = getFetchClient();\n        const res = await get<{ data: { [key: string]: string | undefined } }>(\n          `/content-manager/single-types/${configuration.lookupSingleType}`\n        );\n\n        if (!res.status || res.status < 400) {\n          const optionsString = res.data.data[configuration.lookupField];\n          if (optionsString) {\n            setOptions(optionsString.match(/\\S+/g) || []);\n          }\n        } else {\n          setLoadingError(`Error, code:  ${res.status}`);\n        }\n      } catch (err) {\n        setLoadingError((err as any)?.message || err?.toString());\n      } finally {\n        setIsLoading(false);\n      }\n    };\n\n    useEffect(() => {\n      loadEnumOptions();\n    }, []);\n\n    const handleSelectChange = (value?: string | string[]) =>\n      onChange({\n        target: { name, type, value },\n      });\n\n    const clear = (event: MouseEvent) => {\n      event.stopPropagation();\n      event.preventDefault();\n      onChange({\n        target: { name, type },\n      });\n    };\n\n    const selectOptionsList = options.map((opt) => {\n      return multiSelect ? (\n        <MultiSelectOption value={opt} key={opt}>\n          {opt}\n        </MultiSelectOption>\n      ) : (\n        <SingleSelectOption value={opt} key={opt}>\n          {opt}\n        </SingleSelectOption>\n      );\n    });\n\n    return (\n      <Field.Root\n        name={name}\n        id={name}\n        hint={translate(hint)}\n        error={translate(error || optionsLoadingError)}\n        required={required}\n      >\n        <Field.Label>{translate(label)}</Field.Label>\n        {multiSelect ? (\n          <MultiSelect\n            placeholder={translate(placeholder)}\n            name={name}\n            onChange={(value: string[]) => handleSelectChange(value)}\n            value={value as string[]}\n            disabled={disabled}\n            required={required}\n            onClear={clear}\n            withTags\n          >\n            {selectOptionsList}\n          </MultiSelect>\n        ) : (\n          <SingleSelect\n            placeholder={translate(placeholder)}\n            name={name}\n            onChange={(value: string | number) => handleSelectChange(`${value}`)}\n            value={value as string}\n            disabled={disabled}\n            required={required}\n            onClear={clear}\n          >\n            {selectOptionsList}\n          </SingleSelect>\n        )}\n        <Field.Hint />\n        <Field.Error />\n      </Field.Root>\n    );\n  };\n\nexport default makeDynamicEnum;\n"],"names":["value"],"mappings":"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"}