Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 4x | import { create } from "zustand";
import { IGenre, ISortingOption } from "@/interfaces";
import { sortingOptions } from "@/utils/constants";
interface IFiltersStore {
sortBy: ISortingOption;
releaseDate: {
start: null | Date;
end: null | Date;
};
selectedGenres: IGenre[];
setSort: (param: ISortingOption) => void;
setStartDate: (param: Date | null) => void;
setEndDate: (param: Date | null) => void;
setGenres: (param: IGenre) => void;
}
const useFiltersStore = create<IFiltersStore>((set) => ({
sortBy: sortingOptions[0],
releaseDate: {
start: null,
end: null,
},
selectedGenres: [],
setSort: (sortingOption) =>
set({
sortBy: sortingOption,
}),
setStartDate: (startDate: null | Date) => {
set((state) => ({
releaseDate: { ...state.releaseDate, start: startDate },
}));
},
setEndDate: (endDate: null | Date) => {
set((state) => ({
releaseDate: { ...state.releaseDate, end: endDate },
}));
},
setGenres: (genre: IGenre) => {
set((state) => {
const updatedGenres = [...state.selectedGenres];
if (updatedGenres.includes(genre)) {
return {
selectedGenres: updatedGenres.filter((selectedGenre) => selectedGenre.id !== genre.id),
};
} else {
updatedGenres.push(genre);
return { selectedGenres: updatedGenres };
}
});
},
}));
export default useFiltersStore;
|