@nuralyui/table 0.0.3 → 0.0.7
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/bundle.js +2351 -0
- package/package.json +16 -2
- package/react.js +2 -2
- package/react.js.map +1 -1
- package/table.component.d.ts +112 -12
- package/table.component.js +285 -136
- package/table.component.js.map +1 -1
- package/table.style.js +676 -2
- package/table.style.js.map +1 -1
- package/table.types.d.ts +60 -4
- package/table.types.js +0 -23
- package/table.types.js.map +1 -1
- package/components/hy-table-actions.d.ts +0 -10
- package/components/hy-table-actions.d.ts.map +0 -1
- package/components/hy-table-actions.js +0 -39
- package/components/hy-table-actions.js.map +0 -1
- package/components/hy-table-content.d.ts +0 -25
- package/components/hy-table-content.d.ts.map +0 -1
- package/components/hy-table-content.js +0 -168
- package/components/hy-table-content.js.map +0 -1
- package/components/hy-table-filter.d.ts +0 -11
- package/components/hy-table-filter.d.ts.map +0 -1
- package/components/hy-table-filter.js +0 -59
- package/components/hy-table-filter.js.map +0 -1
- package/components/hy-table-pagination.d.ts +0 -21
- package/components/hy-table-pagination.d.ts.map +0 -1
- package/components/hy-table-pagination.js +0 -111
- package/components/hy-table-pagination.js.map +0 -1
- package/components/table-actions.style.d.ts +0 -2
- package/components/table-actions.style.d.ts.map +0 -1
- package/components/table-actions.style.js +0 -31
- package/components/table-actions.style.js.map +0 -1
- package/components/table-actions.variables.d.ts +0 -2
- package/components/table-actions.variables.d.ts.map +0 -1
- package/components/table-actions.variables.js +0 -13
- package/components/table-actions.variables.js.map +0 -1
- package/components/table-content.style.d.ts +0 -2
- package/components/table-content.style.d.ts.map +0 -1
- package/components/table-content.style.js +0 -77
- package/components/table-content.style.js.map +0 -1
- package/components/table-content.variables.d.ts +0 -2
- package/components/table-content.variables.d.ts.map +0 -1
- package/components/table-content.variables.js +0 -29
- package/components/table-content.variables.js.map +0 -1
- package/components/table-filter.style.d.ts +0 -2
- package/components/table-filter.style.d.ts.map +0 -1
- package/components/table-filter.style.js +0 -39
- package/components/table-filter.style.js.map +0 -1
- package/components/table-filter.variables.d.ts +0 -2
- package/components/table-filter.variables.d.ts.map +0 -1
- package/components/table-filter.variables.js +0 -17
- package/components/table-filter.variables.js.map +0 -1
- package/components/table-pagination.style.d.ts +0 -2
- package/components/table-pagination.style.d.ts.map +0 -1
- package/components/table-pagination.style.js +0 -102
- package/components/table-pagination.style.js.map +0 -1
- package/components/table-pagination.variables.d.ts +0 -2
- package/components/table-pagination.variables.d.ts.map +0 -1
- package/components/table-pagination.variables.js +0 -17
- package/components/table-pagination.variables.js.map +0 -1
- package/demo/table-demo.d.ts +0 -17
- package/demo/table-demo.d.ts.map +0 -1
- package/demo/table-demo.js +0 -166
- package/demo/table-demo.js.map +0 -1
- package/index.d.ts.map +0 -1
- package/react.d.ts.map +0 -1
- package/table.component.d.ts.map +0 -1
- package/table.style.d.ts.map +0 -1
- package/table.types.d.ts.map +0 -1
- package/test/hy-table-actions_test.d.ts +0 -2
- package/test/hy-table-actions_test.d.ts.map +0 -1
- package/test/hy-table-actions_test.js +0 -32
- package/test/hy-table-actions_test.js.map +0 -1
- package/test/hy-table-content_test.d.ts +0 -2
- package/test/hy-table-content_test.d.ts.map +0 -1
- package/test/hy-table-content_test.js +0 -168
- package/test/hy-table-content_test.js.map +0 -1
- package/test/hy-table-filter_test.d.ts +0 -2
- package/test/hy-table-filter_test.d.ts.map +0 -1
- package/test/hy-table-filter_test.js +0 -80
- package/test/hy-table-filter_test.js.map +0 -1
- package/test/hy-table-pagination_test.d.ts +0 -2
- package/test/hy-table-pagination_test.d.ts.map +0 -1
- package/test/hy-table-pagination_test.js +0 -114
- package/test/hy-table-pagination_test.js.map +0 -1
- package/test/hy-table_test.d.ts +0 -2
- package/test/hy-table_test.d.ts.map +0 -1
- package/test/hy-table_test.js +0 -145
- package/test/hy-table_test.js.map +0 -1
package/table.component.js
CHANGED
|
@@ -1,198 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
1
6
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
7
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
8
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
9
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
10
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
11
|
};
|
|
7
|
-
import styles from './table.style.js';
|
|
8
12
|
import { LitElement, html, nothing } from 'lit';
|
|
9
|
-
import { customElement, property, state } from 'lit/decorators.js';
|
|
10
|
-
import '
|
|
11
|
-
import './
|
|
12
|
-
import './
|
|
13
|
-
|
|
14
|
-
import
|
|
15
|
-
|
|
13
|
+
import { customElement, property, state, query } from 'lit/decorators.js';
|
|
14
|
+
import { NuralyUIBaseMixin } from '@nuralyui/common/mixins';
|
|
15
|
+
import styles from './table.style.js';
|
|
16
|
+
import { EMPTY_STRING } from './table.types.js';
|
|
17
|
+
// Import required components
|
|
18
|
+
import '../select/select.component.js';
|
|
19
|
+
import '../icon/icon.component.js';
|
|
20
|
+
import '../radio/radio.component.js';
|
|
21
|
+
// Import controllers
|
|
22
|
+
import { TableSelectionController, TablePaginationController, TableSortController, TableFilterController } from './controllers/index.js';
|
|
23
|
+
// Import templates
|
|
24
|
+
import { renderPaginationTemplate, renderContentTemplate, renderActionsTemplate, renderFilterTemplate } from './templates/index.js';
|
|
25
|
+
/**
|
|
26
|
+
* Advanced table component with sorting, filtering, pagination, selection, and fixed columns.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```html
|
|
30
|
+
* <!-- Basic table with fixed header -->
|
|
31
|
+
* <nr-table
|
|
32
|
+
* .headers=${headers}
|
|
33
|
+
* .rows=${data}
|
|
34
|
+
* size="normal"
|
|
35
|
+
* selectionMode="multiple"
|
|
36
|
+
* fixedHeader
|
|
37
|
+
* .scrollConfig=${{ y: 400 }}>
|
|
38
|
+
* </nr-table>
|
|
39
|
+
*
|
|
40
|
+
* <!-- Table with fixed columns -->
|
|
41
|
+
* <nr-table
|
|
42
|
+
* .headers=${[
|
|
43
|
+
* { name: 'ID', key: 'id', fixed: 'left', width: 80 },
|
|
44
|
+
* { name: 'Name', key: 'name', fixed: 'left', width: 150 },
|
|
45
|
+
* { name: 'Email', key: 'email' },
|
|
46
|
+
* { name: 'Status', key: 'status' }
|
|
47
|
+
* ]}
|
|
48
|
+
* .rows=${data}
|
|
49
|
+
* .scrollConfig=${{ x: 800 }}>
|
|
50
|
+
* </nr-table>
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @fires onPaginate - Fired when pagination changes
|
|
54
|
+
* @fires nr-select - Fired when row selection changes
|
|
55
|
+
* @fires onSearch - Fired when search/filter is applied
|
|
56
|
+
* @fires onSort - Fired when sorting is applied
|
|
57
|
+
*/
|
|
58
|
+
let HyTable = class HyTable extends NuralyUIBaseMixin(LitElement) {
|
|
16
59
|
constructor() {
|
|
17
60
|
super(...arguments);
|
|
18
61
|
this.rows = [];
|
|
19
|
-
this.size = Sizes.Normal
|
|
62
|
+
this.size = "normal" /* Sizes.Normal */;
|
|
20
63
|
this.withFilter = false;
|
|
64
|
+
this.fixedHeader = false;
|
|
65
|
+
this.loading = false;
|
|
66
|
+
this.emptyText = 'No data available';
|
|
21
67
|
this.itemPerPage = [5, 10, 15, 20];
|
|
22
68
|
this.selectedItemPerPage = this.itemPerPage[0];
|
|
23
69
|
this.displayedRows = [];
|
|
24
70
|
this.selectedItems = [];
|
|
25
71
|
this.rowsCopy = [];
|
|
26
72
|
this.activeSearch = false;
|
|
27
|
-
this.sortAttribute = { index: -1, order: SortOrder.Default };
|
|
73
|
+
this.sortAttribute = { index: -1, order: "default" /* SortOrder.Default */ };
|
|
74
|
+
this.expand = [];
|
|
75
|
+
this.showFilterInput = false;
|
|
76
|
+
this.filterValue = EMPTY_STRING;
|
|
77
|
+
this.columnFilters = new Map();
|
|
78
|
+
this.activeFilterColumn = null;
|
|
79
|
+
this.requiredComponents = ['nr-select', 'nr-icon', 'nr-checkbox', 'nr-radio'];
|
|
80
|
+
// Controllers
|
|
81
|
+
this.selectionController = new TableSelectionController(this);
|
|
82
|
+
this.paginationController = new TablePaginationController(this);
|
|
83
|
+
this.sortController = new TableSortController(this);
|
|
84
|
+
this.filterController = new TableFilterController(this);
|
|
28
85
|
}
|
|
29
86
|
connectedCallback() {
|
|
30
87
|
super.connectedCallback();
|
|
31
|
-
this.
|
|
88
|
+
this.selectionController.initSelection();
|
|
89
|
+
}
|
|
90
|
+
updated(_changedProperties) {
|
|
91
|
+
var _a, _b;
|
|
92
|
+
if (this.globalCheck && (_changedProperties.has('selectedItems') || _changedProperties.has('currentPage') || _changedProperties.has('displayedRows'))) {
|
|
93
|
+
const checkbox = this.globalCheck;
|
|
94
|
+
// Get the selection state for the current page only
|
|
95
|
+
const startIndex = (this.currentPage - 1) * this.selectedItemPerPage;
|
|
96
|
+
const endIndex = Math.min(startIndex + this.displayedRows.length, this.selectedItems.length);
|
|
97
|
+
const currentPageSelections = this.selectedItems.slice(startIndex, endIndex);
|
|
98
|
+
if (currentPageSelections.length > 0 && currentPageSelections.every((isSelected) => isSelected)) {
|
|
99
|
+
checkbox.checked = true;
|
|
100
|
+
checkbox.indeterminate = false;
|
|
101
|
+
}
|
|
102
|
+
else if (currentPageSelections.some((isSelected) => isSelected)) {
|
|
103
|
+
checkbox.checked = false;
|
|
104
|
+
checkbox.indeterminate = true;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
checkbox.checked = false;
|
|
108
|
+
checkbox.indeterminate = false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (this.showFilterInput && _changedProperties.has('showFilterInput')) {
|
|
112
|
+
(_b = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('input')) === null || _b === void 0 ? void 0 : _b.focus();
|
|
113
|
+
}
|
|
32
114
|
}
|
|
33
115
|
willUpdate(_changedProperties) {
|
|
34
|
-
if (_changedProperties.has('
|
|
116
|
+
if (_changedProperties.has('rows')) {
|
|
117
|
+
this.expand = Array(this.rows.length).fill(false);
|
|
118
|
+
}
|
|
119
|
+
if (_changedProperties.has('sortAttribute') && this.sortController.isSortActive()) {
|
|
35
120
|
this._initPagination();
|
|
36
|
-
this.
|
|
121
|
+
this.selectionController.initSelection();
|
|
37
122
|
}
|
|
38
123
|
if (_changedProperties.has('rowsCopy')) {
|
|
39
|
-
if (this.
|
|
124
|
+
if (this.filterController.isSearchActive()) {
|
|
40
125
|
this._initPagination();
|
|
41
126
|
}
|
|
42
127
|
}
|
|
43
128
|
if (_changedProperties.has('activeSearch') || _changedProperties.has('rows')) {
|
|
44
|
-
if (!this.
|
|
129
|
+
if (!this.filterController.isSearchActive()) {
|
|
45
130
|
this.rowsCopy = [...this.rows];
|
|
46
131
|
this._initPagination();
|
|
47
132
|
}
|
|
48
133
|
}
|
|
49
134
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
135
|
+
/**
|
|
136
|
+
* Initialize or reset pagination state
|
|
137
|
+
*/
|
|
54
138
|
_initPagination() {
|
|
55
|
-
if (this.
|
|
56
|
-
if (this.
|
|
57
|
-
this.
|
|
58
|
-
|
|
59
|
-
|
|
139
|
+
if (this.sortController.isSortActive()) {
|
|
140
|
+
if (!this.sortController.isSortDefault()) {
|
|
141
|
+
this.sortController.sort();
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
this.sortController.resetSort();
|
|
145
|
+
}
|
|
60
146
|
}
|
|
61
|
-
this.
|
|
62
|
-
this.currentPage = this.rowsCopy.length > 0 ? 1 : 0;
|
|
147
|
+
this.paginationController.initPagination();
|
|
63
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Handle items per page change event
|
|
151
|
+
*/
|
|
64
152
|
_handleItemPerPage(itemPerPageEvent) {
|
|
65
|
-
|
|
66
|
-
this.
|
|
153
|
+
const value = itemPerPageEvent.detail.value || itemPerPageEvent.detail.selectedItemPerPage;
|
|
154
|
+
this.paginationController.handleItemPerPageChange(Number(value));
|
|
67
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Handle page navigation event
|
|
158
|
+
*/
|
|
68
159
|
_handleUpdatePage(updatePageEvent) {
|
|
69
|
-
this.
|
|
70
|
-
this.displayedRows = this.rowsCopy.slice((updatePageEvent.detail.page - 1) * this.selectedItemPerPage, (updatePageEvent.detail.page - 1) * this.selectedItemPerPage + this.selectedItemPerPage);
|
|
71
|
-
this.dispatchEvent(new CustomEvent('onPaginate', { bubbles: true, composed: true, detail: { value: this.currentPage } }));
|
|
160
|
+
this.paginationController.handlePageChange(updatePageEvent.detail.page);
|
|
72
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* Handle check all rows event
|
|
164
|
+
*/
|
|
73
165
|
_handleCheckAll(checkAllEvent) {
|
|
74
|
-
|
|
75
|
-
this.selectedItems = everyItemChecked ? this.selectedItems.map(() => false) : this.selectedItems.map(() => true);
|
|
76
|
-
this.dispatchEvent(new CustomEvent('onSelect', { bubbles: true, composed: true, detail: { value: this.rowsCopy.filter((_, i) => this.selectedItems[i]) } }));
|
|
166
|
+
this.selectionController.handleCheckAll(checkAllEvent.detail.isEveryItemChecked);
|
|
77
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Handle check single row event
|
|
170
|
+
*/
|
|
78
171
|
_handleCheckOne(checkOneEvent) {
|
|
79
|
-
|
|
80
|
-
this.selectedItems[indexSelected + (this.currentPage - 1) * this.selectedItemPerPage] = checkOneEvent.detail.value;
|
|
81
|
-
this.selectedItems = [...this.selectedItems];
|
|
82
|
-
this.dispatchEvent(new CustomEvent('onSelect', { bubbles: true, composed: true, detail: { value: this.rowsCopy.filter((_, i) => this.selectedItems[i]) } }));
|
|
172
|
+
this.selectionController.handleCheckOne(checkOneEvent.detail.index, checkOneEvent.detail.value);
|
|
83
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Handle select single row event (radio button mode)
|
|
176
|
+
*/
|
|
84
177
|
_handleSelectOne(selectOneEvent) {
|
|
85
|
-
|
|
86
|
-
if (previousSelected > -1) {
|
|
87
|
-
this.selectedItems[previousSelected] = false;
|
|
88
|
-
}
|
|
89
|
-
const indexSelected = selectOneEvent.detail.index;
|
|
90
|
-
this.selectedItems[indexSelected + (this.currentPage - 1) * this.selectedItemPerPage] = true;
|
|
91
|
-
this.selectedItems = [...this.selectedItems];
|
|
92
|
-
this.dispatchEvent(new CustomEvent('onSelect', { bubbles: true, composed: true, detail: { value: this.rowsCopy.filter((_, i) => this.selectedItems[i]) } }));
|
|
178
|
+
this.selectionController.handleSelectOne(selectOneEvent.detail.index);
|
|
93
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Handle cancel selection action
|
|
182
|
+
*/
|
|
94
183
|
_handleCancelSelection() {
|
|
95
|
-
this.
|
|
96
|
-
this.dispatchEvent(new CustomEvent('onSelect', { bubbles: true, composed: true, detail: { value: this.selectedItems } }));
|
|
184
|
+
this.selectionController.cancelSelection();
|
|
97
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* Handle search/filter input
|
|
188
|
+
*/
|
|
98
189
|
_handleSearch(searchEvent) {
|
|
99
|
-
|
|
100
|
-
if (searchValue.trim().length > 0) {
|
|
101
|
-
this.activeSearch = true;
|
|
102
|
-
this.rowsCopy = this.rows.filter((rowValue) => {
|
|
103
|
-
return Object.values(rowValue).some((attributeValue) => {
|
|
104
|
-
const stringValue = JSON.stringify(attributeValue);
|
|
105
|
-
return stringValue.includes(searchValue);
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
this.dispatchEvent(new CustomEvent('onSearch', { bubbles: true, composed: true, detail: { value: this.rowsCopy } }));
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
this.activeSearch = false;
|
|
112
|
-
}
|
|
190
|
+
this.filterController.handleSearch(searchEvent.detail.value);
|
|
113
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* Handle column sort order change
|
|
194
|
+
*/
|
|
114
195
|
_handleSortOrder(sortOrderEvent) {
|
|
115
|
-
|
|
116
|
-
if (index != this.sortAttribute.index) {
|
|
117
|
-
this.sortAttribute.index = index;
|
|
118
|
-
this.sortAttribute.order = SortOrder.Ascending;
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
if (this.sortAttribute.order == SortOrder.Default)
|
|
122
|
-
this.sortAttribute.order = SortOrder.Ascending;
|
|
123
|
-
else if (this.sortAttribute.order == SortOrder.Ascending)
|
|
124
|
-
this.sortAttribute.order = SortOrder.Descending;
|
|
125
|
-
else
|
|
126
|
-
this.sortAttribute.order = SortOrder.Default;
|
|
127
|
-
}
|
|
128
|
-
this.sortAttribute = Object.assign({}, this.sortAttribute);
|
|
129
|
-
}
|
|
130
|
-
_sort() {
|
|
131
|
-
if (this.rowsCopy.length) {
|
|
132
|
-
const sortOrder = this.sortAttribute.order == SortOrder.Default
|
|
133
|
-
? SortValue.Default
|
|
134
|
-
: this.sortAttribute.order == SortOrder.Ascending
|
|
135
|
-
? SortValue.Ascending
|
|
136
|
-
: SortValue.Descending;
|
|
137
|
-
this.rowsCopy.sort((a, b) => {
|
|
138
|
-
const stringifyA = JSON.stringify(a[this.headers[this.sortAttribute.index].key]);
|
|
139
|
-
const stringifyB = JSON.stringify(b[this.headers[this.sortAttribute.index].key]);
|
|
140
|
-
const result = stringifyA < stringifyB ? -1 : stringifyA > stringifyB ? 1 : 0;
|
|
141
|
-
return result * sortOrder;
|
|
142
|
-
});
|
|
143
|
-
this.dispatchEvent(new CustomEvent('onSort', { bubbles: true, composed: true, detail: { value: this.rowsCopy } }));
|
|
144
|
-
}
|
|
196
|
+
this.sortController.handleSortOrderChange(sortOrderEvent.detail.index);
|
|
145
197
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
: positionInOriginalArrayA < positionInOriginalArrayB
|
|
153
|
-
? SortValue.Descending
|
|
154
|
-
: SortValue.Default;
|
|
155
|
-
});
|
|
198
|
+
/**
|
|
199
|
+
* Toggle expanded content for a row
|
|
200
|
+
*/
|
|
201
|
+
_showExpandedContent(index) {
|
|
202
|
+
this.expand[index] = !this.expand[index];
|
|
203
|
+
this.requestUpdate();
|
|
156
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* Toggle filter input visibility
|
|
207
|
+
*/
|
|
208
|
+
_toggleFilterInput() {
|
|
209
|
+
this.showFilterInput = !this.showFilterInput;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Handle filter input change
|
|
213
|
+
*/
|
|
214
|
+
_handleFilterInputChange(event) {
|
|
215
|
+
this.filterValue = event.target.value;
|
|
216
|
+
this.filterController.handleSearch(this.filterValue);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Render the table component with all templates
|
|
220
|
+
*/
|
|
157
221
|
render() {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
.
|
|
162
|
-
|
|
163
|
-
|
|
222
|
+
var _a, _b;
|
|
223
|
+
const numberOfPages = Math.ceil(this.rowsCopy.length / this.selectedItemPerPage);
|
|
224
|
+
const fromItem = this.currentPage > 0
|
|
225
|
+
? this.currentPage * this.selectedItemPerPage - this.selectedItemPerPage + 1
|
|
226
|
+
: 0;
|
|
227
|
+
const toItem = this.currentPage * this.selectedItemPerPage <= this.rowsCopy.length
|
|
228
|
+
? this.currentPage * this.selectedItemPerPage
|
|
229
|
+
: this.rowsCopy.length;
|
|
230
|
+
const enableNext = toItem < this.rowsCopy.length;
|
|
231
|
+
const enablePrevious = fromItem > 1;
|
|
232
|
+
return html `
|
|
233
|
+
${this.selectionMode && !this.withFilter && this.selectionController.hasSelection()
|
|
234
|
+
? renderActionsTemplate({
|
|
235
|
+
selectedItems: this.selectionController.getSelectedCount(),
|
|
236
|
+
size: this.size,
|
|
237
|
+
onCancelSelection: () => this._handleCancelSelection()
|
|
238
|
+
})
|
|
164
239
|
: this.withFilter
|
|
165
240
|
? html `
|
|
166
241
|
<div class="filter-container">
|
|
167
|
-
|
|
242
|
+
${renderFilterTemplate({
|
|
243
|
+
showInput: this.showFilterInput,
|
|
244
|
+
value: this.filterValue,
|
|
245
|
+
onToggleInput: () => this._toggleFilterInput(),
|
|
246
|
+
onChange: (e) => this._handleFilterInputChange(e)
|
|
247
|
+
})}
|
|
168
248
|
</div>
|
|
169
249
|
`
|
|
170
250
|
: nothing}
|
|
171
|
-
<hy-table-content
|
|
172
|
-
.headers=${this.headers}
|
|
173
|
-
.rows=${this.displayedRows}
|
|
174
|
-
.expandable=${this.expandable && !this.selectionMode ? this.expandable : nothing}
|
|
175
|
-
.selectionMode=${this.selectionMode && !this.withFilter ? this.selectionMode : nothing}
|
|
176
|
-
.selectedItems=${this.selectedItems}
|
|
177
|
-
.currentPage=${this.currentPage}
|
|
178
|
-
.itemPerPage=${this.selectedItemPerPage}
|
|
179
|
-
.sortAttribute=${this.sortAttribute}
|
|
180
|
-
.size=${this.size}
|
|
181
|
-
@check-all=${this._handleCheckAll}
|
|
182
|
-
@check-one=${this._handleCheckOne}
|
|
183
|
-
@select-one=${this._handleSelectOne}
|
|
184
|
-
@update-sort=${this._handleSortOrder}
|
|
185
|
-
></hy-table-content>
|
|
186
251
|
|
|
187
|
-
<
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
252
|
+
<div class="table-content-wrapper ${this.fixedHeader ? 'fixed-header' : ''}"
|
|
253
|
+
style="${((_a = this.scrollConfig) === null || _a === void 0 ? void 0 : _a.y) ? `${this.fixedHeader ? 'height' : 'max-height'}: ${typeof this.scrollConfig.y === 'number' ? this.scrollConfig.y + 'px' : this.scrollConfig.y};` : ''}
|
|
254
|
+
${((_b = this.scrollConfig) === null || _b === void 0 ? void 0 : _b.x) ? `${this.fixedHeader ? 'width' : 'max-width'}: ${typeof this.scrollConfig.x === 'number' ? this.scrollConfig.x + 'px' : this.scrollConfig.x};` : ''}">
|
|
255
|
+
${renderContentTemplate({
|
|
256
|
+
headers: this.headers,
|
|
257
|
+
rows: this.displayedRows,
|
|
258
|
+
expandable: this.expandable && !this.selectionMode ? this.expandable : undefined,
|
|
259
|
+
expansionRenderer: !this.selectionMode ? this.expansionRenderer : undefined,
|
|
260
|
+
selectionMode: this.selectionMode && !this.withFilter ? this.selectionMode : undefined,
|
|
261
|
+
selectedItems: this.selectedItems,
|
|
262
|
+
currentPage: this.currentPage,
|
|
263
|
+
itemPerPage: this.selectedItemPerPage,
|
|
264
|
+
sortAttribute: this.sortAttribute,
|
|
265
|
+
expand: this.expand,
|
|
266
|
+
columnFilters: this.columnFilters,
|
|
267
|
+
activeFilterColumn: this.activeFilterColumn,
|
|
268
|
+
loading: this.loading,
|
|
269
|
+
host: this,
|
|
270
|
+
onCheckAll: () => {
|
|
271
|
+
const startIndex = (this.currentPage - 1) * this.selectedItemPerPage;
|
|
272
|
+
const endIndex = Math.min(startIndex + this.selectedItemPerPage, this.selectedItems.length);
|
|
273
|
+
const currentPageItems = this.selectedItems.slice(startIndex, endIndex);
|
|
274
|
+
const isEveryItemChecked = currentPageItems.every(i => i) && currentPageItems.length > 0;
|
|
275
|
+
this._handleCheckAll({ detail: { isEveryItemChecked } });
|
|
276
|
+
},
|
|
277
|
+
onCheckOne: (e, index) => this._handleCheckOne({ detail: { index, value: e.detail.checked } }),
|
|
278
|
+
onSelectOne: (index) => this._handleSelectOne({ detail: { index } }),
|
|
279
|
+
onUpdateSort: (index) => this._handleSortOrder({ detail: { index } }),
|
|
280
|
+
onShowExpandedContent: (index) => this._showExpandedContent(index),
|
|
281
|
+
onToggleColumnFilter: (columnKey) => this.filterController.toggleColumnFilterDropdown(columnKey),
|
|
282
|
+
onApplyColumnFilter: (columnKey, value) => this.filterController.applyColumnFilter(columnKey, value),
|
|
283
|
+
onClearColumnFilter: (columnKey) => this.filterController.clearColumnFilter(columnKey)
|
|
284
|
+
})}
|
|
285
|
+
</div>
|
|
286
|
+
|
|
287
|
+
${renderPaginationTemplate({
|
|
288
|
+
numberOfItems: this.rowsCopy.length,
|
|
289
|
+
itemPerPage: this.itemPerPage,
|
|
290
|
+
selectedItemPerPage: this.selectedItemPerPage,
|
|
291
|
+
currentPage: this.currentPage,
|
|
292
|
+
size: this.size,
|
|
293
|
+
numberOfPages,
|
|
294
|
+
fromItem,
|
|
295
|
+
toItem,
|
|
296
|
+
enableNext,
|
|
297
|
+
enablePrevious,
|
|
298
|
+
onItemPerPageChange: (e) => this._handleItemPerPage(e),
|
|
299
|
+
onNextPage: () => {
|
|
300
|
+
this.currentPage++;
|
|
301
|
+
this._handleUpdatePage({ detail: { page: this.currentPage } });
|
|
302
|
+
},
|
|
303
|
+
onPreviousPage: () => {
|
|
304
|
+
this.currentPage--;
|
|
305
|
+
this._handleUpdatePage({ detail: { page: this.currentPage } });
|
|
306
|
+
}
|
|
307
|
+
})}
|
|
308
|
+
`;
|
|
196
309
|
}
|
|
197
310
|
};
|
|
198
311
|
HyTable.styles = styles;
|
|
@@ -203,7 +316,7 @@ __decorate([
|
|
|
203
316
|
property({ type: Array })
|
|
204
317
|
], HyTable.prototype, "rows", void 0);
|
|
205
318
|
__decorate([
|
|
206
|
-
property()
|
|
319
|
+
property({ type: String })
|
|
207
320
|
], HyTable.prototype, "size", void 0);
|
|
208
321
|
__decorate([
|
|
209
322
|
property({ type: Boolean })
|
|
@@ -212,8 +325,26 @@ __decorate([
|
|
|
212
325
|
property({ type: String })
|
|
213
326
|
], HyTable.prototype, "expandable", void 0);
|
|
214
327
|
__decorate([
|
|
215
|
-
property()
|
|
328
|
+
property({ attribute: false })
|
|
329
|
+
], HyTable.prototype, "expansionRenderer", void 0);
|
|
330
|
+
__decorate([
|
|
331
|
+
property({ type: String })
|
|
216
332
|
], HyTable.prototype, "selectionMode", void 0);
|
|
333
|
+
__decorate([
|
|
334
|
+
property({ type: Boolean })
|
|
335
|
+
], HyTable.prototype, "fixedHeader", void 0);
|
|
336
|
+
__decorate([
|
|
337
|
+
property({ type: Object })
|
|
338
|
+
], HyTable.prototype, "scrollConfig", void 0);
|
|
339
|
+
__decorate([
|
|
340
|
+
property({ type: Boolean })
|
|
341
|
+
], HyTable.prototype, "loading", void 0);
|
|
342
|
+
__decorate([
|
|
343
|
+
property({ type: String })
|
|
344
|
+
], HyTable.prototype, "emptyText", void 0);
|
|
345
|
+
__decorate([
|
|
346
|
+
property({ type: String })
|
|
347
|
+
], HyTable.prototype, "emptyIcon", void 0);
|
|
217
348
|
__decorate([
|
|
218
349
|
state()
|
|
219
350
|
], HyTable.prototype, "itemPerPage", void 0);
|
|
@@ -238,8 +369,26 @@ __decorate([
|
|
|
238
369
|
__decorate([
|
|
239
370
|
state()
|
|
240
371
|
], HyTable.prototype, "sortAttribute", void 0);
|
|
372
|
+
__decorate([
|
|
373
|
+
state()
|
|
374
|
+
], HyTable.prototype, "expand", void 0);
|
|
375
|
+
__decorate([
|
|
376
|
+
state()
|
|
377
|
+
], HyTable.prototype, "showFilterInput", void 0);
|
|
378
|
+
__decorate([
|
|
379
|
+
state()
|
|
380
|
+
], HyTable.prototype, "filterValue", void 0);
|
|
381
|
+
__decorate([
|
|
382
|
+
state()
|
|
383
|
+
], HyTable.prototype, "columnFilters", void 0);
|
|
384
|
+
__decorate([
|
|
385
|
+
state()
|
|
386
|
+
], HyTable.prototype, "activeFilterColumn", void 0);
|
|
387
|
+
__decorate([
|
|
388
|
+
query('#global-check')
|
|
389
|
+
], HyTable.prototype, "globalCheck", void 0);
|
|
241
390
|
HyTable = __decorate([
|
|
242
|
-
customElement('
|
|
391
|
+
customElement('nr-table')
|
|
243
392
|
], HyTable);
|
|
244
393
|
export { HyTable };
|
|
245
394
|
//# sourceMappingURL=table.component.js.map
|
package/table.component.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.component.js","sourceRoot":"","sources":["../../../src/components/table/table.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAC,UAAU,EAAoB,IAAI,EAAE,OAAO,EAAC,MAAM,KAAK,CAAC;AAChE,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AACjE,OAAO,kCAAkC,CAAC;AAC1C,OAAO,iCAAiC,CAAC;AACzC,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,EAAyB,KAAK,EAAiB,SAAS,EAAE,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAGpG,IAAa,OAAO,GAApB,MAAa,OAAQ,SAAQ,UAAU;IAAvC;;QAI2B,SAAI,GAAO,EAAE,CAAC;QAC3B,SAAI,GAAG,KAAK,CAAC,MAAM,CAAC;QACL,eAAU,GAAG,KAAK,CAAC;QAIrC,gBAAW,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9B,wBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC1C,kBAAa,GAAG,EAAE,CAAC;QACnB,kBAAa,GAAc,EAAE,CAAC;QAE9B,aAAQ,GAAO,EAAE,CAAC;QAClB,iBAAY,GAAG,KAAK,CAAC;QACrB,kBAAa,GAAkB,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,EAAC,CAAC;IAuLhF,CAAC;IArLU,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEQ,UAAU,CAAC,kBAA0C;QAC5D,IAAI,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;YAC5E,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;QACD,IAAI,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YACtC,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;SACF;QACD,IAAI,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC5E,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;SACF;IACH,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnF,CAAC;IACD,eAAe;QACb,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;YACjC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO;gBAAE,IAAI,CAAC,KAAK,EAAE,CAAC;;gBAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;SACxB;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACtE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,kBAAkB,CAAC,gBAA6B;QAC9C,IAAI,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,MAAM,CAAC,mBAAmB,CAAC;QACvE,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,iBAAiB,CAAC,eAA4B;QAC5C,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CACtC,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAC5D,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CACxF,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,YAAY,EAAC,EAAC,OAAO,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,EAAC,KAAK,EAAC,IAAI,CAAC,WAAW,EAAC,EAAC,CAAC,CAAC,CAAA;IAEhH,CAAC;IAED,eAAe,CAAC,aAA0B;QACxC,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,kBAAkB,CAAC;QACjE,IAAI,CAAC,aAAa,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACjH,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,EAAC,EAAC,OAAO,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,EAAC,KAAK,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAC,EAAC,CAAC,CAAC,CAAA;IAEhJ,CAAC;IACD,eAAe,CAAC,aAA0B;QACxC,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;QACjD,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;QACnH,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,EAAC,EAAC,OAAO,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,EAAC,KAAK,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAC,EAAC,CAAC,CAAC,CAAA;IAChJ,CAAC;IACD,gBAAgB,CAAC,cAA2B;QAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAClF,IAAI,gBAAgB,GAAG,CAAC,CAAC,EAAE;YACzB,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;SAC9C;QACD,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC;QAC7F,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,EAAC,EAAC,OAAO,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,EAAC,KAAK,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAC,EAAC,CAAC,CAAC,CAAA;IAEhJ,CAAC;IAED,sBAAsB;QACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,EAAC,EAAC,OAAO,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,EAAC,KAAK,EAAC,IAAI,CAAC,aAAa,EAAC,EAAC,CAAC,CAAC,CAAA;IAChH,CAAC;IAED,aAAa,CAAC,WAAwB;QACpC,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7C,IAAK,WAAsB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE;oBACrD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;oBACnD,OAAO,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAC3C,CAAC,CAAC,CAAC;YACL,CAAC,CAAO,CAAC;YACT,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,EAAC,EAAC,OAAO,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,EAAC,KAAK,EAAC,IAAI,CAAC,QAAQ,EAAC,EAAC,CAAC,CAAC,CAAA;SAC1G;aAAM;YACL,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;SAC3B;IACH,CAAC;IAED,gBAAgB,CAAC,cAA2B;QAC1C,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1C,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;YACrC,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC;SAChD;aAAM;YACL,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO;gBAAE,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC;iBAC7F,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,SAAS,CAAC,SAAS;gBAAE,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC;;gBACrG,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC;SACnD;QACD,IAAI,CAAC,aAAa,qBAAO,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACxB,MAAM,SAAS,GACb,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO;gBAC3C,CAAC,CAAC,SAAS,CAAC,OAAO;gBACnB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,SAAS,CAAC,SAAS;oBACjD,CAAC,CAAC,SAAS,CAAC,SAAS;oBACrB,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjF,MAAM,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9E,OAAO,MAAM,GAAG,SAAS,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAC,EAAC,OAAO,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,EAAC,KAAK,EAAC,IAAI,CAAC,QAAQ,EAAC,EAAC,CAAC,CAAC,CAAA;SACxG;IACH,CAAC;IAED,UAAU;QACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAClC,MAAM,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAClD,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CACnE,CAAC;YACF,MAAM,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAClD,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CACnE,CAAC;YACF,OAAO,wBAAwB,GAAG,wBAAwB;gBACxD,CAAC,CAAC,SAAS,CAAC,SAAS;gBACrB,CAAC,CAAC,wBAAwB,GAAG,wBAAwB;oBACrD,CAAC,CAAC,SAAS,CAAC,UAAU;oBACtB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IACQ,MAAM;QACb,OAAO,IAAI,CAAA,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;YACvG,CAAC,CAAC,IAAI,CAAA;6BACe,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,MAAM;oBACrE,IAAI,CAAC,IAAI;gCACG,IAAI,CAAC,sBAAsB;+BAC5B;YACvB,CAAC,CAAC,IAAI,CAAC,UAAU;gBACjB,CAAC,CAAC,IAAI,CAAA;;+CAEiC,IAAI,CAAC,aAAa;;WAEtD;gBACH,CAAC,CAAC,OAAO;;mBAEE,IAAI,CAAC,OAAO;gBACf,IAAI,CAAC,aAAa;sBACZ,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;yBAC/D,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO;yBACrE,IAAI,CAAC,aAAa;uBACpB,IAAI,CAAC,WAAW;uBAChB,IAAI,CAAC,mBAAmB;yBACtB,IAAI,CAAC,aAAa;gBAC3B,IAAI,CAAC,IAAI;qBACJ,IAAI,CAAC,eAAe;qBACpB,IAAI,CAAC,eAAe;sBACnB,IAAI,CAAC,gBAAgB;uBACpB,IAAI,CAAC,gBAAgB;;;;yBAInB,IAAI,CAAC,QAAQ,CAAC,MAAM;uBACtB,IAAI,CAAC,WAAW;uBAChB,IAAI,CAAC,WAAW;+BACR,IAAI,CAAC,mBAAmB;gBACvC,IAAI,CAAC,IAAI;yBACA,IAAI,CAAC,kBAAkB;uBACzB,IAAI,CAAC,iBAAiB;+BACd,CAAC;IAC9B,CAAC;CACF,CAAA;AAvMiB,cAAM,GAAG,MAAO,CAAA;AAEP;IAAxB,QAAQ,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC;wCAAqB;AACpB;IAAxB,QAAQ,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC;qCAAe;AAC3B;IAAX,QAAQ,EAAE;qCAAqB;AACL;IAA1B,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAC,CAAC;2CAAoB;AACpB;IAAzB,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;2CAAgC;AAC7C;IAAX,QAAQ,EAAE;8CAA0C;AAE5C;IAAR,KAAK,EAAE;4CAA+B;AAC9B;IAAR,KAAK,EAAE;oDAA2C;AAC1C;IAAR,KAAK,EAAE;8CAAoB;AACnB;IAAR,KAAK,EAAE;8CAA+B;AAC9B;IAAR,KAAK,EAAE;4CAAsB;AACrB;IAAR,KAAK,EAAE;yCAAmB;AAClB;IAAR,KAAK,EAAE;6CAAsB;AACrB;IAAR,KAAK,EAAE;8CAAsE;AAjBnE,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CAwMnB;SAxMY,OAAO","sourcesContent":["import styles from './table.style.js';\nimport {LitElement, PropertyValueMap, html, nothing} from 'lit';\nimport {customElement, property, state} from 'lit/decorators.js';\nimport './components/hy-table-actions.js';\nimport './components/hy-table-filter.js';\nimport './components/hy-table-pagination.js';\nimport './components/hy-table-content.js';\nimport {IHeader, SelectionMode, Sizes, SortAttribute, SortOrder, SortValue} from './table.types.js';\n\n@customElement('hy-table')\nexport class HyTable extends LitElement {\n static override styles = styles;\n\n @property({type: Array}) headers!: IHeader[];\n @property({type: Array}) rows: [] = [];\n @property() size = Sizes.Normal;\n @property({type: Boolean}) withFilter = false;\n @property({type: String}) expandable: string | undefined;\n @property() selectionMode: SelectionMode | undefined;\n\n @state() itemPerPage = [5, 10, 15, 20];\n @state() selectedItemPerPage = this.itemPerPage[0];\n @state() displayedRows = [];\n @state() selectedItems: boolean[] = [];\n @state() currentPage!: number;\n @state() rowsCopy: [] = [];\n @state() activeSearch = false;\n @state() sortAttribute: SortAttribute = {index: -1, order: SortOrder.Default};\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._initSelection();\n }\n\n override willUpdate(_changedProperties: PropertyValueMap<this>) {\n if (_changedProperties.has('sortAttribute') && this.sortAttribute.index > -1) {\n this._initPagination();\n this._initSelection();\n }\n if (_changedProperties.has('rowsCopy')) {\n if (this.activeSearch) {\n this._initPagination();\n }\n }\n if (_changedProperties.has('activeSearch') || _changedProperties.has('rows')) {\n if (!this.activeSearch) {\n this.rowsCopy = [...this.rows];\n this._initPagination();\n }\n }\n }\n\n _initSelection() {\n if (this.selectionMode) this.selectedItems = Array(this.rows.length).fill(false);\n }\n _initPagination() {\n if (this.sortAttribute.index > -1) {\n if (this.sortAttribute.order != SortOrder.Default) this._sort();\n else this._resetSort();\n }\n this.displayedRows = this.rowsCopy.slice(0, this.selectedItemPerPage);\n this.currentPage = this.rowsCopy.length > 0 ? 1 : 0;\n }\n\n _handleItemPerPage(itemPerPageEvent: CustomEvent) {\n this.selectedItemPerPage = itemPerPageEvent.detail.selectedItemPerPage;\n this._initPagination();\n }\n\n _handleUpdatePage(updatePageEvent: CustomEvent) {\n this.currentPage = updatePageEvent.detail.page;\n this.displayedRows = this.rowsCopy.slice(\n (updatePageEvent.detail.page - 1) * this.selectedItemPerPage,\n (updatePageEvent.detail.page - 1) * this.selectedItemPerPage + this.selectedItemPerPage\n );\n this.dispatchEvent(new CustomEvent('onPaginate',{bubbles:true,composed:true,detail:{value:this.currentPage}}))\n\n }\n\n _handleCheckAll(checkAllEvent: CustomEvent) {\n const everyItemChecked = checkAllEvent.detail.isEveryItemChecked;\n this.selectedItems = everyItemChecked ? this.selectedItems.map(() => false) : this.selectedItems.map(() => true);\n this.dispatchEvent(new CustomEvent('onSelect',{bubbles:true,composed:true,detail:{value:this.rowsCopy.filter((_,i)=>this.selectedItems[i])}}))\n\n }\n _handleCheckOne(checkOneEvent: CustomEvent) {\n const indexSelected = checkOneEvent.detail.index;\n this.selectedItems[indexSelected + (this.currentPage - 1) * this.selectedItemPerPage] = checkOneEvent.detail.value;\n this.selectedItems = [...this.selectedItems];\n this.dispatchEvent(new CustomEvent('onSelect',{bubbles:true,composed:true,detail:{value:this.rowsCopy.filter((_,i)=>this.selectedItems[i])}}))\n }\n _handleSelectOne(selectOneEvent: CustomEvent) {\n const previousSelected = this.selectedItems.findIndex((isSelected) => isSelected);\n if (previousSelected > -1) {\n this.selectedItems[previousSelected] = false;\n }\n const indexSelected = selectOneEvent.detail.index;\n this.selectedItems[indexSelected + (this.currentPage - 1) * this.selectedItemPerPage] = true;\n this.selectedItems = [...this.selectedItems];\n this.dispatchEvent(new CustomEvent('onSelect',{bubbles:true,composed:true,detail:{value:this.rowsCopy.filter((_,i)=>this.selectedItems[i])}}))\n\n }\n\n _handleCancelSelection() {\n this.selectedItems = this.selectedItems.map(() => false);\n this.dispatchEvent(new CustomEvent('onSelect',{bubbles:true,composed:true,detail:{value:this.selectedItems}}))\n }\n\n _handleSearch(searchEvent: CustomEvent) {\n const searchValue = searchEvent.detail.value;\n if ((searchValue as string).trim().length > 0) {\n this.activeSearch = true;\n this.rowsCopy = this.rows.filter((rowValue) => {\n return Object.values(rowValue).some((attributeValue) => {\n const stringValue = JSON.stringify(attributeValue);\n return stringValue.includes(searchValue);\n });\n }) as [];\n this.dispatchEvent(new CustomEvent('onSearch',{bubbles:true,composed:true,detail:{value:this.rowsCopy}}))\n } else {\n this.activeSearch = false;\n }\n }\n\n _handleSortOrder(sortOrderEvent: CustomEvent) {\n const index = sortOrderEvent.detail.index;\n if (index != this.sortAttribute.index) {\n this.sortAttribute.index = index;\n this.sortAttribute.order = SortOrder.Ascending;\n } else {\n if (this.sortAttribute.order == SortOrder.Default) this.sortAttribute.order = SortOrder.Ascending;\n else if (this.sortAttribute.order == SortOrder.Ascending) this.sortAttribute.order = SortOrder.Descending;\n else this.sortAttribute.order = SortOrder.Default;\n }\n this.sortAttribute = {...this.sortAttribute};\n }\n\n _sort() {\n if (this.rowsCopy.length) {\n const sortOrder =\n this.sortAttribute.order == SortOrder.Default\n ? SortValue.Default\n : this.sortAttribute.order == SortOrder.Ascending\n ? SortValue.Ascending\n : SortValue.Descending;\n this.rowsCopy.sort((a, b) => {\n const stringifyA = JSON.stringify(a[this.headers[this.sortAttribute.index].key]);\n const stringifyB = JSON.stringify(b[this.headers[this.sortAttribute.index].key]);\n const result = stringifyA < stringifyB ? -1 : stringifyA > stringifyB ? 1 : 0;\n return result * sortOrder;\n });\n this.dispatchEvent(new CustomEvent('onSort',{bubbles:true,composed:true,detail:{value:this.rowsCopy}}))\n }\n }\n\n _resetSort() {\n this.rowsCopy.sort((copyA, copyB) => {\n const positionInOriginalArrayA = this.rows.findIndex(\n (originalA) => JSON.stringify(originalA) === JSON.stringify(copyA)\n );\n const positionInOriginalArrayB = this.rows.findIndex(\n (originalB) => JSON.stringify(originalB) === JSON.stringify(copyB)\n );\n return positionInOriginalArrayA > positionInOriginalArrayB\n ? SortValue.Ascending\n : positionInOriginalArrayA < positionInOriginalArrayB\n ? SortValue.Descending\n : SortValue.Default;\n });\n }\n override render() {\n return html`${this.selectionMode && !this.withFilter && this.selectedItems.some((isSelected) => isSelected)\n ? html`<hy-table-actions\n .selectedItems=${this.selectedItems.filter((isSelected) => isSelected).length}\n .size=${this.size}\n @cancel-selection=${this._handleCancelSelection}\n ></hy-table-actions>`\n : this.withFilter\n ? html`\n <div class=\"filter-container\">\n <hy-table-filter @value-change=${this._handleSearch}></hy-table-filter>\n </div>\n `\n : nothing}\n <hy-table-content\n .headers=${this.headers}\n .rows=${this.displayedRows}\n .expandable=${this.expandable && !this.selectionMode ? this.expandable : nothing}\n .selectionMode=${this.selectionMode && !this.withFilter ? this.selectionMode : nothing}\n .selectedItems=${this.selectedItems}\n .currentPage=${this.currentPage}\n .itemPerPage=${this.selectedItemPerPage}\n .sortAttribute=${this.sortAttribute}\n .size=${this.size}\n @check-all=${this._handleCheckAll}\n @check-one=${this._handleCheckOne}\n @select-one=${this._handleSelectOne}\n @update-sort=${this._handleSortOrder}\n ></hy-table-content>\n\n <hy-table-pagination\n .numberOfItems=${this.rowsCopy.length}\n .currentPage=${this.currentPage}\n .itemPerPage=${this.itemPerPage}\n .selectedItemPerPage=${this.selectedItemPerPage}\n .size=${this.size}\n @item-per-page=${this._handleItemPerPage}\n @update-page=${this._handleUpdatePage}\n ></hy-table-pagination> `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"table.component.js","sourceRoot":"","sources":["../../../src/components/table/table.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { LitElement, PropertyValueMap, html, nothing } from 'lit';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { NuralyUIBaseMixin } from '@nuralyui/common/mixins';\nimport styles from './table.style.js';\nimport { IHeader, SelectionMode, Sizes, SortAttribute, SortOrder, EMPTY_STRING } from './table.types.js';\n\n// Import required components\nimport '../select/select.component.js';\nimport '../icon/icon.component.js';\nimport '../radio/radio.component.js';\n\n// Import controllers\nimport {\n TableSelectionController,\n TablePaginationController,\n TableSortController,\n TableFilterController\n} from './controllers/index.js';\n\n// Import interfaces\nimport { TableHost } from './interfaces/index.js';\n\n// Import templates\nimport {\n renderPaginationTemplate,\n renderContentTemplate,\n renderActionsTemplate,\n renderFilterTemplate\n} from './templates/index.js';\n\n/**\n * Advanced table component with sorting, filtering, pagination, selection, and fixed columns.\n * \n * @example\n * ```html\n * <!-- Basic table with fixed header -->\n * <nr-table\n * .headers=${headers}\n * .rows=${data}\n * size=\"normal\"\n * selectionMode=\"multiple\"\n * fixedHeader\n * .scrollConfig=${{ y: 400 }}>\n * </nr-table>\n * \n * <!-- Table with fixed columns -->\n * <nr-table\n * .headers=${[\n * { name: 'ID', key: 'id', fixed: 'left', width: 80 },\n * { name: 'Name', key: 'name', fixed: 'left', width: 150 },\n * { name: 'Email', key: 'email' },\n * { name: 'Status', key: 'status' }\n * ]}\n * .rows=${data}\n * .scrollConfig=${{ x: 800 }}>\n * </nr-table>\n * ```\n * \n * @fires onPaginate - Fired when pagination changes\n * @fires nr-select - Fired when row selection changes\n * @fires onSearch - Fired when search/filter is applied\n * @fires onSort - Fired when sorting is applied\n */\n@customElement('nr-table')\nexport class HyTable extends NuralyUIBaseMixin(LitElement) implements TableHost {\n static override styles = styles;\n\n @property({ type: Array }) headers!: IHeader[];\n @property({ type: Array }) rows: any[] = [];\n @property({ type: String }) size: Sizes = Sizes.Normal;\n @property({ type: Boolean }) withFilter = false;\n @property({ type: String }) expandable: string | undefined;\n @property({ attribute: false }) expansionRenderer: ((row: any, index: number) => any) | undefined;\n @property({ type: String }) selectionMode: SelectionMode | undefined;\n @property({ type: Boolean }) fixedHeader = false;\n @property({ type: Object }) scrollConfig: { x?: number | string; y?: number | string } | undefined;\n @property({ type: Boolean }) loading = false;\n @property({ type: String }) emptyText = 'No data available';\n @property({ type: String }) emptyIcon: string | undefined;\n\n @state() itemPerPage = [5, 10, 15, 20];\n @state() selectedItemPerPage = this.itemPerPage[0];\n @state() displayedRows: any[] = [];\n @state() selectedItems: boolean[] = [];\n @state() currentPage!: number;\n @state() rowsCopy: any[] = [];\n @state() activeSearch = false;\n @state() sortAttribute: SortAttribute = {index: -1, order: SortOrder.Default};\n @state() expand: boolean[] = [];\n @state() showFilterInput = false;\n @state() filterValue = EMPTY_STRING;\n @state() columnFilters: Map<string, string | number> = new Map();\n @state() activeFilterColumn: string | null = null;\n\n @query('#global-check')\n globalCheck?: HTMLElement;\n\n override requiredComponents = ['nr-select', 'nr-icon', 'nr-checkbox', 'nr-radio'];\n\n // Controllers\n private selectionController = new TableSelectionController(this);\n private paginationController = new TablePaginationController(this);\n private sortController = new TableSortController(this);\n private filterController = new TableFilterController(this);\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.selectionController.initSelection();\n }\n\n override updated(_changedProperties: PropertyValueMap<this> | Map<PropertyKey, unknown>): void {\n if (this.globalCheck && (_changedProperties.has('selectedItems') || _changedProperties.has('currentPage') || _changedProperties.has('displayedRows'))) {\n const checkbox = this.globalCheck as any;\n \n // Get the selection state for the current page only\n const startIndex = (this.currentPage - 1) * this.selectedItemPerPage;\n const endIndex = Math.min(startIndex + this.displayedRows.length, this.selectedItems.length);\n const currentPageSelections = this.selectedItems.slice(startIndex, endIndex);\n \n if (currentPageSelections.length > 0 && currentPageSelections.every((isSelected) => isSelected)) {\n checkbox.checked = true;\n checkbox.indeterminate = false;\n } else if (currentPageSelections.some((isSelected) => isSelected)) {\n checkbox.checked = false;\n checkbox.indeterminate = true;\n } else {\n checkbox.checked = false;\n checkbox.indeterminate = false;\n }\n }\n if (this.showFilterInput && _changedProperties.has('showFilterInput')) {\n this.shadowRoot?.querySelector('input')?.focus();\n }\n }\n\n override willUpdate(_changedProperties: PropertyValueMap<this>) {\n if (_changedProperties.has('rows')) {\n this.expand = Array(this.rows.length).fill(false);\n }\n if (_changedProperties.has('sortAttribute') && this.sortController.isSortActive()) {\n this._initPagination();\n this.selectionController.initSelection();\n }\n if (_changedProperties.has('rowsCopy')) {\n if (this.filterController.isSearchActive()) {\n this._initPagination();\n }\n }\n if (_changedProperties.has('activeSearch') || _changedProperties.has('rows')) {\n if (!this.filterController.isSearchActive()) {\n this.rowsCopy = [...this.rows];\n this._initPagination();\n }\n }\n }\n\n /**\n * Initialize or reset pagination state\n */\n private _initPagination() {\n if (this.sortController.isSortActive()) {\n if (!this.sortController.isSortDefault()) {\n this.sortController.sort();\n } else {\n this.sortController.resetSort();\n }\n }\n this.paginationController.initPagination();\n }\n\n /**\n * Handle items per page change event\n */\n _handleItemPerPage(itemPerPageEvent: CustomEvent) {\n const value = itemPerPageEvent.detail.value || itemPerPageEvent.detail.selectedItemPerPage;\n this.paginationController.handleItemPerPageChange(Number(value));\n }\n\n /**\n * Handle page navigation event\n */\n _handleUpdatePage(updatePageEvent: CustomEvent) {\n this.paginationController.handlePageChange(updatePageEvent.detail.page);\n }\n\n /**\n * Handle check all rows event\n */\n _handleCheckAll(checkAllEvent: CustomEvent) {\n this.selectionController.handleCheckAll(checkAllEvent.detail.isEveryItemChecked);\n }\n\n /**\n * Handle check single row event\n */\n _handleCheckOne(checkOneEvent: CustomEvent) {\n this.selectionController.handleCheckOne(checkOneEvent.detail.index, checkOneEvent.detail.value);\n }\n\n /**\n * Handle select single row event (radio button mode)\n */\n _handleSelectOne(selectOneEvent: CustomEvent) {\n this.selectionController.handleSelectOne(selectOneEvent.detail.index);\n }\n\n /**\n * Handle cancel selection action\n */\n _handleCancelSelection() {\n this.selectionController.cancelSelection();\n }\n\n /**\n * Handle search/filter input\n */\n _handleSearch(searchEvent: CustomEvent) {\n this.filterController.handleSearch(searchEvent.detail.value);\n }\n\n /**\n * Handle column sort order change\n */\n _handleSortOrder(sortOrderEvent: CustomEvent) {\n this.sortController.handleSortOrderChange(sortOrderEvent.detail.index);\n }\n\n /**\n * Toggle expanded content for a row\n */\n private _showExpandedContent(index: number) {\n this.expand[index] = !this.expand[index];\n this.requestUpdate();\n }\n\n /**\n * Toggle filter input visibility\n */\n private _toggleFilterInput() {\n this.showFilterInput = !this.showFilterInput;\n }\n\n /**\n * Handle filter input change\n */\n private _handleFilterInputChange(event: Event) {\n this.filterValue = (event.target as HTMLInputElement).value;\n this.filterController.handleSearch(this.filterValue);\n }\n\n /**\n * Render the table component with all templates\n */\n override render() {\n const numberOfPages = Math.ceil(this.rowsCopy.length / this.selectedItemPerPage);\n const fromItem = this.currentPage > 0 \n ? this.currentPage * this.selectedItemPerPage - this.selectedItemPerPage + 1 \n : 0;\n const toItem = this.currentPage * this.selectedItemPerPage <= this.rowsCopy.length\n ? this.currentPage * this.selectedItemPerPage\n : this.rowsCopy.length;\n const enableNext = toItem < this.rowsCopy.length;\n const enablePrevious = fromItem > 1;\n\n return html`\n ${this.selectionMode && !this.withFilter && this.selectionController.hasSelection()\n ? renderActionsTemplate({\n selectedItems: this.selectionController.getSelectedCount(),\n size: this.size,\n onCancelSelection: () => this._handleCancelSelection()\n })\n : this.withFilter\n ? html`\n <div class=\"filter-container\">\n ${renderFilterTemplate({\n showInput: this.showFilterInput,\n value: this.filterValue,\n onToggleInput: () => this._toggleFilterInput(),\n onChange: (e) => this._handleFilterInputChange(e)\n })}\n </div>\n `\n : nothing}\n\n <div class=\"table-content-wrapper ${this.fixedHeader ? 'fixed-header' : ''}\" \n style=\"${this.scrollConfig?.y ? `${this.fixedHeader ? 'height' : 'max-height'}: ${typeof this.scrollConfig.y === 'number' ? this.scrollConfig.y + 'px' : this.scrollConfig.y};` : ''}\n ${this.scrollConfig?.x ? `${this.fixedHeader ? 'width' : 'max-width'}: ${typeof this.scrollConfig.x === 'number' ? this.scrollConfig.x + 'px' : this.scrollConfig.x};` : ''}\">\n ${renderContentTemplate({\n headers: this.headers,\n rows: this.displayedRows,\n expandable: this.expandable && !this.selectionMode ? this.expandable : undefined,\n expansionRenderer: !this.selectionMode ? this.expansionRenderer : undefined,\n selectionMode: this.selectionMode && !this.withFilter ? this.selectionMode : undefined,\n selectedItems: this.selectedItems,\n currentPage: this.currentPage,\n itemPerPage: this.selectedItemPerPage,\n sortAttribute: this.sortAttribute,\n expand: this.expand,\n columnFilters: this.columnFilters,\n activeFilterColumn: this.activeFilterColumn,\n loading: this.loading,\n host: this,\n onCheckAll: () => {\n const startIndex = (this.currentPage - 1) * this.selectedItemPerPage;\n const endIndex = Math.min(startIndex + this.selectedItemPerPage, this.selectedItems.length);\n const currentPageItems = this.selectedItems.slice(startIndex, endIndex);\n const isEveryItemChecked = currentPageItems.every(i => i) && currentPageItems.length > 0;\n this._handleCheckAll({ detail: { isEveryItemChecked } } as CustomEvent);\n },\n onCheckOne: (e, index) => this._handleCheckOne({ detail: { index, value: (e as CustomEvent).detail.checked } } as CustomEvent),\n onSelectOne: (index) => this._handleSelectOne({ detail: { index } } as CustomEvent),\n onUpdateSort: (index) => this._handleSortOrder({ detail: { index } } as CustomEvent),\n onShowExpandedContent: (index) => this._showExpandedContent(index),\n onToggleColumnFilter: (columnKey) => this.filterController.toggleColumnFilterDropdown(columnKey),\n onApplyColumnFilter: (columnKey, value) => this.filterController.applyColumnFilter(columnKey, value),\n onClearColumnFilter: (columnKey) => this.filterController.clearColumnFilter(columnKey)\n })}\n </div>\n\n ${renderPaginationTemplate({\n numberOfItems: this.rowsCopy.length,\n itemPerPage: this.itemPerPage,\n selectedItemPerPage: this.selectedItemPerPage,\n currentPage: this.currentPage,\n size: this.size,\n numberOfPages,\n fromItem,\n toItem,\n enableNext,\n enablePrevious,\n onItemPerPageChange: (e) => this._handleItemPerPage(e),\n onNextPage: () => {\n this.currentPage++;\n this._handleUpdatePage({ detail: { page: this.currentPage } } as CustomEvent);\n },\n onPreviousPage: () => {\n this.currentPage--;\n this._handleUpdatePage({ detail: { page: this.currentPage } } as CustomEvent);\n }\n })}\n `;\n }\n}\n"]}
|