import coreModule from 'app/core/core_module'; import _ from 'lodash'; const template = ` `; export class UserPickerCtrl { user: any; debouncedSearchUsers: any; userPicked: any; /** @ngInject */ constructor(private backendSrv) { this.reset(); this.debouncedSearchUsers = _.debounce(this.searchUsers, 500, { leading: true, trailing: false, }); } searchUsers(query: string) { return Promise.resolve( this.backendSrv.get('/api/users/search?perpage=10&page=1&query=' + query).then(result => { return _.map(result.users, user => { return { text: user.login + ' - ' + user.email, value: user }; }); }) ); } onChange(option) { this.userPicked({ $user: option.value }); } reset() { this.user = { text: 'Choose', value: null }; } } export interface User { id: number; name: string; login: string; email: string; } export function userPicker() { return { restrict: 'E', template: template, controller: UserPickerCtrl, bindToController: true, controllerAs: 'ctrl', scope: { userPicked: '&', }, link: function(scope, elem, attrs, ctrl) { scope.$on('user-picker-reset', () => { ctrl.reset(); }); }, }; } coreModule.directive('userPicker', userPicker);