mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-20 07:26:19 +00:00
feat(navigator): add currentTabCode + currentFilter to UI store (P2 prep)
setTab(code) atomically updates currentTabCode and resets currentFilter to '' — switching tabs starts a fresh search context. setFilter(value) updates only the filter — the user is typing in the same tab. TDD: 3 new cases (16 total in navigatorUiStore.test).
This commit is contained in:
@@ -10,7 +10,9 @@ const INITIAL = {
|
|||||||
isOpenSavesSearches: false,
|
isOpenSavesSearches: false,
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
needsInit: true,
|
needsInit: true,
|
||||||
needsSearch: false
|
needsSearch: false,
|
||||||
|
currentTabCode: '',
|
||||||
|
currentFilter: ''
|
||||||
};
|
};
|
||||||
|
|
||||||
describe('useNavigatorUiStore', () =>
|
describe('useNavigatorUiStore', () =>
|
||||||
@@ -32,6 +34,8 @@ describe('useNavigatorUiStore', () =>
|
|||||||
expect(s.isLoading).toBe(false);
|
expect(s.isLoading).toBe(false);
|
||||||
expect(s.needsInit).toBe(true);
|
expect(s.needsInit).toBe(true);
|
||||||
expect(s.needsSearch).toBe(false);
|
expect(s.needsSearch).toBe(false);
|
||||||
|
expect(s.currentTabCode).toBe('');
|
||||||
|
expect(s.currentFilter).toBe('');
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('show / hide / toggle', () =>
|
describe('show / hide / toggle', () =>
|
||||||
@@ -141,4 +145,31 @@ describe('useNavigatorUiStore', () =>
|
|||||||
expect(useNavigatorUiStore.getState().needsSearch).toBe(false);
|
expect(useNavigatorUiStore.getState().needsSearch).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('tab + filter', () =>
|
||||||
|
{
|
||||||
|
it("setTab('public') sets currentTabCode and clears currentFilter", () =>
|
||||||
|
{
|
||||||
|
useNavigatorUiStore.setState({ currentTabCode: 'events', currentFilter: 'habbo' });
|
||||||
|
useNavigatorUiStore.getState().setTab('public');
|
||||||
|
expect(useNavigatorUiStore.getState().currentTabCode).toBe('public');
|
||||||
|
expect(useNavigatorUiStore.getState().currentFilter).toBe('');
|
||||||
|
});
|
||||||
|
|
||||||
|
it("setFilter('cocco') sets currentFilter without touching tab", () =>
|
||||||
|
{
|
||||||
|
useNavigatorUiStore.getState().setTab('events');
|
||||||
|
useNavigatorUiStore.getState().setFilter('cocco');
|
||||||
|
expect(useNavigatorUiStore.getState().currentTabCode).toBe('events');
|
||||||
|
expect(useNavigatorUiStore.getState().currentFilter).toBe('cocco');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('setTab on same code still resets currentFilter', () =>
|
||||||
|
{
|
||||||
|
useNavigatorUiStore.setState({ currentTabCode: 'public', currentFilter: 'test' });
|
||||||
|
useNavigatorUiStore.getState().setTab('public');
|
||||||
|
expect(useNavigatorUiStore.getState().currentTabCode).toBe('public');
|
||||||
|
expect(useNavigatorUiStore.getState().currentFilter).toBe('');
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ export type NavigatorUiState = {
|
|||||||
isLoading: boolean;
|
isLoading: boolean;
|
||||||
needsInit: boolean;
|
needsInit: boolean;
|
||||||
needsSearch: boolean;
|
needsSearch: boolean;
|
||||||
|
currentTabCode: string;
|
||||||
|
currentFilter: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type NavigatorUiActions = {
|
export type NavigatorUiActions = {
|
||||||
@@ -28,6 +30,8 @@ export type NavigatorUiActions = {
|
|||||||
markInitDone(): void;
|
markInitDone(): void;
|
||||||
requestSearch(): void;
|
requestSearch(): void;
|
||||||
consumeSearchRequest(): void;
|
consumeSearchRequest(): void;
|
||||||
|
setTab(code: string): void;
|
||||||
|
setFilter(value: string): void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useNavigatorUiStore = createNitroStore<NavigatorUiState & NavigatorUiActions>()((set) => ({
|
export const useNavigatorUiStore = createNitroStore<NavigatorUiState & NavigatorUiActions>()((set) => ({
|
||||||
@@ -40,6 +44,8 @@ export const useNavigatorUiStore = createNitroStore<NavigatorUiState & Navigator
|
|||||||
isLoading: false,
|
isLoading: false,
|
||||||
needsInit: true,
|
needsInit: true,
|
||||||
needsSearch: false,
|
needsSearch: false,
|
||||||
|
currentTabCode: '',
|
||||||
|
currentFilter: '',
|
||||||
|
|
||||||
show: () => set({ isVisible: true, needsSearch: true }),
|
show: () => set({ isVisible: true, needsSearch: true }),
|
||||||
hide: () => set({ isVisible: false }),
|
hide: () => set({ isVisible: false }),
|
||||||
@@ -57,5 +63,7 @@ export const useNavigatorUiStore = createNitroStore<NavigatorUiState & Navigator
|
|||||||
markReady: () => set({ isReady: true }),
|
markReady: () => set({ isReady: true }),
|
||||||
markInitDone: () => set({ needsInit: false }),
|
markInitDone: () => set({ needsInit: false }),
|
||||||
requestSearch: () => set({ needsSearch: true }),
|
requestSearch: () => set({ needsSearch: true }),
|
||||||
consumeSearchRequest: () => set({ needsSearch: false })
|
consumeSearchRequest: () => set({ needsSearch: false }),
|
||||||
|
setTab: (code) => set({ currentTabCode: code, currentFilter: '' }),
|
||||||
|
setFilter: (value) => set({ currentFilter: value })
|
||||||
}));
|
}));
|
||||||
|
|||||||
Reference in New Issue
Block a user