Skip to content

Commit

Permalink
🐛 Fix app assessment status when questionnaires marked as not
Browse files Browse the repository at this point in the history
required

Signed-off-by: Ian Bolton <[email protected]>
  • Loading branch information
ibolton336 committed Feb 28, 2024
1 parent 59ad200 commit 6eaab30
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ import { Spinner } from "@patternfly/react-core";
import { EmptyTextMessage } from "@app/components/EmptyTextMessage";
import { Application } from "@app/api/models";
import { IconedStatus, IconedStatusPreset } from "@app/components/IconedStatus";
import { useFetchAssessmentsByItemId } from "@app/queries/assessments";
import {
useFetchAllAssessmentsWithArchetypes,
useFetchAssessmentsByItemId,
} from "@app/queries/assessments";
import { useFetchArchetypes } from "@app/queries/archetypes";
interface ApplicationAssessmentStatusProps {
application: Application;
Expand All @@ -16,19 +19,55 @@ export const ApplicationAssessmentStatus: React.FC<
> = ({ application }) => {
const { t } = useTranslation();

const { archetypes, isFetching } = useFetchArchetypes();
const { archetypes, isFetching } = useFetchArchetypes(application);

const applicationArchetypes = application.archetypes?.map((archetypeRef) => {
return archetypes?.find((archetype) => archetype.id === archetypeRef.id);
});
const {
assessmentsWithArchetypes,
isLoading: isFetchingAllAssessmentsWithArchetypesLoading,
} = useFetchAllAssessmentsWithArchetypes(archetypes);

const assessedArchetypesWithARequiredAssessment = assessmentsWithArchetypes
?.filter((assessmentsWithArchetype) => {
return (
assessmentsWithArchetype.archetype.assessed &&
assessmentsWithArchetype.assessments.some(
(assessment) => assessment?.required === true
)
);
})
.map((assessmentsWithArchetype) => assessmentsWithArchetype.archetype);

const someArchetypesAssessed = applicationArchetypes?.some(
(archetype) => !!archetype?.assessments?.length ?? 0 > 0
);
const areAllArchetypesAssessed =
applicationArchetypes?.every(
(archetype) => archetype?.assessments?.length ?? 0 > 0
) ?? false;
const allArchetypesAssessed =
assessmentsWithArchetypes.length > 0 &&
assessmentsWithArchetypes?.every((assessmentsWithArchetype) => {
const requiredAssessments = assessmentsWithArchetype.assessments.filter(
(assessment) => assessment?.required === true
);
return (
assessmentsWithArchetype.archetype.assessed &&
assessmentsWithArchetype.assessments.length > 0 &&
requiredAssessments.length > 0 &&
requiredAssessments.every(
(assessment) => assessment?.status === "complete"
)
);
});

const hasInProgressOrNotStartedRequiredAssessments = () => {
return (
assessmentsWithArchetypes?.some(
(assessmentsWithArchetype) =>
!assessmentsWithArchetype.archetype.assessed &&
assessmentsWithArchetype.assessments.some(
(assessment) =>
assessment?.required === true &&
(assessment.status === "empty" ||
assessment.status === "started" ||
assessment.status === "complete")
)
) ?? false
);
};

const {
assessments,
Expand All @@ -47,27 +86,19 @@ export const ApplicationAssessmentStatus: React.FC<
let statusPreset: IconedStatusPreset = "NotStarted"; // Default status
let tooltipCount: number = 0;

const assessedArchetypeCount =
applicationArchetypes?.filter(
(archetype) => archetype?.assessments?.length ?? 0 > 0
).length || 0;

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

if (isDirectlyAssessed) {
statusPreset = "Completed";
} else if (areAllArchetypesAssessed) {
} else if (allArchetypesAssessed) {
statusPreset = "InheritedAssessments";
tooltipCount = assessedArchetypeCount;
} else if (someArchetypesAssessed) {
tooltipCount = assessedArchetypesWithARequiredAssessment?.length ?? 0;
} else if (hasInProgressOrNotStartedRequiredAssessments()) {
statusPreset = "InProgressInheritedAssessments";
tooltipCount = assessedArchetypeCount;
tooltipCount = assessedArchetypesWithARequiredAssessment?.length ?? 0;
} else if (
assessments?.some(
(assessment) =>
assessment.status === "started" || assessment.status === "complete"
)
assessments?.some((assessment) => assessment.status === "started")
) {
statusPreset = "InProgress";
}
Expand Down
1 change: 1 addition & 0 deletions client/src/app/queries/archetypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export const useFetchArchetypes = (forApplication?: Application | null) => {
} else {
setFilteredArchetypes([]);
}

queryClient.invalidateQueries([reviewsQueryKey]);
queryClient.invalidateQueries([assessmentsQueryKey]);
queryClient.invalidateQueries([assessmentsByItemIdQueryKey]);
Expand Down

0 comments on commit 6eaab30

Please sign in to comment.