From 385d08bea5899bcb160391db466662b0a0a6f801 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Mon, 10 Aug 2026 19:42:05 -0600 Subject: [PATCH] refac --- .../workspace/common/MemberSelector.svelte | 133 ++++++++++-------- 1 file changed, 71 insertions(+), 62 deletions(-) diff --git a/src/lib/components/workspace/common/MemberSelector.svelte b/src/lib/components/workspace/common/MemberSelector.svelte index f90a1528b3..84f46ca18c 100644 --- a/src/lib/components/workspace/common/MemberSelector.svelte +++ b/src/lib/components/workspace/common/MemberSelector.svelte @@ -2,7 +2,7 @@ import { toast } from 'svelte-sonner'; import { getContext, onMount, onDestroy } from 'svelte'; - const i18n = getContext('i18n'); + const i18n = getContext('i18n') as any; import { user as _user } from '$lib/stores'; import { getUserInfoById, searchUsers } from '$lib/apis/users'; @@ -24,22 +24,34 @@ export let includeSessionUser = false; export let accessGrants: { principal_type: string; principal_id: string }[] = []; - export let groupIds = []; - export let userIds = []; + export let groupIds: string[] = []; + export let userIds: string[] = []; - let groups = null; - let filteredGroups = []; + let groups: any[] | null = null; + let filteredGroups: any[] = []; + + const hasGrant = (principalType: string, principalId: string) => + accessGrants.some( + (grant) => grant.principal_type === principalType && grant.principal_id === principalId + ); $: filteredGroups = groups - ? groups.filter((group) => group.name.toLowerCase().includes(query.toLowerCase())) + ? groups.filter( + (group) => + group.name.toLowerCase().includes(query.toLowerCase()) && !hasGrant('group', group.id) + ) : []; - let selectedGroup = {}; - let selectedUsers = {}; + $: filteredUsers = (users ?? []).filter( + (user) => !hasGrant('user', user.id) && (includeSessionUser || user?.id !== $_user?.id) + ); + + let selectedGroup: Record = {}; + let selectedUsers: Record = {}; let page = 1; - let users = null; - let total = null; + let users: any[] | null = null; + let total: number | null = null; let query = ''; let searchDebounceTimer: ReturnType; @@ -195,7 +207,7 @@ - {#if users.length > 0 || filteredGroups.length > 0} + {#if filteredUsers.length > 0 || filteredGroups.length > 0}
@@ -241,64 +253,61 @@
{/if} - {#if includeUsers} + {#if includeUsers && filteredUsers.length > 0}
{$i18n.t('Users')}
- {#each users as user, userIdx (user.id)} - {#if !accessGrants.some((grant) => grant.principal_type === 'user' && grant.principal_id === user.id) && (includeSessionUser || user?.id !== $_user?.id)} - - {/if} +
+ +
+
+ +
+
+ {/each}
{/if}