diff --git a/src/lib/ae_events/ae_events__event.ts b/src/lib/ae_events/ae_events__event.ts index e864199c..99e163f1 100644 --- a/src/lib/ae_events/ae_events__event.ts +++ b/src/lib/ae_events/ae_events__event.ts @@ -833,6 +833,7 @@ export async function db_save_ae_obj_li__event( mod_abstracts_json: obj.mod_abstracts_json, mod_badges_json: obj.mod_badges_json, mod_exhibits_json: obj.mod_exhibits_json, + mod_meetings_json: obj.mod_meetings_json, mod_pres_mgmt_json: obj.mod_pres_mgmt_json, cfg_json: obj.cfg_json, @@ -869,6 +870,7 @@ export async function db_save_ae_obj_li__event( attend_url: obj.attend_url, attend_url_text: obj.attend_url_text, + attend_url_code: obj.attend_url_code, attend_url_passcode: obj.attend_url_passcode, attend_phone: obj.attend_phone, attend_phone_passcode: obj.attend_phone_passcode, @@ -1059,6 +1061,7 @@ export const properties_to_save = [ 'mod_abstracts_json', 'mod_badges_json', 'mod_exhibits_json', + 'mod_meetings_json', 'mod_pres_mgmt_json', 'cfg_json', @@ -1095,6 +1098,7 @@ export const properties_to_save = [ 'attend_url', 'attend_url_text', + 'attend_url_code', 'attend_url_passcode', 'attend_phone', 'attend_phone_passcode', @@ -1183,6 +1187,7 @@ export async function process_ae_obj__event_props({ mod_abstracts_json: obj.mod_abstracts_json, mod_badges_json: obj.mod_badges_json, mod_exhibits_json: obj.mod_exhibits_json, + mod_meetings_json: obj.mod_meetings_json, mod_pres_mgmt_json: obj.mod_pres_mgmt_json, cfg_json: obj.cfg_json, @@ -1223,6 +1228,7 @@ export async function process_ae_obj__event_props({ attend_url: obj.attend_url, attend_url_text: obj.attend_url_text, + attend_url_code: obj.attend_url_code, attend_url_passcode: obj.attend_url_passcode, attend_phone: obj.attend_phone, attend_phone_passcode: obj.attend_phone_passcode, diff --git a/src/lib/ae_events/db_events.ts b/src/lib/ae_events/db_events.ts index 8aed1056..9f4c9699 100644 --- a/src/lib/ae_events/db_events.ts +++ b/src/lib/ae_events/db_events.ts @@ -43,6 +43,7 @@ export interface Event { mod_abstracts_json?: null|key_val; mod_badges_json?: null|key_val; mod_exhibits_json?: null|key_val; + mod_meetings_json?: null|key_val; mod_pres_mgmt_json?: null|key_val; cfg_json?: null|key_val; @@ -84,6 +85,7 @@ export interface Event { attend_url?: null|string; attend_url_text?: null|string; + attend_url_code?: null|string; // Meeting ID, Conference ID, etc. attend_url_passcode?: null|string; attend_phone?: null|string; attend_phone_passcode?: null|string; diff --git a/src/lib/ae_idaa_stores.ts b/src/lib/ae_idaa_stores.ts index 6572c0cc..d16ff459 100644 --- a/src/lib/ae_idaa_stores.ts +++ b/src/lib/ae_idaa_stores.ts @@ -151,6 +151,8 @@ let idaa_session_data_struct: key_val = { show__modal_edit__event_id: null, show__modal_view__event_id: null, obj_changed: false, // Used to track if the event object has been changed in the edit view + + attend_platform: null, // 'Zoom', 'Google Meet', 'Microsoft Teams', etc. }, }; diff --git a/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_id_edit.svelte b/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_id_edit.svelte index 0114ca0c..e954cc0c 100644 --- a/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_id_edit.svelte +++ b/src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_id_edit.svelte @@ -27,7 +27,7 @@ import { ae_util } from '$lib/ae_utils/ae_utils'; import { core_func } from '$lib/ae_core/ae_core_functions'; import { api } from '$lib/api'; import { ae_snip, ae_loc, ae_sess, ae_api, ae_trig, slct, slct_trigger } from '$lib/ae_stores'; -import { idaa_loc, idaa_sess, idaa_slct } from '$lib/ae_idaa_stores'; +import { idaa_loc, idaa_sess, idaa_slct, idaa_trig } from '$lib/ae_idaa_stores'; import { events_func } from '$lib/ae_events_functions'; import Tiptap_editor from '$lib/element_tiptap_editor.svelte'; @@ -101,13 +101,18 @@ if ($idaa_slct.event_id) { location_text: null, + attend_platform: null, attend_url: null, + attend_url_code: null, attend_url_passcode: null, attend_phone: null, attend_phone_passcode: null, attend_text: null, + attend_json: { + }, + timezone: null, recurring_text: null, @@ -347,7 +352,9 @@ async function handle_submit_form(event: any) { } event_do['attend_url'] = event_meeting_fd.attend_url; + event_do['attend_url_code'] = event_meeting_fd.attend_url_code; event_do['attend_url_passcode'] = event_meeting_fd.attend_url_passcode; + event_do['attend_phone'] = event_meeting_fd.attend_phone; event_do['attend_phone_passcode'] = event_meeting_fd.attend_phone_passcode; @@ -358,6 +365,41 @@ async function handle_submit_form(event: any) { console.log('New attend text is not a string. Do nothing.'); } + if ($idaa_sess.recovery_meetings?.attend_platform === 'Zoom') { + // event_do['attend_url_passcode_enc'] = event_meeting_fd.attend_url_passcode_enc; + + let zoom_attend_domain = event_meeting_fd.attend_domain ?? 'zoom.us'; + let zoom_meeting_id = event_do['attend_url_code'] ? event_do['attend_url_code'].replace(/[^0-9]/g, '').trim() : null; // Strip out any non-numeric characters + let zoom_passcode = event_do['attend_url_passcode'] ? event_do['attend_url_passcode'].trim() : null; // Strip out any non-alphanumeric characters + let zoom_passcode_enc = event_meeting_fd.attend_url_passcode_enc ? event_meeting_fd.attend_url_passcode_enc.replace(/[^a-zA-Z0-9]/g, '').trim() : null; // Strip out any non-alphanumeric characters + + let zoom_url = event_meeting_fd.zoom_attend_url ? event_meeting_fd.zoom_attend_url.trim() : null; + + // Example JSON structure: + // "zoom": { + // domain = attend_url_base; Zoom domain; Vanity URL + // meeting_id = append as /j/attend_url_code; + // passcode = attend_url_passcode + // url = ''; // generated below + // phone = ''; // ignored; Just use the standard list? + // } + // domain: only contain letters, numbers and dashes (-) + // let domain = event_do['attend_url'] ? event_do['attend_url'].replace(/[^a-zA-Z0-9-]/g, '') : null; // Strip out any non-alphanumeric characters except dashes + event_do['attend_json'] = { + 'zoom': + { + domain: zoom_attend_domain, + meeting_id: zoom_meeting_id, + passcode: zoom_passcode, + passcode_enc: zoom_passcode_enc, + full_url: zoom_url, + } + }; + console.log(event_do['attend_json']); + } else { + event_do['attend_json'] = {}; + } + event_do['timezone'] = event_meeting_fd.timezone; event_do['recurring'] = true; // Assume always true 2024-10 !!event_meeting_fd.recurring; @@ -653,15 +695,69 @@ $effect(() => { if (orig_event_obj === null || orig_event_obj === undefined || orig_event_obj === 'undefined') { obj_changed = false; } else if (!obj_changed && orig_event_obj?.id && (JSON.stringify($idaa_slct.event_obj) !== JSON.stringify(orig_event_obj) || description_changed || notes_changed)) { - // console.log('Post object has changed from original.', $inspect(orig_event_obj)); - console.log('Post object has changed from original.', orig_event_obj); - console.log('Post object has changed.', $idaa_slct.event_obj); + // console.log('Event object has changed from original.', $inspect(orig_event_obj)); + console.log('Event object has changed from original.', orig_event_obj); + console.log('Event object has changed.', $idaa_slct.event_obj); obj_changed = true; } else if (obj_changed && orig_event_obj?.id && (JSON.stringify($idaa_slct.event_obj) === JSON.stringify(orig_event_obj) && !description_changed && !notes_changed)) { obj_changed = false; + // console.log(orig_event_obj?.attend_json); + // if (orig_event_obj?.attend_json?.zoom) { + // $idaa_sess.recovery_meetings.attend_platform = 'Zoom'; + // } else { + // $idaa_sess.recovery_meetings.attend_platform = null; + // } } }); + + +// $effect(() => { +// if ($idaa_slct.event_obj?.attend_json?.zoom) { +// $idaa_sess.recovery_meetings.attend_platform = 'Zoom'; +// } else { +// $idaa_sess.recovery_meetings.attend_platform = null; +// } +// }); +if (browser && $idaa_slct.event_obj?.attend_json) { + if ($idaa_slct.event_obj?.attend_json?.zoom) { + $idaa_sess.recovery_meetings.attend_platform = 'Zoom'; + } else { + $idaa_sess.recovery_meetings.attend_platform = null; + } +} + + +$effect(() => { + if ($idaa_trig == 'update_zoom_full_url' && $idaa_slct.event_obj.attend_url_code && $idaa_slct.event_obj.attend_url_passcode && $idaa_sess.recovery_meetings.attend_platform === 'Zoom') { + $idaa_trig = null; + // $idaa_slct.event_obj.attend_json.zoom.full_url = `https://${$idaa_slct.event_obj.attend_url.replace(/[^a-zA-Z0-9-]/g, '')}/j/${$idaa_slct.event_obj.attend_url_code.replace(/[^0-9]/g, '')}?pwd=${$idaa_slct.event_obj.attend_url_passcode.replace(/[^a-zA-Z0-9]/g, '')}`; + + // $idaa_slct.event_obj.attend_url_code = String($idaa_slct.event_obj.attend_url_code).replace(/\D/g, '').trim(); + $idaa_slct.event_obj.attend_url_code = String($idaa_slct.event_obj.attend_url_code).replace(/[^0-9]/g, '').trim() ?? ''; + + $idaa_slct.event_obj.attend_url_passcode = String($idaa_slct.event_obj.attend_url_passcode).trim() ?? ''; + + // $idaa_slct.event_obj.attend_json.zoom.passcode_enc = String($idaa_slct.event_obj.attend_json.zoom.passcode_enc).replace(/[^a-zA-Z0-9]/g, '').trim(); + $idaa_slct.event_obj.attend_json.zoom.passcode_enc = String($idaa_slct.event_obj.attend_json.zoom.passcode_enc) ?? ''; + + // $idaa_slct.event_obj.attend_json.zoom.domain = $idaa_slct.event_obj.attend_json.zoom.domain ? String($idaa_slct.event_obj.attend_json.zoom.domain).replace(/[^a-zA-Z0-9.-]/g, '').trim() : 'zoom.us'; + $idaa_slct.event_obj.attend_json.zoom.domain = $idaa_slct.event_obj.attend_json.zoom.domain ? String($idaa_slct.event_obj.attend_json.zoom.domain).toLowerCase().trim() : 'zoom.us'; + $idaa_slct.event_obj.attend_json.zoom.domain = $idaa_slct.event_obj.attend_json.zoom.domain.replace(/^https?:\/\//, '').replace(/\/.*$/, ''); // Remove any leading http(s):// and anything after the first / + + if ($idaa_slct.event_obj.attend_json.zoom.passcode_enc && $idaa_slct.event_obj.attend_json.zoom.passcode_enc.length >= 8) { + $idaa_slct.event_obj.attend_json.zoom.full_url = `https://${$idaa_slct.event_obj.attend_json.zoom.domain}/j/${$idaa_slct.event_obj.attend_url_code}?pwd=${$idaa_slct.event_obj.attend_json.zoom.passcode_enc}`; + } else { + $idaa_slct.event_obj.attend_json.zoom.full_url = `https://${$idaa_slct.event_obj.attend_json.zoom.domain}/j/${$idaa_slct.event_obj.attend_url_code}?pwd=${$idaa_slct.event_obj.attend_url_passcode}`; + } + } else { + // $idaa_slct.event_obj.attend_json = {}; + // $idaa_slct.event_obj.attend_json.zoom = null; + } +}); + + + @@ -712,7 +808,7 @@ $effect(() => {