feat: lazylast paneldata i behandling - #7430
Draft
tor-nav wants to merge 3 commits into
Draft
Conversation
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>
Contributor
There was a problem hiding this comment.
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+useSkalHenteDataogmedPrioritet(...)for å styreuseQuery.enabledbasert 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. |
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>
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



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:
Eg ville sagt endringa er fornuftig dersom målet er å redusere unødvendige kall og backend-load