/**
* Column selector for nextmatch
*/
import {classMap, css, html, LitElement, PropertyValues, repeat, TemplateResult} from "@lion/core";
import {Et2InputWidget} from "../Et2InputWidget/Et2InputWidget";
import {et2_nextmatch_customfields} from "../et2_extension_nextmatch";
import shoelace from "../Styles/shoelace";
import {et2_dataview_column} from "../et2_dataview_model_columns";
import {et2_customfields_list} from "../et2_extension_customfields";
import Sortable from "sortablejs/modular/sortable.complete.esm";
import {cssImage} from "../Et2Widget/Et2Widget";
import {SlMenuItem} from "@shoelace-style/shoelace";
import {Et2Select} from "../Et2Select/Et2Select";
export class Et2ColumnSelection extends Et2InputWidget(LitElement)
{
static get styles()
{
return [
// Parent (SlSelect) returns a single cssResult, not an array
super.styles,
shoelace,
css`
:host {
max-height: inherit;
display: flex;
flex-direction: column;
flex: 1 1 auto;
--icon-width: 20px;
}
.title {
font-size: var(--sl-font-size-large);
color: var(--sl-color-neutral-0);
background-color: var(--sl-color-primary-600);
flex: 1 1 auto;
}
.title sl-icon {
vertical-align: middle;
cursor: pointer;
}
sl-menu {
flex: 1 10 auto;
overflow-y: auto;
}
/* Drag handle on columns (not individual custom fields or search letter) */
sl-menu > .select_row::part(base) {
padding-left: 10px;
}
sl-menu > .column::part(base) {
background-image: ${cssImage("splitter_vert")};
background-position: 3px 1.5ex;
background-repeat: no-repeat;
cursor: grab;
}
/* Change vertical alignment of CF checkbox line to up with title, not middle */
.custom_fields::part(base) {
align-items: baseline;
}
`
]
}
static get properties()
{
return {
/**
* List of currently selected columns
*/
value: {type: Object},
autoRefresh: {type: Number}
}
}
private __columns = [];
private __autoRefresh : number | false = false;
private sort : Sortable;
constructor(...args : any[])
{
super(...args);
this.columnClickHandler = this.columnClickHandler.bind(this);
this.handleSelectAll = this.handleSelectAll.bind(this);
}
connectedCallback()
{
super.connectedCallback();
this.updateComplete.then(() =>
{
this.sort = Sortable.create(this.shadowRoot.querySelector('sl-menu'), {
ghostClass: 'ui-fav-sortable-placeholder',
draggable: 'sl-menu-item.column',
dataIdAttr: 'value',
direction: 'vertical',
delay: 25
});
});
}
protected firstUpdated(_changedProperties : PropertyValues)
{
super.firstUpdated(_changedProperties);
if(this._autoRefreshNode)
{
this._autoRefreshNode.select_options = {
// Cause [unknown] problems with mail
30: "30 seconds",
//60: "1 Minute",
180: "3 Minutes",
300: "5 Minutes",
900: "15 Minutes",
1800: "30 Minutes"
};
}
if(this._preferenceNode)
{
this._preferenceNode.select_options = [
{value: 'default', label: 'Default', title: 'Set these columns as the default'},
{value: 'reset', label: 'Reset', title: "Reset all user's column preferences"},
{value: 'force', label: 'Force', title: 'Force column preference so users cannot change it'}
];
}
}
protected render() : TemplateResult
{
return html`${this.headerTemplate()}