From c12ee168f1c9e3332e438a1f5c02ed5239544969 Mon Sep 17 00:00:00 2001 From: frodehansen2 Date: Fri, 10 Jan 2025 09:02:11 +0100 Subject: [PATCH] Nn aleneomsorg (#2625) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Sette opp storybook * Klargjøre for oversettelse * Nynorsktekster * Merge uten å skru på feature --- .../.env.example | 1 + .../.storybook/main.ts | 25 ++++++++ .../.storybook/preview-head.html | 12 ++++ .../.storybook/preview.ts | 36 +++++++++++ .../e2e/playwright/playwright.env.ts | 1 + .../env.schema.ts | 1 + .../mock/AppSettings.cjs | 1 + .../nais/dev-gcp.json | 1 + .../nais/prod-gcp.json | 1 + .../package.json | 30 +++++++-- .../src/app/App.tsx | 1 + .../src/app/i18n/all-messages.stories.tsx | 18 ++++++ .../src/app/i18n/app-messages.stories.tsx | 18 ++++++ .../src/app/i18n/appMessages.ts | 21 +++++-- .../src/app/i18n/lib-messages.stories.tsx | 18 ++++++ .../pages/kvittering/kvitteringMesssages.ts | 9 ++- .../pages/velkommen/velkommenPageMessages.ts | 38 ++++++++++- .../omOmsorgenForBarnMessages.ts" | 39 +++++++++++- .../oppsummering/oppsummeringMessages.ts" | 22 ++++++- .../tidspunktForAleneomsorgMessages.ts" | 20 +++++- .../src/app/utils/appEnv.ts | 1 + .../components/AlertStoryWrapper.tsx | 35 +++++++++++ .../src/storybook/components/ShadowBox.tsx | 11 ++++ .../Sp\303\270rsm\303\245lWrapper.tsx" | 63 +++++++++++++++++++ .../storybook/components/StoryFormWrapper.tsx | 17 +++++ .../components/StoryFormikWrapper.tsx | 61 ++++++++++++++++++ .../src/storybook/decorators/print.css | 17 +++++ .../decorators/withAmplitudeProvider.tsx | 7 +++ .../storybook/decorators/withEnvSettings.tsx | 4 ++ .../decorators/withFormikWrapper.tsx | 7 +++ .../src/storybook/decorators/withIntl.tsx | 18 ++++++ .../src/storybook/decorators/withRouter.tsx | 7 +++ .../decorators/withStepFormValuesContext.tsx | 10 +++ .../decorators/withS\303\270knadContext.tsx" | 19 ++++++ .../src/storybook/mock-data/index.ts | 27 ++++++++ .../src/storybook/utils/intlUtils.ts | 34 ++++++++++ .../i18n/pictureScanningGuideMessages.tsx | 6 +- .../src/i18n/common.messages.tsx | 8 +-- .../duration-text/durationText.messages.ts | 2 +- yarn.lock | 47 +++++++++++--- 40 files changed, 682 insertions(+), 32 deletions(-) create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/.storybook/main.ts create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/.storybook/preview-head.html create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/.storybook/preview.ts create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/all-messages.stories.tsx create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/app-messages.stories.tsx create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/lib-messages.stories.tsx create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/AlertStoryWrapper.tsx create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/ShadowBox.tsx create mode 100644 "apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/Sp\303\270rsm\303\245lWrapper.tsx" create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/StoryFormWrapper.tsx create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/StoryFormikWrapper.tsx create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/print.css create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withAmplitudeProvider.tsx create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withEnvSettings.tsx create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withFormikWrapper.tsx create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withIntl.tsx create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withRouter.tsx create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withStepFormValuesContext.tsx create mode 100644 "apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withS\303\270knadContext.tsx" create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/storybook/mock-data/index.ts create mode 100644 apps/omsorgsdager-aleneomsorg-dialog/src/storybook/utils/intlUtils.ts diff --git a/apps/omsorgsdager-aleneomsorg-dialog/.env.example b/apps/omsorgsdager-aleneomsorg-dialog/.env.example index 0ca3e11766..dc747f3de2 100644 --- a/apps/omsorgsdager-aleneomsorg-dialog/.env.example +++ b/apps/omsorgsdager-aleneomsorg-dialog/.env.example @@ -10,6 +10,7 @@ SIF_PUBLIC_DEKORATOR_URL=https://dekoratoren.ekstern.dev.nav.no/?simple=true&cha SIF_PUBLIC_LOGIN_URL=https://omsorgsdager-aleneomsorg-dialog.intern.dev.nav.no/oauth2/login?redirect=/familie/sykdom-i-familien/soknad/omsorgsdager-aleneomsorg/soknad SIF_PUBLIC_MINSIDE_URL=https://www.intern.dev.nav.no/minside SIF_PUBLIC_OMS_IKKE_TILSYN_URL=https://ekstra-omsorgsdager-andre-forelder-ikke-tilsyn.intern.dev.nav.no/ +SIF_PUBLIC_FEATURE_NYNORSK=on SIF_PUBLIC_USE_FARO=true K9_BRUKERDIALOG_PROSESSERING_FRONTEND_PATH=/api/brukerdialog diff --git a/apps/omsorgsdager-aleneomsorg-dialog/.storybook/main.ts b/apps/omsorgsdager-aleneomsorg-dialog/.storybook/main.ts new file mode 100644 index 0000000000..1015efd91f --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/.storybook/main.ts @@ -0,0 +1,25 @@ +import { join, dirname } from 'path'; + +function getAbsolutePath(value) { + return dirname(require.resolve(join(value, 'package.json'))); +} + +export default { + stories: ['../src/app/**/*.stories.@(ts|tsx)', '../src/storybook/**/*.stories.@(js|jsx|ts|tsx)'], + addons: [ + getAbsolutePath('@storybook/addon-essentials'), + getAbsolutePath('@storybook/addon-interactions'), + getAbsolutePath('@storybook/addon-a11y'), + getAbsolutePath('@storybook/addon-toolbars'), + ], + framework: { + name: '@storybook/react-vite', + options: {}, + }, + docs: { + autodocs: false, + }, + typescript: { + reactDocgen: 'react-docgen-typescript-plugin', + }, +}; diff --git a/apps/omsorgsdager-aleneomsorg-dialog/.storybook/preview-head.html b/apps/omsorgsdager-aleneomsorg-dialog/.storybook/preview-head.html new file mode 100644 index 0000000000..7747e8505f --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/.storybook/preview-head.html @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/apps/omsorgsdager-aleneomsorg-dialog/.storybook/preview.ts b/apps/omsorgsdager-aleneomsorg-dialog/.storybook/preview.ts new file mode 100644 index 0000000000..3c9df2a9fa --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/.storybook/preview.ts @@ -0,0 +1,36 @@ +import { Preview } from '@storybook/react'; +import '@navikt/ds-css'; + +const preview: Preview = { + globalTypes: { + locale: { + name: 'Språk', + description: 'Velg språk som skal brukes i komponenten', + defaultValue: 'nb', + toolbar: { + icon: 'globe', + items: [ + { value: 'nb', title: 'Bokmål' }, + { value: 'nn', title: 'Nynorsk' }, + ], + }, + }, + }, + parameters: { + actions: { argTypesRegex: '^on[A-Z].*' }, + options: { + storySort: { + method: 'alphabetical', + order: ['Components', 'Steps', ['OmBarnet', 'Legeerklæring', 'DeltBosted', 'Oppsummering'], 'Pages'], + }, + }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/, + }, + }, + }, +}; + +export default preview; diff --git a/apps/omsorgsdager-aleneomsorg-dialog/e2e/playwright/playwright.env.ts b/apps/omsorgsdager-aleneomsorg-dialog/e2e/playwright/playwright.env.ts index 37d8bc0d89..0a9416e497 100644 --- a/apps/omsorgsdager-aleneomsorg-dialog/e2e/playwright/playwright.env.ts +++ b/apps/omsorgsdager-aleneomsorg-dialog/e2e/playwright/playwright.env.ts @@ -14,6 +14,7 @@ export const playwrightEnv: AppEnv = { 'https://omsorgsdager-aleneomsorg-dialog.intern.dev.nav.no/oauth2/login?redirect=/familie/sykdom-i-familien/soknad/omsorgsdager-aleneomsorg/soknad', SIF_PUBLIC_MINSIDE_URL: 'https://www.intern.dev.nav.no/minside', SIF_PUBLIC_OMS_IKKE_TILSYN_URL: 'https://ekstra-omsorgsdager-andre-forelder-ikke-tilsyn.intern.dev.nav.no/', + SIF_PUBLIC_FEATURE_NYNORSK: 'on', SIF_PUBLIC_USE_FARO: 'true', K9_BRUKERDIALOG_PROSESSERING_FRONTEND_PATH: '/api/brukerdialog', K9_BRUKERDIALOG_PROSESSERING_API_SCOPE: 'dev-gcp:dusseldorf:k9-brukerdialog-prosessering', diff --git a/apps/omsorgsdager-aleneomsorg-dialog/env.schema.ts b/apps/omsorgsdager-aleneomsorg-dialog/env.schema.ts index 0c3f9c1dec..623a1f782d 100644 --- a/apps/omsorgsdager-aleneomsorg-dialog/env.schema.ts +++ b/apps/omsorgsdager-aleneomsorg-dialog/env.schema.ts @@ -2,6 +2,7 @@ import { commonEnvSchema } from '@navikt/sif-common-env'; import * as z from 'zod'; export const appEnvSchema = commonEnvSchema.extend({ + SIF_PUBLIC_FEATURE_NYNORSK: z.enum(['on', 'off']), SIF_PUBLIC_OMS_IKKE_TILSYN_URL: z.string().min(1), SIF_PUBLIC_USE_FARO: z.enum(['true', 'false']).optional(), }); diff --git a/apps/omsorgsdager-aleneomsorg-dialog/mock/AppSettings.cjs b/apps/omsorgsdager-aleneomsorg-dialog/mock/AppSettings.cjs index c48ba6cdc3..b91f56bd87 100644 --- a/apps/omsorgsdager-aleneomsorg-dialog/mock/AppSettings.cjs +++ b/apps/omsorgsdager-aleneomsorg-dialog/mock/AppSettings.cjs @@ -16,6 +16,7 @@ const getAppSettings = () => ({ SIF_PUBLIC_OMS_IKKE_TILSYN_URL: `${process.env.SIF_PUBLIC_OMS_IKKE_TILSYN_URL}`, SIF_PUBLIC_USE_AMPLITUDE: `${process.env.SIF_PUBLIC_USE_AMPLITUDE}`, SIF_PUBLIC_AMPLITUDE_API_KEY: `${process.env.SIF_PUBLIC_AMPLITUDE_API_KEY}`, + SIF_PUBLIC_FEATURE_NYNORSK: `${process.env.SIF_PUBLIC_FEATURE_NYNORSK}`, SIF_PUBLIC_USE_FARO: `${process.env.SIF_PUBLIC_USE_FARO}`, K9_BRUKERDIALOG_PROSESSERING_FRONTEND_PATH: `${process.env.K9_BRUKERDIALOG_PROSESSERING_FRONTEND_PATH}`, diff --git a/apps/omsorgsdager-aleneomsorg-dialog/nais/dev-gcp.json b/apps/omsorgsdager-aleneomsorg-dialog/nais/dev-gcp.json index ae9b9d8aaa..5a63f3a609 100644 --- a/apps/omsorgsdager-aleneomsorg-dialog/nais/dev-gcp.json +++ b/apps/omsorgsdager-aleneomsorg-dialog/nais/dev-gcp.json @@ -31,6 +31,7 @@ "SIF_PUBLIC_LOGIN_URL": "https://omsorgsdager-aleneomsorg-dialog.intern.dev.nav.no/oauth2/login?redirect=/familie/sykdom-i-familien/soknad/omsorgsdager-aleneomsorg/soknad", "SIF_PUBLIC_MINSIDE_URL": "https://www.intern.dev.nav.no/minside", "SIF_PUBLIC_OMS_IKKE_TILSYN_URL": "https://ekstra-omsorgsdager-andre-forelder-ikke-tilsyn.intern.dev.nav.no/", + "SIF_PUBLIC_FEATURE_NYNORSK": "on", "SIF_PUBLIC_USE_FARO": "true" } } diff --git a/apps/omsorgsdager-aleneomsorg-dialog/nais/prod-gcp.json b/apps/omsorgsdager-aleneomsorg-dialog/nais/prod-gcp.json index 65f811146f..5be9fdaf3e 100644 --- a/apps/omsorgsdager-aleneomsorg-dialog/nais/prod-gcp.json +++ b/apps/omsorgsdager-aleneomsorg-dialog/nais/prod-gcp.json @@ -29,6 +29,7 @@ "SIF_PUBLIC_LOGIN_URL": "https://www.nav.no/familie/sykdom-i-familien/soknad/omsorgsdager-aleneomsorg/oauth2/login?redirect=/familie/sykdom-i-familien/soknad/omsorgsdager-aleneomsorg/soknad", "SIF_PUBLIC_MINSIDE_URL": "https://www.nav.no/minside", "SIF_PUBLIC_OMS_IKKE_TILSYN_URL": "https://www.nav.no/familie/sykdom-i-familien/soknad/ekstra-omsorgsdager-andre-forelder-ikke-tilsyn/soknad", + "SIF_PUBLIC_FEATURE_NYNORSK": "off", "SIF_PUBLIC_USE_FARO": "true" } } diff --git a/apps/omsorgsdager-aleneomsorg-dialog/package.json b/apps/omsorgsdager-aleneomsorg-dialog/package.json index c92bd0eaa2..7ebc6b00d2 100644 --- a/apps/omsorgsdager-aleneomsorg-dialog/package.json +++ b/apps/omsorgsdager-aleneomsorg-dialog/package.json @@ -1,9 +1,14 @@ { - "author": "NAV", + "author": { + "name": "NAV" + }, "description": "Søknad om ekstra omsorgsdager ved aleneomsorg for barn", "license": "MIT", "name": "@navikt/omsorgsdager-aleneomsorg-dialog", - "repository": "https://github.com/navikt/sif-brukerdialog", + "repository": { + "type": "git", + "url": "git+https://github.com/navikt/sif-brukerdialog.git" + }, "version": "2.25.0", "private": true, "type": "module", @@ -18,7 +23,10 @@ "lint:fix": "eslint --quiet --fix './src/**/*.{js,ts,tsx}'", "lint:tsc": "tsc --noEmit", "playwright-test": "playwright test", - "start-e2e-server": "node ./e2e/server/server.cjs" + "start-e2e-server": "node ./e2e/server/server.cjs", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build", + "chromatic": "npx chromatic --project-token=" }, "dependencies": { "@navikt/ds-css": "7.9.0", @@ -58,8 +66,16 @@ "@babel/plugin-transform-modules-commonjs": "7.26.3", "@babel/preset-env": "7.26.0", "@babel/preset-react": "7.26.3", + "@chromatic-com/storybook": "^3.2.3", "@playwright/test": "1.49.1", "@sif/eslint-config": "*", + "@storybook/addon-essentials": "^8.4.7", + "@storybook/addon-interactions": "^8.4.7", + "@storybook/addon-onboarding": "^8.4.7", + "@storybook/blocks": "^8.4.7", + "@storybook/react": "^8.4.7", + "@storybook/react-vite": "^8.4.7", + "@storybook/test": "^8.4.7", "@testing-library/dom": "10.4.0", "@types/object-hash": "3.0.6", "@types/react": "19.0.2", @@ -67,6 +83,7 @@ "@types/react-router-dom": "5.3.3", "@vitejs/plugin-react": "4.3.4", "babel-polyfill": "6.26.0", + "chromatic": "^11.22.2", "compression": "1.7.5", "cors": "2.8.5", "cross-env": "7.0.3", @@ -77,8 +94,13 @@ "less": "4.2.1", "mustache-express": "1.3.2", "playwright-core": "1.49.1", + "storybook": "^8.4.7", "typescript": "5.7.2", "vite": "6.0.7", "vite-plugin-checker": "0.8.0" - } + }, + "bugs": { + "url": "https://github.com/navikt/sif-brukerdialog/issues" + }, + "homepage": "https://github.com/navikt/sif-brukerdialog#readme" } diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/app/App.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/app/App.tsx index 3583d5a3b4..0f9171d9b8 100644 --- a/apps/omsorgsdager-aleneomsorg-dialog/src/app/App.tsx +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/app/App.tsx @@ -32,6 +32,7 @@ const App = () => ( appName={OmsorgsdagerAleneomsorgApp.navn} appTitle={OmsorgsdagerAleneomsorgApp.tittel.nb} intlMessages={applicationIntlMessages} + useLanguageSelector={appEnv.SIF_PUBLIC_FEATURE_NYNORSK === 'on'} appStatus={{ sanityConfig: { projectId: SIF_PUBLIC_APPSTATUS_PROJECT_ID, diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/all-messages.stories.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/all-messages.stories.tsx new file mode 100644 index 0000000000..f6e80b449c --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/all-messages.stories.tsx @@ -0,0 +1,18 @@ +import { StoryFn } from '@storybook/react'; +import MessagesPreview from '@navikt/sif-common-core-ds/src/dev-utils/intl/messages-preview/MessagesPreview'; +import { withIntl } from '../../storybook/decorators/withIntl'; +import { applicationIntlMessages } from '.'; + +export default { + title: 'i18N/Alle tekster', + decorators: [withIntl], +}; + +const Template: StoryFn = () => ( + +); +export const Default = Template.bind({}); + +Default.args = {}; + +Default.parameters = {}; diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/app-messages.stories.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/app-messages.stories.tsx new file mode 100644 index 0000000000..2327ff3937 --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/app-messages.stories.tsx @@ -0,0 +1,18 @@ +import { StoryFn } from '@storybook/react'; +import MessagesPreview from '@navikt/sif-common-core-ds/src/dev-utils/intl/messages-preview/MessagesPreview'; +import { withIntl } from '../../storybook/decorators/withIntl'; +import { appMessages } from './appMessages'; + +export default { + title: 'i18N/App-tekster', + decorators: [withIntl], +}; + +const Template: StoryFn = () => ( + +); +export const Default = Template.bind({}); + +Default.args = {}; + +Default.parameters = {}; diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/appMessages.ts b/apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/appMessages.ts index 1abe549ffa..0919462c23 100644 --- a/apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/appMessages.ts +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/appMessages.ts @@ -16,22 +16,33 @@ const nb = { ...validateApiDataMessages.nb, 'application.title': 'Søknad om ekstra omsorgsdager ved aleneomsorg', - 'step.omOmsorgenForBarn.stepTitle': 'Om aleneomsorg for barn', 'step.tidspunktForAleneomsorg.stepTitle': 'Tidspunkt for aleneomsorg', 'step.oppsummering.stepTitle': 'Oppsummering', - 'initialLoadError.pageTitle': 'Det oppstod en feil', 'initialLoadError.text.1': 'Det oppstod en feil under oppstarten av søknaden. Vennligst prøv igjen senere.', - 'resetMellomlagring.text.1': 'Dersom feilen vedvarer, kan du prøve å starte på nytt med et tom skjema.', 'resetMellomlagring.startPåNytt': 'Start på nytt', - 'validation.harForståttRettigheterOgPlikter.notChecked': 'Du må bekrefte at du har lest og forstått dine plikter.', }; const nn: Record = { - ...nb, + ...velkommenPageMessages.nn, + ...omOmsorgenForBarnMessages.nn, + ...annetBarnMessages.nn, + ...tidspunktForAleneomsorgMessages.nn, + ...oppsummeringMessages.nn, + ...kvitteringMessages.nn, + ...validateApiDataMessages.nn, + 'application.title': 'Søknad om ekstra omsorgsdagar ved åleineomsorg', + 'step.omOmsorgenForBarn.stepTitle': 'Om åleineomsorg for barn', + 'step.tidspunktForAleneomsorg.stepTitle': 'Tidspunkt for åleineomsorg', + 'step.oppsummering.stepTitle': 'Oppsummering', + 'initialLoadError.pageTitle': 'Det oppstod ein feil', + 'initialLoadError.text.1': 'Det oppstod ein feil under oppstarten av søknaden. Ver venleg og prøv igjen seinare.', + 'resetMellomlagring.text.1': 'Dersom feilen varer ved, kan du prøve å starte på nytt med eit tomt skjema.', + 'resetMellomlagring.startPåNytt': 'Start på nytt', + 'validation.harForståttRettigheterOgPlikter.notChecked': 'Du må stadfeste at du har lese og forstått dine plikter.', }; export const appMessages = { nb, nn }; diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/lib-messages.stories.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/lib-messages.stories.tsx new file mode 100644 index 0000000000..14ee24c808 --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/app/i18n/lib-messages.stories.tsx @@ -0,0 +1,18 @@ +import { StoryFn } from '@storybook/react'; +import MessagesPreview from '@navikt/sif-common-core-ds/src/dev-utils/intl/messages-preview/MessagesPreview'; +import { libMessages } from './index'; +import { withIntl } from '../../storybook/decorators/withIntl'; + +export default { + title: 'i18N/Bibliotek tekster', + decorators: [withIntl], +}; + +const Template: StoryFn = () => ( + +); +export const Default = Template.bind({}); + +Default.args = {}; + +Default.parameters = {}; diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/app/pages/kvittering/kvitteringMesssages.ts b/apps/omsorgsdager-aleneomsorg-dialog/src/app/pages/kvittering/kvitteringMesssages.ts index 6a7331b354..b5db408d85 100644 --- a/apps/omsorgsdager-aleneomsorg-dialog/src/app/pages/kvittering/kvitteringMesssages.ts +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/app/pages/kvittering/kvitteringMesssages.ts @@ -7,7 +7,14 @@ const nb = { 'Når søknaden er ferdigbehandlet, får du et svar fra oss på «Min side». Du kan sjekke saksbehandlingstiden her.', }; -const nn: Record = { ...nb }; +const nn: Record = { + 'kvittering.tittel': 'Me har mottatt søknad om ekstra omsorgsdagar', + 'kvittering.info.tittel': 'Kva skjer vidare no?', + 'kvittering.info.1': 'Me behandlar søknaden din.', + 'kvittering.info.2': 'Me kontaktar deg dersom me treng fleire opplysningar.', + 'kvittering.info.3': + 'Når søknaden er ferdigbehandla, får du eit svar frå oss på «Mi side». Du kan sjå saksbehandlingstida her.', +}; export const kvitteringMessages = { nb, diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/app/pages/velkommen/velkommenPageMessages.ts b/apps/omsorgsdager-aleneomsorg-dialog/src/app/pages/velkommen/velkommenPageMessages.ts index 53209dbf42..ac3bd4abba 100644 --- a/apps/omsorgsdager-aleneomsorg-dialog/src/app/pages/velkommen/velkommenPageMessages.ts +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/app/pages/velkommen/velkommenPageMessages.ts @@ -43,7 +43,43 @@ const nb = { }; const nn: Record = { - ...nb, + 'page.velkommen.sidetittel': 'Søknad om ekstra omsorgsdagar', + 'page.velkommen.guide.tittel': 'Hei {navn}', + 'page.velkommen.guide.ingress': 'Velkomen til søknad om ekstra omsorgsdagar ved åleineomsorg.', + 'page.velkommen.guide.tekst.1.1': + 'Når det gjeld omsorgsdagar er du åleine om omsorga når barnet bur fast hos deg, og du ikkje bur saman med den andre forelderen. Det kan for eksempel vere', + 'page.velkommen.guide.tekst.1.1.a': 'på grunn av samlivsbrot', + 'page.velkommen.guide.tekst.1.1.b': 'at du har åleineomsorg for eit donorbarn', + 'page.velkommen.guide.tekst.1.1.c': 'den andre forelderen er død', + 'page.velkommen.guide.tekst.1.2.tittel': 'Når skal du ikkje bruke denne søknaden?', + 'page.velkommen.guide.tekst.1.2': + 'Om de vanlegvis bur saman, men den andre forelderen ikkje kan passe barnet, skal du bruke Søknad om ekstra omsorgsdagar når den andre forelderen ikkje kan passe barn', + 'page.velkommen.guide.tekst.2': + 'Om de har avtalt delt fast bustad for barnet har begge foreldre rett på omsorgsdagar, og ingen av dykk skal søke om ekstra omsorgsdagar på grunn av åleineomsorg.', + 'page.velkommen.guide.tekst.3': + 'Du treng ikkje å søke fleire gonger for same barn, om du tidlegare har fått godkjend søknad.', + 'page.velkommen.omSøknaden.tittel': 'Om søknaden', + 'page.velkommen.omSøknaden.1': 'Du får rettleiing undervegs i søknaden om kva du skal fylle ut, og korleis.', + 'page.velkommen.omSøknaden.2': + 'Me tar vare på svara dine i 72 timar. Om du innanfor den tida for eksempel vil ta ein pause eller blir automatisk logga ut, held du fram der du var når du kjem tilbake.', + 'page.velkommen.omSøknaden.3': + 'Du må svare på alle spørsmåla for å kunne gå vidare. Om du manglar etterspurt dokumentasjon, kan du ettersende det så snart du kan.', + 'page.velkommen.omSøknaden.4': 'Om korleis me hentar opplysningar om deg', + 'page.velkommen.harForståttRettigheterOgPlikter.notChecked': 'Du må velje at du har forstått ditt ansvar som søkar', + 'page.velkommen.personopplysninger.dialogtittel': 'Om behandling av personopplysningar', + 'page.velkommen.personopplysninger.1': 'Slik behandlar Nav personopplysningane dine', + 'page.velkommen.personopplysninger.2': + 'Me hentar og mottek opplysningar om deg når me skal behandle saka di. Det er naudsynt for at du skal få riktig teneste. Saka di kan behandlast automatisk.', + 'page.velkommen.personopplysninger.3': 'Kva opplysningar hentar me?', + 'page.velkommen.personopplysninger.4': 'Opplysningane me hentar kjem anten frå deg eller frå offentlege register:', + 'page.velkommen.personopplysninger.4.1': 'kva barn du er registrert som forelder til.', + 'page.velkommen.personopplysninger.4.2': + 'kven den andre forelderen er, og om de er busett på same folkeregistrerte adresse.', + 'page.velkommen.personopplysninger.4.3': 'tilknytinga di til Noreg.', + 'page.velkommen.personopplysninger.4.4': + 'trygdeordningar du kan ha rett til i andre land. Me kan også sende opplysningar om deg til trygdemyndigheiter i andre land.', + 'page.velkommen.personopplysninger.5': + 'Du har rett til innsyn i saka di. Vil du vite meir om korleis Nav behandlar personopplysningar? Sjå nav.no/personvern.', }; export const velkommenPageMessages = { diff --git "a/apps/omsorgsdager-aleneomsorg-dialog/src/app/s\303\270knad/steps/om-omsorgen-for-barn/omOmsorgenForBarnMessages.ts" "b/apps/omsorgsdager-aleneomsorg-dialog/src/app/s\303\270knad/steps/om-omsorgen-for-barn/omOmsorgenForBarnMessages.ts" index bde26e7f20..ddf4dcd512 100644 --- "a/apps/omsorgsdager-aleneomsorg-dialog/src/app/s\303\270knad/steps/om-omsorgen-for-barn/omOmsorgenForBarnMessages.ts" +++ "b/apps/omsorgsdager-aleneomsorg-dialog/src/app/s\303\270knad/steps/om-omsorgen-for-barn/omOmsorgenForBarnMessages.ts" @@ -41,7 +41,44 @@ const nb = { }; const nn: Record = { - ...nb, + 'steg.omOmsorgenForBarn.dineBarn.seksjonsTittel': 'Dine barn', + + 'steg.omOmsorgenForBarn.info.spm.andreBarn': 'Har du barn som ikkje er registrert her?', + 'steg.omOmsorgenForBarn.info.spm.flereBarn': 'Har du fleire barn som ikkje er registrert her?', + 'steg.omOmsorgenForBarn.info.spm.text': + 'Om du har barn som ikkje er registrert her, kan du legge inn desse sjølv. Det kan til dømes vere fosterbarn.', + + 'steg.omOmsorgenForBarn.annetBarnListAndDialog.addLabel': 'Legg til barn', + 'steg.omOmsorgenForBarn.annetBarnListAndDialog.listTitle': 'Barn du har lagt til', + 'steg.omOmsorgenForBarn.annetBarnListAndDialog.modalTitle': 'Legg til barn', + 'steg.omOmsorgenForBarn.formLeggTilBarn.aldersGrenseInfo': + '(Du kan ikkje legge til barn som er 19 år i år eller eldre)', + + 'steg.omOmsorgenForBarn.aleneomsorg.seksjonsTittel': 'åleineomsorg', + 'steg.omOmsorgenForBarn.form.spm.hvilkeAvBarnaAleneomsorg': 'Kryss av for barn du er åleine om omsorga for:', + + 'steg.omOmsorgenForBarn.deltBosted.seksjonsTittel': 'Delt fast bustad', + 'steg.omOmsorgenForBarn.deltBosted.spm': 'Har du avtale om delt fast bustad for barnet?', + 'steg.omOmsorgenForBarn.deltBosted.flereBarn.spm': 'Har du avtale om delt fast bustad for nokre av barna?', + 'steg.omOmsorgenForBarn.deltBosted.description.tittel': 'Kva er avtale om delt fast bustad?', + 'steg.omOmsorgenForBarn.deltBosted.description': + 'Avtale om delt fast bustad er ein juridisk avtale i samsvar med barnelova §36 og betyr at barnet har fast bustad hos begge foreldra. Om det er avtalt delt fast bustad er ingen av foreldra åleine om omsorga for barnet, men begge har rett til ordinære omsorgsdagar.', + 'steg.omOmsorgenForBarna.deltBosted.velgMinstEttBarnMedDeltBostedAdvarsel': + 'Du må ha åleineomsorg for minst eitt barn for å kunne svare på kva barn ein har avtale om delt fast bustad for.', + + 'steg.omOmsorgenForBarn.form.født': 'Fødd {dato}', + 'steg.omOmsorgenForBarn.form.fødtNavn': 'Fødd {dato} {navn}', + + 'steg.omOmsorgenForBarn.alleBarnMedDeltBosted': + 'Du kan berre søke for barn du er åleine med omsorga for, og ikkje har avtale om delt fast bustad for. Om du og den andre forelderen har ei avtale om delt fast bustad, bur barnet fast hos dykk begge. I desse tilfella kan ingen av dykk få ekstra dagar på grunn av åleineomsorg, men de har begge rett til ordinære omsorgsdagar.', + 'steg.omOmsorgenForBarn.ingenbarn': 'Du må ha minst eitt barn for å kunne gå vidare.', + 'steg.omOmsorgenForBarn.nextButtonLabel': 'Fortsett', + + 'validation.avtaleOmDeltBosted.yesOrNoIsUnanswered': + 'Du må svare ja eller nei på om du har avtale om delt fast bustad.', + 'validation.harAvtaleOmDeltBostedFor.listIsEmpty': + 'Du må krysse av for barn du har delt fast bustad for eller svare «Nei» på spørsmålet ovanfor.', + 'validation.harAleneomsorgFor.listIsEmpty': 'Du må krysse av for barn du er åleine om omsorga for.', }; export const omOmsorgenForBarnMessages = { nb, nn }; diff --git "a/apps/omsorgsdager-aleneomsorg-dialog/src/app/s\303\270knad/steps/oppsummering/oppsummeringMessages.ts" "b/apps/omsorgsdager-aleneomsorg-dialog/src/app/s\303\270knad/steps/oppsummering/oppsummeringMessages.ts" index 992bd8fb2a..76104e5672 100644 --- "a/apps/omsorgsdager-aleneomsorg-dialog/src/app/s\303\270knad/steps/oppsummering/oppsummeringMessages.ts" +++ "b/apps/omsorgsdager-aleneomsorg-dialog/src/app/s\303\270knad/steps/oppsummering/oppsummeringMessages.ts" @@ -22,9 +22,27 @@ const nb = { }; const nn: Record = { - ...nb, -}; + 'step.oppsummering.søker.header': 'Om deg', + 'step.oppsummering.søker.navn': 'Namn', + 'step.oppsummering.søker.fnr': 'Fødselsnummer', + 'step.oppsummering.dineBarn.listItem.FOSTERBARN': '(Barnet er mitt fosterbarn).', + 'step.oppsummering.omOmsorgenForBarn.barnList.title': 'Barn du er åleine om omsorga for', + 'step.oppsummering.omOmsorgenForBarn.harOmsorgFor.tidspunktForAleneomsorg': 'Tidspunkt for åleineomsorg: {dato}', + 'step.oppsummering.omOmsorgenForBarn.harOmsorgFor.tidspunktForAleneomsorg.tidligere': + 'Du vart åleine om omsorga for over 2 år sidan.', + + 'step.oppsummering.bekrefterOpplysninger': + 'Eg stadfestar at opplysningane eg har gitt er riktige, og at eg ikkje har halde tilbake opplysningar som har tyding for min rett til omsorgsdagar.', + + 'step.oppsummering.sendMelding.feilmelding.førsteGang': + 'Det oppstod ein feil under innsending. Ver venleg å prøv på nytt.', + 'step.oppsummering.sendMelding.feilmelding.andreGang': + 'Det oppstod framleis ein feil under innsending. Vent litt og prøv på nytt.', + 'step.oppsummering.sendSøknad': 'Send søknad', + + 'validation.harBekreftetOpplysninger.notChecked': 'Du må stadfeste at opplysningane du har gitt er riktige.', +}; export const oppsummeringMessages = { nb, nn, diff --git "a/apps/omsorgsdager-aleneomsorg-dialog/src/app/s\303\270knad/steps/tidspunkt-for-aleneomsorg/tidspunktForAleneomsorgMessages.ts" "b/apps/omsorgsdager-aleneomsorg-dialog/src/app/s\303\270knad/steps/tidspunkt-for-aleneomsorg/tidspunktForAleneomsorgMessages.ts" index 17d2a1cca3..02b2112f3d 100644 --- "a/apps/omsorgsdager-aleneomsorg-dialog/src/app/s\303\270knad/steps/tidspunkt-for-aleneomsorg/tidspunktForAleneomsorgMessages.ts" +++ "b/apps/omsorgsdager-aleneomsorg-dialog/src/app/s\303\270knad/steps/tidspunkt-for-aleneomsorg/tidspunktForAleneomsorgMessages.ts" @@ -18,7 +18,25 @@ const nb = { 'Datoen når du ble du alene om omsorgen for barnet er ugyldig. Gyldig format er dd.mm.åååå.', }; -const nn: Record = { ...nb }; +const nn: Record = { + 'step.tidspunktForAleneomsorg.stepIntro': + 'No treng me å vite når du vart åleine om omsorga for barn. Om du vart åleine om omsorga tidlegare enn i fjor, treng me ikkje å vite konkret dato.', + 'step.tidspunktForAleneomsorg.info': 'Oppgi tidspunkt for når du vart åleine om omsorga', + 'step.tidspunktForAleneomsorg.spm': 'Kva år vart du åleine om omsorga for {navn}?', + 'step.tidspunktForAleneomsorg.radioPanelGroupLabel.siste2årene': 'I {yearAgo} eller {yearNow}', + 'step.tidspunktForAleneomsorg.radioPanelGroupLabel.tidligere': 'I {twoYearsAgo} eller tidlegare', + 'step.tidspunktForAleneomsorg.siste2årene.dato.spm': 'Kva dato vart du åleine om omsorga for {navn}?', + 'step.tidspunktForAleneomsorg.nextButtonLabel': 'Fortsett', + + 'validation.tidspunktForAleneomsorg.noValue': 'Du må oppgi kva år du vart åleine om omsorga for barnet.', + 'validation.tidspunktForAleneomsorg.dato.dateHasNoValue': + 'Du må oppgi kva dato du vart åleine om omsorga for barnet.', + 'validation.tidspunktForAleneomsorg.dato.dateIsAfterMax': 'Du må oppgi dagens dato eller tidlegare.', + 'validation.tidspunktForAleneomsorg.dato.dateIsBeforeMin': + 'Du kan ikkje oppgi dato tidlegare enn to år frå dagens år.', + 'validation.tidspunktForAleneomsorg.dato.dateHasInvalidFormat': + 'Datoen når du vart åleine om omsorga for barnet er ugyldig. Gyldig format er dd.mm.åååå.', +}; export const tidspunktForAleneomsorgMessages = { nb, diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/app/utils/appEnv.ts b/apps/omsorgsdager-aleneomsorg-dialog/src/app/utils/appEnv.ts index 30747f4d89..a377a6216d 100644 --- a/apps/omsorgsdager-aleneomsorg-dialog/src/app/utils/appEnv.ts +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/app/utils/appEnv.ts @@ -4,6 +4,7 @@ import { AppEnv } from '../../../env.schema'; const getAppEnv = (): AppEnv => ({ ...getCommonEnv(), SIF_PUBLIC_USE_FARO: getRequiredEnv('SIF_PUBLIC_USE_FARO') as 'true' | 'false', + SIF_PUBLIC_FEATURE_NYNORSK: getRequiredEnv('SIF_PUBLIC_FEATURE_NYNORSK') === 'on' ? 'on' : 'off', SIF_PUBLIC_OMS_IKKE_TILSYN_URL: getRequiredEnv('SIF_PUBLIC_OMS_IKKE_TILSYN_URL'), }); diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/AlertStoryWrapper.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/AlertStoryWrapper.tsx new file mode 100644 index 0000000000..dc131cda8c --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/AlertStoryWrapper.tsx @@ -0,0 +1,35 @@ +import { Heading, VStack } from '@navikt/ds-react'; +import { ReactNode } from 'react'; +import MessagesList from '@navikt/sif-common-core-ds/src/dev-utils/intl/messages-preview/MessagesList'; +import { storybookIntlUtils } from '../utils/intlUtils'; +import ShadowBox from './ShadowBox'; + +const AlertStoryWrapper = ({ + title, + children, + intlScope, +}: { + title: string; + children: ReactNode; + intlScope?: string; +}) => { + const messages = intlScope + ? storybookIntlUtils.getIntlMessagesFromKeys(storybookIntlUtils.getScopedIntlKeys(intlScope)) + : undefined; + return ( + <> + + + + {title} + +
{children}
+
+
+ + {messages && } + + ); +}; + +export default AlertStoryWrapper; diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/ShadowBox.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/ShadowBox.tsx new file mode 100644 index 0000000000..b8efa42721 --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/ShadowBox.tsx @@ -0,0 +1,11 @@ +import { Box } from '@navikt/ds-react'; + +const ShadowBox = ({ children }: { children: React.ReactNode }) => { + return ( + + {children} + + ); +}; + +export default ShadowBox; diff --git "a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/Sp\303\270rsm\303\245lWrapper.tsx" "b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/Sp\303\270rsm\303\245lWrapper.tsx" new file mode 100644 index 0000000000..8e27205129 --- /dev/null +++ "b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/Sp\303\270rsm\303\245lWrapper.tsx" @@ -0,0 +1,63 @@ +import { Box, Button, Tabs, VStack } from '@navikt/ds-react'; +import * as React from 'react'; +import { MessagesTable } from '@navikt/sif-common-core-ds/src/dev-utils/intl/messages-preview/MessagesList'; +import ShadowBox from '../components/ShadowBox'; +import { storybookIntlUtils } from '../utils/intlUtils'; +import { StoryFormikWrapper } from './StoryFormikWrapper'; +import '@navikt/ds-css'; + +export interface SpørsmålWrapperProps { + formErrorHandlerIntlKey: string; + spørsmål: React.ReactNode; + messageIntlKeys?: string[]; + validationErrorIntlKeys?: string[]; +} + +const { getIntlMessagesFromKeys } = storybookIntlUtils; + +export const SpørsmålWrapper: React.FunctionComponent = (props) => { + const { spørsmål, messageIntlKeys = [], validationErrorIntlKeys = [], formErrorHandlerIntlKey } = props; + const infoMessages = getIntlMessagesFromKeys(messageIntlKeys); + const validationMessages = getIntlMessagesFromKeys(validationErrorIntlKeys); + const allMessages = getIntlMessagesFromKeys([...messageIntlKeys, ...validationErrorIntlKeys]); + + return ( + + + + + + {spørsmål} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/StoryFormWrapper.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/StoryFormWrapper.tsx new file mode 100644 index 0000000000..10ba4d53db --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/StoryFormWrapper.tsx @@ -0,0 +1,17 @@ +import { Box, VStack } from '@navikt/ds-react'; + +interface Props { + children: React.ReactNode; + values?: any; + maxWidth?: string; +} + +const StoryFormWrapper = ({ children, maxWidth = '35rem' }: Props) => ( + + + {children} + + +); + +export default StoryFormWrapper; diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/StoryFormikWrapper.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/StoryFormikWrapper.tsx new file mode 100644 index 0000000000..03a1d41c03 --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/components/StoryFormikWrapper.tsx @@ -0,0 +1,61 @@ +import { Box } from '@navikt/ds-react'; +import * as React from 'react'; +import { TypedFormikForm, TypedFormikWrapper } from '@navikt/sif-common-formik-ds'; +import getIntlFormErrorHandler from '@navikt/sif-common-formik-ds/src/validation/intlFormErrorHandler'; +import { useAppIntl } from '../../app/i18n'; +import '@navikt/ds-css'; + +interface Props { + parameters?: { + formik?: any; + includeButtons?: boolean; + maxWidth?: string; + formErrorHandlerIntlKey: string; + }; + children: React.ReactNode; + useBorder?: boolean; +} + +export const StoryFormikWrapper: React.FunctionComponent = (props) => { + const { intl } = useAppIntl(); + const { children, parameters, useBorder } = props; + const { + formik, + maxWidth = '800px', + includeButtons = true, + formErrorHandlerIntlKey = 'formIntlKey', + } = parameters || {}; + const initialValues = formik?.initialValues || {}; + + return ( + { + // eslint-disable-next-line no-console + console.log('StoryFormikProvider', values); + }} + renderForm={() => { + return ( + null} + includeValidationSummary={true} + formErrorHandler={getIntlFormErrorHandler(intl, formErrorHandlerIntlKey)} + runDelayedFormValidation={true}> + + {children} + + + ); + }} + /> + ); +}; diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/print.css b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/print.css new file mode 100644 index 0000000000..1c94453379 --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/print.css @@ -0,0 +1,17 @@ +@media print { + .navds-progress-bar { + display: none; + } + .navds-form-progress__collapsible { + display: none !important; + } + #decorator-header { + display: none !important; + } + #decorator-footer { + display: none !important; + } + .navds-tabs__tablist-wrapper { + display: none !important; + } +} diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withAmplitudeProvider.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withAmplitudeProvider.tsx new file mode 100644 index 0000000000..37923b84fd --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withAmplitudeProvider.tsx @@ -0,0 +1,7 @@ +import { AmplitudeProvider } from '@navikt/sif-common-amplitude'; + +export const withAmplitudeProvider = (Story: any) => ( + + + +); diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withEnvSettings.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withEnvSettings.tsx new file mode 100644 index 0000000000..c3d3afca93 --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withEnvSettings.tsx @@ -0,0 +1,4 @@ +export const withEnvSettings = (Story) => { + (window as any).appSettings.APP_VERSION = 'production'; + return ; +}; diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withFormikWrapper.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withFormikWrapper.tsx new file mode 100644 index 0000000000..4dbdb6f16c --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withFormikWrapper.tsx @@ -0,0 +1,7 @@ +import { StoryFormikWrapper } from '../components/StoryFormikWrapper'; + +export const withFormikWrapper = (Story, args) => ( + + + +); diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withIntl.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withIntl.tsx new file mode 100644 index 0000000000..49a7ec7269 --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withIntl.tsx @@ -0,0 +1,18 @@ +import { IntlProvider } from 'react-intl'; +import { applicationIntlMessages } from '../../app/i18n'; +import { uiMessages } from '@navikt/sif-common-ui'; +import './print.css'; + +export const withIntl = (Story, context) => { + const locale = context?.parameters?.locale || context?.globals.locale || 'nb'; + const messages = + locale === 'nb' + ? { ...applicationIntlMessages.nb, ...uiMessages.nb } + : { ...applicationIntlMessages.nn, ...uiMessages.nn }; + + return ( + + + + ); +}; diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withRouter.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withRouter.tsx new file mode 100644 index 0000000000..24bfb1c238 --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withRouter.tsx @@ -0,0 +1,7 @@ +import { BrowserRouter } from 'react-router-dom'; + +export const withRouterProvider = (Story: any) => ( + + + +); diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withStepFormValuesContext.tsx b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withStepFormValuesContext.tsx new file mode 100644 index 0000000000..af7d9cc1fe --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withStepFormValuesContext.tsx @@ -0,0 +1,10 @@ +import { StepFormValuesContextProvider } from '../../app/søknad/context/StepFormValuesContext'; +import { StepFormValues } from '../../app/types/StepFormValues'; + +export const withStepFormValuesContext = (Story, stepFormValues?: StepFormValues) => { + return ( + + + + ); +}; diff --git "a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withS\303\270knadContext.tsx" "b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withS\303\270knadContext.tsx" new file mode 100644 index 0000000000..22ff916cfb --- /dev/null +++ "b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/decorators/withS\303\270knadContext.tsx" @@ -0,0 +1,19 @@ +import { SøknadContextProvider } from '../../app/søknad/context/SøknadContext'; +import { SøknadContextState } from '../../app/types/SøknadContextState'; +import { RegistrerteBarnMock, SøkerMock } from '../mock-data'; + +export const mockInitialSøknadContextState: SøknadContextState = { + versjon: '1.0.0', + søker: SøkerMock, + registrertBarn: RegistrerteBarnMock, + søknadsdata: {} as any, + søknadRoute: undefined, + søknadSendt: false, + børMellomlagres: false, +}; + +export const withSøknadContextProvider = (Story: any, state: Partial = {}) => ( + + + +); diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/mock-data/index.ts b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/mock-data/index.ts new file mode 100644 index 0000000000..111bb4f87e --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/mock-data/index.ts @@ -0,0 +1,27 @@ +import { ISODateToDate } from '@navikt/sif-common-utils'; +import { RegistrertBarn } from '../../app/types/RegistrertBarn'; +import { Søker } from '../../app/types/Søker'; + +export const SøkerMock: Søker = { + fødselsnummer: '30086421581', + fornavn: 'GODSLIG', + aktørId: '132', + fødselsdato: ISODateToDate('1990-01-01'), + etternavn: 'KRONJUVEL', +}; + +export const RegistrerteBarnMock: RegistrertBarn[] = [ + { + fødselsdato: ISODateToDate('1990-01-01'), + fornavn: 'Barn', + mellomnavn: 'Barne', + etternavn: 'Barnesen', + aktørId: '1', + }, + { + fødselsdato: ISODateToDate('1990-01-02'), + fornavn: 'Mock', + etternavn: 'Mocknes', + aktørId: '2', + }, +]; diff --git a/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/utils/intlUtils.ts b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/utils/intlUtils.ts new file mode 100644 index 0000000000..51ce929f09 --- /dev/null +++ b/apps/omsorgsdager-aleneomsorg-dialog/src/storybook/utils/intlUtils.ts @@ -0,0 +1,34 @@ +import { applicationIntlMessages } from '../../app/i18n'; +import { MessageFileFormat } from '@navikt/sif-common-core-ds/src/types'; + +const getIntlMessagesFromKeys = (keys: string[]): MessageFileFormat => { + const messages: MessageFileFormat = { + nb: {}, + nn: {}, + }; + keys.map((k) => { + messages.nb[k] = applicationIntlMessages.nb[k]; + messages.nn[k] = applicationIntlMessages.nn[k]; + }); + + return messages; +}; + +const getValidationIntlKeys = (keys: string[], intlKeyPath: string) => { + return keys.map((key) => `${intlKeyPath}.${key}`); +}; + +const getScopedIntlKeys = (scope: string): string[] => { + return Object.keys(applicationIntlMessages.nb).filter((key) => key.includes(scope)); +}; + +const getScopedMessages = (scope: string): MessageFileFormat => { + return getIntlMessagesFromKeys(getScopedIntlKeys(scope)); +}; + +export const storybookIntlUtils = { + getIntlMessagesFromKeys, + getScopedIntlKeys, + getScopedMessages, + getValidationIntlKeys, +}; diff --git a/packages/sif-common-core-ds/src/components/picture-scanning-guide/i18n/pictureScanningGuideMessages.tsx b/packages/sif-common-core-ds/src/components/picture-scanning-guide/i18n/pictureScanningGuideMessages.tsx index 9a09f3e01d..4da07990f1 100644 --- a/packages/sif-common-core-ds/src/components/picture-scanning-guide/i18n/pictureScanningGuideMessages.tsx +++ b/packages/sif-common-core-ds/src/components/picture-scanning-guide/i18n/pictureScanningGuideMessages.tsx @@ -24,7 +24,7 @@ const nb = { '@core.psg.good': 'Bra', '@core.psg.bad': 'Dårlig', '@core.psg.icon.label.good': 'Dokumentet fyller hele bildet', - '@core.psg.icon.label.keystone': 'Bildet er ikke tatt ovenfra', + '@core.psg.icon.label.keystone': 'Bildet er ikke tatt rett ovenfra', '@core.psg.icon.label.horizontal': 'Bildet har ikke riktig retning', '@core.psg.icon.label.shadow': 'Bildet har skygge på dokumentet', '@core.psg.lenkepanel.url': 'https://www.nav.no/brukerstotte#sende-soknad-pa-nett', @@ -33,7 +33,7 @@ const nb = { const nn: Record = { '@core.psg.expandable.tittel': 'Tips til deg som skal ta bilete av dokumentet', - '@core.psg.tittel': 'Noen tips når du skal ta bilete av dokumentet', + '@core.psg.tittel': 'Nokre tips når du skal ta bilete av dokumentet', '@core.psg.section1.tittel': 'Trygg bruk når du tek bilete', '@core.psg.section1.liste.1': 'Bruk kamerafunksjonen på mobilen din til å ta biletet, ikkje bruk Snapchat eller andre appar.', @@ -54,7 +54,7 @@ const nn: Record = { '@core.psg.good': 'Bra', '@core.psg.bad': 'Dårleg', '@core.psg.icon.label.good': 'Dokumentet fyller heile biletet', - '@core.psg.icon.label.keystone': 'Biletet er ikkje teke ovanfrå.', + '@core.psg.icon.label.keystone': 'Biletet er ikkje teke rett ovanfrå.', '@core.psg.icon.label.horizontal': 'Biletet har ikkje rett retning', '@core.psg.icon.label.shadow': 'Biletet har skugge oppå dokumentet', '@core.psg.lenkepanel.url': 'https://www.nav.no/brukerstotte#sende-soknad-pa-nett', diff --git a/packages/sif-common-core-ds/src/i18n/common.messages.tsx b/packages/sif-common-core-ds/src/i18n/common.messages.tsx index 08416397aa..8377bacb90 100644 --- a/packages/sif-common-core-ds/src/i18n/common.messages.tsx +++ b/packages/sif-common-core-ds/src/i18n/common.messages.tsx @@ -45,17 +45,17 @@ const nn: Record = { '@core.formikFileUpload.file-upload.error.fileType': 'Filformatet er ikkje støtta. Filformater du kan laste opp er JPG, JPEG, PNG og PDF.', '@core.formikFileUpload.file-upload.error.fileSize': 'Fila er større enn ${MAX_SIZE_MB} MB.', - '@core.formikFileUpload.file-upload.error.retry': 'Det oppstod ein feil under opplastinga..', - '@core.formikFileUpload.file-upload.error.unknown': 'Det oppstod en feil under opplastingen ({reason})', + '@core.formikFileUpload.file-upload.error.retry': 'Det oppstod ein feil under opplastinga.', + '@core.formikFileUpload.file-upload.error.unknown': 'Det oppstod en feil under opplastinga ({reason})', '@core.vedleggSummaryList.ingenVedlegg': 'Ingen dokument er lasta opp', '@core.formikVedleggList.validation.noVedleggUploaded': 'Ingen dokument er lasta opp', '@core.formikVedleggList.validation.tooManyVedlegg': 'For mange dokument er lasta opp', '@core.formikVedleggList.validation.maxTotalSizeExceeded': 'Total samla storleik for dokumenta du har lasta opp overstig grensa på 24 MB.', '@core.formik-vedlegg-form.alert.totalSize': - 'Du har lastet opp meir enn grensa på 24 MB. Det betyr at du må fjerne noko av det du har lastet opp. Om det betyr at du ikkje får plass til alt du vil sende no, kan du ettersende fleire dokument.', + 'Du har totalt lasta opp meir enn grensa på 24 MB. Det betyr at du må fjerne noko av det du har lasta opp. Om det betyr at du ikkje får plass til alt du vil sende no, kan du ettersende fleire dokument.', '@core.formik-vedlegg-form.alert.totalSize.noLink': - 'Du har totalt lastet opp meir enn grensa på 24 MB. Det betyr at du må fjerne noko av det du har lastet opp.', + 'Du har totalt lasta opp meir enn grensa på 24 MB. Det betyr at du må fjerne noko av det du har lasta opp.', ...pictureScanningGuideMessages.nn, }; diff --git a/packages/sif-common-ui/src/components/duration-text/durationText.messages.ts b/packages/sif-common-ui/src/components/duration-text/durationText.messages.ts index cd5573ee30..cfe65897e9 100644 --- a/packages/sif-common-ui/src/components/duration-text/durationText.messages.ts +++ b/packages/sif-common-ui/src/components/duration-text/durationText.messages.ts @@ -23,7 +23,7 @@ const nn: Record = { '@ui.durationText.full.hours': '{hours, plural, one {# time} other {# timar}}', '@ui.durationText.full.minutes': '{minutes, plural, one {# minutt} other {# minutt}}', '@ui.durationText.full.hoursAndMinutes': - '{hours, plural, one {# time} other {# timer}} {minutes, plural, one {# minutt} other {# minutt}}', + '{hours, plural, one {# time} other {# timar}} {minutes, plural, one {# minutt} other {# minutt}}', }; export const durationTextMessages = { diff --git a/yarn.lock b/yarn.lock index 20a79c0cbc..1f512123ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1936,7 +1936,7 @@ __metadata: languageName: node linkType: hard -"@chromatic-com/storybook@npm:3.2.3": +"@chromatic-com/storybook@npm:3.2.3, @chromatic-com/storybook@npm:^3.2.3": version: 3.2.3 resolution: "@chromatic-com/storybook@npm:3.2.3" dependencies: @@ -4361,6 +4361,7 @@ __metadata: "@babel/plugin-transform-modules-commonjs": "npm:7.26.3" "@babel/preset-env": "npm:7.26.0" "@babel/preset-react": "npm:7.26.3" + "@chromatic-com/storybook": "npm:^3.2.3" "@navikt/ds-css": "npm:7.9.0" "@navikt/ds-react": "npm:7.9.0" "@navikt/ds-tailwind": "npm:7.9.0" @@ -4378,6 +4379,13 @@ __metadata: "@navikt/sif-common-utils": "npm:*" "@playwright/test": "npm:1.49.1" "@sif/eslint-config": "npm:*" + "@storybook/addon-essentials": "npm:^8.4.7" + "@storybook/addon-interactions": "npm:^8.4.7" + "@storybook/addon-onboarding": "npm:^8.4.7" + "@storybook/blocks": "npm:^8.4.7" + "@storybook/react": "npm:^8.4.7" + "@storybook/react-vite": "npm:^8.4.7" + "@storybook/test": "npm:^8.4.7" "@testing-library/dom": "npm:10.4.0" "@testing-library/react": "npm:16.1.0" "@types/object-hash": "npm:3.0.6" @@ -4387,6 +4395,7 @@ __metadata: "@vitejs/plugin-react": "npm:4.3.4" axios: "npm:1.7.9" babel-polyfill: "npm:6.26.0" + chromatic: "npm:^11.22.2" compression: "npm:1.7.5" cors: "npm:2.8.5" cross-env: "npm:7.0.3" @@ -4408,6 +4417,7 @@ __metadata: react-fast-compare: "npm:3.2.2" react-intl: "npm:7.1.0" react-router-dom: "npm:7.1.1" + storybook: "npm:^8.4.7" typescript: "npm:5.7.2" uuid: "npm:11.0.4" vite: "npm:6.0.7" @@ -8886,7 +8896,7 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-essentials@npm:8.4.7": +"@storybook/addon-essentials@npm:8.4.7, @storybook/addon-essentials@npm:^8.4.7": version: 8.4.7 resolution: "@storybook/addon-essentials@npm:8.4.7" dependencies: @@ -8917,7 +8927,7 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-interactions@npm:8.4.7": +"@storybook/addon-interactions@npm:8.4.7, @storybook/addon-interactions@npm:^8.4.7": version: 8.4.7 resolution: "@storybook/addon-interactions@npm:8.4.7" dependencies: @@ -8961,7 +8971,7 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-onboarding@npm:8.4.7": +"@storybook/addon-onboarding@npm:8.4.7, @storybook/addon-onboarding@npm:^8.4.7": version: 8.4.7 resolution: "@storybook/addon-onboarding@npm:8.4.7" dependencies: @@ -9059,7 +9069,7 @@ __metadata: languageName: node linkType: hard -"@storybook/blocks@npm:8.4.7, @storybook/blocks@npm:^8.0.8": +"@storybook/blocks@npm:8.4.7, @storybook/blocks@npm:^8.0.8, @storybook/blocks@npm:^8.4.7": version: 8.4.7 resolution: "@storybook/blocks@npm:8.4.7" dependencies: @@ -9554,7 +9564,7 @@ __metadata: languageName: node linkType: hard -"@storybook/react-vite@npm:8.4.7": +"@storybook/react-vite@npm:8.4.7, @storybook/react-vite@npm:^8.4.7": version: 8.4.7 resolution: "@storybook/react-vite@npm:8.4.7" dependencies: @@ -9576,7 +9586,7 @@ __metadata: languageName: node linkType: hard -"@storybook/react@npm:8.4.7": +"@storybook/react@npm:8.4.7, @storybook/react@npm:^8.4.7": version: 8.4.7 resolution: "@storybook/react@npm:8.4.7" dependencies: @@ -9643,7 +9653,7 @@ __metadata: languageName: node linkType: hard -"@storybook/test@npm:8.4.7": +"@storybook/test@npm:8.4.7, @storybook/test@npm:^8.4.7": version: 8.4.7 resolution: "@storybook/test@npm:8.4.7" dependencies: @@ -13131,6 +13141,25 @@ __metadata: languageName: node linkType: hard +"chromatic@npm:^11.22.2": + version: 11.22.2 + resolution: "chromatic@npm:11.22.2" + peerDependencies: + "@chromatic-com/cypress": ^0.*.* || ^1.0.0 + "@chromatic-com/playwright": ^0.*.* || ^1.0.0 + peerDependenciesMeta: + "@chromatic-com/cypress": + optional: true + "@chromatic-com/playwright": + optional: true + bin: + chroma: dist/bin.js + chromatic: dist/bin.js + chromatic-cli: dist/bin.js + checksum: 10/60d4889bf0630f741ea8f0c490debe0c59895daac3c58c8c82c0b86a335b81641f2c2e85fc221c5c113ef53761df0866667f86a99b1a55e26ab8d67e893edd2b + languageName: node + linkType: hard + "chrome-trace-event@npm:^1.0.2": version: 1.0.4 resolution: "chrome-trace-event@npm:1.0.4" @@ -26685,7 +26714,7 @@ __metadata: languageName: node linkType: hard -"storybook@npm:8.4.7, storybook@npm:^8.0.8": +"storybook@npm:8.4.7, storybook@npm:^8.0.8, storybook@npm:^8.4.7": version: 8.4.7 resolution: "storybook@npm:8.4.7" dependencies: