Skip to content

feat: lazylast paneldata i behandling - #7430

Draft
tor-nav wants to merge 3 commits into
masterfrom
prefetch-api
Draft

feat: lazylast paneldata i behandling#7430
tor-nav wants to merge 3 commits into
masterfrom
prefetch-api

Conversation

@tor-nav

@tor-nav tor-nav commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Henter kun data for aktivt panel umiddelbart, og prefetcher øvrige fakta-, prosess- og inngangsvilkårpanel gradvis i idle-tid.

Legger til delt prioriteringskø med separate nøkler for fakta, prosess og inngangsvilkår for å unngå kollisjoner mellom like panelkoder.

Kort vurdering: nytten er mest i redusert nettverk/API-belastning og mindre konkurranse om den aktive paneldataen, ikkje i at React-renderen sjølv blir blokkert av fetching.

Det gamle opplegget stoppa truleg ikkje rendering av valt panel direkte. Alle *InitPanel-komponentane blir rendra for å registrere meny/status, men sjølve panelinnhaldet blir berre mounta når panelet er valt. Problemet var at useQuery låg i init-komponentane, altså før wrapperen bestemmer om innhaldet skal visast. Dermed starta nettverkskall for inaktive panel likevel.

Kost/nytte:

  • Nytte: færre samtidige kall ved første lasting, mindre press på backend, mindre støy i React Query/cache/state updates, og aktivt panel får mindre konkurranse om nettverk/serverressursar.
  • Kost: meir kompleksitet, fleire kallestader å halde riktig, og risiko for feil der synlegheit/status faktisk avheng av querydata. Reviewen fann nettopp slike kantar: id-kollisjonar og aktiv-panel-logikk.
  • Effekt på opplevd hastigheit: sannsynlegvis positiv viss behandling ofte har mange panel og backendkall er tunge/treige. Mindre effekt viss kall er raske, cachea, eller HTTP/2/backend handterer parallellitet godt.

Eg ville sagt endringa er fornuftig dersom målet er å redusere unødvendige kall og backend-load

Henter kun data for aktivt panel umiddelbart, og prefetcher øvrige fakta-, prosess- og inngangsvilkårpanel gradvis i idle-tid.

Legger til delt prioriteringskø med separate nøkler for fakta, prosess og inngangsvilkår for å unngå kollisjoner mellom like panelkoder.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@tor-nav
tor-nav requested a review from a team as a code owner July 3, 2026 11:39
@tor-nav
tor-nav marked this pull request as draft July 3, 2026 11:39
@tor-nav
tor-nav requested a review from Copilot July 3, 2026 11:48

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Denne PR-en endrer behandlingsflyten i apps/fp-frontend slik at paneldata hentes “lazy”: kun aktivt panel henter data umiddelbart, mens øvrige paneler prefetches gradvis i idle-tid via en felles prioriteringskø (separert per gruppe for å unngå id-kollisjoner).

Changes:

  • Introduserer PanelDataPrioritetProvider + useSkalHenteData og medPrioritet(...) for å styre useQuery.enabled basert på aktivt panel og idle-prefetch.
  • Legger provider rundt paneltrærne for flere ytelser (FP/ES/SVP/klage/anke/innsyn/tilbakekreving).
  • Legger til “lettvekts” useEr*PanelAktiv-hooks for å kunne avgjøre aktivt panel uten å registrere menydata først.

Reviewed changes

Copilot reviewed 59 out of 59 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
apps/fp-frontend/src/behandling/tilbakekreving/TilbakekrevingPaneler.tsx Wrapper paneltreet med PanelDataPrioritetProvider.
apps/fp-frontend/src/behandling/tilbakekreving/prosessPaneler/VedtakTilbakekrevingProsessInitPanel.tsx Gater vedtak-relaterte queries med prioritet/aktivitet.
apps/fp-frontend/src/behandling/tilbakekreving/prosessPaneler/TilbakekrevingProsessInitPanel.tsx Gater tilbakekreving-queries med prioritet/aktivitet.
apps/fp-frontend/src/behandling/tilbakekreving/prosessPaneler/ForeldelseProsessInitPanel.tsx Gater foreldelse-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/tilbakekreving/faktaPaneler/FeilutbetalingFaktaInitPanel.tsx Gater fakta-queries med prioritet/aktivitet + avleder aktivt panel fra menyvalg.
apps/fp-frontend/src/behandling/svangerskapspenger/SvangerskapspengerPaneler.tsx Wrapper paneltreet med PanelDataPrioritetProvider.
apps/fp-frontend/src/behandling/svangerskapspenger/prosessPaneler/TilkjentYtelseProsessStegInitPanel.tsx Gater flere queries (inkl. delvis “isEnabled”) med prioritet/aktivitet.
apps/fp-frontend/src/behandling/svangerskapspenger/prosessPaneler/inngangsvilkarPaneler/SvangerskapInngangsvilkarInitPanel.tsx Gater inngangsvilkår-query med prioritet basert på valgt inngangsvilkårpanel.
apps/fp-frontend/src/behandling/svangerskapspenger/faktaPaneler/FodselOgTilretteleggingFaktaInitPanel.tsx Gater fakta-queries med prioritet/aktivitet.
apps/fp-frontend/src/behandling/klage/prosessPaneler/VurderingFellesProsessStegInitPanel.tsx Gater klagevurdering-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/klage/prosessPaneler/KlageresultatProsessStegInitPanel.tsx Gater klagevurdering-query og justerer aktiv-markering-logikk.
apps/fp-frontend/src/behandling/klage/prosessPaneler/FormKravKlageInstansProsessStegInitPanel.tsx Gater klagevurdering-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/klage/prosessPaneler/FormKravFamOgPensjonProsessStegInitPanel.tsx Gater klagevurdering-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/klage/KlagePaneler.tsx Wrapper paneltreet med PanelDataPrioritetProvider.
apps/fp-frontend/src/behandling/innsyn/prosessPaneler/InnsynVedtakProsessStegInitPanel.tsx Gater innsyn-queries med prioritet/aktivitet + aktiv-markering.
apps/fp-frontend/src/behandling/innsyn/prosessPaneler/BehandleInnsynProsessStegInitPanel.tsx Gater innsyn-queries med prioritet/aktivitet.
apps/fp-frontend/src/behandling/innsyn/InnsynPaneler.tsx Wrapper paneltreet med PanelDataPrioritetProvider.
apps/fp-frontend/src/behandling/foreldrepenger/prosessPaneler/UttakProsessStegInitPanel.tsx Gater flere uttak-queries med prioritet/aktivitet; beholder separate enabled-vilkår for familiehendelse.
apps/fp-frontend/src/behandling/foreldrepenger/prosessPaneler/TilkjentYtelseFpProsessStegInitPanel.tsx Gater flere queries (inkl. delvis “isEnabled”) med prioritet/aktivitet.
apps/fp-frontend/src/behandling/foreldrepenger/ForeldrepengerPaneler.tsx Wrapper paneltreet med PanelDataPrioritetProvider.
apps/fp-frontend/src/behandling/foreldrepenger/faktaPaneler/UttakFaktaInitPanel.tsx Gater fakta-queries med prioritet/aktivitet + avleder aktivt panel fra menyvalg.
apps/fp-frontend/src/behandling/foreldrepenger/faktaPaneler/UttakEøsFaktaInitPanel.tsx Gater EØS-query med prioritet/aktivitet + avleder aktivt panel fra menyvalg.
apps/fp-frontend/src/behandling/foreldrepenger/faktaPaneler/UttakDokumentasjonFaktaInitPanel.tsx Gater dokumentasjon-query med prioritet/aktivitet + avleder aktivt panel fra menyvalg.
apps/fp-frontend/src/behandling/foreldrepenger/faktaPaneler/OmsorgOgRettFaktaInitPanel.tsx Gater fakta-queries med prioritet/aktivitet.
apps/fp-frontend/src/behandling/foreldrepenger/faktaPaneler/OmsorgFaktaInitPanel.tsx Gater fakta-queries med prioritet/aktivitet + avleder menyvisning.
apps/fp-frontend/src/behandling/foreldrepenger/faktaPaneler/BesteberegningFaktaInitPanel.tsx Kommenterer at BG må hentes før prioritering pga menyvisning.
apps/fp-frontend/src/behandling/fellesPaneler/prosess/VedtakProsessStegInitPanel.tsx Gater vedtak-relaterte queries med prioritet/aktivitet + aktiv-markering.
apps/fp-frontend/src/behandling/fellesPaneler/prosess/SoknadsfristProsessStegInitPanel.tsx Gater søknad-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/fellesPaneler/prosess/SimuleringProsessStegInitPanel.tsx Gater simulering-queries med prioritet/aktivitet + beregner menyvisning fra menydata.
apps/fp-frontend/src/behandling/fellesPaneler/prosess/OpplysningspliktProsessStegInitPanel.tsx Gater søknad-query med prioritet/aktivitet + egen logikk for menyvisning.
apps/fp-frontend/src/behandling/fellesPaneler/prosess/inngangsvilkarPaneler/OpptjeningInngangsvilkarInitPanel.tsx Gater opptjening-query med prioritet basert på valgt inngangsvilkårpanel.
apps/fp-frontend/src/behandling/fellesPaneler/prosess/inngangsvilkarPaneler/MedlemskapInngangsvilkarInitPanel.tsx Gater medlemskap-query med prioritet basert på valgt inngangsvilkårpanel.
apps/fp-frontend/src/behandling/fellesPaneler/prosess/BeregningsgrunnlagProsessStegInitPanel.tsx Gater beregningsgrunnlag-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/fellesPaneler/fakta/YtelserFaktaInitPanel.tsx Gater IAY-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/fellesPaneler/fakta/VergeFaktaInitPanel.tsx Gater verge-query med prioritet/aktivitet + avleder aktivt panel fra menyvalg.
apps/fp-frontend/src/behandling/fellesPaneler/fakta/SakenFaktaInitPanel.tsx Gater ytelsefordeling/utlandDokStatus med prioritet/aktivitet.
apps/fp-frontend/src/behandling/fellesPaneler/fakta/PermisjonFaktaInitPanel.tsx Gater AOI-query med prioritet/aktivitet + avleder menyvisning.
apps/fp-frontend/src/behandling/fellesPaneler/fakta/OpptjeningsvilkaretFaktaInitPanel.tsx Gater opptjening-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/fellesPaneler/fakta/OmsorgsovertakelseFaktaInitPanel.tsx Gater omsorgsovertakelse-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/fellesPaneler/fakta/MedlemskapsvilkaretFaktaInitPanel.tsx Gater medlemskap-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/fellesPaneler/fakta/InntektsmeldingerFaktaInitPanel.tsx Gater inntektsmeldinger-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/fellesPaneler/fakta/FordelingFaktaInitPanel.tsx Gater beregningsgrunnlag-query med prioritet/aktivitet + avleder menyvisning.
apps/fp-frontend/src/behandling/fellesPaneler/fakta/FodselvilkaretFaktaInitPanel.tsx Gater fødsel/dokumenter-queries med prioritet/aktivitet + avleder menyvisning.
apps/fp-frontend/src/behandling/fellesPaneler/fakta/BeregningFaktaInitPanel.tsx Gater beregningsgrunnlag-query med prioritet/aktivitet + avleder menyvisning.
apps/fp-frontend/src/behandling/fellesPaneler/fakta/ArbeidsforholdFaktaInitPanel.tsx Gater AOI-query med prioritet/aktivitet + avleder menyvisning.
apps/fp-frontend/src/behandling/fellesPaneler/fakta/ArbeidOgInntektFaktaInitPanel.tsx Gater AOI-query med prioritet/aktivitet + avleder menyvisning.
apps/fp-frontend/src/behandling/felles/prosess/useProsessMenyRegistrerer.ts Ekstra “lettvekts” hook for å sjekke aktivt prosesspanel uten å registrere.
apps/fp-frontend/src/behandling/felles/fakta/useFaktaMenyRegistrerer.ts Ekstra “lettvekts” hook for å sjekke aktivt faktapanel uten å registrere.
apps/fp-frontend/src/behandling/felles/prioritet/PanelDataPrioritetContext.tsx Ny prefetch-kø + hook som styrer når paneldata kan hentes.
apps/fp-frontend/src/behandling/felles/prioritet/medPrioritet.ts Ny helper for å kombinere eksisterende enabled med prioritet/aktivitet.
apps/fp-frontend/src/behandling/felles/prioritet/idleCallback.ts Ny wrapper for requestIdleCallback med Safari-fallback.
apps/fp-frontend/src/behandling/engangsstonad/prosessPaneler/SoknadsfristEsProsessStegInitPanel.tsx Gater søknad/familiehendelse-queries med prioritet/aktivitet.
apps/fp-frontend/src/behandling/engangsstonad/prosessPaneler/inngangsvilkarPaneler/MedlemskapForutgaendeInngangsvilkarInitPanel.tsx Gater medlemskap-query med prioritet basert på valgt inngangsvilkårpanel.
apps/fp-frontend/src/behandling/engangsstonad/prosessPaneler/BeregningEsProsessStegInitPanel.tsx Gater beregningsresultat-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/engangsstonad/EngangsstonadPaneler.tsx Wrapper paneltreet med PanelDataPrioritetProvider.
apps/fp-frontend/src/behandling/anke/prosessPaneler/AnkeTrygderettsbehandlingProsessStegInitPanel.tsx Gater ankevurdering-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/anke/prosessPaneler/AnkeResultatProsessStegInitPanel.tsx Gater ankevurdering-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/anke/prosessPaneler/AnkeBehandlingProsessStegInitPanel.tsx Gater ankevurdering-query med prioritet/aktivitet.
apps/fp-frontend/src/behandling/anke/AnkePaneler.tsx Wrapper paneltreet med PanelDataPrioritetProvider.

Comment thread apps/fp-frontend/src/behandling/felles/prioritet/PanelDataPrioritetContext.tsx Outdated
tor-nav and others added 2 commits July 3, 2026 14:31
Stopper prioriteringskøen fra å aktivere datahenting for panel som ikke vises i menyen.

Memoiserer provider-callbackene og fjerner behovet for å ignorere exhaustive-deps.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Mønsteret for å utsetje datahenting kravde tre steg i kvart panel: rekne ut
synlegheit, kalle useErFaktaPanelAktiv/useErProsessPanelAktiv, kalle
useSkalHenteData med fire posisjonelle argument, og til slutt pakke kvar
useQuery i medPrioritet. Panelkoden og skalVisesIMeny måtte gjentakast tre
gonger per fil, og den dupliserte aktiv-utrekninga kunne drifte frå den
wrapperen allereie gjer.

Samlar dette i éin hook per paneltype som tek eit namngjeve objekt og
returnerer ein prioriter-funksjon:

  const prioriter = useFaktaPanelPrioritet({ panelKode, skalVisesIMeny, harÅpentAksjonspunkt });
  const { data } = useQuery(prioriter(api.xOptions(behandling)));

Gruppe-prefikset som skil fakta/prosess/inngangsvilkår i prefetch-køen er no
implisitt i kva hook som blir brukt, så det kan ikkje lenger settast feil.
medPrioritet er folda inn i den nye modulen og fjerna.

Rydder òg opp i provideren: køen ligg i eitt objekt i staden for tre refs med
state-speiling, og planlagt idle-handtak blir nullstilt når eit tikk køyrer.

Rettar samtidig at MedlemskapsvilkaretFaktaInitPanel prefetcha data sjølv når
panelet var skjult, fordi dei to hookane fekk ulik skalVisesIMeny.

Legg til test som låser oppførselen: aktivt panel hentar med ein gong,
bakgrunnspanel batchvis, skjulte panel aldri.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants