import {Dialog} from '../ui/overlays/dialog/dialog'; import {DialogHeader} from '../ui/overlays/dialog/dialog-header'; import {Trans} from '../i18n/trans'; import {DialogBody} from '../ui/overlays/dialog/dialog-body'; import {TextField} from '../ui/forms/input-field/text-field/text-field'; import {SearchIcon} from '../icons/material/Search'; import {useState} from 'react'; import {useTrans} from '../i18n/use-trans'; import {message} from '../i18n/message'; import {Avatar} from '../ui/images/avatar'; import {NormalizedModel} from '../datatable/filters/normalized-model'; import {IllustratedMessage} from '../ui/images/illustrated-message'; import {SvgImage} from '../ui/images/svg-image/svg-image'; import teamSvg from '../admin/roles/team.svg'; import {useDialogContext} from '../ui/overlays/dialog/dialog-context'; import {useNormalizedModels} from './queries/use-normalized-models'; interface SelectUserDialogProps { onUserSelected: (user: NormalizedModel) => void; } export function SelectUserDialog({onUserSelected}: SelectUserDialogProps) { const {close} = useDialogContext(); const [searchTerm, setSearchTerm] = useState(''); const {trans} = useTrans(); const query = useNormalizedModels('normalized-models/user', { query: searchTerm, perPage: 14, }); const users = query.data?.results || []; const emptyStateMessage = ( } description={} image={} /> ); const selectUser = (user: NormalizedModel) => { close(); onUserSelected(user); }; return ( } placeholder={trans(message('Search for user by name or email'))} value={searchTerm} onChange={e => { setSearchTerm(e.target.value); }} /> {!query.isLoading && !users.length && emptyStateMessage}
{users.map(user => ( ))}
); } interface UserListItemProps { user: NormalizedModel; onUserSelected: (user: NormalizedModel) => void; } function UserListItem({user, onUserSelected}: UserListItemProps) { return (
{ onUserSelected(user); }} onKeyDown={e => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onUserSelected(user); } }} >
{user.name}
{user.description}
); }