Files

48 lines
1.3 KiB
TypeScript

import type { WishlistAction, WishlistItem, WishlistState } from './entities';
export function wishlistReducer(state: WishlistState, action: WishlistAction): WishlistState {
switch (action.type) {
case 'TOGGLE_ITEM': {
const exists = state.items.some((item) => item.id === action.payload.id);
if (exists) {
return {
...state,
items: state.items.filter((item) => item.id !== action.payload.id),
};
}
return { ...state, items: [...state.items, action.payload] };
}
case 'REMOVE_ITEM':
return {
...state,
items: state.items.filter((item) => item.id !== action.payload),
};
case 'CLEAR_WISHLIST':
return { ...state, items: [] };
case 'RESTORE_ITEMS':
return { ...state, items: action.payload };
case 'TOGGLE_DRAWER':
return { ...state, isOpen: !state.isOpen };
case 'OPEN_DRAWER':
return { ...state, isOpen: true };
case 'CLOSE_DRAWER':
return { ...state, isOpen: false };
default:
return state;
}
}
export function isInWishlist(items: WishlistItem[], id: string): boolean {
return items.some((item) => item.id === id);
}
export function getWishlistCount(items: WishlistItem[]): number {
return items.length;
}