diff --git a/src/lib/ae_events_functions.ts b/src/lib/ae_events_functions.ts index 4d59b6ef..7fbde6e4 100644 --- a/src/lib/ae_events_functions.ts +++ b/src/lib/ae_events_functions.ts @@ -41,8 +41,6 @@ async function handle_load_ae_obj_id__event({api_cfg, event_id, try_cache=false} } - - // Updated 2024-03-06 async function handle_load_ae_obj_li__badge({api_cfg, event_id, params={}, try_cache=true}: {api_cfg: any, event_id: any, params: any, try_cache?: boolean}) { console.log(`*** handle_load_ae_obj_li__badge() *** event_id=${event_id}`); @@ -123,6 +121,68 @@ async function handle_load_ae_obj_li__badge({api_cfg, event_id, params={}, try_c } + +async function handle_search__event_badge({api_cfg, event_id, fulltext_search_qry_str, params={}, try_cache=true}) { + console.log(`*** handle_search__event_badge() *** event_id=${event_id}`); + + let enabled: string = (params.qry__enabled ?? 'enabled'); // all, disabled, enabled + let hidden: string = (params.qry__hidden ?? 'not_hidden'); // all, hidden, not_hidden + let limit: number = (params.qry__limit ?? 25); // 99 + let offset: number = (params.qry__offset ?? 0); // 0 + + let params_json: key_val = {}; + if (fulltext_search_qry_str && fulltext_search_qry_str.length > 2) { + params_json['ft_qry'] = { + 'default_qry_str': fulltext_search_qry_str, + // 'location_address_json_ext': fulltext_search_qry_str, // JSON extracted text DB field + // 'contact_li_json_ext': fulltext_search_qry_str, // JSON extracted text DB field + }; + } + + // $events_sess.badges.status_qry__search = 'loading'; + ae_promises.search__event_badge = await api.get_ae_obj_li_for_obj_id_crud({ + api_cfg: api_cfg, + obj_type: 'event_badge', + for_obj_type: 'event', + for_obj_id: event_id, + use_alt_table: false, // NOTE: This will use the table_name_alt value instead of the table_name value in the API config. + use_alt_base: false, // NOTE: This will use the base_name_alt value instead of the base_name value in the API config. + enabled: enabled, + hidden: hidden, + order_by_li: {'priority': 'DESC', 'sort': 'DESC', 'updated_on': 'DESC', 'created_on': 'DESC'}, + // order_by_li: {'priority': 'DESC', 'sort': 'DESC', 'created_on': 'DESC', 'updated_on': 'DESC'}, + limit: limit, + offset: offset, + params_json: params_json, + params: params, + log_lvl: 1 + }) + + .then(function (badge_obj_li_get_result) { + // console.log('Badge list:', badge_obj_li_get_result); + if (badge_obj_li_get_result) { + // $slct.badge_obj_li = badge_obj_li_get_result; + handle_db_save_ae_obj_li__badge({obj_type: 'event_badge', obj_li: badge_obj_li_get_result}); + return badge_obj_li_get_result; + } else { + // $slct.badge_obj_li = []; + return []; + } + }) + .catch(function (error) { + console.log('No results returned or failed.', error); + }) + .finally(function () { + // $events_sess.badges.status_qry__search = 'done'; + + // console.log('Badge list:', badge_obj_li_get_result); + // return badge_obj_li_get_result; + }); + + console.log('ae_promises.search__event_badge:', ae_promises.search__event_badge); + return ae_promises.search__event_badge; +} + async function handle_load_ae_obj_id__exhibit({api_cfg, exhibit_id, try_cache=false}) { console.log(`*** handle_load_ae_obj_id__exhibit() *** exhibit_id=${exhibit_id}`); @@ -532,6 +592,7 @@ function handle_db_save_ae_obj_li__exhibitor_tracking({obj_type, obj_li}) { let export_obj = { handle_load_ae_obj_id__event: handle_load_ae_obj_id__event, handle_load_ae_obj_li__badge: handle_load_ae_obj_li__badge, + handle_search__event_badge: handle_search__event_badge, handle_load_ae_obj_id__exhibit: handle_load_ae_obj_id__exhibit, handle_load_ae_obj_li__exhibit: handle_load_ae_obj_li__exhibit, handle_load_ae_obj_li__exhibit_tracking: handle_load_ae_obj_li__exhibit_tracking, diff --git a/src/lib/db_events.ts b/src/lib/db_events.ts index 450d89a1..c2d60bfd 100644 --- a/src/lib/db_events.ts +++ b/src/lib/db_events.ts @@ -140,9 +140,12 @@ export class MySubClassedDexie extends Dexie { super('ae_events_db'); this.version(1).stores({ // badges: '++id, full_name, email' // Primary key and indexed props - badges: 'id_random, event_badge_id_random, full_name, full_name_override, email, email_override, affiliations, affiliations_override, badge_type, badge_type_code, badge_type_code_override, badge_type_override, external_event_id, external_id, external_person_id, enable, hide, priority, sort, group, notes, created_on, updated_on', - exhibits: 'id_random, event_exhibit_id_random, code, name, description, staff_passcode, data_json, license_max, license_li_json, cfg_json, enable, hide, priority, sort, group, notes, created_on, updated_on', - exhibit_tracking: 'id_random, event_exhibit_tracking_id_random, event_exhibit_id_random, event_badge_id_random, event_person_id_random, exhibitor_notes, responses_json, data_json, event_badge_full_name, event_badge_email, enable, hide, priority, sort, group, notes, created_on, updated_on' + badges: ` + id_random, event_badge_id_random, event_id_random, full_name, full_name_override, email, email_override, affiliations, affiliations_override, badge_type, badge_type_code, badge_type_code_override, badge_type_override, external_event_id, external_id, external_person_id, enable, hide, priority, sort, group, notes, created_on, updated_on`, + exhibits: ` + id_random, event_exhibit_id_random, code, name, description, staff_passcode, data_json, license_max, license_li_json, cfg_json, enable, hide, priority, sort, group, notes, created_on, updated_on, [priority+name]`, + exhibit_tracking: ` + id_random, event_exhibit_tracking_id_random, event_exhibit_id_random, event_badge_id_random, event_person_id_random, exhibitor_notes, responses_json, data_json, event_badge_full_name, event_badge_email, enable, hide, priority, sort, group, notes, created_on, updated_on` }); } } diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 015cb166..45a1d5e0 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -52,6 +52,7 @@ storePopup.set({ computePosition, autoUpdate, flip, shift, offset, arrow }); import { api } from '$lib/api'; import { ae_loc, ae_sess, ae_api, slct, slct_trigger } from '$lib/ae_stores'; +import { events_loc, events_slct } from '$lib/ae_events_stores'; import type { key_val } from '$lib/ae_stores'; // console.log($ae_loc, $ae_sess, $ae_api); @@ -60,6 +61,21 @@ import Element_app_cfg from '$lib/element_app_cfg.svelte'; import Element_data_store from '$lib/element_data_store.svelte'; +if (data.url.searchParams.get('event_id')) { + $events_slct.event_id = data.url.searchParams.get('event_id'); + $events_loc.event_id = data.url.searchParams.get('event_id'); +} else if (data.ae_loc.site_cfg_json.slct__event_id) { + $events_slct.event_id = data.ae_loc.site_cfg_json.slct__event_id; + $events_loc.event_id = data.ae_loc.site_cfg_json.slct__event_id; +} else if ($events_slct.event_id) { + console.log(`Event ID already set:`, $events_slct.event_id); + $events_loc.event_id = $events_slct.event_id; +} else if (data.ae_loc.default__event_id) { + $events_slct.event_id = data.ae_loc.default__event_id; + $events_loc.event_id = data.ae_loc.default__event_id; +} else { + console.log(`No Event ID set.`); +} onMount(() => { diff --git a/src/routes/events_leads/+page.svelte b/src/routes/events_leads/+page.svelte index e23409a9..39d4aeb3 100644 --- a/src/routes/events_leads/+page.svelte +++ b/src/routes/events_leads/+page.svelte @@ -24,23 +24,24 @@ let event_exhibit_obj_li = liveQuery( // .equals('99999') .above(0) .sortBy('name') // Use sortBy() instead of orderBy(). toArray() is also not needed??? + // .sortBy('[priority+name]') // .orderBy('name') // .offset(10).limit(5) // .toArray() ); // This should probably be moved -if (data.url.searchParams.get('event_id')) { - $events_slct.event_id = data.url.searchParams.get('event_id'); -} else if (data.ae_loc.site_cfg_json.slct__event_id) { - $events_slct.event_id = data.ae_loc.site_cfg_json.slct__event_id; -} else if ($events_loc.default__event_id) { - $events_slct.event_id = $events_loc.default__event_id; -} else if ($events_slct.event_id) { - console.log(`Event ID already set:`, $events_slct.event_id); -} else { - console.log(`No Event ID set.`); -} +// if (data.url.searchParams.get('event_id')) { +// $events_slct.event_id = data.url.searchParams.get('event_id'); +// } else if (data.ae_loc.site_cfg_json.slct__event_id) { +// $events_slct.event_id = data.ae_loc.site_cfg_json.slct__event_id; +// } else if ($events_loc.default__event_id) { +// $events_slct.event_id = $events_loc.default__event_id; +// } else if ($events_slct.event_id) { +// console.log(`Event ID already set:`, $events_slct.event_id); +// } else { +// console.log(`No Event ID set.`); +// } // export let event_exhibit_staff_passcode: string = ''; let disable_open_lead_retrieval_btn: boolean = true; diff --git a/src/routes/events_leads/exhibit/[slug]/leads_add_scan.svelte b/src/routes/events_leads/exhibit/[slug]/leads_add_scan.svelte index 234ec80e..b992f921 100644 --- a/src/routes/events_leads/exhibit/[slug]/leads_add_scan.svelte +++ b/src/routes/events_leads/exhibit/[slug]/leads_add_scan.svelte @@ -7,31 +7,67 @@ import { liveQuery } from "dexie"; import { db_events } from "$lib/db_events"; import { ae_loc, ae_sess, ae_api, slct, slct_trigger } from '$lib/ae_stores'; import { events_loc, events_sess, events_slct, events_trigger } from '$lib/ae_events_stores'; +import { events_func } from '$lib/ae_events_functions'; import Element_qr_scanner from '$lib/element_qr_scanner.svelte'; // let param_slug_event_exhibit_id = data.params.slug; - +console.log(`ae_events_leads exhibit [slug] leads_add_scan.svelte:`, $events_slct); let event_exhibit_obj = liveQuery( () => db_events.exhibits.get($events_slct.exhibit_id) ); +$events_sess.leads.entered_search_str = 'Albert Einstein'; +// $events_sess.leads.entered_search_str = 'Albert Einstein'; + +let tmp_search_terms = $events_sess.leads.entered_search_str.split(' ') + +// Version 2: This does not work yet +let event_badge_obj_li = liveQuery( + // () => db_events.exhibits.toArray() + () => db_events.badges + // .where({event_exhibit_id_random: $events_slct.exhibit_id, enable: true, hide: false}) + // .where({event_id_random: $events_loc.event_id}) + .where('event_id_random').equals($events_loc.event_id) + // .where('event_id_random').equals($events_slct.event_id) + .or('full_name').equalsIgnoreCase($events_sess.leads.entered_search_str) + // .and('full_name').anyOfIgnoreCase([$events_sess.leads.entered_search_str, 'Sasa Vukelic']) + // .where('full_name').anyOfIgnoreCase(tmp_search_terms) + // .and('enable').equals(true) + .sortBy('full_name') // Use sortBy() instead of orderBy(). toArray() is also not needed??? + // .toArray() + + // , full_name: 'Susan' + // Scott Idem + // Albert Einstein +); + + +// We are using Dexie.js for the database. This liveQuery should only show records that match the event_id and contain the search string. +// Version 3: This does not work yet +let event_badge_obj_li_v3 = liveQuery( + // () => db_events.exhibits.toArray() + () => db_events.badges + .where({event_exhibit_id_random: $events_slct.exhibit_id, full_name: $events_sess.leads.entered_search_str}) +); + + let search_submit_results: Promise|key_val; let scan_submit_results: Promise|key_val; -function handle_submit_form_search(event) { - console.log('*** handle_submit_form_search() ***'); - console.log(event); +async function handle_submit_form_search(event) { + console.log('*** handle_submit_form_search() ***', event); $events_sess.leads.submit_status__search = 'submitting'; - let search_str = $events_sess.leads.entered_search_str; + let search_str = $events_sess.leads.entered_search_str.trim(); console.log(search_str); - // search_submit_results = handle_search_for_person(search_str); + search_submit_results = await events_func.handle_search__event_badge({api_cfg: $ae_api, event_id: $event_exhibit_obj.event_id_random, fulltext_search_qry_str: search_str}); console.log(search_submit_results); } + function handle_qr_scan_result(event) { console.log('*** handle_qr_scan_result() ***'); @@ -230,13 +266,44 @@ function handle_qr_camera(event) { flex-col gap-4 justify-stretch - min-h-full + max-h-full min-w-full " >

Search

+ +
+
+ + + + + + +
+
+ + +
-
-
+
- - - +
+ {#if $event_badge_obj_li} + {#each $event_badge_obj_li as event_badge_obj, index} +
+ + {event_badge_obj.full_name} + + +
+ {/each} + {:else} +
No results yet
+ {/if} + +
+ -