diff --git a/package.json b/package.json index 31119743..6a973130 100644 --- a/package.json +++ b/package.json @@ -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, diff --git a/src/routes/events/[event_id]/reports/+page.svelte b/src/routes/events/[event_id]/reports/+page.svelte index 03923d71..7bebb164 100644 --- a/src/routes/events/[event_id]/reports/+page.svelte +++ b/src/routes/events/[event_id]/reports/+page.svelte @@ -53,7 +53,11 @@ let event_session_id_random_li: Array = $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( - - - - - - @@ -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." > - {#if $events_loc.pres_mgmt?.show_report == 'presenters_agree' && $events_sess.pres_mgmt?.status_qry__search == 'loading'} {: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( - - {#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'} - - - - - - - - {#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'} {/if} - - - - - - - - - - {#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} - - -{#if 1==3 && $events_loc.pres_mgmt.show_report == 'recent_files' && event_file_id_random_li} -
-

- Recent File Uploads -

- {#if $events_sess.pres_mgmt.status_rpt[$events_sess.pres_mgmt?.show_report] == 'loading'} - - Loading... - {/if} - - -
- - - - - - - - -
- -
- - - - -{/if} - - - -{#if 1==3 && $events_loc.pres_mgmt.show_report == 'large_files' && event_file_id_random_li} -
-

- Large File Uploads -

- {#if $events_sess.pres_mgmt.status_rpt[$events_sess.pres_mgmt?.show_report] == 'loading'} - - Loading... - {/if} - -
- - - -
- -
- - -{/if} - - -{/if} +{/if} \ No newline at end of file diff --git a/src/routes/events/[event_id]/reports/reports_files.svelte b/src/routes/events/[event_id]/reports/reports_files.svelte index 925abdb7..a70b3720 100644 --- a/src/routes/events/[event_id]/reports/reports_files.svelte +++ b/src/routes/events/[event_id]/reports/reports_files.svelte @@ -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'; }} > diff --git a/src/routes/events/[event_id]/reports/reports_presenters.svelte b/src/routes/events/[event_id]/reports/reports_presenters.svelte index 50d3672e..7d30c4c4 100644 --- a/src/routes/events/[event_id]/reports/reports_presenters.svelte +++ b/src/routes/events/[event_id]/reports/reports_presenters.svelte @@ -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'; }} > diff --git a/src/routes/events/[event_id]/reports/reports_sessions.svelte b/src/routes/events/[event_id]/reports/reports_sessions.svelte index 1743bbf7..f1d7e32f 100644 --- a/src/routes/events/[event_id]/reports/reports_sessions.svelte +++ b/src/routes/events/[event_id]/reports/reports_sessions.svelte @@ -296,19 +296,16 @@ async function handle_qry__event_session( Without {/if} Files + -
+
-
- +
{/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" diff --git a/src/routes/events/ae_comp__event_file_obj_tbl.svelte b/src/routes/events/ae_comp__event_file_obj_tbl.svelte index d5070fb7..d229f08f 100644 --- a/src/routes/events/ae_comp__event_file_obj_tbl.svelte +++ b/src/routes/events/ae_comp__event_file_obj_tbl.svelte @@ -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; +} + + @@ -122,7 +195,7 @@ $effect(() => { }} > - Export Presenters CSV + Export Files CSV