1
1
import type { Preview } from '@storybook/react'
2
- import React from 'react'
2
+ import { Suspense , useEffect } from 'react'
3
+ import { ThemeProvider , useTheme } from 'src/layout/ThemeContext'
3
4
import i18n from 'src/locale/allTranslations'
4
5
5
6
const preview : Preview = {
@@ -13,15 +14,73 @@ const preview: Preview = {
13
14
} ,
14
15
} ,
15
16
decorators : [
16
- ( Story ) => {
17
- i18n
17
+ ( Story , context ) => {
18
+ const { locale, darkMode } = context . globals
19
+
18
20
return (
19
- < div style = { { direction : 'rtl' } } >
20
- < Story />
21
- </ div >
21
+ < Suspense >
22
+ < ThemeProvider >
23
+ < StoryBookWrapper locale = { locale } darkMode = { darkMode } >
24
+ < Story />
25
+ </ StoryBookWrapper >
26
+ </ ThemeProvider >
27
+ </ Suspense >
22
28
)
23
29
} ,
24
30
] ,
25
31
}
26
32
33
+ export const globalTypes = {
34
+ locale : {
35
+ name : 'Locale' ,
36
+ description : 'Internationalization locale' ,
37
+ defaultValue : 'he' ,
38
+ toolbar : {
39
+ icon : 'globe' ,
40
+ items : [
41
+ { value : 'he' , title : 'עברית' } ,
42
+ { value : 'en' , title : 'English' } ,
43
+ ] ,
44
+ showName : true ,
45
+ } ,
46
+ } ,
47
+ darkMode : {
48
+ name : 'Dark Mode' ,
49
+ description : 'Enable dark mode' ,
50
+ defaultValue : false ,
51
+ toolbar : {
52
+ icon : 'paintbrush' ,
53
+ items : [
54
+ { value : false , title : 'Light' } ,
55
+ { value : true , title : 'Dark' } ,
56
+ ] ,
57
+ showName : true ,
58
+ } ,
59
+ } ,
60
+ }
61
+
27
62
export default preview
63
+
64
+ const StoryBookWrapper = ( {
65
+ darkMode,
66
+ locale,
67
+ children,
68
+ } : {
69
+ darkMode ?: boolean
70
+ locale ?: string
71
+ children : React . ReactNode
72
+ } ) => {
73
+ const { isDarkTheme, toggleTheme } = useTheme ( )
74
+
75
+ useEffect ( ( ) => {
76
+ if ( isDarkTheme !== darkMode ) {
77
+ toggleTheme ( )
78
+ }
79
+ } , [ darkMode , isDarkTheme , toggleTheme ] )
80
+
81
+ useEffect ( ( ) => {
82
+ i18n . changeLanguage ( locale )
83
+ } , [ locale ] )
84
+
85
+ return children
86
+ }
0 commit comments