Skip to content

Commit

Permalink
IS-1488: Added unleash next in backend for frontend
Browse files Browse the repository at this point in the history
  • Loading branch information
vetlesolgaard committed Aug 22, 2023
1 parent e9fc1a7 commit b1142a3
Show file tree
Hide file tree
Showing 14 changed files with 202 additions and 164 deletions.
3 changes: 2 additions & 1 deletion .env.template
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,6 @@ SYFOVEILEDER_AAD_APP_CLIENT_ID=dev-fss.teamsykefravr.syfoveileder
SYFOVEILEDER_HOST=syfoveileder.dev.intern.nav.no
ESYFOVARSEL_AAD_APP_CLIENT_ID=dev-gcp.team-esyfo.esyfovarsel
ESYFOVARSEL_HOST=http://esyfovarsel.intern.dev.no

UNLEASH_SERVER_API_URL=asdf
UNLEASH_SERVER_API_TOKEN=asdf
LOG_LEVEL=debug
34 changes: 22 additions & 12 deletions server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@ import helmet = require("helmet");
import path = require("path");
import prometheus = require("prom-client");

import * as Config from "./server/config";
import { getOpenIdClient, getOpenIdIssuer } from "./server/authUtils";
import { setupProxy } from "./server/proxy";
import { setupSession } from "./server/session";

import unleashRoutes = require("./server/routes/unleashRoutes");
import { Toggles, unleashNextToggles } from "./server/routes/unleashRoutes";

// Prometheus metrics
const collectDefaultMetrics = prometheus.collectDefaultMetrics;
Expand Down Expand Up @@ -65,18 +64,29 @@ const setupServer = async () => {

server.use("/static", express.static(DIST_DIR));

// server.post(
// "/unleash/toggles",
// redirectIfUnauthorized,
// (req: express.Request, res: express.Response) => {
// const toggles = req.body.toggles;
// const unleashToggles = unleashRoutes.unleashToggles(
// toggles,
// req.query.valgtEnhet,
// req.query.userId
// );
//
// res.status(200).send(unleashToggles);
// }
// );

server.post(
"/unleash/toggles",
"/unleash-next/toggles",
redirectIfUnauthorized,
(req: express.Request, res: express.Response) => {
const toggles = req.body.toggles;
const unleashToggles = unleashRoutes.unleashToggles(
toggles,
req.query.valgtEnhet,
req.query.userId
);

res.status(200).send(unleashToggles);
(req: express.Request, res: express.Response<Toggles>) => {
const unleashContext = {
userId: req.body.userId,
};
res.status(200).send(unleashNextToggles(unleashContext));
}
);

Expand Down
6 changes: 6 additions & 0 deletions server/config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import dotenv = require("dotenv");

dotenv.config();

const hasEnvVar = (name: any) => {
Expand Down Expand Up @@ -313,6 +314,11 @@ export const redis = {
}),
};

// export const unleash = {
// serverApiUrl: envVar({ name: "UNLEASH_SERVER_API_URL" }),
// serverApiToken: envVar({ name: "UNLEASH_SERVER_API_TOKEN" }),
// };

module.exports = {
auth: auth,
isDev: isDev,
Expand Down
109 changes: 74 additions & 35 deletions server/routes/unleashRoutes.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
import unleashClient = require("unleash-client");
import { Context } from "unleash-client";
import Config = require("../config");
import * as process from "process";

const { initialize, Strategy } = unleashClient;

export type Toggles = {
[key in ToggleNames]: boolean;
};

// See toggles: https://teamsykefravr-unleash-web.nav.cloud.nais.io/features
export enum ToggleNames {
isVirksomhetsinputEnabled = "isVirksomhetsinputEnabled",
isReturLegeerklaringEnabled = "isReturLegeerklaringEnabled",
isMotebehovTilbakemeldingEnabled = "isMotebehovTilbakemeldingEnabled",
}

class ByDevEnhet extends Strategy {
constructor() {
super("byDevEnhet");
Expand Down Expand Up @@ -63,47 +77,72 @@ class ByEnvironmentToggle extends Strategy {
}
}

const unleash = initialize({
url: "https://unleash.nais.io/api/",
// const unleash = initialize({
// url: "https://unleash.nais.io/api/",
// appName: "syfomodiaperson",
// environment: process.env.NAIS_CONTEXT,
// strategies: [
// new ByDevEnhet(),
// new ByUserId(),
// new ByProdEnhet(),
// new ByEnvironmentToggle(),
// ],
// });

export const unleash = initialize({
url: "https://teamsykefravr-unleash-api.nav.cloud.nais.io",
appName: "syfomodiaperson",
environment: process.env.NAIS_CONTEXT,
strategies: [
new ByDevEnhet(),
new ByUserId(),
new ByProdEnhet(),
new ByEnvironmentToggle(),
],
customHeaders: {
Authorization: "*:development.fe45f8b56cf48ef952592c9f4796a3f6ee",
},
});

export const unleashToggles = (toggles: any, valgtEnhet: any, userId: any) => {
export const unleashNextToggles = (unleashContext: Context): Toggles => {
return {
"syfo.dialogmote.virksomhetinput": unleash.isEnabled(
"syfo.dialogmote.virksomhetinput",
{
valgtEnhet: valgtEnhet,
user: userId,
}
),
"syfo.behandlerdialog.legeerklaring": unleash.isEnabled(
"syfo.behandlerdialog.legeerklaring",
{
valgtEnhet: valgtEnhet,
user: userId,
}
isVirksomhetsinputEnabled: unleash.isEnabled(
"isVirksomhetsinputEnabled",
unleashContext
),
"syfo.behandlerdialog.returlegeerklaring": unleash.isEnabled(
"syfo.behandlerdialog.returlegeerklaring",
{
valgtEnhet: valgtEnhet,
user: userId,
}
isReturLegeerklaringEnabled: unleash.isEnabled(
"isReturLegeerklaringEnabled",
unleashContext
),
"syfo.motebehov.tilbakemelding": unleash.isEnabled(
"syfo.motebehov.tilbakemelding",
{
valgtEnhet: valgtEnhet,
user: userId,
}
isMotebehovTilbakemeldingEnabled: unleash.isEnabled(
"isMotebehovTilbakemeldingEnabled",
unleashContext
),
};
};

// export const unleashToggles = (toggles: any, valgtEnhet: any, userId: any) => {
// return {
// "syfo.dialogmote.virksomhetinput": unleash.isEnabled(
// "syfo.dialogmote.virksomhetinput",
// {
// valgtEnhet: valgtEnhet,
// user: userId,
// }
// ),
// "syfo.behandlerdialog.legeerklaring": unleash.isEnabled(
// "syfo.behandlerdialog.legeerklaring",
// {
// valgtEnhet: valgtEnhet,
// user: userId,
// }
// ),
// "syfo.behandlerdialog.returlegeerklaring": unleash.isEnabled(
// "syfo.behandlerdialog.returlegeerklaring",
// {
// valgtEnhet: valgtEnhet,
// user: userId,
// }
// ),
// "syfo.motebehov.tilbakemelding": unleash.isEnabled(
// "syfo.motebehov.tilbakemelding",
// {
// valgtEnhet: valgtEnhet,
// user: userId,
// }
// ),
// };
// };
1 change: 1 addition & 0 deletions src/apiConstants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,4 @@ export const SYKEPENGESOKNAD_BACKEND_ROOT = "/sykepengesoknad-backend/api";
export const SYFOTILGANGSKONTROLL_ROOT = "/syfo-tilgangskontroll/api";
export const SYFOVEILEDER_ROOT = "/syfoveileder/api/v2";
export const UNLEASH_ROOT = "/unleash";
export const UNLEASH_NEXT_ROOT = "/unleash-next";
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import {
import { PaminnelseMelding } from "@/components/behandlerdialog/paminnelse/PaminnelseMelding";
import { AvvistMelding } from "@/components/behandlerdialog/meldinger/AvvistMelding";
import { useFeatureToggles } from "@/data/unleash/unleashQueryHooks";
import { ToggleNames } from "@/data/unleash/unleash_types";
import { ReturLegeerklaring } from "@/components/behandlerdialog/legeeklaring/ReturLegeerklaring";

const StyledWrapper = styled.div`
Expand Down Expand Up @@ -53,10 +52,7 @@ interface MeldingInnholdProps {
}

const MeldingFraBehandler = ({ melding }: MeldingInnholdProps) => {
const { isFeatureEnabled } = useFeatureToggles();
const isReturLegeerklaringEnabled = isFeatureEnabled(
ToggleNames.behandlerdialogReturLegeerklaring
);
const { toggles } = useFeatureToggles();
const isLegeerklaring =
melding.type === MeldingType.FORESPORSEL_PASIENT_LEGEERKLARING;

Expand All @@ -67,7 +63,7 @@ const MeldingFraBehandler = ({ melding }: MeldingInnholdProps) => {
</StyledImageWrapper>
<StyledInnhold>
<MeldingInnholdPanel melding={melding} />
{isReturLegeerklaringEnabled && isLegeerklaring && (
{toggles.isReturLegeerklaringEnabled && isLegeerklaring && (
<ReturLegeerklaring melding={melding} />
)}
</StyledInnhold>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { MeldingTilBehandlerSkjema } from "@/components/behandlerdialog/meldingt
import { Alert, Heading } from "@navikt/ds-react";
import styled from "styled-components";
import { useFeatureToggles } from "@/data/unleash/unleashQueryHooks";
import { ToggleNames } from "@/data/unleash/unleash_types";
import AppSpinner from "@/components/AppSpinner";

const texts = {
Expand All @@ -23,10 +22,7 @@ const MeldingTilBehandlerAlert = styled(Alert)`
`;

export const MeldingTilBehandler = () => {
const { isFeatureEnabled, isLoading } = useFeatureToggles();
const isBehandlerdialogLegeerklaringEnabled = isFeatureEnabled(
ToggleNames.behandlerdialogLegeerklaring
);
const { toggles, isLoading } = useFeatureToggles();

return (
<>
Expand All @@ -38,13 +34,13 @@ export const MeldingTilBehandler = () => {
) : (
<>
<MeldingTilBehandlerAlert variant="warning" size="small">
{isBehandlerdialogLegeerklaringEnabled
{toggles.isReturLegeerklaringEnabled
? texts.meldingVisesTilBruker
: texts.tilleggsopplysningerInfo}
</MeldingTilBehandlerAlert>
<MeldingTilBehandlerSkjema
isBehandlerdialogLegeerklaringEnabled={
isBehandlerdialogLegeerklaringEnabled
toggles.isReturLegeerklaringEnabled
}
/>
</>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { AlertstripeFullbredde } from "@/components/AlertstripeFullbredde";
import { VirksomhetInput } from "@/components/dialogmote/innkalling/virksomhet/VirksomhetInput";
import { VirksomhetRadioGruppe } from "@/components/dialogmote/innkalling/virksomhet/VirksomhetRadioGruppe";
import { useFeatureToggles } from "@/data/unleash/unleashQueryHooks";
import { ToggleNames } from "@/data/unleash/unleash_types";

const texts = {
chooseArbeidsgiver: "Velg arbeidsgiver",
Expand All @@ -28,10 +27,7 @@ export const VirksomhetChooser = ({
label,
name,
}: VirksomhetRadioGruppeProps): ReactElement => {
const { isFeatureEnabled } = useFeatureToggles();
const hasAccessToVirksomhetInput = isFeatureEnabled(
ToggleNames.virksomhetinput
);
const { toggles } = useFeatureToggles();
const [showInput, setShowInput] = useState<boolean>(false);

return (
Expand All @@ -47,7 +43,7 @@ export const VirksomhetChooser = ({

{showInput && <VirksomhetInput velgVirksomhet={velgVirksomhet} />}

{virksomheter.length === 0 && !hasAccessToVirksomhetInput && (
{virksomheter.length === 0 && !toggles.isVirksomhetsinputEnabled && (
<AlertstripeFullbredde type="advarsel" marginbottom="2em">
{texts.noArbeidsgiver}
<ul>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import React, { ReactElement } from "react";
import { VirksomhetRadio } from "@/components/dialogmote/innkalling/virksomhet/VirksomhetRadio";
import { VirksomhetInputRadio } from "@/components/dialogmote/innkalling/virksomhet/VirksomhetInputRadio";
import { useFeatureToggles } from "@/data/unleash/unleashQueryHooks";
import { ToggleNames } from "@/data/unleash/unleash_types";

interface VirksomhetRadioGruppeProps {
velgVirksomhet(virksomhetsnummer: string): void;
Expand All @@ -22,10 +21,7 @@ export const VirksomhetRadioGruppe = ({
label,
name,
}: VirksomhetRadioGruppeProps): ReactElement => {
const { isFeatureEnabled } = useFeatureToggles();
const hasAccessToVirksomhetInput = isFeatureEnabled(
ToggleNames.virksomhetinput
);
const { toggles } = useFeatureToggles();
const removeInputAndChooseVirksomhet = (virksomhetsnummer: string) => {
setShowInput(false);
velgVirksomhet(virksomhetsnummer);
Expand All @@ -45,7 +41,7 @@ export const VirksomhetRadioGruppe = ({
name={name}
/>
))}
{hasAccessToVirksomhetInput && (
{toggles.isVirksomhetsinputEnabled && (
<VirksomhetInputRadio
key={virksomheter.length}
setShowFritekst={showInputAndRemoveChosenVirksomhet}
Expand Down
6 changes: 2 additions & 4 deletions src/components/motebehov/BehandleMotebehovKnapp.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import { Button, Panel, Radio, RadioGroup, ReadMore } from "@navikt/ds-react";
import styled from "styled-components";
import { FlexRow, PaddingSize } from "@/components/Layout";
import { useFeatureToggles } from "@/data/unleash/unleashQueryHooks";
import { ToggleNames } from "@/data/unleash/unleash_types";
import { useBehandleMotebehovAndSendTilbakemelding } from "@/data/motebehov/useBehandleMotebehovAndSendTilbakemelding";
import { SkjemaInnsendingFeil } from "@/components/SkjemaInnsendingFeil";

Expand Down Expand Up @@ -64,15 +63,14 @@ const BehandleMotebehovKnapp = ({
const behandleMotebehov = useBehandleMotebehov();
const behandleMotebehovAndSendTilbakemelding =
useBehandleMotebehovAndSendTilbakemelding();
const { isFeatureEnabled } = useFeatureToggles();
const juneathon = isFeatureEnabled(ToggleNames.vurderMotebehovTilbakemelding);
const { toggles } = useFeatureToggles();
const [isTilbakemelding, setIsTilbakemelding] = useState(false);

const tilbakemeldinger = unikeInnsendereUbehandledeMotebehov.map(
(motebehov) => toMotebehovTilbakemeldingDTO(motebehov, texts.tilbakemelding)
);

if (juneathon && !erBehandlet) {
if (toggles.isMotebehovTilbakemeldingEnabled && !erBehandlet) {
return (
<>
<FlexRow bottomPadding={PaddingSize.SM}>
Expand Down
Loading

0 comments on commit b1142a3

Please sign in to comment.