Moving files around. Breaking links to sessions and other things.

This commit is contained in:
Scott Idem
2024-10-30 18:14:30 -04:00
parent 79e83c26a7
commit 19ce353a26
41 changed files with 417 additions and 429 deletions

View File

@@ -0,0 +1,411 @@
<script lang="ts">
/** @type {import('./$types').PageData} */
export let data: any;
let log_lvl = 0;
// console.log(`ae_events_pres_mgmt event [session_id] +page.svelte data:`, data);
// Imports
import { Modal } from 'flowbite-svelte';
import { onMount } from 'svelte';
import type { key_val } from '$lib/ae_stores';
import { ae_util } from '$lib/ae_utils/ae_utils';
import Element_data_store from '$lib/element_data_store_v2.svelte';
let ae_promises: key_val = {};
let ae_tmp: key_val = {};
let ae_triggers: key_val = {};
import { liveQuery } from "dexie";
import { core_func } from '$lib/ae_core_functions';
import { db_events } from "$lib/db_events";
import { ae_snip, ae_loc, ae_sess, ae_api, ae_trig, slct, slct_trigger } from '$lib/ae_stores';
import { events_loc, events_sess, events_slct, events_trigger, events_trig_kv } from '$lib/ae_events_stores';
import { events_func } from '$lib/ae_events_functions';
import Comp_event_files_upload from '../../../ae_comp__event_files_upload.svelte';
import Comp_event_presenter_form_agree from '../../presenter/[presenter_id]/ae_comp__event_presenter_form_agree.svelte';
import Element_manage_event_file_li_wrap from '$lib/element_manage_event_file_li_direct.svelte';
import Session_view from './session_view.svelte';
import Session_page_menu from './session_page_menu.svelte';
// import Sign_in_out from './../../sign_in_out.svelte';
import { browser } from '$app/environment';
// Variables
if (browser) {
console.log('Browser environment detected.');
}
// Quickly save the data passed from the parent(s) to the Svelte stores, localStorage, and other.
$slct.account_id = data.account_id;
// console.log(`$slct.account_id = `, $slct.account_id);
let ae_acct = data[$slct.account_id];
// console.log(`ae_acct = `, ae_acct);
$ae_loc.url_origin = data.url.origin;
$events_slct.event_id = ae_acct.slct.event_id;
// $events_slct.event_obj = ae_acct.slct.event_obj;
$events_slct.event_session_id = ae_acct.slct.event_session_id;
// $events_slct.event_session_obj = ae_acct.slct.event_session_obj;
$events_slct.event_presentation_id = null;
// $events_slct.event_presentation_obj = null;
$events_slct.event_presentation_obj_li = ae_acct.slct.event_presentation_obj_li;
// $events_slct.event_file_obj_li = ae_acct.slct.event_file_obj_li;
if (!$events_loc.auth__person) {
$events_loc.auth__person = {
id: null,
email: null,
full_name: null,
entered_key: null,
entered_passcode: null,
};
}
if (!$events_loc.auth__kv) {
$events_loc.auth__kv = {
session: {},
presentation: {},
presenter: {},
person: {},
};
}
if (!$events_loc.pres_mgmt) {
$events_loc.pres_mgmt = {};
}
if (!$events_sess.pres_mgmt) {
$events_sess.pres_mgmt = {};
$events_sess.pres_mgmt.show_content__agree_text = null;
$events_sess.pres_mgmt.show_content__presenter_start = null;
}
$events_sess.pres_mgmt.show_content__agree_text = false;
$events_sess.pres_mgmt.show_content__presenter_start = false;
let lq__event_obj = liveQuery(
() => db_events.events.get($events_slct.event_id)
);
let lq__event_session_obj = liveQuery(
() => db_events.sessions.get(ae_acct.slct.event_session_id)
);
let lq__event_presentation_obj_li = liveQuery(
() => db_events.presentations
.where('event_session_id')
.equals(ae_acct.slct.event_session_id)
.sortBy('name')
);
let lq__event_presenter_obj = liveQuery(
() => db_events.presenters.get($events_slct.event_presenter_id)
);
let lq__auth__event_presenter_obj = liveQuery(
() => db_events.presenters.get($events_loc.auth__person.presenter_id ?? null)
);
$slct.person_obj_kv = {}; // This is intended for the POC lookup list when generated.
// JSON formatted configuration options for an event, and specifically for the presentation management module.
$: if ($lq__event_obj?.mod_pres_mgmt_json) {
// if (log_lvl) {
// console.log(`*** Event Pres Mgmt JSON *** pres_mgmt_cfg_local`, $events_loc.pres_mgmt);
// }
// $events_loc.pres_mgmt =
events_func.sync_config__event_pres_mgmt({
pres_mgmt_cfg_remote: $lq__event_obj?.mod_pres_mgmt_json,
pres_mgmt_cfg_local: $events_loc?.pres_mgmt,
log_lvl: log_lvl,
});
// if (log_lvl) {
// console.log(`*** Event Pres Mgmt JSON *** pres_mgmt_cfg_local`, $events_loc.pres_mgmt);
// }
}
if (!$ae_loc.authenticated_access && $events_loc.pres_mgmt.show_content__session_view) {
$events_loc.pres_mgmt.show_content__session_view = null;
}
// Functions and Logic
onMount(() => {
console.log('Events Session [session_id]: +page.svelte');
});
</script>
<svelte:head>
<title>
Session: {ae_util.shorten_string({string: $lq__event_session_obj?.name ?? 'Loading...', max_length: 12})} ({$lq__event_session_obj?.event_session_id ?? ''}) - Pres Mgmt - {$events_loc?.title}
</title>
</svelte:head>
<section
class="
ae_events_pres_mgmt_event_session
container
flex flex-col gap-1
items-center
justify-start
mx-auto
py-1 px-2 pb-16
h-full
min-w-full
max-w-max
"
>
<Session_page_menu
data={data}
lq__event_session_obj={lq__event_session_obj}
lq__auth__event_presenter_obj={lq__auth__event_presenter_obj}
/>
{#if !$lq__event_session_obj}
<div>
<span class="fas fa-spinner fa-spin m-1"></span>
<span>Loading session information...</span>
</div>
{:else if $lq__event_session_obj?.enable || $ae_loc.trusted_access}
<h2 class="h2 text-center rounded-md p-1 px-2 bg-gray-300 flex flex-row gap-0.25 items-center justify-between w-full">
<span
class="flex flex-row gap-1 items-center"
>
<!-- <span class="fas fa-calendar-day m-1"></span> -->
<span class="fas fa-chalkboard-teacher m-1"></span>
<!-- Button to toggle between the regular session view and managing session files -->
<button
type="button"
on:click={() => {
if ($events_loc.pres_mgmt.show_content__session_view == 'manage_files') {
$events_loc.pres_mgmt.show_content__session_view = null;
} else {
$events_loc.pres_mgmt.show_content__session_view = 'manage_files';
}
}}
class="btn btn-md hover:variant-filled-primary"
class:variant-ghost-tertiary={$events_loc.pres_mgmt.show_content__session_view == 'manage_files'}
class:variant-filled-tertiary={$events_loc.pres_mgmt.show_content__session_view != 'manage_files'}
class:hidden={!$ae_loc.public_access}
title="View session information or manage files for the session"
>
{#if $events_loc.pres_mgmt.show_content__session_view == 'manage_files'}
<span class="fas fa-users m-1"></span>
<!-- View Details -->
Session Presenters?
{:else}
<span class="fas fa-file-archive m-1"></span>
Session Files?
<span
class="badge variant-glass-success"
class:hidden={!$lq__event_session_obj?.file_count}
>
<span class="fas fa-file-alt m-1"></span>
{$lq__event_session_obj?.file_count}&times;
</span>
{/if}
</button>
</span>
{@html $lq__event_session_obj?.name ?? ae_snip.html__not_set}
{#if !$events_loc.pres_mgmt?.hide__session_code && $lq__event_session_obj.code || $ae_loc.edit_mode}
<span
class="badge text-sm variant-glass-tertiary flex flex-col gap-0.25"
title="Session code {$lq__event_session_obj.code}"
>
<span>
<span class="fas fa-barcode m-1"></span>
code
</span>
{$lq__event_session_obj.code}
</span>
{/if}
</h2>
<Element_data_store
ds_code="events__pres_mgmt__session_msg"
ds_name="Default: Events - Pres Mgmt Session Message"
ds_type="html"
for_type="event"
for_id={$lq__event_session_obj?.event_id}
class_li="w-full max-w-screen-lg text-lg text-blue-500 font-bold text-center p-1 m-auto border border-blue-200 rounded-md bg-blue-100 space-y-2"
hide={!$ae_loc.manager_access || $events_loc.pres_mgmt.hide__session_msg}
show_edit={false}
show_edit_btn={true}
/>
<div class="m-1 flex flex-col flex-wrap gap-1 items-center">
{#if $ae_loc.trusted_access || ($events_loc.auth__person.id && $events_loc.auth__kv.session[$lq__event_session_obj?.event_session_id]) }
{#if $events_loc.auth__kv.session[$lq__event_session_obj?.event_session_id] === true}
<h3 class="h3">Welcome {$lq__event_session_obj?.poc_person_full_name ?? 'Session POC'}</h3>
{:else if $events_loc.auth__kv.session[$lq__event_session_obj?.event_session_id] == 'read'}
<h3 class="h3">Welcome {$lq__auth__event_presenter_obj?.full_name ?? 'Presenter'}</h3>
{/if}
<!-- {#if $ae_loc.trusted_access || $events_loc.auth__kv.session[$lq__event_session_obj?.event_session_id] || ($events_loc.auth__kv.presenter[$events_slct.event_presenter_id] && $lq__event_presenter_obj?.agree)} -->
{#if
$ae_loc.trusted_access ||
$events_loc.auth__kv.session[$lq__event_session_obj?.event_session_id] === true ||
($events_loc.auth__kv.session[$lq__event_session_obj?.event_session_id] == 'read' && $lq__auth__event_presenter_obj?.agree)
}
<!-- Message if they have agreed -->
<Element_data_store
ds_code="events__pres_mgmt__session_page_authorized_info"
ds_name="Default: Events - Pres Mgmt Session Authorized Info"
ds_type="html"
for_type="event"
for_id={$lq__event_session_obj?.event_id}
class_li="w-fit max-w-screen-lg flex flex-col sm:flex-row gap-1"
show_edit={false}
show_edit_btn={true}
mount_reload_sec={1}
/>
{:else if ($events_loc.auth__kv.session[$lq__event_session_obj?.event_session_id] == 'read' && !$lq__event_presenter_obj?.agree)}
<!-- Message if they have not yet agreed -->
<Element_data_store
ds_code="events__pres_mgmt__presenter_agree_read_consent"
ds_name="Default: Events - Pres Mgmt Session Restricted Access"
ds_type="html"
for_type="event"
for_id={$lq__event_session_obj?.event_id}
class_li="w-fit max-w-screen-lg text-lg text-red-500 font-bold text-center p-1 m-1 border border-red-200 rounded-md bg-red-100 space-y-2"
show_edit={false}
show_edit_btn={true}
/>
{/if}
{:else}
<Element_data_store
ds_code="events__pres_mgmt__session_page_restricted_access"
ds_name="Default: Events - Pres Mgmt Session Restricted Access"
ds_type="html"
for_type="event"
for_id={$lq__event_presenter_obj?.event_id}
class_li="w-fit max-w-screen-lg text-xl text-red-500 font-bold text-center p-1 m-1 border border-red-200 rounded-md bg-red-100"
show_edit={false}
show_edit_btn={true}
/>
{/if}
</div>
{#if !$events_loc.pres_mgmt.show_content__session_view || $events_loc.pres_mgmt.show_content__session_view == 'default'}
<Session_view
lq__event_presenter_obj={lq__event_presenter_obj}
lq__event_session_obj={lq__event_session_obj}
lq__auth__event_presenter_obj={lq__auth__event_presenter_obj}
lq__event_presentation_obj_li={lq__event_presentation_obj_li}
/>
{:else if $events_loc.pres_mgmt.show_content__session_view == 'manage_files' && $ae_loc.public_access}
<div>
<h3 class="h5 text-center">
<span class="fas fa-tasks m-1"></span>
<span class="fas fa-mail-bulk m-1"></span>
Manage and Upload Session Files:
<span
class="badge variant-glass-success"
class:hidden={!$lq__event_session_obj?.file_count}
>
<span class="fas fa-file-alt m-1"></span>
{$lq__event_session_obj?.file_count}&times;
</span>
</h3>
<Comp_event_files_upload
class_li="border border-gray-300 rounded-md p-2 bg-gray-100 hover:bg-gray-200"
link_to_type="event_session"
link_to_id={$lq__event_session_obj.event_session_id}
>
<span slot="label">
<div>
<span class="fas fa-upload"></span>
<strong class="bg-yellow-100 p-1">Upload session (breakout) specific files only!</strong>
</div>
<span class="text-sm text-gray-600 dark:text-gray-400 italic">
<strong>Session (breakout) files only</strong><br>
Recommended: PowerPoint (pptx) or Keynote (key)<br>
Media: Audio and videos files should be directly embedded in PowerPoint (PPTX) files<br>
Supplemental files: mp4, PDF, Word Doc, Excel, txt, etc
</span>
</span>
</Comp_event_files_upload>
<div class="overflow-x-auto w-max max-w-full">
<Element_manage_event_file_li_wrap
link_to_type={'event_session'}
link_to_id={$lq__event_session_obj?.event_session_id}
allow_basic={$events_loc.auth__kv.session[$lq__event_session_obj.event_session_id] || $events_loc.auth__kv.session[$lq__event_session_obj?.event_session_id]}
allow_moderator={$events_loc.auth__kv.session[$lq__event_session_obj.event_session_id]}
container_class_li={''}
/>
</div>
</div>
{/if}
{:else}
<div class="bg-red-100 p-4 border border-red-200 rounded-md">
<h2 class="h3">
<span class="fas fa-exclamation-triangle text-red-500 m-1"></span>
Session Disabled
</h2>
<p>
This session is currently disabled. Please contact the event organizer for more information.
</p>
</div>
{/if}
</section>
<!-- Main modal -->
<Modal
title="Presenter's Profile"
bind:open={$events_sess.pres_mgmt.show_modal__presenter_agree}
autoclose={false}
class="bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200 rounded-lg border-gray-200 dark:border-gray-700 divide-gray-200 dark:divide-gray-700 shadow-md relative flex flex-col mx-auto w-full divide-y"
>
<Comp_event_presenter_form_agree
lq__event_presenter_obj={lq__event_presenter_obj}
/>
<svelte:fragment slot="footer">
<div class="text-center w-full">
<button
on:click={() => {
$events_sess.pres_mgmt.show_modal__presenter_agree = false;
}}
class="btn btn-sm variant-soft-warning hover:variant-ghost-warning"
>
<span class="fas fa-times m-1"></span>
Close
</button>
</div>
</svelte:fragment>
</Modal>
<style lang="postcss">
</style>

View File

@@ -0,0 +1,110 @@
/** @type {import('./$types').PageLoad} */
import { error } from '@sveltejs/kit';
console.log(`ae_p_event_session [session_id] +page.ts start`);
import { browser } from '$app/environment';
import { events_func } from '$lib/ae_events_functions';
export async function load({ params, parent }) { // route
let log_lvl = 0;
let data = await parent();
// console.log(`ae events_pres_mgmt session [session_id] +page.ts data:`, data);
let account_id = data.account_id;
let ae_acct = data[account_id];
// console.log(`ae_acct = `, ae_acct);
// if (!account_id) {
// console.log(`ae events_pres_mgmt session [session_id] +page.ts: The account_id was not found in the data!!!`);
// return false;
// }
data.ae_events_pres_mgmt_event_session_id_page_ts = true;
let event_session_id = params.session_id;
if (!event_session_id) {
console.log(`ae events_pres_mgmt session [session_id] +page.ts: The event_session_id was not found in the params!!!`);
error(404, {
message: 'Session not found'
});
}
ae_acct.slct.event_session_id = event_session_id;
if (browser) {
// Load event session object
let load_event_session_obj = events_func.load_ae_obj_id__event_session({
api_cfg: ae_acct.api,
event_session_id: event_session_id,
try_cache: true
});
ae_acct.slct.event_session_obj = load_event_session_obj;
// Load event presentations for the session
let load_event_presentation_obj_li = events_func.load_ae_obj_li__event_presentation({
api_cfg: ae_acct.api,
for_obj_type: 'event_session',
for_obj_id: event_session_id,
params: {qry__enabled: 'all', qry__limit: 50},
try_cache: true
})
.then((event_presentation_obj_li) => {
if (log_lvl) {
console.log(`event_presentation_obj_li = `, event_presentation_obj_li);
}
for (let index = 0; index < event_presentation_obj_li.length; index++) {
let event_presentation_obj = event_presentation_obj_li[index];
let event_presentation_id = event_presentation_obj.event_presentation_id_random;
let load_event_presenter_obj_li = events_func.load_ae_obj_li__event_presenter({
api_cfg: ae_acct.api,
for_obj_type: 'event_presentation',
for_obj_id: event_presentation_id,
params: {qry__enabled: 'all', qry__limit: 15},
try_cache: true
});
if (log_lvl) {
console.log(`load_event_presenter_obj_li = `, load_event_presenter_obj_li);
}
event_presentation_obj_li[index].event_presenter_li = load_event_presenter_obj_li;
}
return event_presentation_obj_li;
});
if (log_lvl) {
console.log(`load_event_presentation_obj_li = `, load_event_presentation_obj_li);
}
ae_acct.slct.event_presentation_obj_li = load_event_presentation_obj_li;
// Load event files for the session
let ae_params = {
qry__enabled: 'all',
qry__hidden: 'all',
qry__limit: 50
}
let load_event_file_obj_li = await events_func.load_ae_obj_li__event_file({
api_cfg: ae_acct.api,
for_obj_type: 'event_session',
for_obj_id: event_session_id,
params: ae_params,
try_cache: true
})
.then((event_file_obj_li) => {
if (log_lvl) {
console.log(`event_file_obj_li = `, event_file_obj_li);
}
return event_file_obj_li;
});
if (log_lvl) {
console.log(`load_event_file_obj_li = `, load_event_file_obj_li);
}
ae_acct.slct.event_file_obj_li = load_event_file_obj_li;
}
// WARNING: Precaution against shared data between sites and presentations.
data[account_id] = ae_acct;
return data;
}

View File

@@ -0,0 +1,384 @@
<script lang="ts">
console.log(`ae_events_pres_mgmt session [slug] form_agree.svelte`);
export let log_lvl = 0;
// Imports (external and then internal)
import type { key_val } from '$lib/ae_stores';
import { ae_util } from '$lib/ae_utils/ae_utils';
import { ae_loc, ae_sess, ae_api, ae_trig, slct, slct_trigger } from '$lib/ae_stores';
import { events_loc, events_sess, events_slct, events_trigger } from '$lib/ae_events_stores';
import { events_func } from '$lib/ae_events_functions';
// Import components and elements
import Element_data_store from '$lib/element_data_store_v2.svelte';
// Exports
export let lq__event_session_obj: any;
// Local Variables
let ae_promises: key_val = {};
// let ae_tmp: key_val = {};
// let ae_triggers: key_val = {};
let poc_type = $events_loc.pres_mgmt.label__session_poc_type ?? 'poc';
$events_sess.pres_mgmt.disable__session_submit_opt_out = false;
$events_sess.pres_mgmt.status__session_opt_out = null;
$events_sess.pres_mgmt.status__session_agree = null;
let tmp_agree = false;
let tmp_opt_out: key_val = {
audio: false,
video: false,
transcription_and_publication: false,
publication_in_app: false
};
// Functions and Logic
async function handle_submit_form(event) {
console.log('*** handle_submit_form() ***');
$events_sess.pres_mgmt.disable__session_submit_opt_out = true;
$events_sess.pres_mgmt.status__session_opt_out = 'saving';
// Data in
let form_data = new FormData(event.target);
console.log(form_data);
let opt_out_di: key_val = ae_util.extract_prefixed_form_data({prefix: null, form_data: form_data, trim_values: true, bool_tf_str: true, log_lvl: 0});
console.log(`opt_out_di:`, opt_out_di);
// Data out
let opt_out_do: key_val = {};
opt_out_do.optout_audio = opt_out_di.optout_audio??false;
opt_out_do.optout_video = opt_out_di.optout_video??false;
opt_out_do.optout_transcription_and_publication = opt_out_di.optout_transcription_and_publication??false;
opt_out_do.optout_publication_in_app = opt_out_di.optout_publication_in_app??false;
opt_out_do.optout_updated_on = new Date().toISOString();
console.log(`opt_out_do:`, opt_out_do);
let event_session_data = {poc_kv_json: $lq__event_session_obj.poc_kv_json};
console.log('event_session_data:', event_session_data);
// Check if poc_type exists in the event_session_data.poc_kv_json
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
};
// let poc_kv_json_type = $lq__event_session_obj.poc_kv_json[poc_type];
// let data_out: key_val = {
// // data_json: opt_out_do,
// poc_kv_json: {
// [poc_type]: {
// poc_kv_json_type,
// ...opt_out_do
// }
// }
// }
// ae_promises.update__event_session_obj__opt_out = await handle_update__event_presenter({
// obj_type: 'event_presenter',
// obj_id: $lq__event_session_obj?.event_presenter_id,
// data: data_out
// });
// console.log(ae_promises.update__event_session_obj__opt_out);
// let event_session_data = {
// poc_agree: false,
// }
// 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};
// console.log('event_session_data:', event_session_data);
// event_session_data.poc_kv_json[poc_type]['agree'] = false;
ae_promises.update__event_session_obj__opt_out = events_func.update_ae_obj__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id,
data_kv: event_session_data,
log_lvl: log_lvl,
})
.then(function (update_result) {
// console.log(update_result);
// return update_result;
});
$events_sess.pres_mgmt.disable__session_submit_opt_out = false;
$events_sess.pres_mgmt.status__session_opt_out = 'saved';
}
</script>
{#if $lq__event_session_obj}
{#if !$lq__event_session_obj?.poc_agree}
<div
class="text-center text-red-500"
>
<div
class="text-red-500"
>
<span class="fas fa-times text-red-500 m-1"></span>
Not Yet Agreed
</div>
<div
class="bg-red-100 p-4 border border-red-200 rounded-md"
>
Waiting for agreement to the {$events_loc.pres_mgmt?.label__session_poc_name} Consent and Release and Terms and Conditions before you can move on. Please review and mark as agreed below.
</div>
</div>
{/if}
<div class="bg-gray-100 p-4 border border-gray-200 rounded-md space-y-4">
<Element_data_store
ds_code="event_session_poc_agree_text"
ds_type="html"
class_li="p-2"
/>
</div>
<section class="text-lg border border-red-200 rounded-md bg-red-100 space-y-2">
<!-- Highlight the persons name, email, and that whole line. -->
<p class="text-lg bg-yellow-100 p-2">
<strong>{$lq__event_session_obj.poc_person_full_name} ({$lq__event_session_obj.poc_person_primary_email})</strong> agrees to the following terms and conditions for the presentation:
</p>
<h3 class="h4">Title: "{$lq__event_session_obj?.name}"</h3>
<div>
<h3 class="h4">Opt-Out?</h3>
<form
class="modal-form {$ae_loc.hub.classes__form}"
on:submit|preventDefault={handle_submit_form}
>
<p>Speaker does not permit the use of presentation materials as described in section(s), above for: (please check for all that apply)</p>
<label
class="label p-1 hover:variant-ghost-warning rounded-md"
for="optout_audio">
<input
type="checkbox"
class="checkbox variant-ghost-warning checked:variant-filled-warning hover:variant-filled-error"
id="optout_audio"
name="optout_audio"
checked={$lq__event_session_obj.poc_kv_json[poc_type]?.optout_audio}
value={true}
>
Opt-out - Audio Reproduction of Presentation
</label>
<label
class="label p-1 hover:variant-ghost-warning rounded-md"
for="optout_video">
<input
type="checkbox"
class="checkbox variant-ghost-warning checked:variant-filled-warning hover:variant-filled-error"
id="optout_video"
name="optout_video"
checked={$lq__event_session_obj.poc_kv_json[poc_type]?.optout_video}
value={true}
>
Opt-out - Video Reproduction of Presentation
</label>
<label
class="label p-1 hover:variant-ghost-warning rounded-md"
for="optout_transcription_and_publication">
<input
type="checkbox"
class="checkbox variant-ghost-warning checked:variant-filled-warning hover:variant-filled-error"
id="optout_transcription_and_publication"
name="optout_transcription_and_publication"
checked={$lq__event_session_obj.poc_kv_json[poc_type]?.optout_transcription_and_publication}
value={true}
>
Opt-out - Transcription and Publication of Presentation on LCI Website
</label>
<label
class="label p-1 hover:variant-ghost-warning rounded-md"
for="optout_publication_in_app">
<input
type="checkbox"
class="checkbox variant-ghost-warning checked:variant-filled-warning hover:variant-filled-error"
id="optout_publication_in_app"
name="optout_publication_in_app"
checked={$lq__event_session_obj.poc_kv_json[poc_type]?.optout_publication_in_app}
value={true}
>
Opt-out - Publication of Presentation on LCI Congress App
</label>
<div class="text-center w-full">
<button
type="submit"
disabled={($events_sess.pres_mgmt?.disable__session_submit_opt_out)}
on:click={() => {
console.log('*** Save button clicked ***');
}}
class="btn btn-md variant-ghost-warning hover:variant-filled-secondary m-2"
>
<span class="fas fa-check m-1 text-orange-500"></span>
Save Opt-Out?
{#await ae_promises.update__event_session_obj__opt_out}
<div class="modal-loading">
<span class="fas fa-spinner fa-spin"></span>
<span class="loading-text">
Saving...
</span>
</div>
{:then update__event_session_obj__opt_out_result}
{#if $events_sess.pres_mgmt.status__session_opt_out}
<div class="modal-loading">
<span class="fas fa-check-circle"></span>
<span class="loading-text">Successfully saved!</span>
</div>
{/if}
{:catch error}
<div class="modal-loading">
<span class="fas fa-exclamation-triangle"></span>
<span class="loading-text">Error: {error.message}</span>
</div>
{/await}
</button>
</div>
</form>
<div class="text-center w-full">
<h3 class="h4">Agree?</h3>
{#if !$lq__event_session_obj?.poc_agree}
<button
disabled={!$ae_loc.administrator_access &&
!$events_loc.auth__kv.session[$lq__event_session_obj?.event_session_id] === true}
on:click={() => {
console.log('Agree to the terms and conditions.');
$events_sess.pres_mgmt.status__session_agree = 'saving';
let event_session_data = {
poc_agree: true,
}
// 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};
// console.log('event_session_data:', event_session_data);
// event_session_data.poc_kv_json[poc_type]['agree'] = true;
ae_promises.update__event_session_obj__agree = events_func.update_ae_obj__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id,
data_kv: event_session_data,
log_lvl: log_lvl,
})
.then(function (update_result) {
if (log_lvl) {
console.log('update_result:', update_result);
}
$events_sess.pres_mgmt.status__session_agree = 'saved';
});
}}
class="btn btn-lg variant-ghost-primary hover:variant-filled-success m-2"
>
<span class="fa fa-check m-1 text-orange-500"></span>
Mark as agreed?
{#await ae_promises.update__event_session_obj__agree}
<div class="modal-loading">
<span class="fas fa-spinner fa-spin"></span>
<span class="loading-text">
Saving...
</span>
</div>
{:then update__event_session_obj__agree_result}
{#if $events_sess.pres_mgmt.status__session_agree}
<div class="modal-loading">
<span class="fas fa-check-circle"></span>
<span class="loading-text">Successfully saved!</span>
</div>
{/if}
{:catch error}
<div class="modal-loading">
<span class="fas fa-exclamation-triangle"></span>
<span class="loading-text">Error: {error.message}</span>
</div>
{/await}
</button>
{:else}
<button
on:click={() => {
console.log('Change to not agreed.');
let event_session_data = {
poc_agree: false,
}
// 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};
// console.log('event_session_data:', event_session_data);
// event_session_data.poc_kv_json[poc_type]['agree'] = false;
ae_promises.update__event_session_obj__agree = events_func.update_ae_obj__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id,
data_kv: event_session_data,
log_lvl: log_lvl,
})
.then(function (update_result) {
// console.log(update_result);
// return update_result;
});
}}
class="btn btn-lg variant-ghost-success hover:variant-filled-warning m-2"
>
<span class="fas fa-times m-1 text-orange-500"></span>
Change to not agreed?
{#await ae_promises.update__event_session_obj__agree}
<div class="modal-loading">
<span class="fas fa-spinner fa-spin"></span>
<span class="loading-text">
Saving...
</span>
</div>
{:then update__event_session_obj__agree_result}
{#if $events_sess.pres_mgmt.status__session_agree}
<div class="modal-loading">
<span class="fas fa-check-circle"></span>
<span class="loading-text">Successfully saved!</span>
</div>
{/if}
{:catch error}
<div class="modal-loading">
<span class="fas fa-exclamation-triangle"></span>
<span class="loading-text">Error: {error.message}</span>
</div>
{/await}
</button>
{/if}
</div>
</section>
{:else}
Not ready
{/if}

View File

@@ -0,0 +1,188 @@
<script lang="ts">
export let log_lvl: number = 0;
// Imports (external and then internal)
import { browser } from '$app/environment';
import { clipboard } from '@skeletonlabs/skeleton';
// import { liveQuery } from "dexie";
import { ae_util } from '$lib/ae_utils/ae_utils';
// Import components and elements
// import Element_input_files_tbl from '$lib/element_input_files_tbl.svelte';
// Import storage, functions, and libraries
import type { key_val } from '$lib/ae_stores';
// import { api } from '$lib/api';
import { ae_snip, ae_loc, ae_sess, ae_api, ae_trig, slct, slct_trigger } from '$lib/ae_stores';
import { events_loc, events_sess, events_slct, events_trigger } from '$lib/ae_events_stores';
import { events_func } from '$lib/ae_events_functions';
// import { db_events } from "$lib/db_events";
// Exports
export let class_li: string = 'outline';
// export let event_session_id: string;
// export let lq__event_obj: any;
export let lq__event_session_obj: any;
// export let event_session_obj_poc_profile: any|key_val;
// Local Variables
let ae_promises: key_val = {};
let ae_tmp: key_val = {};
// let ae_triggers: key_val = {};
ae_tmp.biography = null;
let poc_type = $events_loc.pres_mgmt.label__session_poc_type;
let poc_name = $events_loc.pres_mgmt.label__session_poc_name;
$: if (browser && ae_tmp.biography === null && $lq__event_session_obj?.poc_kv_json && $lq__event_session_obj?.poc_kv_json[poc_type]?.biography) {
ae_tmp.biography = $lq__event_session_obj?.poc_kv_json[poc_type].biography;
console.log(`ae_tmp.biography:`, ae_tmp.biography);
}
// $: if ($lq__event_session_obj?.poc_kv_json) {
// lq__event_session_obj.poc_kv_json = JSON.parse(lq__event_session_obj.poc_kv_json);
// }
</script>
<section class={class_li}>
{#if $lq__event_session_obj}
{#if $lq__event_session_obj.poc_person_id_random && $ae_loc.trusted_access}
<span class="float-right">
<!-- A button to copy the access link to the clipboard. -->
<!-- Example: /events_pres_mgmt/session/Wh8UnJlbIA0?person_id=fV1dl_IJ0yY&person_pass=abc123 -->
<button
type="button"
use:clipboard={encodeURI(`${$ae_loc.url_origin}/events_pres_mgmt/session/${$events_slct.event_session_id}?person_id=${$lq__event_session_obj.poc_person_id_random}&person_pass=${$lq__event_session_obj.poc_person_passcode}&session_id=${$lq__event_session_obj.event_session_id_random}`)}
class="btn btn-sm variant-ghost-warning m-1"
title="Copy the POC (moderator/champion) access link to the clipboard."
>
<span class="fas fa-copy mx-1"></span>
Copy Access Link
</button>
</span>
{/if}
<h2 class="h3">
<!-- Session {$events_loc.pres_mgmt.label__session_poc_name} Profile:<br> -->
<strong>{$lq__event_session_obj.poc_person_full_name} ({$lq__event_session_obj.poc_person_primary_email})</strong>
</h2>
<!-- {$events_loc.pres_mgmt.label__session_poc_type} -->
<!-- {$events_loc.pres_mgmt.label__session_poc_name} -->
<!-- Ask for bio here: -->
<!-- The session POC biography. There should be a character counter. -->
<div
class:hidden={$events_loc.pres_mgmt?.hide__session_poc_biography}
>
<div class="label event_session__biography required space-y-4">
<button
type="button"
use:clipboard={ae_tmp.biography?.trim()}
class="btn btn-sm variant-ghost-warning float-right m-1"
class:hidden={!ae_tmp?.biography || ae_tmp.biography.length < 100}
title="Copy the session POC biography text to the clipboard."
>
<span class="fas fa-copy mx-1"></span>
Copy Biography Text
</button>
<label for="session_poc__biography" class="label">
<span class="fas fa-book"></span>
Session {poc_name} Biography
<span class="text-sm text-gray-500">
(75 to 100 words or 600 character limit)
</span>
</label>
<textarea
name="biography"
id="session_poc__biography"
disabled={!$ae_loc.trusted_access && !$events_loc.auth__kv.session[$lq__event_session_obj?.event_session_id_random]}
class="textarea ae_value event_session__biography font-mono"
class:variant-glass-error={(ae_tmp.biography && ae_tmp.biography.length >600 ? true : false)}
required
rows="8" cols="70"
bind:value={ae_tmp.biography}
placeholder="Enter brief biography here"></textarea>
</div>
<p>Biography length: {(ae_tmp.biography ? ae_util.number_w_commas(ae_tmp.biography.length) : 0)} characters; {(ae_tmp.biography ? ae_util.number_w_commas(ae_util.count_words(ae_tmp.biography)) : 0)} estimated words</p>
<!-- <p>Biography length: </p> -->
<p>The biography should be plain text only and be at most 100 words.</p>
<!-- <p>1,250 characters is roughly 250 words</p> -->
<!-- <p>1,375 characters is roughly 250 to 300 words</p> -->
<div class="flex flex-wrap gap-2 p-1 items-center">
<button
type="button"
class="btn btn-md variant-soft-primary hover:variant-filled-primary"
disabled={(ae_tmp.biography == $lq__event_session_obj.biography)}
on:click={() => {
console.log('*** Save button clicked ***');
let event_session_data = {poc_kv_json: $lq__event_session_obj.poc_kv_json};
console.log('event_session_data:', event_session_data);
// Check if poc_type exists in the event_session_data.poc_kv_json
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]['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.update_ae_obj__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id_random,
data_kv: event_session_data,
log_lvl: log_lvl,
})
.then(function (update_result) {
// console.log(update_result);
// return update_result;
});
}}
>
{#await ae_promises.update__event_session_obj}
<span class="fas fa-spinner fa-spin mx-1"></span>
{:then}
{#if (ae_tmp.biography == $lq__event_session_obj.biography)}
<span class="fas fa-check mx-1"></span>
{:else}
<span class="fas fa-save mx-1"></span>
{/if}
{/await}
Save Biography
</button>
{#if $lq__event_session_obj.poc_kv_json[poc_type]?.biography_updated_on}
<span class="text-sm text-gray-500">
Last saved: {ae_util.iso_datetime_formatter($lq__event_session_obj.poc_kv_json[poc_type]?.biography_updated_on, 'datetime_12_long')}
</span>
{/if}
</div>
</div>
{:else}
Not ready
{/if}
</section>

View File

@@ -0,0 +1,434 @@
<script lang="ts">
export let data: any;
export let log_lvl = 0;
import type { key_val } from '$lib/ae_stores';
import { ae_snip, ae_loc, ae_sess, ae_api, ae_trig, slct, slct_trigger } from '$lib/ae_stores';
import { events_loc, events_sess, events_slct, events_trigger, events_trig_kv } from '$lib/ae_events_stores';
import { events_func } from '$lib/ae_events_functions';
import Element_ae_crud from '$lib/element_ae_crud.svelte';
import Element_data_store from '$lib/element_data_store_v2.svelte';
import Sign_in_out from '../../sign_in_out.svelte';
import Comp__events_menu_nav from '../../../ae_comp__events_menu_nav.svelte';
// import Comp__global_menu_opts from '$lib/ae_comp__global_menu_opts.svelte';
import Comp__pres_mgmt_menu_opts from '../../../../events_pres_mgmt/delete_ae_comp__pres_mgmt_menu_opts.svelte';
// export let event_session_id: string;
export let lq__event_session_obj: any;
export let lq__auth__event_presenter_obj: any;
let ae_tmp: key_val = {};
let ae_triggers: key_val = {};
</script>
<!-- New standard page specific menu 2024-08-01 -->
<div
class="pres_mgmt__session_menu {ae_snip.classes__events_pres_mgmt_menu}"
class:border-gray-100={!$events_loc.pres_mgmt.show_menu__session}
>
<!-- BEGIN: The menu button options -->
<div
class="flex flex-row flex-wrap gap-1 items-center justify-around w-full">
<!-- launcher_id is the event_location_id -->
<Comp__events_menu_nav
hide={false}
event_id={$lq__event_session_obj?.event_id}
events__reports={$lq__event_session_obj?.event_id && $ae_loc.trusted_access}
events__session_search={$lq__event_session_obj?.event_id}
events__launcher_id={$lq__event_session_obj?.event_location_id && $ae_loc.administrator_access}
events__location_id={$lq__event_session_obj?.event_location_id && $ae_loc.trusted_access}
events__locations={$ae_loc.administrator_access}
/>
<span
class="ae_menu__object_options flex flex-row items-center justify-around"
>
<!-- Button to toggle between the regular session view and managing session files -->
<button
type="button"
on:click={() => {
if ($events_loc.pres_mgmt.show_content__session_view == 'manage_files') {
$events_loc.pres_mgmt.show_content__session_view = null;
} else {
$events_loc.pres_mgmt.show_content__session_view = 'manage_files';
}
}}
class="{ae_snip.classes__events_pres_mgmt_menu__button_special}"
class:variant-filled-primary={$events_loc.pres_mgmt.show_content__session_view == 'manage_files'}
class:variant-glass-primary={$events_loc.pres_mgmt.show_content__session_view != 'manage_files'}
class:hidden={!$ae_loc.public_access || 1==1}
title="Manage files for the session"
>
{#if $events_loc.pres_mgmt.show_content__session_view == 'manage_files'}
<span class="fas fa-users m-1"></span>
<!-- View Details -->
Session Presenters?
{:else}
<span class="fas fa-file-archive m-1"></span>
Session Files?
<span
class="badge badge-icon variant-glass-success absolute -top-1.5 -right-1.5 z-10"
class:hidden={!$lq__event_session_obj?.file_count}
>
{$lq__event_session_obj?.file_count}&times;
</span>
{/if}
</button>
<button
type="button"
on:click={() => {
if ($events_loc.pres_mgmt.show_menu__session == 'options') {
$events_loc.pres_mgmt.show_menu__session = null;
} else {
$events_loc.pres_mgmt.show_menu__session = 'options';
}
}}
class="{ae_snip.classes__events_pres_mgmt_menu__button}"
class:variant-filled-secondary={$events_loc.pres_mgmt.show_menu__session == 'options'}
class:variant-glass-secondary={$events_loc.pres_mgmt.show_menu__session != 'options'}
class:hidden={!$ae_loc.trusted_access}
title="Options for the session"
>
<span class="fas fa-cog m-1"></span>
{#if $events_loc.pres_mgmt.show_menu__session == 'options'}
Hide
{:else}
Show
{/if}
Options?
</button>
<button
type="button"
on:click={() => {
if ($events_loc.pres_mgmt.show_menu__session == 'help') {
$events_loc.pres_mgmt.show_menu__session = null;
} else {
$events_loc.pres_mgmt.show_menu__session = 'help';
}
}}
class="{ae_snip.classes__events_pres_mgmt_menu__button}"
class:variant-filled-secondary={$events_loc.pres_mgmt.show_menu__session == 'help'}
class:variant-glass-secondary={$events_loc.pres_mgmt.show_menu__session != 'help'}
title="Help and information about the session"
>
<span class="fas fa-question-circle m-1"></span>
{#if $events_loc.pres_mgmt.show_menu__session == 'help'}
Hide Help?
{:else}
Help?
{/if}
</button>
</span>
<span
class="ae_menu__action_options"
class:hidden={!$events_loc.auth__person?.id}
>
{#if $lq__event_session_obj?.event_id}
<!-- The Sign_in_out component is usually just a button for Sign Out if they are signed in as a POC or presenter. -->
<Sign_in_out
data={data}
event_session_id={$lq__event_session_obj?.event_id}
lq__event_session_obj={lq__event_session_obj}
lq__auth__event_presenter_obj={lq__auth__event_presenter_obj}
/>
{/if}
</span>
</div> <!-- END: The menu button options -->
<!-- BEGIN: The expanded menu area for information and options -->
<div
class="w-full bg-blue-100 hover:bg-blue-200 border border-blue-200 hover:border-blue-400 p-2 rounded-md"
class:hidden={$events_loc.pres_mgmt.show_menu__session != 'options'}
>
<div
class="ae_comp__session_menu_opts w-full"
>
<h2 class="text-sm font-semibold text-center pb-1">
&AElig; Session Menu Options
</h2>
<div class="flex flex-row gap-1 items-center justify-between">
<div class="flex flex-row gap-1 items-center justify-evenly">
<Element_ae_crud
trigger_patch={ae_triggers.hide_event_launcher}
api_cfg={$ae_api}
object_type={'event_session'}
object_id={$lq__event_session_obj?.event_session_id}
field_name={'hide_event_launcher'}
field_type={'button'}
field_value={ae_tmp.value__hide_event_launcher}
allow_null={false}
hide_edit_btn={true}
outline_element={false}
show_crud={false}
display_inline={true}
class_li={''}
on:ae_crud_updated={e => {
console.log(`ae_crud_updated:`, e.detail);
events_func.load_ae_obj_id__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id,
log_lvl: log_lvl
});
}}
>
<!-- {($lq__event_session_obj?.hide_event_launcher ? 'Hidden' : 'Not Hidden')} -->
<button
on:click={() => {
ae_tmp.value__hide_event_launcher = !$lq__event_session_obj?.hide_event_launcher;
// $events_slct.exhibit_tracking_obj.hide_event_launcher = !$lq__event_session_obj?.hide_event_launcher;
ae_triggers.hide_event_launcher = true;
}}
class="btn btn-sm transition-all hover:transition-all *:hover:inline"
class:variant-ghost-success={!$lq__event_session_obj?.hide_event_launcher}
class:variant-ringed-warning={$lq__event_session_obj?.hide_event_launcher}
disabled={!$ae_loc.trusted_access}
>
{#if $lq__event_session_obj?.hide_event_launcher}
<span class="fas fa-toggle-on m-1"></span>
Unhide from Launcher?
{:else}
<!-- <span class="fas fa-toggle-off m-1"></span> -->
<span class="fas fa-paper-plane m-1"></span>
<span class="hidden">
Showing in Launcher
</span>
{/if}
<!-- {@html ($lq__event_session_obj?.hide_event_launcher ? '<span class="fas fa-eye m-1"></span> Unhide?' : '<span class="fas fa-eye-slash m-1"></span> Hide?')} -->
</button>
</Element_ae_crud>
</div>
<div class="flex flex-row gap-1 items-center justify-evenly">
<Element_ae_crud
trigger_patch={ae_triggers.priority}
api_cfg={$ae_api}
object_type={'event_session'}
object_id={$lq__event_session_obj?.event_session_id}
field_name={'priority'}
field_type={'button'}
field_value={ae_tmp.value__priority}
allow_null={true}
hide_edit_btn={true}
outline_element={false}
show_crud={false}
display_inline={true}
class_li={''}
on:ae_crud_updated={e => {
console.log(`ae_crud_updated:`, e.detail);
events_func.load_ae_obj_id__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id,
log_lvl: log_lvl
});
}}
>
<!-- {@html $lq__event_session_obj?.priority ? '<span class="fas fa-star m-1"></span> High Priority' : '<span class="far fa-star m-1"></span> Priority not set'} -->
<button
on:click={() => {
ae_tmp.value__priority = !$lq__event_session_obj?.priority;
// $events_slct.exhibit_tracking_obj.priority = !$lq__event_session_obj?.priority;
ae_triggers.priority = true;
}}
class="btn btn-sm transition-all hover:transition-all *:hover:inline"
class:variant-ringed-surface={!$lq__event_session_obj?.priority}
class:variant-ghost-success={$lq__event_session_obj?.priority}
>
{#if $lq__event_session_obj?.priority}
<span class="fas fa-star m-1"></span>
<!-- <span class="fas fa-arrow-down m-1"></span> -->
<span class="hidden">
Not Priority?
</span>
{:else}
<!-- <span class="fas fa-toggle-off m-1"></span> -->
<span class="far fa-star m-1"></span>
<span class="hidden">
Priority
</span>
?
{/if}
</button>
</Element_ae_crud>
<Element_ae_crud
trigger_patch={ae_triggers.hide}
api_cfg={$ae_api}
object_type={'event_session'}
object_id={$lq__event_session_obj?.event_session_id}
field_name={'hide'}
field_type={'button'}
field_value={ae_tmp.value__hide}
allow_null={false}
hide_edit_btn={true}
outline_element={false}
show_crud={false}
display_inline={true}
class_li={''}
on:ae_crud_updated={e => {
console.log(`ae_crud_updated:`, e.detail);
events_func.load_ae_obj_id__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id,
log_lvl: log_lvl
});
}}
>
<!-- {($lq__event_session_obj?.hide ? 'Hidden' : 'Not Hidden')} -->
<button
on:click={() => {
ae_tmp.value__hide = !$lq__event_session_obj?.hide;
// $events_slct.exhibit_tracking_obj.hide = !$lq__event_session_obj?.hide;
ae_triggers.hide = true;
}}
class="btn btn-sm transition-all hover:transition-all *:hover:inline"
class:variant-ghost-success={!$lq__event_session_obj?.hide}
class:variant-ringed-warning={$lq__event_session_obj?.hide}
disabled={!$ae_loc.trusted_access}
>
{#if $lq__event_session_obj?.hide}
<span class="fas fa-toggle-on m-1"></span>
Unhide?
{:else}
<!-- <span class="fas fa-toggle-off m-1"></span> -->
<span class="fas fa-eye m-1"></span>
<span class="hidden">
Not Hidden
</span>
{/if}
<!-- {@html ($lq__event_session_obj?.hide ? '<span class="fas fa-eye m-1"></span> Unhide?' : '<span class="fas fa-eye-slash m-1"></span> Hide?')} -->
</button>
</Element_ae_crud>
<!-- Enable/Disable -->
<Element_ae_crud
trigger_patch={ae_triggers.enable}
api_cfg={$ae_api}
object_type={'event_session'}
object_id={$lq__event_session_obj?.event_session_id}
field_name={'enable'}
field_type={'button'}
field_value={ae_tmp.value__enable}
allow_null={false}
hide_edit_btn={true}
outline_element={false}
show_crud={false}
display_inline={true}
class_li={''}
on:ae_crud_updated={e => {
console.log(`ae_crud_updated:`, e.detail);
events_func.load_ae_obj_id__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id,
log_lvl: log_lvl
})
.then(function (load_results) {
// Maybe reload page?
// window.location.reload();
});
}}
>
<!-- {($lq__event_session_obj?.enable ? 'Enabled' : 'Disabled')} -->
<button
on:click={() => {
ae_tmp.value__enable = !$lq__event_session_obj?.enable;
// $events_slct.exhibit_tracking_obj.hide = !$lq__event_session_obj?.hide;
ae_triggers.enable = true;
}}
class="btn btn-sm transition-all hover:transition-all"
class:variant-ghost-success={$lq__event_session_obj?.enable}
class:variant-ringed-warning={!$lq__event_session_obj?.enable}
disabled={!$ae_loc.manager_access}
>
{#if $lq__event_session_obj?.enable}
<span class="fas fa-toggle-on m-1"></span>
Enabled
{:else}
<span class="fas fa-toggle-off m-1"></span>
Enable?
{/if}
<!-- {@html ($lq__event_session_obj?.enable ? '<span class="fas fa-toggle-on m-1"></span> Disable?' : '<span class="fas fa-toggle-off m-1"></span> Enable?')} -->
</button>
</Element_ae_crud>
<!-- Sort -->
<!-- Group -->
</div>
</div>
</div>
<!-- <div
class="flex flex-row items-center justify-around w-full"
class:hidden={$events_loc.pres_mgmt.show_menu__session != 'options'}
> -->
<Comp__pres_mgmt_menu_opts
hide={!$ae_loc.authenticated_access}
/>
<!-- </div> -->
</div> <!-- END: The expanded menu area for information and options -->
<Element_data_store
ds_code="events__pres_mgmt__session_help"
ds_name="Default: Events - Pres Mgmt Session Help"
ds_type="html"
for_type="event"
for_id={$lq__event_session_obj?.event_id}
class_li="bg-yellow-100 border border-yellow-400 p-2 rounded-md max-w-xl"
show_edit={false}
show_edit_btn={true}
hide={$events_loc.pres_mgmt.show_menu__session != 'help'}
/>
<div>
<button
type="button"
on:click={() => {
$events_loc.pres_mgmt.show_menu__session = !$events_loc.pres_mgmt.show_menu__session;
}}
class="btn btn-sm mx-1 variant-ghost-error hover:variant-filled-error"
class:hidden={!$events_loc.pres_mgmt.show_menu__session}
title="Collapse the expanded menu"
>
<span class="fas fa-chevron-up m-1"></span>
{#if $events_loc.pres_mgmt.show_menu__session}
Hide
<!-- Collapse -->
{:else}
Show
{/if}
<!-- Menu? -->
</button>
</div>
</div> <!-- End of the new standard page specific menu -->

View File

@@ -0,0 +1,920 @@
<script lang="ts">
export let log_lvl = 0;
if (log_lvl) {
console.log(`ae_events_pres_mgmt session_view.svelte`);
}
// Imports (external and then internal)
import { clipboard } from '@skeletonlabs/skeleton';
import { liveQuery } from "dexie";
import { Modal } from 'flowbite-svelte';
// const dispatch = createEventDispatcher();
import type { key_val } from '$lib/ae_stores';
import { ae_util } from '$lib/ae_utils/ae_utils';
import Element_ae_crud from '$lib/element_ae_crud.svelte';
// import Element_data_store from '$lib/element_data_store_v2.svelte';
let ae_promises: key_val = {};
let ae_tmp: key_val = {};
let ae_triggers: key_val = {};
import { core_func } from '$lib/ae_core_functions';
import { db_events } from "$lib/db_events";
import { ae_snip, ae_loc, ae_sess, ae_api, ae_trig, slct, slct_trigger } from '$lib/ae_stores';
import { events_loc, events_sess, events_slct, events_trigger, events_trig_kv } from '$lib/ae_events_stores';
import { events_func } from '$lib/ae_events_functions';
// import Comp_event_presenter_form_agree from './ae_comp__event_presenter_form_agree.svelte';
import Comp_event_presentation_obj_li from './../../../ae_comp__event_presentation_obj_li.svelte';
import Comp_event_session_poc_profile from '././ae_comp__event_session_poc_profile.svelte';
import Comp_event_session_poc_form_agree from '././ae_comp__event_session_poc_form_agree.svelte';
// Exports
// export let event_session_id: string;
// export let event_session_obj: key_val;
// export let display_mode: string = 'default'; // 'default', 'compact', 'minimal', 'launcher'
if (!$events_sess.pres_mgmt) {
$events_sess.pres_mgmt = {};
$events_sess.pres_mgmt.show_modal__presenter_agree = null;
$events_sess.pres_mgmt.show_content__presenter_start = null;
}
$events_sess.pres_mgmt.show_modal__presenter_agree = false;
$events_sess.pres_mgmt.show_content__presenter_start = false;
// let poc_type = $events_loc.pres_mgmt.label__session_poc_type;
// export let lq__event_obj: any;
export let lq__event_presenter_obj: any; // This is the currently selected presenter.
export let lq__event_session_obj: any;
// let lq__event_session_obj = liveQuery(
// () => db_events.sessions.get(event_session_id)
// );
export let lq__auth__event_presenter_obj: any;
export let lq__event_presentation_obj_li: any;
// let lq__event_presentation_obj_li = liveQuery(
// () => db_events.presentations
// .where('event_session_id')
// .equals(event_session_id)
// .sortBy('name')
// );
// Local Variables
let lq__event_presentation_obj = liveQuery(
() => db_events.presentations.get($events_slct.event_presentation_id)
);
// let lq__auth__event_presenter_obj = liveQuery(
// () => db_events.presenters.get($events_slct.auth__event_presenter_id)
// );
// let lq__event_presenter_obj = liveQuery(
// () => db_events.presenters.get($events_slct.event_presenter_id)
// );
$slct.person_obj_kv = {}; // This is intended for the person POC lookup list when generated.
// Functions and Logic
$events_sess.pres_mgmt.session__updated_on = null;
$: if ($lq__event_session_obj) {
if (log_lvl > 1) {
console.log(`$lq__event_session_obj:`, $lq__event_session_obj);
}
if ($events_loc.pres_mgmt.show_content__session_qr) {
if ($lq__event_session_obj.updated_on == $events_sess.pres_mgmt.session__updated_on) {
if (log_lvl > 1) {
console.log('Updated on is the same.');
}
} else {
if (log_lvl) {
console.log('Updated on is different.');
}
// FUTURE USE: Generate a QR code for the object ID.
// ae_promises.generate_qr_code_obj_id = core_func.generate_qr_code({api_cfg: $ae_api, account_id: $slct.account_id, qr_type: 'obj', qr_id: $lq__event_session_obj?.event_session_id, obj_type: 'event_session', obj_id: $lq__event_session_obj?.event_session_id});
// Generate a QR code for the URL.
let qr_id_url = `${$lq__event_session_obj?.event_session_id}_url`;
// URL for this page (be sure to URL encode it):
let url_str = `${$ae_loc.url_origin}/events_pres_mgmt/session/${$lq__event_session_obj?.event_session_id}`;
url_str = encodeURI(url_str);
ae_promises.generate_qr_code_url = core_func.generate_qr_code({api_cfg: $ae_api, account_id: $slct.account_id, qr_type: 'str', qr_id: qr_id_url, str: url_str});
$events_sess.pres_mgmt.session__updated_on = $lq__event_session_obj?.updated_on;
}
} else {
if (log_lvl) {
console.log('Clearing the URL.');
}
ae_promises.generate_qr_code_url = null;
// Resetting the updated_on value helps with the QR code come back when switched back on.
$events_sess.pres_mgmt.session__updated_on = null;
}
}
</script>
{#if $lq__event_session_obj}
<section class="p-2">
{#await ae_promises.generate_qr_code_url}
Generating...
{:then result}
{#if ae_promises.generate_qr_code_url && $ae_loc.trusted_access}
<span class="float-right m-1 p-1 flex flex-col items-center justify-center outline outline-gray-200 *:hover:inline">
<img
class="qr_code qr_type_url h-32 w-32 hover:h-48 hover:w-48"
style=""
src={result}
alt="URL QR code"
/>
<span>
<span class="fas fa-link"></span>
<span>Session URL</span>
</span>
<div class="hidden">
This QR is a link back to this page.
</div>
</span>
{/if}
{/await}
<ul
class="space-y-2 px-4"
>
<li>
<Element_ae_crud
api_cfg={$ae_api}
object_type={'event_session'}
object_id={$lq__event_session_obj?.event_session_id}
field_name={'name'}
field_type={'text'}
field_value={$lq__event_session_obj?.name}
allow_null={false}
hide_edit_btn={!$ae_loc.trusted_access || !$ae_loc.edit_mode}
outline_element={false}
show_crud={false}
display_inline={true}
display_block_edit={true}
class_li={''}
on:ae_crud_updated={e => {
console.log(`ae_crud_updated:`, e.detail);
events_func.load_ae_obj_id__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id,
log_lvl: 1
})
.then(function (load_results) {
});
}}
>
<strong class="text-sm">Name/title:</strong> {$lq__event_session_obj.name}
</Element_ae_crud>
{#if $ae_loc.edit_mode}
<Element_ae_crud
api_cfg={$ae_api}
object_type={'event_session'}
object_id={$lq__event_session_obj?.event_session_id}
field_name={'code'}
field_type={'text'}
field_value={$lq__event_session_obj?.code}
allow_null={false}
hide_edit_btn={!$ae_loc.trusted_access || !$ae_loc.edit_mode}
outline_element={false}
show_crud={false}
display_inline={true}
display_block_edit={false}
class_li={''}
on:ae_crud_updated={e => {
console.log(`ae_crud_updated:`, e.detail);
events_func.load_ae_obj_id__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id,
log_lvl: 1
})
.then(function (load_results) {
});
}}
>
<span class="text-sm text-gray-500 bg-yellow-100 p-1 rounded-md border border-yellow-200"
title="Session code {$lq__event_session_obj.code}"
>
<strong class="text-sm">code:</strong>
<span class="fas fa-barcode"></span>
{$lq__event_session_obj.code}
</span>
</Element_ae_crud>
{/if}
</li>
<li>
<strong class="text-sm">
Date
&amp;
<button
type="button"
on:click={() => {
if ($events_loc.pres_mgmt.time_hours == 12) {
$events_loc.pres_mgmt.time_hours = 24;
$events_loc.pres_mgmt.datetime_format = 'datetime_long';
$events_loc.pres_mgmt.time_format = 'time_short';
} else {
$events_loc.pres_mgmt.time_hours = 12;
$events_loc.pres_mgmt.datetime_format = 'datetime_12_long';
$events_loc.pres_mgmt.time_format = 'time_12_short';
}
}}
>
time
</button>
:</strong>
<span class="fas fa-calendar-alt"></span>
<Element_ae_crud
api_cfg={$ae_api}
object_type={'event_session'}
object_id={$lq__event_session_obj?.event_session_id}
field_name={'start_datetime'}
field_type={'datetime'}
field_value={$lq__event_session_obj.start_datetime}
allow_null={false}
hide_edit_btn={!$ae_loc.trusted_access || !$ae_loc.edit_mode}
outline_element={false}
show_crud={false}
display_inline={true}
class_li={''}
on:ae_crud_updated={e => {
console.log(`ae_crud_updated:`, e.detail);
events_func.load_ae_obj_id__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id
});
// $events_trigger = 'load__event_session_obj_id';
// $events_trig_kv['event_session_id'] = $lq__event_session_obj?.event_session_id;
}}
>
{ae_util.iso_datetime_formatter($lq__event_session_obj.start_datetime, 'dddd')},
{ae_util.iso_datetime_formatter($lq__event_session_obj.start_datetime, $events_loc.pres_mgmt.datetime_format)}
</Element_ae_crud>
-
<Element_ae_crud
api_cfg={$ae_api}
object_type={'event_session'}
object_id={$lq__event_session_obj?.event_session_id}
field_name={'end_datetime'}
field_type={'datetime'}
field_value={$lq__event_session_obj.end_datetime}
allow_null={false}
hide_edit_btn={!$ae_loc.trusted_access || !$ae_loc.edit_mode}
outline_element={false}
show_crud={false}
display_inline={true}
class_li={''}
on:ae_crud_updated={e => {
console.log(`ae_crud_updated:`, e.detail);
events_func.load_ae_obj_id__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id
});
// $events_trigger = 'load__event_session_obj_id';
// $events_trig_kv['event_session_id'] = $lq__event_session_obj?.event_session_id;
}}
>
{ae_util.iso_datetime_formatter($lq__event_session_obj.end_datetime, $events_loc.pres_mgmt.time_format)}
</Element_ae_crud>
</li>
<li>
<strong class="text-sm">Location/room:</strong>
<!-- Minimum level access to see the link here is trusted. Administrators can see even if the show launcher link is disabled. -->
<!-- BEGIN: Legacy link -->
{#if $ae_loc.administrator_access || $ae_loc.authenticated_access && $events_loc.pres_mgmt.show__launcher_link_legacy}
<!-- class="text-blue-500 hover:text-blue-800 hover:underline" -->
<a
data-sveltekit-preload-data="false"
href="/event/{$lq__event_session_obj?.event_id}/launcher/{$lq__event_session_obj?.event_location_id}"
class="btn btn-sm variant-glass-secondary hover:variant-filled-secondary"
title="Launcher: {$lq__event_session_obj?.event_location_name} {$lq__event_session_obj?.event_location_id}"
>
<span class="fas fa-paper-plane m-1"></span>
{@html $lq__event_session_obj?.event_location_name ? $lq__event_session_obj?.event_location_name : ae_snip.html__not_set}
</a>
{:else}
{@html $lq__event_session_obj.event_location_name ? $lq__event_session_obj.event_location_name : ae_snip.html__not_set}
{/if}
<!-- END: Legacy link -->
{#if $ae_loc.manager_access || $ae_loc.administrator_access && $events_loc.pres_mgmt.show__launcher_link}
<a
data-sveltekit-preload-data="false"
data-sveltekit-reload="true"
href="/events/{$lq__event_session_obj?.event_id}/launcher/{$lq__event_session_obj?.event_location_id}?session_id={$lq__event_session_obj?.event_session_id}"
class="text-blue-500 hover:text-blue-800 hover:underline"
title="Launcher: {$lq__event_session_obj?.event_location_name} {$lq__event_session_obj?.event_location_id}"
>
<span class="fas fa-plane"></span>
<!-- {@html $lq__event_session_obj.event_location_name ? $lq__event_session_obj.event_location_name : ae_snip.html__not_set} -->
</a>
{:else}
<!-- {@html $lq__event_session_obj.event_location_name ? $lq__event_session_obj.event_location_name : ae_snip.html__not_set} -->
{/if}
{#if $ae_loc.trusted_access && $ae_loc.edit_mode}
<Element_ae_crud
trigger_patch={ae_triggers.update_event_location}
api_cfg={$ae_api}
object_type={'event_session'}
object_id={$lq__event_session_obj?.event_session_id}
field_name={'event_location_id_random'}
field_type={'select'}
field_value={ae_tmp.event_location_id}
select_option_li={$slct.event_location_obj_kv}
val_empty_is_null={true}
allow_null={$ae_loc.administrator_access}
hide_edit_btn={true}
outline_element={false}
show_crud={ae_tmp.show__edit_event_location}
display_inline={true}
class_li={'m-1'}
on:ae_crud_updated={e => {
console.log(`ae_crud_updated:`, e.detail);
events_func.load_ae_obj_id__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id,
log_lvl: 1
})
.then(function (load_results) {
ae_tmp.event_location_id = null;
ae_tmp.show__edit_event_location = false;
// Maybe reload page?
// window.location.reload();
});
}}
>
{#if ae_tmp?.show__edit_location}
{#await $slct.event_location_obj_li}
<span class="fas fa-spinner fa-spin mx-1"></span>
{:then event_location_obj_li}
<!-- {#if event_location_obj_li && event_location_obj_li.length > 0}
{/if} -->
{/await}
<button
type="button"
on:click={() => {
console.log('Cancel editing the location for the session.');
ae_tmp.event_location_id = null;
ae_tmp.show__edit_event_location = false;
}}
class="btn btn-sm variant-soft-warning hover:variant-ghost-warning"
>
<span class="fas fa-times mx-1"></span>
Cancel
</button>
{:else}
<button
type="button"
on:click={() => {
console.log('Edit the location for the session.');
let params = {
qry__limit: 50,
}
// $slct.event_location_obj_li = await core_func.load_ae_obj_li__event_location({api_cfg: $ae_api, account_id: $slct.account_id, params: params});
$slct.event_location_obj_li = events_func.load_ae_obj_li__event_location({
api_cfg: $ae_api,
for_obj_type: 'event',
for_obj_id: $lq__event_session_obj?.event_id,
params: params,
log_lvl: log_lvl
})
.then(function (load_results) {
console.log(`Loaded event_location_obj_li:`, load_results);
// We need to make this ready for the select option list. Convert the list to a key value pair with the event_location_id_random as the key. We also need to set the option text value to: name (room)
if (load_results) {
let event_location_obj_li = load_results;
let event_location_obj_kv = {}; //: key_val = {};
event_location_obj_kv[''] = '-- Select a location --';
event_location_obj_li.forEach((event_location_obj) => {
let option_text = `${event_location_obj.name} (${event_location_obj.code})`;
event_location_obj_kv[event_location_obj.event_location_id] = option_text;
});
$slct.event_location_obj_kv = event_location_obj_kv;
}
// $slct.event_location_obj_kv = $slct.event_location_obj_kv;
console.log(`$slct.event_location_obj_kv = `, $slct.event_location_obj_kv);
return load_results;
})
.finally(function () {
console.log(`Finally...`);
ae_tmp.event_location_id = $lq__event_session_obj?.event_location_id;
ae_tmp.show__edit_event_location = true;
});
}}
class="btn btn-sm variant-soft-warning hover:variant-ghost-warning"
>
<span class="fas fa-edit mx-1"></span>
Edit
</button>
{/if}
</Element_ae_crud>
{/if}
</li>
<li
class:hidden={$events_loc.pres_mgmt?.hide__session_poc}
>
<strong class="text-sm">{$events_loc.pres_mgmt?.label__session_poc_name}:</strong>
{#if $lq__event_session_obj?.poc_person_id}
{#if $ae_loc.manager_access}
<a
href="/core/person/{$lq__event_session_obj.poc_person_id}"
class="text-blue-500 hover:text-blue-800 hover:underline"
title="View Person: {$lq__event_session_obj?.poc_person_full_name} {$lq__event_session_obj?.poc_person_id}"
>
{@html $lq__event_session_obj?.poc_person_full_name ? $lq__event_session_obj.poc_person_full_name : ae_snip.html__not_set}
</a>
{/if}
{#if
$ae_loc.trusted_access ||
$events_loc.auth__kv.session[$lq__event_session_obj?.event_session_id] === true}
<!-- Modal toggle -->
<button
class="btn btn-sm variant-soft-primary hover:variant-filled-primary"
on:click={() => ($events_sess.pres_mgmt.show__session_poc_profile = true)}>
<span class="fas fa-id-card m-1"></span>
<!-- {$events_loc.pres_mgmt?.label__session_poc_name}'s -->
{$lq__event_session_obj?.poc_person_full_name}'s Profile
</button>
<!-- Main modal -->
<Modal
title="{$events_loc.pres_mgmt?.label__session_poc_name}'s Profile"
bind:open={$events_sess.pres_mgmt.show__session_poc_profile}
autoclose={false}
class="bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200 rounded-lg border-gray-200 dark:border-gray-700 divide-gray-200 dark:divide-gray-700 shadow-md relative flex flex-col mx-auto w-full divide-y"
>
<Comp_event_session_poc_profile
class_li={$events_sess.pres_mgmt.show__session_poc_profile ? '' : ''}
lq__event_session_obj={lq__event_session_obj}
/>
<svelte:fragment slot="footer">
<div class="text-center w-full">
<button
type="button"
on:click={() => {
console.log('Close modal session poc profile.');
$events_sess.pres_mgmt.show__session_poc_profile = !$events_sess.pres_mgmt.show__session_poc_profile;
}}
class="btn btn-sm variant-soft-warning hover:variant-ghost-warning"
>
<span class="fas fa-times mx-1"></span>
Close
</button>
</div>
</svelte:fragment>
</Modal>
{#if $events_loc.pres_mgmt?.require__session_agree}
<!-- Modal toggle -->
<button
type="button"
disabled={!$ae_loc.trusted_access &&
!$events_loc.auth__kv.session[$lq__event_session_obj?.event_session_id] === true}
class="btn btn-sm hover:variant-filled-success"
class:variant-soft-success={$lq__event_session_obj?.poc_agree}
class:variant-ghost-warning={!$lq__event_session_obj?.poc_agree}
on:click={() => ($events_sess.pres_mgmt.show_modal__session_poc_agree = true)}>
{#if !$lq__event_session_obj?.poc_agree}
<span class="fas fa-times bg-red-500 text-white px-1 mx-1" title="Not agreed to terms and conditions"></span>
Not yet agreed
{:else}
<span class="fas fa-check text-green-500 px-1" title="Agreed to terms and conditions"></span>
Agreed
{/if}
</button>
<!-- Main modal -->
<Modal
title="{$events_loc.pres_mgmt?.label__session_poc_name}'s Consent and Release and Terms and Conditions"
bind:open={$events_sess.pres_mgmt.show_modal__session_poc_agree}
autoclose={false}
>
<Comp_event_session_poc_form_agree
lq__event_session_obj={lq__event_session_obj}
/>
<svelte:fragment slot="footer">
<div class="text-center w-full">
<button
on:click={() => {
$events_sess.pres_mgmt.show_modal__session_poc_agree = false;
}}
class="btn btn-sm variant-soft-warning hover:variant-ghost-warning"
>
<span class="fas fa-times m-1"></span>
Close
</button>
</div>
</svelte:fragment>
</Modal>
{/if}
<!-- </div> -->
{:else}
<span title={$lq__event_session_obj?.poc_person_id}>
{@html $lq__event_session_obj.poc_person_full_name ? $lq__event_session_obj.poc_person_full_name : ae_snip.html__not_set}
</span>
{/if}
{:else}
{@html ae_snip.html__not_set}
{/if}
<!-- {#if $ae_loc.trusted_access && $ae_loc.edit_mode} -->
<!-- <span title={$lq__event_session_obj?.poc_person_id}>
{@html $lq__event_session_obj.poc_person_full_name ? $lq__event_session_obj.poc_person_full_name : ae_snip.html__not_set}
</span> -->
{#if $ae_loc.trusted_access && $ae_loc.edit_mode}
<Element_ae_crud
trigger_patch={ae_triggers.update_person_poc}
api_cfg={$ae_api}
object_type={'event_session'}
object_id={$lq__event_session_obj?.event_session_id}
field_name={'poc_person_id_random'}
field_type={'select'}
field_value={ae_tmp.poc_person_id}
select_option_li={$slct.person_obj_kv}
allow_null={$ae_loc.administrator_access}
hide_edit_btn={true}
outline_element={false}
show_crud={ae_tmp.show__edit_poc_person}
display_inline={true}
class_li={'m-1'}
on:ae_crud_updated={e => {
console.log(`ae_crud_updated:`, e.detail);
events_func.load_ae_obj_id__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id,
log_lvl: 1
})
.then(function (load_results) {
ae_tmp.poc_person_id = null;
ae_tmp.show__edit_poc_person = false;
// Maybe reload page?
// window.location.reload();
});
}}
>
{#if ae_tmp?.show__edit_poc_person}
{#await $slct.person_obj_li}
<span class="fas fa-spinner fa-spin mx-1"></span>
{:then person_obj_li}
{#if person_obj_li && person_obj_li.length > 0}
<!-- <label class="text-sm">PoC:
<select
bind:value={ae_tmp.poc_person_id}
class="select min-w-fit max-w-md text-sm"
>
<option value="">-- Select a person --</option>
{#each person_obj_li as person_obj}
<option
value={person_obj.person_id}
selected={person_obj.person_id_random == $lq__event_session_obj?.poc_person_id}
>
{person_obj.full_name}
({person_obj.primary_email})
</option>
{/each}
</select>
</label>
<button
type="button"
disabled={ae_tmp.poc_person_id == $lq__event_session_obj?.poc_person_id}
on:click={() => {
console.log('Save the POC person for the session.');
let person_id = ae_tmp.poc_person_id;
console.log('Selected person ID:', person_id);
ae_triggers.update_person_poc = true;
}}
class="btn btn-sm variant-soft-warning hover:variant-ghost-warning"
>
<span class="fas fa-save mx-1"></span>
Save
</button> -->
{/if}
{/await}
{/if}
{#if ae_tmp.show__edit_poc_person}
<button
type="button"
on:click={() => {
console.log('Cancel the POC person for the session.');
ae_tmp.poc_person_id = null;
ae_tmp.show__edit_poc_person = false;
}}
class="btn btn-sm variant-soft-warning hover:variant-ghost-warning"
>
<span class="fas fa-times mx-1"></span>
Cancel
</button>
{:else}
<button
type="button"
on:click={async () => {
console.log('Edit the POC person for the session.');
let params = {
qry__limit: 300,
}
// $slct.person_obj_li = await core_func.handle_load_ae_obj_li__person({api_cfg: $ae_api, account_id: $slct.account_id, params: params});
$slct.person_obj_li = core_func.handle_load_ae_obj_li__person({api_cfg: $ae_api, account_id: $slct.account_id, params: params})
.then(function (load_results) {
console.log(`Loaded person_obj_li:`, load_results);
// We need to make this ready for the select option list. Convert the list to a key value pair with the person_id_random as the key. We also need to set the option text value to: full_name (primary_email)
if (load_results) {
let person_obj_li = load_results;
let person_obj_kv = {};
person_obj_kv[''] = '-- Select a person --';
person_obj_li.forEach((person_obj) => {
let option_text = `${person_obj.full_name} (${person_obj.primary_email})`;
person_obj_kv[person_obj.person_id_random] = option_text;
});
$slct.person_obj_kv = person_obj_kv;
}
$slct.person_obj_kv = $slct.person_obj_kv;
console.log(`$slct.person_obj_kv = `, $slct.person_obj_kv);
return load_results;
});
ae_tmp.poc_person_id = $lq__event_session_obj?.poc_person_id;
ae_tmp.show__edit_poc_person = true;
}}
class="btn btn-sm variant-soft-warning hover:variant-ghost-warning"
>
<span class="fas fa-edit mx-1"></span>
Edit
</button>
{/if}
</Element_ae_crud>
{/if}
<span class="float-right">
{#if $events_loc.auth__kv.session[$events_slct.event_session_id] === true}
<span class="text-green-500">Signed In</span>
{/if}
{#if $events_loc.pres_mgmt?.require__session_agree
&& $events_loc?.pres_mgmt?.show__email_access_link
&& $lq__event_session_obj?.poc_person_primary_email
&& ($ae_loc.trusted_access || !$events_loc.auth__kv.session[$lq__event_session_obj?.event_session_id])
}
<button
type="button"
on:click={() => {
console.log('Email the access link');
if (!$lq__event_session_obj.poc_person_primary_email) {
alert('No email address found for this point of contact (moderator/champion).');
return;
}
if (confirm(`This will send the sign in email to ${$lq__event_session_obj.poc_person_primary_email}`)) {
console.log('Send the email to the point of contact (moderator/champion).');
} else {
console.log('Cancelled sending the email.');
return false;
}
events_func.email_sign_in__event_session(
{
api_cfg: $ae_api,
to_email: $lq__event_session_obj.poc_person_primary_email,
to_name: $lq__event_session_obj?.poc_person_full_name?? '-- not set --',
base_url: $ae_loc.url_origin,
person_id: $lq__event_session_obj?.poc_person_id?? '-- not set --',
person_passcode: $lq__event_session_obj?.poc_person_passcode?? '-- not set --',
event_session_id: $lq__event_session_obj?.event_session_id?? '-- not set --',
session_name: $lq__event_session_obj?.name?? '-- not set --',
}
);
}}
class="btn btn-sm variant-ghost-secondary hover:variant-filled-secondary"
title="Email the access link to the POC (moderator/champion)"
>
<span class="fas fa-envelope mx-1"></span>
Email Access Link
</button>
{/if}
{#if $events_loc.pres_mgmt?.show__copy_access_link
&& $ae_loc.trusted_access && $lq__event_session_obj.poc_person_id}
<!-- A button to copy the access link to the clipboard. -->
<!-- Example: /events_pres_mgmt/session/Wh8UnJlbIA0?person_id=fV1dl_IJ0yY&person_pass=abc123 -->
<button
type="button"
use:clipboard={encodeURI(`${$ae_loc.url_origin}/events_pres_mgmt/session/${$events_slct.event_session_id}?person_id=${$lq__event_session_obj.poc_person_id}&person_pass=${$lq__event_session_obj.poc_person_passcode}&session_id=${$lq__event_session_obj.event_session_id}`)}
class="btn btn-sm variant-ghost-warning m-1"
title="Copy the POC (moderator/champion) access link to the clipboard."
>
<span class="fas fa-copy mx-1"></span>
Copy Access Link
</button>
{/if}
</span>
</li>
{#if $ae_loc.administrator_access}
<li>
<strong class="text-sm">Session passcode:</strong>
<span class="fas fa-key"></span>
{@html $lq__event_session_obj.passcode ? $lq__event_session_obj.passcode : ae_snip.html__not_set}
<Element_ae_crud
api_cfg={$ae_api}
object_type={'event_session'}
object_id={$lq__event_session_obj?.event_session_id}
field_name={'passcode'}
field_type={'text'}
field_value={$lq__event_session_obj?.passcode}
allow_null={true}
hide_edit_btn={!$ae_loc.trusted_access || !$ae_loc.edit_mode}
outline_element={false}
show_crud={false}
display_inline={true}
display_block_edit={false}
class_li={''}
on:ae_crud_updated={e => {
console.log(`ae_crud_updated:`, e.detail);
events_func.load_ae_obj_id__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id,
log_lvl: 1
})
.then(function (load_results) {
});
}}
>
</Element_ae_crud>
</li>
{/if}
<li>
<div>
<Element_ae_crud
api_cfg={$ae_api}
object_type={'event_session'}
object_id={$lq__event_session_obj?.event_session_id}
field_name={'description'}
field_type={'textarea'}
field_value={$lq__event_session_obj.description}
allow_null={false}
hide_edit_btn={!$ae_loc.trusted_access || !$ae_loc.edit_mode}
outline_element={false}
show_crud={false}
display_inline={true}
display_block_edit={true}
textarea_rows={15}
class_li={''}
on:ae_crud_updated={e => {
console.log(`ae_crud_updated:`, e.detail);
events_func.load_ae_obj_id__event_session({
api_cfg: $ae_api,
event_session_id: $lq__event_session_obj?.event_session_id,
log_lvl: 1
});
}}
>
<strong class="text-sm">
Session description:
</strong>
{#if $lq__event_session_obj.description}
<button
type="button"
on:click={() => {
console.log('Show/Hide Description');
$events_loc.pres_mgmt.show_content__session_description = !$events_loc.pres_mgmt.show_content__session_description;
}}
class="btn btn-sm variant-soft-surface hover:variant-filled-surface text-xs"
>
{#if $events_loc.pres_mgmt.show_content__session_description}
<span class="fas fa-eye-slash mx-1"></span>
<span>Hide Description</span>
{:else}
<span class="fas fa-eye mx-1"></span>
<span>Show</span>
{/if}
</button>
<pre
class="whitespace-pre-wrap p-2 bg-gray-100 rounded-md"
class:hidden={!$events_loc.pres_mgmt.show_content__session_description}
>{$lq__event_session_obj.description}</pre>
{:else}
{@html ae_snip.html__not_set}
{/if}
</Element_ae_crud>
</div>
</li>
</ul>
<!-- <label
class="text-sm"
>Session description:
<textarea
class="textarea my-1 p-2"
cols="30"
rows="4"
disabled
>{$lq__event_session_obj.description}</textarea>
</label> -->
</section>
<!-- Presentations in the session -->
<section
class="w-full"
>
{#await $lq__event_presentation_obj_li}
Loading....
{:then event_presentation_obj_li}
{#if $lq__event_presentation_obj_li && $lq__event_presentation_obj_li?.length > 0}
<Comp_event_presentation_obj_li
lq__event_presentation_obj_li={lq__event_presentation_obj_li}
log_lvl={log_lvl}
>
</Comp_event_presentation_obj_li>
{/if}
{/await}
</section>
{/if}
<style lang="postcss">
</style>