Could not sleep. Working on the search for badges.
This commit is contained in:
@@ -411,13 +411,14 @@ export async function search__event_badge({
|
||||
params_json['and_qry']['badge_type_code'] = type_code;
|
||||
}
|
||||
|
||||
ae_promises.search__event_badge_obj_li = await api.get_ae_obj_li_for_obj_id_crud({
|
||||
// ae_promises.search__event_badge_obj_li = await api.get_ae_obj_li_for_obj_id_crud({
|
||||
ae_promises.search__event_badge_obj_li = await api.get_ae_obj_li_for_obj_id_crud_v2({
|
||||
api_cfg,
|
||||
obj_type: 'event_badge',
|
||||
for_obj_type: 'event',
|
||||
for_obj_id: event_id,
|
||||
use_alt_table: false,
|
||||
use_alt_base: false,
|
||||
use_alt_tbl: false,
|
||||
use_alt_mdl: true,
|
||||
enabled,
|
||||
hidden,
|
||||
order_by_li,
|
||||
@@ -534,6 +535,8 @@ export const properties_to_save = [
|
||||
'external_id',
|
||||
'external_person_id',
|
||||
|
||||
'default_qry_string',
|
||||
|
||||
'alert',
|
||||
|
||||
'enable',
|
||||
@@ -631,6 +634,8 @@ export async function process_ae_obj__event_badge_props({
|
||||
external_id: obj.external_id,
|
||||
external_person_id: obj.external_person_id,
|
||||
|
||||
default_qry_string: obj.default_qry_string,
|
||||
|
||||
alert: obj.alert,
|
||||
|
||||
enable: obj.enable,
|
||||
@@ -642,8 +647,8 @@ export async function process_ae_obj__event_badge_props({
|
||||
created_on: obj.created_on,
|
||||
updated_on: obj.updated_on,
|
||||
|
||||
tmp_sort_1: obj.tmp_sort_1,
|
||||
tmp_sort_2: obj.tmp_sort_2,
|
||||
tmp_sort_1: `${obj.group}_${obj.priority}_${obj.sort}_${obj.updated_on ?? obj.created_on}`,
|
||||
tmp_sort_2: `${obj.print_count}_${obj.priority}_${obj.sort}_${obj.given_name}_${obj.family_name}_${obj.updated_on}_${obj.created_on}`,
|
||||
|
||||
person_external_id: obj.person_external_id,
|
||||
person_external_sys_id: obj.person_external_sys_id,
|
||||
|
||||
@@ -157,6 +157,8 @@ export interface Badge {
|
||||
|
||||
// data_json?: null|string;
|
||||
|
||||
default_qry_string?: null|string;
|
||||
|
||||
alert?: null|boolean;
|
||||
|
||||
enable: null|boolean;
|
||||
@@ -739,7 +741,7 @@ export class MySubClassedDexie extends Dexie {
|
||||
|
||||
constructor() {
|
||||
super('ae_events_db');
|
||||
this.version(5).stores({
|
||||
this.version(6).stores({
|
||||
event: `
|
||||
id, event_id, event_id_random,
|
||||
code,
|
||||
@@ -760,6 +762,7 @@ export class MySubClassedDexie extends Dexie {
|
||||
affiliations, affiliations_override,
|
||||
badge_type, badge_type_code, badge_type_code_override, badge_type_override,
|
||||
external_event_id, external_id, external_person_id,
|
||||
default_qry_string,
|
||||
alert,
|
||||
tmp_sort_1, tmp_sort_2,
|
||||
enable, hide, priority, sort, group, notes, created_on, updated_on`,
|
||||
|
||||
@@ -90,7 +90,11 @@ let events_local_data_struct: key_val = {
|
||||
// 'theme_name': 'wintry',
|
||||
|
||||
'fulltext_search_qry_str': null,
|
||||
'search_badge_type_code': null,
|
||||
'status_qry__search': null,
|
||||
'use_id_li': true,
|
||||
'search_status': null,
|
||||
'search_complete': false,
|
||||
|
||||
'classes__form': 'border border-surface-200 p-4 space-y-4 rounded-container',
|
||||
},
|
||||
@@ -346,7 +350,11 @@ let events_session_data_struct: key_val = {
|
||||
// Badge Printing
|
||||
'badges': {
|
||||
'fulltext_search_qry_str': null,
|
||||
'search_badge_type_code': null,
|
||||
'status_qry__search': null,
|
||||
'use_id_li': true,
|
||||
'search_status': null,
|
||||
'search_complete': true,
|
||||
|
||||
show_form__search: true,
|
||||
show_form__search_results: true,
|
||||
|
||||
@@ -104,7 +104,12 @@ let event_badge_id_li: Array<string> = $state([]);
|
||||
<!-- event_badge_obj_li={$lq__event_badge_obj_li} -->
|
||||
<Comp_badge_search
|
||||
event_id={$events_slct?.event_id ?? ''}
|
||||
bind:use_id_li={$events_sess.badges.use_id_li}
|
||||
bind:event_badge_id_li={event_badge_id_li}
|
||||
bind:search_status={$events_sess.badges.search_status}
|
||||
bind:search_complete={$events_sess.badges.search_complete}
|
||||
bind:qry_str={$events_loc.badges.fulltext_search_qry_str}
|
||||
bind:qry_type_code={$events_loc.badges.search_badge_type_code}
|
||||
log_lvl={1}
|
||||
>
|
||||
</Comp_badge_search>
|
||||
@@ -117,14 +122,27 @@ let event_badge_id_li: Array<string> = $state([]);
|
||||
{/await} -->
|
||||
|
||||
|
||||
{#if $events_sess?.badges?.search_status != 'loading' && $events_sess?.badges?.search_status != 'processing'}
|
||||
<Comp_badge_obj_li
|
||||
bind:use_id_li={$events_sess.badges.use_id_li}
|
||||
event_badge_id_li={event_badge_id_li}
|
||||
qry_str={$events_loc.badges.fulltext_search_qry_str}
|
||||
qry_type_code={$events_loc.badges.search_badge_type_code}
|
||||
log_lvl={1}
|
||||
>
|
||||
</Comp_badge_obj_li>
|
||||
{:else}
|
||||
<p class="p-4 italic text-sm text-surface-400">Loading badges...</p>
|
||||
{/if}
|
||||
|
||||
|
||||
{#if event_badge_id_li && event_badge_id_li?.length > 0}
|
||||
<!-- {#if event_badge_id_li && event_badge_id_li?.length > 0}
|
||||
<Comp_badge_obj_li
|
||||
event_badge_id_li={event_badge_id_li}
|
||||
qry_str={$events_loc.badges.fulltext_search_qry_str}
|
||||
qry_type_code={$events_loc.badges.search_badge_type_code}
|
||||
log_lvl={1}
|
||||
>
|
||||
</Comp_badge_obj_li>
|
||||
{:else}
|
||||
<p class="p-4 italic text-sm text-surface-400">No badges found for this event.</p>
|
||||
{/if}
|
||||
{/if} -->
|
||||
@@ -3,7 +3,11 @@ interface Props {
|
||||
// Exports
|
||||
container_class_li?: string|Array<string>;
|
||||
// export let display_mode: string = 'default'; // 'default', 'compact', 'minimal', 'launcher'
|
||||
use_id_li?: boolean;
|
||||
event_badge_id_li?: Array<string>;
|
||||
qry_idb?: boolean;
|
||||
qry_str?: string;
|
||||
qry_type_code?: string;
|
||||
// event_badge_obj_li?: Array<any>;
|
||||
link_to_type?: string;
|
||||
link_to_id?: string;
|
||||
@@ -17,7 +21,11 @@ interface Props {
|
||||
|
||||
let {
|
||||
container_class_li = [],
|
||||
use_id_li = $bindable(true),
|
||||
event_badge_id_li = $bindable([]),
|
||||
qry_idb = false,
|
||||
qry_str = '',
|
||||
qry_type_code = '',
|
||||
// event_badge_obj_li = $bindable(),
|
||||
link_to_type,
|
||||
link_to_id,
|
||||
@@ -57,21 +65,54 @@ if (log_lvl) {
|
||||
|
||||
// let event_badge_id_li: Array<string> = $state([]);
|
||||
|
||||
let dq__where_type_id_val: string = `${link_to_type}_id_random`;
|
||||
let dq__where_eq_id_val: string = link_to_id ?? '';
|
||||
|
||||
|
||||
// *** Functions and Logic
|
||||
let lq__event_badge_obj_li = $derived(liveQuery(async () => {
|
||||
let results: any;
|
||||
log_lvl = 2;
|
||||
log_lvl = 1;
|
||||
|
||||
if (event_badge_id_li?.length) {
|
||||
if (use_id_li && event_badge_id_li?.length) {
|
||||
if (log_lvl) {
|
||||
console.log(`LQ - Using event_badge_id_li to get event badges.`, event_badge_id_li);
|
||||
}
|
||||
|
||||
results = await db_events.badge
|
||||
.bulkGet(event_badge_id_li);
|
||||
} else if (qry_str && qry_str?.length) {
|
||||
if (log_lvl) {
|
||||
console.log(`LQ - Using qry_str to get event badges. qry_str=${qry_str}`);
|
||||
}
|
||||
|
||||
// let ft_query = ae_util.sanitize_fulltext_search(qry_str);
|
||||
// let ft_query = qry_str;
|
||||
if (log_lvl) {
|
||||
console.log(`Fulltext search query: ${qry_str}`);
|
||||
}
|
||||
|
||||
if (qry_type_code && qry_type_code !== 'all') {
|
||||
if (log_lvl) {
|
||||
console.log(`Also filtering by badge type code: ${qry_type_code}`);
|
||||
}
|
||||
results = await db_events.badge
|
||||
.where('default_qry_string')
|
||||
.equalsIgnoreCase(qry_str)
|
||||
// .equals(ft_query)
|
||||
// .and((badge) => badge.badge_type_code === qry_type_code && badge.event_id === $events_slct.event_id)
|
||||
.sortBy('tmp_sort_2');
|
||||
} else {
|
||||
results = await db_events.badge
|
||||
.where('full_name')
|
||||
.startsWithIgnoreCase(qry_str)
|
||||
// .where('default_qry_string')
|
||||
// .equalsIgnoreCase(qry_str)
|
||||
// .equals(ft_query)
|
||||
// .and((badge) => badge.event_id === $events_slct.event_id)
|
||||
.sortBy('tmp_sort_2');
|
||||
}
|
||||
|
||||
// event_badge_id_li = results.map((badge) => badge.event_badge_id);
|
||||
|
||||
|
||||
// } else if (event_badge_obj_li?.length) {
|
||||
// if (log_lvl) {
|
||||
@@ -90,6 +131,9 @@ let lq__event_badge_obj_li = $derived(liveQuery(async () => {
|
||||
// .bulkGet(event_badge_id_li);
|
||||
|
||||
} else if (link_to_type && link_to_id) {
|
||||
let dq__where_type_id_val: string = `${link_to_type}_id_random`;
|
||||
let dq__where_eq_id_val: string = link_to_id ?? '';
|
||||
|
||||
if (log_lvl) {
|
||||
console.log(`LQ - Trying where: ${dq__where_type_id_val}; equals: ${dq__where_eq_id_val}`);
|
||||
}
|
||||
@@ -97,7 +141,7 @@ let lq__event_badge_obj_li = $derived(liveQuery(async () => {
|
||||
results = await db_events.badge
|
||||
.where(dq__where_type_id_val)
|
||||
.equals(dq__where_eq_id_val)
|
||||
.sortBy('name');
|
||||
.sortBy('tmp_sort_2');
|
||||
|
||||
// event_badge_id_li = results.map((badge) => badge.event_badge_id);
|
||||
|
||||
@@ -112,11 +156,17 @@ let lq__event_badge_obj_li = $derived(liveQuery(async () => {
|
||||
if ($events_slct.event_badge_obj_li && JSON.stringify($events_slct.event_badge_obj_li) !== JSON.stringify(results)) {
|
||||
$events_slct.event_badge_obj_li = [...results];
|
||||
if (log_lvl) {
|
||||
console.log(`Session slct li stored version has changed for ID = ${$events_slct.journal_id}`, $events_slct.event_badge_obj_li);
|
||||
console.log(`Session slct li stored version has changed for ID = ${$events_slct.event_id}`, $events_slct.event_badge_obj_li);
|
||||
|
||||
}
|
||||
} else if (!$events_slct?.event_badge_obj_li) {
|
||||
$events_slct.event_badge_obj_li = [...results];
|
||||
if (log_lvl) {
|
||||
console.log(`Session slct li stored version was not set for ID = ${$events_slct.event_id}`, $events_slct.event_badge_obj_li);
|
||||
}
|
||||
} else {
|
||||
if (log_lvl > 1) {
|
||||
console.log(`Session slct li stored version has not changed for ID = ${$events_slct.journal_id}`);
|
||||
console.log(`Session slct li stored version has not changed for ID = ${$events_slct.event_id}`, $events_slct.event_badge_obj_li);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,7 +195,8 @@ let lq__event_badge_obj_li = $derived(liveQuery(async () => {
|
||||
|
||||
<section class="px-1 flex flex-col gap-1 items-center justify-center space-y-1">
|
||||
|
||||
{#if event_badge_id_li?.length && $lq__event_badge_obj_li?.length}
|
||||
<!-- event_badge_id_li?.length && -->
|
||||
{#if $lq__event_badge_obj_li?.length}
|
||||
<header class="w-full flex flex-row gap-1 items-center justify-start">
|
||||
<h2 class="text-base">Results:</h2>
|
||||
<div class="text-3xl font-bold preset-filled-success-100-900 px-4 rounded-lg">
|
||||
|
||||
@@ -1,19 +1,25 @@
|
||||
<script lang="ts">
|
||||
interface Props {
|
||||
event_id: string;
|
||||
use_id_li?: boolean;
|
||||
event_badge_id_li?: Array<string>;
|
||||
// event_badge_obj_li?: Array<any>;
|
||||
search_status?: string;
|
||||
search_complete?: boolean;
|
||||
qry_str?: string;
|
||||
qry_type_code?: string;
|
||||
log_lvl?: number;
|
||||
}
|
||||
|
||||
let {
|
||||
event_id,
|
||||
use_id_li = $bindable(true),
|
||||
event_badge_id_li = $bindable([]),
|
||||
// event_badge_obj_li = $bindable(),
|
||||
search_status = $bindable('idle'),
|
||||
search_complete = $bindable(true),
|
||||
qry_str = $bindable(''),
|
||||
qry_type_code = $bindable(''),
|
||||
log_lvl = 0,
|
||||
}: Props = $props();
|
||||
|
||||
@@ -73,6 +79,9 @@ if (ae_triggers.event_badge_qry) {
|
||||
search_complete = false;
|
||||
event_badge_id_li = [];
|
||||
|
||||
// qry_str = $events_loc.badges.fulltext_search_qry_str ?? '';
|
||||
// qry_type_code = $events_sess.badges.search_badge_type_code ?? '';
|
||||
|
||||
if (log_lvl) {
|
||||
console.log(`Triggered: event_badge_qry: ft search qry str:=${$events_loc.badges.fulltext_search_qry_str}`);
|
||||
}
|
||||
@@ -341,8 +350,8 @@ async function handle_search__event_badge(
|
||||
<section
|
||||
class="
|
||||
m-2 p-2 md:px-12
|
||||
flex flex-row gap-1 items-center justify-center
|
||||
min-w-sm w-full
|
||||
flex flex-col sm:flex-row gap-1 items-center justify-center
|
||||
min-w-sm w-full max-w-7xl
|
||||
preset-tonal-success
|
||||
"
|
||||
>
|
||||
@@ -368,6 +377,67 @@ async function handle_search__event_badge(
|
||||
>
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flex flex-col md:flex-row items-center justify-center gap-1">
|
||||
{#if $ae_loc.trusted_access && badge_type_code_li}
|
||||
<select
|
||||
bind:value={qry_type_code}
|
||||
onchange={() => {
|
||||
// ae_triggers.event_badge_qry = 'load__event_badge_obj_li';
|
||||
ae_triggers.event_badge_qry = true;
|
||||
}}
|
||||
class="select text-xs px-1 max-w-fit"
|
||||
>
|
||||
<option value="">-- All Badge Types --</option>
|
||||
{#each badge_type_code_li as badge_type_code}
|
||||
<option value={badge_type_code.code}>{badge_type_code.name}</option>
|
||||
{/each}
|
||||
</select>
|
||||
{/if}
|
||||
|
||||
<!--
|
||||
class="input text-xl hover:text-3xl font-bold font-mono w-96"
|
||||
hover:w-2/5
|
||||
-->
|
||||
<input
|
||||
type="search"
|
||||
placeholder="name, email, affiliations"
|
||||
id="badge_fulltext_search_qry_str"
|
||||
name="fulltext_search_qry_str"
|
||||
bind:value={qry_str}
|
||||
autofocus
|
||||
suggest="off"
|
||||
data-lpignore="true"
|
||||
class="input text-1xl hover:font-bold font-mono w-fit sm:w-96 transition-all"
|
||||
onkeyup={() => {
|
||||
if ($events_loc.badges.fulltext_search_qry_str.length >= 7) {
|
||||
ae_triggers.event_badge_qry = true;
|
||||
}
|
||||
}}
|
||||
title="Enter at least 3 characters to search. Search by name, email, affiliations, etc."
|
||||
/>
|
||||
</span>
|
||||
|
||||
|
||||
<span class="flex flex-row flex-wrap items-center justify-center gap-1">
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-lg preset-tonal-success border border-success-500 hover:preset-tonal-success text-2xl font-bold w-48 transition-all"
|
||||
onclick={() => {
|
||||
ae_triggers.event_badge_qry = true;
|
||||
}}
|
||||
>
|
||||
{#if !search_complete}
|
||||
<span class="fas fa-spinner fa-spin mx-1"></span>
|
||||
{:else }
|
||||
<!-- Nothing -->
|
||||
<span class="fas fa-search mx-1"></span>
|
||||
{/if}
|
||||
Search
|
||||
</button>
|
||||
|
||||
<!-- Clear search text button -->
|
||||
<button
|
||||
type="button"
|
||||
@@ -379,9 +449,7 @@ async function handle_search__event_badge(
|
||||
ae_triggers.event_badge_qry = true;
|
||||
}}
|
||||
class="
|
||||
btn btn-sm
|
||||
w-48
|
||||
preset-tonal-tertiary
|
||||
btn btn-sm text-xs
|
||||
preset-outlined-tertiary-100-900
|
||||
hover:preset-filled-tertiary-100-900
|
||||
transition-all
|
||||
@@ -421,63 +489,8 @@ async function handle_search__event_badge(
|
||||
</span>
|
||||
{/await}
|
||||
</button>
|
||||
|
||||
<span class="">
|
||||
{#if $ae_loc.trusted_access && badge_type_code_li}
|
||||
<select
|
||||
bind:value={$events_sess.badges.search_badge_type_code}
|
||||
onchange={() => {
|
||||
// ae_triggers.event_badge_qry = 'load__event_badge_obj_li';
|
||||
ae_triggers.event_badge_qry = true;
|
||||
}}
|
||||
class="select text-xs px-1 max-w-fit"
|
||||
>
|
||||
<option value="">-- All Badge Types --</option>
|
||||
{#each badge_type_code_li as badge_type_code}
|
||||
<option value={badge_type_code.code}>{badge_type_code.name}</option>
|
||||
{/each}
|
||||
</select>
|
||||
|
||||
{/if}
|
||||
|
||||
|
||||
<!--
|
||||
class="input text-xl hover:text-3xl font-bold font-mono w-96"
|
||||
hover:w-2/5
|
||||
-->
|
||||
<input
|
||||
type="search"
|
||||
placeholder="name, email, affiliations"
|
||||
id="badge_fulltext_search_qry_str"
|
||||
name="fulltext_search_qry_str"
|
||||
bind:value={$events_loc.badges.fulltext_search_qry_str}
|
||||
class="input text-1xl hover:text-3xl font-bold font-mono w-96 transition-all"
|
||||
onkeyup={() => {
|
||||
if ($events_loc.badges.fulltext_search_qry_str.length >= 7) {
|
||||
ae_triggers.event_badge_qry = true;
|
||||
}
|
||||
}}
|
||||
autofocus
|
||||
suggest="off"
|
||||
data-lpignore="true"
|
||||
/>
|
||||
</span>
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-lg preset-tonal-success border border-success-500 hover:preset-tonal-success text-2xl font-bold w-48 transition-all"
|
||||
onclick={() => {
|
||||
ae_triggers.event_badge_qry = true;
|
||||
}}
|
||||
>
|
||||
{#if !search_complete}
|
||||
<span class="fas fa-spinner fa-spin"></span>
|
||||
{:else }
|
||||
<!-- Nothing -->
|
||||
{/if}
|
||||
<span class="fas fa-search mx-1"></span>
|
||||
Search
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<!-- **BEGIN** Scan Form -->
|
||||
@@ -516,6 +529,24 @@ async function handle_search__event_badge(
|
||||
Search
|
||||
</button>
|
||||
{/if}
|
||||
|
||||
<!-- Show toggle for using the id list or not: use_id_li -->
|
||||
<button
|
||||
type="button"
|
||||
onclick={() => {
|
||||
use_id_li = !use_id_li;
|
||||
console.log(`Toggled use_id_li=${use_id_li}`);
|
||||
}}
|
||||
class="btn btn-sm preset-tonal-secondary border border-secondary-500 transition-all"
|
||||
title="Toggle using the ID list or not."
|
||||
>
|
||||
{#if use_id_li}
|
||||
<span class="fas fa-toggle-on text-green-600"></span>
|
||||
{:else}
|
||||
<span class="fas fa-toggle-off text-red-600"></span>
|
||||
{/if}
|
||||
Use ID List
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
Reference in New Issue
Block a user