IDAA: guard attend_json.zoom against SWR IDB re-fire crash
The Zoom button onclick initialises attend_json.zoom. However the
background SWR list fetch (load_ae_obj_li__event in +layout.ts) can
overwrite $idaa_slct.event_obj with a fresh IDB record where
attend_json = {} (no zoom key), even if the Zoom button was already
clicked.
Without the guard, the $effect that rebuilds the Zoom full URL and the
template bindings below the Zoom fields access attend_json.zoom.passcode_enc
on an undefined object, throwing a TypeError and crashing the component.
Fix: add `&& $idaa_slct.event_obj.attend_json?.zoom` guard to both the
$effect condition and the {#if} block that renders the Zoom input fields.
This commit is contained in:
@@ -643,13 +643,19 @@ Copy and paste link: <a href="${link_base_url}?event_id=${event_do.event_id}">${
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rebuild the Zoom full URL whenever Meeting ID, Passcode, Encrypted Passcode, or Domain changes
|
// Rebuild the Zoom full URL whenever Meeting ID, Passcode, Encrypted Passcode, or Domain changes.
|
||||||
|
// IMPORTANT: Guard attend_json.zoom before accessing its sub-properties.
|
||||||
|
// Background SWR re-fires (load_ae_obj_li__event in +layout.ts) can overwrite
|
||||||
|
// $idaa_slct.event_obj with a fresh IDB record where attend_json = {} (no zoom key),
|
||||||
|
// even if the Zoom button was already clicked. Without the guard, the access to
|
||||||
|
// attend_json.zoom.passcode_enc below throws a TypeError and crashes the component.
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
if (
|
if (
|
||||||
$idaa_trig == 'update_zoom_full_url' &&
|
$idaa_trig == 'update_zoom_full_url' &&
|
||||||
$idaa_slct.event_obj.attend_url_code &&
|
$idaa_slct.event_obj.attend_url_code &&
|
||||||
$idaa_slct.event_obj.attend_url_passcode &&
|
$idaa_slct.event_obj.attend_url_passcode &&
|
||||||
$idaa_sess.recovery_meetings.attend_platform === 'Zoom'
|
$idaa_sess.recovery_meetings.attend_platform === 'Zoom' &&
|
||||||
|
$idaa_slct.event_obj.attend_json?.zoom // guard: zoom may be undefined after IDB re-fire
|
||||||
) {
|
) {
|
||||||
$idaa_trig = null;
|
$idaa_trig = null;
|
||||||
|
|
||||||
@@ -1106,8 +1112,12 @@ Copy and paste link: <a href="${link_base_url}?event_id=${event_do.event_id}">${
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Zoom fields -->
|
<!-- Zoom fields.
|
||||||
{#if $idaa_sess.recovery_meetings.attend_platform === 'Zoom'}
|
Guard attend_json.zoom: the Zoom button onclick initializes it, but a background
|
||||||
|
SWR IDB re-fire (load_ae_obj_li__event from +layout.ts) can reset attend_json
|
||||||
|
to {} afterward, leaving attend_json.zoom undefined. The bind:value bindings
|
||||||
|
below crash with a TypeError if zoom is undefined — the guard prevents that. -->
|
||||||
|
{#if $idaa_sess.recovery_meetings.attend_platform === 'Zoom' && $idaa_slct.event_obj.attend_json?.zoom}
|
||||||
<div class="platform-fields flex flex-row flex-wrap gap-3">
|
<div class="platform-fields flex flex-row flex-wrap gap-3">
|
||||||
<label class="field-label" for="attend_url_code">
|
<label class="field-label" for="attend_url_code">
|
||||||
Zoom Meeting ID <span class="field-required">*</span>
|
Zoom Meeting ID <span class="field-required">*</span>
|
||||||
|
|||||||
Reference in New Issue
Block a user