From 875f327c9003d45ee40561665ef5429cc5f65970 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Fri, 8 Mar 2024 18:00:36 -0500 Subject: [PATCH] Speakers form is now working pretty well. Including delete. --- src/lib/ae_utils.ts | 2 +- src/lib/api.js | 30 +++- src/routes/events_speakers/+page.svelte | 77 ++++++++- .../10_edit_modal__event_presenter_obj.svelte | 160 ++++++++++++++++-- 4 files changed, 243 insertions(+), 26 deletions(-) diff --git a/src/lib/ae_utils.ts b/src/lib/ae_utils.ts index 68fc0b25..aeb32660 100644 --- a/src/lib/ae_utils.ts +++ b/src/lib/ae_utils.ts @@ -438,7 +438,7 @@ function handle_url_and_message(name: string, value: null|string) { window.parent.postMessage(message, "*"); } else { url.searchParams.delete(name); - // history.pushState({}, '', url); + history.pushState({}, '', url); // console.log('url:', url); // pushState({}, '', url.search); diff --git a/src/lib/api.js b/src/lib/api.js index 3b516c93..cd23355f 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -822,7 +822,7 @@ export let get_ae_obj_li_for_obj_id_crud = async function get_ae_obj_li_for_obj_ // Updated 2023-07-24 -export let create_ae_obj_crud = async function create_ae_obj_crud({api_cfg, obj_type, field_name=null, field_value=null, fields={}, key, jwt=null, headers={}, params={}, data={}, return_obj=false, return_meta=false, log_lvl=0}) { +export let create_ae_obj_crud = async function create_ae_obj_crud({api_cfg, obj_type, field_name=null, field_value=null, fields={}, key, jwt=null, headers={}, params={}, data={}, return_obj=false, obj_v_name='', return_meta=false, log_lvl=0}) { if (log_lvl) { console.log('*** create_ae_obj_crud() ***'); } @@ -831,6 +831,12 @@ export let create_ae_obj_crud = async function create_ae_obj_crud({api_cfg, obj_ data['jwt'] = jwt; // NOTE: The key and or JWT should be in the header of the DELETE, GET, PATCH, POST + // This obj_v_name is the view name to use when returning data. Do not prefix it with v_. This is checked and done automatically by the API. + // This is not currently being exposed to other areas of the code. It is only used here. For now? + if (obj_v_name) { + obj_v_name = ''; + } + let endpoint = ''; if (obj_type == 'account') { endpoint = `/crud/account`; @@ -864,6 +870,7 @@ export let create_ae_obj_crud = async function create_ae_obj_crud({api_cfg, obj_ endpoint = `/crud/event/presentation`; } else if (obj_type == 'event_presenter') { endpoint = `/crud/event/presenter`; + // obj_v_name = 'event_presenter_soft_links'; } else if (obj_type == 'event_session') { endpoint = `/crud/event/session`; } else if (obj_type == 'event_track') { @@ -906,6 +913,11 @@ export let create_ae_obj_crud = async function create_ae_obj_crud({api_cfg, obj_ if (return_obj) { params['return_obj'] = true; + + // Pass along the view name to use for returning data. + if (obj_v_name) { + params['obj_v_name'] = obj_v_name; + } } else { params['return_obj'] = false; // NOTE: This is needed because the current default on the API is to return the object. } @@ -955,7 +967,7 @@ export let create_ae_obj_crud = async function create_ae_obj_crud({api_cfg, obj_ // Updated 2023-06-28 -export let update_ae_obj_id_crud = async function update_ae_obj_id_crud({api_cfg, obj_type, obj_id, field_name, field_value, fields={}, key, jwt=null, headers={}, params={}, data={}, return_obj=false, return_meta=false, log_lvl=0}) { +export let update_ae_obj_id_crud = async function update_ae_obj_id_crud({api_cfg, obj_type, obj_id, field_name, field_value, fields={}, key, jwt=null, headers={}, params={}, data={}, return_obj=false, obj_v_name='', return_meta=false, log_lvl=0}) { if (log_lvl) { console.log('*** update_ae_obj_id_crud() ***'); } @@ -964,6 +976,12 @@ export let update_ae_obj_id_crud = async function update_ae_obj_id_crud({api_cfg data['jwt'] = jwt; // NOTE: The key and or JWT should be in the header of the DELETE, GET, PATCH, POST + // This obj_v_name is the view name to use when returning data. Do not prefix it with v_. This is checked and done automatically by the API. + // This is not currently being exposed to other areas of the code. It is only used here. For now? + if (obj_v_name) { + obj_v_name = ''; + } + let endpoint = ''; if (obj_type == 'account') { endpoint = `/crud/account/${obj_id}`; @@ -997,6 +1015,7 @@ export let update_ae_obj_id_crud = async function update_ae_obj_id_crud({api_cfg endpoint = `/crud/event/presentation/${obj_id}`; } else if (obj_type == 'event_presenter') { endpoint = `/crud/event/presenter/${obj_id}`; + // obj_v_name = 'event_presenter_soft_links'; } else if (obj_type == 'event_session') { endpoint = `/crud/event/session/${obj_id}`; } else if (obj_type == 'event_track') { @@ -1039,6 +1058,13 @@ export let update_ae_obj_id_crud = async function update_ae_obj_id_crud({api_cfg if (return_obj) { params['return_obj'] = true; + + // Pass along the view name to use for returning data. + if (obj_v_name) { + params['obj_v_name'] = obj_v_name; + } + } else { + params['return_obj'] = false; // NOTE: This is needed because the current default on the API is to return the object. } if (field_name) { diff --git a/src/routes/events_speakers/+page.svelte b/src/routes/events_speakers/+page.svelte index db9a4a11..47759cca 100644 --- a/src/routes/events_speakers/+page.svelte +++ b/src/routes/events_speakers/+page.svelte @@ -172,15 +172,15 @@ if ($ae_loc.mod.events.event_id) { // $slct_trigger = 'load__event_presenter_obj_li'; // } -// $: if ($slct_trigger == 'load__event_presenter_obj_li' && $slct.event_id) { -// console.log(`load__event_presenter_obj_li event_id: ${$slct.event_id}`); +$: if ($slct_trigger == 'load__event_presenter_obj_li' && $slct.event_id) { + console.log(`load__event_presenter_obj_li event_id: ${$slct.event_id}`); -// $slct_trigger = null; + $slct_trigger = null; -// // $slct.event_id = $ae_loc.event_id; -// // handle_load_ae_obj_id__event({event_id: $slct.event_id, try_cache: false}); -// handle_load_ae_obj_li__event_presenter({event_id: $slct.event_id, try_cache: false}); -// } + // $slct.event_id = $ae_loc.event_id; + // handle_load_ae_obj_id__event({event_id: $slct.event_id, try_cache: false}); + handle_load_ae_obj_li__event_presenter({event_id: $slct.event_id, try_cache: false}); +} async function handle_load_ae_obj_li__event_presenter({event_id, try_cache=true}) { console.log('*** handle_load_ae_obj_li__event_presenter() ***'); @@ -281,6 +281,69 @@ async function handle_load_ae_obj_id__event_presenter({event_presenter_id, try_c return ae_event_presenter_obj_get_promise; } + + + + + + + +// // let delete_event_presenter_obj_promise: Promise; +// let delete_event_presenter_obj_promise; +// async function handle_delete_event_presenter_obj({event_presenter_id, hosted_file_id=null, method='delete'}) { +// console.log('*** handle_delete_event_presenter_obj() ***'); + +// // if (hosted_file_id) { +// // let delete_hosted_file_obj_promise = api.delete_hosted_file({ +// // api_cfg: $ae_api, +// // hosted_file_id: hosted_file_id, +// // link_to_type: 'event_presenter', +// // link_to_id: event_presenter_id, +// // rm_orphan: true, +// // // params: params, +// // key: $ae_api.api_crud_super_key, +// // log_lvl: 2 +// // }) +// // .then(function (hosted_file_obj_delete_result) { +// // if (hosted_file_obj_delete_result) { +// // // console.log(`Result:`, hosted_file_obj_delete_result); + +// // dispatch( +// // 'deleted__hosted_file_obj', +// // { +// // hosted_file_id: hosted_file_id, +// // } +// // ); +// // } +// // }) +// // .catch(function (error) { +// // console.log('The result was null or false when trying to delete.', error); +// // }); +// // } + +// delete_event_presenter_obj_promise = api.delete_ae_obj_id_crud({ +// api_cfg: $ae_api, +// obj_type: 'event_presenter', +// obj_id: event_presenter_id, +// method: method, +// // params: params, +// key: $ae_api.api_crud_super_key, +// log_lvl: 0 +// }) +// .then(function (event_presenter_obj_delete_result) { +// if (event_presenter_obj_delete_result) { +// // console.log(`Result:`, event_presenter_obj_delete_result); + +// } +// }) +// .catch(function (error) { +// console.log('The result was null or false when trying to delete.', error); +// }); + +// return delete_event_presenter_obj_promise; +// } + + diff --git a/src/routes/events_speakers/10_edit_modal__event_presenter_obj.svelte b/src/routes/events_speakers/10_edit_modal__event_presenter_obj.svelte index 2095ed85..f902105f 100644 --- a/src/routes/events_speakers/10_edit_modal__event_presenter_obj.svelte +++ b/src/routes/events_speakers/10_edit_modal__event_presenter_obj.svelte @@ -237,23 +237,43 @@ async function handle_submit_form(event) { data: event_presenter_do }); console.log(ae_promises.create__event_presenter); - $ae_loc.mod.events.presenter_link = `${$ae_loc.site_domain}/events_speakers/load?event_presenter_id=${$slct.event_presenter_id}`; - console.log('Speaker link:', $ae_loc.mod.events.presenter_link); + if (ae_promises.create__event_presenter.event_presenter_id_random) { + $slct.event_presenter_id = ae_promises.create__event_presenter.event_presenter_id_random; + $slct.event_presenter_obj = ae_promises.create__event_presenter; + $ae_loc.mod.events.presenter_link = `${$ae_loc.site_domain}/events_speakers/load?event_presenter_id=${$slct.event_presenter_id}`; + console.log('Speaker link:', $ae_loc.mod.events.presenter_link); + + // This should no longer be needed! Will add a check later to trigger this or a second create if something does not look correct. + // $slct_trigger = 'load__event_presenter_obj'; + + $ae_sess.mod.events.submit_status = 'created'; + } else { + console.log('No event_presenter_id_random was found. Something may have gone wrong.'); + $ae_sess.mod.events.submit_status = 'created_unknown'; + } $ae_loc.mod.events.disable_submit__event_presenter_obj = false; - $ae_sess.mod.events.submit_status = 'created'; - $slct_trigger = 'load__event_presenter_obj'; } else { ae_promises.update__event_presenter_obj = await handle_update__event_presenter({ obj_type: 'event_presenter', obj_id: $slct.event_presenter_id, data: event_presenter_do }); - $ae_loc.mod.events.disable_submit__event_presenter_obj = false; - $ae_sess.mod.events.submit_status = 'updated'; + console.log(ae_promises.update__event_presenter_obj); + if (ae_promises.update__event_presenter_obj.event_presenter_id_random) { + $slct.event_presenter_obj = ae_promises.update__event_presenter_obj; - $slct_trigger = 'load__event_presenter_obj'; + // $slct_trigger = 'load__event_presenter_obj'; + $ae_sess.mod.events.submit_status = 'updated'; + } else { + console.log('No event_presenter_id_random was found. Something may have gone wrong.'); + $ae_sess.mod.events.submit_status = 'updated_unknown'; + + console.log('Trigger a reload of the object.'); + $slct_trigger = 'load__event_presenter_obj'; + } + $ae_loc.mod.events.disable_submit__event_presenter_obj = false; } if ($slct.event_presenter_id) { @@ -266,6 +286,8 @@ async function handle_submit_form(event) { } else if ($store_current_tab == 'files' && $slct.event_presenter_id) { $store_current_tab = 'summary'; } + + $slct_trigger = 'load__event_presenter_obj_li'; } else { console.log('No obj ID found!'); } @@ -318,8 +340,20 @@ async function handle_submit_form_files(event) { obj_id: $slct.event_presenter_id, data: event_presenter_do }); + console.log(ae_promises.update__event_presenter_obj); + if (ae_promises.update__event_presenter_obj.event_presenter_id_random) { + $slct.event_presenter_obj = ae_promises.update__event_presenter_obj; + + // $slct_trigger = 'load__event_presenter_obj'; + $ae_sess.mod.events.submit_status = 'updated'; + } else { + console.log('No event_presenter_id_random was found. Something may have gone wrong.'); + $ae_sess.mod.events.submit_status = 'updated_unknown'; + + console.log('Trigger a reload of the object.'); + $slct_trigger = 'load__event_presenter_obj'; + } $ae_sess.mod.events.disable_submit__event_presenter_obj = false; - $ae_sess.mod.events.submit_status = 'updated'; if ($store_current_tab == 'files' && $slct.event_presenter_id) { $store_current_tab = 'summary'; @@ -370,6 +404,7 @@ async function handle_create__event_presenter({ obj_type: obj_type, fields: data, key: $ae_api.api_crud_super_key, + return_obj: true, log_lvl: 2 }) .then(async function (create__obj_result) { @@ -402,6 +437,7 @@ async function handle_update__event_presenter({ obj_id: obj_id, fields: data, key: $ae_api.api_crud_super_key, + return_obj: true, log_lvl: 2 }) .then(async function (update__obj_result) { @@ -449,6 +485,66 @@ function send_summary_email() { body_html: body_html, }); } + +// let delete_event_presenter_obj_promise: Promise; +let delete_event_presenter_obj_promise; +async function handle_delete_event_presenter_obj({event_presenter_id, hosted_file_id=null, method='delete'}) { + console.log('*** handle_delete_event_presenter_obj() ***'); + + if (hosted_file_id) { + // let delete_hosted_file_obj_promise = api.delete_hosted_file({ + // api_cfg: $ae_api, + // hosted_file_id: hosted_file_id, + // link_to_type: 'event_presenter', + // link_to_id: event_presenter_id, + // rm_orphan: true, + // // params: params, + // key: $ae_api.api_crud_super_key, + // log_lvl: 2 + // }) + // .then(function (hosted_file_obj_delete_result) { + // if (hosted_file_obj_delete_result) { + // // console.log(`Result:`, hosted_file_obj_delete_result); + + // dispatch( + // 'deleted__hosted_file_obj', + // { + // hosted_file_id: hosted_file_id, + // } + // ); + // } + // }) + // .catch(function (error) { + // console.log('The result was null or false when trying to delete.', error); + // }); + } + + delete_event_presenter_obj_promise = await api.delete_ae_obj_id_crud({ + api_cfg: $ae_api, + obj_type: 'event_presenter', + obj_id: event_presenter_id, + method: method, + // params: params, + key: $ae_api.api_crud_super_key, + log_lvl: 2 + }) + .then(function (event_presenter_obj_delete_result) { + if (event_presenter_obj_delete_result) { + // console.log(`Result:`, event_presenter_obj_delete_result); + + } + }) + .catch(function (error) { + console.log('The result was null or false when trying to delete.', error); + }); + + console.log('Trigger a reload of the object list.'); + $slct_trigger = 'load__event_presenter_obj_li'; + + parent.onClose(); + + return delete_event_presenter_obj_promise; +} @@ -675,7 +771,7 @@ function send_summary_email() { ds_code="events_speakers__form__waiver_html" ds_type="html" for_type="devent" - for_id={$slct.event_id} + for_id={$slct.event_presenter_id} ds_name="Default: Events Speaker Form - Waiver HTML" display="block" class_li="" @@ -935,20 +1031,52 @@ function send_summary_email() { {#if $slct.event_presenter_id} + + {#if $slct.event_presenter_id} + {#if $ae_loc.administrator_access} + {:else if $ae_loc.trusted_access} + + {:else} + + {/if} + {/if}