1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-04 00:18:01 +01:00

fix: show Changes scheduled badge for strategies even if change reque… (#5599)

show Changes scheduled badge for strategies even if change requests are
disabled

Closes #
[1-1745](https://linear.app/unleash/issue/1-1745/show-changes-scheduled-badge-in-strategy-item-even-if-change-requests)

---------

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
This commit is contained in:
andreas-unleash 2023-12-12 09:30:57 +02:00 committed by GitHub
parent abf540a1cc
commit e02c252636
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 78 additions and 11 deletions

View File

@ -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(<Component />, {
@ -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(<Component />, {
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(<Component />, {
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(<Component />, {
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(<Component />, {
route: '/projects/default/features/feature1',
permissions: [
{
permission: ADMIN,
},
],
});
await screen.findByText('Changes Scheduled');
});
});

View File

@ -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 (
<Box
key={strategy.id}
@ -72,6 +79,7 @@ export const StrategyDraggableItem = ({
orderNumber={index + 1}
headerChildren={renderHeaderChildren(
strategyChangesFromRequest,
scheduledChangesUsingStrategy,
)}
/>
</Box>
@ -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(
<ChangesScheduledBadge
key='scheduled-changes'
scheduledChangeRequestIds={scheduledChanges.map(
(scheduledChange) => scheduledChange.changeRequestId,
(scheduledChange) => scheduledChange.id,
)}
/>,
);

View File

@ -8,7 +8,7 @@ const fetcher = (path: string) => {
.then((res) => res.json());
};
type ChangeRequestIdentityData = {
export type ChangeRequestIdentityData = {
id: number;
title?: string;
};