diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 017ab98..5731189 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -625,6 +625,7 @@ function App() { onDecide={decide} onClear={clear} onClose={() => setShowReviewMode(false)} + onSelectListing={(id) => setSelectedListingId(id)} getDecision={getDecision} /> )} diff --git a/frontend/src/components/SwipeCard.tsx b/frontend/src/components/SwipeCard.tsx index 5fe7248..74c4850 100644 --- a/frontend/src/components/SwipeCard.tsx +++ b/frontend/src/components/SwipeCard.tsx @@ -7,13 +7,14 @@ import type { PropertyFeature } from '@/types'; interface SwipeCardProps { feature: PropertyFeature; onSwipe: (direction: 'left' | 'right' | 'up') => void; + onTap?: () => void; isTop: boolean; stackIndex: number; } const SWIPE_THRESHOLD = 100; -export function SwipeCard({ feature, onSwipe, isTop, stackIndex }: SwipeCardProps) { +export function SwipeCard({ feature, onSwipe, onTap, isTop, stackIndex }: SwipeCardProps) { const hasSwiped = useRef(false); const p = feature.properties; @@ -27,9 +28,14 @@ export function SwipeCard({ feature, onSwipe, isTop, stackIndex }: SwipeCardProp })); const bind = useDrag( - ({ active, movement: [mx, my], velocity: [vx, vy], direction: [dx, dy] }) => { + ({ active, movement: [mx, my], velocity: [vx, vy], direction: [dx, dy], tap }) => { if (!isTop || hasSwiped.current) return; + if (tap) { + onTap?.(); + return; + } + if (!active) { const isSwipeRight = mx > SWIPE_THRESHOLD || (vx > 0.5 && dx > 0); const isSwipeLeft = mx < -SWIPE_THRESHOLD || (vx > 0.5 && dx < 0); @@ -81,11 +87,11 @@ export function SwipeCard({ feature, onSwipe, isTop, stackIndex }: SwipeCardProp }} className="cursor-grab active:cursor-grabbing" > -