From 9bde3df74df36eb16d72b858bcfcde449404caf2 Mon Sep 17 00:00:00 2001 From: Rajarshee Chatterjee Date: Mon, 7 Sep 2026 21:13:47 +0530 Subject: [PATCH] fix: Prevent Novel Screen Empty State Flash (Closes #2034) --- .../__tests__/novelStore.bootstrap.test.ts | 16 ++++++++++++++++ src/hooks/persisted/useNovel/store/novelStore.ts | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/hooks/persisted/useNovel/__tests__/novelStore.bootstrap.test.ts b/src/hooks/persisted/useNovel/__tests__/novelStore.bootstrap.test.ts index 2863aa36..8f8f606a 100644 --- a/src/hooks/persisted/useNovel/__tests__/novelStore.bootstrap.test.ts +++ b/src/hooks/persisted/useNovel/__tests__/novelStore.bootstrap.test.ts @@ -1,6 +1,7 @@ import { NovelInfo } from '@database/types'; import { getString } from '@i18n/translations'; import { createNovelStoreActions } from '../store/novelStore.actions'; +import { createNovelSlice } from '../store/novelStore'; interface BootstrapServiceSlice { bootstrapNovelAsync: jest.Mock; @@ -88,6 +89,21 @@ describe('novelStore.bootstrap', () => { jest.clearAllMocks(); }); + it('starts in a loading state until the initial bootstrap completes', () => { + const state = createNovelSlice({ + pluginId: 'plugin.test', + novelPath: '/x', + initialNovelSettings: { + sort: 'positionAsc', + filter: [], + showChapterTitles: true, + }, + }); + + expect(state.loading).toBe(true); + expect(state.fetching).toBe(true); + }); + it('maps a missing novel to the not-found error', async () => { const harness = createHarness(); harness.bootstrapService.bootstrapNovelAsync.mockResolvedValue({ diff --git a/src/hooks/persisted/useNovel/store/novelStore.ts b/src/hooks/persisted/useNovel/store/novelStore.ts index 25185c68..b2539ffa 100644 --- a/src/hooks/persisted/useNovel/store/novelStore.ts +++ b/src/hooks/persisted/useNovel/store/novelStore.ts @@ -21,8 +21,8 @@ export const createNovelSlice = ({ initialLastRead, }: CreateNovelStoreParams) => { return { - loading: false, - fetching: false, + loading: true, + fetching: true, error: undefined, pluginId, novelPath,