"use client"; import { Group, Stack, Text } from "@mantine/core"; import type { RouterOutputs } from "@homarr/api"; import { clientApi } from "@homarr/api/client"; import type { SupportedAuthProvider } from "@homarr/definitions"; import { useI18n } from "@homarr/translation/client"; import { UserAvatar } from "@homarr/ui"; import type { AccessPickerOption, AccessPickerTriggerProps } from "./access-picker"; import { AccessPicker } from "./access-picker"; type SelectableUser = RouterOutputs["user"]["selectable"][number]; interface UserSelectProps { presentUserIds: string[]; allowedProviders?: SupportedAuthProvider[]; onSelect: (user: { id: string; name: string; image: string; email: string | null }) => void | Promise; triggerLabel?: string; triggerProps?: AccessPickerTriggerProps; } export const UserSelect = ({ presentUserIds, allowedProviders, onSelect, triggerLabel, triggerProps, }: UserSelectProps) => { const tUser = useI18n("user.action.select"); const tCommon = useI18n("common"); const { data: users, isPending } = clientApi.user.selectable.useQuery({ providers: allowedProviders }); const availableUsers = (users ?? []).filter((user) => !presentUserIds.includes(user.id)); const options: AccessPickerOption[] = availableUsers.map((user) => ({ value: user.id, label: user.name ?? "", keywords: [user.email ?? ""], item: user, content: ( {user.name} {user.email && ( {user.email} )} ), })); const handleSelect = ({ item: user }: AccessPickerOption) => onSelect({ id: user.id, name: user.name ?? "", image: user.image ?? "", email: user.email ?? null, }); return ( ); };