@grafana/alerting
Version:
Grafana Alerting Library – Build vertical integrations on top of the industry-leading alerting solution
45 lines (42 loc) • 1.85 kB
JavaScript
import { jsx } from 'react/jsx-runtime';
import { chain } from 'lodash';
import { Combobox } from '@grafana/ui';
import { useListContactPoints } from '../../hooks/v0alpha1/useContactPoints.mjs';
import { isUsableContactPoint, getContactPointDescription } from '../../utils.mjs';
;
const collator = new Intl.Collator("en", { sensitivity: "accent" });
function ContactPointSelector(props) {
const { includeUnusable = false, ...comboboxProps } = props;
const { currentData: contactPoints, isLoading } = useListContactPoints(
{},
{ refetchOnFocus: true, refetchOnMountOrArgChange: true }
);
const contactPointOptions = chain(contactPoints == null ? void 0 : contactPoints.items).toArray().filter((contactPoint) => includeUnusable || isUsableContactPoint(contactPoint)).map((contactPoint) => {
var _a;
return {
option: {
label: contactPoint.spec.title,
value: (_a = contactPoint.metadata.uid) != null ? _a : contactPoint.spec.title,
description: getContactPointDescription(contactPoint)
},
contactPoint
};
}).value().sort((a, b) => collator.compare(a.option.label, b.option.label));
const options = contactPointOptions.map((item) => item.option);
const handleChange = (selectedOption) => {
if (selectedOption == null && comboboxProps.isClearable) {
comboboxProps.onChange(null);
return;
}
if (selectedOption) {
const matchedOption = contactPointOptions.find(({ option }) => option.value === selectedOption.value);
if (!matchedOption) {
return;
}
comboboxProps.onChange(matchedOption.contactPoint);
}
};
return /* @__PURE__ */ jsx(Combobox, { ...comboboxProps, loading: isLoading, options, onChange: handleChange });
}
export { ContactPointSelector };
//# sourceMappingURL=ContactPointSelector.mjs.map