Skip to content

Commit a99a559

Browse files
dimfeldtechniq
authored andcommitted
pass through existing locale stores if they are passed into settings (#205)
1 parent b1abce0 commit a99a559

File tree

1 file changed

+37
-14
lines changed

1 file changed

+37
-14
lines changed

packages/svelte-ux/src/lib/components/settings.ts

+37-14
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ export type SettingsInput = {
2727
dark?: string[];
2828
};
2929
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>;
3037
};
3138

3239
export interface Settings extends Omit<SettingsInput, 'formats' | 'dictionary'> {
@@ -41,17 +48,14 @@ export interface Settings extends Omit<SettingsInput, 'formats' | 'dictionary'>
4148

4249
const settingsKey = Symbol();
4350

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+
}
5559

5660
let allLocales = getAllKnownLocales(settings.localeFormats);
5761

@@ -68,16 +72,35 @@ export function settings(settings: SettingsInput): Settings {
6872
};
6973
});
7074

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+
7196
return setContext<Settings>(settingsKey, {
7297
...settings,
7398
themes: {
7499
light: lightThemes,
75100
dark: darkThemes,
76101
},
77102
currentTheme,
78-
locale,
79-
localeSettings,
80-
format: derived(localeSettings, buildFormatters),
103+
...localeStores,
81104
});
82105
}
83106

0 commit comments

Comments
 (0)