Merge branch 'codex/feature/homepage-stats-scope'

This commit is contained in:
Tommaso Casaburi
2026-06-03 14:48:16 +07:00
40 changed files with 420 additions and 181 deletions
@@ -6,6 +6,7 @@ const flushMicrotasks = async () => {
};
const loadBlotterVisibilityStore = async () => (await import('../use-blotter-visibility-store')).default;
const loadHomepageStatsOptionsStore = async () => (await import('../use-homepage-stats-options-store')).default;
const loadModQueueStore = async () => (await import('../use-mod-queue-store')).default;
const loadPopularThreadsOptionsStore = async () => (await import('../use-popular-threads-options-store')).default;
@@ -56,6 +57,17 @@ describe('persisted extra stores', () => {
expect(localStorage.getItem('showNsfwContentOnly')).toBe('true');
});
it('loads homepage stats scope from localStorage defaults and persists changes', async () => {
const useHomepageStatsOptionsStore = await loadHomepageStatsOptionsStore();
expect(useHomepageStatsOptionsStore.getState().statsScope).toBe('directory');
useHomepageStatsOptionsStore.getState().setStatsScope('all');
expect(useHomepageStatsOptionsStore.getState().statsScope).toBe('all');
expect(localStorage.getItem('5chan-homepage-stats-scope')).toBe('all');
});
it('migrates legacy mod queue storage and computes threshold seconds from the active unit', async () => {
localStorage.setItem(
'mod-queue-storage',
@@ -0,0 +1,22 @@
import { create } from 'zustand';
export type HomepageStatsScope = 'directory' | 'all';
const LOCALSTORAGE_KEY = '5chan-homepage-stats-scope';
const readInitialStatsScope = (): HomepageStatsScope => (localStorage.getItem(LOCALSTORAGE_KEY) === 'all' ? 'all' : 'directory');
interface HomepageStatsOptionsStore {
statsScope: HomepageStatsScope;
setStatsScope: (value: HomepageStatsScope) => void;
}
const useHomepageStatsOptionsStore = create<HomepageStatsOptionsStore>((set) => ({
statsScope: readInitialStatsScope(),
setStatsScope: (value) => {
set({ statsScope: value });
localStorage.setItem(LOCALSTORAGE_KEY, value);
},
}));
export default useHomepageStatsOptionsStore;