diff --git a/src/app.postcss b/src/app.postcss index 38a120b1..0abf2c5d 100644 --- a/src/app.postcss +++ b/src/app.postcss @@ -43,6 +43,10 @@ body { opacity: .5; } +.ae_d_none { + display: none; +} + /* Allow content to scroll horizontal if too wide */ .ae_h_scrollfix { max-width: 100%; @@ -61,4 +65,14 @@ body { #appShell #shell-header.iframe { display: none; -} \ No newline at end of file +} + +/* body[data-theme='wintry'] { + background: none; + background-image: none; +} */ + +body[data-theme]:has(#page.iframe) { + background: none; + background-image: none; +} diff --git a/src/lib/ae_stores.ts b/src/lib/ae_stores.ts index 7b088b90..844dd36a 100644 --- a/src/lib/ae_stores.ts +++ b/src/lib/ae_stores.ts @@ -1,10 +1,10 @@ import { localStorageStore } from '@skeletonlabs/skeleton' -import { readable, writable } from 'svelte/store'; +import { get, readable, writable } from 'svelte/store'; import type { get, Writable } from 'svelte/store'; import { PUBLIC_TESTING, PUBLIC_AE_API_PROTOCOL, PUBLIC_AE_API_SERVER, PUBLIC_AE_API_BAK_SERVER, PUBLIC_AE_API_PORT, PUBLIC_AE_API_PATH, PUBLIC_AE_API_SECRET_KEY, PUBLIC_AE_API_CRUD_SUPER_KEY, PUBLIC_AE_NO_ACCOUNT_ID, PUBLIC_AE_NO_ACCOUNT_ID_TOKEN, PUBLIC_AE_ACCOUNT_ID, PUBLIC_AE_EVENT_ID, PUBLIC_AE_SPONSORSHIP_CFG_ID } from '$env/static/public'; -console.log(`Aether Config - TESTING:`, PUBLIC_TESTING); +console.log(`AE Stores - PUBLIC_TESTING:`, PUBLIC_TESTING); const api_base_url = `${PUBLIC_AE_API_PROTOCOL}://${PUBLIC_AE_API_SERVER}:${PUBLIC_AE_API_PORT}${PUBLIC_AE_API_PATH}`; const api_base_url_bak = `${PUBLIC_AE_API_PROTOCOL}://${PUBLIC_AE_API_BAK_SERVER}:${PUBLIC_AE_API_PORT}${PUBLIC_AE_API_PATH}`; @@ -19,28 +19,24 @@ const ae_no_account_id_token = PUBLIC_AE_NO_ACCOUNT_ID_TOKEN; const ae_event_id = PUBLIC_AE_EVENT_ID; const ae_sponsorship_cfg_id = PUBLIC_AE_SPONSORSHIP_CFG_ID; -// import { api } from '$lib/api'; -// console.log(`Aether Config - API:`, api); - // import { getStores, navigating, page, updated } from '$app/stores'; // import { assets, base, resolveRoute } from '$app/paths'; // console.log(page.path); // Everything after the domian name - -// const hostname = base; - // console.log(import.meta.env.MODE); // console.log(import.meta.env.BASE_URL); -type key_val = { + +// Export the key_val type for use in other files. +export type key_val = { [key: string]: any; // variable key // name: string; }; - +// export type key_val = key_val; // *** BEGIN *** Longer-term app data. This should be stored to local storage. export let ae_app_local_data_struct: key_val = { - 'ver': '2024-02-22_17', + 'ver': '2024-02-27_13', 'name': 'Aether App Template', 'theme': 'light', @@ -60,10 +56,25 @@ export let ae_app_local_data_struct: key_val = { 'ds': {}, 'hub': { - 'ds': {}, + 'show_xyz': 'abc', }, - 'mod': { // module - 'events': {}, + 'mod': { + 'archives': {}, + + 'events': { + // Badge Printing + + // Lead Retrievals + + // Presentation Management + + // other + }, + + 'journals': {}, + + 'posts': {}, + 'sponsorships': { 'cfg_id': ae_sponsorship_cfg_id, @@ -75,16 +86,18 @@ export let ae_app_local_data_struct: key_val = { show_view__sponsorship_obj: false, disable_submit__sponsorship_obj: false, }, + 'testing': {}, }, } -console.log(`Aether Config - App Local Storage Data:`, ae_app_local_data_struct); +console.log(`AE Stores - App Local Storage Data:`, ae_app_local_data_struct); // This works, but does not uses local storage: // export let ae_loc = writable(ae_app_local_data_struct); // This works and uses local storage: export let ae_loc: Writable = localStorageStore('ae_loc', ae_app_local_data_struct); +console.log(`AE Stores - App Local Storage Data:`, get(ae_loc)); // This does not work yet...? Don't use. @@ -94,13 +107,32 @@ export let ae_loc: Writable = localStorageStore('ae_loc', ae_app_local_ // *** BEGIN *** Temporary app data. This should be stored to session storage. export let ae_app_session_data_struct: key_val = { - 'ver': '2024-02-22_17', + 'ver': '2024-02-27_13', // 'name': 'Aether App Template', // 'theme': 'light', // 'account_id': ae_account_id, - // 'obj': {}, -} -console.log(`Aether Config - App Session Storage Data:`, ae_app_session_data_struct); + 'ds': {}, + 'hub': { + 'show_xyz': null, + }, + 'mod': { + 'archives': {}, + 'events': { + // Badge Printing + + // Lead Retrievals + + // Presentation Management + + // other + }, + 'journals': {}, + 'posts': {}, + 'sponsorships': {}, + 'testing': {}, + }, +}; +console.log(`AE Stores - App Session Storage Data:`, ae_app_session_data_struct); export let ae_sess = writable(ae_app_session_data_struct); @@ -114,7 +146,7 @@ export let ae_api_data_struct: key_val = { 'api_crud_super_key': api_crud_super_key, // 'YOUR_SUPER_KEY' 'zp5PtX4zUsI' 'headers': {}, 'account_id': ae_account_id, -} +}; let ae_api_headers: key_val = {}; ae_api_headers['Access-Control-Allow-Origin'] = '*'; @@ -132,40 +164,53 @@ if (ae_no_account_id) { } ae_api_data_struct['headers'] = ae_api_headers; -console.log(`Aether Config - API Data:`, ae_api_data_struct); +console.log(`AE Stores - API Data:`, ae_api_data_struct); export let ae_api = writable(ae_api_data_struct); -/* *** BEGIN *** Initialize slct_trigger and slct variables */ -// Updated 2024-02-15 +/* *** BEGIN *** Initialize slct_trigger and slct variables. The slct variable can be stored with local storage. */ +// Updated 2024-02-27 export let slct_trigger: any = writable(null); -console.log(`Aether Config - Selected Trigger:`, slct_trigger); +// console.log(`AE Stores - Selected Trigger:`, slct_trigger); let slct_obj_template: key_val = { 'account_id': ae_account_id, 'account_obj': {}, 'event_id': null, 'event_obj': {}, + 'event_obj_li': [], 'event_exhibit_id': null, 'event_exhibit_obj': {}, + 'event_exhibit_obj_li': [], 'event_presentation_id': null, 'event_presentation_obj': {}, + 'event_presentation_obj_li': [], 'event_presenter_id': null, 'event_presenter_obj': {}, + 'event_presenter_obj_li': [], 'event_session_id': null, 'event_session_obj': {}, + 'event_session_obj_li': [], 'sponsorship_id': null, 'sponsorship_obj': {}, + 'sponsorship_obj_li': [], + 'sponsorship_cfg_id': ae_sponsorship_cfg_id, + 'sponsorship_cfg_obj': {}, + 'sponsorship_cfg_obj_li': [], 'post_id': null, 'post_obj': {}, 'post_obj_li': [], 'post_comment_id': null, 'post_comment_obj': {}, - 'post_comment_obj_li': [] }; -console.log(`Aether Config - Selected Objects:`, slct_obj_template); -export let slct = writable(slct_obj_template); + 'post_comment_obj_li': [] +}; +// console.log(`AE Stores - Selected Objects:`, slct_obj_template); +// This works, but does not uses local storage: +// export let slct = writable(slct_obj_template); +// This works and uses local storage: +export let slct: Writable = localStorageStore('ae_slct', slct_obj_template); diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 3a70ab22..e150f969 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,4 +1,5 @@ diff --git a/src/routes/events_speakers/+layout.ts b/src/routes/events_speakers/+layout.ts index 5bf9d1a2..ae278aec 100644 --- a/src/routes/events_speakers/+layout.ts +++ b/src/routes/events_speakers/+layout.ts @@ -51,7 +51,7 @@ export function load({ params, url }) { // route console.log(`slct = `, get(slct)); let slct_trigger_tmp = get(slct_trigger); - slct_trigger_tmp = 'load__event_obj'; + slct_trigger_tmp = 'load__event_presenter_obj_li'; slct_trigger.set(slct_trigger_tmp); console.log(`slct_trigger = `, get(slct_trigger)); } diff --git a/src/routes/events_speakers/+page.svelte b/src/routes/events_speakers/+page.svelte index 0584c2a4..e29d5c9f 100644 --- a/src/routes/events_speakers/+page.svelte +++ b/src/routes/events_speakers/+page.svelte @@ -19,20 +19,79 @@ const modalStore = getModalStore(); import { api } from '$lib/api'; import { ae_loc, ae_sess, ae_api, slct, slct_trigger } from '$lib/ae_stores'; +import type { key_val } from '$lib/ae_stores'; - +import Edit_modal_event_presenter_obj from './10_edit_modal__event_presenter_obj.svelte'; import List_event_presenter_obj from './10_list__event_presenter_obj.svelte'; +import View_modal_event_presenter_obj from './10_view_modal__event_presenter_obj.svelte'; -type key_val = { - [key: string]: any; + +// Editing +const modalComponentEditEventPresenterObj: ModalComponent = { ref: Edit_modal_event_presenter_obj, props: {container_class_li: 'w-full p-4 space-y-4 card', container_header_class_li: 'card-header text-2xl font-bold'} }; + +const modal_edit__event_presenter_obj: ModalSettings = { + type: 'component', + component: modalComponentEditEventPresenterObj, + title: 'Edit Event Presenter', + position: '', // default is "items-center" }; -// console.log($slct, $slct_trigger); -// if ($slct.event_id) { -// // $slct_trigger = 'load__event_obj'; -// console.log(`$slct.event_id = `, $slct.event_id); -// } +// Viewing +const modalComponentViewEventPresenterObj: ModalComponent = { ref: View_modal_event_presenter_obj, props: {container_class_li: 'w-full p-4 space-y-4 card', container_header_class_li: 'card-header text-2xl font-bold'} }; +const modal_view__event_presenter_obj: ModalSettings = { + type: 'component', + component: modalComponentViewEventPresenterObj, + title: 'View Event Presenter', + position: '', // default is "items-center" + + // Provide arbitrary classes to the backdrop and modal elements: + // backdropClasses: '!bg-green-500', + // modalClasses: 'w-modal-wide', + // modalClasses: 'w-full', + + // Provide arbitrary metadata to your modal instance: + // meta: { + // component_root_classes: 'w-full', + // fn: do_something_function + // }, +}; + +// We don't want the edit or view to show up by default. Maybe if we see an object ID param in the URL, we can show the view modal. +$ae_loc.mod.events.show_edit__event_presenter_obj = false; +$ae_loc.mod.sponsorships.show_view__event_presenter_obj = false; + +$: if ($slct_trigger == 'show_edit__event_presenter_obj' && $ae_loc.mod.events.show_edit__event_presenter_obj) { + console.log('Show Modal Edit'); + $slct_trigger = null; + + let location = window.location.href; + const url = new URL(location); + url.searchParams.set('event_presenter_id', $slct.event_presenter_id); + history.pushState({}, '', url); + + // modalStore.clear(); + modalStore.trigger(modal_edit__event_presenter_obj); +} +$: if ($slct_trigger == 'show_view__event_presenter_obj' && $ae_loc.mod.events.show_view__event_presenter_obj) { + console.log('Show Modal View'); + $slct_trigger = null; + + let location = window.location.href; + const url = new URL(location); + url.searchParams.set('event_presenter_id', $slct.event_presenter_id); + history.pushState({}, '', url); + + // modalStore.clear(); + modalStore.trigger(modal_view__event_presenter_obj); +} + + +if ($slct.event_id && !$slct.event_presenter_obj_li) { + console.log(`No presenter list was found for Event ID: ${$slct.event_id}`); + + $slct_trigger = 'load__event_presenter_obj_li'; +} onMount(() => { console.log('Events - Speakers: +page.svelte'); @@ -47,8 +106,8 @@ onMount(() => { }); -$: if ($slct_trigger == 'load__event_obj' && $slct.event_id) { - console.log('Selected Event ID:', $slct.event_id); +$: if ($slct_trigger == 'load__event_presenter_obj_li' && $slct.event_id) { + console.log(`load__event_presenter_obj_li event_id: ${$slct.event_id}`); $slct_trigger = null; @@ -113,6 +172,47 @@ async function handle_load_ae_obj_li__event_presenter({event_id, try_cache=true} return ae_event_presenter_obj_li_get_promise; } + +// Load the Event Presenter Obj with ID based on the URL param. +$: if ($slct_trigger == 'load__event_presenter_obj' && $slct.event_presenter_id) { + console.log('Selected Event Presenter ID:', $slct.event_presenter_id); + + $slct_trigger = null; + + handle_load_ae_obj_id__event_presenter({event_presenter_id: $slct.event_presenter_id, try_cache: false}); +} + +let ae_event_presenter_obj_get_promise: Promise; + +async function handle_load_ae_obj_id__event_presenter({event_presenter_id, try_cache=false}) { + console.log(`*** handle_load_ae_obj_id__event_presenter() *** event_presenter_id=${event_presenter_id}`); + + let params = {}; + + // $ae_loc.hub.event_presenter_id_qry_status = 'loading'; + ae_event_presenter_obj_get_promise = api.get_ae_obj_id_crud({ + api_cfg: $ae_api, + obj_type: 'event_presenter', + obj_id: event_presenter_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 in the API config. + params: params, + log_lvl: 0 + }) + .then(function (event_presenter_obj_get_result) { + if (event_presenter_obj_get_result) { + $slct.event_presenter_obj = event_presenter_obj_get_result; + console.log(`event presenter object:`, $slct.event_presenter_obj); + } + }) + .catch(function (error) { + console.log('No results returned or failed.', error); + }); + + return ae_event_presenter_obj_get_promise; + +} + diff --git a/src/routes/events_speakers/10_edit_modal__event_presenter_obj.svelte b/src/routes/events_speakers/10_edit_modal__event_presenter_obj.svelte new file mode 100644 index 00000000..298c3c9d --- /dev/null +++ b/src/routes/events_speakers/10_edit_modal__event_presenter_obj.svelte @@ -0,0 +1,937 @@ + + + + +{#if $modalStore[0]} +
+
+ {$modalStore[0].title ?? '-- No Title --'} + + {#await ae_promises.update__event_presenter_obj} + + {:then update__event_presenter_obj_result} + {#if update__event_presenter_obj_result} + + {/if} + {:catch error} + + {/await} +
+ + + {#if $ae_loc.mod.events.presenter_link} +
+ +
+ {/if} + + + + + + Start + + + + Files + + + + Biography + + + + More + + + + + + + {#if $store_current_tab === 'start'} + + + + + + {:else if $store_current_tab === 'files'} + + + + + + {:else if $store_current_tab === 'biograhpy'} + + +
+ + +
+ + + {:else if $store_current_tab === 'options'} + + + + + {/if} + +
+
+ + + +
+ {#if $slct.event_presenter_id} + + + + {/if} + + + + +
+
+{/if} + + + diff --git a/src/routes/events_speakers/10_list__event_presenter_obj.svelte b/src/routes/events_speakers/10_list__event_presenter_obj.svelte index cedda70b..2864bc67 100644 --- a/src/routes/events_speakers/10_list__event_presenter_obj.svelte +++ b/src/routes/events_speakers/10_list__event_presenter_obj.svelte @@ -46,7 +46,6 @@ onMount(() => { $slct.event_presenter_obj = ae_event_presenter_obj; console.log(`Selected Event Presenter ID: ${$slct.event_presenter_id}`); console.log(`Selected Event Presenter Object:`, $slct.event_presenter_obj); - // $slct_trigger = 'load__event_presenter_obj'; $ae_loc.mod.events.show_main__options = true; $ae_loc.mod.events.show_edit__event_presenter_obj = false; @@ -116,7 +115,7 @@ onMount(() => { {:else} -
No event_presenters avalible to show at this time
+
No event presenters avalible to show at this time
{/if} diff --git a/src/routes/events_speakers/10_view_modal__event_presenter_obj.svelte b/src/routes/events_speakers/10_view_modal__event_presenter_obj.svelte new file mode 100644 index 00000000..f25a322d --- /dev/null +++ b/src/routes/events_speakers/10_view_modal__event_presenter_obj.svelte @@ -0,0 +1,175 @@ + + + + +
+ +
{@html $slct.event_presenter_obj.full_name}
+ +
+
+
Biography:
+
{@html $slct.event_presenter_obj.biography ? $slct.event_presenter_obj.biography : '-- No Bio Given --'}
+
+ +
+ Phone: + {$slct.event_presenter_obj.phone_mobile} — {$slct.event_presenter_obj.phone_mobile} +
+ +
+ Approved: + $ + + {$slct.event_presenter_obj.approve ? 'Yes, marked as approved' : 'Not yet marked as approved'} + +
+ + + +
+

More Information

+ +
More info will go here
+ +
+ + + + + +
+ +
+ {#if $ae_loc.trusted_access || $slct.event_presenter_obj.external_person_id === $ae_loc.novi_uuid || $slct.event_presenter_obj.contact_1_email === $ae_loc.novi_email} +
+ +
+ {/if} + +
+ +
+ + + diff --git a/src/routes/sponsorships/+page.svelte b/src/routes/sponsorships/+page.svelte index 71015a18..fb2e5f9e 100644 --- a/src/routes/sponsorships/+page.svelte +++ b/src/routes/sponsorships/+page.svelte @@ -7,6 +7,7 @@ console.log(`Svelte Sponsorships page data:`, data); // import type { Writable } from 'svelte/store'; // const store_current_page: Writable = localStorageStore('store_current_page', 'start'); +// https://github.com/skeletonlabs/skeleton/blob/master/packages/skeleton/src/lib/utilities/Modal/types.ts // To retrieve the store, getModalStore must be invoked at the top level of your component! import { getDrawerStore, getModalStore, ProgressRadial } from '@skeletonlabs/skeleton'; import type { @@ -19,34 +20,45 @@ const modalStore = getModalStore(); import { api } from '$lib/api'; import { ae_loc, ae_sess, ae_api, slct, slct_trigger } from '$lib/ae_stores'; - +import type { key_val } from '$lib/ae_stores'; import Edit_modal_sponsorship_obj from './10_edit_modal__sponsorship_obj.svelte'; import List_sponsorship_obj from './10_list__sponsorship_obj.svelte'; import View_modal_sponsorship_obj from './10_view_modal__sponsorship_obj.svelte'; -type key_val = { - [key: string]: any; -}; // Editing -const modalComponentEditSponsorshipObj: ModalComponent = { ref: Edit_modal_sponsorship_obj }; +const modalComponentEditSponsorshipObj: ModalComponent = { ref: Edit_modal_sponsorship_obj, props: {container_class_li: 'w-full p-4 space-y-4 card', container_header_class_li: 'card-header text-2xl font-bold'} }; const modal_edit__sponsorship_obj: ModalSettings = { type: 'component', component: modalComponentEditSponsorshipObj, title: 'Edit Sponsorship', position: '', // default is "items-center" + + // Provide arbitrary classes to the backdrop and modal elements: + // backdropClasses: '!bg-green-500', + // modalClasses: 'w-modal-wide', + + // Provide arbitrary metadata to your modal instance: + // meta: { fn: do_something_function } }; // Viewing -const modalComponentViewSponsorshipObj: ModalComponent = { ref: View_modal_sponsorship_obj }; +const modalComponentViewSponsorshipObj: ModalComponent = { ref: View_modal_sponsorship_obj, props: {container_class_li: 'w-full p-4 space-y-4 card', container_header_class_li: 'card-header text-2xl font-bold'} }; const modal_view__sponsorship_obj: ModalSettings = { type: 'component', component: modalComponentViewSponsorshipObj, title: 'Viewing Sponsorship', position: '', // default is "items-center" + + // Provide arbitrary classes to the backdrop and modal elements: + // backdropClasses: '!bg-green-500', + // modalClasses: 'w-modal-wide', + + // Provide arbitrary metadata to your modal instance: + // meta: { fn: do_something_function } }; // We don't want the edit or view to show up by default. Maybe if we see an object ID param in the URL, we can show the view modal. @@ -59,13 +71,27 @@ $ae_loc.site_domain = data.url.origin; $: if ($slct_trigger == 'show_edit__sponsorship_obj' && $ae_loc.mod.sponsorships.show_edit__sponsorship_obj) { console.log('Show Modal Edit'); $slct_trigger = null; + + let location = window.location.href; + const url = new URL(location); + url.searchParams.set('sponsorship_id', $slct.sponsorship_id); + history.pushState({}, '', url); + // $ae_loc.mod.sponsorships.show_view__sponsorship_obj = false; + // modalStore.clear(); modalStore.trigger(modal_edit__sponsorship_obj); } $: if ($slct_trigger == 'show_view__sponsorship_obj' && $ae_loc.mod.sponsorships.show_view__sponsorship_obj) { console.log('Show Modal View'); $slct_trigger = null; + + let location = window.location.href; + const url = new URL(location); + url.searchParams.set('sponsorship_id', $slct.sponsorship_id); + history.pushState({}, '', url); + // $ae_loc.mod.sponsorships.show_edit__sponsorship_obj = false; + // modalStore.clear(); modalStore.trigger(modal_view__sponsorship_obj); } diff --git a/src/routes/sponsorships/10_edit_modal__sponsorship_obj.svelte b/src/routes/sponsorships/10_edit_modal__sponsorship_obj.svelte index 879cf1c6..660642df 100644 --- a/src/routes/sponsorships/10_edit_modal__sponsorship_obj.svelte +++ b/src/routes/sponsorships/10_edit_modal__sponsorship_obj.svelte @@ -29,6 +29,8 @@ import { getModalStore, FileDropzone, TabGroup, Tab, TabAnchor } from '@skeleton // Props /** Exposes parent props to this component. */ export let parent: SvelteComponent; +export let container_class_li = ''; +export let container_header_class_li = ''; const modalStore = getModalStore(); @@ -36,10 +38,7 @@ const modalStore = getModalStore(); import { ae_util } from '$lib/ae_utils'; import { api } from '$lib/api'; import { ae_loc, ae_sess, ae_api, slct, slct_trigger } from '$lib/ae_stores'; - -type key_val = { - [key: string]: any; -}; +import type { key_val } from '$lib/ae_stores'; onMount(() => { @@ -460,8 +459,8 @@ async function handle_update__sponsorship({ {#if $modalStore[0]} -