Now with all reports broken out by type and things generally cleaned up.

This commit is contained in:
Scott Idem
2025-09-24 12:18:15 -04:00
parent 6f4f54a0c9
commit 4220a354be
6 changed files with 143 additions and 623 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "osit-aether-app-svelte",
"version": "3.3.4",
"version": "3.4.1",
"description": "One Sky IT's Aether App created with Svelte, SvelteKit, Tailwind CSS, Lucide, Font Awesome, and Skeleton UI. -Scott Idem",
"homepage": "https://oneskyit.com/",
"private": true,

View File

@@ -53,7 +53,11 @@ let event_session_id_random_li: Array<string> = $state();
let ae_promises: key_val = $state({});
let ae_tmp: key_val = {};
let ae_triggers: key_val = {};
let ae_triggers: key_val = $state({
rpt__event_files: true,
rpt__event_sessions: true,
rpt__event_presenters: true,
});
// if ($events_loc.pres_mgmt.show_report == 'sessions_poc_agree') {
// handle_qry__event_session({
@@ -536,23 +540,6 @@ async function handle_qry__event_session(
</svelte:head>
<!-- <section
class="
ae_events_pres_mgmt_event
flex flex-col gap-1
items-center
justify-start
mx-auto
min-h-full
h-full
min-w-full
max-w-max
"
> -->
<!-- lg:bg-green-100
xl:bg-green-200 -->
<Event_reports_page_menu
data={data}
lq__event_obj={lq__event_obj}
@@ -594,8 +581,6 @@ async function handle_qry__event_session(
{/if}
</h2>
<!-- </span> -->
</header>
@@ -608,11 +593,6 @@ async function handle_qry__event_session(
type="button"
disabled={!$ae_loc.trusted_access}
onclick={() => {
// $events_loc.pres_mgmt.rpt__session_no_files = !$events_loc.pres_mgmt.rpt__session_no_files;
// ae_promises.handle_qry__event_session =
// handle_qry__event_session({
// qry_files: false,
// });
ae_triggers.rpt__event_sessions = true;
$events_loc.pres_mgmt.show_report = 'session_no_files';
}}
@@ -637,16 +617,6 @@ async function handle_qry__event_session(
type="button"
disabled={!$ae_loc.trusted_access}
onclick={() => {
// ae_promises.handle_search__event_session = handle_search__event_session({
// poc_agree: true,
// ft_search_str: '',
// lk_search_str: '',
// log_lvl: log_lvl,
// });
// $events_loc.pres_mgmt.rpt__session_poc_agree = !$events_loc.pres_mgmt.rpt__session_poc_agree;
// ae_promises.handle_qry__event_session = handle_qry__event_session({
// qry_poc_agree: $events_loc.pres_mgmt.rpt__session_poc_agree ?? false,
// })
ae_triggers.rpt__event_sessions = true;
$events_loc.pres_mgmt.show_report = 'sessions_poc_agree';
}}
@@ -675,10 +645,6 @@ async function handle_qry__event_session(
type="button"
disabled={!$ae_loc.trusted_access}
onclick={() => {
// handle_qry__event_session({
// qry_poc_kv_json: true,
// qry_poc_bios: true,
// });
ae_triggers.rpt__event_sessions = true;
$events_loc.pres_mgmt.show_report = 'session_no_bio';
}}
@@ -703,21 +669,13 @@ async function handle_qry__event_session(
type="button"
disabled={!$ae_loc.trusted_access}
onclick={() => {
ae_promises.handle_search__event_presenter = handle_search__event_presenter({
agree: $events_loc.pres_mgmt.rpt__presenter_agree ?? false,
ft_search_str: '',
lk_search_str: '',
log_lvl: log_lvl,
});
ae_triggers.rpt__event_presenters = true;
$events_loc.pres_mgmt.show_report = 'presenters_agree';
}}
class:hidden={!$events_loc.pres_mgmt?.require__presenter_agree}
class="btn btn-sm preset-tonal-success border border-success-500 hover:preset-filled-success-500 transition-all m-1"
title="Show presenters who have agreed to present."
>
<!-- {#await ae_promises.handle_search__event_presenter}
<span class="fas fa-spinner fa-spin"></span>
{/await} -->
{#if $events_loc.pres_mgmt?.show_report == 'presenters_agree' && $events_sess.pres_mgmt?.status_qry__search == 'loading'}
<span class="fas fa-spinner fa-spin"></span>
{:else if $events_loc.pres_mgmt.rpt__presenter_agree}
@@ -737,12 +695,7 @@ async function handle_qry__event_session(
type="button"
disabled={!$ae_loc.trusted_access}
onclick={() => {
handle_search__event_presenter({
biography: true,
ft_search_str: '',
lk_search_str: '',
log_lvl: log_lvl,
});
ae_triggers.rpt__event_presenters = true;
$events_loc.pres_mgmt.show_report = 'presenters_biography';
}}
class:hidden={$lq__event_obj?.mod_pres_mgmt_json?.hide__report_kv.presenter_no_bio && !$ae_loc.edit_mode}
@@ -762,11 +715,7 @@ async function handle_qry__event_session(
type="button"
disabled={!$ae_loc.trusted_access}
onclick={() => {
handle_search__event_presenter({
ft_search_str: '',
lk_search_str: '',
log_lvl: log_lvl,
});
ae_triggers.rpt__event_presenters = true;
$events_loc.pres_mgmt.show_report = 'presenters_overview';
}}
class:hidden={$lq__event_obj?.mod_pres_mgmt_json?.hide__report_kv.presenter_overview}
@@ -789,10 +738,7 @@ async function handle_qry__event_session(
type="button"
disabled={!$ae_loc.trusted_access}
onclick={() => {
handle_qry__event_file({
created_on_offset: $events_loc.pres_mgmt.qry__files_offset_seconds ?? 0,
log_lvl: log_lvl,
});
ae_triggers.rpt__event_files = true;
$events_loc.pres_mgmt.show_report = 'recent_files';
}}
class:hidden={$lq__event_obj?.mod_pres_mgmt_json?.hide__report_kv.recent_files}
@@ -811,10 +757,7 @@ async function handle_qry__event_session(
type="button"
disabled={!$ae_loc.trusted_access}
onclick={() => {
handle_qry__event_file({
min_file_size: $events_loc.pres_mgmt.qry__files_min_size ?? 100000000, // in bytes
log_lvl: log_lvl,
});
ae_triggers.rpt__event_files = true;
$events_loc.pres_mgmt.show_report = 'large_files';
}}
class:hidden={$lq__event_obj?.mod_pres_mgmt_json?.hide__report_kv.large_files}
@@ -831,11 +774,9 @@ async function handle_qry__event_session(
</span>
</div>
<!-- All Event Session related reports -->
{#if $events_loc.pres_mgmt.show_report == 'session_no_files' || $events_loc.pres_mgmt.show_report == 'session_no_bio' || $events_loc.pres_mgmt.show_report == 'sessions_poc_agree'}
<Reports_sessions
@@ -851,7 +792,7 @@ async function handle_qry__event_session(
bind:qry__status={$events_sess.pres_mgmt.status_qry__search}
qry__count={$events_sess.event_session_obj_li?.length ?? 0}
qry__trigger={ae_triggers.rpt__event_sessions}
bind:qry__trigger={ae_triggers.rpt__event_sessions}
hide_session_code={$events_loc.pres_mgmt?.hide__session_code}
@@ -860,100 +801,6 @@ async function handle_qry__event_session(
{/if}
<!-- Show session POC that have agreed -->
<!-- {#if $events_loc.pres_mgmt.show_report == 'sessions_poc_agree' && event_session_id_random_li}
<h3 class="h4 text-center">
Sessions POC
{#if $events_loc.pres_mgmt.rpt__session_poc_agree}Agreed{:else}Not Agreed{/if}
<button
type="button"
onclick={() => {
$events_loc.pres_mgmt.rpt__session_poc_agree = !$events_loc.pres_mgmt.rpt__session_poc_agree;
ae_promises.handle_qry__event_session = handle_qry__event_session({
qry_poc_agree: $events_loc.pres_mgmt.rpt__session_poc_agree ?? false,
})
$events_loc.pres_mgmt.show_report = 'sessions_poc_agree';
}}
class="ae_btn_info btn-sm m-1"
>
{#if $events_loc.pres_mgmt.rpt__session_poc_agree}
<span class="fas fa-toggle-on m-1"></span>
Agreed
{:else}
<span class="fas fa-toggle-off m-1"></span>
Not Agreed
{/if}
</button>
</h3>
<Comp_event_session_obj_tbl
link_to_type="event"
link_to_id={$events_slct.event_id}
bind:event_session_id_random_li={event_session_id_random_li}
log_lvl={1}
>
</Comp_event_session_obj_tbl>
{/if} -->
<!-- {#if $events_loc.pres_mgmt.show_report == 'session_no_bio' && event_session_id_random_li}
<h3 class="h4 text-center">Sessions POC Bios</h3>
<Comp_event_session_obj_tbl
link_to_type="event"
link_to_id={$events_slct.event_id}
bind:event_session_id_random_li={event_session_id_random_li}
log_lvl={1}
>
</Comp_event_session_obj_tbl>
{/if} -->
<!-- Show sessions without files -->
<!-- {#if $events_loc.pres_mgmt.show_report == 'session_no_files' && event_session_id_random_li}
<h3 class="h4 text-center">
Sessions
{#if $events_loc.pres_mgmt?.rpt__session_no_files}
With
{:else}
Without
{/if}
Files
<button
type="button"
onclick={() => {
$events_loc.pres_mgmt.rpt__session_no_files = !$events_loc.pres_mgmt.rpt__session_no_files;
ae_promises.handle_qry__event_session =
handle_qry__event_session({
qry_files: !$events_loc.pres_mgmt.rpt__session_no_files ?? false,
});
$events_loc.pres_mgmt.show_report = 'session_no_files';
qry__trigger = true;
}}
class="ae_btn_info btn-sm m-1"
>
{#if $events_loc.pres_mgmt?.rpt__session_no_files}
<span class="fas fa-toggle-on m-1"></span>
With
{:else}
<span class="fas fa-toggle-off m-1"></span>
Without
{/if}
</button>
</h3>
<Comp_event_session_obj_tbl
link_to_type="event"
link_to_id={$events_slct.event_id}
bind:event_session_id_random_li={event_session_id_random_li}
log_lvl={1}
>
</Comp_event_session_obj_tbl>
{/if} -->
<!-- All Event Presenter related reports -->
{#if $events_loc.pres_mgmt.show_report == 'presenters_agree' || $events_loc.pres_mgmt.show_report == 'presenters_biography' || $events_loc.pres_mgmt.show_report == 'presenters_overview'}
<Reports_presenters
@@ -969,184 +816,14 @@ async function handle_qry__event_session(
bind:qry__status={$events_sess.pres_mgmt.status_qry__search}
qry__count={$events_sess.event_presenter_obj_li?.length ?? 0}
bind:qry__trigger={ae_triggers.rpt__event_presenters}
hide_session_code={$events_loc.pres_mgmt?.hide__session_code}
log_lvl={log_lvl}
/>
{/if}
<!-- Show presenters that have agreed -->
<!-- {#if 1==3 && $events_loc.pres_mgmt.show_report == 'presenters_agree' && $events_sess.event_presenter_obj_li}
<h3 class="h4 text-center">
Presenters {#if $events_loc.pres_mgmt.rpt__presenter_agree}Agreed{:else}Not Agreed{/if}
{$events_slct.event_presenter_obj_li.length ?? 0} found
<button
type="button"
onclick={() => {
$events_loc.pres_mgmt.rpt__presenter_agree = !$events_loc.pres_mgmt.rpt__presenter_agree;
$events_loc.pres_mgmt.show_report = '';
ae_promises.handle_search__event_presenter = handle_search__event_presenter({
agree: $events_loc.pres_mgmt.rpt__presenter_agree ?? false,
ft_search_str: '',
lk_search_str: '',
log_lvl: log_lvl,
});
$events_loc.pres_mgmt.show_report = 'presenters_agree';
}}
class="ae_btn_info btn btn-sm m-1"
>
{#if $events_loc.pres_mgmt.rpt__presenter_agree}
<span class="fas fa-toggle-on m-1"></span>
Agreed
{:else}
<span class="fas fa-toggle-off m-1"></span>
Not Agreed
{/if}
</button>
</h3>
<Comp_event_presenter_obj_tbl
bind:event_presenter_obj_li={$events_sess.event_presenter_obj_li}
show_presentation_fields={true}
show_session_fields={true}
log_lvl={2}
>
</Comp_event_presenter_obj_tbl>
{/if} -->
<!-- Show presenters with bios -->
<!-- {#if 1==3 && $events_loc.pres_mgmt.show_report == 'presenters_biography' && $events_sess.event_presenter_obj_li}
<h3 class="h4 text-center">Presenters with Bios</h3>
<Comp_event_presenter_obj_tbl
bind:event_presenter_obj_li={$events_sess.event_presenter_obj_li}
show_presentation_fields={true}
show_session_fields={true}
log_lvl={log_lvl}
>
</Comp_event_presenter_obj_tbl>
{/if} -->
<!-- Show overview of presenters (status checklist) -->
<!-- {#if 1==3 && $events_loc.pres_mgmt.show_report == 'presenters_overview' && $events_sess.event_presenter_obj_li}
<header class="w-full flex flex-row flex-wrap items-center justify-center gap-1">
<h3 class="h4 text-center">
Presenters Overview
</h3>
{#if $events_sess.pres_mgmt.status_rpt[$events_sess.pres_mgmt?.show_report] == 'loading'}
<span class="fas fa-spinner fa-spin m-1"></span>
<span>Loading...</span>
{/if}
<div class="flex flex-row items-center justify-center">
<label class="label text-sm">
<span class="fas fa-sort m-1"></span>
Sort by:
<select
class="inline-block select text-sm w-36 px-1 m-1 ae_btn_info"
bind:value={$events_loc.pres_mgmt.qry__presenter_sort}
onchange={(event) => {
if (event.target.value) {
$events_loc.pres_mgmt.qry__presenter_sort = event.target.value;
} else {
$events_loc.pres_mgmt.qry__presenter_sort = 'updated_on';
}
if ($events_loc.pres_mgmt.qry__presenter_sort == 'updated_on') {
$events_loc.pres_mgmt.qry__presenter_order_by_li = {
'updated_on': 'DESC',
'priority': 'DESC',
'sort': 'DESC',
'given_name': 'ASC',
'family_name': 'ASC',
'email': 'ASC',
'created_on': 'DESC',
};
} else if ($events_loc.pres_mgmt.qry__presenter_sort == 'given_name') {
$events_loc.pres_mgmt.qry__presenter_order_by_li = {
'given_name': 'ASC',
'family_name': 'ASC',
'updated_on': 'DESC',
'priority': 'DESC',
'sort': 'DESC',
'email': 'ASC',
'created_on': 'DESC',
};
} else if ($events_loc.pres_mgmt.qry__presenter_sort == 'family_name') {
$events_loc.pres_mgmt.qry__presenter_order_by_li = {
'family_name': 'ASC',
'given_name': 'ASC',
'updated_on': 'DESC',
'priority': 'DESC',
'sort': 'DESC',
'email': 'ASC',
'created_on': 'DESC',
};
} else if ($events_loc.pres_mgmt.qry__presenter_sort == 'email') {
$events_loc.pres_mgmt.qry__presenter_order_by_li = {
'email': 'ASC',
'given_name': 'ASC',
'family_name': 'ASC',
'updated_on': 'DESC',
'priority': 'DESC',
'sort': 'DESC',
'created_on': 'DESC',
};
} else if ($events_loc.pres_mgmt.qry__presenter_sort == 'start_datetime') {
$events_loc.pres_mgmt.qry__presenter_order_by_li = {
'event_presentation_start_datetime': 'ASC',
'priority': 'DESC',
'sort': 'DESC',
'given_name': 'ASC',
'family_name': 'ASC',
'email': 'ASC',
'updated_on': 'DESC',
'created_on': 'DESC',
};
} else {
$events_loc.pres_mgmt.qry__presenter_order_by_li = {
'updated_on': 'DESC',
'priority': 'DESC',
'sort': 'DESC',
'given_name': 'ASC',
'family_name': 'ASC',
'email': 'ASC',
'created_on': 'DESC',
};
}
ae_promises.handle_search__event_presenter = handle_search__event_presenter({
// ft_search_str: '',
// lk_search_str: '',
order_by_li: $events_loc.pres_mgmt.qry__presenter_order_by_li,
log_lvl: log_lvl,
});
$events_loc.pres_mgmt.show_report = 'presenters_overview';
}}
>
<option value="updated_on">Updated On</option>
<option value="given_name">Given Name</option>
<option value="family_name">Family Name</option>
<option value="email">Email</option>
<option value="start_datetime">Start Date Time</option>
</select>
</label>
</div>
</header>
<Comp_event_presenter_obj_tbl
bind:event_presenter_obj_li={$events_sess.event_presenter_obj_li}
show_presentation_fields={true}
show_session_fields={true}
log_lvl={log_lvl}
>
</Comp_event_presenter_obj_tbl>
{/if} -->
<!-- All Event File related reports -->
{#if $events_loc.pres_mgmt.show_report == 'recent_files' || $events_loc.pres_mgmt.show_report == 'large_files'}
@@ -1163,233 +840,12 @@ async function handle_qry__event_session(
bind:qry__status={$events_sess.pres_mgmt.status_qry__search}
qry__count={$events_sess.event_file_obj_li?.length ?? 0}
bind:qry__trigger={ae_triggers.rpt__event_files}
hide_session_code={$events_loc.pres_mgmt?.hide__session_code}
log_lvl={log_lvl}
/>
{/if}
<!-- Show recently uploaded files -->
{#if 1==3 && $events_loc.pres_mgmt.show_report == 'recent_files' && event_file_id_random_li}
<header class="w-full flex flex-row flex-wrap items-center justify-center gap-1">
<h3 class="h4 text-center">
Recent File Uploads
</h3>
{#if $events_sess.pres_mgmt.status_rpt[$events_sess.pres_mgmt?.show_report] == 'loading'}
<span class="fas fa-spinner fa-spin m-1"></span>
<span>Loading...</span>
{/if}
<!-- Show list of offsets: 10 minutes, 1 hours, 6 hours, 12 hours, 24 hours, 48 hours, 72 hours -->
<div class="flex flex-row flex-wrap items-center justify-center">
<select
class="inline-block select text-sm px-1 w-40 m-1 ae_btn_info"
bind:value={$events_loc.pres_mgmt.qry__files_offset_seconds}
onchange={() => {
if ($events_loc.pres_mgmt?.qry__files_offset_seconds) {
// Calculate the datetime to pass based on the selected offset.
// let offset = $events_loc.pres_mgmt.qry__files_offset_seconds ?? 0;
// let created_on = new Date()
// console.log(`Created on:`, created_on);
// created_on.setSeconds(created_on.getSeconds() - offset);
handle_qry__event_file({
created_on_offset: $events_loc.pres_mgmt.qry__files_offset_seconds ?? 0,
file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
log_lvl: 1,
});
} else {
console.log('No offset is will be used.');
handle_qry__event_file({
log_lvl: 1,
});
}
$events_loc.pres_mgmt.show_report = 'recent_files';
}}
>
<option value="">-- offset not set --</option>
<option value="600">10 minutes</option>
<option value="1800">30 minutes</option>
<option value="3600">1 hour</option>
<option value="10800">2 hours</option>
<option value="21600">6 hours</option>
<option value="43200">12 hours</option>
<option value="86400">24 hours</option>
<option value="129600">36 hours</option>
<option value="172800">48 hours</option>
<option value="259200">72 hours</option>
<option value="604800">1 week</option>
<option value="1209600">2 weeks</option>
<option value="2419200">4 weeks</option>
<option value="7776000">12 weeks</option>
<option value="15552000">24 weeks</option>
</select>
<select
id="file_purpose"
name="file_purpose"
class="inline-block select text-sm w-40 px-1 m-1 ae_btn_info"
bind:value={$events_loc.pres_mgmt.qry__file_purpose}
onchange={() => {
handle_qry__event_file({
created_on_offset: $events_loc.pres_mgmt.qry__files_offset_seconds ?? 0,
file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
log_lvl: 1,
});
$events_loc.pres_mgmt.show_report = 'recent_files';
}}
>
<option
value={null}
selected={!$events_loc.pres_mgmt.qry__file_purpose}
class="text-xs"
>
-- purpose not set --
</option>
{#if $events_loc.pres_mgmt?.file_purpose_option_kv}
{#each Object.entries($events_loc.pres_mgmt.file_purpose_option_kv) as [key, file_purpose_option]}
<option
value={key} selected={$events_loc.pres_mgmt.qry__file_purpose === key}
disabled={file_purpose_option?.disabled}
class:hidden={file_purpose_option?.hidden}
>
{file_purpose_option?.name}
</option>
{/each}
{/if}
</select>
<!-- Max files select options -->
<select
id="qry_limit__files"
bind:value={$events_loc.pres_mgmt.qry_limit__files}
class="inline-block select text-sm px-1 w-40 m-1 ae_btn_info"
onchange={() => {
handle_qry__event_file({
created_on_offset: $events_loc.pres_mgmt.qry__files_offset_seconds ?? 0,
file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
limit: $events_loc.pres_mgmt.qry_limit__files ?? 100,
log_lvl: log_lvl,
});
$events_loc.pres_mgmt.show_report = 'recent_files';
}}
>
<option value={0}>-- max not set --</option>
<option value={25}>25 files</option>
<option value={50}>50 files</option>
<option value={75}>75 files</option>
<option value={100}>100 files</option>
<option value={200}>200 files</option>
<option value={500}>500 files</option>
</select>
</div>
</header>
<!-- <p class="text-center text-red-500 font-bold">
This report is new and still being tested.
</p> -->
<!-- <Comp_event_file_obj_tbl
bind:event_file_id_random_li={event_file_id_random_li}
bind:show_direct_download={$events_loc.pres_mgmt.show__direct_download}
show_location_fields={true}
show_presenter_fields={true}
show_presentation_fields={true}
show_session_fields={true}
hide_session_code={$events_loc.pres_mgmt?.hide__session_code}
>
</Comp_event_file_obj_tbl> -->
{/if}
<!-- Show large files -->
{#if 1==3 && $events_loc.pres_mgmt.show_report == 'large_files' && event_file_id_random_li}
<header class="w-full flex flex-row flex-wrap items-center justify-center gap-1">
<h3 class="h4 text-center">
Large File Uploads
</h3>
{#if $events_sess.pres_mgmt.status_rpt[$events_sess.pres_mgmt?.show_report] == 'loading'}
<span class="fas fa-spinner fa-spin m-1"></span>
<span>Loading...</span>
{/if}
<div class="flex flex-row flex-wrap items-center justify-center">
<select
class="inline-block select text-sm w-40 px-1 m-1 ae_btn_info"
bind:value={$events_loc.pres_mgmt.qry__files_min_size}
onchange={() => {
handle_qry__event_file({
min_file_size: $events_loc.pres_mgmt.qry__files_min_size ?? 100000000, // in bytes
file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
log_lvl: log_lvl,
});
$events_loc.pres_mgmt.show_report = 'large_files';
}}
>
<option value="">-- size not set --</option>
<option value="10000000">10 MB</option>
<option value="25000000">25 MB</option>
<option value="50000000">50 MB</option>
<option value="75000000">75 MB</option>
<option value="100000000">100 MB</option>
<option value="150000000">150 MB</option>
<option value="250000000">250 MB</option>
<option value="500000000">500 MB</option>
<option value="1000000000">1 GB</option>
<!-- <option value="5000000000">5 GB</option> -->
</select>
<select
id="file_purpose"
name="file_purpose"
class="inline-block select text-sm w-40 p-1 m-1 ae_btn_info"
bind:value={$events_loc.pres_mgmt.qry__file_purpose}
onchange={() => {
handle_qry__event_file({
min_file_size: $events_loc.pres_mgmt.qry__files_min_size ?? 100000000, // in bytes
file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
log_lvl: 1,
});
$events_loc.pres_mgmt.show_report = 'large_files';
}}
>
<option
value={null}
selected={!$events_loc.pres_mgmt.qry__file_purpose}
class="text-xs"
>
-- purpose not set --
</option>
{#if $events_loc.pres_mgmt?.file_purpose_option_kv}
{#each Object.entries($events_loc.pres_mgmt.file_purpose_option_kv) as [key, file_purpose_option]}
<option
value={key} selected={$events_loc.pres_mgmt.qry__file_purpose === key}
disabled={file_purpose_option?.disabled}
class:hidden={file_purpose_option?.hidden}
>
{file_purpose_option?.name}
</option>
{/each}
{/if}
</select>
</div>
</header>
<!-- <Comp_event_file_obj_tbl
bind:event_file_id_random_li={event_file_id_random_li}
show_location_fields={true}
show_presenter_fields={true}
show_presentation_fields={true}
show_session_fields={true}
hide_session_code={$events_loc.pres_mgmt?.hide__session_code}
>
</Comp_event_file_obj_tbl> -->
{/if}
{/if}
{/if}

View File

@@ -116,22 +116,26 @@ let sort_option_kv: key_val = {
$effect(() => {
if (qry__trigger) {
if (log_lvl) {
console.log(`Report: ${rpt__name}; Triggered query for event files.`);
}
qry__trigger = false;
if (rpt__name == 'recent_files') {
handle_qry__event_file({
created_on_offset: null,
min_file_size: null, // in bytes
file_purpose: null,
created_on_offset: $events_loc.pres_mgmt.qry__files_offset_seconds,
// min_file_size: $events_loc.pres_mgmt.qry__files_min_size,
file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
// ft_search_str: '',
// lk_search_str: '',
limit: rpt__limit,
order_by_li: rpt__order_by_li,
log_lvl: log_lvl,
});
} else if (rpt__name == 'large_files') {
handle_qry__event_file({
created_on_offset: null,
min_file_size: 5000000, // in bytes
file_purpose: null,
min_file_size: $events_loc.pres_mgmt.qry__files_min_size,
file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
// ft_search_str: '',
// lk_search_str: '',
order_by_li: rpt__order_by_li,
@@ -312,16 +316,18 @@ async function handle_qry__event_file(
// let created_on = new Date()
// console.log(`Created on:`, created_on);
// created_on.setSeconds(created_on.getSeconds() - offset);
handle_qry__event_file({
created_on_offset: $events_loc.pres_mgmt.qry__files_offset_seconds ?? 0,
file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
log_lvl: log_lvl,
});
// handle_qry__event_file({
// created_on_offset: $events_loc.pres_mgmt.qry__files_offset_seconds ?? 0,
// file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
// log_lvl: log_lvl,
// });
qry__trigger = true;
} else {
console.log('No offset is will be used.');
handle_qry__event_file({
log_lvl: log_lvl,
});
// handle_qry__event_file({
// log_lvl: log_lvl,
// });
qry__trigger = true;
}
$events_loc.pres_mgmt.show_report = 'recent_files';
@@ -351,11 +357,12 @@ async function handle_qry__event_file(
class="inline-block select text-sm w-40 px-1 m-1 ae_btn_info"
bind:value={$events_loc.pres_mgmt.qry__file_purpose}
onchange={() => {
handle_qry__event_file({
created_on_offset: $events_loc.pres_mgmt.qry__files_offset_seconds ?? 0,
file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
log_lvl: log_lvl,
});
// handle_qry__event_file({
// created_on_offset: $events_loc.pres_mgmt.qry__files_offset_seconds ?? 0,
// file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
// log_lvl: log_lvl,
// });
qry__trigger = true;
$events_loc.pres_mgmt.show_report = 'recent_files';
}}
>
@@ -386,12 +393,13 @@ async function handle_qry__event_file(
bind:value={$events_loc.pres_mgmt.qry_limit__files}
class="inline-block select text-sm px-1 w-40 m-1 ae_btn_info"
onchange={() => {
handle_qry__event_file({
created_on_offset: $events_loc.pres_mgmt.qry__files_offset_seconds ?? 0,
file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
limit: $events_loc.pres_mgmt.qry_limit__files ?? 100,
log_lvl: log_lvl,
});
// handle_qry__event_file({
// created_on_offset: $events_loc.pres_mgmt.qry__files_offset_seconds ?? 0,
// file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
// limit: $events_loc.pres_mgmt.qry_limit__files ?? 100,
// log_lvl: log_lvl,
// });
qry__trigger = true;
$events_loc.pres_mgmt.show_report = 'recent_files';
}}
>
@@ -429,11 +437,12 @@ async function handle_qry__event_file(
class="inline-block select text-sm w-40 px-1 m-1 ae_btn_info"
bind:value={$events_loc.pres_mgmt.qry__files_min_size}
onchange={() => {
handle_qry__event_file({
min_file_size: $events_loc.pres_mgmt.qry__files_min_size ?? 100000000, // in bytes
file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
log_lvl: log_lvl,
});
// handle_qry__event_file({
// min_file_size: $events_loc.pres_mgmt.qry__files_min_size ?? 100000000, // in bytes
// file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
// log_lvl: log_lvl,
// });
qry__trigger = true;
$events_loc.pres_mgmt.show_report = 'large_files';
}}
>
@@ -456,11 +465,12 @@ async function handle_qry__event_file(
class="inline-block select text-sm w-40 p-1 m-1 ae_btn_info"
bind:value={$events_loc.pres_mgmt.qry__file_purpose}
onchange={() => {
handle_qry__event_file({
min_file_size: $events_loc.pres_mgmt.qry__files_min_size ?? 100000000, // in bytes
file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
log_lvl: 1,
});
// handle_qry__event_file({
// min_file_size: $events_loc.pres_mgmt.qry__files_min_size ?? 100000000, // in bytes
// file_purpose: $events_loc.pres_mgmt.qry__file_purpose ?? null,
// log_lvl: 1,
// });
qry__trigger = true;
$events_loc.pres_mgmt.show_report = 'large_files';
}}
>

View File

@@ -296,16 +296,9 @@ async function handle_search__event_presenter(
type="button"
onclick={() => {
$events_loc.pres_mgmt.rpt__presenter_agree = !$events_loc.pres_mgmt.rpt__presenter_agree;
// rpt__name = '';
// ae_promises.handle_search__event_presenter = handle_search__event_presenter({
// agree: $events_loc.pres_mgmt.rpt__presenter_agree ?? false,
// ft_search_str: '',
// lk_search_str: '',
// log_lvl: log_lvl,
// });
rpt__name = 'presenters_agree';
qry__trigger = true;
rpt__name = 'presenters_agree';
}}
class="ae_btn_info btn btn-sm m-1"
>
@@ -378,8 +371,8 @@ async function handle_search__event_presenter(
// order_by_li: $events_loc.pres_mgmt.qry__presenter_order_by_li,
// log_lvl: log_lvl,
// });
rpt__name = 'presenters_overview';
qry__trigger = true;
rpt__name = 'presenters_overview';
}}
>
<option value="updated_on">Updated On</option>

View File

@@ -296,19 +296,16 @@ async function handle_qry__event_session(
Without
{/if}
Files
</h3>
<div class="flex flex-row items-center justify-center">
<div class="flex flex-row items-center justify-center">
<button
type="button"
onclick={() => {
$events_loc.pres_mgmt.rpt__session_no_files = !$events_loc.pres_mgmt.rpt__session_no_files;
// ae_promises.handle_qry__event_session =
// handle_qry__event_session({
// qry_files: !$events_loc.pres_mgmt.rpt__session_no_files,
// });
rpt__name = 'session_no_files';
qry__trigger = true;
rpt__name = 'session_no_files';
}}
class="ae_btn_info btn-sm m-1"
>
@@ -320,8 +317,7 @@ async function handle_qry__event_session(
Without
{/if}
</button>
</div>
</h3>
</div>
</header>
{/if}
@@ -350,13 +346,9 @@ async function handle_qry__event_session(
type="button"
onclick={() => {
$events_loc.pres_mgmt.rpt__session_no_bio = !$events_loc.pres_mgmt.rpt__session_no_bio;
// ae_promises.handle_qry__event_session =
// handle_qry__event_session({
// qry_poc_bios: $events_loc.pres_mgmt.rpt__session_no_bio ?? false,
// });
rpt__name = 'session_no_bio';
qry__trigger = true;
rpt__name = 'session_no_bio';
}}
class="ae_btn_info btn-sm m-1"
>
@@ -400,13 +392,9 @@ async function handle_qry__event_session(
type="button"
onclick={() => {
$events_loc.pres_mgmt.rpt__session_poc_agree = !$events_loc.pres_mgmt.rpt__session_poc_agree;
// ae_promises.handle_qry__event_session =
// handle_qry__event_session({
// qry_poc_agree: $events_loc.pres_mgmt.rpt__session_poc_agree ?? false,
// });
rpt__name = 'sessions_poc_agree';
qry__trigger = true;
rpt__name = 'sessions_poc_agree';
}}
class="ae_btn_info btn-sm m-1"
title="Toggle to show sessions with or without POC agreement to terms"

View File

@@ -69,6 +69,79 @@ $effect(() => {
}
});
function generate_file_export_csv(ae_obj_li) {
console.log(`*** generate_file_export_csv() ***`, ae_obj_li);
// We need to create a list with the column names and then a list of lists with the data.
let csv_data = [];
let csv_columns = [
'File ID', 'Filename', 'Extension', 'Size', 'SHA256 Hash', 'Uploaded On', 'Updated On',
'Session ID', 'Session Code', 'Session Name', 'Session Start Datetime',
'Presentation ID', 'Presentation Name', 'Presentation Time',
'Presenter ID', 'Name', 'Email',
'Download Link',
'Download Link - Session Code'
];
csv_data.push(csv_columns);
for (let i = 0; i < ae_obj_li.length; i++) {
let csv_row = [];
csv_row.push(ae_obj_li[i].event_file_id);
csv_row.push(ae_obj_li[i].filename ? `"${ae_util.clean_filename(ae_obj_li[i].filename)}"` : '');
csv_row.push(ae_obj_li[i].extension ? ae_obj_li[i].extension : '');
csv_row.push(ae_obj_li[i].file_size ? ae_util.format_bytes(ae_obj_li[i].file_size) : '');
csv_row.push(ae_obj_li[i].hash_sha256.slice(0, 10) + '...');
csv_row.push(ae_obj_li[i].created_on ? ae_util.iso_datetime_formatter(ae_obj_li[i].created_on, 'datetime_iso_12_no_seconds') : '');
csv_row.push(ae_obj_li[i].updated_on ? ae_util.iso_datetime_formatter(ae_obj_li[i].updated_on, 'datetime_iso_12_no_seconds') : '');
csv_row.push(ae_obj_li[i].event_session_id ? ae_obj_li[i].event_session_id : '');
csv_row.push(ae_obj_li[i].event_session_code ? ae_obj_li[i].event_session_code : '');
csv_row.push(ae_obj_li[i].event_session_name ?? '');
csv_row.push(ae_obj_li[i].event_session_start_datetime ? ae_util.iso_datetime_formatter(ae_obj_li[i].event_session_start_datetime, 'datetime_iso_12_no_seconds') : '');
csv_row.push(ae_obj_li[i].event_presentation_id ? ae_obj_li[i].event_presentation_id : '');
csv_row.push(ae_obj_li[i].event_presentation_name ?? '');
csv_row.push(ae_obj_li[i].event_presentation_start_datetime ? ae_util.iso_datetime_formatter(ae_obj_li[i].event_presentation_start_datetime, 'datetime_iso_12_no_seconds') : '');
csv_row.push(ae_obj_li[i].event_presenter_id ? ae_obj_li[i].event_presenter_id : '');
csv_row.push(ae_obj_li[i].event_presenter_full_name ?? '');
csv_row.push(ae_obj_li[i].event_presenter_email ? ae_obj_li[i].event_presenter_email : '');
csv_row.push(encodeURI(`${$ae_api.base_url}/event/file/${ae_obj_li[i]?.event_file_id_random}/download?filename=${ae_util.clean_filename(ae_obj_li[i]?.filename)}&x_no_account_id_token=direct-download`));
csv_row.push(encodeURI(`${$ae_api.base_url}/event/file/${ae_obj_li[i]?.event_file_id_random}/download?filename=${ae_obj_li[i]?.event_session_code}-${ae_util.clean_filename(ae_obj_li[i]?.filename)}&x_no_account_id_token=direct-download`));
csv_data.push(csv_row);
}
console.log('CSV Data:', csv_data);
let csv_content_str = '';
csv_data.forEach(function(row) {
csv_content_str += row.join(';');
csv_content_str += '\n';
});
const blob = new Blob([csv_content_str], { type: 'text/csv;charset=utf-8;' });
const obj_url = URL.createObjectURL(blob);
const download_link = document.createElement('a');
download_link.setAttribute('href', obj_url);
download_link.setAttribute('download', `file_list_${ae_util.iso_datetime_formatter()}.csv`);
download_link.setAttribute('style', 'display: none;')
download_link.textContent = 'Download CSV';
// document.querySelector('body').appendChild(download_link);
document.getElementById('download_csv_container').appendChild(download_link);
// Automatically download the file
download_link.click();
return csv_data;
}
</script>
@@ -122,7 +195,7 @@ $effect(() => {
}}
>
<span class="fas fa-file-csv mx-1"></span>
Export Presenters CSV
Export Files CSV
</button>
<span id="download_csv_container"></span>