diff --git a/package.json b/package.json index 4b878193d..6d9236215 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "linkedout-front", - "version": "2.13.1", + "version": "2.13.2", "description": "", "main": "index.js", "engines": { diff --git a/src/components/backoffice/parametres/ParametresLayout/ParametresHelpCard/ParametresHelpCard.tsx b/src/components/backoffice/parametres/ParametresLayout/ParametresHelpCard/ParametresHelpCard.tsx index 8a3b9c0d4..12b69bf7a 100644 --- a/src/components/backoffice/parametres/ParametresLayout/ParametresHelpCard/ParametresHelpCard.tsx +++ b/src/components/backoffice/parametres/ParametresLayout/ParametresHelpCard/ParametresHelpCard.tsx @@ -1,8 +1,9 @@ -import React, { useEffect, useState } from 'react'; +import React from 'react'; import PlaceholderIllu from 'assets/icons/illu-coeur-mains-ouvertes.svg'; -import { useHelpField, helpFields } from '../../useUpdateProfile'; +import { helpFields, useHelpField } from '../../useUpdateProfile'; import { ParametresPlaceholder } from '../ParametresPlaceholder'; import { ProfileHelpList } from 'src/components/backoffice/profile/ProfileHelpInformationCard/ProfileHelpList'; +import { useContextualRole } from 'src/components/backoffice/useContextualRole'; import { openModal } from 'src/components/modals/Modal'; import { Card } from 'src/components/utils'; import { ParametresHelpCardTitles } from 'src/constants/helps'; @@ -30,16 +31,13 @@ export const ParametresHelpCard = () => { const helpField = useHelpField(user.role); - const [contextualRole, setContextualRole] = useState(role); - useEffect(() => { - setContextualRole(role === 'Candidat externe' ? 'Candidat' : role); - }, [role]); + const { contextualRole } = useContextualRole(role); const openHelpEditModal = () => { openModal( ); }; @@ -48,7 +46,7 @@ export const ParametresHelpCard = () => { return ( name) : [] } - options={ParametresHelpCardContents[role.toLowerCase()].map( + options={ParametresHelpCardContents[role].map( ({ value, title: titleH6, description, icon }) => ({ value, component: ( diff --git a/src/components/backoffice/profile/ProfileHelpInformationCard/ProfileHelpInformationCard.tsx b/src/components/backoffice/profile/ProfileHelpInformationCard/ProfileHelpInformationCard.tsx index 05b3de61b..8c1dc19f3 100644 --- a/src/components/backoffice/profile/ProfileHelpInformationCard/ProfileHelpInformationCard.tsx +++ b/src/components/backoffice/profile/ProfileHelpInformationCard/ProfileHelpInformationCard.tsx @@ -3,16 +3,24 @@ import PlaceholderIllu from 'assets/icons/illu-coeur-mains-ouvertes.svg'; import { ProfilePlaceHolder } from '../ProfilePlaceholder'; import { useSelectedProfile } from '../useSelectedProfile'; import { useHelpField } from 'src/components/backoffice/parametres/useUpdateProfile'; +import { useContextualRole } from 'src/components/backoffice/useContextualRole'; import { Card } from 'src/components/utils'; -import { CANDIDATE_USER_ROLES } from 'src/constants/users'; +import { CANDIDATE_USER_ROLES, USER_ROLES } from 'src/constants/users'; import { isRoleIncluded } from 'src/utils'; import { ProfileHelpList } from './ProfileHelpList'; export const ProfileHelpInformationCard = () => { const { selectedProfile } = useSelectedProfile(); + const helpField = useHelpField(selectedProfile?.role); + const { contextualRole } = useContextualRole( + // TODO remove check because selectedProfile always exists + selectedProfile ? selectedProfile.role : USER_ROLES.CANDIDATE + ); + if (!selectedProfile || !helpField) return null; + return ( { {selectedProfile[helpField].length > 0 ? ( ) : ( { return ( - {PARAMETRES_HELP_CARD_CONTENTS[role.toLowerCase()].map( - ({ icon, title, value }, index) => { - if (!helpList.some((help) => help.name === value)) { - return null; - } - return ( -
  • - {icon} - {title} -
  • - ); + {ParametresHelpCardContents[role].map(({ icon, title, value }, index) => { + if (!helpList.some((help) => help.name === value)) { + return null; } - )} + return ( +
  • + {icon} + {title} +
  • + ); + })}
    ); }; diff --git a/src/components/backoffice/profile/ProfileHelpInformationCard/ProfileHelpList/ProfileHelpList.utils.tsx b/src/components/backoffice/profile/ProfileHelpInformationCard/ProfileHelpList/ProfileHelpList.utils.tsx deleted file mode 100644 index 47e88bd51..000000000 --- a/src/components/backoffice/profile/ProfileHelpInformationCard/ProfileHelpList/ProfileHelpList.utils.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import React from 'react'; -import CVIllu from 'assets/icons/illu-CV.svg'; -import ConversationIllu from 'assets/icons/illu-conversation.svg'; -import MaletteIllu from 'assets/icons/illu-malette.svg'; -import TipsIllu from 'assets/icons/illu-poignee-de-main.svg'; -import RSIllu from 'assets/icons/illu-reseaux-sociaux.svg'; - -export const PARAMETRES_HELP_CARD_CONTENTS = { - candidat: [ - { - icon: , - value: 'tips', - title: 'Demander des conseils aux membre de la communauté', - description: - 'Recevez des conseils personnalisés et un accompagnement de la part de nos coachs pour vous guider dans votre parcours professionnel.', - }, - { - icon: , - value: 'interview', - title: 'Se préparer aux entretien d’embauche', - description: - "Profitez de l'expertise de nos coachs pour créer des CV et lettres de motivation qui mettent en avant vos atouts et compétences.", - }, - { - icon: , - value: 'cv', - title: 'M’aider à réaliser mon CV et mes lettres de motivation', - description: - "Préparez-vous à réussir vos entretiens avec l'aide de nos coachs, qui vous apporteront des conseils pratiques et un soutien moral.", - }, - { - icon: , - value: 'event', - title: 'Se rencontrer et échanger avec les membres de la communautés', - description: - "Rejoignez notre communauté lors d'événements pour partager vos expériences, apprendre des autres et tisser des liens professionnels précieux.", - }, - { - icon: , - value: 'network', - title: 'Avoir plus de réseau professionnel', - description: - "Multipliez vos opportunités professionnelles en vous connectant avec des professionnels qui peuvent vous soutenir et vous ouvrir des portes sur le marché de l'emploi.", - }, - ], - coach: [ - { - icon: , - value: 'tips', - title: 'Donner des conseils aux membres de la communauté', - description: - 'Partagez votre savoir-faire et vos conseils pour aider les candidats à naviguer sur le marché du travail et à trouver des opportunités adaptées à leurs compétences.', - }, - { - icon: , - value: 'interview', - title: 'Aider à préparer les entretiens d’embauche', - description: - "Mettez à profit votre expertise pour coacher les candidats, les aider à anticiper les questions d'entretiens et à communiquer efficacement leur motivation.", - }, - { - icon: , - value: 'cv', - title: 'Aider à réaliser un CV et une lettre de motivation', - description: - 'Utilisez votre expérience pour guider les candidats dans la création de documents professionnels qui reflètent leur potentiel et leurs expériences.', - }, - { - icon: , - value: 'event', - title: - 'Se rencontrer lors d’événements avec les membres de la communautés', - description: - "Participer à des événements qui encouragent l'entraide, le partage d'expériences et le développement de réseaux professionnels enrichissants pour les candidats.", - }, - { - icon: , - value: 'network', - title: 'Partager votre réseau professionnel', - description: - 'Mettez en relation les candidats avec des contacts pertinents et intégez-les dans des réseaux qui peuvent favoriser leur insertion professionnelle.', - }, - ], -} as const; diff --git a/src/components/backoffice/useContextualRole.ts b/src/components/backoffice/useContextualRole.ts new file mode 100644 index 000000000..3bd36d356 --- /dev/null +++ b/src/components/backoffice/useContextualRole.ts @@ -0,0 +1,25 @@ +import { useEffect, useState } from 'react'; +import { + CANDIDATE_USER_ROLES, + USER_ROLES, + UserRole, +} from 'src/constants/users'; +import { isRoleIncluded } from 'src/utils'; + +export function useContextualRole(role: UserRole) { + const [contextualRole, setContextualRole] = useState< + typeof USER_ROLES.CANDIDATE | typeof USER_ROLES.COACH + >(USER_ROLES.CANDIDATE); + + useEffect(() => { + setContextualRole( + isRoleIncluded(CANDIDATE_USER_ROLES, role) + ? USER_ROLES.CANDIDATE + : USER_ROLES.COACH + ); + }, [role]); + + return { + contextualRole, + }; +} diff --git a/src/components/utils/Inputs/SelectList/SelectList.stories.tsx b/src/components/utils/Inputs/SelectList/SelectList.stories.tsx index 318b0e652..11864eda9 100644 --- a/src/components/utils/Inputs/SelectList/SelectList.stories.tsx +++ b/src/components/utils/Inputs/SelectList/SelectList.stories.tsx @@ -4,6 +4,7 @@ import { StyledHelpModalSelectOption } from 'src/components/backoffice/parametre import { Card } from 'src/components/utils/Card'; import { H6 } from 'src/components/utils/Headings'; import { ParametresHelpCardContents } from 'src/constants/helps'; +import { USER_ROLES } from 'src/constants/users'; import { SelectList as SelectListComponent } from './SelectList'; const meta = { @@ -23,7 +24,7 @@ const meta = { args: { id: 'select-list-stories', onChange: () => {}, - options: ParametresHelpCardContents.candidat.map( + options: ParametresHelpCardContents[USER_ROLES.CANDIDATE].map( ({ value, title, description, icon }) => ({ value, component: ( diff --git a/src/constants/helps.tsx b/src/constants/helps.tsx index 56255c33f..c154c39e1 100644 --- a/src/constants/helps.tsx +++ b/src/constants/helps.tsx @@ -5,6 +5,7 @@ import MaletteIllu from 'assets/icons/illu-malette.svg'; import TipsIllu from 'assets/icons/illu-poignee-de-main.svg'; import RSIllu from 'assets/icons/illu-reseaux-sociaux.svg'; import { HelpNames } from 'src/api/types'; +import { USER_ROLES } from './users'; import { FilterConstant } from './utils'; export const ProfileCardHelps: (FilterConstant & { @@ -36,21 +37,32 @@ export const ProfileCardHelps: (FilterConstant & { label: 'Partage', }, ]; -export const ParametresHelpCardTitles = { +export const ParametresHelpCardTitles: { + [K in 'card' | 'modal']: { + [R in typeof USER_ROLES.CANDIDATE | typeof USER_ROLES.COACH]: string; + }; +} = { card: { - coach: 'Vos propositions de coup de pouce', - candidat: "Vos demandes d'aide", + [USER_ROLES.COACH]: 'Vos propositions de coup de pouce', + [USER_ROLES.CANDIDATE]: "Vos demandes d'aide", }, modal: { - coach: + [USER_ROLES.COACH]: 'Sélectionnez les coups de pouce que vous souhaitez apporter aux candidats', - candidat: + [USER_ROLES.CANDIDATE]: 'Sélectionnez les coups de pouce que vous souhaitez avoir auprès des coachs', }, } as const; -export const ParametresHelpCardContents = { - candidat: [ +export const ParametresHelpCardContents: { + [K in typeof USER_ROLES.CANDIDATE | typeof USER_ROLES.COACH]: { + icon: React.ReactNode; + value: string; + title: string; + description: string; + }[]; +} = { + [USER_ROLES.CANDIDATE]: [ { icon: , value: 'tips', @@ -87,7 +99,7 @@ export const ParametresHelpCardContents = { "Multipliez vos opportunités professionnelles en vous connectant avec des professionnels qui peuvent vous soutenir et vous ouvrir des portes sur le marché de l'emploi.", }, ], - coach: [ + [USER_ROLES.COACH]: [ { icon: , value: 'tips', @@ -125,4 +137,4 @@ export const ParametresHelpCardContents = { 'Mettez en relation les candidats avec des contacts pertinents et intégez-les dans des réseaux qui peuvent favoriser leur insertion professionnelle.', }, ], -} as const; +};