storybook-react-i18next
Version:
Add react-i18next support to Storybook
1 lines • 3.16 kB
Source Map (JSON)
{"version":3,"sources":["../src/withI18Next.tsx","../src/preview.ts"],"names":["withI18Next","story","context","i18n","language","locale","useGlobals","key","setKey","useState","useEffect","React","Fragment","I18nextProvider","i18nDecorators","preview","preview_default"],"mappings":"yTASO,IAAMA,EAAc,CACvBC,CAAAA,CACAC,CACC,GAAA,CACD,GAAM,CACF,UAAA,CAAY,CAAC,IAAA,CAAAC,CAAI,CACrB,CAAA,CAAID,EAEAC,CAAS,GAAA,MAAA,EACT,QAAQ,KAAM,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA,CAIrB,CAAA,CAGG,IAAMC,CAAWD,CAAAA,CAAAA,EAAM,SAEjB,CAAC,CAAC,MAAAE,CAAAA,CAAM,CAAC,CAAA,CAAIC,uBACb,CAAA,CAACC,EAAKC,CAAM,CAAA,CAAIC,oBAAS,CAAC,CAAA,CAEhC,OAAAC,oBAAAA,CAAU,IAAM,CACZ,GAAIP,CACA,CAAA,OAAAA,EAAK,EAAG,CAAA,iBAAA,CAAmB,IAAM,CAC7BK,CAAAA,CAAO,IAAK,CAAA,GAAA,EAAK,EACrB,CAAC,CACM,CAAA,IAAML,CAAK,CAAA,GAAA,CAAI,iBAAiB,CAE/C,EAAG,CAACA,CAAI,CAAC,CAAA,CAETO,oBAAU,CAAA,IAAM,CACRP,CAAQE,EAAAA,CAAAA,EAAUD,GAAYC,CAAWD,GAAAA,CAAAA,EACzCD,EAAK,cAAeE,CAAAA,CAAM,EAElC,CAAA,CAAG,CAACD,CAAAA,CAAUC,EAAQF,CAAI,CAAC,CAGvBQ,CAAAA,kBAAAA,CAAA,aAACC,CAAAA,UAAAA,CAAA,CAAS,GAAKL,CAAAA,CAAAA,CAAAA,CACXI,kBAAA,CAAA,aAAA,CAACE,4BAAA,CAAA,CAAgB,KAAMV,CAClBF,CAAAA,CAAAA,CAAAA,CAAMC,CAAO,CAClB,CACJ,CAER,CC/CA,CAAA,IAAMY,CAAiBX,CAAAA,kBAAAA,CAAK,UAAc,EAAA,GAEpCY,CAAwC,CAAA,CAC1C,GAAGZ,kBAAAA,CACH,UAAY,CAAA,CAAC,GAAGW,CAAgBd,CAAAA,CAAW,CAC/C,CAAA,CAEOgB,CAAQD,CAAAA","file":"preview.cjs","sourcesContent":["import React, {Fragment, ReactNode} from 'react';\nimport {useEffect, useGlobals, useState} from 'storybook/preview-api';\nimport type {\n PartialStoryFn as StoryFunction,\n Renderer,\n StoryContext,\n} from 'storybook/internal/types';\nimport {I18nextProvider} from 'react-i18next';\n\nexport const withI18Next = (\n story: StoryFunction<Renderer>,\n context: StoryContext<Renderer>,\n) => {\n const {\n parameters: {i18n},\n } = context;\n\n if (i18n === undefined) {\n console.error(`The 'i18n' parameter is missing in 'parameters' configuration of preview.js. Define the 'i18n' parameter as follows:\nparameters: {\n i18n,\n},\n`);\n }\n\n const language = i18n?.language;\n\n const [{locale}] = useGlobals();\n const [key, setKey] = useState(0);\n\n useEffect(() => {\n if (i18n) {\n i18n.on('languageChanged', () => {\n setKey(Date.now());\n });\n return () => i18n.off('languageChanged');\n }\n }, [i18n]);\n\n useEffect(() => {\n if (i18n && locale && language && locale !== language) {\n i18n.changeLanguage(locale);\n }\n }, [language, locale, i18n]);\n\n return (\n <Fragment key={key}>\n <I18nextProvider i18n={i18n}>\n {story(context) as ReactNode | null}\n </I18nextProvider>\n </Fragment>\n );\n};\n","import type {Renderer, ProjectAnnotations} from 'storybook/internal/types';\nimport i18n from 'storybook-i18n/preview';\nimport {withI18Next} from './withI18Next';\n\n// @ts-ignore\nconst i18nDecorators = i18n.decorators || [];\n\nconst preview: ProjectAnnotations<Renderer> = {\n ...i18n,\n decorators: [...i18nDecorators, withI18Next],\n};\n\nexport default preview;\n"]}