The new event files reports has been cleaned up and more configurable.

This commit is contained in:
Scott Idem
2025-10-02 12:57:37 -04:00
parent 03f831de8a
commit b85d2ee98c
6 changed files with 254 additions and 61 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "osit-aether-app-svelte",
"version": "3.5.0",
"version": "3.5.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

@@ -221,6 +221,7 @@ let events_local_data_struct: key_val = {
qry_limit__sessions: 100,
qry_max: 500, // This is the max number the limit is allowed to be set to.
qry__files_offset_seconds: null,
qry__files_sort: 'created_on',
qry_and__file_count: true, // Essentially it should be greater than 0

View File

@@ -6,7 +6,7 @@ import { browser } from '$app/environment';
import { events_func } from '$lib/ae_events_functions';
export async function load({ params, parent }) { // route
export async function load({ params, parent, url }) { // route
let log_lvl: number = 0;
let data = await parent();
@@ -27,6 +27,9 @@ export async function load({ params, parent }) { // route
ae_acct.slct.event_id = event_id;
if (browser) {
// console.log(`TEST URL Params`, params);
// console.log(`TEST URL`, url);
let load_event_obj = await events_func.load_ae_obj_id__event({
api_cfg: ae_acct.api,
event_id: event_id,

View File

@@ -3,12 +3,13 @@ interface Props {
/** @type {import('./$types').PageData} */
data: any;
}
let { data }: Props = $props();
let log_lvl: number = $state(0);
// console.log(`ae_events_pres_mgmt event [slug] +page.svelte data:`, data);
import { page } from '$app/stores';
import type { key_val } from '$lib/ae_stores';
import { ae_util } from '$lib/ae_utils/ae_utils';
@@ -32,6 +33,12 @@ console.log(`$slct.account_id = `, $slct.account_id);
let ae_acct = data[$slct.account_id];
console.log(`ae_acct = `, ae_acct);
// console.log(`TEST data`, data);
// console.log(`TEST data.url`, data?.url);
// console.log(`TEST data.url.hash`, data?.url?.hash);
// console.log(`TEST $page.url`, $page?.url);
console.log(`TEST $page.url.hash`, $page?.url?.hash);
$events_slct.event_id = ae_acct.slct.event_id;
$events_slct.event_obj = ae_acct.slct.event_obj;
$events_slct.event_session_obj_li = ae_acct.slct.event_session_obj_li;
@@ -59,6 +66,18 @@ let ae_triggers: key_val = $state({
rpt__event_presenters: true,
});
let url_hash: string = $state($page?.url?.hash);
$effect(() => {
if (url_hash) {
url_hash = url_hash.replace('#', '');
if (log_lvl) {
console.log(`URL hash changed: ${url_hash}`);
}
$events_loc.pres_mgmt.show_report = url_hash;
}
});
// if ($events_loc.pres_mgmt.show_report == 'sessions_poc_agree') {
// handle_qry__event_session({
// qry_poc_agree: $events_loc.pres_mgmt.rpt__session_poc_agree ?? false,
@@ -734,7 +753,7 @@ async function handle_qry__event_session(
<span class="border border-gray-200 rounded-md p-1">
<button
<!-- <button
type="button"
disabled={!$ae_loc.trusted_access}
onclick={() => {
@@ -751,9 +770,9 @@ async function handle_qry__event_session(
<span class="fas fa-file m-1"></span>
{/if}
Recent File Uploads
</button>
</button> -->
<button
<!-- <button
type="button"
disabled={!$ae_loc.trusted_access}
onclick={() => {
@@ -769,6 +788,24 @@ async function handle_qry__event_session(
{/if}
<span class="fas fa-file m-1"></span>
Large File Uploads
</button> -->
<button
type="button"
disabled={!$ae_loc.trusted_access}
onclick={() => {
ae_triggers.rpt__event_files = true;
$events_loc.pres_mgmt.show_report = 'event_files';
}}
class:hidden={$lq__event_obj?.mod_pres_mgmt_json?.hide__report_kv.event_files}
class="btn btn-sm preset-tonal-success border border-success-500 hover:preset-filled-success-500 transition-all m-1"
title="Show large file uploads."
>
{#if $events_sess.pres_mgmt?.show_report == 'event_files' && $events_sess.pres_mgmt.status_rpt[$events_sess.pres_mgmt?.show_report] == 'loading'}
<span class="fas fa-spinner fa-spin"></span>
{/if}
<span class="fas fa-file m-1"></span>
Event Files
</button>
</span>
@@ -826,13 +863,13 @@ async function handle_qry__event_session(
<!-- All Event File related reports -->
{#if $events_loc.pres_mgmt.show_report == 'recent_files' || $events_loc.pres_mgmt.show_report == 'large_files'}
{#if $events_loc.pres_mgmt.show_report == 'event_files' ||$events_loc.pres_mgmt.show_report == 'recent_files' || $events_loc.pres_mgmt.show_report == 'large_files'}
<Reports_files
lq__event_obj={lq__event_obj}
event_file_obj_li={$events_sess.event_file_obj_li}
rpt__name={$events_loc.pres_mgmt.show_report}
rpt__sort={$events_loc.pres_mgmt.qry__file_sort}
rpt__sort={$events_loc.pres_mgmt.qry__files_sort}
rpt__enabled={$events_loc.pres_mgmt.qry_enabled}
rpt__hidden={$events_loc.pres_mgmt.qry_hidden}
rpt__limit={$events_loc.pres_mgmt.qry_limit__files}

View File

@@ -7,7 +7,7 @@ interface Props {
rpt__name?: string;
rpt__sort?: string;
rpt__order_by_li?: any;
// rpt__order_by_li?: any;
rpt__enabled?: string;
rpt__hidden?: string;
rpt__limit?: number;
@@ -28,9 +28,9 @@ let {
event_file_obj_li = $bindable([]),
rpt__name = $bindable('recent_files'), // recent_files, large_files
rpt__sort = $bindable('updated_on'), // updated_on, given_name, family_name, email, start_datetime
rpt__order_by_li = $bindable({'priority': 'DESC', 'sort': 'DESC', 'created_on': 'DESC', 'updated_on': 'DESC', 'filename': 'ASC', 'extension': 'ASC', 'hosted_file_size': 'ASC'}),
rpt__name = $bindable('event_files'), // event_files, recent_files, large_files
rpt__sort = $bindable('created_on'), // updated_on, start_datetime
// rpt__order_by_li = $bindable({'priority': 'DESC', 'sort': 'DESC', 'created_on': 'DESC', 'updated_on': 'DESC', 'filename': 'ASC', 'extension': 'ASC', 'hosted_file_size': 'ASC'}),
rpt__enabled = $bindable('enabled'), // enabled, disabled, all
rpt__hidden = $bindable('not_hidden'), // hidden, not_hidden, all
rpt__limit = $bindable(150),
@@ -61,57 +61,105 @@ import Comp_event_file_obj_tbl from './../../ae_comp__event_file_obj_tbl_wrapper
let ae_promises: key_val = $state({});
let rpt__order_by_li: key_val = $state({});
let sort_option_kv: key_val = {
'created_on': {
name: 'Created On',
field_kv: {
'email': 'ASC',
'given_name': 'ASC',
'family_name': 'ASC',
'updated_on': 'DESC',
'priority': 'DESC',
'sort': 'DESC',
'created_on': 'DESC',
'updated_on': 'DESC',
'filename': 'ASC',
'extension': 'ASC',
'hosted_file_size': 'ASC',
}
},
'updated_on': {
name: 'Updated On',
field_kv: {
'event_presentation_start_datetime': 'ASC',
'priority': 'DESC',
'sort': 'DESC',
'given_name': 'ASC',
'family_name': 'ASC',
'email': 'ASC',
'updated_on': 'DESC',
'created_on': 'DESC',
'filename': 'ASC',
'extension': 'ASC',
'hosted_file_size': 'ASC',
}
},
'filename': {
'filename_asc': {
name: 'Filename',
field_kv: {
'given_name': 'ASC',
'family_name': 'ASC',
'updated_on': 'DESC',
'filename': 'ASC',
'extension': 'ASC',
'priority': 'DESC',
'sort': 'DESC',
'email': 'ASC',
'created_on': 'DESC',
'updated_on': 'DESC',
}
},
'extension': {
'filename_desc': {
name: 'Filename',
field_kv: {
'filename': 'DESC',
'extension': 'ASC',
'priority': 'DESC',
'sort': 'DESC',
'created_on': 'DESC',
'updated_on': 'DESC',
}
},
'file_type': {
name: 'Extension/Type',
field_kv: {
'family_name': 'ASC',
'given_name': 'ASC',
'updated_on': 'DESC',
'extension': 'ASC',
'filename': 'ASC',
'priority': 'DESC',
'sort': 'DESC',
'email': 'ASC',
'created_on': 'DESC',
'updated_on': 'DESC',
}
},
'file_size': {
name: 'File Size',
field_kv: {
'hosted_file_size': 'DESC',
'filename': 'ASC',
'extension': 'ASC',
'priority': 'DESC',
'sort': 'DESC',
'created_on': 'DESC',
'updated_on': 'DESC',
}
},
'start_datetime_asc': {
name: 'Start Date Time',
field_kv: {
'event_session_start_datetime': 'ASC',
'event_session_name': 'ASC',
'filename': 'ASC',
'extension': 'ASC',
'priority': 'DESC',
'sort': 'DESC',
'created_on': 'DESC',
'updated_on': 'DESC',
}
},
'start_datetime_desc': {
name: 'Start Date Time',
field_kv: {
'event_session_start_datetime': 'DESC',
'event_session_name': 'ASC',
'filename': 'ASC',
'extension': 'ASC',
'priority': 'DESC',
'sort': 'DESC',
'created_on': 'DESC',
'updated_on': 'DESC',
}
}
};
$effect(() => {
@@ -120,6 +168,9 @@ $effect(() => {
console.log(`Report: ${rpt__name}; Triggered query for event files.`);
}
qry__trigger = false;
rpt__order_by_li = sort_option_kv[$events_loc.pres_mgmt.qry__files_sort]?.field_kv ?? sort_option_kv['created_on'].field_kv;
if (rpt__name == 'recent_files') {
handle_qry__event_file({
created_on_offset: $events_loc.pres_mgmt.qry__files_offset_seconds,
@@ -141,6 +192,17 @@ $effect(() => {
order_by_li: rpt__order_by_li,
log_lvl: log_lvl,
});
} else if (rpt__name == 'event_files') {
handle_qry__event_file({
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,
limit: rpt__limit,
order_by_li: rpt__order_by_li,
log_lvl: log_lvl,
});
} else {
console.log(`Unknown report name: ${rpt__name}`);
}
}
});
@@ -155,7 +217,7 @@ async function handle_qry__event_file(
enabled = rpt__hidden,
hidden = rpt__enabled,
limit = rpt__limit,
order_by_li = {'priority': 'DESC', 'sort': 'DESC', 'created_on': 'DESC', 'updated_on': 'DESC', 'filename': 'ASC', 'extension': 'ASC', 'hosted_file_size': 'ASC'},
order_by_li = rpt__order_by_li,
log_lvl = 0,
}: {
created_on_offset?: string | null,
@@ -306,7 +368,7 @@ async function handle_qry__event_file(
</h3>
<div class="flex flex-row items-center justify-center">
<select
<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={() => {
@@ -388,29 +450,29 @@ async function handle_qry__event_file(
<!-- 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,
// });
qry__trigger = true;
$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>
<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,
// });
qry__trigger = true;
$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>
@@ -419,7 +481,7 @@ async function handle_qry__event_file(
<!-- Show large files -->
{#if rpt__name == 'large_files'}
{#if rpt__name == 'event_files' || rpt__name == 'large_files'}
<header class="w-full flex flex-row flex-wrap items-center justify-center gap-1">
<h3 class="h4 text-center">
{#if qry__status == 'loading'}
@@ -428,11 +490,57 @@ async function handle_qry__event_file(
{:else}
<span class="fas fa-list m-1"></span>
{/if}
Large File Uploads
File Uploads
</h3>
<div class="flex flex-row 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: log_lvl,
// });
qry__trigger = true;
} else {
console.log('No offset is will be used.');
// handle_qry__event_file({
// log_lvl: log_lvl,
// });
qry__trigger = true;
}
$events_loc.pres_mgmt.show_report = 'event_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
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}
@@ -443,7 +551,7 @@ async function handle_qry__event_file(
// log_lvl: log_lvl,
// });
qry__trigger = true;
$events_loc.pres_mgmt.show_report = 'large_files';
$events_loc.pres_mgmt.show_report = 'event_files';
}}
>
<option value="">-- size not set --</option>
@@ -471,7 +579,7 @@ async function handle_qry__event_file(
// log_lvl: 1,
// });
qry__trigger = true;
$events_loc.pres_mgmt.show_report = 'large_files';
$events_loc.pres_mgmt.show_report = 'event_files';
}}
>
<option
@@ -493,6 +601,50 @@ async function handle_qry__event_file(
{/each}
{/if}
</select>
<label class="label text-sm">
<span class="fas fa-sort m-1"></span>
Sort by:
<select
class="inline-block select text-sm w-44 px-1 m-1 ae_btn_info"
bind:value={$events_loc.pres_mgmt.qry__files_sort}
onchange={(event) => {
if (event.target.value) {
// rpt__sort = event.target.value;
$events_loc.pres_mgmt.qry__files_sort = event.target.value;
} else {
// rpt__sort = 'created_on';
$events_loc.pres_mgmt.qry__files_sort = 'created_on';
}
// rpt__order_by_li = sort_option_kv[rpt__sort]?.field_kv ?? sort_option_kv['created_on'].field_kv;
rpt__order_by_li = sort_option_kv[$events_loc.pres_mgmt.qry__files_sort]?.field_kv ?? sort_option_kv['created_on'].field_kv;
// 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,
// });
qry__trigger = true;
$events_loc.pres_mgmt.show_report = 'event_files';
}}
>
<option value="created_on">Add/Uploaded On</option>
<option value="filename_asc">Filename ASC</option>
<option value="filename_desc">Filename DESC</option>
<option value="file_type">File Type/Ext</option>
<option value="file_size">File Size</option>
<option value="updated_on" class:hidden={!$ae_loc.administrator_access}>Updated On</option>
<option value="start_datetime_asc">Start Date Time ASC</option>
<option value="start_datetime_desc">Start Date Time DESC</option>
<!-- <option value="created_on">Created On</option> -->
<!-- <option value="sort">Sort</option> -->
<!-- <option value="priority">Priority</option> -->
</select>
</label>
</div>
</header>
{/if}

View File

@@ -166,7 +166,7 @@ async function handle_search__event_presenter(
enabled = rpt__hidden,
hidden = rpt__enabled,
limit = rpt__limit,
order_by_li = {'updated_on': 'DESC', 'priority': 'DESC', 'sort': 'DESC', 'given_name': 'ASC', 'family_name': 'ASC', 'email': 'ASC', 'created_on': 'DESC'},
order_by_li = rpt__order_by_li,
// params = {
// 'qry__enabled': $events_loc.pres_mgmt.qry_enabled ?? 'enabled',
// 'qry__hidden': $events_loc.pres_mgmt.qry_hidden ?? 'not_hidden',