diff --git a/src/routes/core/+page.svelte b/src/routes/core/+page.svelte index 3531ec77..8723beae 100644 --- a/src/routes/core/+page.svelte +++ b/src/routes/core/+page.svelte @@ -1,49 +1,21 @@
@@ -93,39 +65,12 @@ -
-
- -

People

-
-

View and manage person records and their associated user accounts.

-
- +
+
+
+ +

People

+
+ +

Search and manage person records.

+ + { + person_id_random_li = results.map(p => p.person_id_random); + $ae_sess.person.show_report__person_li = true; + }} />
@@ -167,72 +119,20 @@
- - - {#if $ae_sess.person.show_report__person_li && person_id_random_li?.length > 0} -

Person Records

- - - -
- - + + {#if $ae_sess.person.show_report__person_li} +
+
+

Search Results ({person_id_random_li.length})

+ +
+ +
+ +
{/if} -
+ \ No newline at end of file diff --git a/src/routes/core/ae_comp__person_obj_tbl.svelte b/src/routes/core/ae_comp__person_obj_tbl.svelte index 6d34a4d8..7969d5ea 100644 --- a/src/routes/core/ae_comp__person_obj_tbl.svelte +++ b/src/routes/core/ae_comp__person_obj_tbl.svelte @@ -40,11 +40,7 @@ // Variables // *** Functions and Logic - // let lq__person_obj = liveQuery( - // () => db_core.person.get($events_slct.person_id) - // ); - - let lq_kv__person_obj_li = liveQuery(() => db_core.person.bulkGet(person_id_random_li)); + let lq_kv__person_obj_li = $derived(liveQuery(() => db_core.person.bulkGet(person_id_random_li)));
diff --git a/src/routes/core/person/[person_id]/+page.svelte b/src/routes/core/person/[person_id]/+page.svelte index c4ed9885..c718fadc 100644 --- a/src/routes/core/person/[person_id]/+page.svelte +++ b/src/routes/core/person/[person_id]/+page.svelte @@ -26,22 +26,19 @@ // import { events_func } from '$lib/ae_events_functions'; import Person_view from './../../person_view.svelte'; + import { load_ae_obj_li__user } from '$lib/ae_core/ae_core__user'; + import { update_ae_obj__person } from '$lib/ae_core/ae_core__person'; + import { Users, Link, Unlink, UserPlus, ShieldCheck, User } from 'lucide-svelte'; + interface Props { - // console.log($page.params.slug); data: any; } let { data }: Props = $props(); - // Exports - // export let display_mode: string = 'default'; // 'default', 'compact', 'minimal', 'launcher' - // Variables - // Quickly save the data passed from the parent(s) to the Svelte stores, localStorage, and other. $slct.account_id = data.account_id; - // console.log(`$slct.account_id = `, $slct.account_id); let ae_acct = data[$slct.account_id]; - // console.log(`ae_acct = `, ae_acct); $ae_loc.url_origin = data.url.origin; @@ -53,6 +50,51 @@ let lq__person_obj = liveQuery(() => db_core.person.get($slct.person_id)); $slct.lq__person_obj = lq__person_obj; + let available_users: any[] = $state([]); + let loading_users = $state(false); + let show_link_ui = $state(false); + + async function load_unlinked_users() { + if (!$ae_loc.manager_access) return; + loading_users = true; + const all_users = await load_ae_obj_li__user({ + api_cfg: $ae_api, + enabled: 'enabled', + log_lvl: 1 + }); + // Filter users that don't have a person_id linked + // NOTE: The backend might return person_id or person_id_random + available_users = all_users.filter(u => !u.person_id_random && !u.person_id); + loading_users = false; + } + + async function handle_link_user(user_id_random: string) { + if (!confirm('Link this person to this user account?')) return; + + const result = await update_ae_obj__person({ + api_cfg: $ae_api, + person_id: $slct.person_id, + data_kv: { user_id_random }, + log_lvl: 1 + }); + + if (result) { + show_link_ui = false; + available_users = []; + } + } + + async function handle_unlink_user() { + if (!confirm('Unlink this person from their user account?')) return; + + const result = await update_ae_obj__person({ + api_cfg: $ae_api, + person_id: $slct.person_id, + data_kv: { user_id_random: null }, + log_lvl: 1 + }); + } + if (!$ae_loc.person) { $ae_loc.person = {}; } @@ -137,6 +179,75 @@ + {#if $ae_loc.manager_access} +
+
+
+ + User Account Linking +
+ {#if $lq__person_obj?.user_id_random} + + {:else} + + {/if} +
+ + {#if $lq__person_obj?.user_id_random} +
+
+ +
+
+

Linked User ID

+

{$lq__person_obj.user_id_random}

+

Username: {$lq__person_obj.username || '--'}

+
+
+ {:else if show_link_ui} +
+

Select a user account to link to this person. Only accounts without a linked person are shown.

+ {#if loading_users} +
+ {:else if available_users.length === 0} +

No unlinked user accounts found.

+ {:else} +
+ {#each available_users as user} + + {/each} +
+ {/if} +
+ {:else} +
+ +

This person is not currently linked to a user account.

+
+ {/if} +
+ {/if} + {#if !$lq__person_obj}
diff --git a/src/routes/core/person/ae_comp__person_search.svelte b/src/routes/core/person/ae_comp__person_search.svelte new file mode 100644 index 00000000..747b01f0 --- /dev/null +++ b/src/routes/core/person/ae_comp__person_search.svelte @@ -0,0 +1,81 @@ + + +
+
+ + + + + +
+