@@ -27,6 +27,13 @@ export type SettingsInput = {
27
27
dark ?: string [ ] ;
28
28
} ;
29
29
currentTheme ?: ThemeStore ;
30
+
31
+ /** The existing locale store, if calling settings when there is already an existing `Settings` object */
32
+ locale ?: LocaleStore ;
33
+ /** The existing locale store, if calling settings when there is already an existing `Settings` object */
34
+ localeSettings ?: Readable < LocaleSettings > ;
35
+ /** The existing locale store, if calling settings when there is already an existing `Settings` object */
36
+ format ?: Readable < FormatFunctions > ;
30
37
} ;
31
38
32
39
export interface Settings extends Omit < SettingsInput , 'formats' | 'dictionary' > {
@@ -41,17 +48,14 @@ export interface Settings extends Omit<SettingsInput, 'formats' | 'dictionary'>
41
48
42
49
const settingsKey = Symbol ( ) ;
43
50
44
- export function settings ( settings : SettingsInput ) : Settings {
45
- let lightThemes = settings . themes ?. light ?? [ 'light' ] ;
46
- let darkThemes = settings . themes ?. dark ?? [ 'dark' ] ;
47
-
48
- let currentTheme =
49
- // In some cases, `settings` is called again from inside a component. Don't create a new theme store in this case.
50
- settings . currentTheme ??
51
- createThemeStore ( {
52
- light : lightThemes ,
53
- dark : darkThemes ,
54
- } ) ;
51
+ function createLocaleStores ( settings : SettingsInput ) {
52
+ if ( settings . locale && settings . localeSettings && settings . format ) {
53
+ return {
54
+ locale : settings . locale ,
55
+ localeSettings : settings . localeSettings ,
56
+ format : settings . format ,
57
+ } ;
58
+ }
55
59
56
60
let allLocales = getAllKnownLocales ( settings . localeFormats ) ;
57
61
@@ -68,16 +72,35 @@ export function settings(settings: SettingsInput): Settings {
68
72
} ;
69
73
} ) ;
70
74
75
+ return {
76
+ locale,
77
+ localeSettings,
78
+ format : derived ( localeSettings , buildFormatters ) ,
79
+ } ;
80
+ }
81
+
82
+ export function settings ( settings : SettingsInput ) : Settings {
83
+ let lightThemes = settings . themes ?. light ?? [ 'light' ] ;
84
+ let darkThemes = settings . themes ?. dark ?? [ 'dark' ] ;
85
+
86
+ let currentTheme =
87
+ // In some cases, `settings` is called again from inside a component. Don't create a new theme store in this case.
88
+ settings . currentTheme ??
89
+ createThemeStore ( {
90
+ light : lightThemes ,
91
+ dark : darkThemes ,
92
+ } ) ;
93
+
94
+ let localeStores = createLocaleStores ( settings ) ;
95
+
71
96
return setContext < Settings > ( settingsKey , {
72
97
...settings ,
73
98
themes : {
74
99
light : lightThemes ,
75
100
dark : darkThemes ,
76
101
} ,
77
102
currentTheme,
78
- locale,
79
- localeSettings,
80
- format : derived ( localeSettings , buildFormatters ) ,
103
+ ...localeStores ,
81
104
} ) ;
82
105
}
83
106
0 commit comments