diff --git a/src/lib/ae_events_functions.ts b/src/lib/ae_events_functions.ts
index 750268db..bccc8d48 100644
--- a/src/lib/ae_events_functions.ts
+++ b/src/lib/ae_events_functions.ts
@@ -346,6 +346,38 @@ async function handle_load_ae_obj_li__exhibit({api_cfg, event_id, params={}, try
// }
+async function handle_load_ae_obj_id__exhibit_tracking({api_cfg, exhibit_tracking_id, try_cache=false}) {
+ console.log(`*** handle_load_ae_obj_id__exhibit_tracking() *** exhibit_tracking_id=${exhibit_tracking_id}`);
+
+ let params = {};
+
+ // $events_sess.exhibits.status_load__exhibit_tracking_obj = 'loading';
+ ae_promises.load__event_exhibit_tracking_obj = await api.get_ae_obj_id_crud({
+ api_cfg: api_cfg,
+ obj_type: 'event_exhibit_tracking',
+ obj_id: exhibit_tracking_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 in the API config.
+ params: params,
+ log_lvl: 0
+ })
+ .then(function (exhibit_tracking_obj_get_result) {
+ if (exhibit_tracking_obj_get_result) {
+ // This is expecting a list
+ handle_db_save_ae_obj_li__exhibitor_tracking({obj_type: 'event_exhibit_tracking', obj_li: [exhibit_tracking_obj_get_result]});
+ return exhibit_tracking_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__event_exhibit_tracking_obj;
+}
+
// Updated 2024-03-19
async function handle_load_ae_obj_li__exhibit_tracking({api_cfg, exhibit_id, params={}, try_cache=true}: {api_cfg: any, exhibit_id: any, params: any, try_cache?: boolean}) {
@@ -655,6 +687,7 @@ let export_obj = {
handle_search__event_badge: handle_search__event_badge,
handle_load_ae_obj_id__exhibit: handle_load_ae_obj_id__exhibit,
handle_load_ae_obj_li__exhibit: handle_load_ae_obj_li__exhibit,
+ handle_load_ae_obj_id__exhibit_tracking: handle_load_ae_obj_id__exhibit_tracking,
handle_load_ae_obj_li__exhibit_tracking: handle_load_ae_obj_li__exhibit_tracking,
handle_create_ae_obj__exhibit_tracking: handle_create_ae_obj__exhibit_tracking,
};
diff --git a/src/lib/element_ae_crud.svelte b/src/lib/element_ae_crud.svelte
new file mode 100644
index 00000000..0055c519
--- /dev/null
+++ b/src/lib/element_ae_crud.svelte
@@ -0,0 +1,366 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {#if field_type == 'template'}
+
+ {:else if field_type == 'button'}
+
+ {field_value}
+ {:else if field_type == 'text'}
+
+ {:else if field_type == 'textarea'}
+
+ {:else}
+
+ {/if}
+ {#if allow_null}
+
+ {/if}
+
+
+
+
+
+ {#await ae_promises.api_update__ae_obj}
+
Processing...
+ {:then}
+ {#if patch_result}
+
{patch_result}
+ {:else}
+
+ {/if}
+ {/await}
+
+
+
+
+
+
diff --git a/src/lib/element_input_v2.svelte b/src/lib/element_input_v2.svelte
new file mode 100644
index 00000000..cbdaea00
--- /dev/null
+++ b/src/lib/element_input_v2.svelte
@@ -0,0 +1,574 @@
+
+
+
+
+{#if type === 'email' || type === 'date' || type === 'number' || type === 'tel' || type === 'text' || type === 'time' || type === 'url' }
+ {#if (content_layout == 'label_start' && label)}
+
+ {/if}
+
+
+
+ {#if (content_layout != 'label_start' && label)}
+
+ {/if}
+
+
{description}
+
+{:else if type === 'date_time' }
+ {#if (content_layout == 'label_start' && label)}
+
{label}
+
+ {/if}
+
+
+ {#if label_begin}
+
+ {/if}
+
+
+
+ {#if !label_begin}
+
+ {/if}
+
+
+
+ {#if label_begin}
+
+ {/if}
+
+
+
+ {#if !label_begin}
+
+ {/if}
+
+
+
+ {#if (content_layout != 'label_start' && label)}
+
{label}
+
+ {/if}
+
+
{description}
+
+{:else if type === 'checkbox' }
+ {#if checkbox_none}
+ {#if !value}
+ {checked='checked'}
+ {/if}
+
+ {/if}
+ {#if checkbox_li.length}
+ {#if (content_layout == 'label_start' && label)}
+
{label}
+ {/if}
+
+ {#each Object.entries(checkbox_li) as [li_key, li_value]}
+ {#if li_key.toString() === value.toString() }
+
+ {:else}
+
+ {/if}
+ {/each}
+
+ {#if (content_layout != 'label_start' && label)}
+
{label}
+ {/if}
+ {:else}
+ {#if label_begin}
+
+ {/if}
+
+
+ {/if}
+
+
{description}
+
+{:else if type === 'radio' }
+ {#if radio_none}
+ {#if !value}
+ {checked='checked'}
+ {/if}
+
+ {/if}
+ {#if radio_li}
+ {#if (content_layout == 'label_start' && label)}
+
{label}:
+ {/if}
+
+
+ {#each Object.entries(radio_li) as [li_key, li_value]}
+ {#if value === null}
+
+ {:else if ( li_key.toString() === value.toString() || (li_key == 'true' && value == true) || (li_key == 'false' && value == false) ) }
+
+ {:else}
+
+ {/if}
+
+
+ {/each}
+
+
+ {#if !label_begin}
+
{label}:
+ {/if}
+ {:else}
+ {#if label_begin}
+
+ {/if}
+
+
+
+ {#if !label_begin}
+
+ {/if}
+ {/if}
+
+
{description}
+
+{:else if type === 'textarea'}
+ {#if label_begin}
+
+ {/if}
+
+ {#if value_new_line}
{/if}
+
+
+
+ {#if !label_begin}
+
+ {/if}
+
+
{description}
+
+{:else if type === 'hidden'}
+
+
+{:else if type === 'select'}
+ {#if label_begin}
+
+ {/if}
+
+
+
+ {#if !label_begin}
+
+ {/if}
+
+
{description}
+{/if}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/routes/events_leads/exhibit/[slug]/leads_list.svelte b/src/routes/events_leads/exhibit/[slug]/leads_list.svelte
index 8b150d86..6320db2a 100644
--- a/src/routes/events_leads/exhibit/[slug]/leads_list.svelte
+++ b/src/routes/events_leads/exhibit/[slug]/leads_list.svelte
@@ -28,37 +28,49 @@ let event_exhibit_obj = liveQuery(
// .where('event_exhibit_id_random')
// .equals($events_slct.exhibit_id)
// // .above(0)
-// .sortBy('created_on') // Use sortBy() instead of orderBy(). toArray() is also not needed???
+// .sortBy('created_on')
// // .orderBy('name')
// // .offset(10).limit(5)
// // .toArray()
// );
-
// Testing examples:
+// Use sortBy() instead of orderBy()
+// toArray() is also not needed???
+
// .where({event_exhibit_id_random: $events_slct.exhibit_id, enable: true, hide: false})
// .where({event_exhibit_id_random: $events_slct.exhibit_id})
// .where('event_exhibit_id_random').equals($events_slct.exhibit_id)
// .and('enable').equals(true)
// .reverse()
-// .sortBy('updated_on') // Use sortBy() instead of orderBy().
-
+// .sortBy('updated_on')
// .reverse()
-// .sortBy('created_on') // Use sortBy() instead of orderBy(). toArray() is also not needed???
+// .sortBy('created_on')
// .toArray()
+// .sortBy('created_on')
+// .reverse()
+// .sortBy('priority') // , 'sort', 'created_on', 'updated_on')
+// () => db_events.exhibits.toArray()
// Version 2: This needs work...
// 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, sort, created_on DESC, updated_on DESC
-let event_exhibit_tracking_obj_li = liveQuery(
- // () => db_events.exhibits.toArray()
+// The final results should be sorted by: priority DESC, sort ASC, created_on DESC, updated_on DESC
+$: event_exhibit_tracking_obj_li = liveQuery(
() => db_events.exhibit_tracking
.where({event_exhibit_id_random: $events_slct.exhibit_id})
- // .and('enable').equals(true)
+ .and((x) => (x.enable === true && x.hide === false))
.reverse()
- .sortBy('created_on') // Use sortBy() instead of orderBy().
+ .sortBy('priority')
+ // .orderBy("priority")
+ // .orderBy("sort")
+ // .orderBy("created_on", "desc")
+ // .orderBy("updated_on", "desc")
+ // .sortBy('priority') // Initial sort
+ // .thenBy('created_on', 'desc')
+ // .thenBy('sort') // Secondary sort
+ // .thenBy('updated_on', 'desc')
);
diff --git a/src/routes/events_leads/exhibit/[slug]/leads_manage.svelte b/src/routes/events_leads/exhibit/[slug]/leads_manage.svelte
index 279287e6..30b9db96 100644
--- a/src/routes/events_leads/exhibit/[slug]/leads_manage.svelte
+++ b/src/routes/events_leads/exhibit/[slug]/leads_manage.svelte
@@ -1,19 +1,32 @@