mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
feat(home): redesign boards list to match 4chan with filtering and catalog support
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import { create } from 'zustand';
|
||||
|
||||
export type BoardFilter = 'all' | 'nsfw' | 'worksafe';
|
||||
|
||||
interface BoardsFilterStore {
|
||||
useCatalogLinks: boolean;
|
||||
setUseCatalogLinks: (value: boolean) => void;
|
||||
boardFilter: BoardFilter;
|
||||
setBoardFilter: (value: BoardFilter) => void;
|
||||
}
|
||||
|
||||
const getStoredUseCatalogLinks = (): boolean => {
|
||||
try {
|
||||
const stored = localStorage.getItem('5chan-boards-use-catalog');
|
||||
return stored === 'true';
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
const getStoredBoardFilter = (): BoardFilter => {
|
||||
try {
|
||||
const stored = localStorage.getItem('5chan-boards-filter') as BoardFilter;
|
||||
return stored === 'nsfw' || stored === 'worksafe' ? stored : 'all';
|
||||
} catch {
|
||||
return 'all';
|
||||
}
|
||||
};
|
||||
|
||||
const useBoardsFilterStore = create<BoardsFilterStore>((set) => ({
|
||||
useCatalogLinks: getStoredUseCatalogLinks(),
|
||||
setUseCatalogLinks: (value: boolean) => {
|
||||
set({ useCatalogLinks: value });
|
||||
try {
|
||||
localStorage.setItem('5chan-boards-use-catalog', value.toString());
|
||||
} catch (error) {
|
||||
console.warn('Failed to save useCatalogLinks to localStorage:', error);
|
||||
}
|
||||
},
|
||||
boardFilter: getStoredBoardFilter(),
|
||||
setBoardFilter: (value: BoardFilter) => {
|
||||
set({ boardFilter: value });
|
||||
try {
|
||||
localStorage.setItem('5chan-boards-filter', value);
|
||||
} catch (error) {
|
||||
console.warn('Failed to save boardFilter to localStorage:', error);
|
||||
}
|
||||
},
|
||||
}));
|
||||
|
||||
export default useBoardsFilterStore;
|
||||
@@ -1,7 +1,7 @@
|
||||
import { create } from 'zustand';
|
||||
import { NavigateFunction } from 'react-router-dom';
|
||||
|
||||
const DISCLAIMER_ACCEPTED_KEY = '5chan-disclaimer-accepted';
|
||||
export const DISCLAIMER_ACCEPTED_KEY = '5chan-disclaimer-accepted';
|
||||
|
||||
interface DisclaimerModalState {
|
||||
showModal: boolean;
|
||||
|
||||
Reference in New Issue
Block a user