Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ FROM europe-north1-docker.pkg.dev/cgr-nav/pull-through/nav.no/node:22-slim

LABEL org.opencontainers.image.source=https://github.com/navikt/fp-frontend
ENV TZ="Europe/Oslo"
ENV NODE_ENV production
ENV NODE_ENV=production

WORKDIR /app

Expand Down
4 changes: 4 additions & 0 deletions apps/fp-frontend/src/app/components/Dekorator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { notEmpty } from '@navikt/fp-utils';

import { initFetchOptions } from '../../data/fagsakApi';
import { JOURNALFØRING_PATH, UTBETALINGSDATA_PATH } from '../paths';
import { useAppVersjonDeteksjon } from './useAppVersjonDeteksjon';

type QueryStrings = {
errorcode?: string;
Expand All @@ -43,6 +44,7 @@ export const Dekorator = ({
setTheme,
}: Props) => {
const intl = useIntl();
const nyVersjonTilgjengelig = useAppVersjonDeteksjon();

const errorMessages = useRestApiError();
const { removeErrorMessages } = useRestApiErrorDispatcher();
Expand All @@ -54,6 +56,7 @@ export const Dekorator = ({
const visLos = (e: React.SyntheticEvent) => {
if (e.type === 'click') {
void navigate('/');
window.location.reload();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

og eit par sonar-varsel på å bruka globalThis i staden for window

}
if (e.type === 'contextmenu') {
globalThis.open('/', '_newtab');
Expand Down Expand Up @@ -115,6 +118,7 @@ export const Dekorator = ({
eksterneLenker={eksterneLenker}
theme={theme}
setTheme={setTheme}
nyVersjonTilgjengelig={nyVersjonTilgjengelig}
/>
);
};
Expand Down
44 changes: 44 additions & 0 deletions apps/fp-frontend/src/app/components/useAppVersjonDeteksjon.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { useEffect, useState } from 'react';

const POLLING_INTERVAL_MS = 10 * 60 * 1000;

export const useAppVersjonDeteksjon = () => {
const [serverVersjon, setServerVersjon] = useState<string | null>(null);
const [nyVersjonTilgjengelig, setNyVersjonTilgjengelig] = useState(false);

const [klientVersjon, setKlientVersjon] = useState<string | null>(null);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dette er pirk på høgt nivå, men for meg hadde det vore meir naturleg at linje 7 og 9 byttar plass


useEffect(() => {
const sjekkServerVersjon = async () => {
try {
const res = await fetch('/version');

if (res.ok) {
const data = (await res.json()) as { app_image?: string };
if (data.app_image) {
if (klientVersjon === null) {
setKlientVersjon(data.app_image);
}

if (data.app_image !== serverVersjon) {
setServerVersjon(data.app_image);

if (klientVersjon && data.app_image !== klientVersjon) {
setNyVersjonTilgjengelig(true);
}
}
}
}
} catch (e) {
// eslint-disable-next-line no-console
console.error('Feilet med å hente app-versjon:', e);
}
};
void sjekkServerVersjon();

const interval = setInterval(sjekkServerVersjon, POLLING_INTERVAL_MS);
return () => clearInterval(interval);
}, [klientVersjon, serverVersjon]);

return nyVersjonTilgjengelig;
};
3 changes: 2 additions & 1 deletion packages/sak/dekorator/i18n/nb_NO.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
"DekoratorMedFeilviserSakIndex.Vedtakslosningen": "Vedtaksløsningen",
"DekoratorMedFeilviserSakIndex.EksternLenke": "Ekstern lenke",
"DekoratorMedFeilviserSakIndex.EndreTilLysTema": "Endre til lyst tema",
"DekoratorMedFeilviserSakIndex.EndreTilMorkTema": "Endre til mørkt tema"
"DekoratorMedFeilviserSakIndex.EndreTilMorkTema": "Endre til mørkt tema",
"DekoratorMedFeilviserSakIndex.NyVersjon": "Det finnes en ny versjon av applikasjonen. Klikk for å laste siden på nytt."
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kanskje si fra hvis man mister arbeidet (det man har skrevet i begrunnelse / brev)

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ const meta = {
],
theme: 'light',
setTheme: action('setTheme'),
nyVersjonTilgjengelig: false,
},
render: storyArgs => {
const [args, setArgs] = useState(storyArgs);
Expand Down Expand Up @@ -83,3 +84,10 @@ export const MedFeilmeldingDetaljer: Story = {
],
},
};

export const NyAppVersjonErDetektert: Story = {
args: {
feilmeldinger: [],
nyVersjonTilgjengelig: true,
},
};
15 changes: 12 additions & 3 deletions packages/sak/dekorator/src/DekoratorMedFeilviserSakIndex.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import React, { type ComponentProps, useEffect, useRef } from 'react';
import { FormattedMessage, RawIntlProvider } from 'react-intl';

import { ExternalLinkIcon, MenuGridIcon, MoonIcon, SunIcon } from '@navikt/aksel-icons';
import { Dropdown, InternalHeader, Link, Spacer, Theme } from '@navikt/ds-react';
import { ArrowCirclepathIcon, ExternalLinkIcon, MenuGridIcon, MoonIcon, SunIcon } from '@navikt/aksel-icons';
import { Dropdown, InternalHeader, Link, Spacer, Theme, Tooltip } from '@navikt/ds-react';
import { createIntl } from '@navikt/ft-utils';

import { FeilmeldingPanel } from './components/FeilmeldingPanel';
Expand All @@ -27,6 +27,7 @@ interface Props {
eksterneLenker: DekoratorLenke[];
theme: ComponentProps<typeof Theme>['theme'];
setTheme: (theme: NonNullable<ComponentProps<typeof Theme>['theme']>) => void;
nyVersjonTilgjengelig?: boolean;
}

/**
Expand All @@ -48,6 +49,7 @@ export const DekoratorMedFeilviserSakIndex = ({
eksterneLenker,
theme,
setTheme,
nyVersjonTilgjengelig,
}: Props) => {
const fixedHeaderRef = useRef<HTMLDivElement>(null);
useEffect(() => {
Expand All @@ -64,10 +66,17 @@ export const DekoratorMedFeilviserSakIndex = ({
{tittel}
</InternalHeader.Title>
<Spacer />
{nyVersjonTilgjengelig && (
<InternalHeader.Button onClick={() => window.location.reload()}>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blir Button synlig når man står inne i en åpen sak? Risiko for å miste arbeidet?
Gjør reload at man blir stående med aktuell sak / behandling eller havner man annet sted ?
Tenker det er nyttig at vi er tydelige dersom man evt mister arbeid.

<Tooltip content={intl.formatMessage({ id: 'DekoratorMedFeilviserSakIndex.NyVersjon' })}>
<ArrowCirclepathIcon fontSize="1.5rem" color="var(--ax-text-accent-subtle)" />
</Tooltip>
</InternalHeader.Button>
)}
<Dropdown>
<InternalHeader.Button as={Dropdown.Toggle}>
<MenuGridIcon
style={{ fontSize: '1.5rem' }}
fontSize="1.5rem"
title={intl.formatMessage({ id: 'DekoratorMedFeilviserSakIndex.SystemerOgOppslagsverk' })}
/>
</InternalHeader.Button>
Expand Down
13 changes: 13 additions & 0 deletions server/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,19 @@ function startApp() {
// The routes below require the user to be authenticated
server.use(verifyToken);

server.get(["/version"], async (_, res, next) => {
try {
res.set("Cache-Control", "no-store");
res
.json({
app_image: process.env.NAIS_APP_IMAGE,
})
.send();
} catch (error) {
return next(error);
}
});

server.get(["/logout"], async (req, res) => {
if (req.headers.authorization) {
res.redirect("/oauth2/logout");
Expand Down
Loading