diff --git a/src/lib/ae_events_functions.ts b/src/lib/ae_events_functions.ts index f2d76ad5..f3f4ce85 100644 --- a/src/lib/ae_events_functions.ts +++ b/src/lib/ae_events_functions.ts @@ -748,6 +748,33 @@ function handle_db_save_ae_obj_li__exhibitor_tracking({obj_type, obj_li}) { } +async function handle_download_export__event_exhibit_tracking( + { + api_cfg, + exhibit_id, + file_type='CSV', // 'CSV' or 'Excel' + return_file=true, + filename='no_filename.csv', + auto_download=false, + params={}, + log_lvl=0 + } + ) { + console.log('*** stores_event_api.js: get_event_exhibit_tracking_export() ***'); + + const endpoint = `/event/exhibit/${exhibit_id}/tracking/export`; + if (file_type == 'CSV' || file_type == 'Excel') { + params['file_type'] = file_type; + } + params['return_file'] = true; + + ae_promises.download__event_exhibit_tracking_export_file = await api.get_object({api_cfg: api_cfg, endpoint: endpoint, params: params, return_blob: true, filename: filename, auto_download: auto_download, log_lvl: log_lvl}); + + console.log('ae_promises.download__event_exhibit_tracking_export_file:', ae_promises.download__event_exhibit_tracking_export_file); + return ae_promises.download__event_exhibit_tracking_export_file; +} + + let export_obj = { handle_load_ae_obj_id__event: handle_load_ae_obj_id__event, handle_load_ae_obj_id__badge: handle_load_ae_obj_id__badge, @@ -759,5 +786,6 @@ let export_obj = { handle_load_ae_obj_li__exhibit_tracking: handle_load_ae_obj_li__exhibit_tracking, handle_create_ae_obj__exhibit_tracking: handle_create_ae_obj__exhibit_tracking, handle_update_ae_obj__exhibit_tracking: handle_update_ae_obj__exhibit_tracking, + handle_download_export__event_exhibit_tracking: handle_download_export__event_exhibit_tracking, }; export let events_func = export_obj; diff --git a/src/lib/ae_events_stores.ts b/src/lib/ae_events_stores.ts index 9f55e7f8..404636a6 100644 --- a/src/lib/ae_events_stores.ts +++ b/src/lib/ae_events_stores.ts @@ -58,6 +58,8 @@ let events_local_data_struct: key_val = { show_hidden: false, // These are hidden (archived) leads so the list is not as long. show_not_enabled: false, + refresh_interval__tracking_li: 30000, // 30 seconds + // The entered_passcode is the exhibit booths shared passcode for staff. This is used to initially access the lead retrieval service. entered_passcode: null, diff --git a/src/routes/events_leads/exhibit/[slug]/+page.svelte b/src/routes/events_leads/exhibit/[slug]/+page.svelte index 31885a66..6c9f83fd 100644 --- a/src/routes/events_leads/exhibit/[slug]/+page.svelte +++ b/src/routes/events_leads/exhibit/[slug]/+page.svelte @@ -143,26 +143,7 @@ onMount(() => { } } - // if ($events_slct.exhibit_obj.license_li_json[url_lic_key] && $events_slct.exhibit_obj.license_li_json[url_lic_key].passcode == url_lic_pass) { - // console.log('License key passcode matched'); - // $events_loc.leads.auth_exhibit_kv[$events_slct.exhibit_id] = { - // key: url_lic_key, - // updated_on: new Date().toISOString() - // }; - // } else { - // console.log('License key passcode does not match'); - // return false; - // } } - - // // We need to remove the url_passcode from the URL GET params after we use it. It should be safe to assume that onMount is a safe place to do this. - // if (url_passcode) { - // // console.log('Remove the passcode from the URL.'); - // data.url.searchParams.delete('passcode'); - // let new_url = data.url.toString() - // console.log(new_url); - // goto(new_url, {replaceState: true}); - // } }); // console.log(`$ae_loc = `, $ae_loc); diff --git a/src/routes/events_leads/exhibit/[slug]/+page.ts b/src/routes/events_leads/exhibit/[slug]/+page.ts index 13114cf9..d55d80bc 100644 --- a/src/routes/events_leads/exhibit/[slug]/+page.ts +++ b/src/routes/events_leads/exhibit/[slug]/+page.ts @@ -36,7 +36,7 @@ export async function load({ parent }) { // route ae_acct.slct.event_exhibit_obj = await load_event_exhibit_obj; - let load_event_exhibit_tracking_obj_li = events_func.handle_load_ae_obj_li__exhibit_tracking({api_cfg: ae_acct.api, exhibit_id: event_exhibit_id, try_cache: false}); + let load_event_exhibit_tracking_obj_li = events_func.handle_load_ae_obj_li__exhibit_tracking({api_cfg: ae_acct.api, exhibit_id: event_exhibit_id, try_cache: false}); console.log(`load_event_exhibit_tracking_obj_li = `, load_event_exhibit_tracking_obj_li); ae_acct.slct.event_exhibit_tracking_obj_li = load_event_exhibit_tracking_obj_li; diff --git a/src/routes/events_leads/exhibit/[slug]/leads_list.svelte b/src/routes/events_leads/exhibit/[slug]/leads_list.svelte index 59d919b7..aaca082c 100644 --- a/src/routes/events_leads/exhibit/[slug]/leads_list.svelte +++ b/src/routes/events_leads/exhibit/[slug]/leads_list.svelte @@ -90,6 +90,18 @@ let lq__event_exhibit_tracking_obj_li = liveQuery( // let update_submit_results = null; +// Once this component is mounted we need to start a loop that runs every X seconds to refresh the leads list for the exhibit. +// console.log('Start the loop to refresh the leads list for the exhibit.'); +console.log('Refresh interval:', $events_loc.leads.refresh_interval__tracking_li ?? 'not set'); +let refresh_leads_list = setInterval(function () { + console.log('Refresh the leads list for the exhibit.'); + events_func.handle_load_ae_obj_li__exhibit_tracking({ + api_cfg: $ae_api, + exhibit_id: $events_slct.exhibit_id, + params: {enabled: 'all'} +}); +}, $events_loc.leads.refresh_interval__tracking_li ?? 35000); + diff --git a/src/routes/events_leads/exhibit/[slug]/leads_manage.svelte b/src/routes/events_leads/exhibit/[slug]/leads_manage.svelte index 54e27582..8d6337fe 100644 --- a/src/routes/events_leads/exhibit/[slug]/leads_manage.svelte +++ b/src/routes/events_leads/exhibit/[slug]/leads_manage.svelte @@ -14,6 +14,8 @@ import Element_ae_crud from '$lib/element_ae_crud.svelte'; // These will likely be used for patch/update triggers. Maybe delete? let ae_triggers: key_val = {}; +let ae_promises: key_val = {}; // Promise; + $: event_exhibit_obj = liveQuery( () => db_events.exhibits.get($events_slct.exhibit_id) ); @@ -29,19 +31,20 @@ $: if ($events_slct.exhibit_id) { // Updated 2022-04-22 -export let get_event_exhibit_tracking_export = async function get_event_exhibit_tracking_export({event_exhibit_id, file_type='CSV', return_file=true, filename=null, auto_download=false, params={}, log_lvl=0}) { - console.log('*** stores_event_api.js: get_event_exhibit_tracking_export() ***'); +// export let get_event_exhibit_tracking_export = async function get_event_exhibit_tracking_export({event_exhibit_id, file_type='CSV', return_file=true, filename=null, auto_download=false, params={}, log_lvl=0}) { +// console.log('*** stores_event_api.js: get_event_exhibit_tracking_export() ***'); - const endpoint = `/event/exhibit/${event_exhibit_id}/tracking/export`; - if (file_type == 'CSV' || file_type == 'Excel') { - params['file_type'] = file_type; - } - params['return_file'] = true; +// const endpoint = `/event/exhibit/${event_exhibit_id}/tracking/export`; +// if (file_type == 'CSV' || file_type == 'Excel') { +// params['file_type'] = file_type; +// } +// params['return_file'] = true; + +// let event_exhibit_tracking_export_file_get_promise = await api.get_object({api_cfg: ae_api, endpoint: endpoint, params: params, return_blob: true, filename: filename, auto_download: auto_download, log_lvl: log_lvl}); +// // console.log(event_exhibit_tracking_export_file_get_promise); +// return event_exhibit_tracking_export_file_get_promise; +// } - let event_exhibit_tracking_export_file_get_promise = await api.get_object({api_cfg: ae_api, endpoint: endpoint, params: params, return_blob: true, filename: filename, auto_download: auto_download, log_lvl: log_lvl}); - // console.log(event_exhibit_tracking_export_file_get_promise); - return event_exhibit_tracking_export_file_get_promise; -} @@ -404,14 +407,32 @@ export let get_event_exhibit_tracking_export = async function get_event_exhibit_ if (!confirm('Download exported data Excel file?')) { return false; } - get_event_exhibit_tracking_export({ 'event_exhibit_id': $events_slct.exhibit_id, file_type: 'Excel', 'return_file': true, filename: `lead_retrieval_export_${$events_slct.exhibit_obj.name.replaceAll(' ', '_')}.xlsx`, auto_download: true, log_lvl: 2 }); + ae_promises.download__exhibit_tracking_export = events_func.handle_download_export__event_exhibit_tracking({ + api_cfg: $ae_api, + exhibit_id: $events_slct.exhibit_id, + file_type: 'Excel', + return_file: true, + filename: `lead_retrieval_export_${$events_slct.exhibit_obj.name.replaceAll(' ', '_')}.xlsx`, + auto_download: true, + log_lvl: 2 + }); + + // get_event_exhibit_tracking_export({ 'event_exhibit_id': $events_slct.exhibit_id, file_type: 'Excel', 'return_file': true, filename: `lead_retrieval_export_${$events_slct.exhibit_obj.name.replaceAll(' ', '_')}.xlsx`, auto_download: true, log_lvl: 2 }); // .replace(' ', '_') }} - disabled={true} + disabled={!$events_slct.exhibit_obj.priority} class="btn btn-sm variant-ghost-primary w-48 mb-1 export_data_btn" title={`TEMPORARILY DISABLED: Download leads data for ${$events_slct.exhibit_obj.name}`} > + {#await ae_promises.download__exhibit_tracking_export} + + + {:then} + + {/await} Export Data @@ -424,6 +445,34 @@ export let get_event_exhibit_tracking_export = async function get_event_exhibit_ Additional Settings +
+ List refresh interval in seconds: + +
+