diff --git a/src/lib/ae_events__event_session.ts b/src/lib/ae_events__event_session.ts index a136040a..3937ad08 100644 --- a/src/lib/ae_events__event_session.ts +++ b/src/lib/ae_events__event_session.ts @@ -271,6 +271,97 @@ export async function handle_load_ae_obj_li__event_session( } +// Updated 2024-08-14 +export async function handle_qry__event_session( + { + api_cfg, + event_id, + qry_str, + qry_files, + params = {}, + try_cache = true, + log_lvl = 0 + }: { + api_cfg: any, + event_id: any, + qry_str?: string, + qry_files?: null|boolean, + params?: any, + try_cache?: boolean, + log_lvl?: number + } + ) { + console.log(`*** handle_qry__event_session() *** event_id=${event_id} qry_str=${qry_str}`); + + 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 (qry_str && qry_str.length > 2) { + // params_json['ft_qry'] = {}; + // params_json['ft_qry']['default_qry_str'] = qry_str; + // } + + params_json['qry'] = {}; + + if (qry_files === true) { + params_json['qry'] = [ + { + type: "AND", + field: "file_count_all", + operator: ">", + value: 0 + }, + ]; + } else if (qry_files === false) { + params_json['qry'] = [ + { + type: "AND", + field: "file_count_all", + operator: "IS", + value: null + }, + ]; + } + + let order_by_li = {'priority': 'DESC', 'sort': 'DESC', 'start_datetime': 'ASC', 'name': 'ASC', 'updated_on': 'DESC', 'created_on': 'DESC'}; + + ae_promises.load__event_session_obj_li = await api.get_ae_obj_li_for_obj_id_crud_v2({ + api_cfg: api_cfg, + obj_type: 'event_session', + for_obj_type: 'event', + for_obj_id: event_id, + use_alt_tbl: true, // NOTE: We want to use the alt table for session searching + use_alt_mdl: false, + use_alt_exp: 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_session_obj_li_get_result) { + if (event_session_obj_li_get_result) { + handle_db_save_ae_obj_li__event_session({obj_type: 'event_session', obj_li: event_session_obj_li_get_result}); + return event_session_obj_li_get_result; + } else { + return []; + } + }); + + if (log_lvl) { + console.log('ae_promises.load__event_session_obj_li:', ae_promises.load__event_session_obj_li); + } + return ae_promises.load__event_session_obj_li; +} + + export async function handle_search__event_session( { api_cfg, @@ -280,6 +371,7 @@ export async function handle_search__event_session( like_search_qry_str = null, like_presentation_search_qry_str = null, like_presenter_search_qry_str = null, + file_count = false, // If true then only show those that have a file count params = {}, try_cache = true, log_lvl = 0 @@ -291,6 +383,7 @@ export async function handle_search__event_session( like_search_qry_str?: null|string, like_presentation_search_qry_str?: null|string, like_presenter_search_qry_str?: null|string, + file_count?: boolean, params?: any, try_cache?: boolean, log_lvl?: number @@ -348,9 +441,9 @@ export async function handle_search__event_session( params_json['and_qry'] = {}; - // if (session_type_code) { - // params_json['and_qry']['session_type_code'] = session_type_code; - // } + if (file_count) { + params_json['and_qry']['file_count'] = file_count; + } let order_by_li = {'priority': 'DESC', 'sort': 'DESC', 'start_datetime': 'ASC', 'name': 'ASC', 'updated_on': 'DESC', 'created_on': 'DESC'}; diff --git a/src/lib/ae_events_functions.ts b/src/lib/ae_events_functions.ts index 9c034686..3e903fbd 100644 --- a/src/lib/ae_events_functions.ts +++ b/src/lib/ae_events_functions.ts @@ -37,6 +37,7 @@ import { import { handle_load_ae_obj_id__event_session, handle_load_ae_obj_li__event_session, + handle_qry__event_session, handle_search__event_session, handle_db_save_ae_obj_li__event_session, handle_email_sign_in__event_session, @@ -87,6 +88,7 @@ let export_obj = { handle_load_ae_obj_id__event_session: handle_load_ae_obj_id__event_session, handle_load_ae_obj_li__event_session: handle_load_ae_obj_li__event_session, + handle_qry__event_session: handle_qry__event_session, handle_search__event_session: handle_search__event_session, handle_email_sign_in__event_session: handle_email_sign_in__event_session, handle_db_save_ae_obj_li__event_session: handle_db_save_ae_obj_li__event_session, diff --git a/src/lib/api.ts b/src/lib/api.ts index dd02da96..edc1ab40 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -8,6 +8,8 @@ import { get_object } from './api_get_object'; // Exported at the end of this fi import { patch_object } from './api_patch_object'; // Exported at the end of this file import { post_object } from './api_post_object'; // Exported at the end of this file +import { get_ae_obj_li_for_obj_id_crud_v2 } from '$lib/api_get__crud_obj_li_v2'; + // Updated 2023-12-01 export let get_ae_obj_id_crud = async function get_ae_obj_id_crud( @@ -25,7 +27,7 @@ export let get_ae_obj_id_crud = async function get_ae_obj_id_crud( offset=0, data={}, // key, - jwt=null, + // jwt=null, headers={}, params={}, timeout=25000, @@ -45,7 +47,7 @@ export let get_ae_obj_id_crud = async function get_ae_obj_id_crud( offset?: number, data?: any, // key: string, - jwt?: string, + // jwt?: string, headers?: any, params?: any, timeout?: number, @@ -1309,6 +1311,7 @@ export let send_email = async function send_email( // } let obj = { + get_ae_obj_li_for_obj_id_crud_v2: get_ae_obj_li_for_obj_id_crud_v2, delete_object: delete_object, get_object: get_object, patch_object: patch_object, diff --git a/src/lib/api_get__crud_obj_li_v2.ts b/src/lib/api_get__crud_obj_li_v2.ts new file mode 100644 index 00000000..318af544 --- /dev/null +++ b/src/lib/api_get__crud_obj_li_v2.ts @@ -0,0 +1,234 @@ +import type { key_val } from '$lib/ae_stores'; +import { get_object } from './api_get_object'; // Exported at the end of this file + +// The lookup "obj_type" should broken out into a separate function. - 2024-08-07 +// Updated 2023-11-15 +export async function get_ae_obj_li_for_obj_id_crud_v2( + { + api_cfg, + obj_type, + for_obj_type, + for_obj_id, // NOTE: Changed 2023-12-06 to no longer required + use_alt_tbl=false, + use_alt_mdl=false, + use_alt_exp=false, + inc={}, + enabled='enabled', + hidden='not_hidden', + order_by_li=null, + limit=999999, + offset=0, + // key, + // jwt=null, + headers={}, + params_json=null, // NOTE: This is a JSON object that needs to be safely converted to a string for the params. This is used for the API endpoint. Example: { "fulltext_search": { "default_qry_str": "Search string for default", "address_default_qry_str": "Search string for address", "contact_1_default_qry_str": "Search string for contact_1" } } + // json_obj=null, // NOTE: This is a JSON object that needs to be safely converted to a string for the params. This is used for the search endpoint. + params={}, + return_meta=false, + log_lvl=1 + }: { + api_cfg: any, + obj_type: string, + for_obj_type: string, + for_obj_id?: string, + use_alt_tbl?: boolean|string, + use_alt_mdl?: boolean|string, + use_alt_exp?: boolean|string, + inc?: key_val + enabled?: string, + hidden?: string, + order_by_li?: any, + limit?: number, + offset?: number, + // key: string, + // jwt?: string, + headers?: any, + params_json?: any, + // json_obj?: any, + params?: key_val, + return_meta?: boolean, + log_lvl?: number + } + ) { + if (log_lvl) { + console.log('*** get_ae_obj_li_for_obj_id_crud() ***'); + } + + // data = {}; + // data['super_key'] = key; + // data['jwt'] = jwt; + // NOTE: The key and or JWT should be in the header of the DELETE, GET, PATCH, POST + + // const endpoint = `/crud/${obj_type}/list`; + + let endpoint = ''; + if (obj_type == 'account') { + endpoint = `/crud/account/list`; + } else if (obj_type == 'address') { + endpoint = `/crud/address/list`; + } else if (obj_type == 'archive') { + endpoint = `/crud/archive/list`; + } else if (obj_type == 'archive_content') { + endpoint = `/crud/archive/content/list`; + } else if (obj_type == 'contact') { + endpoint = `/crud/contact/list`; + } else if (obj_type == 'data_store') { + endpoint = `/crud/data_store/list`; + } else if (obj_type == 'event') { + endpoint = `/crud/event/list`; + } else if (obj_type == 'event_abstract') { + endpoint = `/crud/event/abstract/list`; + } else if (obj_type == 'event_badge') { + endpoint = `/crud/event/badge/list`; + } else if (obj_type == 'event_device') { + endpoint = `/crud/event/device/list`; + } else if (obj_type == 'event_exhibit') { + endpoint = `/crud/event/exhibit/list`; + } else if (obj_type == 'event_exhibit_tracking') { + endpoint = `/crud/event/exhibit/tracking/list`; + } else if (obj_type == 'event_file') { + endpoint = `/crud/event/file/list`; + } else if (obj_type == 'event_location') { + endpoint = `/crud/event/location/list`; + } else if (obj_type == 'event_person') { + endpoint = `/crud/event/person/list`; + } else if (obj_type == 'event_presentation') { + endpoint = `/crud/event/presentation/list`; + } else if (obj_type == 'event_presenter') { + endpoint = `/crud/event/presenter/list`; + } else if (obj_type == 'event_session') { + endpoint = `/crud/event/session/list`; + } else if (obj_type == 'event_track') { + endpoint = `/crud/event/track/list`; + } else if (obj_type == 'grant') { + endpoint = `/crud/grant/list`; + } else if (obj_type == 'hosted_file') { + endpoint = `/crud/hosted_file/list`; + } else if (obj_type == 'journal') { + endpoint = `/crud/journal/list`; + } else if (obj_type == 'journal_entry') { + endpoint = `/crud/journal/entry/list`; + } else if (obj_type == 'order') { + endpoint = `/crud/order/list`; + } else if (obj_type == 'order_line') { + endpoint = `/crud/order/line/list`; + } else if (obj_type == 'page') { + endpoint = `/crud/page/list`; + } else if (obj_type == 'person') { + endpoint = `/crud/person/list`; + } else if (obj_type == 'post') { + endpoint = `/crud/post/list`; + } else if (obj_type == 'post_comment') { + endpoint = `/crud/post/comment/list`; + } else if (obj_type == 'site') { + endpoint = `/crud/site/list`; + } else if (obj_type == 'sponsorship_cfg') { + endpoint = `/crud/sponsorship/cfg/list`; + } else if (obj_type == 'sponsorship') { + endpoint = `/crud/sponsorship/list`; + // } else if (obj_type == 'user') { + // endpoint = `/crud/user/list`; + // } else if (obj_type == 'lu' && for_obj_type == 'country_subdivision') { + // endpoint = `/crud/lu/country_subdivision/list`; + // for_obj_type = null; + // } else if (obj_type == 'lu' && for_obj_type == 'country') { + // endpoint = `/crud/lu/country/list`; + // for_obj_type = null; + // } else if (obj_type == 'lu' && for_obj_type == 'time_zone') { + // endpoint = `/crud/lu/time_zone/list`; + // for_obj_type = null; + } else { + console.log(`Unknown object type: ${obj_type}`); + return false; + } + endpoint = `/v2${endpoint}`; + if (log_lvl) { + console.log('Endpoint:', endpoint); + } + + if (for_obj_type) { + params['for_obj_type'] = for_obj_type; + } + if (for_obj_id) { + params['for_obj_id'] = for_obj_id; + } + + if (use_alt_tbl === true) { + params['tbl_alt'] = 'alt'; // Use alternate table or view name + } + if (use_alt_mdl === true) { + params['mdl_alt'] = 'alt'; // Use alternate model name + } + if (use_alt_exp === true) { + params['exp_alt'] = 'alt'; // Use alternate export table or view name + } + + /* Need to deal with inc params here */ + + let allowed_enabled_list = ['all', 'enabled', 'not_enabled'] + if (allowed_enabled_list.includes(enabled) ) { + params['enabled'] = enabled; + } + + let allowed_hidden_list = ['all', 'hidden', 'not_hidden']; + if (allowed_hidden_list.includes(hidden) ) { + params['hidden'] = hidden; + } + + // NOTE: The order_by_li variable is in the "headers" because if is a the URL GET params do not handle multiple values very well. Maybe base64 encore in the future or something? Reminder that GET requests should not have a body (no JSON). + // NOTE: The order_by_li should be a key value pair of the property/DB field to sort and how to sort (ASC or DESC) + if (order_by_li) { + headers['order_by_li'] = order_by_li; + } + + if (limit >= 0) { + params['limit'] = limit; + } + + if (offset >= 0) { + params['offset'] = offset; + } + + if (params_json) { + // NOTE: This is a JSON object that needs to be safely converted to a string for the params. This is used for the search endpoint. + // Max characters for a GET request is 2083. This is a limitation of the browser (Microsoft IE and Edge). + console.log('JSON Object:', params_json); + console.log(JSON.stringify(params_json)); + // NOTE: "jp" stands for "JSON Params" + params['jp'] = encodeURIComponent(JSON.stringify(params_json)); + if (params['jp'].length > 2083) { + console.log(`The JSON object is too large to be used as a GET parameter. The overall max URL length is 2083 characters. Please use the POST endpoint instead. Length = ${params['jp'].length} [THIS DOES NOT EXIST YET]`); + return false; + } + } + + // if (json_obj) { + // // NOTE: This is a JSON object that needs to be safely converted to a string for the params. This is used for the search endpoint. + // // Max characters for a GET request is 2083. This is a limitation of the browser (Microsoft IE and Edge). + // console.log('JSON Object:', json_obj); + // params['json_str'] = encodeURIComponent(JSON.stringify(json_obj)); + // if (params['json_str'].length > 2083) { + // console.log(`The JSON object is too large to be used as a GET parameter. The overall max URL length is 2083 characters. Please use the POST endpoint instead. Length = ${params['json_str'].length} [THIS DOES NOT EXIST YET]`); + // return false; + // } + // } + + if (log_lvl) { + console.log('Params:', params); + } + + let object_li_get_promise = await get_object({ + api_cfg: api_cfg, + endpoint: endpoint, + headers: headers, + params: params, + return_meta: return_meta, + log_lvl: log_lvl + }); + + if (log_lvl > 1) { + console.log(object_li_get_promise); + } + + return object_li_get_promise; +} \ No newline at end of file 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 index 30445222..c8d5a0af 100644 --- 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 @@ -97,7 +97,8 @@ let lq_kv__event_file_obj_li = liveQuery( class=""> {#each $lq_kv__event_file_obj_li as event_file_obj}
| Name | +Start Datetime | +Location | +Session Files | +Presenter Files | +
|---|---|---|---|---|
| + + {event_session_obj?.name} + + | ++ {ae_util.iso_datetime_formatter(event_session_obj?.start_datetime, 'datetime_us_no_seconds')} + | ++ {event_session_obj?.event_location_name} + | ++ {event_session_obj?.file_count ?? '0'} + | ++ {event_session_obj?.file_count_all ?? '0'} + | +
+ No sessions found. +
+{/if} + + +