blob: 15503df93522466088125dac3e846d09f113c707 [file] [log] [blame]
<link rel="import" href="../polymer/polymer.html">
<link rel="import" href="../paper-item/paper-item.html">
<dom-module id="chops-user-dropdown">
<template>
<style>
.resize {
display: block;
overflow: auto;
}
.hidden {
display: none !important;
}
paper-item:hover {
background: grey;
}
</style>
<div id="dropdown" class="resize">
<template is="dom-repeat" items="[[suggestions]]">
<paper-item id$="[[index]]" on-click="_userSelected">[[_computeUserDisplay(item)]]</paper-item>
</template>
</div>
</template>
<script>
'use strict';
/**
* `chops-user-dropdown` is a dropdown element displaying a list of user ids.
*
* When using this, provide an array of suggestions that should be displayed
* This element should, idealy, be used with chops-user-input
*
* @customElement
* @polymer
*
*/
class UserDropdown extends Polymer.Element {
static get is() { return 'chops-user-dropdown'; }
static get properties() {
return {
/**
* The array of users that should be listed.
*
* @type Array<Object{userId, email(opt), profileLink(opt), fullName(opt)}>
*/
suggestions: {
type: Array,
value: () => {return []; },
},
}
}
ready() {
super.ready();
this.$.dropdown.classList.add('hidden');
}
/** Opens the dropdown element. */
open() {
this.$.dropdown.classList.remove('hidden');
}
/** Closes the dropdown element. */
close() {
this.$.dropdown.classList.add('hidden');
}
/** Gets the selected user information and fires 'user-selected'. */
_userSelected(e) {
let user = this.suggestions[e.currentTarget.id];
this.dispatchEvent(new CustomEvent('user-selected', {detail: {selectedUser: user}}));
}
_computeUserDisplay(user) {
return user.email ? `${user.userId} <${user.email}> ` : user.userId;
}
/**
* Fired when a user has been selected.
*
* @event user-selected
* @param {string} selectedUser username of the selected user.
*/
}
customElements.define(UserDropdown.is, UserDropdown);
</script>
</dom-module>