@vaadin/grid 22.0.0-alpha7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/README.md +79 -0
- package/all-imports.js +1 -0
- package/package.json +58 -0
- package/src/all-imports.js +14 -0
- package/src/array-data-provider.js +145 -0
- package/src/interfaces.d.ts +75 -0
- package/src/vaadin-grid-a11y-mixin.js +158 -0
- package/src/vaadin-grid-active-item-mixin.d.ts +19 -0
- package/src/vaadin-grid-active-item-mixin.js +117 -0
- package/src/vaadin-grid-array-data-provider-mixin.d.ts +16 -0
- package/src/vaadin-grid-array-data-provider-mixin.js +75 -0
- package/src/vaadin-grid-column-group.d.ts +54 -0
- package/src/vaadin-grid-column-group.js +320 -0
- package/src/vaadin-grid-column-reordering-mixin.d.ts +19 -0
- package/src/vaadin-grid-column-reordering-mixin.js +387 -0
- package/src/vaadin-grid-column-resizing-mixin.js +111 -0
- package/src/vaadin-grid-column.d.ts +133 -0
- package/src/vaadin-grid-column.js +745 -0
- package/src/vaadin-grid-data-provider-mixin.d.ts +108 -0
- package/src/vaadin-grid-data-provider-mixin.js +520 -0
- package/src/vaadin-grid-drag-and-drop-mixin.d.ts +69 -0
- package/src/vaadin-grid-drag-and-drop-mixin.js +433 -0
- package/src/vaadin-grid-dynamic-columns-mixin.js +180 -0
- package/src/vaadin-grid-event-context-mixin.d.ts +33 -0
- package/src/vaadin-grid-event-context-mixin.js +57 -0
- package/src/vaadin-grid-filter-column.d.ts +35 -0
- package/src/vaadin-grid-filter-column.js +120 -0
- package/src/vaadin-grid-filter-mixin.js +76 -0
- package/src/vaadin-grid-filter.d.ts +67 -0
- package/src/vaadin-grid-filter.js +125 -0
- package/src/vaadin-grid-helpers.js +23 -0
- package/src/vaadin-grid-keyboard-navigation-mixin.js +891 -0
- package/src/vaadin-grid-row-details-mixin.d.ts +44 -0
- package/src/vaadin-grid-row-details-mixin.js +200 -0
- package/src/vaadin-grid-scroll-mixin.d.ts +18 -0
- package/src/vaadin-grid-scroll-mixin.js +202 -0
- package/src/vaadin-grid-selection-column.d.ts +71 -0
- package/src/vaadin-grid-selection-column.js +285 -0
- package/src/vaadin-grid-selection-mixin.d.ts +30 -0
- package/src/vaadin-grid-selection-mixin.js +93 -0
- package/src/vaadin-grid-sort-column.d.ts +63 -0
- package/src/vaadin-grid-sort-column.js +118 -0
- package/src/vaadin-grid-sort-mixin.d.ts +15 -0
- package/src/vaadin-grid-sort-mixin.js +139 -0
- package/src/vaadin-grid-sorter.d.ts +94 -0
- package/src/vaadin-grid-sorter.js +230 -0
- package/src/vaadin-grid-styles.js +297 -0
- package/src/vaadin-grid-styling-mixin.d.ts +37 -0
- package/src/vaadin-grid-styling-mixin.js +71 -0
- package/src/vaadin-grid-tree-column.d.ts +36 -0
- package/src/vaadin-grid-tree-column.js +119 -0
- package/src/vaadin-grid-tree-toggle.d.ts +104 -0
- package/src/vaadin-grid-tree-toggle.js +205 -0
- package/src/vaadin-grid.d.ts +397 -0
- package/src/vaadin-grid.js +1004 -0
- package/theme/lumo/all-imports.js +11 -0
- package/theme/lumo/vaadin-grid-column-group.js +1 -0
- package/theme/lumo/vaadin-grid-column.js +1 -0
- package/theme/lumo/vaadin-grid-filter-column.js +2 -0
- package/theme/lumo/vaadin-grid-filter.js +2 -0
- package/theme/lumo/vaadin-grid-selection-column.js +2 -0
- package/theme/lumo/vaadin-grid-sort-column.js +2 -0
- package/theme/lumo/vaadin-grid-sorter-styles.js +53 -0
- package/theme/lumo/vaadin-grid-sorter.js +2 -0
- package/theme/lumo/vaadin-grid-styles.js +378 -0
- package/theme/lumo/vaadin-grid-tree-column.js +2 -0
- package/theme/lumo/vaadin-grid-tree-toggle-styles.js +112 -0
- package/theme/lumo/vaadin-grid-tree-toggle.js +2 -0
- package/theme/lumo/vaadin-grid.js +9 -0
- package/theme/material/all-imports.js +11 -0
- package/theme/material/vaadin-grid-column-group.js +1 -0
- package/theme/material/vaadin-grid-column.js +1 -0
- package/theme/material/vaadin-grid-filter-column.js +2 -0
- package/theme/material/vaadin-grid-filter.js +2 -0
- package/theme/material/vaadin-grid-selection-column.js +2 -0
- package/theme/material/vaadin-grid-sort-column.js +2 -0
- package/theme/material/vaadin-grid-sorter-styles.js +72 -0
- package/theme/material/vaadin-grid-sorter.js +2 -0
- package/theme/material/vaadin-grid-styles.js +252 -0
- package/theme/material/vaadin-grid-tree-column.js +2 -0
- package/theme/material/vaadin-grid-tree-toggle-styles.js +42 -0
- package/theme/material/vaadin-grid-tree-toggle.js +2 -0
- package/theme/material/vaadin-grid.js +2 -0
- package/vaadin-grid-column-group.d.ts +1 -0
- package/vaadin-grid-column-group.js +3 -0
- package/vaadin-grid-column.d.ts +1 -0
- package/vaadin-grid-column.js +3 -0
- package/vaadin-grid-filter-column.d.ts +1 -0
- package/vaadin-grid-filter-column.js +3 -0
- package/vaadin-grid-filter.d.ts +1 -0
- package/vaadin-grid-filter.js +3 -0
- package/vaadin-grid-selection-column.d.ts +1 -0
- package/vaadin-grid-selection-column.js +3 -0
- package/vaadin-grid-sort-column.d.ts +1 -0
- package/vaadin-grid-sort-column.js +3 -0
- package/vaadin-grid-sorter.d.ts +1 -0
- package/vaadin-grid-sorter.js +3 -0
- package/vaadin-grid-tree-column.d.ts +1 -0
- package/vaadin-grid-tree-column.js +3 -0
- package/vaadin-grid-tree-toggle.d.ts +1 -0
- package/vaadin-grid-tree-toggle.js +3 -0
- package/vaadin-grid.d.ts +3 -0
- package/vaadin-grid.js +4 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { GridDefaultItem } from './interfaces';
|
|
2
|
+
import { GridColumn } from './vaadin-grid-column.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `<vaadin-grid-filter-column>` is a helper element for the `<vaadin-grid>`
|
|
6
|
+
* that provides default header renderer and functionality for filtering.
|
|
7
|
+
*
|
|
8
|
+
* #### Example:
|
|
9
|
+
* ```html
|
|
10
|
+
* <vaadin-grid items="[[items]]">
|
|
11
|
+
* <vaadin-grid-filter-column path="name.first"></vaadin-grid-filter-column>
|
|
12
|
+
*
|
|
13
|
+
* <vaadin-grid-column>
|
|
14
|
+
* ...
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
declare class GridFilterColumn<TItem = GridDefaultItem> extends GridColumn<TItem> {
|
|
18
|
+
/**
|
|
19
|
+
* Text to display as the label of the column filter text-field.
|
|
20
|
+
*/
|
|
21
|
+
header: string | null | undefined;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* JS Path of the property in the item used for filtering the data.
|
|
25
|
+
*/
|
|
26
|
+
path: string | null | undefined;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
declare global {
|
|
30
|
+
interface HTMLElementTagNameMap {
|
|
31
|
+
'vaadin-grid-filter-column': GridFilterColumn<GridDefaultItem>;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { GridFilterColumn };
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2021 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
import { GridColumn } from './vaadin-grid-column.js';
|
|
7
|
+
import './vaadin-grid-filter.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* `<vaadin-grid-filter-column>` is a helper element for the `<vaadin-grid>`
|
|
11
|
+
* that provides default header renderer and functionality for filtering.
|
|
12
|
+
*
|
|
13
|
+
* #### Example:
|
|
14
|
+
* ```html
|
|
15
|
+
* <vaadin-grid items="[[items]]">
|
|
16
|
+
* <vaadin-grid-filter-column path="name.first"></vaadin-grid-filter-column>
|
|
17
|
+
*
|
|
18
|
+
* <vaadin-grid-column>
|
|
19
|
+
* ...
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
class GridFilterColumn extends GridColumn {
|
|
23
|
+
static get is() {
|
|
24
|
+
return 'vaadin-grid-filter-column';
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static get properties() {
|
|
28
|
+
return {
|
|
29
|
+
/**
|
|
30
|
+
* JS Path of the property in the item used for filtering the data.
|
|
31
|
+
*/
|
|
32
|
+
path: String,
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Text to display as the label of the column filter text-field.
|
|
36
|
+
*/
|
|
37
|
+
header: String
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
static get observers() {
|
|
42
|
+
return ['_onHeaderRendererOrBindingChanged(_headerRenderer, _headerCell, path, header, _filterValue)'];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
constructor() {
|
|
46
|
+
super();
|
|
47
|
+
|
|
48
|
+
this.__boundOnFilterValueChanged = this.__onFilterValueChanged.bind(this);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Renders the grid filter with the custom text field to the header cell.
|
|
53
|
+
*
|
|
54
|
+
* @override
|
|
55
|
+
*/
|
|
56
|
+
_defaultHeaderRenderer(root, _column) {
|
|
57
|
+
let filter = root.firstElementChild;
|
|
58
|
+
let textField = filter ? filter.firstElementChild : undefined;
|
|
59
|
+
|
|
60
|
+
if (!filter) {
|
|
61
|
+
filter = document.createElement('vaadin-grid-filter');
|
|
62
|
+
textField = document.createElement('vaadin-text-field');
|
|
63
|
+
textField.setAttribute('slot', 'filter');
|
|
64
|
+
textField.setAttribute('theme', 'small');
|
|
65
|
+
textField.setAttribute('style', 'max-width: 100%;');
|
|
66
|
+
textField.setAttribute('focus-target', '');
|
|
67
|
+
textField.addEventListener('value-changed', this.__boundOnFilterValueChanged);
|
|
68
|
+
filter.appendChild(textField);
|
|
69
|
+
root.appendChild(filter);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
filter.path = this.path;
|
|
73
|
+
filter.value = this._filterValue;
|
|
74
|
+
|
|
75
|
+
textField.__rendererValue = this._filterValue;
|
|
76
|
+
textField.value = this._filterValue;
|
|
77
|
+
textField.label = this.__getHeader(this.header, this.path);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The filter column doesn't allow to use a custom header renderer
|
|
82
|
+
* to override the header cell content.
|
|
83
|
+
* It always renders the grid filter to the header cell.
|
|
84
|
+
*
|
|
85
|
+
* @override
|
|
86
|
+
*/
|
|
87
|
+
_computeHeaderRenderer() {
|
|
88
|
+
return this._defaultHeaderRenderer;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Updates the internal filter value once the filter text field is changed.
|
|
93
|
+
* The listener handles only user-fired events.
|
|
94
|
+
*
|
|
95
|
+
* @private
|
|
96
|
+
*/
|
|
97
|
+
__onFilterValueChanged(e) {
|
|
98
|
+
// Skip if the value is changed by the renderer.
|
|
99
|
+
if (e.detail.value === e.target.__rendererValue) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
this._filterValue = e.detail.value;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** @private */
|
|
107
|
+
__getHeader(header, path) {
|
|
108
|
+
if (header) {
|
|
109
|
+
return header;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (path) {
|
|
113
|
+
return this._generateHeader(path);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
customElements.define(GridFilterColumn.is, GridFilterColumn);
|
|
119
|
+
|
|
120
|
+
export { GridFilterColumn };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2021 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @polymerMixin
|
|
9
|
+
*/
|
|
10
|
+
export const FilterMixin = (superClass) =>
|
|
11
|
+
class FilterMixin extends superClass {
|
|
12
|
+
static get properties() {
|
|
13
|
+
return {
|
|
14
|
+
/** @private */
|
|
15
|
+
_filters: {
|
|
16
|
+
type: Array,
|
|
17
|
+
value: function () {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** @protected */
|
|
25
|
+
ready() {
|
|
26
|
+
super.ready();
|
|
27
|
+
this.addEventListener('filter-changed', this._filterChanged.bind(this));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** @private */
|
|
31
|
+
_filterChanged(e) {
|
|
32
|
+
e.stopPropagation();
|
|
33
|
+
|
|
34
|
+
this.__addFilter(e.target);
|
|
35
|
+
this.__applyFilters();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** @private */
|
|
39
|
+
__removeFilters(filtersToRemove) {
|
|
40
|
+
if (filtersToRemove.length == 0) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
this._filters = this._filters.filter((filter) => filtersToRemove.indexOf(filter) < 0);
|
|
45
|
+
this.__applyFilters();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** @private */
|
|
49
|
+
__addFilter(filter) {
|
|
50
|
+
const filterIndex = this._filters.indexOf(filter);
|
|
51
|
+
|
|
52
|
+
if (filterIndex === -1) {
|
|
53
|
+
this._filters.push(filter);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** @private */
|
|
58
|
+
__applyFilters() {
|
|
59
|
+
if (this.dataProvider && this.isAttached) {
|
|
60
|
+
this.clearCache();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @return {!Array<!GridFilterDefinition>}
|
|
66
|
+
* @protected
|
|
67
|
+
*/
|
|
68
|
+
_mapFilters() {
|
|
69
|
+
return this._filters.map((filter) => {
|
|
70
|
+
return {
|
|
71
|
+
path: filter.path,
|
|
72
|
+
value: filter.value
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fired when the `value` property changes.
|
|
3
|
+
*/
|
|
4
|
+
export type GridFilterValueChangedEvent = CustomEvent<{ value: string }>;
|
|
5
|
+
|
|
6
|
+
export interface GridFilterCustomEventMap {
|
|
7
|
+
'value-changed': GridFilterValueChangedEvent;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface GridFilterEventMap extends HTMLElementEventMap, GridFilterCustomEventMap {}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* `<vaadin-grid-filter>` is a helper element for the `<vaadin-grid>` that provides out-of-the-box UI controls,
|
|
14
|
+
* and handlers for filtering the grid data.
|
|
15
|
+
*
|
|
16
|
+
* #### Example:
|
|
17
|
+
* ```html
|
|
18
|
+
* <vaadin-grid-column id="column"></vaadin-grid-column>
|
|
19
|
+
* ```
|
|
20
|
+
* ```js
|
|
21
|
+
* const column = document.querySelector('#column');
|
|
22
|
+
* column.headerRenderer = (root, column) => {
|
|
23
|
+
* let filter = root.firstElementChild;
|
|
24
|
+
* if (!filter) {
|
|
25
|
+
* filter = document.createElement('vaadin-grid-filter');
|
|
26
|
+
* root.appendChild(filter);
|
|
27
|
+
* }
|
|
28
|
+
* filter.path = 'name.first';
|
|
29
|
+
* };
|
|
30
|
+
* column.renderer = (root, column, model) => {
|
|
31
|
+
* root.textContent = model.item.name.first;
|
|
32
|
+
* };
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @fires {CustomEvent} value-changed - Fired when the `value` property changes.
|
|
36
|
+
*/
|
|
37
|
+
declare class GridFilter extends HTMLElement {
|
|
38
|
+
/**
|
|
39
|
+
* JS Path of the property in the item used for filtering the data.
|
|
40
|
+
*/
|
|
41
|
+
path: string | null | undefined;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Current filter value.
|
|
45
|
+
*/
|
|
46
|
+
value: string | null | undefined;
|
|
47
|
+
|
|
48
|
+
addEventListener<K extends keyof GridFilterEventMap>(
|
|
49
|
+
type: K,
|
|
50
|
+
listener: (this: GridFilter, ev: GridFilterEventMap[K]) => void,
|
|
51
|
+
options?: boolean | AddEventListenerOptions
|
|
52
|
+
): void;
|
|
53
|
+
|
|
54
|
+
removeEventListener<K extends keyof GridFilterEventMap>(
|
|
55
|
+
type: K,
|
|
56
|
+
listener: (this: GridFilter, ev: GridFilterEventMap[K]) => void,
|
|
57
|
+
options?: boolean | EventListenerOptions
|
|
58
|
+
): void;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
declare global {
|
|
62
|
+
interface HTMLElementTagNameMap {
|
|
63
|
+
'vaadin-grid-filter': GridFilter;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export { GridFilter };
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2021 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
import { PolymerElement, html } from '@polymer/polymer/polymer-element.js';
|
|
7
|
+
import { Debouncer } from '@vaadin/component-base/src/debounce.js';
|
|
8
|
+
import { timeOut } from '@vaadin/component-base/src/async.js';
|
|
9
|
+
import '@vaadin/text-field/src/vaadin-text-field.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* `<vaadin-grid-filter>` is a helper element for the `<vaadin-grid>` that provides out-of-the-box UI controls,
|
|
13
|
+
* and handlers for filtering the grid data.
|
|
14
|
+
*
|
|
15
|
+
* #### Example:
|
|
16
|
+
* ```html
|
|
17
|
+
* <vaadin-grid-column id="column"></vaadin-grid-column>
|
|
18
|
+
* ```
|
|
19
|
+
* ```js
|
|
20
|
+
* const column = document.querySelector('#column');
|
|
21
|
+
* column.headerRenderer = (root, column) => {
|
|
22
|
+
* let filter = root.firstElementChild;
|
|
23
|
+
* if (!filter) {
|
|
24
|
+
* filter = document.createElement('vaadin-grid-filter');
|
|
25
|
+
* root.appendChild(filter);
|
|
26
|
+
* }
|
|
27
|
+
* filter.path = 'name.first';
|
|
28
|
+
* };
|
|
29
|
+
* column.renderer = (root, column, model) => {
|
|
30
|
+
* root.textContent = model.item.name.first;
|
|
31
|
+
* };
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @fires {CustomEvent} value-changed - Fired when the `value` property changes.
|
|
35
|
+
*
|
|
36
|
+
* @extends HTMLElement
|
|
37
|
+
*/
|
|
38
|
+
class GridFilter extends class extends PolymerElement {} {
|
|
39
|
+
static get template() {
|
|
40
|
+
return html`
|
|
41
|
+
<style>
|
|
42
|
+
:host {
|
|
43
|
+
display: inline-flex;
|
|
44
|
+
max-width: 100%;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
#filter {
|
|
48
|
+
width: 100%;
|
|
49
|
+
box-sizing: border-box;
|
|
50
|
+
}
|
|
51
|
+
</style>
|
|
52
|
+
<slot name="filter">
|
|
53
|
+
<vaadin-text-field id="filter" value="{{value}}"></vaadin-text-field>
|
|
54
|
+
</slot>
|
|
55
|
+
`;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
static get is() {
|
|
59
|
+
return 'vaadin-grid-filter';
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
static get properties() {
|
|
63
|
+
return {
|
|
64
|
+
/**
|
|
65
|
+
* JS Path of the property in the item used for filtering the data.
|
|
66
|
+
*/
|
|
67
|
+
path: String,
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Current filter value.
|
|
71
|
+
*/
|
|
72
|
+
value: {
|
|
73
|
+
type: String,
|
|
74
|
+
notify: true
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
/** @private */
|
|
78
|
+
_connected: Boolean
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** @protected */
|
|
83
|
+
connectedCallback() {
|
|
84
|
+
super.connectedCallback();
|
|
85
|
+
this._connected = true;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
static get observers() {
|
|
89
|
+
return ['_filterChanged(path, value, _connected)'];
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** @protected */
|
|
93
|
+
ready() {
|
|
94
|
+
super.ready();
|
|
95
|
+
|
|
96
|
+
const child = this.firstElementChild;
|
|
97
|
+
if (child && child.getAttribute('slot') !== 'filter') {
|
|
98
|
+
console.warn('Make sure you have assigned slot="filter" to the child elements of <vaadin-grid-filter>');
|
|
99
|
+
child.setAttribute('slot', 'filter');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** @private */
|
|
104
|
+
_filterChanged(path, value, connected) {
|
|
105
|
+
if (path === undefined || value === undefined || !connected) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (this._previousValue === undefined && value === '') {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
this._previousValue = value;
|
|
112
|
+
|
|
113
|
+
this._debouncerFilterChanged = Debouncer.debounce(this._debouncerFilterChanged, timeOut.after(200), () => {
|
|
114
|
+
this.dispatchEvent(new CustomEvent('filter-changed', { bubbles: true }));
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
focus() {
|
|
119
|
+
this.$.filter.focus();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
customElements.define(GridFilter.is, GridFilter);
|
|
124
|
+
|
|
125
|
+
export { GridFilter };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2021 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @param {Array<Object>} columns array of columns to be modified
|
|
9
|
+
* @param {number} scope multiplier added to base order for each column
|
|
10
|
+
* @param {number} baseOrder base number used for order
|
|
11
|
+
*/
|
|
12
|
+
export function updateColumnOrders(columns, scope, baseOrder) {
|
|
13
|
+
let c = 1;
|
|
14
|
+
columns.forEach((column) => {
|
|
15
|
+
// avoid multiples of 10 because they introduce and extra zero and
|
|
16
|
+
// causes the underlying calculations for child order goes wrong
|
|
17
|
+
if (c % 10 === 0) {
|
|
18
|
+
c++;
|
|
19
|
+
}
|
|
20
|
+
column._order = baseOrder + c * scope;
|
|
21
|
+
c++;
|
|
22
|
+
});
|
|
23
|
+
}
|