From 19c7830819b0f77cffc164ce7de1220f20d5a29f Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 13:50:54 +0100 Subject: [PATCH 001/112] Fjerner kode som kun ble brukt av sine egne enhetstester --- src/utbetalinger/Utbetalinger.test.ts | 19 --------- src/utbetalinger/utbetalingerUtils.ts | 56 +-------------------------- 2 files changed, 1 insertion(+), 74 deletions(-) diff --git a/src/utbetalinger/Utbetalinger.test.ts b/src/utbetalinger/Utbetalinger.test.ts index 6a5395ae..e91dc249 100644 --- a/src/utbetalinger/Utbetalinger.test.ts +++ b/src/utbetalinger/Utbetalinger.test.ts @@ -1,24 +1,5 @@ -import { UtbetalingerResponse } from "../generated/model"; - -import { mockUtbetalinger, summerAntallUtbetalinger } from "./Utbetalinger.testdata"; -import { filtrerUtbetalingerForTidsinterval, filtrerUtbetalingerPaaMottaker } from "./utbetalingerUtils"; import { utbetalingsdetaljerDefaultAapnet } from "./beta/tabs/UtbetalingAccordionItem"; -it("should filter by time interval", () => { - const utbetalingerMaaned: UtbetalingerResponse[] = mockUtbetalinger; - expect(utbetalingerMaaned.length).toBe(3); - const now: Date = new Date("2019-12-01"); - expect(filtrerUtbetalingerForTidsinterval(utbetalingerMaaned, 6, now).length).toBe(3); -}); - -it("should filter by receiver of money", () => { - const utbetalingerMaaned: UtbetalingerResponse[] = mockUtbetalinger; - expect(summerAntallUtbetalinger(utbetalingerMaaned)).toBe(5); - expect(summerAntallUtbetalinger(filtrerUtbetalingerPaaMottaker(utbetalingerMaaned, true, false))).toBe(3); - expect(summerAntallUtbetalinger(filtrerUtbetalingerPaaMottaker(utbetalingerMaaned, false, false))).toBe(0); - expect(summerAntallUtbetalinger(filtrerUtbetalingerPaaMottaker(utbetalingerMaaned, false, true))).toBe(2); -}); - it("Utbetalingsdetaljer skal ikke være åpen når utbetalingsdato er 18 dager tilbake i tid", () => { expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-27")).toBe(false); }); diff --git a/src/utbetalinger/utbetalingerUtils.ts b/src/utbetalinger/utbetalingerUtils.ts index 04bb3426..3b39e15f 100644 --- a/src/utbetalinger/utbetalingerUtils.ts +++ b/src/utbetalinger/utbetalingerUtils.ts @@ -1,51 +1,5 @@ import { i18n } from "i18next"; -import { ManedUtbetaling, UtbetalingerResponse } from "../generated/model"; - -const diffInMonths = (d1: Date, d2: Date) => { - const d1Y = d1.getFullYear(); - const d2Y = d2.getFullYear(); - const d1M = d1.getMonth(); - const d2M = d2.getMonth(); - return d2M + 12 * d2Y - (d1M + 12 * d1Y); -}; -const filtrerUtbetalingerForTidsinterval = ( - utbetalinger: UtbetalingerResponse[], - visAntallMnd: number, - now: Date -): UtbetalingerResponse[] => { - return utbetalinger.filter((utbetalingSak: UtbetalingerResponse) => { - const foersteIManeden: Date = new Date(utbetalingSak.foersteIManeden); - return diffInMonths(foersteIManeden, now) < visAntallMnd; - }); -}; - -const filtrerUtbetalingerPaaMottaker = ( - utbetalinger: UtbetalingerResponse[], - visTilBrukersKonto: boolean, - visTilAnnenMottaker: boolean -): UtbetalingerResponse[] => { - return utbetalinger.map((utbetalingSak: UtbetalingerResponse) => { - return { - ...utbetalingSak, - utbetalinger: utbetalingSak.utbetalinger.filter((utbetalingMaaned: ManedUtbetaling) => { - const annenMottaker = utbetalingMaaned.annenMottaker; - if (!annenMottaker) { - return visTilBrukersKonto; - } else { - return visTilAnnenMottaker; - } - }), - }; - }); -}; - -const filtrerMaanederUtenUtbetalinger = (utbetalinger: UtbetalingerResponse[]): UtbetalingerResponse[] => { - return utbetalinger.filter((utbetalingSak: UtbetalingerResponse) => { - return utbetalingSak.utbetalinger.length > 0; - }); -}; - const hentUtbetalingTittel = (tittel: string, defaultTittel: string) => { return tittel && tittel !== "default_utbetalinger_tittel" ? tittel : defaultTittel; }; @@ -62,12 +16,4 @@ const hentMaanedString = (maaned: number, i18n: i18n) => { return date.toLocaleString(i18n.language, { month: "long" }); }; -export { - filtrerUtbetalingerPaaMottaker, - filtrerUtbetalingerForTidsinterval, - filtrerMaanederUtenUtbetalinger, - diffInMonths, - hentUtbetalingTittel, - hentMaanedString, - hentTekstForUtbetalingsmetode, -}; +export { hentUtbetalingTittel, hentMaanedString, hentTekstForUtbetalingsmetode }; From 0bd20c0a6b19142e4a743e467dfe128d6acb23db Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 13:54:57 +0100 Subject: [PATCH 002/112] Bruk date-fns i hentMaanedString --- src/utbetalinger/utbetalingerUtils.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/utbetalinger/utbetalingerUtils.ts b/src/utbetalinger/utbetalingerUtils.ts index 3b39e15f..37d19bf3 100644 --- a/src/utbetalinger/utbetalingerUtils.ts +++ b/src/utbetalinger/utbetalingerUtils.ts @@ -1,4 +1,5 @@ import { i18n } from "i18next"; +import { set } from "date-fns"; const hentUtbetalingTittel = (tittel: string, defaultTittel: string) => { return tittel && tittel !== "default_utbetalinger_tittel" ? tittel : defaultTittel; @@ -11,9 +12,7 @@ const hentTekstForUtbetalingsmetode = (utbetalingsmetode: string, i18n: i18n) => }; const hentMaanedString = (maaned: number, i18n: i18n) => { - const date = new Date(); - date.setMonth(maaned - 1); - return date.toLocaleString(i18n.language, { month: "long" }); + return set(new Date(0), { month: maaned - 1 }).toLocaleString(i18n.language, { month: "long" }); }; export { hentUtbetalingTittel, hentMaanedString, hentTekstForUtbetalingsmetode }; From 0239de496fae585b5f152be1f22fdde86404915d Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 13:55:32 +0100 Subject: [PATCH 003/112] remove braces around arrow function body --- src/utbetalinger/utbetalingerUtils.ts | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/utbetalinger/utbetalingerUtils.ts b/src/utbetalinger/utbetalingerUtils.ts index 37d19bf3..ee516c07 100644 --- a/src/utbetalinger/utbetalingerUtils.ts +++ b/src/utbetalinger/utbetalingerUtils.ts @@ -1,18 +1,15 @@ import { i18n } from "i18next"; import { set } from "date-fns"; -const hentUtbetalingTittel = (tittel: string, defaultTittel: string) => { - return tittel && tittel !== "default_utbetalinger_tittel" ? tittel : defaultTittel; -}; +const hentUtbetalingTittel = (tittel: string, defaultTittel: string) => + tittel && tittel !== "default_utbetalinger_tittel" ? tittel : defaultTittel; -const hentTekstForUtbetalingsmetode = (utbetalingsmetode: string, i18n: i18n) => { - return i18n.exists(`utbetalingsmetode.${utbetalingsmetode.toLowerCase()}`) +const hentTekstForUtbetalingsmetode = (utbetalingsmetode: string, i18n: i18n) => + i18n.exists(`utbetalingsmetode.${utbetalingsmetode.toLowerCase()}`) ? i18n.t(`utbetalingsmetode.${utbetalingsmetode.toLowerCase()}`) : utbetalingsmetode; -}; -const hentMaanedString = (maaned: number, i18n: i18n) => { - return set(new Date(0), { month: maaned - 1 }).toLocaleString(i18n.language, { month: "long" }); -}; +const hentMaanedString = (maaned: number, i18n: i18n) => + set(new Date(0), { month: maaned - 1 }).toLocaleString(i18n.language, { month: "long" }); export { hentUtbetalingTittel, hentMaanedString, hentTekstForUtbetalingsmetode }; From 96760e268d8b02a0bf54e4ce48d61371a42481ce Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 14:17:01 +0100 Subject: [PATCH 004/112] Legger inn tailwind css --- package-lock.json | 844 ++++++++++++++++++++++++++++++++++++++------- package.json | 4 + postcss.config.js | 7 + src/index.css | 3 + tailwind.config.js | 10 + 5 files changed, 750 insertions(+), 118 deletions(-) create mode 100644 postcss.config.js create mode 100644 tailwind.config.js diff --git a/package-lock.json b/package-lock.json index ab917635..7daa5502 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@navikt/aksel-icons": "^7.9.1", "@navikt/ds-css": "^7.9.1", "@navikt/ds-react": "^7.9.1", + "@navikt/ds-tailwind": "^7.9.2", "@navikt/nav-dekoratoren-moduler": "^3.1.3", "@navikt/next-api-proxy": "^4.1.3", "@navikt/next-logger": "^1.35.0", @@ -44,6 +45,7 @@ "@types/react-collapse": "^5.0.4", "@types/react-dom": "^19.0.2", "@typescript-eslint/eslint-plugin": "^8.19.1", + "autoprefixer": "^10.4.20", "eslint-config-next": "^15.1.4", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", @@ -56,7 +58,9 @@ "next-router-mock": "^0.9.13", "orval": "^7.2.0", "pino-pretty": "^11.2.1", + "postcss": "^8.5.1", "prettier": "^3.3.3", + "tailwindcss": "^3.4.17", "typescript": "^5.5.3", "undici": "^5.27.2" } @@ -77,6 +81,19 @@ "integrity": "sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==", "dev": true }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -2166,6 +2183,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -2179,9 +2197,10 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -2193,6 +2212,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -3156,6 +3176,12 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@navikt/ds-tailwind": { + "version": "7.9.2", + "resolved": "https://npm.pkg.github.com/download/@navikt/ds-tailwind/7.9.2/3733374a7abf2e1b28b7410754d92a02306ce07b", + "integrity": "sha512-5aGuHslC/vKm7Xixsspil8LbaZMeghS4E6NQ6jCNMMz5kklXNAaWQEo0IEh8X9Lco9erY1qGQzfHQauKEc8CWg==", + "license": "MIT" + }, "node_modules/@navikt/ds-tokens": { "version": "7.9.1", "resolved": "https://npm.pkg.github.com/download/@navikt/ds-tokens/7.9.1/78fb2d1aabb0a187cfe20a553344fb2d6ae16762", @@ -3668,6 +3694,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -5446,6 +5473,13 @@ "node": ">=4" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -5459,6 +5493,13 @@ "node": ">= 8" } }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -5660,6 +5701,44 @@ "node": ">=8.0.0" } }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -5894,6 +5973,19 @@ } ] }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bintrees": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", @@ -5922,9 +6014,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "dev": true, "funding": [ { @@ -5940,11 +6032,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -6010,35 +6103,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/cacache/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -6047,20 +6111,6 @@ "node": ">=12" } }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -6132,6 +6182,16 @@ "node": ">=6" } }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/camelize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", @@ -6141,9 +6201,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001581", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz", - "integrity": "sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==", + "version": "1.0.30001692", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz", + "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==", "funding": [ { "type": "opencollective", @@ -6157,7 +6217,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "2.4.2", @@ -6649,6 +6710,19 @@ "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", "dev": true }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -6890,6 +6964,13 @@ "node": ">=8" } }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -6911,6 +6992,13 @@ "node": ">=8" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -7013,13 +7101,15 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.503", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.503.tgz", - "integrity": "sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA==", - "dev": true + "version": "1.5.83", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.83.tgz", + "integrity": "sha512-LcUDPqSt+V0QmI47XLzZrz5OqILSMGsPFkDYus22rIbgorSvBYEFqq854ltTmUdHkY92FSdAAvsh4jWEULMdfQ==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", @@ -7358,10 +7448,11 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -8335,6 +8426,20 @@ "node": ">= 6" } }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, "node_modules/fs-extra": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", @@ -8535,12 +8640,31 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "peer": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -8548,6 +8672,30 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -9123,6 +9271,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", @@ -9591,15 +9752,13 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -11608,6 +11767,16 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/jose": { "version": "5.9.6", "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", @@ -12574,9 +12743,10 @@ } }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -12886,6 +13056,18 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nano-css": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.6.2.tgz", @@ -12906,15 +13088,16 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -13039,6 +13222,34 @@ "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.4.tgz", "integrity": "sha512-2fZ5YZjedi5AGaeoaC0B20zGntEHRhi2SdWcu61i48BllODcAmmtj8n7YarSPt4DaTsJaBFdxQAVEVzgmx2Zpw==" }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/nimma": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/nimma/-/nimma-0.2.3.tgz", @@ -13128,10 +13339,11 @@ } }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -13142,6 +13354,16 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -13688,6 +13910,12 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -13762,27 +13990,26 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" }, "node_modules/path-type": { "version": "4.0.0", @@ -13794,9 +14021,10 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -13822,6 +14050,16 @@ "node": ">=0.10" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pino": { "version": "9.3.2", "resolved": "https://registry.npmjs.org/pino/-/pino-9.3.2.tgz", @@ -14060,9 +14298,10 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", + "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -14077,15 +14316,130 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -14396,6 +14750,16 @@ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, "node_modules/readdirp": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", @@ -15164,9 +15528,10 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -15324,6 +15689,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -15341,6 +15707,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -15353,20 +15720,23 @@ "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -15378,6 +15748,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -15511,6 +15882,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -15605,6 +15977,34 @@ "react-dom": ">= 16.8.0" } }, + "node_modules/styled-components/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/styled-components/node_modules/tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", @@ -15637,6 +16037,39 @@ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz", "integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==" }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -15723,6 +16156,132 @@ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/tailwindcss/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/tailwindcss/node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwindcss/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -15836,6 +16395,29 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/thread-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", @@ -15928,6 +16510,13 @@ "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/tsconfck": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-2.1.2.tgz", @@ -16198,9 +16787,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", "dev": true, "funding": [ { @@ -16216,9 +16805,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -16251,6 +16841,13 @@ "requires-port": "^1.0.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, "node_modules/utility-types": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", @@ -16482,6 +17079,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -16499,6 +17097,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -16515,6 +17114,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -16529,6 +17129,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -16539,17 +17140,20 @@ "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } @@ -16558,6 +17162,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -16568,9 +17173,10 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -16582,6 +17188,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -16593,6 +17200,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, diff --git a/package.json b/package.json index d48869a7..a2e7fe22 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "@navikt/aksel-icons": "^7.9.1", "@navikt/ds-css": "^7.9.1", "@navikt/ds-react": "^7.9.1", + "@navikt/ds-tailwind": "^7.9.2", "@navikt/nav-dekoratoren-moduler": "^3.1.3", "@navikt/next-api-proxy": "^4.1.3", "@navikt/next-logger": "^1.35.0", @@ -67,6 +68,7 @@ "@types/react-collapse": "^5.0.4", "@types/react-dom": "^19.0.2", "@typescript-eslint/eslint-plugin": "^8.19.1", + "autoprefixer": "^10.4.20", "eslint-config-next": "^15.1.4", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", @@ -79,7 +81,9 @@ "next-router-mock": "^0.9.13", "orval": "^7.2.0", "pino-pretty": "^11.2.1", + "postcss": "^8.5.1", "prettier": "^3.3.3", + "tailwindcss": "^3.4.17", "typescript": "^5.5.3", "undici": "^5.27.2" }, diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 00000000..b58c5317 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,7 @@ +module.exports = { + plugins: { + "postcss-import": {}, + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/src/index.css b/src/index.css index 6bf3c3a8..cd43dd40 100644 --- a/src/index.css +++ b/src/index.css @@ -1,4 +1,7 @@ +@import "tailwindcss/base"; @import "@navikt/ds-css"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; @import "./components/paneler/paneler.css"; @import "./components/historikk/historikk.css"; @import "./components/banner/banner.css"; diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 00000000..bd6f6112 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,10 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./src/**/*.{jsx,tsx}"], + theme: { + extend: {}, + }, + plugins: [], + // eslint-disable-next-line @typescript-eslint/no-require-imports + presets: [require("@navikt/ds-tailwind")], +}; From d28a8d2e6f5a1bf9ef6694b42f7f02a63f5e1b4a Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 14:40:58 +0100 Subject: [PATCH 005/112] Forenkler i18n-strenger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ingen vits i å bygge opp setninger fra delsetninger --- public/locales/en/utbetalinger.json | 7 +++---- public/locales/nb/utbetalinger.json | 7 +++---- public/locales/nn/utbetalinger.json | 7 +++---- src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx | 5 ++--- src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx | 5 ++--- 5 files changed, 13 insertions(+), 18 deletions(-) diff --git a/public/locales/en/utbetalinger.json b/public/locales/en/utbetalinger.json index 4f6e98ec..68537daa 100644 --- a/public/locales/en/utbetalinger.json +++ b/public/locales/en/utbetalinger.json @@ -24,10 +24,9 @@ "modal.avbryt": "Cancel", "modal.vis": "Show matches", "feil.fetch" : "Something went wrong when we tried to retrieve your payments. Please try again later.", - "feil.ingen":"We could not find any payments", - "feil.ingen.filter":"for selected filtering", - "feil.ingen.default.tidligere":"for the last 15 months", - "feil.ingen.default.nye":"for current or coming months", + "feil.ingen.filter":"We could not find any payments for selected filtering", + "feil.ingen.default.tidligere":"We could not find any payments for the last 15 months", + "feil.ingen.default.nye":"We could not find any payments for current or coming months", "stoppet": "Stopped", "planlagt": "Planned", "utbetalt" : "Paid", diff --git a/public/locales/nb/utbetalinger.json b/public/locales/nb/utbetalinger.json index d34a5899..fa37c177 100644 --- a/public/locales/nb/utbetalinger.json +++ b/public/locales/nb/utbetalinger.json @@ -24,10 +24,9 @@ "modal.avbryt": "Avbryt", "modal.vis": "Vis treff", "feil.fetch" : "Noe gikk galt da vi skulle hente utbetalingene dine. Vennligst prøv igjen senere.", - "feil.ingen":"Vi fant ingen utbetalinger", - "feil.ingen.filter":"for valgt filtrering", - "feil.ingen.default.tidligere":"for de siste 15 måneder", - "feil.ingen.default.nye":"for nåværende eller kommende måneder", + "feil.ingen.filter":"Vi fant ingen utbetalinger for valgt filtrering", + "feil.ingen.default.tidligere":"Vi fant ingen utbetalinger for de siste 15 måneder", + "feil.ingen.default.nye":"Vi fant ingen utbetalinger for nåværende eller kommende måneder", "stoppet": "Stoppet", "planlagt": "Planlagt", "utbetalt" : "Utbetalt", diff --git a/public/locales/nn/utbetalinger.json b/public/locales/nn/utbetalinger.json index 5bcee70b..161b118d 100644 --- a/public/locales/nn/utbetalinger.json +++ b/public/locales/nn/utbetalinger.json @@ -24,10 +24,9 @@ "modal.avbryt": "Avbryt", "modal.vis": "Vis treff", "feil.fetch" : "Noko gjekk gale då vi skulle hente utbetalingane dine. Prøv igjen seinare.", - "feil.ingen":"Vi fann ingen utbetalingar", - "feil.ingen.filter":"med filteret som er valt", - "feil.ingen.default.tidligere":"for dei siste 15 månadene", - "feil.ingen.default.nye":"for inneverande eller komande månader", + "feil.ingen.filter":"Vi fann ingen utbetalingar med filteret som er valt", + "feil.ingen.default.tidligere":"Vi fann ingen utbetalingar for dei siste 15 månadene", + "feil.ingen.default.nye":"Vi fann ingen utbetalingar for inneverande eller komande månader", "stoppet": "Stoppa", "planlagt": "Planlagt", "utbetalt" : "Utbetalt", diff --git a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx b/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx index ac05097c..96122f3b 100644 --- a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx @@ -28,13 +28,12 @@ const NyeUtbetalinger = (props: Props) => { ); } - if (props.utbetalinger.length === 0) { + if (!props.utbetalinger.length) return ( - {`${t("feil.ingen")} ${isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.nye")}`} + {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.nye")} ); - } return ( <> diff --git a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx index f0fbae61..4306af5b 100644 --- a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx @@ -44,13 +44,12 @@ const TidligerUtbetalingerInnhold = () => { ); } - if (filtrerteTidligere.length === 0) { + if (filtrerteTidligere.length === 0) return ( - {`${t("feil.ingen")} ${isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.tidligere")}`} + {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.tidligere")} ); - } return ( <> From 4f5a1be487f0058617b9cfa8db4e807c5e4cc954 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 14:42:53 +0100 Subject: [PATCH 006/112] Fjerner default import til fordel for named --- src/utbetalinger/beta/tabs/ManedGruppe.tsx | 3 +-- src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx | 2 +- src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/utbetalinger/beta/tabs/ManedGruppe.tsx b/src/utbetalinger/beta/tabs/ManedGruppe.tsx index e7c4c6c1..9f7c795f 100644 --- a/src/utbetalinger/beta/tabs/ManedGruppe.tsx +++ b/src/utbetalinger/beta/tabs/ManedGruppe.tsx @@ -11,7 +11,7 @@ import UtbetalingAccordionItem from "./UtbetalingAccordionItem"; interface Props { utbetalingSak: UtbetalingerResponseMedId; } -const ManedGruppe = (props: Props) => { +export const ManedGruppe = (props: Props) => { const { utbetalingSak } = props; const { i18n } = useTranslation(); @@ -28,4 +28,3 @@ const ManedGruppe = (props: Props) => { ); }; -export default ManedGruppe; diff --git a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx b/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx index 96122f3b..cbcf9538 100644 --- a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx @@ -6,7 +6,7 @@ import { useFilter } from "../filter/FilterContext"; import Lastestriper from "../../../components/lastestriper/Lasterstriper"; import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; -import ManedGruppe from "./ManedGruppe"; +import { ManedGruppe } from "./ManedGruppe"; interface Props { lasterData: boolean; diff --git a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx index 4306af5b..aa5bc8c6 100644 --- a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx @@ -9,7 +9,7 @@ import Lastestriper from "../../../components/lastestriper/Lasterstriper"; import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; import { ManedUtbetaling } from "../../../generated/model"; -import ManedGruppe from "./ManedGruppe"; +import { ManedGruppe } from "./ManedGruppe"; const TidligerUtbetalingerInnhold = () => { const { data, isLoading, isError } = useHentTidligereUtbetalinger({ From 6e7c53fdb8a2c25b0d03f5f1550a22112cc559f5 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 14:46:53 +0100 Subject: [PATCH 007/112] Refaktor ManedGruppe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Henter inn metode fra utbetalingerUtils som bare ble brukt her * Endrer metoden så vi ikke må legge på årstall for hånd --- src/utbetalinger/beta/tabs/ManedGruppe.tsx | 20 +++++++++++--------- src/utbetalinger/utbetalingerUtils.ts | 6 +----- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/utbetalinger/beta/tabs/ManedGruppe.tsx b/src/utbetalinger/beta/tabs/ManedGruppe.tsx index 9f7c795f..2d8e4da7 100644 --- a/src/utbetalinger/beta/tabs/ManedGruppe.tsx +++ b/src/utbetalinger/beta/tabs/ManedGruppe.tsx @@ -1,27 +1,29 @@ -import React from "react"; import { Accordion, BodyShort } from "@navikt/ds-react"; -import { useTranslation } from "next-i18next"; +import { I18n, useTranslation } from "next-i18next"; +import { set } from "date-fns"; import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; -import { hentMaanedString } from "../../utbetalingerUtils"; import styles from "./manedgruppe.module.css"; import UtbetalingAccordionItem from "./UtbetalingAccordionItem"; -interface Props { +const getMonthYearString = (i18n: I18n, date: Date) => + date.toLocaleString(i18n.language, { month: "long", year: "numeric" }); + +export const ManedGruppe = ({ + utbetalingSak: { ar, maned, utbetalingerForManed }, +}: { utbetalingSak: UtbetalingerResponseMedId; -} -export const ManedGruppe = (props: Props) => { - const { utbetalingSak } = props; +}) => { const { i18n } = useTranslation(); return (
- {hentMaanedString(utbetalingSak.maned, i18n) + " " + utbetalingSak.ar} + {getMonthYearString(i18n, set(new Date(0), { year: ar, month: maned - 1 }))} - {utbetalingSak.utbetalingerForManed.map((utbetalingManed) => ( + {utbetalingerForManed.map((utbetalingManed) => ( ))} diff --git a/src/utbetalinger/utbetalingerUtils.ts b/src/utbetalinger/utbetalingerUtils.ts index ee516c07..6ae7a50e 100644 --- a/src/utbetalinger/utbetalingerUtils.ts +++ b/src/utbetalinger/utbetalingerUtils.ts @@ -1,5 +1,4 @@ import { i18n } from "i18next"; -import { set } from "date-fns"; const hentUtbetalingTittel = (tittel: string, defaultTittel: string) => tittel && tittel !== "default_utbetalinger_tittel" ? tittel : defaultTittel; @@ -9,7 +8,4 @@ const hentTekstForUtbetalingsmetode = (utbetalingsmetode: string, i18n: i18n) => ? i18n.t(`utbetalingsmetode.${utbetalingsmetode.toLowerCase()}`) : utbetalingsmetode; -const hentMaanedString = (maaned: number, i18n: i18n) => - set(new Date(0), { month: maaned - 1 }).toLocaleString(i18n.language, { month: "long" }); - -export { hentUtbetalingTittel, hentMaanedString, hentTekstForUtbetalingsmetode }; +export { hentUtbetalingTittel, hentTekstForUtbetalingsmetode }; From ae620879a5cce3140b0ad5f36af9cbef21ad3bf6 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 14:50:32 +0100 Subject: [PATCH 008/112] Refaktor NyeUtbetalinger.tsx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bedre navn på argumentene * Destrukturering av props og inline av definisjon --- .../beta/UtbetalingerPanelBeta.tsx | 6 ++--- .../beta/tabs/NyeUtbetalinger.tsx | 27 ++++++++++--------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index e1b12c47..f457a811 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -45,8 +45,8 @@ const UtbetalingerPanelBeta = () => { const { t } = useTranslation("utbetalinger"); const { data: nye, - isLoading: henterNye, - isError: hentNyeFeilet, + isLoading, + isError, } = useHentNyeUtbetalinger({ query: { select: (data) => { @@ -122,7 +122,7 @@ const UtbetalingerPanelBeta = () => { {t("utbetalingerIngress")} - + diff --git a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx b/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx index cbcf9538..7a46dcc2 100644 --- a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx @@ -8,27 +8,28 @@ import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; import { ManedGruppe } from "./ManedGruppe"; -interface Props { - lasterData: boolean; - error: boolean; +const NyeUtbetalinger = ({ + utbetalinger, + isError, + isLoading, +}: { utbetalinger: UtbetalingerResponseMedId[]; -} - -const NyeUtbetalinger = (props: Props) => { + isLoading: boolean; + isError: boolean; +}) => { const { isUsingFilter } = useFilter(); const { t } = useTranslation("utbetalinger"); - if (props.lasterData) { - return ; - } - if (props.error) { + if (isLoading) return ; + + if (isError) return ( {t("feil.fetch")} ); - } - if (!props.utbetalinger.length) + + if (!utbetalinger.length) return ( {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.nye")} @@ -37,7 +38,7 @@ const NyeUtbetalinger = (props: Props) => { return ( <> - {props.utbetalinger.map((utbetalingSak: UtbetalingerResponseMedId) => ( + {utbetalinger.map((utbetalingSak: UtbetalingerResponseMedId) => ( ))} From 91be01f5579f56ef8a06398325b74881dac6e8f8 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 15:03:18 +0100 Subject: [PATCH 009/112] Bruk mer moderne syntaks i useEffect .at(-1) kom i ES2022 og er penere. --- src/utbetalinger/beta/UtbetalingerPanelBeta.tsx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index f457a811..25251ad8 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -67,11 +67,10 @@ const UtbetalingerPanelBeta = () => { }); useEffect(() => { - if (!nyeLogged && nye && nye.length > 0) { - const sisteManedgruppe = nye[nye.length - 1].utbetalingerForManed; - const sisteDatoVist = - sisteManedgruppe[sisteManedgruppe.length - 1].utbetalingsdato ?? - sisteManedgruppe[sisteManedgruppe.length - 1].forfallsdato; + if (!nyeLogged && nye?.length) { + const sisteManedgruppe = nye.at(-1).utbetalingerForManed; + const sisteDatoVist = sisteManedgruppe.at(-1).utbetalingsdato ?? sisteManedgruppe.at(-1).forfallsdato; + logAmplitudeEvent("Hentet nye utbetalinger", { sisteDatoVist }); setNyeLogged(true); } From bf5b52565427c95b65498f6002963c1fb0ecaaea Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 15:04:28 +0100 Subject: [PATCH 010/112] Bruk const string union og ikke enum til aktiv tab --- .../beta/UtbetalingerPanelBeta.tsx | 35 +++++++------------ 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 25251ad8..76fbdbac 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -15,10 +15,9 @@ import NyeUtbetalinger from "./tabs/NyeUtbetalinger"; import TidligereUtbetalinger from "./tabs/TidligereUtbetalinger"; import FilterModal from "./filter/FilterModal"; -enum TAB_VALUE { - UTBETALINGER = "Utbetalinger", - TIDLIGERE = "Tidligere utbetalinger", -} +const TAB_UTBETALINGER = "Utbetalinger" as const; +const TAB_TIDLIGERE = "Tidligere utbetalinger" as const; +type UtbetalingTab = typeof TAB_UTBETALINGER | typeof TAB_TIDLIGERE; export interface UtbetalingMedId extends ManedUtbetaling { id: string; @@ -40,7 +39,7 @@ const StyledSpace = styled.div` const UtbetalingerPanelBeta = () => { const [nyeLogged, setNyeLogged] = useState(false); - const [tabClicked, setTabClicked] = useState(TAB_VALUE.UTBETALINGER); + const [tabClicked, setTabClicked] = useState(TAB_UTBETALINGER); const { t } = useTranslation("utbetalinger"); const { @@ -93,37 +92,29 @@ const UtbetalingerPanelBeta = () => { {isMobile && } - logTabChange(path)}> + logTabChange(path)}> { - setTabClicked(TAB_VALUE.UTBETALINGER); - }} - className={`${ - tabClicked === TAB_VALUE.UTBETALINGER ? styles.tab_list_blue : styles.tab_list_transparent - }`} + onClick={() => setTabClicked(TAB_UTBETALINGER)} + className={tabClicked === TAB_UTBETALINGER ? styles.tab_list_blue : styles.tab_list_transparent} /> { - setTabClicked(TAB_VALUE.TIDLIGERE); - }} - className={`${ - tabClicked === TAB_VALUE.TIDLIGERE ? styles.tab_list_blue : styles.tab_list_transparent - }`} + onClick={() => setTabClicked(TAB_TIDLIGERE)} + className={tabClicked === TAB_TIDLIGERE ? styles.tab_list_blue : styles.tab_list_transparent} /> - + {t("utbetalingerIngress")} - + From b04eee42f44bf45c4076c6c7c15e0063b90c6a82 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 15:21:23 +0100 Subject: [PATCH 011/112] Legger til classnames --- package-lock.json | 7 +++++++ package.json | 1 + 2 files changed, 8 insertions(+) diff --git a/package-lock.json b/package-lock.json index 7daa5502..ecf26634 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@navikt/oasis": "^3.4.0", "@tanstack/react-query": "^5.63.0", "@unleash/nextjs": "^1.4.2", + "classnames": "^2.5.1", "date-fns": "^3.6.0", "i18next": "^23.12.1", "js-cookie": "^3.0.1", @@ -6287,6 +6288,12 @@ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", diff --git a/package.json b/package.json index a2e7fe22..2131a187 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@navikt/oasis": "^3.4.0", "@tanstack/react-query": "^5.63.0", "@unleash/nextjs": "^1.4.2", + "classnames": "^2.5.1", "date-fns": "^3.6.0", "i18next": "^23.12.1", "js-cookie": "^3.0.1", From f018a6722188a54b84906a7aa9f803b1e58e5f1a Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 15:38:56 +0100 Subject: [PATCH 012/112] Renamer TidligerUtbetalinger til TidligereUtbetalinger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flytter ingress tilbake opp et hakkˆ --- src/utbetalinger/beta/UtbetalingerPanelBeta.tsx | 3 ++- .../beta/tabs/TidligereUtbetalinger.tsx | 16 ++-------------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 76fbdbac..7dde23fc 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -12,7 +12,7 @@ import { ManedUtbetaling, NyeOgTidligereUtbetalingerResponse } from "../../gener import styles from "./utbetalinger.module.css"; import useFiltrerteUtbetalinger from "./filter/useFiltrerteUtbetalinger"; import NyeUtbetalinger from "./tabs/NyeUtbetalinger"; -import TidligereUtbetalinger from "./tabs/TidligereUtbetalinger"; +import { TidligereUtbetalinger } from "./tabs/TidligereUtbetalinger"; import FilterModal from "./filter/FilterModal"; const TAB_UTBETALINGER = "Utbetalinger" as const; @@ -115,6 +115,7 @@ const UtbetalingerPanelBeta = () => { + {t("tidligereIngress")} diff --git a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx index aa5bc8c6..0989c877 100644 --- a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { Alert, BodyLong } from "@navikt/ds-react"; +import { Alert } from "@navikt/ds-react"; import { useTranslation } from "next-i18next"; import { useHentTidligereUtbetalinger } from "../../../generated/utbetalinger-controller/utbetalinger-controller"; @@ -11,7 +11,7 @@ import { ManedUtbetaling } from "../../../generated/model"; import { ManedGruppe } from "./ManedGruppe"; -const TidligerUtbetalingerInnhold = () => { +export const TidligereUtbetalinger = () => { const { data, isLoading, isError } = useHentTidligereUtbetalinger({ query: { select: (data) => { @@ -59,15 +59,3 @@ const TidligerUtbetalingerInnhold = () => { ); }; - -const TidligerUtbetalinger = () => { - const { t } = useTranslation("utbetalinger"); - - return ( - <> - {t("tidligereIngress")} - - - ); -}; -export default TidligerUtbetalinger; From c7a2a52e9a50e536f1669010182a708399dac5a3 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 15:46:22 +0100 Subject: [PATCH 013/112] Trekker addIdToUtbetalinger.tsx ut til egen fil MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Samme funksjon var duplisert to steder dypt i kode, så jeg trakk ut til en egen funksjon --- .../beta/UtbetalingerPanelBeta.tsx | 25 +++---------------- src/utbetalinger/beta/addIdToUtbetalinger.tsx | 15 +++++++++++ .../beta/tabs/TidligereUtbetalinger.tsx | 21 ++-------------- 3 files changed, 20 insertions(+), 41 deletions(-) create mode 100644 src/utbetalinger/beta/addIdToUtbetalinger.tsx diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 7dde23fc..66f27b7e 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -14,6 +14,7 @@ import useFiltrerteUtbetalinger from "./filter/useFiltrerteUtbetalinger"; import NyeUtbetalinger from "./tabs/NyeUtbetalinger"; import { TidligereUtbetalinger } from "./tabs/TidligereUtbetalinger"; import FilterModal from "./filter/FilterModal"; +import { addIdToUtbetalinger } from "./addIdToUtbetalinger"; const TAB_UTBETALINGER = "Utbetalinger" as const; const TAB_TIDLIGERE = "Tidligere utbetalinger" as const; @@ -42,28 +43,8 @@ const UtbetalingerPanelBeta = () => { const [tabClicked, setTabClicked] = useState(TAB_UTBETALINGER); const { t } = useTranslation("utbetalinger"); - const { - data: nye, - isLoading, - isError, - } = useHentNyeUtbetalinger({ - query: { - select: (data) => { - // Legg på en id på hver utbetaling - return data.map((item) => { - return { - ...item, - utbetalingerForManed: item.utbetalingerForManed.map((utbetaling: ManedUtbetaling) => { - return { - ...utbetaling, - id: crypto.randomUUID(), - }; - }), - }; - }); - }, - }, - }); + + const { data: nye, isLoading, isError } = useHentNyeUtbetalinger({ query: { select: addIdToUtbetalinger } }); useEffect(() => { if (!nyeLogged && nye?.length) { diff --git a/src/utbetalinger/beta/addIdToUtbetalinger.tsx b/src/utbetalinger/beta/addIdToUtbetalinger.tsx new file mode 100644 index 00000000..11405e4c --- /dev/null +++ b/src/utbetalinger/beta/addIdToUtbetalinger.tsx @@ -0,0 +1,15 @@ +import { NyeOgTidligereUtbetalingerResponse } from "../../generated/model"; + +import { UtbetalingMedId } from "./UtbetalingerPanelBeta"; + +const leggIdPaaUtbetalingerForManed = (item: NyeOgTidligereUtbetalingerResponse): UtbetalingMedId[] => + item.utbetalingerForManed.map((utbetaling) => ({ + ...utbetaling, + id: crypto.randomUUID(), + })); +// Legg på en id på hver utbetaling +export const addIdToUtbetalinger = (data: NyeOgTidligereUtbetalingerResponse[]) => + data.map((item) => ({ + ...item, + utbetalingerForManed: leggIdPaaUtbetalingerForManed(item), + })); diff --git a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx index 0989c877..ee75ff7f 100644 --- a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx @@ -7,29 +7,12 @@ import useFiltrerteUtbetalinger from "../filter/useFiltrerteUtbetalinger"; import { useFilter } from "../filter/FilterContext"; import Lastestriper from "../../../components/lastestriper/Lasterstriper"; import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; -import { ManedUtbetaling } from "../../../generated/model"; +import { addIdToUtbetalinger } from "../addIdToUtbetalinger"; import { ManedGruppe } from "./ManedGruppe"; export const TidligereUtbetalinger = () => { - const { data, isLoading, isError } = useHentTidligereUtbetalinger({ - query: { - select: (data) => { - // Legg på en id på hver utbetaling - return data.map((item) => { - return { - ...item, - utbetalingerForManed: item.utbetalingerForManed.map((utbetaling: ManedUtbetaling) => { - return { - ...utbetaling, - id: crypto.randomUUID(), - }; - }), - }; - }); - }, - }, - }); + const { data, isLoading, isError } = useHentTidligereUtbetalinger({ query: { select: addIdToUtbetalinger } }); const filtrerteTidligere = useFiltrerteUtbetalinger(data ?? []); const { isUsingFilter } = useFilter(); const { t } = useTranslation("utbetalinger"); From 344f4c6331890d8f4814b8a65d1954f162f8cea5 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 15:59:42 +0100 Subject: [PATCH 014/112] bruker defineConfig i orval config for typesikkerhet --- orval.config.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/orval.config.ts b/orval.config.ts index c4bcee9c..ca8dcfd1 100644 --- a/orval.config.ts +++ b/orval.config.ts @@ -1,4 +1,6 @@ -export default { +import { defineConfig } from "orval"; + +export default defineConfig({ "innsyn-api": { input: "./innsyn-api.json", output: { @@ -30,4 +32,4 @@ export default { afterAllFilesWrite: "prettier --write", }, }, -}; +}); From c169e150571d22908b98145e0898be16c0d852e3 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 16:34:04 +0100 Subject: [PATCH 015/112] Ekskluder generert kode fra git-repo, generer kode som et build-steg --- .gitignore | 1 + package.json | 2 +- .../digisos-api-test-controller.msw.ts | 76 -- .../digisos-api-test-controller.ts | 252 ------- .../forelopig-svar-controller.msw.ts | 41 - .../forelopig-svar-controller.ts | 124 --- .../hendelse-controller.msw.ts | 76 -- .../hendelse-controller.ts | 103 --- .../info-controller/info-controller.msw.ts | 20 - .../info-controller/info-controller.ts | 54 -- .../klage-controller/klage-controller.msw.ts | 79 -- .../klage-controller/klage-controller.ts | 171 ----- .../kommune-controller.msw.ts | 41 - .../kommune-controller/kommune-controller.ts | 106 --- .../model/dokumentasjonkravElement.ts | 18 - .../dokumentasjonkravElementHendelsetype.ts | 17 - .../model/dokumentasjonkravElementStatus.ts | 18 - .../model/dokumentasjonkravResponse.ts | 13 - src/generated/model/filOpplastingBody.ts | 10 - src/generated/model/filUrl.ts | 12 - src/generated/model/forelopigSvarResponse.ts | 11 - src/generated/model/hendelseResponse.ts | 18 - src/generated/model/hentSaksDetaljerParams.ts | 10 - src/generated/model/hentUtbetalingerParams.ts | 10 - src/generated/model/index.ts | 47 -- src/generated/model/inputKlage.ts | 12 - src/generated/model/klageDto.ts | 15 - src/generated/model/klageDtoStatus.ts | 17 - src/generated/model/kommuneResponse.ts | 15 - src/generated/model/logg.ts | 16 - src/generated/model/manedUtbetaling.ts | 21 - .../nyeOgTidligereUtbetalingerResponse.ts | 13 - .../model/oppdaterDigisosSakParams.ts | 10 - src/generated/model/oppgaveElement.ts | 15 - .../model/oppgaveElementHendelsetype.ts | 16 - .../model/oppgaveOpplastingResponse.ts | 17 - .../oppgaveOpplastingResponseHendelsetype.ts | 17 - src/generated/model/oppgaveResponse.ts | 13 - src/generated/model/saksDetaljerResponse.ts | 13 - src/generated/model/saksListeResponse.ts | 16 - src/generated/model/saksStatusResponse.ts | 15 - .../model/saksStatusResponseStatus.ts | 17 - src/generated/model/sendVedleggBody.ts | 10 - src/generated/model/soknadsStatusResponse.ts | 18 - .../model/soknadsStatusResponseStatus.ts | 18 - src/generated/model/tilgangResponse.ts | 11 - src/generated/model/unit.ts | 10 - src/generated/model/urlResponse.ts | 12 - src/generated/model/urlResponseLinkTekst.ts | 38 - src/generated/model/utbetalingerResponse.ts | 14 - .../model/vedleggOpplastingResponse.ts | 12 - .../model/vedleggOpplastingResponseStatus.ts | 19 - src/generated/model/vedleggResponse.ts | 15 - src/generated/model/vilkarResponse.ts | 16 - src/generated/model/vilkarResponseStatus.ts | 17 - .../oppgave-controller.msw.ts | 304 -------- .../oppgave-controller/oppgave-controller.ts | 704 ------------------ .../saks-oversikt-controller.msw.ts | 75 -- .../saks-oversikt-controller.ts | 198 ----- .../saks-status-controller.msw.ts | 57 -- .../saks-status-controller.ts | 106 --- .../soknad-med-innsyn-controller.msw.ts | 30 - .../soknad-med-innsyn-controller.ts | 102 --- .../soknads-status-controller.msw.ts | 88 --- .../soknads-status-controller.ts | 124 --- .../tilgang-controller.msw.ts | 37 - .../tilgang-controller/tilgang-controller.ts | 93 --- .../utbetalinger-controller.msw.ts | 148 ---- .../utbetalinger-controller.ts | 288 ------- .../vedlegg-controller.msw.ts | 87 --- .../vedlegg-controller/vedlegg-controller.ts | 176 ----- 71 files changed, 2 insertions(+), 4413 deletions(-) delete mode 100644 src/generated/digisos-api-test-controller/digisos-api-test-controller.msw.ts delete mode 100644 src/generated/digisos-api-test-controller/digisos-api-test-controller.ts delete mode 100644 src/generated/forelopig-svar-controller/forelopig-svar-controller.msw.ts delete mode 100644 src/generated/forelopig-svar-controller/forelopig-svar-controller.ts delete mode 100644 src/generated/hendelse-controller/hendelse-controller.msw.ts delete mode 100644 src/generated/hendelse-controller/hendelse-controller.ts delete mode 100644 src/generated/info-controller/info-controller.msw.ts delete mode 100644 src/generated/info-controller/info-controller.ts delete mode 100644 src/generated/klage-controller/klage-controller.msw.ts delete mode 100644 src/generated/klage-controller/klage-controller.ts delete mode 100644 src/generated/kommune-controller/kommune-controller.msw.ts delete mode 100644 src/generated/kommune-controller/kommune-controller.ts delete mode 100644 src/generated/model/dokumentasjonkravElement.ts delete mode 100644 src/generated/model/dokumentasjonkravElementHendelsetype.ts delete mode 100644 src/generated/model/dokumentasjonkravElementStatus.ts delete mode 100644 src/generated/model/dokumentasjonkravResponse.ts delete mode 100644 src/generated/model/filOpplastingBody.ts delete mode 100644 src/generated/model/filUrl.ts delete mode 100644 src/generated/model/forelopigSvarResponse.ts delete mode 100644 src/generated/model/hendelseResponse.ts delete mode 100644 src/generated/model/hentSaksDetaljerParams.ts delete mode 100644 src/generated/model/hentUtbetalingerParams.ts delete mode 100644 src/generated/model/index.ts delete mode 100644 src/generated/model/inputKlage.ts delete mode 100644 src/generated/model/klageDto.ts delete mode 100644 src/generated/model/klageDtoStatus.ts delete mode 100644 src/generated/model/kommuneResponse.ts delete mode 100644 src/generated/model/logg.ts delete mode 100644 src/generated/model/manedUtbetaling.ts delete mode 100644 src/generated/model/nyeOgTidligereUtbetalingerResponse.ts delete mode 100644 src/generated/model/oppdaterDigisosSakParams.ts delete mode 100644 src/generated/model/oppgaveElement.ts delete mode 100644 src/generated/model/oppgaveElementHendelsetype.ts delete mode 100644 src/generated/model/oppgaveOpplastingResponse.ts delete mode 100644 src/generated/model/oppgaveOpplastingResponseHendelsetype.ts delete mode 100644 src/generated/model/oppgaveResponse.ts delete mode 100644 src/generated/model/saksDetaljerResponse.ts delete mode 100644 src/generated/model/saksListeResponse.ts delete mode 100644 src/generated/model/saksStatusResponse.ts delete mode 100644 src/generated/model/saksStatusResponseStatus.ts delete mode 100644 src/generated/model/sendVedleggBody.ts delete mode 100644 src/generated/model/soknadsStatusResponse.ts delete mode 100644 src/generated/model/soknadsStatusResponseStatus.ts delete mode 100644 src/generated/model/tilgangResponse.ts delete mode 100644 src/generated/model/unit.ts delete mode 100644 src/generated/model/urlResponse.ts delete mode 100644 src/generated/model/urlResponseLinkTekst.ts delete mode 100644 src/generated/model/utbetalingerResponse.ts delete mode 100644 src/generated/model/vedleggOpplastingResponse.ts delete mode 100644 src/generated/model/vedleggOpplastingResponseStatus.ts delete mode 100644 src/generated/model/vedleggResponse.ts delete mode 100644 src/generated/model/vilkarResponse.ts delete mode 100644 src/generated/model/vilkarResponseStatus.ts delete mode 100644 src/generated/oppgave-controller/oppgave-controller.msw.ts delete mode 100644 src/generated/oppgave-controller/oppgave-controller.ts delete mode 100644 src/generated/saks-oversikt-controller/saks-oversikt-controller.msw.ts delete mode 100644 src/generated/saks-oversikt-controller/saks-oversikt-controller.ts delete mode 100644 src/generated/saks-status-controller/saks-status-controller.msw.ts delete mode 100644 src/generated/saks-status-controller/saks-status-controller.ts delete mode 100644 src/generated/soknad-med-innsyn-controller/soknad-med-innsyn-controller.msw.ts delete mode 100644 src/generated/soknad-med-innsyn-controller/soknad-med-innsyn-controller.ts delete mode 100644 src/generated/soknads-status-controller/soknads-status-controller.msw.ts delete mode 100644 src/generated/soknads-status-controller/soknads-status-controller.ts delete mode 100644 src/generated/tilgang-controller/tilgang-controller.msw.ts delete mode 100644 src/generated/tilgang-controller/tilgang-controller.ts delete mode 100644 src/generated/utbetalinger-controller/utbetalinger-controller.msw.ts delete mode 100644 src/generated/utbetalinger-controller/utbetalinger-controller.ts delete mode 100644 src/generated/vedlegg-controller/vedlegg-controller.msw.ts delete mode 100644 src/generated/vedlegg-controller/vedlegg-controller.ts diff --git a/.gitignore b/.gitignore index 112dfcfb..58990573 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ next-env.d.ts tsconfig.tsbuildinfo .swc +src/generated \ No newline at end of file diff --git a/package.json b/package.json index 2131a187..4bb210e7 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ }, "scripts": { "dev": "next dev | pino-pretty", - "build": "next build", + "build": "orval && next build", "start": "next start", "test": "jest", "lintStaged": "lint-staged", diff --git a/src/generated/digisos-api-test-controller/digisos-api-test-controller.msw.ts b/src/generated/digisos-api-test-controller/digisos-api-test-controller.msw.ts deleted file mode 100644 index b821a546..00000000 --- a/src/generated/digisos-api-test-controller/digisos-api-test-controller.msw.ts +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { faker } from "@faker-js/faker"; -import { HttpResponse, delay, http } from "msw"; - -export const getFilOpplastingResponseMock = (): string => faker.word.sample(); - -export const getOppdaterDigisosSakResponseMock = (): string => faker.word.sample(); - -export const getGetInnsynsfilResponseMock = (): string => faker.word.sample(); - -export const getFilOpplastingMockHandler = ( - overrideResponse?: string | ((info: Parameters[1]>[0]) => Promise | string) -) => { - return http.post("*/api/v1/digisosapi/:fiksDigisosId/filOpplasting", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getFilOpplastingResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; - -export const getOppdaterDigisosSakMockHandler = ( - overrideResponse?: string | ((info: Parameters[1]>[0]) => Promise | string) -) => { - return http.post("*/api/v1/digisosapi/oppdaterDigisosSak", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getOppdaterDigisosSakResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; - -export const getGetInnsynsfilMockHandler = ( - overrideResponse?: string | ((info: Parameters[1]>[0]) => Promise | string) -) => { - return http.get("*/api/v1/digisosapi/:digisosId/innsynsfil", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getGetInnsynsfilResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; -export const getDigisosApiTestControllerMock = () => [ - getFilOpplastingMockHandler(), - getOppdaterDigisosSakMockHandler(), - getGetInnsynsfilMockHandler(), -]; diff --git a/src/generated/digisos-api-test-controller/digisos-api-test-controller.ts b/src/generated/digisos-api-test-controller/digisos-api-test-controller.ts deleted file mode 100644 index fa1ec923..00000000 --- a/src/generated/digisos-api-test-controller/digisos-api-test-controller.ts +++ /dev/null @@ -1,252 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useMutation, useQuery } from "@tanstack/react-query"; -import type { - DefinedInitialDataOptions, - DefinedUseQueryResult, - MutationFunction, - QueryFunction, - QueryKey, - UndefinedInitialDataOptions, - UseMutationOptions, - UseMutationResult, - UseQueryOptions, - UseQueryResult, -} from "@tanstack/react-query"; -import type { FilOpplastingBody, OppdaterDigisosSakParams } from ".././model"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export const getFilOpplastingUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/digisosapi/${fiksDigisosId}/filOpplasting`; -}; - -export const filOpplasting = async ( - fiksDigisosId: string, - filOpplastingBody: FilOpplastingBody, - options?: RequestInit -): Promise => { - const formData = new FormData(); - formData.append("file", filOpplastingBody.file); - - return customFetch>(getFilOpplastingUrl(fiksDigisosId), { - ...options, - method: "POST", - body: formData, - }); -}; - -export const getFilOpplastingMutationOptions = , TContext = unknown>(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { fiksDigisosId: string; data: FilOpplastingBody }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { fiksDigisosId: string; data: FilOpplastingBody }, - TContext -> => { - const { mutation: mutationOptions, request: requestOptions } = options ?? {}; - - const mutationFn: MutationFunction< - Awaited>, - { fiksDigisosId: string; data: FilOpplastingBody } - > = (props) => { - const { fiksDigisosId, data } = props ?? {}; - - return filOpplasting(fiksDigisosId, data, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type FilOpplastingMutationResult = NonNullable>>; -export type FilOpplastingMutationBody = FilOpplastingBody; -export type FilOpplastingMutationError = ErrorType; - -export const useFilOpplasting = , TContext = unknown>(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { fiksDigisosId: string; data: FilOpplastingBody }, - TContext - >; - request?: SecondParameter; -}): UseMutationResult< - Awaited>, - TError, - { fiksDigisosId: string; data: FilOpplastingBody }, - TContext -> => { - const mutationOptions = getFilOpplastingMutationOptions(options); - - return useMutation(mutationOptions); -}; -export const getOppdaterDigisosSakUrl = (params?: OppdaterDigisosSakParams) => { - const normalizedParams = new URLSearchParams(); - - Object.entries(params || {}).forEach(([key, value]) => { - if (value !== undefined) { - normalizedParams.append(key, value === null ? "null" : value.toString()); - } - }); - - return normalizedParams.size - ? `/sosialhjelp/innsyn/api/innsyn-api/api/v1/digisosapi/oppdaterDigisosSak?${normalizedParams.toString()}` - : `/sosialhjelp/innsyn/api/innsyn-api/api/v1/digisosapi/oppdaterDigisosSak`; -}; - -export const oppdaterDigisosSak = async ( - oppdaterDigisosSakBody: string, - params?: OppdaterDigisosSakParams, - options?: RequestInit -): Promise => { - return customFetch>(getOppdaterDigisosSakUrl(params), { - ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(oppdaterDigisosSakBody), - }); -}; - -export const getOppdaterDigisosSakMutationOptions = , TContext = unknown>(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { data: string; params?: OppdaterDigisosSakParams }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { data: string; params?: OppdaterDigisosSakParams }, - TContext -> => { - const { mutation: mutationOptions, request: requestOptions } = options ?? {}; - - const mutationFn: MutationFunction< - Awaited>, - { data: string; params?: OppdaterDigisosSakParams } - > = (props) => { - const { data, params } = props ?? {}; - - return oppdaterDigisosSak(data, params, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type OppdaterDigisosSakMutationResult = NonNullable>>; -export type OppdaterDigisosSakMutationBody = string; -export type OppdaterDigisosSakMutationError = ErrorType; - -export const useOppdaterDigisosSak = , TContext = unknown>(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { data: string; params?: OppdaterDigisosSakParams }, - TContext - >; - request?: SecondParameter; -}): UseMutationResult< - Awaited>, - TError, - { data: string; params?: OppdaterDigisosSakParams }, - TContext -> => { - const mutationOptions = getOppdaterDigisosSakMutationOptions(options); - - return useMutation(mutationOptions); -}; -export const getGetInnsynsfilUrl = (digisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/digisosapi/${digisosId}/innsynsfil`; -}; - -export const getInnsynsfil = async (digisosId: string, options?: RequestInit): Promise => { - return customFetch>(getGetInnsynsfilUrl(digisosId), { - ...options, - method: "GET", - }); -}; - -export const getGetInnsynsfilQueryKey = (digisosId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/digisosapi/${digisosId}/innsynsfil`] as const; -}; - -export const getGetInnsynsfilQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - digisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getGetInnsynsfilQueryKey(digisosId); - - const queryFn: QueryFunction>> = ({ signal }) => - getInnsynsfil(digisosId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!digisosId, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type GetInnsynsfilQueryResult = NonNullable>>; -export type GetInnsynsfilQueryError = ErrorType; - -export function useGetInnsynsfil>, TError = ErrorType>( - digisosId: string, - options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useGetInnsynsfil>, TError = ErrorType>( - digisosId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useGetInnsynsfil>, TError = ErrorType>( - digisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useGetInnsynsfil>, TError = ErrorType>( - digisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getGetInnsynsfilQueryOptions(digisosId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} diff --git a/src/generated/forelopig-svar-controller/forelopig-svar-controller.msw.ts b/src/generated/forelopig-svar-controller/forelopig-svar-controller.msw.ts deleted file mode 100644 index 73865b3c..00000000 --- a/src/generated/forelopig-svar-controller/forelopig-svar-controller.msw.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { faker } from "@faker-js/faker"; -import { HttpResponse, delay, http } from "msw"; -import type { ForelopigSvarResponse } from ".././model"; - -export const getHentForelopigSvarStatusResponseMock = ( - overrideResponse: Partial = {} -): ForelopigSvarResponse => ({ - harMottattForelopigSvar: faker.datatype.boolean(), - link: faker.helpers.arrayElement([faker.word.sample(), undefined]), - ...overrideResponse, -}); - -export const getHentForelopigSvarStatusMockHandler = ( - overrideResponse?: - | ForelopigSvarResponse - | (( - info: Parameters[1]>[0] - ) => Promise | ForelopigSvarResponse) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/forelopigSvar", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHentForelopigSvarStatusResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; -export const getForelopigSvarControllerMock = () => [getHentForelopigSvarStatusMockHandler()]; diff --git a/src/generated/forelopig-svar-controller/forelopig-svar-controller.ts b/src/generated/forelopig-svar-controller/forelopig-svar-controller.ts deleted file mode 100644 index f98ea4a2..00000000 --- a/src/generated/forelopig-svar-controller/forelopig-svar-controller.ts +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useQuery } from "@tanstack/react-query"; -import type { - DefinedInitialDataOptions, - DefinedUseQueryResult, - QueryFunction, - QueryKey, - UndefinedInitialDataOptions, - UseQueryOptions, - UseQueryResult, -} from "@tanstack/react-query"; -import type { ForelopigSvarResponse } from ".././model"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export const getHentForelopigSvarStatusUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/forelopigSvar`; -}; - -export const hentForelopigSvarStatus = async ( - fiksDigisosId: string, - options?: RequestInit -): Promise => { - return customFetch>(getHentForelopigSvarStatusUrl(fiksDigisosId), { - ...options, - method: "GET", - }); -}; - -export const getHentForelopigSvarStatusQueryKey = (fiksDigisosId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/forelopigSvar`] as const; -}; - -export const getHentForelopigSvarStatusQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHentForelopigSvarStatusQueryKey(fiksDigisosId); - - const queryFn: QueryFunction>> = ({ signal }) => - hentForelopigSvarStatus(fiksDigisosId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!fiksDigisosId, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HentForelopigSvarStatusQueryResult = NonNullable>>; -export type HentForelopigSvarStatusQueryError = ErrorType; - -export function useHentForelopigSvarStatus< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options: { - query: Partial>, TError, TData>> & - Pick< - DefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHentForelopigSvarStatus< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useHentForelopigSvarStatus< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useHentForelopigSvarStatus< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHentForelopigSvarStatusQueryOptions(fiksDigisosId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} diff --git a/src/generated/hendelse-controller/hendelse-controller.msw.ts b/src/generated/hendelse-controller/hendelse-controller.msw.ts deleted file mode 100644 index 03c0ef78..00000000 --- a/src/generated/hendelse-controller/hendelse-controller.msw.ts +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { faker } from "@faker-js/faker"; -import { HttpResponse, delay, http } from "msw"; -import type { HendelseResponse } from ".././model"; - -export const getHentHendelserResponseMock = (): HendelseResponse[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - filUrl: faker.helpers.arrayElement([ - { - link: faker.word.sample(), - linkTekst: faker.helpers.arrayElement([ - "SOKNAD_SEND_TIL_KONTOR", - "SOKNAD_UNDER_BEHANDLING", - "SOKNAD_MOTTATT_MED_KOMMUNENAVN", - "SOKNAD_MOTTATT_UTEN_KOMMUNENAVN", - "SOKNAD_FERDIGBEHANDLET", - "SOKNAD_BEHANDLES_IKKE", - "SOKNAD_VIDERESENDT_PAPIRSOKNAD_MED_NORG_ENHET", - "SOKNAD_VIDERESENDT_PAPIRSOKNAD_UTEN_NORG_ENHET", - "SOKNAD_VIDERESENDT_MED_NORG_ENHET", - "SOKNAD_VIDERESENDT_UTEN_NORG_ENHET", - "SOKNAD_KAN_IKKE_VISE_STATUS_MED_TITTEL", - "SOKNAD_KAN_IKKE_VISE_STATUS_UTEN_TITTEL", - "SAK_UNDER_BEHANDLING_MED_TITTEL", - "SAK_UNDER_BEHANDLING_UTEN_TITTEL", - "SAK_FERDIGBEHANDLET_MED_TITTEL", - "SAK_FERDIGBEHANDLET_UTEN_TITTEL", - "SAK_KAN_IKKE_VISE_STATUS_MED_TITTEL", - "SAK_KAN_IKKE_VISE_STATUS_UTEN_TITTEL", - "ANTALL_SENDTE_VEDLEGG", - "UTBETALINGER_OPPDATERT", - "BREV_OM_SAKSBEANDLINGSTID", - "ETTERSPOR_MER_DOKUMENTASJON", - "ETTERSPOR_IKKE_MER_DOKUMENTASJON", - "DOKUMENTASJONKRAV", - "SOKNAD_SEND_TIL_KONTOR_LENKETEKST", - "VIS_BREVET_LENKETEKST", - ] as const), - }, - undefined, - ]), - hendelseType: faker.word.sample(), - kommuneNummer: faker.helpers.arrayElement([faker.word.sample(), undefined]), - navEnhetsNavn: faker.helpers.arrayElement([faker.word.sample(), undefined]), - navEnhetsNummer: faker.helpers.arrayElement([faker.word.sample(), undefined]), - saksReferanse: faker.helpers.arrayElement([faker.word.sample(), undefined]), - tekstArgument: faker.helpers.arrayElement([faker.word.sample(), undefined]), - tidspunkt: faker.word.sample(), - })); - -export const getHentHendelserMockHandler = ( - overrideResponse?: - | HendelseResponse[] - | ((info: Parameters[1]>[0]) => Promise | HendelseResponse[]) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/hendelser", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHentHendelserResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; -export const getHendelseControllerMock = () => [getHentHendelserMockHandler()]; diff --git a/src/generated/hendelse-controller/hendelse-controller.ts b/src/generated/hendelse-controller/hendelse-controller.ts deleted file mode 100644 index d233f678..00000000 --- a/src/generated/hendelse-controller/hendelse-controller.ts +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useQuery } from "@tanstack/react-query"; -import type { - DefinedInitialDataOptions, - DefinedUseQueryResult, - QueryFunction, - QueryKey, - UndefinedInitialDataOptions, - UseQueryOptions, - UseQueryResult, -} from "@tanstack/react-query"; -import type { HendelseResponse } from ".././model"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export const getHentHendelserUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/hendelser`; -}; - -export const hentHendelser = async (fiksDigisosId: string, options?: RequestInit): Promise => { - return customFetch>(getHentHendelserUrl(fiksDigisosId), { - ...options, - method: "GET", - }); -}; - -export const getHentHendelserQueryKey = (fiksDigisosId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/hendelser`] as const; -}; - -export const getHentHendelserQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHentHendelserQueryKey(fiksDigisosId); - - const queryFn: QueryFunction>> = ({ signal }) => - hentHendelser(fiksDigisosId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!fiksDigisosId, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HentHendelserQueryResult = NonNullable>>; -export type HentHendelserQueryError = ErrorType; - -export function useHentHendelser>, TError = ErrorType>( - fiksDigisosId: string, - options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHentHendelser>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useHentHendelser>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useHentHendelser>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHentHendelserQueryOptions(fiksDigisosId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} diff --git a/src/generated/info-controller/info-controller.msw.ts b/src/generated/info-controller/info-controller.msw.ts deleted file mode 100644 index 4805533d..00000000 --- a/src/generated/info-controller/info-controller.msw.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { HttpResponse, delay, http } from "msw"; - -export const getPostKlientloggMockHandler = ( - overrideResponse?: void | ((info: Parameters[1]>[0]) => Promise | void) -) => { - return http.post("*/api/v1/info/logg", async (info) => { - await delay(1000); - if (typeof overrideResponse === "function") { - await overrideResponse(info); - } - return new HttpResponse(null, { status: 204 }); - }); -}; -export const getInfoControllerMock = () => [getPostKlientloggMockHandler()]; diff --git a/src/generated/info-controller/info-controller.ts b/src/generated/info-controller/info-controller.ts deleted file mode 100644 index 2e5af3c0..00000000 --- a/src/generated/info-controller/info-controller.ts +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useMutation } from "@tanstack/react-query"; -import type { MutationFunction, UseMutationOptions, UseMutationResult } from "@tanstack/react-query"; -import type { Logg } from ".././model"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export const getPostKlientloggUrl = () => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/info/logg`; -}; - -export const postKlientlogg = async (logg: Logg, options?: RequestInit): Promise => { - return customFetch>(getPostKlientloggUrl(), { - ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(logg), - }); -}; - -export const getPostKlientloggMutationOptions = , TContext = unknown>(options?: { - mutation?: UseMutationOptions>, TError, { data: Logg }, TContext>; - request?: SecondParameter; -}): UseMutationOptions>, TError, { data: Logg }, TContext> => { - const { mutation: mutationOptions, request: requestOptions } = options ?? {}; - - const mutationFn: MutationFunction>, { data: Logg }> = (props) => { - const { data } = props ?? {}; - - return postKlientlogg(data, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type PostKlientloggMutationResult = NonNullable>>; -export type PostKlientloggMutationBody = Logg; -export type PostKlientloggMutationError = ErrorType; - -export const usePostKlientlogg = , TContext = unknown>(options?: { - mutation?: UseMutationOptions>, TError, { data: Logg }, TContext>; - request?: SecondParameter; -}): UseMutationResult>, TError, { data: Logg }, TContext> => { - const mutationOptions = getPostKlientloggMutationOptions(options); - - return useMutation(mutationOptions); -}; diff --git a/src/generated/klage-controller/klage-controller.msw.ts b/src/generated/klage-controller/klage-controller.msw.ts deleted file mode 100644 index f396edf2..00000000 --- a/src/generated/klage-controller/klage-controller.msw.ts +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { faker } from "@faker-js/faker"; -import { HttpResponse, delay, http } from "msw"; -import type { KlageDto, Unit } from ".././model"; - -export const getHentKlagerResponseMock = (): KlageDto[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - klageUrl: { - dato: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - id: faker.word.sample(), - url: faker.word.sample(), - }, - nyttVedtakUrl: faker.helpers.arrayElement([ - { - dato: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - id: faker.word.sample(), - url: faker.word.sample(), - }, - undefined, - ]), - paaklagetVedtakRefs: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => - faker.word.sample() - ), - status: faker.helpers.arrayElement([ - "SENDT", - "MOTTATT", - "UNDER_BEHANDLING", - "FERDIG_BEHANDLET", - "HOS_STATSFORVALTER", - ] as const), - })); - -export const getSendKlageResponseMock = (): Unit => ({}); - -export const getHentKlagerMockHandler = ( - overrideResponse?: - | KlageDto[] - | ((info: Parameters[1]>[0]) => Promise | KlageDto[]) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/klage", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHentKlagerResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; - -export const getSendKlageMockHandler = ( - overrideResponse?: Unit | ((info: Parameters[1]>[0]) => Promise | Unit) -) => { - return http.post("*/api/v1/innsyn/:fiksDigisosId/klage", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getSendKlageResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; -export const getKlageControllerMock = () => [getHentKlagerMockHandler(), getSendKlageMockHandler()]; diff --git a/src/generated/klage-controller/klage-controller.ts b/src/generated/klage-controller/klage-controller.ts deleted file mode 100644 index d143cfdb..00000000 --- a/src/generated/klage-controller/klage-controller.ts +++ /dev/null @@ -1,171 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useMutation, useQuery } from "@tanstack/react-query"; -import type { - DefinedInitialDataOptions, - DefinedUseQueryResult, - MutationFunction, - QueryFunction, - QueryKey, - UndefinedInitialDataOptions, - UseMutationOptions, - UseMutationResult, - UseQueryOptions, - UseQueryResult, -} from "@tanstack/react-query"; -import type { InputKlage, KlageDto, Unit } from ".././model"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export const getHentKlagerUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/klage`; -}; - -export const hentKlager = async (fiksDigisosId: string, options?: RequestInit): Promise => { - return customFetch>(getHentKlagerUrl(fiksDigisosId), { - ...options, - method: "GET", - }); -}; - -export const getHentKlagerQueryKey = (fiksDigisosId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/klage`] as const; -}; - -export const getHentKlagerQueryOptions = >, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHentKlagerQueryKey(fiksDigisosId); - - const queryFn: QueryFunction>> = ({ signal }) => - hentKlager(fiksDigisosId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!fiksDigisosId, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HentKlagerQueryResult = NonNullable>>; -export type HentKlagerQueryError = ErrorType; - -export function useHentKlager>, TError = ErrorType>( - fiksDigisosId: string, - options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHentKlager>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useHentKlager>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useHentKlager>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHentKlagerQueryOptions(fiksDigisosId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} - -export const getSendKlageUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/klage`; -}; - -export const sendKlage = async ( - fiksDigisosId: string, - inputKlage: InputKlage, - options?: RequestInit -): Promise => { - return customFetch>(getSendKlageUrl(fiksDigisosId), { - ...options, - method: "POST", - headers: { "Content-Type": "application/json;charset=UTF-8", ...options?.headers }, - body: JSON.stringify(inputKlage), - }); -}; - -export const getSendKlageMutationOptions = , TContext = unknown>(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { fiksDigisosId: string; data: InputKlage }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { fiksDigisosId: string; data: InputKlage }, - TContext -> => { - const { mutation: mutationOptions, request: requestOptions } = options ?? {}; - - const mutationFn: MutationFunction< - Awaited>, - { fiksDigisosId: string; data: InputKlage } - > = (props) => { - const { fiksDigisosId, data } = props ?? {}; - - return sendKlage(fiksDigisosId, data, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type SendKlageMutationResult = NonNullable>>; -export type SendKlageMutationBody = InputKlage; -export type SendKlageMutationError = ErrorType; - -export const useSendKlage = , TContext = unknown>(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { fiksDigisosId: string; data: InputKlage }, - TContext - >; - request?: SecondParameter; -}): UseMutationResult< - Awaited>, - TError, - { fiksDigisosId: string; data: InputKlage }, - TContext -> => { - const mutationOptions = getSendKlageMutationOptions(options); - - return useMutation(mutationOptions); -}; diff --git a/src/generated/kommune-controller/kommune-controller.msw.ts b/src/generated/kommune-controller/kommune-controller.msw.ts deleted file mode 100644 index 96d3d8a1..00000000 --- a/src/generated/kommune-controller/kommune-controller.msw.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { faker } from "@faker-js/faker"; -import { HttpResponse, delay, http } from "msw"; -import type { KommuneResponse } from ".././model"; - -export const getHentKommuneInfoResponseMock = (overrideResponse: Partial = {}): KommuneResponse => ({ - erInnsendingEttersendelseDeaktivert: faker.datatype.boolean(), - erInnsendingEttersendelseMidlertidigDeaktivert: faker.datatype.boolean(), - erInnsynDeaktivert: faker.datatype.boolean(), - erInnsynMidlertidigDeaktivert: faker.datatype.boolean(), - kommunenummer: faker.helpers.arrayElement([faker.word.sample(), undefined]), - tidspunkt: `${faker.date.past().toISOString().split(".")[0]}Z`, - ...overrideResponse, -}); - -export const getHentKommuneInfoMockHandler = ( - overrideResponse?: - | KommuneResponse - | ((info: Parameters[1]>[0]) => Promise | KommuneResponse) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/kommune", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHentKommuneInfoResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; -export const getKommuneControllerMock = () => [getHentKommuneInfoMockHandler()]; diff --git a/src/generated/kommune-controller/kommune-controller.ts b/src/generated/kommune-controller/kommune-controller.ts deleted file mode 100644 index 862656d5..00000000 --- a/src/generated/kommune-controller/kommune-controller.ts +++ /dev/null @@ -1,106 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useQuery } from "@tanstack/react-query"; -import type { - DefinedInitialDataOptions, - DefinedUseQueryResult, - QueryFunction, - QueryKey, - UndefinedInitialDataOptions, - UseQueryOptions, - UseQueryResult, -} from "@tanstack/react-query"; -import type { KommuneResponse } from ".././model"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export const getHentKommuneInfoUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/kommune`; -}; - -export const hentKommuneInfo = async (fiksDigisosId: string, options?: RequestInit): Promise => { - return customFetch>(getHentKommuneInfoUrl(fiksDigisosId), { - ...options, - method: "GET", - }); -}; - -export const getHentKommuneInfoQueryKey = (fiksDigisosId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/kommune`] as const; -}; - -export const getHentKommuneInfoQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHentKommuneInfoQueryKey(fiksDigisosId); - - const queryFn: QueryFunction>> = ({ signal }) => - hentKommuneInfo(fiksDigisosId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!fiksDigisosId, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HentKommuneInfoQueryResult = NonNullable>>; -export type HentKommuneInfoQueryError = ErrorType; - -export function useHentKommuneInfo>, TError = ErrorType>( - fiksDigisosId: string, - options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHentKommuneInfo>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useHentKommuneInfo>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useHentKommuneInfo>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHentKommuneInfoQueryOptions(fiksDigisosId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} diff --git a/src/generated/model/dokumentasjonkravElement.ts b/src/generated/model/dokumentasjonkravElement.ts deleted file mode 100644 index 0e0844bb..00000000 --- a/src/generated/model/dokumentasjonkravElement.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { DokumentasjonkravElementHendelsetype } from "./dokumentasjonkravElementHendelsetype"; -import type { DokumentasjonkravElementStatus } from "./dokumentasjonkravElementStatus"; - -export interface DokumentasjonkravElement { - beskrivelse?: string; - dokumentasjonkravReferanse: string; - hendelsetidspunkt: string; - hendelsetype?: DokumentasjonkravElementHendelsetype; - status: DokumentasjonkravElementStatus; - tittel?: string; - utbetalingsReferanse?: string[]; -} diff --git a/src/generated/model/dokumentasjonkravElementHendelsetype.ts b/src/generated/model/dokumentasjonkravElementHendelsetype.ts deleted file mode 100644 index 2fa2b8cc..00000000 --- a/src/generated/model/dokumentasjonkravElementHendelsetype.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type DokumentasjonkravElementHendelsetype = - (typeof DokumentasjonkravElementHendelsetype)[keyof typeof DokumentasjonkravElementHendelsetype]; - -// eslint-disable-next-line @typescript-eslint/no-redeclare -export const DokumentasjonkravElementHendelsetype = { - dokumentasjonEtterspurt: "dokumentasjonEtterspurt", - dokumentasjonkrav: "dokumentasjonkrav", - soknad: "soknad", - bruker: "bruker", -} as const; diff --git a/src/generated/model/dokumentasjonkravElementStatus.ts b/src/generated/model/dokumentasjonkravElementStatus.ts deleted file mode 100644 index b66a38ca..00000000 --- a/src/generated/model/dokumentasjonkravElementStatus.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type DokumentasjonkravElementStatus = - (typeof DokumentasjonkravElementStatus)[keyof typeof DokumentasjonkravElementStatus]; - -// eslint-disable-next-line @typescript-eslint/no-redeclare -export const DokumentasjonkravElementStatus = { - RELEVANT: "RELEVANT", - ANNULLERT: "ANNULLERT", - OPPFYLT: "OPPFYLT", - IKKE_OPPFYLT: "IKKE_OPPFYLT", - LEVERT_TIDLIGERE: "LEVERT_TIDLIGERE", -} as const; diff --git a/src/generated/model/dokumentasjonkravResponse.ts b/src/generated/model/dokumentasjonkravResponse.ts deleted file mode 100644 index 15c71829..00000000 --- a/src/generated/model/dokumentasjonkravResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { DokumentasjonkravElement } from "./dokumentasjonkravElement"; - -export interface DokumentasjonkravResponse { - dokumentasjonkravElementer: DokumentasjonkravElement[]; - dokumentasjonkravId: string; - frist?: string; -} diff --git a/src/generated/model/filOpplastingBody.ts b/src/generated/model/filOpplastingBody.ts deleted file mode 100644 index 3ddf43e2..00000000 --- a/src/generated/model/filOpplastingBody.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type FilOpplastingBody = { - file: Blob; -}; diff --git a/src/generated/model/filUrl.ts b/src/generated/model/filUrl.ts deleted file mode 100644 index 1289cf13..00000000 --- a/src/generated/model/filUrl.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export interface FilUrl { - dato?: string; - id: string; - url: string; -} diff --git a/src/generated/model/forelopigSvarResponse.ts b/src/generated/model/forelopigSvarResponse.ts deleted file mode 100644 index 729e0cff..00000000 --- a/src/generated/model/forelopigSvarResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export interface ForelopigSvarResponse { - harMottattForelopigSvar: boolean; - link?: string; -} diff --git a/src/generated/model/hendelseResponse.ts b/src/generated/model/hendelseResponse.ts deleted file mode 100644 index f31ae206..00000000 --- a/src/generated/model/hendelseResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { UrlResponse } from "./urlResponse"; - -export interface HendelseResponse { - filUrl?: UrlResponse; - hendelseType: string; - kommuneNummer?: string; - navEnhetsNavn?: string; - navEnhetsNummer?: string; - saksReferanse?: string; - tekstArgument?: string; - tidspunkt: string; -} diff --git a/src/generated/model/hentSaksDetaljerParams.ts b/src/generated/model/hentSaksDetaljerParams.ts deleted file mode 100644 index e45d8417..00000000 --- a/src/generated/model/hentSaksDetaljerParams.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type HentSaksDetaljerParams = { - id: string; -}; diff --git a/src/generated/model/hentUtbetalingerParams.ts b/src/generated/model/hentUtbetalingerParams.ts deleted file mode 100644 index 955b3a49..00000000 --- a/src/generated/model/hentUtbetalingerParams.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type HentUtbetalingerParams = { - month?: number; -}; diff --git a/src/generated/model/index.ts b/src/generated/model/index.ts deleted file mode 100644 index 816ddb2c..00000000 --- a/src/generated/model/index.ts +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export * from "./dokumentasjonkravElement"; -export * from "./dokumentasjonkravElementHendelsetype"; -export * from "./dokumentasjonkravElementStatus"; -export * from "./dokumentasjonkravResponse"; -export * from "./filOpplastingBody"; -export * from "./filUrl"; -export * from "./forelopigSvarResponse"; -export * from "./hendelseResponse"; -export * from "./hentSaksDetaljerParams"; -export * from "./hentUtbetalingerParams"; -export * from "./inputKlage"; -export * from "./klageDto"; -export * from "./klageDtoStatus"; -export * from "./kommuneResponse"; -export * from "./logg"; -export * from "./manedUtbetaling"; -export * from "./nyeOgTidligereUtbetalingerResponse"; -export * from "./oppdaterDigisosSakParams"; -export * from "./oppgaveElement"; -export * from "./oppgaveElementHendelsetype"; -export * from "./oppgaveOpplastingResponse"; -export * from "./oppgaveOpplastingResponseHendelsetype"; -export * from "./oppgaveResponse"; -export * from "./saksDetaljerResponse"; -export * from "./saksListeResponse"; -export * from "./saksStatusResponse"; -export * from "./saksStatusResponseStatus"; -export * from "./sendVedleggBody"; -export * from "./soknadsStatusResponse"; -export * from "./soknadsStatusResponseStatus"; -export * from "./tilgangResponse"; -export * from "./unit"; -export * from "./urlResponse"; -export * from "./urlResponseLinkTekst"; -export * from "./utbetalingerResponse"; -export * from "./vedleggOpplastingResponse"; -export * from "./vedleggOpplastingResponseStatus"; -export * from "./vedleggResponse"; -export * from "./vilkarResponse"; -export * from "./vilkarResponseStatus"; diff --git a/src/generated/model/inputKlage.ts b/src/generated/model/inputKlage.ts deleted file mode 100644 index 5de031ba..00000000 --- a/src/generated/model/inputKlage.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export interface InputKlage { - fiksDigisosId: string; - klageTekst: string; - vedtaksIds: string[]; -} diff --git a/src/generated/model/klageDto.ts b/src/generated/model/klageDto.ts deleted file mode 100644 index 8f88b30f..00000000 --- a/src/generated/model/klageDto.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { FilUrl } from "./filUrl"; -import type { KlageDtoStatus } from "./klageDtoStatus"; - -export interface KlageDto { - klageUrl: FilUrl; - nyttVedtakUrl?: FilUrl; - paaklagetVedtakRefs: string[]; - status: KlageDtoStatus; -} diff --git a/src/generated/model/klageDtoStatus.ts b/src/generated/model/klageDtoStatus.ts deleted file mode 100644 index fa27216c..00000000 --- a/src/generated/model/klageDtoStatus.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type KlageDtoStatus = (typeof KlageDtoStatus)[keyof typeof KlageDtoStatus]; - -// eslint-disable-next-line @typescript-eslint/no-redeclare -export const KlageDtoStatus = { - SENDT: "SENDT", - MOTTATT: "MOTTATT", - UNDER_BEHANDLING: "UNDER_BEHANDLING", - FERDIG_BEHANDLET: "FERDIG_BEHANDLET", - HOS_STATSFORVALTER: "HOS_STATSFORVALTER", -} as const; diff --git a/src/generated/model/kommuneResponse.ts b/src/generated/model/kommuneResponse.ts deleted file mode 100644 index b75ca9fd..00000000 --- a/src/generated/model/kommuneResponse.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export interface KommuneResponse { - erInnsendingEttersendelseDeaktivert: boolean; - erInnsendingEttersendelseMidlertidigDeaktivert: boolean; - erInnsynDeaktivert: boolean; - erInnsynMidlertidigDeaktivert: boolean; - kommunenummer?: string; - tidspunkt: string; -} diff --git a/src/generated/model/logg.ts b/src/generated/model/logg.ts deleted file mode 100644 index ee5073fc..00000000 --- a/src/generated/model/logg.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export interface Logg { - columnNumber: string; - jsFileUrl: string; - level: string; - lineNumber: string; - message: string; - url: string; - userAgent: string; -} diff --git a/src/generated/model/manedUtbetaling.ts b/src/generated/model/manedUtbetaling.ts deleted file mode 100644 index 2c1a6275..00000000 --- a/src/generated/model/manedUtbetaling.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export interface ManedUtbetaling { - annenMottaker: boolean; - belop: number; - fiksDigisosId: string; - fom?: string; - forfallsdato?: string; - kontonummer?: string; - mottaker?: string; - status: string; - tittel: string; - tom?: string; - utbetalingsdato?: string; - utbetalingsmetode?: string; -} diff --git a/src/generated/model/nyeOgTidligereUtbetalingerResponse.ts b/src/generated/model/nyeOgTidligereUtbetalingerResponse.ts deleted file mode 100644 index f4432d33..00000000 --- a/src/generated/model/nyeOgTidligereUtbetalingerResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { ManedUtbetaling } from "./manedUtbetaling"; - -export interface NyeOgTidligereUtbetalingerResponse { - ar: number; - maned: number; - utbetalingerForManed: ManedUtbetaling[]; -} diff --git a/src/generated/model/oppdaterDigisosSakParams.ts b/src/generated/model/oppdaterDigisosSakParams.ts deleted file mode 100644 index 14acf969..00000000 --- a/src/generated/model/oppdaterDigisosSakParams.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type OppdaterDigisosSakParams = { - fiksDigisosId?: string; -}; diff --git a/src/generated/model/oppgaveElement.ts b/src/generated/model/oppgaveElement.ts deleted file mode 100644 index 2241bcdb..00000000 --- a/src/generated/model/oppgaveElement.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { OppgaveElementHendelsetype } from "./oppgaveElementHendelsetype"; - -export interface OppgaveElement { - dokumenttype: string; - erFraInnsyn: boolean; - hendelsereferanse?: string; - hendelsetype?: OppgaveElementHendelsetype; - tilleggsinformasjon?: string; -} diff --git a/src/generated/model/oppgaveElementHendelsetype.ts b/src/generated/model/oppgaveElementHendelsetype.ts deleted file mode 100644 index f35acaee..00000000 --- a/src/generated/model/oppgaveElementHendelsetype.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type OppgaveElementHendelsetype = (typeof OppgaveElementHendelsetype)[keyof typeof OppgaveElementHendelsetype]; - -// eslint-disable-next-line @typescript-eslint/no-redeclare -export const OppgaveElementHendelsetype = { - dokumentasjonEtterspurt: "dokumentasjonEtterspurt", - dokumentasjonkrav: "dokumentasjonkrav", - soknad: "soknad", - bruker: "bruker", -} as const; diff --git a/src/generated/model/oppgaveOpplastingResponse.ts b/src/generated/model/oppgaveOpplastingResponse.ts deleted file mode 100644 index 9bc1dada..00000000 --- a/src/generated/model/oppgaveOpplastingResponse.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { VedleggOpplastingResponse } from "./vedleggOpplastingResponse"; -import type { OppgaveOpplastingResponseHendelsetype } from "./oppgaveOpplastingResponseHendelsetype"; - -export interface OppgaveOpplastingResponse { - filer: VedleggOpplastingResponse[]; - hendelsereferanse?: string; - hendelsetype?: OppgaveOpplastingResponseHendelsetype; - innsendelsesfrist?: string; - tilleggsinfo?: string; - type: string; -} diff --git a/src/generated/model/oppgaveOpplastingResponseHendelsetype.ts b/src/generated/model/oppgaveOpplastingResponseHendelsetype.ts deleted file mode 100644 index d48c9120..00000000 --- a/src/generated/model/oppgaveOpplastingResponseHendelsetype.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type OppgaveOpplastingResponseHendelsetype = - (typeof OppgaveOpplastingResponseHendelsetype)[keyof typeof OppgaveOpplastingResponseHendelsetype]; - -// eslint-disable-next-line @typescript-eslint/no-redeclare -export const OppgaveOpplastingResponseHendelsetype = { - dokumentasjonEtterspurt: "dokumentasjonEtterspurt", - dokumentasjonkrav: "dokumentasjonkrav", - soknad: "soknad", - bruker: "bruker", -} as const; diff --git a/src/generated/model/oppgaveResponse.ts b/src/generated/model/oppgaveResponse.ts deleted file mode 100644 index 165a4284..00000000 --- a/src/generated/model/oppgaveResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { OppgaveElement } from "./oppgaveElement"; - -export interface OppgaveResponse { - innsendelsesfrist?: string; - oppgaveElementer: OppgaveElement[]; - oppgaveId: string; -} diff --git a/src/generated/model/saksDetaljerResponse.ts b/src/generated/model/saksDetaljerResponse.ts deleted file mode 100644 index 4c695626..00000000 --- a/src/generated/model/saksDetaljerResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export interface SaksDetaljerResponse { - antallNyeOppgaver?: number; - fiksDigisosId: string; - soknadTittel: string; - status: string; -} diff --git a/src/generated/model/saksListeResponse.ts b/src/generated/model/saksListeResponse.ts deleted file mode 100644 index a2bef746..00000000 --- a/src/generated/model/saksListeResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export interface SaksListeResponse { - fiksDigisosId?: string; - isBrokenSoknad: boolean; - kilde: string; - kommunenummer?: string; - sistOppdatert: string; - soknadTittel: string; - url?: string; -} diff --git a/src/generated/model/saksStatusResponse.ts b/src/generated/model/saksStatusResponse.ts deleted file mode 100644 index 69a735a3..00000000 --- a/src/generated/model/saksStatusResponse.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { SaksStatusResponseStatus } from "./saksStatusResponseStatus"; -import type { FilUrl } from "./filUrl"; - -export interface SaksStatusResponse { - skalViseVedtakInfoPanel: boolean; - status?: SaksStatusResponseStatus; - tittel: string; - vedtaksfilUrlList?: FilUrl[]; -} diff --git a/src/generated/model/saksStatusResponseStatus.ts b/src/generated/model/saksStatusResponseStatus.ts deleted file mode 100644 index be2bfab0..00000000 --- a/src/generated/model/saksStatusResponseStatus.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type SaksStatusResponseStatus = (typeof SaksStatusResponseStatus)[keyof typeof SaksStatusResponseStatus]; - -// eslint-disable-next-line @typescript-eslint/no-redeclare -export const SaksStatusResponseStatus = { - UNDER_BEHANDLING: "UNDER_BEHANDLING", - IKKE_INNSYN: "IKKE_INNSYN", - FERDIGBEHANDLET: "FERDIGBEHANDLET", - BEHANDLES_IKKE: "BEHANDLES_IKKE", - FEILREGISTRERT: "FEILREGISTRERT", -} as const; diff --git a/src/generated/model/sendVedleggBody.ts b/src/generated/model/sendVedleggBody.ts deleted file mode 100644 index 637a2c6a..00000000 --- a/src/generated/model/sendVedleggBody.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type SendVedleggBody = { - files: Blob[]; -}; diff --git a/src/generated/model/soknadsStatusResponse.ts b/src/generated/model/soknadsStatusResponse.ts deleted file mode 100644 index 61e2ab30..00000000 --- a/src/generated/model/soknadsStatusResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { UrlResponse } from "./urlResponse"; -import type { SoknadsStatusResponseStatus } from "./soknadsStatusResponseStatus"; - -export interface SoknadsStatusResponse { - filUrl?: UrlResponse; - isBroken: boolean; - kommunenummer?: string; - navKontor?: string; - soknadsalderIMinutter?: number; - status: SoknadsStatusResponseStatus; - tidspunktSendt?: string; -} diff --git a/src/generated/model/soknadsStatusResponseStatus.ts b/src/generated/model/soknadsStatusResponseStatus.ts deleted file mode 100644 index e3c9d52d..00000000 --- a/src/generated/model/soknadsStatusResponseStatus.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type SoknadsStatusResponseStatus = - (typeof SoknadsStatusResponseStatus)[keyof typeof SoknadsStatusResponseStatus]; - -// eslint-disable-next-line @typescript-eslint/no-redeclare -export const SoknadsStatusResponseStatus = { - SENDT: "SENDT", - MOTTATT: "MOTTATT", - UNDER_BEHANDLING: "UNDER_BEHANDLING", - FERDIGBEHANDLET: "FERDIGBEHANDLET", - BEHANDLES_IKKE: "BEHANDLES_IKKE", -} as const; diff --git a/src/generated/model/tilgangResponse.ts b/src/generated/model/tilgangResponse.ts deleted file mode 100644 index a06ce996..00000000 --- a/src/generated/model/tilgangResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export interface TilgangResponse { - fornavn: string; - harTilgang: boolean; -} diff --git a/src/generated/model/unit.ts b/src/generated/model/unit.ts deleted file mode 100644 index 9ed1a2c0..00000000 --- a/src/generated/model/unit.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export interface Unit { - [key: string]: unknown; -} diff --git a/src/generated/model/urlResponse.ts b/src/generated/model/urlResponse.ts deleted file mode 100644 index dbdfd7b8..00000000 --- a/src/generated/model/urlResponse.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { UrlResponseLinkTekst } from "./urlResponseLinkTekst"; - -export interface UrlResponse { - link: string; - linkTekst: UrlResponseLinkTekst; -} diff --git a/src/generated/model/urlResponseLinkTekst.ts b/src/generated/model/urlResponseLinkTekst.ts deleted file mode 100644 index 3b5c5a67..00000000 --- a/src/generated/model/urlResponseLinkTekst.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type UrlResponseLinkTekst = (typeof UrlResponseLinkTekst)[keyof typeof UrlResponseLinkTekst]; - -// eslint-disable-next-line @typescript-eslint/no-redeclare -export const UrlResponseLinkTekst = { - SOKNAD_SEND_TIL_KONTOR: "SOKNAD_SEND_TIL_KONTOR", - SOKNAD_UNDER_BEHANDLING: "SOKNAD_UNDER_BEHANDLING", - SOKNAD_MOTTATT_MED_KOMMUNENAVN: "SOKNAD_MOTTATT_MED_KOMMUNENAVN", - SOKNAD_MOTTATT_UTEN_KOMMUNENAVN: "SOKNAD_MOTTATT_UTEN_KOMMUNENAVN", - SOKNAD_FERDIGBEHANDLET: "SOKNAD_FERDIGBEHANDLET", - SOKNAD_BEHANDLES_IKKE: "SOKNAD_BEHANDLES_IKKE", - SOKNAD_VIDERESENDT_PAPIRSOKNAD_MED_NORG_ENHET: "SOKNAD_VIDERESENDT_PAPIRSOKNAD_MED_NORG_ENHET", - SOKNAD_VIDERESENDT_PAPIRSOKNAD_UTEN_NORG_ENHET: "SOKNAD_VIDERESENDT_PAPIRSOKNAD_UTEN_NORG_ENHET", - SOKNAD_VIDERESENDT_MED_NORG_ENHET: "SOKNAD_VIDERESENDT_MED_NORG_ENHET", - SOKNAD_VIDERESENDT_UTEN_NORG_ENHET: "SOKNAD_VIDERESENDT_UTEN_NORG_ENHET", - SOKNAD_KAN_IKKE_VISE_STATUS_MED_TITTEL: "SOKNAD_KAN_IKKE_VISE_STATUS_MED_TITTEL", - SOKNAD_KAN_IKKE_VISE_STATUS_UTEN_TITTEL: "SOKNAD_KAN_IKKE_VISE_STATUS_UTEN_TITTEL", - SAK_UNDER_BEHANDLING_MED_TITTEL: "SAK_UNDER_BEHANDLING_MED_TITTEL", - SAK_UNDER_BEHANDLING_UTEN_TITTEL: "SAK_UNDER_BEHANDLING_UTEN_TITTEL", - SAK_FERDIGBEHANDLET_MED_TITTEL: "SAK_FERDIGBEHANDLET_MED_TITTEL", - SAK_FERDIGBEHANDLET_UTEN_TITTEL: "SAK_FERDIGBEHANDLET_UTEN_TITTEL", - SAK_KAN_IKKE_VISE_STATUS_MED_TITTEL: "SAK_KAN_IKKE_VISE_STATUS_MED_TITTEL", - SAK_KAN_IKKE_VISE_STATUS_UTEN_TITTEL: "SAK_KAN_IKKE_VISE_STATUS_UTEN_TITTEL", - ANTALL_SENDTE_VEDLEGG: "ANTALL_SENDTE_VEDLEGG", - UTBETALINGER_OPPDATERT: "UTBETALINGER_OPPDATERT", - BREV_OM_SAKSBEANDLINGSTID: "BREV_OM_SAKSBEANDLINGSTID", - ETTERSPOR_MER_DOKUMENTASJON: "ETTERSPOR_MER_DOKUMENTASJON", - ETTERSPOR_IKKE_MER_DOKUMENTASJON: "ETTERSPOR_IKKE_MER_DOKUMENTASJON", - DOKUMENTASJONKRAV: "DOKUMENTASJONKRAV", - SOKNAD_SEND_TIL_KONTOR_LENKETEKST: "SOKNAD_SEND_TIL_KONTOR_LENKETEKST", - VIS_BREVET_LENKETEKST: "VIS_BREVET_LENKETEKST", -} as const; diff --git a/src/generated/model/utbetalingerResponse.ts b/src/generated/model/utbetalingerResponse.ts deleted file mode 100644 index b41144ab..00000000 --- a/src/generated/model/utbetalingerResponse.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { ManedUtbetaling } from "./manedUtbetaling"; - -export interface UtbetalingerResponse { - ar: number; - foersteIManeden: string; - maned: number; - utbetalinger: ManedUtbetaling[]; -} diff --git a/src/generated/model/vedleggOpplastingResponse.ts b/src/generated/model/vedleggOpplastingResponse.ts deleted file mode 100644 index 977ffab5..00000000 --- a/src/generated/model/vedleggOpplastingResponse.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { VedleggOpplastingResponseStatus } from "./vedleggOpplastingResponseStatus"; - -export interface VedleggOpplastingResponse { - filnavn?: string; - status: VedleggOpplastingResponseStatus; -} diff --git a/src/generated/model/vedleggOpplastingResponseStatus.ts b/src/generated/model/vedleggOpplastingResponseStatus.ts deleted file mode 100644 index e7b35479..00000000 --- a/src/generated/model/vedleggOpplastingResponseStatus.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type VedleggOpplastingResponseStatus = - (typeof VedleggOpplastingResponseStatus)[keyof typeof VedleggOpplastingResponseStatus]; - -// eslint-disable-next-line @typescript-eslint/no-redeclare -export const VedleggOpplastingResponseStatus = { - OK: "OK", - COULD_NOT_LOAD_DOCUMENT: "COULD_NOT_LOAD_DOCUMENT", - PDF_IS_ENCRYPTED: "PDF_IS_ENCRYPTED", - ILLEGAL_FILE_TYPE: "ILLEGAL_FILE_TYPE", - ILLEGAL_FILENAME: "ILLEGAL_FILENAME", - FILE_TOO_LARGE: "FILE_TOO_LARGE", -} as const; diff --git a/src/generated/model/vedleggResponse.ts b/src/generated/model/vedleggResponse.ts deleted file mode 100644 index 243febb8..00000000 --- a/src/generated/model/vedleggResponse.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export interface VedleggResponse { - datoLagtTil: string; - filnavn: string; - storrelse: number; - tilleggsinfo?: string; - type: string; - url: string; -} diff --git a/src/generated/model/vilkarResponse.ts b/src/generated/model/vilkarResponse.ts deleted file mode 100644 index 64ac8ac9..00000000 --- a/src/generated/model/vilkarResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import type { VilkarResponseStatus } from "./vilkarResponseStatus"; - -export interface VilkarResponse { - beskrivelse?: string; - hendelsetidspunkt: string; - status: VilkarResponseStatus; - tittel?: string; - utbetalingsReferanse?: string[]; - vilkarReferanse: string; -} diff --git a/src/generated/model/vilkarResponseStatus.ts b/src/generated/model/vilkarResponseStatus.ts deleted file mode 100644 index a296533a..00000000 --- a/src/generated/model/vilkarResponseStatus.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ - -export type VilkarResponseStatus = (typeof VilkarResponseStatus)[keyof typeof VilkarResponseStatus]; - -// eslint-disable-next-line @typescript-eslint/no-redeclare -export const VilkarResponseStatus = { - RELEVANT: "RELEVANT", - ANNULLERT: "ANNULLERT", - OPPFYLT: "OPPFYLT", - IKKE_OPPFYLT: "IKKE_OPPFYLT", - LEVERT_TIDLIGERE: "LEVERT_TIDLIGERE", -} as const; diff --git a/src/generated/oppgave-controller/oppgave-controller.msw.ts b/src/generated/oppgave-controller/oppgave-controller.msw.ts deleted file mode 100644 index 7d285257..00000000 --- a/src/generated/oppgave-controller/oppgave-controller.msw.ts +++ /dev/null @@ -1,304 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { faker } from "@faker-js/faker"; -import { HttpResponse, delay, http } from "msw"; -import type { DokumentasjonkravResponse, OppgaveResponse, VilkarResponse } from ".././model"; - -export const getGetVilkarResponseMock = (): VilkarResponse[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - beskrivelse: faker.helpers.arrayElement([faker.word.sample(), undefined]), - hendelsetidspunkt: faker.date.past().toISOString().split("T")[0], - status: faker.helpers.arrayElement([ - "RELEVANT", - "ANNULLERT", - "OPPFYLT", - "IKKE_OPPFYLT", - "LEVERT_TIDLIGERE", - ] as const), - tittel: faker.helpers.arrayElement([faker.word.sample(), undefined]), - utbetalingsReferanse: faker.helpers.arrayElement([ - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => - faker.word.sample() - ), - undefined, - ]), - vilkarReferanse: faker.word.sample(), - })); - -export const getGetOppgaverResponseMock = (): OppgaveResponse[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - innsendelsesfrist: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - oppgaveElementer: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - dokumenttype: faker.word.sample(), - erFraInnsyn: faker.datatype.boolean(), - hendelsereferanse: faker.helpers.arrayElement([faker.word.sample(), undefined]), - hendelsetype: faker.helpers.arrayElement([ - faker.helpers.arrayElement([ - "dokumentasjonEtterspurt", - "dokumentasjonkrav", - "soknad", - "bruker", - ] as const), - undefined, - ]), - tilleggsinformasjon: faker.helpers.arrayElement([faker.word.sample(), undefined]), - })), - oppgaveId: faker.word.sample(), - })); - -export const getGetOppgaveMedIdResponseMock = (): OppgaveResponse[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - innsendelsesfrist: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - oppgaveElementer: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - dokumenttype: faker.word.sample(), - erFraInnsyn: faker.datatype.boolean(), - hendelsereferanse: faker.helpers.arrayElement([faker.word.sample(), undefined]), - hendelsetype: faker.helpers.arrayElement([ - faker.helpers.arrayElement([ - "dokumentasjonEtterspurt", - "dokumentasjonkrav", - "soknad", - "bruker", - ] as const), - undefined, - ]), - tilleggsinformasjon: faker.helpers.arrayElement([faker.word.sample(), undefined]), - })), - oppgaveId: faker.word.sample(), - })); - -export const getGetHarLevertDokumentasjonkravResponseMock = (): boolean => faker.datatype.boolean(); - -export const getGetfagsystemHarDokumentasjonkravResponseMock = (): boolean => faker.datatype.boolean(); - -export const getGetDokumentasjonkravResponseMock = (): DokumentasjonkravResponse[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - dokumentasjonkravElementer: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map( - () => ({ - beskrivelse: faker.helpers.arrayElement([faker.word.sample(), undefined]), - dokumentasjonkravReferanse: faker.word.sample(), - hendelsetidspunkt: faker.date.past().toISOString().split("T")[0], - hendelsetype: faker.helpers.arrayElement([ - faker.helpers.arrayElement([ - "dokumentasjonEtterspurt", - "dokumentasjonkrav", - "soknad", - "bruker", - ] as const), - undefined, - ]), - status: faker.helpers.arrayElement([ - "RELEVANT", - "ANNULLERT", - "OPPFYLT", - "IKKE_OPPFYLT", - "LEVERT_TIDLIGERE", - ] as const), - tittel: faker.helpers.arrayElement([faker.word.sample(), undefined]), - utbetalingsReferanse: faker.helpers.arrayElement([ - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => - faker.word.sample() - ), - undefined, - ]), - }) - ), - dokumentasjonkravId: faker.word.sample(), - frist: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - })); - -export const getGetDokumentasjonkravMedIdResponseMock = (): DokumentasjonkravResponse[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - dokumentasjonkravElementer: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map( - () => ({ - beskrivelse: faker.helpers.arrayElement([faker.word.sample(), undefined]), - dokumentasjonkravReferanse: faker.word.sample(), - hendelsetidspunkt: faker.date.past().toISOString().split("T")[0], - hendelsetype: faker.helpers.arrayElement([ - faker.helpers.arrayElement([ - "dokumentasjonEtterspurt", - "dokumentasjonkrav", - "soknad", - "bruker", - ] as const), - undefined, - ]), - status: faker.helpers.arrayElement([ - "RELEVANT", - "ANNULLERT", - "OPPFYLT", - "IKKE_OPPFYLT", - "LEVERT_TIDLIGERE", - ] as const), - tittel: faker.helpers.arrayElement([faker.word.sample(), undefined]), - utbetalingsReferanse: faker.helpers.arrayElement([ - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => - faker.word.sample() - ), - undefined, - ]), - }) - ), - dokumentasjonkravId: faker.word.sample(), - frist: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - })); - -export const getGetVilkarMockHandler = ( - overrideResponse?: - | VilkarResponse[] - | ((info: Parameters[1]>[0]) => Promise | VilkarResponse[]) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/vilkar", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getGetVilkarResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; - -export const getGetOppgaverMockHandler = ( - overrideResponse?: - | OppgaveResponse[] - | ((info: Parameters[1]>[0]) => Promise | OppgaveResponse[]) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/oppgaver", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getGetOppgaverResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; - -export const getGetOppgaveMedIdMockHandler = ( - overrideResponse?: - | OppgaveResponse[] - | ((info: Parameters[1]>[0]) => Promise | OppgaveResponse[]) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/oppgaver/:oppgaveId", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getGetOppgaveMedIdResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; - -export const getGetHarLevertDokumentasjonkravMockHandler = ( - overrideResponse?: boolean | ((info: Parameters[1]>[0]) => Promise | boolean) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/harLeverteDokumentasjonkrav", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getGetHarLevertDokumentasjonkravResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; - -export const getGetfagsystemHarDokumentasjonkravMockHandler = ( - overrideResponse?: boolean | ((info: Parameters[1]>[0]) => Promise | boolean) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/fagsystemHarDokumentasjonkrav", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getGetfagsystemHarDokumentasjonkravResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; - -export const getGetDokumentasjonkravMockHandler = ( - overrideResponse?: - | DokumentasjonkravResponse[] - | (( - info: Parameters[1]>[0] - ) => Promise | DokumentasjonkravResponse[]) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/dokumentasjonkrav", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getGetDokumentasjonkravResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; - -export const getGetDokumentasjonkravMedIdMockHandler = ( - overrideResponse?: - | DokumentasjonkravResponse[] - | (( - info: Parameters[1]>[0] - ) => Promise | DokumentasjonkravResponse[]) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/dokumentasjonkrav/:dokumentasjonkravId", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getGetDokumentasjonkravMedIdResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; -export const getOppgaveControllerMock = () => [ - getGetVilkarMockHandler(), - getGetOppgaverMockHandler(), - getGetOppgaveMedIdMockHandler(), - getGetHarLevertDokumentasjonkravMockHandler(), - getGetfagsystemHarDokumentasjonkravMockHandler(), - getGetDokumentasjonkravMockHandler(), - getGetDokumentasjonkravMedIdMockHandler(), -]; diff --git a/src/generated/oppgave-controller/oppgave-controller.ts b/src/generated/oppgave-controller/oppgave-controller.ts deleted file mode 100644 index 48069fd4..00000000 --- a/src/generated/oppgave-controller/oppgave-controller.ts +++ /dev/null @@ -1,704 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useQuery } from "@tanstack/react-query"; -import type { - DefinedInitialDataOptions, - DefinedUseQueryResult, - QueryFunction, - QueryKey, - UndefinedInitialDataOptions, - UseQueryOptions, - UseQueryResult, -} from "@tanstack/react-query"; -import type { DokumentasjonkravResponse, OppgaveResponse, VilkarResponse } from ".././model"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export const getGetVilkarUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/vilkar`; -}; - -export const getVilkar = async (fiksDigisosId: string, options?: RequestInit): Promise => { - return customFetch>(getGetVilkarUrl(fiksDigisosId), { - ...options, - method: "GET", - }); -}; - -export const getGetVilkarQueryKey = (fiksDigisosId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/vilkar`] as const; -}; - -export const getGetVilkarQueryOptions = >, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getGetVilkarQueryKey(fiksDigisosId); - - const queryFn: QueryFunction>> = ({ signal }) => - getVilkar(fiksDigisosId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!fiksDigisosId, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type GetVilkarQueryResult = NonNullable>>; -export type GetVilkarQueryError = ErrorType; - -export function useGetVilkar>, TError = ErrorType>( - fiksDigisosId: string, - options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useGetVilkar>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useGetVilkar>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useGetVilkar>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getGetVilkarQueryOptions(fiksDigisosId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} - -export const getGetOppgaverUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/oppgaver`; -}; - -export const getOppgaver = async (fiksDigisosId: string, options?: RequestInit): Promise => { - return customFetch>(getGetOppgaverUrl(fiksDigisosId), { - ...options, - method: "GET", - }); -}; - -export const getGetOppgaverQueryKey = (fiksDigisosId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/oppgaver`] as const; -}; - -export const getGetOppgaverQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getGetOppgaverQueryKey(fiksDigisosId); - - const queryFn: QueryFunction>> = ({ signal }) => - getOppgaver(fiksDigisosId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!fiksDigisosId, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type GetOppgaverQueryResult = NonNullable>>; -export type GetOppgaverQueryError = ErrorType; - -export function useGetOppgaver>, TError = ErrorType>( - fiksDigisosId: string, - options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useGetOppgaver>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useGetOppgaver>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useGetOppgaver>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getGetOppgaverQueryOptions(fiksDigisosId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} - -export const getGetOppgaveMedIdUrl = (fiksDigisosId: string, oppgaveId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/oppgaver/${oppgaveId}`; -}; - -export const getOppgaveMedId = async ( - fiksDigisosId: string, - oppgaveId: string, - options?: RequestInit -): Promise => { - return customFetch>(getGetOppgaveMedIdUrl(fiksDigisosId, oppgaveId), { - ...options, - method: "GET", - }); -}; - -export const getGetOppgaveMedIdQueryKey = (fiksDigisosId: string, oppgaveId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/oppgaver/${oppgaveId}`] as const; -}; - -export const getGetOppgaveMedIdQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - oppgaveId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getGetOppgaveMedIdQueryKey(fiksDigisosId, oppgaveId); - - const queryFn: QueryFunction>> = ({ signal }) => - getOppgaveMedId(fiksDigisosId, oppgaveId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!(fiksDigisosId && oppgaveId), ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type GetOppgaveMedIdQueryResult = NonNullable>>; -export type GetOppgaveMedIdQueryError = ErrorType; - -export function useGetOppgaveMedId>, TError = ErrorType>( - fiksDigisosId: string, - oppgaveId: string, - options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useGetOppgaveMedId>, TError = ErrorType>( - fiksDigisosId: string, - oppgaveId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useGetOppgaveMedId>, TError = ErrorType>( - fiksDigisosId: string, - oppgaveId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useGetOppgaveMedId>, TError = ErrorType>( - fiksDigisosId: string, - oppgaveId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getGetOppgaveMedIdQueryOptions(fiksDigisosId, oppgaveId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} - -export const getGetHarLevertDokumentasjonkravUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/harLeverteDokumentasjonkrav`; -}; - -export const getHarLevertDokumentasjonkrav = async (fiksDigisosId: string, options?: RequestInit): Promise => { - return customFetch>(getGetHarLevertDokumentasjonkravUrl(fiksDigisosId), { - ...options, - method: "GET", - }); -}; - -export const getGetHarLevertDokumentasjonkravQueryKey = (fiksDigisosId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/harLeverteDokumentasjonkrav`] as const; -}; - -export const getGetHarLevertDokumentasjonkravQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getGetHarLevertDokumentasjonkravQueryKey(fiksDigisosId); - - const queryFn: QueryFunction>> = ({ signal }) => - getHarLevertDokumentasjonkrav(fiksDigisosId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!fiksDigisosId, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type GetHarLevertDokumentasjonkravQueryResult = NonNullable< - Awaited> ->; -export type GetHarLevertDokumentasjonkravQueryError = ErrorType; - -export function useGetHarLevertDokumentasjonkrav< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options: { - query: Partial>, TError, TData>> & - Pick< - DefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useGetHarLevertDokumentasjonkrav< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useGetHarLevertDokumentasjonkrav< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useGetHarLevertDokumentasjonkrav< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getGetHarLevertDokumentasjonkravQueryOptions(fiksDigisosId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} - -export const getGetfagsystemHarDokumentasjonkravUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/fagsystemHarDokumentasjonkrav`; -}; - -export const getfagsystemHarDokumentasjonkrav = async ( - fiksDigisosId: string, - options?: RequestInit -): Promise => { - return customFetch>(getGetfagsystemHarDokumentasjonkravUrl(fiksDigisosId), { - ...options, - method: "GET", - }); -}; - -export const getGetfagsystemHarDokumentasjonkravQueryKey = (fiksDigisosId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/fagsystemHarDokumentasjonkrav`] as const; -}; - -export const getGetfagsystemHarDokumentasjonkravQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getGetfagsystemHarDokumentasjonkravQueryKey(fiksDigisosId); - - const queryFn: QueryFunction>> = ({ signal }) => - getfagsystemHarDokumentasjonkrav(fiksDigisosId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!fiksDigisosId, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type GetfagsystemHarDokumentasjonkravQueryResult = NonNullable< - Awaited> ->; -export type GetfagsystemHarDokumentasjonkravQueryError = ErrorType; - -export function useGetfagsystemHarDokumentasjonkrav< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options: { - query: Partial>, TError, TData>> & - Pick< - DefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useGetfagsystemHarDokumentasjonkrav< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions< - Awaited>, - TError, - TData - >, - "initialData" - >; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useGetfagsystemHarDokumentasjonkrav< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useGetfagsystemHarDokumentasjonkrav< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getGetfagsystemHarDokumentasjonkravQueryOptions(fiksDigisosId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} - -export const getGetDokumentasjonkravUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/dokumentasjonkrav`; -}; - -export const getDokumentasjonkrav = async ( - fiksDigisosId: string, - options?: RequestInit -): Promise => { - return customFetch>(getGetDokumentasjonkravUrl(fiksDigisosId), { - ...options, - method: "GET", - }); -}; - -export const getGetDokumentasjonkravQueryKey = (fiksDigisosId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/dokumentasjonkrav`] as const; -}; - -export const getGetDokumentasjonkravQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getGetDokumentasjonkravQueryKey(fiksDigisosId); - - const queryFn: QueryFunction>> = ({ signal }) => - getDokumentasjonkrav(fiksDigisosId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!fiksDigisosId, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type GetDokumentasjonkravQueryResult = NonNullable>>; -export type GetDokumentasjonkravQueryError = ErrorType; - -export function useGetDokumentasjonkrav< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options: { - query: Partial>, TError, TData>> & - Pick< - DefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useGetDokumentasjonkrav< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useGetDokumentasjonkrav< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useGetDokumentasjonkrav< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getGetDokumentasjonkravQueryOptions(fiksDigisosId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} - -export const getGetDokumentasjonkravMedIdUrl = (fiksDigisosId: string, dokumentasjonkravId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/dokumentasjonkrav/${dokumentasjonkravId}`; -}; - -export const getDokumentasjonkravMedId = async ( - fiksDigisosId: string, - dokumentasjonkravId: string, - options?: RequestInit -): Promise => { - return customFetch>( - getGetDokumentasjonkravMedIdUrl(fiksDigisosId, dokumentasjonkravId), - { - ...options, - method: "GET", - } - ); -}; - -export const getGetDokumentasjonkravMedIdQueryKey = (fiksDigisosId: string, dokumentasjonkravId: string) => { - return [ - `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/dokumentasjonkrav/${dokumentasjonkravId}`, - ] as const; -}; - -export const getGetDokumentasjonkravMedIdQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - dokumentasjonkravId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getGetDokumentasjonkravMedIdQueryKey(fiksDigisosId, dokumentasjonkravId); - - const queryFn: QueryFunction>> = ({ signal }) => - getDokumentasjonkravMedId(fiksDigisosId, dokumentasjonkravId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!(fiksDigisosId && dokumentasjonkravId), ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type GetDokumentasjonkravMedIdQueryResult = NonNullable>>; -export type GetDokumentasjonkravMedIdQueryError = ErrorType; - -export function useGetDokumentasjonkravMedId< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - dokumentasjonkravId: string, - options: { - query: Partial>, TError, TData>> & - Pick< - DefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useGetDokumentasjonkravMedId< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - dokumentasjonkravId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useGetDokumentasjonkravMedId< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - dokumentasjonkravId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useGetDokumentasjonkravMedId< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - dokumentasjonkravId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getGetDokumentasjonkravMedIdQueryOptions(fiksDigisosId, dokumentasjonkravId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} diff --git a/src/generated/saks-oversikt-controller/saks-oversikt-controller.msw.ts b/src/generated/saks-oversikt-controller/saks-oversikt-controller.msw.ts deleted file mode 100644 index 3aa9e515..00000000 --- a/src/generated/saks-oversikt-controller/saks-oversikt-controller.msw.ts +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { faker } from "@faker-js/faker"; -import { HttpResponse, delay, http } from "msw"; -import type { SaksDetaljerResponse, SaksListeResponse } from ".././model"; - -export const getHentSaksDetaljerResponseMock = ( - overrideResponse: Partial = {} -): SaksDetaljerResponse => ({ - antallNyeOppgaver: faker.helpers.arrayElement([faker.number.int({ min: undefined, max: undefined }), undefined]), - fiksDigisosId: faker.word.sample(), - soknadTittel: faker.word.sample(), - status: faker.word.sample(), - ...overrideResponse, -}); - -export const getHentAlleSakerResponseMock = (): SaksListeResponse[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - fiksDigisosId: faker.helpers.arrayElement([faker.word.sample(), undefined]), - isBrokenSoknad: faker.datatype.boolean(), - kilde: faker.word.sample(), - kommunenummer: faker.helpers.arrayElement([faker.word.sample(), undefined]), - sistOppdatert: `${faker.date.past().toISOString().split(".")[0]}Z`, - soknadTittel: faker.word.sample(), - url: faker.helpers.arrayElement([faker.word.sample(), undefined]), - })); - -export const getHentSaksDetaljerMockHandler = ( - overrideResponse?: - | SaksDetaljerResponse - | (( - info: Parameters[1]>[0] - ) => Promise | SaksDetaljerResponse) -) => { - return http.get("*/api/v1/innsyn/saksDetaljer", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHentSaksDetaljerResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; - -export const getHentAlleSakerMockHandler = ( - overrideResponse?: - | SaksListeResponse[] - | ((info: Parameters[1]>[0]) => Promise | SaksListeResponse[]) -) => { - return http.get("*/api/v1/innsyn/saker", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHentAlleSakerResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; -export const getSaksOversiktControllerMock = () => [getHentSaksDetaljerMockHandler(), getHentAlleSakerMockHandler()]; diff --git a/src/generated/saks-oversikt-controller/saks-oversikt-controller.ts b/src/generated/saks-oversikt-controller/saks-oversikt-controller.ts deleted file mode 100644 index 73f04e68..00000000 --- a/src/generated/saks-oversikt-controller/saks-oversikt-controller.ts +++ /dev/null @@ -1,198 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useQuery } from "@tanstack/react-query"; -import type { - DefinedInitialDataOptions, - DefinedUseQueryResult, - QueryFunction, - QueryKey, - UndefinedInitialDataOptions, - UseQueryOptions, - UseQueryResult, -} from "@tanstack/react-query"; -import type { HentSaksDetaljerParams, SaksDetaljerResponse, SaksListeResponse } from ".././model"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export const getHentSaksDetaljerUrl = (params: HentSaksDetaljerParams) => { - const normalizedParams = new URLSearchParams(); - - Object.entries(params || {}).forEach(([key, value]) => { - if (value !== undefined) { - normalizedParams.append(key, value === null ? "null" : value.toString()); - } - }); - - return normalizedParams.size - ? `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/saksDetaljer?${normalizedParams.toString()}` - : `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/saksDetaljer`; -}; - -export const hentSaksDetaljer = async ( - params: HentSaksDetaljerParams, - options?: RequestInit -): Promise => { - return customFetch>(getHentSaksDetaljerUrl(params), { - ...options, - method: "GET", - }); -}; - -export const getHentSaksDetaljerQueryKey = (params: HentSaksDetaljerParams) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/saksDetaljer`, ...(params ? [params] : [])] as const; -}; - -export const getHentSaksDetaljerQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - params: HentSaksDetaljerParams, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHentSaksDetaljerQueryKey(params); - - const queryFn: QueryFunction>> = ({ signal }) => - hentSaksDetaljer(params, { signal, ...requestOptions }); - - return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HentSaksDetaljerQueryResult = NonNullable>>; -export type HentSaksDetaljerQueryError = ErrorType; - -export function useHentSaksDetaljer>, TError = ErrorType>( - params: HentSaksDetaljerParams, - options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHentSaksDetaljer>, TError = ErrorType>( - params: HentSaksDetaljerParams, - options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useHentSaksDetaljer>, TError = ErrorType>( - params: HentSaksDetaljerParams, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useHentSaksDetaljer>, TError = ErrorType>( - params: HentSaksDetaljerParams, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHentSaksDetaljerQueryOptions(params, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} - -export const getHentAlleSakerUrl = () => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/saker`; -}; - -export const hentAlleSaker = async (options?: RequestInit): Promise => { - return customFetch>(getHentAlleSakerUrl(), { - ...options, - method: "GET", - }); -}; - -export const getHentAlleSakerQueryKey = () => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/saker`] as const; -}; - -export const getHentAlleSakerQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHentAlleSakerQueryKey(); - - const queryFn: QueryFunction>> = ({ signal }) => - hentAlleSaker({ signal, ...requestOptions }); - - return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HentAlleSakerQueryResult = NonNullable>>; -export type HentAlleSakerQueryError = ErrorType; - -export function useHentAlleSaker< - TData = Awaited>, - TError = ErrorType, ->(options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; -}): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHentAlleSaker< - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey }; -export function useHentAlleSaker< - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey }; - -export function useHentAlleSaker< - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHentAlleSakerQueryOptions(options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} diff --git a/src/generated/saks-status-controller/saks-status-controller.msw.ts b/src/generated/saks-status-controller/saks-status-controller.msw.ts deleted file mode 100644 index 44025c75..00000000 --- a/src/generated/saks-status-controller/saks-status-controller.msw.ts +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { faker } from "@faker-js/faker"; -import { HttpResponse, delay, http } from "msw"; -import type { SaksStatusResponse } from ".././model"; - -export const getHentSaksStatuserResponseMock = (): SaksStatusResponse[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - skalViseVedtakInfoPanel: faker.datatype.boolean(), - status: faker.helpers.arrayElement([ - faker.helpers.arrayElement([ - "UNDER_BEHANDLING", - "IKKE_INNSYN", - "FERDIGBEHANDLET", - "BEHANDLES_IKKE", - "FEILREGISTRERT", - ] as const), - undefined, - ]), - tittel: faker.word.sample(), - vedtaksfilUrlList: faker.helpers.arrayElement([ - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - dato: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - id: faker.word.sample(), - url: faker.word.sample(), - })), - undefined, - ]), - })); - -export const getHentSaksStatuserMockHandler = ( - overrideResponse?: - | SaksStatusResponse[] - | (( - info: Parameters[1]>[0] - ) => Promise | SaksStatusResponse[]) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/saksStatus", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHentSaksStatuserResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; -export const getSaksStatusControllerMock = () => [getHentSaksStatuserMockHandler()]; diff --git a/src/generated/saks-status-controller/saks-status-controller.ts b/src/generated/saks-status-controller/saks-status-controller.ts deleted file mode 100644 index 6db8eadf..00000000 --- a/src/generated/saks-status-controller/saks-status-controller.ts +++ /dev/null @@ -1,106 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useQuery } from "@tanstack/react-query"; -import type { - DefinedInitialDataOptions, - DefinedUseQueryResult, - QueryFunction, - QueryKey, - UndefinedInitialDataOptions, - UseQueryOptions, - UseQueryResult, -} from "@tanstack/react-query"; -import type { SaksStatusResponse } from ".././model"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export const getHentSaksStatuserUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/saksStatus`; -}; - -export const hentSaksStatuser = async (fiksDigisosId: string, options?: RequestInit): Promise => { - return customFetch>(getHentSaksStatuserUrl(fiksDigisosId), { - ...options, - method: "GET", - }); -}; - -export const getHentSaksStatuserQueryKey = (fiksDigisosId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/saksStatus`] as const; -}; - -export const getHentSaksStatuserQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHentSaksStatuserQueryKey(fiksDigisosId); - - const queryFn: QueryFunction>> = ({ signal }) => - hentSaksStatuser(fiksDigisosId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!fiksDigisosId, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HentSaksStatuserQueryResult = NonNullable>>; -export type HentSaksStatuserQueryError = ErrorType; - -export function useHentSaksStatuser>, TError = ErrorType>( - fiksDigisosId: string, - options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHentSaksStatuser>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useHentSaksStatuser>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useHentSaksStatuser>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHentSaksStatuserQueryOptions(fiksDigisosId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} diff --git a/src/generated/soknad-med-innsyn-controller/soknad-med-innsyn-controller.msw.ts b/src/generated/soknad-med-innsyn-controller/soknad-med-innsyn-controller.msw.ts deleted file mode 100644 index 7a26a872..00000000 --- a/src/generated/soknad-med-innsyn-controller/soknad-med-innsyn-controller.msw.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { faker } from "@faker-js/faker"; -import { HttpResponse, delay, http } from "msw"; - -export const getHarSoknaderMedInnsynResponseMock = (): boolean => faker.datatype.boolean(); - -export const getHarSoknaderMedInnsynMockHandler = ( - overrideResponse?: boolean | ((info: Parameters[1]>[0]) => Promise | boolean) -) => { - return http.get("*/api/v1/innsyn/harSoknaderMedInnsyn", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHarSoknaderMedInnsynResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; -export const getSoknadMedInnsynControllerMock = () => [getHarSoknaderMedInnsynMockHandler()]; diff --git a/src/generated/soknad-med-innsyn-controller/soknad-med-innsyn-controller.ts b/src/generated/soknad-med-innsyn-controller/soknad-med-innsyn-controller.ts deleted file mode 100644 index 0ef6cade..00000000 --- a/src/generated/soknad-med-innsyn-controller/soknad-med-innsyn-controller.ts +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useQuery } from "@tanstack/react-query"; -import type { - DefinedInitialDataOptions, - DefinedUseQueryResult, - QueryFunction, - QueryKey, - UndefinedInitialDataOptions, - UseQueryOptions, - UseQueryResult, -} from "@tanstack/react-query"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export const getHarSoknaderMedInnsynUrl = () => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/harSoknaderMedInnsyn`; -}; - -export const harSoknaderMedInnsyn = async (options?: RequestInit): Promise => { - return customFetch>(getHarSoknaderMedInnsynUrl(), { - ...options, - method: "GET", - }); -}; - -export const getHarSoknaderMedInnsynQueryKey = () => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/harSoknaderMedInnsyn`] as const; -}; - -export const getHarSoknaderMedInnsynQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHarSoknaderMedInnsynQueryKey(); - - const queryFn: QueryFunction>> = ({ signal }) => - harSoknaderMedInnsyn({ signal, ...requestOptions }); - - return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HarSoknaderMedInnsynQueryResult = NonNullable>>; -export type HarSoknaderMedInnsynQueryError = ErrorType; - -export function useHarSoknaderMedInnsyn< - TData = Awaited>, - TError = ErrorType, ->(options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; -}): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHarSoknaderMedInnsyn< - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey }; -export function useHarSoknaderMedInnsyn< - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey }; - -export function useHarSoknaderMedInnsyn< - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHarSoknaderMedInnsynQueryOptions(options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} diff --git a/src/generated/soknads-status-controller/soknads-status-controller.msw.ts b/src/generated/soknads-status-controller/soknads-status-controller.msw.ts deleted file mode 100644 index a46093cf..00000000 --- a/src/generated/soknads-status-controller/soknads-status-controller.msw.ts +++ /dev/null @@ -1,88 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { faker } from "@faker-js/faker"; -import { HttpResponse, delay, http } from "msw"; -import type { SoknadsStatusResponse } from ".././model"; - -export const getHentSoknadsStatusResponseMock = ( - overrideResponse: Partial = {} -): SoknadsStatusResponse => ({ - filUrl: faker.helpers.arrayElement([ - { - link: faker.word.sample(), - linkTekst: faker.helpers.arrayElement([ - "SOKNAD_SEND_TIL_KONTOR", - "SOKNAD_UNDER_BEHANDLING", - "SOKNAD_MOTTATT_MED_KOMMUNENAVN", - "SOKNAD_MOTTATT_UTEN_KOMMUNENAVN", - "SOKNAD_FERDIGBEHANDLET", - "SOKNAD_BEHANDLES_IKKE", - "SOKNAD_VIDERESENDT_PAPIRSOKNAD_MED_NORG_ENHET", - "SOKNAD_VIDERESENDT_PAPIRSOKNAD_UTEN_NORG_ENHET", - "SOKNAD_VIDERESENDT_MED_NORG_ENHET", - "SOKNAD_VIDERESENDT_UTEN_NORG_ENHET", - "SOKNAD_KAN_IKKE_VISE_STATUS_MED_TITTEL", - "SOKNAD_KAN_IKKE_VISE_STATUS_UTEN_TITTEL", - "SAK_UNDER_BEHANDLING_MED_TITTEL", - "SAK_UNDER_BEHANDLING_UTEN_TITTEL", - "SAK_FERDIGBEHANDLET_MED_TITTEL", - "SAK_FERDIGBEHANDLET_UTEN_TITTEL", - "SAK_KAN_IKKE_VISE_STATUS_MED_TITTEL", - "SAK_KAN_IKKE_VISE_STATUS_UTEN_TITTEL", - "ANTALL_SENDTE_VEDLEGG", - "UTBETALINGER_OPPDATERT", - "BREV_OM_SAKSBEANDLINGSTID", - "ETTERSPOR_MER_DOKUMENTASJON", - "ETTERSPOR_IKKE_MER_DOKUMENTASJON", - "DOKUMENTASJONKRAV", - "SOKNAD_SEND_TIL_KONTOR_LENKETEKST", - "VIS_BREVET_LENKETEKST", - ] as const), - }, - undefined, - ]), - isBroken: faker.datatype.boolean(), - kommunenummer: faker.helpers.arrayElement([faker.word.sample(), undefined]), - navKontor: faker.helpers.arrayElement([faker.word.sample(), undefined]), - soknadsalderIMinutter: faker.helpers.arrayElement([ - faker.number.int({ min: undefined, max: undefined }), - undefined, - ]), - status: faker.helpers.arrayElement([ - "SENDT", - "MOTTATT", - "UNDER_BEHANDLING", - "FERDIGBEHANDLET", - "BEHANDLES_IKKE", - ] as const), - tidspunktSendt: faker.helpers.arrayElement([`${faker.date.past().toISOString().split(".")[0]}Z`, undefined]), - ...overrideResponse, -}); - -export const getHentSoknadsStatusMockHandler = ( - overrideResponse?: - | SoknadsStatusResponse - | (( - info: Parameters[1]>[0] - ) => Promise | SoknadsStatusResponse) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/soknadsStatus", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHentSoknadsStatusResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; -export const getSoknadsStatusControllerMock = () => [getHentSoknadsStatusMockHandler()]; diff --git a/src/generated/soknads-status-controller/soknads-status-controller.ts b/src/generated/soknads-status-controller/soknads-status-controller.ts deleted file mode 100644 index 02c9679d..00000000 --- a/src/generated/soknads-status-controller/soknads-status-controller.ts +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useQuery } from "@tanstack/react-query"; -import type { - DefinedInitialDataOptions, - DefinedUseQueryResult, - QueryFunction, - QueryKey, - UndefinedInitialDataOptions, - UseQueryOptions, - UseQueryResult, -} from "@tanstack/react-query"; -import type { SoknadsStatusResponse } from ".././model"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export const getHentSoknadsStatusUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/soknadsStatus`; -}; - -export const hentSoknadsStatus = async ( - fiksDigisosId: string, - options?: RequestInit -): Promise => { - return customFetch>(getHentSoknadsStatusUrl(fiksDigisosId), { - ...options, - method: "GET", - }); -}; - -export const getHentSoknadsStatusQueryKey = (fiksDigisosId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/soknadsStatus`] as const; -}; - -export const getHentSoknadsStatusQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHentSoknadsStatusQueryKey(fiksDigisosId); - - const queryFn: QueryFunction>> = ({ signal }) => - hentSoknadsStatus(fiksDigisosId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!fiksDigisosId, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HentSoknadsStatusQueryResult = NonNullable>>; -export type HentSoknadsStatusQueryError = ErrorType; - -export function useHentSoknadsStatus< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options: { - query: Partial>, TError, TData>> & - Pick< - DefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHentSoknadsStatus< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useHentSoknadsStatus< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useHentSoknadsStatus< - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHentSoknadsStatusQueryOptions(fiksDigisosId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} diff --git a/src/generated/tilgang-controller/tilgang-controller.msw.ts b/src/generated/tilgang-controller/tilgang-controller.msw.ts deleted file mode 100644 index 8d719b4d..00000000 --- a/src/generated/tilgang-controller/tilgang-controller.msw.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { faker } from "@faker-js/faker"; -import { HttpResponse, delay, http } from "msw"; -import type { TilgangResponse } from ".././model"; - -export const getHarTilgangResponseMock = (overrideResponse: Partial = {}): TilgangResponse => ({ - fornavn: faker.word.sample(), - harTilgang: faker.datatype.boolean(), - ...overrideResponse, -}); - -export const getHarTilgangMockHandler = ( - overrideResponse?: - | TilgangResponse - | ((info: Parameters[1]>[0]) => Promise | TilgangResponse) -) => { - return http.get("*/api/v1/innsyn/tilgang", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHarTilgangResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; -export const getTilgangControllerMock = () => [getHarTilgangMockHandler()]; diff --git a/src/generated/tilgang-controller/tilgang-controller.ts b/src/generated/tilgang-controller/tilgang-controller.ts deleted file mode 100644 index baed6fba..00000000 --- a/src/generated/tilgang-controller/tilgang-controller.ts +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useQuery } from "@tanstack/react-query"; -import type { - DefinedInitialDataOptions, - DefinedUseQueryResult, - QueryFunction, - QueryKey, - UndefinedInitialDataOptions, - UseQueryOptions, - UseQueryResult, -} from "@tanstack/react-query"; -import type { TilgangResponse } from ".././model"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export type harTilgangResponse = { - data: TilgangResponse; - status: number; -}; - -export const getHarTilgangUrl = () => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/tilgang`; -}; - -export const harTilgang = async (options?: RequestInit): Promise => { - return customFetch>(getHarTilgangUrl(), { - ...options, - method: "GET", - }); -}; - -export const getHarTilgangQueryKey = () => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/tilgang`] as const; -}; - -export const getHarTilgangQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHarTilgangQueryKey(); - - const queryFn: QueryFunction>> = ({ signal }) => - harTilgang({ signal, ...requestOptions }); - - return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HarTilgangQueryResult = NonNullable>>; -export type HarTilgangQueryError = ErrorType; - -export function useHarTilgang>, TError = ErrorType>(options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; -}): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHarTilgang>, TError = ErrorType>(options?: { - query?: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey }; -export function useHarTilgang>, TError = ErrorType>(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey }; - -export function useHarTilgang>, TError = ErrorType>(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHarTilgangQueryOptions(options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} diff --git a/src/generated/utbetalinger-controller/utbetalinger-controller.msw.ts b/src/generated/utbetalinger-controller/utbetalinger-controller.msw.ts deleted file mode 100644 index 979f3407..00000000 --- a/src/generated/utbetalinger-controller/utbetalinger-controller.msw.ts +++ /dev/null @@ -1,148 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { faker } from "@faker-js/faker"; -import { HttpResponse, delay, http } from "msw"; -import type { NyeOgTidligereUtbetalingerResponse, UtbetalingerResponse } from ".././model"; - -export const getHentUtbetalingerResponseMock = (): UtbetalingerResponse[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - ar: faker.number.int({ min: undefined, max: undefined }), - foersteIManeden: faker.date.past().toISOString().split("T")[0], - maned: faker.number.int({ min: undefined, max: undefined }), - utbetalinger: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - annenMottaker: faker.datatype.boolean(), - belop: faker.number.int({ min: undefined, max: undefined }), - fiksDigisosId: faker.word.sample(), - fom: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - forfallsdato: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - kontonummer: faker.helpers.arrayElement([faker.word.sample(), undefined]), - mottaker: faker.helpers.arrayElement([faker.word.sample(), undefined]), - status: faker.word.sample(), - tittel: faker.word.sample(), - tom: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - utbetalingsdato: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - utbetalingsmetode: faker.helpers.arrayElement([faker.word.sample(), undefined]), - })), - })); - -export const getHentTidligereUtbetalingerResponseMock = (): NyeOgTidligereUtbetalingerResponse[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - ar: faker.number.int({ min: undefined, max: undefined }), - maned: faker.number.int({ min: undefined, max: undefined }), - utbetalingerForManed: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map( - () => ({ - annenMottaker: faker.datatype.boolean(), - belop: faker.number.int({ min: undefined, max: undefined }), - fiksDigisosId: faker.word.sample(), - fom: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - forfallsdato: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - kontonummer: faker.helpers.arrayElement([faker.word.sample(), undefined]), - mottaker: faker.helpers.arrayElement([faker.word.sample(), undefined]), - status: faker.word.sample(), - tittel: faker.word.sample(), - tom: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - utbetalingsdato: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - utbetalingsmetode: faker.helpers.arrayElement([faker.word.sample(), undefined]), - }) - ), - })); - -export const getHentNyeUtbetalingerResponseMock = (): NyeOgTidligereUtbetalingerResponse[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - ar: faker.number.int({ min: undefined, max: undefined }), - maned: faker.number.int({ min: undefined, max: undefined }), - utbetalingerForManed: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map( - () => ({ - annenMottaker: faker.datatype.boolean(), - belop: faker.number.int({ min: undefined, max: undefined }), - fiksDigisosId: faker.word.sample(), - fom: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - forfallsdato: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - kontonummer: faker.helpers.arrayElement([faker.word.sample(), undefined]), - mottaker: faker.helpers.arrayElement([faker.word.sample(), undefined]), - status: faker.word.sample(), - tittel: faker.word.sample(), - tom: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - utbetalingsdato: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - utbetalingsmetode: faker.helpers.arrayElement([faker.word.sample(), undefined]), - }) - ), - })); - -export const getHentUtbetalingerMockHandler = ( - overrideResponse?: - | UtbetalingerResponse[] - | (( - info: Parameters[1]>[0] - ) => Promise | UtbetalingerResponse[]) -) => { - return http.get("*/api/v1/innsyn/utbetalinger", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHentUtbetalingerResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; - -export const getHentTidligereUtbetalingerMockHandler = ( - overrideResponse?: - | NyeOgTidligereUtbetalingerResponse[] - | (( - info: Parameters[1]>[0] - ) => Promise | NyeOgTidligereUtbetalingerResponse[]) -) => { - return http.get("*/api/v1/innsyn/tidligere", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHentTidligereUtbetalingerResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; - -export const getHentNyeUtbetalingerMockHandler = ( - overrideResponse?: - | NyeOgTidligereUtbetalingerResponse[] - | (( - info: Parameters[1]>[0] - ) => Promise | NyeOgTidligereUtbetalingerResponse[]) -) => { - return http.get("*/api/v1/innsyn/nye", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHentNyeUtbetalingerResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; -export const getUtbetalingerControllerMock = () => [ - getHentUtbetalingerMockHandler(), - getHentTidligereUtbetalingerMockHandler(), - getHentNyeUtbetalingerMockHandler(), -]; diff --git a/src/generated/utbetalinger-controller/utbetalinger-controller.ts b/src/generated/utbetalinger-controller/utbetalinger-controller.ts deleted file mode 100644 index 753ba0ad..00000000 --- a/src/generated/utbetalinger-controller/utbetalinger-controller.ts +++ /dev/null @@ -1,288 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useQuery } from "@tanstack/react-query"; -import type { - DefinedInitialDataOptions, - DefinedUseQueryResult, - QueryFunction, - QueryKey, - UndefinedInitialDataOptions, - UseQueryOptions, - UseQueryResult, -} from "@tanstack/react-query"; -import type { HentUtbetalingerParams, NyeOgTidligereUtbetalingerResponse, UtbetalingerResponse } from ".././model"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export const getHentUtbetalingerUrl = (params?: HentUtbetalingerParams) => { - const normalizedParams = new URLSearchParams(); - - Object.entries(params || {}).forEach(([key, value]) => { - if (value !== undefined) { - normalizedParams.append(key, value === null ? "null" : value.toString()); - } - }); - - return normalizedParams.size - ? `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/utbetalinger?${normalizedParams.toString()}` - : `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/utbetalinger`; -}; - -export const hentUtbetalinger = async ( - params?: HentUtbetalingerParams, - options?: RequestInit -): Promise => { - return customFetch>(getHentUtbetalingerUrl(params), { - ...options, - method: "GET", - }); -}; - -export const getHentUtbetalingerQueryKey = (params?: HentUtbetalingerParams) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/utbetalinger`, ...(params ? [params] : [])] as const; -}; - -export const getHentUtbetalingerQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - params?: HentUtbetalingerParams, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHentUtbetalingerQueryKey(params); - - const queryFn: QueryFunction>> = ({ signal }) => - hentUtbetalinger(params, { signal, ...requestOptions }); - - return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HentUtbetalingerQueryResult = NonNullable>>; -export type HentUtbetalingerQueryError = ErrorType; - -export function useHentUtbetalinger>, TError = ErrorType>( - params: undefined | HentUtbetalingerParams, - options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHentUtbetalinger>, TError = ErrorType>( - params?: HentUtbetalingerParams, - options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useHentUtbetalinger>, TError = ErrorType>( - params?: HentUtbetalingerParams, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useHentUtbetalinger>, TError = ErrorType>( - params?: HentUtbetalingerParams, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHentUtbetalingerQueryOptions(params, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} - -export const getHentTidligereUtbetalingerUrl = () => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/tidligere`; -}; - -export const hentTidligereUtbetalinger = async ( - options?: RequestInit -): Promise => { - return customFetch>(getHentTidligereUtbetalingerUrl(), { - ...options, - method: "GET", - }); -}; - -export const getHentTidligereUtbetalingerQueryKey = () => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/tidligere`] as const; -}; - -export const getHentTidligereUtbetalingerQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHentTidligereUtbetalingerQueryKey(); - - const queryFn: QueryFunction>> = ({ signal }) => - hentTidligereUtbetalinger({ signal, ...requestOptions }); - - return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HentTidligereUtbetalingerQueryResult = NonNullable>>; -export type HentTidligereUtbetalingerQueryError = ErrorType; - -export function useHentTidligereUtbetalinger< - TData = Awaited>, - TError = ErrorType, ->(options: { - query: Partial>, TError, TData>> & - Pick< - DefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; -}): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHentTidligereUtbetalinger< - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey }; -export function useHentTidligereUtbetalinger< - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey }; - -export function useHentTidligereUtbetalinger< - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHentTidligereUtbetalingerQueryOptions(options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} - -export const getHentNyeUtbetalingerUrl = () => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/nye`; -}; - -export const hentNyeUtbetalinger = async (options?: RequestInit): Promise => { - return customFetch>(getHentNyeUtbetalingerUrl(), { - ...options, - method: "GET", - }); -}; - -export const getHentNyeUtbetalingerQueryKey = () => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/nye`] as const; -}; - -export const getHentNyeUtbetalingerQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHentNyeUtbetalingerQueryKey(); - - const queryFn: QueryFunction>> = ({ signal }) => - hentNyeUtbetalinger({ signal, ...requestOptions }); - - return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HentNyeUtbetalingerQueryResult = NonNullable>>; -export type HentNyeUtbetalingerQueryError = ErrorType; - -export function useHentNyeUtbetalinger< - TData = Awaited>, - TError = ErrorType, ->(options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; -}): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHentNyeUtbetalinger< - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>> & - Pick< - UndefinedInitialDataOptions>, TError, TData>, - "initialData" - >; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey }; -export function useHentNyeUtbetalinger< - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey }; - -export function useHentNyeUtbetalinger< - TData = Awaited>, - TError = ErrorType, ->(options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; -}): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHentNyeUtbetalingerQueryOptions(options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} diff --git a/src/generated/vedlegg-controller/vedlegg-controller.msw.ts b/src/generated/vedlegg-controller/vedlegg-controller.msw.ts deleted file mode 100644 index fca13ae8..00000000 --- a/src/generated/vedlegg-controller/vedlegg-controller.msw.ts +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { faker } from "@faker-js/faker"; -import { HttpResponse, delay, http } from "msw"; -import type { OppgaveOpplastingResponse, VedleggResponse } from ".././model"; - -export const getHentVedleggResponseMock = (): VedleggResponse[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - datoLagtTil: `${faker.date.past().toISOString().split(".")[0]}Z`, - filnavn: faker.word.sample(), - storrelse: faker.number.int({ min: undefined, max: undefined }), - tilleggsinfo: faker.helpers.arrayElement([faker.word.sample(), undefined]), - type: faker.word.sample(), - url: faker.word.sample(), - })); - -export const getSendVedleggResponseMock = (): OppgaveOpplastingResponse[] => - Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - filer: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({ - filnavn: faker.helpers.arrayElement([faker.word.sample(), undefined]), - status: faker.helpers.arrayElement([ - "OK", - "COULD_NOT_LOAD_DOCUMENT", - "PDF_IS_ENCRYPTED", - "ILLEGAL_FILE_TYPE", - "ILLEGAL_FILENAME", - "FILE_TOO_LARGE", - ] as const), - })), - hendelsereferanse: faker.helpers.arrayElement([faker.word.sample(), undefined]), - hendelsetype: faker.helpers.arrayElement([ - faker.helpers.arrayElement(["dokumentasjonEtterspurt", "dokumentasjonkrav", "soknad", "bruker"] as const), - undefined, - ]), - innsendelsesfrist: faker.helpers.arrayElement([faker.date.past().toISOString().split("T")[0], undefined]), - tilleggsinfo: faker.helpers.arrayElement([faker.word.sample(), undefined]), - type: faker.word.sample(), - })); - -export const getHentVedleggMockHandler = ( - overrideResponse?: - | VedleggResponse[] - | ((info: Parameters[1]>[0]) => Promise | VedleggResponse[]) -) => { - return http.get("*/api/v1/innsyn/:fiksDigisosId/vedlegg", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getHentVedleggResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; - -export const getSendVedleggMockHandler = ( - overrideResponse?: - | OppgaveOpplastingResponse[] - | (( - info: Parameters[1]>[0] - ) => Promise | OppgaveOpplastingResponse[]) -) => { - return http.post("*/api/v1/innsyn/:fiksDigisosId/vedlegg", async (info) => { - await delay(1000); - - return new HttpResponse( - JSON.stringify( - overrideResponse !== undefined - ? typeof overrideResponse === "function" - ? await overrideResponse(info) - : overrideResponse - : getSendVedleggResponseMock() - ), - { status: 200, headers: { "Content-Type": "application/json" } } - ); - }); -}; -export const getVedleggControllerMock = () => [getHentVedleggMockHandler(), getSendVedleggMockHandler()]; diff --git a/src/generated/vedlegg-controller/vedlegg-controller.ts b/src/generated/vedlegg-controller/vedlegg-controller.ts deleted file mode 100644 index dd63850a..00000000 --- a/src/generated/vedlegg-controller/vedlegg-controller.ts +++ /dev/null @@ -1,176 +0,0 @@ -/** - * Generated by orval v7.2.0 🍺 - * Do not edit manually. - * OpenAPI definition - * OpenAPI spec version: v0 - */ -import { useMutation, useQuery } from "@tanstack/react-query"; -import type { - DefinedInitialDataOptions, - DefinedUseQueryResult, - MutationFunction, - QueryFunction, - QueryKey, - UndefinedInitialDataOptions, - UseMutationOptions, - UseMutationResult, - UseQueryOptions, - UseQueryResult, -} from "@tanstack/react-query"; -import type { OppgaveOpplastingResponse, SendVedleggBody, VedleggResponse } from ".././model"; -import { customFetch } from "../../custom-fetch"; -import type { ErrorType } from "../../custom-fetch"; - -type SecondParameter any> = Parameters[1]; - -export const getHentVedleggUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/vedlegg`; -}; - -export const hentVedlegg = async (fiksDigisosId: string, options?: RequestInit): Promise => { - return customFetch>(getHentVedleggUrl(fiksDigisosId), { - ...options, - method: "GET", - }); -}; - -export const getHentVedleggQueryKey = (fiksDigisosId: string) => { - return [`/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/vedlegg`] as const; -}; - -export const getHentVedleggQueryOptions = < - TData = Awaited>, - TError = ErrorType, ->( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = queryOptions?.queryKey ?? getHentVedleggQueryKey(fiksDigisosId); - - const queryFn: QueryFunction>> = ({ signal }) => - hentVedlegg(fiksDigisosId, { signal, ...requestOptions }); - - return { queryKey, queryFn, enabled: !!fiksDigisosId, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: QueryKey }; -}; - -export type HentVedleggQueryResult = NonNullable>>; -export type HentVedleggQueryError = ErrorType; - -export function useHentVedlegg>, TError = ErrorType>( - fiksDigisosId: string, - options: { - query: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): DefinedUseQueryResult & { queryKey: QueryKey }; -export function useHentVedlegg>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>> & - Pick>, TError, TData>, "initialData">; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; -export function useHentVedlegg>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey }; - -export function useHentVedlegg>, TError = ErrorType>( - fiksDigisosId: string, - options?: { - query?: Partial>, TError, TData>>; - request?: SecondParameter; - } -): UseQueryResult & { queryKey: QueryKey } { - const queryOptions = getHentVedleggQueryOptions(fiksDigisosId, options); - - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey }; - - query.queryKey = queryOptions.queryKey; - - return query; -} - -export const getSendVedleggUrl = (fiksDigisosId: string) => { - return `/sosialhjelp/innsyn/api/innsyn-api/api/v1/innsyn/${fiksDigisosId}/vedlegg`; -}; - -export const sendVedlegg = async ( - fiksDigisosId: string, - sendVedleggBody: SendVedleggBody, - options?: RequestInit -): Promise => { - const formData = new FormData(); - sendVedleggBody.files.forEach((value) => formData.append("files", value)); - - return customFetch>(getSendVedleggUrl(fiksDigisosId), { - ...options, - method: "POST", - body: formData, - }); -}; - -export const getSendVedleggMutationOptions = , TContext = unknown>(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { fiksDigisosId: string; data: SendVedleggBody }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { fiksDigisosId: string; data: SendVedleggBody }, - TContext -> => { - const { mutation: mutationOptions, request: requestOptions } = options ?? {}; - - const mutationFn: MutationFunction< - Awaited>, - { fiksDigisosId: string; data: SendVedleggBody } - > = (props) => { - const { fiksDigisosId, data } = props ?? {}; - - return sendVedlegg(fiksDigisosId, data, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type SendVedleggMutationResult = NonNullable>>; -export type SendVedleggMutationBody = SendVedleggBody; -export type SendVedleggMutationError = ErrorType; - -export const useSendVedlegg = , TContext = unknown>(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { fiksDigisosId: string; data: SendVedleggBody }, - TContext - >; - request?: SecondParameter; -}): UseMutationResult< - Awaited>, - TError, - { fiksDigisosId: string; data: SendVedleggBody }, - TContext -> => { - const mutationOptions = getSendVedleggMutationOptions(options); - - return useMutation(mutationOptions); -}; From 4c7fbb487a7f91746f333aaf03d7909ba66f7bfa Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 16:39:40 +0100 Subject: [PATCH 016/112] Ah, vi har et run-orval-flagg; da kan vi bare bruke det. --- .github/workflows/build_code.yml | 1 + .github/workflows/build_deploy_dev.yml | 1 + .github/workflows/build_deploy_prod.yml | 1 + package.json | 2 +- 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_code.yml b/.github/workflows/build_code.yml index 321e145f..42276813 100644 --- a/.github/workflows/build_code.yml +++ b/.github/workflows/build_code.yml @@ -23,4 +23,5 @@ jobs: with: node-version: 20 build-less: 'false' + run-orval: 'true' reader-token: ${{ secrets.READER_TOKEN }} diff --git a/.github/workflows/build_deploy_dev.yml b/.github/workflows/build_deploy_dev.yml index ebcb8e1c..0bed7d18 100644 --- a/.github/workflows/build_deploy_dev.yml +++ b/.github/workflows/build_deploy_dev.yml @@ -41,6 +41,7 @@ jobs: with: node-version: 20 build-less: 'false' + run-orval: 'true' reader-token: ${{ secrets.READER_TOKEN }} run-test: 'false' diff --git a/.github/workflows/build_deploy_prod.yml b/.github/workflows/build_deploy_prod.yml index 36e49e5d..eecbfc20 100644 --- a/.github/workflows/build_deploy_prod.yml +++ b/.github/workflows/build_deploy_prod.yml @@ -31,6 +31,7 @@ jobs: build-less: 'false' reader-token: ${{ secrets.READER_TOKEN }} run-test: 'false' + run-orval: 'true' - name: 'Upload static files to cdn' id: upload diff --git a/package.json b/package.json index 4bb210e7..2131a187 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ }, "scripts": { "dev": "next dev | pino-pretty", - "build": "orval && next build", + "build": "next build", "start": "next start", "test": "jest", "lintStaged": "lint-staged", From 361ea1276ad4655ed01b25722d2eb9b8d81e8898 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 17:47:10 +0100 Subject: [PATCH 017/112] Generer suspense-klienter med orval --- orval.config.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/orval.config.ts b/orval.config.ts index ca8dcfd1..e9bba352 100644 --- a/orval.config.ts +++ b/orval.config.ts @@ -26,6 +26,10 @@ export default defineConfig({ fetch: { includeHttpStatusReturnType: false, }, + query: { + useSuspenseQuery: true, + version: 5, + }, }, }, hooks: { From 94e953551ae957a1ce96f8b788727ce7eb102600 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 18:06:12 +0100 Subject: [PATCH 018/112] Tillat ubrukte argumenter dersom de er prefixed med _ --- eslint.config.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/eslint.config.mjs b/eslint.config.mjs index 35f6b16c..af337274 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -39,6 +39,7 @@ export default [ "no-console": "warn", "@typescript-eslint/explicit-function-return-type": "off", "prettier/prettier": "warn", + "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }], "import/order": [ "warn", From bb27693253834fa30450a9d81e3cbda63e4785e2 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 20:35:39 +0100 Subject: [PATCH 019/112] Legger til react query devtools som build dependency --- package-lock.json | 44 ++++++++++++++++++++++++++++++++++++++------ package.json | 1 + src/pages/_app.tsx | 6 ++++++ 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index ecf26634..2d89bee3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,6 +38,7 @@ "@eslint/eslintrc": "^3.2.0", "@eslint/js": "^9.17.0", "@faker-js/faker": "^8.4.1", + "@tanstack/react-query-devtools": "^5.64.1", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.1.0", "@types/jest": "^29.5.12", @@ -4201,26 +4202,57 @@ } }, "node_modules/@tanstack/query-core": { + "version": "5.64.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.64.1.tgz", + "integrity": "sha512-978Wx4Wl4UJZbmvU/rkaM9cQtXXrbhK0lsz/UZhYIbyKYA8E4LdomTwyh2GHZ4oU0BKKoDH4YlKk2VscCUgNmg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/query-devtools": { "version": "5.62.16", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.62.16.tgz", - "integrity": "sha512-9Sgft7Qavcd+sN0V25xVyo0nfmcZXBuODy3FVG7BMWTg1HMLm8wwG5tNlLlmSic1u7l1v786oavn+STiFaPH2g==", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.62.16.tgz", + "integrity": "sha512-3ff6UBJr0H3nIhfLSl9911rvKqXf0u4B58jl0uYdDWLqPk9pCvYIbxC35cGxK2+8INl4IaFVUHb/IdgWrNkg3Q==", + "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "5.63.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.63.0.tgz", - "integrity": "sha512-QWizLzSiog8xqIRYmuJRok9VELlXVBAwtINgVCgW1SNvamQwWDO5R0XFSkjoBEj53x9Of1KAthLRBUC5xmtVLQ==", + "version": "5.64.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.64.1.tgz", + "integrity": "sha512-vW5ggHpIO2Yjj44b4sB+Fd3cdnlMJppXRBJkEHvld6FXh3j5dwWJoQo7mGtKI2RbSFyiyu/PhGAy0+Vv5ev9Eg==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.64.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@tanstack/react-query-devtools": { + "version": "5.64.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.64.1.tgz", + "integrity": "sha512-8ajcGE3wXYlb4KuJnkFYkJwJKc/qmPNTpQD7YTgLRMBPTGGp1xk7VMzxL87DoXuweO8luplUUblJJ3noVs/luQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.62.16" + "@tanstack/query-devtools": "5.62.16" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { + "@tanstack/react-query": "^5.64.1", "react": "^18 || ^19" } }, diff --git a/package.json b/package.json index 2131a187..19888806 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "@eslint/eslintrc": "^3.2.0", "@eslint/js": "^9.17.0", "@faker-js/faker": "^8.4.1", + "@tanstack/react-query-devtools": "^5.64.1", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.1.0", "@types/jest": "^29.5.12", diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 0b73459d..d739a2c3 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -8,6 +8,7 @@ import { onBreadcrumbClick, onLanguageSelect } from "@navikt/nav-dekoratoren-mod import { configureLogger } from "@navikt/next-logger"; import Cookies from "js-cookie"; import { IToggle } from "@unleash/nextjs"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import ErrorBoundary from "../components/errors/ErrorBoundary"; import Tilgangskontrollside from "../components/Tilgangskontrollside/Tilgangskontrollside"; @@ -43,6 +44,11 @@ const App = ({ Component, pageProps }: AppProps<{ toggles: IToggle[] }>): React. + {/* Quoth react-query devtools docs: + By default, React Query Devtools are only included in bundles + when process.env.NODE_ENV === 'development', so you don't + need to worry about excluding them from a production build. */} + ); }; From 130006f9684d7b7c5207a955f189a3efbbe7f57d Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 12:31:13 +0100 Subject: [PATCH 020/112] Generaliser ErrorBoundary litt --- src/components/errors/ErrorBoundary.tsx | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/components/errors/ErrorBoundary.tsx b/src/components/errors/ErrorBoundary.tsx index e8bfe226..f5c50536 100644 --- a/src/components/errors/ErrorBoundary.tsx +++ b/src/components/errors/ErrorBoundary.tsx @@ -5,35 +5,30 @@ import ServerError from "../../pages/500"; interface Props { children?: ReactNode; + fallback?: ReactNode; } interface State { - hasError: boolean; + error: Error | null; } class ErrorBoundary extends React.Component { constructor(props: Props) { super(props); - // Define a state variable to track whether is an error or not - this.state = { hasError: false }; + this.state = { error: null }; } - /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ - static getDerivedStateFromError(_: Error) { + static getDerivedStateFromError(error: Error) { // Update state so the next render will show the fallback UI - - return { hasError: true }; + return { error }; } public componentDidCatch(error: Error, errorInfo: ErrorInfo) { logger.error(`Uncaught clientside error: ${error}, errorInfo: ${JSON.stringify(errorInfo)}`); } public render() { - if (this.state.hasError) { - return ; - } - + if (!!this.state.error) return this.props.fallback ?? ; return this.props.children; } } From d1a064f8449583fa2ab387e29c1f1e5bd507bb9e Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 16:48:26 +0100 Subject: [PATCH 021/112] Refaktorerer tester av utbetalingsdetaljerDefaultAapnet Wrapper dem i en describe, gir mer konvensjonelle navn, fjerner en duplisert test --- src/utbetalinger/Utbetalinger.test.ts | 64 +++++++++++---------------- 1 file changed, 26 insertions(+), 38 deletions(-) diff --git a/src/utbetalinger/Utbetalinger.test.ts b/src/utbetalinger/Utbetalinger.test.ts index e91dc249..7a7828ff 100644 --- a/src/utbetalinger/Utbetalinger.test.ts +++ b/src/utbetalinger/Utbetalinger.test.ts @@ -1,52 +1,40 @@ import { utbetalingsdetaljerDefaultAapnet } from "./beta/tabs/UtbetalingAccordionItem"; -it("Utbetalingsdetaljer skal ikke være åpen når utbetalingsdato er 18 dager tilbake i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-27")).toBe(false); -}); +describe("utbetalingsdetaljerDefaultAapnet", () => { + it("returns false when the date is 18 days in the past", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-27")).toBe(false)); -it("Utbetalingsdetaljer skal være lukket når utbetalingsdato er 16 dager tilbake i tid, datoer samme måned", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-20"), "2024-01-04")).toBe(false); -}); + it("returns false when the date is 16 days in the past (same month)", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-20"), "2024-01-04")).toBe(false)); -it("Utbetalingsdetaljer skal ikke være åpen når utbetalingsdato er 16 dager tilbake i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-29")).toBe(false); -}); + it("returns false when the date is 16 days in the past", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-29")).toBe(false)); -it("Utbetalingsdetaljer skal være åpen når utbetalingsdato er 15 dager tilbake i tid, datoer samme måned", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-20"), "2024-01-05")).toBe(true); -}); + it("returns true when the date is 15 days in the past (same month)", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-20"), "2024-01-05")).toBe(true)); -it("Utbetalingsdetaljer skal være åpen når utbetalingsdato er 15 dager tilbake i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-30")).toBe(true); -}); + it("returns true when the date is 15 days in the past", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-30")).toBe(true)); -it("Utbetalingsdetaljer skal være åpen når utbetalingsdato er 14 dager tilbake i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-31")).toBe(true); -}); + it("returns true when the date is 14 days in the past", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-31")).toBe(true)); -it("Utbetalingsdetaljer skal være åpen når utbetalingsdato er dags dato", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-14")).toBe(true); -}); + it("returns true when the date is the same as today's date", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-14")).toBe(true)); -it("Utbetalingsdetaljer skal være åpen når utbetalingsdato er 14 dager frem i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-28")).toBe(true); -}); + it("returns true when the date is 14 days in the future", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-28")).toBe(true)); -it("Utbetalingsdetaljer skal være åpen når utbetalingsdato er 15 dager frem i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-29")).toBe(true); -}); + it("returns true when the date is 15 days in the future", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-29")).toBe(true)); -it("Utbetalingsdetaljer skal ikke være åpen når utbetalingsdato er 16 dager frem i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-30")).toBe(false); -}); + it("returns false when the date is 16 days in the future", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-30")).toBe(false)); -it("Utbetalingsdetaljer skal ikke være åpen når utbetalingsdato er 18 dager frem i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-02-02")).toBe(false); -}); + it("returns false when the date is 18 days in the future", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-02-02")).toBe(false)); -it("Utbetalingsdetaljer skal ikke være åpen når utbetalingsdato er 18 dager frem i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-02-02")).toBe(false); -}); -it("Utbetalingsdetaljer skal ikke være åpen når utbetalingsdato ikke er definert", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "")).toBe(false); + it("returns false when the date is undefined", () => { + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "")).toBe(false); + }); }); From a0a8fa82b0ff8cfafb7583030803d825248a6f05 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 16:53:02 +0100 Subject: [PATCH 022/112] Refaktor utbetalingsdetaljerDefaultAapnet om til isNotMoreThanTwoWeeksAgo --- src/utbetalinger/Utbetalinger.test.ts | 28 +++++++++---------- .../beta/tabs/UtbetalingAccordionItem.tsx | 23 +++------------ 2 files changed, 18 insertions(+), 33 deletions(-) diff --git a/src/utbetalinger/Utbetalinger.test.ts b/src/utbetalinger/Utbetalinger.test.ts index 7a7828ff..32898293 100644 --- a/src/utbetalinger/Utbetalinger.test.ts +++ b/src/utbetalinger/Utbetalinger.test.ts @@ -1,40 +1,40 @@ -import { utbetalingsdetaljerDefaultAapnet } from "./beta/tabs/UtbetalingAccordionItem"; +import { isNotMoreThanTwoWeeksAgo } from "./beta/tabs/UtbetalingAccordionItem"; -describe("utbetalingsdetaljerDefaultAapnet", () => { +describe("isNotMoreThanTwoWeeksAgo", () => { it("returns false when the date is 18 days in the past", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-27")).toBe(false)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-27")).toBe(false)); it("returns false when the date is 16 days in the past (same month)", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-20"), "2024-01-04")).toBe(false)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-20"), "2024-01-04")).toBe(false)); it("returns false when the date is 16 days in the past", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-29")).toBe(false)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-29")).toBe(false)); it("returns true when the date is 15 days in the past (same month)", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-20"), "2024-01-05")).toBe(true)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-20"), "2024-01-05")).toBe(true)); it("returns true when the date is 15 days in the past", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-30")).toBe(true)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-30")).toBe(true)); it("returns true when the date is 14 days in the past", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-31")).toBe(true)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-31")).toBe(true)); it("returns true when the date is the same as today's date", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-14")).toBe(true)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-14")).toBe(true)); it("returns true when the date is 14 days in the future", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-28")).toBe(true)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-28")).toBe(true)); it("returns true when the date is 15 days in the future", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-29")).toBe(true)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-29")).toBe(true)); it("returns false when the date is 16 days in the future", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-30")).toBe(false)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-30")).toBe(false)); it("returns false when the date is 18 days in the future", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-02-02")).toBe(false)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-02-02")).toBe(false)); it("returns false when the date is undefined", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "")).toBe(false); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "")).toBe(false); }); }); diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 276175e8..4f6ea743 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -4,6 +4,7 @@ import React, { useState } from "react"; import { useTranslation } from "next-i18next"; import Link from "next/link"; import { logger } from "@navikt/next-logger"; +import { differenceInCalendarDays } from "date-fns"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; import { formatCurrency, formatDato, getDayAndMonth } from "../../../utils/formatting"; @@ -31,28 +32,12 @@ interface Props { utbetalingManed: UtbetalingMedId; } -export const utbetalingsdetaljerDefaultAapnet = (dagensDato: Date, utbetalingsdato?: string) => { - if (utbetalingsdato == "") return false; - const utbetalingsDato: Date = new Date(utbetalingsdato ?? ""); - - const femtenDagerSiden: Date = new Date(dagensDato.getTime() - 15 * 24 * 60 * 60 * 1000); - femtenDagerSiden.setHours(0, 0, 0, 0); - - const femtenDagerTil: Date = new Date(dagensDato.getTime() + 15 * 24 * 60 * 60 * 1000); - femtenDagerTil.setHours(1, 0, 0, 0); - - const erUtbetalingsdatoInnenDeSisteFemtenDagene = - utbetalingsDato >= femtenDagerSiden && utbetalingsDato <= dagensDato; - - const erUtbetalingsdatoInnenDeNesteFemtenDagene = - utbetalingsDato <= femtenDagerTil && utbetalingsDato >= dagensDato; - - return erUtbetalingsdatoInnenDeSisteFemtenDagene || erUtbetalingsdatoInnenDeNesteFemtenDagene; -}; +export const isNotMoreThanTwoWeeksAgo = (now: Date, utbetalingsdato?: string) => + !utbetalingsdato ? false : Math.abs(differenceInCalendarDays(now, utbetalingsdato)) <= 15; const UtbetalingAccordionItem = ({ utbetalingManed }: Props) => { const { t, i18n } = useTranslation("utbetalinger"); - const [isOpen, setIsOpen] = useState(utbetalingsdetaljerDefaultAapnet(new Date(), utbetalingManed.utbetalingsdato)); + const [isOpen, setIsOpen] = useState(isNotMoreThanTwoWeeksAgo(new Date(), utbetalingManed.utbetalingsdato)); return ( <> From c5a0ba4a5cb93fd817ace1f9288e4f365c750fe8 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:10:27 +0100 Subject: [PATCH 023/112] Refaktorerer isNotMoreThanTwoWeeksAgo --- src/utbetalinger/Utbetalinger.test.ts | 40 ------------------- .../beta/tabs/UtbetalingAccordionItem.tsx | 7 +--- .../beta/tabs/isNotMoreThanTwoWeeksAgo.ts | 4 ++ .../isNotMoreThanTwoWeeksAgo.test.ts | 31 ++++++++++++++ 4 files changed, 37 insertions(+), 45 deletions(-) delete mode 100644 src/utbetalinger/Utbetalinger.test.ts create mode 100644 src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts create mode 100644 src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts diff --git a/src/utbetalinger/Utbetalinger.test.ts b/src/utbetalinger/Utbetalinger.test.ts deleted file mode 100644 index 32898293..00000000 --- a/src/utbetalinger/Utbetalinger.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { isNotMoreThanTwoWeeksAgo } from "./beta/tabs/UtbetalingAccordionItem"; - -describe("isNotMoreThanTwoWeeksAgo", () => { - it("returns false when the date is 18 days in the past", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-27")).toBe(false)); - - it("returns false when the date is 16 days in the past (same month)", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-20"), "2024-01-04")).toBe(false)); - - it("returns false when the date is 16 days in the past", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-29")).toBe(false)); - - it("returns true when the date is 15 days in the past (same month)", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-20"), "2024-01-05")).toBe(true)); - - it("returns true when the date is 15 days in the past", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-30")).toBe(true)); - - it("returns true when the date is 14 days in the past", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-31")).toBe(true)); - - it("returns true when the date is the same as today's date", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-14")).toBe(true)); - - it("returns true when the date is 14 days in the future", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-28")).toBe(true)); - - it("returns true when the date is 15 days in the future", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-29")).toBe(true)); - - it("returns false when the date is 16 days in the future", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-30")).toBe(false)); - - it("returns false when the date is 18 days in the future", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-02-02")).toBe(false)); - - it("returns false when the date is undefined", () => { - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "")).toBe(false); - }); -}); diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 4f6ea743..3845ddbf 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -4,7 +4,6 @@ import React, { useState } from "react"; import { useTranslation } from "next-i18next"; import Link from "next/link"; import { logger } from "@navikt/next-logger"; -import { differenceInCalendarDays } from "date-fns"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; import { formatCurrency, formatDato, getDayAndMonth } from "../../../utils/formatting"; @@ -12,6 +11,7 @@ import { UtbetalingMedId } from "../UtbetalingerPanelBeta"; import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbetalingerUtils"; import styles from "./manedgruppe.module.css"; +import { isNotMoreThanTwoWeeksAgo } from "./isNotMoreThanTwoWeeksAgo"; function statusToTekst(t: (key: string) => string, status?: string) { switch (status) { @@ -32,12 +32,9 @@ interface Props { utbetalingManed: UtbetalingMedId; } -export const isNotMoreThanTwoWeeksAgo = (now: Date, utbetalingsdato?: string) => - !utbetalingsdato ? false : Math.abs(differenceInCalendarDays(now, utbetalingsdato)) <= 15; - const UtbetalingAccordionItem = ({ utbetalingManed }: Props) => { const { t, i18n } = useTranslation("utbetalinger"); - const [isOpen, setIsOpen] = useState(isNotMoreThanTwoWeeksAgo(new Date(), utbetalingManed.utbetalingsdato)); + const [isOpen, setIsOpen] = useState(isNotMoreThanTwoWeeksAgo(utbetalingManed.utbetalingsdato)); return ( <> diff --git a/src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts b/src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts new file mode 100644 index 00000000..816d85dc --- /dev/null +++ b/src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts @@ -0,0 +1,4 @@ +import { differenceInCalendarDays } from "date-fns"; + +export const isNotMoreThanTwoWeeksAgo = (utbetalingsdato?: string) => + !utbetalingsdato ? false : Math.abs(differenceInCalendarDays(new Date(), utbetalingsdato)) <= 15; diff --git a/src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts b/src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts new file mode 100644 index 00000000..2a14281d --- /dev/null +++ b/src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts @@ -0,0 +1,31 @@ +import { isNotMoreThanTwoWeeksAgo } from "./beta/tabs/isNotMoreThanTwoWeeksAgo"; + +/** + * For en gitt referansedato og måldato, forventer vi at funksjonen returnerer et gitt resultat. + * @param referenceDate Mock-verdi for systemklokka + * @param targetDate Datoen vi vil sjekke + * @param expectedResult Forventet resultat + * @param description Beskrivelse av testen + */ +const expectResult = (referenceDate: string, targetDate: string, expectedResult: boolean, description: string) => + it(`returns ${expectedResult} for ${description}`, () => { + jest.setSystemTime(new Date(referenceDate)); + expect(isNotMoreThanTwoWeeksAgo(targetDate)).toBe(expectedResult); + }); + +describe("isNotMoreThanTwoWeeksAgo", () => { + beforeAll(() => jest.useFakeTimers()); + afterAll(() => jest.useRealTimers()); + expectResult("2024-01-14", "2023-12-27", false, "a date 18 days before the reference date"); + expectResult("2024-01-20", "2024-01-04", false, "a date 16 days before the reference date in the same month"); + expectResult("2024-01-14", "2023-12-29", false, "a date 16 days before the reference date across months"); + expectResult("2024-01-20", "2024-01-05", true, "a date 15 days before the reference date in the same month"); + expectResult("2024-01-14", "2023-12-30", true, "a date 15 days before the reference date across months"); + expectResult("2024-01-14", "2023-12-31", true, "a date 14 days before the reference date"); + expectResult("2024-01-14", "2024-01-14", true, "the reference date itself"); + expectResult("2024-01-14", "2024-01-28", true, "a date 14 days after the reference date"); + expectResult("2024-01-14", "2024-01-29", true, "a date 15 days after the reference date"); + expectResult("2024-01-14", "2024-01-30", false, "a date 16 days after the reference date"); + expectResult("2024-01-14", "2024-02-02", false, "a date 18 days after the reference date"); + expectResult("2024-01-14", "", false, "an undefined date"); +}); From e48b7f219049d10187c48c8d0220b5d06103985a Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:12:44 +0100 Subject: [PATCH 024/112] Erstatter styled-component med div og Tailwind-CSS --- src/utbetalinger/beta/UtbetalingerPanelBeta.tsx | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 66f27b7e..9ec91d15 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -1,7 +1,6 @@ import React, { useEffect, useState } from "react"; import { BodyLong, Heading, Panel, Tabs } from "@navikt/ds-react"; import { useTranslation } from "next-i18next"; -import styled from "styled-components"; import HandCoinsIcon from "../../components/ikoner/HandCoins"; import { useHentNyeUtbetalinger } from "../../generated/utbetalinger-controller/utbetalinger-controller"; @@ -27,15 +26,6 @@ export interface UtbetalingMedId extends ManedUtbetaling { export interface UtbetalingerResponseMedId extends Omit { utbetalingerForManed: UtbetalingMedId[]; } -const StyledSpace = styled.div` - @media screen and (max-width: 769px) { - padding: 1rem 0 0 0; - } - - @media screen and (min-width: 769px) { - padding: 3rem 0 0 0; - } -`; const UtbetalingerPanelBeta = () => { const [nyeLogged, setNyeLogged] = useState(false); @@ -48,8 +38,8 @@ const UtbetalingerPanelBeta = () => { useEffect(() => { if (!nyeLogged && nye?.length) { - const sisteManedgruppe = nye.at(-1).utbetalingerForManed; - const sisteDatoVist = sisteManedgruppe.at(-1).utbetalingsdato ?? sisteManedgruppe.at(-1).forfallsdato; + const sisteManedgruppe = nye?.at(-1)?.utbetalingerForManed; + const sisteDatoVist = sisteManedgruppe?.at(-1)?.utbetalingsdato ?? sisteManedgruppe?.at(-1)?.forfallsdato; logAmplitudeEvent("Hentet nye utbetalinger", { sisteDatoVist }); setNyeLogged(true); @@ -71,7 +61,7 @@ const UtbetalingerPanelBeta = () => { {t("tittel.inne")} - +
{isMobile && } logTabChange(path)}> From 67f53ccfb81e0bfb85559220bffd307ed0f46e8c Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:26:20 +0100 Subject: [PATCH 025/112] isLessThanTwoWeeksAgo er et bedre navn enn isNotMoreThanTwoWeeksAgo --- src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx | 4 ++-- .../tabs/isLessThanTwoWeeksAgo.test.ts} | 4 ++-- .../{isNotMoreThanTwoWeeksAgo.ts => isLessThanTwoWeeksAgo.ts} | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) rename src/utbetalinger/{isNotMoreThanTwoWeeksAgo.test.ts => beta/tabs/isLessThanTwoWeeksAgo.test.ts} (92%) rename src/utbetalinger/beta/tabs/{isNotMoreThanTwoWeeksAgo.ts => isLessThanTwoWeeksAgo.ts} (69%) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 3845ddbf..d7e2f03f 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -11,7 +11,7 @@ import { UtbetalingMedId } from "../UtbetalingerPanelBeta"; import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbetalingerUtils"; import styles from "./manedgruppe.module.css"; -import { isNotMoreThanTwoWeeksAgo } from "./isNotMoreThanTwoWeeksAgo"; +import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; function statusToTekst(t: (key: string) => string, status?: string) { switch (status) { @@ -34,7 +34,7 @@ interface Props { const UtbetalingAccordionItem = ({ utbetalingManed }: Props) => { const { t, i18n } = useTranslation("utbetalinger"); - const [isOpen, setIsOpen] = useState(isNotMoreThanTwoWeeksAgo(utbetalingManed.utbetalingsdato)); + const [isOpen, setIsOpen] = useState(isLessThanTwoWeeksAgo(utbetalingManed.utbetalingsdato)); return ( <> diff --git a/src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts b/src/utbetalinger/beta/tabs/isLessThanTwoWeeksAgo.test.ts similarity index 92% rename from src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts rename to src/utbetalinger/beta/tabs/isLessThanTwoWeeksAgo.test.ts index 2a14281d..8c5d525f 100644 --- a/src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts +++ b/src/utbetalinger/beta/tabs/isLessThanTwoWeeksAgo.test.ts @@ -1,4 +1,4 @@ -import { isNotMoreThanTwoWeeksAgo } from "./beta/tabs/isNotMoreThanTwoWeeksAgo"; +import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; /** * For en gitt referansedato og måldato, forventer vi at funksjonen returnerer et gitt resultat. @@ -10,7 +10,7 @@ import { isNotMoreThanTwoWeeksAgo } from "./beta/tabs/isNotMoreThanTwoWeeksAgo"; const expectResult = (referenceDate: string, targetDate: string, expectedResult: boolean, description: string) => it(`returns ${expectedResult} for ${description}`, () => { jest.setSystemTime(new Date(referenceDate)); - expect(isNotMoreThanTwoWeeksAgo(targetDate)).toBe(expectedResult); + expect(isLessThanTwoWeeksAgo(targetDate)).toBe(expectedResult); }); describe("isNotMoreThanTwoWeeksAgo", () => { diff --git a/src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts b/src/utbetalinger/beta/tabs/isLessThanTwoWeeksAgo.ts similarity index 69% rename from src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts rename to src/utbetalinger/beta/tabs/isLessThanTwoWeeksAgo.ts index 816d85dc..e6b40b73 100644 --- a/src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts +++ b/src/utbetalinger/beta/tabs/isLessThanTwoWeeksAgo.ts @@ -1,4 +1,4 @@ import { differenceInCalendarDays } from "date-fns"; -export const isNotMoreThanTwoWeeksAgo = (utbetalingsdato?: string) => +export const isLessThanTwoWeeksAgo = (utbetalingsdato?: string) => !utbetalingsdato ? false : Math.abs(differenceInCalendarDays(new Date(), utbetalingsdato)) <= 15; From a50974c74b105de21c72b8ae4fb4781df3d1e677 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:26:58 +0100 Subject: [PATCH 026/112] Lager felles error/loading-komponent for nye og tidligere utbetalinger --- .../beta/UtbetalingerPanelBeta.tsx | 12 ++--- .../beta/tabs/NyeUtbetalinger.tsx | 47 ------------------- .../beta/tabs/UtbetalingerLoadingWrapper.tsx | 27 +++++++++++ .../beta/tabs/UtbetalingerNye.tsx | 37 +++++++++++++++ ...talinger.tsx => UtbetalingerTidligere.tsx} | 37 +++++---------- 5 files changed, 82 insertions(+), 78 deletions(-) delete mode 100644 src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx create mode 100644 src/utbetalinger/beta/tabs/UtbetalingerLoadingWrapper.tsx create mode 100644 src/utbetalinger/beta/tabs/UtbetalingerNye.tsx rename src/utbetalinger/beta/tabs/{TidligereUtbetalinger.tsx => UtbetalingerTidligere.tsx} (51%) diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 9ec91d15..841dcf53 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -10,8 +10,8 @@ import { ManedUtbetaling, NyeOgTidligereUtbetalingerResponse } from "../../gener import styles from "./utbetalinger.module.css"; import useFiltrerteUtbetalinger from "./filter/useFiltrerteUtbetalinger"; -import NyeUtbetalinger from "./tabs/NyeUtbetalinger"; -import { TidligereUtbetalinger } from "./tabs/TidligereUtbetalinger"; +import UtbetalingerNye from "./tabs/UtbetalingerNye"; +import { UtbetalingerTidligere } from "./tabs/UtbetalingerTidligere"; import FilterModal from "./filter/FilterModal"; import { addIdToUtbetalinger } from "./addIdToUtbetalinger"; @@ -51,9 +51,7 @@ const UtbetalingerPanelBeta = () => { const filtrerteNye = useFiltrerteUtbetalinger(nye ?? []); - const logTabChange = (tabPath: string) => { - logAmplitudeEvent("Klikket tab", { tab: tabPath }); - }; + const logTabChange = (tab: string) => logAmplitudeEvent("Klikket tab", { tab }); const isMobile = useIsMobile(); return ( @@ -83,11 +81,11 @@ const UtbetalingerPanelBeta = () => { {t("utbetalingerIngress")} - + {t("tidligereIngress")} - + diff --git a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx b/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx deleted file mode 100644 index 7a46dcc2..00000000 --- a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from "react"; -import { Alert } from "@navikt/ds-react"; -import { useTranslation } from "next-i18next"; - -import { useFilter } from "../filter/FilterContext"; -import Lastestriper from "../../../components/lastestriper/Lasterstriper"; -import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; - -import { ManedGruppe } from "./ManedGruppe"; - -const NyeUtbetalinger = ({ - utbetalinger, - isError, - isLoading, -}: { - utbetalinger: UtbetalingerResponseMedId[]; - isLoading: boolean; - isError: boolean; -}) => { - const { isUsingFilter } = useFilter(); - const { t } = useTranslation("utbetalinger"); - - if (isLoading) return ; - - if (isError) - return ( - - {t("feil.fetch")} - - ); - - if (!utbetalinger.length) - return ( - - {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.nye")} - - ); - - return ( - <> - {utbetalinger.map((utbetalingSak: UtbetalingerResponseMedId) => ( - - ))} - - ); -}; -export default NyeUtbetalinger; diff --git a/src/utbetalinger/beta/tabs/UtbetalingerLoadingWrapper.tsx b/src/utbetalinger/beta/tabs/UtbetalingerLoadingWrapper.tsx new file mode 100644 index 00000000..dd1d02f8 --- /dev/null +++ b/src/utbetalinger/beta/tabs/UtbetalingerLoadingWrapper.tsx @@ -0,0 +1,27 @@ +import React from "react"; +import { useTranslation } from "next-i18next"; +import { Alert } from "@navikt/ds-react"; + +import Lastestriper from "../../../components/lastestriper/Lasterstriper"; + +export const UtbetalingerLoadingWrapper = ({ + isLoading, + isError, + children, +}: { + isLoading: boolean; + isError: boolean; + children: React.ReactNode; +}) => { + const { t } = useTranslation("utbetalinger"); + + if (isLoading) return ; + if (isError) + return ( + + {t("feil.fetch")} + + ); + + return children; +}; diff --git a/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx b/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx new file mode 100644 index 00000000..338cb693 --- /dev/null +++ b/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx @@ -0,0 +1,37 @@ +import React from "react"; +import { Alert } from "@navikt/ds-react"; +import { useTranslation } from "next-i18next"; + +import { useFilter } from "../filter/FilterContext"; +import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; + +import { ManedGruppe } from "./ManedGruppe"; +import { UtbetalingerLoadingWrapper } from "./UtbetalingerLoadingWrapper"; + +const UtbetalingerNye = ({ + utbetalinger, + isError, + isLoading, +}: { + utbetalinger: UtbetalingerResponseMedId[]; + isLoading: boolean; + isError: boolean; +}) => { + const { isUsingFilter } = useFilter(); + const { t } = useTranslation("utbetalinger"); + + return ( + + {utbetalinger?.length ? ( + utbetalinger.map((utbetalingSak) => ( + + )) + ) : ( + + {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.nye")} + + )} + + ); +}; +export default UtbetalingerNye; diff --git a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx b/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx similarity index 51% rename from src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx rename to src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx index ee75ff7f..e2cc2676 100644 --- a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx @@ -5,40 +5,29 @@ import { useTranslation } from "next-i18next"; import { useHentTidligereUtbetalinger } from "../../../generated/utbetalinger-controller/utbetalinger-controller"; import useFiltrerteUtbetalinger from "../filter/useFiltrerteUtbetalinger"; import { useFilter } from "../filter/FilterContext"; -import Lastestriper from "../../../components/lastestriper/Lasterstriper"; import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; import { addIdToUtbetalinger } from "../addIdToUtbetalinger"; import { ManedGruppe } from "./ManedGruppe"; +import { UtbetalingerLoadingWrapper } from "./UtbetalingerLoadingWrapper"; -export const TidligereUtbetalinger = () => { +export const UtbetalingerTidligere = () => { const { data, isLoading, isError } = useHentTidligereUtbetalinger({ query: { select: addIdToUtbetalinger } }); const filtrerteTidligere = useFiltrerteUtbetalinger(data ?? []); const { isUsingFilter } = useFilter(); const { t } = useTranslation("utbetalinger"); - if (isLoading) { - return ; - } - if (isError) { - return ( - - {t("feil.fetch")} - - ); - } - if (filtrerteTidligere.length === 0) - return ( - - {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.tidligere")} - - ); - return ( - <> - {filtrerteTidligere.map((utbetalingSak: UtbetalingerResponseMedId) => ( - - ))} - + + {filtrerteTidligere?.length ? ( + filtrerteTidligere.map((utbetalingSak: UtbetalingerResponseMedId) => ( + + )) + ) : ( + + {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.tidligere")} + + )} + ); }; From 81755f353071bd1368c2b572544c27ab8bce5efb Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:29:09 +0100 Subject: [PATCH 027/112] Div safe refaktorering, spes. propagate to destructuring --- .../beta/tabs/UtbetalingAccordionItem.tsx | 63 +++++++++++-------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index d7e2f03f..475284fc 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -28,13 +28,27 @@ function statusToTekst(t: (key: string) => string, status?: string) { return status?.toLowerCase?.() + " " ?? "Ingen status"; } } -interface Props { - utbetalingManed: UtbetalingMedId; -} -const UtbetalingAccordionItem = ({ utbetalingManed }: Props) => { +const UtbetalingAccordionItem = ({ + utbetalingManed: { + annenMottaker, + belop, + fiksDigisosId, + fom, + forfallsdato, + kontonummer, + mottaker, + status, + tittel, + tom, + utbetalingsdato, + utbetalingsmetode, + }, +}: { + utbetalingManed: UtbetalingMedId; +}) => { const { t, i18n } = useTranslation("utbetalinger"); - const [isOpen, setIsOpen] = useState(isLessThanTwoWeeksAgo(utbetalingManed.utbetalingsdato)); + const [isOpen, setIsOpen] = useState(isLessThanTwoWeeksAgo(utbetalingsdato)); return ( <> @@ -42,27 +56,25 @@ const UtbetalingAccordionItem = ({ utbetalingManed }: Props) => { { - logAmplitudeEvent(isOpen ? "accordion lukket" : "accordion åpnet", { - tekst: "Utbetaling", - }); + logAmplitudeEvent(isOpen ? "accordion lukket" : "accordion åpnet", { tekst: "Utbetaling" }); setIsOpen((isOpen) => !isOpen); }} >
- {hentUtbetalingTittel(utbetalingManed.tittel, t("default_utbetalinger_tittel"))} + {hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} - {utbetalingManed.status === "STOPPET" ? ( + {status === "STOPPET" ? ( <>{t("utbetalinger:stoppet")} ) : ( <> - {statusToTekst(t, utbetalingManed.status)} - {utbetalingManed.utbetalingsdato - ? getDayAndMonth(utbetalingManed.utbetalingsdato, i18n.language) - : utbetalingManed.forfallsdato - ? getDayAndMonth(utbetalingManed.forfallsdato, i18n.language) + {statusToTekst(t, status)} + {utbetalingsdato + ? getDayAndMonth(utbetalingsdato, i18n.language) + : forfallsdato + ? getDayAndMonth(forfallsdato, i18n.language) : t("ukjentDato")} )} @@ -70,46 +82,45 @@ const UtbetalingAccordionItem = ({ utbetalingManed }: Props) => {
- {utbetalingManed.status === "STOPPET" ? ( + {status === "STOPPET" ? ( {t("opprinneligSum")} - {formatCurrency(utbetalingManed.belop, i18n.language)} kr + {formatCurrency(belop, i18n.language)} kr ) : ( - <>{formatCurrency(utbetalingManed.belop, i18n.language)} kr + <>{formatCurrency(belop, i18n.language)} kr )}
- {utbetalingManed.fom && utbetalingManed.tom && ( + {fom && tom && ( <> {t("periode")} - {formatDato(utbetalingManed.fom, i18n.language)} -{" "} - {formatDato(utbetalingManed.tom, i18n.language)} + {formatDato(fom, i18n.language)} - {formatDato(tom, i18n.language)} )} <> {t("mottaker")} - {utbetalingManed.annenMottaker ? ( + {annenMottaker ? ( - {utbetalingManed.mottaker} + {mottaker} ) : ( {`${t("tilDeg")} (${hentTekstForUtbetalingsmetode( - utbetalingManed.utbetalingsmetode ?? "", + utbetalingsmetode ?? "", i18n - )} ${utbetalingManed.kontonummer}) + )} ${kontonummer}) `} )} logButtonOrLinkClick("Åpner søknaden fra utbetalingen")} > From b607b9b8c930829fd1c18671935f2a625905f597 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:33:16 +0100 Subject: [PATCH 028/112] Endrer Accordion.Item fra controlled til uncontrolled for ytelse --- .../beta/tabs/UtbetalingAccordionItem.tsx | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 475284fc..22266428 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -1,6 +1,5 @@ import { Accordion, BodyShort } from "@navikt/ds-react"; import { FileTextIcon } from "@navikt/aksel-icons"; -import React, { useState } from "react"; import { useTranslation } from "next-i18next"; import Link from "next/link"; import { logger } from "@navikt/next-logger"; @@ -12,7 +11,8 @@ import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbet import styles from "./manedgruppe.module.css"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; - +const onOpenChange = (open: boolean) => + logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); function statusToTekst(t: (key: string) => string, status?: string) { switch (status) { case "STOPPET": @@ -48,18 +48,11 @@ const UtbetalingAccordionItem = ({ utbetalingManed: UtbetalingMedId; }) => { const { t, i18n } = useTranslation("utbetalinger"); - const [isOpen, setIsOpen] = useState(isLessThanTwoWeeksAgo(utbetalingsdato)); return ( <> - - { - logAmplitudeEvent(isOpen ? "accordion lukket" : "accordion åpnet", { tekst: "Utbetaling" }); - setIsOpen((isOpen) => !isOpen); - }} - > + +
From 7a5ca79cc7d19328a08672bdbe8e289f0474d335 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:40:10 +0100 Subject: [PATCH 029/112] =?UTF-8?q?Forenkler=20erStoppet/utbetalingsbel?= =?UTF-8?q?=C3=B8p?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beta/tabs/UtbetalingAccordionItem.tsx | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 22266428..ba1858b8 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -3,11 +3,13 @@ import { FileTextIcon } from "@navikt/aksel-icons"; import { useTranslation } from "next-i18next"; import Link from "next/link"; import { logger } from "@navikt/next-logger"; +import cx from "classnames"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; import { formatCurrency, formatDato, getDayAndMonth } from "../../../utils/formatting"; import { UtbetalingMedId } from "../UtbetalingerPanelBeta"; import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbetalingerUtils"; +import { ManedUtbetalingStatus } from "../../../generated/model"; import styles from "./manedgruppe.module.css"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; @@ -48,18 +50,19 @@ const UtbetalingAccordionItem = ({ utbetalingManed: UtbetalingMedId; }) => { const { t, i18n } = useTranslation("utbetalinger"); + const erStoppet = status === ManedUtbetalingStatus.STOPPET; return ( <> - +
{hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} - {status === "STOPPET" ? ( + {erStoppet ? ( <>{t("utbetalinger:stoppet")} ) : ( <> @@ -74,15 +77,9 @@ const UtbetalingAccordionItem = ({
- - {status === "STOPPET" ? ( - - {t("opprinneligSum")} - {formatCurrency(belop, i18n.language)} kr - - ) : ( - <>{formatCurrency(belop, i18n.language)} kr - )} + + {!erStoppet && {t("opprinneligSum")}} + {formatCurrency(belop, i18n.language)} kr
From 96dd25a19ef11159a76d4f0bfa5a8f978323aadd Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:47:15 +0100 Subject: [PATCH 030/112] Refaktor av formattere MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * .replace er ikke nødvendig; DateTimeFormat legger punktum på ordinaltall * syntaksendringer (disse funksjonene kommer ikke til å leve lenge) --- src/utils/formatting.ts | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/utils/formatting.ts b/src/utils/formatting.ts index 107e5c16..85960098 100644 --- a/src/utils/formatting.ts +++ b/src/utils/formatting.ts @@ -10,29 +10,28 @@ function formatBytes(bytes: number, decimals: number = 2): string { } // Eksempel: formatCurrency(12345) => 12.345 -function formatCurrency(amount: number, language: string): string { - return new Intl.NumberFormat(language).format(amount); -} +const formatCurrency = (amount: number, language: string): string => new Intl.NumberFormat(language).format(amount); // Eksempel: "2019-08-01" => "01. august 2019" -function formatDato(isoDate: string, language: string) { - const dato: Date = new Date(isoDate); - const formatter = new Intl.DateTimeFormat(language, { day: "numeric", month: "long", year: "numeric" }); - return formatter.format(dato).replace(/([0-9]) /, "$1. "); -} +export const formatDato = (isoDate: string, language: string) => + new Intl.DateTimeFormat(language, { + day: "numeric", + month: "long", + year: "numeric", + }).format(new Date(isoDate)); + // Eksempel "2022-04-11" => "11. april" -export function getDayAndMonth(isoDate: string, language: string) { - const dato: Date = new Date(isoDate); - const formatter = new Intl.DateTimeFormat(language, { day: "numeric", month: "long" }); - return formatter.format(dato).replace(/([0-9]) /, "$1. "); -} +export const getDayAndMonth = (isoDate: string, language: string) => + new Intl.DateTimeFormat(language, { + day: "numeric", + month: "long", + }).format(new Date(isoDate)); -export function dateToDDMMYYYY(language: string, dato: Date) { - return new Intl.DateTimeFormat(language, { +export const dateToDDMMYYYY = (language: string, dato: Date) => + new Intl.DateTimeFormat(language, { day: "2-digit", month: "2-digit", year: "numeric", }).format(dato); -} -export { formatBytes, formatCurrency, formatDato }; +export { formatBytes, formatCurrency }; From dd23e2d67c4271b76ec2235ec52999ccf1165758 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 18:01:08 +0100 Subject: [PATCH 031/112] Migrerer fra styled-components til tailwind & div refaktor --- src/utbetalinger/beta/tabs/ManedGruppe.tsx | 5 +- .../beta/tabs/UtbetalingAccordionItem.tsx | 56 ++++++++----------- .../beta/tabs/manedgruppe.module.css | 54 ------------------ 3 files changed, 24 insertions(+), 91 deletions(-) delete mode 100644 src/utbetalinger/beta/tabs/manedgruppe.module.css diff --git a/src/utbetalinger/beta/tabs/ManedGruppe.tsx b/src/utbetalinger/beta/tabs/ManedGruppe.tsx index 2d8e4da7..bcea8077 100644 --- a/src/utbetalinger/beta/tabs/ManedGruppe.tsx +++ b/src/utbetalinger/beta/tabs/ManedGruppe.tsx @@ -4,7 +4,6 @@ import { set } from "date-fns"; import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; -import styles from "./manedgruppe.module.css"; import UtbetalingAccordionItem from "./UtbetalingAccordionItem"; const getMonthYearString = (i18n: I18n, date: Date) => @@ -18,8 +17,8 @@ export const ManedGruppe = ({ const { i18n } = useTranslation(); return ( -
- +
+ {getMonthYearString(i18n, set(new Date(0), { year: ar, month: maned - 1 }))} diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index ba1858b8..3fa7575d 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -11,23 +11,21 @@ import { UtbetalingMedId } from "../UtbetalingerPanelBeta"; import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbetalingerUtils"; import { ManedUtbetalingStatus } from "../../../generated/model"; -import styles from "./manedgruppe.module.css"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; const onOpenChange = (open: boolean) => logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); -function statusToTekst(t: (key: string) => string, status?: string) { + +function statusToTekst(status?: ManedUtbetalingStatus) { switch (status) { - case "STOPPET": - return t("utbetalinger:stoppet") + " "; - case "PLANLAGT_UTBETALING": - return t("utbetalinger:planlagt") + " "; - case "UTBETALT": - return t("utbetalinger:utbetalt") + " "; + case ManedUtbetalingStatus.STOPPET: + return "stoppet"; + case ManedUtbetalingStatus.PLANLAGT_UTBETALING: + return "planlagt"; + case ManedUtbetalingStatus.UTBETALT: + return "utbetalt"; default: - if (!status?.toLowerCase) { - logger.error("Status is not a string in statusToTekst? Status: " + status); - } - return status?.toLowerCase?.() + " " ?? "Ingen status"; + if (!status?.toLowerCase) logger.error("Status is not a string in statusToTekst? Status: " + status); + return status?.toLowerCase?.() ?? "Ingen status"; } } @@ -51,29 +49,19 @@ const UtbetalingAccordionItem = ({ }) => { const { t, i18n } = useTranslation("utbetalinger"); const erStoppet = status === ManedUtbetalingStatus.STOPPET; - + const dato = utbetalingsdato ?? forfallsdato; + const datoStreng = dato ? getDayAndMonth(dato, i18n.language) : t("ukjentDato"); return ( <> -
-
- +
+
+ {hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} - {erStoppet ? ( - <>{t("utbetalinger:stoppet")} - ) : ( - <> - {statusToTekst(t, status)} - {utbetalingsdato - ? getDayAndMonth(utbetalingsdato, i18n.language) - : forfallsdato - ? getDayAndMonth(forfallsdato, i18n.language) - : t("ukjentDato")} - - )} + {t(statusToTekst(status))} {erStoppet ? null : datoStreng}
@@ -83,19 +71,19 @@ const UtbetalingAccordionItem = ({
- + {fom && tom && ( <> - {t("periode")} + {t("periode")} {formatDato(fom, i18n.language)} - {formatDato(tom, i18n.language)} )} <> - {t("mottaker")} + {t("mottaker")} {annenMottaker ? ( - + {mottaker} ) : ( @@ -110,8 +98,8 @@ const UtbetalingAccordionItem = ({ logButtonOrLinkClick("Åpner søknaden fra utbetalingen")} > diff --git a/src/utbetalinger/beta/tabs/manedgruppe.module.css b/src/utbetalinger/beta/tabs/manedgruppe.module.css deleted file mode 100644 index c3312e75..00000000 --- a/src/utbetalinger/beta/tabs/manedgruppe.module.css +++ /dev/null @@ -1,54 +0,0 @@ -.month_group { - margin-bottom: 40px; -} - -.uthevetTekst { - font-weight: bold; -} -.capitalize { - text-transform: capitalize; -} -.monthYear_header { - margin-bottom: 4px; -} - -.stoppetTekst { - margin-right: 8px; -} - -.accordion_headerContent { - display: flex; - gap: 8px; - flex-direction: row; - align-items: center; -} - -.float_left { - display: flex; - flex-wrap: wrap; - gap: 8px; - max-width: 80%; -} -.accordion_headerContent > .float_right { - margin-left: auto; -} - -.accordion_headerContent s { - color: var(--a-text-subtle); -} - -.accordion_header { - align-items: center; -} -.accordion_header > span:nth-child(2) { - width: 100%; -} - -.accordion_content { - padding-top: 8px; -} -.soknadLenke { - align-items: center; - gap: 8px; - display: flex; -} From cf559a42656d4b325029c07ecd3c61dbfe6401d3 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 18:12:27 +0100 Subject: [PATCH 032/112] Forenkler i18n for utbetalingsstatus --- public/locales/en/utbetalinger.json | 7 ++++--- public/locales/nb/utbetalinger.json | 7 ++++--- public/locales/nn/utbetalinger.json | 7 ++++--- .../beta/tabs/UtbetalingAccordionItem.tsx | 18 ++---------------- 4 files changed, 14 insertions(+), 25 deletions(-) diff --git a/public/locales/en/utbetalinger.json b/public/locales/en/utbetalinger.json index 68537daa..e76192a1 100644 --- a/public/locales/en/utbetalinger.json +++ b/public/locales/en/utbetalinger.json @@ -27,9 +27,10 @@ "feil.ingen.filter":"We could not find any payments for selected filtering", "feil.ingen.default.tidligere":"We could not find any payments for the last 15 months", "feil.ingen.default.nye":"We could not find any payments for current or coming months", - "stoppet": "Stopped", - "planlagt": "Planned", - "utbetalt" : "Paid", + "utbetalingStatus.STOPPET": "Stopped", + "utbetalingStatus.PLANLAGT_UTBETALING": "Planned", + "utbetalingStatus.UTBETALT": "Paid", + "utbetalingStatus.ANNULLERT": "Annulled", "periode" : "Period", "mottaker" : "Recipient", "tilDeg": "To you", diff --git a/public/locales/nb/utbetalinger.json b/public/locales/nb/utbetalinger.json index fa37c177..0fe65959 100644 --- a/public/locales/nb/utbetalinger.json +++ b/public/locales/nb/utbetalinger.json @@ -27,9 +27,10 @@ "feil.ingen.filter":"Vi fant ingen utbetalinger for valgt filtrering", "feil.ingen.default.tidligere":"Vi fant ingen utbetalinger for de siste 15 måneder", "feil.ingen.default.nye":"Vi fant ingen utbetalinger for nåværende eller kommende måneder", - "stoppet": "Stoppet", - "planlagt": "Planlagt", - "utbetalt" : "Utbetalt", + "utbetalingStatus.STOPPET": "Stoppet", + "utbetalingStatus.PLANLAGT_UTBETALING": "Planlagt", + "utbetalingStatus.UTBETALT": "Utbetalt", + "utbetalingStatus.ANNULLERT": "Annullert", "periode" : "Periode", "mottaker" : "Mottaker", "tilDeg": "Til deg", diff --git a/public/locales/nn/utbetalinger.json b/public/locales/nn/utbetalinger.json index 161b118d..73118c78 100644 --- a/public/locales/nn/utbetalinger.json +++ b/public/locales/nn/utbetalinger.json @@ -27,9 +27,10 @@ "feil.ingen.filter":"Vi fann ingen utbetalingar med filteret som er valt", "feil.ingen.default.tidligere":"Vi fann ingen utbetalingar for dei siste 15 månadene", "feil.ingen.default.nye":"Vi fann ingen utbetalingar for inneverande eller komande månader", - "stoppet": "Stoppa", - "planlagt": "Planlagt", - "utbetalt" : "Utbetalt", + "utbetalingStatus.STOPPET": "Stoppa", + "utbetalingStatus.PLANLAGT_UTBETALING": "Planlagt", + "utbetalingStatus.UTBETALT": "Utbetalt", + "utbetalingStatus.ANNULLERT": "Annullert", "periode" : "Periode", "mottaker" : "Mottakar", "tilDeg": "Til deg", diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 3fa7575d..5ffbdc00 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -2,7 +2,6 @@ import { Accordion, BodyShort } from "@navikt/ds-react"; import { FileTextIcon } from "@navikt/aksel-icons"; import { useTranslation } from "next-i18next"; import Link from "next/link"; -import { logger } from "@navikt/next-logger"; import cx from "classnames"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; @@ -12,23 +11,10 @@ import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbet import { ManedUtbetalingStatus } from "../../../generated/model"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; + const onOpenChange = (open: boolean) => logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); -function statusToTekst(status?: ManedUtbetalingStatus) { - switch (status) { - case ManedUtbetalingStatus.STOPPET: - return "stoppet"; - case ManedUtbetalingStatus.PLANLAGT_UTBETALING: - return "planlagt"; - case ManedUtbetalingStatus.UTBETALT: - return "utbetalt"; - default: - if (!status?.toLowerCase) logger.error("Status is not a string in statusToTekst? Status: " + status); - return status?.toLowerCase?.() ?? "Ingen status"; - } -} - const UtbetalingAccordionItem = ({ utbetalingManed: { annenMottaker, @@ -61,7 +47,7 @@ const UtbetalingAccordionItem = ({ {hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} - {t(statusToTekst(status))} {erStoppet ? null : datoStreng} + {t(`utbetalingStatus.${status}` as const)} {erStoppet ? null : datoStreng}
From 5e3118c66fd1058579fac67c6b9b4163f8320546 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 18:36:42 +0100 Subject: [PATCH 033/112] Forenkler UUID-generering og skroter custom datatype --- .../beta/UtbetalingerPanelBeta.tsx | 12 +----------- src/utbetalinger/beta/addIdToUtbetalinger.tsx | 15 --------------- .../beta/filter/useFiltrerteUtbetalinger.ts | 5 ++--- src/utbetalinger/beta/tabs/ManedGruppe.tsx | 18 ++++++++++++++---- .../beta/tabs/UtbetalingAccordionItem.tsx | 7 +++---- src/utbetalinger/beta/tabs/UtbetalingerNye.tsx | 4 ++-- .../beta/tabs/UtbetalingerTidligere.tsx | 7 +++---- 7 files changed, 25 insertions(+), 43 deletions(-) delete mode 100644 src/utbetalinger/beta/addIdToUtbetalinger.tsx diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 841dcf53..414f4a33 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -6,27 +6,17 @@ import HandCoinsIcon from "../../components/ikoner/HandCoins"; import { useHentNyeUtbetalinger } from "../../generated/utbetalinger-controller/utbetalinger-controller"; import { logAmplitudeEvent } from "../../utils/amplitude"; import useIsMobile from "../../utils/useIsMobile"; -import { ManedUtbetaling, NyeOgTidligereUtbetalingerResponse } from "../../generated/model"; import styles from "./utbetalinger.module.css"; import useFiltrerteUtbetalinger from "./filter/useFiltrerteUtbetalinger"; import UtbetalingerNye from "./tabs/UtbetalingerNye"; import { UtbetalingerTidligere } from "./tabs/UtbetalingerTidligere"; import FilterModal from "./filter/FilterModal"; -import { addIdToUtbetalinger } from "./addIdToUtbetalinger"; const TAB_UTBETALINGER = "Utbetalinger" as const; const TAB_TIDLIGERE = "Tidligere utbetalinger" as const; type UtbetalingTab = typeof TAB_UTBETALINGER | typeof TAB_TIDLIGERE; -export interface UtbetalingMedId extends ManedUtbetaling { - id: string; -} - -export interface UtbetalingerResponseMedId extends Omit { - utbetalingerForManed: UtbetalingMedId[]; -} - const UtbetalingerPanelBeta = () => { const [nyeLogged, setNyeLogged] = useState(false); @@ -34,7 +24,7 @@ const UtbetalingerPanelBeta = () => { const { t } = useTranslation("utbetalinger"); - const { data: nye, isLoading, isError } = useHentNyeUtbetalinger({ query: { select: addIdToUtbetalinger } }); + const { data: nye, isLoading, isError } = useHentNyeUtbetalinger(); useEffect(() => { if (!nyeLogged && nye?.length) { diff --git a/src/utbetalinger/beta/addIdToUtbetalinger.tsx b/src/utbetalinger/beta/addIdToUtbetalinger.tsx deleted file mode 100644 index 11405e4c..00000000 --- a/src/utbetalinger/beta/addIdToUtbetalinger.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { NyeOgTidligereUtbetalingerResponse } from "../../generated/model"; - -import { UtbetalingMedId } from "./UtbetalingerPanelBeta"; - -const leggIdPaaUtbetalingerForManed = (item: NyeOgTidligereUtbetalingerResponse): UtbetalingMedId[] => - item.utbetalingerForManed.map((utbetaling) => ({ - ...utbetaling, - id: crypto.randomUUID(), - })); -// Legg på en id på hver utbetaling -export const addIdToUtbetalinger = (data: NyeOgTidligereUtbetalingerResponse[]) => - data.map((item) => ({ - ...item, - utbetalingerForManed: leggIdPaaUtbetalingerForManed(item), - })); diff --git a/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts b/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts index a32cda12..bcf047f1 100644 --- a/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts +++ b/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts @@ -1,8 +1,7 @@ import React from "react"; import { isAfter, isBefore, isEqual } from "date-fns"; -import { ManedUtbetaling } from "../../../generated/model"; -import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; +import { ManedUtbetaling, NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; import { FilterKey, MottakerFilter, useFilter } from "./FilterContext"; @@ -31,7 +30,7 @@ export const filterMatch = (utbetaling: ManedUtbetaling, filter: FilterKey) => { return matchMottaker && matchTil && matchFra; }; -const useFiltrerteUtbetalinger = (utbetalinger: UtbetalingerResponseMedId[]) => { +const useFiltrerteUtbetalinger = (utbetalinger: NyeOgTidligereUtbetalingerResponse[]) => { const { filter } = useFilter(); return React.useMemo(() => { diff --git a/src/utbetalinger/beta/tabs/ManedGruppe.tsx b/src/utbetalinger/beta/tabs/ManedGruppe.tsx index bcea8077..24bdac30 100644 --- a/src/utbetalinger/beta/tabs/ManedGruppe.tsx +++ b/src/utbetalinger/beta/tabs/ManedGruppe.tsx @@ -1,8 +1,9 @@ import { Accordion, BodyShort } from "@navikt/ds-react"; import { I18n, useTranslation } from "next-i18next"; import { set } from "date-fns"; +import { useMemo } from "react"; -import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; +import { NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; import UtbetalingAccordionItem from "./UtbetalingAccordionItem"; @@ -12,18 +13,27 @@ const getMonthYearString = (i18n: I18n, date: Date) => export const ManedGruppe = ({ utbetalingSak: { ar, maned, utbetalingerForManed }, }: { - utbetalingSak: UtbetalingerResponseMedId; + utbetalingSak: NyeOgTidligereUtbetalingerResponse; }) => { const { i18n } = useTranslation(); + const withIds = useMemo( + () => + utbetalingerForManed.map((utbetaling) => ({ + ...utbetaling, + uuid: crypto.randomUUID(), + })), + [utbetalingerForManed] + ); + return (
{getMonthYearString(i18n, set(new Date(0), { year: ar, month: maned - 1 }))} - {utbetalingerForManed.map((utbetalingManed) => ( - + {withIds.map((utbetaling) => ( + ))}
diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 5ffbdc00..628ef157 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -6,9 +6,8 @@ import cx from "classnames"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; import { formatCurrency, formatDato, getDayAndMonth } from "../../../utils/formatting"; -import { UtbetalingMedId } from "../UtbetalingerPanelBeta"; import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbetalingerUtils"; -import { ManedUtbetalingStatus } from "../../../generated/model"; +import { type ManedUtbetaling, ManedUtbetalingStatus } from "../../../generated/model"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; @@ -16,7 +15,7 @@ const onOpenChange = (open: boolean) => logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); const UtbetalingAccordionItem = ({ - utbetalingManed: { + utbetaling: { annenMottaker, belop, fiksDigisosId, @@ -31,7 +30,7 @@ const UtbetalingAccordionItem = ({ utbetalingsmetode, }, }: { - utbetalingManed: UtbetalingMedId; + utbetaling: ManedUtbetaling; }) => { const { t, i18n } = useTranslation("utbetalinger"); const erStoppet = status === ManedUtbetalingStatus.STOPPET; diff --git a/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx b/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx index 338cb693..69a52d2c 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx @@ -3,7 +3,7 @@ import { Alert } from "@navikt/ds-react"; import { useTranslation } from "next-i18next"; import { useFilter } from "../filter/FilterContext"; -import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; +import { NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; import { ManedGruppe } from "./ManedGruppe"; import { UtbetalingerLoadingWrapper } from "./UtbetalingerLoadingWrapper"; @@ -13,7 +13,7 @@ const UtbetalingerNye = ({ isError, isLoading, }: { - utbetalinger: UtbetalingerResponseMedId[]; + utbetalinger: NyeOgTidligereUtbetalingerResponse[]; isLoading: boolean; isError: boolean; }) => { diff --git a/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx b/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx index e2cc2676..32d63840 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx @@ -5,14 +5,13 @@ import { useTranslation } from "next-i18next"; import { useHentTidligereUtbetalinger } from "../../../generated/utbetalinger-controller/utbetalinger-controller"; import useFiltrerteUtbetalinger from "../filter/useFiltrerteUtbetalinger"; import { useFilter } from "../filter/FilterContext"; -import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; -import { addIdToUtbetalinger } from "../addIdToUtbetalinger"; +import { NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; import { ManedGruppe } from "./ManedGruppe"; import { UtbetalingerLoadingWrapper } from "./UtbetalingerLoadingWrapper"; export const UtbetalingerTidligere = () => { - const { data, isLoading, isError } = useHentTidligereUtbetalinger({ query: { select: addIdToUtbetalinger } }); + const { data, isLoading, isError } = useHentTidligereUtbetalinger(); const filtrerteTidligere = useFiltrerteUtbetalinger(data ?? []); const { isUsingFilter } = useFilter(); const { t } = useTranslation("utbetalinger"); @@ -20,7 +19,7 @@ export const UtbetalingerTidligere = () => { return ( {filtrerteTidligere?.length ? ( - filtrerteTidligere.map((utbetalingSak: UtbetalingerResponseMedId) => ( + filtrerteTidligere.map((utbetalingSak: NyeOgTidligereUtbetalingerResponse) => ( )) ) : ( From a90a4abb6987ae829774a0e18387662732b70d3e Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 18:42:04 +0100 Subject: [PATCH 034/112] Splitter UtbetalingAccordionHeader ut til egen fil --- .../beta/tabs/UtbetalingAccordionHeader.tsx | 41 +++++++++++++++++++ .../beta/tabs/UtbetalingAccordionItem.tsx | 29 +++---------- 2 files changed, 47 insertions(+), 23 deletions(-) create mode 100644 src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx new file mode 100644 index 00000000..6ff94a54 --- /dev/null +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx @@ -0,0 +1,41 @@ +import { useTranslation } from "next-i18next"; +import { Accordion, BodyShort } from "@navikt/ds-react"; +import cx from "classnames"; + +import { ManedUtbetaling, ManedUtbetalingStatus } from "../../../generated/model"; +import { formatCurrency, getDayAndMonth } from "../../../utils/formatting"; +import { hentUtbetalingTittel } from "../../utbetalingerUtils"; + +export const UtbetalingAccordionHeader = ({ + tittel, + belop, + status, + dato, +}: Pick & { + dato: string | undefined; +}) => { + const { t, i18n } = useTranslation("utbetalinger"); + + const datoStreng = dato ? getDayAndMonth(dato, i18n.language) : t("ukjentDato"); + const erStoppet = status === ManedUtbetalingStatus.STOPPET; + + return ( + +
+
+ + {hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} + + + {t(`utbetalingStatus.${status}` as const)} {erStoppet ? null : datoStreng} + +
+ + + {!erStoppet && {t("opprinneligSum")}} + {formatCurrency(belop, i18n.language)} kr + +
+
+ ); +}; diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 628ef157..7211af0e 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -2,14 +2,14 @@ import { Accordion, BodyShort } from "@navikt/ds-react"; import { FileTextIcon } from "@navikt/aksel-icons"; import { useTranslation } from "next-i18next"; import Link from "next/link"; -import cx from "classnames"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; -import { formatCurrency, formatDato, getDayAndMonth } from "../../../utils/formatting"; -import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbetalingerUtils"; -import { type ManedUtbetaling, ManedUtbetalingStatus } from "../../../generated/model"; +import { formatDato } from "../../../utils/formatting"; +import { hentTekstForUtbetalingsmetode } from "../../utbetalingerUtils"; +import { type ManedUtbetaling } from "../../../generated/model"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; +import { UtbetalingAccordionHeader } from "./UtbetalingAccordionHeader"; const onOpenChange = (open: boolean) => logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); @@ -33,29 +33,12 @@ const UtbetalingAccordionItem = ({ utbetaling: ManedUtbetaling; }) => { const { t, i18n } = useTranslation("utbetalinger"); - const erStoppet = status === ManedUtbetalingStatus.STOPPET; const dato = utbetalingsdato ?? forfallsdato; - const datoStreng = dato ? getDayAndMonth(dato, i18n.language) : t("ukjentDato"); + return ( <> - -
-
- - {hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} - - - {t(`utbetalingStatus.${status}` as const)} {erStoppet ? null : datoStreng} - -
- - - {!erStoppet && {t("opprinneligSum")}} - {formatCurrency(belop, i18n.language)} kr - -
-
+ {fom && tom && ( <> From 98eb57368f3de77f9d45c9b318472d72919206eb Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 18:52:47 +0100 Subject: [PATCH 035/112] Refaktor av utbetalingsmetode for lesbarhet --- src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx | 8 ++------ src/utbetalinger/utbetalingerUtils.ts | 10 ++++++---- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 7211af0e..5132f036 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; import { formatDato } from "../../../utils/formatting"; -import { hentTekstForUtbetalingsmetode } from "../../utbetalingerUtils"; +import { utbetalingsmetodeText } from "../../utbetalingerUtils"; import { type ManedUtbetaling } from "../../../generated/model"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; @@ -56,11 +56,7 @@ const UtbetalingAccordionItem = ({ ) : ( - {`${t("tilDeg")} (${hentTekstForUtbetalingsmetode( - utbetalingsmetode ?? "", - i18n - )} ${kontonummer}) - `} + {t("tilDeg")} {utbetalingsmetodeText(utbetalingsmetode, i18n)} {kontonummer} )} diff --git a/src/utbetalinger/utbetalingerUtils.ts b/src/utbetalinger/utbetalingerUtils.ts index 6ae7a50e..6831491d 100644 --- a/src/utbetalinger/utbetalingerUtils.ts +++ b/src/utbetalinger/utbetalingerUtils.ts @@ -3,9 +3,11 @@ import { i18n } from "i18next"; const hentUtbetalingTittel = (tittel: string, defaultTittel: string) => tittel && tittel !== "default_utbetalinger_tittel" ? tittel : defaultTittel; -const hentTekstForUtbetalingsmetode = (utbetalingsmetode: string, i18n: i18n) => - i18n.exists(`utbetalingsmetode.${utbetalingsmetode.toLowerCase()}`) - ? i18n.t(`utbetalingsmetode.${utbetalingsmetode.toLowerCase()}`) +const utbetalingsmetodeText = (utbetalingsmetode: string | undefined, i18n: i18n) => { + if (!utbetalingsmetode) return null; + return i18n.exists(`utbetalingsmetode.${utbetalingsmetode?.toLowerCase()}`) + ? i18n.t(`utbetalingsmetode.${utbetalingsmetode?.toLowerCase()}`) : utbetalingsmetode; +}; -export { hentUtbetalingTittel, hentTekstForUtbetalingsmetode }; +export { hentUtbetalingTittel, utbetalingsmetodeText }; From 5fa25e228678cb003bc77b92b0a0147ab8a3e9e1 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 18:53:51 +0100 Subject: [PATCH 036/112] =?UTF-8?q?Fjerner=20to=20niv=C3=A5er=20med=20no-o?= =?UTF-8?q?p=20JSX-fragments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beta/tabs/UtbetalingAccordionItem.tsx | 62 +++++++++---------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 5132f036..bdf3c725 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -36,42 +36,38 @@ const UtbetalingAccordionItem = ({ const dato = utbetalingsdato ?? forfallsdato; return ( - <> - - - - {fom && tom && ( - <> - {t("periode")} - - {formatDato(fom, i18n.language)} - {formatDato(tom, i18n.language)} - - - )} + + + + {fom && tom && ( <> - {t("mottaker")} - {annenMottaker ? ( - - {mottaker} - - ) : ( - - {t("tilDeg")} {utbetalingsmetodeText(utbetalingsmetode, i18n)} {kontonummer} - - )} + {t("periode")} + + {formatDato(fom, i18n.language)} - {formatDato(tom, i18n.language)} + + )} + {t("mottaker")} + {annenMottaker ? ( + + {mottaker} + + ) : ( + + {t("tilDeg")} {utbetalingsmetodeText(utbetalingsmetode, i18n)} {kontonummer} + + )} - logButtonOrLinkClick("Åpner søknaden fra utbetalingen")} - > - - {t("soknadLenke")} - - - - + logButtonOrLinkClick("Åpner søknaden fra utbetalingen")} + > + + {t("soknadLenke")} + + + ); }; export default UtbetalingAccordionItem; From 9ad79d1b071176b1f0a7d844db912d2b162dfcc3 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 19:09:59 +0100 Subject: [PATCH 037/112] Splitter UtbetalingAccordionContent til egen fil, inliner AccordionItem --- src/utbetalinger/beta/tabs/ManedGruppe.tsx | 45 ++++++++++-- .../beta/tabs/UtbetalingAccordionContent.tsx | 56 ++++++++++++++ .../beta/tabs/UtbetalingAccordionItem.tsx | 73 ------------------- 3 files changed, 93 insertions(+), 81 deletions(-) create mode 100644 src/utbetalinger/beta/tabs/UtbetalingAccordionContent.tsx delete mode 100644 src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx diff --git a/src/utbetalinger/beta/tabs/ManedGruppe.tsx b/src/utbetalinger/beta/tabs/ManedGruppe.tsx index 24bdac30..ce274530 100644 --- a/src/utbetalinger/beta/tabs/ManedGruppe.tsx +++ b/src/utbetalinger/beta/tabs/ManedGruppe.tsx @@ -1,14 +1,17 @@ import { Accordion, BodyShort } from "@navikt/ds-react"; -import { I18n, useTranslation } from "next-i18next"; +import { useTranslation } from "next-i18next"; import { set } from "date-fns"; import { useMemo } from "react"; import { NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; +import { logAmplitudeEvent } from "../../../utils/amplitude"; -import UtbetalingAccordionItem from "./UtbetalingAccordionItem"; +import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; +import { UtbetalingAccordionHeader } from "./UtbetalingAccordionHeader"; +import { UtbetalingAccordionContent } from "./UtbetalingAccordionContent"; -const getMonthYearString = (i18n: I18n, date: Date) => - date.toLocaleString(i18n.language, { month: "long", year: "numeric" }); +export const onOpenChange = (open: boolean) => + logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); export const ManedGruppe = ({ utbetalingSak: { ar, maned, utbetalingerForManed }, @@ -17,7 +20,7 @@ export const ManedGruppe = ({ }) => { const { i18n } = useTranslation(); - const withIds = useMemo( + const utbetalingerMedId = useMemo( () => utbetalingerForManed.map((utbetaling) => ({ ...utbetaling, @@ -29,11 +32,37 @@ export const ManedGruppe = ({ return (
- {getMonthYearString(i18n, set(new Date(0), { year: ar, month: maned - 1 }))} + {set(new Date(0), { + year: ar, + month: maned - 1, + }).toLocaleString(i18n.language, { + month: "long", + year: "numeric", + })} - {withIds.map((utbetaling) => ( - + {utbetalingerMedId.map((utbetaling) => ( + + + + ))}
diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionContent.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionContent.tsx new file mode 100644 index 00000000..9e1fa135 --- /dev/null +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionContent.tsx @@ -0,0 +1,56 @@ +import { useTranslation } from "next-i18next"; +import { Accordion, BodyShort } from "@navikt/ds-react"; +import Link from "next/link"; +import { FileTextIcon } from "@navikt/aksel-icons"; + +import type { ManedUtbetaling } from "../../../generated/model"; +import { formatDato } from "../../../utils/formatting"; +import { utbetalingsmetodeText } from "../../utbetalingerUtils"; +import { logButtonOrLinkClick } from "../../../utils/amplitude"; + +export const UtbetalingAccordionContent = ({ + fom, + tom, + mottaker, + annenMottaker, + utbetalingsmetode, + kontonummer, + fiksDigisosId, +}: Pick< + ManedUtbetaling, + "fom" | "tom" | "mottaker" | "annenMottaker" | "utbetalingsmetode" | "kontonummer" | "fiksDigisosId" +>) => { + const { t, i18n } = useTranslation("utbetalinger"); + + return ( + + {fom && tom && ( + <> + {t("periode")} + + {formatDato(fom, i18n.language)} - {formatDato(tom, i18n.language)} + + + )} + {t("mottaker")} + {annenMottaker ? ( + + {mottaker} + + ) : ( + + {t("tilDeg")} {utbetalingsmetodeText(utbetalingsmetode, i18n)} {kontonummer} + + )} + + logButtonOrLinkClick("Åpner søknaden fra utbetalingen")} + > + + {t("soknadLenke")} + + + ); +}; diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx deleted file mode 100644 index bdf3c725..00000000 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { Accordion, BodyShort } from "@navikt/ds-react"; -import { FileTextIcon } from "@navikt/aksel-icons"; -import { useTranslation } from "next-i18next"; -import Link from "next/link"; - -import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; -import { formatDato } from "../../../utils/formatting"; -import { utbetalingsmetodeText } from "../../utbetalingerUtils"; -import { type ManedUtbetaling } from "../../../generated/model"; - -import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; -import { UtbetalingAccordionHeader } from "./UtbetalingAccordionHeader"; - -const onOpenChange = (open: boolean) => - logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); - -const UtbetalingAccordionItem = ({ - utbetaling: { - annenMottaker, - belop, - fiksDigisosId, - fom, - forfallsdato, - kontonummer, - mottaker, - status, - tittel, - tom, - utbetalingsdato, - utbetalingsmetode, - }, -}: { - utbetaling: ManedUtbetaling; -}) => { - const { t, i18n } = useTranslation("utbetalinger"); - const dato = utbetalingsdato ?? forfallsdato; - - return ( - - - - {fom && tom && ( - <> - {t("periode")} - - {formatDato(fom, i18n.language)} - {formatDato(tom, i18n.language)} - - - )} - {t("mottaker")} - {annenMottaker ? ( - - {mottaker} - - ) : ( - - {t("tilDeg")} {utbetalingsmetodeText(utbetalingsmetode, i18n)} {kontonummer} - - )} - - logButtonOrLinkClick("Åpner søknaden fra utbetalingen")} - > - - {t("soknadLenke")} - - - - ); -}; -export default UtbetalingAccordionItem; From e56bddb7070b8f8defe0f03035203ae862c38077 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Tue, 21 Jan 2025 13:07:11 +0100 Subject: [PATCH 038/112] CSS-fixes for UtbetalingAccordionHeader.tsx --- .../beta/tabs/UtbetalingAccordionHeader.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx index 6ff94a54..40f60e6d 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx @@ -3,7 +3,7 @@ import { Accordion, BodyShort } from "@navikt/ds-react"; import cx from "classnames"; import { ManedUtbetaling, ManedUtbetalingStatus } from "../../../generated/model"; -import { formatCurrency, getDayAndMonth } from "../../../utils/formatting"; +import { getDayAndMonth } from "../../../utils/formatting"; import { hentUtbetalingTittel } from "../../utbetalingerUtils"; export const UtbetalingAccordionHeader = ({ @@ -20,9 +20,9 @@ export const UtbetalingAccordionHeader = ({ const erStoppet = status === ManedUtbetalingStatus.STOPPET; return ( - -
-
+ +
+
{hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} @@ -31,9 +31,9 @@ export const UtbetalingAccordionHeader = ({
- + {!erStoppet && {t("opprinneligSum")}} - {formatCurrency(belop, i18n.language)} kr + {new Intl.NumberFormat(i18n.language).format(belop)} kr
From 4909173bd5460f4cbfbe38077e883861428b5226 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Tue, 21 Jan 2025 13:25:00 +0100 Subject: [PATCH 039/112] Overhaling av utbetaling-filter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fremdeles noen bugs her, så dette bør anses som en checkpoint commit --- public/locales/en/utbetalinger.json | 4 +- public/locales/nb/utbetalinger.json | 4 +- public/locales/nn/utbetalinger.json | 4 +- .../beta/UtbetalingerPanelBeta.tsx | 2 +- .../beta/filter/FilterContext.tsx | 76 ++++++------- .../beta/filter/FilterDatePicker.tsx | 57 ++++++++++ src/utbetalinger/beta/filter/FilterModal.tsx | 36 +++--- .../beta/filter/UtbetalingerFilter.tsx | 107 +++++------------- src/utbetalinger/beta/filter/useChips.tsx | 80 ++++--------- .../beta/filter/useFiltrerteUtbetalinger.ts | 64 +++++------ .../beta/filter/utbetalingerFilter.test.tsx | 18 +-- .../beta/tabs/UtbetalingerNye.tsx | 6 +- .../beta/tabs/UtbetalingerTidligere.tsx | 6 +- src/utils/formatting.ts | 5 +- 14 files changed, 218 insertions(+), 251 deletions(-) create mode 100644 src/utbetalinger/beta/filter/FilterDatePicker.tsx diff --git a/public/locales/en/utbetalinger.json b/public/locales/en/utbetalinger.json index e76192a1..45bcc7cf 100644 --- a/public/locales/en/utbetalinger.json +++ b/public/locales/en/utbetalinger.json @@ -14,8 +14,8 @@ "filter.format":"(dd.mm.yyyy)", "filter.mottaker":"Select recipient", "filter.alle":"All", - "filter.minKonto":"To me", - "filter.annen":"To other recipients", + "filter.mottaker.minKonto":"To me", + "filter.mottaker.annenMottaker":"To other recipients", "filter.ugylding":"The date should be in the format dd.mm.yyyy", "filter.tidligstFra":"The earliest search date is 15 months back", "filter.fraEtterTil":"The From date cannot be after the To date", diff --git a/public/locales/nb/utbetalinger.json b/public/locales/nb/utbetalinger.json index 0fe65959..54fd952f 100644 --- a/public/locales/nb/utbetalinger.json +++ b/public/locales/nb/utbetalinger.json @@ -14,8 +14,8 @@ "filter.format":"(dd.mm.åååå)", "filter.mottaker":"Velg mottaker", "filter.alle":"Alle", - "filter.minKonto":"Til meg", - "filter.annen":"Til andre mottakere", + "filter.mottaker.minKonto":"Til meg", + "filter.mottaker.annenMottaker":"Til andre mottakere", "filter.ugylding":"Datoen må være i formatet dd.mm.åååå", "filter.tidligstFra":"Tidligste søkedato er 15 måneder tilbake i tid", "filter.fraEtterTil":"Fra-dato kan ikke være etter til-dato", diff --git a/public/locales/nn/utbetalinger.json b/public/locales/nn/utbetalinger.json index 73118c78..aa0805eb 100644 --- a/public/locales/nn/utbetalinger.json +++ b/public/locales/nn/utbetalinger.json @@ -14,8 +14,8 @@ "filter.format":"(dd.mm.åååå)", "filter.mottaker":"Vel mottakar", "filter.alle":"Alle", - "filter.minKonto":"Til meg", - "filter.annen":"Til andre mottakarar", + "filter.mottaker.minKonto":"Til meg", + "filter.mottaker.annenMottaker":"Til andre mottakarar", "filter.ugylding":"Datoen må vere i formatet dd.mm.åååå", "filter.tidligstFra":"Tidlegaste søkjedato er 15 månader bak i tid", "filter.fraEtterTil":"Frå-datoen kan ikkje vere etter til-datoen", diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 414f4a33..b06b5384 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -39,7 +39,7 @@ const UtbetalingerPanelBeta = () => { }); }, [nye, nyeLogged]); - const filtrerteNye = useFiltrerteUtbetalinger(nye ?? []); + const filtrerteNye = useFiltrerteUtbetalinger(nye); const logTabChange = (tab: string) => logAmplitudeEvent("Klikket tab", { tab }); const isMobile = useIsMobile(); diff --git a/src/utbetalinger/beta/filter/FilterContext.tsx b/src/utbetalinger/beta/filter/FilterContext.tsx index d50add51..e1c96307 100644 --- a/src/utbetalinger/beta/filter/FilterContext.tsx +++ b/src/utbetalinger/beta/filter/FilterContext.tsx @@ -1,19 +1,21 @@ -import React, { PropsWithChildren, useContext, useState } from "react"; - -export enum MottakerFilter { - Alle = "ALLE", - MinKonto = "MIN_KONTO", - AnnenMottaker = "ANNEN_MOTTAKER", -} -export interface FilterKey { - mottaker: MottakerFilter; - fraDato?: Date; - tilDato?: Date; -} +import React, { ReactNode, useContext, useReducer } from "react"; + +import { logAmplitudeEvent } from "../../../utils/amplitude"; + +type Maybe = T | null; + +export type MottakerFilter = "minKonto" | "annenMottaker"; + +export type FilterPredicate = { + mottaker?: Maybe; + fraDato?: Maybe; + tilDato?: Maybe; +}; + type FilterContextType = { - filter: FilterKey; - oppdaterFilter: (nyttFilter: Partial) => void; - isUsingFilter: boolean; + filters: FilterPredicate | null; + setFilter: (nyttFilter: FilterPredicate) => void; + clearFilters: () => void; }; const FilterContext = React.createContext(undefined); @@ -21,34 +23,26 @@ const FilterContext = React.createContext(undefin // Egen hook fordi det sjekkes at den blir brukt riktig, og kan ha undefined som defaultValue export const useFilter = () => { const context = useContext(FilterContext); - if (context === undefined) { - throw new Error("Kan kun brukes innenfor FilterProvider"); - } + if (!context) throw new Error("Kan kun brukes innenfor FilterProvider"); return context; }; -const initialState: FilterKey = { - mottaker: MottakerFilter.Alle, - tilDato: undefined, - fraDato: undefined, -}; -export const FilterProvider = (props: PropsWithChildren) => { - const [filter, setFilter] = useState(initialState); - - const oppdaterFilter = (nyttFilter: Partial) => { - const updatedFilter = { ...filter, ...nyttFilter }; - setFilter(updatedFilter); - }; - - return ( - - {props.children} - +const filterReducer = (state: FilterPredicate | null, action: FilterPredicate) => { + const updates = Object.keys(action).filter((key) => action[key as keyof FilterPredicate] !== undefined); + if (!updates.length) return state; + + updates.map((field) => + logAmplitudeEvent("filtervalg", { kategori: field, filternavn: action[field as keyof FilterPredicate] }) ); + + const newState: FilterPredicate = { ...state, ...action }; + const nonNullFields = Object.values(newState).filter((value) => value !== null); + if (!nonNullFields.length) return null; + return newState; +}; + +export const FilterProvider = ({ children }: { children: ReactNode }) => { + const [filters, setFilter] = useReducer(filterReducer, null); + const clearFilters = () => setFilter({ mottaker: null, fraDato: null, tilDato: null }); + return {children}; }; diff --git a/src/utbetalinger/beta/filter/FilterDatePicker.tsx b/src/utbetalinger/beta/filter/FilterDatePicker.tsx new file mode 100644 index 00000000..02554c3e --- /dev/null +++ b/src/utbetalinger/beta/filter/FilterDatePicker.tsx @@ -0,0 +1,57 @@ +import { useTranslation } from "next-i18next"; +import React, { useState } from "react"; +import { DatePicker, DateValidationT, useDatepicker } from "@navikt/ds-react"; +import { subMonths } from "date-fns"; + +import useIsMobile from "../../../utils/useIsMobile"; + +const validateFromDate = ( + { isAfter, isBefore, isInvalid, isValidDate }: DateValidationT, + fromDate: Date | null | undefined +) => { + if (isBefore) return fromDate ? "filter.tilEtterFra" : "filter.tidligstFra"; + else if (isAfter) return "filter.fraEtterTil"; + else if (isInvalid || !isValidDate) return "filter.ugylding"; + else return undefined; +}; + +export const FilterDatePicker = ({ + label, + fromDate, + toDate, + defaultSelected, + onDateChange, +}: { + label: string; + fromDate?: Date | null; + toDate?: Date | null; + defaultSelected?: Date | null; + onDateChange: (date?: Date) => void; +}) => { + const { t, i18n } = useTranslation("utbetalinger"); + + const isMobile = useIsMobile(); + const [dateError, setDateError] = useState(undefined); + const { datepickerProps, inputProps } = useDatepicker({ + fromDate: fromDate ?? subMonths(new Date(), 15), + toDate: toDate ?? undefined, + defaultSelected: defaultSelected ?? undefined, + onDateChange, + onValidate: (validation) => setDateError(validateFromDate(validation, fromDate)), + }); + + return ( + + + + ); +}; diff --git a/src/utbetalinger/beta/filter/FilterModal.tsx b/src/utbetalinger/beta/filter/FilterModal.tsx index b59e5b27..d7bf0c76 100644 --- a/src/utbetalinger/beta/filter/FilterModal.tsx +++ b/src/utbetalinger/beta/filter/FilterModal.tsx @@ -1,44 +1,48 @@ import { Box, Button, Chips, Modal } from "@navikt/ds-react"; -import React, { useState } from "react"; +import React from "react"; import { FilterIcon } from "@navikt/aksel-icons"; import { useTranslation } from "next-i18next"; import UtbetalingerFilter from "./UtbetalingerFilter"; -import { MottakerFilter, useFilter } from "./FilterContext"; +import { useFilter } from "./FilterContext"; import useChips from "./useChips"; import styles from "./utbetalingerFilter.module.css"; const FilterModal = () => { - const [open, setOpen] = useState(false); - const { oppdaterFilter } = useFilter(); - const { chips, removeChip } = useChips(); + const { clearFilters, setFilter } = useFilter(); + const { chips } = useChips(); const { t } = useTranslation("utbetalinger"); + const dialogRef = React.useRef(null); const onCancel = () => { - oppdaterFilter({ mottaker: MottakerFilter.Alle, fraDato: undefined, tilDato: undefined }); - setOpen(false); + clearFilters(); + dialogRef.current?.close(); }; return ( <> - - {chips.length > 0 ? ( + {!chips.length ? ( + + ) : ( - {chips.map((c) => ( - removeChip(c.filterType)}> - {c.label} + {chips.map(({ filterType, label }) => ( + setFilter({ [filterType]: null })}> + {label} ))} - ) : ( - )} - setOpen(false)} className={styles.modal}> + - + diff --git a/src/utbetalinger/beta/filter/UtbetalingerFilter.tsx b/src/utbetalinger/beta/filter/UtbetalingerFilter.tsx index 7f0814ee..c78b9f7c 100644 --- a/src/utbetalinger/beta/filter/UtbetalingerFilter.tsx +++ b/src/utbetalinger/beta/filter/UtbetalingerFilter.tsx @@ -1,95 +1,40 @@ -import React, { useState } from "react"; -import { DatePicker, Fieldset, Radio, RadioGroup, useDatepicker } from "@navikt/ds-react"; +import React from "react"; +import { Fieldset, Radio, RadioGroup } from "@navikt/ds-react"; import { useTranslation } from "next-i18next"; -import useIsMobile from "../../../utils/useIsMobile"; -import { logAmplitudeEvent } from "../../../utils/amplitude"; - import { MottakerFilter, useFilter } from "./FilterContext"; import styles from "./utbetalingerFilter.module.css"; - -function subtractMonths(date: Date, months: number) { - date.setMonth(date.getMonth() - months); - return date; -} +import { FilterDatePicker } from "./FilterDatePicker"; const UtbetalingerFilter = () => { - const { filter, oppdaterFilter } = useFilter(); - const { t, i18n } = useTranslation("utbetalinger"); - - const isMobile = useIsMobile(); - const [fromDateError, setFromDateError] = useState(undefined); - const [toDateError, setToDateError] = useState(undefined); - - const fromDatePicker = useDatepicker({ - fromDate: subtractMonths(new Date(), 15), - toDate: filter.tilDato, - defaultSelected: filter.fraDato, - onDateChange: (dato?) => { - oppdaterFilter({ ...filter, fraDato: dato }); - logAmplitudeEvent("filtervalg", { kategori: "fraDato", filternavn: dato }); - }, - onValidate: (val) => { - if (val.isBefore) setFromDateError(t("filter.tidligstFra")); - else if (val.isAfter) setFromDateError(t("filter.fraEtterTil")); - else if (val.isInvalid) setFromDateError(t("filter.ugylding")); - else if (val.isEmpty) setFromDateError(undefined); - else if (!val.isValidDate) setFromDateError(t("filter.ugylding")); - else setFromDateError(undefined); - }, - }); - const toDatePicker = useDatepicker({ - fromDate: filter.fraDato ? filter.fraDato : subtractMonths(new Date(), 15), - defaultSelected: filter.tilDato, - onDateChange: (dato?) => { - oppdaterFilter({ ...filter, tilDato: dato }); - logAmplitudeEvent("filtervalg", { kategori: "tilDato", filternavn: dato }); - }, - onValidate: (val) => { - if (val.isBefore) setToDateError(filter.fraDato ? t("filter.tilEtterFra") : t("filter.tidligstFra")); - else if (val.isInvalid) setToDateError(t("filter.ugylding")); - else if (val.isEmpty) setToDateError(undefined); - else if (!val.isValidDate) setToDateError(t("filter.ugylding")); - else setToDateError(undefined); - }, - }); + const { t } = useTranslation("utbetalinger"); + const { filters, setFilter } = useFilter(); + const { fraDato, mottaker, tilDato } = filters || {}; - const onMottakerChanged = (value: MottakerFilter) => { - oppdaterFilter({ ...filter, mottaker: value }); - logAmplitudeEvent("filtervalg", { kategori: "mottaker", filternavn: value }); - }; return (
- - - - - - + setFilter({ fraDato })} + /> + setFilter({ tilDato })} + />
- - {t("filter.alle")} - {t("filter.minKonto")} - {t("filter.annen")} + setFilter({ mottaker })} + > + {t("filter.alle")} + {t("filter.minKonto")} + {t("filter.annen")}
); diff --git a/src/utbetalinger/beta/filter/useChips.tsx b/src/utbetalinger/beta/filter/useChips.tsx index 227c6d3f..425656b3 100644 --- a/src/utbetalinger/beta/filter/useChips.tsx +++ b/src/utbetalinger/beta/filter/useChips.tsx @@ -1,68 +1,38 @@ -import { useCallback, useEffect, useState } from "react"; +import { useMemo } from "react"; import { useTranslation } from "next-i18next"; -import { i18n } from "i18next"; import { dateToDDMMYYYY } from "../../../utils/formatting"; -import { MottakerFilter, useFilter } from "./FilterContext"; +import { FilterPredicate, useFilter } from "./FilterContext"; -const mottakerFilterToChip = (value: MottakerFilter, t: (key: string) => string) => { - switch (value) { - case MottakerFilter.Alle: - return undefined; - case MottakerFilter.MinKonto: - return { label: t("utbetalinger:filter.minKonto"), filterType: "mottaker" } as ChipType; - case MottakerFilter.AnnenMottaker: - return { label: t("utbetalinger:filter.annen"), filterType: "mottaker" } as ChipType; - } -}; -const datoFilterToChip = (i18n: i18n, fom?: Date, tom?: Date) => { - if (fom && tom) { - return { - label: `${dateToDDMMYYYY(i18n.language, fom)} - ${dateToDDMMYYYY(i18n.language, tom)}`, - filterType: "dato", - } as ChipType; - } else if (fom) { - return { - label: `${i18n.t("utbetalinger:filter.fra")}: ${dateToDDMMYYYY(i18n.language, fom)}`, - filterType: "dato", - } as ChipType; - } else if (tom) { - return { - label: `${i18n.t("utbetalinger:filter.til")}: ${dateToDDMMYYYY(i18n.language, tom)}`, - filterType: "dato", - } as ChipType; - } - return undefined; +type ChipType = { + label: string; + filterType: keyof FilterPredicate; }; -type FilterType = "mottaker" | "dato"; -interface ChipType { - label: string; - filterType: FilterType; -} const useChips = () => { - const [chips, setChips] = useState([]); - const { filter, oppdaterFilter } = useFilter(); - const { t, i18n } = useTranslation(); + const { fraDato, mottaker, tilDato } = useFilter().filters || {}; + const translation = useTranslation("utbetalinger"); - const removeChip = useCallback( - (type: FilterType) => { - if (type === "mottaker") { - oppdaterFilter({ ...filter, mottaker: MottakerFilter.Alle }); - } else if (type === "dato") { - oppdaterFilter({ ...filter, tilDato: undefined, fraDato: undefined }); - } - }, - [filter, oppdaterFilter] + const chips: ChipType[] = useMemo( + () => + [ + fraDato && { + label: `${translation.t("filter.fra")}: ${dateToDDMMYYYY(translation.i18n.language, fraDato)}`, + filterType: "fraDato", + }, + tilDato && { + label: `${translation.t("filter.fra")}: ${dateToDDMMYYYY(translation.i18n.language, tilDato)}`, + filterType: "tilDato", + }, + mottaker && { + label: (mottaker: string) => translation.t(`filter.${mottaker}` as const), + filterType: "mottaker", + }, + ].filter(Boolean) as ChipType[], + [fraDato, tilDato, mottaker, translation] ); - useEffect(() => { - const mottaker: ChipType | undefined = mottakerFilterToChip(filter.mottaker, t); - const dato = datoFilterToChip(i18n, filter.fraDato, filter.tilDato); - // remove empty string - setChips([mottaker, dato].filter(Boolean) as ChipType[]); - }, [filter, i18n, t]); - return { chips, removeChip }; + return { chips }; }; export default useChips; diff --git a/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts b/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts index bcf047f1..5589cb76 100644 --- a/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts +++ b/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts @@ -1,48 +1,48 @@ import React from "react"; -import { isAfter, isBefore, isEqual } from "date-fns"; +import { isAfter, isBefore } from "date-fns"; import { ManedUtbetaling, NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; -import { FilterKey, MottakerFilter, useFilter } from "./FilterContext"; +import { FilterPredicate, useFilter } from "./FilterContext"; -const stringToDateWithoutTimezone = (datoString: string) => { - const dateWithTimesone = new Date(datoString); - return new Date(dateWithTimesone.toISOString().slice(0, -1)); -}; +const stringToDateWithoutTimezone = (datoString: string) => new Date(new Date(datoString).toISOString().slice(0, -1)); -export const filterMatch = (utbetaling: ManedUtbetaling, filter: FilterKey) => { +export const filterMatch = ( + { annenMottaker, forfallsdato, utbetalingsdato }: ManedUtbetaling, + filters: FilterPredicate | null +) => { + if (!filters) return true; + const { fraDato, tilDato, mottaker } = filters; let matchMottaker; - if (filter.mottaker === MottakerFilter.Alle) { - matchMottaker = true; - } else if (filter.mottaker === MottakerFilter.AnnenMottaker) { - matchMottaker = utbetaling.annenMottaker; - } else { - matchMottaker = !utbetaling.annenMottaker; - } + if (!mottaker) matchMottaker = true; + else if (mottaker === "annenMottaker") matchMottaker = annenMottaker; + else matchMottaker = !annenMottaker; // Hvis vi ikke har dato-filter eller utbetalingsdato/forfallsdato, trenger vi ikke sjekke datofilteret. - if ((!utbetaling.utbetalingsdato && !utbetaling.forfallsdato) || (!filter.tilDato && !filter.fraDato)) - return matchMottaker; + if ((!utbetalingsdato && !forfallsdato) || (!tilDato && !fraDato)) return matchMottaker; - const dato = stringToDateWithoutTimezone(utbetaling.utbetalingsdato ?? utbetaling.forfallsdato!); - const matchFra = filter.fraDato ? isAfter(dato, filter.fraDato) || isEqual(dato, filter.fraDato) : true; - const matchTil = filter.tilDato ? isBefore(dato, filter.tilDato) || isEqual(dato, filter.tilDato) : true; + const dato = stringToDateWithoutTimezone(utbetalingsdato ?? forfallsdato!); + const matchFra = !fraDato ? true : !isBefore(dato, fraDato); + const matchTil = !tilDato ? true : !isAfter(dato, tilDato); return matchMottaker && matchTil && matchFra; }; -const useFiltrerteUtbetalinger = (utbetalinger: NyeOgTidligereUtbetalingerResponse[]) => { - const { filter } = useFilter(); - - return React.useMemo(() => { - return utbetalinger - .map((response) => { - const filtrertPerManed = response.utbetalingerForManed.filter((utbetaling) => { - return filterMatch(utbetaling, filter); - }); - return { ...response, utbetalingerForManed: filtrertPerManed }; - }) - .filter((response) => response.utbetalingerForManed.length > 0); - }, [utbetalinger, filter]); + +const useFiltrerteUtbetalinger = (utbetalinger: NyeOgTidligereUtbetalingerResponse[] | undefined) => { + const { filters } = useFilter(); + + return React.useMemo( + () => + utbetalinger + ?.map((response) => ({ + ...response, + utbetalingerForManed: response.utbetalingerForManed.filter((utbetaling) => + filterMatch(utbetaling, filters) + ), + })) + .filter((response) => response.utbetalingerForManed.length > 0), + [utbetalinger, filters] + ); }; export default useFiltrerteUtbetalinger; diff --git a/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx b/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx index 88ae5b01..277262b6 100644 --- a/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx +++ b/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx @@ -1,7 +1,7 @@ import { ManedUtbetaling } from "../../../generated/model"; import { filterMatch } from "./useFiltrerteUtbetalinger"; -import { MottakerFilter } from "./FilterContext"; +import { FilterPredicate } from "./FilterContext"; describe("filtrering på utbetalinger fungerer", () => { it("skal filtrere dato på fom og tom", () => { @@ -15,22 +15,22 @@ describe("filtrering på utbetalinger fungerer", () => { }; const filterFra = { - mottaker: MottakerFilter.Alle, + mottaker: null, fraDato: new Date(2023, 3, 12), tilDato: undefined, }; const filterFraSenere = { - mottaker: MottakerFilter.Alle, + mottaker: null, fraDato: new Date(2023, 3, 20), tilDato: undefined, }; const filterTil = { - mottaker: MottakerFilter.Alle, + mottaker: null, fraDato: undefined, tilDato: new Date(2023, 3, 12), }; const filterTilTidligere = { - mottaker: MottakerFilter.Alle, + mottaker: null, fraDato: undefined, tilDato: new Date(2023, 3, 10), }; @@ -60,13 +60,13 @@ describe("filtrering på utbetalinger fungerer", () => { fiksDigisosId: "", }; - const filterMeg = { - mottaker: MottakerFilter.MinKonto, + const filterMeg: FilterPredicate = { + mottaker: "minKonto", fraDato: undefined, tilDato: undefined, }; - const filterAnnen = { - mottaker: MottakerFilter.AnnenMottaker, + const filterAnnen: FilterPredicate = { + mottaker: "annenMottaker", fraDato: undefined, tilDato: new Date(2023, 3, 12), }; diff --git a/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx b/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx index 69a52d2c..f5d7d167 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx @@ -13,11 +13,11 @@ const UtbetalingerNye = ({ isError, isLoading, }: { - utbetalinger: NyeOgTidligereUtbetalingerResponse[]; + utbetalinger: NyeOgTidligereUtbetalingerResponse[] | undefined; isLoading: boolean; isError: boolean; }) => { - const { isUsingFilter } = useFilter(); + const { filters } = useFilter(); const { t } = useTranslation("utbetalinger"); return ( @@ -28,7 +28,7 @@ const UtbetalingerNye = ({ )) ) : ( - {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.nye")} + {filters ? t("feil.ingen.filter") : t("feil.ingen.default.nye")} )} diff --git a/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx b/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx index 32d63840..3ce1625c 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx @@ -12,8 +12,8 @@ import { UtbetalingerLoadingWrapper } from "./UtbetalingerLoadingWrapper"; export const UtbetalingerTidligere = () => { const { data, isLoading, isError } = useHentTidligereUtbetalinger(); - const filtrerteTidligere = useFiltrerteUtbetalinger(data ?? []); - const { isUsingFilter } = useFilter(); + const filtrerteTidligere = useFiltrerteUtbetalinger(data); + const { filters } = useFilter(); const { t } = useTranslation("utbetalinger"); return ( @@ -24,7 +24,7 @@ export const UtbetalingerTidligere = () => { )) ) : ( - {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.tidligere")} + {filters ? t("feil.ingen.filter") : t("feil.ingen.default.tidligere")} )} diff --git a/src/utils/formatting.ts b/src/utils/formatting.ts index 85960098..2fe0b196 100644 --- a/src/utils/formatting.ts +++ b/src/utils/formatting.ts @@ -9,9 +9,6 @@ function formatBytes(bytes: number, decimals: number = 2): string { return result.replace(".", ","); } -// Eksempel: formatCurrency(12345) => 12.345 -const formatCurrency = (amount: number, language: string): string => new Intl.NumberFormat(language).format(amount); - // Eksempel: "2019-08-01" => "01. august 2019" export const formatDato = (isoDate: string, language: string) => new Intl.DateTimeFormat(language, { @@ -34,4 +31,4 @@ export const dateToDDMMYYYY = (language: string, dato: Date) => year: "numeric", }).format(dato); -export { formatBytes, formatCurrency }; +export { formatBytes }; From 26f33f5f38e94730ca0db08c69cf439cbfb8637e Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Tue, 21 Jan 2025 15:07:52 +0100 Subject: [PATCH 040/112] Refaktor: fjerner useChips, bruker useFilter direkte, splitter ut FilterChips.tsx --- src/utbetalinger/beta/filter/FilterChips.tsx | 37 +++++++++++++++++++ src/utbetalinger/beta/filter/FilterModal.tsx | 19 +++------- src/utbetalinger/beta/filter/useChips.tsx | 38 -------------------- 3 files changed, 41 insertions(+), 53 deletions(-) create mode 100644 src/utbetalinger/beta/filter/FilterChips.tsx delete mode 100644 src/utbetalinger/beta/filter/useChips.tsx diff --git a/src/utbetalinger/beta/filter/FilterChips.tsx b/src/utbetalinger/beta/filter/FilterChips.tsx new file mode 100644 index 00000000..5cd16437 --- /dev/null +++ b/src/utbetalinger/beta/filter/FilterChips.tsx @@ -0,0 +1,37 @@ +import { useTranslation } from "next-i18next"; +import { Box, Chips } from "@navikt/ds-react"; +import React from "react"; + +import { dateToDDMMYYYY } from "../../../utils/formatting"; + +import styles from "./utbetalingerFilter.module.css"; +import { useFilter } from "./FilterContext"; + +export const FilterChips = () => { + const { filters, setFilter } = useFilter(); + const { t, i18n } = useTranslation("utbetalinger"); + + if (!filters) return ; + + const { fraDato, tilDato, mottaker } = filters; + + return ( + + {fraDato && ( + setFilter({ fraDato: null })}> + {t("filter.fra") + ": " + dateToDDMMYYYY(i18n.language, fraDato)} + + )} + {tilDato && ( + setFilter({ tilDato: null })}> + {t("filter.til") + ": " + dateToDDMMYYYY(i18n.language, tilDato)} + + )} + {mottaker && ( + setFilter({ mottaker: null })}> + {t(`filter.${mottaker}` as const)} + + )} + + ); +}; diff --git a/src/utbetalinger/beta/filter/FilterModal.tsx b/src/utbetalinger/beta/filter/FilterModal.tsx index d7bf0c76..aebe9b15 100644 --- a/src/utbetalinger/beta/filter/FilterModal.tsx +++ b/src/utbetalinger/beta/filter/FilterModal.tsx @@ -1,16 +1,15 @@ -import { Box, Button, Chips, Modal } from "@navikt/ds-react"; +import { Button, Modal } from "@navikt/ds-react"; import React from "react"; import { FilterIcon } from "@navikt/aksel-icons"; import { useTranslation } from "next-i18next"; import UtbetalingerFilter from "./UtbetalingerFilter"; import { useFilter } from "./FilterContext"; -import useChips from "./useChips"; import styles from "./utbetalingerFilter.module.css"; +import { FilterChips } from "./FilterChips"; const FilterModal = () => { - const { clearFilters, setFilter } = useFilter(); - const { chips } = useChips(); + const { clearFilters } = useFilter(); const { t } = useTranslation("utbetalinger"); const dialogRef = React.useRef(null); @@ -28,17 +27,7 @@ const FilterModal = () => { > {t("filter.knapp")} - {!chips.length ? ( - - ) : ( - - {chips.map(({ filterType, label }) => ( - setFilter({ [filterType]: null })}> - {label} - - ))} - - )} + diff --git a/src/utbetalinger/beta/filter/useChips.tsx b/src/utbetalinger/beta/filter/useChips.tsx deleted file mode 100644 index 425656b3..00000000 --- a/src/utbetalinger/beta/filter/useChips.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { useMemo } from "react"; -import { useTranslation } from "next-i18next"; - -import { dateToDDMMYYYY } from "../../../utils/formatting"; - -import { FilterPredicate, useFilter } from "./FilterContext"; - -type ChipType = { - label: string; - filterType: keyof FilterPredicate; -}; - -const useChips = () => { - const { fraDato, mottaker, tilDato } = useFilter().filters || {}; - const translation = useTranslation("utbetalinger"); - - const chips: ChipType[] = useMemo( - () => - [ - fraDato && { - label: `${translation.t("filter.fra")}: ${dateToDDMMYYYY(translation.i18n.language, fraDato)}`, - filterType: "fraDato", - }, - tilDato && { - label: `${translation.t("filter.fra")}: ${dateToDDMMYYYY(translation.i18n.language, tilDato)}`, - filterType: "tilDato", - }, - mottaker && { - label: (mottaker: string) => translation.t(`filter.${mottaker}` as const), - filterType: "mottaker", - }, - ].filter(Boolean) as ChipType[], - [fraDato, tilDato, mottaker, translation] - ); - - return { chips }; -}; -export default useChips; From 3531e75e88d4c8b9450aad1503441321a42bc5bb Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Thu, 23 Jan 2025 13:13:39 +0100 Subject: [PATCH 041/112] =?UTF-8?q?Ajourf=C3=B8rer=20innsyn-api.json=20med?= =?UTF-8?q?=20n=C3=A5v=C3=A6rende=20innsyn-api=20(400-respons)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 400 bad request har på et eller annet tidspunkt dukket opp i openapi-doc, så jeg bare pusher denne til main så mine egne API-endringer blir synligere i en PR --- innsyn-api.json | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/innsyn-api.json b/innsyn-api.json index 910621df..1aa22c08 100644 --- a/innsyn-api.json +++ b/innsyn-api.json @@ -14,6 +14,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -48,6 +49,7 @@ } }, "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -71,6 +73,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -95,6 +98,7 @@ "required": true }, "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/Unit" } } } @@ -110,7 +114,10 @@ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Logg" } } }, "required": true }, - "responses": { "204": { "description": "No Content" } } + "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, + "204": { "description": "No Content" } + } } }, "/api/v1/digisosapi/{fiksDigisosId}/filOpplasting": { @@ -132,6 +139,7 @@ } }, "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { "*/*": { "schema": { "type": "string" } } } } } } @@ -148,6 +156,7 @@ "required": true }, "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { "application/json;charset=UTF-8": { "schema": { "type": "string" } } } @@ -164,6 +173,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -187,6 +197,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/SoknadsStatusResponse" } } } @@ -203,6 +214,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -226,6 +238,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -250,6 +263,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -273,6 +287,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/KommuneResponse" } } } @@ -289,6 +304,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -312,6 +328,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { "application/json;charset=UTF-8": { "schema": { "type": "boolean" } } } @@ -328,6 +345,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ForelopigSvarResponse" } } } @@ -344,6 +362,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { "application/json;charset=UTF-8": { "schema": { "type": "boolean" } } } @@ -360,6 +379,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -384,6 +404,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -412,6 +433,7 @@ } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -434,6 +456,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/TilgangResponse" } } } @@ -449,6 +472,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -472,6 +496,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/SaksDetaljerResponse" } } } @@ -487,6 +512,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -509,6 +535,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { @@ -531,6 +558,7 @@ { "name": "Authorization", "in": "header", "required": true, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { "application/json;charset=UTF-8": { "schema": { "type": "boolean" } } } @@ -547,6 +575,7 @@ { "name": "Authorization", "in": "header", "required": false, "schema": { "type": "string" } } ], "responses": { + "400": { "description": "Bad Request", "content": { "*/*": { "schema": { "type": "object" } } } }, "200": { "description": "OK", "content": { "*/*": { "schema": { "type": "string", "format": "byte" } } } From abefedcb8e9a612cbe294a1dca3ce927eca5f564 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Thu, 23 Jan 2025 13:55:48 +0100 Subject: [PATCH 042/112] Checkpoint commit --- src/pages/utbetaling.tsx | 16 +-- src/utbetalinger/Utbetalinger.testdata.ts | 107 ------------------ src/utbetalinger/UtbetalingerPanel.tsx | 73 ++++++++++++ .../UtbetalingsoversiktIngenInnsyn.tsx | 22 +--- .../beta/UtbetalingerPanelBeta.tsx | 85 -------------- .../beta/filter/FilterContext.tsx | 48 -------- .../beta/filter/useFiltrerteUtbetalinger.ts | 48 -------- .../beta/filter/utbetalingerFilter.module.css | 17 --- .../beta/filter/utbetalingerFilter.test.tsx | 78 ------------- src/utbetalinger/beta/utbetalinger.module.css | 60 ---------- .../{beta => }/filter/FilterChips.tsx | 7 +- .../{beta => }/filter/FilterDatePicker.tsx | 2 +- .../{beta => }/filter/FilterModal.tsx | 7 +- src/utbetalinger/filter/FilterProvider.tsx | 24 ++++ .../{beta => }/filter/UtbetalingerFilter.tsx | 8 +- src/utbetalinger/filter/lib/FilterContext.ts | 21 ++++ .../filter/lib/filterLogAnalytics.test.ts | 41 +++++++ .../filter/lib/filterLogAnalytics.ts | 17 +++ .../filter/lib/filterMatch.test.ts | 28 +++++ src/utbetalinger/filter/lib/filterMatch.ts | 31 +++++ .../filter/lib/filterReducer.test.ts | 18 +++ src/utbetalinger/filter/lib/filterReducer.ts | 5 + .../filter/lib/filterResponses.test.ts | 25 ++++ .../filter/lib/filterResponses.ts | 17 +++ src/utbetalinger/filter/lib/useFilter.ts | 9 ++ .../tabs => }/isLessThanTwoWeeksAgo.test.ts | 0 .../{beta/tabs => }/isLessThanTwoWeeksAgo.ts | 0 .../tabs/UtbetalingAccordionContent.test.tsx | 25 ++++ .../tabs/UtbetalingAccordionContent.tsx | 15 ++- .../tabs/UtbetalingAccordionHeader.tsx | 10 +- .../tabs/UtbetalingerLoadingWrapper.tsx | 2 +- .../UtbetalingerMonthlyList.tsx} | 8 +- .../{beta => }/tabs/UtbetalingerNye.tsx | 11 +- .../{beta => }/tabs/UtbetalingerTidligere.tsx | 20 ++-- src/utbetalinger/utbetalinger.module.css | 6 + src/utbetalinger/utbetalingerUtils.ts | 13 --- 36 files changed, 401 insertions(+), 523 deletions(-) delete mode 100644 src/utbetalinger/Utbetalinger.testdata.ts create mode 100644 src/utbetalinger/UtbetalingerPanel.tsx delete mode 100644 src/utbetalinger/beta/UtbetalingerPanelBeta.tsx delete mode 100644 src/utbetalinger/beta/filter/FilterContext.tsx delete mode 100644 src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts delete mode 100644 src/utbetalinger/beta/filter/utbetalingerFilter.module.css delete mode 100644 src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx delete mode 100644 src/utbetalinger/beta/utbetalinger.module.css rename src/utbetalinger/{beta => }/filter/FilterChips.tsx (84%) rename src/utbetalinger/{beta => }/filter/FilterDatePicker.tsx (97%) rename src/utbetalinger/{beta => }/filter/FilterModal.tsx (87%) create mode 100644 src/utbetalinger/filter/FilterProvider.tsx rename src/utbetalinger/{beta => }/filter/UtbetalingerFilter.tsx (84%) create mode 100644 src/utbetalinger/filter/lib/FilterContext.ts create mode 100644 src/utbetalinger/filter/lib/filterLogAnalytics.test.ts create mode 100644 src/utbetalinger/filter/lib/filterLogAnalytics.ts create mode 100644 src/utbetalinger/filter/lib/filterMatch.test.ts create mode 100644 src/utbetalinger/filter/lib/filterMatch.ts create mode 100644 src/utbetalinger/filter/lib/filterReducer.test.ts create mode 100644 src/utbetalinger/filter/lib/filterReducer.ts create mode 100644 src/utbetalinger/filter/lib/filterResponses.test.ts create mode 100644 src/utbetalinger/filter/lib/filterResponses.ts create mode 100644 src/utbetalinger/filter/lib/useFilter.ts rename src/utbetalinger/{beta/tabs => }/isLessThanTwoWeeksAgo.test.ts (100%) rename src/utbetalinger/{beta/tabs => }/isLessThanTwoWeeksAgo.ts (100%) create mode 100644 src/utbetalinger/tabs/UtbetalingAccordionContent.test.tsx rename src/utbetalinger/{beta => }/tabs/UtbetalingAccordionContent.tsx (76%) rename src/utbetalinger/{beta => }/tabs/UtbetalingAccordionHeader.tsx (77%) rename src/utbetalinger/{beta => }/tabs/UtbetalingerLoadingWrapper.tsx (88%) rename src/utbetalinger/{beta/tabs/ManedGruppe.tsx => tabs/UtbetalingerMonthlyList.tsx} (91%) rename src/utbetalinger/{beta => }/tabs/UtbetalingerNye.tsx (70%) rename src/utbetalinger/{beta => }/tabs/UtbetalingerTidligere.tsx (54%) create mode 100644 src/utbetalinger/utbetalinger.module.css delete mode 100644 src/utbetalinger/utbetalingerUtils.ts diff --git a/src/pages/utbetaling.tsx b/src/pages/utbetaling.tsx index 1cd1fb4c..87a26893 100644 --- a/src/pages/utbetaling.tsx +++ b/src/pages/utbetaling.tsx @@ -9,12 +9,12 @@ import { useHentAlleSaker } from "../generated/saks-oversikt-controller/saks-ove import { useHarSoknaderMedInnsyn } from "../generated/soknad-med-innsyn-controller/soknad-med-innsyn-controller"; import UtbetalingsoversiktIngenSoknader from "../utbetalinger/UtbetalingsoversiktIngenSoknader"; import UtbetalingsoversiktIngenInnsyn from "../utbetalinger/UtbetalingsoversiktIngenInnsyn"; -import { FilterProvider } from "../utbetalinger/beta/filter/FilterContext"; -import UtbetalingerFilter from "../utbetalinger/beta/filter/UtbetalingerFilter"; -import UtbetalingerPanelBeta from "../utbetalinger/beta/UtbetalingerPanelBeta"; -import styles from "../utbetalinger/beta/utbetalinger.module.css"; +import UtbetalingerFilter from "../utbetalinger/filter/UtbetalingerFilter"; +import UtbetalingerPanel from "../utbetalinger/UtbetalingerPanel"; +import styles from "../utbetalinger/utbetalinger.module.css"; import useUpdateBreadcrumbs from "../hooks/useUpdateBreadcrumbs"; import pageHandler from "../pagehandler/pageHandler"; +import { FilterProvider } from "../utbetalinger/filter/FilterProvider"; import Error from "./_error"; @@ -38,7 +38,7 @@ const Utbetalinger: NextPage = () => { if (isAlleSakerLoading || isHarSoknaderMedInnsynLoading) { return (
- +
); } @@ -66,13 +66,13 @@ const Utbetalinger: NextPage = () => {
-
+
{!isMobile && ( - + )} - +
diff --git a/src/utbetalinger/Utbetalinger.testdata.ts b/src/utbetalinger/Utbetalinger.testdata.ts deleted file mode 100644 index 671e5477..00000000 --- a/src/utbetalinger/Utbetalinger.testdata.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { UtbetalingerResponse } from "../generated/model"; - -// Example: getRandomInt(3) => expected output: 0, 1 or 2 -const getRandomInt = (max: number): number => { - return Math.floor(Math.random() * Math.floor(max)); -}; - -const summerAntallUtbetalinger = (utbetalingerMaaned: UtbetalingerResponse[]) => { - let antallUtbetalinger: number = 0; - utbetalingerMaaned.map((utbetalingMaaned: UtbetalingerResponse) => { - antallUtbetalinger = antallUtbetalinger + utbetalingMaaned.utbetalinger.length; - return utbetalingMaaned; - }); - return antallUtbetalinger; -}; - -const mockUtbetalinger: (UtbetalingerResponse & { sum: number })[] = [ - { - ar: 2019, - maned: 10, - foersteIManeden: "2019-10-01", - sum: 13234.0, - utbetalinger: [ - { - tittel: "Utbetaling til søker", - belop: 1234.0, - utbetalingsdato: "2019-08-20", - status: "ANNULLERT", - fiksDigisosId: "ce3f24a0-359e-45f3-a7f7-5123e70cb715", - fom: "2019-09-01", - tom: "2019-09-30", - mottaker: "søkers fnr", - annenMottaker: true, - kontonummer: "11223344556", - forfallsdato: "2019-08-20", - utbetalingsmetode: "bankoverføring", - }, - { - tittel: "Utbetaling til utleier - husleie", - belop: 12000.0, - utbetalingsdato: "2019-08-01", - status: "UTBETALT", - fiksDigisosId: "ce3f24a0-359e-45f3-a7f7-5123e70cb715", - mottaker: "Utleier", - annenMottaker: true, - forfallsdato: "2019-08-20", - utbetalingsmetode: "bankoverføring", - }, - ], - }, - { - ar: 2019, - maned: 9, - foersteIManeden: "2019-09-01", - sum: 0.0, - utbetalinger: [ - { - tittel: "Annullert utbetaling", - belop: 1234.0, - utbetalingsdato: "2019-09-04", - status: "ANNULLERT", - fiksDigisosId: "ce3f24a0-359e-45f3-a7f7-5123e70cb715", - fom: "2019-09-01", - tom: "2019-10-31", - mottaker: "søkers fnr", - annenMottaker: false, - forfallsdato: "2019-08-20", - utbetalingsmetode: "bankoverføring", - }, - ], - }, - { - ar: 2018, - maned: 8, - foersteIManeden: "2019-08-01", - sum: 13234.0, - utbetalinger: [ - { - tittel: "Utbetaling til søker", - belop: 1234.0, - utbetalingsdato: "2019-08-20", - status: "UTBETALT", - fiksDigisosId: "ce3f24a0-359e-45f3-a7f7-5123e70cb715", - fom: "2019-09-01", - tom: "2019-09-30", - mottaker: "19066711222", - annenMottaker: false, - kontonummer: "11223344556", - forfallsdato: "2019-08-20", - utbetalingsmetode: "bankoverføring", - }, - { - tittel: "Utbetaling til utleier - husleie", - belop: 12000.0, - utbetalingsdato: "2019-08-01", - status: "UTBETALT", - fiksDigisosId: "ce3f24a0-359e-45f3-a7f7-5123e70cb715", - mottaker: "Utleier", - annenMottaker: false, - forfallsdato: "2019-08-20", - utbetalingsmetode: "bankoverføring", - }, - ], - }, -]; - -export { mockUtbetalinger, getRandomInt, summerAntallUtbetalinger }; diff --git a/src/utbetalinger/UtbetalingerPanel.tsx b/src/utbetalinger/UtbetalingerPanel.tsx new file mode 100644 index 00000000..6e324f0e --- /dev/null +++ b/src/utbetalinger/UtbetalingerPanel.tsx @@ -0,0 +1,73 @@ +import React, { useEffect, useMemo, useState } from "react"; +import { BodyLong, Heading, Panel, Tabs } from "@navikt/ds-react"; +import { useTranslation } from "next-i18next"; + +import HandCoinsIcon from "../components/ikoner/HandCoins"; +import { useHentNyeUtbetalinger } from "../generated/utbetalinger-controller/utbetalinger-controller"; +import { logAmplitudeEvent } from "../utils/amplitude"; +import useIsMobile from "../utils/useIsMobile"; + +import { filterResponses } from "./filter/lib/filterResponses"; +import UtbetalingerNye from "./tabs/UtbetalingerNye"; +import { UtbetalingerTidligere } from "./tabs/UtbetalingerTidligere"; +import FilterModal from "./filter/FilterModal"; +import { useFilter } from "./filter/lib/useFilter"; + +const TAB_UTBETALINGER = "Utbetalinger" as const; +const TAB_TIDLIGERE = "Tidligere utbetalinger" as const; + +const UtbetalingerPanel = () => { + const [nyeLogged, setNyeLogged] = useState(false); + + const { t } = useTranslation("utbetalinger"); + + const { data: nye, isLoading, isError } = useHentNyeUtbetalinger(); + const { filters } = useFilter(); + + useEffect(() => { + logAmplitudeEvent("Lastet utbetalinger", { + antall: nye?.[0]?.utbetalingerForManed.length ? nye?.[0].utbetalingerForManed.length : 0, + }); + + if (nyeLogged && !nye?.length) return; + const sisteManedgruppe = nye?.at(-1)?.utbetalingerForManed; + const sisteDatoVist = sisteManedgruppe?.at(-1)?.utbetalingsdato ?? sisteManedgruppe?.at(-1)?.forfallsdato; + + logAmplitudeEvent("Hentet nye utbetalinger", { sisteDatoVist }); + setNyeLogged(true); + }, [nye, nyeLogged]); + + const filtrerteNye = useMemo(() => filterResponses(nye, filters), [nye, filters]); + + const logTabChange = (tab: string) => logAmplitudeEvent("Klikket tab", { tab }); + const isMobile = useIsMobile(); + return ( + + + + {t("tittel.inne")} + +
+ {isMobile && } + + + + + + + {t("utbetalingerIngress")} + + + + {t("tidligereIngress")} + + + + + ); +}; + +export default UtbetalingerPanel; diff --git a/src/utbetalinger/UtbetalingsoversiktIngenInnsyn.tsx b/src/utbetalinger/UtbetalingsoversiktIngenInnsyn.tsx index e17bdfc4..02c9417b 100644 --- a/src/utbetalinger/UtbetalingsoversiktIngenInnsyn.tsx +++ b/src/utbetalinger/UtbetalingsoversiktIngenInnsyn.tsx @@ -1,38 +1,24 @@ import React from "react"; import { BodyLong, Heading } from "@navikt/ds-react"; -import styled from "styled-components"; import { useTranslation } from "next-i18next"; import { StyledGuidePanel } from "../styles/styledGuidePanel"; import IngenSoknaderFunnet from "../components/ikoner/IngenSoknaderFunnet"; -const StyledGuidePanelContent = styled.div` - display: flex; - flex-direction: column; - align-items: center; - margin: 0 3rem; - max-width: 45rem; -`; - -const Wrapper = styled.div` - padding-top: 1rem; - padding-bottom: 50px; -`; - const UtbetalingsoversiktIngenInnsyn = () => { const { t } = useTranslation(); return ( - +
}> - +
{t("ingen_soknad.tittel")} {t("ingen_soknad.info")} - +
- +
); }; diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx deleted file mode 100644 index b06b5384..00000000 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import React, { useEffect, useState } from "react"; -import { BodyLong, Heading, Panel, Tabs } from "@navikt/ds-react"; -import { useTranslation } from "next-i18next"; - -import HandCoinsIcon from "../../components/ikoner/HandCoins"; -import { useHentNyeUtbetalinger } from "../../generated/utbetalinger-controller/utbetalinger-controller"; -import { logAmplitudeEvent } from "../../utils/amplitude"; -import useIsMobile from "../../utils/useIsMobile"; - -import styles from "./utbetalinger.module.css"; -import useFiltrerteUtbetalinger from "./filter/useFiltrerteUtbetalinger"; -import UtbetalingerNye from "./tabs/UtbetalingerNye"; -import { UtbetalingerTidligere } from "./tabs/UtbetalingerTidligere"; -import FilterModal from "./filter/FilterModal"; - -const TAB_UTBETALINGER = "Utbetalinger" as const; -const TAB_TIDLIGERE = "Tidligere utbetalinger" as const; -type UtbetalingTab = typeof TAB_UTBETALINGER | typeof TAB_TIDLIGERE; - -const UtbetalingerPanelBeta = () => { - const [nyeLogged, setNyeLogged] = useState(false); - - const [tabClicked, setTabClicked] = useState(TAB_UTBETALINGER); - - const { t } = useTranslation("utbetalinger"); - - const { data: nye, isLoading, isError } = useHentNyeUtbetalinger(); - - useEffect(() => { - if (!nyeLogged && nye?.length) { - const sisteManedgruppe = nye?.at(-1)?.utbetalingerForManed; - const sisteDatoVist = sisteManedgruppe?.at(-1)?.utbetalingsdato ?? sisteManedgruppe?.at(-1)?.forfallsdato; - - logAmplitudeEvent("Hentet nye utbetalinger", { sisteDatoVist }); - setNyeLogged(true); - } - logAmplitudeEvent("Lastet utbetalinger", { - antall: nye?.[0]?.utbetalingerForManed.length ? nye?.[0].utbetalingerForManed.length : 0, - }); - }, [nye, nyeLogged]); - - const filtrerteNye = useFiltrerteUtbetalinger(nye); - - const logTabChange = (tab: string) => logAmplitudeEvent("Klikket tab", { tab }); - const isMobile = useIsMobile(); - return ( - - - - {t("tittel.inne")} - -
- {isMobile && } - logTabChange(path)}> - - setTabClicked(TAB_UTBETALINGER)} - className={tabClicked === TAB_UTBETALINGER ? styles.tab_list_blue : styles.tab_list_transparent} - /> - - setTabClicked(TAB_TIDLIGERE)} - className={tabClicked === TAB_TIDLIGERE ? styles.tab_list_blue : styles.tab_list_transparent} - /> - - - {t("utbetalingerIngress")} - - - - {t("tidligereIngress")} - - - - - ); -}; - -export default UtbetalingerPanelBeta; diff --git a/src/utbetalinger/beta/filter/FilterContext.tsx b/src/utbetalinger/beta/filter/FilterContext.tsx deleted file mode 100644 index e1c96307..00000000 --- a/src/utbetalinger/beta/filter/FilterContext.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React, { ReactNode, useContext, useReducer } from "react"; - -import { logAmplitudeEvent } from "../../../utils/amplitude"; - -type Maybe = T | null; - -export type MottakerFilter = "minKonto" | "annenMottaker"; - -export type FilterPredicate = { - mottaker?: Maybe; - fraDato?: Maybe; - tilDato?: Maybe; -}; - -type FilterContextType = { - filters: FilterPredicate | null; - setFilter: (nyttFilter: FilterPredicate) => void; - clearFilters: () => void; -}; - -const FilterContext = React.createContext(undefined); - -// Egen hook fordi det sjekkes at den blir brukt riktig, og kan ha undefined som defaultValue -export const useFilter = () => { - const context = useContext(FilterContext); - if (!context) throw new Error("Kan kun brukes innenfor FilterProvider"); - return context; -}; - -const filterReducer = (state: FilterPredicate | null, action: FilterPredicate) => { - const updates = Object.keys(action).filter((key) => action[key as keyof FilterPredicate] !== undefined); - if (!updates.length) return state; - - updates.map((field) => - logAmplitudeEvent("filtervalg", { kategori: field, filternavn: action[field as keyof FilterPredicate] }) - ); - - const newState: FilterPredicate = { ...state, ...action }; - const nonNullFields = Object.values(newState).filter((value) => value !== null); - if (!nonNullFields.length) return null; - return newState; -}; - -export const FilterProvider = ({ children }: { children: ReactNode }) => { - const [filters, setFilter] = useReducer(filterReducer, null); - const clearFilters = () => setFilter({ mottaker: null, fraDato: null, tilDato: null }); - return {children}; -}; diff --git a/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts b/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts deleted file mode 100644 index 5589cb76..00000000 --- a/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts +++ /dev/null @@ -1,48 +0,0 @@ -import React from "react"; -import { isAfter, isBefore } from "date-fns"; - -import { ManedUtbetaling, NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; - -import { FilterPredicate, useFilter } from "./FilterContext"; - -const stringToDateWithoutTimezone = (datoString: string) => new Date(new Date(datoString).toISOString().slice(0, -1)); - -export const filterMatch = ( - { annenMottaker, forfallsdato, utbetalingsdato }: ManedUtbetaling, - filters: FilterPredicate | null -) => { - if (!filters) return true; - const { fraDato, tilDato, mottaker } = filters; - let matchMottaker; - if (!mottaker) matchMottaker = true; - else if (mottaker === "annenMottaker") matchMottaker = annenMottaker; - else matchMottaker = !annenMottaker; - - // Hvis vi ikke har dato-filter eller utbetalingsdato/forfallsdato, trenger vi ikke sjekke datofilteret. - if ((!utbetalingsdato && !forfallsdato) || (!tilDato && !fraDato)) return matchMottaker; - - const dato = stringToDateWithoutTimezone(utbetalingsdato ?? forfallsdato!); - const matchFra = !fraDato ? true : !isBefore(dato, fraDato); - const matchTil = !tilDato ? true : !isAfter(dato, tilDato); - - return matchMottaker && matchTil && matchFra; -}; - -const useFiltrerteUtbetalinger = (utbetalinger: NyeOgTidligereUtbetalingerResponse[] | undefined) => { - const { filters } = useFilter(); - - return React.useMemo( - () => - utbetalinger - ?.map((response) => ({ - ...response, - utbetalingerForManed: response.utbetalingerForManed.filter((utbetaling) => - filterMatch(utbetaling, filters) - ), - })) - .filter((response) => response.utbetalingerForManed.length > 0), - [utbetalinger, filters] - ); -}; - -export default useFiltrerteUtbetalinger; diff --git a/src/utbetalinger/beta/filter/utbetalingerFilter.module.css b/src/utbetalinger/beta/filter/utbetalingerFilter.module.css deleted file mode 100644 index 861dccde..00000000 --- a/src/utbetalinger/beta/filter/utbetalingerFilter.module.css +++ /dev/null @@ -1,17 +0,0 @@ -.utbetalinger_filter { - width: fit-content; - margin-bottom: 2rem; -} - -.periodevelger { - margin-bottom: 2rem; - width: min-content; -} - -.chips { - margin: 0.5rem 0; -} - -.modal_content { - padding: 20px 24px; -} diff --git a/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx b/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx deleted file mode 100644 index 277262b6..00000000 --- a/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { ManedUtbetaling } from "../../../generated/model"; - -import { filterMatch } from "./useFiltrerteUtbetalinger"; -import { FilterPredicate } from "./FilterContext"; - -describe("filtrering på utbetalinger fungerer", () => { - it("skal filtrere dato på fom og tom", () => { - const utbetaling: ManedUtbetaling = { - utbetalingsdato: "2023-04-12", - status: "UTBETALT", - annenMottaker: false, - tittel: "", - belop: 0, - fiksDigisosId: "", - }; - - const filterFra = { - mottaker: null, - fraDato: new Date(2023, 3, 12), - tilDato: undefined, - }; - const filterFraSenere = { - mottaker: null, - fraDato: new Date(2023, 3, 20), - tilDato: undefined, - }; - const filterTil = { - mottaker: null, - fraDato: undefined, - tilDato: new Date(2023, 3, 12), - }; - const filterTilTidligere = { - mottaker: null, - fraDato: undefined, - tilDato: new Date(2023, 3, 10), - }; - - expect(filterMatch(utbetaling, filterFra)).toBeTruthy(); - expect(filterMatch(utbetaling, filterTil)).toBeTruthy(); - expect(filterMatch(utbetaling, filterFraSenere)).toBeFalsy(); - expect(filterMatch(utbetaling, filterTilTidligere)).toBeFalsy(); - }); - - it("skal filtrere mottaker", () => { - const utbetalingAnnen: ManedUtbetaling = { - utbetalingsdato: "2023-04-12", - status: "UTBETALT", - annenMottaker: true, - tittel: "tilAnnen", - belop: 0, - fiksDigisosId: "", - }; - - const utbetalingMeg: ManedUtbetaling = { - utbetalingsdato: "2023-04-12", - status: "UTBETALT", - annenMottaker: false, - tittel: "tilMeg", - belop: 0, - fiksDigisosId: "", - }; - - const filterMeg: FilterPredicate = { - mottaker: "minKonto", - fraDato: undefined, - tilDato: undefined, - }; - const filterAnnen: FilterPredicate = { - mottaker: "annenMottaker", - fraDato: undefined, - tilDato: new Date(2023, 3, 12), - }; - expect(filterMatch(utbetalingAnnen, filterAnnen)).toBeTruthy(); - expect(filterMatch(utbetalingAnnen, filterMeg)).toBeFalsy(); - expect(filterMatch(utbetalingMeg, filterMeg)).toBeTruthy(); - expect(filterMatch(utbetalingMeg, filterAnnen)).toBeFalsy(); - }); -}); diff --git a/src/utbetalinger/beta/utbetalinger.module.css b/src/utbetalinger/beta/utbetalinger.module.css deleted file mode 100644 index 36746aeb..00000000 --- a/src/utbetalinger/beta/utbetalinger.module.css +++ /dev/null @@ -1,60 +0,0 @@ -.utbetalinger_side { - padding: 4rem 32px 32px 32px; - display: flex; - flex-direction: column; - background-color: #d4e6d8; -} - -.utbetalinger_side_innhold { - display: flex; - flex-direction: row; - justify-content: center; - gap: 2rem; - min-height: 40vh; -} - -.utbetalinger_loader { - margin: 100px; -} - -.utbetalinger_panel { - position: relative; - padding-top: 3rem; - max-width: 40rem; -} - -.utbetalinger_panel h2 { - text-align: center; -} - -.utbetalinger_decoration { - position: absolute; - transform: translate(-50%, -50%); - top: 0; - left: 50%; - background: #9bd0b0; - border-radius: 50%; - height: 4rem; - width: 4rem; -} - -.filter_section { - height: fit-content; - padding: 1.5rem 1.5rem 0; -} - -.tab_list_blue { - background-color: var(--a-blue-500); -} - -.tab_list_blue span { - color: var(--a-text-on-neutral); -} - -.tab_list_transparent { - background-color: transparent; -} - -.tab_panel { - padding: 16px 0; -} diff --git a/src/utbetalinger/beta/filter/FilterChips.tsx b/src/utbetalinger/filter/FilterChips.tsx similarity index 84% rename from src/utbetalinger/beta/filter/FilterChips.tsx rename to src/utbetalinger/filter/FilterChips.tsx index 5cd16437..ff70f652 100644 --- a/src/utbetalinger/beta/filter/FilterChips.tsx +++ b/src/utbetalinger/filter/FilterChips.tsx @@ -2,10 +2,9 @@ import { useTranslation } from "next-i18next"; import { Box, Chips } from "@navikt/ds-react"; import React from "react"; -import { dateToDDMMYYYY } from "../../../utils/formatting"; +import { dateToDDMMYYYY } from "../../utils/formatting"; -import styles from "./utbetalingerFilter.module.css"; -import { useFilter } from "./FilterContext"; +import { useFilter } from "./lib/useFilter"; export const FilterChips = () => { const { filters, setFilter } = useFilter(); @@ -16,7 +15,7 @@ export const FilterChips = () => { const { fraDato, tilDato, mottaker } = filters; return ( - + {fraDato && ( setFilter({ fraDato: null })}> {t("filter.fra") + ": " + dateToDDMMYYYY(i18n.language, fraDato)} diff --git a/src/utbetalinger/beta/filter/FilterDatePicker.tsx b/src/utbetalinger/filter/FilterDatePicker.tsx similarity index 97% rename from src/utbetalinger/beta/filter/FilterDatePicker.tsx rename to src/utbetalinger/filter/FilterDatePicker.tsx index 02554c3e..f74673de 100644 --- a/src/utbetalinger/beta/filter/FilterDatePicker.tsx +++ b/src/utbetalinger/filter/FilterDatePicker.tsx @@ -3,7 +3,7 @@ import React, { useState } from "react"; import { DatePicker, DateValidationT, useDatepicker } from "@navikt/ds-react"; import { subMonths } from "date-fns"; -import useIsMobile from "../../../utils/useIsMobile"; +import useIsMobile from "../../utils/useIsMobile"; const validateFromDate = ( { isAfter, isBefore, isInvalid, isValidDate }: DateValidationT, diff --git a/src/utbetalinger/beta/filter/FilterModal.tsx b/src/utbetalinger/filter/FilterModal.tsx similarity index 87% rename from src/utbetalinger/beta/filter/FilterModal.tsx rename to src/utbetalinger/filter/FilterModal.tsx index aebe9b15..00166df4 100644 --- a/src/utbetalinger/beta/filter/FilterModal.tsx +++ b/src/utbetalinger/filter/FilterModal.tsx @@ -4,9 +4,8 @@ import { FilterIcon } from "@navikt/aksel-icons"; import { useTranslation } from "next-i18next"; import UtbetalingerFilter from "./UtbetalingerFilter"; -import { useFilter } from "./FilterContext"; -import styles from "./utbetalingerFilter.module.css"; import { FilterChips } from "./FilterChips"; +import { useFilter } from "./lib/useFilter"; const FilterModal = () => { const { clearFilters } = useFilter(); @@ -28,8 +27,8 @@ const FilterModal = () => { {t("filter.knapp")} - - + +
); }; -export default ManedGruppe; diff --git a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx b/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx index 96122f3b..cbcf9538 100644 --- a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx @@ -6,7 +6,7 @@ import { useFilter } from "../filter/FilterContext"; import Lastestriper from "../../../components/lastestriper/Lasterstriper"; import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; -import ManedGruppe from "./ManedGruppe"; +import { ManedGruppe } from "./ManedGruppe"; interface Props { lasterData: boolean; diff --git a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx index 4306af5b..aa5bc8c6 100644 --- a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx @@ -9,7 +9,7 @@ import Lastestriper from "../../../components/lastestriper/Lasterstriper"; import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; import { ManedUtbetaling } from "../../../generated/model"; -import ManedGruppe from "./ManedGruppe"; +import { ManedGruppe } from "./ManedGruppe"; const TidligerUtbetalingerInnhold = () => { const { data, isLoading, isError } = useHentTidligereUtbetalinger({ From 02ec847948d3c474b720b0b87c879cad72370327 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 14:46:53 +0100 Subject: [PATCH 065/112] Refaktor ManedGruppe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Henter inn metode fra utbetalingerUtils som bare ble brukt her * Endrer metoden så vi ikke må legge på årstall for hånd --- src/utbetalinger/beta/tabs/ManedGruppe.tsx | 20 +++++++++++--------- src/utbetalinger/utbetalingerUtils.ts | 6 +----- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/utbetalinger/beta/tabs/ManedGruppe.tsx b/src/utbetalinger/beta/tabs/ManedGruppe.tsx index 9f7c795f..2d8e4da7 100644 --- a/src/utbetalinger/beta/tabs/ManedGruppe.tsx +++ b/src/utbetalinger/beta/tabs/ManedGruppe.tsx @@ -1,27 +1,29 @@ -import React from "react"; import { Accordion, BodyShort } from "@navikt/ds-react"; -import { useTranslation } from "next-i18next"; +import { I18n, useTranslation } from "next-i18next"; +import { set } from "date-fns"; import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; -import { hentMaanedString } from "../../utbetalingerUtils"; import styles from "./manedgruppe.module.css"; import UtbetalingAccordionItem from "./UtbetalingAccordionItem"; -interface Props { +const getMonthYearString = (i18n: I18n, date: Date) => + date.toLocaleString(i18n.language, { month: "long", year: "numeric" }); + +export const ManedGruppe = ({ + utbetalingSak: { ar, maned, utbetalingerForManed }, +}: { utbetalingSak: UtbetalingerResponseMedId; -} -export const ManedGruppe = (props: Props) => { - const { utbetalingSak } = props; +}) => { const { i18n } = useTranslation(); return (
- {hentMaanedString(utbetalingSak.maned, i18n) + " " + utbetalingSak.ar} + {getMonthYearString(i18n, set(new Date(0), { year: ar, month: maned - 1 }))} - {utbetalingSak.utbetalingerForManed.map((utbetalingManed) => ( + {utbetalingerForManed.map((utbetalingManed) => ( ))} diff --git a/src/utbetalinger/utbetalingerUtils.ts b/src/utbetalinger/utbetalingerUtils.ts index ee516c07..6ae7a50e 100644 --- a/src/utbetalinger/utbetalingerUtils.ts +++ b/src/utbetalinger/utbetalingerUtils.ts @@ -1,5 +1,4 @@ import { i18n } from "i18next"; -import { set } from "date-fns"; const hentUtbetalingTittel = (tittel: string, defaultTittel: string) => tittel && tittel !== "default_utbetalinger_tittel" ? tittel : defaultTittel; @@ -9,7 +8,4 @@ const hentTekstForUtbetalingsmetode = (utbetalingsmetode: string, i18n: i18n) => ? i18n.t(`utbetalingsmetode.${utbetalingsmetode.toLowerCase()}`) : utbetalingsmetode; -const hentMaanedString = (maaned: number, i18n: i18n) => - set(new Date(0), { month: maaned - 1 }).toLocaleString(i18n.language, { month: "long" }); - -export { hentUtbetalingTittel, hentMaanedString, hentTekstForUtbetalingsmetode }; +export { hentUtbetalingTittel, hentTekstForUtbetalingsmetode }; From 36c0a57059791316ac88b65863f2b37051efb6ea Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 14:50:32 +0100 Subject: [PATCH 066/112] Refaktor NyeUtbetalinger.tsx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bedre navn på argumentene * Destrukturering av props og inline av definisjon --- .../beta/UtbetalingerPanelBeta.tsx | 6 ++--- .../beta/tabs/NyeUtbetalinger.tsx | 27 ++++++++++--------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index e1b12c47..f457a811 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -45,8 +45,8 @@ const UtbetalingerPanelBeta = () => { const { t } = useTranslation("utbetalinger"); const { data: nye, - isLoading: henterNye, - isError: hentNyeFeilet, + isLoading, + isError, } = useHentNyeUtbetalinger({ query: { select: (data) => { @@ -122,7 +122,7 @@ const UtbetalingerPanelBeta = () => { {t("utbetalingerIngress")} - + diff --git a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx b/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx index cbcf9538..7a46dcc2 100644 --- a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx @@ -8,27 +8,28 @@ import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; import { ManedGruppe } from "./ManedGruppe"; -interface Props { - lasterData: boolean; - error: boolean; +const NyeUtbetalinger = ({ + utbetalinger, + isError, + isLoading, +}: { utbetalinger: UtbetalingerResponseMedId[]; -} - -const NyeUtbetalinger = (props: Props) => { + isLoading: boolean; + isError: boolean; +}) => { const { isUsingFilter } = useFilter(); const { t } = useTranslation("utbetalinger"); - if (props.lasterData) { - return ; - } - if (props.error) { + if (isLoading) return ; + + if (isError) return ( {t("feil.fetch")} ); - } - if (!props.utbetalinger.length) + + if (!utbetalinger.length) return ( {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.nye")} @@ -37,7 +38,7 @@ const NyeUtbetalinger = (props: Props) => { return ( <> - {props.utbetalinger.map((utbetalingSak: UtbetalingerResponseMedId) => ( + {utbetalinger.map((utbetalingSak: UtbetalingerResponseMedId) => ( ))} From 33384fd8b4df0042db337757be8beffe89bb0970 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 15:03:18 +0100 Subject: [PATCH 067/112] Bruk mer moderne syntaks i useEffect .at(-1) kom i ES2022 og er penere. --- src/utbetalinger/beta/UtbetalingerPanelBeta.tsx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index f457a811..25251ad8 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -67,11 +67,10 @@ const UtbetalingerPanelBeta = () => { }); useEffect(() => { - if (!nyeLogged && nye && nye.length > 0) { - const sisteManedgruppe = nye[nye.length - 1].utbetalingerForManed; - const sisteDatoVist = - sisteManedgruppe[sisteManedgruppe.length - 1].utbetalingsdato ?? - sisteManedgruppe[sisteManedgruppe.length - 1].forfallsdato; + if (!nyeLogged && nye?.length) { + const sisteManedgruppe = nye.at(-1).utbetalingerForManed; + const sisteDatoVist = sisteManedgruppe.at(-1).utbetalingsdato ?? sisteManedgruppe.at(-1).forfallsdato; + logAmplitudeEvent("Hentet nye utbetalinger", { sisteDatoVist }); setNyeLogged(true); } From b957eef6531a2a84a675df2f935e3d5bf7d7b7e4 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 15:04:28 +0100 Subject: [PATCH 068/112] Bruk const string union og ikke enum til aktiv tab --- .../beta/UtbetalingerPanelBeta.tsx | 35 +++++++------------ 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 25251ad8..76fbdbac 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -15,10 +15,9 @@ import NyeUtbetalinger from "./tabs/NyeUtbetalinger"; import TidligereUtbetalinger from "./tabs/TidligereUtbetalinger"; import FilterModal from "./filter/FilterModal"; -enum TAB_VALUE { - UTBETALINGER = "Utbetalinger", - TIDLIGERE = "Tidligere utbetalinger", -} +const TAB_UTBETALINGER = "Utbetalinger" as const; +const TAB_TIDLIGERE = "Tidligere utbetalinger" as const; +type UtbetalingTab = typeof TAB_UTBETALINGER | typeof TAB_TIDLIGERE; export interface UtbetalingMedId extends ManedUtbetaling { id: string; @@ -40,7 +39,7 @@ const StyledSpace = styled.div` const UtbetalingerPanelBeta = () => { const [nyeLogged, setNyeLogged] = useState(false); - const [tabClicked, setTabClicked] = useState(TAB_VALUE.UTBETALINGER); + const [tabClicked, setTabClicked] = useState(TAB_UTBETALINGER); const { t } = useTranslation("utbetalinger"); const { @@ -93,37 +92,29 @@ const UtbetalingerPanelBeta = () => { {isMobile && } - logTabChange(path)}> + logTabChange(path)}> { - setTabClicked(TAB_VALUE.UTBETALINGER); - }} - className={`${ - tabClicked === TAB_VALUE.UTBETALINGER ? styles.tab_list_blue : styles.tab_list_transparent - }`} + onClick={() => setTabClicked(TAB_UTBETALINGER)} + className={tabClicked === TAB_UTBETALINGER ? styles.tab_list_blue : styles.tab_list_transparent} /> { - setTabClicked(TAB_VALUE.TIDLIGERE); - }} - className={`${ - tabClicked === TAB_VALUE.TIDLIGERE ? styles.tab_list_blue : styles.tab_list_transparent - }`} + onClick={() => setTabClicked(TAB_TIDLIGERE)} + className={tabClicked === TAB_TIDLIGERE ? styles.tab_list_blue : styles.tab_list_transparent} /> - + {t("utbetalingerIngress")} - + From 4e9964dd2720871ed4f182f7bc3de774cf11e57a Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 15:38:56 +0100 Subject: [PATCH 069/112] Renamer TidligerUtbetalinger til TidligereUtbetalinger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flytter ingress tilbake opp et hakkˆ --- src/utbetalinger/beta/UtbetalingerPanelBeta.tsx | 3 ++- .../beta/tabs/TidligereUtbetalinger.tsx | 16 ++-------------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 76fbdbac..7dde23fc 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -12,7 +12,7 @@ import { ManedUtbetaling, NyeOgTidligereUtbetalingerResponse } from "../../gener import styles from "./utbetalinger.module.css"; import useFiltrerteUtbetalinger from "./filter/useFiltrerteUtbetalinger"; import NyeUtbetalinger from "./tabs/NyeUtbetalinger"; -import TidligereUtbetalinger from "./tabs/TidligereUtbetalinger"; +import { TidligereUtbetalinger } from "./tabs/TidligereUtbetalinger"; import FilterModal from "./filter/FilterModal"; const TAB_UTBETALINGER = "Utbetalinger" as const; @@ -115,6 +115,7 @@ const UtbetalingerPanelBeta = () => { + {t("tidligereIngress")} diff --git a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx index aa5bc8c6..0989c877 100644 --- a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { Alert, BodyLong } from "@navikt/ds-react"; +import { Alert } from "@navikt/ds-react"; import { useTranslation } from "next-i18next"; import { useHentTidligereUtbetalinger } from "../../../generated/utbetalinger-controller/utbetalinger-controller"; @@ -11,7 +11,7 @@ import { ManedUtbetaling } from "../../../generated/model"; import { ManedGruppe } from "./ManedGruppe"; -const TidligerUtbetalingerInnhold = () => { +export const TidligereUtbetalinger = () => { const { data, isLoading, isError } = useHentTidligereUtbetalinger({ query: { select: (data) => { @@ -59,15 +59,3 @@ const TidligerUtbetalingerInnhold = () => { ); }; - -const TidligerUtbetalinger = () => { - const { t } = useTranslation("utbetalinger"); - - return ( - <> - {t("tidligereIngress")} - - - ); -}; -export default TidligerUtbetalinger; From dcc107557acb3f427cf502f2120441dff564bc33 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 15:46:22 +0100 Subject: [PATCH 070/112] Trekker addIdToUtbetalinger.tsx ut til egen fil MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Samme funksjon var duplisert to steder dypt i kode, så jeg trakk ut til en egen funksjon --- .../beta/UtbetalingerPanelBeta.tsx | 25 +++---------------- src/utbetalinger/beta/addIdToUtbetalinger.tsx | 15 +++++++++++ .../beta/tabs/TidligereUtbetalinger.tsx | 21 ++-------------- 3 files changed, 20 insertions(+), 41 deletions(-) create mode 100644 src/utbetalinger/beta/addIdToUtbetalinger.tsx diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 7dde23fc..66f27b7e 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -14,6 +14,7 @@ import useFiltrerteUtbetalinger from "./filter/useFiltrerteUtbetalinger"; import NyeUtbetalinger from "./tabs/NyeUtbetalinger"; import { TidligereUtbetalinger } from "./tabs/TidligereUtbetalinger"; import FilterModal from "./filter/FilterModal"; +import { addIdToUtbetalinger } from "./addIdToUtbetalinger"; const TAB_UTBETALINGER = "Utbetalinger" as const; const TAB_TIDLIGERE = "Tidligere utbetalinger" as const; @@ -42,28 +43,8 @@ const UtbetalingerPanelBeta = () => { const [tabClicked, setTabClicked] = useState(TAB_UTBETALINGER); const { t } = useTranslation("utbetalinger"); - const { - data: nye, - isLoading, - isError, - } = useHentNyeUtbetalinger({ - query: { - select: (data) => { - // Legg på en id på hver utbetaling - return data.map((item) => { - return { - ...item, - utbetalingerForManed: item.utbetalingerForManed.map((utbetaling: ManedUtbetaling) => { - return { - ...utbetaling, - id: crypto.randomUUID(), - }; - }), - }; - }); - }, - }, - }); + + const { data: nye, isLoading, isError } = useHentNyeUtbetalinger({ query: { select: addIdToUtbetalinger } }); useEffect(() => { if (!nyeLogged && nye?.length) { diff --git a/src/utbetalinger/beta/addIdToUtbetalinger.tsx b/src/utbetalinger/beta/addIdToUtbetalinger.tsx new file mode 100644 index 00000000..11405e4c --- /dev/null +++ b/src/utbetalinger/beta/addIdToUtbetalinger.tsx @@ -0,0 +1,15 @@ +import { NyeOgTidligereUtbetalingerResponse } from "../../generated/model"; + +import { UtbetalingMedId } from "./UtbetalingerPanelBeta"; + +const leggIdPaaUtbetalingerForManed = (item: NyeOgTidligereUtbetalingerResponse): UtbetalingMedId[] => + item.utbetalingerForManed.map((utbetaling) => ({ + ...utbetaling, + id: crypto.randomUUID(), + })); +// Legg på en id på hver utbetaling +export const addIdToUtbetalinger = (data: NyeOgTidligereUtbetalingerResponse[]) => + data.map((item) => ({ + ...item, + utbetalingerForManed: leggIdPaaUtbetalingerForManed(item), + })); diff --git a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx index 0989c877..ee75ff7f 100644 --- a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx @@ -7,29 +7,12 @@ import useFiltrerteUtbetalinger from "../filter/useFiltrerteUtbetalinger"; import { useFilter } from "../filter/FilterContext"; import Lastestriper from "../../../components/lastestriper/Lasterstriper"; import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; -import { ManedUtbetaling } from "../../../generated/model"; +import { addIdToUtbetalinger } from "../addIdToUtbetalinger"; import { ManedGruppe } from "./ManedGruppe"; export const TidligereUtbetalinger = () => { - const { data, isLoading, isError } = useHentTidligereUtbetalinger({ - query: { - select: (data) => { - // Legg på en id på hver utbetaling - return data.map((item) => { - return { - ...item, - utbetalingerForManed: item.utbetalingerForManed.map((utbetaling: ManedUtbetaling) => { - return { - ...utbetaling, - id: crypto.randomUUID(), - }; - }), - }; - }); - }, - }, - }); + const { data, isLoading, isError } = useHentTidligereUtbetalinger({ query: { select: addIdToUtbetalinger } }); const filtrerteTidligere = useFiltrerteUtbetalinger(data ?? []); const { isUsingFilter } = useFilter(); const { t } = useTranslation("utbetalinger"); From a071d53a67717371ec9273a0b86413ad330fcc36 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 15:59:42 +0100 Subject: [PATCH 071/112] bruker defineConfig i orval config for typesikkerhet --- orval.config.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/orval.config.ts b/orval.config.ts index c4bcee9c..ca8dcfd1 100644 --- a/orval.config.ts +++ b/orval.config.ts @@ -1,4 +1,6 @@ -export default { +import { defineConfig } from "orval"; + +export default defineConfig({ "innsyn-api": { input: "./innsyn-api.json", output: { @@ -30,4 +32,4 @@ export default { afterAllFilesWrite: "prettier --write", }, }, -}; +}); From f8587977f4037c152a8de48e463385d8e33bf8eb Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 16:34:04 +0100 Subject: [PATCH 072/112] Ekskluder generert kode fra git-repo, generer kode som et build-steg --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index add417cf..fb667edc 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ }, "scripts": { "dev": "next dev | pino-pretty", - "build": "next build", + "build": "orval && next build", "start": "next start", "test": "jest", "lintStaged": "lint-staged", From 0c05b9f272a8cb5117355ad797265319c78ab060 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 16:39:40 +0100 Subject: [PATCH 073/112] Ah, vi har et run-orval-flagg; da kan vi bare bruke det. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fb667edc..add417cf 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ }, "scripts": { "dev": "next dev | pino-pretty", - "build": "orval && next build", + "build": "next build", "start": "next start", "test": "jest", "lintStaged": "lint-staged", From 71cbd756c3d8e0a1d81f07ee481175c6e8374eee Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 17:47:10 +0100 Subject: [PATCH 074/112] Generer suspense-klienter med orval --- orval.config.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/orval.config.ts b/orval.config.ts index ca8dcfd1..e9bba352 100644 --- a/orval.config.ts +++ b/orval.config.ts @@ -26,6 +26,10 @@ export default defineConfig({ fetch: { includeHttpStatusReturnType: false, }, + query: { + useSuspenseQuery: true, + version: 5, + }, }, }, hooks: { From 0b179188834d79e0e9270cf0553a16c647bf6968 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 18:06:12 +0100 Subject: [PATCH 075/112] Tillat ubrukte argumenter dersom de er prefixed med _ --- eslint.config.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/eslint.config.mjs b/eslint.config.mjs index 35f6b16c..af337274 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -39,6 +39,7 @@ export default [ "no-console": "warn", "@typescript-eslint/explicit-function-return-type": "off", "prettier/prettier": "warn", + "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }], "import/order": [ "warn", From 2dd9133aa7357160fe14471fa78b134bccc3e7d0 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Fri, 17 Jan 2025 20:35:39 +0100 Subject: [PATCH 076/112] Legger til react query devtools som build dependency --- package-lock.json | 44 ++++++++++++++++++++++++++++++++++++++------ package.json | 1 + src/pages/_app.tsx | 6 ++++++ 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 67d924cf..922b9e75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,6 +41,7 @@ "@eslint/eslintrc": "^3.2.0", "@eslint/js": "^9.17.0", "@faker-js/faker": "^8.4.1", + "@tanstack/react-query-devtools": "^5.64.1", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.1.0", "@types/jest": "^29.5.12", @@ -4398,26 +4399,57 @@ } }, "node_modules/@tanstack/query-core": { + "version": "5.64.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.64.1.tgz", + "integrity": "sha512-978Wx4Wl4UJZbmvU/rkaM9cQtXXrbhK0lsz/UZhYIbyKYA8E4LdomTwyh2GHZ4oU0BKKoDH4YlKk2VscCUgNmg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/query-devtools": { "version": "5.62.16", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.62.16.tgz", - "integrity": "sha512-9Sgft7Qavcd+sN0V25xVyo0nfmcZXBuODy3FVG7BMWTg1HMLm8wwG5tNlLlmSic1u7l1v786oavn+STiFaPH2g==", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.62.16.tgz", + "integrity": "sha512-3ff6UBJr0H3nIhfLSl9911rvKqXf0u4B58jl0uYdDWLqPk9pCvYIbxC35cGxK2+8INl4IaFVUHb/IdgWrNkg3Q==", + "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "5.63.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.63.0.tgz", - "integrity": "sha512-QWizLzSiog8xqIRYmuJRok9VELlXVBAwtINgVCgW1SNvamQwWDO5R0XFSkjoBEj53x9Of1KAthLRBUC5xmtVLQ==", + "version": "5.64.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.64.1.tgz", + "integrity": "sha512-vW5ggHpIO2Yjj44b4sB+Fd3cdnlMJppXRBJkEHvld6FXh3j5dwWJoQo7mGtKI2RbSFyiyu/PhGAy0+Vv5ev9Eg==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.64.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@tanstack/react-query-devtools": { + "version": "5.64.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.64.1.tgz", + "integrity": "sha512-8ajcGE3wXYlb4KuJnkFYkJwJKc/qmPNTpQD7YTgLRMBPTGGp1xk7VMzxL87DoXuweO8luplUUblJJ3noVs/luQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.62.16" + "@tanstack/query-devtools": "5.62.16" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { + "@tanstack/react-query": "^5.64.1", "react": "^18 || ^19" } }, diff --git a/package.json b/package.json index add417cf..51b8cfc8 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "@eslint/eslintrc": "^3.2.0", "@eslint/js": "^9.17.0", "@faker-js/faker": "^8.4.1", + "@tanstack/react-query-devtools": "^5.64.1", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.1.0", "@types/jest": "^29.5.12", diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index f6eb9916..f9027155 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -8,6 +8,7 @@ import { onBreadcrumbClick, onLanguageSelect } from "@navikt/nav-dekoratoren-mod import { configureLogger } from "@navikt/next-logger"; import Cookies from "js-cookie"; import { IToggle } from "@unleash/nextjs"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import ErrorBoundary from "../components/errors/ErrorBoundary"; import Tilgangskontrollside from "../components/Tilgangskontrollside/Tilgangskontrollside"; @@ -52,6 +53,11 @@ const App = ({ Component, pageProps }: AppProps<{ toggles: IToggle[] }>): React. + {/* Quoth react-query devtools docs: + By default, React Query Devtools are only included in bundles + when process.env.NODE_ENV === 'development', so you don't + need to worry about excluding them from a production build. */} + ); }; From 584b9e05f6ce6abe72e51449616688c71bc272bd Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 12:31:13 +0100 Subject: [PATCH 077/112] Generaliser ErrorBoundary litt --- src/components/errors/ErrorBoundary.tsx | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/components/errors/ErrorBoundary.tsx b/src/components/errors/ErrorBoundary.tsx index e8bfe226..f5c50536 100644 --- a/src/components/errors/ErrorBoundary.tsx +++ b/src/components/errors/ErrorBoundary.tsx @@ -5,35 +5,30 @@ import ServerError from "../../pages/500"; interface Props { children?: ReactNode; + fallback?: ReactNode; } interface State { - hasError: boolean; + error: Error | null; } class ErrorBoundary extends React.Component { constructor(props: Props) { super(props); - // Define a state variable to track whether is an error or not - this.state = { hasError: false }; + this.state = { error: null }; } - /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ - static getDerivedStateFromError(_: Error) { + static getDerivedStateFromError(error: Error) { // Update state so the next render will show the fallback UI - - return { hasError: true }; + return { error }; } public componentDidCatch(error: Error, errorInfo: ErrorInfo) { logger.error(`Uncaught clientside error: ${error}, errorInfo: ${JSON.stringify(errorInfo)}`); } public render() { - if (this.state.hasError) { - return ; - } - + if (!!this.state.error) return this.props.fallback ?? ; return this.props.children; } } From 9d9d0764ff24b537e307948a4a5dd2bead02d982 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 16:48:26 +0100 Subject: [PATCH 078/112] Refaktorerer tester av utbetalingsdetaljerDefaultAapnet Wrapper dem i en describe, gir mer konvensjonelle navn, fjerner en duplisert test --- src/utbetalinger/Utbetalinger.test.ts | 64 +++++++++++---------------- 1 file changed, 26 insertions(+), 38 deletions(-) diff --git a/src/utbetalinger/Utbetalinger.test.ts b/src/utbetalinger/Utbetalinger.test.ts index e91dc249..7a7828ff 100644 --- a/src/utbetalinger/Utbetalinger.test.ts +++ b/src/utbetalinger/Utbetalinger.test.ts @@ -1,52 +1,40 @@ import { utbetalingsdetaljerDefaultAapnet } from "./beta/tabs/UtbetalingAccordionItem"; -it("Utbetalingsdetaljer skal ikke være åpen når utbetalingsdato er 18 dager tilbake i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-27")).toBe(false); -}); +describe("utbetalingsdetaljerDefaultAapnet", () => { + it("returns false when the date is 18 days in the past", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-27")).toBe(false)); -it("Utbetalingsdetaljer skal være lukket når utbetalingsdato er 16 dager tilbake i tid, datoer samme måned", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-20"), "2024-01-04")).toBe(false); -}); + it("returns false when the date is 16 days in the past (same month)", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-20"), "2024-01-04")).toBe(false)); -it("Utbetalingsdetaljer skal ikke være åpen når utbetalingsdato er 16 dager tilbake i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-29")).toBe(false); -}); + it("returns false when the date is 16 days in the past", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-29")).toBe(false)); -it("Utbetalingsdetaljer skal være åpen når utbetalingsdato er 15 dager tilbake i tid, datoer samme måned", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-20"), "2024-01-05")).toBe(true); -}); + it("returns true when the date is 15 days in the past (same month)", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-20"), "2024-01-05")).toBe(true)); -it("Utbetalingsdetaljer skal være åpen når utbetalingsdato er 15 dager tilbake i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-30")).toBe(true); -}); + it("returns true when the date is 15 days in the past", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-30")).toBe(true)); -it("Utbetalingsdetaljer skal være åpen når utbetalingsdato er 14 dager tilbake i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-31")).toBe(true); -}); + it("returns true when the date is 14 days in the past", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-31")).toBe(true)); -it("Utbetalingsdetaljer skal være åpen når utbetalingsdato er dags dato", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-14")).toBe(true); -}); + it("returns true when the date is the same as today's date", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-14")).toBe(true)); -it("Utbetalingsdetaljer skal være åpen når utbetalingsdato er 14 dager frem i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-28")).toBe(true); -}); + it("returns true when the date is 14 days in the future", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-28")).toBe(true)); -it("Utbetalingsdetaljer skal være åpen når utbetalingsdato er 15 dager frem i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-29")).toBe(true); -}); + it("returns true when the date is 15 days in the future", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-29")).toBe(true)); -it("Utbetalingsdetaljer skal ikke være åpen når utbetalingsdato er 16 dager frem i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-30")).toBe(false); -}); + it("returns false when the date is 16 days in the future", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-30")).toBe(false)); -it("Utbetalingsdetaljer skal ikke være åpen når utbetalingsdato er 18 dager frem i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-02-02")).toBe(false); -}); + it("returns false when the date is 18 days in the future", () => + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-02-02")).toBe(false)); -it("Utbetalingsdetaljer skal ikke være åpen når utbetalingsdato er 18 dager frem i tid", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-02-02")).toBe(false); -}); -it("Utbetalingsdetaljer skal ikke være åpen når utbetalingsdato ikke er definert", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "")).toBe(false); + it("returns false when the date is undefined", () => { + expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "")).toBe(false); + }); }); From 376736954b6df4eb7c41112e582b1f747a8acbe1 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 16:53:02 +0100 Subject: [PATCH 079/112] Refaktor utbetalingsdetaljerDefaultAapnet om til isNotMoreThanTwoWeeksAgo --- src/utbetalinger/Utbetalinger.test.ts | 28 +++++++++---------- .../beta/tabs/UtbetalingAccordionItem.tsx | 23 +++------------ 2 files changed, 18 insertions(+), 33 deletions(-) diff --git a/src/utbetalinger/Utbetalinger.test.ts b/src/utbetalinger/Utbetalinger.test.ts index 7a7828ff..32898293 100644 --- a/src/utbetalinger/Utbetalinger.test.ts +++ b/src/utbetalinger/Utbetalinger.test.ts @@ -1,40 +1,40 @@ -import { utbetalingsdetaljerDefaultAapnet } from "./beta/tabs/UtbetalingAccordionItem"; +import { isNotMoreThanTwoWeeksAgo } from "./beta/tabs/UtbetalingAccordionItem"; -describe("utbetalingsdetaljerDefaultAapnet", () => { +describe("isNotMoreThanTwoWeeksAgo", () => { it("returns false when the date is 18 days in the past", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-27")).toBe(false)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-27")).toBe(false)); it("returns false when the date is 16 days in the past (same month)", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-20"), "2024-01-04")).toBe(false)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-20"), "2024-01-04")).toBe(false)); it("returns false when the date is 16 days in the past", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-29")).toBe(false)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-29")).toBe(false)); it("returns true when the date is 15 days in the past (same month)", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-20"), "2024-01-05")).toBe(true)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-20"), "2024-01-05")).toBe(true)); it("returns true when the date is 15 days in the past", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-30")).toBe(true)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-30")).toBe(true)); it("returns true when the date is 14 days in the past", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2023-12-31")).toBe(true)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-31")).toBe(true)); it("returns true when the date is the same as today's date", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-14")).toBe(true)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-14")).toBe(true)); it("returns true when the date is 14 days in the future", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-28")).toBe(true)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-28")).toBe(true)); it("returns true when the date is 15 days in the future", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-29")).toBe(true)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-29")).toBe(true)); it("returns false when the date is 16 days in the future", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-01-30")).toBe(false)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-30")).toBe(false)); it("returns false when the date is 18 days in the future", () => - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "2024-02-02")).toBe(false)); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-02-02")).toBe(false)); it("returns false when the date is undefined", () => { - expect(utbetalingsdetaljerDefaultAapnet(new Date("2024-01-14"), "")).toBe(false); + expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "")).toBe(false); }); }); diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 276175e8..4f6ea743 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -4,6 +4,7 @@ import React, { useState } from "react"; import { useTranslation } from "next-i18next"; import Link from "next/link"; import { logger } from "@navikt/next-logger"; +import { differenceInCalendarDays } from "date-fns"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; import { formatCurrency, formatDato, getDayAndMonth } from "../../../utils/formatting"; @@ -31,28 +32,12 @@ interface Props { utbetalingManed: UtbetalingMedId; } -export const utbetalingsdetaljerDefaultAapnet = (dagensDato: Date, utbetalingsdato?: string) => { - if (utbetalingsdato == "") return false; - const utbetalingsDato: Date = new Date(utbetalingsdato ?? ""); - - const femtenDagerSiden: Date = new Date(dagensDato.getTime() - 15 * 24 * 60 * 60 * 1000); - femtenDagerSiden.setHours(0, 0, 0, 0); - - const femtenDagerTil: Date = new Date(dagensDato.getTime() + 15 * 24 * 60 * 60 * 1000); - femtenDagerTil.setHours(1, 0, 0, 0); - - const erUtbetalingsdatoInnenDeSisteFemtenDagene = - utbetalingsDato >= femtenDagerSiden && utbetalingsDato <= dagensDato; - - const erUtbetalingsdatoInnenDeNesteFemtenDagene = - utbetalingsDato <= femtenDagerTil && utbetalingsDato >= dagensDato; - - return erUtbetalingsdatoInnenDeSisteFemtenDagene || erUtbetalingsdatoInnenDeNesteFemtenDagene; -}; +export const isNotMoreThanTwoWeeksAgo = (now: Date, utbetalingsdato?: string) => + !utbetalingsdato ? false : Math.abs(differenceInCalendarDays(now, utbetalingsdato)) <= 15; const UtbetalingAccordionItem = ({ utbetalingManed }: Props) => { const { t, i18n } = useTranslation("utbetalinger"); - const [isOpen, setIsOpen] = useState(utbetalingsdetaljerDefaultAapnet(new Date(), utbetalingManed.utbetalingsdato)); + const [isOpen, setIsOpen] = useState(isNotMoreThanTwoWeeksAgo(new Date(), utbetalingManed.utbetalingsdato)); return ( <> From 5cc0c3a9f28f081347dc9ffb72d777c0f12e6359 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:10:27 +0100 Subject: [PATCH 080/112] Refaktorerer isNotMoreThanTwoWeeksAgo --- src/utbetalinger/Utbetalinger.test.ts | 40 ------------------- .../beta/tabs/UtbetalingAccordionItem.tsx | 7 +--- .../beta/tabs/isNotMoreThanTwoWeeksAgo.ts | 4 ++ .../isNotMoreThanTwoWeeksAgo.test.ts | 31 ++++++++++++++ 4 files changed, 37 insertions(+), 45 deletions(-) delete mode 100644 src/utbetalinger/Utbetalinger.test.ts create mode 100644 src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts create mode 100644 src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts diff --git a/src/utbetalinger/Utbetalinger.test.ts b/src/utbetalinger/Utbetalinger.test.ts deleted file mode 100644 index 32898293..00000000 --- a/src/utbetalinger/Utbetalinger.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { isNotMoreThanTwoWeeksAgo } from "./beta/tabs/UtbetalingAccordionItem"; - -describe("isNotMoreThanTwoWeeksAgo", () => { - it("returns false when the date is 18 days in the past", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-27")).toBe(false)); - - it("returns false when the date is 16 days in the past (same month)", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-20"), "2024-01-04")).toBe(false)); - - it("returns false when the date is 16 days in the past", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-29")).toBe(false)); - - it("returns true when the date is 15 days in the past (same month)", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-20"), "2024-01-05")).toBe(true)); - - it("returns true when the date is 15 days in the past", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-30")).toBe(true)); - - it("returns true when the date is 14 days in the past", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2023-12-31")).toBe(true)); - - it("returns true when the date is the same as today's date", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-14")).toBe(true)); - - it("returns true when the date is 14 days in the future", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-28")).toBe(true)); - - it("returns true when the date is 15 days in the future", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-29")).toBe(true)); - - it("returns false when the date is 16 days in the future", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-01-30")).toBe(false)); - - it("returns false when the date is 18 days in the future", () => - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "2024-02-02")).toBe(false)); - - it("returns false when the date is undefined", () => { - expect(isNotMoreThanTwoWeeksAgo(new Date("2024-01-14"), "")).toBe(false); - }); -}); diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 4f6ea743..3845ddbf 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -4,7 +4,6 @@ import React, { useState } from "react"; import { useTranslation } from "next-i18next"; import Link from "next/link"; import { logger } from "@navikt/next-logger"; -import { differenceInCalendarDays } from "date-fns"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; import { formatCurrency, formatDato, getDayAndMonth } from "../../../utils/formatting"; @@ -12,6 +11,7 @@ import { UtbetalingMedId } from "../UtbetalingerPanelBeta"; import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbetalingerUtils"; import styles from "./manedgruppe.module.css"; +import { isNotMoreThanTwoWeeksAgo } from "./isNotMoreThanTwoWeeksAgo"; function statusToTekst(t: (key: string) => string, status?: string) { switch (status) { @@ -32,12 +32,9 @@ interface Props { utbetalingManed: UtbetalingMedId; } -export const isNotMoreThanTwoWeeksAgo = (now: Date, utbetalingsdato?: string) => - !utbetalingsdato ? false : Math.abs(differenceInCalendarDays(now, utbetalingsdato)) <= 15; - const UtbetalingAccordionItem = ({ utbetalingManed }: Props) => { const { t, i18n } = useTranslation("utbetalinger"); - const [isOpen, setIsOpen] = useState(isNotMoreThanTwoWeeksAgo(new Date(), utbetalingManed.utbetalingsdato)); + const [isOpen, setIsOpen] = useState(isNotMoreThanTwoWeeksAgo(utbetalingManed.utbetalingsdato)); return ( <> diff --git a/src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts b/src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts new file mode 100644 index 00000000..816d85dc --- /dev/null +++ b/src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts @@ -0,0 +1,4 @@ +import { differenceInCalendarDays } from "date-fns"; + +export const isNotMoreThanTwoWeeksAgo = (utbetalingsdato?: string) => + !utbetalingsdato ? false : Math.abs(differenceInCalendarDays(new Date(), utbetalingsdato)) <= 15; diff --git a/src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts b/src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts new file mode 100644 index 00000000..2a14281d --- /dev/null +++ b/src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts @@ -0,0 +1,31 @@ +import { isNotMoreThanTwoWeeksAgo } from "./beta/tabs/isNotMoreThanTwoWeeksAgo"; + +/** + * For en gitt referansedato og måldato, forventer vi at funksjonen returnerer et gitt resultat. + * @param referenceDate Mock-verdi for systemklokka + * @param targetDate Datoen vi vil sjekke + * @param expectedResult Forventet resultat + * @param description Beskrivelse av testen + */ +const expectResult = (referenceDate: string, targetDate: string, expectedResult: boolean, description: string) => + it(`returns ${expectedResult} for ${description}`, () => { + jest.setSystemTime(new Date(referenceDate)); + expect(isNotMoreThanTwoWeeksAgo(targetDate)).toBe(expectedResult); + }); + +describe("isNotMoreThanTwoWeeksAgo", () => { + beforeAll(() => jest.useFakeTimers()); + afterAll(() => jest.useRealTimers()); + expectResult("2024-01-14", "2023-12-27", false, "a date 18 days before the reference date"); + expectResult("2024-01-20", "2024-01-04", false, "a date 16 days before the reference date in the same month"); + expectResult("2024-01-14", "2023-12-29", false, "a date 16 days before the reference date across months"); + expectResult("2024-01-20", "2024-01-05", true, "a date 15 days before the reference date in the same month"); + expectResult("2024-01-14", "2023-12-30", true, "a date 15 days before the reference date across months"); + expectResult("2024-01-14", "2023-12-31", true, "a date 14 days before the reference date"); + expectResult("2024-01-14", "2024-01-14", true, "the reference date itself"); + expectResult("2024-01-14", "2024-01-28", true, "a date 14 days after the reference date"); + expectResult("2024-01-14", "2024-01-29", true, "a date 15 days after the reference date"); + expectResult("2024-01-14", "2024-01-30", false, "a date 16 days after the reference date"); + expectResult("2024-01-14", "2024-02-02", false, "a date 18 days after the reference date"); + expectResult("2024-01-14", "", false, "an undefined date"); +}); From c540c2b301776aed77982696d7763bb3cebf0d41 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:12:44 +0100 Subject: [PATCH 081/112] Erstatter styled-component med div og Tailwind-CSS --- src/utbetalinger/beta/UtbetalingerPanelBeta.tsx | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 66f27b7e..9ec91d15 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -1,7 +1,6 @@ import React, { useEffect, useState } from "react"; import { BodyLong, Heading, Panel, Tabs } from "@navikt/ds-react"; import { useTranslation } from "next-i18next"; -import styled from "styled-components"; import HandCoinsIcon from "../../components/ikoner/HandCoins"; import { useHentNyeUtbetalinger } from "../../generated/utbetalinger-controller/utbetalinger-controller"; @@ -27,15 +26,6 @@ export interface UtbetalingMedId extends ManedUtbetaling { export interface UtbetalingerResponseMedId extends Omit { utbetalingerForManed: UtbetalingMedId[]; } -const StyledSpace = styled.div` - @media screen and (max-width: 769px) { - padding: 1rem 0 0 0; - } - - @media screen and (min-width: 769px) { - padding: 3rem 0 0 0; - } -`; const UtbetalingerPanelBeta = () => { const [nyeLogged, setNyeLogged] = useState(false); @@ -48,8 +38,8 @@ const UtbetalingerPanelBeta = () => { useEffect(() => { if (!nyeLogged && nye?.length) { - const sisteManedgruppe = nye.at(-1).utbetalingerForManed; - const sisteDatoVist = sisteManedgruppe.at(-1).utbetalingsdato ?? sisteManedgruppe.at(-1).forfallsdato; + const sisteManedgruppe = nye?.at(-1)?.utbetalingerForManed; + const sisteDatoVist = sisteManedgruppe?.at(-1)?.utbetalingsdato ?? sisteManedgruppe?.at(-1)?.forfallsdato; logAmplitudeEvent("Hentet nye utbetalinger", { sisteDatoVist }); setNyeLogged(true); @@ -71,7 +61,7 @@ const UtbetalingerPanelBeta = () => { {t("tittel.inne")} - +
{isMobile && } logTabChange(path)}> From b93cf059be8b159e5830926c1d2b4dc07cde45e9 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:26:20 +0100 Subject: [PATCH 082/112] isLessThanTwoWeeksAgo er et bedre navn enn isNotMoreThanTwoWeeksAgo --- src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx | 4 ++-- .../tabs/isLessThanTwoWeeksAgo.test.ts} | 4 ++-- .../{isNotMoreThanTwoWeeksAgo.ts => isLessThanTwoWeeksAgo.ts} | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) rename src/utbetalinger/{isNotMoreThanTwoWeeksAgo.test.ts => beta/tabs/isLessThanTwoWeeksAgo.test.ts} (92%) rename src/utbetalinger/beta/tabs/{isNotMoreThanTwoWeeksAgo.ts => isLessThanTwoWeeksAgo.ts} (69%) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 3845ddbf..d7e2f03f 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -11,7 +11,7 @@ import { UtbetalingMedId } from "../UtbetalingerPanelBeta"; import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbetalingerUtils"; import styles from "./manedgruppe.module.css"; -import { isNotMoreThanTwoWeeksAgo } from "./isNotMoreThanTwoWeeksAgo"; +import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; function statusToTekst(t: (key: string) => string, status?: string) { switch (status) { @@ -34,7 +34,7 @@ interface Props { const UtbetalingAccordionItem = ({ utbetalingManed }: Props) => { const { t, i18n } = useTranslation("utbetalinger"); - const [isOpen, setIsOpen] = useState(isNotMoreThanTwoWeeksAgo(utbetalingManed.utbetalingsdato)); + const [isOpen, setIsOpen] = useState(isLessThanTwoWeeksAgo(utbetalingManed.utbetalingsdato)); return ( <> diff --git a/src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts b/src/utbetalinger/beta/tabs/isLessThanTwoWeeksAgo.test.ts similarity index 92% rename from src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts rename to src/utbetalinger/beta/tabs/isLessThanTwoWeeksAgo.test.ts index 2a14281d..8c5d525f 100644 --- a/src/utbetalinger/isNotMoreThanTwoWeeksAgo.test.ts +++ b/src/utbetalinger/beta/tabs/isLessThanTwoWeeksAgo.test.ts @@ -1,4 +1,4 @@ -import { isNotMoreThanTwoWeeksAgo } from "./beta/tabs/isNotMoreThanTwoWeeksAgo"; +import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; /** * For en gitt referansedato og måldato, forventer vi at funksjonen returnerer et gitt resultat. @@ -10,7 +10,7 @@ import { isNotMoreThanTwoWeeksAgo } from "./beta/tabs/isNotMoreThanTwoWeeksAgo"; const expectResult = (referenceDate: string, targetDate: string, expectedResult: boolean, description: string) => it(`returns ${expectedResult} for ${description}`, () => { jest.setSystemTime(new Date(referenceDate)); - expect(isNotMoreThanTwoWeeksAgo(targetDate)).toBe(expectedResult); + expect(isLessThanTwoWeeksAgo(targetDate)).toBe(expectedResult); }); describe("isNotMoreThanTwoWeeksAgo", () => { diff --git a/src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts b/src/utbetalinger/beta/tabs/isLessThanTwoWeeksAgo.ts similarity index 69% rename from src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts rename to src/utbetalinger/beta/tabs/isLessThanTwoWeeksAgo.ts index 816d85dc..e6b40b73 100644 --- a/src/utbetalinger/beta/tabs/isNotMoreThanTwoWeeksAgo.ts +++ b/src/utbetalinger/beta/tabs/isLessThanTwoWeeksAgo.ts @@ -1,4 +1,4 @@ import { differenceInCalendarDays } from "date-fns"; -export const isNotMoreThanTwoWeeksAgo = (utbetalingsdato?: string) => +export const isLessThanTwoWeeksAgo = (utbetalingsdato?: string) => !utbetalingsdato ? false : Math.abs(differenceInCalendarDays(new Date(), utbetalingsdato)) <= 15; From b3a5e78d84b5a4bdd45a835bf1c1047901209d21 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:26:58 +0100 Subject: [PATCH 083/112] Lager felles error/loading-komponent for nye og tidligere utbetalinger --- .../beta/UtbetalingerPanelBeta.tsx | 12 ++--- .../beta/tabs/NyeUtbetalinger.tsx | 47 ------------------- .../beta/tabs/UtbetalingerLoadingWrapper.tsx | 27 +++++++++++ .../beta/tabs/UtbetalingerNye.tsx | 37 +++++++++++++++ ...talinger.tsx => UtbetalingerTidligere.tsx} | 37 +++++---------- 5 files changed, 82 insertions(+), 78 deletions(-) delete mode 100644 src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx create mode 100644 src/utbetalinger/beta/tabs/UtbetalingerLoadingWrapper.tsx create mode 100644 src/utbetalinger/beta/tabs/UtbetalingerNye.tsx rename src/utbetalinger/beta/tabs/{TidligereUtbetalinger.tsx => UtbetalingerTidligere.tsx} (51%) diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 9ec91d15..841dcf53 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -10,8 +10,8 @@ import { ManedUtbetaling, NyeOgTidligereUtbetalingerResponse } from "../../gener import styles from "./utbetalinger.module.css"; import useFiltrerteUtbetalinger from "./filter/useFiltrerteUtbetalinger"; -import NyeUtbetalinger from "./tabs/NyeUtbetalinger"; -import { TidligereUtbetalinger } from "./tabs/TidligereUtbetalinger"; +import UtbetalingerNye from "./tabs/UtbetalingerNye"; +import { UtbetalingerTidligere } from "./tabs/UtbetalingerTidligere"; import FilterModal from "./filter/FilterModal"; import { addIdToUtbetalinger } from "./addIdToUtbetalinger"; @@ -51,9 +51,7 @@ const UtbetalingerPanelBeta = () => { const filtrerteNye = useFiltrerteUtbetalinger(nye ?? []); - const logTabChange = (tabPath: string) => { - logAmplitudeEvent("Klikket tab", { tab: tabPath }); - }; + const logTabChange = (tab: string) => logAmplitudeEvent("Klikket tab", { tab }); const isMobile = useIsMobile(); return ( @@ -83,11 +81,11 @@ const UtbetalingerPanelBeta = () => { {t("utbetalingerIngress")} - + {t("tidligereIngress")} - + diff --git a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx b/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx deleted file mode 100644 index 7a46dcc2..00000000 --- a/src/utbetalinger/beta/tabs/NyeUtbetalinger.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from "react"; -import { Alert } from "@navikt/ds-react"; -import { useTranslation } from "next-i18next"; - -import { useFilter } from "../filter/FilterContext"; -import Lastestriper from "../../../components/lastestriper/Lasterstriper"; -import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; - -import { ManedGruppe } from "./ManedGruppe"; - -const NyeUtbetalinger = ({ - utbetalinger, - isError, - isLoading, -}: { - utbetalinger: UtbetalingerResponseMedId[]; - isLoading: boolean; - isError: boolean; -}) => { - const { isUsingFilter } = useFilter(); - const { t } = useTranslation("utbetalinger"); - - if (isLoading) return ; - - if (isError) - return ( - - {t("feil.fetch")} - - ); - - if (!utbetalinger.length) - return ( - - {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.nye")} - - ); - - return ( - <> - {utbetalinger.map((utbetalingSak: UtbetalingerResponseMedId) => ( - - ))} - - ); -}; -export default NyeUtbetalinger; diff --git a/src/utbetalinger/beta/tabs/UtbetalingerLoadingWrapper.tsx b/src/utbetalinger/beta/tabs/UtbetalingerLoadingWrapper.tsx new file mode 100644 index 00000000..dd1d02f8 --- /dev/null +++ b/src/utbetalinger/beta/tabs/UtbetalingerLoadingWrapper.tsx @@ -0,0 +1,27 @@ +import React from "react"; +import { useTranslation } from "next-i18next"; +import { Alert } from "@navikt/ds-react"; + +import Lastestriper from "../../../components/lastestriper/Lasterstriper"; + +export const UtbetalingerLoadingWrapper = ({ + isLoading, + isError, + children, +}: { + isLoading: boolean; + isError: boolean; + children: React.ReactNode; +}) => { + const { t } = useTranslation("utbetalinger"); + + if (isLoading) return ; + if (isError) + return ( + + {t("feil.fetch")} + + ); + + return children; +}; diff --git a/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx b/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx new file mode 100644 index 00000000..338cb693 --- /dev/null +++ b/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx @@ -0,0 +1,37 @@ +import React from "react"; +import { Alert } from "@navikt/ds-react"; +import { useTranslation } from "next-i18next"; + +import { useFilter } from "../filter/FilterContext"; +import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; + +import { ManedGruppe } from "./ManedGruppe"; +import { UtbetalingerLoadingWrapper } from "./UtbetalingerLoadingWrapper"; + +const UtbetalingerNye = ({ + utbetalinger, + isError, + isLoading, +}: { + utbetalinger: UtbetalingerResponseMedId[]; + isLoading: boolean; + isError: boolean; +}) => { + const { isUsingFilter } = useFilter(); + const { t } = useTranslation("utbetalinger"); + + return ( + + {utbetalinger?.length ? ( + utbetalinger.map((utbetalingSak) => ( + + )) + ) : ( + + {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.nye")} + + )} + + ); +}; +export default UtbetalingerNye; diff --git a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx b/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx similarity index 51% rename from src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx rename to src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx index ee75ff7f..e2cc2676 100644 --- a/src/utbetalinger/beta/tabs/TidligereUtbetalinger.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx @@ -5,40 +5,29 @@ import { useTranslation } from "next-i18next"; import { useHentTidligereUtbetalinger } from "../../../generated/utbetalinger-controller/utbetalinger-controller"; import useFiltrerteUtbetalinger from "../filter/useFiltrerteUtbetalinger"; import { useFilter } from "../filter/FilterContext"; -import Lastestriper from "../../../components/lastestriper/Lasterstriper"; import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; import { addIdToUtbetalinger } from "../addIdToUtbetalinger"; import { ManedGruppe } from "./ManedGruppe"; +import { UtbetalingerLoadingWrapper } from "./UtbetalingerLoadingWrapper"; -export const TidligereUtbetalinger = () => { +export const UtbetalingerTidligere = () => { const { data, isLoading, isError } = useHentTidligereUtbetalinger({ query: { select: addIdToUtbetalinger } }); const filtrerteTidligere = useFiltrerteUtbetalinger(data ?? []); const { isUsingFilter } = useFilter(); const { t } = useTranslation("utbetalinger"); - if (isLoading) { - return ; - } - if (isError) { - return ( - - {t("feil.fetch")} - - ); - } - if (filtrerteTidligere.length === 0) - return ( - - {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.tidligere")} - - ); - return ( - <> - {filtrerteTidligere.map((utbetalingSak: UtbetalingerResponseMedId) => ( - - ))} - + + {filtrerteTidligere?.length ? ( + filtrerteTidligere.map((utbetalingSak: UtbetalingerResponseMedId) => ( + + )) + ) : ( + + {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.tidligere")} + + )} + ); }; From 48e433175b4bdd5598810ef7e64488f0645390a8 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:29:09 +0100 Subject: [PATCH 084/112] Div safe refaktorering, spes. propagate to destructuring --- .../beta/tabs/UtbetalingAccordionItem.tsx | 63 +++++++++++-------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index d7e2f03f..475284fc 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -28,13 +28,27 @@ function statusToTekst(t: (key: string) => string, status?: string) { return status?.toLowerCase?.() + " " ?? "Ingen status"; } } -interface Props { - utbetalingManed: UtbetalingMedId; -} -const UtbetalingAccordionItem = ({ utbetalingManed }: Props) => { +const UtbetalingAccordionItem = ({ + utbetalingManed: { + annenMottaker, + belop, + fiksDigisosId, + fom, + forfallsdato, + kontonummer, + mottaker, + status, + tittel, + tom, + utbetalingsdato, + utbetalingsmetode, + }, +}: { + utbetalingManed: UtbetalingMedId; +}) => { const { t, i18n } = useTranslation("utbetalinger"); - const [isOpen, setIsOpen] = useState(isLessThanTwoWeeksAgo(utbetalingManed.utbetalingsdato)); + const [isOpen, setIsOpen] = useState(isLessThanTwoWeeksAgo(utbetalingsdato)); return ( <> @@ -42,27 +56,25 @@ const UtbetalingAccordionItem = ({ utbetalingManed }: Props) => { { - logAmplitudeEvent(isOpen ? "accordion lukket" : "accordion åpnet", { - tekst: "Utbetaling", - }); + logAmplitudeEvent(isOpen ? "accordion lukket" : "accordion åpnet", { tekst: "Utbetaling" }); setIsOpen((isOpen) => !isOpen); }} >
- {hentUtbetalingTittel(utbetalingManed.tittel, t("default_utbetalinger_tittel"))} + {hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} - {utbetalingManed.status === "STOPPET" ? ( + {status === "STOPPET" ? ( <>{t("utbetalinger:stoppet")} ) : ( <> - {statusToTekst(t, utbetalingManed.status)} - {utbetalingManed.utbetalingsdato - ? getDayAndMonth(utbetalingManed.utbetalingsdato, i18n.language) - : utbetalingManed.forfallsdato - ? getDayAndMonth(utbetalingManed.forfallsdato, i18n.language) + {statusToTekst(t, status)} + {utbetalingsdato + ? getDayAndMonth(utbetalingsdato, i18n.language) + : forfallsdato + ? getDayAndMonth(forfallsdato, i18n.language) : t("ukjentDato")} )} @@ -70,46 +82,45 @@ const UtbetalingAccordionItem = ({ utbetalingManed }: Props) => {
- {utbetalingManed.status === "STOPPET" ? ( + {status === "STOPPET" ? ( {t("opprinneligSum")} - {formatCurrency(utbetalingManed.belop, i18n.language)} kr + {formatCurrency(belop, i18n.language)} kr ) : ( - <>{formatCurrency(utbetalingManed.belop, i18n.language)} kr + <>{formatCurrency(belop, i18n.language)} kr )}
- {utbetalingManed.fom && utbetalingManed.tom && ( + {fom && tom && ( <> {t("periode")} - {formatDato(utbetalingManed.fom, i18n.language)} -{" "} - {formatDato(utbetalingManed.tom, i18n.language)} + {formatDato(fom, i18n.language)} - {formatDato(tom, i18n.language)} )} <> {t("mottaker")} - {utbetalingManed.annenMottaker ? ( + {annenMottaker ? ( - {utbetalingManed.mottaker} + {mottaker} ) : ( {`${t("tilDeg")} (${hentTekstForUtbetalingsmetode( - utbetalingManed.utbetalingsmetode ?? "", + utbetalingsmetode ?? "", i18n - )} ${utbetalingManed.kontonummer}) + )} ${kontonummer}) `} )} logButtonOrLinkClick("Åpner søknaden fra utbetalingen")} > From a58cdbd306c183569bbb18fba0c1be98f25d3715 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:33:16 +0100 Subject: [PATCH 085/112] Endrer Accordion.Item fra controlled til uncontrolled for ytelse --- .../beta/tabs/UtbetalingAccordionItem.tsx | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 475284fc..22266428 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -1,6 +1,5 @@ import { Accordion, BodyShort } from "@navikt/ds-react"; import { FileTextIcon } from "@navikt/aksel-icons"; -import React, { useState } from "react"; import { useTranslation } from "next-i18next"; import Link from "next/link"; import { logger } from "@navikt/next-logger"; @@ -12,7 +11,8 @@ import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbet import styles from "./manedgruppe.module.css"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; - +const onOpenChange = (open: boolean) => + logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); function statusToTekst(t: (key: string) => string, status?: string) { switch (status) { case "STOPPET": @@ -48,18 +48,11 @@ const UtbetalingAccordionItem = ({ utbetalingManed: UtbetalingMedId; }) => { const { t, i18n } = useTranslation("utbetalinger"); - const [isOpen, setIsOpen] = useState(isLessThanTwoWeeksAgo(utbetalingsdato)); return ( <> - - { - logAmplitudeEvent(isOpen ? "accordion lukket" : "accordion åpnet", { tekst: "Utbetaling" }); - setIsOpen((isOpen) => !isOpen); - }} - > + +
From eb0ed6d7249c122632eef6d71663c1ed36bf8dfc Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:40:10 +0100 Subject: [PATCH 086/112] =?UTF-8?q?Forenkler=20erStoppet/utbetalingsbel?= =?UTF-8?q?=C3=B8p?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beta/tabs/UtbetalingAccordionItem.tsx | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 22266428..ba1858b8 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -3,11 +3,13 @@ import { FileTextIcon } from "@navikt/aksel-icons"; import { useTranslation } from "next-i18next"; import Link from "next/link"; import { logger } from "@navikt/next-logger"; +import cx from "classnames"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; import { formatCurrency, formatDato, getDayAndMonth } from "../../../utils/formatting"; import { UtbetalingMedId } from "../UtbetalingerPanelBeta"; import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbetalingerUtils"; +import { ManedUtbetalingStatus } from "../../../generated/model"; import styles from "./manedgruppe.module.css"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; @@ -48,18 +50,19 @@ const UtbetalingAccordionItem = ({ utbetalingManed: UtbetalingMedId; }) => { const { t, i18n } = useTranslation("utbetalinger"); + const erStoppet = status === ManedUtbetalingStatus.STOPPET; return ( <> - +
{hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} - {status === "STOPPET" ? ( + {erStoppet ? ( <>{t("utbetalinger:stoppet")} ) : ( <> @@ -74,15 +77,9 @@ const UtbetalingAccordionItem = ({
- - {status === "STOPPET" ? ( - - {t("opprinneligSum")} - {formatCurrency(belop, i18n.language)} kr - - ) : ( - <>{formatCurrency(belop, i18n.language)} kr - )} + + {!erStoppet && {t("opprinneligSum")}} + {formatCurrency(belop, i18n.language)} kr
From 2d6278e2f53b3a52d9dbdb552a5585351747db0d Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 17:47:15 +0100 Subject: [PATCH 087/112] Refaktor av formattere MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * .replace er ikke nødvendig; DateTimeFormat legger punktum på ordinaltall * syntaksendringer (disse funksjonene kommer ikke til å leve lenge) --- src/utils/formatting.ts | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/utils/formatting.ts b/src/utils/formatting.ts index 107e5c16..85960098 100644 --- a/src/utils/formatting.ts +++ b/src/utils/formatting.ts @@ -10,29 +10,28 @@ function formatBytes(bytes: number, decimals: number = 2): string { } // Eksempel: formatCurrency(12345) => 12.345 -function formatCurrency(amount: number, language: string): string { - return new Intl.NumberFormat(language).format(amount); -} +const formatCurrency = (amount: number, language: string): string => new Intl.NumberFormat(language).format(amount); // Eksempel: "2019-08-01" => "01. august 2019" -function formatDato(isoDate: string, language: string) { - const dato: Date = new Date(isoDate); - const formatter = new Intl.DateTimeFormat(language, { day: "numeric", month: "long", year: "numeric" }); - return formatter.format(dato).replace(/([0-9]) /, "$1. "); -} +export const formatDato = (isoDate: string, language: string) => + new Intl.DateTimeFormat(language, { + day: "numeric", + month: "long", + year: "numeric", + }).format(new Date(isoDate)); + // Eksempel "2022-04-11" => "11. april" -export function getDayAndMonth(isoDate: string, language: string) { - const dato: Date = new Date(isoDate); - const formatter = new Intl.DateTimeFormat(language, { day: "numeric", month: "long" }); - return formatter.format(dato).replace(/([0-9]) /, "$1. "); -} +export const getDayAndMonth = (isoDate: string, language: string) => + new Intl.DateTimeFormat(language, { + day: "numeric", + month: "long", + }).format(new Date(isoDate)); -export function dateToDDMMYYYY(language: string, dato: Date) { - return new Intl.DateTimeFormat(language, { +export const dateToDDMMYYYY = (language: string, dato: Date) => + new Intl.DateTimeFormat(language, { day: "2-digit", month: "2-digit", year: "numeric", }).format(dato); -} -export { formatBytes, formatCurrency, formatDato }; +export { formatBytes, formatCurrency }; From a94d534091e084698d38535deb032cf4d373ad70 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 18:01:08 +0100 Subject: [PATCH 088/112] Migrerer fra styled-components til tailwind & div refaktor --- src/utbetalinger/beta/tabs/ManedGruppe.tsx | 5 +- .../beta/tabs/UtbetalingAccordionItem.tsx | 56 ++++++++----------- .../beta/tabs/manedgruppe.module.css | 54 ------------------ 3 files changed, 24 insertions(+), 91 deletions(-) delete mode 100644 src/utbetalinger/beta/tabs/manedgruppe.module.css diff --git a/src/utbetalinger/beta/tabs/ManedGruppe.tsx b/src/utbetalinger/beta/tabs/ManedGruppe.tsx index 2d8e4da7..bcea8077 100644 --- a/src/utbetalinger/beta/tabs/ManedGruppe.tsx +++ b/src/utbetalinger/beta/tabs/ManedGruppe.tsx @@ -4,7 +4,6 @@ import { set } from "date-fns"; import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; -import styles from "./manedgruppe.module.css"; import UtbetalingAccordionItem from "./UtbetalingAccordionItem"; const getMonthYearString = (i18n: I18n, date: Date) => @@ -18,8 +17,8 @@ export const ManedGruppe = ({ const { i18n } = useTranslation(); return ( -
- +
+ {getMonthYearString(i18n, set(new Date(0), { year: ar, month: maned - 1 }))} diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index ba1858b8..3fa7575d 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -11,23 +11,21 @@ import { UtbetalingMedId } from "../UtbetalingerPanelBeta"; import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbetalingerUtils"; import { ManedUtbetalingStatus } from "../../../generated/model"; -import styles from "./manedgruppe.module.css"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; const onOpenChange = (open: boolean) => logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); -function statusToTekst(t: (key: string) => string, status?: string) { + +function statusToTekst(status?: ManedUtbetalingStatus) { switch (status) { - case "STOPPET": - return t("utbetalinger:stoppet") + " "; - case "PLANLAGT_UTBETALING": - return t("utbetalinger:planlagt") + " "; - case "UTBETALT": - return t("utbetalinger:utbetalt") + " "; + case ManedUtbetalingStatus.STOPPET: + return "stoppet"; + case ManedUtbetalingStatus.PLANLAGT_UTBETALING: + return "planlagt"; + case ManedUtbetalingStatus.UTBETALT: + return "utbetalt"; default: - if (!status?.toLowerCase) { - logger.error("Status is not a string in statusToTekst? Status: " + status); - } - return status?.toLowerCase?.() + " " ?? "Ingen status"; + if (!status?.toLowerCase) logger.error("Status is not a string in statusToTekst? Status: " + status); + return status?.toLowerCase?.() ?? "Ingen status"; } } @@ -51,29 +49,19 @@ const UtbetalingAccordionItem = ({ }) => { const { t, i18n } = useTranslation("utbetalinger"); const erStoppet = status === ManedUtbetalingStatus.STOPPET; - + const dato = utbetalingsdato ?? forfallsdato; + const datoStreng = dato ? getDayAndMonth(dato, i18n.language) : t("ukjentDato"); return ( <> -
-
- +
+
+ {hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} - {erStoppet ? ( - <>{t("utbetalinger:stoppet")} - ) : ( - <> - {statusToTekst(t, status)} - {utbetalingsdato - ? getDayAndMonth(utbetalingsdato, i18n.language) - : forfallsdato - ? getDayAndMonth(forfallsdato, i18n.language) - : t("ukjentDato")} - - )} + {t(statusToTekst(status))} {erStoppet ? null : datoStreng}
@@ -83,19 +71,19 @@ const UtbetalingAccordionItem = ({
- + {fom && tom && ( <> - {t("periode")} + {t("periode")} {formatDato(fom, i18n.language)} - {formatDato(tom, i18n.language)} )} <> - {t("mottaker")} + {t("mottaker")} {annenMottaker ? ( - + {mottaker} ) : ( @@ -110,8 +98,8 @@ const UtbetalingAccordionItem = ({ logButtonOrLinkClick("Åpner søknaden fra utbetalingen")} > diff --git a/src/utbetalinger/beta/tabs/manedgruppe.module.css b/src/utbetalinger/beta/tabs/manedgruppe.module.css deleted file mode 100644 index c3312e75..00000000 --- a/src/utbetalinger/beta/tabs/manedgruppe.module.css +++ /dev/null @@ -1,54 +0,0 @@ -.month_group { - margin-bottom: 40px; -} - -.uthevetTekst { - font-weight: bold; -} -.capitalize { - text-transform: capitalize; -} -.monthYear_header { - margin-bottom: 4px; -} - -.stoppetTekst { - margin-right: 8px; -} - -.accordion_headerContent { - display: flex; - gap: 8px; - flex-direction: row; - align-items: center; -} - -.float_left { - display: flex; - flex-wrap: wrap; - gap: 8px; - max-width: 80%; -} -.accordion_headerContent > .float_right { - margin-left: auto; -} - -.accordion_headerContent s { - color: var(--a-text-subtle); -} - -.accordion_header { - align-items: center; -} -.accordion_header > span:nth-child(2) { - width: 100%; -} - -.accordion_content { - padding-top: 8px; -} -.soknadLenke { - align-items: center; - gap: 8px; - display: flex; -} From 70299616a233039ab9c779938444663b1b9f7110 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 18:12:27 +0100 Subject: [PATCH 089/112] Forenkler i18n for utbetalingsstatus --- public/locales/en/utbetalinger.json | 7 ++++--- public/locales/nb/utbetalinger.json | 7 ++++--- public/locales/nn/utbetalinger.json | 7 ++++--- .../beta/tabs/UtbetalingAccordionItem.tsx | 18 ++---------------- 4 files changed, 14 insertions(+), 25 deletions(-) diff --git a/public/locales/en/utbetalinger.json b/public/locales/en/utbetalinger.json index 68537daa..e76192a1 100644 --- a/public/locales/en/utbetalinger.json +++ b/public/locales/en/utbetalinger.json @@ -27,9 +27,10 @@ "feil.ingen.filter":"We could not find any payments for selected filtering", "feil.ingen.default.tidligere":"We could not find any payments for the last 15 months", "feil.ingen.default.nye":"We could not find any payments for current or coming months", - "stoppet": "Stopped", - "planlagt": "Planned", - "utbetalt" : "Paid", + "utbetalingStatus.STOPPET": "Stopped", + "utbetalingStatus.PLANLAGT_UTBETALING": "Planned", + "utbetalingStatus.UTBETALT": "Paid", + "utbetalingStatus.ANNULLERT": "Annulled", "periode" : "Period", "mottaker" : "Recipient", "tilDeg": "To you", diff --git a/public/locales/nb/utbetalinger.json b/public/locales/nb/utbetalinger.json index fa37c177..0fe65959 100644 --- a/public/locales/nb/utbetalinger.json +++ b/public/locales/nb/utbetalinger.json @@ -27,9 +27,10 @@ "feil.ingen.filter":"Vi fant ingen utbetalinger for valgt filtrering", "feil.ingen.default.tidligere":"Vi fant ingen utbetalinger for de siste 15 måneder", "feil.ingen.default.nye":"Vi fant ingen utbetalinger for nåværende eller kommende måneder", - "stoppet": "Stoppet", - "planlagt": "Planlagt", - "utbetalt" : "Utbetalt", + "utbetalingStatus.STOPPET": "Stoppet", + "utbetalingStatus.PLANLAGT_UTBETALING": "Planlagt", + "utbetalingStatus.UTBETALT": "Utbetalt", + "utbetalingStatus.ANNULLERT": "Annullert", "periode" : "Periode", "mottaker" : "Mottaker", "tilDeg": "Til deg", diff --git a/public/locales/nn/utbetalinger.json b/public/locales/nn/utbetalinger.json index 161b118d..73118c78 100644 --- a/public/locales/nn/utbetalinger.json +++ b/public/locales/nn/utbetalinger.json @@ -27,9 +27,10 @@ "feil.ingen.filter":"Vi fann ingen utbetalingar med filteret som er valt", "feil.ingen.default.tidligere":"Vi fann ingen utbetalingar for dei siste 15 månadene", "feil.ingen.default.nye":"Vi fann ingen utbetalingar for inneverande eller komande månader", - "stoppet": "Stoppa", - "planlagt": "Planlagt", - "utbetalt" : "Utbetalt", + "utbetalingStatus.STOPPET": "Stoppa", + "utbetalingStatus.PLANLAGT_UTBETALING": "Planlagt", + "utbetalingStatus.UTBETALT": "Utbetalt", + "utbetalingStatus.ANNULLERT": "Annullert", "periode" : "Periode", "mottaker" : "Mottakar", "tilDeg": "Til deg", diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 3fa7575d..5ffbdc00 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -2,7 +2,6 @@ import { Accordion, BodyShort } from "@navikt/ds-react"; import { FileTextIcon } from "@navikt/aksel-icons"; import { useTranslation } from "next-i18next"; import Link from "next/link"; -import { logger } from "@navikt/next-logger"; import cx from "classnames"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; @@ -12,23 +11,10 @@ import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbet import { ManedUtbetalingStatus } from "../../../generated/model"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; + const onOpenChange = (open: boolean) => logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); -function statusToTekst(status?: ManedUtbetalingStatus) { - switch (status) { - case ManedUtbetalingStatus.STOPPET: - return "stoppet"; - case ManedUtbetalingStatus.PLANLAGT_UTBETALING: - return "planlagt"; - case ManedUtbetalingStatus.UTBETALT: - return "utbetalt"; - default: - if (!status?.toLowerCase) logger.error("Status is not a string in statusToTekst? Status: " + status); - return status?.toLowerCase?.() ?? "Ingen status"; - } -} - const UtbetalingAccordionItem = ({ utbetalingManed: { annenMottaker, @@ -61,7 +47,7 @@ const UtbetalingAccordionItem = ({ {hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} - {t(statusToTekst(status))} {erStoppet ? null : datoStreng} + {t(`utbetalingStatus.${status}` as const)} {erStoppet ? null : datoStreng}
From a5307646d73e55c19354ff5477e101f679a688b2 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 18:36:42 +0100 Subject: [PATCH 090/112] Forenkler UUID-generering og skroter custom datatype --- .../beta/UtbetalingerPanelBeta.tsx | 12 +----------- src/utbetalinger/beta/addIdToUtbetalinger.tsx | 15 --------------- .../beta/filter/useFiltrerteUtbetalinger.ts | 5 ++--- src/utbetalinger/beta/tabs/ManedGruppe.tsx | 18 ++++++++++++++---- .../beta/tabs/UtbetalingAccordionItem.tsx | 7 +++---- src/utbetalinger/beta/tabs/UtbetalingerNye.tsx | 4 ++-- .../beta/tabs/UtbetalingerTidligere.tsx | 7 +++---- 7 files changed, 25 insertions(+), 43 deletions(-) delete mode 100644 src/utbetalinger/beta/addIdToUtbetalinger.tsx diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 841dcf53..414f4a33 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -6,27 +6,17 @@ import HandCoinsIcon from "../../components/ikoner/HandCoins"; import { useHentNyeUtbetalinger } from "../../generated/utbetalinger-controller/utbetalinger-controller"; import { logAmplitudeEvent } from "../../utils/amplitude"; import useIsMobile from "../../utils/useIsMobile"; -import { ManedUtbetaling, NyeOgTidligereUtbetalingerResponse } from "../../generated/model"; import styles from "./utbetalinger.module.css"; import useFiltrerteUtbetalinger from "./filter/useFiltrerteUtbetalinger"; import UtbetalingerNye from "./tabs/UtbetalingerNye"; import { UtbetalingerTidligere } from "./tabs/UtbetalingerTidligere"; import FilterModal from "./filter/FilterModal"; -import { addIdToUtbetalinger } from "./addIdToUtbetalinger"; const TAB_UTBETALINGER = "Utbetalinger" as const; const TAB_TIDLIGERE = "Tidligere utbetalinger" as const; type UtbetalingTab = typeof TAB_UTBETALINGER | typeof TAB_TIDLIGERE; -export interface UtbetalingMedId extends ManedUtbetaling { - id: string; -} - -export interface UtbetalingerResponseMedId extends Omit { - utbetalingerForManed: UtbetalingMedId[]; -} - const UtbetalingerPanelBeta = () => { const [nyeLogged, setNyeLogged] = useState(false); @@ -34,7 +24,7 @@ const UtbetalingerPanelBeta = () => { const { t } = useTranslation("utbetalinger"); - const { data: nye, isLoading, isError } = useHentNyeUtbetalinger({ query: { select: addIdToUtbetalinger } }); + const { data: nye, isLoading, isError } = useHentNyeUtbetalinger(); useEffect(() => { if (!nyeLogged && nye?.length) { diff --git a/src/utbetalinger/beta/addIdToUtbetalinger.tsx b/src/utbetalinger/beta/addIdToUtbetalinger.tsx deleted file mode 100644 index 11405e4c..00000000 --- a/src/utbetalinger/beta/addIdToUtbetalinger.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { NyeOgTidligereUtbetalingerResponse } from "../../generated/model"; - -import { UtbetalingMedId } from "./UtbetalingerPanelBeta"; - -const leggIdPaaUtbetalingerForManed = (item: NyeOgTidligereUtbetalingerResponse): UtbetalingMedId[] => - item.utbetalingerForManed.map((utbetaling) => ({ - ...utbetaling, - id: crypto.randomUUID(), - })); -// Legg på en id på hver utbetaling -export const addIdToUtbetalinger = (data: NyeOgTidligereUtbetalingerResponse[]) => - data.map((item) => ({ - ...item, - utbetalingerForManed: leggIdPaaUtbetalingerForManed(item), - })); diff --git a/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts b/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts index a32cda12..bcf047f1 100644 --- a/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts +++ b/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts @@ -1,8 +1,7 @@ import React from "react"; import { isAfter, isBefore, isEqual } from "date-fns"; -import { ManedUtbetaling } from "../../../generated/model"; -import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; +import { ManedUtbetaling, NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; import { FilterKey, MottakerFilter, useFilter } from "./FilterContext"; @@ -31,7 +30,7 @@ export const filterMatch = (utbetaling: ManedUtbetaling, filter: FilterKey) => { return matchMottaker && matchTil && matchFra; }; -const useFiltrerteUtbetalinger = (utbetalinger: UtbetalingerResponseMedId[]) => { +const useFiltrerteUtbetalinger = (utbetalinger: NyeOgTidligereUtbetalingerResponse[]) => { const { filter } = useFilter(); return React.useMemo(() => { diff --git a/src/utbetalinger/beta/tabs/ManedGruppe.tsx b/src/utbetalinger/beta/tabs/ManedGruppe.tsx index bcea8077..24bdac30 100644 --- a/src/utbetalinger/beta/tabs/ManedGruppe.tsx +++ b/src/utbetalinger/beta/tabs/ManedGruppe.tsx @@ -1,8 +1,9 @@ import { Accordion, BodyShort } from "@navikt/ds-react"; import { I18n, useTranslation } from "next-i18next"; import { set } from "date-fns"; +import { useMemo } from "react"; -import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; +import { NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; import UtbetalingAccordionItem from "./UtbetalingAccordionItem"; @@ -12,18 +13,27 @@ const getMonthYearString = (i18n: I18n, date: Date) => export const ManedGruppe = ({ utbetalingSak: { ar, maned, utbetalingerForManed }, }: { - utbetalingSak: UtbetalingerResponseMedId; + utbetalingSak: NyeOgTidligereUtbetalingerResponse; }) => { const { i18n } = useTranslation(); + const withIds = useMemo( + () => + utbetalingerForManed.map((utbetaling) => ({ + ...utbetaling, + uuid: crypto.randomUUID(), + })), + [utbetalingerForManed] + ); + return (
{getMonthYearString(i18n, set(new Date(0), { year: ar, month: maned - 1 }))} - {utbetalingerForManed.map((utbetalingManed) => ( - + {withIds.map((utbetaling) => ( + ))}
diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 5ffbdc00..628ef157 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -6,9 +6,8 @@ import cx from "classnames"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; import { formatCurrency, formatDato, getDayAndMonth } from "../../../utils/formatting"; -import { UtbetalingMedId } from "../UtbetalingerPanelBeta"; import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbetalingerUtils"; -import { ManedUtbetalingStatus } from "../../../generated/model"; +import { type ManedUtbetaling, ManedUtbetalingStatus } from "../../../generated/model"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; @@ -16,7 +15,7 @@ const onOpenChange = (open: boolean) => logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); const UtbetalingAccordionItem = ({ - utbetalingManed: { + utbetaling: { annenMottaker, belop, fiksDigisosId, @@ -31,7 +30,7 @@ const UtbetalingAccordionItem = ({ utbetalingsmetode, }, }: { - utbetalingManed: UtbetalingMedId; + utbetaling: ManedUtbetaling; }) => { const { t, i18n } = useTranslation("utbetalinger"); const erStoppet = status === ManedUtbetalingStatus.STOPPET; diff --git a/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx b/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx index 338cb693..69a52d2c 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx @@ -3,7 +3,7 @@ import { Alert } from "@navikt/ds-react"; import { useTranslation } from "next-i18next"; import { useFilter } from "../filter/FilterContext"; -import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; +import { NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; import { ManedGruppe } from "./ManedGruppe"; import { UtbetalingerLoadingWrapper } from "./UtbetalingerLoadingWrapper"; @@ -13,7 +13,7 @@ const UtbetalingerNye = ({ isError, isLoading, }: { - utbetalinger: UtbetalingerResponseMedId[]; + utbetalinger: NyeOgTidligereUtbetalingerResponse[]; isLoading: boolean; isError: boolean; }) => { diff --git a/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx b/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx index e2cc2676..32d63840 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx @@ -5,14 +5,13 @@ import { useTranslation } from "next-i18next"; import { useHentTidligereUtbetalinger } from "../../../generated/utbetalinger-controller/utbetalinger-controller"; import useFiltrerteUtbetalinger from "../filter/useFiltrerteUtbetalinger"; import { useFilter } from "../filter/FilterContext"; -import { UtbetalingerResponseMedId } from "../UtbetalingerPanelBeta"; -import { addIdToUtbetalinger } from "../addIdToUtbetalinger"; +import { NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; import { ManedGruppe } from "./ManedGruppe"; import { UtbetalingerLoadingWrapper } from "./UtbetalingerLoadingWrapper"; export const UtbetalingerTidligere = () => { - const { data, isLoading, isError } = useHentTidligereUtbetalinger({ query: { select: addIdToUtbetalinger } }); + const { data, isLoading, isError } = useHentTidligereUtbetalinger(); const filtrerteTidligere = useFiltrerteUtbetalinger(data ?? []); const { isUsingFilter } = useFilter(); const { t } = useTranslation("utbetalinger"); @@ -20,7 +19,7 @@ export const UtbetalingerTidligere = () => { return ( {filtrerteTidligere?.length ? ( - filtrerteTidligere.map((utbetalingSak: UtbetalingerResponseMedId) => ( + filtrerteTidligere.map((utbetalingSak: NyeOgTidligereUtbetalingerResponse) => ( )) ) : ( From f93d56adf8201206f3be3248eb9dc2383708d9b1 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 18:42:04 +0100 Subject: [PATCH 091/112] Splitter UtbetalingAccordionHeader ut til egen fil --- .../beta/tabs/UtbetalingAccordionHeader.tsx | 41 +++++++++++++++++++ .../beta/tabs/UtbetalingAccordionItem.tsx | 29 +++---------- 2 files changed, 47 insertions(+), 23 deletions(-) create mode 100644 src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx new file mode 100644 index 00000000..6ff94a54 --- /dev/null +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx @@ -0,0 +1,41 @@ +import { useTranslation } from "next-i18next"; +import { Accordion, BodyShort } from "@navikt/ds-react"; +import cx from "classnames"; + +import { ManedUtbetaling, ManedUtbetalingStatus } from "../../../generated/model"; +import { formatCurrency, getDayAndMonth } from "../../../utils/formatting"; +import { hentUtbetalingTittel } from "../../utbetalingerUtils"; + +export const UtbetalingAccordionHeader = ({ + tittel, + belop, + status, + dato, +}: Pick & { + dato: string | undefined; +}) => { + const { t, i18n } = useTranslation("utbetalinger"); + + const datoStreng = dato ? getDayAndMonth(dato, i18n.language) : t("ukjentDato"); + const erStoppet = status === ManedUtbetalingStatus.STOPPET; + + return ( + +
+
+ + {hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} + + + {t(`utbetalingStatus.${status}` as const)} {erStoppet ? null : datoStreng} + +
+ + + {!erStoppet && {t("opprinneligSum")}} + {formatCurrency(belop, i18n.language)} kr + +
+
+ ); +}; diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 628ef157..7211af0e 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -2,14 +2,14 @@ import { Accordion, BodyShort } from "@navikt/ds-react"; import { FileTextIcon } from "@navikt/aksel-icons"; import { useTranslation } from "next-i18next"; import Link from "next/link"; -import cx from "classnames"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; -import { formatCurrency, formatDato, getDayAndMonth } from "../../../utils/formatting"; -import { hentTekstForUtbetalingsmetode, hentUtbetalingTittel } from "../../utbetalingerUtils"; -import { type ManedUtbetaling, ManedUtbetalingStatus } from "../../../generated/model"; +import { formatDato } from "../../../utils/formatting"; +import { hentTekstForUtbetalingsmetode } from "../../utbetalingerUtils"; +import { type ManedUtbetaling } from "../../../generated/model"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; +import { UtbetalingAccordionHeader } from "./UtbetalingAccordionHeader"; const onOpenChange = (open: boolean) => logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); @@ -33,29 +33,12 @@ const UtbetalingAccordionItem = ({ utbetaling: ManedUtbetaling; }) => { const { t, i18n } = useTranslation("utbetalinger"); - const erStoppet = status === ManedUtbetalingStatus.STOPPET; const dato = utbetalingsdato ?? forfallsdato; - const datoStreng = dato ? getDayAndMonth(dato, i18n.language) : t("ukjentDato"); + return ( <> - -
-
- - {hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} - - - {t(`utbetalingStatus.${status}` as const)} {erStoppet ? null : datoStreng} - -
- - - {!erStoppet && {t("opprinneligSum")}} - {formatCurrency(belop, i18n.language)} kr - -
-
+ {fom && tom && ( <> From 1c93f49799cdf57ab82334606183fc3123058ee3 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 18:52:47 +0100 Subject: [PATCH 092/112] Refaktor av utbetalingsmetode for lesbarhet --- src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx | 8 ++------ src/utbetalinger/utbetalingerUtils.ts | 10 ++++++---- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 7211af0e..5132f036 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -5,7 +5,7 @@ import Link from "next/link"; import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; import { formatDato } from "../../../utils/formatting"; -import { hentTekstForUtbetalingsmetode } from "../../utbetalingerUtils"; +import { utbetalingsmetodeText } from "../../utbetalingerUtils"; import { type ManedUtbetaling } from "../../../generated/model"; import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; @@ -56,11 +56,7 @@ const UtbetalingAccordionItem = ({ ) : ( - {`${t("tilDeg")} (${hentTekstForUtbetalingsmetode( - utbetalingsmetode ?? "", - i18n - )} ${kontonummer}) - `} + {t("tilDeg")} {utbetalingsmetodeText(utbetalingsmetode, i18n)} {kontonummer} )} diff --git a/src/utbetalinger/utbetalingerUtils.ts b/src/utbetalinger/utbetalingerUtils.ts index 6ae7a50e..6831491d 100644 --- a/src/utbetalinger/utbetalingerUtils.ts +++ b/src/utbetalinger/utbetalingerUtils.ts @@ -3,9 +3,11 @@ import { i18n } from "i18next"; const hentUtbetalingTittel = (tittel: string, defaultTittel: string) => tittel && tittel !== "default_utbetalinger_tittel" ? tittel : defaultTittel; -const hentTekstForUtbetalingsmetode = (utbetalingsmetode: string, i18n: i18n) => - i18n.exists(`utbetalingsmetode.${utbetalingsmetode.toLowerCase()}`) - ? i18n.t(`utbetalingsmetode.${utbetalingsmetode.toLowerCase()}`) +const utbetalingsmetodeText = (utbetalingsmetode: string | undefined, i18n: i18n) => { + if (!utbetalingsmetode) return null; + return i18n.exists(`utbetalingsmetode.${utbetalingsmetode?.toLowerCase()}`) + ? i18n.t(`utbetalingsmetode.${utbetalingsmetode?.toLowerCase()}`) : utbetalingsmetode; +}; -export { hentUtbetalingTittel, hentTekstForUtbetalingsmetode }; +export { hentUtbetalingTittel, utbetalingsmetodeText }; From 7e95744cc21b9fa16570174e3957eeb10786134e Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 18:53:51 +0100 Subject: [PATCH 093/112] =?UTF-8?q?Fjerner=20to=20niv=C3=A5er=20med=20no-o?= =?UTF-8?q?p=20JSX-fragments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beta/tabs/UtbetalingAccordionItem.tsx | 62 +++++++++---------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx index 5132f036..bdf3c725 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx @@ -36,42 +36,38 @@ const UtbetalingAccordionItem = ({ const dato = utbetalingsdato ?? forfallsdato; return ( - <> - - - - {fom && tom && ( - <> - {t("periode")} - - {formatDato(fom, i18n.language)} - {formatDato(tom, i18n.language)} - - - )} + + + + {fom && tom && ( <> - {t("mottaker")} - {annenMottaker ? ( - - {mottaker} - - ) : ( - - {t("tilDeg")} {utbetalingsmetodeText(utbetalingsmetode, i18n)} {kontonummer} - - )} + {t("periode")} + + {formatDato(fom, i18n.language)} - {formatDato(tom, i18n.language)} + + )} + {t("mottaker")} + {annenMottaker ? ( + + {mottaker} + + ) : ( + + {t("tilDeg")} {utbetalingsmetodeText(utbetalingsmetode, i18n)} {kontonummer} + + )} - logButtonOrLinkClick("Åpner søknaden fra utbetalingen")} - > - - {t("soknadLenke")} - - - - + logButtonOrLinkClick("Åpner søknaden fra utbetalingen")} + > + + {t("soknadLenke")} + + + ); }; export default UtbetalingAccordionItem; From cf349ac761b8f40d763f943c4f09404bcaf79edb Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Mon, 20 Jan 2025 19:09:59 +0100 Subject: [PATCH 094/112] Splitter UtbetalingAccordionContent til egen fil, inliner AccordionItem --- src/utbetalinger/beta/tabs/ManedGruppe.tsx | 45 ++++++++++-- .../beta/tabs/UtbetalingAccordionContent.tsx | 56 ++++++++++++++ .../beta/tabs/UtbetalingAccordionItem.tsx | 73 ------------------- 3 files changed, 93 insertions(+), 81 deletions(-) create mode 100644 src/utbetalinger/beta/tabs/UtbetalingAccordionContent.tsx delete mode 100644 src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx diff --git a/src/utbetalinger/beta/tabs/ManedGruppe.tsx b/src/utbetalinger/beta/tabs/ManedGruppe.tsx index 24bdac30..ce274530 100644 --- a/src/utbetalinger/beta/tabs/ManedGruppe.tsx +++ b/src/utbetalinger/beta/tabs/ManedGruppe.tsx @@ -1,14 +1,17 @@ import { Accordion, BodyShort } from "@navikt/ds-react"; -import { I18n, useTranslation } from "next-i18next"; +import { useTranslation } from "next-i18next"; import { set } from "date-fns"; import { useMemo } from "react"; import { NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; +import { logAmplitudeEvent } from "../../../utils/amplitude"; -import UtbetalingAccordionItem from "./UtbetalingAccordionItem"; +import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; +import { UtbetalingAccordionHeader } from "./UtbetalingAccordionHeader"; +import { UtbetalingAccordionContent } from "./UtbetalingAccordionContent"; -const getMonthYearString = (i18n: I18n, date: Date) => - date.toLocaleString(i18n.language, { month: "long", year: "numeric" }); +export const onOpenChange = (open: boolean) => + logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); export const ManedGruppe = ({ utbetalingSak: { ar, maned, utbetalingerForManed }, @@ -17,7 +20,7 @@ export const ManedGruppe = ({ }) => { const { i18n } = useTranslation(); - const withIds = useMemo( + const utbetalingerMedId = useMemo( () => utbetalingerForManed.map((utbetaling) => ({ ...utbetaling, @@ -29,11 +32,37 @@ export const ManedGruppe = ({ return (
- {getMonthYearString(i18n, set(new Date(0), { year: ar, month: maned - 1 }))} + {set(new Date(0), { + year: ar, + month: maned - 1, + }).toLocaleString(i18n.language, { + month: "long", + year: "numeric", + })} - {withIds.map((utbetaling) => ( - + {utbetalingerMedId.map((utbetaling) => ( + + + + ))}
diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionContent.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionContent.tsx new file mode 100644 index 00000000..9e1fa135 --- /dev/null +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionContent.tsx @@ -0,0 +1,56 @@ +import { useTranslation } from "next-i18next"; +import { Accordion, BodyShort } from "@navikt/ds-react"; +import Link from "next/link"; +import { FileTextIcon } from "@navikt/aksel-icons"; + +import type { ManedUtbetaling } from "../../../generated/model"; +import { formatDato } from "../../../utils/formatting"; +import { utbetalingsmetodeText } from "../../utbetalingerUtils"; +import { logButtonOrLinkClick } from "../../../utils/amplitude"; + +export const UtbetalingAccordionContent = ({ + fom, + tom, + mottaker, + annenMottaker, + utbetalingsmetode, + kontonummer, + fiksDigisosId, +}: Pick< + ManedUtbetaling, + "fom" | "tom" | "mottaker" | "annenMottaker" | "utbetalingsmetode" | "kontonummer" | "fiksDigisosId" +>) => { + const { t, i18n } = useTranslation("utbetalinger"); + + return ( + + {fom && tom && ( + <> + {t("periode")} + + {formatDato(fom, i18n.language)} - {formatDato(tom, i18n.language)} + + + )} + {t("mottaker")} + {annenMottaker ? ( + + {mottaker} + + ) : ( + + {t("tilDeg")} {utbetalingsmetodeText(utbetalingsmetode, i18n)} {kontonummer} + + )} + + logButtonOrLinkClick("Åpner søknaden fra utbetalingen")} + > + + {t("soknadLenke")} + + + ); +}; diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx deleted file mode 100644 index bdf3c725..00000000 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionItem.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { Accordion, BodyShort } from "@navikt/ds-react"; -import { FileTextIcon } from "@navikt/aksel-icons"; -import { useTranslation } from "next-i18next"; -import Link from "next/link"; - -import { logAmplitudeEvent, logButtonOrLinkClick } from "../../../utils/amplitude"; -import { formatDato } from "../../../utils/formatting"; -import { utbetalingsmetodeText } from "../../utbetalingerUtils"; -import { type ManedUtbetaling } from "../../../generated/model"; - -import { isLessThanTwoWeeksAgo } from "./isLessThanTwoWeeksAgo"; -import { UtbetalingAccordionHeader } from "./UtbetalingAccordionHeader"; - -const onOpenChange = (open: boolean) => - logAmplitudeEvent(open ? "accordion åpnet" : "accordion lukket", { tekst: "Utbetaling" }); - -const UtbetalingAccordionItem = ({ - utbetaling: { - annenMottaker, - belop, - fiksDigisosId, - fom, - forfallsdato, - kontonummer, - mottaker, - status, - tittel, - tom, - utbetalingsdato, - utbetalingsmetode, - }, -}: { - utbetaling: ManedUtbetaling; -}) => { - const { t, i18n } = useTranslation("utbetalinger"); - const dato = utbetalingsdato ?? forfallsdato; - - return ( - - - - {fom && tom && ( - <> - {t("periode")} - - {formatDato(fom, i18n.language)} - {formatDato(tom, i18n.language)} - - - )} - {t("mottaker")} - {annenMottaker ? ( - - {mottaker} - - ) : ( - - {t("tilDeg")} {utbetalingsmetodeText(utbetalingsmetode, i18n)} {kontonummer} - - )} - - logButtonOrLinkClick("Åpner søknaden fra utbetalingen")} - > - - {t("soknadLenke")} - - - - ); -}; -export default UtbetalingAccordionItem; From c4a2732392b35aa122e1e25705ad5ab3f29f419f Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Tue, 21 Jan 2025 13:07:11 +0100 Subject: [PATCH 095/112] CSS-fixes for UtbetalingAccordionHeader.tsx --- .../beta/tabs/UtbetalingAccordionHeader.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx b/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx index 6ff94a54..40f60e6d 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingAccordionHeader.tsx @@ -3,7 +3,7 @@ import { Accordion, BodyShort } from "@navikt/ds-react"; import cx from "classnames"; import { ManedUtbetaling, ManedUtbetalingStatus } from "../../../generated/model"; -import { formatCurrency, getDayAndMonth } from "../../../utils/formatting"; +import { getDayAndMonth } from "../../../utils/formatting"; import { hentUtbetalingTittel } from "../../utbetalingerUtils"; export const UtbetalingAccordionHeader = ({ @@ -20,9 +20,9 @@ export const UtbetalingAccordionHeader = ({ const erStoppet = status === ManedUtbetalingStatus.STOPPET; return ( - -
-
+ +
+
{hentUtbetalingTittel(tittel, t("default_utbetalinger_tittel"))} @@ -31,9 +31,9 @@ export const UtbetalingAccordionHeader = ({
- + {!erStoppet && {t("opprinneligSum")}} - {formatCurrency(belop, i18n.language)} kr + {new Intl.NumberFormat(i18n.language).format(belop)} kr
From 057d5056bb8a972c9210955e455e99270747a9e8 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Tue, 21 Jan 2025 13:25:00 +0100 Subject: [PATCH 096/112] Overhaling av utbetaling-filter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fremdeles noen bugs her, så dette bør anses som en checkpoint commit --- public/locales/en/utbetalinger.json | 4 +- public/locales/nb/utbetalinger.json | 4 +- public/locales/nn/utbetalinger.json | 4 +- .../beta/UtbetalingerPanelBeta.tsx | 2 +- .../beta/filter/FilterContext.tsx | 76 ++++++------- .../beta/filter/FilterDatePicker.tsx | 57 ++++++++++ src/utbetalinger/beta/filter/FilterModal.tsx | 36 +++--- .../beta/filter/UtbetalingerFilter.tsx | 107 +++++------------- src/utbetalinger/beta/filter/useChips.tsx | 80 ++++--------- .../beta/filter/useFiltrerteUtbetalinger.ts | 64 +++++------ .../beta/filter/utbetalingerFilter.test.tsx | 18 +-- .../beta/tabs/UtbetalingerNye.tsx | 6 +- .../beta/tabs/UtbetalingerTidligere.tsx | 6 +- src/utils/formatting.ts | 5 +- 14 files changed, 218 insertions(+), 251 deletions(-) create mode 100644 src/utbetalinger/beta/filter/FilterDatePicker.tsx diff --git a/public/locales/en/utbetalinger.json b/public/locales/en/utbetalinger.json index e76192a1..45bcc7cf 100644 --- a/public/locales/en/utbetalinger.json +++ b/public/locales/en/utbetalinger.json @@ -14,8 +14,8 @@ "filter.format":"(dd.mm.yyyy)", "filter.mottaker":"Select recipient", "filter.alle":"All", - "filter.minKonto":"To me", - "filter.annen":"To other recipients", + "filter.mottaker.minKonto":"To me", + "filter.mottaker.annenMottaker":"To other recipients", "filter.ugylding":"The date should be in the format dd.mm.yyyy", "filter.tidligstFra":"The earliest search date is 15 months back", "filter.fraEtterTil":"The From date cannot be after the To date", diff --git a/public/locales/nb/utbetalinger.json b/public/locales/nb/utbetalinger.json index 0fe65959..54fd952f 100644 --- a/public/locales/nb/utbetalinger.json +++ b/public/locales/nb/utbetalinger.json @@ -14,8 +14,8 @@ "filter.format":"(dd.mm.åååå)", "filter.mottaker":"Velg mottaker", "filter.alle":"Alle", - "filter.minKonto":"Til meg", - "filter.annen":"Til andre mottakere", + "filter.mottaker.minKonto":"Til meg", + "filter.mottaker.annenMottaker":"Til andre mottakere", "filter.ugylding":"Datoen må være i formatet dd.mm.åååå", "filter.tidligstFra":"Tidligste søkedato er 15 måneder tilbake i tid", "filter.fraEtterTil":"Fra-dato kan ikke være etter til-dato", diff --git a/public/locales/nn/utbetalinger.json b/public/locales/nn/utbetalinger.json index 73118c78..aa0805eb 100644 --- a/public/locales/nn/utbetalinger.json +++ b/public/locales/nn/utbetalinger.json @@ -14,8 +14,8 @@ "filter.format":"(dd.mm.åååå)", "filter.mottaker":"Vel mottakar", "filter.alle":"Alle", - "filter.minKonto":"Til meg", - "filter.annen":"Til andre mottakarar", + "filter.mottaker.minKonto":"Til meg", + "filter.mottaker.annenMottaker":"Til andre mottakarar", "filter.ugylding":"Datoen må vere i formatet dd.mm.åååå", "filter.tidligstFra":"Tidlegaste søkjedato er 15 månader bak i tid", "filter.fraEtterTil":"Frå-datoen kan ikkje vere etter til-datoen", diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx index 414f4a33..b06b5384 100644 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx @@ -39,7 +39,7 @@ const UtbetalingerPanelBeta = () => { }); }, [nye, nyeLogged]); - const filtrerteNye = useFiltrerteUtbetalinger(nye ?? []); + const filtrerteNye = useFiltrerteUtbetalinger(nye); const logTabChange = (tab: string) => logAmplitudeEvent("Klikket tab", { tab }); const isMobile = useIsMobile(); diff --git a/src/utbetalinger/beta/filter/FilterContext.tsx b/src/utbetalinger/beta/filter/FilterContext.tsx index d50add51..e1c96307 100644 --- a/src/utbetalinger/beta/filter/FilterContext.tsx +++ b/src/utbetalinger/beta/filter/FilterContext.tsx @@ -1,19 +1,21 @@ -import React, { PropsWithChildren, useContext, useState } from "react"; - -export enum MottakerFilter { - Alle = "ALLE", - MinKonto = "MIN_KONTO", - AnnenMottaker = "ANNEN_MOTTAKER", -} -export interface FilterKey { - mottaker: MottakerFilter; - fraDato?: Date; - tilDato?: Date; -} +import React, { ReactNode, useContext, useReducer } from "react"; + +import { logAmplitudeEvent } from "../../../utils/amplitude"; + +type Maybe = T | null; + +export type MottakerFilter = "minKonto" | "annenMottaker"; + +export type FilterPredicate = { + mottaker?: Maybe; + fraDato?: Maybe; + tilDato?: Maybe; +}; + type FilterContextType = { - filter: FilterKey; - oppdaterFilter: (nyttFilter: Partial) => void; - isUsingFilter: boolean; + filters: FilterPredicate | null; + setFilter: (nyttFilter: FilterPredicate) => void; + clearFilters: () => void; }; const FilterContext = React.createContext(undefined); @@ -21,34 +23,26 @@ const FilterContext = React.createContext(undefin // Egen hook fordi det sjekkes at den blir brukt riktig, og kan ha undefined som defaultValue export const useFilter = () => { const context = useContext(FilterContext); - if (context === undefined) { - throw new Error("Kan kun brukes innenfor FilterProvider"); - } + if (!context) throw new Error("Kan kun brukes innenfor FilterProvider"); return context; }; -const initialState: FilterKey = { - mottaker: MottakerFilter.Alle, - tilDato: undefined, - fraDato: undefined, -}; -export const FilterProvider = (props: PropsWithChildren) => { - const [filter, setFilter] = useState(initialState); - - const oppdaterFilter = (nyttFilter: Partial) => { - const updatedFilter = { ...filter, ...nyttFilter }; - setFilter(updatedFilter); - }; - - return ( - - {props.children} - +const filterReducer = (state: FilterPredicate | null, action: FilterPredicate) => { + const updates = Object.keys(action).filter((key) => action[key as keyof FilterPredicate] !== undefined); + if (!updates.length) return state; + + updates.map((field) => + logAmplitudeEvent("filtervalg", { kategori: field, filternavn: action[field as keyof FilterPredicate] }) ); + + const newState: FilterPredicate = { ...state, ...action }; + const nonNullFields = Object.values(newState).filter((value) => value !== null); + if (!nonNullFields.length) return null; + return newState; +}; + +export const FilterProvider = ({ children }: { children: ReactNode }) => { + const [filters, setFilter] = useReducer(filterReducer, null); + const clearFilters = () => setFilter({ mottaker: null, fraDato: null, tilDato: null }); + return {children}; }; diff --git a/src/utbetalinger/beta/filter/FilterDatePicker.tsx b/src/utbetalinger/beta/filter/FilterDatePicker.tsx new file mode 100644 index 00000000..02554c3e --- /dev/null +++ b/src/utbetalinger/beta/filter/FilterDatePicker.tsx @@ -0,0 +1,57 @@ +import { useTranslation } from "next-i18next"; +import React, { useState } from "react"; +import { DatePicker, DateValidationT, useDatepicker } from "@navikt/ds-react"; +import { subMonths } from "date-fns"; + +import useIsMobile from "../../../utils/useIsMobile"; + +const validateFromDate = ( + { isAfter, isBefore, isInvalid, isValidDate }: DateValidationT, + fromDate: Date | null | undefined +) => { + if (isBefore) return fromDate ? "filter.tilEtterFra" : "filter.tidligstFra"; + else if (isAfter) return "filter.fraEtterTil"; + else if (isInvalid || !isValidDate) return "filter.ugylding"; + else return undefined; +}; + +export const FilterDatePicker = ({ + label, + fromDate, + toDate, + defaultSelected, + onDateChange, +}: { + label: string; + fromDate?: Date | null; + toDate?: Date | null; + defaultSelected?: Date | null; + onDateChange: (date?: Date) => void; +}) => { + const { t, i18n } = useTranslation("utbetalinger"); + + const isMobile = useIsMobile(); + const [dateError, setDateError] = useState(undefined); + const { datepickerProps, inputProps } = useDatepicker({ + fromDate: fromDate ?? subMonths(new Date(), 15), + toDate: toDate ?? undefined, + defaultSelected: defaultSelected ?? undefined, + onDateChange, + onValidate: (validation) => setDateError(validateFromDate(validation, fromDate)), + }); + + return ( + + + + ); +}; diff --git a/src/utbetalinger/beta/filter/FilterModal.tsx b/src/utbetalinger/beta/filter/FilterModal.tsx index b59e5b27..d7bf0c76 100644 --- a/src/utbetalinger/beta/filter/FilterModal.tsx +++ b/src/utbetalinger/beta/filter/FilterModal.tsx @@ -1,44 +1,48 @@ import { Box, Button, Chips, Modal } from "@navikt/ds-react"; -import React, { useState } from "react"; +import React from "react"; import { FilterIcon } from "@navikt/aksel-icons"; import { useTranslation } from "next-i18next"; import UtbetalingerFilter from "./UtbetalingerFilter"; -import { MottakerFilter, useFilter } from "./FilterContext"; +import { useFilter } from "./FilterContext"; import useChips from "./useChips"; import styles from "./utbetalingerFilter.module.css"; const FilterModal = () => { - const [open, setOpen] = useState(false); - const { oppdaterFilter } = useFilter(); - const { chips, removeChip } = useChips(); + const { clearFilters, setFilter } = useFilter(); + const { chips } = useChips(); const { t } = useTranslation("utbetalinger"); + const dialogRef = React.useRef(null); const onCancel = () => { - oppdaterFilter({ mottaker: MottakerFilter.Alle, fraDato: undefined, tilDato: undefined }); - setOpen(false); + clearFilters(); + dialogRef.current?.close(); }; return ( <> - - {chips.length > 0 ? ( + {!chips.length ? ( + + ) : ( - {chips.map((c) => ( - removeChip(c.filterType)}> - {c.label} + {chips.map(({ filterType, label }) => ( + setFilter({ [filterType]: null })}> + {label} ))} - ) : ( - )} - setOpen(false)} className={styles.modal}> + - + diff --git a/src/utbetalinger/beta/filter/UtbetalingerFilter.tsx b/src/utbetalinger/beta/filter/UtbetalingerFilter.tsx index 7f0814ee..c78b9f7c 100644 --- a/src/utbetalinger/beta/filter/UtbetalingerFilter.tsx +++ b/src/utbetalinger/beta/filter/UtbetalingerFilter.tsx @@ -1,95 +1,40 @@ -import React, { useState } from "react"; -import { DatePicker, Fieldset, Radio, RadioGroup, useDatepicker } from "@navikt/ds-react"; +import React from "react"; +import { Fieldset, Radio, RadioGroup } from "@navikt/ds-react"; import { useTranslation } from "next-i18next"; -import useIsMobile from "../../../utils/useIsMobile"; -import { logAmplitudeEvent } from "../../../utils/amplitude"; - import { MottakerFilter, useFilter } from "./FilterContext"; import styles from "./utbetalingerFilter.module.css"; - -function subtractMonths(date: Date, months: number) { - date.setMonth(date.getMonth() - months); - return date; -} +import { FilterDatePicker } from "./FilterDatePicker"; const UtbetalingerFilter = () => { - const { filter, oppdaterFilter } = useFilter(); - const { t, i18n } = useTranslation("utbetalinger"); - - const isMobile = useIsMobile(); - const [fromDateError, setFromDateError] = useState(undefined); - const [toDateError, setToDateError] = useState(undefined); - - const fromDatePicker = useDatepicker({ - fromDate: subtractMonths(new Date(), 15), - toDate: filter.tilDato, - defaultSelected: filter.fraDato, - onDateChange: (dato?) => { - oppdaterFilter({ ...filter, fraDato: dato }); - logAmplitudeEvent("filtervalg", { kategori: "fraDato", filternavn: dato }); - }, - onValidate: (val) => { - if (val.isBefore) setFromDateError(t("filter.tidligstFra")); - else if (val.isAfter) setFromDateError(t("filter.fraEtterTil")); - else if (val.isInvalid) setFromDateError(t("filter.ugylding")); - else if (val.isEmpty) setFromDateError(undefined); - else if (!val.isValidDate) setFromDateError(t("filter.ugylding")); - else setFromDateError(undefined); - }, - }); - const toDatePicker = useDatepicker({ - fromDate: filter.fraDato ? filter.fraDato : subtractMonths(new Date(), 15), - defaultSelected: filter.tilDato, - onDateChange: (dato?) => { - oppdaterFilter({ ...filter, tilDato: dato }); - logAmplitudeEvent("filtervalg", { kategori: "tilDato", filternavn: dato }); - }, - onValidate: (val) => { - if (val.isBefore) setToDateError(filter.fraDato ? t("filter.tilEtterFra") : t("filter.tidligstFra")); - else if (val.isInvalid) setToDateError(t("filter.ugylding")); - else if (val.isEmpty) setToDateError(undefined); - else if (!val.isValidDate) setToDateError(t("filter.ugylding")); - else setToDateError(undefined); - }, - }); + const { t } = useTranslation("utbetalinger"); + const { filters, setFilter } = useFilter(); + const { fraDato, mottaker, tilDato } = filters || {}; - const onMottakerChanged = (value: MottakerFilter) => { - oppdaterFilter({ ...filter, mottaker: value }); - logAmplitudeEvent("filtervalg", { kategori: "mottaker", filternavn: value }); - }; return (
- - - - - - + setFilter({ fraDato })} + /> + setFilter({ tilDato })} + />
- - {t("filter.alle")} - {t("filter.minKonto")} - {t("filter.annen")} + setFilter({ mottaker })} + > + {t("filter.alle")} + {t("filter.minKonto")} + {t("filter.annen")}
); diff --git a/src/utbetalinger/beta/filter/useChips.tsx b/src/utbetalinger/beta/filter/useChips.tsx index 227c6d3f..425656b3 100644 --- a/src/utbetalinger/beta/filter/useChips.tsx +++ b/src/utbetalinger/beta/filter/useChips.tsx @@ -1,68 +1,38 @@ -import { useCallback, useEffect, useState } from "react"; +import { useMemo } from "react"; import { useTranslation } from "next-i18next"; -import { i18n } from "i18next"; import { dateToDDMMYYYY } from "../../../utils/formatting"; -import { MottakerFilter, useFilter } from "./FilterContext"; +import { FilterPredicate, useFilter } from "./FilterContext"; -const mottakerFilterToChip = (value: MottakerFilter, t: (key: string) => string) => { - switch (value) { - case MottakerFilter.Alle: - return undefined; - case MottakerFilter.MinKonto: - return { label: t("utbetalinger:filter.minKonto"), filterType: "mottaker" } as ChipType; - case MottakerFilter.AnnenMottaker: - return { label: t("utbetalinger:filter.annen"), filterType: "mottaker" } as ChipType; - } -}; -const datoFilterToChip = (i18n: i18n, fom?: Date, tom?: Date) => { - if (fom && tom) { - return { - label: `${dateToDDMMYYYY(i18n.language, fom)} - ${dateToDDMMYYYY(i18n.language, tom)}`, - filterType: "dato", - } as ChipType; - } else if (fom) { - return { - label: `${i18n.t("utbetalinger:filter.fra")}: ${dateToDDMMYYYY(i18n.language, fom)}`, - filterType: "dato", - } as ChipType; - } else if (tom) { - return { - label: `${i18n.t("utbetalinger:filter.til")}: ${dateToDDMMYYYY(i18n.language, tom)}`, - filterType: "dato", - } as ChipType; - } - return undefined; +type ChipType = { + label: string; + filterType: keyof FilterPredicate; }; -type FilterType = "mottaker" | "dato"; -interface ChipType { - label: string; - filterType: FilterType; -} const useChips = () => { - const [chips, setChips] = useState([]); - const { filter, oppdaterFilter } = useFilter(); - const { t, i18n } = useTranslation(); + const { fraDato, mottaker, tilDato } = useFilter().filters || {}; + const translation = useTranslation("utbetalinger"); - const removeChip = useCallback( - (type: FilterType) => { - if (type === "mottaker") { - oppdaterFilter({ ...filter, mottaker: MottakerFilter.Alle }); - } else if (type === "dato") { - oppdaterFilter({ ...filter, tilDato: undefined, fraDato: undefined }); - } - }, - [filter, oppdaterFilter] + const chips: ChipType[] = useMemo( + () => + [ + fraDato && { + label: `${translation.t("filter.fra")}: ${dateToDDMMYYYY(translation.i18n.language, fraDato)}`, + filterType: "fraDato", + }, + tilDato && { + label: `${translation.t("filter.fra")}: ${dateToDDMMYYYY(translation.i18n.language, tilDato)}`, + filterType: "tilDato", + }, + mottaker && { + label: (mottaker: string) => translation.t(`filter.${mottaker}` as const), + filterType: "mottaker", + }, + ].filter(Boolean) as ChipType[], + [fraDato, tilDato, mottaker, translation] ); - useEffect(() => { - const mottaker: ChipType | undefined = mottakerFilterToChip(filter.mottaker, t); - const dato = datoFilterToChip(i18n, filter.fraDato, filter.tilDato); - // remove empty string - setChips([mottaker, dato].filter(Boolean) as ChipType[]); - }, [filter, i18n, t]); - return { chips, removeChip }; + return { chips }; }; export default useChips; diff --git a/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts b/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts index bcf047f1..5589cb76 100644 --- a/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts +++ b/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts @@ -1,48 +1,48 @@ import React from "react"; -import { isAfter, isBefore, isEqual } from "date-fns"; +import { isAfter, isBefore } from "date-fns"; import { ManedUtbetaling, NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; -import { FilterKey, MottakerFilter, useFilter } from "./FilterContext"; +import { FilterPredicate, useFilter } from "./FilterContext"; -const stringToDateWithoutTimezone = (datoString: string) => { - const dateWithTimesone = new Date(datoString); - return new Date(dateWithTimesone.toISOString().slice(0, -1)); -}; +const stringToDateWithoutTimezone = (datoString: string) => new Date(new Date(datoString).toISOString().slice(0, -1)); -export const filterMatch = (utbetaling: ManedUtbetaling, filter: FilterKey) => { +export const filterMatch = ( + { annenMottaker, forfallsdato, utbetalingsdato }: ManedUtbetaling, + filters: FilterPredicate | null +) => { + if (!filters) return true; + const { fraDato, tilDato, mottaker } = filters; let matchMottaker; - if (filter.mottaker === MottakerFilter.Alle) { - matchMottaker = true; - } else if (filter.mottaker === MottakerFilter.AnnenMottaker) { - matchMottaker = utbetaling.annenMottaker; - } else { - matchMottaker = !utbetaling.annenMottaker; - } + if (!mottaker) matchMottaker = true; + else if (mottaker === "annenMottaker") matchMottaker = annenMottaker; + else matchMottaker = !annenMottaker; // Hvis vi ikke har dato-filter eller utbetalingsdato/forfallsdato, trenger vi ikke sjekke datofilteret. - if ((!utbetaling.utbetalingsdato && !utbetaling.forfallsdato) || (!filter.tilDato && !filter.fraDato)) - return matchMottaker; + if ((!utbetalingsdato && !forfallsdato) || (!tilDato && !fraDato)) return matchMottaker; - const dato = stringToDateWithoutTimezone(utbetaling.utbetalingsdato ?? utbetaling.forfallsdato!); - const matchFra = filter.fraDato ? isAfter(dato, filter.fraDato) || isEqual(dato, filter.fraDato) : true; - const matchTil = filter.tilDato ? isBefore(dato, filter.tilDato) || isEqual(dato, filter.tilDato) : true; + const dato = stringToDateWithoutTimezone(utbetalingsdato ?? forfallsdato!); + const matchFra = !fraDato ? true : !isBefore(dato, fraDato); + const matchTil = !tilDato ? true : !isAfter(dato, tilDato); return matchMottaker && matchTil && matchFra; }; -const useFiltrerteUtbetalinger = (utbetalinger: NyeOgTidligereUtbetalingerResponse[]) => { - const { filter } = useFilter(); - - return React.useMemo(() => { - return utbetalinger - .map((response) => { - const filtrertPerManed = response.utbetalingerForManed.filter((utbetaling) => { - return filterMatch(utbetaling, filter); - }); - return { ...response, utbetalingerForManed: filtrertPerManed }; - }) - .filter((response) => response.utbetalingerForManed.length > 0); - }, [utbetalinger, filter]); + +const useFiltrerteUtbetalinger = (utbetalinger: NyeOgTidligereUtbetalingerResponse[] | undefined) => { + const { filters } = useFilter(); + + return React.useMemo( + () => + utbetalinger + ?.map((response) => ({ + ...response, + utbetalingerForManed: response.utbetalingerForManed.filter((utbetaling) => + filterMatch(utbetaling, filters) + ), + })) + .filter((response) => response.utbetalingerForManed.length > 0), + [utbetalinger, filters] + ); }; export default useFiltrerteUtbetalinger; diff --git a/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx b/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx index 88ae5b01..277262b6 100644 --- a/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx +++ b/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx @@ -1,7 +1,7 @@ import { ManedUtbetaling } from "../../../generated/model"; import { filterMatch } from "./useFiltrerteUtbetalinger"; -import { MottakerFilter } from "./FilterContext"; +import { FilterPredicate } from "./FilterContext"; describe("filtrering på utbetalinger fungerer", () => { it("skal filtrere dato på fom og tom", () => { @@ -15,22 +15,22 @@ describe("filtrering på utbetalinger fungerer", () => { }; const filterFra = { - mottaker: MottakerFilter.Alle, + mottaker: null, fraDato: new Date(2023, 3, 12), tilDato: undefined, }; const filterFraSenere = { - mottaker: MottakerFilter.Alle, + mottaker: null, fraDato: new Date(2023, 3, 20), tilDato: undefined, }; const filterTil = { - mottaker: MottakerFilter.Alle, + mottaker: null, fraDato: undefined, tilDato: new Date(2023, 3, 12), }; const filterTilTidligere = { - mottaker: MottakerFilter.Alle, + mottaker: null, fraDato: undefined, tilDato: new Date(2023, 3, 10), }; @@ -60,13 +60,13 @@ describe("filtrering på utbetalinger fungerer", () => { fiksDigisosId: "", }; - const filterMeg = { - mottaker: MottakerFilter.MinKonto, + const filterMeg: FilterPredicate = { + mottaker: "minKonto", fraDato: undefined, tilDato: undefined, }; - const filterAnnen = { - mottaker: MottakerFilter.AnnenMottaker, + const filterAnnen: FilterPredicate = { + mottaker: "annenMottaker", fraDato: undefined, tilDato: new Date(2023, 3, 12), }; diff --git a/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx b/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx index 69a52d2c..f5d7d167 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingerNye.tsx @@ -13,11 +13,11 @@ const UtbetalingerNye = ({ isError, isLoading, }: { - utbetalinger: NyeOgTidligereUtbetalingerResponse[]; + utbetalinger: NyeOgTidligereUtbetalingerResponse[] | undefined; isLoading: boolean; isError: boolean; }) => { - const { isUsingFilter } = useFilter(); + const { filters } = useFilter(); const { t } = useTranslation("utbetalinger"); return ( @@ -28,7 +28,7 @@ const UtbetalingerNye = ({ )) ) : ( - {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.nye")} + {filters ? t("feil.ingen.filter") : t("feil.ingen.default.nye")} )} diff --git a/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx b/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx index 32d63840..3ce1625c 100644 --- a/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx +++ b/src/utbetalinger/beta/tabs/UtbetalingerTidligere.tsx @@ -12,8 +12,8 @@ import { UtbetalingerLoadingWrapper } from "./UtbetalingerLoadingWrapper"; export const UtbetalingerTidligere = () => { const { data, isLoading, isError } = useHentTidligereUtbetalinger(); - const filtrerteTidligere = useFiltrerteUtbetalinger(data ?? []); - const { isUsingFilter } = useFilter(); + const filtrerteTidligere = useFiltrerteUtbetalinger(data); + const { filters } = useFilter(); const { t } = useTranslation("utbetalinger"); return ( @@ -24,7 +24,7 @@ export const UtbetalingerTidligere = () => { )) ) : ( - {isUsingFilter ? t("feil.ingen.filter") : t("feil.ingen.default.tidligere")} + {filters ? t("feil.ingen.filter") : t("feil.ingen.default.tidligere")} )} diff --git a/src/utils/formatting.ts b/src/utils/formatting.ts index 85960098..2fe0b196 100644 --- a/src/utils/formatting.ts +++ b/src/utils/formatting.ts @@ -9,9 +9,6 @@ function formatBytes(bytes: number, decimals: number = 2): string { return result.replace(".", ","); } -// Eksempel: formatCurrency(12345) => 12.345 -const formatCurrency = (amount: number, language: string): string => new Intl.NumberFormat(language).format(amount); - // Eksempel: "2019-08-01" => "01. august 2019" export const formatDato = (isoDate: string, language: string) => new Intl.DateTimeFormat(language, { @@ -34,4 +31,4 @@ export const dateToDDMMYYYY = (language: string, dato: Date) => year: "numeric", }).format(dato); -export { formatBytes, formatCurrency }; +export { formatBytes }; From bf234b18138faaf7a8369be1ab0a2a16fbfaea8a Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Tue, 21 Jan 2025 15:07:52 +0100 Subject: [PATCH 097/112] Refaktor: fjerner useChips, bruker useFilter direkte, splitter ut FilterChips.tsx --- src/utbetalinger/beta/filter/FilterChips.tsx | 37 +++++++++++++++++++ src/utbetalinger/beta/filter/FilterModal.tsx | 19 +++------- src/utbetalinger/beta/filter/useChips.tsx | 38 -------------------- 3 files changed, 41 insertions(+), 53 deletions(-) create mode 100644 src/utbetalinger/beta/filter/FilterChips.tsx delete mode 100644 src/utbetalinger/beta/filter/useChips.tsx diff --git a/src/utbetalinger/beta/filter/FilterChips.tsx b/src/utbetalinger/beta/filter/FilterChips.tsx new file mode 100644 index 00000000..5cd16437 --- /dev/null +++ b/src/utbetalinger/beta/filter/FilterChips.tsx @@ -0,0 +1,37 @@ +import { useTranslation } from "next-i18next"; +import { Box, Chips } from "@navikt/ds-react"; +import React from "react"; + +import { dateToDDMMYYYY } from "../../../utils/formatting"; + +import styles from "./utbetalingerFilter.module.css"; +import { useFilter } from "./FilterContext"; + +export const FilterChips = () => { + const { filters, setFilter } = useFilter(); + const { t, i18n } = useTranslation("utbetalinger"); + + if (!filters) return ; + + const { fraDato, tilDato, mottaker } = filters; + + return ( + + {fraDato && ( + setFilter({ fraDato: null })}> + {t("filter.fra") + ": " + dateToDDMMYYYY(i18n.language, fraDato)} + + )} + {tilDato && ( + setFilter({ tilDato: null })}> + {t("filter.til") + ": " + dateToDDMMYYYY(i18n.language, tilDato)} + + )} + {mottaker && ( + setFilter({ mottaker: null })}> + {t(`filter.${mottaker}` as const)} + + )} + + ); +}; diff --git a/src/utbetalinger/beta/filter/FilterModal.tsx b/src/utbetalinger/beta/filter/FilterModal.tsx index d7bf0c76..aebe9b15 100644 --- a/src/utbetalinger/beta/filter/FilterModal.tsx +++ b/src/utbetalinger/beta/filter/FilterModal.tsx @@ -1,16 +1,15 @@ -import { Box, Button, Chips, Modal } from "@navikt/ds-react"; +import { Button, Modal } from "@navikt/ds-react"; import React from "react"; import { FilterIcon } from "@navikt/aksel-icons"; import { useTranslation } from "next-i18next"; import UtbetalingerFilter from "./UtbetalingerFilter"; import { useFilter } from "./FilterContext"; -import useChips from "./useChips"; import styles from "./utbetalingerFilter.module.css"; +import { FilterChips } from "./FilterChips"; const FilterModal = () => { - const { clearFilters, setFilter } = useFilter(); - const { chips } = useChips(); + const { clearFilters } = useFilter(); const { t } = useTranslation("utbetalinger"); const dialogRef = React.useRef(null); @@ -28,17 +27,7 @@ const FilterModal = () => { > {t("filter.knapp")} - {!chips.length ? ( - - ) : ( - - {chips.map(({ filterType, label }) => ( - setFilter({ [filterType]: null })}> - {label} - - ))} - - )} + diff --git a/src/utbetalinger/beta/filter/useChips.tsx b/src/utbetalinger/beta/filter/useChips.tsx deleted file mode 100644 index 425656b3..00000000 --- a/src/utbetalinger/beta/filter/useChips.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { useMemo } from "react"; -import { useTranslation } from "next-i18next"; - -import { dateToDDMMYYYY } from "../../../utils/formatting"; - -import { FilterPredicate, useFilter } from "./FilterContext"; - -type ChipType = { - label: string; - filterType: keyof FilterPredicate; -}; - -const useChips = () => { - const { fraDato, mottaker, tilDato } = useFilter().filters || {}; - const translation = useTranslation("utbetalinger"); - - const chips: ChipType[] = useMemo( - () => - [ - fraDato && { - label: `${translation.t("filter.fra")}: ${dateToDDMMYYYY(translation.i18n.language, fraDato)}`, - filterType: "fraDato", - }, - tilDato && { - label: `${translation.t("filter.fra")}: ${dateToDDMMYYYY(translation.i18n.language, tilDato)}`, - filterType: "tilDato", - }, - mottaker && { - label: (mottaker: string) => translation.t(`filter.${mottaker}` as const), - filterType: "mottaker", - }, - ].filter(Boolean) as ChipType[], - [fraDato, tilDato, mottaker, translation] - ); - - return { chips }; -}; -export default useChips; From 3a1b2802d2f2f516a0777f2596b5d35b1a1a5163 Mon Sep 17 00:00:00 2001 From: Tore Sinding Bekkedal Date: Thu, 23 Jan 2025 13:55:48 +0100 Subject: [PATCH 098/112] Checkpoint commit --- src/pages/utbetaling.tsx | 16 +-- src/utbetalinger/Utbetalinger.testdata.ts | 107 ------------------ src/utbetalinger/UtbetalingerPanel.tsx | 73 ++++++++++++ .../UtbetalingsoversiktIngenInnsyn.tsx | 22 +--- .../beta/UtbetalingerPanelBeta.tsx | 85 -------------- .../beta/filter/FilterContext.tsx | 48 -------- .../beta/filter/useFiltrerteUtbetalinger.ts | 48 -------- .../beta/filter/utbetalingerFilter.module.css | 17 --- .../beta/filter/utbetalingerFilter.test.tsx | 78 ------------- src/utbetalinger/beta/utbetalinger.module.css | 60 ---------- .../{beta => }/filter/FilterChips.tsx | 7 +- .../{beta => }/filter/FilterDatePicker.tsx | 2 +- .../{beta => }/filter/FilterModal.tsx | 7 +- src/utbetalinger/filter/FilterProvider.tsx | 24 ++++ .../{beta => }/filter/UtbetalingerFilter.tsx | 8 +- src/utbetalinger/filter/lib/FilterContext.ts | 21 ++++ .../filter/lib/filterLogAnalytics.test.ts | 41 +++++++ .../filter/lib/filterLogAnalytics.ts | 17 +++ .../filter/lib/filterMatch.test.ts | 28 +++++ src/utbetalinger/filter/lib/filterMatch.ts | 31 +++++ .../filter/lib/filterReducer.test.ts | 18 +++ src/utbetalinger/filter/lib/filterReducer.ts | 5 + .../filter/lib/filterResponses.test.ts | 25 ++++ .../filter/lib/filterResponses.ts | 17 +++ src/utbetalinger/filter/lib/useFilter.ts | 9 ++ .../tabs => }/isLessThanTwoWeeksAgo.test.ts | 0 .../{beta/tabs => }/isLessThanTwoWeeksAgo.ts | 0 .../tabs/UtbetalingAccordionContent.test.tsx | 25 ++++ .../tabs/UtbetalingAccordionContent.tsx | 15 ++- .../tabs/UtbetalingAccordionHeader.tsx | 10 +- .../tabs/UtbetalingerLoadingWrapper.tsx | 2 +- .../UtbetalingerMonthlyList.tsx} | 8 +- .../{beta => }/tabs/UtbetalingerNye.tsx | 11 +- .../{beta => }/tabs/UtbetalingerTidligere.tsx | 20 ++-- src/utbetalinger/utbetalinger.module.css | 6 + src/utbetalinger/utbetalingerUtils.ts | 13 --- 36 files changed, 401 insertions(+), 523 deletions(-) delete mode 100644 src/utbetalinger/Utbetalinger.testdata.ts create mode 100644 src/utbetalinger/UtbetalingerPanel.tsx delete mode 100644 src/utbetalinger/beta/UtbetalingerPanelBeta.tsx delete mode 100644 src/utbetalinger/beta/filter/FilterContext.tsx delete mode 100644 src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts delete mode 100644 src/utbetalinger/beta/filter/utbetalingerFilter.module.css delete mode 100644 src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx delete mode 100644 src/utbetalinger/beta/utbetalinger.module.css rename src/utbetalinger/{beta => }/filter/FilterChips.tsx (84%) rename src/utbetalinger/{beta => }/filter/FilterDatePicker.tsx (97%) rename src/utbetalinger/{beta => }/filter/FilterModal.tsx (87%) create mode 100644 src/utbetalinger/filter/FilterProvider.tsx rename src/utbetalinger/{beta => }/filter/UtbetalingerFilter.tsx (84%) create mode 100644 src/utbetalinger/filter/lib/FilterContext.ts create mode 100644 src/utbetalinger/filter/lib/filterLogAnalytics.test.ts create mode 100644 src/utbetalinger/filter/lib/filterLogAnalytics.ts create mode 100644 src/utbetalinger/filter/lib/filterMatch.test.ts create mode 100644 src/utbetalinger/filter/lib/filterMatch.ts create mode 100644 src/utbetalinger/filter/lib/filterReducer.test.ts create mode 100644 src/utbetalinger/filter/lib/filterReducer.ts create mode 100644 src/utbetalinger/filter/lib/filterResponses.test.ts create mode 100644 src/utbetalinger/filter/lib/filterResponses.ts create mode 100644 src/utbetalinger/filter/lib/useFilter.ts rename src/utbetalinger/{beta/tabs => }/isLessThanTwoWeeksAgo.test.ts (100%) rename src/utbetalinger/{beta/tabs => }/isLessThanTwoWeeksAgo.ts (100%) create mode 100644 src/utbetalinger/tabs/UtbetalingAccordionContent.test.tsx rename src/utbetalinger/{beta => }/tabs/UtbetalingAccordionContent.tsx (76%) rename src/utbetalinger/{beta => }/tabs/UtbetalingAccordionHeader.tsx (77%) rename src/utbetalinger/{beta => }/tabs/UtbetalingerLoadingWrapper.tsx (88%) rename src/utbetalinger/{beta/tabs/ManedGruppe.tsx => tabs/UtbetalingerMonthlyList.tsx} (91%) rename src/utbetalinger/{beta => }/tabs/UtbetalingerNye.tsx (70%) rename src/utbetalinger/{beta => }/tabs/UtbetalingerTidligere.tsx (54%) create mode 100644 src/utbetalinger/utbetalinger.module.css delete mode 100644 src/utbetalinger/utbetalingerUtils.ts diff --git a/src/pages/utbetaling.tsx b/src/pages/utbetaling.tsx index 1cd1fb4c..87a26893 100644 --- a/src/pages/utbetaling.tsx +++ b/src/pages/utbetaling.tsx @@ -9,12 +9,12 @@ import { useHentAlleSaker } from "../generated/saks-oversikt-controller/saks-ove import { useHarSoknaderMedInnsyn } from "../generated/soknad-med-innsyn-controller/soknad-med-innsyn-controller"; import UtbetalingsoversiktIngenSoknader from "../utbetalinger/UtbetalingsoversiktIngenSoknader"; import UtbetalingsoversiktIngenInnsyn from "../utbetalinger/UtbetalingsoversiktIngenInnsyn"; -import { FilterProvider } from "../utbetalinger/beta/filter/FilterContext"; -import UtbetalingerFilter from "../utbetalinger/beta/filter/UtbetalingerFilter"; -import UtbetalingerPanelBeta from "../utbetalinger/beta/UtbetalingerPanelBeta"; -import styles from "../utbetalinger/beta/utbetalinger.module.css"; +import UtbetalingerFilter from "../utbetalinger/filter/UtbetalingerFilter"; +import UtbetalingerPanel from "../utbetalinger/UtbetalingerPanel"; +import styles from "../utbetalinger/utbetalinger.module.css"; import useUpdateBreadcrumbs from "../hooks/useUpdateBreadcrumbs"; import pageHandler from "../pagehandler/pageHandler"; +import { FilterProvider } from "../utbetalinger/filter/FilterProvider"; import Error from "./_error"; @@ -38,7 +38,7 @@ const Utbetalinger: NextPage = () => { if (isAlleSakerLoading || isHarSoknaderMedInnsynLoading) { return (
- +
); } @@ -66,13 +66,13 @@ const Utbetalinger: NextPage = () => {
-
+
{!isMobile && ( - + )} - +
diff --git a/src/utbetalinger/Utbetalinger.testdata.ts b/src/utbetalinger/Utbetalinger.testdata.ts deleted file mode 100644 index 671e5477..00000000 --- a/src/utbetalinger/Utbetalinger.testdata.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { UtbetalingerResponse } from "../generated/model"; - -// Example: getRandomInt(3) => expected output: 0, 1 or 2 -const getRandomInt = (max: number): number => { - return Math.floor(Math.random() * Math.floor(max)); -}; - -const summerAntallUtbetalinger = (utbetalingerMaaned: UtbetalingerResponse[]) => { - let antallUtbetalinger: number = 0; - utbetalingerMaaned.map((utbetalingMaaned: UtbetalingerResponse) => { - antallUtbetalinger = antallUtbetalinger + utbetalingMaaned.utbetalinger.length; - return utbetalingMaaned; - }); - return antallUtbetalinger; -}; - -const mockUtbetalinger: (UtbetalingerResponse & { sum: number })[] = [ - { - ar: 2019, - maned: 10, - foersteIManeden: "2019-10-01", - sum: 13234.0, - utbetalinger: [ - { - tittel: "Utbetaling til søker", - belop: 1234.0, - utbetalingsdato: "2019-08-20", - status: "ANNULLERT", - fiksDigisosId: "ce3f24a0-359e-45f3-a7f7-5123e70cb715", - fom: "2019-09-01", - tom: "2019-09-30", - mottaker: "søkers fnr", - annenMottaker: true, - kontonummer: "11223344556", - forfallsdato: "2019-08-20", - utbetalingsmetode: "bankoverføring", - }, - { - tittel: "Utbetaling til utleier - husleie", - belop: 12000.0, - utbetalingsdato: "2019-08-01", - status: "UTBETALT", - fiksDigisosId: "ce3f24a0-359e-45f3-a7f7-5123e70cb715", - mottaker: "Utleier", - annenMottaker: true, - forfallsdato: "2019-08-20", - utbetalingsmetode: "bankoverføring", - }, - ], - }, - { - ar: 2019, - maned: 9, - foersteIManeden: "2019-09-01", - sum: 0.0, - utbetalinger: [ - { - tittel: "Annullert utbetaling", - belop: 1234.0, - utbetalingsdato: "2019-09-04", - status: "ANNULLERT", - fiksDigisosId: "ce3f24a0-359e-45f3-a7f7-5123e70cb715", - fom: "2019-09-01", - tom: "2019-10-31", - mottaker: "søkers fnr", - annenMottaker: false, - forfallsdato: "2019-08-20", - utbetalingsmetode: "bankoverføring", - }, - ], - }, - { - ar: 2018, - maned: 8, - foersteIManeden: "2019-08-01", - sum: 13234.0, - utbetalinger: [ - { - tittel: "Utbetaling til søker", - belop: 1234.0, - utbetalingsdato: "2019-08-20", - status: "UTBETALT", - fiksDigisosId: "ce3f24a0-359e-45f3-a7f7-5123e70cb715", - fom: "2019-09-01", - tom: "2019-09-30", - mottaker: "19066711222", - annenMottaker: false, - kontonummer: "11223344556", - forfallsdato: "2019-08-20", - utbetalingsmetode: "bankoverføring", - }, - { - tittel: "Utbetaling til utleier - husleie", - belop: 12000.0, - utbetalingsdato: "2019-08-01", - status: "UTBETALT", - fiksDigisosId: "ce3f24a0-359e-45f3-a7f7-5123e70cb715", - mottaker: "Utleier", - annenMottaker: false, - forfallsdato: "2019-08-20", - utbetalingsmetode: "bankoverføring", - }, - ], - }, -]; - -export { mockUtbetalinger, getRandomInt, summerAntallUtbetalinger }; diff --git a/src/utbetalinger/UtbetalingerPanel.tsx b/src/utbetalinger/UtbetalingerPanel.tsx new file mode 100644 index 00000000..6e324f0e --- /dev/null +++ b/src/utbetalinger/UtbetalingerPanel.tsx @@ -0,0 +1,73 @@ +import React, { useEffect, useMemo, useState } from "react"; +import { BodyLong, Heading, Panel, Tabs } from "@navikt/ds-react"; +import { useTranslation } from "next-i18next"; + +import HandCoinsIcon from "../components/ikoner/HandCoins"; +import { useHentNyeUtbetalinger } from "../generated/utbetalinger-controller/utbetalinger-controller"; +import { logAmplitudeEvent } from "../utils/amplitude"; +import useIsMobile from "../utils/useIsMobile"; + +import { filterResponses } from "./filter/lib/filterResponses"; +import UtbetalingerNye from "./tabs/UtbetalingerNye"; +import { UtbetalingerTidligere } from "./tabs/UtbetalingerTidligere"; +import FilterModal from "./filter/FilterModal"; +import { useFilter } from "./filter/lib/useFilter"; + +const TAB_UTBETALINGER = "Utbetalinger" as const; +const TAB_TIDLIGERE = "Tidligere utbetalinger" as const; + +const UtbetalingerPanel = () => { + const [nyeLogged, setNyeLogged] = useState(false); + + const { t } = useTranslation("utbetalinger"); + + const { data: nye, isLoading, isError } = useHentNyeUtbetalinger(); + const { filters } = useFilter(); + + useEffect(() => { + logAmplitudeEvent("Lastet utbetalinger", { + antall: nye?.[0]?.utbetalingerForManed.length ? nye?.[0].utbetalingerForManed.length : 0, + }); + + if (nyeLogged && !nye?.length) return; + const sisteManedgruppe = nye?.at(-1)?.utbetalingerForManed; + const sisteDatoVist = sisteManedgruppe?.at(-1)?.utbetalingsdato ?? sisteManedgruppe?.at(-1)?.forfallsdato; + + logAmplitudeEvent("Hentet nye utbetalinger", { sisteDatoVist }); + setNyeLogged(true); + }, [nye, nyeLogged]); + + const filtrerteNye = useMemo(() => filterResponses(nye, filters), [nye, filters]); + + const logTabChange = (tab: string) => logAmplitudeEvent("Klikket tab", { tab }); + const isMobile = useIsMobile(); + return ( + + + + {t("tittel.inne")} + +
+ {isMobile && } + + + + + + + {t("utbetalingerIngress")} + + + + {t("tidligereIngress")} + + + + + ); +}; + +export default UtbetalingerPanel; diff --git a/src/utbetalinger/UtbetalingsoversiktIngenInnsyn.tsx b/src/utbetalinger/UtbetalingsoversiktIngenInnsyn.tsx index e17bdfc4..02c9417b 100644 --- a/src/utbetalinger/UtbetalingsoversiktIngenInnsyn.tsx +++ b/src/utbetalinger/UtbetalingsoversiktIngenInnsyn.tsx @@ -1,38 +1,24 @@ import React from "react"; import { BodyLong, Heading } from "@navikt/ds-react"; -import styled from "styled-components"; import { useTranslation } from "next-i18next"; import { StyledGuidePanel } from "../styles/styledGuidePanel"; import IngenSoknaderFunnet from "../components/ikoner/IngenSoknaderFunnet"; -const StyledGuidePanelContent = styled.div` - display: flex; - flex-direction: column; - align-items: center; - margin: 0 3rem; - max-width: 45rem; -`; - -const Wrapper = styled.div` - padding-top: 1rem; - padding-bottom: 50px; -`; - const UtbetalingsoversiktIngenInnsyn = () => { const { t } = useTranslation(); return ( - +
}> - +
{t("ingen_soknad.tittel")} {t("ingen_soknad.info")} - +
- +
); }; diff --git a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx b/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx deleted file mode 100644 index b06b5384..00000000 --- a/src/utbetalinger/beta/UtbetalingerPanelBeta.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import React, { useEffect, useState } from "react"; -import { BodyLong, Heading, Panel, Tabs } from "@navikt/ds-react"; -import { useTranslation } from "next-i18next"; - -import HandCoinsIcon from "../../components/ikoner/HandCoins"; -import { useHentNyeUtbetalinger } from "../../generated/utbetalinger-controller/utbetalinger-controller"; -import { logAmplitudeEvent } from "../../utils/amplitude"; -import useIsMobile from "../../utils/useIsMobile"; - -import styles from "./utbetalinger.module.css"; -import useFiltrerteUtbetalinger from "./filter/useFiltrerteUtbetalinger"; -import UtbetalingerNye from "./tabs/UtbetalingerNye"; -import { UtbetalingerTidligere } from "./tabs/UtbetalingerTidligere"; -import FilterModal from "./filter/FilterModal"; - -const TAB_UTBETALINGER = "Utbetalinger" as const; -const TAB_TIDLIGERE = "Tidligere utbetalinger" as const; -type UtbetalingTab = typeof TAB_UTBETALINGER | typeof TAB_TIDLIGERE; - -const UtbetalingerPanelBeta = () => { - const [nyeLogged, setNyeLogged] = useState(false); - - const [tabClicked, setTabClicked] = useState(TAB_UTBETALINGER); - - const { t } = useTranslation("utbetalinger"); - - const { data: nye, isLoading, isError } = useHentNyeUtbetalinger(); - - useEffect(() => { - if (!nyeLogged && nye?.length) { - const sisteManedgruppe = nye?.at(-1)?.utbetalingerForManed; - const sisteDatoVist = sisteManedgruppe?.at(-1)?.utbetalingsdato ?? sisteManedgruppe?.at(-1)?.forfallsdato; - - logAmplitudeEvent("Hentet nye utbetalinger", { sisteDatoVist }); - setNyeLogged(true); - } - logAmplitudeEvent("Lastet utbetalinger", { - antall: nye?.[0]?.utbetalingerForManed.length ? nye?.[0].utbetalingerForManed.length : 0, - }); - }, [nye, nyeLogged]); - - const filtrerteNye = useFiltrerteUtbetalinger(nye); - - const logTabChange = (tab: string) => logAmplitudeEvent("Klikket tab", { tab }); - const isMobile = useIsMobile(); - return ( - - - - {t("tittel.inne")} - -
- {isMobile && } - logTabChange(path)}> - - setTabClicked(TAB_UTBETALINGER)} - className={tabClicked === TAB_UTBETALINGER ? styles.tab_list_blue : styles.tab_list_transparent} - /> - - setTabClicked(TAB_TIDLIGERE)} - className={tabClicked === TAB_TIDLIGERE ? styles.tab_list_blue : styles.tab_list_transparent} - /> - - - {t("utbetalingerIngress")} - - - - {t("tidligereIngress")} - - - - - ); -}; - -export default UtbetalingerPanelBeta; diff --git a/src/utbetalinger/beta/filter/FilterContext.tsx b/src/utbetalinger/beta/filter/FilterContext.tsx deleted file mode 100644 index e1c96307..00000000 --- a/src/utbetalinger/beta/filter/FilterContext.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React, { ReactNode, useContext, useReducer } from "react"; - -import { logAmplitudeEvent } from "../../../utils/amplitude"; - -type Maybe = T | null; - -export type MottakerFilter = "minKonto" | "annenMottaker"; - -export type FilterPredicate = { - mottaker?: Maybe; - fraDato?: Maybe; - tilDato?: Maybe; -}; - -type FilterContextType = { - filters: FilterPredicate | null; - setFilter: (nyttFilter: FilterPredicate) => void; - clearFilters: () => void; -}; - -const FilterContext = React.createContext(undefined); - -// Egen hook fordi det sjekkes at den blir brukt riktig, og kan ha undefined som defaultValue -export const useFilter = () => { - const context = useContext(FilterContext); - if (!context) throw new Error("Kan kun brukes innenfor FilterProvider"); - return context; -}; - -const filterReducer = (state: FilterPredicate | null, action: FilterPredicate) => { - const updates = Object.keys(action).filter((key) => action[key as keyof FilterPredicate] !== undefined); - if (!updates.length) return state; - - updates.map((field) => - logAmplitudeEvent("filtervalg", { kategori: field, filternavn: action[field as keyof FilterPredicate] }) - ); - - const newState: FilterPredicate = { ...state, ...action }; - const nonNullFields = Object.values(newState).filter((value) => value !== null); - if (!nonNullFields.length) return null; - return newState; -}; - -export const FilterProvider = ({ children }: { children: ReactNode }) => { - const [filters, setFilter] = useReducer(filterReducer, null); - const clearFilters = () => setFilter({ mottaker: null, fraDato: null, tilDato: null }); - return {children}; -}; diff --git a/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts b/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts deleted file mode 100644 index 5589cb76..00000000 --- a/src/utbetalinger/beta/filter/useFiltrerteUtbetalinger.ts +++ /dev/null @@ -1,48 +0,0 @@ -import React from "react"; -import { isAfter, isBefore } from "date-fns"; - -import { ManedUtbetaling, NyeOgTidligereUtbetalingerResponse } from "../../../generated/model"; - -import { FilterPredicate, useFilter } from "./FilterContext"; - -const stringToDateWithoutTimezone = (datoString: string) => new Date(new Date(datoString).toISOString().slice(0, -1)); - -export const filterMatch = ( - { annenMottaker, forfallsdato, utbetalingsdato }: ManedUtbetaling, - filters: FilterPredicate | null -) => { - if (!filters) return true; - const { fraDato, tilDato, mottaker } = filters; - let matchMottaker; - if (!mottaker) matchMottaker = true; - else if (mottaker === "annenMottaker") matchMottaker = annenMottaker; - else matchMottaker = !annenMottaker; - - // Hvis vi ikke har dato-filter eller utbetalingsdato/forfallsdato, trenger vi ikke sjekke datofilteret. - if ((!utbetalingsdato && !forfallsdato) || (!tilDato && !fraDato)) return matchMottaker; - - const dato = stringToDateWithoutTimezone(utbetalingsdato ?? forfallsdato!); - const matchFra = !fraDato ? true : !isBefore(dato, fraDato); - const matchTil = !tilDato ? true : !isAfter(dato, tilDato); - - return matchMottaker && matchTil && matchFra; -}; - -const useFiltrerteUtbetalinger = (utbetalinger: NyeOgTidligereUtbetalingerResponse[] | undefined) => { - const { filters } = useFilter(); - - return React.useMemo( - () => - utbetalinger - ?.map((response) => ({ - ...response, - utbetalingerForManed: response.utbetalingerForManed.filter((utbetaling) => - filterMatch(utbetaling, filters) - ), - })) - .filter((response) => response.utbetalingerForManed.length > 0), - [utbetalinger, filters] - ); -}; - -export default useFiltrerteUtbetalinger; diff --git a/src/utbetalinger/beta/filter/utbetalingerFilter.module.css b/src/utbetalinger/beta/filter/utbetalingerFilter.module.css deleted file mode 100644 index 861dccde..00000000 --- a/src/utbetalinger/beta/filter/utbetalingerFilter.module.css +++ /dev/null @@ -1,17 +0,0 @@ -.utbetalinger_filter { - width: fit-content; - margin-bottom: 2rem; -} - -.periodevelger { - margin-bottom: 2rem; - width: min-content; -} - -.chips { - margin: 0.5rem 0; -} - -.modal_content { - padding: 20px 24px; -} diff --git a/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx b/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx deleted file mode 100644 index 277262b6..00000000 --- a/src/utbetalinger/beta/filter/utbetalingerFilter.test.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { ManedUtbetaling } from "../../../generated/model"; - -import { filterMatch } from "./useFiltrerteUtbetalinger"; -import { FilterPredicate } from "./FilterContext"; - -describe("filtrering på utbetalinger fungerer", () => { - it("skal filtrere dato på fom og tom", () => { - const utbetaling: ManedUtbetaling = { - utbetalingsdato: "2023-04-12", - status: "UTBETALT", - annenMottaker: false, - tittel: "", - belop: 0, - fiksDigisosId: "", - }; - - const filterFra = { - mottaker: null, - fraDato: new Date(2023, 3, 12), - tilDato: undefined, - }; - const filterFraSenere = { - mottaker: null, - fraDato: new Date(2023, 3, 20), - tilDato: undefined, - }; - const filterTil = { - mottaker: null, - fraDato: undefined, - tilDato: new Date(2023, 3, 12), - }; - const filterTilTidligere = { - mottaker: null, - fraDato: undefined, - tilDato: new Date(2023, 3, 10), - }; - - expect(filterMatch(utbetaling, filterFra)).toBeTruthy(); - expect(filterMatch(utbetaling, filterTil)).toBeTruthy(); - expect(filterMatch(utbetaling, filterFraSenere)).toBeFalsy(); - expect(filterMatch(utbetaling, filterTilTidligere)).toBeFalsy(); - }); - - it("skal filtrere mottaker", () => { - const utbetalingAnnen: ManedUtbetaling = { - utbetalingsdato: "2023-04-12", - status: "UTBETALT", - annenMottaker: true, - tittel: "tilAnnen", - belop: 0, - fiksDigisosId: "", - }; - - const utbetalingMeg: ManedUtbetaling = { - utbetalingsdato: "2023-04-12", - status: "UTBETALT", - annenMottaker: false, - tittel: "tilMeg", - belop: 0, - fiksDigisosId: "", - }; - - const filterMeg: FilterPredicate = { - mottaker: "minKonto", - fraDato: undefined, - tilDato: undefined, - }; - const filterAnnen: FilterPredicate = { - mottaker: "annenMottaker", - fraDato: undefined, - tilDato: new Date(2023, 3, 12), - }; - expect(filterMatch(utbetalingAnnen, filterAnnen)).toBeTruthy(); - expect(filterMatch(utbetalingAnnen, filterMeg)).toBeFalsy(); - expect(filterMatch(utbetalingMeg, filterMeg)).toBeTruthy(); - expect(filterMatch(utbetalingMeg, filterAnnen)).toBeFalsy(); - }); -}); diff --git a/src/utbetalinger/beta/utbetalinger.module.css b/src/utbetalinger/beta/utbetalinger.module.css deleted file mode 100644 index 36746aeb..00000000 --- a/src/utbetalinger/beta/utbetalinger.module.css +++ /dev/null @@ -1,60 +0,0 @@ -.utbetalinger_side { - padding: 4rem 32px 32px 32px; - display: flex; - flex-direction: column; - background-color: #d4e6d8; -} - -.utbetalinger_side_innhold { - display: flex; - flex-direction: row; - justify-content: center; - gap: 2rem; - min-height: 40vh; -} - -.utbetalinger_loader { - margin: 100px; -} - -.utbetalinger_panel { - position: relative; - padding-top: 3rem; - max-width: 40rem; -} - -.utbetalinger_panel h2 { - text-align: center; -} - -.utbetalinger_decoration { - position: absolute; - transform: translate(-50%, -50%); - top: 0; - left: 50%; - background: #9bd0b0; - border-radius: 50%; - height: 4rem; - width: 4rem; -} - -.filter_section { - height: fit-content; - padding: 1.5rem 1.5rem 0; -} - -.tab_list_blue { - background-color: var(--a-blue-500); -} - -.tab_list_blue span { - color: var(--a-text-on-neutral); -} - -.tab_list_transparent { - background-color: transparent; -} - -.tab_panel { - padding: 16px 0; -} diff --git a/src/utbetalinger/beta/filter/FilterChips.tsx b/src/utbetalinger/filter/FilterChips.tsx similarity index 84% rename from src/utbetalinger/beta/filter/FilterChips.tsx rename to src/utbetalinger/filter/FilterChips.tsx index 5cd16437..ff70f652 100644 --- a/src/utbetalinger/beta/filter/FilterChips.tsx +++ b/src/utbetalinger/filter/FilterChips.tsx @@ -2,10 +2,9 @@ import { useTranslation } from "next-i18next"; import { Box, Chips } from "@navikt/ds-react"; import React from "react"; -import { dateToDDMMYYYY } from "../../../utils/formatting"; +import { dateToDDMMYYYY } from "../../utils/formatting"; -import styles from "./utbetalingerFilter.module.css"; -import { useFilter } from "./FilterContext"; +import { useFilter } from "./lib/useFilter"; export const FilterChips = () => { const { filters, setFilter } = useFilter(); @@ -16,7 +15,7 @@ export const FilterChips = () => { const { fraDato, tilDato, mottaker } = filters; return ( - + {fraDato && ( setFilter({ fraDato: null })}> {t("filter.fra") + ": " + dateToDDMMYYYY(i18n.language, fraDato)} diff --git a/src/utbetalinger/beta/filter/FilterDatePicker.tsx b/src/utbetalinger/filter/FilterDatePicker.tsx similarity index 97% rename from src/utbetalinger/beta/filter/FilterDatePicker.tsx rename to src/utbetalinger/filter/FilterDatePicker.tsx index 02554c3e..f74673de 100644 --- a/src/utbetalinger/beta/filter/FilterDatePicker.tsx +++ b/src/utbetalinger/filter/FilterDatePicker.tsx @@ -3,7 +3,7 @@ import React, { useState } from "react"; import { DatePicker, DateValidationT, useDatepicker } from "@navikt/ds-react"; import { subMonths } from "date-fns"; -import useIsMobile from "../../../utils/useIsMobile"; +import useIsMobile from "../../utils/useIsMobile"; const validateFromDate = ( { isAfter, isBefore, isInvalid, isValidDate }: DateValidationT, diff --git a/src/utbetalinger/beta/filter/FilterModal.tsx b/src/utbetalinger/filter/FilterModal.tsx similarity index 87% rename from src/utbetalinger/beta/filter/FilterModal.tsx rename to src/utbetalinger/filter/FilterModal.tsx index aebe9b15..00166df4 100644 --- a/src/utbetalinger/beta/filter/FilterModal.tsx +++ b/src/utbetalinger/filter/FilterModal.tsx @@ -4,9 +4,8 @@ import { FilterIcon } from "@navikt/aksel-icons"; import { useTranslation } from "next-i18next"; import UtbetalingerFilter from "./UtbetalingerFilter"; -import { useFilter } from "./FilterContext"; -import styles from "./utbetalingerFilter.module.css"; import { FilterChips } from "./FilterChips"; +import { useFilter } from "./lib/useFilter"; const FilterModal = () => { const { clearFilters } = useFilter(); @@ -28,8 +27,8 @@ const FilterModal = () => { {t("filter.knapp")} - - + +