blob: 3f9193a052d5b3f03f01e2ea3431229ede1a28c5 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {LitElement, html, css} from 'lit-element';
import 'elements/chops/chops-chip/chops-chip.js';
/**
* `<chops-filter-chips>` displays a set of filter chips.
* https://material.io/components/chips/#filter-chips
*/
export class ChopsFilterChips extends LitElement {
/** @override */
static get properties() {
return {
options: {type: Array},
selected: {type: Object},
};
}
/** @override */
constructor() {
super();
/** @type {Array<string>} */
this.options = [];
/** @type {Object<string, boolean>} */
this.selected = {};
}
/** @override */
static get styles() {
return css`
:host {
display: inline-flex;
}
`;
}
/** @override */
render() {
return html`${this.options.map((option) => this._renderChip(option))}`;
}
/**
* Render a single chip.
* @param {string} option The text on the chip.
* @return {TemplateResult}
*/
_renderChip(option) {
return html`
<chops-chip
@click=${this.select.bind(this, option)}
class=${this.selected[option] ? 'selected' : ''}
.thumbnail=${this.selected[option] ? 'check' : ''}>
${option}
</chops-chip>
`;
}
/**
* Selects or unselects an option.
* @param {string} option The option to select or unselect.
* @fires Event#change
*/
select(option) {
this.selected = {...this.selected, [option]: !this.selected[option]};
this.dispatchEvent(new Event('change'));
}
}
customElements.define('chops-filter-chips', ChopsFilterChips);