diff --git a/.eslintrc.json b/.eslintrc.json index 42ab36aad..716301887 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -5,7 +5,9 @@ "sourceType": "module" }, "plugins": [ - "react", "react-hooks", "prettier", + "react", + "react-hooks", + "prettier", "@typescript-eslint/eslint-plugin", "@typescript-eslint", "typescript-sort-keys", @@ -71,10 +73,13 @@ "react/static-property-placement": ["warn", "static getter"], "react-hooks/rules-of-hooks": "error", "react-hooks/exhaustive-deps": "error", - "jsx-a11y/aria-role": [ 2, { - "allowedInvalidRoles": ["Candidat"], - "ignoreNonDOM": true - }], + "jsx-a11y/aria-role": [ + 2, + { + "allowedInvalidRoles": ["Candidat"], + "ignoreNonDOM": true + } + ], "react/jsx-filename-extension": [ "warn", { @@ -90,10 +95,7 @@ ], // TypeScript Rules - "@typescript-eslint/no-unused-vars": [ - 1, - { "ignoreRestSiblings": true } - ], + "@typescript-eslint/no-unused-vars": [1, { "ignoreRestSiblings": true }], "@typescript-eslint/member-delimiter-style": [ 1, { diff --git a/cypress.config.js b/cypress.config.js index 39d413842..78a1fc400 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -6,7 +6,7 @@ module.exports = defineConfig({ projectId: process.env.CYPRESS_IO_PROJECT_ID, defaultCommandTimeout: 10000, pageLoadTimeout: 120000, - env :{ + env: { adresseLocauxParis: `${process.env.ADRESSE_LOCAUX_PARIS}`, }, e2e: { diff --git a/cypress/e2e/parcours-travailler.cy.js b/cypress/e2e/parcours-travailler.cy.js index a45deb569..7b7121fe8 100644 --- a/cypress/e2e/parcours-travailler.cy.js +++ b/cypress/e2e/parcours-travailler.cy.js @@ -20,7 +20,9 @@ describe('Parcours travailler', () => { }); it('Remplir le formulaire, envoyer et fermer', () => { - cy.get('[data-testid="form-candidate-inscription-location"]').scrollIntoView().click(); + cy.get('[data-testid="form-candidate-inscription-location"]') + .scrollIntoView() + .click(); cy.get('[data-testid="select-option-93"]').click(); cy.get('[data-testid="form-candidate-inscription-birthdate"]').type( '1994-02-22' diff --git a/cypress/fixtures/auth-current-coach-externe-res.json b/cypress/fixtures/auth-current-coach-externe-res.json index b6be13170..52e5d7801 100644 --- a/cypress/fixtures/auth-current-coach-externe-res.json +++ b/cypress/fixtures/auth-current-coach-externe-res.json @@ -1,69 +1,69 @@ { - "id": "3a8ea26c-197c-4528-ab55-aa081e53343f", - "OrganizationId": "99aca0a7-3154-4fbe-b149-700a9de44871", - "firstName": "Sonia", - "lastName": "Lamani", - "email": "ss.lamani@mmail.com", - "phone": "+33698754321", - "address": null, - "role": "Coach externe", - "adminRole": null, - "zone": "PARIS", - "gender": 1, - "lastConnection": "2023-05-26T09:32:48.902Z", - "candidat": null, - "coaches": [ - { - "employed": false, - "hidden": false, - "note": null, - "url": "john-1cd4e535", - "contract": null, - "endOfContract": null, - "lastModifiedBy": null, - "candidat": { - "id": "1cd4e535-9c18-4b67-8896-e0652b5b3fc9", - "OrganizationId": "99aca0a7-3154-4fbe-b149-700a9de44871", - "firstName": "John", - "lastName": "Doeexterne", - "email": "qsdfds@linkedout.fr", - "phone": "+33698754321", - "address": null, - "role": "Candidat externe", - "adminRole": null, - "zone": "PARIS", - "gender": 0, - "lastConnection": null - } - }, - { - "employed": false, - "hidden": false, - "note": "top top", - "url": "arnold-be521222", - "contract": null, - "endOfContract": null, - "lastModifiedBy": "3a8ea26c-197c-4528-ab55-aa081e53343f", - "candidat": { - "id": "be521222-7f46-42fb-805d-96676e65fe13", - "OrganizationId": "99aca0a7-3154-4fbe-b149-700a9de44871", - "firstName": "Arnold", - "lastName": "Schwarziexterne", - "email": "paqdfqdsful@entourage.social", - "phone": "+33698754321", - "address": null, - "role": "Candidat externe", - "adminRole": null, - "zone": "PARIS", - "gender": 0, - "lastConnection": null - } - } - ], - "organization": { - "name": "première en test", - "address": "panam", + "id": "3a8ea26c-197c-4528-ab55-aa081e53343f", + "OrganizationId": "99aca0a7-3154-4fbe-b149-700a9de44871", + "firstName": "Sonia", + "lastName": "Lamani", + "email": "ss.lamani@mmail.com", + "phone": "+33698754321", + "address": null, + "role": "Coach externe", + "adminRole": null, + "zone": "PARIS", + "gender": 1, + "lastConnection": "2023-05-26T09:32:48.902Z", + "candidat": null, + "coaches": [ + { + "employed": false, + "hidden": false, + "note": null, + "url": "john-1cd4e535", + "contract": null, + "endOfContract": null, + "lastModifiedBy": null, + "candidat": { + "id": "1cd4e535-9c18-4b67-8896-e0652b5b3fc9", + "OrganizationId": "99aca0a7-3154-4fbe-b149-700a9de44871", + "firstName": "John", + "lastName": "Doeexterne", + "email": "qsdfds@linkedout.fr", + "phone": "+33698754321", + "address": null, + "role": "Candidat externe", + "adminRole": null, + "zone": "PARIS", + "gender": 0, + "lastConnection": null + } + }, + { + "employed": false, + "hidden": false, + "note": "top top", + "url": "arnold-be521222", + "contract": null, + "endOfContract": null, + "lastModifiedBy": "3a8ea26c-197c-4528-ab55-aa081e53343f", + "candidat": { + "id": "be521222-7f46-42fb-805d-96676e65fe13", + "OrganizationId": "99aca0a7-3154-4fbe-b149-700a9de44871", + "firstName": "Arnold", + "lastName": "Schwarziexterne", + "email": "paqdfqdsful@entourage.social", + "phone": "+33698754321", + "address": null, + "role": "Candidat externe", + "adminRole": null, "zone": "PARIS", - "id": "99aca0a7-3154-4fbe-b149-700a9de44871" + "gender": 0, + "lastConnection": null + } } -} \ No newline at end of file + ], + "organization": { + "name": "première en test", + "address": "panam", + "zone": "PARIS", + "id": "99aca0a7-3154-4fbe-b149-700a9de44871" + } +} diff --git a/cypress/fixtures/post-external-message-res.json b/cypress/fixtures/post-external-message-res.json index 599260ef0..aa1e7f58e 100644 --- a/cypress/fixtures/post-external-message-res.json +++ b/cypress/fixtures/post-external-message-res.json @@ -1,10 +1,10 @@ { - "UserId": "3da510cc-abae-4c4d-a801-30ca0d403951", - "firstName": "Addison", - "lastName": "Dare", - "email": "Nigel_Metz@gmail.com", - "phone": "+33619509379", - "subject": "help", - "message": "Quos placeat placeat aliquid a aut quod eos quia impedit", - "type": "connector" + "UserId": "3da510cc-abae-4c4d-a801-30ca0d403951", + "firstName": "Addison", + "lastName": "Dare", + "email": "Nigel_Metz@gmail.com", + "phone": "+33619509379", + "subject": "help", + "message": "Quos placeat placeat aliquid a aut quod eos quia impedit", + "type": "connector" } diff --git a/src/components/backoffice/admin/AdminOpportunityList.js b/src/components/backoffice/admin/AdminOpportunityList.js index 1bdf5fbcc..30a9579bd 100644 --- a/src/components/backoffice/admin/AdminOpportunityList.js +++ b/src/components/backoffice/admin/AdminOpportunityList.js @@ -14,10 +14,10 @@ import { import { HeaderBackoffice } from 'src/components/headers/HeaderBackoffice'; import { openModal } from 'src/components/modals/Modal'; import { ModalEdit } from 'src/components/modals/Modal/ModalGeneric/ModalEdit'; +import { PostOpportunityModal } from 'src/components/modals/Modal/ModalGeneric/PostOpportunityModal/PostOpportunityModal'; import { OpportunityList } from 'src/components/opportunities/OpportunityList'; import { ButtonMultiple } from 'src/components/utils'; import { Icon } from 'src/components/utils/Icon'; -import { usePostOpportunity } from 'src/hooks'; import { useIsDesktop } from 'src/hooks/utils'; import { mutateFormSchema } from 'src/utils'; @@ -81,7 +81,7 @@ export const AdminOpportunityList = ({ const opportunityListRef = useRef(); - const { PostOpportunityModal } = usePostOpportunity({ + const opportunityModalProps = { defaultValues: { isPublic: true, }, @@ -89,7 +89,7 @@ export const AdminOpportunityList = ({ callback: opportunityListRef?.current?.fetchData, modalTitle: 'Ajouter une nouvelle offre', schema: mutatedOfferSchema, - }); + }; return ( <> @@ -105,7 +105,7 @@ export const AdminOpportunityList = ({ buttons={[ { onClick: () => { - openModal(); + openModal(); }, label: 'Nouvelle offre', }, diff --git a/src/components/cv/CVFiche.js b/src/components/cv/CVFiche.js index 48e372865..b9d170a80 100644 --- a/src/components/cv/CVFiche.js +++ b/src/components/cv/CVFiche.js @@ -1,6 +1,6 @@ import { useRouter } from 'next/router'; import PropTypes from 'prop-types'; -import React from 'react'; +import React, { useMemo } from 'react'; import { FacebookShareButton, LinkedinShareButton, @@ -13,13 +13,14 @@ import { CVCareerPathSentence } from 'src/components/cv/CVCareerPathSentence'; import { formSendExternalMessage } from 'src/components/forms/schema/formSendExternalMessage'; import { openModal } from 'src/components/modals/Modal'; import { ModalEdit } from 'src/components/modals/Modal/ModalGeneric/ModalEdit'; +import { PostOpportunityModal } from 'src/components/modals/Modal/ModalGeneric/PostOpportunityModal'; import { ModalShareCV } from 'src/components/modals/Modal/ModalGeneric/StepperModal/ModalShareCV'; import { Grid, Img, SimpleLink, Icon } from 'src/components/utils'; import { Button } from 'src/components/utils/Button'; import { CONTRACTS } from 'src/constants'; import { DEPARTMENTS_FILTERS } from 'src/constants/departements'; import { FB_TAGS, GA_TAGS } from 'src/constants/tags'; -import { usePostOpportunity, useUpdateSharesCount } from 'src/hooks'; +import { useUpdateSharesCount } from 'src/hooks'; import { fbEvent } from 'src/lib/fb'; import { gaEvent } from 'src/lib/gtag'; import { @@ -36,34 +37,36 @@ import { CVShape } from './CV.shape'; export const CVFiche = ({ cv, actionDisabled }) => { const updateSharesCount = useUpdateSharesCount(); - const { PostOpportunityModal } = usePostOpportunity({ - modalTitle: 'Proposer une opportunité à un candidat', - modalDesc: ( -
- Contactez ici le candidat et son coach LinkedOut afin de solliciter un - échange. -
-
- Si vous souhaitez échanger avec le coach bénévole qui accompagne le - candidat dans sa recherche d'emploi, précisez-le dans votre - message. -
-
- - LinkedOut est susceptible de transmettre cette opportunité à - d'autres candidats dont le profil correspond à votre besoin. - -
- ), - candidateId: cv.UserId, - defaultValues: { - candidat: { - firstName: cv.user.candidat.firstName, - lastName: cv.user.candidat.lastName, + const opportunityModalProps = useMemo(() => { + return { + modalTitle: 'Proposer une opportunité à un candidat', + modalDesc: ( +
+ Contactez ici le candidat et son coach LinkedOut afin de solliciter un + échange. +
+
+ Si vous souhaitez échanger avec le coach bénévole qui accompagne le + candidat dans sa recherche d'emploi, précisez-le dans votre + message. +
+
+ + LinkedOut est susceptible de transmettre cette opportunité à + d'autres candidats dont le profil correspond à votre besoin. + +
+ ), + candidateId: cv.UserId, + defaultValues: { + candidat: { + firstName: cv.user.candidat.firstName, + lastName: cv.user.candidat.lastName, + }, + isPublic: false, }, - isPublic: false, - }, - }); + }; + }, [cv]); const { asPath } = useRouter(); const hostname = process.env.SERVER_URL; @@ -209,7 +212,7 @@ export const CVFiche = ({ cv, actionDisabled }) => { onClick={() => { gaEvent(GA_TAGS.PAGE_CV_PROPOSER_OFFRE_CLIC); fbEvent(FB_TAGS.COMPANY_CV_OFFER_OPEN); - openModal(); + openModal(); }} > Me proposer une offre diff --git a/src/components/cv/CVList.tsx b/src/components/cv/CVList.tsx index 0dc7a9bba..8f08fdc94 100644 --- a/src/components/cv/CVList.tsx +++ b/src/components/cv/CVList.tsx @@ -6,7 +6,7 @@ import { LoadingScreen } from 'src/components/backoffice/cv/LoadingScreen'; import { CandidatCard } from 'src/components/cards'; import { SearchBar } from 'src/components/filters/SearchBar'; import { openModal } from 'src/components/modals/Modal'; -import { usePostPublicOfferModal } from 'src/components/modals/usePostPublicOfferModal'; +import { PostPublicOfferModal } from 'src/components/modals/Modal/ModalGeneric/PostOpportunityModal'; import { Button, Grid, SimpleLink, Icon } from 'src/components/utils'; import { CV_FILTERS_DATA, INITIAL_NB_OF_CV_TO_DISPLAY } from 'src/constants'; import { FB_TAGS } from 'src/constants/tags'; @@ -52,8 +52,6 @@ export const CVList = ({ setSearch, resetFilters, }: CVListProps) => { - const PublicOfferModal = usePostPublicOfferModal(); - const [cvs, setCVs] = useState(undefined); const [loading, setLoading] = useState(false); const [loadingMore, setLoadingMore] = useState(false); @@ -210,7 +208,7 @@ export const CVList = ({ className="uk-link-text" onClick={() => { fbEvent(FB_TAGS.COMPANY_GENERAL_OFFER_OPEN); - openModal(); + openModal(); }} > Publier une offre d’emploi @@ -235,15 +233,7 @@ export const CVList = ({ } return renderCvList(cvs); } - }, [ - cvs, - error, - filters, - hasSuggestions, - loading, - renderCvList, - PublicOfferModal, - ]); + }, [cvs, error, filters, hasSuggestions, loading, renderCvList]); return (
diff --git a/src/components/modals/Modal/ModalGeneric/ModalEdit/ModalEdit.js b/src/components/modals/Modal/ModalGeneric/ModalEdit/ModalEdit.js index 2aa1d47e5..a89fac749 100644 --- a/src/components/modals/Modal/ModalGeneric/ModalEdit/ModalEdit.js +++ b/src/components/modals/Modal/ModalGeneric/ModalEdit/ModalEdit.js @@ -57,7 +57,11 @@ ModalEdit.propTypes = { PropTypes.string, ]) ), - description: PropTypes.oneOfType([PropTypes.element, PropTypes.string]), + description: PropTypes.oneOfType([ + PropTypes.element, + PropTypes.arrayOf(PropTypes.element), + PropTypes.string, + ]), submitText: PropTypes.string, cancelText: PropTypes.string, formId: PropTypes.string, diff --git a/src/components/modals/Modal/ModalGeneric/PostOpportunityModal/PostOpportunityModal.tsx b/src/components/modals/Modal/ModalGeneric/PostOpportunityModal/PostOpportunityModal.tsx new file mode 100644 index 000000000..748edb149 --- /dev/null +++ b/src/components/modals/Modal/ModalGeneric/PostOpportunityModal/PostOpportunityModal.tsx @@ -0,0 +1,180 @@ +import _ from 'lodash'; +import moment from 'moment'; +import React, { + /* memo, */ useCallback, + /* useEffect, */ useState, +} from 'react'; +import UIkit from 'uikit'; + +import { Api } from 'src/api'; +import { formEditOpportunity as defaultSchema } from 'src/components/forms/schema/formEditOpportunity'; +import { ModalEdit } from 'src/components/modals/Modal/ModalGeneric/ModalEdit'; +import { BUSINESS_LINES } from 'src/constants'; +import { FB_TAGS, GA_TAGS } from 'src/constants/tags'; +import { useNewsletterTracking } from 'src/hooks/useNewsletterTracking'; +import { fbEvent } from 'src/lib/fb'; +import { gaEvent } from 'src/lib/gtag'; +import { findConstantFromValue, getValueFromFormField } from 'src/utils'; +import { AnyToFix } from 'src/utils/Types'; + +interface PostOpportunityModalProps { + modalTitle: string; + modalDesc: string | JSX.Element | JSX.Element[]; + isAdmin?: boolean; + candidateId?: string; + callback?: () => void; + defaultValues: AnyToFix; // to be typed + schema: AnyToFix; // to be typed +} + +export const PostOpportunityModal = ({ + modalTitle, + modalDesc, + isAdmin = false, + candidateId, + callback, + defaultValues = {}, + schema = defaultSchema, +}: PostOpportunityModalProps) => { + const [lastFilledForm, setLastFilledForm] = useState({}); + // const prevLastFilledForm = usePrevious(lastFilledForm); + const newsletterParams = useNewsletterTracking(); + + const mutatedDefaultValue = { + ...defaultValues, + candidatesIds: defaultValues.candidat + ? [ + { + label: `${defaultValues.candidat.firstName} ${defaultValues.candidat.lastName}`, + value: candidateId, + }, + ] + : [], + businessLines: defaultValues.businessLines + ? defaultValues.businessLines.map((businessLine) => { + return findConstantFromValue(businessLine, BUSINESS_LINES); + }) + : [], + }; + + const postOpportunity = useCallback( + async (fields, closeModal, adminCallback) => { + const { openNewForm, ...opportunity } = fields; + const candidatesIds = opportunity.candidatesIds + ? opportunity.candidatesIds.map((id) => { + return typeof id === 'object' ? id.value : id; + }) + : []; + + let successMessage = 'Offre validée'; + if (!isAdmin) { + if (opportunity.isPublic) { + gaEvent(GA_TAGS.POPUP_OFFRE_ENVOYER_OFFRE_GENERALE_CLIC); + fbEvent(FB_TAGS.COMPANY_GENERAL_OFFER_SEND); + } else if (candidatesIds.length > 1) { + gaEvent(GA_TAGS.POPUP_OFFRE_ENVOYER_OFFRE_MULTIPLE_CLIC); + fbEvent(FB_TAGS.COMPANY_CV_OFFER_SEND); + } else { + gaEvent(GA_TAGS.POPUP_OFFRE_ENVOYER_OFFRE_UNIQUE_CLIC); + fbEvent(FB_TAGS.COMPANY_CV_OFFER_SEND); + } + successMessage = opportunity.isPublic + ? 'Merci pour votre offre, nous reviendrons bientôt vers vous.' + : `Merci pour votre offre, le(s) candidat(s) et coach(s) associés reviendront bientôt vers vous.`; + } + + try { + await Api.postOpportunity({ + ...opportunity, + startOfContract: opportunity.startOfContract || null, + endOfContract: opportunity.endOfContract || null, + candidatesIds: + opportunity.isPublic && !isAdmin ? null : candidatesIds, + message: opportunity.isPublic ? null : opportunity.message, + recruiterPhone: opportunity.recruiterPhone || null, + businessLines: opportunity.businessLines + ? opportunity.businessLines.map((businessLine, index) => { + return { + name: businessLine, + order: index, + }; + }) + : undefined, + locations: opportunity.locations.map(({ department, address }) => { + return { + department: getValueFromFormField(department), + address, + }; + }), + date: moment().toISOString(), + ...newsletterParams, + }); + closeModal(); + UIkit.notification(successMessage, 'success'); + if (adminCallback) await adminCallback(); + if (openNewForm) { + setLastFilledForm({ + ...fields, + candidatesIds: [], + businessLines: fields.businessLines + ? fields.businessLines.map((businessLine) => { + return findConstantFromValue(businessLine, BUSINESS_LINES); + }) + : [], + }); + } else { + setLastFilledForm({}); + } + } catch (err) { + UIkit.notification(`Une erreur est survenue.`, 'danger'); + } + }, + [isAdmin, newsletterParams] + ); + + // useEffect(() => { + // if (!_.isEmpty(lastFilledForm) && lastFilledForm !== prevLastFilledForm) { + // setTimeout(() => { + // openModal(); + // }, 1000); + // } + // }, [lastFilledForm, PostOpportunityModal, prevLastFilledForm]); + + return ( + { + if (!isAdmin) { + if (fields.isPublic) { + gaEvent(GA_TAGS.POPUP_OFFRE_ENVOYER_OFFRE_GENERALE_INVALIDE); + } else if (fields.candidatesIds?.length > 1) { + gaEvent(GA_TAGS.POPUP_OFFRE_ENVOYER_OFFRE_MULTIPLE_INVALIDE); + } else { + gaEvent(GA_TAGS.POPUP_OFFRE_ENVOYER_OFFRE_UNIQUE_INVALIDE); + } + } + }} + onSubmit={async (fields, closeModal) => { + await postOpportunity( + isAdmin + ? { + ...fields, + isAdmin: true, + } + : fields, + closeModal, + callback + ); + }} + /> + ); +}; diff --git a/src/components/modals/Modal/ModalGeneric/PostOpportunityModal/PostPublicOfferModal.tsx b/src/components/modals/Modal/ModalGeneric/PostOpportunityModal/PostPublicOfferModal.tsx new file mode 100644 index 000000000..f55fbe56b --- /dev/null +++ b/src/components/modals/Modal/ModalGeneric/PostOpportunityModal/PostPublicOfferModal.tsx @@ -0,0 +1,64 @@ +import React from 'react'; +import { formEditOpportunity as defaultSchema } from 'src/components/forms/schema/formEditOpportunity'; +import { mutateFormSchema } from 'src/utils'; +import { PostOpportunityModal } from './PostOpportunityModal'; + +export const PostPublicOfferModal = () => { + const mutatedSchema = mutateFormSchema( + defaultSchema, + [ + { + fieldId: 'candidatesIds', + props: [ + { + propName: 'disabled', + value: true, + }, + { + propName: 'hidden', + value: true, + }, + ], + }, + { + fieldId: 'isPublic', + props: [ + { + propName: 'disabled', + value: true, + }, + { + propName: 'hidden', + value: true, + }, + ], + }, + { + fieldId: 'message', + props: [ + { + propName: 'disabled', + value: true, + }, + { + propName: 'hidden', + value: true, + }, + ], + }, + ], + 'post-job-ad' + ); + + const postPublicOfferModalProps = { + defaultValues: { + isPublic: true, + }, + modalTitle: 'Proposer une opportunité', + modalDesc: + 'Cet espace est dédié aux potentiels recruteurs qui souhaitent proposer une opportunité visible par tous les candidats.', + schema: mutatedSchema, + }; + + return ; +}; diff --git a/src/components/modals/Modal/ModalGeneric/PostOpportunityModal/index.tsx b/src/components/modals/Modal/ModalGeneric/PostOpportunityModal/index.tsx new file mode 100644 index 000000000..9eceab877 --- /dev/null +++ b/src/components/modals/Modal/ModalGeneric/PostOpportunityModal/index.tsx @@ -0,0 +1,2 @@ +export * from './PostOpportunityModal'; +export * from './PostPublicOfferModal'; diff --git a/src/pages/entreprises/cvs.js b/src/pages/entreprises/cvs.js deleted file mode 100644 index 29ba17243..000000000 --- a/src/pages/entreprises/cvs.js +++ /dev/null @@ -1,110 +0,0 @@ -import React from 'react'; -import { Layout } from 'src/components/Layout'; -import { openModal } from 'src/components/modals/Modal'; -import { usePostPublicOfferModal } from 'src/components/modals/usePostPublicOfferModal'; -import { CorporateContact, SearchCandidates } from 'src/components/partials'; -import { ImageTitle } from 'src/components/partials/ImageTitle'; -import { NewsletterPartial } from 'src/components/partials/NewsletterPartial'; -import { Button, Grid, Img, Section } from 'src/components/utils'; -import { Icon } from 'src/components/utils/Icon'; -import { FB_TAGS, GA_TAGS } from 'src/constants/tags'; -import { fbEvent } from 'src/lib/fb'; -import { gaEvent } from 'src/lib/gtag'; -import { isSSR } from 'src/utils/isSSR'; - -const CVEntreprises = () => { - const PublicOfferModal = usePostPublicOfferModal(); - - return ( - - - Ils sont prêts à - travailler ! - - } - text={ - <> - Pour une entreprise, il existe différentes manières de - s'engager pour l'inclusion, mais le recrutement est sans - doute l’expérience la plus transformante et impactante.
- Vous avez un poste à pourvoir ? Parcourez les CV de nos - candidats et contactez-les ! - - } - cta={{ - onClick: () => { - if (!isSSR) { - document - .getElementById('searchCandidates') - .scrollIntoView({ behavior: 'smooth' }); - } - }, - label: 'Découvrez les candidats', - }} - /> -
- -
-
-
-

- Votre offre peut correspondre{' '} - à plusieurs profils ? -

- Visages LinkedOut - - - -
-
-
-

- Vous n'avez pas trouvé{' '} - - le profil correspondant ? - -

-

- D'autres partenaires pourraient vous orienter des - personnes ! -

- - - -
-
- - -
- ); -}; - -export default CVEntreprises; diff --git a/tsconfig.json b/tsconfig.json index 6da047053..1ab7c1f1f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,12 +16,6 @@ "jsx": "preserve", "baseUrl": "./" }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx", - "**/*.js", - "**/*.jsx", - ], + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"], "exclude": ["node_modules"] }