Getting the badge search really ready
This commit is contained in:
@@ -297,4 +297,12 @@ section.ae_quick_popover_small {
|
||||
max-height: 95%;
|
||||
min-width: 50%;
|
||||
max-width: 95%;
|
||||
}
|
||||
|
||||
|
||||
.fade_50 {
|
||||
opacity: 0.5;
|
||||
}
|
||||
.fade_50:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
@@ -191,6 +191,11 @@ async function handle_search__event_badge(
|
||||
|
||||
let params_json: key_val = {};
|
||||
|
||||
if (!fulltext_search_qry_str && !like_search_qry_str) {
|
||||
console.log('No search string provided!!!');
|
||||
return false; // Returning false instead of [] because no search was performed.
|
||||
}
|
||||
|
||||
if (fulltext_search_qry_str && fulltext_search_qry_str.length > 2) {
|
||||
params_json['ft_qry'] = {
|
||||
'default_qry_str': fulltext_search_qry_str,
|
||||
@@ -227,7 +232,7 @@ async function handle_search__event_badge(
|
||||
params_json['and_qry']['badge_type_code'] = type_code;
|
||||
}
|
||||
|
||||
let order_by_li = {'priority': 'DESC', 'sort': 'DESC', 'family_name': 'ASC', 'given_name': 'ASC', 'updated_on': 'DESC', 'created_on': 'DESC'};
|
||||
let order_by_li = {'print_count': 'ASC', 'priority': 'DESC', 'sort': 'DESC', 'given_name': 'ASC', 'family_name': 'ASC', 'updated_on': 'DESC', 'created_on': 'DESC'};
|
||||
|
||||
// $events_sess.badges.status_qry__search = 'loading';
|
||||
ae_promises.search__event_badge = await api.get_ae_obj_li_for_obj_id_crud({
|
||||
|
||||
@@ -50,6 +50,7 @@ export let ae_app_local_data_struct: key_val = {
|
||||
slct__event_id: null,
|
||||
slct__event_badge_template_id: null,
|
||||
slct__sponsorship_cfg_id: null,
|
||||
header_image_path: null,
|
||||
},
|
||||
|
||||
'page_access_code_li': {'administrator': '11500', 'trusted': '19111', 'authenticated': '00000'},
|
||||
|
||||
@@ -9,6 +9,7 @@ import { ae_util } from '$lib/ae_utils';
|
||||
import type { key_val } from '$lib/ae_stores';
|
||||
|
||||
export let expire_minutes: number = 10;
|
||||
export let mount_reload_sec: number = 0;
|
||||
|
||||
export let ds_code: string;
|
||||
export let ds_name: null|string = null;
|
||||
@@ -133,12 +134,14 @@ onMount(() => {
|
||||
console.log('Element: Data Store element_data_store.svelte');
|
||||
// console.log('ae_ MOUNTED Browser detected.');
|
||||
|
||||
// Wait for random number of milliseconds to avoid all data stores being reloaded at the same time.
|
||||
let random_ms = Math.floor(Math.random() * 15000);
|
||||
console.log(`ae_e_data_store: Random number of milliseconds: ${random_ms}`);
|
||||
setTimeout(() => {
|
||||
trigger = 'load__ds__code';
|
||||
}, random_ms);
|
||||
if (mount_reload_sec) {
|
||||
// Wait for random number of milliseconds to avoid all data stores being reloaded at the same time.
|
||||
let random_ms = Math.floor(Math.random() * mount_reload_sec * 1000);
|
||||
console.log(`ae_e_data_store: Random number of milliseconds: ${random_ms}`);
|
||||
setTimeout(() => {
|
||||
trigger = 'load__ds__code';
|
||||
}, random_ms);
|
||||
}
|
||||
});
|
||||
|
||||
// let ds_code_li = {}; //: key_val; // = ae_loc_tmp.ds;
|
||||
|
||||
@@ -150,6 +150,7 @@ export async function load({ fetch, params, parent, route, url }) { // params, r
|
||||
ae_loc_init['site_id'] = site_domain_results.site_id_random;
|
||||
ae_loc_init['site_domain_id'] = site_domain_results.site_domain_id_random;
|
||||
ae_loc_init['site_enable'] = site_domain_results.enable;
|
||||
ae_loc_init['site_header_image_path'] = site_domain_results.header_image_path;
|
||||
ae_loc_init['site_style_href'] = site_domain_results.style_href;
|
||||
ae_loc_init['site_google_tracking_id'] = site_domain_results.google_tracking_id;
|
||||
ae_loc_init['site_cfg_json'] = site_domain_results.cfg_json;
|
||||
|
||||
@@ -117,6 +117,7 @@ onMount(() => {
|
||||
|
||||
<section
|
||||
class="submenu flex flex-row justify-center"
|
||||
class:hidden={$ae_loc.iframe}
|
||||
>
|
||||
|
||||
<span class="btn-group variant-soft-secondary px-4 py-2">
|
||||
|
||||
@@ -15,7 +15,9 @@ import { ae_loc, ae_sess, ae_api, ae_trig, slct, slct_trigger } from '$lib/ae_st
|
||||
import { events_loc, events_sess, events_slct, events_trigger } from '$lib/ae_events_stores';
|
||||
|
||||
import Element_qr_scanner from '$lib/element_qr_scanner.svelte';
|
||||
import { goto } from '$app/navigation';
|
||||
import Element_ae_crud from '$lib/element_ae_crud.svelte';
|
||||
|
||||
import { goto } from '$app/navigation';
|
||||
|
||||
// The lq__ prefix is used to indicate that this is a liveQuery object and it should use the $ prefix when referencing the object.
|
||||
let lq__event_badge_li = liveQuery(
|
||||
@@ -37,15 +39,22 @@ $ae_loc.site_domain = data.url.origin;
|
||||
$events_loc.show_edit__event_badge_obj = false;
|
||||
$events_loc.show_view__event_badge_obj = false;
|
||||
|
||||
|
||||
// These will likely be used for patch/update triggers. Maybe delete?
|
||||
let ae_triggers: key_val = {};
|
||||
|
||||
let ae_event_badge_get_promise: Promise<any>;
|
||||
let ae_event_obj_get_promise;
|
||||
|
||||
if ($events_slct.event_id) {
|
||||
console.log('Selected Event ID:', $events_slct.event_id);
|
||||
$events_trigger = 'load__event_badge_obj_li';
|
||||
// $events_trigger = 'load__event_badge_obj_li';
|
||||
// $events_trigger = 'load__event_obj';
|
||||
}
|
||||
|
||||
// Reset this to an empty array.
|
||||
$events_slct.badge_obj_li = [];
|
||||
|
||||
// ISHLT 2024 badge type codes
|
||||
let badge_type_code_li = [{"code":"current_member","name":"Member"},{"code":"inactive_member","name":"Non-Member"},{"code":"current_member_trainee","name":"Trainee Member"},{"code":"inactive_member_trainee","name":"Trainee Non-Member"},{"code":"ex_all","name":"Exhibitor All Access"},{"code":"ex_booth","name":"Exhibitor Booth Staff"},{"code":"hftx","name":"HFTX Master Academy"},{"code":"mcs","name":"MCS Master Academy"},{"code":"pediatric","name":"Pediatric"},{"code":"guest","name":"Guest"},{"code":"staff","name":"Staff"},{"code":"volunteer","name":"Volunteer"},{"code":"test","name":"Test"}];
|
||||
|
||||
@@ -131,13 +140,14 @@ async function handle_load_ae_obj_id__event_badge({event_badge_id, try_cache=fal
|
||||
|
||||
// Updated 2024-03-06 late
|
||||
$: if ($events_trigger == 'load__event_badge_obj_li' && $events_slct.event_id) {
|
||||
console.log(`handle_load_ae_obj_id__event() $events_slct.event_id=${$events_slct.event_id} api_cfg=`, $ae_api);
|
||||
console.log(`load__event_badge_obj_li() $events_slct.event_id=${$events_slct.event_id}`);
|
||||
|
||||
$events_trigger = null;
|
||||
|
||||
if (!$events_sess.badges.fulltext_search_qry_str) {
|
||||
$events_sess.badges.fulltext_search_qry_str = '';
|
||||
}
|
||||
if (!$events_sess.badges.fulltext_search_qry_str || $events_sess?.badges.fulltext_search_qry_str.length <= 1 ) {
|
||||
$events_slct.badge_obj_li = [];
|
||||
// $events_sess.badges.fulltext_search_qry_str = '';
|
||||
} else {
|
||||
|
||||
let type_code = $events_sess.badges.search_badge_type_code;
|
||||
|
||||
@@ -157,9 +167,25 @@ $: if ($events_trigger == 'load__event_badge_obj_li' && $events_slct.event_id) {
|
||||
console.log(`"${search_str}"`);
|
||||
|
||||
let params = {
|
||||
'qry__enabled': 'enabled',
|
||||
'qry__hidden': 'not_hidden',
|
||||
'qry__limit': 35,
|
||||
}
|
||||
|
||||
if ($ae_loc.administrator_access) {
|
||||
params['qry__enabled'] = 'all';
|
||||
params['qry__hidden'] = 'all';
|
||||
params['qry__limit'] = 150;
|
||||
} else if ($ae_loc.trusted_access) {
|
||||
params['qry__enabled'] = 'enabled';
|
||||
params['qry__hidden'] = 'all';
|
||||
params['qry__limit'] = 75;
|
||||
} else {
|
||||
params['qry__enabled'] = 'enabled';
|
||||
params['qry__hidden'] = 'not_hidden';
|
||||
params['qry__limit'] = 35;
|
||||
}
|
||||
|
||||
if ($events_sess.status_qry__search == 'loading') {
|
||||
console.log('*** $events_sess.status_qry__search == loading ***');
|
||||
|
||||
@@ -205,6 +231,8 @@ $: if ($events_trigger == 'load__event_badge_obj_li' && $events_slct.event_id) {
|
||||
$events_sess.status_qry__search = 'done';
|
||||
});
|
||||
}
|
||||
|
||||
} // end if search string is valid
|
||||
}
|
||||
|
||||
|
||||
@@ -299,11 +327,15 @@ function handle_qr_camera(event) {
|
||||
class="ae_events_badges_review md:container h-full mx-auto"
|
||||
>
|
||||
|
||||
{#if $ae_loc.ds.hub__page__events_badges__create_info_header}
|
||||
{@html $ae_loc.ds.hub__page__events_badges__create_info_header}
|
||||
<!-- {#if $ae_loc.ds.hub__page__events_badges__create_info_header} -->
|
||||
{#if $ae_loc.iframe}
|
||||
<span class="flex flex-row items-center justify-center">
|
||||
<img src={$ae_loc.site_cfg_json.header_image_path} alt="header" class="w-auto max-h-20 m-2" />
|
||||
<h1 class="h3 text-center m-2">Review & Print<br>Your Badge</h1>
|
||||
</span>
|
||||
{:else}
|
||||
<header>
|
||||
<h1 class="h2">Badge Review - Search</h1>
|
||||
<h1 class="h2 text-center">Badge Review and Print</h1>
|
||||
</header>
|
||||
{/if}
|
||||
|
||||
@@ -311,10 +343,11 @@ function handle_qr_camera(event) {
|
||||
|
||||
{#if $events_sess.badges.show_form__search}
|
||||
<form
|
||||
class="form flex-grow flex flex-row flex-wrap gap-1 justify-center items-center w-full"
|
||||
on:submit|preventDefault={() => {
|
||||
$events_trigger = 'load__event_badge_obj_li';
|
||||
}}
|
||||
autocomplete="off"
|
||||
class="form flex-grow flex flex-row flex-wrap gap-1 justify-center items-center w-full"
|
||||
>
|
||||
{#if $ae_loc.trusted_access && badge_type_code_li}
|
||||
<div class="search_by_badge_type_code">
|
||||
@@ -352,12 +385,15 @@ function handle_qr_camera(event) {
|
||||
id="badge_fulltext_search_qry_str"
|
||||
name="fulltext_search_qry_str"
|
||||
bind:value={$events_sess.badges.fulltext_search_qry_str}
|
||||
class="input text-1xl hover:text-3xl font-bold font-mono w-96 transition-all"
|
||||
class="input text-1xl hover:text-3xl font-bold font-mono w-96 hover:w-2/5 transition-all"
|
||||
on:keyup={() => {
|
||||
if ($events_sess.badges.fulltext_search_qry_str.length >= 3) {
|
||||
$events_trigger = 'load__event_badge_obj_li';
|
||||
}
|
||||
}}
|
||||
autofocus
|
||||
suggest="off"
|
||||
data-lpignore="true"
|
||||
>
|
||||
|
||||
|
||||
@@ -508,7 +544,10 @@ function handle_qr_camera(event) {
|
||||
<tbody>
|
||||
{#each $events_slct.badge_obj_li as badge_obj}
|
||||
<!-- {#each $lq__event_badge_li as badge_obj} -->
|
||||
<tr class="">
|
||||
<tr
|
||||
class:hidden={(badge_obj.print_count >= 1 || badge_obj.hide) && !$ae_loc.trusted_access}
|
||||
class:fade_50={(badge_obj.print_count >= 1 || badge_obj.hide) && $ae_loc.trusted_access}
|
||||
>
|
||||
<td class="">
|
||||
<button
|
||||
class="btn btn-xl text-xl variant-ghost-secondary hover:variant-glass-secondary w-96 overflow-hidden transition-all"
|
||||
@@ -526,7 +565,11 @@ function handle_qr_camera(event) {
|
||||
>
|
||||
<span class="flex flex-row justify-between items-center w-full">
|
||||
<span>
|
||||
<span class="fas fa-id-badge mx-1"></span>
|
||||
{#if badge_obj.hide}
|
||||
<span class="fas fa-eye-slash mx-1"></span>
|
||||
{:else}
|
||||
<span class="fas fa-id-badge mx-1"></span>
|
||||
{/if}
|
||||
{#if badge_obj.print_count >= 1}
|
||||
<!-- Show a green checkmark -->
|
||||
<span class="fas fa-check text-green-500"></span>
|
||||
@@ -583,7 +626,95 @@ function handle_qr_camera(event) {
|
||||
</div>
|
||||
</td>
|
||||
<td class="">
|
||||
<div class="flex flex-row items-center justify-between">
|
||||
<span title={badge_obj.registration_type}>{badge_obj.badge_type}</span>
|
||||
|
||||
<div>
|
||||
<Element_ae_crud
|
||||
trigger_patch={ae_triggers.print_count}
|
||||
api_cfg={$ae_api}
|
||||
object_type={'event_badge'}
|
||||
object_id={badge_obj.event_badge_id_random}
|
||||
field_name={'print_count'}
|
||||
field_type={'text'}
|
||||
field_value={badge_obj.print_count}
|
||||
allow_null={false}
|
||||
hide_edit_btn={true}
|
||||
outline_element={false}
|
||||
show_crud={false}
|
||||
display_inline={true}
|
||||
class_li={'m-1'}
|
||||
on:ae_crud_updated={e => {
|
||||
console.log(`ae_crud_updated event:`, e.detail);
|
||||
// events_func.handle_load_ae_obj_id__badge({api_cfg: $ae_api, badge_id: $events_slct.badge_id});
|
||||
}}
|
||||
>
|
||||
|
||||
<!-- {@html (badge_obj.print_count ? `<span class="fas fa-users m-1"></span> ${badge_obj.print_count}` : '<span class="fas fa-users m-1"></span> 0')} -->
|
||||
{#if $ae_loc.administrator_access}
|
||||
<span class="fas fa-print m-1"></span>
|
||||
<input
|
||||
type="number" min="0" max="10" step="1"
|
||||
bind:value={badge_obj.print_count}
|
||||
|
||||
class="input text-sm w-16 m-1"
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
// badge_obj.print_count = 0;
|
||||
ae_triggers.print_count = true;
|
||||
}}
|
||||
class="btn btn-sm variant-soft-warning"
|
||||
>
|
||||
<span class="fas fa-save m-1"></span>
|
||||
Save
|
||||
</button>
|
||||
{/if}
|
||||
</Element_ae_crud>
|
||||
|
||||
<Element_ae_crud
|
||||
trigger_patch={ae_triggers.hide}
|
||||
api_cfg={$ae_api}
|
||||
object_type={'event_badge'}
|
||||
object_id={badge_obj?.event_badge_id_random}
|
||||
field_name={'hide'}
|
||||
field_type={'button'}
|
||||
field_value={badge_obj.hide}
|
||||
allow_null={false}
|
||||
hide_edit_btn={true}
|
||||
outline_element={false}
|
||||
show_crud={false}
|
||||
display_inline={true}
|
||||
class_li={'m-1'}
|
||||
on:ae_crud_updated={e => {
|
||||
console.log(`ae_crud_updated event:`, e.detail);
|
||||
// events_func.handle_load_ae_obj_id__badge({api_cfg: $ae_api, badge_id: badge_obj.badge_id_random});
|
||||
}}
|
||||
>
|
||||
<!-- {#if $ae_loc.trusted_access}
|
||||
{(badge_obj?.hide ? 'Hidden' : 'Not Hidden')}
|
||||
{/if} -->
|
||||
<button
|
||||
on:click={() => {
|
||||
// $events_slct.badge_obj = badge_obj;
|
||||
badge_obj.hide = !badge_obj?.hide;
|
||||
ae_triggers.hide = true;
|
||||
}}
|
||||
class="btn btn-sm variant-soft-warning"
|
||||
class:hidden={!$ae_loc.trusted_access}
|
||||
>
|
||||
{#if $ae_loc.trusted_access}
|
||||
{@html (badge_obj?.hide ? '<span class="fas fa-eye m-1"></span> Unhide?' : '<span class="fas fa-eye-slash m-1"></span> Hide?')}
|
||||
{:else}
|
||||
<!-- Users see this as the "Archive" option button -->
|
||||
{@html (badge_obj?.hide ? '<span class="fas fa-archive m-1"></span> Unarchive' : '<span class="fas fa-archive m-1"></span> Archive')}
|
||||
{/if}
|
||||
</button>
|
||||
</Element_ae_crud>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/each}
|
||||
@@ -591,9 +722,15 @@ function handle_qr_camera(event) {
|
||||
</table>
|
||||
</section>
|
||||
{:else}
|
||||
<div class="alert alert-info">
|
||||
No badges found.
|
||||
<div class="text-xl variant-filled-success font-bold p-2">
|
||||
Type your name, email, or affiliations and results will start to appear automatically.
|
||||
</div>
|
||||
|
||||
{#if $events_sess.badges.fulltext_search_qry_str && $events_sess.badges.fulltext_search_qry_str.length > 5}
|
||||
<div class="text-xl variant-filled-warning font-bold p-2">
|
||||
No badges found. Please change your search.
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
|
||||
|
||||
@@ -174,7 +174,7 @@ let refresh_leads_list = setInterval(function () {
|
||||
<!-- flex flex-row justify-center items-center m-auto -->
|
||||
<tr
|
||||
class:hidden={event_exhibit_tracking_obj.hide && !$events_loc.leads.show_hidden}
|
||||
class:test_dim={event_exhibit_tracking_obj.hide}
|
||||
class:fade_50={event_exhibit_tracking_obj.hide}
|
||||
>
|
||||
<td class="star text-center">
|
||||
<!-- <span class="star_container flex flex-col justify-center items-center m-auto"> -->
|
||||
@@ -388,12 +388,12 @@ let refresh_leads_list = setInterval(function () {
|
||||
|
||||
|
||||
<style lang="postcss">
|
||||
.test_dim {
|
||||
/* .test_dim {
|
||||
opacity: 0.5;
|
||||
}
|
||||
.test_dim:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
} */
|
||||
|
||||
/* Use the div.ae_quick_modal_container to block background clicks when using the section.ae_quick_popover. */
|
||||
div.ae_quick_modal_container {
|
||||
|
||||
Reference in New Issue
Block a user