feat: F014 compare view — side-by-side decision table with AI summary
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+16
-15
@@ -1,27 +1,28 @@
|
||||
import { create } from 'zustand'
|
||||
import type { UnifiedMatchResult } from '../domain/unifiedResult'
|
||||
|
||||
const MAX_COMPARE_ITEMS = 3
|
||||
const MAX_COMPARE_ITEMS = 4
|
||||
|
||||
interface CompareState {
|
||||
compareTray: string[]
|
||||
addToCompare: (propertyId: string) => void
|
||||
removeFromCompare: (propertyId: string) => void
|
||||
compareItems: UnifiedMatchResult[]
|
||||
addToCompare: (result: UnifiedMatchResult) => void
|
||||
removeFromCompare: (matchId: string) => void
|
||||
clearCompare: () => void
|
||||
isInCompare: (propertyId: string) => boolean
|
||||
isInCompare: (matchId: string) => boolean
|
||||
isFull: () => boolean
|
||||
}
|
||||
|
||||
export const useCompareStore = create<CompareState>((set, get) => ({
|
||||
compareTray: [],
|
||||
addToCompare: (propertyId) =>
|
||||
compareItems: [],
|
||||
addToCompare: (result) =>
|
||||
set((state) => {
|
||||
if (state.compareTray.length >= MAX_COMPARE_ITEMS) return state
|
||||
if (state.compareTray.includes(propertyId)) return state
|
||||
return { compareTray: [...state.compareTray, propertyId] }
|
||||
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: (propertyId) =>
|
||||
set((state) => ({ compareTray: state.compareTray.filter(id => id !== propertyId) })),
|
||||
clearCompare: () => set({ compareTray: [] }),
|
||||
isInCompare: (propertyId) => get().compareTray.includes(propertyId),
|
||||
isFull: () => get().compareTray.length >= MAX_COMPARE_ITEMS,
|
||||
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,
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user