Skip to content

Commit

Permalink
Rydd i CV-typer (#11)
Browse files Browse the repository at this point in the history
* WIP: Rydd i CV-typer

* Rydd i CV-typer

* Utdyp kommentarer til kandidattypene
  • Loading branch information
kjesvale authored Aug 2, 2023
1 parent 202f5a4 commit 7e6beb6
Show file tree
Hide file tree
Showing 76 changed files with 285 additions and 353 deletions.
2 changes: 1 addition & 1 deletion mock/kandidatsok-proxy/mock.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { rest } from 'msw';
import { Respons } from '../../src/kandidatsok/kandidater/elasticSearchTyper';
import { api } from '../../src/felles/api';
import { Innsatsgruppe } from 'felles/domene/kandidat-i-søk/Oppfølgingsinformasjon';
import { Innsatsgruppe } from 'felles/domene/kandidat/Oppfølgingsinformasjon';

export const kandidatsøkMock = [
rest.post(api.kandidatsøk, (_, res, ctx) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,11 +101,11 @@ type Cv = {
forerkort: Sertifikat[];
fagdokumentasjon: Fagdokumentasjon[];
godkjenninger: Godkjenning[];
kursObj: object[];
annenerfaringObj: object[];
kompetanseObj: object[];
samletKompetanseObj: object[];
sertifikatObj: object[];
kursObj: Kurs[];
annenerfaringObj: AnnenErfaring[];
kompetanseObj: Kompetanse[];
samletKompetanseObj: Kompetanse[];
sertifikatObj: Sertifikat[];
vervObj: object[];
perioderMedInaktivitet: object[];
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,21 @@ export enum Oppstartkode {
type Jobbprofil = {
yrkeJobbonskerObj: Jobbønske[];
geografiJobbonsker: JobbønskeSted[];
ansettelsesformJobbonskerObj: object[];
arbeidstidsordningJobbonskerObj: object[];
arbeidsdagerJobbonskerObj: object[];
arbeidstidJobbonskerObj: object[];
omfangJobbonskerObj: object[];
oppstartKode: Oppstartkode | null;
arbeidstidsordningJobbonskerObj: object[];
arbeidstidJobbonskerObj: Array<{
arbeidstidKode: 'DAGTID' | 'KVELD' | string;
arbeidstidKodeTekst: string;
}>;
ansettelsesformJobbonskerObj: Array<{
ansettelsesformKode: 'FAST' | 'VIKARIAT' | string;
ansettelsesformKodeTekst: string;
}>;
omfangJobbonskerObj: Array<{
heltidDeltidKode: 'HELTID' | 'DELTID' | string;
heltidDeltidKodeTekst: string;
}>;
};

export default Jobbprofil;
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import Cv from './Cv';
import Cv, { Språkferdighet } from './Cv';
import Jobbprofil from './Jobbprofil';
import Oppfølgingsinformasjon from './Oppfølgingsinformasjon';

Expand Down Expand Up @@ -52,7 +52,8 @@ type UtgåtteFelter = {
fritattKandidatsok: null;
};

type KandidatISøkMedAlleFelter = Id &
/* Fullverdig kandidattype slik det er definert i ElasticSearch. */
type Kandidat = Id &
Personalia &
Geografi &
Oppfølgingsinformasjon &
Expand All @@ -61,6 +62,7 @@ type KandidatISøkMedAlleFelter = Id &
UbrukteFelter &
UtgåtteFelter;

/* Brukes når man søker opp en spesifikk person i ElasticSearch. */
export type KandidatLookup = {
fornavn: Personalia['fornavn'];
etternavn: Personalia['etternavn'];
Expand Down Expand Up @@ -93,4 +95,60 @@ export type KandidatTilKandidatsøk = {
geografiJobbonsker: Jobbprofil['geografiJobbonsker'];
};

export default KandidatISøkMedAlleFelter;
/*
* Dette formatet brukes av `hentcv`-endepunktet i kandidat-api, når man åpner
* kandidatsiden i Rekrutteringsbistand. Merk at dette formatet ikke er helt likt
* Kandidat-typen, fordi backend gjør noe behandling før ElasticSearch-responsen
* returneres til frontend.
*/
export type KandidatCv = {
adresse: {
landkode: string;
postnr: string;
poststednavn: string;
kommunenr: number;
adrlinje1: string;
adrlinje2: string;
adrlinje3: string;
};
beskrivelse: Cv['beskrivelse'];
sprak: Cv['sprak'];
sprakferdigheter: Språkferdighet[];
yrkeserfaring: Cv['yrkeserfaring'];
utdanning: Cv['utdanning'];
forerkort: Cv['forerkort'];
fagdokumentasjon: Cv['fagdokumentasjon'];
godkjenninger: Cv['godkjenninger'];
aktorId: Id['aktorId'];
annenErfaring: Cv['annenerfaringObj'];
ansettelsesformJobbprofil: Jobbprofil['ansettelsesformJobbonskerObj'];
arbeidsdagerJobbprofil: Jobbprofil['arbeidsdagerJobbonskerObj'];
arbeidstidJobbprofil: Jobbprofil['arbeidstidJobbonskerObj'];
arbeidstidsordningJobbprofil: Jobbprofil['arbeidstidsordningJobbonskerObj'];
disponererBil: UtgåtteFelter['disponererBil'];
epost: Personalia['epostadresse'];
etternavn: Personalia['etternavn'];
fodselsdato: Personalia['fodselsdato'];
fodselsnummer: Id['fodselsnummer'];
fornavn: Personalia['fornavn'];
geografiJobbonsker: Jobbprofil['geografiJobbonsker'];
kandidatnummer: Id['arenaKandidatnr'];
kompetanse: Cv['kompetanseObj'];
kurs: Cv['kursObj'];
mobiltelefon: UtgåtteFelter['mobiltelefon'];
omfangJobbprofil: Jobbprofil['omfangJobbonskerObj'];
oppstartKode: Jobbprofil['oppstartKode'];
samtykkeDato: UbrukteFelter['samtykkeDato'];
samtykkeStatus: UbrukteFelter['samtykkeStatus'];
sertifikater: Cv['sertifikatObj'];
statsborgerskap: UtgåtteFelter['statsborgerskap'];
telefon: Personalia['telefon'];
sistEndret: UbrukteFelter['tidsstempel'];
veilederEpost: string;
veilederIdent: string;
veilederNavn: string;
verv: Cv['vervObj'];
yrkeJobbonsker: Jobbprofil['yrkeJobbonskerObj'];
};

export default Kandidat;
4 changes: 3 additions & 1 deletion src/felles/domene/kandidatliste/KandidatIKandidatliste.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ export type Kandidatnr = string;
export type Fødselsnummer = string;
export type AktørId = string;

export type Kandidat = AktivKandidat | InaktivKandidat;
export type KandidatIKandidatliste = AktivKandidat | InaktivKandidat;

type AktivKandidat = Kandidatinformasjon & PersonaliaFraCv;
type InaktivKandidat = Kandidatinformasjon & IngenPersonaliaFraCv;
Expand Down Expand Up @@ -84,3 +84,5 @@ export type FormidlingAvUsynligKandidat = UsynligKandidat & {
arkivertAvNavn: string | null;
arkivertTidspunkt: string | null;
};

export default KandidatIKandidatliste;
4 changes: 2 additions & 2 deletions src/felles/domene/kandidatliste/Kandidatliste.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { FormidlingAvUsynligKandidat, Kandidat } from './KandidatIKandidatliste';
import { FormidlingAvUsynligKandidat, KandidatIKandidatliste } from './KandidatIKandidatliste';

type Kandidatliste = {
kandidatlisteId: string;
Expand All @@ -11,7 +11,7 @@ type Kandidatliste = {
opprettetTidspunkt: string;
kanEditere: boolean;
kanSlette: KanSletteKandidatliste;
kandidater: Kandidat[];
kandidater: KandidatIKandidatliste[];
formidlingerAvUsynligKandidat: FormidlingAvUsynligKandidat[];
status: Kandidatlistestatus;
antallStillinger: number | null;
Expand Down
2 changes: 1 addition & 1 deletion src/felles/komponenter/kandidatbanner/Kandidatbanner.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
} from '@navikt/aksel-icons';
import { ReactComponent as Piktogram } from './minekandidater.svg';
import { brukStorForbokstav } from 'felles/utils/stringUtils';
import { KandidatTilStillingssøk } from 'felles/domene/kandidat-i-søk/KandidatISøk';
import { KandidatTilStillingssøk } from 'felles/domene/kandidat/Kandidat';
import css from './Kandidatbanner.module.css';

type Brødsmule = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { ChangeEvent, useState } from 'react';
import { BodyShort, ErrorMessage, Textarea } from '@navikt/ds-react';

import { Nettressurs, Nettstatus } from 'felles/nettressurs';
import { KandidatLookup } from 'felles/domene/kandidat-i-søk/KandidatISøk';
import { KandidatLookup } from 'felles/domene/kandidat/Kandidat';
import { sendEvent } from 'felles/amplitude';
import { api, post } from 'felles/api';
import Knapper from './Knapper';
Expand Down
2 changes: 1 addition & 1 deletion src/kandidat/api/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
Kandidatutfall,
UsynligKandidat,
} from 'felles/domene/kandidatliste/KandidatIKandidatliste';
import Cv from '../kandidatside/cv/reducer/cv-typer';
import Cv from 'felles/domene/kandidat/Cv';

export const ENHETSREGISTER_API = `/${api.stilling}/search-api`;

Expand Down
3 changes: 0 additions & 3 deletions src/kandidat/kandidatliste/KandidatlisteOgModaler.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import KandidatlisteAction from './reducer/KandidatlisteAction';
import KandidatlisteActionType from './reducer/KandidatlisteActionType';
import PresenterKandidaterModal from './modaler/presenter-kandidater/PresenterKandidaterModal';
import SendSmsModal from './modaler/SendSmsModal';
import { CvSøkeresultat } from '../kandidatside/cv/reducer/cv-typer';
import { Kandidatmeldinger, Kandidattilstander, SmsStatus } from './domene/Kandidatressurser';
import Kandidatliste from './Kandidatliste';
import {
Expand Down Expand Up @@ -40,7 +39,6 @@ type ConnectedProps = {
smsSendStatus: SmsStatus;
resetSmsSendStatus: () => void;
fodselsnummer?: string;
kandidat?: CvSøkeresultat;
toggleArkivert: (kandidatlisteId: string, kandidatnr: string, arkivert: boolean) => void;
angreArkiveringForKandidater: (kandidatlisteId: string, kandidatnumre: string[]) => void;
statusArkivering: Nettstatus;
Expand Down Expand Up @@ -324,7 +322,6 @@ const mapStateToProps = (state: AppState) => ({
deleStatus: state.kandidatliste.deleStatus,
smsSendStatus: state.kandidatliste.sms.sendStatus,
fodselsnummer: state.kandidatliste.fodselsnummer,
kandidat: state.kandidatliste.kandidat,
sendteMeldinger: state.kandidatliste.sms.sendteMeldinger,
statusArkivering: state.kandidatliste.arkivering.statusArkivering,
statusDearkivering: state.kandidatliste.arkivering.statusDearkivering,
Expand Down
4 changes: 2 additions & 2 deletions src/kandidat/kandidatliste/domene/kandidatUtils.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {
Kandidat,
KandidatIKandidatliste,
Kandidatutfall,
Utfallsendring,
} from 'felles/domene/kandidatliste/KandidatIKandidatliste';
Expand All @@ -11,4 +11,4 @@ export const hentSisteKandidatutfall = (
return utfallsendringer.find((endring) => endring.utfall === utfall);
};

export const erInaktiv = (kandidat: Kandidat): boolean => kandidat.fodselsnr === null;
export const erInaktiv = (kandidat: KandidatIKandidatliste): boolean => kandidat.fodselsnr === null;
9 changes: 6 additions & 3 deletions src/kandidat/kandidatliste/filter/filter-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@ import {
ForespørslerGruppertPåAktørId,
hentForespørslerForKandidatForStilling,
} from '../knappe-rad/forespørsel-om-deling-av-cv/Forespørsel';
import { Kandidat, Kandidatstatus } from 'felles/domene/kandidatliste/KandidatIKandidatliste';
import {
KandidatIKandidatliste,
Kandidatstatus,
} from 'felles/domene/kandidatliste/KandidatIKandidatliste';

const QUERY_PARAM_SEPARATOR = '-';

export const matchNavn = (navnefilter: string) => (kandidat: Kandidat) => {
export const matchNavn = (navnefilter: string) => (kandidat: KandidatIKandidatliste) => {
const trimmet = navnefilter.trim();
if (trimmet.length === 0) return true;

Expand All @@ -27,7 +30,7 @@ export const matchNavn = (navnefilter: string) => (kandidat: Kandidat) => {
};

export const filtrerKandidater = (
kandidater: Kandidat[],
kandidater: KandidatIKandidatliste[],
forespørslerOmDelingAvCv: Nettressurs<ForespørslerGruppertPåAktørId>,
filter?: Kandidatlistefilter
) => {
Expand Down
13 changes: 8 additions & 5 deletions src/kandidat/kandidatliste/hooks/useAntallFiltertreff.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ import {
ForespørslerGruppertPåAktørId,
hentForespørslerForKandidatForStilling,
} from '../knappe-rad/forespørsel-om-deling-av-cv/Forespørsel';
import { Kandidat, Kandidatstatus } from 'felles/domene/kandidatliste/KandidatIKandidatliste';
import {
KandidatIKandidatliste,
Kandidatstatus,
} from 'felles/domene/kandidatliste/KandidatIKandidatliste';

export type AntallFiltertreff = {
arkiverte: number;
Expand All @@ -18,7 +21,7 @@ export type AntallFiltertreff = {
};

const useAntallFiltertreff = (
kandidater: Kandidat[],
kandidater: KandidatIKandidatliste[],
forespørslerOmDelingAvCv: Nettressurs<ForespørslerGruppertPåAktørId>,
filter: Kandidatlistefilter
): AntallFiltertreff => {
Expand Down Expand Up @@ -51,11 +54,11 @@ const useAntallFiltertreff = (
return antallTreff;
};

const hentAntallArkiverte = (kandidater: Kandidat[]) => {
const hentAntallArkiverte = (kandidater: KandidatIKandidatliste[]) => {
return kandidater.filter((kandidat) => kandidat.arkivert).length;
};

const hentAntallMedStatus = (kandidater: Kandidat[]) => {
const hentAntallMedStatus = (kandidater: KandidatIKandidatliste[]) => {
const antallMedStatus: Record<string, number> = {};
Object.values(Kandidatstatus).forEach((status) => {
antallMedStatus[status] = 0;
Expand All @@ -69,7 +72,7 @@ const hentAntallMedStatus = (kandidater: Kandidat[]) => {
};

const hentAntallMedHendelse = (
kandidater: Kandidat[],
kandidater: KandidatIKandidatliste[],
forespørslerOmDelingAvCv: Nettressurs<ForespørslerGruppertPåAktørId>
): Record<Hendelse, number> => {
const antallMedHendelse: Record<string, number> = {};
Expand Down
9 changes: 6 additions & 3 deletions src/kandidat/kandidatliste/hooks/useErAlleMarkerte.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@ import { useSelector } from 'react-redux';
import AppState from '../../state/AppState';
import { Kandidattilstander } from '../domene/Kandidatressurser';
import { erInaktiv } from '../domene/kandidatUtils';
import { Kandidat } from 'felles/domene/kandidatliste/KandidatIKandidatliste';
import { KandidatIKandidatliste } from 'felles/domene/kandidatliste/KandidatIKandidatliste';

const erAlleMarkerte = (kandidater: Kandidat[], kandidattilstander: Kandidattilstander) => {
const erAlleMarkerte = (
kandidater: KandidatIKandidatliste[],
kandidattilstander: Kandidattilstander
) => {
const aktiveOgSlettaKandidater = kandidater.filter(
(kandidat) => !erInaktiv(kandidat) || kandidat.arkivert
);
Expand All @@ -19,7 +22,7 @@ const erAlleMarkerte = (kandidater: Kandidat[], kandidattilstander: Kandidattils
);
};

const useErAlleMarkerte = (kandidater: Kandidat[]): boolean => {
const useErAlleMarkerte = (kandidater: KandidatIKandidatliste[]): boolean => {
const { kandidattilstander } = useSelector((state: AppState) => state.kandidatliste);

const [alleErMarkerte, setAlleErMarkerte] = useState<boolean>(
Expand Down
4 changes: 2 additions & 2 deletions src/kandidat/kandidatliste/hooks/useFiltrerteKandidater.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { useSelector } from 'react-redux';
import { Kandidat } from 'felles/domene/kandidatliste/KandidatIKandidatliste';
import { KandidatIKandidatliste } from 'felles/domene/kandidatliste/KandidatIKandidatliste';
import AppState from '../../state/AppState';

const useFiltrerteKandidater = (kandidater: Kandidat[]) => {
const useFiltrerteKandidater = (kandidater: KandidatIKandidatliste[]) => {
const { kandidattilstander } = useSelector((state: AppState) => state.kandidatliste);

const filtrerteKandidater = kandidater.filter(
Expand Down
4 changes: 2 additions & 2 deletions src/kandidat/kandidatliste/hooks/useIkkeSlettedeKandidater.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Kandidat } from 'felles/domene/kandidatliste/KandidatIKandidatliste';
import { KandidatIKandidatliste } from 'felles/domene/kandidatliste/KandidatIKandidatliste';

const useSlettedeKandidater = (kandidater: Kandidat[]) => {
const useSlettedeKandidater = (kandidater: KandidatIKandidatliste[]) => {
return kandidater.filter((kandidat) => kandidat.arkivert === true);
};

Expand Down
4 changes: 2 additions & 2 deletions src/kandidat/kandidatliste/hooks/useMarkerteKandidater.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { useSelector } from 'react-redux';
import AppState from '../../state/AppState';
import { Kandidat } from 'felles/domene/kandidatliste/KandidatIKandidatliste';
import { KandidatIKandidatliste } from 'felles/domene/kandidatliste/KandidatIKandidatliste';

const useMarkerteKandidater = (kandidater: Kandidat[]) => {
const useMarkerteKandidater = (kandidater: KandidatIKandidatliste[]) => {
const { kandidattilstander } = useSelector((state: AppState) => state.kandidatliste);

return kandidater.filter((kandidat) => kandidattilstander[kandidat.kandidatnr]?.markert);
Expand Down
8 changes: 4 additions & 4 deletions src/kandidat/kandidatliste/hooks/useSorterteKandidater.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,21 @@ import {
import KandidatlisteAction from '../reducer/KandidatlisteAction';
import KandidatlisteActionType from '../reducer/KandidatlisteActionType';
import { Kandidatsortering } from '../reducer/kandidatlisteReducer';
import { Kandidat } from 'felles/domene/kandidatliste/KandidatIKandidatliste';
import { KandidatIKandidatliste } from 'felles/domene/kandidatliste/KandidatIKandidatliste';

type Returverdi = {
sorterteKandidater: Kandidat[];
sorterteKandidater: KandidatIKandidatliste[];
sortering: Kandidatsortering;
setSortering: (sortering: Kandidatsortering) => void;
};

export type KandidatMedForespørsel = {
kandidat: Kandidat;
kandidat: KandidatIKandidatliste;
forespørselOmDelingAvCv?: ForespørselOmDelingAvCv;
};

const useSorterteKandidater = (
kandidater: Kandidat[],
kandidater: KandidatIKandidatliste[],
forespørslerOmDelingAvCv: Nettressurs<ForespørslerGruppertPåAktørId>
): Returverdi => {
const dispatch: Dispatch<KandidatlisteAction> = useDispatch();
Expand Down
Loading

0 comments on commit 7e6beb6

Please sign in to comment.