blob: cb1c2c8f57f3142b99f518b029759bf60a4eb7ba [file] [log] [blame]
/**
* @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);