fix(pres_mgmt): guard poc_kv_json null access in POC profile and agree modals
poc_kv_json is null when a session has never had POC data saved. Any bracket
access on it crashed immediately on modal open. Fix:
- Reads: use ?.[poc_type] optional chaining everywhere (checkboxes, biography_updated_on)
- Writes: initialize from a shallow copy of poc_kv_json ?? {} before indexing into it,
so the first save on a fresh session creates the structure rather than throwing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -97,20 +97,12 @@ async function handle_submit_form(event: SubmitEvent) {
|
|||||||
|
|
||||||
console.log(`opt_out_do:`, opt_out_do);
|
console.log(`opt_out_do:`, opt_out_do);
|
||||||
|
|
||||||
let event_session_data = {
|
// poc_kv_json may be null if no POC data has been saved yet — initialize before writing.
|
||||||
poc_kv_json: lq__event_session_obj.poc_kv_json
|
const kv: key_val = { ...(lq__event_session_obj.poc_kv_json ?? {}) };
|
||||||
};
|
if (!kv[poc_type]) kv[poc_type] = {};
|
||||||
console.log('event_session_data:', event_session_data);
|
kv[poc_type] = { ...kv[poc_type], ...opt_out_do };
|
||||||
|
|
||||||
// Check if poc_type exists in the event_session_data.poc_kv_json
|
let event_session_data = { poc_kv_json: kv };
|
||||||
if (!event_session_data.poc_kv_json[poc_type]) {
|
|
||||||
event_session_data.poc_kv_json[poc_type] = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
event_session_data.poc_kv_json[poc_type] = {
|
|
||||||
...event_session_data.poc_kv_json[poc_type],
|
|
||||||
...opt_out_do
|
|
||||||
};
|
|
||||||
|
|
||||||
// Use this in the future if we need to store the agreements in a more complex way?
|
// Use this in the future if we need to store the agreements in a more complex way?
|
||||||
// let event_session_data = {poc_kv_json: lq__event_session_obj?.poc_kv_json};
|
// let event_session_data = {poc_kv_json: lq__event_session_obj?.poc_kv_json};
|
||||||
@@ -201,7 +193,7 @@ async function handle_submit_form(event: SubmitEvent) {
|
|||||||
class="checkbox preset-tonal-warning border-warning-500 checked:preset-filled-warning-500 hover:preset-filled-error-500 border"
|
class="checkbox preset-tonal-warning border-warning-500 checked:preset-filled-warning-500 hover:preset-filled-error-500 border"
|
||||||
id="optout_audio"
|
id="optout_audio"
|
||||||
name="optout_audio"
|
name="optout_audio"
|
||||||
checked={lq__event_session_obj.poc_kv_json[poc_type]
|
checked={lq__event_session_obj.poc_kv_json?.[poc_type]
|
||||||
?.optout_audio}
|
?.optout_audio}
|
||||||
value={true} />
|
value={true} />
|
||||||
Opt-out - Audio Reproduction of Presentation
|
Opt-out - Audio Reproduction of Presentation
|
||||||
@@ -215,7 +207,7 @@ async function handle_submit_form(event: SubmitEvent) {
|
|||||||
class="checkbox preset-tonal-warning border-warning-500 checked:preset-filled-warning-500 hover:preset-filled-error-500 border"
|
class="checkbox preset-tonal-warning border-warning-500 checked:preset-filled-warning-500 hover:preset-filled-error-500 border"
|
||||||
id="optout_video"
|
id="optout_video"
|
||||||
name="optout_video"
|
name="optout_video"
|
||||||
checked={lq__event_session_obj.poc_kv_json[poc_type]
|
checked={lq__event_session_obj.poc_kv_json?.[poc_type]
|
||||||
?.optout_video}
|
?.optout_video}
|
||||||
value={true} />
|
value={true} />
|
||||||
Opt-out - Video Reproduction of Presentation
|
Opt-out - Video Reproduction of Presentation
|
||||||
@@ -229,7 +221,7 @@ async function handle_submit_form(event: SubmitEvent) {
|
|||||||
class="checkbox preset-tonal-warning border-warning-500 checked:preset-filled-warning-500 hover:preset-filled-error-500 border"
|
class="checkbox preset-tonal-warning border-warning-500 checked:preset-filled-warning-500 hover:preset-filled-error-500 border"
|
||||||
id="optout_transcription_and_publication"
|
id="optout_transcription_and_publication"
|
||||||
name="optout_transcription_and_publication"
|
name="optout_transcription_and_publication"
|
||||||
checked={lq__event_session_obj.poc_kv_json[poc_type]
|
checked={lq__event_session_obj.poc_kv_json?.[poc_type]
|
||||||
?.optout_transcription_and_publication}
|
?.optout_transcription_and_publication}
|
||||||
value={true} />
|
value={true} />
|
||||||
Opt-out - Transcription and Publication of Presentation on LCI
|
Opt-out - Transcription and Publication of Presentation on LCI
|
||||||
@@ -244,7 +236,7 @@ async function handle_submit_form(event: SubmitEvent) {
|
|||||||
class="checkbox preset-tonal-warning border-warning-500 checked:preset-filled-warning-500 hover:preset-filled-error-500 border"
|
class="checkbox preset-tonal-warning border-warning-500 checked:preset-filled-warning-500 hover:preset-filled-error-500 border"
|
||||||
id="optout_publication_in_app"
|
id="optout_publication_in_app"
|
||||||
name="optout_publication_in_app"
|
name="optout_publication_in_app"
|
||||||
checked={lq__event_session_obj.poc_kv_json[poc_type]
|
checked={lq__event_session_obj.poc_kv_json?.[poc_type]
|
||||||
?.optout_publication_in_app}
|
?.optout_publication_in_app}
|
||||||
value={true} />
|
value={true} />
|
||||||
Opt-out - Publication of Presentation on LCI Congress App
|
Opt-out - Publication of Presentation on LCI Congress App
|
||||||
|
|||||||
@@ -135,19 +135,13 @@ let clipboard_success = $state(false);
|
|||||||
disabled={ae_tmp.biography ==
|
disabled={ae_tmp.biography ==
|
||||||
lq__event_session_obj.biography}
|
lq__event_session_obj.biography}
|
||||||
onclick={() => {
|
onclick={() => {
|
||||||
let event_session_data = {
|
// poc_kv_json may be null if no POC data has been saved yet — initialize before writing.
|
||||||
poc_kv_json: lq__event_session_obj.poc_kv_json
|
const kv: key_val = { ...(lq__event_session_obj.poc_kv_json ?? {}) };
|
||||||
};
|
if (!kv[poc_type]) kv[poc_type] = {};
|
||||||
|
kv[poc_type]['biography'] = ae_tmp.biography;
|
||||||
|
kv[poc_type]['biography_updated_on'] = new Date().toISOString();
|
||||||
|
|
||||||
if (!event_session_data.poc_kv_json[poc_type]) {
|
let event_session_data = { poc_kv_json: kv };
|
||||||
event_session_data.poc_kv_json[poc_type] = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
event_session_data.poc_kv_json[poc_type]['biography'] =
|
|
||||||
ae_tmp.biography;
|
|
||||||
event_session_data.poc_kv_json[poc_type][
|
|
||||||
'biography_updated_on'
|
|
||||||
] = new Date().toISOString();
|
|
||||||
|
|
||||||
ae_promises.update__event_session_obj = events_func
|
ae_promises.update__event_session_obj = events_func
|
||||||
.update_ae_obj__event_session({
|
.update_ae_obj__event_session({
|
||||||
@@ -171,11 +165,10 @@ let clipboard_success = $state(false);
|
|||||||
Save Biography
|
Save Biography
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
{#if lq__event_session_obj.poc_kv_json[poc_type]?.biography_updated_on}
|
{#if lq__event_session_obj.poc_kv_json?.[poc_type]?.biography_updated_on}
|
||||||
<span class="text-sm text-gray-500">
|
<span class="text-sm text-gray-500">
|
||||||
Last saved: {ae_util.iso_datetime_formatter(
|
Last saved: {ae_util.iso_datetime_formatter(
|
||||||
lq__event_session_obj.poc_kv_json[poc_type]
|
lq__event_session_obj.poc_kv_json?.[poc_type]?.biography_updated_on,
|
||||||
?.biography_updated_on,
|
|
||||||
'datetime_12_long'
|
'datetime_12_long'
|
||||||
)}
|
)}
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
Reference in New Issue
Block a user