Skip to content

Commit

Permalink
🐛 Consider only inherited archetypes when computing status (#1733)
Browse files Browse the repository at this point in the history
[App 'Assessment' status shows Completed and Inheritance indicator icon
even when not associated with
archetypes](https://issues.redhat.com/browse/MTA-2354)

Signed-off-by: Ian Bolton <[email protected]>
  • Loading branch information
ibolton336 authored Mar 4, 2024
1 parent 95b6ebc commit 55fa631
Showing 1 changed file with 26 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,29 +15,35 @@ export const ApplicationAssessmentStatus: React.FC<
> = ({ application, assessments, archetypes, isLoading }) => {
const { t } = useTranslation();

const filteredAssessments = assessments?.filter(
const applicationAssessments = assessments?.filter(
(assessment: Assessment) => assessment.application?.id === application.id
);
const inheritedArchetypes = archetypes?.filter(
(archetype: Archetype) =>
archetype.applications?.map((app) => app.id).includes(application.id)
);
const assessmentStatusInfo = React.useMemo(() => {
const assessmentsWithArchetypes = archetypes.map((archetype) => ({
archetype,
assessments: assessments.filter(
(assessment) => assessment.archetype?.id === archetype.id
),
}));
const assessmentsWithArchetypes = inheritedArchetypes.map(
(inheritedArchetype) => ({
inheritedArchetype,
assessments: assessments.filter(
(assessment) => assessment.archetype?.id === inheritedArchetype.id
),
})
);

const someArchetypesAssessed = assessmentsWithArchetypes.some(
({ assessments }) => assessments.length > 0
);

const allArchetypesAssessed =
assessmentsWithArchetypes.length > 0 &&
assessmentsWithArchetypes.every(({ archetype, assessments }) => {
assessmentsWithArchetypes.every(({ inheritedArchetype, assessments }) => {
const requiredAssessments = assessments.filter(
(assessment) => assessment.required
);
return (
archetype.assessed &&
inheritedArchetype.assessed &&
assessments.length > 0 &&
requiredAssessments.length > 0 &&
requiredAssessments.every(
Expand All @@ -56,18 +62,19 @@ export const ApplicationAssessmentStatus: React.FC<
);

const assessedArchetypesWithARequiredAssessment =
assessmentsWithArchetypes.filter(({ assessments, archetype }) =>
assessmentsWithArchetypes.filter(({ assessments, inheritedArchetype }) =>
assessments.some(
(assessment) =>
assessment.required &&
assessment.status === "complete" &&
archetype.assessed
inheritedArchetype.assessed
)
);
const assessedArchetypeCount =
archetypes?.filter(
(archetype) =>
archetype?.assessments?.length ?? (0 > 0 && archetype.assessed)
inheritedArchetypes?.filter(
(inheritedArchetype) =>
inheritedArchetype?.assessments?.length ??
(0 > 0 && inheritedArchetype.assessed)
).length || 0;

return {
Expand All @@ -78,7 +85,7 @@ export const ApplicationAssessmentStatus: React.FC<
assessedArchetypesWithARequiredAssessment,
assessedArchetypeCount,
};
}, [archetypes, assessments]);
}, [inheritedArchetypes, assessments]);

if (isLoading) {
return <Spinner size="sm" />;
Expand All @@ -89,6 +96,7 @@ export const ApplicationAssessmentStatus: React.FC<

const isDirectlyAssessed =
application.assessed && (application.assessments?.length ?? 0) > 0;

const {
allArchetypesAssessed,
assessedArchetypesWithARequiredAssessment,
Expand All @@ -104,7 +112,9 @@ export const ApplicationAssessmentStatus: React.FC<
statusPreset = "InProgressInheritedAssessments";
tooltipCount = assessedArchetypesWithARequiredAssessment.length;
} else if (
filteredAssessments?.some((assessment) => assessment.status === "started")
applicationAssessments?.some(
(assessment) => assessment.status === "started"
)
) {
statusPreset = "InProgress";
}
Expand Down

0 comments on commit 55fa631

Please sign in to comment.