MCPcopy
hub / github.com/umami-software/umami / UserSelect

Function UserSelect

src/components/input/UserSelect.tsx:6–65  ·  view source on GitHub ↗
({
  teamId,
  onChange,
  ...props
}: {
  teamId?: string;
} & SelectProps)

Source from the content-addressed store, hash-verified

4import { useMessages, useTeamMembersQuery, useUsersQuery } from '@/components/hooks';
5
6export function UserSelect({
7 teamId,
8 onChange,
9 ...props
10}: {
11 teamId?: string;
12} & SelectProps) {
13 const { t, messages } = useMessages();
14 const { data: users, isLoading: usersLoading } = useUsersQuery();
15 const { data: teamMembers, isLoading: teamMembersLoading } = useTeamMembersQuery(teamId);
16 const [username, setUsername] = useState<string>();
17 const [search, setSearch] = useState('');
18
19 const listItems = useMemo(() => {
20 if (!users) {
21 return [];
22 }
23 if (!teamId || !teamMembers) {
24 return users.data;
25 }
26 const teamMemberIds = teamMembers.data.map(({ userId }) => userId);
27 return users.data.filter(({ id }) => !teamMemberIds.includes(id));
28 }, [users, teamMembers, teamId]);
29
30 const handleSearch = (value: string) => {
31 setSearch(value);
32 };
33
34 const handleOpenChange = () => {
35 setSearch('');
36 };
37
38 const handleChange = (id: string) => {
39 setUsername(listItems.find(item => item.id === id)?.username);
40 onChange(id);
41 };
42
43 return (
44 <Select
45 {...props}
46 value={username}
47 isLoading={usersLoading || (teamId && teamMembersLoading)}
48 allowSearch={true}
49 searchValue={search}
50 onSearch={handleSearch}
51 onChange={handleChange}
52 onOpenChange={handleOpenChange}
53 maxHeight={480}
54 listProps={{
55 renderEmptyState: () => <Empty message={t(messages.noResultsFound)} />,
56 }}
57 >
58 {listItems.map(({ id, username }) => (
59 <ListItem key={id} id={id}>
60 {username}
61 </ListItem>
62 ))}
63 </Select>

Callers

nothing calls this directly

Calls 3

useMessagesFunction · 0.90
useUsersQueryFunction · 0.90
useTeamMembersQueryFunction · 0.90

Tested by

no test coverage detected