-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #894 from navikt/feature/robustifisere-typer-ts
Refaktorering fra JS/JSX til TS/TSX med typer, opprydding, retting av feil og mangler (her og der)
- Loading branch information
Showing
52 changed files
with
973 additions
and
1,011 deletions.
There are no files selected for viewing
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,53 +1,65 @@ | ||
# pensjon-regler-beregn | ||
|
||
## Beskrivelse | ||
|
||
Dette er et React prosjekt, for å starte lokalt kreves node.js. | ||
Dette er et React-prosjekt skrevet i TypeScript. For å starte lokalt kreves node.js. | ||
|
||
Kan installeres på Mac med homebrev `brew install node` (for andre muligheter https://nodejs.org/en/download/package-manager/#macos, evt. https://nodejs.org/en/download/current/) | ||
Kan installeres på Mac med Homebrew: `brew install node` (for andre muligheter, se [nodejs.org](https://nodejs.org/en/download/package-manager/#macos) eller [nodejs.org/download](https://nodejs.org/en/download/current/)). | ||
|
||
## Kjøre lokalt | ||
|
||
For å kjøre appen lokalt må man først installere pakker med kommandoen | ||
For å kjøre appen lokalt må man først installere pakker med kommandoen: | ||
|
||
`npm i` | ||
|
||
i Node kommando vindu etter å ha navigert til | ||
(repo-location)/pensjon-regler-beregn. | ||
i Node-kommando vindu etter å ha navigert til `(repo-location)/pensjon-regler-beregn`. | ||
|
||
Deretter kan man starte appen lokalt med kommandoen: | ||
|
||
`npm run dev` | ||
|
||
Appen vil da åpnes i standard nettleseren på adressen *http://localhost:5173/* | ||
med mindre denne porten er opptatt (Node vil da finne en annen ledig port) | ||
eller noe annet er spesifisert. | ||
Appen vil da åpnes i standard nettleseren på adressen [http://localhost:5173/](http://localhost:5173/) med mindre denne porten er opptatt (Node vil da finne en annen ledig port) eller noe annet er spesifisert. | ||
|
||
## Struktur | ||
Applikasjonen starter i filen `App.tsx`, dette er 'roten' for alle komponenter og | ||
underkomponenter i prosjektet. | ||
Her initialiseres og vises de mest grunnleggende komponentene: | ||
*Header*,*Footer*,*Request Pane* og *Response pane* disse ligger direkte under `/src/components` | ||
Applikasjonen starter i filen `App.tsx`, dette er 'roten' for alle komponenter og underkomponenter i prosjektet. Her initialiseres og vises de mest grunnleggende komponentene: `Navbar` og `Wrapper`. Disse ligger direkte under `/src/components`. | ||
|
||
Underkomponentene som rendres inne i *Header* ligger i mappen `/src/components/navigation` | ||
Underkomponentene som rendres inne i `Navbar` ligger i mappen `/src/components/navigation`. | ||
|
||
Konsollfunksjonen som skriver til *Footer* komponenter ligger under `/src/components/ConsoleLog.tsx` | ||
Konsollfunksjonen som skriver til `ConsoleLog`-komponenten ligger under `/src/components/ui-elements/ConsoleLog.tsx`. | ||
|
||
Innholdet i *Request- og ResponsePane* komponentene genereres av en rekursiv algoritme | ||
slik at endringer i modellen ikke trenger å kodes i frontend. | ||
Denne rekursive algoritmen er todelt, først brukes `JsonParser.js` til å identifisere rot-element i | ||
JSON-objektet. Deretter delegeres rendering av rot-elementet til den samsvarende komponent funksjonen. | ||
Inne i komponent funksjonen kalles`JsonParser.js` igjen på alle under-elementer. | ||
Innholdet i `RequestPane`- og `ResponsePane`-komponentene genereres av en rekursiv algoritme slik at endringer i modellen ikke trenger å kodes i frontend. Denne rekursive algoritmen er todelt: først brukes `JsonParser.tsx` til å identifisere rot-element i JSON-objektet. Deretter delegeres rendering av rot-elementet til den samsvarende komponentfunksjonen. Inne i komponentfunksjonen kalles `JsonParser.tsx` igjen på alle under-elementer. | ||
|
||
`JsonParser.js` og alle underkomponentene som bygger opp GUI-modellen ligger i mappen | ||
`src/components/guielements` | ||
`JsonParser.tsx` og alle underkomponentene som bygger opp GUI-modellen ligger i mappen `src/components/guimodelelement`. | ||
|
||
## Intern Informasjonsflyt | ||
|
||
Når en request åpnes via pensjon-regler-logviewer kommer den med en ID i URL'en | ||
Denne ID'en brukes i et api-kall som kjøres med en gang applikasjonen åpnes | ||
og har som hensikt å hente selve responsen i JSON format samt informasjon om | ||
hvilket miljø responsen er fra og hvilken tjeneste som er brukt. | ||
Når en request åpnes via pensjon-regler-logviewer kommer den med en ID i URL'en. Denne ID'en brukes i et API-kall som kjøres med en gang applikasjonen åpnes og har som hensikt å hente selve responsen i JSON-format samt informasjon om hvilket miljø responsen er fra og hvilken tjeneste som er brukt. | ||
|
||
`RequestPane`- og `ResponsePane`-komponentene rendrer responsen og viser den i et trestrukturformat. Hver node i treet er en `TabComponent`-komponent som kan være en `TableComponent`, `TreeComponent`, `ArcNodeTreeComponent`, `FormelTreeComponent` eller `CellComponent`. | ||
|
||
## Viktige filer og mapper | ||
|
||
- `src/components/navigation`: Inneholder navigasjonskomponenter som `Navbar`, `SatserDropdown` og `EnvironmentDropdown`. | ||
- `src/components/ui-elements`: Inneholder UI-komponenter som `Wrapper`, `DetailView`, `Main`, `ConsoleLog`, `DebugLogModal`, `RequestPane` og `ResponsePane`. | ||
- `src/components/guimodelelement`: Inneholder komponenter som bygger opp GUI-modellen, inkludert `JsonParser`, `TabListComponent`, `TabComponent`, `TableComponent`, `TreeComponent`, `ArcNodeTreeComponent`, `FormelTreeComponent` og `CellComponent`. | ||
- `src/store`: Inneholder global state management med Hookstate. | ||
- `src/api/service`: Inneholder API-kall og queries. | ||
- `src/api/domain/types`: Inneholder TypeScript-typer og enums brukt i prosjektet. | ||
- `src/components/error`: Inneholder feilhåndteringskomponenter som `ErrorBoundary` og `ErrorFallback`. | ||
|
||
## Feilhåndtering | ||
|
||
Prosjektet bruker en `ErrorBoundary`-komponent for å fange opp og vise feil som oppstår under rendering av komponenter. Feilmeldinger vises i en modal med detaljer om feilen. | ||
|
||
## Avhengigheter | ||
|
||
Prosjektet bruker flere eksterne biblioteker, inkludert: | ||
- `react` | ||
- `react-dom` | ||
- `react-router-dom` | ||
- `@tanstack/react-query` | ||
- `@navikt/ds-react` | ||
- `axios` | ||
- `@hookstate/core` | ||
|
||
*Request- og ResponsePane* rendres ikke før enten **RUN** eller **ÅPNE** knappene er blitt | ||
trykket da det er disse som gjør api-kallet til pensjon-regler for å konvertere requesten | ||
og den tilhørende responsen til en gui-model. | ||
For en fullstendig liste over avhengigheter, se `package.json`. |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains 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
This file contains 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
This file contains 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
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
|
||
export enum ElementType { | ||
TABLIST = "TABLIST", | ||
TAB = "TAB", | ||
TABLE = "TABLE", | ||
NODE = "NODE", | ||
BEREGNINGNODE = "BEREGNINGNODE", | ||
ARCNODE = "ARCNODE", | ||
FORMELNODE = "FORMELNODE" | ||
} | ||
|
||
export enum Orientation { | ||
VERTICAL = "VERTICAL", | ||
HORIZONTAL = "HORIZONTAL" | ||
} | ||
|
||
export enum Position { | ||
TOP = "TOP", | ||
SIDE = "SIDE" | ||
} | ||
|
||
export enum PopoverType { | ||
NONE = "NONE", | ||
DESCRIPTION = "DESCRIPTION", | ||
FORMEL = "FORMEL", | ||
FAKTUM = "FAKTUM" | ||
} | ||
|
||
export interface BaseElement { | ||
type: ElementType; | ||
[key: string]: unknown; | ||
} | ||
|
||
export interface TabListElement extends BaseElement { | ||
name: string; | ||
position: Position; | ||
data: TabElement[]; | ||
} | ||
|
||
export interface TabElement extends BaseElement { | ||
name: string; | ||
data: TableElement[]; | ||
} | ||
|
||
export interface TableElement extends BaseElement { | ||
name: string; | ||
orientation: Orientation; | ||
cells: CellElement[][]; | ||
} | ||
|
||
export interface CellElement extends BaseElement { | ||
header: boolean; | ||
popoverType: PopoverType; | ||
popoverContent?: NodeElement[]; | ||
tooltip?: string; | ||
data: string; | ||
} | ||
|
||
export interface NodeElement extends BaseElement { | ||
name: string; | ||
used: boolean; | ||
children: NodeElement[]; | ||
} | ||
|
||
export interface ArcNodeElement extends NodeElement { | ||
} | ||
|
||
export interface BeregningNodeElement extends NodeElement { | ||
data: TabElement[]; | ||
} | ||
|
||
export interface FormelNodeElement extends NodeElement { | ||
notasjon?: string; | ||
innhold?: string; | ||
result?: string; | ||
} | ||
export interface Metadata { | ||
className: string; | ||
status: string; | ||
info: string; | ||
bruktSats: string; | ||
debugLog: string; | ||
} | ||
|
||
export type DataElement = | ||
| TabListElement | ||
| TabElement | ||
| TableElement | ||
| CellElement | ||
| NodeElement | ||
| ArcNodeElement | ||
| BeregningNodeElement | ||
| FormelNodeElement; | ||
|
||
export interface GuiModel { | ||
request: DataElement[]; | ||
response: DataElement[]; | ||
metadata: Metadata; | ||
} | ||
|
||
export type LogResponse = { | ||
id: string; | ||
correlation_id: string; | ||
environment: string; | ||
person?: string; | ||
date: string; | ||
metadata: string | ||
xml: string; | ||
type: string; | ||
transaction_id: string; | ||
method: string; | ||
from: string; | ||
persons: string; | ||
} |
Oops, something went wrong.