Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] handle null state for SkillLevel on screening decision dialog #9773

Merged
merged 9 commits into from
Mar 20, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import * as React from "react";
import { IntlShape, useIntl } from "react-intl";
import { SubmitHandler } from "react-hook-form";
import { useMutation } from "urql";
import isEmpty from "lodash/isEmpty";

import {
AssessmentDecision,
Expand Down Expand Up @@ -73,11 +74,42 @@ const getSkillLevelMessage = (
poolSkill.skill.category === SkillCategory.Technical
? intl.formatMessage(getTechnicalSkillLevel(poolSkill.requiredLevel))
: intl.formatMessage(getBehaviouralSkillLevel(poolSkill.requiredLevel));
} else skillLevel = intl.formatMessage(commonMessages.notFound);

}
return skillLevel;
};

const getTitle = (poolSkill: PoolSkill | undefined, intl: IntlShape) => {
let title = "";
const skillLevel = getSkillLevelMessage(poolSkill, intl);
if (!isEmpty(skillLevel)) {
Comment on lines +78 to +80
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

getSkillLevelMessage() will never fail the check as it returns a truthy string guaranteed, it either returns a skill level or the fallback notFound

image

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops ..looks like I have put back the old code during merge conflict.

title = intl.formatMessage(
{
defaultMessage: `See definitions for "{skillName}" and "{skillLevel}"`,
id: "o5zW6Y",
description:
"Accordion title for skill and skill level header on screening decision dialog.",
},
{
skillName: getLocalizedName(poolSkill?.skill?.name, intl),
skillLevel,
},
);
} else {
title = intl.formatMessage(
{
defaultMessage: `See definitions for "{skillName}"`,
id: "ZZpC8s",
description:
"Accordion title for skill header on screening decision dialog.",
},
{
skillName: getLocalizedName(poolSkill?.skill?.name, intl),
},
);
}
return title;
};

const AssessmentStepTypeSection = ({
educationRequirementOption,
poolSkill,
Expand Down Expand Up @@ -120,18 +152,7 @@ const AssessmentStepTypeSection = ({
<Accordion.Root type="single" collapsible>
<Accordion.Item value="skill">
<Accordion.Trigger>
{intl.formatMessage(
{
defaultMessage: `See definitions for "{skillName}" and "{skillLevel}"`,
id: "o5zW6Y",
description:
"Accordion title for skill and skill level header on screening decision dialog.",
},
{
skillName: getLocalizedName(poolSkill?.skill?.name, intl),
skillLevel,
},
)}
{getTitle(poolSkill, intl)}
</Accordion.Trigger>
<Accordion.Content data-h2-text-align="base(left)">
<div data-h2-margin="base(x1, 0)">
Expand Down Expand Up @@ -167,9 +188,7 @@ const AssessmentStepTypeSection = ({
</p>
</>
) : (
<p data-h2-font-weight="base(bold)">
{intl.formatMessage(commonMessages.notFound)}
</p>
""
)}
</div>
</Accordion.Content>
Expand Down
33 changes: 23 additions & 10 deletions apps/web/src/components/ScreeningDecisions/useHeaders.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { IntlShape, useIntl } from "react-intl";
import isEmpty from "lodash/isEmpty";

import { FieldLabels } from "@gc-digital-talent/forms";
import { Maybe } from "@gc-digital-talent/graphql";
Expand All @@ -17,16 +18,28 @@ type Args = {
const getHeaders = (intl: IntlShape, args: Args) => {
const { type, title, candidateName, skillName, skillLevel, customTitle } =
args;
const reviewAndRecord = intl.formatMessage(
{
defaultMessage: `Review and record {candidateName}'s results on "{skillName}" at the "{skillLevel}" level.`,
id: "e1mxkv",
description:
"Subtitle for education requirement screening decision dialog.",
},
{ candidateName, skillName, skillLevel },
);

let reviewAndRecord: string;
if (!isEmpty(skillLevel)) {
reviewAndRecord = intl.formatMessage(
{
defaultMessage: `Review and record {candidateName}'s results on "{skillName}" at the "{skillLevel}" level.`,
id: "e1mxkv",
description:
"Subtitle for education requirement screening decision dialog.",
},
{ candidateName, skillName, skillLevel },
);
} else {
reviewAndRecord = intl.formatMessage(
{
defaultMessage: `Review and record {candidateName}'s results on "{skillName}"`,
id: "cnoxKB",
description:
"Subtitle for education requirement screening decision dialog.",
},
{ candidateName, skillName },
);
}
const genericTitle = customTitle
? intl.formatMessage(
{
Expand Down
8 changes: 8 additions & 0 deletions apps/web/src/lang/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -6606,6 +6606,10 @@
"defaultMessage": "Ajouter une nouvelle compétence",
"description": "Button text to open the skill dialog and add a skill"
},
"ZZpC8s": {
"defaultMessage": "Voir les définitions pour \"{skillName}\"",
brindasasi marked this conversation as resolved.
Show resolved Hide resolved
"description": "Accordion title for skill header on screening decision dialog."
},
"ZaCyXP": {
"defaultMessage": "À qui s’adresse le recrutement pour les cadres?",
"description": "Heading for EXposition services"
Expand Down Expand Up @@ -7166,6 +7170,10 @@
"defaultMessage": "Le gouvernement du Canada se réserve le droit de supprimer des commentaires et des contributions, et de bloquer des utilisateurs en fonction des critères ci-dessous:",
"description": "Paragraph for comments and interaction section"
},
"cnoxKB": {
"defaultMessage": "Examiner et consigner les résultats de {candidateName} concernant \"{skillName}\".",
brindasasi marked this conversation as resolved.
Show resolved Hide resolved
"description": "Subtitle for education requirement screening decision dialog."
},
"cqJw3g": {
"defaultMessage": "Vous êtes sur le point de supprimer cette compétence de la démonstration de vos compétences.",
"description": "First paragraph for remove skill dialog"
Expand Down