2753d1717c
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
import { create } from 'zustand'
|
|
import type { UnifiedMatchResult } from '../domain/unifiedResult'
|
|
|
|
const MAX_COMPARE_ITEMS = 4
|
|
|
|
interface CompareState {
|
|
compareItems: UnifiedMatchResult[]
|
|
addToCompare: (result: UnifiedMatchResult) => void
|
|
removeFromCompare: (matchId: string) => void
|
|
clearCompare: () => void
|
|
isInCompare: (matchId: string) => boolean
|
|
isFull: () => boolean
|
|
}
|
|
|
|
export const useCompareStore = create<CompareState>((set, get) => ({
|
|
compareItems: [],
|
|
addToCompare: (result) =>
|
|
set((state) => {
|
|
if (state.compareItems.length >= MAX_COMPARE_ITEMS) return state
|
|
if (state.compareItems.some(i => i.matchId === result.matchId)) return state
|
|
return { compareItems: [...state.compareItems, result] }
|
|
}),
|
|
removeFromCompare: (matchId) =>
|
|
set((state) => ({ compareItems: state.compareItems.filter(i => i.matchId !== matchId) })),
|
|
clearCompare: () => set({ compareItems: [] }),
|
|
isInCompare: (matchId) => get().compareItems.some(i => i.matchId === matchId),
|
|
isFull: () => get().compareItems.length >= MAX_COMPARE_ITEMS,
|
|
}))
|