Remove provisioned prop from Policy component

This commit is contained in:
rodrigopk
2026-01-14 11:42:45 -05:00
parent d0df6b8de4
commit c27721a9d7
3 changed files with 26 additions and 21 deletions
@@ -27,7 +27,6 @@ import { useAddPolicyModal, useAlertGroupsModal, useDeletePolicyModal, useEditPo
import { Policy } from './Policy';
import { TIMING_OPTIONS_DEFAULTS } from './timingOptions';
import {
isRouteProvisioned,
useAddNotificationPolicy,
useDeleteNotificationPolicy,
useNotificationPolicyRoute,
@@ -101,7 +100,6 @@ export const NotificationPoliciesList = () => {
return;
}, [defaultPolicy]);
const routeProvenance = defaultPolicy?.provenance;
const isRootRouteProvisioned = rootRoute ? isRouteProvisioned(rootRoute) : false;
// useAsync could also work but it's hard to wait until it's done in the tests
// Combining with useEffect gives more predictable results because the condition is in useEffect
@@ -247,7 +245,6 @@ export const NotificationPoliciesList = () => {
currentRoute={defaults(rootRoute, TIMING_OPTIONS_DEFAULTS)}
contactPointsState={contactPointsState.receivers}
readOnly={!hasConfigurationAPI}
provisioned={isRootRouteProvisioned}
provenance={routeProvenance}
alertManagerSourceName={selectedAlertmanager}
onAddPolicy={openAddModal}
@@ -351,7 +351,6 @@ describe('Policy', () => {
onAddPolicy={noop}
onDeletePolicy={noop}
onShowAlertInstances={noop}
provisioned
provenance={KnownProvenance.File}
/>
);
@@ -378,7 +377,6 @@ describe('Policy', () => {
onAddPolicy={noop}
onDeletePolicy={noop}
onShowAlertInstances={noop}
provisioned
provenance={KnownProvenance.ConvertedPrometheus}
/>
);
@@ -477,35 +475,36 @@ describe('useCreateDropdownMenuActions', () => {
{
isAutoGenerated: false,
isDefaultPolicy: true,
provisioned: false,
provenance: undefined,
expectedMenu: ['edit-policy', 'export-policy'],
},
{
isAutoGenerated: false,
isDefaultPolicy: true,
provisioned: true,
provenance: KnownProvenance.File,
expectedMenu: ['edit-policy', 'export-policy'],
},
{
isAutoGenerated: false,
isDefaultPolicy: false,
provisioned: false,
provenance: undefined,
expectedMenu: ['edit-policy', 'delete-policy'],
},
{
isAutoGenerated: false,
isDefaultPolicy: false,
provisioned: true,
provenance: KnownProvenance.File,
expectedMenu: ['edit-policy', 'delete-policy'],
},
{ isAutoGenerated: true, isDefaultPolicy: true, provisioned: true, expectedMenu: ['edit-policy'] },
{ isAutoGenerated: true, isDefaultPolicy: false, provisioned: false, expectedMenu: ['edit-policy'] },
{ isAutoGenerated: true, isDefaultPolicy: true, provisioned: false, expectedMenu: ['edit-policy'] },
{ isAutoGenerated: true, isDefaultPolicy: false, provisioned: true, expectedMenu: ['edit-policy'] },
{ isAutoGenerated: true, isDefaultPolicy: true, provenance: KnownProvenance.File, expectedMenu: ['edit-policy'] },
{ isAutoGenerated: true, isDefaultPolicy: false, provenance: undefined, expectedMenu: ['edit-policy'] },
{ isAutoGenerated: true, isDefaultPolicy: true, provenance: undefined, expectedMenu: ['edit-policy'] },
{ isAutoGenerated: true, isDefaultPolicy: false, provenance: KnownProvenance.File, expectedMenu: ['edit-policy'] },
];
testCases.forEach(({ isAutoGenerated, isDefaultPolicy, provisioned, expectedMenu }) => {
it(`Having all the permissions returns ${expectedMenu.length} menu items for isAutoGenerated=${isAutoGenerated}, isDefaultPolicy=${isDefaultPolicy}, provisioned=${provisioned}`, () => {
testCases.forEach(({ isAutoGenerated, isDefaultPolicy, provenance, expectedMenu }) => {
const provisionedStatus = provenance ? 'provisioned' : 'not provisioned';
it(`Having all the permissions returns ${expectedMenu.length} menu items for isAutoGenerated=${isAutoGenerated}, isDefaultPolicy=${isDefaultPolicy}, ${provisionedStatus}`, () => {
useAlertmanagerAbilitiesMock.mockReturnValue([
[true, true],
[true, true],
@@ -515,7 +514,7 @@ describe('useCreateDropdownMenuActions', () => {
useCreateDropdownMenuActions(
isAutoGenerated,
isDefaultPolicy,
provisioned,
provenance,
openDetailModal,
currentRoute,
toggleShowExportDrawer,
@@ -31,12 +31,14 @@ import {
AlertmanagerGroup,
MatcherOperator,
ObjectMatcher,
ROUTES_META_SYMBOL,
Receiver,
RouteWithID,
} from 'app/plugins/datasource/alertmanager/types';
import { AlertmanagerAction, useAlertmanagerAbilities, useAlertmanagerAbility } from '../../hooks/useAbilities';
import { getAmMatcherFormatter } from '../../utils/alertmanager';
import { isProvisionedResource } from '../../utils/k8s/utils';
import { MatcherFormatter, normalizeMatchers } from '../../utils/matchers';
import { createContactPointLink, createContactPointSearchLink, createMuteTimingLink } from '../../utils/misc';
import { routeAdapter } from '../../utils/routeAdapter';
@@ -60,7 +62,6 @@ interface PolicyComponentProps {
receivers?: Receiver[];
contactPointsState?: ReceiversState;
readOnly?: boolean;
provisioned?: boolean;
provenance?: string;
inheritedProperties?: InheritableProperties;
routesMatchingFilters?: RoutesMatchingFilters;
@@ -89,7 +90,6 @@ const Policy = (props: PolicyComponentProps) => {
receivers = [],
contactPointsState,
readOnly = false,
provisioned = false,
provenance,
alertManagerSourceName,
currentRoute,
@@ -109,6 +109,9 @@ const Policy = (props: PolicyComponentProps) => {
const styles = useStyles2(getStyles);
// Compute provisioned status from provenance
const provisioned = isProvisionedResource(provenance);
const contactPoint = currentRoute.receiver;
const continueMatching = currentRoute.continue ?? false;
@@ -183,7 +186,7 @@ const Policy = (props: PolicyComponentProps) => {
const dropdownMenuActions: JSX.Element[] = useCreateDropdownMenuActions(
isAutoGenerated,
isDefaultPolicy,
provisioned,
provenance,
onEditPolicy,
currentRoute,
toggleShowExportDrawer,
@@ -361,6 +364,9 @@ const Policy = (props: PolicyComponentProps) => {
then the child policy should not be editable either */
const isThisChildReadOnly = readOnly || provisioned || isAutoGenerated;
// Extract provenance from child route (can be in metadata symbol or top-level)
const childProvenance = child[ROUTES_META_SYMBOL]?.provenance ?? child.provenance;
return (
<Policy
key={child.id}
@@ -377,7 +383,7 @@ const Policy = (props: PolicyComponentProps) => {
routesMatchingFilters={routesMatchingFilters}
matchingInstancesPreview={matchingInstancesPreview}
isAutoGenerated={isThisChildAutoGenerated}
provisioned={provisioned}
provenance={childProvenance}
/>
);
})}
@@ -542,7 +548,7 @@ function MetadataRow({
export const useCreateDropdownMenuActions = (
isAutoGenerated: boolean,
isDefaultPolicy: boolean,
provisioned: boolean,
provenance: string | undefined,
onEditPolicy: (route: RouteWithID, isDefault?: boolean, readOnly?: boolean) => void,
currentRoute: RouteWithID,
toggleShowExportDrawer: () => void,
@@ -558,6 +564,9 @@ export const useCreateDropdownMenuActions = (
AlertmanagerAction.ExportNotificationPolicies,
]);
// Compute provisioned status from provenance
const provisioned = isProvisionedResource(provenance);
const dropdownMenuActions = [];
const showExportAction = exportPoliciesAllowed && exportPoliciesSupported && isDefaultPolicy && !isAutoGenerated;
const showEditAction = updatePoliciesSupported && updatePoliciesAllowed;