From 9377ad8f1ae9e6e8341f79d874e9f21445ae1537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Odd=20Andreas=20S=C3=B8rs=C3=A6ther?= Date: Mon, 27 Jan 2025 14:33:11 +0100 Subject: [PATCH] Datoformatering i varseltabell Hvis en hendelse inntraff for mer enn 12 timer siden, vis en dato i stedet for "x tid siden" --- src/AvtaleSide/Varsellogg/VarselTabell.tsx | 4 +-- src/utils/datoUtils.ts | 33 ++++++++++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/AvtaleSide/Varsellogg/VarselTabell.tsx b/src/AvtaleSide/Varsellogg/VarselTabell.tsx index 0054e036..8e2fdb4a 100644 --- a/src/AvtaleSide/Varsellogg/VarselTabell.tsx +++ b/src/AvtaleSide/Varsellogg/VarselTabell.tsx @@ -1,6 +1,6 @@ import HendelseIkon from '@/komponenter/HendelseIkon'; import { Varsel } from '@/types/varsel'; -import { tidSidenTidspunkt, formaterDato } from '@/utils/datoUtils'; +import { formaterDato, tidSidenTidspunktEllerDato } from '@/utils/datoUtils'; import { storForbokstav } from '@/utils/stringUtils'; import { Table } from '@navikt/ds-react'; import { Checkbox, CheckboxGroup } from '@navikt/ds-react'; @@ -75,7 +75,7 @@ const VarselTabell: FunctionComponent = (props) => { - {tidSidenTidspunkt(varsel.tidspunkt)} siden + {tidSidenTidspunktEllerDato(varsel.tidspunkt)} diff --git a/src/utils/datoUtils.ts b/src/utils/datoUtils.ts index 1b9f3833..25b73e94 100644 --- a/src/utils/datoUtils.ts +++ b/src/utils/datoUtils.ts @@ -1,4 +1,13 @@ -import { differenceInDays, format, isBefore, formatDistanceToNowStrict, Duration, intervalToDuration } from 'date-fns'; +import { + differenceInDays, + format, + isBefore, + formatDistanceToNowStrict, + Duration, + intervalToDuration, + differenceInHours, + isAfter, +} from 'date-fns'; import { nb } from 'date-fns/locale'; const units: Array<{ unit: keyof Duration; single: string; plural: string }> = [ @@ -26,6 +35,8 @@ export const formaterVarighet = (dato1: Date | string, dato2: Date | string): st */ export const NORSK_DATO_OG_TID_FORMAT_FULL = 'PPPp'; +export const NORSK_DATO_OG_TID_FORMAT = 'dd.MM.yyyy HH:mm'; + /** * Eksempel: * `format(new Date('2025-01-10', NORSK_DATO_FORMAT, {locale: nb}))` => '10.01.2025' @@ -87,6 +98,24 @@ export const formaterDatoHvisDefinert = ( * `tidSidenTidspunkt(addHours(new Date(), -5))` => '5 timer' * `tidSidenTidspunkt(addYears(new Date(), -5))` => '5 år' */ -export const tidSidenTidspunkt = (tidspunkt: string) => { +export const tidSidenTidspunkt = (tidspunkt: string | Date) => { return formatDistanceToNowStrict(tidspunkt, { locale: nb }); }; + +/** + * Eksempler (gitt at nåværende tidspunkt er '2025-01-27 15:00:00'): + * `tidSidenTidspunktEllerDato('2025-01-27')` => '27.01.2025 01:00' + * `tidSidenTidspunktEllerDato('2025-01-27 12:00:00')` => '3 timer siden' + * `tidSidenTidspunktEllerDato('2025-01-28')` => 'om 10 timer' + */ +export const tidSidenTidspunktEllerDato = (tidspunkt: string | Date): string => { + const now = new Date(); + const hoursSince = differenceInHours(tidspunkt, now); + const inFuture = isAfter(tidspunkt, now); + if (Math.abs(hoursSince) > 12) { + return formaterDato(tidspunkt, NORSK_DATO_OG_TID_FORMAT); + } else if (inFuture) { + return 'om ' + tidSidenTidspunkt(tidspunkt); + } + return tidSidenTidspunkt(tidspunkt) + ' siden'; +};