From 3dca11fea852aef8584e17d8035644128ddac728 Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Mon, 1 Jun 2026 18:39:17 +0300 Subject: [PATCH] refactor(theme): replace themeManager singleton with lazy getThemeManager Convert the eager themeManager singleton to a getThemeManager() lazy accessor (+ __resetThemeManager for tests), so the persistent-store subscription is set up on first access rather than at module load. Update the barrel and consumers (Layout init/destroy, ThemeSwitch, story, test). --- src/app/ui/Layout.svelte | 4 +++- src/features/ChangeAppTheme/model/index.ts | 2 +- .../store/ThemeManager/ThemeManager.svelte.ts | 19 +++++++++++++++---- .../ui/ThemeSwitch/ThemeSwitch.stories.svelte | 3 ++- .../ui/ThemeSwitch/ThemeSwitch.svelte | 3 ++- .../ui/ThemeSwitch/ThemeSwitch.svelte.test.ts | 11 ++++++++++- 6 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/app/ui/Layout.svelte b/src/app/ui/Layout.svelte index 40075be..753d6f9 100644 --- a/src/app/ui/Layout.svelte +++ b/src/app/ui/Layout.svelte @@ -3,7 +3,7 @@ Application shell with providers and page wrapper --> diff --git a/src/features/ChangeAppTheme/ui/ThemeSwitch/ThemeSwitch.svelte.test.ts b/src/features/ChangeAppTheme/ui/ThemeSwitch/ThemeSwitch.svelte.test.ts index 393bf55..08d8859 100644 --- a/src/features/ChangeAppTheme/ui/ThemeSwitch/ThemeSwitch.svelte.test.ts +++ b/src/features/ChangeAppTheme/ui/ThemeSwitch/ThemeSwitch.svelte.test.ts @@ -3,16 +3,25 @@ import { render, screen, } from '@testing-library/svelte'; -import { themeManager } from '../../model'; +import { afterEach } from 'vitest'; +import { getThemeManager } from '../../model'; +import { __resetThemeManager } from '../../model/store/ThemeManager/ThemeManager.svelte'; import ThemeSwitch from './ThemeSwitch.svelte'; const context = new Map([['responsive', { isMobile: false }]]); describe('ThemeSwitch', () => { + let themeManager: ReturnType; + beforeEach(() => { + themeManager = getThemeManager(); themeManager.setTheme('light'); }); + afterEach(() => { + __resetThemeManager(); + }); + describe('Rendering', () => { it('renders an icon button', () => { render(ThemeSwitch, { context });