import coreModule from 'app/core/core_module'; import appEvents from 'app/core/app_events'; import _ from 'lodash'; const template = ` `; export class UserPickerCtrl { user: any; debouncedSearchUsers: any; userPicked: any; /** @ngInject */ constructor(private backendSrv, private $scope, $sce) { 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);