// Libraries import React, { Component } from 'react'; import _ from 'lodash'; // Components import { AsyncSelect } from '@grafana/ui'; // Utils & Services import { debounce } from 'lodash'; import { getBackendSrv } from 'app/core/services/backend_srv'; // Types import { User } from 'app/types'; export interface Props { onSelected: (user: User) => void; className?: string; } export interface State { isLoading: boolean; } export class UserPicker extends Component { debouncedSearch: any; constructor(props: Props) { super(props); this.state = { isLoading: false }; this.search = this.search.bind(this); this.debouncedSearch = debounce(this.search, 300, { leading: true, trailing: true, }); } search(query?: string) { const backendSrv = getBackendSrv(); this.setState({ isLoading: true }); if (_.isNil(query)) { query = ''; } return backendSrv .get(`/api/org/users/lookup?query=${query}&limit=10`) .then((result: any) => { return result.map((user: any) => ({ id: user.userId, value: user.userId, label: user.login, imgUrl: user.avatarUrl, login: user.login, })); }) .finally(() => { this.setState({ isLoading: false }); }); } render() { const { className, onSelected } = this.props; const { isLoading } = this.state; return (
'No users found'} />
); } }