Move gr-select to typescript
Change-Id: I8605e211b67a5c6d788304082e55ba8f19ea1e07
This commit is contained in:
@@ -14,41 +14,41 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';
|
||||
import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin.js';
|
||||
import {PolymerElement} from '@polymer/polymer/polymer-element.js';
|
||||
import {html} from '@polymer/polymer/lib/utils/html-tag.js';
|
||||
import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-listeners';
|
||||
import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin';
|
||||
import {PolymerElement} from '@polymer/polymer/polymer-element';
|
||||
import {html} from '@polymer/polymer/lib/utils/html-tag';
|
||||
import {customElement, property, observe} from '@polymer/decorators';
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
'gr-select': GrSelect;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @extends PolymerElement
|
||||
* GrSelect `gr-select` component.
|
||||
*/
|
||||
class GrSelect extends GestureEventListeners(
|
||||
LegacyElementMixin(PolymerElement)) {
|
||||
static get is() { return 'gr-select'; }
|
||||
|
||||
@customElement('gr-select')
|
||||
export class GrSelect extends GestureEventListeners(
|
||||
LegacyElementMixin(PolymerElement)
|
||||
) {
|
||||
static get template() {
|
||||
return html`
|
||||
<slot></slot>
|
||||
`;
|
||||
return html` <slot></slot> `;
|
||||
}
|
||||
|
||||
static get properties() {
|
||||
return {
|
||||
bindValue: {
|
||||
type: String,
|
||||
notify: true,
|
||||
observer: '_updateValue',
|
||||
},
|
||||
};
|
||||
}
|
||||
@property({type: String, notify: true})
|
||||
bindValue?: string;
|
||||
|
||||
get nativeSelect() {
|
||||
// gr-select is not a shadow component
|
||||
// TODO(taoalpha): maybe we should convert
|
||||
// it into a shadow dom component instead
|
||||
return this.querySelector('select');
|
||||
// TODO(TS): should warn if no `select` detected.
|
||||
return this.querySelector('select')!;
|
||||
}
|
||||
|
||||
@observe('bindValue')
|
||||
_updateValue() {
|
||||
// It's possible to have a value of 0.
|
||||
if (this.bindValue !== undefined) {
|
||||
@@ -58,7 +58,9 @@ class GrSelect extends GestureEventListeners(
|
||||
// before options from a dom-repeat were rendered previously.
|
||||
// See https://bugs.chromium.org/p/gerrit/issues/detail?id=7735
|
||||
this.async(() => {
|
||||
this.nativeSelect.value = this.bindValue;
|
||||
// TODO(TS): maybe should check for undefined before assigning
|
||||
// or fallback to ''
|
||||
this.nativeSelect.value = this.bindValue!;
|
||||
}, 1);
|
||||
}
|
||||
}
|
||||
@@ -74,20 +76,16 @@ class GrSelect extends GestureEventListeners(
|
||||
/** @override */
|
||||
created() {
|
||||
super.created();
|
||||
this.addEventListener('change',
|
||||
() => this._valueChanged());
|
||||
this.addEventListener('dom-change',
|
||||
() => this._updateValue());
|
||||
this.addEventListener('change', () => this._valueChanged());
|
||||
this.addEventListener('dom-change', () => this._updateValue());
|
||||
}
|
||||
|
||||
/** @override */
|
||||
ready() {
|
||||
super.ready();
|
||||
// If not set via the property, set bind-value to the element value.
|
||||
if (this.bindValue == undefined && this.nativeSelect.options.length > 0) {
|
||||
if (this.bindValue === undefined && this.nativeSelect.options.length > 0) {
|
||||
this.bindValue = this.nativeSelect.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define(GrSelect.is, GrSelect);
|
||||
|
||||
Reference in New Issue
Block a user