diff --git a/src/routes/events/[event_id]/(leads)/leads/exhibit/[exhibit_id]/ae_comp__lead_manual_search.svelte b/src/routes/events/[event_id]/(leads)/leads/exhibit/[exhibit_id]/ae_comp__lead_manual_search.svelte index 66239994..ddf4452d 100644 --- a/src/routes/events/[event_id]/(leads)/leads/exhibit/[exhibit_id]/ae_comp__lead_manual_search.svelte +++ b/src/routes/events/[event_id]/(leads)/leads/exhibit/[exhibit_id]/ae_comp__lead_manual_search.svelte @@ -4,10 +4,12 @@ * Manual Attendee Search for adding leads. */ import { page } from '$app/state'; + import { liveQuery } from 'dexie'; + import { db_events } from '$lib/ae_events/db_events'; import { ae_api } from '$lib/stores/ae_stores'; import { events_loc } from '$lib/stores/ae_events_stores'; import { events_func } from '$lib/ae_events_functions'; - import { Search, UserPlus, CheckCircle, LoaderCircle } from 'lucide-svelte'; + import { Search, UserPlus, CheckCircle, LoaderCircle, Eye } from 'lucide-svelte'; import type { ae_EventBadge } from '$lib/types/ae_types'; import { ae_util } from '$lib/ae_utils/ae_utils'; @@ -18,6 +20,24 @@ let { exhibit_id, on_lead_added }: Props = $props(); + // Track existing leads to prevent duplicates in UI + let existing_leads_map = $derived( + liveQuery(async () => { + const leads = await db_events.exhibit_tracking + .where('event_exhibit_id') + .equals(exhibit_id) + .toArray(); + + // Map badge_id -> tracking_id + const map = new Map(); + leads.forEach(l => { + const b_id = l.event_badge_id_random || l.event_badge_id?.toString(); + if (b_id) map.set(b_id, l.event_exhibit_tracking_id_random || l.event_exhibit_tracking_id?.toString()); + }); + return map; + }) + ); + let search_query = $state(''); let results: ae_EventBadge[] = $state([]); let searching = $state(false); @@ -105,19 +125,30 @@
Point camera at the badge QR code
+ {:else if scanning_status === 'already_added'} +{found_badge?.full_name || 'Attendee'}
+This attendee is already in your leads list.
+