From 8c2bd95a82a49ba1dd947e1f225f9f4d0e5c1115 Mon Sep 17 00:00:00 2001 From: JulieHillRoa Date: Mon, 17 Jun 2024 12:16:19 +0200 Subject: [PATCH] Ikke vise huskelapp eller arbeidsliste dersom man ikke er tildelt ved nytt kontor --- src/api/utils.ts | 56 +++++++++++++++++++ src/api/veilarbportefolje.ts | 6 ++ .../components/hidden-if/hidden-if.tsx | 5 +- src/component/components/visible-if.tsx | 6 +- .../personinfo/components/etiketter.tsx | 10 +--- src/component/personinfo/personinfo.tsx | 20 ++++--- .../components/innstillingshistorikk.tsx | 6 +- .../historikk/historikk-visning.tsx | 6 +- .../start-eskalering/maltekstvelger.tsx | 7 ++- .../start-registrering-prosess.tsx | 4 +- .../tildel-veileder/tildel-veileder.tsx | 8 +-- .../veilederverktoy/veilederverktoylinje.tsx | 14 ++++- src/index.tsx | 16 +++--- src/mock/api/veilarbportefolje.ts | 16 ++++-- src/util/utils.ts | 7 ++- 15 files changed, 130 insertions(+), 57 deletions(-) diff --git a/src/api/utils.ts b/src/api/utils.ts index ef9a3fda..ef658715 100644 --- a/src/api/utils.ts +++ b/src/api/utils.ts @@ -1,5 +1,9 @@ import axios, { AxiosError } from 'axios'; import { APP_NAME, isDefined } from '../util/utils'; +import { useEffect, useState } from 'react'; +import { useAxiosFetcher } from '../util/hook/use-axios-fetcher'; +import { Arbeidsliste, fetchHarVeilederTilgangTilEnhet, Huskelapp } from './veilarbportefolje'; +import { OppfolgingStatus, TilgangTilBrukersKontor } from './veilarboppfolging'; export const axiosInstance = axios.create({ withCredentials: true, @@ -23,3 +27,55 @@ export function hasAnyFailed(...fetchers: Array<{ error?: AxiosError }>): boolea export function hasAllData(...fetchers: Array<{ data?: object }>): boolean { return fetchers.every(f => isDefined(f.data)); } + +export const useHarVeilederTilgangTilHuskelappEllerArbeidsliste = ( + enhetId?: string, + arbeidsliste?: Arbeidsliste, + huskelapp?: Huskelapp, + oppfolgingsstatus?: OppfolgingStatus, + tilgangTilBrukersKontor?: TilgangTilBrukersKontor +) => { + const harVeilederTilgangTilEnhetFetcher = useAxiosFetcher(fetchHarVeilederTilgangTilEnhet); + const [harVeilederTilgangTilEnhet, setHarVeilederTilgangTilEnhet] = useState(false); + + //kontorbyttelogikk + const innloggetVeilederHarTilgangTilBrukersKontor = tilgangTilBrukersKontor?.tilgangTilBrukersKontor; + const harVeileder = oppfolgingsstatus?.veilederId; + + const veilederSkrevetHuskelapp = huskelapp?.huskelappId !== null ? huskelapp?.endretAv : null; + const veilederSkrevetArbeidsliste = + arbeidsliste?.sistEndretAv !== null ? arbeidsliste?.sistEndretAv?.veilederId : null; + const veilederSisteEndret = veilederSkrevetHuskelapp || veilederSkrevetArbeidsliste; + + const enhetSistEndretHuskelapp = huskelapp?.huskelappId !== null ? huskelapp?.enhetId : null; + const enhetSisteEndretArbeidsliste = + arbeidsliste?.navkontorForArbeidsliste !== null ? arbeidsliste?.navkontorForArbeidsliste : null; + const enhetSisteEndret = enhetSistEndretHuskelapp || enhetSisteEndretArbeidsliste; + + useEffect(() => { + if ( + veilederSisteEndret && + enhetId && + enhetSisteEndret !== enhetId && + harVeilederTilgangTilEnhetFetcher.data === undefined + ) { + harVeilederTilgangTilEnhetFetcher.fetch(veilederSisteEndret, enhetId); + } + setHarVeilederTilgangTilEnhet( + harVeileder && + innloggetVeilederHarTilgangTilBrukersKontor && + harVeilederTilgangTilEnhetFetcher.data !== undefined + ? harVeilederTilgangTilEnhetFetcher.data + : true + ); + }, [ + veilederSisteEndret, + enhetId, + enhetSisteEndret, + harVeileder, + innloggetVeilederHarTilgangTilBrukersKontor, + harVeilederTilgangTilEnhetFetcher + ]); + + return harVeilederTilgangTilEnhet; +}; diff --git a/src/api/veilarbportefolje.ts b/src/api/veilarbportefolje.ts index 8fb5f419..8cf77d06 100644 --- a/src/api/veilarbportefolje.ts +++ b/src/api/veilarbportefolje.ts @@ -13,6 +13,7 @@ export interface Arbeidsliste { sistEndretAv: OrNothing<{ veilederId: string }>; kategori: KategoriModell | null; veilederId?: StringOrNothing; + navkontorForArbeidsliste: StringOrNothing; } export interface Huskelapp { @@ -21,6 +22,7 @@ export interface Huskelapp { kommentar: StringOrNothing; endretDato: OrNothing; endretAv: StringOrNothing; + enhetId: string; } export enum KategoriModell { @@ -133,3 +135,7 @@ export function endreFargekategori(fargekategoriVerdi: string, fnr: string): Axi export function fetchFargekategori(fnr: string): AxiosPromise { return axiosInstance.post('/veilarbportefolje/api/v1/hent-fargekategori', { fnr }); } + +export function fetchHarVeilederTilgangTilEnhet(veilederId: string, enhetId: string): AxiosPromise { + return axiosInstance.post(`/veilarbportefolje/api/v1/hent-har-veileder-tilgang-til-enhet`, { veilederId, enhetId }); +} diff --git a/src/component/components/hidden-if/hidden-if.tsx b/src/component/components/hidden-if/hidden-if.tsx index 5704da17..5f13dc73 100644 --- a/src/component/components/hidden-if/hidden-if.tsx +++ b/src/component/components/hidden-if/hidden-if.tsx @@ -4,10 +4,9 @@ export interface HiddenProps { hidden?: boolean; } -export default function hiddenIf( - Component: ComponentType -): ComponentType { +export default function hiddenIf(Component: ComponentType): ComponentType { return (props: PROPS & HiddenProps) => { + // eslint-disable-next-line const { hidden, ...rest } = props as any; // tslint:disable-line if (hidden) { return null; diff --git a/src/component/components/visible-if.tsx b/src/component/components/visible-if.tsx index a8d40fc6..45f6b6ef 100644 --- a/src/component/components/visible-if.tsx +++ b/src/component/components/visible-if.tsx @@ -1,13 +1,13 @@ import { ComponentType } from 'react'; export interface VisibleProps { + // eslint-disable-next-line visible?: any; } -export default function visibleIf( - Component: ComponentType -): ComponentType { +export default function visibleIf(Component: ComponentType): ComponentType { return (props: PROPS & VisibleProps) => { + // eslint-disable-next-line const { visible, ...rest } = props as any; // tslint:disable-line if (visible) { return ; diff --git a/src/component/personinfo/components/etiketter.tsx b/src/component/personinfo/components/etiketter.tsx index 759c6cf2..16ba218e 100644 --- a/src/component/personinfo/components/etiketter.tsx +++ b/src/component/personinfo/components/etiketter.tsx @@ -53,14 +53,8 @@ function manglerVedtak(oppfolging: OrNothing): boolean { function Etiketter() { const { brukerFnr } = useAppStore(); - const { - gjeldendeEskaleringsvarsel, - oppfolgingsstatus, - oppfolging, - personalia, - vergeOgFullmakt, - spraakTolk - } = useDataStore(); + const { gjeldendeEskaleringsvarsel, oppfolgingsstatus, oppfolging, personalia, vergeOgFullmakt, spraakTolk } = + useDataStore(); const [innsatsgruppe, setInnsatsgruppe] = useState>(null); diff --git a/src/component/personinfo/personinfo.tsx b/src/component/personinfo/personinfo.tsx index 319c33ee..4dbb4dd8 100644 --- a/src/component/personinfo/personinfo.tsx +++ b/src/component/personinfo/personinfo.tsx @@ -22,9 +22,10 @@ import { Label } from '@navikt/ds-react'; import HuskelappKnapp from '../huskelapp/huskelapp-knapp'; import { HUSKELAPP } from '../../api/veilarbpersonflatefs'; import { Fargekategoriknapp } from '../fargekategori/fargekategoriknapp'; +import { useHarVeilederTilgangTilHuskelappEllerArbeidsliste } from '../../api/utils'; function PersonInfo() { - const { brukerFnr } = useAppStore(); + const { brukerFnr, enhetId } = useAppStore(); const { personalia, arbeidsliste, @@ -35,7 +36,16 @@ function PersonInfo() { tilgangTilBrukersKontor } = useDataStore(); const { showArbeidslisteModal, showHuskelappRedigereModal, showHuskelappModal } = useModalStore(); - const harVeileder = oppfolgingsstatus?.veilederId; + const harVeilederTilgangTilHuskelappEllerArbeidsliste = useHarVeilederTilgangTilHuskelappEllerArbeidsliste( + enhetId, + arbeidsliste, + huskelapp, + oppfolgingsstatus, + tilgangTilBrukersKontor + ); + const erArbeidslisteTom = arbeidsliste?.sistEndretAv == null; + const erHuskelappTom = huskelapp?.huskelappId == null; + const arbeidslisteikon = arbeidsliste?.kategori; const navn = selectSammensattNavn(personalia); @@ -48,15 +58,11 @@ function PersonInfo() { tilgangTilBrukersKontor ); const kanEndreFargekategori = selectKanEndreFargekategori(innloggetVeileder, oppfolgingsstatus); - const klikkShowArbeidslisteModal = () => { logMetrikk('veilarbvisittkortfs.metrikker.visittkort.arbeidsliste-ikon', { kategori: arbeidslisteikon }); showArbeidslisteModal(); }; - const erArbeidslisteTom = arbeidsliste?.sistEndretAv == null; - const erHuskelappTom = huskelapp?.huskelappId == null; - const visHuskelappknapp = features[HUSKELAPP] && ((erHuskelappTom && kanOppretteHuskelapp) || @@ -80,7 +86,7 @@ function PersonInfo() {
- {harVeileder && ( + {harVeilederTilgangTilHuskelappEllerArbeidsliste && ( <>