@grafana/alerting
Version:
Grafana Alerting Library – Build vertical integrations on top of the industry-leading alerting solution
1 lines • 3.5 kB
Source Map (JSON)
{"version":3,"file":"ContactPointSelector.mjs","sources":["../../../../../../src/grafana/contactPoints/components/ContactPointSelector/ContactPointSelector.tsx"],"sourcesContent":["import { chain } from 'lodash';\n\nimport { Combobox, ComboboxOption } from '@grafana/ui';\n\nimport type { ContactPoint } from '../../../api/v0alpha1/types';\nimport { useListContactPoints } from '../../hooks/v0alpha1/useContactPoints';\nimport { getContactPointDescription } from '../../utils';\n\nimport { CustomComboBoxProps } from './ComboBox.types';\n\nconst collator = new Intl.Collator('en', { sensitivity: 'accent' });\n\nexport type ContactPointSelectorProps = CustomComboBoxProps<ContactPoint>;\n\n/**\n * Contact Point Combobox which lists all available contact points\n * @TODO make ComboBox accept a ReactNode so we can use icons and such\n */\nfunction ContactPointSelector(props: ContactPointSelectorProps) {\n const { currentData: contactPoints, isLoading } = useListContactPoints();\n\n // Create a mapping of options with their corresponding contact points\n const contactPointOptions = chain(contactPoints?.items)\n .toArray()\n .map((contactPoint) => ({\n option: {\n label: contactPoint.spec.title,\n value: contactPoint.metadata.uid ?? contactPoint.spec.title,\n description: getContactPointDescription(contactPoint),\n } satisfies ComboboxOption<string>,\n contactPoint,\n }))\n .value()\n .sort((a, b) => collator.compare(a.option.label, b.option.label));\n\n const options = contactPointOptions.map<ComboboxOption>((item) => item.option);\n\n const handleChange = (selectedOption: ComboboxOption<string> | null) => {\n if (selectedOption == null && props.isClearable) {\n props.onChange(null);\n return;\n }\n\n if (selectedOption) {\n const matchedOption = contactPointOptions.find(({ option }) => option.value === selectedOption.value);\n if (!matchedOption) {\n return;\n }\n\n props.onChange(matchedOption.contactPoint);\n }\n };\n\n return <Combobox {...props} loading={isLoading} options={options} onChange={handleChange} />;\n}\n\nexport { ContactPointSelector };\n"],"names":[],"mappings":";;;;;;AAUA,MAAM,QAAA,GAAW,IAAI,IAAK,CAAA,QAAA,CAAS,MAAM,EAAE,WAAA,EAAa,UAAU,CAAA;AAQlE,SAAS,qBAAqB,KAAkC,EAAA;AAC9D,EAAA,MAAM,EAAE,WAAA,EAAa,aAAe,EAAA,SAAA,KAAc,oBAAqB,EAAA;AAGvE,EAAM,MAAA,mBAAA,GAAsB,MAAM,aAAe,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAA,KAAK,EACnD,OAAQ,EAAA,CACR,GAAI,CAAA,CAAC,YAAc,KAAA;AAxBxB,IAAA,IAAA,EAAA;AAwB4B,IAAA,OAAA;AAAA,MACtB,MAAQ,EAAA;AAAA,QACN,KAAA,EAAO,aAAa,IAAK,CAAA,KAAA;AAAA,QACzB,QAAO,EAAa,GAAA,YAAA,CAAA,QAAA,CAAS,GAAtB,KAAA,IAAA,GAAA,EAAA,GAA6B,aAAa,IAAK,CAAA,KAAA;AAAA,QACtD,WAAA,EAAa,2BAA2B,YAAY;AAAA,OACtD;AAAA,MACA;AAAA,KACF;AAAA,GAAE,CACD,CAAA,KAAA,EACA,CAAA,IAAA,CAAK,CAAC,CAAG,EAAA,CAAA,KAAM,QAAS,CAAA,OAAA,CAAQ,EAAE,MAAO,CAAA,KAAA,EAAO,CAAE,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAElE,EAAA,MAAM,UAAU,mBAAoB,CAAA,GAAA,CAAoB,CAAC,IAAA,KAAS,KAAK,MAAM,CAAA;AAE7E,EAAM,MAAA,YAAA,GAAe,CAAC,cAAkD,KAAA;AACtE,IAAI,IAAA,cAAA,IAAkB,IAAQ,IAAA,KAAA,CAAM,WAAa,EAAA;AAC/C,MAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AACnB,MAAA;AAAA;AAGF,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAM,MAAA,aAAA,GAAgB,mBAAoB,CAAA,IAAA,CAAK,CAAC,EAAE,QAAa,KAAA,MAAA,CAAO,KAAU,KAAA,cAAA,CAAe,KAAK,CAAA;AACpG,MAAA,IAAI,CAAC,aAAe,EAAA;AAClB,QAAA;AAAA;AAGF,MAAM,KAAA,CAAA,QAAA,CAAS,cAAc,YAAY,CAAA;AAAA;AAC3C,GACF;AAEA,EAAO,uBAAA,GAAA,CAAC,YAAU,GAAG,KAAA,EAAO,SAAS,SAAW,EAAA,OAAA,EAAkB,UAAU,YAAc,EAAA,CAAA;AAC5F;;;;"}