diff --git a/server/src/dekorator/appMedModiaDekoratoren.ts b/server/src/dekorator/appMedModiaDekoratoren.ts index d785aeb5c..b0fcf5809 100644 --- a/server/src/dekorator/appMedModiaDekoratoren.ts +++ b/server/src/dekorator/appMedModiaDekoratoren.ts @@ -1,24 +1,27 @@ import fs from 'node:fs'; import jsdom from 'jsdom'; import { Request, Response } from 'express'; +import { ENV } from '../config'; import { DECORATOR_INTERNAL_STYLING, DECORATOR_INTERNAL_SCRIPT } from '../config'; const { JSDOM } = jsdom; const scriptAddress: string = - 'https://internarbeidsflatedecorator.nais.adeo.no/internarbeidsflatedecorator/v2/static/js/head.v2.min.js'; + ENV === 'prod' + ? 'https://cdn.nav.no/personoversikt/internarbeidsflate-decorator-v3/prod/latest/dist/bundle.js' + : 'https://cdn.nav.no/personoversikt/internarbeidsflate-decorator-v3/dev/latest/dist/bundle.js'; const styleAddress: string = - 'https://internarbeidsflatedecorator.nais.adeo.no/internarbeidsflatedecorator/v2/static/css/main.css'; + ENV === 'prod' + ? 'https://cdn.nav.no/personoversikt/internarbeidsflate-decorator-v3/prod/latest/dist/index.css' + : 'https://cdn.nav.no/personoversikt/internarbeidsflate-decorator-v3/dev/latest/dist/index.css'; export async function getModiaDekoratoren(indexpath: string, _: Request, res: Response) { const index: string = await getHTMLDocument(indexpath); const { document } = new JSDOM(index).window; if (document) { - console.log('document is defined'); const updatedDocument = setInnHTML(document); - console.log('current updated document: ', updatedDocument.documentElement.outerHTML); res.send(`${updatedDocument.documentElement.outerHTML}`); } else { throw new Error('Feilet med oppdatering av index.html.'); diff --git a/src/InnloggingBoundary/InnloggingBoundary.tsx b/src/InnloggingBoundary/InnloggingBoundary.tsx index 6a9181cd5..062e57409 100644 --- a/src/InnloggingBoundary/InnloggingBoundary.tsx +++ b/src/InnloggingBoundary/InnloggingBoundary.tsx @@ -16,7 +16,7 @@ import Innloggingside from './Innloggingsside'; import useInnlogget from './useInnlogget'; const dekoratorConfig = decoratorconfig(); -const InternflateDecorator = NAVSPA.importer('internarbeidsflatefs'); +const InternflateDecorator = NAVSPA.importer('internarbeidsflate-decorator-v3'); export const InnloggetBrukerContext = React.createContext({ identifikator: '', diff --git a/src/internflateDekorator/decoratorconfig.ts b/src/internflateDekorator/decoratorconfig.ts index 32512d9c5..d4c1c3a63 100644 --- a/src/internflateDekorator/decoratorconfig.ts +++ b/src/internflateDekorator/decoratorconfig.ts @@ -2,11 +2,17 @@ import { DecoratorProps } from '@/internflateDekorator/decoratorprops'; const decoratorconfig = (): DecoratorProps => { return { - appname: 'Tiltaksgjennomføring', - useProxy: true, - toggles: { - visVeileder: true, - }, + appName: 'Tiltaksgjennomføring', + onEnhetChanged: () => {}, + onFnrChanged: () => {}, + showEnheter: true, + showSearchArea: true, + showHotkeys: true, + environment: 'local', + urlFormat: 'LOCAL', + // toggles: { + // visVeileder: true, + // }, }; }; diff --git a/src/internflateDekorator/decoratorprops.ts b/src/internflateDekorator/decoratorprops.ts index 3f2b52487..f8db96543 100644 --- a/src/internflateDekorator/decoratorprops.ts +++ b/src/internflateDekorator/decoratorprops.ts @@ -1,57 +1,59 @@ export interface DecoratorProps { - appname: string; // Navn på applikasjon - fnr?: FnrContextvalue; // Konfigurasjon av fødselsnummer-kontekst - enhet?: EnhetContextvalue; // Konfigurasjon av enhet-kontekst - toggles?: TogglesConfig; // Konfigurasjon av hvilke elementer som skal vises i dekoratøren - markup?: Markup; // Ekstra innhold i dekoratøren, kan brukes om man trenger å legge en knapp innenfor dekoratøren - - /* Manuell overstyring av urlene til BFFs. - Gjør alle kall til relativt path, og trenger derfor proxy oppsett. Default: false */ - useProxy?: boolean; - - /* Manuell innsending av JWT, settes som Authorization-header. - Om null sendes cookies vha credentials: 'include' */ - accessToken?: string; -} - -export interface TogglesConfig { - visVeileder?: boolean; // Styrer om man skal vise informasjon om innlogget veileder + enhet?: string | undefined; // Konfigurasjon av enhet-kontekst + accessToken?: string | undefined; // Manuell innsending av JWT, settes som Authorization-header. Om null sendes cookies vha credentials: 'include' + fnr?: string | undefined; // Konfigurasjon av fødselsnummer-kontekst + userKey?: string | undefined; // Om man ikke ønsker å bruke fnr i urler, kan andre apper kalle contextholder for å generere en midlertidig kode. Hvis App A skal navigere til App B som har dekoratøren, må App A først sende en post request til /fnr-code/generate med {fnr: string} i bodyen, dette returnerer {fnr: string, code: string} til App A. App A kan så navigere til App B og sende med denne koden. App B kan så sende den koden inn til dekoratøren i userKey propen og så henter dekoratøren fnr for den koden fra contextholderen. + enableHotkeys?: boolean | undefined; // Aktivere hurtigtaster + fetchActiveEnhetOnMount?: boolean | undefined; // Om enhet er undefined fra container appen, og denne er satt til true, henter den sist aktiv enhet og bruker denne. + fetchActiveUserOnMount?: boolean | undefined; // Om fnr er undefined fra container appen, og denne er satt til true for at den skal hente siste aktiv fnr. + onEnhetChanged: (enhetId?: string | null, enhet?: Enhet) => void; // Kalles når enheten endres + onFnrChanged: (fnr?: string | null) => void; // Kalles når fnr enheten endres + onLinkClick?: (link: { text: string; url: string }) => void; // Kan brukes for å legge til callbacks ved klikk på lenker i menyen. Merk at callbacken ikke kan awaites og man må selv håndtere at siden lukkes. Nyttig for å f.eks tracke navigasjon events i amplitude + appName: string; // Navn på applikasjonen + hotkeys?: Hotkey[]; // Konfigurasjon av hurtigtaster + markup?: Markup; // Egen HTML + showEnheter: boolean; // Vis enheter + showSearchArea: boolean; // Vis søkefelt + showHotkeys: boolean; // Vis hurtigtaster + environment: Environment; // Miljø som skal brukes. + urlFormat: UrlFormat; // URL format + proxy?: string | undefined; // Manuell overstyring av urlene til BFFs. Gjør alle kall til relativt path hvis true, og bruker verdien som domene om satt til en string. Default: false } export interface Markup { etterSokefelt?: string; // Gir muligheten for sende inn egen html som blir en del av dekoratøren } -/* Fnr/Enhet-konfiguration støttet både `Controlled` og `Uncontrolled` operasjon. -// Ved bruk av `Controlled` må konsument-applikasjonen selv ta ansvar for oppdatering av `value` etter enhver `onChange` - Dette er i motsetning til `Uncontrolled`, hvor dette håndteres av dekoratøren. - Og alt konsument-applikasjonen trenger å gjøre er å følge med på `onChange`. */ - -export interface ControlledContextvalue extends BaseContextvalue { - value: string | null; +export interface Enhet { + readonly enhetId: string; + readonly navn: string; } -export interface UncontrolledContextvalue extends BaseContextvalue { - initialValue: string | null; -} +// Miljø +export type Environment = 'q0' | 'q1' | 'q2' | 'q3' | 'q4' | 'prod' | 'local' | 'mock'; + +export type UrlFormat = 'LOCAL' | 'NAV_NO' | 'ANSATT'; // UrlFormat. Brukes om proxy ikke er satt & i url til websocket. -export interface BaseContextvalue { - display: T; - skipModal?: boolean; - ignoreWsEvents?: boolean; - onChange(value: string | null): void; +export interface HotkeyObject { + char: string; + altKey?: boolean; + ctrlKey?: boolean; + metaKey?: boolean; + shiftKey?: boolean; } -export type Contextvalue = ControlledContextvalue | UncontrolledContextvalue; +export interface HotkeyDescription { + key: HotkeyObject; + description: string; + forceOverride?: boolean; +} -export enum EnhetDisplay { - ENHET = 'ENHET', - ENHET_VALG = 'ENHET_VALG', +export interface ActionHotKey extends HotkeyDescription { + action(event: KeyboardEvent): void; } -export enum FnrDisplay { - SOKEFELT = 'SOKEFELT', +export interface DocumentingHotKey extends HotkeyDescription { + documentationOnly: boolean; } -export type EnhetContextvalue = Contextvalue; -export type FnrContextvalue = Contextvalue; +export type Hotkey = ActionHotKey | DocumentingHotKey;