@syncfusion/ej2-treegrid 33.2.12 → 34.1.30

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 (302) hide show
  1. package/dist/ej2-treegrid.min.js +2 -2
  2. package/dist/ej2-treegrid.umd.min.js +2 -2
  3. package/dist/ej2-treegrid.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-treegrid.es2015.js +133 -40
  5. package/dist/es6/ej2-treegrid.es2015.js.map +1 -1
  6. package/dist/es6/ej2-treegrid.es5.js +133 -40
  7. package/dist/es6/ej2-treegrid.es5.js.map +1 -1
  8. package/dist/global/ej2-treegrid.min.js +2 -2
  9. package/dist/global/ej2-treegrid.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/helpers/e2e/index.d.ts +1 -0
  12. package/helpers/e2e/index.js +8 -0
  13. package/helpers/e2e/treegridhelper.d.ts +21 -0
  14. package/helpers/e2e/treegridhelper.js +83 -0
  15. package/package.json +5 -5
  16. package/src/treegrid/actions/batch-edit.d.ts +1 -0
  17. package/src/treegrid/actions/batch-edit.js +14 -2
  18. package/src/treegrid/actions/edit.d.ts +12 -0
  19. package/src/treegrid/actions/edit.js +35 -3
  20. package/src/treegrid/actions/pdf-export.js +3 -1
  21. package/src/treegrid/actions/selection.d.ts +7 -0
  22. package/src/treegrid/actions/selection.js +32 -13
  23. package/src/treegrid/base/data.js +5 -11
  24. package/src/treegrid/base/treegrid.d.ts +7 -0
  25. package/src/treegrid/base/treegrid.js +34 -5
  26. package/src/treegrid/renderer/virtual-tree-content-render.js +10 -5
  27. package/styles/bds-lite.css +0 -351
  28. package/styles/bds-lite.scss +1 -15
  29. package/styles/bds.css +0 -355
  30. package/styles/bds.scss +2 -16
  31. package/styles/bootstrap-dark-lite.css +0 -100
  32. package/styles/bootstrap-dark-lite.scss +1 -15
  33. package/styles/bootstrap-dark.css +0 -100
  34. package/styles/bootstrap-dark.scss +2 -16
  35. package/styles/bootstrap-lite.css +0 -100
  36. package/styles/bootstrap-lite.scss +1 -15
  37. package/styles/bootstrap.css +0 -100
  38. package/styles/bootstrap.scss +2 -16
  39. package/styles/bootstrap4-lite.css +0 -144
  40. package/styles/bootstrap4-lite.scss +1 -15
  41. package/styles/bootstrap4.css +0 -144
  42. package/styles/bootstrap4.scss +2 -16
  43. package/styles/bootstrap5-dark-lite.css +0 -139
  44. package/styles/bootstrap5-dark-lite.scss +1 -15
  45. package/styles/bootstrap5-dark.css +0 -139
  46. package/styles/bootstrap5-dark.scss +2 -16
  47. package/styles/bootstrap5-lite.css +0 -139
  48. package/styles/bootstrap5-lite.scss +1 -16
  49. package/styles/bootstrap5.3-lite.css +0 -307
  50. package/styles/bootstrap5.3-lite.scss +1 -16
  51. package/styles/bootstrap5.3.css +0 -391
  52. package/styles/bootstrap5.3.scss +2 -17
  53. package/styles/bootstrap5.css +0 -139
  54. package/styles/bootstrap5.scss +2 -17
  55. package/styles/fabric-dark-lite.css +0 -76
  56. package/styles/fabric-dark-lite.scss +1 -16
  57. package/styles/fabric-dark.css +0 -76
  58. package/styles/fabric-dark.scss +2 -17
  59. package/styles/fabric-lite.css +0 -76
  60. package/styles/fabric-lite.scss +1 -16
  61. package/styles/fabric.css +0 -76
  62. package/styles/fabric.scss +2 -17
  63. package/styles/fluent-dark-lite.css +0 -131
  64. package/styles/fluent-dark-lite.scss +1 -16
  65. package/styles/fluent-dark.css +0 -131
  66. package/styles/fluent-dark.scss +2 -17
  67. package/styles/fluent-lite.css +0 -131
  68. package/styles/fluent-lite.scss +1 -16
  69. package/styles/fluent.css +0 -131
  70. package/styles/fluent.scss +2 -17
  71. package/styles/fluent2-lite.css +0 -548
  72. package/styles/fluent2-lite.scss +1 -16
  73. package/styles/fluent2.css +0 -634
  74. package/styles/fluent2.scss +2 -17
  75. package/styles/highcontrast-light-lite.css +0 -85
  76. package/styles/highcontrast-light-lite.scss +1 -16
  77. package/styles/highcontrast-light.css +0 -85
  78. package/styles/highcontrast-light.scss +2 -17
  79. package/styles/highcontrast-lite.css +0 -85
  80. package/styles/highcontrast-lite.scss +1 -16
  81. package/styles/highcontrast.css +0 -85
  82. package/styles/highcontrast.scss +2 -17
  83. package/styles/material-dark-lite.css +0 -161
  84. package/styles/material-dark-lite.scss +1 -16
  85. package/styles/material-dark.css +0 -161
  86. package/styles/material-dark.scss +2 -17
  87. package/styles/material-lite.css +0 -185
  88. package/styles/material-lite.scss +1 -15
  89. package/styles/material.css +0 -185
  90. package/styles/material.scss +2 -16
  91. package/styles/material3-dark-lite.css +0 -393
  92. package/styles/material3-dark-lite.scss +1 -16
  93. package/styles/material3-dark.css +0 -475
  94. package/styles/material3-dark.scss +2 -17
  95. package/styles/material3-lite.css +0 -397
  96. package/styles/material3-lite.scss +1 -16
  97. package/styles/material3.css +0 -481
  98. package/styles/material3.scss +2 -17
  99. package/styles/tailwind-dark-lite.css +0 -112
  100. package/styles/tailwind-dark-lite.scss +1 -16
  101. package/styles/tailwind-dark.css +0 -112
  102. package/styles/tailwind-dark.scss +2 -17
  103. package/styles/tailwind-lite.css +0 -112
  104. package/styles/tailwind-lite.scss +1 -16
  105. package/styles/tailwind.css +0 -112
  106. package/styles/tailwind.scss +2 -17
  107. package/styles/tailwind3-lite.css +0 -347
  108. package/styles/tailwind3-lite.scss +1 -16
  109. package/styles/tailwind3.css +0 -421
  110. package/styles/tailwind3.scss +2 -17
  111. package/styles/treegrid/_all.scss +2 -2
  112. package/styles/treegrid/_bds-definition.scss +4 -2
  113. package/styles/treegrid/_bigger.scss +1 -1
  114. package/styles/treegrid/_bootstrap-dark-definition.scss +4 -2
  115. package/styles/treegrid/_bootstrap-definition.scss +4 -2
  116. package/styles/treegrid/_bootstrap4-definition.scss +4 -2
  117. package/styles/treegrid/_bootstrap5-dark-definition.scss +4 -2
  118. package/styles/treegrid/_bootstrap5-definition.scss +4 -2
  119. package/styles/treegrid/_bootstrap5.3-definition.scss +4 -2
  120. package/styles/treegrid/_fabric-dark-definition.scss +4 -2
  121. package/styles/treegrid/_fabric-definition.scss +4 -2
  122. package/styles/treegrid/_fluent-dark-definition.scss +4 -2
  123. package/styles/treegrid/_fluent-definition.scss +4 -2
  124. package/styles/treegrid/_fluent2-definition.scss +4 -2
  125. package/styles/treegrid/_fusionnew-definition.scss +2 -0
  126. package/styles/treegrid/_highcontrast-definition.scss +4 -2
  127. package/styles/treegrid/_highcontrast-light-definition.scss +4 -2
  128. package/styles/treegrid/_layout.scss +4 -4
  129. package/styles/treegrid/_material-dark-definition.scss +4 -2
  130. package/styles/treegrid/_material-definition.scss +4 -2
  131. package/styles/treegrid/_material3-dark-definition.scss +4 -2
  132. package/styles/treegrid/_material3-definition.scss +4 -2
  133. package/styles/treegrid/_tailwind-dark-definition.scss +4 -2
  134. package/styles/treegrid/_tailwind-definition.scss +4 -2
  135. package/styles/treegrid/_tailwind3-definition.scss +4 -2
  136. package/styles/treegrid/_variables.scss +2 -0
  137. package/styles/treegrid/bds.css +0 -355
  138. package/styles/treegrid/bds.scss +2 -17
  139. package/styles/treegrid/bootstrap-dark.css +0 -100
  140. package/styles/treegrid/bootstrap-dark.scss +2 -17
  141. package/styles/treegrid/bootstrap.css +0 -100
  142. package/styles/treegrid/bootstrap.scss +2 -17
  143. package/styles/treegrid/bootstrap4.css +0 -144
  144. package/styles/treegrid/bootstrap4.scss +2 -17
  145. package/styles/treegrid/bootstrap5-dark.css +0 -139
  146. package/styles/treegrid/bootstrap5-dark.scss +2 -17
  147. package/styles/treegrid/bootstrap5.3.css +0 -391
  148. package/styles/treegrid/bootstrap5.3.scss +2 -17
  149. package/styles/treegrid/bootstrap5.css +0 -139
  150. package/styles/treegrid/bootstrap5.scss +2 -17
  151. package/styles/treegrid/fabric-dark.css +0 -76
  152. package/styles/treegrid/fabric-dark.scss +2 -17
  153. package/styles/treegrid/fabric.css +0 -76
  154. package/styles/treegrid/fabric.scss +2 -17
  155. package/styles/treegrid/fluent-dark.css +0 -131
  156. package/styles/treegrid/fluent-dark.scss +2 -17
  157. package/styles/treegrid/fluent.css +0 -131
  158. package/styles/treegrid/fluent.scss +2 -17
  159. package/styles/treegrid/fluent2.css +0 -634
  160. package/styles/treegrid/fluent2.scss +2 -17
  161. package/styles/treegrid/highcontrast-light.css +0 -85
  162. package/styles/treegrid/highcontrast-light.scss +2 -17
  163. package/styles/treegrid/highcontrast.css +0 -85
  164. package/styles/treegrid/highcontrast.scss +2 -17
  165. package/styles/treegrid/icons/_bds.scss +1 -1
  166. package/styles/treegrid/icons/_bootstrap-dark.scss +1 -1
  167. package/styles/treegrid/icons/_bootstrap.scss +1 -1
  168. package/styles/treegrid/icons/_bootstrap4.scss +1 -1
  169. package/styles/treegrid/icons/_bootstrap5.3.scss +1 -1
  170. package/styles/treegrid/icons/_bootstrap5.scss +1 -1
  171. package/styles/treegrid/icons/_fabric-dark.scss +1 -1
  172. package/styles/treegrid/icons/_fabric.scss +1 -1
  173. package/styles/treegrid/icons/_fluent.scss +1 -1
  174. package/styles/treegrid/icons/_fluent2.scss +1 -1
  175. package/styles/treegrid/icons/_fusionnew.scss +1 -1
  176. package/styles/treegrid/icons/_highcontrast-light.scss +1 -1
  177. package/styles/treegrid/icons/_highcontrast.scss +1 -1
  178. package/styles/treegrid/icons/_material-dark.scss +1 -1
  179. package/styles/treegrid/icons/_material.scss +1 -1
  180. package/styles/treegrid/icons/_material3.scss +1 -1
  181. package/styles/treegrid/icons/_tailwind-dark.scss +1 -1
  182. package/styles/treegrid/icons/_tailwind.scss +1 -1
  183. package/styles/treegrid/icons/_tailwind3.scss +1 -1
  184. package/styles/treegrid/material-dark.css +0 -161
  185. package/styles/treegrid/material-dark.scss +2 -17
  186. package/styles/treegrid/material.css +0 -185
  187. package/styles/treegrid/material.scss +2 -17
  188. package/styles/treegrid/material3-dark.css +0 -475
  189. package/styles/treegrid/material3-dark.scss +2 -17
  190. package/styles/treegrid/material3.css +0 -481
  191. package/styles/treegrid/material3.scss +2 -17
  192. package/styles/treegrid/tailwind-dark.css +0 -112
  193. package/styles/treegrid/tailwind-dark.scss +2 -17
  194. package/styles/treegrid/tailwind.css +0 -112
  195. package/styles/treegrid/tailwind.scss +2 -17
  196. package/styles/treegrid/tailwind3.css +0 -421
  197. package/styles/treegrid/tailwind3.scss +2 -17
  198. package/styles/treegrid/_all.bds.scss +0 -2
  199. package/styles/treegrid/_all.bootstrap-dark.scss +0 -2
  200. package/styles/treegrid/_all.bootstrap.scss +0 -2
  201. package/styles/treegrid/_all.bootstrap4.scss +0 -2
  202. package/styles/treegrid/_all.bootstrap5-dark.scss +0 -2
  203. package/styles/treegrid/_all.bootstrap5.3.scss +0 -2
  204. package/styles/treegrid/_all.bootstrap5.scss +0 -2
  205. package/styles/treegrid/_all.fabric-dark.scss +0 -2
  206. package/styles/treegrid/_all.fabric.scss +0 -2
  207. package/styles/treegrid/_all.fluent-dark.scss +0 -2
  208. package/styles/treegrid/_all.fluent.scss +0 -2
  209. package/styles/treegrid/_all.fluent2.scss +0 -2
  210. package/styles/treegrid/_all.highcontrast-light.scss +0 -2
  211. package/styles/treegrid/_all.highcontrast.scss +0 -2
  212. package/styles/treegrid/_all.material-dark.scss +0 -2
  213. package/styles/treegrid/_all.material.scss +0 -2
  214. package/styles/treegrid/_all.material3-dark.scss +0 -2
  215. package/styles/treegrid/_all.material3.scss +0 -2
  216. package/styles/treegrid/_all.tailwind-dark.scss +0 -2
  217. package/styles/treegrid/_all.tailwind.scss +0 -2
  218. package/styles/treegrid/_all.tailwind3.scss +0 -2
  219. package/styles/treegrid/_bigger.bds.scss +0 -3
  220. package/styles/treegrid/_bigger.bootstrap-dark.scss +0 -3
  221. package/styles/treegrid/_bigger.bootstrap.scss +0 -3
  222. package/styles/treegrid/_bigger.bootstrap4.scss +0 -3
  223. package/styles/treegrid/_bigger.bootstrap5-dark.scss +0 -3
  224. package/styles/treegrid/_bigger.bootstrap5.3.scss +0 -3
  225. package/styles/treegrid/_bigger.bootstrap5.scss +0 -3
  226. package/styles/treegrid/_bigger.fabric-dark.scss +0 -3
  227. package/styles/treegrid/_bigger.fabric.scss +0 -3
  228. package/styles/treegrid/_bigger.fluent-dark.scss +0 -3
  229. package/styles/treegrid/_bigger.fluent.scss +0 -3
  230. package/styles/treegrid/_bigger.fluent2.scss +0 -3
  231. package/styles/treegrid/_bigger.highcontrast-light.scss +0 -3
  232. package/styles/treegrid/_bigger.highcontrast.scss +0 -3
  233. package/styles/treegrid/_bigger.material-dark.scss +0 -3
  234. package/styles/treegrid/_bigger.material.scss +0 -3
  235. package/styles/treegrid/_bigger.material3-dark.scss +0 -3
  236. package/styles/treegrid/_bigger.material3.scss +0 -3
  237. package/styles/treegrid/_bigger.tailwind-dark.scss +0 -3
  238. package/styles/treegrid/_bigger.tailwind.scss +0 -3
  239. package/styles/treegrid/_bigger.tailwind3.scss +0 -3
  240. package/styles/treegrid/_layout.bds.scss +0 -4
  241. package/styles/treegrid/_layout.bootstrap-dark.scss +0 -4
  242. package/styles/treegrid/_layout.bootstrap.scss +0 -4
  243. package/styles/treegrid/_layout.bootstrap4.scss +0 -4
  244. package/styles/treegrid/_layout.bootstrap5-dark.scss +0 -4
  245. package/styles/treegrid/_layout.bootstrap5.3.scss +0 -4
  246. package/styles/treegrid/_layout.bootstrap5.scss +0 -4
  247. package/styles/treegrid/_layout.fabric-dark.scss +0 -4
  248. package/styles/treegrid/_layout.fabric.scss +0 -4
  249. package/styles/treegrid/_layout.fluent-dark.scss +0 -4
  250. package/styles/treegrid/_layout.fluent.scss +0 -4
  251. package/styles/treegrid/_layout.fluent2.scss +0 -4
  252. package/styles/treegrid/_layout.highcontrast-light.scss +0 -4
  253. package/styles/treegrid/_layout.highcontrast.scss +0 -4
  254. package/styles/treegrid/_layout.material-dark.scss +0 -4
  255. package/styles/treegrid/_layout.material.scss +0 -4
  256. package/styles/treegrid/_layout.material3-dark.scss +0 -4
  257. package/styles/treegrid/_layout.material3.scss +0 -4
  258. package/styles/treegrid/_layout.tailwind-dark.scss +0 -4
  259. package/styles/treegrid/_layout.tailwind.scss +0 -4
  260. package/styles/treegrid/_layout.tailwind3.scss +0 -4
  261. package/styles/treegrid/_theme-variables.bds.scss +0 -1
  262. package/styles/treegrid/_theme-variables.bootstrap-dark.scss +0 -1
  263. package/styles/treegrid/_theme-variables.bootstrap.scss +0 -1
  264. package/styles/treegrid/_theme-variables.bootstrap4.scss +0 -1
  265. package/styles/treegrid/_theme-variables.bootstrap5-dark.scss +0 -1
  266. package/styles/treegrid/_theme-variables.bootstrap5.3.scss +0 -1
  267. package/styles/treegrid/_theme-variables.bootstrap5.scss +0 -1
  268. package/styles/treegrid/_theme-variables.fabric-dark.scss +0 -1
  269. package/styles/treegrid/_theme-variables.fabric.scss +0 -1
  270. package/styles/treegrid/_theme-variables.fluent-dark.scss +0 -1
  271. package/styles/treegrid/_theme-variables.fluent.scss +0 -1
  272. package/styles/treegrid/_theme-variables.fluent2.scss +0 -1
  273. package/styles/treegrid/_theme-variables.highcontrast-light.scss +0 -1
  274. package/styles/treegrid/_theme-variables.highcontrast.scss +0 -1
  275. package/styles/treegrid/_theme-variables.material-dark.scss +0 -1
  276. package/styles/treegrid/_theme-variables.material.scss +0 -1
  277. package/styles/treegrid/_theme-variables.material3-dark.scss +0 -1
  278. package/styles/treegrid/_theme-variables.material3.scss +0 -1
  279. package/styles/treegrid/_theme-variables.tailwind-dark.scss +0 -1
  280. package/styles/treegrid/_theme-variables.tailwind.scss +0 -1
  281. package/styles/treegrid/_theme-variables.tailwind3.scss +0 -1
  282. package/styles/treegrid/_theme.bds.scss +0 -1
  283. package/styles/treegrid/_theme.bootstrap-dark.scss +0 -1
  284. package/styles/treegrid/_theme.bootstrap.scss +0 -1
  285. package/styles/treegrid/_theme.bootstrap4.scss +0 -1
  286. package/styles/treegrid/_theme.bootstrap5-dark.scss +0 -1
  287. package/styles/treegrid/_theme.bootstrap5.3.scss +0 -1
  288. package/styles/treegrid/_theme.bootstrap5.scss +0 -1
  289. package/styles/treegrid/_theme.fabric-dark.scss +0 -1
  290. package/styles/treegrid/_theme.fabric.scss +0 -1
  291. package/styles/treegrid/_theme.fluent-dark.scss +0 -1
  292. package/styles/treegrid/_theme.fluent.scss +0 -1
  293. package/styles/treegrid/_theme.fluent2.scss +0 -1
  294. package/styles/treegrid/_theme.highcontrast-light.scss +0 -1
  295. package/styles/treegrid/_theme.highcontrast.scss +0 -1
  296. package/styles/treegrid/_theme.material-dark.scss +0 -1
  297. package/styles/treegrid/_theme.material.scss +0 -1
  298. package/styles/treegrid/_theme.material3-dark.scss +0 -1
  299. package/styles/treegrid/_theme.material3.scss +0 -1
  300. package/styles/treegrid/_theme.tailwind-dark.scss +0 -1
  301. package/styles/treegrid/_theme.tailwind.scss +0 -1
  302. package/styles/treegrid/_theme.tailwind3.scss +0 -1
@@ -970,6 +970,20 @@ class Selection {
970
970
  this.resetSelectionCaches();
971
971
  this.removeEventListener();
972
972
  }
973
+ /**
974
+ * Gets the actual record from the data model's uniqueIDCollection.
975
+ *
976
+ * @param {ITreeData} record - The record (may be stale reference).
977
+ * @returns {ITreeData} The actual record from the data model.
978
+ */
979
+ getRecordFromUidCollection(record) {
980
+ if (!record) {
981
+ return record;
982
+ }
983
+ const uidMap = this.parent.uniqueIDCollection;
984
+ const uid = record.uniqueID;
985
+ return (uidMap && uid != null) ? (uidMap[String(uid)] ? uidMap[String(uid)] : record) : record;
986
+ }
973
987
  /**
974
988
  * Handles checkbox click events from the DOM and dispatches selection logic.
975
989
  *
@@ -995,8 +1009,7 @@ class Selection {
995
1009
  }
996
1010
  else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {
997
1011
  const frame = checkWrap.querySelector('.e-frame');
998
- const currentStateIsUncheck = !frame.classList.contains('e-check') && !frame.classList.contains('e-stop');
999
- const targetState = currentStateIsUncheck; // If currently uncheck, target state is to check all.
1012
+ const targetState = frame.classList.contains('e-uncheck') || frame.classList.contains('e-stop');
1000
1013
  this.headerSelection(targetState);
1001
1014
  checkBox = checkWrap.querySelector('input[type="checkbox"]');
1002
1015
  this.triggerChkChangeEvent(checkBox, targetState, target.closest('tr'));
@@ -1163,6 +1176,7 @@ class Selection {
1163
1176
  const flatRec = getParentData(this.parent, viewRec.uniqueID);
1164
1177
  const nextState = (flatRec.checkboxState === 'check') ? 'uncheck' : 'check';
1165
1178
  flatRec.checkboxState = nextState;
1179
+ viewRec.checkboxState = nextState;
1166
1180
  this.traverSelection(flatRec, nextState, false);
1167
1181
  }
1168
1182
  }
@@ -1214,10 +1228,11 @@ class Selection {
1214
1228
  if (child.hasChildRecords) {
1215
1229
  this.traverSelection(child, checkboxState, true);
1216
1230
  }
1217
- if (child.checkboxState === 'check') {
1231
+ const updatedChild = this.getRecordFromUidCollection(child);
1232
+ if (updatedChild.checkboxState === 'check') {
1218
1233
  checkedCount++;
1219
1234
  }
1220
- else if (child.checkboxState === 'indeterminate') {
1235
+ else if (updatedChild.checkboxState === 'indeterminate') {
1221
1236
  indeterminateCount++;
1222
1237
  }
1223
1238
  }
@@ -1340,11 +1355,12 @@ class Selection {
1340
1355
  if (!child || child.isSummaryRow) {
1341
1356
  continue;
1342
1357
  }
1358
+ const actualChild = this.getRecordFromUidCollection(child);
1343
1359
  summary.total++;
1344
- if (child.checkboxState === 'check') {
1360
+ if (actualChild.checkboxState === 'check') {
1345
1361
  summary.checked++;
1346
1362
  }
1347
- else if (child.checkboxState === 'indeterminate') {
1363
+ else if (actualChild.checkboxState === 'indeterminate') {
1348
1364
  summary.indeterminate++;
1349
1365
  }
1350
1366
  }
@@ -1472,12 +1488,13 @@ class Selection {
1472
1488
  if (!record) {
1473
1489
  continue;
1474
1490
  }
1475
- const previousState = record.checkboxState;
1491
+ const actualRecord = this.getRecordFromUidCollection(record);
1492
+ const previousState = actualRecord.checkboxState;
1476
1493
  if (previousState === targetState) {
1477
1494
  continue;
1478
1495
  }
1479
- record.checkboxState = targetState;
1480
- this.updateSelectedItems(record, targetState, true);
1496
+ actualRecord.checkboxState = targetState;
1497
+ this.updateSelectedItems(actualRecord, targetState, true);
1481
1498
  }
1482
1499
  }
1483
1500
  /**
@@ -1504,9 +1521,10 @@ class Selection {
1504
1521
  if (item.hasChildRecords && isFilterOrSearch && item.level === 0 && this.parent.autoCheckHierarchy) {
1505
1522
  this.updateParentSelection(item);
1506
1523
  }
1507
- if (item.uniqueID && item.checkboxState === 'check') {
1508
- newSelectedItems.push(item);
1509
- newSelectedUidMap.set(item.uniqueID, true);
1524
+ const actualItem = this.getRecordFromUidCollection(item);
1525
+ if (actualItem.uniqueID && actualItem.checkboxState === 'check') {
1526
+ newSelectedItems.push(actualItem);
1527
+ newSelectedUidMap.set(actualItem.uniqueID, true);
1510
1528
  }
1511
1529
  }
1512
1530
  if (!isFilterOrSearch) {
@@ -1678,7 +1696,8 @@ class Selection {
1678
1696
  this.totalSelectableCount = this.countSelectableRecords(recordsForHeaderLogic);
1679
1697
  let checkedCountForHeaderLogic = 0;
1680
1698
  for (const record of recordsForHeaderLogic) {
1681
- if (record && !record.isSummaryRow && record.checkboxState === 'check') {
1699
+ const actualRecord = this.getRecordFromUidCollection(record);
1700
+ if (actualRecord && !actualRecord.isSummaryRow && actualRecord.checkboxState === 'check') {
1682
1701
  checkedCountForHeaderLogic++;
1683
1702
  }
1684
1703
  }
@@ -2467,12 +2486,10 @@ class DataManipulation {
2467
2486
  if (this.parent.parentIdMapping) {
2468
2487
  this.parent.query = isNullOrUndefined(this.parent.query) ?
2469
2488
  new Query() : this.parent.query;
2470
- if (this.parent.parentIdMapping) {
2471
- const filterKey = this.parent.query.params.filter((param) => param.key === 'IdMapping');
2472
- if (this.parent.initialRender && !filterKey.length) {
2473
- this.parent.query.where(this.parent.parentIdMapping, 'equal', null);
2474
- this.parent.query.addParams('IdMapping', this.parent.idMapping);
2475
- }
2489
+ const filterKey = this.parent.query.params.filter((param) => param.key === 'IdMapping');
2490
+ if (this.parent.initialRender && !filterKey.length) {
2491
+ this.parent.query.where(this.parent.parentIdMapping, 'equal', null);
2492
+ this.parent.query.addParams('IdMapping', this.parent.idMapping);
2476
2493
  }
2477
2494
  if (!this.parent.hasChildMapping) {
2478
2495
  let qry = this.parent.query.clone();
@@ -3027,9 +3044,6 @@ class DataManipulation {
3027
3044
  ? currentData[this.parent.expandStateMapping] : true;
3028
3045
  }
3029
3046
  }
3030
- if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {
3031
- currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;
3032
- }
3033
3047
  if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {
3034
3048
  this.parent.parentData.push(currentData);
3035
3049
  }
@@ -3216,8 +3230,7 @@ class DataManipulation {
3216
3230
  }
3217
3231
  const isPdfExport = 'isPdfExport';
3218
3232
  const isCollapsedStatePersist = 'isCollapsedStatePersist';
3219
- if ((isPrinting === true || (args[`${isPdfExport}`] && (isNullOrUndefined(args[`${isCollapsedStatePersist}`])
3220
- || args[`${isCollapsedStatePersist}`]))) && this.parent.printMode === 'AllPages') {
3233
+ if ((isPrinting === true || (args[`${isPdfExport}`] && args[`${isCollapsedStatePersist}`] === true)) && this.parent.printMode === 'AllPages') {
3221
3234
  const actualResults = [];
3222
3235
  for (let i = 0; i < results.length; i++) {
3223
3236
  const expandStatus = getExpandStatus(this.parent, results[parseInt(i.toString(), 10)], this.parent.parentData);
@@ -5418,8 +5431,13 @@ let TreeGrid = TreeGrid_1 = class TreeGrid extends Component {
5418
5431
  this.grid.dataSource = { result: data, count: datacount };
5419
5432
  }
5420
5433
  else {
5434
+ let cacheAdaptor = null;
5435
+ if ((this.dataSource instanceof DataManager) && this.dataSource[`${dataSource}`] &&
5436
+ this.dataSource[`${dataSource}`].enableCaching) {
5437
+ cacheAdaptor = this.dataSource[`${adaptor}`].cacheAdaptor;
5438
+ }
5421
5439
  this.grid.dataSource = !(this.dataSource instanceof DataManager) ?
5422
- this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor, this.hasPreAndPostMiddleware(this.dataSource) ? this.dataSource : undefined);
5440
+ this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, cacheAdaptor ? cacheAdaptor : this.dataSource.adaptor, this.hasPreAndPostMiddleware(this.dataSource) ? this.dataSource : undefined);
5423
5441
  }
5424
5442
  if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {
5425
5443
  this.grid.dataSource[`${dataSource}`].json = extendArray(this.dataSource[`${dataSource}`].json);
@@ -5813,6 +5831,14 @@ let TreeGrid = TreeGrid_1 = class TreeGrid extends Component {
5813
5831
  gridColumn.textAlign = 'Right';
5814
5832
  }
5815
5833
  }
5834
+ else if (!isNullOrUndefined(this.columnModel[this.treeColumnIndex]) && !this.enableRtl) {
5835
+ if (isNullOrUndefined(this.treeColumnField)) {
5836
+ this.treeColumnField = gridColumn.field;
5837
+ }
5838
+ if (isNullOrUndefined(this.treeColumnTextAlign) && this.treeColumnField === this.columnModel[this.treeColumnIndex].field) {
5839
+ this.treeColumnTextAlign = this.columnModel[this.treeColumnIndex].textAlign;
5840
+ }
5841
+ }
5816
5842
  }
5817
5843
  return gridColumnCollection;
5818
5844
  }
@@ -5834,6 +5860,7 @@ let TreeGrid = TreeGrid_1 = class TreeGrid extends Component {
5834
5860
  onPropertyChanged(newProp) {
5835
5861
  const properties = Object.keys(newProp);
5836
5862
  let requireRefresh = false;
5863
+ let refreshComponent = false;
5837
5864
  for (const prop of properties) {
5838
5865
  switch (prop) {
5839
5866
  case 'columns':
@@ -5976,6 +6003,8 @@ let TreeGrid = TreeGrid_1 = class TreeGrid extends Component {
5976
6003
  this.TreeGridLocale();
5977
6004
  this.grid.toolbar = this.getGridToolbar();
5978
6005
  this.grid.contextMenuItems = this.getContextMenu();
6006
+ requireRefresh = true;
6007
+ refreshComponent = true;
5979
6008
  break;
5980
6009
  case 'selectedRowIndex':
5981
6010
  this.grid.selectedRowIndex = this.selectedRowIndex;
@@ -6005,10 +6034,8 @@ let TreeGrid = TreeGrid_1 = class TreeGrid extends Component {
6005
6034
  this.grid.allowPdfExport = this.allowPdfExport;
6006
6035
  break;
6007
6036
  case 'enableRtl':
6008
- if (!isNullOrUndefined(this.treeColumnField)) {
6009
- this.updateTreeColumnTextAlign();
6010
- }
6011
6037
  this.grid.enableRtl = this.enableRtl;
6038
+ this.updateColumnModel();
6012
6039
  break;
6013
6040
  case 'allowReordering':
6014
6041
  this.grid.allowReordering = this.allowReordering;
@@ -6061,7 +6088,7 @@ let TreeGrid = TreeGrid_1 = class TreeGrid extends Component {
6061
6088
  }
6062
6089
  }
6063
6090
  if (requireRefresh) {
6064
- if (this.isFrozenGrid()) {
6091
+ if (refreshComponent || this.isFrozenGrid()) {
6065
6092
  this.refreshLayout();
6066
6093
  }
6067
6094
  else {
@@ -6873,6 +6900,12 @@ let TreeGrid = TreeGrid_1 = class TreeGrid extends Component {
6873
6900
  if (!this.stackedHeader && !isNullOrUndefined(this.columns)) {
6874
6901
  merge(this.columns, this.columnModel);
6875
6902
  }
6903
+ if (!this.enableRtl && !isNullOrUndefined(this.columnModel[this.treeColumnIndex])
6904
+ && !isNullOrUndefined(this.treeColumnField)) {
6905
+ if (this.columnModel[this.treeColumnIndex].field === this.treeColumnField) {
6906
+ this.columnModel[this.treeColumnIndex].textAlign = this.treeColumnTextAlign;
6907
+ }
6908
+ }
6876
6909
  this[`${deepMerge}`] = undefined; // Workaround for blazor updateModel
6877
6910
  return this.columnModel;
6878
6911
  }
@@ -8734,6 +8767,15 @@ let TreeGrid = TreeGrid_1 = class TreeGrid extends Component {
8734
8767
  return 0;
8735
8768
  }
8736
8769
  }
8770
+ /**
8771
+ * Gets the row index based on the given primary key value or row data.
8772
+ *
8773
+ * @param {string | number | object} value - The primary key value or row data.
8774
+ * @returns {number} Returns the row index.
8775
+ */
8776
+ getRowIndexByPrimaryKey(value) {
8777
+ return this.grid.getRowIndexByPrimaryKey(value);
8778
+ }
8737
8779
  };
8738
8780
  __decorate$c([
8739
8781
  Property(0)
@@ -11913,7 +11955,9 @@ class PdfExport {
11913
11955
  }
11914
11956
  prop = isNullOrUndefined(prop) ? {} : prop;
11915
11957
  prop.dataSource = new DataManager({ json: dtSrc });
11916
- prop.query = args['query'];
11958
+ if (this.parent.aggregates.length > 0) {
11959
+ prop.query = args['query'];
11960
+ }
11917
11961
  return prop;
11918
11962
  }
11919
11963
  /**
@@ -13135,7 +13179,8 @@ class BatchEdit {
13135
13179
  if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) &&
13136
13180
  !this.parent.editModule['isAddedRowByContextMenu'] && !this.parent.editModule.isAddedMultipleRowsByMethod) {
13137
13181
  const newlyAddedRecords = this.parent.getBatchChanges()['addedRecords'];
13138
- const index = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[newlyAddedRecords.length - 1].getAttribute('aria-rowindex'), 10) - 1;
13182
+ const index = this.getInsertedRowIndex(newlyAddedRecords.length - 1);
13183
+ this.batchIndex = index;
13139
13184
  this.batchRecords.splice(index, 0, newlyAddedRecords[newlyAddedRecords.length - 1]);
13140
13185
  }
13141
13186
  }
@@ -13302,6 +13347,17 @@ class BatchEdit {
13302
13347
  this.batchDeletedRecords = [];
13303
13348
  this.parent.grid.renderModule.refresh();
13304
13349
  }
13350
+ getInsertedRowIndex(elementIndex) {
13351
+ const header = this.parent.getHeaderTable().getElementsByClassName('e-insertedrow')[parseInt(elementIndex.toString(), 10)];
13352
+ const content = this.parent.getContentTable().getElementsByClassName('e-insertedrow')[parseInt(elementIndex.toString(), 10)];
13353
+ if (this.parent.frozenRows && header) {
13354
+ return parseInt(header.getAttribute('aria-rowindex'), 10) - 1;
13355
+ }
13356
+ if (content) {
13357
+ return parseInt(content.getAttribute('aria-rowindex'), 10) - 1;
13358
+ }
13359
+ return -1;
13360
+ }
13305
13361
  batchSave(args) {
13306
13362
  if (this.parent.editSettings.mode === 'Batch') {
13307
13363
  let i;
@@ -13330,7 +13386,7 @@ class BatchEdit {
13330
13386
  if (this.parent.editModule['isAddedRowByMethod'] && addRecords.length && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {
13331
13387
  addRecords.reverse();
13332
13388
  for (let i = 0; i < addRecords.length; i++) {
13333
- const index = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[parseInt(i.toString(), 10)].getAttribute('aria-rowindex'), 10) - 1;
13389
+ const index = this.getInsertedRowIndex(parseInt(i.toString(), 10));
13334
13390
  data.splice(index, 0, addRecords[parseInt(i.toString(), 10)]);
13335
13391
  }
13336
13392
  }
@@ -13570,6 +13626,7 @@ class Edit {
13570
13626
  this.parent.grid.on(beforeBatchCancel, this.beforeBatchCancel, this);
13571
13627
  this.parent.grid.on('reset-edit-props', this.resetIsOnBatch, this);
13572
13628
  this.parent.grid.on('get-row-position', this.getRowPosition, this);
13629
+ this.parent.grid.on('last-row-validation', this.lastRowValidation, this);
13573
13630
  }
13574
13631
  gridDblClick(e) {
13575
13632
  this.doubleClickTarget = e.target;
@@ -13583,6 +13640,7 @@ class Edit {
13583
13640
  /* eslint-disable-next-line */
13584
13641
  this.parent.grid.getDataRows()[rowIndex].dataset.uid = this.parent.grid.contentModule.getRows()[rowIndex].uid;
13585
13642
  }
13643
+ this.doubleClickTarget = null;
13586
13644
  }
13587
13645
  }
13588
13646
  getRowPosition(addArgs) {
@@ -13628,6 +13686,7 @@ class Edit {
13628
13686
  this.parent.grid.off('dblclick', this.gridDblClick);
13629
13687
  this.parent.grid.off('reset-edit-props', this.resetIsOnBatch);
13630
13688
  this.parent.grid.off('get-row-position', this.getRowPosition);
13689
+ this.parent.grid.off('last-row-validation', this.lastRowValidation);
13631
13690
  //this.parent.grid.off('click', this.gridSingleClick);
13632
13691
  }
13633
13692
  /**
@@ -13775,7 +13834,7 @@ class Edit {
13775
13834
  this.parent.grid.isEdit = false;
13776
13835
  }
13777
13836
  resetIsOnBatch() {
13778
- if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {
13837
+ if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell' && !this.parent['isGantt']) {
13779
13838
  this.isOnBatch = false;
13780
13839
  this.updateGridEditMode('Normal');
13781
13840
  }
@@ -14206,7 +14265,9 @@ class Edit {
14206
14265
  seletedRow: 0
14207
14266
  };
14208
14267
  this.beginAddEdit(args);
14209
- this.batchEditModule['batchAddRowRecord'].push(this.batchEditModule['addRowRecord']);
14268
+ if (this.batchEditModule['addRowRecord']) {
14269
+ this.batchEditModule['batchAddRowRecord'].push(this.batchEditModule['addRowRecord']);
14270
+ }
14210
14271
  this.batchEditModule['batchAddedRecords'].push(args['data']);
14211
14272
  }
14212
14273
  else if (this.parent.editSettings.mode === 'Batch' && this.isAddedMultipleRowsByMethod && (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below')) {
@@ -14226,7 +14287,9 @@ class Edit {
14226
14287
  seletedRow: 0
14227
14288
  };
14228
14289
  this.beginAddEdit(args);
14229
- this.batchEditModule['batchAddRowRecord'].push(this.batchEditModule['addRowRecord']);
14290
+ if (this.batchEditModule['addRowRecord']) {
14291
+ this.batchEditModule['batchAddRowRecord'].push(this.batchEditModule['addRowRecord']);
14292
+ }
14230
14293
  this.batchEditModule['batchAddedRecords'].push(args['data']);
14231
14294
  }
14232
14295
  }
@@ -14633,6 +14696,31 @@ class Edit {
14633
14696
  }
14634
14697
  this.parent.grid.editModule.closeEdit();
14635
14698
  }
14699
+ /**
14700
+ * Handles TreeGrid-specific validation for tooltip positioning on last row.
14701
+ *
14702
+ * @param {Object} args - Validation flags
14703
+ * @param {boolean} args.isBeginEdit - Whether editing has begun
14704
+ * @param {boolean} args.isAddedRow - Whether the row is newly added
14705
+ * @param {boolean} args.isLastRow - Whether this is the last row
14706
+ * @param {boolean} args.validationPositionResult - Validation position result
14707
+ * @returns {void}
14708
+ * @hidden
14709
+ */
14710
+ lastRowValidation(args) {
14711
+ if (!this.parent.enableVirtualization) {
14712
+ return;
14713
+ }
14714
+ const { isBeginEdit, isAddedRow, isLastRow } = args;
14715
+ const newRowPosition = this.parent.editSettings.newRowPosition;
14716
+ if ((newRowPosition === 'Child' || newRowPosition === 'Below' || newRowPosition === 'Above') &&
14717
+ isAddedRow && isLastRow) {
14718
+ args.validationPositionResult = true;
14719
+ }
14720
+ else if (isBeginEdit && isLastRow) {
14721
+ args.validationPositionResult = true;
14722
+ }
14723
+ }
14636
14724
  }
14637
14725
 
14638
14726
  /**
@@ -14913,7 +15001,7 @@ class VirtualTreeContentRenderer extends VirtualContentRenderer {
14913
15001
  this.startIndex = lastIndex - this.parent.getRows().length;
14914
15002
  this.endIndex = lastIndex;
14915
15003
  }
14916
- else if (this.parent.root.editSettings.newRowPosition !== 'Top' && this.parent.root.editModule.selectedIndex !== -1 || this.parent.root.editModule.selectedIndex !== -1) {
15004
+ else if (this.parent.root.editModule.selectedIndex !== -1) {
14917
15005
  this.startIndex += 1;
14918
15006
  this.endIndex += 1;
14919
15007
  }
@@ -15390,8 +15478,10 @@ class VirtualTreeContentRenderer extends VirtualContentRenderer {
15390
15478
  const directVirtualRender = 'directVirtualRender';
15391
15479
  if (!this.parent[`${directVirtualRender}`]) { // with this property, columns are rendered without debouncing on horizontal scroll.
15392
15480
  const preventEvent = 'preventEvent';
15393
- if (Browser.isIE && !isWheel && check && !this[`${preventEvent}`] && !this.parent.enableVirtualMaskRow) {
15394
- this.parent.showSpinner();
15481
+ if (!isWheel && check && !this[`${preventEvent}`] && !this.parent.enableVirtualMaskRow) {
15482
+ if (Browser.isIE) {
15483
+ this.parent.showSpinner();
15484
+ }
15395
15485
  }
15396
15486
  if (this.parent.enableVirtualMaskRow && !this[`${preventEvent}`]) {
15397
15487
  setTimeout(() => {
@@ -15469,12 +15559,12 @@ class VirtualTreeContentRenderer extends VirtualContentRenderer {
15469
15559
  this.parent.root.scrollPosition = scrollArgs.offset;
15470
15560
  }
15471
15561
  const info = scrollArgs.sentinel;
15562
+ const rowHeight = parseInt(this.parent.getRowHeight().toString(), 10);
15563
+ const outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);
15472
15564
  let treeGridParent = null;
15473
15565
  if (this.parent.clipboardModule && this.parent.clipboardModule['treeGridParent']) {
15474
15566
  treeGridParent = this.parent.clipboardModule['treeGridParent'];
15475
15567
  }
15476
- const rowHeight = parseInt(this.parent.getRowHeight().toString(), 10);
15477
- const outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);
15478
15568
  let content;
15479
15569
  if (!isNullOrUndefined(this.parent.contentModule)) {
15480
15570
  content = this.parent.getContent().querySelector('.e-content');
@@ -15741,6 +15831,9 @@ class VirtualTreeContentRenderer extends VirtualContentRenderer {
15741
15831
  const focusCell = 'focusCell';
15742
15832
  const restoreAdd = 'restoreAdd';
15743
15833
  const ensureSelectedRowPosition = 'ensureSelectedRowPosition';
15834
+ if (this['pressedKey'] === 'downArrow' || this['pressedKey'] === 'upArrow') {
15835
+ this['activeKey'] = this['pressedKey'];
15836
+ }
15744
15837
  super[`${focusCell}`](e);
15745
15838
  const isAdd = 'isAdd';
15746
15839
  if (this[`${isAdd}`] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {