diff --git a/src/lib/ae_events__event_file.ts b/src/lib/ae_events__event_file.ts index 3c491ea4..3ac26668 100644 --- a/src/lib/ae_events__event_file.ts +++ b/src/lib/ae_events__event_file.ts @@ -269,6 +269,129 @@ export async function handle_update_ae_obj__event_file( } +// Updated 2024-07-12 +export async function handle_search__event_file( + { + api_cfg, + event_id, + created_on = null, + fulltext_search_qry_str, + ft_file_search_qry_str, + like_search_qry_str = null, + like_presentation_search_qry_str = null, + like_file_search_qry_str = null, + params = {}, + try_cache = true, + log_lvl = 0 + }: { + api_cfg: any, + event_id: any, + created_on?: null|string, + fulltext_search_qry_str?: null|string, + ft_file_search_qry_str?: null|string, + like_search_qry_str?: null|string, + like_presentation_search_qry_str?: null|string, + like_file_search_qry_str?: null|string, + params?: any, + try_cache?: boolean, + log_lvl?: number + } + ) { + console.log(`*** handle_search__event_file() *** event_id=${event_id}`); + + let enabled: string = (params.qry__enabled ?? 'enabled'); // all, disabled, enabled + let hidden: string = (params.qry__hidden ?? 'not_hidden'); // all, hidden, not_hidden + let limit: number = (params.qry__limit ?? 25); // 99 + let offset: number = (params.qry__offset ?? 0); // 0 + + 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 || ft_file_search_qry_str) { + params_json['ft_qry'] = {}; + if (fulltext_search_qry_str && fulltext_search_qry_str.length > 2) { + params_json['ft_qry']['default_qry_str'] = fulltext_search_qry_str; + } + + if (ft_file_search_qry_str && ft_file_search_qry_str.length > 2) { + params_json['ft_qry']['event_file_li_qry_str'] = ft_file_search_qry_str; + } + } + + // Use the AND (AND LIKE) query + // if (like_search_qry_str || like_file_search_qry_str) { + // params_json['and_like'] = {}; + // if (like_search_qry_str && like_search_qry_str.length > 2) { + // params_json['and_like']['default_qry_str'] = like_search_qry_str; + // } + // if (like_file_search_qry_str && like_file_search_qry_str.length > 2) { + // params_json['and_like']['event_file_li_qry_str'] = like_file_search_qry_str; + // } + // } + + // Use the AND (OR LIKE) query + // if (like_search_qry_str || like_presentation_search_qry_str || like_file_search_qry_str) { + // params_json['or_like'] = {}; + // if (like_search_qry_str && like_search_qry_str.length > 2) { + // params_json['or_like']['default_qry_str'] = like_search_qry_str; + // } + // if (like_presentation_search_qry_str && like_presentation_search_qry_str.length > 2) { + // params_json['or_like']['event_presentation_li_qry_str'] = like_presentation_search_qry_str; + // } + // if (like_file_search_qry_str && like_file_search_qry_str.length > 2) { + // params_json['or_like']['event_file_li_qry_str'] = like_file_search_qry_str; + // } + // } + + // params_json['and_qry'] = {}; + + // if (created_on) { + // params_json['and_qry']['created_on'] = created_on; + // } + + let order_by_li = {'priority': 'DESC', 'sort': 'DESC', 'filename': 'ASC', 'extension': 'ASC', 'hosted_file_size': 'ASC', 'updated_on': 'DESC', 'created_on': 'DESC'}; + + ae_promises.load__event_file_obj_li = await api.get_ae_obj_li_for_obj_id_crud({ + api_cfg: api_cfg, + obj_type: 'event_file', + for_obj_type: 'event', + for_obj_id: event_id, + use_alt_table: true, // NOTE: We want to use the alt table for file searching? + use_alt_base: false, + enabled: enabled, + hidden: hidden, + order_by_li: order_by_li, + limit: limit, + offset: offset, + params_json: params_json, + params: params, + log_lvl: log_lvl + }) + .then(function (event_file_obj_li_get_result) { + if (event_file_obj_li_get_result) { + handle_db_save_ae_obj_li__event_file({obj_type: 'event_file', obj_li: event_file_obj_li_get_result}); + return event_file_obj_li_get_result; + } else { + return []; + } + }) + .catch(function (error) { + console.log('No results returned or failed.', error); + }) + .finally(function () { + }); + + if (log_lvl) { + console.log('ae_promises.load__event_file_obj_li:', ae_promises.load__event_file_obj_li); + } + return ae_promises.load__event_file_obj_li; +} + + // This function will loop through the event_file_obj_li and save each one to the DB. export function handle_db_save_ae_obj_li__event_file( { @@ -329,6 +452,19 @@ export function handle_db_save_ae_obj_li__event_file( hosted_file_content_type: obj.hosted_file_content_type, file_size: obj.file_size, hosted_file_size: obj.hosted_file_size, + + event_location_code: obj.event_location_code, + event_location_name: obj.event_location_name, + event_session_code: obj.event_session_code, + event_session_name: obj.event_session_name, + event_session_start_datetime: obj.event_session_start_datetime, + event_presentation_code: obj.event_presentation_code, + event_presentation_name: obj.event_presentation_name, + event_presentation_start_datetime: obj.event_presentation_start_datetime, + event_presenter_given_name: obj.event_presenter_given_name, + event_presenter_family_name: obj.event_presenter_family_name, + event_presenter_full_name: obj.event_presenter_full_name, + event_presenter_email: obj.event_presenter_email, }); // console.log(`Put obj with ID: ${obj.event_file_id_random} or ${id_random}`); } catch (error) { diff --git a/src/lib/ae_events_functions.ts b/src/lib/ae_events_functions.ts index 54442306..15ecb37c 100644 --- a/src/lib/ae_events_functions.ts +++ b/src/lib/ae_events_functions.ts @@ -12,6 +12,7 @@ import { handle_delete_ae_obj_id__event_file, create_event_file_obj_from_hosted_file_async, handle_update_ae_obj__event_file, + handle_search__event_file, handle_db_save_ae_obj_li__event_file, } from "$lib/ae_events__event_file"; @@ -74,6 +75,7 @@ let export_obj = { handle_load_ae_obj_li__event_file: handle_load_ae_obj_li__event_file, handle_delete_ae_obj_id__event_file: handle_delete_ae_obj_id__event_file, handle_update_ae_obj__event_file: handle_update_ae_obj__event_file, + handle_search__event_file: handle_search__event_file, handle_load_ae_obj_id__event_location: handle_load_ae_obj_id__event_location, handle_load_ae_obj_li__event_location: handle_load_ae_obj_li__event_location, diff --git a/src/lib/ae_events_stores.ts b/src/lib/ae_events_stores.ts index 7eed35de..5e0d31e7 100644 --- a/src/lib/ae_events_stores.ts +++ b/src/lib/ae_events_stores.ts @@ -281,6 +281,9 @@ let events_session_data_struct: key_val = { show_content__agree_text: false, show_content__presenter_start: false, + show_report__presenters_agree: false, + show_report__recent_files: false, + new_upload_list: null, files_uploading_count: null, }, @@ -334,6 +337,8 @@ let events_slct_obj_template: key_val = { 'file_obj': {}, 'file_obj_li': [], + 'event_file_obj_li': [], + 'location_id': null, 'location_obj': {}, 'location_obj_li': [], diff --git a/src/lib/db_events.ts b/src/lib/db_events.ts index af4eab7a..6dc094f1 100644 --- a/src/lib/db_events.ts +++ b/src/lib/db_events.ts @@ -238,6 +238,19 @@ export interface File { hosted_file_content_type: string; file_size: number; // In bytes hosted_file_size?: number; // In bytes + + event_location_code?: null|string; + event_location_name?: null|string; + event_session_code?: null|string; + event_session_name?: string; + event_session_start_datetime?: null|Date; + event_presentation_code?: null|string; + event_presentation_name?: string; + event_presentation_start_datetime?: null|Date; + event_presenter_given_name?: null|string; + event_presenter_family_name?: null|string; + event_presenter_full_name?: null|string; + event_presenter_email?: null|string; } diff --git a/src/lib/element_manage_event_file_li.svelte b/src/lib/element_manage_event_file_li.svelte index a9146452..3e0e841d 100644 --- a/src/lib/element_manage_event_file_li.svelte +++ b/src/lib/element_manage_event_file_li.svelte @@ -36,7 +36,7 @@ export let show_convert_btn: null|boolean = null; // } let ae_placeholder_li: key_val = {}; -let ae_promises: key_val = {}; // Promise; +let ae_promises: key_val = {}; let ae_tmp: key_val = {}; ae_tmp.show__file_li = true; let ae_triggers: key_val = {}; diff --git a/src/routes/events_pres_mgmt/ae_comp__event_file_obj_tbl.svelte b/src/routes/events_pres_mgmt/ae_comp__event_file_obj_tbl.svelte new file mode 100644 index 00000000..84638902 --- /dev/null +++ b/src/routes/events_pres_mgmt/ae_comp__event_file_obj_tbl.svelte @@ -0,0 +1,209 @@ + + + +
+ + +{#if event_file_id_random_li && $lq_kv__event_file_obj_li && $lq_kv__event_file_obj_li?.length > 0 && $lq_kv__event_file_obj_li?.length == event_file_id_random_li?.length} +
+ + + + + + {#if show_location_fields} + + {/if} + {#if show_session_fields} + + + {/if} + {#if show_presentation_fields} + + + {/if} + + + + + + + + {#each $lq_kv__event_file_obj_li as event_file_obj} + + + + {#if show_location_fields} + + {/if} + + {#if show_session_fields} + + + {/if} + {#if show_presentation_fields} + + + {/if} + + + + + + {/each} + +
+ Filename + ({$lq_kv__event_file_obj_li?.length}x) + SizeLocation + Session + Start datetimePresentationPresentation timeName
+ + + + + {ae_util.format_bytes(event_file_obj?.file_size)} + {#if event_file_obj?.event_location_id_random} + + {event_file_obj?.event_location_name} + {:else} + {@html ae_snip.html__not_set} + {/if} + + + + {event_file_obj?.event_session_name} + + {ae_util.iso_datetime_formatter(event_file_obj?.event_session_start_datetime, 'datetime_us_no_seconds')} + {#if event_file_obj?.event_presentation_id_random} + {event_file_obj?.event_presentation_name} + {:else} + {@html ae_snip.html__not_set} + {/if} + + {#if event_file_obj?.event_presentation_id_random} + {ae_util.iso_datetime_formatter(event_file_obj?.event_presentation_start_datetime, 'time_us_short')} + {:else} + {@html ae_snip.html__not_set} + {/if} + + {#if event_file_obj?.event_presenter_id_random} + + + {event_file_obj?.event_presenter_full_name} + + {:else} + + {@html ae_snip.html__not_set} + {/if} +
+
+{/if} + +
+ + + diff --git a/src/routes/events_pres_mgmt/ae_comp__event_presenter_obj_tbl.svelte b/src/routes/events_pres_mgmt/ae_comp__event_presenter_obj_tbl.svelte index cc4178c7..b8d700eb 100644 --- a/src/routes/events_pres_mgmt/ae_comp__event_presenter_obj_tbl.svelte +++ b/src/routes/events_pres_mgmt/ae_comp__event_presenter_obj_tbl.svelte @@ -44,12 +44,15 @@ let lq_kv__event_presenter_obj_li = liveQuery( {#if show_session_fields} - Session + + Session + ({$lq_kv__event_presenter_obj_li?.length}x) + Start datetime {/if} {#if show_presentation_fields} Presentation - Start time + Presentation time {/if} Name Email @@ -75,7 +78,7 @@ let lq_kv__event_presenter_obj_li = liveQuery( {/if} {#if show_presentation_fields} {event_presenter_obj?.event_presentation_name} - {ae_util.iso_datetime_formatter(event_presenter_obj?.event_presentation_start_time, 'time_us_short')} + {ae_util.iso_datetime_formatter(event_presenter_obj?.event_presentation_start_datetime, 'time_us_short')} {/if} diff --git a/src/routes/events_pres_mgmt/event/[slug]/reports/+page.svelte b/src/routes/events_pres_mgmt/event/[slug]/reports/+page.svelte index 3910fa34..b95c3b15 100644 --- a/src/routes/events_pres_mgmt/event/[slug]/reports/+page.svelte +++ b/src/routes/events_pres_mgmt/event/[slug]/reports/+page.svelte @@ -9,6 +9,7 @@ import type { key_val } from '$lib/ae_stores'; import { ae_util } from '$lib/ae_utils'; // import Element_ae_crud from '$lib/element_ae_crud.svelte'; import Element_data_store from '$lib/element_data_store.svelte'; +import Comp_event_file_obj_tbl from '../../../ae_comp__event_file_obj_tbl.svelte'; // import Comp_event_presenter_obj_li from '../../../ae_comp__event_presenter_obj_li.svelte'; import Comp_event_presenter_obj_tbl from '../../../ae_comp__event_presenter_obj_tbl.svelte'; @@ -33,9 +34,10 @@ let lq__event_obj = liveQuery( () => db_events.events.get($events_slct.event_id) ); +let event_file_id_random_li: string[] = []; // ['NPKOzGFKZZU']; let event_session_id_random_li: string[] = ['VSBH-19-41-50']; let event_presentation_id_random_li: string[] = ['VSBH-19-41-50']; -let event_presenter_id_random_li: string[] = ['I245hLQ4aek']; +let event_presenter_id_random_li: string[] = [];// ['I245hLQ4aek']; let load_obj_li_results: Promise|key_val; let search_submit_results: Promise|key_val; @@ -54,6 +56,96 @@ onMount(() => { }); +async function handle_search__event_file( + { + api_cfg, + event_id, + created_on = null, + ft_search_str = '', + lk_search_str = '', + params = { + 'qry__enabled': 'enabled', + 'qry__hidden': 'not_hidden', + 'qry__limit': 35,}, + try_cache=false, + log_lvl=1, + }: { + api_cfg: any, + event_id: string, + created_on?: null|string, + ft_search_str?: string, + lk_search_str?: string, + params?: key_val, + try_cache?: boolean, + log_lvl?: number, + } + ) { + console.log('handle_search__event_file()'); + + $events_sess.pres_mgmt.status_qry__search = 'loading'; + + search_submit_results = events_func.handle_search__event_file({ + api_cfg: $ae_api, + event_id: $events_slct.event_id, + created_on: created_on, + fulltext_search_qry_str: ft_search_str, + like_search_qry_str: lk_search_str, + // external_event_id: $events_loc.pres_mgmt.default__external_registration_id, + params: params, + try_cache: try_cache, + log_lvl: 0, + }) + .then(function (search_results) { + // Processing the results from the search. + $events_sess.pres_mgmt.status_qry__search = 'processing'; + $events_slct.event_file_obj_li = search_results; + console.log(search_results); + // $events_sess.pres_mgmt.status_qry__search = 'done'; + }) + .finally(() => { + if (log_lvl) { + console.log('TEST SEARCH - Search done. Pulling out the event_file_id_randoms.'); + } + // console.log(`TEST search: ${$lq_kv__event_file_obj_li}`); + + event_file_id_random_li = []; + + // We need to loop through the array of objects and get the event_file_id_random from each object a new list of event_file_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. + for (let i = 0; i < $events_slct.event_file_obj_li.length; i++) { + tmp_li.push($events_slct.event_file_obj_li[i].event_file_id_random); + } + event_file_id_random_li = tmp_li; + + // event_file_id_random_li = $events_slct.event_file_obj_li.map(file_obj => file_obj.event_file_id_random); + + // Finally done with the search. + $events_sess.pres_mgmt.status_qry__search = 'done'; + + if (log_lvl > 1) { + console.log(`TEST SEARCH - event_file_id_random_li:`, event_file_id_random_li); + // console.log(`TEST SEARCH - search live query: ${$lq_kv__event_file_obj_li}`); + } + + }); + +} + + +// handle_search__event_file({ +// api_cfg: $ae_api, +// event_id: $events_slct.event_id, +// created_on: null, +// ft_search_str: '', +// lk_search_str: '', +// params: { +// 'qry__enabled': 'enabled', +// 'qry__hidden': 'not_hidden', +// 'qry__limit': 35,}, +// try_cache: false, +// log_lvl: 2, +// }); + async function handle_search__event_presenter( { @@ -138,19 +230,19 @@ async function handle_search__event_presenter( } -handle_search__event_presenter({ - api_cfg: $ae_api, - event_id: $events_slct.event_id, - agree: true, - ft_search_str: '', - lk_search_str: '', - params: { - 'qry__enabled': 'enabled', - 'qry__hidden': 'not_hidden', - 'qry__limit': 35,}, - try_cache: false, - log_lvl: 0, -}); +// handle_search__event_presenter({ +// api_cfg: $ae_api, +// event_id: $events_slct.event_id, +// agree: true, +// ft_search_str: '', +// lk_search_str: '', +// params: { +// 'qry__enabled': 'enabled', +// 'qry__hidden': 'not_hidden', +// 'qry__limit': 35,}, +// try_cache: false, +// log_lvl: 0, +// }); @@ -253,7 +345,21 @@ handle_search__event_presenter({ type="button" disabled={!$ae_loc.trusted_access} on:click={() => { - $events_loc.pres_mgmt.show_report__presenters_agree = !$events_loc.pres_mgmt.show_report__presenters_agree; + handle_search__event_presenter({ + api_cfg: $ae_api, + event_id: $events_slct.event_id, + agree: true, + ft_search_str: '', + lk_search_str: '', + params: { + 'qry__enabled': 'enabled', + 'qry__hidden': 'not_hidden', + 'qry__limit': 35,}, + try_cache: false, + log_lvl: 1, + }); + $events_sess.pres_mgmt.show_report__presenters_agree = !$events_sess.pres_mgmt.show_report__presenters_agree; + $events_sess.pres_mgmt.show_report__recent_files = false; }} class="btn btn-sm variant-ghost-success hover:variant-filled-success transition-all mx-1" title="Show presenters who have agreed to present." @@ -269,7 +375,21 @@ handle_search__event_presenter({ type="button" disabled={!$ae_loc.administrator_access} on:click={() => { - $events_loc.pres_mgmt.show_report__recent_files = !$events_loc.pres_mgmt.show_report__recent_files; + handle_search__event_file({ + api_cfg: $ae_api, + event_id: $events_slct.event_id, + created_on: null, + ft_search_str: '', + lk_search_str: '', + params: { + 'qry__enabled': 'enabled', + 'qry__hidden': 'not_hidden', + 'qry__limit': 35,}, + try_cache: false, + log_lvl: 1, + }); + $events_sess.pres_mgmt.show_report__presenters_agree = false; + $events_sess.pres_mgmt.show_report__recent_files = !$events_sess.pres_mgmt.show_report__recent_files; }} class="btn btn-sm variant-ghost-success hover:variant-filled-success transition-all mx-1" title="NOT READY YET: Show recent file uploads." @@ -302,17 +422,28 @@ handle_search__event_presenter({ {/await} --> -{#if $events_loc.pres_mgmt.show_report__presenters_agree && event_presenter_id_random_li?.length > 0} +{#if $events_sess.pres_mgmt.show_report__presenters_agree && event_presenter_id_random_li?.length > 0}
+{/if} + +{#if $events_sess.pres_mgmt.show_report__recent_files && event_file_id_random_li?.length > 0} + + {/if}