From 8e61bd0ba1ec991d4bcad31dcd0544ed091caaae Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Tue, 24 Mar 2026 10:42:40 -0400 Subject: [PATCH] More and more code removal and clean up --- README.md | 2 +- documentation/AE__Components.md | 2 +- documentation/GUIDE__Development.md | 12 +- ...JECT__AE_Object_Field_Editor_V3_upgrade.md | 4 +- src/lib/ae_api/api_get__data_store.ts | 4 +- src/lib/ae_core/core__crud_generic.ts | 351 ------------------ src/lib/ae_core/core__data_store.ts | 6 +- src/lib/api/api.ts | 4 +- ...lte => element_ae_obj_field_editor.svelte} | 4 +- ...re_v3.svelte => element_data_store.svelte} | 4 +- src/routes/+page.svelte | 2 +- .../core/people/[person_id]/+page.svelte | 2 +- src/routes/core/person_view.svelte | 34 +- src/routes/events/+layout.svelte | 2 +- .../[exhibit_id]/ae_tab__manage.svelte | 18 +- .../lead/[exhibit_tracking_id]/+page.svelte | 12 +- .../ae_comp__event_device_obj_li.svelte | 14 +- .../(pres_mgmt)/event_page_menu.svelte | 2 +- .../location_page_menu.svelte | 2 +- .../[event_location_id]/location_view.svelte | 26 +- .../(pres_mgmt)/locations/+page.svelte | 2 +- .../ae_comp__event_location_obj_li.svelte | 10 +- .../locations/locations_page_menu.svelte | 2 +- .../presenter/[presenter_id]/+page.svelte | 2 +- ...ae_comp__event_presenter_form_agree.svelte | 2 +- .../[presenter_id]/presenter_page_menu.svelte | 2 +- .../[presenter_id]/presenter_view.svelte | 67 ++-- .../reports/event_reports_page_menu.svelte | 2 +- ..._comp__event_session_poc_form_agree.svelte | 2 +- .../[session_id]/session_page_menu.svelte | 2 +- .../session/[session_id]/session_view.svelte | 6 +- .../ae_comp__event_presentation_obj_li.svelte | 22 +- .../(idaa)/recovery_meetings/+page.svelte | 2 +- src/routes/idaa/+layout.svelte | 2 +- src/routes/journals/+layout.svelte | 2 +- .../ae_obj_field_editor_v3/+page.svelte | 4 +- src/routes/testing/data_store_v3/+page.svelte | 2 +- 37 files changed, 144 insertions(+), 496 deletions(-) delete mode 100644 src/lib/ae_core/core__crud_generic.ts rename src/lib/elements/{element_ae_obj_field_editor_v3.svelte => element_ae_obj_field_editor.svelte} (99%) rename src/lib/elements/{element_data_store_v3.svelte => element_data_store.svelte} (99%) diff --git a/README.md b/README.md index 01537f5d..53c7c370 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,7 @@ Built on the Events object. Developer sandbox pages — not for production use. -- `/testing/ae_obj_field_editor_v3/` — V3 field editor playground +- `/testing/ae_obj_field_editor/` — V3 field editor playground - `/testing/data_store_v3/` — Data store V3 playground - `/testing/editor_test/` — CodeMirror / TipTap editor tests - `/testing/hosted_files/` — File upload tests diff --git a/documentation/AE__Components.md b/documentation/AE__Components.md index eceb2d67..45114b9a 100644 --- a/documentation/AE__Components.md +++ b/documentation/AE__Components.md @@ -62,7 +62,7 @@ These are reusable components that provide common functionalities across differe - Bindings: `bind:trigger`, `bind:show_spinner`, `bind:show_percent`. - Status: `started`, `downloading`, `finished`. - **`data_store`**: Component for interacting with data stores. -- **`element_ae_obj_field_editor_v3`**: Standard single-field inline editor. Replaces retired `ae_crud` v1/v2 components. +- **`element_ae_obj_field_editor`**: Standard single-field inline editor. Replaces retired `ae_crud` v1/v2 components. - Props: `object_type`, `object_id`, `field_name`, `field_type`, `current_value` - Field types: `text`, `textarea`, `select`, `tiptap`, `checkbox`, `date`, `datetime`, `number` - Callbacks: `on_success`, `on_error` diff --git a/documentation/GUIDE__Development.md b/documentation/GUIDE__Development.md index 88511f0a..81ab4c4d 100644 --- a/documentation/GUIDE__Development.md +++ b/documentation/GUIDE__Development.md @@ -53,12 +53,12 @@ You are not working in a vacuum. Coordinate with the Backend Agent via MCP tools | `documentation/PROJECT__AE_Events_Launcher_Native_integration.md` | Electron/Launcher reference | | `tests/README.md` | Playwright test guide — shared helpers, hard-won lessons, demo IDs | -## 6. Inline Field Editing — `element_ae_obj_field_editor_v3` +## 6. Inline Field Editing — `element_ae_obj_field_editor` The standard component for single-field inline editing throughout the platform. Wraps a `PATCH /v3/crud/{obj_type}/{obj_id}` call behind a click-to-edit UI that respects `$ae_loc.edit_mode`. ```svelte -import Element_ae_obj_field_editor_v3 from '$lib/elements/element_ae_obj_field_editor_v3.svelte'; +import Element_ae_obj_field_editor from '$lib/elements/element_ae_obj_field_editor.svelte'; ``` ### Basic usage — text field with custom display @@ -66,7 +66,7 @@ import Element_ae_obj_field_editor_v3 from '$lib/elements/element_ae_obj_field_e Wrap the display content in the default snippet. The component renders it in view mode and swaps in the input on edit. ```svelte - events_func.load_ae_obj_id__event_session({ api_cfg: $ae_api, event_session_id: session.id })} >

{session.name}

-
+ ``` ### Field types @@ -94,7 +94,7 @@ Wrap the display content in the default snippet. The component renders it in vie ### Select with nullable FK ```svelte - events_func.load_ae_obj_id__event_presenter({ api_cfg: $ae_api, event_presenter_id: presenter.event_presenter_id })} > {presenter.person_id ?? 'Not linked'} - + ``` ### Key props diff --git a/documentation/PROJECT__AE_Object_Field_Editor_V3_upgrade.md b/documentation/PROJECT__AE_Object_Field_Editor_V3_upgrade.md index f3c8e61f..7b615c8f 100644 --- a/documentation/PROJECT__AE_Object_Field_Editor_V3_upgrade.md +++ b/documentation/PROJECT__AE_Object_Field_Editor_V3_upgrade.md @@ -2,7 +2,7 @@ > **Status:** 🟡 Mostly Complete — Phase 3 items + GUIDE update remaining > **Date:** February 13, 2026 (last updated: 2026-03-20) -> **Target Component:** `src/lib/elements/element_ae_obj_field_editor_v3.svelte` +> **Target Component:** `src/lib/elements/element_ae_obj_field_editor.svelte` > **Replaces:** `element_ae_crud.svelte` and `element_ae_crud_v2.svelte` ## 1. Overview @@ -36,7 +36,7 @@ Consolidate the legacy CRUD components into a single, high-performance "Aether O - [ ] Implement searchable dropdowns for the `select` type. ### Phase 4: Migration & Cleanup -- [x] Create a playground route for V3 verification (`/testing/ae_obj_field_editor_v3`). +- [x] Create a playground route for V3 verification (`/testing/ae_obj_field_editor`). - [x] Deprecate and remove `v1` and `v2` files — `element_ae_crud.svelte` and `element_ae_crud_v2.svelte` removed 2026-03-20. - [ ] Update `GUIDE__Development.md` with the new usage patterns. diff --git a/src/lib/ae_api/api_get__data_store.ts b/src/lib/ae_api/api_get__data_store.ts index 5ef0827a..07b4d56e 100644 --- a/src/lib/ae_api/api_get__data_store.ts +++ b/src/lib/ae_api/api_get__data_store.ts @@ -15,7 +15,7 @@ interface GetDataStoreV3Params { * Uses hierarchical fallback logic (Specific -> Account -> Global) * Path: GET /v3/data_store/code/{code} */ -export async function get_data_store_v3({ +export async function get_data_store({ api_cfg, code, for_type = null, @@ -24,7 +24,7 @@ export async function get_data_store_v3({ log_lvl = 0 }: GetDataStoreV3Params): Promise { if (log_lvl) { - console.log(`*** get_data_store_v3() *** code=${code} no_account_id=${no_account_id}`); + console.log(`*** get_data_store() *** code=${code} no_account_id=${no_account_id}`); } const endpoint = `/v3/data_store/code/${code}`; diff --git a/src/lib/ae_core/core__crud_generic.ts b/src/lib/ae_core/core__crud_generic.ts deleted file mode 100644 index 2a967837..00000000 --- a/src/lib/ae_core/core__crud_generic.ts +++ /dev/null @@ -1,351 +0,0 @@ -import { marked } from 'marked'; - -import type { key_val } from '$lib/stores/ae_stores'; -import { api } from '$lib/api/api'; - -import { db_save_ae_obj_li__ae_obj } from '$lib/ae_core/core__idb_dexie'; - -// Define generic CRUD args -export interface GenericCrudArgs { - api_cfg: any; - obj_type: string; - obj_id?: string; - for_obj_type?: string; - for_obj_id?: string; - - db_instance?: any; // Optional DB instance for caching - db_field_li?: string[]; // Optional list of fields to save in DB - - // Flags to include related core object models - inc_account_li?: boolean; - inc_address_li?: boolean; - inc_contact_li?: boolean; - inc_person_li?: boolean; - inc_site_li?: boolean; - inc_site_domain_li?: boolean; - inc_user_li?: boolean; - - // Flags to include related other object models - inc_archive_li?: boolean; - inc_archive_entry_li?: boolean; - inc_event_li?: boolean; - inc_event_session_li?: boolean; - inc_post_li?: boolean; - inc_post_comment_li?: boolean; - inc_journal_li?: boolean; - inc_journal_entry_li?: boolean; - - inc_obj_type_li?: string[]; // Optional list of object types to include - - data_kv?: key_val; - enabled?: 'enabled' | 'not_enabled' | 'all'; - hidden?: 'not_hidden' | 'hidden' | 'all'; - method?: string; - limit?: number; - offset?: number; - order_by_li?: Record | Record[] | null; - params?: key_val; - try_cache?: boolean; - log_lvl?: number; -} - -// Generic function: Load single object by ID -export async function load_ae_obj_id(args: GenericCrudArgs): Promise { - const { api_cfg, obj_type, obj_id, log_lvl = 0 } = args; - - if (!obj_id) { - if (log_lvl) console.warn('load_ae_obj_id called without obj_id'); - return null; - } - - if (log_lvl) { - console.log(`*** load_ae_obj_id() *** obj_type=${obj_type} obj_id=${obj_id}`); - } - - const result = await api.get_ae_obj_id_crud({ - api_cfg, - obj_type, - obj_id, - params: {}, - log_lvl - }); - - return result; -} - -// Generic function: Load list of objects -export async function load_ae_obj_li(args: GenericCrudArgs): Promise { - const { - api_cfg, - obj_type, - for_obj_type = '', - for_obj_id, - inc_obj_type_li, - enabled = 'enabled', - hidden = 'not_hidden', - limit = 99, - offset = 0, - order_by_li = {}, - params = {}, - try_cache = true, - log_lvl = 0 - } = args; - - if (log_lvl) { - console.log( - `*** load_ae_obj_li() *** obj_type=${obj_type} for_obj_type=${for_obj_type} for_obj_id=${for_obj_id}` - ); - } - - const params_json: key_val = {}; - - const result = await api.get_ae_obj_li_for_obj_id_crud_v2({ - api_cfg, - obj_type, - for_obj_type, - for_obj_id: for_obj_id ?? '', - enabled, - hidden, - order_by_li, - limit, - offset, - params_json: {}, - params, - log_lvl - }); - - return result; -} - -// Generic function: Create object -export async function create_ae_obj(args: GenericCrudArgs): Promise { - const { api_cfg, obj_type, data_kv, log_lvl = 0 } = args; - - if (log_lvl) { - console.log(`*** create_ae_obj() *** obj_type=${obj_type}`, data_kv); - } - - const result = await api.create_ae_obj_crud({ - api_cfg, - obj_type, - fields: data_kv, - key: api_cfg.api_crud_super_key, - params: {}, - return_obj: true, - log_lvl - }); - - return result; -} - -// Generic function: Update object -export async function update_ae_obj(args: GenericCrudArgs): Promise { - const { api_cfg, obj_type, obj_id, data_kv, log_lvl = 0 } = args; - - if (!obj_id) { - if (log_lvl) console.warn('update_ae_obj called without obj_id'); - return null; - } - - if (log_lvl) { - console.log(`*** update_ae_obj() *** obj_type=${obj_type} obj_id=${obj_id}`, data_kv); - } - - const result = await api.update_ae_obj_id_crud({ - api_cfg, - obj_type, - obj_id, - fields: data_kv, - key: api_cfg.api_crud_super_key, - params: {}, - return_obj: true, - log_lvl - }); - - return result; -} - -// Generic function: Delete object -export async function delete_ae_obj_id(args: GenericCrudArgs): Promise { - const { api_cfg, obj_type, obj_id, method = 'delete', log_lvl = 0 } = args; - - if (!obj_id) { - if (log_lvl) console.warn('delete_ae_obj_id called without obj_id'); - return null; - } - - if (log_lvl) { - console.log(`*** delete_ae_obj_id() *** obj_type=${obj_type} obj_id=${obj_id}`); - } - - const result = await api.delete_ae_obj_id_crud({ - api_cfg, - obj_type, - obj_id, - key: api_cfg.api_crud_super_key, - params: {}, - method, - log_lvl - }); - - return result; -} - -// Additional Modules that might be needed for reloads -import { load_ae_obj_id__archive } from '$lib/ae_archives/ae_archives__archive'; -import { load_ae_obj_id__archive_content } from '$lib/ae_archives/ae_archives__archive_content'; -import { load_ae_obj_id__event } from '$lib/ae_events/ae_events__event'; -import { load_ae_obj_id__event_device } from '$lib/ae_events/ae_events__event_device'; -import { load_ae_obj_id__event_file } from '$lib/ae_events/ae_events__event_file'; -import { load_ae_obj_id__event_location } from '$lib/ae_events/ae_events__event_location'; -import { load_ae_obj_id__event_presentation } from '$lib/ae_events/ae_events__event_presentation'; -import { load_ae_obj_id__event_presenter } from '$lib/ae_events/ae_events__event_presenter'; -import { load_ae_obj_id__event_session } from '$lib/ae_events/ae_events__event_session'; -import { load_ae_obj_id__journal } from '$lib/ae_journals/ae_journals__journal'; -import { load_ae_obj_id__journal_entry } from '$lib/ae_journals/ae_journals__journal_entry'; -import { load_ae_obj_id__post } from '$lib/ae_posts/ae_posts__post'; -import { load_ae_obj_id__post_comment } from '$lib/ae_posts/ae_posts__post_comment'; -import { load_ae_obj_id__person } from '$lib/ae_core/ae_core__person'; - -export async function update_ae_obj_id_crud_v2({ - api_cfg, - object_type, - object_id, - object_reload = false, - field_name, - new_field_value, - log_lvl = 0 -}: { - api_cfg: any; - object_type: string; - object_id: string; - object_reload?: boolean; - field_name: string; - new_field_value: any; - log_lvl?: number; -}) { - if (log_lvl) { - console.log( - `*** update_ae_obj_id_crud_v2() *** object_type=${object_type}, object_id=${object_id}, object_reload=${object_reload}, field_name=${field_name}, new_field_value=`, - new_field_value - ); - } - - try { - const results = await api.update_ae_obj_id_crud({ - api_cfg: api_cfg, - obj_type: object_type, - obj_id: object_id, - field_name: field_name, - field_value: new_field_value, - key: api_cfg.api_crud_super_key, - log_lvl: log_lvl - }); - - if (!results) { - if (log_lvl) console.log( - `Not Patched - Field Name: ${field_name} with new Field Value: ${new_field_value}; Account ID: ${api_cfg.account_id}` - ); - return false; - } - - if (log_lvl) console.log(`Patched - Field Name: ${field_name} with new Field Value: ${new_field_value}`); - - if (object_reload) { - if (log_lvl) console.log(`Reloading the object after patching...`); - - const reload_fns: { [key: string]: (args: any) => Promise } = { - person: load_ae_obj_id__person, - archive: load_ae_obj_id__archive, - archive_content: load_ae_obj_id__archive_content, - journal: load_ae_obj_id__journal, - journal_entry: load_ae_obj_id__journal_entry, - event: load_ae_obj_id__event, - event_device: load_ae_obj_id__event_device, - event_file: load_ae_obj_id__event_file, - event_location: load_ae_obj_id__event_location, - event_presentation: load_ae_obj_id__event_presentation, - event_presenter: load_ae_obj_id__event_presenter, - event_session: load_ae_obj_id__event_session, - post: load_ae_obj_id__post, - post_comment: load_ae_obj_id__post_comment - }; - - const reload_fn = reload_fns[object_type]; - if (reload_fn) { - const id_key = `${object_type}_id`; - return await reload_fn({ api_cfg, [id_key]: object_id, log_lvl }); - } - } - - return true; - } catch (error) { - console.log('Something went wrong patching the record.', error); - return false; - } -} - -export async function download_export_li({ - api_cfg, - get_obj_type, - for_obj_type, - for_obj_id, - exp_alt = null, - file_type = 'CSV', - return_file = true, - filename = 'no_filename.csv', - auto_download = false, - limit = 5000, - params = {}, - log_lvl = 0 -}: { - api_cfg: any; - get_obj_type: string; - for_obj_type: string; - for_obj_id: string; - exp_alt?: null | string; - file_type?: string; - return_file?: boolean; - filename?: string; - auto_download?: boolean; - limit?: number; - params?: key_val; - log_lvl?: number; -}) { - if (log_lvl) console.log('*** download_export_li() ***'); - - const endpoint = `/v2/crud/${get_obj_type}/list`; - params['for_obj_type'] = for_obj_type; - params['for_obj_id'] = for_obj_id; - - if (file_type === 'CSV' || file_type === 'Excel') { - params['file_type'] = file_type; - } - params['return_file'] = true; - params['mdl_alt'] = 'out'; - - if (exp_alt) { - params['exp_alt'] = exp_alt; - } - - const clean_filename = filename.replace(/[^a-zA-Z0-9\[\]-_.]/gi, '_'); - - if (limit >= 0) { - params['limit'] = limit; - } - - const download_result = await api.get_object({ - api_cfg: api_cfg, - endpoint: endpoint, - params: params, - timeout: 90000, - return_blob: return_file, - filename: clean_filename, - auto_download: auto_download, - task_id: for_obj_id, - log_lvl: log_lvl - }); - - if (log_lvl) console.log('download_result:', download_result); - return download_result; -} diff --git a/src/lib/ae_core/core__data_store.ts b/src/lib/ae_core/core__data_store.ts index fc7b8cd2..b08c42f6 100644 --- a/src/lib/ae_core/core__data_store.ts +++ b/src/lib/ae_core/core__data_store.ts @@ -39,7 +39,7 @@ export async function load_ae_obj_by_code__data_store({ } try { - const get_ds_result = await api.get_data_store_v3({ + const get_ds_result = await api.get_data_store({ api_cfg, code, log_lvl @@ -60,7 +60,7 @@ export async function load_ae_obj_by_code__data_store({ // Map content fields for convenience const text_val = get_ds_result.text || ''; const json_val = get_ds_result.json || (get_ds_result.json_str ? JSON.parse(get_ds_result.json_str) : null); - + const mapped_ds: ae_DataStore = { ...get_ds_result, id: ds_id, @@ -77,7 +77,7 @@ export async function load_ae_obj_by_code__data_store({ if (data_type === 'html') return mapped_ds.html; if (data_type === 'json') return mapped_ds.json; return mapped_ds.text; - + } catch (error) { if (log_lvl) console.error('*ae_func* Fetch failed.', error); return null; diff --git a/src/lib/api/api.ts b/src/lib/api/api.ts index d79125b0..d7837f1c 100644 --- a/src/lib/api/api.ts +++ b/src/lib/api/api.ts @@ -27,7 +27,7 @@ import { delete_nested_ae_obj_v3 } from '$lib/ae_api/api_post__crud_obj_v3'; -import { get_data_store_v3 } from '$lib/ae_api/api_get__data_store'; +import { get_data_store } from '$lib/ae_api/api_get__data_store'; /** * Get a list of lookup objects (V3) @@ -670,7 +670,7 @@ const obj = { delete_ae_obj_id_crud: delete_ae_obj_id_crud, download_hosted_file: download_hosted_file, delete_hosted_file: delete_hosted_file, - get_data_store_v3: get_data_store_v3, + get_data_store: get_data_store, get_data_store_obj_w_code: get_data_store_obj_w_code, get_ae_obj_li_for_lu: get_ae_obj_li_for_lu, send_email: send_email diff --git a/src/lib/elements/element_ae_obj_field_editor_v3.svelte b/src/lib/elements/element_ae_obj_field_editor.svelte similarity index 99% rename from src/lib/elements/element_ae_obj_field_editor_v3.svelte rename to src/lib/elements/element_ae_obj_field_editor.svelte index f7268737..72706302 100644 --- a/src/lib/elements/element_ae_obj_field_editor_v3.svelte +++ b/src/lib/elements/element_ae_obj_field_editor.svelte @@ -155,7 +155,7 @@
@@ -312,7 +312,7 @@