PluginProbe
seQura / 3.0.7
seQura v3.0.7
4.3.4 4.3.3 4.3.2 4.3.1 trunk 2.0.0 2.0.10 2.0.11 2.0.12 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 3.0.0 3.0.2 3.0.5 3.0.6 3.0.7 3.1.0 3.1.1 3.2.0 3.2.1 3.2.2 4.0.0 All 30 releases
sequra / assets / js / src / core / DataTableComponent.js

DataTableComponent.js in seQura 3.0.7, at assets/js/src/core/DataTableComponent.js

80 lines 2.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 if (!window.SequraFE) {
2 window.SequraFE = {};
3 }
4
5 if (!window.SequraFE.components) {
6 window.SequraFE.components = {};
7 }
8
9 (function () {
10 /**
11 * @typedef TableCell
12 * @property {string?} label
13 * @property {string?} className
14 * @property {(cell: HTMLTableCellElement) => void?} renderer
15 */
16
17 /**
18 * Renders table cell.
19 *
20 * @param {'td' | 'th'} type
21 * @param {TableCell} cellData
22 * @returns {HTMLElement}
23 */
24 const renderCell = (type, cellData) => {
25 const cell = SequraFE.elementGenerator.createElement(type, cellData.className, cellData.label);
26 cellData.renderer && cellData.renderer(cell);
27
28 return cell;
29 };
30
31 const getTableElement = () => {
32 return SequraFE.elementGenerator.createElementFromHTML('<table><thead><tr></tr></thead><tbody></tbody></table>');
33 };
34
35 /**
36 * Renders table rows.
37 *
38 * @param tableWrapper
39 * @param {TableCell[][]} items
40 */
41 const createTableRows = (tableWrapper, items) => {
42 items.length &&
43 tableWrapper.querySelector('tbody').append(
44 ...items.map((item) => {
45 const row = SequraFE.elementGenerator.createElement('tr');
46 row.append(...item.map((cellData) => renderCell('td', cellData)));
47
48 return row;
49 })
50 );
51 };
52
53 /**
54 * Data table component.
55 *
56 * @param {TableCell[]} headers
57 * @param {TableCell[][]} items
58 * @param {string?} className
59 */
60 const createDataTable = (headers, items, className = 'sq-table-container') => {
61 const tableElement = getTableElement();
62
63 headers.forEach((header) => {
64 header.label = SequraFE.translationService.translate(header.label);
65 });
66
67 const heading = tableElement.querySelector('thead tr');
68 heading.append(...headers.map((cellData) => renderCell('th', cellData)));
69
70 createTableRows(tableElement, items);
71
72 return SequraFE.elementGenerator.createElement('div', className, '', null, [tableElement]);
73 };
74
75 SequraFE.components.DataTable = {
76 create: createDataTable,
77 createTableRows
78 };
79 })();
80