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);