refactor(crud): migrate v2 component usages to field-editor-v3
Replaces all active Element_ae_crud_v2 usages with Element_ae_obj_field_editor_v3, and direct core_func.update_ae_obj_id_crud_v2 calls with api.update_ae_obj_v3. Adds 'number' field_type to v3 editor. All on_success callbacks trigger SWR refresh via events_func load functions so liveQuery updates Dexie correctly. - element_ae_obj_field_editor_v3: add 'number' input type - ae_comp__event_session_obj_li: replace core_func v2 API calls + dead import - ae_comp__event_location_obj_li: migrate 2x Element_ae_crud_v2 (name, description) - ae_tab__manage: migrate 7x Element_ae_crud_v2 (priority/checkbox, numbers, text, tiptap) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
// Value Handling
|
// Value Handling
|
||||||
current_value: any;
|
current_value: any;
|
||||||
field_type?: 'text' | 'textarea' | 'select' | 'tiptap' | 'checkbox' | 'date' | 'datetime';
|
field_type?: 'text' | 'textarea' | 'select' | 'tiptap' | 'checkbox' | 'date' | 'datetime' | 'number';
|
||||||
allow_null?: boolean;
|
allow_null?: boolean;
|
||||||
|
|
||||||
// Select Options
|
// Select Options
|
||||||
@@ -244,6 +244,14 @@
|
|||||||
<input type="date" bind:value={draft_value} class="input" />
|
<input type="date" bind:value={draft_value} class="input" />
|
||||||
{:else if field_type === 'datetime'}
|
{:else if field_type === 'datetime'}
|
||||||
<input type="datetime-local" bind:value={draft_value} class="input" />
|
<input type="datetime-local" bind:value={draft_value} class="input" />
|
||||||
|
{:else if field_type === 'number'}
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
bind:value={draft_value}
|
||||||
|
class="input"
|
||||||
|
{placeholder}
|
||||||
|
onkeydown={(e) => e.key === 'Enter' && handle_patch()}
|
||||||
|
/>
|
||||||
{:else}
|
{:else}
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
import { ae_api, ae_loc } from '$lib/stores/ae_stores';
|
import { ae_api, ae_loc } from '$lib/stores/ae_stores';
|
||||||
import { events_loc, events_sess } from '$lib/stores/ae_events_stores';
|
import { events_loc, events_sess } from '$lib/stores/ae_events_stores';
|
||||||
import { events_func } from '$lib/ae_events_functions';
|
import { events_func } from '$lib/ae_events_functions';
|
||||||
import Element_ae_crud_v2 from '$lib/elements/element_ae_crud_v2.svelte';
|
import Element_ae_obj_field_editor_v3 from '$lib/elements/element_ae_obj_field_editor_v3.svelte';
|
||||||
import Comp_exhibit_license_list from './ae_comp__exhibit_license_list.svelte';
|
import Comp_exhibit_license_list from './ae_comp__exhibit_license_list.svelte';
|
||||||
import Comp_exhibit_custom_questions from './ae_comp__exhibit_custom_questions.svelte';
|
import Comp_exhibit_custom_questions from './ae_comp__exhibit_custom_questions.svelte';
|
||||||
import Comp_exhibit_payment from './ae_comp__exhibit_payment.svelte';
|
import Comp_exhibit_payment from './ae_comp__exhibit_payment.svelte';
|
||||||
@@ -66,69 +66,58 @@
|
|||||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
||||||
<!-- Priority / Payment Toggle -->
|
<!-- Priority / Payment Toggle -->
|
||||||
<div class="card p-3 variant-soft flex items-center justify-between">
|
<div class="card p-3 variant-soft flex items-center justify-between">
|
||||||
<div>
|
<div class="text-[10px] uppercase font-black opacity-40">Payment Status</div>
|
||||||
<div class="text-[10px] uppercase font-black opacity-40">Payment Status</div>
|
<Element_ae_obj_field_editor_v3
|
||||||
<div class="font-bold">{$lq__exhibit_obj?.priority ? 'PAID' : 'PENDING'}</div>
|
|
||||||
</div>
|
|
||||||
<Element_ae_crud_v2
|
|
||||||
api_cfg={$ae_api}
|
|
||||||
object_type="event_exhibit"
|
object_type="event_exhibit"
|
||||||
object_id={exhibit_id}
|
object_id={exhibit_id}
|
||||||
field_name="priority"
|
field_name="priority"
|
||||||
field_type="boolean"
|
field_type="checkbox"
|
||||||
current_field_value={$lq__exhibit_obj?.priority}
|
current_value={$lq__exhibit_obj?.priority}
|
||||||
object_reload={true}
|
on_success={() => events_func.load_ae_obj_id__event_exhibit({ api_cfg: $ae_api, exhibit_id })}
|
||||||
/>
|
>
|
||||||
|
<div class="font-bold">{$lq__exhibit_obj?.priority ? 'PAID' : 'PENDING'}</div>
|
||||||
|
</Element_ae_obj_field_editor_v3>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Max Licenses -->
|
<!-- Max Licenses -->
|
||||||
<div class="card p-3 variant-soft flex items-center justify-between">
|
<div class="card p-3 variant-soft flex items-center justify-between">
|
||||||
<div>
|
<div class="text-[10px] uppercase font-black opacity-40">Max Licenses</div>
|
||||||
<div class="text-[10px] uppercase font-black opacity-40">Max Licenses</div>
|
<Element_ae_obj_field_editor_v3
|
||||||
</div>
|
|
||||||
<Element_ae_crud_v2
|
|
||||||
api_cfg={$ae_api}
|
|
||||||
object_type="event_exhibit"
|
object_type="event_exhibit"
|
||||||
object_id={exhibit_id}
|
object_id={exhibit_id}
|
||||||
field_name="license_max"
|
field_name="license_max"
|
||||||
field_type="number"
|
field_type="number"
|
||||||
current_field_value={$lq__exhibit_obj?.license_max}
|
current_value={$lq__exhibit_obj?.license_max}
|
||||||
object_reload={true}
|
class_li="font-mono"
|
||||||
class_li="w-16 font-mono text-right"
|
on_success={() => events_func.load_ae_obj_id__event_exhibit({ api_cfg: $ae_api, exhibit_id })}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Small Devices -->
|
<!-- Small Devices -->
|
||||||
<div class="card p-3 variant-soft flex items-center justify-between">
|
<div class="card p-3 variant-soft flex items-center justify-between">
|
||||||
<div>
|
<div class="text-[10px] uppercase font-black opacity-40">Small Devices</div>
|
||||||
<div class="text-[10px] uppercase font-black opacity-40">Small Devices</div>
|
<Element_ae_obj_field_editor_v3
|
||||||
</div>
|
|
||||||
<Element_ae_crud_v2
|
|
||||||
api_cfg={$ae_api}
|
|
||||||
object_type="event_exhibit"
|
object_type="event_exhibit"
|
||||||
object_id={exhibit_id}
|
object_id={exhibit_id}
|
||||||
field_name="leads_device_sm_qty"
|
field_name="leads_device_sm_qty"
|
||||||
field_type="number"
|
field_type="number"
|
||||||
current_field_value={$lq__exhibit_obj?.leads_device_sm_qty}
|
current_value={$lq__exhibit_obj?.leads_device_sm_qty}
|
||||||
object_reload={true}
|
class_li="font-mono"
|
||||||
class_li="w-16 font-mono text-right"
|
on_success={() => events_func.load_ae_obj_id__event_exhibit({ api_cfg: $ae_api, exhibit_id })}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Large Devices -->
|
<!-- Large Devices -->
|
||||||
<div class="card p-3 variant-soft flex items-center justify-between">
|
<div class="card p-3 variant-soft flex items-center justify-between">
|
||||||
<div>
|
<div class="text-[10px] uppercase font-black opacity-40">Large Devices</div>
|
||||||
<div class="text-[10px] uppercase font-black opacity-40">Large Devices</div>
|
<Element_ae_obj_field_editor_v3
|
||||||
</div>
|
|
||||||
<Element_ae_crud_v2
|
|
||||||
api_cfg={$ae_api}
|
|
||||||
object_type="event_exhibit"
|
object_type="event_exhibit"
|
||||||
object_id={exhibit_id}
|
object_id={exhibit_id}
|
||||||
field_name="leads_device_lg_qty"
|
field_name="leads_device_lg_qty"
|
||||||
field_type="number"
|
field_type="number"
|
||||||
current_field_value={$lq__exhibit_obj?.leads_device_lg_qty}
|
current_value={$lq__exhibit_obj?.leads_device_lg_qty}
|
||||||
object_reload={true}
|
class_li="font-mono"
|
||||||
class_li="w-16 font-mono text-right"
|
on_success={() => events_func.load_ae_obj_id__event_exhibit({ api_cfg: $ae_api, exhibit_id })}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -148,17 +137,15 @@
|
|||||||
<label class="label mb-2">
|
<label class="label mb-2">
|
||||||
<span class="text-xs uppercase font-black opacity-40 tracking-widest">Exhibitor Name</span>
|
<span class="text-xs uppercase font-black opacity-40 tracking-widest">Exhibitor Name</span>
|
||||||
</label>
|
</label>
|
||||||
<Element_ae_crud_v2
|
<Element_ae_obj_field_editor_v3
|
||||||
api_cfg={$ae_api}
|
|
||||||
object_type="event_exhibit"
|
object_type="event_exhibit"
|
||||||
object_id={exhibit_id}
|
object_id={exhibit_id}
|
||||||
field_name="name"
|
field_name="name"
|
||||||
field_type="text"
|
field_type="text"
|
||||||
current_field_value={$lq__exhibit_obj?.name}
|
current_value={$lq__exhibit_obj?.name}
|
||||||
object_reload={true}
|
|
||||||
hide_element={false}
|
|
||||||
display_block={true}
|
display_block={true}
|
||||||
class_li="font-bold text-xl"
|
class_li="font-bold text-xl"
|
||||||
|
on_success={() => events_func.load_ae_obj_id__event_exhibit({ api_cfg: $ae_api, exhibit_id })}
|
||||||
/>
|
/>
|
||||||
<p class="text-[10px] opacity-50 mt-2 italic">This name is visible to attendees when you scan their badges.</p>
|
<p class="text-[10px] opacity-50 mt-2 italic">This name is visible to attendees when you scan their badges.</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -168,17 +155,15 @@
|
|||||||
<label class="label mb-2">
|
<label class="label mb-2">
|
||||||
<span class="text-xs uppercase font-black opacity-40 tracking-widest">Booth Description / Promo</span>
|
<span class="text-xs uppercase font-black opacity-40 tracking-widest">Booth Description / Promo</span>
|
||||||
</label>
|
</label>
|
||||||
<Element_ae_crud_v2
|
<Element_ae_obj_field_editor_v3
|
||||||
api_cfg={$ae_api}
|
|
||||||
object_type="event_exhibit"
|
object_type="event_exhibit"
|
||||||
object_id={exhibit_id}
|
object_id={exhibit_id}
|
||||||
field_name="description"
|
field_name="description"
|
||||||
field_type="tiptap"
|
field_type="tiptap"
|
||||||
current_field_value={$lq__exhibit_obj?.description}
|
current_value={$lq__exhibit_obj?.description}
|
||||||
object_reload={true}
|
|
||||||
hide_element={false}
|
|
||||||
display_block={true}
|
display_block={true}
|
||||||
class_li="text-sm"
|
class_li="text-sm"
|
||||||
|
on_success={() => events_func.load_ae_obj_id__event_exhibit({ api_cfg: $ae_api, exhibit_id })}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -205,17 +190,15 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<Element_ae_crud_v2
|
<Element_ae_obj_field_editor_v3
|
||||||
api_cfg={$ae_api}
|
|
||||||
object_type="event_exhibit"
|
object_type="event_exhibit"
|
||||||
object_id={exhibit_id}
|
object_id={exhibit_id}
|
||||||
field_name="staff_passcode"
|
field_name="staff_passcode"
|
||||||
field_type="text"
|
field_type="text"
|
||||||
current_field_value={$lq__exhibit_obj?.staff_passcode}
|
current_value={$lq__exhibit_obj?.staff_passcode}
|
||||||
object_reload={true}
|
|
||||||
class_li="font-mono text-xl tracking-widest font-bold"
|
|
||||||
hide_element={false}
|
|
||||||
display_block={true}
|
display_block={true}
|
||||||
|
class_li="font-mono text-xl tracking-widest font-bold"
|
||||||
|
on_success={() => events_func.load_ae_obj_id__event_exhibit({ api_cfg: $ae_api, exhibit_id })}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<Key size="1.5em" class="opacity-20" />
|
<Key size="1.5em" class="opacity-20" />
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
import { events_func } from '$lib/ae_events_functions';
|
import { events_func } from '$lib/ae_events_functions';
|
||||||
|
|
||||||
import Comp_event_session_obj_li from '../../../ae_comp__event_session_obj_li_wrapper.svelte';
|
import Comp_event_session_obj_li from '../../../ae_comp__event_session_obj_li_wrapper.svelte';
|
||||||
import Element_ae_crud_v2 from '$lib/elements/element_ae_crud_v2.svelte';
|
import Element_ae_obj_field_editor_v3 from '$lib/elements/element_ae_obj_field_editor_v3.svelte';
|
||||||
import Comp_event_device_obj_li from '../device/device/ae_comp__event_device_obj_li_wrapper.svelte';
|
import Comp_event_device_obj_li from '../device/device/ae_comp__event_device_obj_li_wrapper.svelte';
|
||||||
|
|
||||||
// if (log_lvl) {
|
// if (log_lvl) {
|
||||||
@@ -138,28 +138,23 @@
|
|||||||
class="h5 rounded-md p-2 bg-gray-200 flex flex-row gap-1 items-center justify-between"
|
class="h5 rounded-md p-2 bg-gray-200 flex flex-row gap-1 items-center justify-between"
|
||||||
>
|
>
|
||||||
<span>
|
<span>
|
||||||
<Element_ae_crud_v2
|
<Element_ae_obj_field_editor_v3
|
||||||
api_cfg={$ae_api}
|
|
||||||
object_type={'event_location'}
|
object_type={'event_location'}
|
||||||
object_id={event_location_obj?.event_location_id}
|
object_id={event_location_obj?.event_location_id}
|
||||||
object_reload={true}
|
|
||||||
field_name={'name'}
|
field_name={'name'}
|
||||||
field_type={'text'}
|
field_type={'text'}
|
||||||
current_field_value={event_location_obj?.name}
|
current_value={event_location_obj?.name}
|
||||||
allow_null={false}
|
allow_null={false}
|
||||||
hide_element={!$ae_loc.edit_mode}
|
|
||||||
hide_edit_btn={false}
|
|
||||||
outline_element={false}
|
|
||||||
display_block={false}
|
display_block={false}
|
||||||
display_absolute_edit={false}
|
display_absolute_edit={false}
|
||||||
class_li={'m-1'}
|
class_li={'m-1'}
|
||||||
|
on_success={() => events_func.load_ae_obj_id__event_location({ api_cfg: $ae_api, event_location_id: event_location_obj.event_location_id })}
|
||||||
>
|
>
|
||||||
<!-- <strong class="text-sm">Name/Title:</strong> -->
|
|
||||||
<span
|
<span
|
||||||
class="fas fa-map-marker-alt m-1 text-neutral-800/80"
|
class="fas fa-map-marker-alt m-1 text-neutral-800/80"
|
||||||
></span>
|
></span>
|
||||||
"{event_location_obj?.name ?? '-- not set --'}"
|
"{event_location_obj?.name ?? '-- not set --'}"
|
||||||
</Element_ae_crud_v2>
|
</Element_ae_obj_field_editor_v3>
|
||||||
|
|
||||||
<!-- "{event_location_obj.name}" -->
|
<!-- "{event_location_obj.name}" -->
|
||||||
{#if event_location_obj?.code && !$events_loc.pres_mgmt?.hide__location_code}
|
{#if event_location_obj?.code && !$events_loc.pres_mgmt?.hide__location_code}
|
||||||
@@ -320,23 +315,18 @@
|
|||||||
{/if}
|
{/if}
|
||||||
</Element_ae_crud> -->
|
</Element_ae_crud> -->
|
||||||
|
|
||||||
<Element_ae_crud_v2
|
<Element_ae_obj_field_editor_v3
|
||||||
api_cfg={$ae_api}
|
|
||||||
object_type={'event_location'}
|
object_type={'event_location'}
|
||||||
object_id={event_location_obj?.event_location_id}
|
object_id={event_location_obj?.event_location_id}
|
||||||
object_reload={true}
|
|
||||||
field_name={'description'}
|
field_name={'description'}
|
||||||
field_type={'textarea'}
|
field_type={'textarea'}
|
||||||
current_field_value={event_location_obj?.description}
|
current_value={event_location_obj?.description}
|
||||||
allow_null={true}
|
allow_null={true}
|
||||||
hide_element={!$ae_loc.edit_mode}
|
|
||||||
hide_edit_btn={!$ae_loc.trusted_access ||
|
|
||||||
!$ae_loc.edit_mode}
|
|
||||||
outline_element={false}
|
|
||||||
display_block={false}
|
display_block={false}
|
||||||
display_absolute_edit={false}
|
display_absolute_edit={false}
|
||||||
textarea_rows={15}
|
textarea_rows={15}
|
||||||
class_li={'m-1'}
|
class_li={'m-1'}
|
||||||
|
on_success={() => events_func.load_ae_obj_id__event_location({ api_cfg: $ae_api, event_location_id: event_location_obj.event_location_id })}
|
||||||
>
|
>
|
||||||
<strong class="text-sm"> Description: </strong>
|
<strong class="text-sm"> Description: </strong>
|
||||||
|
|
||||||
@@ -388,7 +378,7 @@
|
|||||||
{:else}
|
{:else}
|
||||||
{@html ae_snip.html__not_set}
|
{@html ae_snip.html__not_set}
|
||||||
{/if}
|
{/if}
|
||||||
</Element_ae_crud_v2>
|
</Element_ae_obj_field_editor_v3>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{#if !$events_loc.pres_mgmt.show_content__location_devices_sessions || $events_loc.pres_mgmt.show_content__location_devices_sessions == 'default' || $events_loc.pres_mgmt.show_content__location_devices_sessions == 'sessions'}
|
{#if !$events_loc.pres_mgmt.show_content__location_devices_sessions || $events_loc.pres_mgmt.show_content__location_devices_sessions == 'default' || $events_loc.pres_mgmt.show_content__location_devices_sessions == 'sessions'}
|
||||||
|
|||||||
@@ -50,12 +50,12 @@
|
|||||||
Clock
|
Clock
|
||||||
} from 'lucide-svelte';
|
} from 'lucide-svelte';
|
||||||
|
|
||||||
import Element_ae_crud_v2 from '$lib/elements/element_ae_crud_v2.svelte';
|
import { api } from '$lib/api/api';
|
||||||
import Comp_event_presenter_obj_li from './[event_id]/(pres_mgmt)/presenter/ae_comp__event_presenter_obj_li_wrapper.svelte';
|
import Comp_event_presenter_obj_li from './[event_id]/(pres_mgmt)/presenter/ae_comp__event_presenter_obj_li_wrapper.svelte';
|
||||||
import Element_manage_event_file_li from '$lib/elements/element_manage_event_file_li_direct.svelte';
|
import Element_manage_event_file_li from '$lib/elements/element_manage_event_file_li_direct.svelte';
|
||||||
import Comp_event_session_alert from './[event_id]/(pres_mgmt)/session/ae_comp__event_session_alert.svelte';
|
import Comp_event_session_alert from './[event_id]/(pres_mgmt)/session/ae_comp__event_session_alert.svelte';
|
||||||
|
|
||||||
import { core_func } from '$lib/ae_core/ae_core_functions';
|
import { events_func } from '$lib/ae_events_functions';
|
||||||
import { ae_loc, ae_api, ae_snip } from '$lib/stores/ae_stores';
|
import { ae_loc, ae_api, ae_snip } from '$lib/stores/ae_stores';
|
||||||
import {
|
import {
|
||||||
events_loc,
|
events_loc,
|
||||||
@@ -330,16 +330,19 @@
|
|||||||
class="btn btn-icon btn-xs {session_obj?.hide
|
class="btn btn-icon btn-xs {session_obj?.hide
|
||||||
? 'preset-tonal-error'
|
? 'preset-tonal-error'
|
||||||
: 'preset-tonal-secondary'}"
|
: 'preset-tonal-secondary'}"
|
||||||
onclick={() =>
|
onclick={async () => {
|
||||||
core_func.update_ae_obj_id_crud_v2({
|
await api.update_ae_obj_v3({
|
||||||
api_cfg: $ae_api,
|
api_cfg: $ae_api,
|
||||||
object_type: 'event_session',
|
obj_type: 'event_session',
|
||||||
object_id:
|
obj_id: session_obj.event_session_id,
|
||||||
session_obj.event_session_id,
|
fields: { hide: !session_obj.hide },
|
||||||
field_name: 'hide',
|
|
||||||
new_field_value: !session_obj.hide,
|
|
||||||
log_lvl: 1
|
log_lvl: 1
|
||||||
})}
|
});
|
||||||
|
events_func.load_ae_obj_id__event_session({
|
||||||
|
api_cfg: $ae_api,
|
||||||
|
event_session_id: session_obj.event_session_id
|
||||||
|
});
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
{#if session_obj?.hide}<EyeOff
|
{#if session_obj?.hide}<EyeOff
|
||||||
size="1.2em"
|
size="1.2em"
|
||||||
@@ -351,16 +354,19 @@
|
|||||||
class="btn btn-icon btn-xs {session_obj?.alert
|
class="btn btn-icon btn-xs {session_obj?.alert
|
||||||
? 'preset-tonal-warning'
|
? 'preset-tonal-warning'
|
||||||
: 'preset-tonal-surface'}"
|
: 'preset-tonal-surface'}"
|
||||||
onclick={() =>
|
onclick={async () => {
|
||||||
core_func.update_ae_obj_id_crud_v2({
|
await api.update_ae_obj_v3({
|
||||||
api_cfg: $ae_api,
|
api_cfg: $ae_api,
|
||||||
object_type: 'event_session',
|
obj_type: 'event_session',
|
||||||
object_id:
|
obj_id: session_obj.event_session_id,
|
||||||
session_obj.event_session_id,
|
fields: { alert: !session_obj.alert },
|
||||||
field_name: 'alert',
|
|
||||||
new_field_value: !session_obj.alert,
|
|
||||||
log_lvl: 1
|
log_lvl: 1
|
||||||
})}
|
});
|
||||||
|
events_func.load_ae_obj_id__event_session({
|
||||||
|
api_cfg: $ae_api,
|
||||||
|
event_session_id: session_obj.event_session_id
|
||||||
|
});
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
{#if session_obj?.alert}<Bell
|
{#if session_obj?.alert}<Bell
|
||||||
size="1.2em"
|
size="1.2em"
|
||||||
|
|||||||
Reference in New Issue
Block a user