Slow and steady progress getting things working more smoothly.
This commit is contained in:
@@ -44,7 +44,10 @@ let events_local_data_struct: key_val = {
|
||||
|
||||
// Lead Retrievals (Exhibit)
|
||||
'leads': {
|
||||
show_option__paid_tab: true,
|
||||
show_content__scan_requirements: true,
|
||||
show_content__custom_question_descriptions: true,
|
||||
show_content__email_link_warning: true,
|
||||
|
||||
// For ISHLT 2024 Annual Meeting only!
|
||||
default__external_registration_id: '2024_Annual Meeting',
|
||||
|
||||
@@ -58,7 +58,7 @@ onMount(() => {
|
||||
});
|
||||
|
||||
|
||||
$: if (trigger_patch) {
|
||||
$: if (trigger_patch == true) {
|
||||
console.log('AE CRUD: Patch triggered!');
|
||||
// console.log(trigger_patch);
|
||||
trigger_patch = null;
|
||||
|
||||
@@ -522,10 +522,12 @@ function send_init_confirm_email({index, lic_key, lic_pass}) {
|
||||
border=""
|
||||
class="bg-surface-100-800-token w-full"
|
||||
>
|
||||
{#if $events_loc.leads.show_option__paid_tab}
|
||||
<Tab
|
||||
bind:group={$events_loc.leads.tab[$events_slct.exhibit_id]}
|
||||
name="tab_payment"
|
||||
value={'payment'}>
|
||||
value={'payment'}
|
||||
>
|
||||
<svelte:fragment slot="lead">
|
||||
{#if !$event_exhibit_obj?.priority}
|
||||
<span class="fas fa-question text-red-500"></span>
|
||||
@@ -541,6 +543,7 @@ function send_init_confirm_email({index, lic_key, lic_pass}) {
|
||||
Payment</span>
|
||||
{/if}
|
||||
</Tab>
|
||||
{/if}
|
||||
|
||||
<Tab
|
||||
bind:group={$events_loc.leads.tab[$events_slct.exhibit_id]}
|
||||
|
||||
@@ -1,16 +1,27 @@
|
||||
<script lang="ts">
|
||||
// export let data;
|
||||
// console.log(`ae_events_leads exhibit [slug] leads_payment.svelte data:`, data);
|
||||
// export let data: any;
|
||||
// console.log(`ae_events_leads exhibit [slug] leads_list.svelte data:`, data);
|
||||
|
||||
import { ae_util } from '$lib/ae_utils';
|
||||
import type { key_val } from '$lib/ae_stores';
|
||||
// import { ae_util } from '$lib/ae_utils';
|
||||
import { liveQuery } from "dexie";
|
||||
import { db_events } from "$lib/db_events";
|
||||
import { ae_loc, ae_sess, ae_api, slct, slct_trigger } from '$lib/ae_stores';
|
||||
import { events_loc, events_sess, events_slct, events_trigger } from '$lib/ae_events_stores';
|
||||
import { events_func } from '$lib/ae_events_functions';
|
||||
|
||||
import Element_ae_crud from '$lib/element_ae_crud.svelte';
|
||||
import Leads_view_lead from './leads_view_lead.svelte';
|
||||
|
||||
let event_exhibit_obj = liveQuery(
|
||||
// These will likely be used for patch/update triggers. Maybe delete?
|
||||
let ae_triggers: key_val = {
|
||||
priority: {},
|
||||
sort: {},
|
||||
show_hidden: {},
|
||||
};
|
||||
|
||||
// The lq__ prefix is used to indicate that this is a liveQuery object and it should use the $ prefix when referencing the object.
|
||||
let lq__event_exhibit_obj = liveQuery(
|
||||
() => db_events.exhibits.get($events_slct.exhibit_id)
|
||||
);
|
||||
|
||||
@@ -57,7 +68,7 @@ let event_exhibit_obj = liveQuery(
|
||||
// This is using Dexie JS as a wrapper for IndexedDB
|
||||
// This should only show exhibit_tracking objects that are enabled and not hidden.
|
||||
// The final results should be sorted by: priority DESC, sort ASC, created_on DESC, updated_on DESC
|
||||
$: event_exhibit_tracking_obj_li = liveQuery(
|
||||
let lq__event_exhibit_tracking_obj_li = liveQuery(
|
||||
() => db_events.exhibit_tracking
|
||||
.where({event_exhibit_id_random: $events_slct.exhibit_id})
|
||||
.and((x) => (x.enable === true && x.hide === false))
|
||||
@@ -85,7 +96,7 @@ $: event_exhibit_tracking_obj_li = liveQuery(
|
||||
{#if $events_slct.exhibit_id && $events_slct.exhibit_obj}
|
||||
<h2 class="h3">
|
||||
<span class="fas fa-clipboard-list-check"></span>
|
||||
Leads for {$event_exhibit_obj?.name}
|
||||
Leads for {$lq__event_exhibit_obj?.name}
|
||||
</h2>
|
||||
|
||||
<div class="border border-slate-500/10 p-2 variant-soft-warning">This section is not fully enabled for ISHLT 2024 at this time. You can not add new leads and changes are limited.</div>
|
||||
@@ -95,12 +106,18 @@ $: event_exhibit_tracking_obj_li = liveQuery(
|
||||
|
||||
|
||||
<button
|
||||
on:click={() => {
|
||||
on:click={async () => {
|
||||
console.log('Show Hidden Leads');
|
||||
$events_loc.leads.show_hidden = !$events_loc.leads.show_hidden;
|
||||
// $events_loc.leads.show_hidden = !$events_loc.leads.show_hidden;
|
||||
|
||||
console.log('$events_loc.leads.show_hidden:', $events_loc.leads.show_hidden);
|
||||
|
||||
// await db.friends.update(friendId, {age: 99});
|
||||
|
||||
await db_events.exhibits.update($events_slct.exhibit_id, {name: $lq__event_exhibit_obj?.name + ' TEST'});
|
||||
|
||||
// event_exhibit_obj.set.name = $lq__event_exhibit_obj.name + ' TEST';
|
||||
|
||||
|
||||
}}
|
||||
class="btn btn-sm variant-soft"
|
||||
@@ -112,7 +129,7 @@ $: event_exhibit_tracking_obj_li = liveQuery(
|
||||
|
||||
{/if}
|
||||
|
||||
{#if $event_exhibit_tracking_obj_li}
|
||||
{#if $lq__event_exhibit_tracking_obj_li}
|
||||
<table class="table table-compact table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -124,7 +141,7 @@ $: event_exhibit_tracking_obj_li = liveQuery(
|
||||
|
||||
<tbody>
|
||||
|
||||
{#each $event_exhibit_tracking_obj_li as event_exhibit_tracking_obj, index}
|
||||
{#each $lq__event_exhibit_tracking_obj_li as event_exhibit_tracking_obj, index}
|
||||
<!-- flex flex-row justify-center items-center m-auto -->
|
||||
<tr
|
||||
class:hidden={$events_loc.leads.show_hidden}
|
||||
@@ -133,18 +150,47 @@ $: event_exhibit_tracking_obj_li = liveQuery(
|
||||
<td class="star text-center">
|
||||
<!-- <span class="star_container flex flex-col justify-center items-center m-auto"> -->
|
||||
|
||||
<button
|
||||
on:click={async () => {
|
||||
<!-- Priority (star) means this should be sorted at the top of lists. -->
|
||||
<Element_ae_crud
|
||||
bind:trigger_patch={ae_triggers.priority[event_exhibit_tracking_obj?.event_exhibit_tracking_id_random]}
|
||||
api_cfg={$ae_api}
|
||||
object_type={'event_exhibit_tracking'}
|
||||
object_id={event_exhibit_tracking_obj?.event_exhibit_tracking_id_random}
|
||||
field_name={'priority'}
|
||||
field_type={'button'}
|
||||
field_value={$events_slct.exhibit_tracking_obj.priority}
|
||||
allow_null={false}
|
||||
hide_edit_btn={true}
|
||||
outline_element={false}
|
||||
show_crud={false}
|
||||
display_inline={true}
|
||||
class_li={'m-1'}
|
||||
on:ae_crud_updated={e => {
|
||||
console.log(`ae_crud_updated event:`, e.detail);
|
||||
events_func.handle_load_ae_obj_id__exhibit_tracking({api_cfg: $ae_api, exhibit_tracking_id: $events_slct.exhibit_tracking_id});
|
||||
}}
|
||||
class="btn btn-sm variant-soft-tertiary"
|
||||
>
|
||||
{#if event_exhibit_tracking_obj.priority}
|
||||
<span class="fas fa-star" title="stared or priority"></span>
|
||||
{:else}
|
||||
<span class="far fa-star" title="not stared or priority"></span>
|
||||
{/if}
|
||||
</button>
|
||||
<!-- </span> -->
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
console.log(`Updating priority for event_exhibit_tracking_id: ${event_exhibit_tracking_obj?.event_exhibit_tracking_id_random}`);
|
||||
|
||||
$events_slct.exhibit_tracking_id = event_exhibit_tracking_obj.event_exhibit_tracking_id_random;
|
||||
$events_slct.exhibit_tracking_obj = event_exhibit_tracking_obj;
|
||||
|
||||
$events_slct.exhibit_tracking_obj.priority = !$events_slct.exhibit_tracking_obj.priority;
|
||||
|
||||
ae_triggers.priority[event_exhibit_tracking_obj?.event_exhibit_tracking_id_random] = true;
|
||||
|
||||
// ae_triggers.priority[event_exhibit_tracking_obj?.event_exhibit_tracking_id_random].new_val = !event_exhibit_tracking_obj?.priority;
|
||||
|
||||
console.log(`ae_triggers.priority: ${ae_triggers.priority[event_exhibit_tracking_obj?.event_exhibit_tracking_id_random]}`);
|
||||
}}
|
||||
class="btn btn-sm variant-soft-tertiary"
|
||||
>
|
||||
{@html (event_exhibit_tracking_obj?.priority ? '<span class="fas fa-star m-1"></span>' : '<span class="far fa-star m-1"></span>')}
|
||||
</button>
|
||||
</Element_ae_crud>
|
||||
</td>
|
||||
|
||||
<!-- text-center align-middle -->
|
||||
@@ -232,7 +278,7 @@ $: event_exhibit_tracking_obj_li = liveQuery(
|
||||
</table>
|
||||
{:else}
|
||||
No leads available to show
|
||||
{$event_exhibit_tracking_obj_li}
|
||||
{$lq__event_exhibit_tracking_obj_li}
|
||||
{/if}
|
||||
|
||||
{:else}
|
||||
|
||||
@@ -223,6 +223,37 @@ export let get_event_exhibit_tracking_export = async function get_event_exhibit_
|
||||
{/if}
|
||||
</Element_ae_crud>
|
||||
|
||||
<!-- Give option show show or hide the Payment tab if they have been marked as paid (priority = true). -->
|
||||
<div>
|
||||
{#if $event_exhibit_obj?.priority}
|
||||
|
||||
{#if $events_loc.leads.show_option__paid_tab}
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
$events_loc.leads.show_option__paid_tab = false;
|
||||
}}
|
||||
class="btn btn-sm variant-soft-primary"
|
||||
>
|
||||
<span class="fas fa-eye-slash m-1"></span>
|
||||
Hide Payment Tab
|
||||
</button>
|
||||
{:else}
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
$events_loc.leads.show_option__paid_tab = !$events_loc.leads.show_option__paid_tab;
|
||||
}}
|
||||
class="btn btn-sm variant-soft-primary"
|
||||
>
|
||||
<span class="fas fa-eye m-1"></span>
|
||||
Show Hidden Payment Tab
|
||||
</button>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Field for license_max. A number between 0 and 10. -->
|
||||
<Element_ae_crud
|
||||
@@ -393,22 +424,20 @@ export let get_event_exhibit_tracking_export = async function get_event_exhibit_
|
||||
Additional Settings
|
||||
</h2>
|
||||
|
||||
<div>
|
||||
<div class="text-center">
|
||||
<button
|
||||
class="btn btn-sm variant-ghost-warning"
|
||||
class="btn btn-sm variant-ghost-warning m-1"
|
||||
title="Reload and clear the page file cache"
|
||||
on:click={() => {
|
||||
// $ae_loc.
|
||||
window.location.reload(true);
|
||||
}}
|
||||
>
|
||||
<span class="fas fa-sync mx-1"></span>
|
||||
Reload and
|
||||
<span class="fas fa-trash mx-1"></span>
|
||||
Clear Cache
|
||||
<span class="fas fa-sync m-1"></span>
|
||||
Reload Without Cache
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-sm variant-ghost-warning"
|
||||
class="btn btn-sm variant-ghost-warning m-1"
|
||||
title="Clear the browser storage for this page"
|
||||
on:click={() => {
|
||||
// $ae_loc.
|
||||
@@ -417,12 +446,12 @@ export let get_event_exhibit_tracking_export = async function get_event_exhibit_
|
||||
alert('Local and Session Storage cleared. You will probably want to reload/refresh the page as well.');
|
||||
}}
|
||||
>
|
||||
<span class="fas fa-eraser mx-1"></span>
|
||||
<span class="fas fa-eraser m-1"></span>
|
||||
Clear Storage
|
||||
</button>
|
||||
|
||||
<button
|
||||
class="btn btn-sm variant-ghost-warning"
|
||||
class="btn btn-sm variant-ghost-warning m-1"
|
||||
title="Clear browser iDB storage"
|
||||
on:click={() => {
|
||||
db_events.delete().then(() => {
|
||||
@@ -430,14 +459,15 @@ export let get_event_exhibit_tracking_export = async function get_event_exhibit_
|
||||
});
|
||||
}}
|
||||
>
|
||||
<span class="fas fa-database mx-1"></span>
|
||||
<span class="fas fa-database m-1"></span>
|
||||
Clear iDB
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{#if $events_loc?.leads.auth_exhibit_kv[$events_slct.exhibit_id]}
|
||||
|
||||
Auto hide on sign in:
|
||||
<div class="">
|
||||
Auto hide header/footer on sign in:
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
@@ -449,7 +479,9 @@ export let get_event_exhibit_tracking_export = async function get_event_exhibit_
|
||||
<span class="fas fa-eye-slash mx-1"></span>
|
||||
Turn {$events_loc.leads.auto_hide_on_sign_in ? 'off' : 'on'} auto hide
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
Turn on iframe mode:
|
||||
<button
|
||||
type="button"
|
||||
@@ -462,7 +494,9 @@ export let get_event_exhibit_tracking_export = async function get_event_exhibit_
|
||||
<span class="fas fa-compress mx-1"></span>
|
||||
Turn {$ae_loc.iframe ? 'off' : 'on'} iframe mode
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
Show or hide additional details:
|
||||
<button
|
||||
type="button"
|
||||
@@ -475,6 +509,7 @@ export let get_event_exhibit_tracking_export = async function get_event_exhibit_
|
||||
<span class="fas fa-eye mx-1"></span>
|
||||
Show/Hide Details
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -119,8 +119,25 @@ $: if ($events_sess.stripe && $events_sess.stripe.license_qty >= 0 || $events_se
|
||||
{:else}
|
||||
<p>You have not rented any tablets for scanning. You can use your own device(s) with this service.</p>
|
||||
{/if}
|
||||
|
||||
<p>To save space while using this app you can hide this payment tab now that you have paid for your licenses. This can be unhidden under the Conf tab if needed.</p>
|
||||
</div>
|
||||
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
let confirm_hide = confirm('Are you sure you want to hide this tab?');
|
||||
if (confirm_hide) {
|
||||
$events_loc.leads.show_option__paid_tab = false;
|
||||
}
|
||||
}}
|
||||
class="btn variant-soft-primary"
|
||||
title="This payment tab can be hidden once marked as paid."
|
||||
>
|
||||
<span class="fas fa-eye-slash m-1"></span>
|
||||
Hide This Paid Tab?
|
||||
</button>
|
||||
|
||||
{:else}
|
||||
<h3 class="h4">Not Marked as Paid</h3>
|
||||
|
||||
|
||||
@@ -144,12 +144,12 @@ async function handle_submit_form_lead_update(event) {
|
||||
"
|
||||
>
|
||||
<header class="popover__header flex gap-1 justify-between items-center p-1 border-b">
|
||||
<h2 class="h3">Lead:
|
||||
<h2 class="h3">
|
||||
<span class="text-sm">Lead:</span>
|
||||
{@html ($event_exhibit_tracking_obj?.priority ? '<span class="fas fa-star m-1"></span>' : '<span class="far fa-star m-1 hidden"></span>')}
|
||||
|
||||
{$event_exhibit_tracking_obj?.event_badge_full_name}
|
||||
<span class="text-xs text-slate-500">
|
||||
ID:
|
||||
{$event_exhibit_tracking_obj?.event_exhibit_tracking_id_random}
|
||||
</span>
|
||||
</h2>
|
||||
@@ -434,17 +434,35 @@ async function handle_submit_form_lead_update(event) {
|
||||
|
||||
<div class="custom_questions">
|
||||
<fieldset id="custom_questions">
|
||||
<legend class="legend">Custom Questions:</legend>
|
||||
<legend class="legend">
|
||||
Custom Questions:
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
$events_loc.leads.show_content__custom_question_descriptions = !$events_loc.leads.show_content__custom_question_descriptions;
|
||||
}}
|
||||
class="btn btn-sm variant-soft-primary"
|
||||
>
|
||||
<span class="fas fa-info-circle"></span>
|
||||
{#if ($events_loc.leads.show_content__custom_question_descriptions)}
|
||||
<span class="">Hide descriptions</span>
|
||||
{:else}
|
||||
<span class="sr-only">Show descriptions</span>
|
||||
{/if}
|
||||
</button>
|
||||
</legend>
|
||||
|
||||
|
||||
{#each $event_exhibit_obj?.leads_custom_questions_json as leads_custom_question, question_index}
|
||||
<div>
|
||||
<span class="leads_custom_question">{leads_custom_question.question}</span>
|
||||
<div class="flex flex-col sm:flex-row wrap justify-between m-1">
|
||||
<span class="leads_custom_question text-xs">{leads_custom_question.question}</span>
|
||||
|
||||
{#if (leads_custom_question.type == 'text')}
|
||||
<input
|
||||
name="event_lead__leads_custom_question_{leads_custom_question.code}"
|
||||
value={($event_exhibit_tracking_obj?.responses_json && $event_exhibit_tracking_obj?.responses_json[leads_custom_question.code]) ? $event_exhibit_tracking_obj?.responses_json[leads_custom_question.code].response : null}
|
||||
placeholder="Response"
|
||||
class="leads_custom_question_response input"
|
||||
class="leads_custom_question_response input w-96 text-xs"
|
||||
on:change={() => {
|
||||
$events_sess.leads.lead_data_changed = true;
|
||||
}}
|
||||
@@ -452,7 +470,7 @@ async function handle_submit_form_lead_update(event) {
|
||||
{:else if (leads_custom_question.type == 'option' && leads_custom_question.option_li)}
|
||||
<select
|
||||
name="event_lead__leads_custom_question_{leads_custom_question.code}"
|
||||
class="leads_custom_question_response select"
|
||||
class="leads_custom_question_response select w-96 text-xs"
|
||||
value={($event_exhibit_tracking_obj?.responses_json && $event_exhibit_tracking_obj?.responses_json[leads_custom_question.code]) ? $event_exhibit_tracking_obj?.responses_json[leads_custom_question.code].response : null}
|
||||
on:change={() => {
|
||||
$events_sess.leads.lead_data_changed = true;
|
||||
@@ -463,10 +481,12 @@ async function handle_submit_form_lead_update(event) {
|
||||
{/each}
|
||||
</select>
|
||||
{:else}
|
||||
Responses not yet configured
|
||||
Response type not yet configured
|
||||
{/if}
|
||||
<!-- Show or hide the description of the question. This is often just the full version of the question because otherwise there is not enough space. -->
|
||||
{#if ($events_loc.leads.show_content__custom_question_descriptions)}
|
||||
<span class="text-xs text-slate-500">{leads_custom_question.description}</span>
|
||||
{/if}
|
||||
|
||||
<!-- {($event_exhibit_tracking_obj?.responses_json[leads_custom_question.code]) ? $event_exhibit_tracking_obj?.responses_json[leads_custom_question.code].response : null} -->
|
||||
</div>
|
||||
{/each}
|
||||
</fieldset>
|
||||
@@ -475,11 +495,38 @@ async function handle_submit_form_lead_update(event) {
|
||||
{/if}
|
||||
|
||||
|
||||
<div class="event_lead__external_person_id">
|
||||
<div class="border border-slate-500/10 p-2 variant-soft-warning">
|
||||
<div class="event_lead__external_person_id my-4 mt-8">
|
||||
{#if ($events_loc.leads.show_content__email_link_warning)}
|
||||
<div class="border border-slate-500/10 p-2 m-1 variant-soft-warning">
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
$events_loc.leads.show_content__email_link_warning = false;
|
||||
}}
|
||||
class="btn btn-sm variant-soft-warning float-right"
|
||||
>
|
||||
<span class="fas fa-times mx-1"></span>
|
||||
<span class="sr-only">Close</span>
|
||||
</button>
|
||||
This is the email address of the person that originally scanned the badge. This is used to link the lead to the person that scanned the badge. This is useful for tracking who scanned the badge and who the lead is associated with.
|
||||
</div>
|
||||
<label for="event_lead__external_person_id" class="label">Linked to email:
|
||||
{/if}
|
||||
<label for="event_lead__external_person_id" class="label m-1">
|
||||
Linked email:
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
$events_loc.leads.show_content__email_link_warning = !$events_loc.leads.show_content__email_link_warning;
|
||||
}}
|
||||
class="btn btn-sm variant-soft-warning"
|
||||
>
|
||||
<span class="fas fa-info-circle"></span>
|
||||
{#if ($events_loc.leads.show_content__email_link_warning)}
|
||||
<!-- <span class="sr-only">Hide warning</span> -->
|
||||
{:else}
|
||||
<span class="sr-only">Show warning</span>
|
||||
{/if}
|
||||
</button>
|
||||
<input
|
||||
id="event_lead__external_person_id"
|
||||
type="text"
|
||||
@@ -487,7 +534,7 @@ async function handle_submit_form_lead_update(event) {
|
||||
placeholder="Linked to email"
|
||||
value={$event_exhibit_tracking_obj?.external_person_id ?? $events_loc.leads.auth_exhibit_kv[$events_slct.exhibit_id].key}
|
||||
required
|
||||
class="input max-w-64 m-1"
|
||||
class="input w-80 m-1 text-xs"
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user