Files
OSIT-AE-App-Svelte/src/routes/events/ae_comp__events_menu_nav.svelte
2026-04-01 19:18:38 -04:00

147 lines
4.9 KiB
Svelte

<script lang="ts">
import {
ae_snip,
ae_loc,
ae_sess,
ae_api,
ae_trig,
slct,
slct_trigger
} from '$lib/stores/ae_stores';
import {
TrendingUp,
MapPin,
Wrench,
Search,
GraduationCap,
Plane,
Settings
} from '@lucide/svelte';
interface Props {
// import { events_loc, events_sess, events_slct, events_trigger, events_trig_kv } from '$lib/stores/ae_events_stores';
hide?: boolean;
event_id?: null | string;
ae_core?: boolean;
events__launcher_id?: null | string; // event_location_id
events__location_id?: null | string; // event_location_id
events__locations?: boolean; // event_id
// export let events__presenter_id: null|string = null; // event_presenter_id
events__reports?: boolean; // event_id
events__settings?: boolean; // event_id
events__launcher_session_id?: null | string; // event_session_id to pass to launcher as ?session_id=
events__session_id?: null | string; // event_session_id — used for "Back to Session" link only
events__session_search?: boolean; // event_id
events__launcher_extra_params?: string; // extra URL params appended to the launcher link (e.g. 'iframe=true&launcher_menu=hide')
}
let {
hide = true,
event_id = null,
ae_core = false,
events__launcher_id = null,
events__launcher_session_id = null,
events__launcher_extra_params = '',
events__location_id = null,
events__locations = false,
events__reports = false,
events__settings = false,
events__session_id = null,
events__session_search = false
}: Props = $props();
// Build launcher URL segments separately so the href template stays simple (avoids ternaries in href attr)
let launcher_loc_seg = $derived(
events__launcher_id ? `/${events__launcher_id}` : ''
);
let launcher_sess_qry = $derived.by(() => {
const parts: string[] = [];
if (events__launcher_session_id)
parts.push(`session_id=${events__launcher_session_id}`);
if (events__launcher_extra_params)
parts.push(events__launcher_extra_params);
return parts.length ? `?${parts.join('&')}` : '';
});
</script>
<!-- This is for common navigation links. -->
<div
class="ae_comp__events_menu_nav flex w-full flex-row flex-wrap items-center justify-between gap-1.5"
class:hidden={hide}>
<span
class="ae_menu__navigation_options flex flex-row flex-wrap items-center justify-around gap-0.5">
{#if $ae_loc.trusted_access && $ae_loc.edit_mode}
<a
href="/core"
class="btn btn-sm ae_btn_warning mx-1"
class:hidden={!ae_core}>
<Settings size="1em" aria-hidden="true" />
Æ Core
</a>
{/if}
{#if $ae_loc.public_access && $ae_loc.edit_mode}
<a
href="/events/{event_id}/reports"
class="btn btn-sm ae_btn_info mx-1"
class:hidden={!events__reports}>
<TrendingUp size="1em" aria-hidden="true" />
Pres Mgmt Reports
</a>
{/if}
{#if $ae_loc.administrator_access || ($ae_loc.trusted_access && $ae_loc.edit_mode)}
<a
href="/events/{event_id}/locations"
class="btn btn-sm ae_btn_info mx-1"
class:hidden={!events__locations}>
<MapPin size="1em" aria-hidden="true" />
Locations
</a>
{/if}
<a
href="/events/{event_id}/settings"
class="btn btn-sm ae_btn_warning mx-1"
class:hidden={!events__settings}>
<Wrench size="1em" aria-hidden="true" />
Admin Tools
</a>
</span>
<span
class="ae_menu__navigation_options flex flex-row flex-wrap items-center justify-around gap-0.5 grow">
<a
href="/events/{event_id}/pres_mgmt"
class="btn btn-sm ae_btn_info mx-1"
class:hidden={!events__session_search}>
<Search size="1em" aria-hidden="true" />
Session Search
</a>
<a
href="/events/{event_id}/session/{events__session_id}"
class="btn btn-sm ae_btn_info mx-1"
class:hidden={!events__session_id}>
<GraduationCap size="1em" aria-hidden="true" />
Back to Session
</a>
{#if $ae_loc.administrator_access || ($ae_loc.trusted_access && $ae_loc.edit_mode)}
<a
href="/events/{event_id}/launcher{launcher_loc_seg}{launcher_sess_qry}"
class="btn btn-sm ae_btn_info mx-1"
class:hidden={!event_id}>
<Plane size="1em" aria-hidden="true" />
Launcher
</a>
{/if}
{#if $ae_loc.trusted_access}
<a
href="/events/{event_id}/location/{events__location_id}"
class="btn btn-sm ae_btn_info mx-1"
class:hidden={!events__location_id}>
<MapPin size="1em" aria-hidden="true" />
Session Location
</a>
{/if}
</span>
</div>