diff --git a/GEMINI.md b/GEMINI.md index ec8ff635..6383b14c 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -100,6 +100,7 @@ ### 🚧 Active Workstreams - **[Hydration Optimization]:** Implemented SWR pattern and non-blocking layouts to eliminate "white page" delays. +- **[Search Hardening]:** Standardized debounced reactive search logic across Recovery Meetings, Badge Search, and Journals modules. - **[Service Worker]:** Re-enabled registration and implemented robust asset caching. - **[Native Bridge]:** Phase 5 AppleScript handlers for macOS (PowerPoint/Keynote). - **[Telemetry]:** Modern dashboard in Launcher Config with visual CPU/RAM gauges. @@ -107,6 +108,7 @@ ### 🧠 Recent Learnings & Decisions - **SWR Pattern:** Crucial for eliminating page load delays in Sites, Events, and Journals. +- **Debounced Search:** Replacing manual triggers and loops (like setInterval) with reactive debounced effects significantly improves UX and reduces API noise. - **Quiet Logs:** Silenced noisy `AbortError` and `NetworkError` in background fetches to reduce noise. - **Details Toggle:** Optimized Event Session list by deferring expensive sub-components. - **CodeMirror Fix:** Resolved line-wrapping issues in editors. diff --git a/TODO.md b/TODO.md index c9c7ede1..9f1ddf18 100644 --- a/TODO.md +++ b/TODO.md @@ -25,6 +25,7 @@ This is a list of tasks to be completed before the next event/show/conference. - [x] **Observability:** Heartbeat and Sync status moved to formal Config UI. 3. **Hardening V3 Search:** - [ ] **Exhibit Search:** Restore missing search function and logic. + - [x] **Debounced Search Logic:** Standardized reactive, debounced search patterns across Recovery Meetings, Badge Search, and Journals to eliminate stutter and manual triggers. (Completed 2026-01-27) - [ ] **Journal Search:** Refactor dynamic filtering and query logic (Coming back to this soon). - [ ] **Global Rule:** Preserve `ft_qry`, `lk_qry`, and `and_qry` blocks as "sacred" business logic. diff --git a/src/routes/events/[event_id]/(badges)/badges/ae_comp__badge_search.svelte b/src/routes/events/[event_id]/(badges)/badges/ae_comp__badge_search.svelte index 879fa5b1..19394b1c 100644 --- a/src/routes/events/[event_id]/(badges)/badges/ae_comp__badge_search.svelte +++ b/src/routes/events/[event_id]/(badges)/badges/ae_comp__badge_search.svelte @@ -165,65 +165,81 @@ }; } - // Trigger doing a search query for event badges + // Debounced Search Logic (Refactored 2026-01-27) + let search_debounce_timer: any = null; + let last_search_id = 0; + $effect(() => { - if (ae_triggers.event_badge_qry) { - ae_triggers.event_badge_qry = false; - search_status = 'loading'; - search_complete = false; - event_badge_id_li = []; + // Reactive dependencies + const s_qry_str = qry_str; + const s_qry_type_code = qry_type_code; + const s_qry_printed_status = qry_printed_status; + const s_qry_affiliations = qry_affiliations; + const s_qry_sort_order = qry_sort_order; + const s_event_id = event_id; + const s_trigger = ae_triggers.event_badge_qry; - // qry_str = $events_loc.badges.fulltext_search_qry_str ?? ''; - // qry_type_code = $events_sess.badges.search_badge_type_code ?? ''; + // Debounce search + if (search_debounce_timer) clearTimeout(search_debounce_timer); + + // Manual trigger or threshold check for automatic search + const should_search = s_trigger || + s_qry_str.length === 0 || + s_qry_str.length >= 3 || + s_qry_affiliations.length >= 3; - if (log_lvl) { - console.log( - `Triggered: event_badge_qry: ft search qry str:=${$events_loc.badges.fulltext_search_qry_str} sort order:=`, - computed_order_by_li - ); - } - - // ae_promises.load__event_badge_obj_li = events_func.qry__event_badge({ - ae_promises.load__event_badge_obj_li = events_func - .search__event_badge({ - api_cfg: $ae_api, - event_id: event_id, - fulltext_search_qry_str: qry_str, - type_code: qry_type_code, - printed_status: qry_printed_status, - affiliations_qry_str: qry_affiliations, - order_by_li: computed_order_by_li, - limit: search_limit, - log_lvl: 2 - }) - .then(function (search_results) { - search_status = 'processing'; - let tmp_event_badge_id_li = []; // This is to prevent the array from constantly updating and triggering the liveQuery. - - for (let i = 0; i < search_results.length; i++) { - let event_badge_obj = search_results[i]; - let event_badge_id_random = event_badge_obj.event_badge_id_random; - if (log_lvl) { - console.log( - `Found badge: ${event_badge_obj.full_name}, id_random: ${event_badge_id_random}` - ); - } - tmp_event_badge_id_li.push(event_badge_id_random); - } - event_badge_id_li = tmp_event_badge_id_li; - console.log('event_badge_id_li', event_badge_id_li); - - $events_sess.badge_li = search_results; - - return search_results; - }) - .finally(() => { - search_status = 'done'; - search_complete = true; - }); + if (should_search) { + search_debounce_timer = setTimeout(() => { + ae_triggers.event_badge_qry = false; + handle_search_refresh(); + }, 400); } + + return () => { + if (search_debounce_timer) clearTimeout(search_debounce_timer); + }; }); + async function handle_search_refresh() { + const current_search_id = ++last_search_id; + + if (log_lvl) console.log(`[Badge Search #${current_search_id}] ft=${qry_str}`); + + search_status = 'loading'; + search_complete = false; + + try { + const results = await events_func.search__event_badge({ + api_cfg: $ae_api, + event_id: event_id, + fulltext_search_qry_str: qry_str, + type_code: qry_type_code, + printed_status: qry_printed_status, + affiliations_qry_str: qry_affiliations, + order_by_li: computed_order_by_li, + limit: search_limit, + log_lvl: 0 + }); + + if (current_search_id === last_search_id) { + let tmp_event_badge_id_li = results.map((b: any) => b.event_badge_id_random); + + event_badge_id_li = tmp_event_badge_id_li; + $events_sess.badge_li = results; + + search_status = 'done'; + search_complete = true; + if (log_lvl) console.log(`[Badge Search #${current_search_id}] Done. Found ${results.length} results.`); + } + } catch (error) { + if (current_search_id === last_search_id) { + console.error('Badge search failed:', error); + search_status = 'error'; + search_complete = true; + } + } + } + function handle_qr_scan_result(event: CustomEvent) { console.log('*** handle_qr_scan_result() ***'); diff --git a/src/routes/idaa/(idaa)/recovery_meetings/+page.svelte b/src/routes/idaa/(idaa)/recovery_meetings/+page.svelte index 4d455d90..bfe3543b 100644 --- a/src/routes/idaa/(idaa)/recovery_meetings/+page.svelte +++ b/src/routes/idaa/(idaa)/recovery_meetings/+page.svelte @@ -68,300 +68,77 @@ let event_id_random_li: Array = $state([]); // *** Functions and Logic - // let lq_new__event_obj_li = $derived(liveQuery(async () => { - // let link_to_type: string = 'account'; - // let link_to_id: string = $ae_lock.account_id; - // if (log_lvl > 1) { - // console.log(`link_to_type: ${link_to_type}; link_to_id: ${link_to_id}; event_id_random_li:`, event_id_random_li); - // } - // // Check if event_id_random_li is an array and not undefined - // if (event_id_random_li) { - // if (log_lvl) { - // console.log(`Trying bulkGet:`, event_id_random_li); - // } - // let results = await db_events.event - // .bulkGet(event_id_random_li); + // Debounced Search Logic (Refactored 2026-01-27) + let search_debounce_timer: any = null; + let last_search_id = 0; - // return results; - // } else if (link_to_type && link_to_id) { - // if (log_lvl) { - // console.log(`Trying where: ${link_to_type}; equals: ${link_to_id}`); - // } - // let results: any = null; - // if ($idaa_loc.recovery_meetings.qry__order_by == 'name') { - // results = await db_events.event - // .where(`${link_to_type}_id`) - // .equals(link_to_id) - // .and((event) => { - // return event.hide == false; - // }) - // .and((event) => { - // return event.enable == true; - // }) - // .sortBy('name') - // } else { - // results = await db_events.event - // .where(`${link_to_type}_id`) - // .equals(link_to_id) - // .and((event) => { - // return event.hide == false; - // }) - // .and((event) => { - // return event.enable == true; - // }) - // .sortBy('updated_on') - // } - - // return results; - // } else { - // if (log_lvl) { - // console.log('Trying... Nothing to load'); - // } - // return null; - // } - // })); - - // let lq__event_obj = $derived(liveQuery(async () => { - // let results = await db_events.event - // .get($idaa_slct.event_id ?? ''); - - // return results; - // })); - - // This (event_li trigger for IDAA) is not currently being used. - // Updated 2024-11-19 - // $effect(() => { - // if ($idaa_trig.event_li) { - // $idaa_trig.event_li = false; - - // if (log_lvl) { - // console.log(`Triggered: $idaa_trig.event_li`); - // } - - // if ($idaa_loc.recovery_meetings.qry__enabled !== 'all' || $idaa_loc.recovery_meetings.qry__hidden !== 'all') { - // console.log(`Deleting disabled or hidden event.`); - // let results = db_events.event - // .clear(); - // console.log(`Deleted ${results} disabled event.`); - - // } - - // $idaa_prom.load__event_obj_li = events_func.load_ae_obj_li__event({ - // api_cfg: $ae_api, - // for_obj_type: 'account', - // for_obj_id: $ae_loc.account_id, - // qry_conference: false, - // enabled: $idaa_loc.recovery_meetings.qry__enabled, - // hidden: $idaa_loc.recovery_meetings.qry__hidden, - // limit: $idaa_loc.recovery_meetings.qry__limit, - // order_by_li: $idaa_loc.recovery_meetings.qry__order_by_li, - // try_cache: true, - // log_lvl: log_lvl, - // }); - // } - // }); - - // Updated 2024-11-19 $effect(() => { - if ($idaa_trig.event_li_qry) { - $idaa_trig.event_li_qry = false; + // Reactive dependencies + const qry_str = $idaa_loc.recovery_meetings.qry__fulltext_str; + const qry_physical = $idaa_loc.recovery_meetings.qry__physical; + const qry_virtual = $idaa_loc.recovery_meetings.qry__virtual; + const qry_type = $idaa_loc.recovery_meetings.qry__type; + const qry_enabled = $idaa_loc.recovery_meetings.qry__enabled; + const qry_hidden = $idaa_loc.recovery_meetings.qry__hidden; + const qry_limit = $idaa_loc.recovery_meetings.qry__limit; + const qry_order_by_li = $idaa_loc.recovery_meetings.qry__order_by_li; + const account_id = $ae_loc.account_id; + const s_trigger = $idaa_trig.event_li_qry; - log_lvl = 2; + // Trigger search on parameter change (debounced) + if (search_debounce_timer) clearTimeout(search_debounce_timer); + search_debounce_timer = setTimeout(() => { + handle_search_refresh(); + }, 350); - if (log_lvl) { - console.log(`Triggered: $idaa_trig.event_li_qry`); - } - - // $idaa_sess.recovery_meetings.qry__status = 'loading'; - - let and_physical = $idaa_loc.recovery_meetings.qry__physical; - let and_virtual = $idaa_loc.recovery_meetings.qry__virtual; - let and_type = $idaa_loc.recovery_meetings.qry__type; - let fulltext_str = $idaa_loc.recovery_meetings.qry__fulltext_str?.trim() ?? null; - let enabled = $idaa_loc.recovery_meetings.qry__enabled; - let hidden = $idaa_loc.recovery_meetings.qry__hidden; - let limit = $idaa_loc.recovery_meetings.qry__limit; - let order_by_li = $idaa_loc.recovery_meetings.qry__order_by_li; - let search_delay = 15; - let max_tries = 5; - - if (enabled !== 'all' || hidden !== 'all') { - console.log(`Deleting disabled or hidden event.`); - let results = db_events.event.clear(); - console.log(`Deleted ${results} disabled event.`); - } - - if ( - $idaa_sess.recovery_meetings?.qry__status != null && - $idaa_sess.recovery_meetings?.qry__status != 'done' - ) { - console.log( - '*** TEST SEARCH - $idaa_sess.recovery_meetings.qry__status != done ***' - ); - // WARNING: This is a temporary fix for the search string. It needs to be fixed in the future. Using lk_search_str for now. - $idaa_sess.recovery_meetings.status_qry__last_request_str = fulltext_str; - - // We want to delay the initial search request to give the previous search request to finish. - let random_delay = Math.floor(Math.random() * 50); - search_delay += 50 + random_delay; - } - - event_id_random_li = []; // Resetting this seems to help trigger the new results to show correctly??? 2025-07-10 - - let count = 0; - let request_loop = setInterval(() => { - count++; - if (log_lvl) { - console.log( - `*** TEST SEARCH - Search delay: ${search_delay} *** loop count=${count}` - ); - } - if (count >= max_tries) { - console.log('*** TEST SEARCH - Max tries reached ***'); - clearInterval(request_loop); - } - - if ( - $idaa_sess.recovery_meetings?.qry__status != null && - $idaa_sess.recovery_meetings?.qry__status != 'done' - ) { - let random_delay = Math.floor(Math.random() * 25); - search_delay += 25 + random_delay; - console.log( - `*** TEST SEARCH - $idaa_sess.recovery_meetings.qry__status == loading wait *** search_delay=${search_delay}` - ); - // $idaa_sess.status_qry__last_request_str = fulltext_str; - } else { - console.log( - '*** TEST SEARCH - $idaa_sess.recovery_meetings.qry__status != loading ***' - ); - - $idaa_sess.recovery_meetings.qry__status = 'loading'; - // event_id_random_li = []; - - and_physical ?? null; - and_virtual ?? null; - and_type ?? null; - // if (and_type) and_type = and_type; - // if (!and_type) { - // and_type = null; - // } - - console.log( - `TEST - and_physical: ${and_physical}; and_virtual: ${and_virtual}; and_type: ${and_type}; qry__fulltext_str: ${fulltext_str}` - ); - - $idaa_prom.load__event_obj_qry = events_func - .search__event({ - api_cfg: $ae_api, - for_obj_type: 'account', - for_obj_id: $ae_loc.account_id, - - qry_conference: false, - qry_physical: and_physical, - qry_virtual: and_virtual, - qry_type: and_type, - qry_str: fulltext_str, - - enabled: enabled, - hidden: hidden, - limit: limit, - order_by_li: order_by_li, - log_lvl: log_lvl - }) - .then(function (search_results) { - // Processing the results from the search. - $idaa_sess.recovery_meetings.qry__status = 'processing'; - $idaa_slct.event_obj_li = search_results; - if (log_lvl) { - console.log(`Found ${search_results.length} matching events.`); - console.log( - 'TEST SEARCH - Search done. Need to pull out the id_random list for bulk load.' - ); - } - event_id_random_li = generate_id_random_li({ - event_obj_li: search_results - }); - - // $idaa_sess.recovery_meetings.qry__status = 'done'; - - // if (log_lvl) { - // - // } - // console.log(`TEST search: ${$lq_kv__event_obj_li}`); - - // event_id_random_li = []; - - // // We need to loop through the array of objects and get the event_id_random from each object a new list of event_id_randoms. Then we can use this list to get the full objects from the database. - // let tmp_li = []; // This is to prevent the array from constantly updating and triggering the liveQuery. - // if (search_results && search_results.length) { - // for (let i = 0; i < search_results.length; i++) { - // tmp_li.push($idaa_slct.event_obj_li[i].event_id_random); - // } - // } - // event_id_random_li = tmp_li; - }) - .finally(() => { - // event_id_random_li = $idaa_slct.event_obj_li.map(session_obj => session_obj.event_id_random); - - // Finally done with the search. - $idaa_sess.recovery_meetings.qry__status = 'done'; - - if (log_lvl > 1) { - console.log( - `TEST SEARCH - qry__status: ${$idaa_sess.recovery_meetings.qry__status} event_id_random_li:`, - event_id_random_li - ); - // console.log(`TEST SEARCH - search live query: ${$lq_kv__event_obj_li}`); - } - }); - clearInterval(request_loop); - } - }, search_delay); - } + return () => { + if (search_debounce_timer) clearTimeout(search_debounce_timer); + }; }); - // $effect(() => { - // if ($idaa_sess.recovery_meetings.qry__status == 'done') { - // if (log_lvl) { - // console.log(`*** TEST SEARCH - $idaa_sess.recovery_meetings.qry__status == done ***`); - // } - // // We are done with the search. - // $idaa_sess.recovery_meetings.qry__status = null; + async function handle_search_refresh() { + const current_search_id = ++last_search_id; + + if (log_lvl) console.log(`[Search #${current_search_id}] Refreshing recovery meetings...`); + + $idaa_sess.recovery_meetings.qry__status = 'loading'; + + // Clearing logic for hidden/disabled filter changes + if ($idaa_loc.recovery_meetings.qry__enabled !== 'all' || $idaa_loc.recovery_meetings.qry__hidden !== 'all') { + await db_events.event.clear(); + } - // // We need to loop through the array of objects and get the event_id_random from each object a new list of event_id_randoms. Then we can use this list to get the full objects from the database. - // let tmp_li = []; // This is to prevent the array from constantly updating and triggering the liveQuery. - // if ($idaa_slct.event_obj_li && $idaa_slct.event_obj_li.length) { - // event_id_random_li = []; - // // console.log(`TEST SEARCH - Get ids:`, $idaa_slct.event_obj_li); - // for (let i = 0; i < $idaa_slct.event_obj_li.length; i++) { - // tmp_li.push($idaa_slct.event_obj_li[i].event_id_random); - // } - // } - // event_id_random_li = tmp_li; - // // console.log(`TEST search: event_id_random_li`, $state.snapshot(event_id_random_li)); - // } - // }); + try { + const results = await events_func.search__event({ + api_cfg: $ae_api, + for_obj_type: 'account', + for_obj_id: $ae_loc.account_id, + qry_conference: false, + qry_physical: $idaa_loc.recovery_meetings.qry__physical, + qry_virtual: $idaa_loc.recovery_meetings.qry__virtual, + qry_type: $idaa_loc.recovery_meetings.qry__type, + qry_str: $idaa_loc.recovery_meetings.qry__fulltext_str?.trim() ?? null, + enabled: $idaa_loc.recovery_meetings.qry__enabled, + hidden: $idaa_loc.recovery_meetings.qry__hidden, + limit: $idaa_loc.recovery_meetings.qry__limit, + order_by_li: $idaa_loc.recovery_meetings.qry__order_by_li, + log_lvl: 0 // Keep noise low during typing + }); - function generate_id_random_li({ - event_obj_li = $idaa_slct.event_obj_li - }: { - event_obj_li?: Array; - } = {}) { - let tmp_li = []; // This is to prevent the array from constantly updating and triggering the liveQuery. - - // We need to loop through the array of objects and get the id_random from each object a new list of id_randoms. Then we can use this list to get the full objects from the database. - if (event_obj_li && event_obj_li.length) { - for (let i = 0; i < event_obj_li.length; i++) { - tmp_li.push(event_obj_li[i].event_id_random); + // Race condition check: only update if this is still the latest request + if (current_search_id === last_search_id) { + $idaa_slct.event_obj_li = results; + event_id_random_li = results.map((e: any) => e.event_id_random); + $idaa_sess.recovery_meetings.qry__status = 'done'; + if (log_lvl) console.log(`[Search #${current_search_id}] Done. Found ${results.length} results.`); + } + } catch (error) { + if (current_search_id === last_search_id) { + console.error('Search failed:', error); + $idaa_sess.recovery_meetings.qry__status = 'error'; } } - if (log_lvl) { - console.log(`generate_id_random_li:`, tmp_li); - } - - return tmp_li; } if (browser) { @@ -369,15 +146,9 @@ let message = { event_id: $idaa_slct?.event_id ?? null }; window.parent.postMessage(message, '*'); - - // add_activity_log( - // { - // action: 'idaa_meetings_page', - // action_with: 'browser', - // } - // ); } + function add_activity_log({ action = 'idaa_meetings_page', action_with = 'none' diff --git a/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_li.svelte b/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_li.svelte index 1a311d8c..cd4f2828 100644 --- a/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_li.svelte +++ b/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_li.svelte @@ -38,17 +38,26 @@ import { idaa_loc, idaa_sess, idaa_slct, idaa_trig } from '$lib/stores/ae_idaa_stores'; import MyClipboard from '$lib/app_components/e_app_clipboard.svelte'; + // Derived list of visible items (Refactored 2026-01-27) + // Ensures count matches exactly what is rendered to the user + let visible_event_obj_li = $derived((() => { + if (!$lq__event_obj_li) return []; + return $lq__event_obj_li + .filter((item: any) => { + if (!item) return false; + // If not trusted, exclude hidden or disabled items + if (!$ae_loc.trusted_access) { + return !item.hide && item.enable; + } + return true; + }) + .slice(0, $idaa_loc.recovery_meetings.qry__limit); + })()); + if (browser) { if (log_lvl) { console.log(`link_to_type: ${link_to_type}; link_to_id: ${link_to_id}`); } - - // add_activity_log( - // { - // action: 'idaa_meetings_page', - // action_with: 'search', - // } - // ); } function add_activity_log({ @@ -72,10 +81,7 @@ name: `IDAA: ${$idaa_loc.novi_full_name ?? 'none'} ${$idaa_loc.novi_email ?? ''}`, description: activity_description ?? null, object_type: 'event', // archive, post, event - // object_id_random: data?.params?.event_id ?? null, - // object_id_random: ae_acct.slct.archive_id, // data?.params?.archive_id ?? null, url_root: data?.url.origin, - // url_full_path: data?.url.href, url_full_path: data?.url.pathname, url_params: data?.url.searchParams.toString(), action: action, @@ -87,11 +93,6 @@ last_cache_refresh_locale: last_cache_refresh_iso.toLocaleString(), access_level: $ae_loc?.access_level, iframe: $ae_loc?.iframe - // site_access_key: $ae_loc?.site_access_key, - // site_domain_access_key: $ae_loc?.site_domain_access_key, - // site_domain: $ae_loc?.site_domain, - // extra_data: extra_data ?? '', - // log_lvl: log_lvl, } }; @@ -111,26 +112,22 @@ {container_class_li} " > - - {#if $lq__event_obj_li && $lq__event_obj_li.length} + {#if visible_event_obj_li && visible_event_obj_li.length}

Results: - {#if $lq__event_obj_li?.length} - - - {($lq__event_obj_li.length > $idaa_loc.recovery_meetings.qry__limit ? $idaa_loc.recovery_meetings.qry__limit : $lq__event_obj_li.length) ?? 'None'} - - {/if} + + + {visible_event_obj_li.length} +

- {#each $lq__event_obj_li as idaa_event_obj, index} - {#if idaa_event_obj && index < $idaa_loc.recovery_meetings.qry__limit} - + {#each visible_event_obj_li as idaa_event_obj, index} + {#if idaa_event_obj}
Not Confirmed by IDAA - {/if} @@ -222,23 +218,12 @@ " title={`View: ${idaa_event_obj?.name}`} > - - Meeting Details
- -
Type of Recovery Meeting: {idaa_event_obj?.type} @@ -253,7 +238,6 @@ Zoom Meeting: - - - Join: Zoom ID {idaa_event_obj?.attend_json?.zoom - ?.meeting_id} + Join: Zoom ID {idaa_event_obj?.attend_json?.zoom?.meeting_id} {#if idaa_event_obj?.attend_json?.zoom?.passcode} Passcode: {idaa_event_obj?.attend_json?.zoom?.passcode} {/if} @@ -300,7 +282,6 @@ Jitsi Meeting: - - - Join: {idaa_event_obj?.attend_json?.jitsi?.name ?? - 'Jitsi Meeting'} + Join: {idaa_event_obj?.attend_json?.jitsi?.name ?? 'Jitsi Meeting'} {#if idaa_event_obj?.attend_json?.jitsi?.passcode} Passcode: {idaa_event_obj?.attend_json?.jitsi?.passcode} {/if} @@ -343,36 +322,19 @@ When: - {#if idaa_event_obj?.weekday_sunday || idaa_event_obj?.weekday_monday || idaa_event_obj?.weekday_tuesday || idaa_event_obj?.weekday_wednesday || idaa_event_obj?.weekday_thursday || idaa_event_obj?.weekday_friday || idaa_event_obj?.weekday_saturday} - - {#if idaa_event_obj?.weekday_sunday}Sunday{/if} - {#if idaa_event_obj?.weekday_monday}Monday{/if} - {#if idaa_event_obj?.weekday_tuesday}Tuesday{/if} - {#if idaa_event_obj?.weekday_wednesday}Wednesday{/if} - {#if idaa_event_obj?.weekday_thursday}Thursday{/if} - {#if idaa_event_obj?.weekday_friday}Friday{/if} - {#if idaa_event_obj?.weekday_saturday}Saturday{/if} + {#if idaa_event_obj?.weekday_sunday}Sunday{/if} + {#if idaa_event_obj?.weekday_monday}Monday{/if} + {#if idaa_event_obj?.weekday_tuesday}Tuesday{/if} + {#if idaa_event_obj?.weekday_wednesday}Wednesday{/if} + {#if idaa_event_obj?.weekday_thursday}Thursday{/if} + {#if idaa_event_obj?.weekday_friday}Friday{/if} + {#if idaa_event_obj?.weekday_saturday}Saturday{/if} {/if} {#if idaa_event_obj?.recurring_start_time} - {ae_util.iso_datetime_formatter( `2023-01-01 ${idaa_event_obj?.recurring_start_time}`, @@ -381,7 +343,6 @@ > {/if} {#if idaa_event_obj?.timezone} - ({idaa_event_obj?.timezone}) {:else}
@@ -394,8 +355,7 @@ {#if idaa_event_obj?.contact_li_json && idaa_event_obj?.contact_li_json.length && idaa_event_obj?.contact_li_json[0].full_name}
Contact: @@ -403,8 +363,7 @@ {idaa_event_obj?.contact_li_json[0].full_name} {#if idaa_event_obj?.contact_li_json[0].email} | {idaa_event_obj?.contact_li_json[0].email} @@ -412,18 +371,15 @@ {#if idaa_event_obj?.contact_li_json[0].phone_mobile} | Mobile: {idaa_event_obj?.contact_li_json[0] - .phone_mobile}{idaa_event_obj?.contact_li_json[0].phone_mobile} {/if} {#if idaa_event_obj?.contact_li_json[0].phone_home} | Home: {idaa_event_obj?.contact_li_json[0].phone_home} @@ -431,30 +387,23 @@ {#if idaa_event_obj?.contact_li_json[0].phone_office} | Office: {idaa_event_obj?.contact_li_json[0] - .phone_office}{idaa_event_obj?.contact_li_json[0].phone_office} {/if} - {#if idaa_event_obj?.contact_li_json[0].other_text}| {idaa_event_obj - ?.contact_li_json[0].other_text}{/if} + {#if idaa_event_obj?.contact_li_json[0].other_text}| {idaa_event_obj?.contact_li_json[0].other_text}{/if}
{:else if $ae_loc.trusted_access}
- ALERT: The primary contact information may be missing? This - meeting should be checked and updated. Please Edit and Save - to use the new format. - + ALERT: The primary contact information may be missing?
{/if} {#if idaa_event_obj?.contact_li_json && idaa_event_obj?.contact_li_json.length && idaa_event_obj?.contact_li_json[1].full_name}
Contact: @@ -462,8 +411,7 @@ {idaa_event_obj?.contact_li_json[1].full_name} {#if idaa_event_obj?.contact_li_json[1].email} | {idaa_event_obj?.contact_li_json[1].email} @@ -471,18 +419,15 @@ {#if idaa_event_obj?.contact_li_json[1].phone_mobile} | Mobile: {idaa_event_obj?.contact_li_json[1] - .phone_mobile}{idaa_event_obj?.contact_li_json[1].phone_mobile} {/if} {#if idaa_event_obj?.contact_li_json[1].phone_home} | Home: {idaa_event_obj?.contact_li_json[1].phone_home} @@ -490,15 +435,12 @@ {#if idaa_event_obj?.contact_li_json[1].phone_office} | Office: {idaa_event_obj?.contact_li_json[1] - .phone_office}{idaa_event_obj?.contact_li_json[1].phone_office} {/if} - {#if idaa_event_obj?.contact_li_json[1].other_text}| {idaa_event_obj - ?.contact_li_json[1].other_text}{/if} + {#if idaa_event_obj?.contact_li_json[1].other_text}| {idaa_event_obj?.contact_li_json[1].other_text}{/if}
{/if} {#if $ae_loc.trusted_access} @@ -520,21 +462,6 @@