UNPKG

@grafana/alerting

Version:

Grafana Alerting Library – Build vertical integrations on top of the industry-leading alerting solution

67 lines (64 loc) 2.21 kB
import { useCallback, useMemo } from 'react'; import { generatedAPI } from '@grafana/api-clients/rtkq/notifications.alerting/v0alpha1'; import { USER_DEFINED_TREE_NAME } from '../consts.mjs'; import { convertRoutingTreeToRoute, matchInstancesToRoute } from '../utils.mjs'; "use strict"; function useMatchInstancesToRouteTrees() { const { data, ...rest } = generatedAPI.endpoints.listRoutingTree.useQuery( {}, { refetchOnFocus: true, refetchOnReconnect: true } ); const memoizedFunction = useCallback( (instances) => { var _a; return matchInstancesToRouteTrees((_a = data == null ? void 0 : data.items) != null ? _a : [], instances); }, [data == null ? void 0 : data.items] ); return { matchInstancesToRouteTrees: memoizedFunction, ...rest }; } function useMatchInstancesToSpecificRouteTree(routingTree, instances) { return useMemo(() => { if (!routingTree) { return null; } const rootRoute = convertRoutingTreeToRoute(routingTree); return matchInstancesToRoute(rootRoute, instances); }, [routingTree, instances]); } function matchInstancesToRouteTrees(trees, instances) { const treeMatches = trees.map((tree) => { const rootRoute = convertRoutingTreeToRoute(tree); return matchInstancesToRoute(rootRoute, instances); }); return instances.map((labels) => { const allMatchedRoutes = treeMatches.flatMap(({ expandedTree, matchedPolicies }, index) => { const tree = trees[index]; return Array.from(matchedPolicies.entries()).flatMap( ([route, results]) => results.filter((matchDetails) => matchDetails.labels === labels).map((matchDetails) => { var _a; return { route, routeTree: { metadata: { name: (_a = tree.metadata.name) != null ? _a : USER_DEFINED_TREE_NAME }, expandedSpec: expandedTree }, matchDetails }; }) ); }); return { labels, matchedRoutes: allMatchedRoutes }; }); } export { matchInstancesToRouteTrees, useMatchInstancesToRouteTrees, useMatchInstancesToSpecificRouteTree }; //# sourceMappingURL=useMatchPolicies.mjs.map