@grafana/alerting
Version:
Grafana Alerting Library – Build vertical integrations on top of the industry-leading alerting solution
58 lines (55 loc) • 1.89 kB
JavaScript
import { useCallback } from 'react';
import { notificationsAPI as injectedRtkApi } from '../../api/notifications/v0alpha1/notifications.api.gen.mjs';
import { USER_DEFINED_TREE_NAME } from '../consts.mjs';
import { convertRoutingTreeToRoute, matchInstancesToRoute } from '../utils.mjs';
;
function useMatchInstancesToRouteTrees() {
const { data, ...rest } = injectedRtkApi.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 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 };
//# sourceMappingURL=useMatchPolicies.mjs.map