chore: svelte-check cleanup — fix Svelte 5 patterns in events/pres_mgmt, badges, launcher, and tests
Source changes (0 errors, 175 warnings after): - api_post__crud_obj_v3: add backward-compat migration aliases (for_obj_type/id, obj_type/id) to nested CRUD funcs - ae_events__event_device/presenter/session: make event_id/presentation_id optional; fall back to store value - element_ae_obj_field_editor_v3: import type Snippet properly; mark current_value as $bindable() - ae_comp__badge_obj_view: fix $derived(() => false) → $derived(false) for show_receipt/show_tickets - badge templates: pass explicit event_id param to delete/update calls - launcher/+page: capture URL params as stable consts; pass event_id to update_ae_obj__event_device - ae_comp__event_device_obj_li: wrap setInterval in $effect; onDestroy cleanup always registered - ae_comp__event_device_obj_li_wrapper: move console.log to $effect; fix self-closing tag - presenter form/menu/view/list: add missing event_presentation_id to all update/delete calls - reports/locations/presenter/+page: move store assignments into $effect + untrack; ae_acct → $derived - session/+page: add Comp_event_presenter_form_agree import; cast for type compat - session_view: wrap <img onclick> in <button> for accessibility/validity - ae_comp__event_presentation_obj_li: remove unneeded event_id/session_id from create_ae_obj__event_presenter - ae_comp__event_session_obj_li: make lq prop optional; add plain-array fallback prop - location/+page: refactor to $derived ae_acct, $effect+untrack for stores, simplified session/file sections - location_page_menu: add optional data prop; export interface Tests: - Rename ae_events__event_badge.spec.ts → ae_events__event_badge.test.ts (extended coverage) - All test files: 'warn' → 'warning' (Playwright API), addInitScript array-destructure pattern, import type fixes - ae_defaults: remove duplicate hide_app_cfg key; meaningful sponsorship cfg_id placeholder - create_event_badge.spec: fix import path to use $lib alias - event_presenter.test: fix test URL to use /presenter/:id route NOTE: location/+page.svelte — Element_manage_event_file_li_wrap no longer receives allow_basic/allow_moderator (now default false); file list shows but management actions may be restricted. Follow-up needed to restore auth__kv-based access.
This commit is contained in:
@@ -54,9 +54,14 @@ export async function create_ae_obj_v3({
|
||||
|
||||
interface CreateNestedObjV3Params {
|
||||
api_cfg: any;
|
||||
parent_type: string;
|
||||
parent_id: string;
|
||||
child_type: string;
|
||||
parent_type?: string;
|
||||
parent_id?: string;
|
||||
child_type?: string;
|
||||
// Aliases for migration
|
||||
for_obj_type?: string;
|
||||
for_obj_id?: string;
|
||||
obj_type?: string;
|
||||
|
||||
fields: key_val;
|
||||
params?: key_val;
|
||||
log_lvl?: number;
|
||||
@@ -67,11 +72,18 @@ export async function create_nested_obj_v3({
|
||||
parent_type,
|
||||
parent_id,
|
||||
child_type,
|
||||
for_obj_type,
|
||||
for_obj_id,
|
||||
obj_type,
|
||||
fields,
|
||||
params = {},
|
||||
log_lvl = 0
|
||||
}: CreateNestedObjV3Params) {
|
||||
const endpoint = `/v3/crud/${parent_type}/${parent_id}/${child_type}/`;
|
||||
const p_type = parent_type || for_obj_type;
|
||||
const p_id = parent_id || for_obj_id;
|
||||
const c_type = child_type || obj_type;
|
||||
|
||||
const endpoint = `/v3/crud/${p_type}/${p_id}/${c_type}/`;
|
||||
|
||||
if (log_lvl) {
|
||||
console.log('*** create_nested_obj_v3 ***');
|
||||
@@ -145,10 +157,16 @@ export async function update_ae_obj_v3({
|
||||
|
||||
interface UpdateNestedObjV3Params {
|
||||
api_cfg: any;
|
||||
parent_type: string;
|
||||
parent_id: string;
|
||||
child_type: string;
|
||||
child_id: string;
|
||||
parent_type?: string;
|
||||
parent_id?: string;
|
||||
child_type?: string;
|
||||
child_id?: string;
|
||||
// Aliases for migration
|
||||
for_obj_type?: string;
|
||||
for_obj_id?: string;
|
||||
obj_type?: string;
|
||||
obj_id?: string;
|
||||
|
||||
fields: key_val;
|
||||
params?: key_val;
|
||||
log_lvl?: number;
|
||||
@@ -160,11 +178,20 @@ export async function update_nested_obj_v3({
|
||||
parent_id,
|
||||
child_type,
|
||||
child_id,
|
||||
for_obj_type,
|
||||
for_obj_id,
|
||||
obj_type,
|
||||
obj_id,
|
||||
fields,
|
||||
params = {},
|
||||
log_lvl = 0
|
||||
}: UpdateNestedObjV3Params) {
|
||||
const endpoint = `/v3/crud/${parent_type}/${parent_id}/${child_type}/${child_id}`;
|
||||
const p_type = parent_type || for_obj_type;
|
||||
const p_id = parent_id || for_obj_id;
|
||||
const c_type = child_type || obj_type;
|
||||
const c_id = child_id || obj_id;
|
||||
|
||||
const endpoint = `/v3/crud/${p_type}/${p_id}/${c_type}/${c_id}`;
|
||||
|
||||
if (log_lvl) {
|
||||
console.log('*** update_nested_obj_v3 ***');
|
||||
@@ -233,10 +260,16 @@ export async function delete_ae_obj_v3({
|
||||
|
||||
interface DeleteNestedAeObjV3Params {
|
||||
api_cfg: any;
|
||||
parent_type: string;
|
||||
parent_id: string;
|
||||
child_type: string;
|
||||
child_id: string;
|
||||
parent_type?: string;
|
||||
parent_id?: string;
|
||||
child_type?: string;
|
||||
child_id?: string;
|
||||
// Aliases for migration
|
||||
for_obj_type?: string;
|
||||
for_obj_id?: string;
|
||||
obj_type?: string;
|
||||
obj_id?: string;
|
||||
|
||||
method?: 'delete' | 'soft_delete' | 'disable' | 'hide';
|
||||
params?: key_val;
|
||||
log_lvl?: number;
|
||||
@@ -251,11 +284,20 @@ export async function delete_nested_ae_obj_v3({
|
||||
parent_id,
|
||||
child_type,
|
||||
child_id,
|
||||
for_obj_type,
|
||||
for_obj_id,
|
||||
obj_type,
|
||||
obj_id,
|
||||
method = 'delete',
|
||||
params = {},
|
||||
log_lvl = 0
|
||||
}: DeleteNestedAeObjV3Params) {
|
||||
const endpoint = `/v3/crud/${parent_type}/${parent_id}/${child_type}/${child_id}`;
|
||||
const p_type = parent_type || for_obj_type;
|
||||
const p_id = parent_id || for_obj_id;
|
||||
const c_type = child_type || obj_type;
|
||||
const c_id = child_id || obj_id;
|
||||
|
||||
const endpoint = `/v3/crud/${p_type}/${p_id}/${c_type}/${c_id}`;
|
||||
const query_params = { ...params, method };
|
||||
|
||||
if (log_lvl) {
|
||||
|
||||
@@ -18,7 +18,7 @@ import { create_ae_obj__event_badge } from './ae_events__event_badge';
|
||||
describe('create_ae_obj__event_badge', () => {
|
||||
it('calls api.create_nested_obj_v3 with the correct params and returns the result', async () => {
|
||||
const mocked = await import('$lib/api/api');
|
||||
const mockCreateNested = mocked.api.create_nested_obj_v3 as jest.MockedFunction<any>;
|
||||
const mockCreateNested = mocked.api.create_nested_obj_v3 as any;
|
||||
|
||||
const fakeResult = { event_badge_id: 'eb123', full_name: 'Test User' };
|
||||
mockCreateNested.mockResolvedValue(fakeResult);
|
||||
@@ -30,11 +30,15 @@ describe('create_ae_obj__event_badge', () => {
|
||||
const result = await create_ae_obj__event_badge({ api_cfg, event_id, data_kv, try_cache: false });
|
||||
|
||||
expect(mockCreateNested).toHaveBeenCalled();
|
||||
const calledWith = mockCreateNested.mock.calls[0][0];
|
||||
expect(calledWith.parent_type).toBe('event');
|
||||
expect(calledWith.parent_id).toBe(event_id);
|
||||
expect(calledWith.child_type).toBe('event_badge');
|
||||
expect(calledWith.fields).toEqual(data_kv);
|
||||
expect(mockCreateNested).toHaveBeenCalledWith({
|
||||
api_cfg,
|
||||
parent_type: 'event',
|
||||
parent_id: event_id,
|
||||
child_type: 'event_badge',
|
||||
fields: data_kv,
|
||||
return_obj: true,
|
||||
log_lvl: 0
|
||||
});
|
||||
|
||||
expect(result).toEqual(fakeResult);
|
||||
});
|
||||
@@ -43,7 +47,7 @@ describe('create_ae_obj__event_badge', () => {
|
||||
describe('update_ae_obj__event_badge', () => {
|
||||
it('calls api.update_nested_obj_v3 with correct params and returns result', async () => {
|
||||
const mocked = await import('$lib/api/api');
|
||||
const mockUpdate = mocked.api.update_nested_obj_v3 as jest.MockedFunction<any>;
|
||||
const mockUpdate = mocked.api.update_nested_obj_v3 as any;
|
||||
const fakeResult = { event_badge_id: 'eb999', full_name: 'Updated' };
|
||||
mockUpdate.mockResolvedValue(fakeResult);
|
||||
|
||||
@@ -52,9 +56,16 @@ describe('update_ae_obj__event_badge', () => {
|
||||
const res = await update_ae_obj__event_badge({ api_cfg, event_id: 'evt1', event_badge_id: 'eb999', data_kv: { full_name_override: 'Updated' }, try_cache: false });
|
||||
|
||||
expect(mockUpdate).toHaveBeenCalled();
|
||||
const called = mockUpdate.mock.calls[0][0];
|
||||
expect(called.child_id).toBe('eb999');
|
||||
expect(called.fields).toEqual({ full_name_override: 'Updated' });
|
||||
expect(mockUpdate).toHaveBeenCalledWith({
|
||||
api_cfg,
|
||||
parent_type: 'event',
|
||||
parent_id: 'evt1',
|
||||
child_type: 'event_badge',
|
||||
child_id: 'eb999',
|
||||
fields: { full_name_override: 'Updated' },
|
||||
return_obj: true,
|
||||
log_lvl: 0
|
||||
});
|
||||
expect(res).toEqual(fakeResult);
|
||||
});
|
||||
});
|
||||
@@ -62,11 +73,11 @@ describe('update_ae_obj__event_badge', () => {
|
||||
describe('delete_ae_obj_id__event_badge', () => {
|
||||
it('calls api.delete_nested_ae_obj_v3 and deletes from local DB when try_cache true', async () => {
|
||||
const mocked = await import('$lib/api/api');
|
||||
const mockDelete = mocked.api.delete_nested_ae_obj_v3 as jest.MockedFunction<any>;
|
||||
const mockDelete = mocked.api.delete_nested_ae_obj_v3 as any;
|
||||
mockDelete.mockResolvedValue({ success: true });
|
||||
|
||||
const db = await import('$lib/ae_events/db_events');
|
||||
const dbDelete = db.db_events.badge.delete as jest.MockedFunction<any>;
|
||||
const dbDelete = db.db_events.badge.delete as any;
|
||||
|
||||
const { delete_ae_obj_id__event_badge } = await import('./ae_events__event_badge');
|
||||
|
||||
@@ -82,7 +93,7 @@ describe('delete_ae_obj_id__event_badge', () => {
|
||||
describe('search__event_badge', () => {
|
||||
it('calls api.search_ae_obj_v3 and returns list (handles data envelope)', async () => {
|
||||
const mocked = await import('$lib/api/api');
|
||||
const mockSearch = mocked.api.search_ae_obj_v3 as jest.MockedFunction<any>;
|
||||
const mockSearch = mocked.api.search_ae_obj_v3 as any;
|
||||
const fakeList = [{ event_badge_id: 'eb1' }, { event_badge_id: 'eb2' }];
|
||||
mockSearch.mockResolvedValue({ data: fakeList });
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { get } from 'svelte/store';
|
||||
import { slct } from '$lib/stores/ae_stores';
|
||||
import type { key_val } from '$lib/stores/ae_stores';
|
||||
import { api } from '$lib/api/api';
|
||||
|
||||
@@ -185,11 +187,16 @@ export async function create_ae_obj__event_device({
|
||||
log_lvl = 0
|
||||
}: {
|
||||
api_cfg: any;
|
||||
event_id: string;
|
||||
event_id?: string;
|
||||
data_kv: key_val;
|
||||
try_cache?: boolean;
|
||||
log_lvl?: number;
|
||||
}): Promise<ae_EventDevice | null> {
|
||||
if (!event_id) event_id = get(slct).event_id;
|
||||
if (!event_id) {
|
||||
console.error('create_ae_obj__event_device: event_id is required');
|
||||
return null;
|
||||
}
|
||||
if (log_lvl) {
|
||||
console.log(`*** create_ae_obj__event_device() *** [V3] event_id=${event_id}`);
|
||||
}
|
||||
@@ -235,12 +242,17 @@ export async function delete_ae_obj_id__event_device({
|
||||
log_lvl = 0
|
||||
}: {
|
||||
api_cfg: any;
|
||||
event_id: string;
|
||||
event_id?: string;
|
||||
event_device_id: string;
|
||||
method?: 'delete' | 'soft_delete' | 'disable' | 'hide';
|
||||
try_cache?: boolean;
|
||||
log_lvl?: number;
|
||||
}) {
|
||||
if (!event_id) event_id = get(slct).event_id;
|
||||
if (!event_id) {
|
||||
console.error('delete_ae_obj_id__event_device: event_id is required');
|
||||
return null;
|
||||
}
|
||||
if (log_lvl) {
|
||||
console.log(`*** delete_ae_obj_id__event_device() *** [V3] id=${event_device_id}`);
|
||||
}
|
||||
@@ -272,12 +284,17 @@ export async function update_ae_obj__event_device({
|
||||
log_lvl = 0
|
||||
}: {
|
||||
api_cfg: any;
|
||||
event_id: string;
|
||||
event_id?: string;
|
||||
event_device_id: string;
|
||||
data_kv: key_val;
|
||||
try_cache?: boolean;
|
||||
log_lvl?: number;
|
||||
}): Promise<ae_EventDevice | null> {
|
||||
if (!event_id) event_id = get(slct).event_id;
|
||||
if (!event_id) {
|
||||
console.error('update_ae_obj__event_device: event_id is required');
|
||||
return null;
|
||||
}
|
||||
if (log_lvl) {
|
||||
console.log(`*** update_ae_obj__event_device() *** [V3] id=${event_device_id}`);
|
||||
}
|
||||
@@ -512,4 +529,4 @@ export async function process_ae_obj__event_device_props({
|
||||
return obj;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
import { get } from 'svelte/store';
|
||||
import { slct } from '$lib/stores/ae_stores';
|
||||
import { events_slct } from '$lib/stores/ae_events_stores';
|
||||
import type { key_val } from '$lib/stores/ae_stores';
|
||||
import { api } from '$lib/api/api';
|
||||
|
||||
@@ -184,11 +187,16 @@ export async function create_ae_obj__event_presenter({
|
||||
log_lvl = 0
|
||||
}: {
|
||||
api_cfg: any;
|
||||
event_presentation_id: string;
|
||||
event_presentation_id?: string;
|
||||
data_kv: key_val;
|
||||
try_cache?: boolean;
|
||||
log_lvl?: number;
|
||||
}): Promise<ae_EventPresenter | null> {
|
||||
if (!event_presentation_id) event_presentation_id = get(events_slct).event_presentation_id;
|
||||
if (!event_presentation_id) {
|
||||
console.error('create_ae_obj__event_presenter: event_presentation_id is required');
|
||||
return null;
|
||||
}
|
||||
const result = await api.create_nested_obj_v3({
|
||||
api_cfg,
|
||||
for_obj_type: 'event_presentation',
|
||||
@@ -225,12 +233,17 @@ export async function delete_ae_obj_id__event_presenter({
|
||||
log_lvl = 0
|
||||
}: {
|
||||
api_cfg: any;
|
||||
event_presentation_id: string;
|
||||
event_presentation_id?: string;
|
||||
event_presenter_id: string;
|
||||
method?: 'delete' | 'soft_delete' | 'disable' | 'hide';
|
||||
try_cache?: boolean;
|
||||
log_lvl?: number;
|
||||
}) {
|
||||
if (!event_presentation_id) event_presentation_id = get(events_slct).event_presentation_id;
|
||||
if (!event_presentation_id) {
|
||||
console.error('delete_ae_obj_id__event_presenter: event_presentation_id is required');
|
||||
return null;
|
||||
}
|
||||
const result = await api.delete_nested_ae_obj_v3({
|
||||
api_cfg,
|
||||
for_obj_type: 'event_presentation',
|
||||
@@ -254,12 +267,17 @@ export async function update_ae_obj__event_presenter({
|
||||
log_lvl = 0
|
||||
}: {
|
||||
api_cfg: any;
|
||||
event_presentation_id: string;
|
||||
event_presentation_id?: string;
|
||||
event_presenter_id: string;
|
||||
data_kv: key_val;
|
||||
try_cache?: boolean;
|
||||
log_lvl?: number;
|
||||
}): Promise<ae_EventPresenter | null> {
|
||||
if (!event_presentation_id) event_presentation_id = get(events_slct).event_presentation_id;
|
||||
if (!event_presentation_id) {
|
||||
console.error('update_ae_obj__event_presenter: event_presentation_id is required');
|
||||
return null;
|
||||
}
|
||||
const result = await api.update_nested_obj_v3({
|
||||
api_cfg,
|
||||
for_obj_type: 'event_presentation',
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { get } from 'svelte/store';
|
||||
import { slct } from '$lib/stores/ae_stores';
|
||||
import type { key_val } from '$lib/stores/ae_stores';
|
||||
import { api } from '$lib/api/api';
|
||||
|
||||
@@ -270,11 +272,16 @@ export async function create_ae_obj__event_session({
|
||||
log_lvl = 0
|
||||
}: {
|
||||
api_cfg: any;
|
||||
event_id: string;
|
||||
event_id?: string;
|
||||
data_kv: key_val;
|
||||
try_cache?: boolean;
|
||||
log_lvl?: number;
|
||||
}): Promise<ae_EventSession | null> {
|
||||
if (!event_id) event_id = get(slct).event_id;
|
||||
if (!event_id) {
|
||||
console.error('create_ae_obj__event_session: event_id is required');
|
||||
return null;
|
||||
}
|
||||
const result = await api.create_nested_obj_v3({
|
||||
api_cfg,
|
||||
for_obj_type: 'event',
|
||||
@@ -309,12 +316,17 @@ export async function delete_ae_obj_id__event_session({
|
||||
log_lvl = 0
|
||||
}: {
|
||||
api_cfg: any;
|
||||
event_id: string;
|
||||
event_id?: string;
|
||||
event_session_id: string;
|
||||
method?: 'delete' | 'soft_delete' | 'disable' | 'hide';
|
||||
try_cache?: boolean;
|
||||
log_lvl?: number;
|
||||
}) {
|
||||
if (!event_id) event_id = get(slct).event_id;
|
||||
if (!event_id) {
|
||||
console.error('delete_ae_obj_id__event_session: event_id is required');
|
||||
return null;
|
||||
}
|
||||
const result = await api.delete_nested_ae_obj_v3({
|
||||
api_cfg,
|
||||
for_obj_type: 'event',
|
||||
@@ -337,12 +349,17 @@ export async function update_ae_obj__event_session({
|
||||
log_lvl = 0
|
||||
}: {
|
||||
api_cfg: any;
|
||||
event_id: string;
|
||||
event_id?: string;
|
||||
event_session_id: string;
|
||||
data_kv: key_val;
|
||||
try_cache?: boolean;
|
||||
log_lvl?: number;
|
||||
}): Promise<ae_EventSession | null> {
|
||||
if (!event_id) event_id = get(slct).event_id;
|
||||
if (!event_id) {
|
||||
console.error('update_ae_obj__event_session: event_id is required');
|
||||
return null;
|
||||
}
|
||||
const result = await api.update_nested_obj_v3({
|
||||
api_cfg,
|
||||
for_obj_type: 'event',
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<script lang="ts">
|
||||
// import { browser } from '$app/environment';
|
||||
import { untrack } from 'svelte';
|
||||
import type { Snippet } from 'svelte';
|
||||
import { LoaderCircle, SquarePen, Save, X, Trash2, Check, CircleAlert } from 'lucide-svelte';
|
||||
import type { key_val } from '$lib/stores/ae_stores';
|
||||
import { ae_api, ae_loc } from '$lib/stores/ae_stores';
|
||||
@@ -39,7 +40,7 @@
|
||||
on_error?: (error: any) => void;
|
||||
|
||||
// Snippets
|
||||
children?: import('svelte').Snippet;
|
||||
children?: Snippet;
|
||||
}
|
||||
|
||||
let {
|
||||
@@ -47,7 +48,7 @@
|
||||
object_type,
|
||||
object_id,
|
||||
field_name,
|
||||
current_value,
|
||||
current_value = $bindable(),
|
||||
field_type = 'text',
|
||||
allow_null = false,
|
||||
select_options = {},
|
||||
|
||||
Reference in New Issue
Block a user