| // Copyright 2017 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import {assert} from 'chrome://resources/js/assert.js'; |
| import {CustomElement} from 'chrome://resources/js/custom_element.js'; |
| |
| import {getTemplate} from './expandable_list.html.js'; |
| |
| export class ExpandableListElement extends CustomElement { |
| static get template() { |
| return getTemplate(); |
| } |
| |
| connectedCallback() { |
| this.classList.add('expandable-list'); |
| } |
| |
| /** |
| * Sets the data model of the list. |
| * @param {Array} data |
| */ |
| setData(data) { |
| this.updateMessageDisplay_(data.length === 0); |
| const items = this.shadowRoot.querySelector('.list-items'); |
| data.forEach(item => { |
| const listItem = this.createItem(item); |
| items.appendChild(listItem); |
| }); |
| } |
| |
| createItem(itemData) {} |
| |
| /** |
| * Sets the empty message text. |
| * @param {string} message |
| */ |
| setEmptyMessage(message) { |
| const emptyMessage = this.shadowRoot.querySelector('.empty-message'); |
| emptyMessage.textContent = message; |
| } |
| |
| /** |
| * Sets the spinner display state. If |showing| is true, the loading |
| * spinner is dispayed. |
| * @param {boolean} showing |
| */ |
| setSpinnerShowing(showing) { |
| this.shadowRoot.querySelector('.spinner').hidden = !showing; |
| } |
| |
| /** |
| * Gets the spinner display state. Returns true if the spinner is showing. |
| * @return {boolean} |
| */ |
| isSpinnerShowing() { |
| return !this.shadowRoot.querySelector('.spinner').hidden; |
| } |
| |
| /** |
| * Updates the display state of the empty message. If there are no items in |
| * the data model, the empty message is displayed. |
| * @param {boolean} empty Whether the list is empty. |
| */ |
| updateMessageDisplay_(empty) { |
| const emptyMessage = this.shadowRoot.querySelector('.empty-message'); |
| assert(emptyMessage); |
| emptyMessage.hidden = !empty; |
| } |
| } |
| |
| customElements.define('expandable-list', ExpandableListElement); |