import { useFilteredSearchEntityQuery } from '@/search/hooks/useFilteredSearchEntityQuery'; import { SingleEntitySelect } from '@/ui/input/relation-picker/components/SingleEntitySelect'; import { relationPickerSearchFilterScopedState } from '@/ui/input/relation-picker/states/relationPickerSearchFilterScopedState'; import { EntityForSelect } from '@/ui/input/relation-picker/types/EntityForSelect'; import { Entity } from '@/ui/input/relation-picker/types/EntityTypeForSelect'; import { useRecoilScopedState } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedState'; import { useSearchUserQuery } from '~/generated/graphql'; export type OwnProps = { userId: string; onSubmit: (newUser: EntityForSelect | null) => void; onCancel?: () => void; }; type UserForSelect = EntityForSelect & { entityType: Entity.User; }; export function UserPicker({ userId, onSubmit, onCancel }: OwnProps) { const [searchFilter] = useRecoilScopedState( relationPickerSearchFilterScopedState, ); const users = useFilteredSearchEntityQuery({ queryHook: useSearchUserQuery, selectedIds: userId ? [userId] : [], searchFilter: searchFilter, mappingFunction: (user) => ({ entityType: Entity.User, id: user.id, name: user.displayName, avatarType: 'rounded', avatarUrl: user.avatarUrl ?? '', }), orderByField: 'firstName', searchOnFields: ['firstName', 'lastName'], }); async function handleEntitySelected( selectedUser: UserForSelect | null | undefined, ) { onSubmit(selectedUser ?? null); } return ( ); }