@turbo-red/strapi-plugin-lookup-enum
Version:
Like enum field, but options are extracted from a field provided by a single-type content.
1 lines • 6.86 kB
Source Map (JSON)
{"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":";;;;;AAkBA,SAAS,oBAAoB,SAAoE;AAC/F,SAAQ,SAA+B,OAAO;AAChD;AAoBO,MAAM,kBACX,CAAC,gBACD,CAAC,UAAU;AACH,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACE,IAAA;AAEJ,QAAM,gBAAgB,UAAU;AAE1B,QAAA,EAAE,kBAAkB;AAC1B,QAAM,CAAC,WAAW,YAAY,IAAI,SAAkB,KAAK;AACzD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAmB,CAAE,CAAA;AACnD,QAAM,CAAC,qBAAqB,eAAe,IAAI,SAA0B;AAEnE,QAAA,YAAY,CAAC,YACjB,oBAAoB,OAAO,IAAI,cAAc,OAAO,IAAI;AAE1D,QAAM,kBAAkB,YAAY;AAClC,QAAI,UAAW;AACf,iBAAa,IAAI;AACb,QAAA;AACI,YAAA,EAAE,QAAQ;AAChB,YAAM,MAAM,MAAM;AAAA,QAChB,iCAAiC,cAAc,gBAAgB;AAAA,MAAA;AAGjE,UAAI,CAAC,IAAI,UAAU,IAAI,SAAS,KAAK;AACnC,cAAM,gBAAgB,IAAI,KAAK,KAAK,cAAc,WAAW;AAC7D,YAAI,eAAe;AACjB,qBAAW,cAAc,MAAM,MAAM,KAAK,CAAE,CAAA;AAAA,QAC9C;AAAA,MAAA,OACK;AACW,wBAAA,iBAAiB,IAAI,MAAM,EAAE;AAAA,MAC/C;AAAA,aACO,KAAK;AACZ,sBAAiB,KAAa,WAAW,KAAK,SAAU,CAAA;AAAA,IAAA,UACxD;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EAAA;AAGF,YAAU,MAAM;AACE;EAClB,GAAG,CAAE,CAAA;AAEC,QAAA,qBAAqB,CAACA,WAC1B,SAAS;AAAA,IACP,QAAQ,EAAE,MAAM,MAAM,OAAAA,OAAM;AAAA,EAAA,CAC7B;AAEG,QAAA,QAAQ,CAAC,UAAsB;AACnC,UAAM,gBAAgB;AACtB,UAAM,eAAe;AACZ,aAAA;AAAA,MACP,QAAQ,EAAE,MAAM,KAAK;AAAA,IAAA,CACtB;AAAA,EAAA;AAGH,QAAM,oBAAoB,QAAQ,IAAI,CAAC,QAAQ;AAC7C,WAAO,cACL,oBAAC,mBAAkB,EAAA,OAAO,KACvB,UAAA,OADiC,GAEpC,IAEC,oBAAA,oBAAA,EAAmB,OAAO,KACxB,iBADkC,GAErC;AAAA,EAAA,CAEH;AAGC,SAAA;AAAA,IAAC,MAAM;AAAA,IAAN;AAAA,MACC;AAAA,MACA,IAAI;AAAA,MACJ,MAAM,UAAU,IAAI;AAAA,MACpB,OAAO,UAAU,SAAS,mBAAmB;AAAA,MAC7C;AAAA,MAEA,UAAA;AAAA,QAAA,oBAAC,MAAM,OAAN,EAAa,UAAA,UAAU,KAAK,GAAE;AAAA,QAC9B,cACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,aAAa,UAAU,WAAW;AAAA,YAClC;AAAA,YACA,UAAU,CAACA,WAAoB,mBAAmBA,MAAK;AAAA,YACvD;AAAA,YACA;AAAA,YACA;AAAA,YACA,SAAS;AAAA,YACT,UAAQ;AAAA,YAEP,UAAA;AAAA,UAAA;AAAA,QAAA,IAGH;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,aAAa,UAAU,WAAW;AAAA,YAClC;AAAA,YACA,UAAU,CAACA,WAA2B,mBAAmB,GAAGA,MAAK,EAAE;AAAA,YACnE;AAAA,YACA;AAAA,YACA;AAAA,YACA,SAAS;AAAA,YAER,UAAA;AAAA,UAAA;AAAA,QACH;AAAA,QAEF,oBAAC,MAAM,MAAN,EAAW;AAAA,QACZ,oBAAC,MAAM,OAAN,EAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGnB;"}