@omegagrid/grid 0.2.5

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.
Files changed (225) hide show
  1. package/dist/commands/editingCommands.d.ts +4 -0
  2. package/dist/commands/editingCommands.d.ts.map +1 -0
  3. package/dist/commands/editingCommands.js +45 -0
  4. package/dist/commands/editingCommands.js.map +1 -0
  5. package/dist/commands/groupCommands.d.ts +8 -0
  6. package/dist/commands/groupCommands.d.ts.map +1 -0
  7. package/dist/commands/groupCommands.js +11 -0
  8. package/dist/commands/groupCommands.js.map +1 -0
  9. package/dist/commands/index.d.ts +4 -0
  10. package/dist/commands/index.d.ts.map +1 -0
  11. package/dist/commands/index.js +27 -0
  12. package/dist/commands/index.js.map +1 -0
  13. package/dist/commands/navigationCommands.d.ts +5 -0
  14. package/dist/commands/navigationCommands.d.ts.map +1 -0
  15. package/dist/commands/navigationCommands.js +58 -0
  16. package/dist/commands/navigationCommands.js.map +1 -0
  17. package/dist/constants.d.ts +3 -0
  18. package/dist/constants.d.ts.map +1 -0
  19. package/dist/constants.js +5 -0
  20. package/dist/constants.js.map +1 -0
  21. package/dist/editors/baseEditor.d.ts +25 -0
  22. package/dist/editors/baseEditor.d.ts.map +1 -0
  23. package/dist/editors/baseEditor.js +94 -0
  24. package/dist/editors/baseEditor.js.map +1 -0
  25. package/dist/editors/checkboxEditor.d.ts +9 -0
  26. package/dist/editors/checkboxEditor.d.ts.map +1 -0
  27. package/dist/editors/checkboxEditor.js +35 -0
  28. package/dist/editors/checkboxEditor.js.map +1 -0
  29. package/dist/editors/dropdownEditor.d.ts +19 -0
  30. package/dist/editors/dropdownEditor.d.ts.map +1 -0
  31. package/dist/editors/dropdownEditor.js +100 -0
  32. package/dist/editors/dropdownEditor.js.map +1 -0
  33. package/dist/editors/formulaEditor.d.ts +21 -0
  34. package/dist/editors/formulaEditor.d.ts.map +1 -0
  35. package/dist/editors/formulaEditor.js +116 -0
  36. package/dist/editors/formulaEditor.js.map +1 -0
  37. package/dist/editors/index.d.ts +8 -0
  38. package/dist/editors/index.d.ts.map +1 -0
  39. package/dist/editors/index.js +35 -0
  40. package/dist/editors/index.js.map +1 -0
  41. package/dist/editors/numberEditor.d.ts +9 -0
  42. package/dist/editors/numberEditor.d.ts.map +1 -0
  43. package/dist/editors/numberEditor.js +40 -0
  44. package/dist/editors/numberEditor.js.map +1 -0
  45. package/dist/editors/textEditor.d.ts +15 -0
  46. package/dist/editors/textEditor.d.ts.map +1 -0
  47. package/dist/editors/textEditor.js +76 -0
  48. package/dist/editors/textEditor.js.map +1 -0
  49. package/dist/filters/NumberFilter.d.ts +8 -0
  50. package/dist/filters/NumberFilter.d.ts.map +1 -0
  51. package/dist/filters/NumberFilter.js +17 -0
  52. package/dist/filters/NumberFilter.js.map +1 -0
  53. package/dist/filters/baseFilter.d.ts +17 -0
  54. package/dist/filters/baseFilter.d.ts.map +1 -0
  55. package/dist/filters/baseFilter.js +42 -0
  56. package/dist/filters/baseFilter.js.map +1 -0
  57. package/dist/filters/index.d.ts +4 -0
  58. package/dist/filters/index.d.ts.map +1 -0
  59. package/dist/filters/index.js +15 -0
  60. package/dist/filters/index.js.map +1 -0
  61. package/dist/filters/textFilter.d.ts +17 -0
  62. package/dist/filters/textFilter.d.ts.map +1 -0
  63. package/dist/filters/textFilter.js +86 -0
  64. package/dist/filters/textFilter.js.map +1 -0
  65. package/dist/gridAdapter.d.ts +29 -0
  66. package/dist/gridAdapter.d.ts.map +1 -0
  67. package/dist/gridAdapter.js +15 -0
  68. package/dist/gridAdapter.js.map +1 -0
  69. package/dist/i18n/en-us.d.ts +4 -0
  70. package/dist/i18n/en-us.d.ts.map +1 -0
  71. package/dist/i18n/en-us.js +7 -0
  72. package/dist/i18n/en-us.js.map +1 -0
  73. package/dist/i18n/index.d.ts +5 -0
  74. package/dist/i18n/index.d.ts.map +1 -0
  75. package/dist/i18n/index.js +15 -0
  76. package/dist/i18n/index.js.map +1 -0
  77. package/dist/index.d.ts +7 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +36 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/renderers/ActionRenderer.d.ts +3 -0
  82. package/dist/renderers/ActionRenderer.d.ts.map +1 -0
  83. package/dist/renderers/ActionRenderer.js +28 -0
  84. package/dist/renderers/ActionRenderer.js.map +1 -0
  85. package/dist/renderers/BaseRenderer.d.ts +5 -0
  86. package/dist/renderers/BaseRenderer.d.ts.map +1 -0
  87. package/dist/renderers/BaseRenderer.js +54 -0
  88. package/dist/renderers/BaseRenderer.js.map +1 -0
  89. package/dist/renderers/CheckboxRenderer.d.ts +3 -0
  90. package/dist/renderers/CheckboxRenderer.d.ts.map +1 -0
  91. package/dist/renderers/CheckboxRenderer.js +16 -0
  92. package/dist/renderers/CheckboxRenderer.js.map +1 -0
  93. package/dist/renderers/DateTimeRenderer.d.ts +3 -0
  94. package/dist/renderers/DateTimeRenderer.d.ts.map +1 -0
  95. package/dist/renderers/DateTimeRenderer.js +18 -0
  96. package/dist/renderers/DateTimeRenderer.js.map +1 -0
  97. package/dist/renderers/DropdownRenderer.d.ts +5 -0
  98. package/dist/renderers/DropdownRenderer.d.ts.map +1 -0
  99. package/dist/renderers/DropdownRenderer.js +24 -0
  100. package/dist/renderers/DropdownRenderer.js.map +1 -0
  101. package/dist/renderers/GeneralRenderer.d.ts +3 -0
  102. package/dist/renderers/GeneralRenderer.d.ts.map +1 -0
  103. package/dist/renderers/GeneralRenderer.js +16 -0
  104. package/dist/renderers/GeneralRenderer.js.map +1 -0
  105. package/dist/renderers/HtmlRenderer.d.ts +3 -0
  106. package/dist/renderers/HtmlRenderer.d.ts.map +1 -0
  107. package/dist/renderers/HtmlRenderer.js +10 -0
  108. package/dist/renderers/HtmlRenderer.js.map +1 -0
  109. package/dist/renderers/NumberRenderer.d.ts +3 -0
  110. package/dist/renderers/NumberRenderer.d.ts.map +1 -0
  111. package/dist/renderers/NumberRenderer.js +19 -0
  112. package/dist/renderers/NumberRenderer.js.map +1 -0
  113. package/dist/renderers/SparklineRenderer.d.ts +3 -0
  114. package/dist/renderers/SparklineRenderer.d.ts.map +1 -0
  115. package/dist/renderers/SparklineRenderer.js +12 -0
  116. package/dist/renderers/SparklineRenderer.js.map +1 -0
  117. package/dist/renderers/TextRenderer.d.ts +3 -0
  118. package/dist/renderers/TextRenderer.d.ts.map +1 -0
  119. package/dist/renderers/TextRenderer.js +11 -0
  120. package/dist/renderers/TextRenderer.js.map +1 -0
  121. package/dist/renderers/index.d.ts +10 -0
  122. package/dist/renderers/index.d.ts.map +1 -0
  123. package/dist/renderers/index.js +48 -0
  124. package/dist/renderers/index.js.map +1 -0
  125. package/dist/types.d.ts +6 -0
  126. package/dist/types.d.ts.map +1 -0
  127. package/dist/types.js +3 -0
  128. package/dist/types.js.map +1 -0
  129. package/dist/ui/comment.d.ts +44 -0
  130. package/dist/ui/comment.d.ts.map +1 -0
  131. package/dist/ui/comment.js +214 -0
  132. package/dist/ui/comment.js.map +1 -0
  133. package/dist/ui/comment.style.d.ts +2 -0
  134. package/dist/ui/comment.style.d.ts.map +1 -0
  135. package/dist/ui/comment.style.js +50 -0
  136. package/dist/ui/comment.style.js.map +1 -0
  137. package/dist/ui/elementCache.d.ts +14 -0
  138. package/dist/ui/elementCache.d.ts.map +1 -0
  139. package/dist/ui/elementCache.js +61 -0
  140. package/dist/ui/elementCache.js.map +1 -0
  141. package/dist/ui/filter.d.ts +9 -0
  142. package/dist/ui/filter.d.ts.map +1 -0
  143. package/dist/ui/filter.js +71 -0
  144. package/dist/ui/filter.js.map +1 -0
  145. package/dist/ui/formulaInput.d.ts +51 -0
  146. package/dist/ui/formulaInput.d.ts.map +1 -0
  147. package/dist/ui/formulaInput.js +245 -0
  148. package/dist/ui/formulaInput.js.map +1 -0
  149. package/dist/ui/formulaInput.style.d.ts +2 -0
  150. package/dist/ui/formulaInput.style.d.ts.map +1 -0
  151. package/dist/ui/formulaInput.style.js +68 -0
  152. package/dist/ui/formulaInput.style.js.map +1 -0
  153. package/dist/ui/grid.d.ts +81 -0
  154. package/dist/ui/grid.d.ts.map +1 -0
  155. package/dist/ui/grid.editing.d.ts +54 -0
  156. package/dist/ui/grid.editing.d.ts.map +1 -0
  157. package/dist/ui/grid.editing.js +281 -0
  158. package/dist/ui/grid.editing.js.map +1 -0
  159. package/dist/ui/grid.events.d.ts +66 -0
  160. package/dist/ui/grid.events.d.ts.map +1 -0
  161. package/dist/ui/grid.events.js +449 -0
  162. package/dist/ui/grid.events.js.map +1 -0
  163. package/dist/ui/grid.filtering.d.ts +20 -0
  164. package/dist/ui/grid.filtering.d.ts.map +1 -0
  165. package/dist/ui/grid.filtering.js +59 -0
  166. package/dist/ui/grid.filtering.js.map +1 -0
  167. package/dist/ui/grid.js +233 -0
  168. package/dist/ui/grid.js.map +1 -0
  169. package/dist/ui/grid.menu.d.ts +36 -0
  170. package/dist/ui/grid.menu.d.ts.map +1 -0
  171. package/dist/ui/grid.menu.js +83 -0
  172. package/dist/ui/grid.menu.js.map +1 -0
  173. package/dist/ui/grid.rendering.d.ts +71 -0
  174. package/dist/ui/grid.rendering.d.ts.map +1 -0
  175. package/dist/ui/grid.rendering.js +336 -0
  176. package/dist/ui/grid.rendering.js.map +1 -0
  177. package/dist/ui/grid.selecting.d.ts +56 -0
  178. package/dist/ui/grid.selecting.d.ts.map +1 -0
  179. package/dist/ui/grid.selecting.js +261 -0
  180. package/dist/ui/grid.selecting.js.map +1 -0
  181. package/dist/ui/grid.sorting.d.ts +15 -0
  182. package/dist/ui/grid.sorting.d.ts.map +1 -0
  183. package/dist/ui/grid.sorting.js +33 -0
  184. package/dist/ui/grid.sorting.js.map +1 -0
  185. package/dist/ui/grid.style.d.ts +2 -0
  186. package/dist/ui/grid.style.d.ts.map +1 -0
  187. package/dist/ui/grid.style.js +25 -0
  188. package/dist/ui/grid.style.js.map +1 -0
  189. package/dist/ui/group.d.ts +68 -0
  190. package/dist/ui/group.d.ts.map +1 -0
  191. package/dist/ui/group.js +310 -0
  192. package/dist/ui/group.js.map +1 -0
  193. package/dist/ui/index.d.ts +18 -0
  194. package/dist/ui/index.d.ts.map +1 -0
  195. package/dist/ui/index.js +34 -0
  196. package/dist/ui/index.js.map +1 -0
  197. package/dist/ui/selector.d.ts +83 -0
  198. package/dist/ui/selector.d.ts.map +1 -0
  199. package/dist/ui/selector.js +486 -0
  200. package/dist/ui/selector.js.map +1 -0
  201. package/dist/ui/selector.style.d.ts +2 -0
  202. package/dist/ui/selector.style.d.ts.map +1 -0
  203. package/dist/ui/selector.style.js +111 -0
  204. package/dist/ui/selector.style.js.map +1 -0
  205. package/dist/ui/sortingArrow.d.ts +8 -0
  206. package/dist/ui/sortingArrow.d.ts.map +1 -0
  207. package/dist/ui/sortingArrow.js +46 -0
  208. package/dist/ui/sortingArrow.js.map +1 -0
  209. package/dist/ui/sparkline.d.ts +14 -0
  210. package/dist/ui/sparkline.d.ts.map +1 -0
  211. package/dist/ui/sparkline.js +96 -0
  212. package/dist/ui/sparkline.js.map +1 -0
  213. package/dist/ui/table.d.ts +109 -0
  214. package/dist/ui/table.d.ts.map +1 -0
  215. package/dist/ui/table.js +899 -0
  216. package/dist/ui/table.js.map +1 -0
  217. package/dist/ui/table.styles.d.ts +2 -0
  218. package/dist/ui/table.styles.d.ts.map +1 -0
  219. package/dist/ui/table.styles.js +216 -0
  220. package/dist/ui/table.styles.js.map +1 -0
  221. package/dist/ui/tooltip.d.ts +9 -0
  222. package/dist/ui/tooltip.d.ts.map +1 -0
  223. package/dist/ui/tooltip.js +32 -0
  224. package/dist/ui/tooltip.js.map +1 -0
  225. package/package.json +71 -0
@@ -0,0 +1,899 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Table = exports.TableEvent = void 0;
13
+ const constants_1 = __importDefault(require("../constants"));
14
+ const core_1 = require("@omegagrid/core");
15
+ const lit_1 = require("lit");
16
+ const decorators_js_1 = require("lit/decorators.js");
17
+ const ref_js_1 = require("lit/directives/ref.js");
18
+ const grid_core_1 = require("@omegagrid/grid-core");
19
+ const elementCache_1 = require("./elementCache");
20
+ const table_styles_1 = require("./table.styles");
21
+ const sortingArrow_1 = require("./sortingArrow");
22
+ const filter_1 = require("./filter");
23
+ const renderers_1 = require("../renderers");
24
+ class TableEvent extends Event {
25
+ }
26
+ exports.TableEvent = TableEvent;
27
+ let Table = class Table extends lit_1.LitElement {
28
+ get table() { return this.tableRef.value; }
29
+ get colgroup() { return this.colgroupRef.value; }
30
+ get thead() { return this.theadRef.value; }
31
+ get tbody() { return this.tbodyRef.value; }
32
+ //#endregion
33
+ //#region calculated props
34
+ get colMap() { return this._colMap; }
35
+ get rowMap() { return this._rowMap; }
36
+ get freezeLeft() {
37
+ if (this._freezeLeft == null) {
38
+ if (this.offsetWidth > 0) {
39
+ let w = 0;
40
+ for (let c = 0; c < this.model.options.freezeLeft; c++) {
41
+ w += this.model.columns[c].width;
42
+ }
43
+ this._freezeLeft = w < this.offsetWidth / 2 ? this.model.options.freezeLeft : 0;
44
+ }
45
+ else {
46
+ this._freezeLeft = this.model.options.freezeLeft;
47
+ }
48
+ }
49
+ return this._freezeLeft;
50
+ }
51
+ previewZoom(zoom) {
52
+ core_1.dom.zoomElement(this.table, zoom);
53
+ }
54
+ highlightColHeaderCells(columns) {
55
+ if (!this.model.options.colLetters)
56
+ return;
57
+ this._highlightedColHeaderCells.forEach(cell => cell.className = 'hlabel');
58
+ this._highlightedColHeaderCells = [];
59
+ const offset = this.model.hasColumnTree ? 0 : this.rowHeaderCount;
60
+ columns.forEach(c => {
61
+ const cell = this.hRows[this.model.hasColumnTree ? 1 : 0].children[this.colMap.get(c) + offset];
62
+ if (cell) {
63
+ this._highlightedColHeaderCells.push(cell);
64
+ cell.className = 'hlabel selected';
65
+ }
66
+ });
67
+ }
68
+ highlightRowHeaderCells(rows) {
69
+ if (!this.model.options.rowNumbers)
70
+ return;
71
+ if (this.model.rows.length == 0)
72
+ return;
73
+ this._highlightedRowHeaderCells.forEach(cell => cell.className = 'vlabel');
74
+ this._highlightedRowHeaderCells = [];
75
+ rows.forEach(r => {
76
+ var _a;
77
+ const cell = (_a = this.getRowByModelIndex(r)) === null || _a === void 0 ? void 0 : _a.children[this.model.hasRowTree ? 1 : 0];
78
+ if (cell) {
79
+ this._highlightedRowHeaderCells.push(cell);
80
+ cell.className = 'vlabel selected';
81
+ }
82
+ });
83
+ }
84
+ get columnHeaderCount() {
85
+ return this.model.headerCount
86
+ + (this.model.hasColumnTree ? 1 : 0)
87
+ + (this.model.hasFilter ? 1 : 0)
88
+ + (this.model.options.colLetters ? 1 : 0);
89
+ }
90
+ get rowHeaderCount() { return (this.model.hasRowTree ? 1 : 0) + (this.model.options.rowNumbers ? 1 : 0); }
91
+ get renderRowCount() {
92
+ return this.renderAll
93
+ ? this.model.visibleRows.length
94
+ : Math.round(Math.min(this.clientHeight / constants_1.default.MIN_ROW_HEIGHT, this.model.rows.length));
95
+ }
96
+ get renderColCount() {
97
+ return this.renderAll
98
+ ? this.model.visibleColumns.length + this.rowHeaderCount
99
+ : Math.round(Math.min((this.clientWidth / constants_1.default.MIN_COL_WIDTH) || 5, this.model.columns.length + this.rowHeaderCount));
100
+ }
101
+ get totalHeaderHeight() {
102
+ let h = 0, r = 0;
103
+ if (this.model.hasColumnTree) {
104
+ h += this.treeHeaderHeight;
105
+ ++r;
106
+ }
107
+ for (let i = 0; i < this.model.headerCount; i++) {
108
+ h += this.thead.children[r + i].offsetHeight || constants_1.default.DEFAULT_ROW_HEIGHT;
109
+ }
110
+ if (this.model.hasFilter)
111
+ h += constants_1.default.DEFAULT_ROW_HEIGHT;
112
+ return h;
113
+ }
114
+ get treeHeaderWidth() { return this.model.hasRowTree ? this.model.maxRowLevel * 15 + 20 : 0; }
115
+ get treeHeaderHeight() { return this.model.hasColumnTree ? this.model.maxColumnLevel * 15 + 20 : 0; }
116
+ get totalHeaderWidth() {
117
+ let w = 0;
118
+ if (this.model.options.rowNumbers)
119
+ w += constants_1.default.ROW_HEADER_WIDTH;
120
+ w += this.treeHeaderWidth;
121
+ return w;
122
+ }
123
+ get viewportSize() {
124
+ if (!this._viewportSize) {
125
+ this._viewportSize = this.renderAll ? { w: Infinity, h: Infinity } : {
126
+ w: (this.clientWidth - this.totalHeaderWidth - constants_1.default.SLIDER_SIZE) / this.zoom,
127
+ h: (this.clientHeight - this.totalHeaderHeight - constants_1.default.SLIDER_SIZE) / this.zoom
128
+ };
129
+ }
130
+ return this._viewportSize;
131
+ }
132
+ get viewport() {
133
+ if (!this._viewport) {
134
+ this._viewport = this.model.getViewport({ c: this.colOffset, r: this.rowOffset }, this.viewportSize, {
135
+ t: this.model.options.freezeTop,
136
+ l: this.freezeLeft,
137
+ b: this.model.options.freezeBottom,
138
+ r: this.model.options.freezeRight
139
+ });
140
+ }
141
+ return this._viewport;
142
+ }
143
+ //#endregion
144
+ constructor() {
145
+ super();
146
+ // map of model indexes on element indexes
147
+ this._rowMap = new Map();
148
+ this._colMap = new Map();
149
+ this.rowOffset = 0;
150
+ this.colOffset = 0;
151
+ this.zoom = 1;
152
+ this.nogrid = false;
153
+ this.renderAll = false;
154
+ //#endregion
155
+ //#region element references
156
+ this.tableRef = (0, ref_js_1.createRef)();
157
+ this.colgroupRef = (0, ref_js_1.createRef)();
158
+ this.theadRef = (0, ref_js_1.createRef)();
159
+ this.tbodyRef = (0, ref_js_1.createRef)();
160
+ this.getColumnByModelIndex = (c) => this.getColumnByGridIndex(this.colMap.get(c));
161
+ this.getColumnByGridIndex = (c) => this.colgroup.children[c + this.rowHeaderCount];
162
+ this.getRowByModelIndex = (r) => this.bRows[this.rowMap.get(r)];
163
+ this.getRowByGridIndex = (r) => this.bRows[r];
164
+ this.getCellByGridIndex = (c, r) => this.bRows[r].children[c + this.rowHeaderCount];
165
+ this.getCellByModelIndex = (c, r) => { var _a; return (_a = this.getRowByModelIndex(r)) === null || _a === void 0 ? void 0 : _a.children[this.colMap.get(c) + this.rowHeaderCount]; };
166
+ this.getCellByCellModel = (m) => this.getCellByModelIndex(m.c, m.r);
167
+ this.resetFreezeLeft = () => this._freezeLeft = null;
168
+ this._highlightedColHeaderCells = [];
169
+ this._highlightedRowHeaderCells = [];
170
+ this.render = () => {
171
+ var _a, _b, _c, _d;
172
+ return (0, lit_1.html) `
173
+ <style>
174
+ table {
175
+ font-size: ${((_a = this.model) === null || _a === void 0 ? void 0 : _a.options.fontSize) || 12}px;
176
+ }
177
+
178
+ table td, table th {
179
+ height: ${((_b = this.model) === null || _b === void 0 ? void 0 : _b.options.rowHeight) || 22}px;
180
+ line-height: ${(((_c = this.model) === null || _c === void 0 ? void 0 : _c.options.rowHeight) || 22) - 1}px;
181
+ }
182
+ </style>
183
+
184
+ <table ${(0, ref_js_1.ref)(this.tableRef)}
185
+ class="${((_d = this.model) === null || _d === void 0 ? void 0 : _d.options.grid) ? '' : 'nogrid'}"
186
+ style="transform: scale(${this.zoom})">
187
+ <colgroup ${(0, ref_js_1.ref)(this.colgroupRef)}></colgroup>
188
+ <thead ${(0, ref_js_1.ref)(this.theadRef)}></thead>
189
+ <tbody ${(0, ref_js_1.ref)(this.tbodyRef)}></tbody>
190
+ </table>
191
+ `;
192
+ };
193
+ this.clearHeaderCache = () => {
194
+ this.resetFreezeLeft();
195
+ this.hCache = new elementCache_1.ElementCache(this.model.columns.length, this.columnHeaderCount);
196
+ };
197
+ this.clearBodyCache = () => this.bCache = new elementCache_1.ElementCache(this.model.columns.length, this.model.rows.length);
198
+ //#endregion
199
+ this.cellRenderSchedules = new WeakMap();
200
+ }
201
+ willUpdate() {
202
+ this._viewport = null;
203
+ this._viewportSize = null;
204
+ if (this.model) {
205
+ this.clearHeaderCache();
206
+ this.clearBodyCache();
207
+ }
208
+ }
209
+ updated() {
210
+ if (this.model) {
211
+ this.createColumns();
212
+ this.createHeaderRows();
213
+ this.createBodyRows();
214
+ this.renderCells();
215
+ }
216
+ }
217
+ refresh() {
218
+ this.clearHeaderCache();
219
+ this.clearBodyCache();
220
+ this.requestUpdate();
221
+ }
222
+ createColumns() {
223
+ this._freezeLeft = null;
224
+ const colCount = this.renderColCount;
225
+ if (!this.cols || this.cols.length != colCount) {
226
+ this.cols = new Array(colCount);
227
+ for (let c = 0; c < colCount; c++) {
228
+ this.cols[c] = core_1.dom.createElement('col');
229
+ this.cols.forEach(() => this.colgroup.appendChild(this.cols[c]));
230
+ }
231
+ }
232
+ }
233
+ createHeaderRows() {
234
+ const rowCount = this.columnHeaderCount;
235
+ const colCount = this.renderColCount;
236
+ core_1.dom.empty(this.thead);
237
+ if (!this.hRows || this.hRows.length != rowCount || !this.hRows[0] || this.hRows[0].children.length != colCount) {
238
+ this.hRows = new Array(rowCount);
239
+ for (let r = 0; r < rowCount; r++) {
240
+ this.hRows[r] = core_1.dom.createElement('tr');
241
+ core_1.dom.setSize(this.hRows[r], { h: constants_1.default.DEFAULT_ROW_HEIGHT }, false);
242
+ for (let c = 0; c < colCount; c++) {
243
+ this.hRows[r].appendChild(core_1.dom.createElement('th'));
244
+ }
245
+ }
246
+ }
247
+ core_1.dom.empty(this.thead);
248
+ this.hRows.forEach(row => this.thead.appendChild(row));
249
+ }
250
+ createBodyRows() {
251
+ const rowCount = this.renderRowCount;
252
+ const colCount = this.renderColCount;
253
+ const offset = this.rowHeaderCount;
254
+ if (!this.bRows || this.bRows.length == 0 || this.bRows.length != rowCount || this.bRows[0].children.length != colCount) {
255
+ if (rowCount == 0 && this.grid.options.emptyPlaceholder) {
256
+ this.bRows = [core_1.dom.createElement('tr')];
257
+ this.bRows[0].appendChild(core_1.dom.createElement('td'));
258
+ }
259
+ else {
260
+ this.bRows = new Array(rowCount);
261
+ for (let r = 0; r < rowCount; r++) {
262
+ this.bRows[r] = core_1.dom.createElement('tr');
263
+ for (let c = 0; c < offset; c++) {
264
+ this.bRows[r].appendChild(core_1.dom.createElement('th'));
265
+ }
266
+ for (let c = offset; c < colCount; c++) {
267
+ this.bRows[r].appendChild(core_1.dom.createElement('td'));
268
+ }
269
+ }
270
+ }
271
+ }
272
+ core_1.dom.empty(this.tbody);
273
+ this.bRows.forEach(row => this.tbody.appendChild(row));
274
+ }
275
+ renderCells(update = { vertical: true, horizontal: true }) {
276
+ if (update.vertical || update.horizontal) {
277
+ this._viewport = null;
278
+ this.tbody.remove();
279
+ if (update.horizontal)
280
+ this.renderHeader();
281
+ if (this.model.rows.length > 0) {
282
+ this.renderBody();
283
+ if (update.vertical)
284
+ this.renderRowTree();
285
+ this.table.appendChild(this.tbody);
286
+ }
287
+ else if (this.model.options.emptyPlaceholder) {
288
+ this.renderEmptyBody();
289
+ this.table.appendChild(this.tbody);
290
+ }
291
+ this.dispatchEvent(new TableEvent('rendercells'));
292
+ }
293
+ }
294
+ renderEmptyBody() {
295
+ const cell = this.bRows[0].children[0];
296
+ cell.innerHTML = 'no data';
297
+ cell.className = 'empty-placeholder';
298
+ cell.colSpan = this.model.columns.length + this.rowHeaderCount;
299
+ }
300
+ //#region render header rows
301
+ renderHeader() {
302
+ let column;
303
+ this.colMap.clear();
304
+ const offset = this.rowHeaderCount;
305
+ const viewport = this.viewport;
306
+ if (this.model.hasRowTree) {
307
+ core_1.dom.setSize(this.colgroup.children[0], { w: this.treeHeaderWidth }, true);
308
+ }
309
+ if (this.model.options.rowNumbers) {
310
+ core_1.dom.setSize(this.colgroup.children[offset - 1], { w: constants_1.default.ROW_HEADER_WIDTH }, true);
311
+ }
312
+ for (let c = 0; c < viewport.columns.length; c++) {
313
+ column = viewport.columns[c];
314
+ this.colMap.set(column.index, c);
315
+ core_1.dom.setMinSize(this.colgroup.children[c + offset], { w: column.width });
316
+ core_1.dom.setMaxSize(this.colgroup.children[c + offset], { w: column.width });
317
+ }
318
+ let r = 0;
319
+ if (this.model.hasColumnTree) {
320
+ this.renderHeaderRowTree(this.hRows[r], r);
321
+ ++r;
322
+ }
323
+ if (this.model.options.colLetters) {
324
+ this.renderHeaderRowLetters(this.hRows[r], r);
325
+ ++r;
326
+ }
327
+ for (let i = 0; i < this.model.headerCount; i++) {
328
+ this.renderHeaderRowLabels(this.hRows[r + i], r + i, i);
329
+ }
330
+ r += this.model.headerCount;
331
+ if (this.model.hasFilter) {
332
+ this.renderHeaderRowFilters(this.hRows[r], r);
333
+ }
334
+ }
335
+ renderHeaderRowLetters(tr, index) {
336
+ let cell;
337
+ let c2;
338
+ const viewport = this.viewport;
339
+ const r = index - this.columnHeaderCount;
340
+ let offset = 0;
341
+ if ((this.model.hasRowTree || this.model.options.rowNumbers) && !this.model.hasColumnTree) {
342
+ cell = tr.children[offset];
343
+ cell.colSpan = this.rowHeaderCount;
344
+ cell.rowSpan = this.columnHeaderCount;
345
+ const c = offset - this.rowHeaderCount;
346
+ const cornerCell = this.model.options.levelButtonCell;
347
+ if (!cornerCell || (r == cornerCell.r && c == cornerCell.c)) {
348
+ this.renderHeaderRowCornerCell(cell);
349
+ }
350
+ offset++;
351
+ for (let i = offset; i < this.rowHeaderCount; i++) {
352
+ core_1.dom.hideCell(tr.children[i]);
353
+ offset++;
354
+ }
355
+ }
356
+ for (let c = offset; c < tr.children.length; c++) {
357
+ c2 = c - offset;
358
+ cell = tr.children[c];
359
+ cell.className = 'hlabel';
360
+ if (viewport.columns.length > c2) {
361
+ cell.innerHTML = viewport.columns[c2].address;
362
+ cell.c = viewport.columns[c2].index;
363
+ core_1.dom.showCell(cell);
364
+ }
365
+ else {
366
+ core_1.dom.hideCell(cell);
367
+ }
368
+ }
369
+ }
370
+ renderHeaderRowTree(tr, index) {
371
+ if (!this.model.hasColumnTree)
372
+ return;
373
+ let cell;
374
+ let offset = 0;
375
+ let c2;
376
+ const r = index - this.columnHeaderCount;
377
+ const viewport = this.viewport;
378
+ const rowNumbers = this.model.options.rowNumbers;
379
+ const rowTree = this.model.hasRowTree;
380
+ core_1.dom.setSize(tr, { h: this.treeHeaderHeight });
381
+ cell = tr.children[offset];
382
+ if (!cell)
383
+ return;
384
+ cell.rowSpan = rowNumbers || rowTree ? this.columnHeaderCount : 1;
385
+ cell.colSpan = this.rowHeaderCount;
386
+ const c = offset - this.rowHeaderCount;
387
+ const cornerCell = this.model.options.levelButtonCell;
388
+ let cornerCellColumn = null;
389
+ if ((!cornerCell && (rowNumbers || rowTree)) || (cornerCell && r == cornerCell.r && c == cornerCell.c)) {
390
+ cornerCellColumn = c;
391
+ this.renderHeaderRowCornerCell(cell);
392
+ }
393
+ if (rowNumbers || this.model.hasRowTree) {
394
+ ++offset;
395
+ if (this.model.hasRowTree) {
396
+ cell = tr.children[offset];
397
+ cell.innerHTML = '';
398
+ core_1.dom.hideCell(cell);
399
+ ++offset;
400
+ }
401
+ }
402
+ for (let c = offset; c < tr.children.length; c++) {
403
+ c2 = c - offset;
404
+ cell = tr.children[c];
405
+ if (viewport.columns.length > c2) {
406
+ if (cornerCellColumn != c) {
407
+ cell.innerHTML = '';
408
+ cell.className = 'htree';
409
+ this.renderHeaderRowTreeCell(tr, index, viewport.columns[c2], cell);
410
+ }
411
+ core_1.dom.showCell(cell);
412
+ }
413
+ else {
414
+ core_1.dom.hideCell(cell);
415
+ }
416
+ }
417
+ }
418
+ renderHeaderRowTreeCell(tr, rIndex, column, th) {
419
+ let div = this.hCache.get(column.index, rIndex);
420
+ if (!div) {
421
+ div = core_1.dom.createElement('div');
422
+ this.hCache.set(column.index, rIndex, div);
423
+ const colWidth = column.width + 1;
424
+ const treeRowHeight = this.treeHeaderHeight / this.model.maxColumnLevel;
425
+ if (column.hasChildren) {
426
+ const expander = new core_1.Expander();
427
+ expander.addEventListener('toggle', () => this.grid.rendering.toggleColumn(column.index));
428
+ div.expander = expander;
429
+ div.appendChild(expander);
430
+ core_1.dom.setPosition(expander, {
431
+ l: colWidth / 2 - constants_1.default.EXPANDER_SIZE / 2,
432
+ t: column.level * treeRowHeight + treeRowHeight / 2 - constants_1.default.EXPANDER_SIZE / 2
433
+ });
434
+ div.expanderLine = this.createExpanderLine('h');
435
+ div.appendChild(div.expanderLine);
436
+ core_1.dom.setPosition(div.expanderLine, {
437
+ l: colWidth / 2,
438
+ t: column.level * treeRowHeight + treeRowHeight / 2
439
+ });
440
+ core_1.dom.setSize(div.expanderLine, {
441
+ h: treeRowHeight / 2,
442
+ w: colWidth / 2 + 1
443
+ });
444
+ }
445
+ if (column.hasParent) {
446
+ let parent = column;
447
+ while (parent.hasParent) {
448
+ parent = parent.parent;
449
+ const line = this.createExpanderLine('h');
450
+ div.appendChild(line);
451
+ core_1.dom.setSize(line, {
452
+ h: treeRowHeight / 2,
453
+ w: colWidth - 1
454
+ });
455
+ core_1.dom.setPosition(line, {
456
+ l: 0,
457
+ t: parent.level * treeRowHeight + treeRowHeight / 2
458
+ });
459
+ }
460
+ }
461
+ }
462
+ if (div.expander)
463
+ div.expander.state = column.collapsed ? 'closed' : 'open';
464
+ th.appendChild(div);
465
+ }
466
+ createExpanderLine(direction) {
467
+ const expanderLine = core_1.dom.createElement('div');
468
+ expanderLine.className = `${direction}tree-line`;
469
+ return expanderLine;
470
+ }
471
+ renderHeaderRowLabels(tr, rIndex, hIndex) {
472
+ var _a;
473
+ let colModel;
474
+ let cell;
475
+ let header;
476
+ let offset = 0;
477
+ let c2;
478
+ const viewport = this.viewport;
479
+ const r = rIndex - this.columnHeaderCount;
480
+ const cornerCell = this.model.options.levelButtonCell;
481
+ if (this.model.hasRowTree) {
482
+ cell = tr.children[offset];
483
+ cell.innerHTML = '';
484
+ if (this.model.hasColumnTree || this.model.options.colLetters || hIndex > 0) {
485
+ core_1.dom.hideCell(cell);
486
+ }
487
+ else {
488
+ cell.rowSpan = this.columnHeaderCount;
489
+ cell.colSpan = this.rowHeaderCount;
490
+ this.renderHeaderRowCornerCell(cell);
491
+ }
492
+ ++offset;
493
+ }
494
+ if (this.model.options.rowNumbers) {
495
+ cell = tr.children[offset];
496
+ cell.innerHTML = '';
497
+ if (this.model.hasRowTree || this.model.options.colLetters || this.model.hasColumnTree || hIndex > 0) {
498
+ core_1.dom.hideCell(cell);
499
+ }
500
+ else {
501
+ cell.rowSpan = this.columnHeaderCount;
502
+ cell.colSpan = this.rowHeaderCount;
503
+ this.renderHeaderRowCornerCell(cell);
504
+ }
505
+ ++offset;
506
+ }
507
+ for (let c = offset; c < tr.children.length; c++) {
508
+ c2 = c - offset;
509
+ cell = tr.children[c];
510
+ cell.className = 'hlabel';
511
+ cell.innerHTML = '';
512
+ if (viewport.columns.length > c2) {
513
+ colModel = viewport.columns[c2];
514
+ header = colModel.header[hIndex];
515
+ cell.colSpan = 1;
516
+ cell.rowSpan = 1;
517
+ cell.c = colModel.index;
518
+ cell.r = hIndex;
519
+ if (header === null || header === void 0 ? void 0 : header.hidden) {
520
+ if (c2 == this.freezeLeft) {
521
+ let prevModel = colModel.prevVisible;
522
+ let c3 = 0;
523
+ while (prevModel && ((_a = prevModel.header[hIndex]) === null || _a === void 0 ? void 0 : _a.hidden)) {
524
+ prevModel = prevModel.prevVisible;
525
+ ++c3;
526
+ }
527
+ if (prevModel && prevModel.header[hIndex].cs) {
528
+ core_1.dom.showCell(cell);
529
+ cell.colSpan = prevModel.header[hIndex].cs - c3 - 1;
530
+ cell.rowSpan = prevModel.header[hIndex].rs || 1;
531
+ this.renderHeaderRowLabelCell(cell, prevModel, rIndex, hIndex);
532
+ }
533
+ else {
534
+ core_1.dom.hideCell(cell);
535
+ }
536
+ }
537
+ else {
538
+ core_1.dom.hideCell(cell);
539
+ }
540
+ }
541
+ else {
542
+ if (colModel.header && colModel.header[hIndex]) {
543
+ const cs = colModel.header[hIndex].cs || 1;
544
+ cell.colSpan = cs > 1 ? colModel.calculateRealColspan(cs) : 1;
545
+ cell.rowSpan = colModel.header[hIndex].rs || 1;
546
+ }
547
+ core_1.dom.showCell(cell);
548
+ this.renderHeaderRowLabelCell(cell, colModel, rIndex, hIndex);
549
+ if (cornerCell && cornerCell.r == r && cornerCell.c == c2) {
550
+ this.renderHeaderRowCornerCell(cell);
551
+ }
552
+ }
553
+ }
554
+ else {
555
+ core_1.dom.hideCell(cell);
556
+ }
557
+ }
558
+ }
559
+ renderHeaderRowLabelCell(th, column, rIndex, hIndex) {
560
+ var _a, _b;
561
+ let div = this.hCache.get(column.index, rIndex);
562
+ const h = column.header[hIndex];
563
+ if (!div) {
564
+ div = core_1.dom.createElement('div');
565
+ if (!h)
566
+ div.innerHTML = '';
567
+ else if (h.html)
568
+ div.innerHTML = (_a = h.label) !== null && _a !== void 0 ? _a : "";
569
+ else {
570
+ const innerDiv = core_1.dom.createElement('div');
571
+ innerDiv.innerText = (_b = h.label) !== null && _b !== void 0 ? _b : "";
572
+ div.appendChild(innerDiv);
573
+ }
574
+ if (h && h.style) {
575
+ (0, renderers_1.applyStyle)(div, (0, grid_core_1.styleToCSStyle)(h.style));
576
+ }
577
+ this.hCache.set(column.index, rIndex, div);
578
+ }
579
+ if (this.columnSorting && column.sorting && hIndex == column.header.length - 1) {
580
+ th.className += ' sort';
581
+ if (!div.sortingArrow) {
582
+ div.sortingArrow = new sortingArrow_1.SortingArrow();
583
+ div.appendChild(div.sortingArrow);
584
+ core_1.dom.setPosition(div.sortingArrow, { t: 0, r: 5 });
585
+ }
586
+ div.sortingArrow.sortSettings = this.columnSorting.get(column.index);
587
+ }
588
+ if (h && h.height)
589
+ core_1.dom.setSize(th, { h: h.height });
590
+ th.appendChild(div);
591
+ }
592
+ renderHeaderRowFilters(tr, index) {
593
+ let cell;
594
+ let offset = 0;
595
+ let c2;
596
+ const viewport = this.viewport;
597
+ if (this.model.hasRowTree) {
598
+ cell = tr.children[offset];
599
+ cell.innerHTML = '';
600
+ if (this.model.columnHeaderCount > 1) {
601
+ core_1.dom.hideCell(cell);
602
+ }
603
+ else {
604
+ cell.colSpan = this.model.columnHeaderCount;
605
+ }
606
+ ++offset;
607
+ }
608
+ if (this.model.options.rowNumbers) {
609
+ cell = tr.children[offset];
610
+ cell.innerHTML = '';
611
+ if (this.model.hasRowTree || this.model.columnHeaderCount > 1)
612
+ core_1.dom.hideCell(cell);
613
+ ++offset;
614
+ }
615
+ for (let c = offset; c < tr.children.length; c++) {
616
+ c2 = c - offset;
617
+ cell = tr.children[c];
618
+ if (viewport.columns.length > c2) {
619
+ core_1.dom.showCell(cell);
620
+ const column = viewport.columns[c2];
621
+ if (column.filter)
622
+ this.renderHeaderRowFilterCell(tr, index, column, cell);
623
+ else
624
+ cell.innerHTML = '';
625
+ }
626
+ else {
627
+ core_1.dom.hideCell(cell);
628
+ }
629
+ }
630
+ }
631
+ renderHeaderRowFilterCell(tr, rIndex, column, th) {
632
+ var _a, _b;
633
+ th.innerHTML = '';
634
+ th.className = 'filter';
635
+ th.c = column.index;
636
+ let div = this.hCache.get(column.index, rIndex);
637
+ if (!div) {
638
+ div = core_1.dom.createElement('div');
639
+ div.filter = new filter_1.Filter();
640
+ div.appendChild(div.filter);
641
+ this.hCache.set(column.index, rIndex, div);
642
+ }
643
+ div.filter.text = (_b = (_a = this.grid.filtering.filter.get(column.index)) === null || _a === void 0 ? void 0 : _a.term) !== null && _b !== void 0 ? _b : null;
644
+ th.appendChild(div);
645
+ }
646
+ renderHeaderRowCornerCell(th) {
647
+ this.cornerDiv = core_1.dom.createElement('div');
648
+ const treeColWidth = Math.max((this.treeHeaderWidth || 35) / (this.model.maxRowLevel + 1), constants_1.default.EXPANDER_SIZE + 2);
649
+ if (this.model.maxRowLevel > 0) {
650
+ for (let l = 0; l <= this.model.maxRowLevel; l++) {
651
+ const expander = new core_1.LevelExpander();
652
+ expander.level = l;
653
+ this.cornerDiv.appendChild(expander);
654
+ core_1.dom.setPosition(expander, {
655
+ l: l * treeColWidth + treeColWidth / 2 - constants_1.default.EXPANDER_SIZE / 2,
656
+ b: 3
657
+ });
658
+ expander.addEventListener('mousedown', e => e.stopPropagation());
659
+ expander.addEventListener('toggle', (e) => {
660
+ this.model.columns.filter(col => col.levelButtons).forEach(col => this.bCache.deleteColumn(col.index));
661
+ this.grid.rendering.setRowExpandLevel(e.level);
662
+ });
663
+ }
664
+ }
665
+ if (this.model.maxColumnLevel > 0) {
666
+ const treeRowHeight = this.treeHeaderHeight / (this.model.maxColumnLevel + 1);
667
+ const vertical = this.treeHeaderHeight <= th.clientHeight;
668
+ for (let l = 0; l <= this.model.maxColumnLevel; l++) {
669
+ const expander = new core_1.LevelExpander();
670
+ expander.level = l;
671
+ this.cornerDiv.appendChild(expander);
672
+ core_1.dom.setPosition(expander, vertical ? {
673
+ t: l * treeRowHeight + treeRowHeight / 2 - constants_1.default.EXPANDER_SIZE / 2,
674
+ r: 3
675
+ } : {
676
+ r: l * treeColWidth + treeColWidth / 2 - constants_1.default.EXPANDER_SIZE / 2,
677
+ b: 3
678
+ });
679
+ expander.addEventListener('mousedown', e => e.stopPropagation());
680
+ expander.addEventListener('toggle', (e) => {
681
+ this.grid.rendering.setColumnExpandLevel(e.level);
682
+ });
683
+ }
684
+ }
685
+ core_1.dom.empty(th);
686
+ th.appendChild(this.cornerDiv);
687
+ }
688
+ //#region render body rows
689
+ renderBody() {
690
+ let row;
691
+ let cell;
692
+ let rowModel;
693
+ let rIndex;
694
+ let cIndex;
695
+ let colModel;
696
+ let cellModel;
697
+ //let hiddenRowCells: Map<number, Merge>;
698
+ // let merge: Merge;
699
+ // const freezeLeft = this.freezeLeft;
700
+ // const freezeTop = this.model.options.freezeTop || 0;
701
+ const offset = this.rowHeaderCount;
702
+ const rowNumbers = this.model.options.rowNumbers;
703
+ const viewport = this.viewport;
704
+ const mergedCells = [];
705
+ //const hiddenCells = this.model.hiddenCells;
706
+ this.rowMap.clear();
707
+ for (let r = 0; r < this.bRows.length; r++) {
708
+ row = this.bRows[r];
709
+ if (r < viewport.rows.length) {
710
+ rowModel = viewport.rows[r];
711
+ rIndex = rowModel.index;
712
+ core_1.dom.setSize(row, { h: rowModel.height });
713
+ this.rowMap.set(rIndex, r);
714
+ if (rowNumbers) {
715
+ cell = row.children[offset - 1];
716
+ cell.className = 'vlabel';
717
+ cell.r = rIndex;
718
+ cell.c = -1;
719
+ cell.innerHTML = (0, grid_core_1.encodeRow)(rIndex);
720
+ }
721
+ //hiddenRowCells = hiddenCells.get(rIndex);
722
+ for (let c = offset; c < row.children.length; c++) {
723
+ cell = row.children[c];
724
+ if (c - offset < viewport.columns.length) {
725
+ colModel = viewport.columns[c - offset];
726
+ cIndex = colModel.index;
727
+ cell.r = rIndex;
728
+ cell.c = cIndex;
729
+ cell.colSpan = 1; //cellModel.colspan;
730
+ cell.rowSpan = 1; //cellModel.rowspan;
731
+ // merge = hiddenRowCells && hiddenRowCells.get(cIndex);
732
+ // if (merge) {
733
+ // if (c == offset + freezeLeft) { // || r == freezeTop) {
734
+ // cIndex = merge.c;
735
+ // rIndex = merge.r;
736
+ // mergedCells.push(merge);
737
+ // } else {
738
+ // dom.hideCell(cell);
739
+ // continue;
740
+ // }
741
+ // }
742
+ cellModel = rowModel.cell(cIndex);
743
+ if (cellModel.colspan > 1 || cellModel.rowspan > 1) {
744
+ mergedCells.push({ r: r, c: c, cs: cellModel.colspan, rs: cellModel.rowspan });
745
+ }
746
+ core_1.dom.showCell(cell);
747
+ this.renderBodyCell(cellModel, cell);
748
+ // this.scheduleRenderBodyCell(cellModel, cell);
749
+ }
750
+ else {
751
+ core_1.dom.hideCell(cell);
752
+ }
753
+ }
754
+ row.style.display = 'table-row';
755
+ row.className = rowModel.filterState == core_1.tree.FilterState.ChildMatched ? `filtered` : '';
756
+ }
757
+ else {
758
+ row.style.display = 'none';
759
+ }
760
+ }
761
+ this.mergeBodyCells(mergedCells);
762
+ }
763
+ scheduleRenderBodyCell(cellModel, cell) {
764
+ if (this.cellRenderSchedules.has(cell)) {
765
+ window.clearTimeout(this.cellRenderSchedules.get(cell));
766
+ this.cellRenderSchedules.delete(cell);
767
+ }
768
+ this.cellRenderSchedules.set(cell, window.setTimeout(() => this.renderBodyCell(cellModel, cell)));
769
+ }
770
+ renderBodyCell(cellModel, cell) {
771
+ const force = !cell;
772
+ cell = cell || this.getCellByCellModel(cellModel);
773
+ if (cell) {
774
+ let div = (force ? null : this.bCache.get(cellModel.c, cellModel.r));
775
+ if (!div) {
776
+ div = core_1.dom.createElement('div');
777
+ (cellModel.renderer || renderers_1.cellTypeRendererMap[cellModel.type]).call(this, div, cellModel);
778
+ this.bCache.set(cellModel.c, cellModel.r, div);
779
+ }
780
+ core_1.dom.empty(cell);
781
+ cell.appendChild(div);
782
+ }
783
+ else {
784
+ this.bCache.delete(cellModel.c, cellModel.r);
785
+ }
786
+ }
787
+ mergeBodyCells(mergedCells) {
788
+ let cell;
789
+ const skipSet = new Set();
790
+ for (const m of mergedCells) {
791
+ cell = this.bRows[m.r].cells[m.c];
792
+ if (!cell || skipSet.has(cell))
793
+ continue;
794
+ for (let r = m.r; r < m.r + m.rs; r++) {
795
+ for (let c = m.c; c < m.c + m.cs; c++) {
796
+ cell = this.bRows[r].cells[c];
797
+ if (!cell)
798
+ continue;
799
+ if (r == m.r && c == m.c) {
800
+ cell.colSpan = m.cs;
801
+ cell.rowSpan = m.rs;
802
+ }
803
+ else {
804
+ skipSet.add(cell);
805
+ core_1.dom.hideCell(cell);
806
+ }
807
+ }
808
+ }
809
+ }
810
+ }
811
+ renderRowTree() {
812
+ if (!this.model.hasRowTree)
813
+ return;
814
+ let cell;
815
+ const viewport = this.viewport;
816
+ const cIndex = -this.rowHeaderCount;
817
+ for (let r = 0; r < this.bRows.length; r++) {
818
+ cell = this.bRows[r].children[0];
819
+ cell.innerHTML = '';
820
+ if (r < viewport.rows.length) {
821
+ cell.className = 'vtree';
822
+ this.renderRowTreeCell(cIndex, viewport.rows[r], cell);
823
+ }
824
+ }
825
+ }
826
+ renderRowTreeCell(cIndex, row, th) {
827
+ let div = this.bCache.get(cIndex, row.index);
828
+ if (!div) {
829
+ div = core_1.dom.createElement('div');
830
+ this.bCache.set(cIndex, row.index, div);
831
+ const rowHeight = row.height + 1;
832
+ const treeColWidth = this.treeHeaderWidth / this.model.maxRowLevel;
833
+ if (row.hasChildren) {
834
+ const expander = new core_1.Expander();
835
+ expander.addEventListener('toggle', () => this.grid.rendering.toggleRow(row.index));
836
+ th.parentElement.expander = expander;
837
+ div.expander = expander;
838
+ div.appendChild(expander);
839
+ core_1.dom.setPosition(expander, {
840
+ t: rowHeight / 2 - constants_1.default.EXPANDER_SIZE / 2,
841
+ l: row.level * treeColWidth + treeColWidth / 2 - constants_1.default.EXPANDER_SIZE / 2
842
+ });
843
+ const line = this.createExpanderLine('v');
844
+ div.appendChild(line);
845
+ core_1.dom.setPosition(line, {
846
+ t: rowHeight / 2,
847
+ l: row.level * treeColWidth + treeColWidth / 2
848
+ });
849
+ core_1.dom.setSize(line, {
850
+ w: treeColWidth / 2,
851
+ h: rowHeight / 2 + 1
852
+ });
853
+ }
854
+ if (row.hasParent) {
855
+ let parent = row;
856
+ while (parent.hasParent) {
857
+ parent = parent.parent;
858
+ const line = this.createExpanderLine('v');
859
+ div.appendChild(line);
860
+ core_1.dom.setSize(line, {
861
+ w: treeColWidth / 2,
862
+ h: rowHeight + 2
863
+ });
864
+ core_1.dom.setPosition(line, {
865
+ t: -1,
866
+ l: parent.level * treeColWidth + treeColWidth / 2
867
+ });
868
+ }
869
+ }
870
+ }
871
+ if (div.expander)
872
+ div.expander.state = row.collapsed ? 'closed' : 'open';
873
+ th.appendChild(div);
874
+ }
875
+ };
876
+ exports.Table = Table;
877
+ Table.styles = [table_styles_1.tableStyles];
878
+ __decorate([
879
+ (0, decorators_js_1.property)({ type: Object })
880
+ ], Table.prototype, "model", void 0);
881
+ __decorate([
882
+ (0, decorators_js_1.property)({ type: Number, hasChanged: () => false })
883
+ ], Table.prototype, "rowOffset", void 0);
884
+ __decorate([
885
+ (0, decorators_js_1.property)({ type: Number, hasChanged: () => false })
886
+ ], Table.prototype, "colOffset", void 0);
887
+ __decorate([
888
+ (0, decorators_js_1.property)({ type: Number, reflect: true })
889
+ ], Table.prototype, "zoom", void 0);
890
+ __decorate([
891
+ (0, decorators_js_1.property)({ type: Boolean, reflect: true })
892
+ ], Table.prototype, "nogrid", void 0);
893
+ __decorate([
894
+ (0, decorators_js_1.property)({ type: Boolean, reflect: true })
895
+ ], Table.prototype, "renderAll", void 0);
896
+ exports.Table = Table = __decorate([
897
+ (0, decorators_js_1.customElement)('og-table')
898
+ ], Table);
899
+ //# sourceMappingURL=table.js.map