From 7eba4cfaeb5a730669dac7c2218fa2cfb7e24785 Mon Sep 17 00:00:00 2001 From: Z User Date: Wed, 28 Oct 2026 03:08:54 +0000 Subject: [PATCH] feat: SwipeRow integrated into Leads Finder review queue Pending leads now render as SwipeableLeadCard (ReactBits SwipeRow): - Swipe right: approve (green action) - Swipe right (second action): snooze (gray) - Swipe left: reject (dismiss action) - Full swipe with commit at 55% threshold - Score badge + company name + website + city + score label - Selecting a lead opens the detail panel Non-pending leads (approved/rejected/converted) keep the simple button card for review history. 0 TS errors, ESLint clean, 0 console errors. --- src/components/aos/views/leads.tsx | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/components/aos/views/leads.tsx b/src/components/aos/views/leads.tsx index ba81923..9272132 100755 --- a/src/components/aos/views/leads.tsx +++ b/src/components/aos/views/leads.tsx @@ -17,6 +17,7 @@ import { Filter, ArrowRight, } from 'lucide-react' +import { SwipeableLeadCard } from '../swipeable-lead-card' import { useFetch } from '@/hooks/use-fetch' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' @@ -207,6 +208,28 @@ export function LeadsView() {
{filtered.map((l) => { const meta = STATUS_META[l.status] ?? STATUS_META.pending + // Pending leads get SwipeRow (swipe to approve/reject/snooze) + if (l.status === 'pending') { + return ( +
+ { setSelectedId(id); review(id, 'approved') }} + onReject={(id) => { setSelectedId(id); review(id, 'rejected', 'Nicht zur Zielgruppe') }} + onSnooze={(id) => { setSelectedId(id); review(id, 'snoozed', 'Später erneut prüfen') }} + /> +
+ ) + } + // Non-pending leads keep the simple button card return (