| /** |
| * @module modules/machine-table-columns-dialog-sk |
| * @description <h2><code>machine-table-columns-dialog-sk</code></h2> |
| * |
| * Displays a dialog with all possible column names and allows the user to |
| * choose which ones to hide. |
| * |
| */ |
| |
| import { html } from 'lit-html'; |
| import { $ } from '../../../infra-sk/modules/dom'; |
| import { define } from '../../../elements-sk/modules/define'; |
| import { CheckOrRadio } from '../../../elements-sk/modules/checkbox-sk/checkbox-sk'; |
| import { ElementSk } from '../../../infra-sk/modules/ElementSk'; |
| import '../../../elements-sk/modules/checkbox-sk'; |
| |
| export type ColumnTitles = |
| | 'Machine' |
| | 'Attached' |
| | 'Device' |
| | 'Mode' |
| | 'Recovering' |
| | 'Power' |
| | 'Details' |
| | 'Quarantined' |
| | 'Task' |
| | 'Battery' |
| | 'Temperature' |
| | 'Last Seen' |
| | 'Uptime' |
| | 'Dimensions' |
| | 'Launched Swarming' |
| | 'Note' |
| | 'Annotation' |
| | 'Version' |
| | 'Delete' |
| | 'Clear Quarantine'; |
| |
| export const ColumnOrder: ColumnTitles[] = [ |
| 'Machine', |
| 'Attached', |
| 'Device', |
| 'Mode', |
| 'Recovering', |
| 'Power', |
| 'Details', |
| 'Quarantined', |
| 'Clear Quarantine', |
| 'Task', |
| 'Battery', |
| 'Temperature', |
| 'Last Seen', |
| 'Uptime', |
| 'Dimensions', |
| 'Launched Swarming', |
| 'Note', |
| 'Annotation', |
| 'Version', |
| 'Delete', |
| ]; |
| |
| export class MachineTableColumnsDialogSk extends ElementSk { |
| private dialog: HTMLDialogElement | null = null; |
| |
| private hiddenColumns: ColumnTitles[] = []; |
| |
| private resolve: ((value: ColumnTitles[] | undefined) => void) | null = null; |
| |
| constructor() { |
| super(MachineTableColumnsDialogSk.template); |
| } |
| |
| private static template = (ele: MachineTableColumnsDialogSk) => html` <dialog> |
| <h2>Select columns to display.</h2> |
| <div> |
| ${ColumnOrder.map( |
| (name: ColumnTitles) => |
| html`<checkbox-sk |
| label=${name} |
| ?checked=${!ele.hiddenColumns.includes(name)} |
| ></checkbox-sk>` |
| )} |
| </div> |
| |
| <div class="controls"> |
| <button @click=${ele.okClick} id="ok">OK</button> |
| <button @click=${ele.cancelClick} id="cancel">Cancel</button> |
| </div> |
| </dialog>`; |
| |
| connectedCallback(): void { |
| super.connectedCallback(); |
| this._render(); |
| this.dialog = this.querySelector<HTMLDialogElement>('dialog'); |
| } |
| |
| edit(hidden: ColumnTitles[]): Promise<ColumnTitles[] | undefined> { |
| return new Promise((resolve) => { |
| this.resolve = resolve; |
| this.hiddenColumns = [...hidden]; |
| this._render(); |
| this.dialog!.showModal(); |
| }); |
| } |
| |
| private cancelClick() { |
| if (!this.resolve) { |
| return; |
| } |
| this.resolve(undefined); |
| this.dialog!.close(); |
| this.resolve = null; |
| } |
| |
| private okClick() { |
| if (!this.resolve) { |
| return; |
| } |
| this.hiddenColumns = $<CheckOrRadio>('checkbox-sk', this) |
| .filter((ch: CheckOrRadio) => !ch.checked) |
| .map((ch: CheckOrRadio) => ch.label as ColumnTitles); |
| this.resolve(this.hiddenColumns); |
| this.dialog!.close(); |
| this.resolve = null; |
| } |
| } |
| |
| define('machine-table-columns-dialog-sk', MachineTableColumnsDialogSk); |