1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-07-26 13:48:33 +02:00

fix: now issue count under application will show correctly (#6553)

Previously if multiple environments had same missing SDK, it was counted
multiple times. Now it will take only unique.
This commit is contained in:
Jaanus Sellin 2024-03-14 14:52:57 +02:00 committed by GitHub
parent 2b2089f7b5
commit 1780fae022
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 72 additions and 36 deletions

View File

@ -14,7 +14,7 @@ import Flag from '@mui/icons-material/Flag';
import WarningAmberRounded from '@mui/icons-material/WarningAmberRounded';
import TimeAgo from 'react-timeago';
import { usePlausibleTracker } from 'hooks/usePlausibleTracker';
import { getApplicationIssueMode } from './ApplicationIssues/ApplicationIssues';
import { getApplicationIssues } from './ApplicationIssues/ApplicationIssues';
const StyledTable = styled('table')(({ theme }) => ({
fontSize: theme.fontSizes.smallerBody,
@ -196,7 +196,7 @@ export const ApplicationChart = ({ data }: IApplicationChartProps) => {
const navigate = useNavigate();
const theme = useTheme();
const mode = getApplicationIssueMode(data);
const mode = getApplicationIssues(data);
return (
<Box sx={{ width }}>

View File

@ -35,4 +35,40 @@ test('Display all application issues', async () => {
);
await screen.findByText(`We detected the following outdated SDKs`);
await screen.findByText(`unleash-client-php:1.13.0`);
await screen.findByText(`We detected 4 issues in this application`);
});
test('Each SDK version should be displayed once', async () => {
const application: ApplicationOverviewSchema = {
projects: ['default'],
featureCount: 0,
environments: [
{
issues: {
missingFeatures: [],
outdatedSdks: ['unleash-client-php:1.13.0'],
},
sdks: [],
instanceCount: 0,
lastSeen: new Date().toISOString(),
name: 'development',
},
{
issues: {
missingFeatures: [],
outdatedSdks: ['unleash-client-php:1.13.0'],
},
sdks: [],
instanceCount: 0,
lastSeen: new Date().toISOString(),
name: 'production',
},
],
issues: {
missingStrategies: [],
},
};
render(<ApplicationIssues application={application} />);
await screen.findByText(`We detected 1 issue in this application`);
});

View File

@ -95,6 +95,17 @@ interface IOutdatedSDKsProps {
sdks: string[];
}
type ApplicationIssues =
| {
applicationMode: 'success';
}
| {
applicationMode: 'warning';
issueCount: number;
outdatedSdks: string[];
missingFeatures: string[];
};
const FeaturesMissing = ({ features }: IFeaturesMissingProps) => {
const { hasAccess } = useContext(AccessContext);
const length = features.length;
@ -186,38 +197,9 @@ const OutdatedSDKs = ({ sdks }: IOutdatedSDKsProps) => {
);
};
export const getApplicationIssueMode = (
export const getApplicationIssues = (
application: ApplicationOverviewSchema,
):
| {
applicationMode: 'success';
}
| {
applicationMode: 'warning';
issueCount: number;
} => {
const issueCount =
application.issues.missingStrategies.length +
application.environments
.map(
(env) =>
env.issues.missingFeatures.length +
env.issues.outdatedSdks.length,
)
.reduce((sum, num) => sum + num, 0);
return {
issueCount,
applicationMode: issueCount > 0 ? 'warning' : 'success',
};
};
export const ApplicationIssues = ({ application }: IApplicationIssuesProps) => {
const mode = getApplicationIssueMode(application);
if (mode.applicationMode === 'success') {
return null;
}
): ApplicationIssues => {
const outdatedSdks = [
...new Set(
application.environments.flatMap((env) => env.issues.outdatedSdks),
@ -230,7 +212,26 @@ export const ApplicationIssues = ({ application }: IApplicationIssuesProps) => {
),
),
];
const issueCount = mode.issueCount;
const issueCount =
outdatedSdks.length +
missingFeatures.length +
application.issues.missingStrategies.length;
return {
issueCount,
outdatedSdks,
missingFeatures,
applicationMode: issueCount > 0 ? 'warning' : 'success',
};
};
export const ApplicationIssues = ({ application }: IApplicationIssuesProps) => {
const mode = getApplicationIssues(application);
if (mode.applicationMode === 'success') {
return null;
}
const { issueCount, outdatedSdks, missingFeatures } = mode;
return (
<WarningContainer>
<WarningHeader>

View File

@ -1,4 +1,4 @@
import { ReactNode, VFC, useState } from 'react';
import { ReactNode, VFC } from 'react';
import { useUiFlag } from 'hooks/useUiFlag';
import { useFeedback } from 'component/feedbackNew/useFeedback';
import ReviewsOutlined from '@mui/icons-material/ReviewsOutlined';
@ -8,7 +8,6 @@ import {
styled,
useMediaQuery,
useTheme,
Box,
} from '@mui/material';
import { PageHeader } from 'component/common/PageHeader/PageHeader';
import { Badge } from 'component/common/Badge/Badge';