Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,10 @@ const makeProfileContext = (programmeSkills: string[]): UseUserProfileResult =>
programmeSkills,
totalExperiences: 0,
exploredExperiences: 0,
experiences: [],
modules: [],
skillsInterestsProgress: 0,
conversationPhase: null,
careerExplorerSectors: [],
},
refreshProfileData: () => {},
Expand Down
7 changes: 5 additions & 2 deletions frontend-new/src/i18n/locales/en-GB/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -1092,8 +1092,11 @@
}
},
"profileStrengthProgressAriaLabel": "Profile strength progress",
"educationSkillsProgressAriaLabel": "Education skills progress",
"workSkillsProgressAriaLabel": "Work skills progress"
"profileStrengthExperienceCollection": "Experience Collection",
"profileStrengthSkillsDiscovery": "Skills Discovery",
"profileStrengthPreferences": "Preference Elicitation",
"profileStrengthCareerReadiness": "Career Readiness",
"profileStrengthCareerExplorer": "Career Explorer"
},
"modules": {
"skillsDiscovery": "Build Your Profile",
Expand Down
7 changes: 5 additions & 2 deletions frontend-new/src/i18n/locales/en-US/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -1091,8 +1091,11 @@
}
},
"profileStrengthProgressAriaLabel": "Profile strength progress",
"educationSkillsProgressAriaLabel": "Education skills progress",
"workSkillsProgressAriaLabel": "Work skills progress",
"profileStrengthExperienceCollection": "Experience Collection",
"profileStrengthSkillsDiscovery": "Skills Discovery",
"profileStrengthPreferences": "Preference Elicitation",
"profileStrengthCareerReadiness": "Career Readiness",
"profileStrengthCareerExplorer": "Career Explorer",
"viewMyCvSubtitle": "Download and share your personalized Skills Report"
},
"modules": {
Expand Down
7 changes: 5 additions & 2 deletions frontend-new/src/i18n/locales/es-AR/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -1190,8 +1190,11 @@
}
},
"profileStrengthProgressAriaLabel": "Progreso de la fortaleza del perfil",
"educationSkillsProgressAriaLabel": "Progreso de habilidades educativas",
"workSkillsProgressAriaLabel": "Progreso de habilidades laborales",
"profileStrengthExperienceCollection": "Recopilación de experiencias",
"profileStrengthSkillsDiscovery": "Descubrimiento de habilidades",
"profileStrengthPreferences": "Obtención de preferencias",
"profileStrengthCareerReadiness": "Preparación profesional",
"profileStrengthCareerExplorer": "Explorador de carreras",
"viewMyCvSubtitle": "Descargá y compartí tu Informe de Habilidades personalizado"
},
"modules": {
Expand Down
7 changes: 5 additions & 2 deletions frontend-new/src/i18n/locales/es-ES/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -1097,8 +1097,11 @@
}
},
"profileStrengthProgressAriaLabel": "Progreso de la fortaleza del perfil",
"educationSkillsProgressAriaLabel": "Progreso de habilidades educativas",
"workSkillsProgressAriaLabel": "Progreso de habilidades laborales",
"profileStrengthExperienceCollection": "Recopilación de experiencias",
"profileStrengthSkillsDiscovery": "Descubrimiento de habilidades",
"profileStrengthPreferences": "Obtención de preferencias",
"profileStrengthCareerReadiness": "Preparación profesional",
"profileStrengthCareerExplorer": "Explorador de carreras",
"viewMyCvSubtitle": "Descargá y compartí tu Informe de Habilidades personalizado"
},
"modules": {
Expand Down
7 changes: 5 additions & 2 deletions frontend-new/src/i18n/locales/ny-ZM/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -1097,8 +1097,11 @@
}
},
"profileStrengthProgressAriaLabel": "Mapambano a mphamvu ya profaili",
"educationSkillsProgressAriaLabel": "Mapambano a luso la maphunziro",
"workSkillsProgressAriaLabel": "Mapambano a luso la ntchito",
"profileStrengthExperienceCollection": "Kusonkhanitsa Zochitika",
"profileStrengthSkillsDiscovery": "Kupeza Luso",
"profileStrengthPreferences": "Kupeza Zokonda",
"profileStrengthCareerReadiness": "Kukonzekera Ntchito",
"profileStrengthCareerExplorer": "Kafukufuku wa Ntchito",
"viewMyCvSubtitle": "Tsitsani ndi kugawana Malipoti Anu a Luso"
},
"modules": {
Expand Down
7 changes: 5 additions & 2 deletions frontend-new/src/i18n/locales/pt-MZ/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -1092,8 +1092,11 @@
}
},
"profileStrengthProgressAriaLabel": "Progresso da força do perfil",
"educationSkillsProgressAriaLabel": "Progresso das competências de educação",
"workSkillsProgressAriaLabel": "Progresso das competências de trabalho"
"profileStrengthExperienceCollection": "Recolha de Experiências",
"profileStrengthSkillsDiscovery": "Descoberta de Competências",
"profileStrengthPreferences": "Obtenção de Preferências",
"profileStrengthCareerReadiness": "Preparação para a Carreira",
"profileStrengthCareerExplorer": "Explorador de Carreiras"
},
"modules": {
"skillsDiscovery": "Construa o Seu Perfil",
Expand Down
7 changes: 5 additions & 2 deletions frontend-new/src/i18n/locales/sw-KE/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -1097,8 +1097,11 @@
}
},
"profileStrengthProgressAriaLabel": "Maendeleo ya nguvu ya wasifu",
"educationSkillsProgressAriaLabel": "Maendeleo ya ujuzi wa elimu",
"workSkillsProgressAriaLabel": "Maendeleo ya ujuzi wa kazi",
"profileStrengthExperienceCollection": "Ukusanyaji wa Uzoefu",
"profileStrengthSkillsDiscovery": "Ugunduzi wa Ujuzi",
"profileStrengthPreferences": "Kubaini Mapendeleo",
"profileStrengthCareerReadiness": "Kujiandaa kwa Kazi",
"profileStrengthCareerExplorer": "Mchunguzi wa Kazi",
"viewMyCvSubtitle": "Pakua na kushiriki Ripoti Yako ya Ujuzi"
},
"modules": {
Expand Down
2 changes: 2 additions & 0 deletions frontend-new/src/navigation/NavBar/NavBar.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@ const mockProfileContext: UseUserProfileResult = {
programmeSkills: [],
totalExperiences: 0,
exploredExperiences: 0,
experiences: [],
modules: [],
skillsInterestsProgress: 0,
conversationPhase: null,
careerExplorerSectors: [],
},
refreshProfileData: () => {},
Expand Down
5 changes: 4 additions & 1 deletion frontend-new/src/profile/Profile.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { Meta, StoryObj } from "@storybook/react";
import { Profile, ProfileProps } from "./Profile";
import type { ModuleSummary } from "src/careerReadiness/types";
import { ConversationPhase } from "src/chat/chatProgressbar/types";

const makeModule = (id: string, status: ModuleSummary["status"]): ModuleSummary => ({
id,
Expand Down Expand Up @@ -79,20 +80,22 @@ const createProfileState = (overrides?: Partial<ProfileProps>): ProfileProps =>
],
totalExperiences: 2,
exploredExperiences: 1,
experiences: [],
modules: [
makeModule("skills_discovery", "COMPLETED"),
makeModule("career_discovery", "IN_PROGRESS"),
makeModule("job_readiness", "UNLOCKED"),
makeModule("career_explorer", "NOT_STARTED"),
],
skillsInterestsProgress: 75,
conversationPhase: { phase: ConversationPhase.DIVE_IN, percentage: 50, current: null, total: null },
careerExplorerSectors: [],

// Loading states
isLoadingSecurity: false,
isLoadingPreferences: false,
isLoadingProfile: false,
isLoadingSkills: false,
isLoadingProgress: false,
isLoadingCareerExplorer: false,
};

Expand Down
4 changes: 3 additions & 1 deletion frontend-new/src/profile/Profile.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,15 @@ const getDefaultProps = (overrides?: Partial<ProfileProps>): ProfileProps => ({
educationSkills: [],
totalExperiences: 0,
exploredExperiences: 0,
experiences: [],
modules: [],
skillsInterestsProgress: 0,
conversationPhase: null,
careerExplorerSectors: [],
isLoadingSecurity: false,
isLoadingPreferences: false,
isLoadingProfile: false,
isLoadingSkills: false,
isLoadingProgress: false,
isLoadingCareerExplorer: false,
...overrides,
});
Expand Down
38 changes: 20 additions & 18 deletions frontend-new/src/profile/Profile.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from "react";
import { Box, useTheme, Stack } from "@mui/material";
import { Skill } from "src/experiences/experienceService/experiences.types";
import { Experience, Skill } from "src/experiences/experienceService/experiences.types";
import { SecurityCard } from "./components/SecurityCard/SecurityCard";
import { PreferencesCard } from "./components/PreferencesCard/PreferencesCard";
import { ProfileCard } from "./components/ProfileCard/ProfileCard";
Expand All @@ -10,6 +10,8 @@ import { ModuleProgressCard } from "./components/ModuleProgressCard/ModuleProgre
import CareerReadinessProgressBanner from "src/careerReadiness/components/CareerReadinessProgressBanner/CareerReadinessProgressBanner";
import type { ModuleSummary } from "src/careerReadiness/types";
import type { UserSectorEngagementItem } from "src/careerExplorer/services/CareerExplorerService";
import type { CurrentPhase } from "src/chat/chatProgressbar/types";
import { calculateProfileStrength } from "./utils/calculateProfileStrength";

const uniqueId = "a7f8e4b2-9c3d-4a1e-8f6b-2d3e4a5b6c7d";

Expand All @@ -30,13 +32,15 @@ export interface ProfileProps {
educationSkills: Skill[];
totalExperiences: number;
exploredExperiences: number;
experiences: Experience[];
modules: ModuleSummary[];
skillsInterestsProgress: number;
conversationPhase: CurrentPhase | null;
careerExplorerSectors: UserSectorEngagementItem[];
isLoadingSecurity: boolean;
isLoadingPreferences: boolean;
isLoadingProfile: boolean;
isLoadingSkills: boolean;
isLoadingProgress: boolean;
isLoadingCareerExplorer: boolean;
}

Expand All @@ -53,27 +57,29 @@ export const Profile: React.FC<ProfileProps> = ({
educationSkills,
totalExperiences,
exploredExperiences,
experiences,
modules,
skillsInterestsProgress: _skillsInterestsProgress,
conversationPhase,
careerExplorerSectors,
isLoadingSecurity,
isLoadingPreferences,
isLoadingProfile,
isLoadingSkills,
isLoadingProgress,
isLoadingCareerExplorer,
}) => {
const theme = useTheme();
const clampPercentage = (value: number) => Math.max(0, Math.min(100, Math.round(value)));

// Education Skills are programme skills only
const educationProgress = clampPercentage(educationSkills.length > 0 ? 100 : 0);

// Work progress reflects explored experiences
const workProgress =
totalExperiences > 0 ? clampPercentage((exploredExperiences / totalExperiences) * 100) : clampPercentage(0);

// Overall Profile Strength equally weights Education Skills and Work & Other Skills
const overallProgress = clampPercentage((educationProgress + workProgress) / 2);
const profileStrength = calculateProfileStrength({
phase: conversationPhase?.phase ?? null,
phaseCurrent: conversationPhase?.current ?? null,
phaseTotal: conversationPhase?.total ?? null,
totalExperiences,
exploredExperiences,
experiences,
modules,
sectors: careerExplorerSectors,
});

return (
<Box
Expand Down Expand Up @@ -107,11 +113,7 @@ export const Profile: React.FC<ProfileProps> = ({
}}
>
<Stack spacing={theme.fixedSpacing(theme.tabiyaSpacing.lg)}>
<ModuleProgressCard
overallProgress={overallProgress}
educationProgress={educationProgress}
workProgress={workProgress}
/>
<ModuleProgressCard profileStrength={profileStrength} isLoading={isLoadingProgress || isLoadingSkills} />
<CareerReadinessProgressBanner modules={modules} />
</Stack>

Expand Down
5 changes: 4 additions & 1 deletion frontend-new/src/profile/ProfileContainer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ const ProfileContainer: React.FC = () => {
isLoadingPreferences,
isLoadingProfile,
isLoadingSkills,
isLoadingModules,
isLoadingCareerExplorer,
refreshModules,
} = useUserProfileContext();
Expand Down Expand Up @@ -49,13 +50,15 @@ const ProfileContainer: React.FC = () => {
educationSkills={profileData.educationSkills}
totalExperiences={profileData.totalExperiences}
exploredExperiences={profileData.exploredExperiences}
experiences={profileData.experiences}
modules={profileData.modules}
skillsInterestsProgress={profileData.skillsInterestsProgress}
conversationPhase={profileData.conversationPhase}
careerExplorerSectors={profileData.careerExplorerSectors}
isLoadingSecurity={isLoadingSecurity}
isLoadingPreferences={isLoadingPreferences}
isLoadingProfile={isLoadingProfile}
isLoadingSkills={isLoadingSkills}
isLoadingProgress={isLoadingModules}
isLoadingCareerExplorer={isLoadingCareerExplorer}
/>
</Box>
Expand Down
2 changes: 2 additions & 0 deletions frontend-new/src/profile/UserProfileContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ const defaultUserProfileContext: UseUserProfileResult = {
programmeSkills: [],
totalExperiences: 0,
exploredExperiences: 0,
experiences: [],
modules: [],
skillsInterestsProgress: 0,
conversationPhase: null,
careerExplorerSectors: [],
},
refreshProfileData: () => {},
Expand Down
Loading
Loading