More work on making the locations and devices more useful.

This commit is contained in:
Scott Idem
2024-10-16 15:27:25 -04:00
parent 3c957692c3
commit deac7bd574
10 changed files with 212 additions and 227 deletions

View File

@@ -3,14 +3,17 @@ import { api } from '$lib/api';
import { db_events } from "$lib/db_events";
import { load_ae_obj_li__event_device } from './ae_events__event_device';
let ae_promises: key_val = {};
// Updated 2024-09-25
// Updated 2024-10-16
export async function load_ae_obj_id__event(
{
api_cfg,
event_id,
inc_device_li = false,
inc_file_li = false,
inc_location_li = false,
inc_presentation_li = false,
@@ -21,6 +24,7 @@ export async function load_ae_obj_id__event(
}: {
api_cfg: any,
event_id: string,
inc_device_li?: boolean,
inc_file_li?: boolean,
inc_location_li?: boolean,
inc_presentation_li?: boolean,
@@ -63,6 +67,30 @@ export async function load_ae_obj_id__event(
console.log('No results returned or failed.', error);
});
if (log_lvl) {
console.log('ae_promises.load__event_obj:', ae_promises.load__event_obj);
}
if (inc_device_li) {
// Load the devices for the
if (log_lvl) {
console.log(`Need to load the device list for the now`);
}
let load_event_device_obj_li = load_ae_obj_li__event_device({
api_cfg: api_cfg,
for_obj_type: 'event',
for_obj_id: event_id,
params: {qry__enabled: 'all', qry__limit: 15},
try_cache: try_cache,
log_lvl: log_lvl
});
if (log_lvl) {
console.log(`load_event_device_obj_li = `, load_event_device_obj_li);
}
ae_promises.load__event_obj.event_device_li = load_event_device_obj_li;
}
return ae_promises.load__event_obj;
}

View File

@@ -8,7 +8,7 @@ import { load_ae_obj_id__event_location } from './ae_events__event_location';
let ae_promises: key_val = {};
// Updated 2024-06-10
// Updated 2024-10-16
export async function load_ae_obj_id__event_device(
{
api_cfg,
@@ -84,14 +84,13 @@ export async function load_ae_obj_id__event_device(
}
// Updated 2024-09-24
// Updated 2024-10-16
export async function load_ae_obj_li__event_device(
{
api_cfg,
for_obj_type,
for_obj_id,
inc_file_li = false,
inc_session_li = false,
inc_location_id = false,
order_by_li = {'priority': 'DESC', 'sort': 'DESC', 'name': 'ASC', 'code': 'ASC', 'updated_on': 'DESC', 'created_on': 'DESC'},
params = {},
try_cache = true,
@@ -100,8 +99,7 @@ export async function load_ae_obj_li__event_device(
api_cfg: any,
for_obj_type: string,
for_obj_id: string,
inc_file_li?: boolean,
inc_session_li?: boolean,
inc_location_id?: boolean,
order_by_li?: key_val,
params?: key_val,
try_cache?: boolean,
@@ -119,13 +117,14 @@ export async function load_ae_obj_li__event_device(
// console.log('params_json:', params_json);
ae_promises.load__event_device_obj_li = await api.get_ae_obj_li_for_obj_id_crud({
ae_promises.load__event_device_obj_li = await api.get_ae_obj_li_for_obj_id_crud_v2({
api_cfg: api_cfg,
obj_type: 'event_device',
for_obj_type: for_obj_type,
for_obj_id: for_obj_id,
use_alt_table: true, // NOTE: This will use the table_name_alt value instead of the table_name value in the API config.
use_alt_base: false, // NOTE: This will use the base_name_alt value instead of the base_name value
use_alt_tbl: true,
use_alt_mdl: false,
use_alt_exp: false,
enabled: enabled,
hidden: hidden,
order_by_li: order_by_li,
@@ -156,62 +155,29 @@ export async function load_ae_obj_li__event_device(
console.log('ae_promises.load__event_device_obj_li:', ae_promises.load__event_device_obj_li);
}
if (inc_file_li) {
// Load the files for the devices
if (inc_location_id) {
// Load the location for the devices
if (log_lvl) {
console.log(`Need to load the file list for each device now`);
console.log(`Need to load the location list for each device now`);
}
for (let i = 0; i < ae_promises.load__event_device_obj_li.length; i++) {
let event_device_obj = ae_promises.load__event_device_obj_li[i];
let event_device_id = event_device_obj.event_device_id_random;
let load_event_file_obj_li = load_ae_obj_li__event_file({
let load_event_location_obj_li = load_ae_obj_id__event_location({
api_cfg: api_cfg,
for_obj_type: 'event_device',
for_obj_id: event_device_id,
params: {qry__enabled: enabled, qry__limit: limit},
event_location_id: event_device_obj.event_location_id,
try_cache: try_cache,
log_lvl: log_lvl
})
.then((event_file_obj_li) => {
.then((event_location_obj_li) => {
if (log_lvl) {
console.log(`event_file_obj_li = `, event_file_obj_li);
console.log(`event_location_obj_li = `, event_location_obj_li);
}
return event_file_obj_li;
return event_location_obj_li;
});
if (log_lvl) {
console.log(`load_event_file_obj_li = `, load_event_file_obj_li);
}
}
}
if (inc_session_li) {
// Load the sessions for the devices
if (log_lvl) {
console.log(`Need to load the session list for each device now`);
}
for (let i = 0; i < ae_promises.load__event_device_obj_li.length; i++) {
let event_device_obj = ae_promises.load__event_device_obj_li[i];
let event_device_id = event_device_obj.event_device_id_random;
let load_event_session_obj_li = load_ae_obj_li__event_session({
api_cfg: api_cfg,
for_obj_type: 'event_device',
for_obj_id: event_device_id,
params: {qry__enabled: enabled, qry__limit: limit},
try_cache: try_cache,
log_lvl: log_lvl
})
.then((event_session_obj_li) => {
if (log_lvl) {
console.log(`event_session_obj_li = `, event_session_obj_li);
}
return event_session_obj_li;
});
if (log_lvl) {
console.log(`load_event_session_obj_li = `, load_event_session_obj_li);
console.log(`load_event_location_obj_li = `, load_event_location_obj_li);
}
}
}
@@ -220,7 +186,7 @@ export async function load_ae_obj_li__event_device(
}
// Updated 2024-06-25
// Updated 2024-10-16
export async function create_ae_obj__event_device(
{
api_cfg,
@@ -275,7 +241,7 @@ export async function create_ae_obj__event_device(
}
// Updated 2024-09-25
// Updated 2024-10-16
export async function update_ae_obj__event_device(
{
api_cfg,
@@ -331,6 +297,7 @@ export async function update_ae_obj__event_device(
}
// Updated 2024-10-16
export async function search__event_device(
{
api_cfg,
@@ -452,7 +419,7 @@ export async function search__event_device(
// This function will loop through the event_device_obj_li and save each one to the DB.
// Updated 2024-06-25
// Updated 2024-10-16
export function db_save_ae_obj_li__event_device(
{
obj_type,
@@ -478,27 +445,42 @@ export function db_save_ae_obj_li__event_device(
const id_random = await db_events.devices.put({
id: obj.event_device_id_random,
event_device_id: obj.event_device_id_random,
event_device_id_random: obj.event_device_id_random,
external_id: obj.external_id,
code: obj.code,
type_code: obj.type_code,
// event_device_id_random: obj.event_device_id_random,
event_id: obj.event_id_random,
event_id_random: obj.event_id_random,
// event_id_random: obj.event_id_random,
event_location_id: obj.event_location_id_random,
// event_location_id_random: obj.event_location_id_random,
code: obj.code,
name: obj.name,
description: obj.description,
passcode: obj.passcode,
hide_event_launcher: obj.hide_event_launcher,
local_file_cache_path: obj.local_file_cache_path,
host_file_temp_path: obj.host_file_temp_path,
recording_path: obj.recording_path,
record_audio: obj.record_audio,
record_video: obj.record_video,
trigger_open_file_id: obj.trigger_open_file_id,
trigger_open_session_id: obj.trigger_open_session_id,
trigger_recording_start: obj.trigger_recording_start,
trigger_recording_stop: obj.trigger_recording_stop,
trigger_reset: obj.trigger_reset,
trigger_show_admin: obj.trigger_show_admin,
trigger_show_hidden: obj.trigger_show_hidden,
alert: obj.alert,
alert_msg: obj.alert_msg,
data_json: obj.data_json,
info_hostname: obj.info_hostname,
info_ip_list: obj.info_ip_list,
meta_json: obj.meta_json,
other_json: obj.other_json,
enable: obj.enable,
hide: obj.hide,
@@ -510,19 +492,9 @@ export function db_save_ae_obj_li__event_device(
updated_on: obj.updated_on,
// From SQL view
file_count: obj.file_count,
file_count_all: obj.file_count_all,
internal_use_count: obj.internal_use_count,
event_file_id_li_json: obj.event_file_id_li_json,
// poc_person_given_name: obj.poc_person_given_name,
// poc_person_family_name: obj.poc_person_family_name,
// poc_person_full_name: obj.poc_person_full_name,
// poc_person_primary_email: obj.poc_person_primary_email,
// poc_person_passcode: obj.poc_person_passcode,
// poc_kv_json: obj.poc_kv_json,
event_name: obj.event_name,
event_location_code: obj.event_location_code,
event_location_name: obj.event_location_name,
});
// console.log(`Put obj with ID: ${obj.event_device_id_random} or ${id_random}`);
} catch (error) {

View File

@@ -552,10 +552,12 @@ export async function qry__event_session(
})
.then(function (event_session_obj_li_get_result) {
if (event_session_obj_li_get_result) {
db_save_ae_obj_li__event_session({
obj_type: 'event_session',
obj_li: event_session_obj_li_get_result
});
if (try_cache) {
db_save_ae_obj_li__event_session({
obj_type: 'event_session',
obj_li: event_session_obj_li_get_result
});
}
return event_session_obj_li_get_result;
} else {
return [];

View File

@@ -21,7 +21,7 @@ export let iso_datetime_formatter = function iso_datetime_formatter(
// datetime_iso 'YYYY-MM-DD HH:mm:ss'
// datetime_iso_12 'YYYY-MM-DD hh:mm:ss A'
// datetime_iso_12_short 'YY-MM-DD hh:mm A'
// datetime_iso_tz 'YYYY-MM-DD HH:mm:ss'
// datetime_iso_tz 'YYYY-MM-DD HH:mm:ss Z'
// datetime_12_no_seconds 'YYYY-MM-DD hh:mm A'
@@ -37,6 +37,8 @@ export let iso_datetime_formatter = function iso_datetime_formatter(
// time_iso 'HH:mm:ss'
// time_iso_12 'hh:mm:ss A'
// time_iso_tz 'HH:mm:ss Z'
// time_iso_12_tz 'hh:mm:ss A Z'
// time_long 'hh:mm:ss A'
// time_medium 'h:m:s A'
@@ -63,6 +65,9 @@ export let iso_datetime_formatter = function iso_datetime_formatter(
case 'datetime_iso_12_short_month':
datetime_string = dayjs(raw_datetime).format('MM-DD hh:mm A');
break;
case 'datetime_iso_tz':
datetime_string = dayjs(raw_datetime).format('YYYY-MM-DD HH:mm:ss Z');
break;
case 'datetime_12_no_seconds':
datetime_string = dayjs(raw_datetime).format('YYYY-MM-DD hh:mm A');
break;
@@ -117,6 +122,9 @@ export let iso_datetime_formatter = function iso_datetime_formatter(
case 'time_iso':
datetime_string = dayjs(raw_datetime).format('HH:mm:ss');
break;
case 'time_iso_12_tz':
datetime_string = dayjs(raw_datetime).format('hh:mm:ss A Z');
break;
case 'time_long':
datetime_string = dayjs(raw_datetime).format('HH:mm:ss A');
break;

View File

@@ -35,13 +35,13 @@ export interface Event {
cfg_json?: null|key_val;
enable: null|boolean;
hide: null|boolean;
priority: null|boolean
sort: null|number;
group: null|string;
notes: null|string;
hide?: null|boolean;
priority?: null|boolean
sort?: null|number;
group?: null|string;
notes?: null|string;
created_on: Date;
updated_on: null|Date;
updated_on?: null|Date;
// IDAA Recovery Meetings
contact_li_json?: null|string[]; // full_name, email, phone_mobile, phone_home, phone_office, other_text
@@ -122,46 +122,71 @@ export interface Badge {
external_person_id: string;
enable: null|boolean;
hide: null|boolean;
priority: null|boolean
sort: null|number;
group: null|string;
notes: null|string;
hide?: null|boolean;
priority?: null|boolean
sort?: null|number;
group?: null|string;
notes?: null|string;
created_on: Date;
updated_on: null|Date;
updated_on?: null|Date;
}
// Updated 2024-10-16
export interface Device {
// id?: number;
id_random: string;
event_device_id_random: string;
id: number;
// id_random: string;
event_device_id: string;
// event_device_id_random: string;
event_id_random: string;
event_location_id_random: string;
event_id: string;
// event_id_random: string;
event_location_id?: string;
// event_location_id_random?: string;
code: string;
code?: string;
name: string;
description?: null|string;
for_type: null|string;
for_id: null|string;
for_id_random: null|string;
passcode?: null|string;
alert: null|boolean;
local_file_cache_path?: null|string;
host_file_temp_path?: null|string;
recording_path?: null|string;
record_audio?: null|boolean;
record_video?: null|boolean;
trigger_open_file_id?: null|string;
trigger_open_session_id?: null|string;
trigger_recording_start?: null|boolean;
trigger_recording_stop?: null|boolean;
trigger_reset?: null|boolean;
trigger_show_admin?: null|boolean;
trigger_show_hidden?: null|boolean;
alert?: null|boolean;
alert_msg?: null|string;
info_hostname?: null|string;
info_ip_list?: null|string; // Semi-colon separated list of IP addresses
meta_json?: null|string;
other_json?: null|string;
enable: null|boolean;
hide: null|boolean;
priority: null|boolean
sort: null|number;
group: null|string;
notes: null|string;
hide?: null|boolean;
priority?: null|boolean
sort?: null|number;
group?: null|string;
notes?: null|string;
created_on: Date;
updated_on: null|Date;
updated_on?: null|Date;
// Additional fields for convenience (database views)
event_location_code: string;
event_location_name: string;
event_name?: string;
event_location_code?: string;
event_location_name?: string;
}

View File

@@ -5,8 +5,9 @@ import { error } from '@sveltejs/kit';
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 log_lvl = 1;
let data = await parent();
// console.log(`ae events_pres_mgmt event [event_id] +page.ts data:`, data);
@@ -41,7 +42,11 @@ export async function load({ params, parent }) { // route
if (browser) {
let load_event_obj = events_func.load_ae_obj_id__event({
api_cfg: ae_acct.api, event_id: event_id, try_cache: true
api_cfg: ae_acct.api,
event_id: event_id,
inc_device_li: true,
try_cache: true,
log_lvl: log_lvl
});
console.log(`load_event_obj = `, load_event_obj);
ae_acct.slct.event_obj = load_event_obj;
@@ -52,7 +57,7 @@ export async function load({ params, parent }) { // route
for_obj_id: event_id,
params: {qry__enabled: 'enabled', qry__hidden: 'all', qry__limit: 200},
try_cache: true,
log_lvl: 1
log_lvl: log_lvl
});
console.log(`load_event_session_obj_li = `, load_event_session_obj_li);
ae_acct.slct.event_session_obj_li = load_event_session_obj_li;
@@ -63,7 +68,7 @@ export async function load({ params, parent }) { // route
for_obj_id: event_id,
params: {qry__enabled: 'enabled', qry__hidden: 'all', qry__limit: 200},
try_cache: true,
log_lvl: 1
log_lvl: log_lvl
});
console.log(`load_event_location_obj_li = `, load_event_location_obj_li);
ae_acct.slct.event_location_obj_li = load_event_location_obj_li;

View File

@@ -1,5 +1,6 @@
<script lang="ts">
// Imports
import { ae_util } from '$lib/ae_utils/ae_utils';
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';
@@ -16,7 +17,7 @@ export let link_to_id: string;
export let lq__event_device_obj_li: any;
if (log_lvl) {
console.log(`link_to_type: ${link_to_type}; link_to_id: ${link_to_id}`);
console.log(`Event Device List: link_to_type: ${link_to_type}; link_to_id: ${link_to_id}`);
}
// Variables
@@ -28,40 +29,6 @@ if (log_lvl) {
</script>
<div
class="float-right flex flex-row items-center"
>
{#if $ae_loc.trusted_access && $ae_loc.edit_mode}
<button
type="button"
on:click={() => {
console.log('Add Device');
if (!confirm('Add a new device to the event? You will be able to edit the details after the device is created.')) {
return;
}
let device_data = {
event_id_random: $events_slct.event_id,
name: 'TEMP Device Name',
enable: true,
}
events_func.create_ae_obj__event_device({
api_cfg: $ae_api,
event_id: $events_slct.event_id,
data_kv: device_data,
log_lvl: log_lvl,
})
}}
class="btn btn-sm variant-soft-warning hover:variant-filled-warning"
>
<span class="fas fa-plus mx-1"></span>
Add Device
</button>
{/if}
</div>
<section class="ae_comp event_device_obj_li {container_class_li}">
@@ -94,40 +61,6 @@ if (log_lvl) {
class="space-y-2 border border-gray-200 p-2 rounded-md"
>
<div class="float-right space-2 flex flex-row items-center">
{#if $ae_loc.trusted_access && $ae_loc.edit_mode}
<button
type="button"
on:click={() => {
console.log('Add Session');
if (!confirm('Add a new session to the device? You will be able to edit their details after the session record is created.')) {
return;
}
let session_data = {
event_id_random: $events_slct.event_id,
event_device_id_random: event_device_obj?.event_device_id_random,
name: 'TEMP Session Name',
enable: true,
}
events_func.create_ae_obj__event_session({
api_cfg: $ae_api,
event_id: $events_slct.event_id,
data_kv: session_data,
log_lvl: log_lvl,
})
}}
class="btn btn-sm variant-soft-warning hover:variant-filled-warning"
>
<span class="fas fa-plus mx-1"></span>
Add Session
</button>
{/if}
</div>
<h4 class="h5 rounded-md p-2 bg-gray-200">
<Element_ae_crud
api_cfg={$ae_api}
@@ -171,6 +104,52 @@ if (log_lvl) {
{/if}
</h4>
<div>
<div
class="text-red-500 bg-red-200 p-1 rounded-md border border-red-200 text-center"
class:hidden={!event_device_obj?.alert && !event_device_obj?.alert_msg}
>
<span class="fas fa-exclamation-triangle mx-1" />
{event_device_obj?.alert ? 'Alert' : 'No Alert'}
<span class="fas fa-exclamation-triangle mx-1" />
<br>
{event_device_obj?.alert_msg ?? 'No Alert Message'}
</div>
<div class="flex flex-col gap-1">
<span>
<strong class="text-sm">hostname:</strong>
{event_device_obj?.info_hostname}
</span>
<span>
<strong class="text-sm">IPs:</strong>
{event_device_obj?.info_ip_list}
</span>
</div>
<div
class="text-sm text-gray-500 bg-gray-100"
>
Last updated:
<span>
<span>
{ae_util.iso_datetime_formatter(event_device_obj?.updated_on, 'dddd')},
</span>
<span>
{ae_util.iso_datetime_formatter(event_device_obj?.updated_on, 'date_long_month_day')}
</span>
</span>
@
<span
class="px-1"
class:bg-yellow-200={ae_util.is_datetime_recent({datetime: event_device_obj?.updated_on, minutes: 30})}
class:bg-green-200={ae_util.is_datetime_recent({datetime: event_device_obj?.updated_on, minutes: 240})}
class:bg-blue-200={ae_util.is_datetime_recent({datetime: event_device_obj?.updated_on, minutes: 2880})}
>
{ae_util.iso_datetime_formatter(event_device_obj?.updated_on, 'time_iso_12_tz')}
</span>
</div>
</div>
<div
class:hidden={!$events_loc.pres_mgmt.show_content__device_description}
>

View File

@@ -15,7 +15,7 @@ export let link_to_type: string;
export let link_to_id: string;
if (log_lvl) {
console.log(`link_to_type: ${link_to_type}; link_to_id: ${link_to_id}`);
console.log(`Event Device List Wrapper: link_to_type: ${link_to_type}; link_to_id: ${link_to_id}`);
}
// Variables
@@ -23,7 +23,7 @@ if (log_lvl) {
// let ae_tmp: key_val = {};
// let ae_triggers: key_val = {};
let dq__where_type_id_val: string = `${link_to_type}_id_random`;
let dq__where_type_id_val: string = `${link_to_type}_id`;
let dq__where_eq_id_val: string = link_to_id;
// Functions and Logic

View File

@@ -97,40 +97,6 @@ if (log_lvl) {
class="space-y-2 border border-gray-200 p-2 rounded-md"
>
<div class="float-right space-2 flex flex-row items-center">
{#if $ae_loc.trusted_access && $ae_loc.edit_mode}
<button
type="button"
on:click={() => {
console.log('Add Session');
if (!confirm('Add a new session to the location? You will be able to edit their details after the session record is created.')) {
return;
}
let session_data = {
event_id_random: $events_slct.event_id,
event_location_id_random: event_location_obj?.event_location_id_random,
name: 'TEMP Session Name',
enable: true,
}
events_func.create_ae_obj__event_session({
api_cfg: $ae_api,
event_id: $events_slct.event_id,
data_kv: session_data,
log_lvl: log_lvl,
})
}}
class="btn btn-sm variant-soft-warning hover:variant-filled-warning"
>
<span class="fas fa-plus mx-1"></span>
Add Session
</button>
{/if}
</div>
<h4 class="h5 rounded-md p-2 bg-gray-200">
<Element_ae_crud
api_cfg={$ae_api}

View File

@@ -181,13 +181,13 @@ let lq_kv__event_file_obj_li = liveQuery(
>
<div>
<span>
{ae_util.iso_datetime_formatter(event_file_obj?.created_on, 'dddd')}
</span>
<span>
{ae_util.iso_datetime_formatter(event_file_obj?.created_on, 'date_long_month_day')}
</span>
</div>
<span>
{ae_util.iso_datetime_formatter(event_file_obj?.created_on, 'dddd')}
</span>
<span>
{ae_util.iso_datetime_formatter(event_file_obj?.created_on, 'date_long_month_day')}
</span>
</div>
<span
class:bg-yellow-200={ae_util.is_datetime_recent({datetime: event_file_obj?.created_on, minutes: 30})}
class:bg-green-200={ae_util.is_datetime_recent({datetime: event_file_obj?.created_on, minutes: 240})}