Saving notes and things. Done for the night. Tomorrow need to work on the Leads - Manage/Config and then Leads - Sign In/Licenses/Payment
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
<script lang="ts">
|
||||
/**
|
||||
* src/routes/events/[event_id]/(leads)/leads/exhibit/[exhibit_id]/ae_tab__manage.svelte
|
||||
* Tab 4: Manage/Config - Exhibitor Settings and Profile.
|
||||
*/
|
||||
import { page } from '$app/state';
|
||||
import { liveQuery } from 'dexie';
|
||||
import { db_events } from '$lib/ae_events/db_events';
|
||||
import { ae_api, ae_loc } from '$lib/stores/ae_stores';
|
||||
import { events_func } from '$lib/ae_events_functions';
|
||||
import Element_ae_crud_v2 from '$lib/elements/element_ae_crud_v2.svelte';
|
||||
import {
|
||||
Store,
|
||||
Settings,
|
||||
Lock,
|
||||
Info,
|
||||
MessageSquare,
|
||||
CreditCard,
|
||||
Key,
|
||||
Users,
|
||||
ChevronRight
|
||||
} from 'lucide-svelte';
|
||||
|
||||
const exhibit_id = $derived(page.params.exhibit_id);
|
||||
|
||||
let lq__exhibit_obj = $derived(
|
||||
liveQuery(async () => {
|
||||
if (!exhibit_id) return null;
|
||||
return await db_events.exhibit.get(exhibit_id);
|
||||
})
|
||||
);
|
||||
|
||||
// Track local status for specific actions
|
||||
let updating = $state(false);
|
||||
</script>
|
||||
|
||||
<div class="ae-tab-manage w-full space-y-8 animate-in fade-in slide-in-from-bottom-2 duration-300">
|
||||
|
||||
<!-- Section: Booth Profile -->
|
||||
<section class="space-y-4">
|
||||
<div class="flex items-center gap-2 border-b border-surface-500/10 pb-2">
|
||||
<Store size="1.2em" class="text-primary-500" />
|
||||
<h3 class="text-lg font-bold uppercase tracking-wider">Booth Profile</h3>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 gap-6">
|
||||
<!-- Name -->
|
||||
<div class="card p-4 variant-soft shadow-sm">
|
||||
<label class="label mb-2">
|
||||
<span class="text-xs uppercase font-black opacity-40 tracking-widest">Exhibitor Name</span>
|
||||
</label>
|
||||
<Element_ae_crud_v2
|
||||
api_cfg={$ae_api}
|
||||
object_type="event_exhibit"
|
||||
object_id={exhibit_id}
|
||||
field_name="name"
|
||||
field_type="text"
|
||||
current_field_value={$lq__exhibit_obj?.name}
|
||||
hide_element={false}
|
||||
display_block={true}
|
||||
class_li="font-bold text-xl"
|
||||
/>
|
||||
<p class="text-[10px] opacity-50 mt-2 italic">This name is visible to attendees when you scan their badges.</p>
|
||||
</div>
|
||||
|
||||
<!-- Description -->
|
||||
<div class="card p-4 variant-soft shadow-sm">
|
||||
<label class="label mb-2">
|
||||
<span class="text-xs uppercase font-black opacity-40 tracking-widest">Booth Description / Promo</span>
|
||||
</label>
|
||||
<Element_ae_crud_v2
|
||||
api_cfg={$ae_api}
|
||||
object_type="event_exhibit"
|
||||
object_id={exhibit_id}
|
||||
field_name="description"
|
||||
field_type="textarea"
|
||||
current_field_value={$lq__exhibit_obj?.description}
|
||||
textarea_rows={4}
|
||||
hide_element={false}
|
||||
display_block={true}
|
||||
class_li="text-sm"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Section: Staff Access -->
|
||||
<section class="space-y-4">
|
||||
<div class="flex items-center gap-2 border-b border-surface-500/10 pb-2">
|
||||
<Lock size="1.2em" class="text-warning-500" />
|
||||
<h3 class="text-lg font-bold uppercase tracking-wider">Access & Security</h3>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
||||
<!-- Staff Passcode -->
|
||||
<div class="card p-4 bg-surface-500/5 border border-surface-500/10">
|
||||
<div class="flex items-center justify-between">
|
||||
<div>
|
||||
<div class="text-[10px] uppercase font-black opacity-40 tracking-widest">Staff Passcode</div>
|
||||
<div class="font-mono text-xl tracking-widest font-bold">{$lq__exhibit_obj?.staff_passcode || '----'}</div>
|
||||
</div>
|
||||
<Key size="1.5em" class="opacity-20" />
|
||||
</div>
|
||||
<p class="text-[9px] opacity-40 mt-2 italic">Shared code for your team to sign in to this booth.</p>
|
||||
</div>
|
||||
|
||||
<!-- Booth Code -->
|
||||
<div class="card p-4 bg-surface-500/5 border border-surface-500/10">
|
||||
<div class="flex items-center justify-between">
|
||||
<div>
|
||||
<div class="text-[10px] uppercase font-black opacity-40 tracking-widest">Booth Identifier</div>
|
||||
<div class="font-mono text-xl font-bold">#{$lq__exhibit_obj?.code || 'N/A'}</div>
|
||||
</div>
|
||||
<Info size="1.5em" class="opacity-20" />
|
||||
</div>
|
||||
<p class="text-[9px] opacity-40 mt-2 italic">Official floor plan booth number.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Section: Lead Settings -->
|
||||
<section class="space-y-4">
|
||||
<div class="flex items-center gap-2 border-b border-surface-500/10 pb-2">
|
||||
<Settings size="1.2em" class="text-secondary-500" />
|
||||
<h3 class="text-lg font-bold uppercase tracking-wider">Lead Retrieval Config</h3>
|
||||
</div>
|
||||
|
||||
<div class="card p-0 divide-y divide-surface-500/10 overflow-hidden shadow-md">
|
||||
<!-- Licenses -->
|
||||
<div class="p-4 flex items-center justify-between hover:bg-surface-500/5 transition-colors cursor-pointer group">
|
||||
<div class="flex items-center gap-4">
|
||||
<div class="bg-primary-500/10 p-2 rounded-lg text-primary-500"><Users size="1.2em" /></div>
|
||||
<div>
|
||||
<div class="font-bold text-sm">Staff Licenses</div>
|
||||
<div class="text-xs opacity-50">Active: 0 / Max: {$lq__exhibit_obj?.license_max || 1}</div>
|
||||
</div>
|
||||
</div>
|
||||
<ChevronRight size="1.2em" class="opacity-20 group-hover:translate-x-1 transition-transform" />
|
||||
</div>
|
||||
|
||||
<!-- Custom Questions -->
|
||||
<div class="p-4 flex items-center justify-between hover:bg-surface-500/5 transition-colors cursor-pointer group">
|
||||
<div class="flex items-center gap-4">
|
||||
<div class="bg-secondary-500/10 p-2 rounded-lg text-secondary-500"><MessageSquare size="1.2em" /></div>
|
||||
<div>
|
||||
<div class="font-bold text-sm">Qualifiers & Questions</div>
|
||||
<div class="text-xs opacity-50">Configure follow-up responses</div>
|
||||
</div>
|
||||
</div>
|
||||
<ChevronRight size="1.2em" class="opacity-20 group-hover:translate-x-1 transition-transform" />
|
||||
</div>
|
||||
|
||||
<!-- Billing -->
|
||||
<div class="p-4 flex items-center justify-between hover:bg-surface-500/5 transition-colors cursor-pointer group">
|
||||
<div class="flex items-center gap-4">
|
||||
<div class="bg-success-500/10 p-2 rounded-lg text-success-500"><CreditCard size="1.2em" /></div>
|
||||
<div>
|
||||
<div class="font-bold text-sm">Billing & Upgrades</div>
|
||||
<div class="text-xs opacity-50">Manage subscription and extra devices</div>
|
||||
</div>
|
||||
</div>
|
||||
<ChevronRight size="1.2em" class="opacity-20 group-hover:translate-x-1 transition-transform" />
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Help Footer -->
|
||||
<div class="pt-10 pb-20 text-center space-y-2 opacity-40">
|
||||
<p class="text-xs">Exhibitor Management Module v3.0</p>
|
||||
<p class="text-[10px] font-mono">Exhibit ID: {$lq__exhibit_obj?.event_exhibit_id}</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<style lang="postcss">
|
||||
/* Custom tab styles if needed */
|
||||
</style>
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
<script lang="ts">
|
||||
// Page for viewing/editing a single lead
|
||||
</script>
|
||||
|
||||
<h1 class="h1">Lead Details</h1>
|
||||
|
||||
<p>This page will show the details for a single lead. A Lead is actually in the event_exhibit_tracking table in the MariaDB or exhibit_tracking table in the Indexed DB ae_events_db.</p>
|
||||
@@ -1,25 +0,0 @@
|
||||
/**
|
||||
* src/routes/events/[event_id]/(leads)/leads/lead/[exhibit_tracking_id]/+page.ts
|
||||
* Lead Detail Page Loader.
|
||||
* Responsible for loading a single exhibit tracking record and its associated badge data.
|
||||
*/
|
||||
import { browser } from '$app/environment';
|
||||
import { events_func } from '$lib/ae_events_functions';
|
||||
|
||||
export async function load({ params, parent }) {
|
||||
const parent_data = await parent();
|
||||
const account_id = parent_data.account_id;
|
||||
const ae_acct = parent_data[account_id];
|
||||
const exhibit_tracking_id = params.exhibit_tracking_id;
|
||||
|
||||
if (browser && exhibit_tracking_id) {
|
||||
// Refresh the specific Lead (Tracking) object
|
||||
events_func.load_ae_obj_id__exhibit_tracking({
|
||||
api_cfg: ae_acct.api,
|
||||
exhibit_tracking_id: exhibit_tracking_id,
|
||||
log_lvl: 0
|
||||
});
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
<script lang="ts">
|
||||
/**
|
||||
* src/routes/events/[event_id]/(leads)/leads/lead/[exhibit_tracking_id]/ae_comp__lead_detail_form.svelte
|
||||
* Lead Detail Form Stub.
|
||||
*/
|
||||
</script>
|
||||
|
||||
<div class="lead-detail-form p-4 card">
|
||||
<h3 class="h3">Lead Details</h3>
|
||||
<p>Placeholder for qualifiers and notes.</p>
|
||||
</div>
|
||||
Reference in New Issue
Block a user