Skip to content

Commit

Permalink
IS-2621: Add stansdato datepicker
Browse files Browse the repository at this point in the history
  • Loading branch information
vetlesolgaard committed Oct 3, 2024
1 parent 5729589 commit ae1d194
Show file tree
Hide file tree
Showing 14 changed files with 114 additions and 66 deletions.
32 changes: 22 additions & 10 deletions src/data/manglendemedvirkning/manglendeMedvirkningTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,34 @@ interface VurderingRequestDTO {
document: DocumentComponentDto[];
}

export interface NewForhandsvarselVurderingRequestDTO
extends VurderingRequestDTO {
export interface ForhandsvarselVurdering extends VurderingRequestDTO {
vurderingType: VurderingType.FORHANDSVARSEL;
varselSvarfrist: Date;
}

export interface NewFinalVurderingRequestDTO extends VurderingRequestDTO {
vurderingType:
| VurderingType.OPPFYLT
| VurderingType.STANS
| VurderingType.UNNTAK
| VurderingType.IKKE_AKTUELL;
export interface StansVurdering extends VurderingRequestDTO {
vurderingType: VurderingType.STANS;
stansdato: Date;
}

export interface OppfyltVurdering extends VurderingRequestDTO {
vurderingType: VurderingType.OPPFYLT;
}

export interface UnntakVurdering extends VurderingRequestDTO {
vurderingType: VurderingType.UNNTAK;
}

export interface IkkeAktuellVurdering extends VurderingRequestDTO {
vurderingType: VurderingType.IKKE_AKTUELL;
}

export type NewVurderingRequestDTO =
| NewForhandsvarselVurderingRequestDTO
| NewFinalVurderingRequestDTO;
| ForhandsvarselVurdering
| StansVurdering
| OppfyltVurdering
| UnntakVurdering
| IkkeAktuellVurdering;

export interface VurderingResponseDTO {
uuid: string;
Expand All @@ -31,6 +42,7 @@ export interface VurderingResponseDTO {
vurderingType: VurderingType;
veilederident: string;
begrunnelse: string;
stansdato?: Date;
document: DocumentComponentDto[];
varsel: Varsel | null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,12 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { ISMANGLENDEMEDVIRKNING_ROOT } from "@/apiConstants";
import { post } from "@/api/axios";
import {
NewForhandsvarselVurderingRequestDTO,
NewFinalVurderingRequestDTO,
VurderingResponseDTO,
NewVurderingRequestDTO,
VurderingResponseDTO,
} from "@/data/manglendemedvirkning/manglendeMedvirkningTypes";
import { manglendeMedvirkningQueryKeys } from "@/data/manglendemedvirkning/manglendeMedvirkningQueryHooks";

function useSendVurdering<T extends NewVurderingRequestDTO>() {
export function useSendVurdering<T extends NewVurderingRequestDTO>() {
const personident = useValgtPersonident();
const queryClient = useQueryClient();
const path = `${ISMANGLENDEMEDVIRKNING_ROOT}/manglende-medvirkning/vurderinger`;
Expand All @@ -28,11 +26,3 @@ function useSendVurdering<T extends NewVurderingRequestDTO>() {
},
});
}

export function useSendVurderingManglendeMedvirkning() {
return useSendVurdering<NewFinalVurderingRequestDTO>();
}

export function useSendForhandsvarselManglendeMedvirkning() {
return useSendVurdering<NewForhandsvarselVurderingRequestDTO>();
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import {
import { useDocumentComponents } from "@/hooks/useDocumentComponents";
import {
getForhandsvarselManglendeMedvirkningTexts,
getUnntakManglendeMedvirkningTexts,
getIkkeAktuellManglendeMedvirkningTexts,
getOppfyltManglendeMedvirkningTexts,
getStansTexts,
getUnntakManglendeMedvirkningTexts,
} from "@/data/manglendemedvirkning/manglendeMedvirkningDocumentTexts";

type ForhandsvarselDocumentValues = {
Expand All @@ -34,7 +34,7 @@ type IkkeAktuellDocumentValues = {

type StansDocumentValues = {
begrunnelse: string;
varselSvarfrist: Date;
stansdato: Date;
};

interface Documents {
Expand Down Expand Up @@ -145,7 +145,7 @@ export function useManglendeMedvirkningVurderingDocument(): Documents {
function getStansDocument(
values: StansDocumentValues
): DocumentComponentDto[] {
const stansTexts = getStansTexts(values.varselSvarfrist);
const stansTexts = getStansTexts(values.stansdato);
return [
createHeaderH1(stansTexts.header),
createParagraph(stansTexts.fom),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ export const mockIsmanglendemedvirkning = [
svarfrist: addDays(new Date(), -1),
}
: null;
const stansdato =
body.vurderingType === "STANS" ? body.stansdato : undefined;
const sentVurdering: VurderingResponseDTO = {
uuid: generateUUID(),
createdAt: new Date(),
Expand All @@ -39,6 +41,7 @@ export const mockIsmanglendemedvirkning = [
veilederident: VEILEDER_DEFAULT.ident,
begrunnelse: body.begrunnelse,
document: body.document,
stansdato: stansdato,
varsel: varsel,
};
manglendeMedvirkningVurderinger = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import { Forhandsvisning } from "@/components/Forhandsvisning";
import { ButtonRow } from "@/components/Layout";
import { addDays, addWeeks } from "@/utils/datoUtils";
import { useManglendeMedvirkningVurderingDocument } from "@/hooks/manglendemedvirkning/useManglendeMedvirkningVurderingDocument";
import { useSendForhandsvarselManglendeMedvirkning } from "@/data/manglendemedvirkning/useSendVurderingManglendeMedvirkning";
import { useSendVurdering } from "@/data/manglendemedvirkning/useSendVurderingManglendeMedvirkning";
import {
NewForhandsvarselVurderingRequestDTO,
ForhandsvarselVurdering,
VurderingType,
} from "@/data/manglendemedvirkning/manglendeMedvirkningTypes";
import { useValgtPersonident } from "@/hooks/useValgtBruker";
Expand Down Expand Up @@ -42,7 +42,7 @@ interface SkjemaValues {

export default function ForhandsvarselSkjema() {
const personident = useValgtPersonident();
const sendForhandsvarsel = useSendForhandsvarselManglendeMedvirkning();
const sendForhandsvarsel = useSendVurdering<ForhandsvarselVurdering>();
const {
register,
watch,
Expand All @@ -54,7 +54,7 @@ export default function ForhandsvarselSkjema() {
useManglendeMedvirkningVurderingDocument();

const submit = (values: SkjemaValues) => {
const forhandsvarselRequestDTO: NewForhandsvarselVurderingRequestDTO = {
const forhandsvarselRequestDTO: ForhandsvarselVurdering = {
vurderingType: VurderingType.FORHANDSVARSEL,
personident: personident,
begrunnelse: values.begrunnelse,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ import { SkjemaInnsendingFeil } from "@/components/SkjemaInnsendingFeil";
import { Link } from "react-router-dom";
import { manglendeMedvirkningPath } from "@/routers/AppRouter";
import React from "react";
import { useSendVurderingManglendeMedvirkning } from "@/data/manglendemedvirkning/useSendVurderingManglendeMedvirkning";
import { useSendVurdering } from "@/data/manglendemedvirkning/useSendVurderingManglendeMedvirkning";
import { useForm } from "react-hook-form";
import {
NewFinalVurderingRequestDTO,
IkkeAktuellVurdering,
VurderingType,
} from "@/data/manglendemedvirkning/manglendeMedvirkningTypes";
import { useValgtPersonident } from "@/hooks/useValgtBruker";
Expand Down Expand Up @@ -49,7 +49,7 @@ export default function IkkeAktuellSkjema() {
const { setNotification } = useNotification();
const { getIkkeAktuellDocument } = useManglendeMedvirkningVurderingDocument();
const personident = useValgtPersonident();
const sendVurdering = useSendVurderingManglendeMedvirkning();
const sendVurdering = useSendVurdering<IkkeAktuellVurdering>();
const {
register,
watch,
Expand All @@ -59,7 +59,7 @@ export default function IkkeAktuellSkjema() {
} = useForm<SkjemaValues>();

const submit = (values: SkjemaValues) => {
const vurderingRequestDTO: NewFinalVurderingRequestDTO = {
const vurderingRequestDTO: IkkeAktuellVurdering = {
personident,
vurderingType: VurderingType.IKKE_AKTUELL,
begrunnelse: values.begrunnelse,
Expand Down
8 changes: 4 additions & 4 deletions src/sider/manglendemedvirkning/oppfylt/OppfyltSkjema.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ import { Forhandsvisning } from "@/components/Forhandsvisning";
import { Link } from "react-router-dom";
import { manglendeMedvirkningPath } from "@/routers/AppRouter";
import React from "react";
import { useSendVurderingManglendeMedvirkning } from "@/data/manglendemedvirkning/useSendVurderingManglendeMedvirkning";
import { useSendVurdering } from "@/data/manglendemedvirkning/useSendVurderingManglendeMedvirkning";
import { useForm } from "react-hook-form";
import {
NewFinalVurderingRequestDTO,
OppfyltVurdering,
VurderingType,
} from "@/data/manglendemedvirkning/manglendeMedvirkningTypes";
import { useValgtPersonident } from "@/hooks/useValgtBruker";
Expand Down Expand Up @@ -54,7 +54,7 @@ export default function OppfyltSkjema({ forhandsvarselSendtDato }: Props) {
const { setNotification } = useNotification();
const { getOppfyltDocument } = useManglendeMedvirkningVurderingDocument();
const personident = useValgtPersonident();
const sendVurdering = useSendVurderingManglendeMedvirkning();
const sendVurdering = useSendVurdering<OppfyltVurdering>();
const {
register,
watch,
Expand All @@ -67,7 +67,7 @@ export default function OppfyltSkjema({ forhandsvarselSendtDato }: Props) {
begrunnelse: values.begrunnelse,
forhandsvarselSendtDato: forhandsvarselSendtDato,
};
const vurderingRequestDTO: NewFinalVurderingRequestDTO = {
const vurderingRequestDTO: OppfyltVurdering = {
vurderingType: VurderingType.OPPFYLT,
personident,
begrunnelse: values.begrunnelse,
Expand Down
62 changes: 48 additions & 14 deletions src/sider/manglendemedvirkning/stans/StansSkjema.tsx
Original file line number Diff line number Diff line change
@@ -1,28 +1,34 @@
import { Forhandsvisning } from "@/components/Forhandsvisning";
import { useSendVurderingManglendeMedvirkning } from "@/data/manglendemedvirkning/useSendVurderingManglendeMedvirkning";
import { manglendeMedvirkningPath } from "@/routers/AppRouter";
import {
BodyShort,
Box,
Button,
DatePicker,
Heading,
HStack,
List,
Textarea,
useDatepicker,
} from "@navikt/ds-react";
import React from "react";
import { useForm } from "react-hook-form";
import { Link } from "react-router-dom";
import { useManglendeMedvirkningVurderingDocument } from "@/hooks/manglendemedvirkning/useManglendeMedvirkningVurderingDocument";
import {
NewFinalVurderingRequestDTO,
StansVurdering,
VurderingType,
} from "@/data/manglendemedvirkning/manglendeMedvirkningTypes";
import { useValgtPersonident } from "@/hooks/useValgtBruker";
import { useNotification } from "@/context/notification/NotificationContext";
import { useSendVurdering } from "@/data/manglendemedvirkning/useSendVurderingManglendeMedvirkning";

const texts = {
heading: "Skriv innstilling til NAY",
stansdatoLabel: "Velg dato for stans (obligatorisk)",
stansdatoDescription:
"Første mulige dato for stans er svarfristen i forhåndsvarselet",
missingStansdatoError: "Du må velge en dato",
p1: "Skriv kort hvilke opplysninger som ligger til grunn for stans, samt din vurdering av hvorfor vilkåret ikke er oppfylt og vurdering av eventuelle nye opplysninger.",
begrunnelseLabel: "Innstilling om stans (obligatorisk)",
afterSendInfo: {
Expand All @@ -49,8 +55,9 @@ const texts = {

const begrunnelseMaxLength = 5000;

export interface StansSkjemaValues {
export interface FormValues {
begrunnelse: string;
stansdato: Date;
}

interface Props {
Expand All @@ -59,27 +66,42 @@ interface Props {

export default function StansSkjema({ varselSvarfrist }: Props) {
const personident = useValgtPersonident();
const sendVurdering = useSendVurderingManglendeMedvirkning();
const formMethods = useForm<StansSkjemaValues>();
const sendVurdering = useSendVurdering<StansVurdering>();
const {
register,
watch,
setValue,
getValues,
formState: { errors },
setError,
clearErrors,
handleSubmit,
} = formMethods;
} = useForm<FormValues>();

const { getStansDocument } = useManglendeMedvirkningVurderingDocument();
const { datepickerProps, inputProps } = useDatepicker({
fromDate: varselSvarfrist,
onDateChange: (date: Date | undefined) => {
if (!!date) {
clearErrors("stansdato");
setValue("stansdato", date);
} else {
setError("stansdato", { message: texts.missingStansdatoError });
}
},
});

const { getStansDocument } = useManglendeMedvirkningVurderingDocument();
const { setNotification } = useNotification();

const submit = (values: StansSkjemaValues) => {
const stansVurdering: NewFinalVurderingRequestDTO = {
function submit(values: FormValues) {
const stansVurdering: StansVurdering = {
personident: personident,
vurderingType: VurderingType.STANS,
begrunnelse: values.begrunnelse,
stansdato: values.stansdato,
document: getStansDocument({
begrunnelse: values.begrunnelse,
varselSvarfrist: varselSvarfrist,
stansdato: values.stansdato,
}),
};

Expand All @@ -90,22 +112,34 @@ export default function StansSkjema({ varselSvarfrist }: Props) {
});
},
});
};
}

return (
<Box background="surface-default" padding="6">
<form onSubmit={handleSubmit(submit)} className="[&>*]:mb-4">
<Heading level="2" size="medium">
{texts.heading}
</Heading>
<BodyShort>{texts.p1}</BodyShort>
<DatePicker {...datepickerProps}>
<DatePicker.Input
{...register("stansdato", {
required: texts.missingStansdatoError,
})}
{...inputProps}
label={texts.stansdatoLabel}
description={texts.stansdatoDescription}
error={errors?.stansdato && texts.missingStansdatoError}
size="small"
/>
</DatePicker>
<Textarea
{...register("begrunnelse", {
maxLength: begrunnelseMaxLength,
required: texts.missingBegrunnelse,
})}
value={watch("begrunnelse")}
label={texts.begrunnelseLabel}
description={texts.p1}
error={errors.begrunnelse?.message}
size="small"
minRows={6}
Expand Down Expand Up @@ -140,8 +174,8 @@ export default function StansSkjema({ varselSvarfrist }: Props) {
contentLabel={texts.forhandsvisningLabel}
getDocumentComponents={() =>
getStansDocument({
begrunnelse: watch("begrunnelse"),
varselSvarfrist: varselSvarfrist,
begrunnelse: getValues("begrunnelse"),
stansdato: getValues("stansdato"),
})
}
/>
Expand Down
8 changes: 4 additions & 4 deletions src/sider/manglendemedvirkning/unntak/UnntakSkjema.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ import { Forhandsvisning } from "@/components/Forhandsvisning";
import { Link } from "react-router-dom";
import { manglendeMedvirkningPath } from "@/routers/AppRouter";
import {
NewFinalVurderingRequestDTO,
UnntakVurdering,
VurderingType,
} from "@/data/manglendemedvirkning/manglendeMedvirkningTypes";
import { useValgtPersonident } from "@/hooks/useValgtBruker";
import { useSendVurderingManglendeMedvirkning } from "@/data/manglendemedvirkning/useSendVurderingManglendeMedvirkning";
import { useSendVurdering } from "@/data/manglendemedvirkning/useSendVurderingManglendeMedvirkning";
import { useForm } from "react-hook-form";
import { useManglendeMedvirkningVurderingDocument } from "@/hooks/manglendemedvirkning/useManglendeMedvirkningVurderingDocument";
import { useNotification } from "@/context/notification/NotificationContext";
Expand Down Expand Up @@ -49,7 +49,7 @@ interface Props {
export default function UnntakSkjema({ forhandsvarselSendtDato }: Props) {
const personident = useValgtPersonident();
const { setNotification } = useNotification();
const sendVurdering = useSendVurderingManglendeMedvirkning();
const sendVurdering = useSendVurdering<UnntakVurdering>();
const {
register,
watch,
Expand All @@ -59,7 +59,7 @@ export default function UnntakSkjema({ forhandsvarselSendtDato }: Props) {
const { getUnntakDocument } = useManglendeMedvirkningVurderingDocument();

const submit = (values: UnntakSkjemaValues) => {
const requestBody: NewFinalVurderingRequestDTO = {
const requestBody: UnntakVurdering = {
personident: personident,
vurderingType: VurderingType.UNNTAK,
begrunnelse: values.begrunnelse,
Expand Down
Loading

0 comments on commit ae1d194

Please sign in to comment.