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:
Scott Idem
2026-03-05 16:39:29 -05:00
parent c3ec0f88ee
commit cdf56aadcd
4 changed files with 76 additions and 89 deletions

View File

@@ -9,7 +9,7 @@
import { ae_api, ae_loc } from '$lib/stores/ae_stores';
import { events_loc, events_sess } from '$lib/stores/ae_events_stores';
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_custom_questions from './ae_comp__exhibit_custom_questions.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">
<!-- Priority / Payment Toggle -->
<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="font-bold">{$lq__exhibit_obj?.priority ? 'PAID' : 'PENDING'}</div>
</div>
<Element_ae_crud_v2
api_cfg={$ae_api}
<div class="text-[10px] uppercase font-black opacity-40">Payment Status</div>
<Element_ae_obj_field_editor_v3
object_type="event_exhibit"
object_id={exhibit_id}
field_name="priority"
field_type="boolean"
current_field_value={$lq__exhibit_obj?.priority}
object_reload={true}
/>
field_type="checkbox"
current_value={$lq__exhibit_obj?.priority}
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>
<!-- Max Licenses -->
<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>
<Element_ae_crud_v2
api_cfg={$ae_api}
<div class="text-[10px] uppercase font-black opacity-40">Max Licenses</div>
<Element_ae_obj_field_editor_v3
object_type="event_exhibit"
object_id={exhibit_id}
field_name="license_max"
field_type="number"
current_field_value={$lq__exhibit_obj?.license_max}
object_reload={true}
class_li="w-16 font-mono text-right"
current_value={$lq__exhibit_obj?.license_max}
class_li="font-mono"
on_success={() => events_func.load_ae_obj_id__event_exhibit({ api_cfg: $ae_api, exhibit_id })}
/>
</div>
<!-- Small Devices -->
<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>
<Element_ae_crud_v2
api_cfg={$ae_api}
<div class="text-[10px] uppercase font-black opacity-40">Small Devices</div>
<Element_ae_obj_field_editor_v3
object_type="event_exhibit"
object_id={exhibit_id}
field_name="leads_device_sm_qty"
field_type="number"
current_field_value={$lq__exhibit_obj?.leads_device_sm_qty}
object_reload={true}
class_li="w-16 font-mono text-right"
current_value={$lq__exhibit_obj?.leads_device_sm_qty}
class_li="font-mono"
on_success={() => events_func.load_ae_obj_id__event_exhibit({ api_cfg: $ae_api, exhibit_id })}
/>
</div>
<!-- Large Devices -->
<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>
<Element_ae_crud_v2
api_cfg={$ae_api}
<div class="text-[10px] uppercase font-black opacity-40">Large Devices</div>
<Element_ae_obj_field_editor_v3
object_type="event_exhibit"
object_id={exhibit_id}
field_name="leads_device_lg_qty"
field_type="number"
current_field_value={$lq__exhibit_obj?.leads_device_lg_qty}
object_reload={true}
class_li="w-16 font-mono text-right"
current_value={$lq__exhibit_obj?.leads_device_lg_qty}
class_li="font-mono"
on_success={() => events_func.load_ae_obj_id__event_exhibit({ api_cfg: $ae_api, exhibit_id })}
/>
</div>
</div>
@@ -148,17 +137,15 @@
<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}
<Element_ae_obj_field_editor_v3
object_type="event_exhibit"
object_id={exhibit_id}
field_name="name"
field_type="text"
current_field_value={$lq__exhibit_obj?.name}
object_reload={true}
hide_element={false}
current_value={$lq__exhibit_obj?.name}
display_block={true}
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>
</div>
@@ -168,17 +155,15 @@
<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}
<Element_ae_obj_field_editor_v3
object_type="event_exhibit"
object_id={exhibit_id}
field_name="description"
field_type="tiptap"
current_field_value={$lq__exhibit_obj?.description}
object_reload={true}
hide_element={false}
current_value={$lq__exhibit_obj?.description}
display_block={true}
class_li="text-sm"
on_success={() => events_func.load_ae_obj_id__event_exhibit({ api_cfg: $ae_api, exhibit_id })}
/>
</div>
</div>
@@ -205,17 +190,15 @@
</div>
{/if}
<Element_ae_crud_v2
api_cfg={$ae_api}
<Element_ae_obj_field_editor_v3
object_type="event_exhibit"
object_id={exhibit_id}
field_name="staff_passcode"
field_type="text"
current_field_value={$lq__exhibit_obj?.staff_passcode}
object_reload={true}
class_li="font-mono text-xl tracking-widest font-bold"
hide_element={false}
current_value={$lq__exhibit_obj?.staff_passcode}
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>
<Key size="1.5em" class="opacity-20" />