Skip to content

Commit 4a1b44c

Browse files
committed
Fjern avhengighet til api-client fra frontend-common
1 parent 22ae4ca commit 4a1b44c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+176
-152
lines changed

frontend/arrangor-flate/app/routes/$orgnr.utbetaling.$id.bekreft.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ import { PageHeader } from "~/components/PageHeader";
1818
import { UtbetalingDetaljer } from "~/components/utbetaling/UtbetalingDetaljer";
1919
import { getOrError, getOrThrowError } from "~/form/form-helpers";
2020
import { internalNavigation } from "~/internal-navigation";
21-
import { problemDetailResponse, useOrgnrFromUrl } from "~/utils";
21+
import { isValidationError, problemDetailResponse, useOrgnrFromUrl } from "~/utils";
2222
import { getCurrentTab } from "~/utils/currentTab";
2323
import { Separator } from "../components/Separator";
2424
import { apiHeaders } from "~/auth/auth.server";
25-
import { isValidationError, jsonPointerToFieldPath } from "@mr/frontend-common/utils/utils";
25+
import { jsonPointerToFieldPath } from "@mr/frontend-common/utils/utils";
2626

2727
type BekreftUtbetalingData = {
2828
utbetaling: ArrFlateUtbetaling;

frontend/arrangor-flate/app/utils.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useParams } from "react-router";
2-
import { Periode, ProblemDetail } from "api-client";
2+
import { Periode, ProblemDetail, ValidationError } from "api-client";
33

44
export function formaterPeriode(periode: Periode) {
55
const start = formaterDato(periode.start);
@@ -43,3 +43,7 @@ export function problemDetailResponse(error: ProblemDetail): Response {
4343
headers: { "Content-Type": "application/json" },
4444
});
4545
}
46+
47+
export function isValidationError(error: unknown): error is ValidationError {
48+
return typeof error === "object" && error !== null && "errors" in error;
49+
}

frontend/frontend-common/QueryKeys.ts

-5
This file was deleted.

frontend/frontend-common/components/error-handling/errors.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
import { ProblemDetail } from "@mr/api-client-v2";
1+
type ProblemDetail = {
2+
type: string;
3+
title: string;
4+
status: number;
5+
detail: string;
6+
instance?: string;
7+
[key: string]: unknown | string | number | undefined;
8+
};
29

310
export function isProblemDetail(error: any): error is ProblemDetail {
411
return 'status' in error && 'detail' in error && 'type' in error && 'title' in error;

frontend/frontend-common/components/filter/filterTag/NavEnhetFilterTag.tsx

+3-4
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ import Ikonknapp from "../../ikonknapp/Ikonknapp";
33
import { XMarkIcon } from "@navikt/aksel-icons";
44
import styles from "./FilterTag.module.scss";
55
import { MouseEvent } from "react";
6-
import { NavEnhet } from "@mr/api-client-v2";
76

87
interface Props {
9-
navEnheter: NavEnhet[];
8+
navEnheter: string[];
109
onClose?: (e: MouseEvent) => void;
1110
}
1211

@@ -16,7 +15,7 @@ export function NavEnhetFilterTag({ navEnheter, onClose }: Props) {
1615
}
1716

1817
function tagLabel() {
19-
const firstEnhetName = navEnheter[0].navn;
18+
const firstEnhetName = navEnheter[0];
2019
if (navEnheter.length > 1) {
2120
return `${firstEnhetName} +${navEnheter.length - 1}`;
2221
}
@@ -30,7 +29,7 @@ export function NavEnhetFilterTag({ navEnheter, onClose }: Props) {
3029
key="navenhet"
3130
data-testid="filtertag_navenhet"
3231
className={styles.filtertag}
33-
title={navEnheter.map((enhet) => enhet.navn).join(", ")}
32+
title={navEnheter.join(", ")}
3433
>
3534
{tagLabel()}
3635
{onClose ? (

frontend/frontend-common/components/gjennomforing/GjennomforingStatusMedAarsakTag.tsx

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
import { Tag } from "@navikt/ds-react";
2-
import { GjennomforingStatusDto } from "@mr/api-client-v2";
32
import { useState } from "react";
43
import { variantAndName } from "./GjennomforingStatusTag";
54

65
interface Props {
7-
status: GjennomforingStatusDto;
6+
status: string;
7+
avbrutt?: {
8+
tidspunkt: string;
9+
aarsak: string;
10+
beskrivelse: string;
11+
};
812
}
913

10-
export function GjennomforingStatusMedAarsakTag({ status }: Props) {
14+
export function GjennomforingStatusMedAarsakTag({ status, avbrutt }: Props) {
1115
const [expandLabel, setExpandLabel] = useState<boolean>(false);
1216

13-
const { variant, label } = variantAndName(status.status);
14-
const labelWithBeskrivelse = status.avbrutt?.beskrivelse
15-
? `${label} - ${status.avbrutt.beskrivelse}`
17+
const { variant, label } = variantAndName(status);
18+
const labelWithBeskrivelse = avbrutt?.beskrivelse
19+
? `${label} - ${avbrutt.beskrivelse}`
1620
: label;
1721

1822
return (
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { Tag } from "@navikt/ds-react";
2-
import { GjennomforingStatus } from "@mr/api-client-v2";
32

43
interface Props {
5-
status: GjennomforingStatus;
4+
status: string;
65
}
76

87
export function GjennomforingStatusTag({ status }: Props) {
@@ -20,18 +19,16 @@ export function GjennomforingStatusTag({ status }: Props) {
2019
);
2120
}
2221

23-
export function variantAndName(status: GjennomforingStatus): {
22+
export function variantAndName(status: string): {
2423
variant: "alt1" | "success" | "neutral" | "error";
2524
label: string;
2625
} {
27-
switch (status) {
28-
case GjennomforingStatus.GJENNOMFORES:
29-
return { variant: "success", label: "Gjennomføres" };
30-
case GjennomforingStatus.AVSLUTTET:
31-
return { variant: "neutral", label: "Avsluttet" };
32-
case GjennomforingStatus.AVBRUTT:
33-
return { variant: "error", label: "Avbrutt" };
34-
case GjennomforingStatus.AVLYST:
35-
return { variant: "error", label: "Avlyst" };
36-
}
26+
const statusMap: Record<string, { variant: "alt1" | "success" | "neutral" | "error"; label: string }> = {
27+
GJENNOMFORES: { variant: "success", label: "Gjennomføres" },
28+
AVSLUTTET: { variant: "neutral", label: "Avsluttet" },
29+
AVBRUTT: { variant: "error", label: "Avbrutt" },
30+
AVLYST: { variant: "error", label: "Avlyst" },
31+
};
32+
33+
return statusMap[status] || { variant: "alt1", label: "Ukjent status" };
3734
}

frontend/frontend-common/components/lagreFilter/LagreFilterButton.tsx

+2-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { zodResolver } from "@hookform/resolvers/zod";
22
import { BodyShort, Button, Heading, Modal, TextField } from "@navikt/ds-react";
3-
import { LagretDokumenttype, LagretFilterRequest } from "@mr/api-client-v2";
43
import { useEffect, useState } from "react";
54
import { FormProvider, useForm } from "react-hook-form";
65
import z from "zod";
@@ -15,12 +14,11 @@ const LagreFilterSchema = z.object({
1514
type InferredLagreFilterSchema = z.infer<typeof LagreFilterSchema>;
1615

1716
interface Props {
18-
dokumenttype: LagretDokumenttype;
1917
filter: any;
20-
onLagre: (r: LagretFilterRequest) => void;
18+
onLagre: (r: any) => void;
2119
}
2220

23-
export function LagreFilterButton({ onLagre, dokumenttype, filter }: Props) {
21+
export function LagreFilterButton({ onLagre, filter }: Props) {
2422
const [isOpen, setIsOpen] = useState(false);
2523

2624
const form = useForm<InferredLagreFilterSchema>({
@@ -43,8 +41,6 @@ export function LagreFilterButton({ onLagre, dokumenttype, filter }: Props) {
4341
{
4442
navn: data.navn,
4543
filter,
46-
type: dokumenttype,
47-
sortOrder: 0,
4844
id: window.crypto.randomUUID(),
4945
}
5046
);

frontend/frontend-common/components/lagreFilter/LagredeFilterOversikt.tsx

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
import { TrashFillIcon } from "@navikt/aksel-icons";
22
import { Alert, BodyShort, Button, HStack, Radio, RadioGroup } from "@navikt/ds-react";
3-
import { LagretFilter } from "@mr/api-client-v2";
43
import { useRef, useState } from "react";
54
import styles from "./LagredeFilterOversikt.module.scss";
65
import { VarselModal } from "../varsel/VarselModal";
76

7+
8+
interface LagretFilter {
9+
id: string;
10+
navn: string;
11+
filter: {
12+
[key: string]: unknown;
13+
};
14+
}
15+
816
interface Props {
917
lagredeFilter: LagretFilter[];
1018
filter: any;

frontend/frontend-common/components/navEnhetFilter/NavEnhetFilter.tsx

+16-5
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,35 @@ import classnames from "classnames";
44
import { useState } from "react";
55
import styles from "./NavEnhetFilter.module.scss";
66
import { addOrRemove } from "../../utils/utils";
7-
import { NavEnhet, NavRegion } from "@mr/api-client-v2";
7+
8+
interface NavRegion {
9+
enhetsnummer: string;
10+
navn: string;
11+
enheter: Array<NavEnhet>;
12+
}
13+
14+
interface NavEnhet {
15+
enhetsnummer: string;
16+
overordnetEnhet: string | null;
17+
navn: string;
18+
}
819

920
interface RegionMap {
1021
[region: string]: NavEnhet[];
1122
}
1223

1324
interface Props {
1425
navEnheter: NavEnhet[];
15-
setNavEnheter: (navEnheter: NavEnhet[]) => void;
26+
setNavEnheter: (navEnheter: string[]) => void;
1627
regioner: NavRegion[];
1728
}
1829

1930
export function NavEnhetFilter({ navEnheter, setNavEnheter, regioner }: Props) {
2031
const regionMap = buildRegionMap(navEnheter);
2132
const [regionOpen, setRegionOpen] = useState<string[]>([]);
2233

23-
function regionMapToNavEnheter(regionMap: RegionMap): NavEnhet[] {
24-
return Array.from(Object.values(regionMap)).flat(1);
34+
function regionMapToNavEnheter(regionMap: RegionMap): string[] {
35+
return Array.from(Object.values(regionMap)).flat(1).map(enhet => enhet.enhetsnummer);
2536
}
2637

2738
function buildRegionMap(navEnheter: NavEnhet[]): RegionMap {
@@ -69,7 +80,7 @@ export function NavEnhetFilter({ navEnheter, setNavEnheter, regioner }: Props) {
6980
}
7081

7182
function underenhetOnChange(enhet: NavEnhet) {
72-
setNavEnheter(addOrRemove(navEnheter, enhet));
83+
setNavEnheter(addOrRemove(navEnheter, enhet).map(enhet => enhet.enhetsnummer));
7384
}
7485

7586
return (

frontend/frontend-common/index.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import { NavEnhetFilterTag } from "./components/filter/filterTag/NavEnhetFilterT
77
import { FilterTag } from "./components/filter/filterTag/FilterTag";
88
import { FilterTagsContainer } from "./components/filter/filterTag/FilterTagsContainer";
99
import { FilterAccordionHeader } from "./components/filter/accordionHeader/FilterAccordionHeader";
10-
import { GjennomforingStatusTag } from "./components/gjennomforing/GjennomforingStatusTag";
11-
import { GjennomforingStatusMedAarsakTag } from "./components/gjennomforing/GjennomforingStatusMedAarsakTag";
1210
import { FilterSkeleton } from "./components/skeleton/FilterSkeleton";
1311
import {
1412
InlineErrorBoundary,
@@ -19,6 +17,8 @@ import { DetaljerSkeleton } from "./components/skeleton/DetaljerSkeleton";
1917
import { ListSkeleton } from "./components/skeleton/ListSkeleton";
2018
import { LokalInformasjonContainer } from "./components/containers/LokalInformasjonContainer";
2119
import { LagreFilterButton } from "./components/lagreFilter/LagreFilterButton";
20+
import { GjennomforingStatusTag } from "./components/gjennomforing/GjennomforingStatusTag";
21+
import { GjennomforingStatusMedAarsakTag } from "./components/gjennomforing/GjennomforingStatusMedAarsakTag";
2222
import { LagredeFilterOversikt } from "./components/lagreFilter/LagredeFilterOversikt";
2323
import { TilbakemeldingsLenke } from "./components/tilbakemelding/Tilbakemeldingslenke";
2424
import { FilterContainer } from "./components/filter/FilterContainer";
@@ -45,10 +45,10 @@ export {
4545
LagreFilterButton,
4646
LagredeFilterOversikt,
4747
TilbakemeldingsLenke,
48-
FilterContainer,
49-
useOpenFilterWhenThreshold,
5048
GjennomforingStatusTag,
5149
GjennomforingStatusMedAarsakTag,
50+
FilterContainer,
51+
useOpenFilterWhenThreshold,
5252
useApiQuery,
5353
useApiSuspenseQuery,
5454
};

frontend/frontend-common/package.json

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
"homepage": "https://github.com/navikt/mulighetsrommet#readme",
99
"dependencies": {
1010
"@hookform/resolvers": "4.1.3",
11-
"@mr/api-client-v2": "workspace:*",
1211
"@navikt/aksel-icons": "7.17.3",
1312
"@navikt/ds-css": "7.17.3",
1413
"@navikt/ds-react": "7.17.3",

frontend/frontend-common/utils/utils.ts

-34
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
import {
2-
GjennomforingStatus,
3-
Tiltakskode,
4-
TiltakskodeArena,
5-
ValidationError,
6-
} from "@mr/api-client-v2";
71
import { shallowEquals } from "./shallow-equals";
82

93
export function addOrRemove<T>(array: T[], item: T): T[] {
@@ -20,10 +14,6 @@ export function addOrRemove<T>(array: T[], item: T): T[] {
2014
}
2115
}
2216

23-
export function gjennomforingIsAktiv(status: GjennomforingStatus): boolean {
24-
return status === GjennomforingStatus.GJENNOMFORES;
25-
}
26-
2717
export function formaterNOK(tall: number) {
2818
return `${formaterTall(tall)} NOK`;
2919
}
@@ -32,36 +22,12 @@ export function formaterTall(tall: number) {
3222
return Intl.NumberFormat("no-nb").format(tall);
3323
}
3424

35-
export function isKursTiltak(tiltakskode?: Tiltakskode, arenaKode?: TiltakskodeArena): boolean {
36-
if (tiltakskode) {
37-
return [
38-
Tiltakskode.JOBBKLUBB,
39-
Tiltakskode.GRUPPE_ARBEIDSMARKEDSOPPLAERING,
40-
Tiltakskode.GRUPPE_FAG_OG_YRKESOPPLAERING,
41-
].includes(tiltakskode);
42-
}
43-
44-
if (arenaKode) {
45-
return [TiltakskodeArena.ENKELAMO, TiltakskodeArena.ENKFAGYRKE].includes(arenaKode);
46-
}
47-
48-
return false;
49-
}
50-
5125
export function formaterKontoNummer(kontoNummer?: string): string {
5226
return !kontoNummer
5327
? ""
5428
: `${kontoNummer.substring(0, 4)} ${kontoNummer.substring(4, 6)} ${kontoNummer.substring(6, 11)}`;
5529
}
5630

57-
export function isValidationError(error: unknown): error is ValidationError {
58-
return (
59-
typeof error === "object" &&
60-
error !== null &&
61-
"errors" in error
62-
);
63-
}
64-
6531
export function jsonPointerToFieldPath(pointer: string): string {
6632
return pointer
6733
.replace(/^\//, "") // Remove leading slash

frontend/mr-admin-flate/src/api/lagret-filter/lagretFilterAction.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { LagretDokumenttype, LagretFilterRequest, LagretFilterService } from "@mr/api-client-v2";
1+
import { LagretDokumenttype, LagretFilterService } from "@mr/api-client-v2";
22
import { QueryClient } from "@tanstack/react-query";
33
import { ActionFunctionArgs } from "react-router";
44
import { QueryKeys } from "../QueryKeys";
@@ -37,14 +37,14 @@ export const lagreFilterAction =
3737
});
3838
};
3939

40-
export function filterToActionRequest(request: LagretFilterRequest): FormData {
40+
export function filterToActionRequest(request: any, type: LagretDokumenttype): FormData {
4141
const formData = new FormData();
4242
if (request.id) {
4343
formData.append("id", request.id);
4444
}
45-
formData.append("type", request.type);
4645
formData.append("filter", JSON.stringify(request.filter));
47-
formData.append("sortOrder", request.sortOrder.toString());
46+
formData.append("sortOrder", "0");
47+
formData.append("type", type);
4848
formData.append("navn", request.navn);
4949
return formData;
5050
}

frontend/mr-admin-flate/src/components/arrangor/ArrangorKontaktpersonForm.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { useDeleteArrangorKontaktperson } from "@/api/arrangor/useDeleteArrangorKontaktperson";
22
import { useUpsertArrangorKontaktperson } from "@/api/arrangor/useUpsertArrangorKontaktperson";
3-
import { validEmail } from "@/utils/Utils";
3+
import { isValidationError, validEmail } from "@/utils/Utils";
44
import {
55
ArrangorKontaktperson,
66
ArrangorKontaktpersonAnsvar,
77
ProblemDetail,
88
} from "@mr/api-client-v2";
9-
import { isValidationError, jsonPointerToFieldPath } from "@mr/frontend-common/utils/utils";
9+
import { jsonPointerToFieldPath } from "@mr/frontend-common/utils/utils";
1010
import { Button, HGrid, TextField, UNSAFE_Combobox } from "@navikt/ds-react";
1111
import { useState } from "react";
1212
import { v4 as uuidv4 } from "uuid";

frontend/mr-admin-flate/src/components/arrangor/ArrangorKontaktpersonerOversikt.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
ArrangorKontaktpersonAnsvar,
77
ProblemDetail,
88
} from "@mr/api-client-v2";
9-
import { isValidationError, jsonPointerToFieldPath } from "@mr/frontend-common/utils/utils";
9+
import { jsonPointerToFieldPath } from "@mr/frontend-common/utils/utils";
1010
import {
1111
Button,
1212
HStack,
@@ -21,6 +21,7 @@ import { RefObject, useRef, useState } from "react";
2121
import { z } from "zod";
2222
import { navnForAnsvar } from "./ArrangorKontaktpersonUtils";
2323
import { SlettKontaktpersonModal } from "./SlettKontaktpersonModal";
24+
import { isValidationError } from "@/utils/Utils";
2425

2526
interface Props {
2627
arrangor: Arrangor;

0 commit comments

Comments
 (0)