import { LitElement, html } from 'lit'; import { customElement, property, query } from 'lit/decorators.js'; import { IxMenu } from '@digital-realty/ix-menu'; import '@digital-realty/ix-menu/ix-menu.js'; import '@digital-realty/ix-menu/ix-menu-item.js'; import '@digital-realty/ix-icon-button/ix-icon-button.js'; import '@digital-realty/ix-progress/ix-progress.js'; import { IxGridViewStyles } from '../grid-view-styles.js'; import { IxGridDownloadMenuItemModel } from '../models/IxGridDownloadMenuItemModel.js'; @customElement('ix-grid-download-menu') export class IxGridDownloadMenu extends LitElement { static readonly styles = [IxGridViewStyles]; @query('#menu') downloadMenu!: IxMenu; @query('#anchor') downloadMenuAnchor!: HTMLElement; @property({ type: Array }) items: IxGridDownloadMenuItemModel[] = []; @property({ type: Boolean }) isDownloading = false; toggleMenu() { this.downloadMenu!.open = !this.downloadMenu!.open; } renderMenuItems() { if (this.items?.length === 0) { return html` this.dispatchEvent( new CustomEvent('download', { detail: 'all', bubbles: true, composed: true, }) )} >
Download All Records
this.dispatchEvent( new CustomEvent('download', { detail: 'filter', bubbles: true, composed: true, }) )} >
Download Current Filter
`; } return this.items .filter(x => !x.hidden) .map( m => html` m.onClick(m.name)} >
${m.label}
` ); } render() { if (this.isDownloading) { return html``; } return html`
${this.renderMenuItems()}
`; } }