diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.test.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.test.tsx
index d8b893f6e9..ab091f565f 100644
--- a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.test.tsx
+++ b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.test.tsx
@@ -314,7 +314,13 @@ describe('Change request badges for strategies', () => {
testServerRoute(
server,
'/api/admin/projects/default/change-requests/pending/feature1',
- [scheduledRequest('updateStrategy')],
+ [],
+ );
+
+ testServerRoute(
+ server,
+ '/api/admin/projects/default/change-requests/scheduled',
+ [{ id: 1 }],
);
render(, {
@@ -336,6 +342,11 @@ describe('Change request badges for strategies', () => {
'/api/admin/projects/default/change-requests/pending/feature1',
[scheduledRequest('deleteStrategy')],
);
+ testServerRoute(
+ server,
+ '/api/admin/projects/default/change-requests/scheduled',
+ [{ id: 1 }],
+ );
render(, {
route: '/projects/default/features/feature1',
@@ -359,6 +370,11 @@ describe('Change request badges for strategies', () => {
draftRequest('updateStrategy', 1),
],
);
+ testServerRoute(
+ server,
+ '/api/admin/projects/default/change-requests/scheduled',
+ [{ id: 1 }],
+ );
render(, {
route: '/projects/default/features/feature1',
@@ -382,6 +398,11 @@ describe('Change request badges for strategies', () => {
draftRequest('deleteStrategy', 1),
],
);
+ testServerRoute(
+ server,
+ '/api/admin/projects/default/change-requests/scheduled',
+ [{ id: 1 }],
+ );
render(, {
route: '/projects/default/features/feature1',
@@ -395,4 +416,45 @@ describe('Change request badges for strategies', () => {
await screen.findByText('Changes Scheduled');
await screen.findByText('Deleted in draft');
});
+
+ test('should render "Changes scheduled" badge if strategy is modified in a scheduled request event if change requests are disabled', async () => {
+ testServerRoute(
+ server,
+ '/api/admin/projects/default/change-requests/config',
+ [
+ {
+ environment: 'development',
+ type: 'development',
+ changeRequestEnabled: false,
+ },
+ {
+ environment: 'production',
+ type: 'production',
+ changeRequestEnabled: false,
+ },
+ ],
+ 'get',
+ );
+ testServerRoute(
+ server,
+ '/api/admin/projects/default/change-requests/pending/feature1',
+ [],
+ );
+ testServerRoute(
+ server,
+ '/api/admin/projects/default/change-requests/scheduled',
+ [{ id: 1 }],
+ );
+
+ render(, {
+ route: '/projects/default/features/feature1',
+ permissions: [
+ {
+ permission: ADMIN,
+ },
+ ],
+ });
+
+ await screen.findByText('Changes Scheduled');
+ });
});
diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.tsx
index 58135ddbf9..a3a83cde5c 100644
--- a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.tsx
+++ b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.tsx
@@ -13,6 +13,10 @@ import {
import { ChangesScheduledBadge } from 'component/changeRequest/ModifiedInChangeRequestStatusBadge/ChangesScheduledBadge';
import { IFeatureChange } from 'component/changeRequest/changeRequest.types';
import { Badge } from 'component/common/Badge/Badge';
+import {
+ ChangeRequestIdentityData,
+ useScheduledChangeRequestsWithStrategy,
+} from 'hooks/api/getters/useScheduledChangeRequestsWithStrategy/useScheduledChangeRequestsWithStrategy';
interface IStrategyDraggableItemProps {
strategy: IFeatureStrategy;
@@ -51,6 +55,9 @@ export const StrategyDraggableItem = ({
strategy.id,
);
+ const { changeRequests: scheduledChangesUsingStrategy } =
+ useScheduledChangeRequestsWithStrategy(projectId, strategy.id);
+
return (
@@ -105,14 +113,15 @@ const ChangeRequestStatusBadge = ({
};
const renderHeaderChildren = (
- changes: UseStrategyChangeFromRequestResult,
+ changes?: UseStrategyChangeFromRequestResult,
+ scheduledChanges?: ChangeRequestIdentityData[],
): JSX.Element[] => {
const badges: JSX.Element[] = [];
- if (changes.length === 0) {
+ if (changes?.length === 0 && scheduledChanges?.length === 0) {
return [];
}
- const draftChange = changes.find(
+ const draftChange = changes?.find(
({ isScheduledChange }) => !isScheduledChange,
);
@@ -125,16 +134,12 @@ const renderHeaderChildren = (
);
}
- const scheduledChanges = changes.filter(
- ({ isScheduledChange }) => isScheduledChange,
- );
-
- if (scheduledChanges.length > 0) {
+ if (scheduledChanges && scheduledChanges.length > 0) {
badges.push(
scheduledChange.changeRequestId,
+ (scheduledChange) => scheduledChange.id,
)}
/>,
);
diff --git a/frontend/src/hooks/api/getters/useScheduledChangeRequestsWithStrategy/useScheduledChangeRequestsWithStrategy.ts b/frontend/src/hooks/api/getters/useScheduledChangeRequestsWithStrategy/useScheduledChangeRequestsWithStrategy.ts
index d36c64ecbf..02f498ceb4 100644
--- a/frontend/src/hooks/api/getters/useScheduledChangeRequestsWithStrategy/useScheduledChangeRequestsWithStrategy.ts
+++ b/frontend/src/hooks/api/getters/useScheduledChangeRequestsWithStrategy/useScheduledChangeRequestsWithStrategy.ts
@@ -8,7 +8,7 @@ const fetcher = (path: string) => {
.then((res) => res.json());
};
-type ChangeRequestIdentityData = {
+export type ChangeRequestIdentityData = {
id: number;
title?: string;
};