diff --git a/src/lib/ae_core__person.ts b/src/lib/ae_core__person.ts index 686dbc78..0064e528 100644 --- a/src/lib/ae_core__person.ts +++ b/src/lib/ae_core__person.ts @@ -6,6 +6,112 @@ import { db_core } from "$lib/db_core"; let ae_promises: key_val = {}; +// Updated 2024-07-17 +export async function handle_load_ae_obj_id__person( + { + api_cfg, + person_id, + try_cache=false, + log_lvl=0 + }: { + api_cfg: any, + person_id: string, + try_cache?: boolean, + log_lvl?: number + } + ) { + console.log(`*** handle_load_ae_obj_id__person() *** person_id=${person_id}`); + + let params = {}; + + ae_promises.load__person_obj = await api.get_ae_obj_id_crud({ + api_cfg: api_cfg, + obj_type: 'person', + obj_id: person_id, // NOTE: This is the FQDN, not normally the ID. + use_alt_table: false, // 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 + params: params, + log_lvl: log_lvl + }) + .then(function (person_obj_get_result) { + if (person_obj_get_result) { + // This is expecting a list + handle_db_save_ae_obj_li__person({obj_type: 'person', obj_li: [person_obj_get_result]}); + return person_obj_get_result; + } else { + console.log('No results returned.'); + return null; + } + }) + .catch(function (error) { + console.log('No results returned or failed.', error); + }); + + return ae_promises.load__person_obj; +} + + +// Updated 2024-07-17 +export async function handle_load_ae_obj_li__person( + { + api_cfg, + account_id, + params={}, + try_cache=true, + log_lvl=0 + }: { + api_cfg: any, + account_id: string, + params?: key_val, + try_cache?: boolean, + log_lvl?: number + } + ) { + console.log(`*** handle_load_ae_obj_li__person() *** account_id=${account_id}`); + + let enabled: string = (params.qry__enabled ?? 'enabled'); // all, disabled, enabled + let hidden: string = (params.qry__hidden ?? 'not_hidden'); // all, hidden, not_hidden + let limit: number = (params.qry__limit ?? 99); // 99 + let offset: number = (params.qry__offset ?? 0); // 0 + + + let params_json: key_val = {}; + + // console.log('params_json:', params_json); + + ae_promises.load__person_obj_li = await api.get_ae_obj_li_for_obj_id_crud({ + api_cfg: api_cfg, + obj_type: 'person', + for_obj_type: 'account', + for_obj_id: account_id, + use_alt_table: false, // 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 + enabled: enabled, + hidden: hidden, + order_by_li: {'given_name': 'ASC', 'family_name': 'ASC', 'updated_on': 'DESC', 'created_on': 'DESC'}, + limit: limit, + offset: offset, + params_json: params_json, + params: params, + log_lvl: log_lvl + }) + .then(function (person_obj_li_get_result) { + if (person_obj_li_get_result) { + handle_db_save_ae_obj_li__person({obj_type: 'person', obj_li: person_obj_li_get_result}); + return person_obj_li_get_result; + } else { + return []; + } + }) + .catch(function (error) { + console.log('No results returned or failed.', error); + }); + + console.log('ae_promises.load__person_obj_li:', ae_promises.load__person_obj_li); + return ae_promises.load__person_obj_li; +} + + // Updated 2024-06-24 export async function handle_create_ae_obj__person( { @@ -59,6 +165,57 @@ export async function handle_create_ae_obj__person( return ae_promises.create__person; } + +// Updated 2024-07-17 +export async function handle_update_ae_obj__person( + { + api_cfg, + person_id, + data_kv, + params={}, + log_lvl=0 + }: { + api_cfg: any, + person_id: string, + data_kv: key_val, + params?: key_val, + log_lvl?: number + } + ) { + console.log(`*** handle_update_ae_obj__person() *** person_id=${person_id}`); + + ae_promises.update__person_obj = await api.update_ae_obj_id_crud({ + api_cfg: api_cfg, + obj_type: 'person', + obj_id: person_id, // NOTE: This is the FQDN, not normally the ID. + fields: data_kv, + key: api_cfg.api_crud_super_key, + params: params, + return_obj: true, + log_lvl: log_lvl + }) + .then(function (person_obj_update_result) { + if (person_obj_update_result) { + handle_db_save_ae_obj_li__person({obj_type: 'person', obj_li: [person_obj_update_result]}); + return person_obj_update_result; + } else { + return null; + } + }) + .catch(function (error) { + console.log('No results returned or failed.', error); + }) + .finally(function () { + }); + + if (log_lvl) { + console.log('ae_promises.update__person_obj:', ae_promises.update__person_obj); + } + return ae_promises.update__person_obj; +} + + + // Updated 2024-06-10 export function handle_db_save_ae_obj_li__person( { @@ -83,9 +240,11 @@ export function handle_db_save_ae_obj_li__person( person_id_random: obj.person_id_random, external_id: obj.external_id, + external_sys_id: obj.external_sys_id, code: obj.code, account_id: obj.account_id_random, + account_id_random: obj.account_id_random, person_profile_id: obj.person_profile_id_random, person_profile_id_random: obj.person_profile_id_random, // The new table person_profile will be used soon... @@ -129,6 +288,13 @@ export function handle_db_save_ae_obj_li__person( // From SQL view username: obj.username, + user_name: obj.user_name, + user_email: obj.user_email, + user_allow_auth_key: obj.user_allow_auth_key, // For sign in without password + user_super: obj.user_super, + user_manager: obj.user_manager, + user_administrator: obj.user_administrator, + user_public: obj.user_public, }); // console.log(`Put obj with ID: ${obj.person_id_random} or ${id_random}`); } catch (error) { diff --git a/src/lib/ae_core_functions.ts b/src/lib/ae_core_functions.ts index f0d5bac5..83875d94 100644 --- a/src/lib/ae_core_functions.ts +++ b/src/lib/ae_core_functions.ts @@ -4,8 +4,8 @@ import { api } from '$lib/api'; import { - // handle_load_ae_obj_id__person, - // handle_load_ae_obj_li__person, + handle_load_ae_obj_id__person, + handle_load_ae_obj_li__person, handle_create_ae_obj__person, // handle_update_ae_obj__person, // handle_db_save_ae_obj_li__person @@ -234,70 +234,6 @@ async function handle_load_ae_obj_code__data_store( } - - - -// Updated 2024-05-24 -async function handle_load_ae_obj_li__person( - { - api_cfg, - account_id, - params={}, - try_cache=true, - log_lvl=0 - }: { - api_cfg: any, - account_id: string, - params?: key_val, - try_cache?: boolean, - log_lvl?: number - } - ) { - console.log(`*** handle_load_ae_obj_li__person() *** account_id=${account_id}`); - - let enabled: string = (params.qry__enabled ?? 'enabled'); // all, disabled, enabled - let hidden: string = (params.qry__hidden ?? 'not_hidden'); // all, hidden, not_hidden - let limit: number = (params.qry__limit ?? 99); // 99 - let offset: number = (params.qry__offset ?? 0); // 0 - - - let params_json: key_val = {}; - - // console.log('params_json:', params_json); - - ae_promises.load__person_obj_li = await api.get_ae_obj_li_for_obj_id_crud({ - api_cfg: api_cfg, - obj_type: 'person', - for_obj_type: 'account', - for_obj_id: account_id, - use_alt_table: false, // 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 - enabled: enabled, - hidden: hidden, - order_by_li: {'given_name': 'ASC', 'family_name': 'ASC', 'updated_on': 'DESC', 'created_on': 'DESC'}, - limit: limit, - offset: offset, - params_json: params_json, - params: params, - log_lvl: log_lvl - }) - .then(function (person_obj_li_get_result) { - if (person_obj_li_get_result) { - // handle_db_save_ae_obj_li__person({obj_type: 'person', obj_li: person_obj_li_get_result}); - return person_obj_li_get_result; - } else { - return []; - } - }) - .catch(function (error) { - console.log('No results returned or failed.', error); - }); - - console.log('ae_promises.load__person_obj_li:', ae_promises.load__person_obj_li); - return ae_promises.load__person_obj_li; -} - - // Updated 2024-03-27 async function handle_update_ae_obj_id_crud( { @@ -432,6 +368,7 @@ async function handle_download_export__obj_type( let export_obj = { handle_load_ae_obj_id__site_domain: handle_load_ae_obj_id__site_domain, handle_load_ae_obj_code__data_store: handle_load_ae_obj_code__data_store, + handle_load_ae_obj_id__person: handle_load_ae_obj_id__person, handle_load_ae_obj_li__person: handle_load_ae_obj_li__person, handle_create_ae_obj__person: handle_create_ae_obj__person, handle_update_ae_obj_id_crud: handle_update_ae_obj_id_crud, diff --git a/src/lib/ae_stores.ts b/src/lib/ae_stores.ts index 8a552552..4d2540bb 100644 --- a/src/lib/ae_stores.ts +++ b/src/lib/ae_stores.ts @@ -161,6 +161,10 @@ export let ae_app_local_data_struct: key_val = { 'testing': {}, }, + + 'person': { + show_content__person_page_help: false, + }, } // console.log(`AE Stores - App Local Storage Data:`, ae_app_local_data_struct); @@ -211,6 +215,11 @@ export let ae_app_session_data_struct: key_val = { 'testing': {}, }, + 'person': { + show_report__person_li: false, + }, + + 'download': {}, // For API download and upload progress status per file. 'api_download_kv': {}, diff --git a/src/lib/ae_string_snippets.ts b/src/lib/ae_string_snippets.ts index 04b23e50..0abc9c63 100644 --- a/src/lib/ae_string_snippets.ts +++ b/src/lib/ae_string_snippets.ts @@ -9,6 +9,12 @@ string_snippets['html__not_set'] = ` `; +string_snippets['classes__core_menu'] = 'flex flex-col items-center space-y-1 border border-blue-200 rounded-md py-1 px-2 hover:bg-blue-100'; + +string_snippets['classes__core_menu__button'] = 'btn btn-sm mx-1 variant-soft-tertiary text-info-300 hover:text-info-800'; +string_snippets['classes__core_menu__button_highlight'] = 'btn btn-sm mx-1 variant-filled-tertiary text-info-300 hover:text-info-800'; +string_snippets['classes__core_menu__button_warning'] = 'btn btn-sm mx-1 variant-soft-warning text-info-300 hover:text-info-800'; + string_snippets['classes__events_pres_mgmt_menu'] = 'flex flex-col items-center space-y-1 border border-blue-200 rounded-md py-1 px-2 hover:bg-blue-100'; string_snippets['classes__events_pres_mgmt_menu__button'] = 'btn btn-sm mx-1 variant-soft-tertiary text-info-300 hover:text-info-800'; diff --git a/src/lib/db_core.ts b/src/lib/db_core.ts index 5bfa5884..73167533 100644 --- a/src/lib/db_core.ts +++ b/src/lib/db_core.ts @@ -3,18 +3,19 @@ import Dexie, { type Table } from 'dexie'; // li = list // kv = key value list -// Updated 2024-06-10 +// Updated 2024-07-17 export interface Person { id: string; // id_random: string; person_id: string; - person_id_random?: string; + person_id_random: string; external_id?: string; + external_sys_id?: string; // Generated by an external system code?: string; - account_id: string; - account_id_random?: string; + account_id?: string; // Technically this is not required for global users. + account_id_random?: string; // Technically this is not required for global users. person_profile_id?: null|string; person_profile_id_random?: null|string; // The new table person_profile will be used soon... @@ -57,7 +58,14 @@ export interface Person { updated_on?: null|Date; // Additional fields for convenience (database views) - username?: null|string; + username?: string; + user_name?: null|string; + user_email?: null|string; + user_allow_auth_key?: null|boolean; // For sign in without password + user_super?: boolean; + user_manager?: boolean; + user_administrator?: boolean; + user_public?: boolean; } diff --git a/src/routes/core/+layout.svelte b/src/routes/core/+layout.svelte new file mode 100644 index 00000000..a1fc0283 --- /dev/null +++ b/src/routes/core/+layout.svelte @@ -0,0 +1,117 @@ + + + + + Core - {$events_loc.title ?? 'Æ loading...'} + + + +{#if $ae_loc.administrator_access && 1==3} + +{/if} + + + + + diff --git a/src/routes/core/+layout.ts b/src/routes/core/+layout.ts new file mode 100644 index 00000000..e8f697d2 --- /dev/null +++ b/src/routes/core/+layout.ts @@ -0,0 +1,63 @@ +/** @type {import('./$types').LayoutLoad} */ +console.log(`ae_core root +layout.ts start`); + +// import { core_func } from '$lib/ae_core_functions'; + + +export async function load({ parent }) { + let log_lvl = 0; + + let data = await parent(); + // console.log(`ae_events_pres_mgmt +layout.ts data:`, data); + + // let account_id = data.account_id; + // if (!account_id) { + // console.log(`events_pres_mgmt +layout.ts: The account_id was not found in the data!!!`); + // return false; + // } + + // let ae_acct = data[account_id]; + // if (log_lvl) { + // console.log(`ae_acct = `, ae_acct); + // } + + // // // Should we limit these to event.conference = true? + // // let load_event_obj_li = events_func.handle_load_ae_obj_li__event({ + // // api_cfg: ae_acct.api, + // // account_id: account_id, + // // params: {enabled: 'enabled', qry__limit: 25}, + // // try_cache: false, + // // log_lvl: 1 + // // }); + // // ae_acct.slct.event_obj_li = load_event_obj_li; + + + // let event_id = ae_acct.slct.event_id; + // if (!event_id) { + // console.log(`ERROR: events_pres_mgmt +layout.ts: The event_id was not found in the data!!!`); + // return false; + // } + + // let load_event_obj = events_func.handle_load_ae_obj_id__event({ + // api_cfg: ae_acct.api, + // event_id: event_id, + // try_cache: false + // }); + + // ae_acct.slct.event_obj = load_event_obj; + + // let submenu = { + // main: {name: 'Main', href: '/events_pres_mgmt', access: false}, + // // manage: {name: 'Manage', href: '/events_pres_mgmt/manage', access: 'administrator', disable: true, hide: true}, + // locations: {name: 'Locations', href: '/events_pres_mgmt/locations', access: false, disable: false, hide: false}, + // }; + // data.submenu = submenu + + // // WARNING: Precaution against shared data between sites and sessions. + // data[account_id] = ae_acct; + + return data; +} + +// export const prerender = false; +// export const prerender = true; diff --git a/src/routes/core/+page.svelte b/src/routes/core/+page.svelte new file mode 100644 index 00000000..39db535d --- /dev/null +++ b/src/routes/core/+page.svelte @@ -0,0 +1,187 @@ + + + +
+ +

Æ Core for {$ae_loc.account_name ?? 'Æ loading...'}

+ + + + + + + + +{#if $ae_sess.person.show_report__person_li && person_id_random_li?.length > 0} +
+Count: {person_id_random_li?.length} + + +
+{/if} + + +
+ + + diff --git a/src/routes/core/+page.ts b/src/routes/core/+page.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/routes/core/ae_comp__person_obj_tbl.svelte b/src/routes/core/ae_comp__person_obj_tbl.svelte new file mode 100644 index 00000000..901461de --- /dev/null +++ b/src/routes/core/ae_comp__person_obj_tbl.svelte @@ -0,0 +1,125 @@ + + + +
+ + +{#if person_id_random_li && $lq_kv__person_obj_li && $lq_kv__person_obj_li?.length > 0} +
+ + + + + + + {#if show_user_fields} + + + {/if} + + + + + + {#each $lq_kv__person_obj_li as person_obj} + + + + + + {#if show_user_fields} + + + {/if} + + + + {/each} + +
Name ({$lq_kv__person_obj_li?.length}x)EmailAffiliationsUsernameAccessCreated/Updated
+ + + {person_obj?.full_name} + + + + + {person_obj?.primary_email} + + + + {person_obj?.affiliations} + + {#if person_obj?.user_id_random} + + + {person_obj?.username ?? '-- not set --'} + + {:else} + {@html ae_snip.html__not_set} + {/if} + + {person_obj?.user_super ? 'Super' : ''} + {person_obj?.user_manager ? 'Manager' : ''} + {person_obj?.user_administrator ? 'Administrator' : ''} + + {ae_util.iso_datetime_formatter(person_obj?.created_on, 'datetime_us_no_seconds')} +
+ {ae_util.iso_datetime_formatter(person_obj?.updated_on, 'datetime_us_no_seconds')} +
+
+{/if} + +
+ + + diff --git a/src/routes/core/person/[slug]/+page.svelte b/src/routes/core/person/[slug]/+page.svelte new file mode 100644 index 00000000..20707560 --- /dev/null +++ b/src/routes/core/person/[slug]/+page.svelte @@ -0,0 +1,194 @@ + + + + + Person: {ae_util.shorten_string({ string: $lq__person_obj?.full_name, max_length: 20, begin_length: 10, end_length: 4 })} + ({$lq__person_obj?.person_id ?? 'loading...'}) - Core - {$ae_loc?.title} + + + + +
+ +
+ +
+ + + Back to Core + + + +
+ + + +
+ +
+
+ +{#if !$lq__person_obj} + + Loading... +{:else} + +{/if} + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/src/routes/core/person/[slug]/+page.ts b/src/routes/core/person/[slug]/+page.ts new file mode 100644 index 00000000..44ee997e --- /dev/null +++ b/src/routes/core/person/[slug]/+page.ts @@ -0,0 +1,53 @@ +/** @type {import('./$types').PageLoad} */ +console.log(`ae_p_person [slug] +page.ts: start`); + +import { core_func } from '$lib/ae_core_functions'; + +export async function load({ parent }) { // route + let log_lvl = 0; + // console.log(`ae_events_pres_mgmt_event +page.ts data.params:`, params); + // console.log(`ae_events_pres_mgmt_event +page.ts data.route:`, route); + // console.log(`ae_events_pres_mgmt_event +page.ts data.url:`, url); + + let data = await parent(); + // console.log(`ae_events_pres_mgmt_event +page.ts data:`, data); + data.log_lvl = log_lvl; + let account_id = data.account_id; + let ae_acct = data[account_id]; + console.log(`ae_acct = `, ae_acct); + + let person_id = data.params.slug; + if (!person_id) { + console.log(`ae_p_person [slug] +page.ts: The person_id was not found in the data.params.slug!!!`); + return false; + } + + ae_acct.slct.person_id = person_id; + + let load_person_obj = core_func.handle_load_ae_obj_id__person({api_cfg: ae_acct.api, person_id: person_id, try_cache: false}); + + ae_acct.slct.person_obj = await load_person_obj; + + // let load_event_file_obj_li = await core_func.handle_load_ae_obj_li__event_file({ + // api_cfg: ae_acct.api, + // for_obj_type: 'person', + // for_obj_id: person_id, + // params: {enabled: 'all', qry__limit: 50}, + // try_cache: false + // }) + // .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; +} diff --git a/src/routes/core/person_view.svelte b/src/routes/core/person_view.svelte new file mode 100644 index 00000000..64203b3e --- /dev/null +++ b/src/routes/core/person_view.svelte @@ -0,0 +1,336 @@ + + + +{#if $lq__person_obj} +

+ Presenter Details for:
+ + {$lq__person_obj.full_name} + +

+ + + + +{/if} diff --git a/src/routes/events_pres_mgmt/presenter_view.svelte b/src/routes/events_pres_mgmt/presenter_view.svelte index 5ee80ce6..16c42de4 100644 --- a/src/routes/events_pres_mgmt/presenter_view.svelte +++ b/src/routes/events_pres_mgmt/presenter_view.svelte @@ -82,7 +82,7 @@ $slct.person_obj_kv = {}; // This is intended for the POC lookup list when gener // }; onMount(() => { - console.log('Events Session [slug]: presenter_view.svelte'); + console.log('Events Pres Mgmt: presenter_view.svelte'); console.log(`event_presenter_id:`, event_presenter_id); $slct_trigger = 'load__event_file_obj_li'; @@ -344,7 +344,7 @@ async function handle_delete__event_file({event_file_id}) { {$lq__event_presenter_obj.event_session_name} @@ -388,6 +388,38 @@ async function handle_delete__event_file({event_file_id}) {