@nuxeo/nuxeo-ui-elements
Version:
Nuxeo UI Web Components.
146 lines (129 loc) • 4.3 kB
JavaScript
import { html } from '@polymer/polymer/lib/utils/html-tag.js';
import { mixinBehaviors } from '@polymer/polymer/lib/legacy/class.js';
import '@nuxeo/nuxeo-elements/nuxeo-connection.js';
import '@nuxeo/nuxeo-elements/nuxeo-element.js';
import '@polymer/paper-dialog-scrollable/paper-dialog-scrollable.js';
import '@polymer/paper-button/paper-button.js';
import '@polymer/paper-checkbox/paper-checkbox.js';
import '@polymer/paper-icon-button/paper-icon-button.js';
import '@polymer/polymer/lib/elements/dom-repeat.js';
import { I18nBehavior } from '../nuxeo-i18n-behavior.js';
import '../widgets/nuxeo-dialog.js';
import '../nuxeo-button-styles.js';
/* Part of `nuxeo-data-table` */
{
class DataTableSettings extends mixinBehaviors([I18nBehavior], Nuxeo.Element) {
static get template() {
return html`
<style include="nuxeo-button-styles">
:host {
display: flex;
align-items: center;
}
.paper-content {
min-width: 20vw;
margin-bottom: 2em;
}
paper-icon-button {
width: 1.5em;
height: 1.5em;
padding: 0;
}
paper-button {
margin: 0;
padding: 8px 16px;
}
.buttons {
@apply --buttons-bar;
margin-top: 0px;
}
</style>
<nuxeo-connection id="nxcon"></nuxeo-connection>
<nuxeo-dialog id="columnsSettingsPopup" with-backdrop on-iron-overlay-closed="_onSettingsClosed">
<h2>[[i18n('tableSettings.columnSettings')]]</h2>
<paper-dialog-scrollable>
<div class="paper-content layout horizontal">
<div class="layout vertical">
<div class="row layout horizontal">
<dom-repeat items="[[columns]]" as="column" filter="canChangeVisibility">
<template>
<tr>
<td>
<paper-checkbox noink checked="{{!column.hidden}}"></paper-checkbox>
</td>
<td>
[[column.name]]
</td>
</tr>
</template>
</dom-repeat>
<table></table>
</div>
</div>
</div>
</paper-dialog-scrollable>
<div class="buttons horizontal end-justified layout">
<div class="flex start-justified">
<paper-button noink on-click="_resetSettings" class="secondary"
>[[i18n('tableSettings.columnSettings.reset')]]</paper-button
>
</div>
<paper-button noink class="primary" dialog-dismiss
>[[i18n('tableSettings.columnSettings.done')]]</paper-button
>
</div>
</nuxeo-dialog>
<paper-icon-button
noink
icon="nuxeo:settings"
id="toggleColSettings"
on-click="toggleColsSettingsPopup"
aria-label$="[[i18n('tableSettings.columnSettings')]]"
>
</paper-icon-button>
`;
}
static get is() {
return 'nuxeo-data-table-settings';
}
static get properties() {
return {
columns: {
type: Array,
notify: true,
},
};
}
static get observers() {
return ['_columnDisplayChanged(columns.*)'];
}
toggleColsSettingsPopup() {
this.$$('#columnsSettingsPopup').toggle();
}
_columnDisplayChanged(change) {
if (change.path.endsWith('hidden')) {
this.dispatchEvent(
new CustomEvent('settings-changed', {
composed: true,
bubbles: true,
}),
);
}
}
_resetSettings() {
this.columns.forEach((column, idx) => {
this.set(`columns.${idx}.hidden`, column.hiddenBack);
});
}
_onSettingsClosed() {
if (this.columns.every((column) => column.hidden)) {
this._resetSettings();
}
}
canChangeVisibility(column) {
return !column.alwaysVisible;
}
}
customElements.define(DataTableSettings.is, DataTableSettings);
Nuxeo.DataTableSettings = DataTableSettings;
}