feat(offline): implement Dexie fallbacks and fix type stability in Events module

- Offline Resilience: Added local Dexie fallbacks to load_ae_obj_id__* and load_ae_obj_li__* functions for Events, Sessions, Locations, Exhibits, and Badges.
- Type Safety: Standardized ae_Event and ae_EventSession interfaces in ae_types.ts; resolved Promise assignment errors in load functions (+page.ts).
- Bug Fixes: Corrected duplication in ae_events__event_location.ts and ae_events__event_badge_template.ts; fixed missing try_cache parameters.
- UI Stability: Fixed Dexie LiveQuery subscription pattern in bulk print view and ensured proper property access in layout load functions.
This commit is contained in:
Scott Idem
2026-01-16 15:09:10 -05:00
parent 2db2aba6f9
commit 8b611e7875
11 changed files with 998 additions and 1521 deletions

View File

@@ -29,60 +29,58 @@ export async function load_ae_obj_id__event_badge({
console.log(`*** load_ae_obj_id__event_badge() *** event_badge_id=${event_badge_id}`);
}
ae_promises.load__event_badge_obj = await api
.get_ae_obj_v3({
api_cfg,
obj_type: 'event_badge',
obj_id: event_badge_id,
view,
log_lvl
})
.then(async function (badge_obj_get_result) {
if (badge_obj_get_result) {
if (try_cache) {
const processed_obj_li = await process_ae_obj__event_badge_props({
obj_li: [badge_obj_get_result],
log_lvl
});
await db_save_ae_obj_li__ae_obj({
db_instance: db_events,
table_name: 'badge',
obj_li: processed_obj_li,
properties_to_save,
log_lvl
});
}
return badge_obj_get_result;
} else {
if (log_lvl) console.log('No results returned.');
return null;
}
})
.catch(function (error: any) {
console.log('No results returned or failed.', error);
});
try {
ae_promises.load__event_badge_obj = await api
.get_ae_obj_v3({
api_cfg,
obj_type: 'event_badge',
obj_id: event_badge_id,
view,
log_lvl
});
if (inc_template) {
if (ae_promises.load__event_badge_obj) {
if (try_cache) {
const processed_obj_li = await process_ae_obj__event_badge_props({
obj_li: [ae_promises.load__event_badge_obj],
log_lvl
});
await db_save_ae_obj_li__ae_obj({
db_instance: db_events,
table_name: 'badge',
obj_li: processed_obj_li,
properties_to_save,
log_lvl
});
}
} else {
console.log('No results returned from API.');
if (try_cache) {
if (log_lvl) console.log('Attempting to load from local cache...');
ae_promises.load__event_badge_obj = await db_events.badge.get(event_badge_id);
}
}
} catch (error: any) {
console.log('API request failed.', error);
if (try_cache) {
if (log_lvl) console.log('Attempting to load from local cache after error...');
ae_promises.load__event_badge_obj = await db_events.badge.get(event_badge_id);
} else {
ae_promises.load__event_badge_obj = null;
}
}
if (inc_template && ae_promises.load__event_badge_obj) {
// Load the templates for the event badge
if (log_lvl) {
console.log(`Need to load the template for the badge now`);
const current_template_id = ae_promises.load__event_badge_obj.event_badge_template_id || ae_promises.load__event_badge_obj.event_badge_template_id_random;
if (current_template_id) {
ae_promises.load__event_badge_obj.event_badge_template = await load_ae_obj_id__event_badge_template({
api_cfg: api_cfg,
event_badge_template_id: current_template_id,
try_cache: try_cache,
log_lvl: log_lvl
});
}
const load_event_badge_template_obj = load_ae_obj_id__event_badge_template({
api_cfg: api_cfg,
event_badge_template_id:
ae_promises.load__event_badge_obj?.event_badge_template_id_random,
log_lvl: log_lvl
}).then((event_badge_template_obj_li) => {
if (log_lvl) {
console.log(`event_badge_template_obj_li = `, event_badge_template_obj_li);
}
return event_badge_template_obj_li;
});
if (log_lvl) {
console.log(`event_badge_template_obj = `, load_event_badge_template_obj);
}
ae_promises.load__event_session_obj.event_badge_template = load_event_badge_template_obj;
}
return ae_promises.load__event_badge_obj;
@@ -120,63 +118,71 @@ export async function load_ae_obj_li__event_badge({
console.log(`*** load_ae_obj_li__event_badge() *** event_id=${event_id}`);
}
ae_promises.load__event_badge_obj_li = await api
.get_ae_obj_li_v3({
api_cfg,
obj_type: 'event_badge',
for_obj_type: 'event',
for_obj_id: event_id,
enabled: enabled,
hidden: hidden,
view: view,
order_by_li: order_by_li,
limit: limit,
offset: offset,
log_lvl: log_lvl
})
.then(async function (badge_obj_li_get_result) {
if (badge_obj_li_get_result) {
if (try_cache) {
const processed_obj_li = await process_ae_obj__event_badge_props({
obj_li: badge_obj_li_get_result,
event_id,
log_lvl
});
await db_save_ae_obj_li__ae_obj({
db_instance: db_events,
table_name: 'badge',
obj_li: processed_obj_li,
properties_to_save,
log_lvl
});
}
return badge_obj_li_get_result;
} else {
return [];
}
})
.catch(function (error: any) {
console.log('No results returned or failed.', error);
});
if (inc_template) {
// Load the template for each badge
if (log_lvl) {
console.log(`Need to load the template for each badge now`);
}
for (const badge_obj of ae_promises.load__event_badge_obj_li) {
if (log_lvl) {
console.log(`Loading template for badge_obj: `, badge_obj);
}
const load_event_badge_template_obj = await load_ae_obj_id__event_badge_template({
api_cfg: api_cfg,
event_badge_template_id: badge_obj?.event_badge_template_id_random,
try {
ae_promises.load__event_badge_obj_li = await api
.get_ae_obj_li_v3({
api_cfg,
obj_type: 'event_badge',
for_obj_type: 'event',
for_obj_id: event_id,
enabled: enabled,
hidden: hidden,
view: view,
order_by_li: order_by_li,
limit: limit,
offset: offset,
log_lvl: log_lvl
});
if (log_lvl) {
console.log(`event_badge_template_obj = `, load_event_badge_template_obj);
if (ae_promises.load__event_badge_obj_li) {
if (try_cache) {
const processed_obj_li = await process_ae_obj__event_badge_props({
obj_li: ae_promises.load__event_badge_obj_li,
event_id,
log_lvl
});
await db_save_ae_obj_li__ae_obj({
db_instance: db_events,
table_name: 'badge',
obj_li: processed_obj_li,
properties_to_save,
log_lvl
});
}
} else {
console.log('No results returned from API.');
if (try_cache) {
if (log_lvl) console.log('Attempting to load from local cache...');
ae_promises.load__event_badge_obj_li = await db_events.badge
.where('event_id').equals(event_id)
.toArray();
} else {
ae_promises.load__event_badge_obj_li = [];
}
}
} catch (error: any) {
console.log('API request failed.', error);
if (try_cache) {
if (log_lvl) console.log('Attempting to load from local cache after error...');
ae_promises.load__event_badge_obj_li = await db_events.badge
.where('event_id').equals(event_id)
.toArray();
} else {
ae_promises.load__event_badge_obj_li = [];
}
}
if (inc_template && ae_promises.load__event_badge_obj_li) {
for (const badge_obj of ae_promises.load__event_badge_obj_li) {
const current_template_id = badge_obj.event_badge_template_id || badge_obj.event_badge_template_id_random;
if (current_template_id) {
badge_obj.event_badge_template = await load_ae_obj_id__event_badge_template({
api_cfg: api_cfg,
event_badge_template_id: current_template_id,
try_cache: try_cache,
log_lvl: log_lvl
});
}
badge_obj.event_badge_template = load_event_badge_template_obj;
}
}