angular-slickgrid 8.14.0 → 9.0.0

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 (419) hide show
  1. package/.gitbook.yaml +5 -0
  2. package/CHANGELOG.md +1691 -0
  3. package/CONTRIBUTING.md +17 -0
  4. package/README.md +13 -50
  5. package/angular.json +133 -0
  6. package/coverage/base.css +224 -0
  7. package/coverage/block-navigation.js +87 -0
  8. package/coverage/clover.xml +1620 -0
  9. package/coverage/coverage-final.json +9 -0
  10. package/coverage/favicon.png +0 -0
  11. package/coverage/index.html +176 -0
  12. package/coverage/library/components/angular-slickgrid.component.ts.html +5074 -0
  13. package/coverage/library/components/index.html +116 -0
  14. package/coverage/library/constants.ts.html +397 -0
  15. package/coverage/library/extensions/index.html +116 -0
  16. package/coverage/library/extensions/slickRowDetailView.ts.html +1261 -0
  17. package/coverage/library/index.html +116 -0
  18. package/coverage/library/modules/angular-slickgrid.module.ts.html +166 -0
  19. package/coverage/library/modules/index.html +116 -0
  20. package/coverage/library/services/angularUtil.service.ts.html +445 -0
  21. package/coverage/library/services/container.service.ts.html +163 -0
  22. package/coverage/library/services/index.html +161 -0
  23. package/coverage/library/services/translater.service.ts.html +199 -0
  24. package/coverage/library/services/utilities.ts.html +142 -0
  25. package/coverage/prettify.css +1 -0
  26. package/coverage/prettify.js +2 -0
  27. package/coverage/sort-arrow-sprite.png +0 -0
  28. package/coverage/sorter.js +196 -0
  29. package/dist/LICENSE +21 -0
  30. package/dist/README.md +142 -0
  31. package/{fesm2022 → dist/fesm2022}/angular-slickgrid.mjs +175 -198
  32. package/dist/fesm2022/angular-slickgrid.mjs.map +1 -0
  33. package/{i18n → dist/i18n}/en.json +2 -1
  34. package/{i18n → dist/i18n}/fr.json +2 -1
  35. package/{app/modules/angular-slickgrid → dist/library}/components/angular-slickgrid.component.d.ts +9 -9
  36. package/{app/modules/angular-slickgrid → dist/library}/extensions/slickRowDetailView.d.ts +4 -4
  37. package/{app/modules/angular-slickgrid → dist/library}/models/angularGridInstance.interface.d.ts +0 -2
  38. package/dist/library/models/index.d.ts +5 -0
  39. package/{app/modules/angular-slickgrid → dist/library}/models/rowDetailView.interface.d.ts +1 -1
  40. package/{app/modules/angular-slickgrid → dist/library}/modules/angular-slickgrid.module.d.ts +1 -1
  41. package/dist/public_api.d.ts +1 -0
  42. package/docs/README.md +5 -0
  43. package/docs/TOC.md +105 -0
  44. package/docs/backend-services/Custom-Backend-Service.md +50 -0
  45. package/docs/backend-services/GraphQL.md +276 -0
  46. package/docs/backend-services/OData.md +245 -0
  47. package/docs/backend-services/graphql/GraphQL-Filtering.md +156 -0
  48. package/docs/backend-services/graphql/GraphQL-JSON-Result.md +85 -0
  49. package/docs/backend-services/graphql/GraphQL-Pagination.md +77 -0
  50. package/docs/backend-services/graphql/GraphQL-Sorting.md +78 -0
  51. package/docs/column-functionalities/cell-menu.md +212 -0
  52. package/docs/column-functionalities/editors/autocomplete-editor.md +466 -0
  53. package/docs/column-functionalities/editors/date-editor-flatpickr.md +71 -0
  54. package/docs/column-functionalities/editors/date-editor-vanilla-calendar.md +91 -0
  55. package/docs/column-functionalities/editors/longtext-editor-textarea.md +80 -0
  56. package/docs/column-functionalities/editors/select-dropdown-editor.md +227 -0
  57. package/docs/column-functionalities/editors.md +604 -0
  58. package/docs/column-functionalities/filters/autocomplete-filter.md +183 -0
  59. package/docs/column-functionalities/filters/compound-filters.md +234 -0
  60. package/docs/column-functionalities/filters/custom-filter.md +117 -0
  61. package/docs/column-functionalities/filters/filter-intro.md +81 -0
  62. package/docs/column-functionalities/filters/input-filter.md +260 -0
  63. package/docs/column-functionalities/filters/range-filters.md +188 -0
  64. package/docs/column-functionalities/filters/select-filter.md +695 -0
  65. package/docs/column-functionalities/filters/single-search-filter.md +77 -0
  66. package/docs/column-functionalities/filters/styling-filled-filters.md +45 -0
  67. package/docs/column-functionalities/formatters.md +325 -0
  68. package/docs/column-functionalities/sorting.md +200 -0
  69. package/docs/developer-guides/csp-compliance.md +64 -0
  70. package/docs/events/Available-Events.md +223 -0
  71. package/docs/events/Grid-&-DataView-Events.md +211 -0
  72. package/docs/getting-started/quick-start.md +230 -0
  73. package/docs/getting-started/troubleshooting.md +80 -0
  74. package/docs/grid-functionalities/Column-Picker.md +22 -0
  75. package/docs/grid-functionalities/Composite-Editor-Modal.md +627 -0
  76. package/docs/grid-functionalities/Context-Menu.md +226 -0
  77. package/docs/grid-functionalities/Custom-Footer.md +80 -0
  78. package/docs/grid-functionalities/Custom-Tooltip-(plugin).md +258 -0
  79. package/docs/grid-functionalities/Export-to-Excel.md +457 -0
  80. package/docs/grid-functionalities/Export-to-Text-File.md +165 -0
  81. package/docs/grid-functionalities/FAQ.md +53 -0
  82. package/docs/grid-functionalities/Global-Options.md +29 -0
  83. package/docs/grid-functionalities/Grid-Auto-Resize.md +218 -0
  84. package/docs/grid-functionalities/Grid-Menu.md +134 -0
  85. package/docs/grid-functionalities/Grid-State-&-Preset.md +245 -0
  86. package/docs/grid-functionalities/Header-Menu-&-Header-Buttons.md +125 -0
  87. package/docs/grid-functionalities/Resize-by-Cell-Content.md +138 -0
  88. package/docs/grid-functionalities/Row-Selection.md +247 -0
  89. package/docs/grid-functionalities/Row-based-edit.md +71 -0
  90. package/docs/grid-functionalities/add-update-highlight.md +258 -0
  91. package/docs/grid-functionalities/column-row-spanning.md +74 -0
  92. package/docs/grid-functionalities/dynamic-item-metadata.md +124 -0
  93. package/docs/grid-functionalities/excel-copy-buffer.md +145 -0
  94. package/docs/grid-functionalities/frozen-columns-rows.md +164 -0
  95. package/docs/grid-functionalities/grouping-and-aggregators.md +269 -0
  96. package/docs/grid-functionalities/header-footer-slots.md +22 -0
  97. package/docs/grid-functionalities/infinite-scroll.md +150 -0
  98. package/docs/grid-functionalities/providing-grid-data.md +61 -0
  99. package/docs/grid-functionalities/row-detail.md +530 -0
  100. package/docs/grid-functionalities/tree-data-grid.md +391 -0
  101. package/docs/localization/Localization---Component-Sample.md +87 -0
  102. package/docs/localization/Localization-with-Custom-Locales.md +66 -0
  103. package/docs/localization/Localization-with-ngx-translate.md +148 -0
  104. package/docs/migrations/migration-to-2.x.md +304 -0
  105. package/docs/migrations/migration-to-3.x.md +295 -0
  106. package/docs/migrations/migration-to-4.x.md +83 -0
  107. package/docs/migrations/migration-to-5.x.md +160 -0
  108. package/docs/migrations/migration-to-6.x.md +128 -0
  109. package/docs/migrations/migration-to-7.x.md +294 -0
  110. package/docs/migrations/migration-to-8.x.md +316 -0
  111. package/docs/migrations/migration-to-9.x.md +219 -0
  112. package/docs/slick-grid-dataview-objects/slickgrid-dataview-objects.md +79 -0
  113. package/docs/styling/dark-mode.md +100 -0
  114. package/docs/styling/styling.md +250 -0
  115. package/docs/testing/testing-patterns.md +73 -0
  116. package/eslint.config.mjs +60 -0
  117. package/ng-package.json +10 -0
  118. package/package.json +24 -48
  119. package/src/assets/angular-logo.png +0 -0
  120. package/src/assets/angular-logo2.png +0 -0
  121. package/src/assets/data/collection_100_numbers.json +12 -0
  122. package/src/assets/data/collection_500_numbers.json +52 -0
  123. package/src/assets/data/countries.json +245 -0
  124. package/src/assets/data/country_names.json +245 -0
  125. package/src/assets/data/customers_100.json +102 -0
  126. package/src/assets/data/users.csv +5 -0
  127. package/src/assets/i18n/en.json +102 -0
  128. package/src/assets/i18n/fr.json +103 -0
  129. package/src/demos/app-routing.module.ts +108 -0
  130. package/src/demos/app.component.html +187 -0
  131. package/src/demos/app.component.scss +79 -0
  132. package/src/demos/app.component.ts +11 -0
  133. package/src/demos/app.module.ts +196 -0
  134. package/src/demos/environments/environment.dev.ts +3 -0
  135. package/src/demos/environments/environment.prod.ts +3 -0
  136. package/src/demos/environments/environment.ts +8 -0
  137. package/src/demos/examples/custom-angularComponentEditor.ts +187 -0
  138. package/src/demos/examples/custom-angularComponentFilter.ts +123 -0
  139. package/src/demos/examples/custom-buttonFormatter.component.ts +13 -0
  140. package/src/demos/examples/custom-inputEditor.ts +132 -0
  141. package/src/demos/examples/custom-inputFilter.ts +134 -0
  142. package/src/demos/examples/custom-titleFormatter.component.ts +9 -0
  143. package/src/demos/examples/data/collection_100_numbers.json +12 -0
  144. package/src/demos/examples/data/collection_500_numbers.json +52 -0
  145. package/src/demos/examples/data/countries.json +245 -0
  146. package/src/demos/examples/data/country_names.json +245 -0
  147. package/src/demos/examples/data/customers_100.json +102 -0
  148. package/src/demos/examples/data/users.csv +5 -0
  149. package/src/demos/examples/editor-ng-select.component.ts +38 -0
  150. package/src/demos/examples/example01.component.html +48 -0
  151. package/src/demos/examples/example01.component.ts +109 -0
  152. package/src/demos/examples/example02.component.html +45 -0
  153. package/src/demos/examples/example02.component.ts +218 -0
  154. package/src/demos/examples/example03.component.html +118 -0
  155. package/src/demos/examples/example03.component.ts +694 -0
  156. package/src/demos/examples/example04.component.html +87 -0
  157. package/src/demos/examples/example04.component.ts +326 -0
  158. package/src/demos/examples/example05.component.html +151 -0
  159. package/src/demos/examples/example05.component.ts +474 -0
  160. package/src/demos/examples/example06.component.html +163 -0
  161. package/src/demos/examples/example06.component.ts +446 -0
  162. package/src/demos/examples/example07.component.html +56 -0
  163. package/src/demos/examples/example07.component.scss +10 -0
  164. package/src/demos/examples/example07.component.ts +216 -0
  165. package/src/demos/examples/example08.component.html +51 -0
  166. package/src/demos/examples/example08.component.scss +23 -0
  167. package/src/demos/examples/example08.component.ts +195 -0
  168. package/src/demos/examples/example09.component.html +55 -0
  169. package/src/demos/examples/example09.component.scss +22 -0
  170. package/src/demos/examples/example09.component.ts +302 -0
  171. package/src/demos/examples/example10.component.html +103 -0
  172. package/src/demos/examples/example10.component.ts +309 -0
  173. package/src/demos/examples/example11.component.html +91 -0
  174. package/src/demos/examples/example11.component.ts +276 -0
  175. package/src/demos/examples/example12.component.html +98 -0
  176. package/src/demos/examples/example12.component.ts +317 -0
  177. package/src/demos/examples/example13.component.html +96 -0
  178. package/src/demos/examples/example13.component.ts +370 -0
  179. package/src/demos/examples/example14.component.html +50 -0
  180. package/src/demos/examples/example14.component.scss +11 -0
  181. package/src/demos/examples/example14.component.ts +156 -0
  182. package/src/demos/examples/example15.component.html +56 -0
  183. package/src/demos/examples/example15.component.ts +304 -0
  184. package/src/demos/examples/example16.component.html +77 -0
  185. package/src/demos/examples/example16.component.ts +277 -0
  186. package/src/demos/examples/example17.component.html +50 -0
  187. package/src/demos/examples/example17.component.ts +109 -0
  188. package/src/demos/examples/example18.component.html +132 -0
  189. package/src/demos/examples/example18.component.ts +445 -0
  190. package/src/demos/examples/example19-rowdetail.component.html +40 -0
  191. package/src/demos/examples/example19-rowdetail.component.ts +54 -0
  192. package/src/demos/examples/example19.component.html +79 -0
  193. package/src/demos/examples/example19.component.ts +316 -0
  194. package/src/demos/examples/example20.component.html +76 -0
  195. package/src/demos/examples/example20.component.scss +11 -0
  196. package/src/demos/examples/example20.component.ts +341 -0
  197. package/src/demos/examples/example21.component.html +86 -0
  198. package/src/demos/examples/example21.component.scss +16 -0
  199. package/src/demos/examples/example21.component.ts +140 -0
  200. package/src/demos/examples/example22.component.html +41 -0
  201. package/src/demos/examples/example22.component.ts +117 -0
  202. package/src/demos/examples/example23.component.html +111 -0
  203. package/src/demos/examples/example23.component.ts +323 -0
  204. package/src/demos/examples/example24.component.html +120 -0
  205. package/src/demos/examples/example24.component.scss +62 -0
  206. package/src/demos/examples/example24.component.ts +641 -0
  207. package/src/demos/examples/example25.component.html +60 -0
  208. package/src/demos/examples/example25.component.scss +8 -0
  209. package/src/demos/examples/example25.component.ts +255 -0
  210. package/src/demos/examples/example26.component.html +98 -0
  211. package/src/demos/examples/example26.component.scss +42 -0
  212. package/src/demos/examples/example26.component.ts +383 -0
  213. package/src/demos/examples/example27.component.html +138 -0
  214. package/src/demos/examples/example27.component.scss +10 -0
  215. package/src/demos/examples/example27.component.ts +369 -0
  216. package/src/demos/examples/example28.component.html +143 -0
  217. package/src/demos/examples/example28.component.scss +54 -0
  218. package/src/demos/examples/example28.component.ts +453 -0
  219. package/src/demos/examples/example29.component.html +30 -0
  220. package/src/demos/examples/example29.component.ts +70 -0
  221. package/src/demos/examples/example30.component.html +116 -0
  222. package/src/demos/examples/example30.component.scss +20 -0
  223. package/src/demos/examples/example30.component.ts +1070 -0
  224. package/src/demos/examples/example32.component.html +77 -0
  225. package/src/demos/examples/example32.component.scss +8 -0
  226. package/src/demos/examples/example32.component.ts +905 -0
  227. package/src/demos/examples/example33.component.html +50 -0
  228. package/src/demos/examples/example33.component.scss +46 -0
  229. package/src/demos/examples/example33.component.ts +571 -0
  230. package/src/demos/examples/example34.component.html +82 -0
  231. package/src/demos/examples/example34.component.scss +77 -0
  232. package/src/demos/examples/example34.component.ts +434 -0
  233. package/src/demos/examples/example35.component.html +77 -0
  234. package/src/demos/examples/example35.component.scss +18 -0
  235. package/src/demos/examples/example35.component.ts +264 -0
  236. package/src/demos/examples/example36.component.html +56 -0
  237. package/src/demos/examples/example36.component.scss +26 -0
  238. package/src/demos/examples/example36.component.ts +504 -0
  239. package/src/demos/examples/example37.component.html +30 -0
  240. package/src/demos/examples/example37.component.ts +123 -0
  241. package/src/demos/examples/example38.component.html +104 -0
  242. package/src/demos/examples/example38.component.scss +8 -0
  243. package/src/demos/examples/example38.component.ts +420 -0
  244. package/src/demos/examples/example39.component.html +112 -0
  245. package/src/demos/examples/example39.component.scss +8 -0
  246. package/src/demos/examples/example39.component.ts +371 -0
  247. package/src/demos/examples/example40.component.html +76 -0
  248. package/src/demos/examples/example40.component.ts +226 -0
  249. package/src/demos/examples/example41.component.html +50 -0
  250. package/src/demos/examples/example41.component.scss +42 -0
  251. package/src/demos/examples/example41.component.ts +229 -0
  252. package/src/demos/examples/example42.component.html +47 -0
  253. package/src/demos/examples/example42.component.ts +203 -0
  254. package/src/demos/examples/example43.component.html +94 -0
  255. package/src/demos/examples/example43.component.scss +30 -0
  256. package/src/demos/examples/example43.component.ts +449 -0
  257. package/src/demos/examples/example44.component.html +78 -0
  258. package/src/demos/examples/example44.component.scss +50 -0
  259. package/src/demos/examples/example44.component.ts +375 -0
  260. package/src/demos/examples/example45-detail.component.html +15 -0
  261. package/src/demos/examples/example45-detail.component.ts +97 -0
  262. package/src/demos/examples/example45.component.html +110 -0
  263. package/src/demos/examples/example45.component.scss +50 -0
  264. package/src/demos/examples/example45.component.ts +243 -0
  265. package/src/demos/examples/filter-ng-select.component.ts +33 -0
  266. package/src/demos/examples/grid-custom-pager.component.html +60 -0
  267. package/src/demos/examples/grid-custom-pager.component.scss +57 -0
  268. package/src/demos/examples/grid-custom-pager.component.ts +107 -0
  269. package/src/demos/examples/grid-remote.component.html +44 -0
  270. package/src/demos/examples/grid-remote.component.ts +164 -0
  271. package/src/demos/examples/home.component.html +39 -0
  272. package/src/demos/examples/home.component.ts +10 -0
  273. package/src/demos/examples/jsonp.ts +89 -0
  274. package/src/demos/examples/rowdetail-preload.component.ts +10 -0
  275. package/src/demos/examples/swt-common-grid-pagination.component.ts +160 -0
  276. package/src/demos/examples/swt-common-grid-test.component.html +37 -0
  277. package/src/demos/examples/swt-common-grid-test.component.ts +214 -0
  278. package/src/demos/examples/swt-common-grid.component.ts +436 -0
  279. package/src/demos/examples/swt-logger.service.ts +173 -0
  280. package/src/demos/examples/utilities.ts +9 -0
  281. package/src/favicon.ico +0 -0
  282. package/src/index.html +17 -0
  283. package/src/library/components/__tests__/angular-slickgrid.component.spec.ts +2638 -0
  284. package/src/library/components/angular-slickgrid.component.html +5 -0
  285. package/src/library/components/angular-slickgrid.component.ts +1662 -0
  286. package/src/library/constants.ts +105 -0
  287. package/src/library/extensions/__tests__/slickRowDetailView.spec.ts +751 -0
  288. package/src/library/extensions/index.ts +1 -0
  289. package/src/library/extensions/slickRowDetailView.ts +395 -0
  290. package/src/library/global-grid-options.ts +273 -0
  291. package/src/library/index.ts +11 -0
  292. package/src/library/models/angularComponentOutput.interface.ts +6 -0
  293. package/src/library/models/angularGridInstance.interface.ts +76 -0
  294. package/src/library/models/externalTestingDependencies.interface.ts +37 -0
  295. package/src/library/models/gridOption.interface.ts +15 -0
  296. package/src/library/models/index.ts +5 -0
  297. package/src/library/models/rowDetailView.interface.ts +16 -0
  298. package/src/library/modules/angular-slickgrid.module.spec.ts +25 -0
  299. package/src/library/modules/angular-slickgrid.module.ts +27 -0
  300. package/src/library/services/__tests__/angularUtilService.spec.ts +156 -0
  301. package/src/library/services/__tests__/container.service.spec.ts +25 -0
  302. package/src/library/services/__tests__/translater.service.spec.ts +43 -0
  303. package/src/library/services/__tests__/utilities.spec.ts +22 -0
  304. package/src/library/services/angularUtil.service.ts +120 -0
  305. package/src/library/services/container.service.ts +26 -0
  306. package/src/library/services/index.ts +4 -0
  307. package/src/library/services/translater.service.ts +38 -0
  308. package/src/library/services/utilities.ts +19 -0
  309. package/src/library/slickgrid-config.ts +10 -0
  310. package/src/main.ts +13 -0
  311. package/src/public_api.ts +1 -0
  312. package/src/styles.scss +178 -0
  313. package/test/cypress/e2e/example01.cy.ts +367 -0
  314. package/test/cypress/e2e/example02.cy.ts +60 -0
  315. package/test/cypress/e2e/example03.cy.ts +268 -0
  316. package/test/cypress/e2e/example04.cy.ts +254 -0
  317. package/test/cypress/e2e/example05.cy.ts +804 -0
  318. package/test/cypress/e2e/example06.cy.ts +890 -0
  319. package/test/cypress/e2e/example07.cy.ts +384 -0
  320. package/test/cypress/e2e/example08.cy.ts +190 -0
  321. package/test/cypress/e2e/example09.cy.ts +392 -0
  322. package/test/cypress/e2e/example10.cy.ts +650 -0
  323. package/test/cypress/e2e/example11.cy.ts +86 -0
  324. package/test/cypress/e2e/example12.cy.ts +269 -0
  325. package/test/cypress/e2e/example13.cy.ts +246 -0
  326. package/test/cypress/e2e/example14.cy.ts +122 -0
  327. package/test/cypress/e2e/example15.cy.ts +598 -0
  328. package/test/cypress/e2e/example16.cy.ts +427 -0
  329. package/test/cypress/e2e/example17.cy.ts +83 -0
  330. package/test/cypress/e2e/example18.cy.ts +431 -0
  331. package/test/cypress/e2e/example19.cy.ts +263 -0
  332. package/test/cypress/e2e/example20.cy.ts +264 -0
  333. package/test/cypress/e2e/example21.cy.ts +77 -0
  334. package/test/cypress/e2e/example22.cy.ts +94 -0
  335. package/test/cypress/e2e/example23.cy.ts +259 -0
  336. package/test/cypress/e2e/example24.cy.ts +707 -0
  337. package/test/cypress/e2e/example25.cy.ts +193 -0
  338. package/test/cypress/e2e/example26.cy.ts +111 -0
  339. package/test/cypress/e2e/example27.cy.ts +261 -0
  340. package/test/cypress/e2e/example28.cy.ts +740 -0
  341. package/test/cypress/e2e/example29.cy.ts +30 -0
  342. package/test/cypress/e2e/example30.cy.ts +757 -0
  343. package/test/cypress/e2e/example31.cy.ts +69 -0
  344. package/test/cypress/e2e/example32.cy.ts +272 -0
  345. package/test/cypress/e2e/example33.cy.ts +278 -0
  346. package/test/cypress/e2e/example34.cy.ts +84 -0
  347. package/test/cypress/e2e/example35.cy.ts +178 -0
  348. package/test/cypress/e2e/example36.cy.ts +219 -0
  349. package/test/cypress/e2e/example37.cy.ts +52 -0
  350. package/test/cypress/e2e/example38.cy.ts +160 -0
  351. package/test/cypress/e2e/example39.cy.ts +150 -0
  352. package/test/cypress/e2e/example40.cy.ts +126 -0
  353. package/test/cypress/e2e/example41.cy.ts +90 -0
  354. package/test/cypress/e2e/example42.cy.ts +82 -0
  355. package/test/cypress/e2e/example43.cy.ts +482 -0
  356. package/test/cypress/e2e/example44.cy.ts +458 -0
  357. package/test/cypress/e2e/example45.cy.ts +455 -0
  358. package/test/cypress/e2e/home.cy.ts +7 -0
  359. package/test/cypress/fixtures/example.json +5 -0
  360. package/test/cypress/plugins/index.ts +17 -0
  361. package/test/cypress/plugins/utilities.ts +28 -0
  362. package/test/cypress/support/commands.ts +88 -0
  363. package/test/cypress/support/common.ts +47 -0
  364. package/test/cypress/support/drag.ts +101 -0
  365. package/test/cypress/support/index.ts +20 -0
  366. package/test/cypress/tsconfig.json +9 -0
  367. package/test/cypress.config.ts +34 -0
  368. package/test/mockSlickEvent.ts +77 -0
  369. package/test/rxjsResourceStub.ts +69 -0
  370. package/test/test-setup.ts +6 -0
  371. package/test/translateServiceStub.ts +230 -0
  372. package/test/translaterServiceStub.ts +239 -0
  373. package/test/tsconfig.json +17 -0
  374. package/test/vitest-global-mocks.ts +41 -0
  375. package/test/vitest-global-setup.ts +3 -0
  376. package/test/vitest-pretest.ts +5 -0
  377. package/tsconfig.app.json +14 -0
  378. package/tsconfig.json +31 -0
  379. package/tsconfig.spec.json +11 -0
  380. package/types/sortablejs.d.ts +4 -0
  381. package/vite.config.mts +51 -0
  382. package/app/modules/angular-slickgrid/models/index.d.ts +0 -5
  383. package/esm2022/angular-slickgrid.mjs +0 -5
  384. package/esm2022/app/modules/angular-slickgrid/components/angular-slickgrid.component.mjs +0 -1407
  385. package/esm2022/app/modules/angular-slickgrid/constants.mjs +0 -96
  386. package/esm2022/app/modules/angular-slickgrid/extensions/index.mjs +0 -2
  387. package/esm2022/app/modules/angular-slickgrid/extensions/slickRowDetailView.mjs +0 -301
  388. package/esm2022/app/modules/angular-slickgrid/global-grid-options.mjs +0 -263
  389. package/esm2022/app/modules/angular-slickgrid/index.mjs +0 -8
  390. package/esm2022/app/modules/angular-slickgrid/models/angularComponentOutput.interface.mjs +0 -2
  391. package/esm2022/app/modules/angular-slickgrid/models/angularGridInstance.interface.mjs +0 -2
  392. package/esm2022/app/modules/angular-slickgrid/models/externalTestingDependencies.interface.mjs +0 -2
  393. package/esm2022/app/modules/angular-slickgrid/models/gridOption.interface.mjs +0 -2
  394. package/esm2022/app/modules/angular-slickgrid/models/index.mjs +0 -6
  395. package/esm2022/app/modules/angular-slickgrid/models/rowDetailView.interface.mjs +0 -2
  396. package/esm2022/app/modules/angular-slickgrid/modules/angular-slickgrid.module.mjs +0 -32
  397. package/esm2022/app/modules/angular-slickgrid/services/angularUtil.service.mjs +0 -88
  398. package/esm2022/app/modules/angular-slickgrid/services/container.service.mjs +0 -27
  399. package/esm2022/app/modules/angular-slickgrid/services/index.mjs +0 -5
  400. package/esm2022/app/modules/angular-slickgrid/services/translater.service.mjs +0 -45
  401. package/esm2022/app/modules/angular-slickgrid/services/utilities.mjs +0 -19
  402. package/esm2022/app/modules/angular-slickgrid/slickgrid-config.mjs +0 -8
  403. package/esm2022/public_api.mjs +0 -2
  404. package/fesm2022/angular-slickgrid.mjs.map +0 -1
  405. package/public_api.d.ts +0 -1
  406. /package/{index.d.ts → dist/index.d.ts} +0 -0
  407. /package/{app/modules/angular-slickgrid → dist/library}/constants.d.ts +0 -0
  408. /package/{app/modules/angular-slickgrid → dist/library}/extensions/index.d.ts +0 -0
  409. /package/{app/modules/angular-slickgrid → dist/library}/global-grid-options.d.ts +0 -0
  410. /package/{app/modules/angular-slickgrid → dist/library}/index.d.ts +0 -0
  411. /package/{app/modules/angular-slickgrid → dist/library}/models/angularComponentOutput.interface.d.ts +0 -0
  412. /package/{app/modules/angular-slickgrid → dist/library}/models/externalTestingDependencies.interface.d.ts +0 -0
  413. /package/{app/modules/angular-slickgrid → dist/library}/models/gridOption.interface.d.ts +0 -0
  414. /package/{app/modules/angular-slickgrid → dist/library}/services/angularUtil.service.d.ts +0 -0
  415. /package/{app/modules/angular-slickgrid → dist/library}/services/container.service.d.ts +0 -0
  416. /package/{app/modules/angular-slickgrid → dist/library}/services/index.d.ts +0 -0
  417. /package/{app/modules/angular-slickgrid → dist/library}/services/translater.service.d.ts +0 -0
  418. /package/{app/modules/angular-slickgrid → dist/library}/services/utilities.d.ts +0 -0
  419. /package/{app/modules/angular-slickgrid → dist/library}/slickgrid-config.d.ts +0 -0
@@ -0,0 +1,650 @@
1
+ describe('Example 10 - Multiple Grids with Row Selection', () => {
2
+ const titles = ['', 'Title', 'Duration (days)', '% Complete', 'Start', 'Finish', 'Effort Driven'];
3
+
4
+ beforeEach(() => {
5
+ // create a console.log spy for later use
6
+ cy.window().then((win) => {
7
+ cy.spy(win.console, 'log');
8
+ });
9
+ });
10
+
11
+ it('should display Example title', () => {
12
+ cy.visit(`${Cypress.config('baseUrl')}/example10`);
13
+ cy.get('h2').should('contain', 'Example 10: Multiple Grids with Row Selection');
14
+ });
15
+
16
+ it('should have 2 grids of width of 800px and different height', () => {
17
+ cy.get('#slickGridContainer-grid1').as('grid1');
18
+ cy.get('@grid1').should('have.css', 'width', '800px');
19
+
20
+ cy.get('@grid1')
21
+ .find('.slickgrid-container')
22
+ .should(($el) => expect(parseInt(`${$el.height()}`, 10)).to.eq(225));
23
+
24
+ cy.get('#slickGridContainer-grid2').as('grid2');
25
+ cy.get('@grid2').should('have.css', 'width', '800px');
26
+
27
+ cy.get('@grid2')
28
+ .find('.slickgrid-container')
29
+ .should(($el) => expect(parseInt(`${$el.height()}`, 10)).to.eq(255));
30
+ });
31
+
32
+ it('should have exact Titles on 1st grid', () => {
33
+ cy.get('#slickGridContainer-grid1')
34
+ .find('.slick-header-columns')
35
+ .children()
36
+ .each(($child, index) => {
37
+ expect($child.text()).to.eq(titles[index]);
38
+ });
39
+ });
40
+
41
+ it('should have 1 rows (Task 3) pre-selected in 2nd grid on its first page but 5 rows selected in the entire dataset', () => {
42
+ cy.get('[data-test=grid2-selections]').should('contain', 'Task 3,Task 12,Task 13,Task 522');
43
+
44
+ cy.get('#grid2').find('.slick-row').children().filter('.slick-cell-checkboxsel.selected').should('have.length', 1);
45
+ });
46
+
47
+ it('should have 2 rows (Task 12,Task 13) selected in 2nd grid after typing in a search filter', () => {
48
+ cy.get('#grid2').find('.filter-title').type('Task 1');
49
+
50
+ cy.get('#grid2').find('.slick-row').should('not.have.length', 0);
51
+
52
+ cy.get('[data-test=grid2-selections]').should('contain', '');
53
+
54
+ cy.get('#grid2').find('.slick-row').children().filter('.slick-cell-checkboxsel.selected').should('have.length', 2);
55
+ });
56
+
57
+ it('should make sure that first column is hidden from the Grid Menu (1st column definition has "excludeFromGridMenu" set) on 1st grid', () => {
58
+ cy.get('#grid1').find('button.slick-grid-menu-button').trigger('click').click();
59
+
60
+ cy.get('.slick-grid-menu')
61
+ .find('.slick-column-picker-list')
62
+ .children()
63
+ .each(($child, index) => {
64
+ if (index === 0) {
65
+ expect($child[0].className).to.eq('hidden');
66
+ expect($child[0].offsetHeight).to.eq(0);
67
+ expect($child[0].offsetWidth).to.eq(0);
68
+ }
69
+ expect($child.text()).to.eq(titles[index]);
70
+ });
71
+ });
72
+
73
+ it('should hide Title from the Grid Menu and expect 1 less column in the 1st grid', () => {
74
+ const newTitleList = ['', 'Duration (days)', '% Complete', 'Start', 'Finish', 'Effort Driven'];
75
+
76
+ cy.get('#grid1')
77
+ .get('.slick-grid-menu:visible')
78
+ .find('.slick-column-picker-list')
79
+ .children('li:nth-child(2)')
80
+ .children('label')
81
+ .should('contain', 'Title')
82
+ .click();
83
+
84
+ cy.get('#grid1')
85
+ .find('.slick-header-columns')
86
+ .children()
87
+ .each(($child, index) => {
88
+ expect($child.text()).to.eq(newTitleList[index]);
89
+ });
90
+
91
+ cy.get('#grid1').get('.slick-grid-menu:visible').find('.close').trigger('click').click();
92
+ });
93
+
94
+ it('should show the Title column again from the Column Picker in the 1st grid', () => {
95
+ cy.get('#grid1').find('.slick-header-column').first().trigger('mouseover').trigger('contextmenu').invoke('show');
96
+
97
+ cy.get('.slick-column-picker')
98
+ .find('.slick-column-picker-list')
99
+ .children()
100
+ .each(($child, index) => {
101
+ if (index === 0) {
102
+ expect($child[0].className).to.eq('hidden');
103
+ expect($child[0].offsetHeight).to.eq(0);
104
+ expect($child[0].offsetWidth).to.eq(0);
105
+ }
106
+ expect($child.text()).to.eq(titles[index]);
107
+ });
108
+
109
+ cy.get('.slick-column-picker')
110
+ .find('.slick-column-picker-list')
111
+ .children('li:nth-child(2)')
112
+ .children('label')
113
+ .should('contain', 'Title')
114
+ .click();
115
+
116
+ cy.get('#grid1')
117
+ .find('.slick-header-columns')
118
+ .children()
119
+ .each(($child, index) => {
120
+ expect($child.text()).to.eq(titles[index]);
121
+ });
122
+
123
+ cy.get('#grid1').get('.slick-column-picker:visible').find('.close').trigger('click').click();
124
+ });
125
+
126
+ describe('Pagination', () => {
127
+ it('should Clear all Filters on 2nd Grid', () => {
128
+ cy.get('#grid2').find('button.slick-grid-menu-button').trigger('click').click();
129
+
130
+ cy.get(`.slick-grid-menu:visible`).find('.slick-menu-item').first().find('span').contains('Clear all Filters').click();
131
+ });
132
+
133
+ it('should have Pagination displayed and set on Grid1 and Grid2', () => {
134
+ cy.get('#slickGridContainer-grid1').as('grid1');
135
+ cy.get('#slickGridContainer-grid2').as('grid2');
136
+
137
+ // 1st Grid
138
+ cy.get('@grid1')
139
+ .find('[data-test=page-number-input]')
140
+ .invoke('val')
141
+ .then((pageNumber) => expect(pageNumber).to.eq('2'));
142
+
143
+ cy.get('@grid1').find('[data-test=page-count]').contains('99');
144
+
145
+ cy.get('@grid1').find('[data-test=item-from]').contains('6');
146
+
147
+ cy.get('@grid1').find('[data-test=item-to]').contains('10');
148
+
149
+ cy.get('@grid1').find('[data-test=total-items]').contains('495');
150
+
151
+ // 2nd Grid
152
+ cy.get('@grid2').find('[data-test=page-count]').contains('105');
153
+
154
+ cy.get('@grid2').find('[data-test=item-from]').contains('1');
155
+
156
+ cy.get('@grid2').find('[data-test=item-to]').contains('5');
157
+
158
+ cy.get('@grid2').find('[data-test=total-items]').contains('525');
159
+ });
160
+
161
+ it('should change Page Number in Grid1 and expect the Pagination to have correct values', () => {
162
+ cy.get('#slickGridContainer-grid1').as('grid1');
163
+
164
+ cy.get('@grid1').find('[data-test=page-number-input]').clear().type('52').type('{enter}');
165
+
166
+ cy.get('@grid1').find('[data-test=page-count]').contains('99');
167
+
168
+ cy.get('@grid1').find('[data-test=item-from]').contains('256');
169
+
170
+ cy.get('@grid1').find('[data-test=item-to]').contains('260');
171
+
172
+ cy.get('@grid1').find('[data-test=total-items]').contains('495');
173
+ });
174
+
175
+ it('should change Page Number and Page Size in Grid2 and expect the Pagination to have correct values', () => {
176
+ cy.get('#slickGridContainer-grid2').as('grid2');
177
+
178
+ cy.get('@grid2').find('[data-test=page-number-input]').clear().type('34').type('{enter}');
179
+
180
+ cy.get('@grid2').find('[data-test=page-count]').contains('105');
181
+
182
+ cy.get('@grid2').find('[data-test=item-from]').contains('166');
183
+
184
+ cy.get('@grid2').find('[data-test=item-to]').contains('170');
185
+
186
+ cy.get('@grid2').find('[data-test=total-items]').contains('525');
187
+
188
+ cy.get('@grid2').find('#items-per-page-label').select('75');
189
+
190
+ cy.get('@grid2').find('[data-test=page-count]').contains('7');
191
+
192
+ cy.get('@grid2').find('[data-test=item-from]').contains('1');
193
+
194
+ cy.get('@grid2').find('[data-test=item-to]').contains('75');
195
+ });
196
+
197
+ it('should go back to Grid1 and expect the same value before changing Pagination of Grid2', () => {
198
+ cy.get('#slickGridContainer-grid1').as('grid1');
199
+
200
+ cy.get('@grid1').find('[data-test=page-count]').contains('99');
201
+
202
+ cy.get('@grid1').find('[data-test=item-from]').contains('256');
203
+
204
+ cy.get('@grid1').find('[data-test=item-to]').contains('260');
205
+
206
+ cy.get('@grid1').find('[data-test=total-items]').contains('495');
207
+ });
208
+
209
+ it('should display page 0 of 0 with 0 items when applied filter returning an empty dataset', () => {
210
+ cy.get('#slickGridContainer-grid1').as('grid1');
211
+
212
+ cy.get('@grid1').find('.filter-title').type('000');
213
+
214
+ cy.get('.slick-empty-data-warning:visible').contains('No data to display.');
215
+
216
+ cy.get('@grid1').find('[data-test=page-count]').contains('0');
217
+
218
+ cy.get('@grid1').find('[data-test=item-from]').should('not.be.visible');
219
+
220
+ cy.get('@grid1').find('[data-test=item-to]').should('not.be.visible');
221
+
222
+ cy.get('@grid1').find('[data-test=total-items]').contains('0');
223
+ });
224
+
225
+ it('should erase part of the filter to have "00" and expect 4 items in total with 1 page', () => {
226
+ cy.get('#slickGridContainer-grid1').as('grid1');
227
+
228
+ cy.get('@grid1').find('.filter-title').type('{backspace}');
229
+
230
+ cy.get('.slick-empty-data-warning').contains('No data to display.').should('not.be.visible');
231
+
232
+ cy.get('@grid1').find('[data-test=page-count]').contains('1');
233
+
234
+ cy.get('@grid1').find('[data-test=item-from]').contains('1');
235
+
236
+ cy.get('@grid1').find('[data-test=item-to]').contains('4');
237
+
238
+ cy.get('@grid1').find('[data-test=total-items]').contains('4');
239
+ });
240
+
241
+ it('should also expect Grid2 to be unchanged (after changing Pagination in Grid1 in previous tests)', () => {
242
+ cy.get('#slickGridContainer-grid2').as('grid2');
243
+
244
+ cy.get('@grid2').find('[data-test=page-count]').contains('7');
245
+
246
+ cy.get('@grid2').find('[data-test=item-from]').contains('1');
247
+
248
+ cy.get('@grid2').find('[data-test=item-to]').contains('75');
249
+
250
+ cy.get('@grid2').find('[data-test=total-items]').contains('525');
251
+ });
252
+
253
+ it('should have 4 rows (Task 3,Task 12,Task 13,Task 522) selected in the entire 2nd grid BUT only 1 selected in current Page 1', () => {
254
+ cy.get('#slickGridContainer-grid2').as('grid2');
255
+
256
+ cy.get('[data-test=grid2-selections]').should('contain', 'Task 3,Task 12,Task 13,Task 522');
257
+
258
+ cy.get('@grid2')
259
+ .find('[data-test=page-number-input]')
260
+ .invoke('val')
261
+ .then((pageNumber) => expect(pageNumber).to.eq('1'));
262
+
263
+ cy.get('#grid2').find('.slick-row').children().filter('.slick-cell-checkboxsel.selected').should('have.length', 1);
264
+ });
265
+
266
+ it('should go to Page 3 of 2nd Grid and have 2 rows selected in that Page and also have 4 rows selected in the entire grid (Task 3,Task 12,Task 13,Task 522)', () => {
267
+ cy.get('#slickGridContainer-grid2').as('grid2');
268
+
269
+ cy.get('[data-test=grid2-selections]').should('contain', 'Task 3,Task 12,Task 13,Task 522');
270
+
271
+ cy.get('@grid2').find('#items-per-page-label').select('5');
272
+
273
+ cy.get('@grid2').find('[data-test=page-number-input]').clear().type('3').type('{enter}');
274
+
275
+ cy.get('@grid2').find('.slick-row').children().filter('.slick-cell-checkboxsel.selected').should('have.length', 2);
276
+ });
277
+
278
+ it('should go to last Page of 2nd Grid and have 1 rows selected in that Page and also have 4 rows selected in the entire grid (Task 3,Task 12,Task 13,Task 522)', () => {
279
+ cy.get('#slickGridContainer-grid2').as('grid2');
280
+
281
+ cy.get('@grid2').find('.icon-seek-end').click();
282
+
283
+ cy.get('[data-test=grid2-selections]').should('contain', 'Task 3,Task 12,Task 13,Task 522');
284
+
285
+ cy.get('@grid2').find('.slick-row').children().filter('.slick-cell-checkboxsel.selected').should('have.length', 1);
286
+ });
287
+
288
+ it(`should go to first Page of 2nd Grid and select another row (Task 1) in that Page, wich will now be (Task1,Task3) and now have 5 rows selected in the entire grid (Task 1,Task 3,Task 12,Task 13,Task 522)`, () => {
289
+ cy.get('#slickGridContainer-grid2').as('grid2');
290
+
291
+ cy.get('@grid2').find('.icon-seek-first').click().wait(10);
292
+
293
+ cy.get('@grid2').find('.slick-row:nth(1) .slick-cell:nth(0) input[type=checkbox]').click({ force: true });
294
+
295
+ cy.get('[data-test=grid2-selections]').should('contain', 'Task 1,Task 3,Task 12,Task 13,Task 522');
296
+
297
+ cy.get('@grid2').find('.slick-row').children().filter('.slick-cell-checkboxsel.selected').should('have.length', 2);
298
+
299
+ cy.window().then((win) => {
300
+ expect(win.console.log).to.have.callCount(6);
301
+ // going to 1st page
302
+ expect(win.console.log).to.be.calledWith('Grid State changed:: ', {
303
+ newValues: { gridRowIndexes: [3], dataContextIds: [12, 13, 3, 522], filteredDataContextIds: [3, 12, 13, 522] },
304
+ type: 'rowSelection',
305
+ });
306
+ // after selecting 1st row
307
+ expect(win.console.log).to.be.calledWith('Grid State changed:: ', {
308
+ newValues: { gridRowIndexes: [1, 3], dataContextIds: [1, 12, 13, 3, 522], filteredDataContextIds: [1, 3, 12, 13, 522] },
309
+ type: 'rowSelection',
310
+ });
311
+ });
312
+ });
313
+
314
+ it('should go back to Page 3 of 2nd Grid and have 2 rows selected in that Page and also retain 5 selected rows in the entire grid (Task 1,Task 3,Task 12,Task 13,Task 522)', () => {
315
+ cy.get('#slickGridContainer-grid2').as('grid2');
316
+
317
+ cy.get('[data-test=grid2-selections]').should('contain', 'Task 1,Task 3,Task 12,Task 13,Task 522');
318
+
319
+ cy.get('@grid2').find('#items-per-page-label').select('5');
320
+
321
+ cy.get('@grid2').find('[data-test=page-number-input]').clear().type('3').type('{enter}');
322
+
323
+ cy.get('@grid2').find('.slick-row').children().filter('.slick-cell-checkboxsel.selected').should('have.length', 2);
324
+ });
325
+
326
+ it('should go to last Page of 2nd Grid and still have 1 row selected in that Page and also retain 5 selected rows in the entire grid (Task 1,Task 3,Task 12,Task 13,Task 522)', () => {
327
+ cy.get('#slickGridContainer-grid2').as('grid2');
328
+
329
+ cy.get('@grid2').find('.icon-seek-end').click();
330
+
331
+ cy.get('[data-test=grid2-selections]').should('contain', 'Task 1,Task 3,Task 12,Task 13,Task 522');
332
+
333
+ cy.get('@grid2').find('.slick-row').children().filter('.slick-cell-checkboxsel.selected').should('have.length', 1);
334
+ });
335
+ });
336
+
337
+ describe('Row Selection', () => {
338
+ it('should click on 3rd row and of the Grid1 and expect to see "Task 300" selected', () => {
339
+ cy.get('#slickGridContainer-grid1').as('grid1');
340
+
341
+ cy.get('@grid1');
342
+ cy.get('.slick-row:nth(2) .slick-cell:nth(0) input[type=checkbox]').click({ force: true });
343
+
344
+ cy.get('[data-test=grid1-selections]').contains('Task 300');
345
+
346
+ cy.window().then((win) => {
347
+ expect(win.console.log).to.have.callCount(2);
348
+ expect(win.console.log).to.be.calledWith('Grid State changed:: ', {
349
+ newValues: { gridRowIndexes: [2], dataContextIds: [300], filteredDataContextIds: [300] },
350
+ type: 'rowSelection',
351
+ });
352
+ });
353
+ });
354
+
355
+ it('should remove the filter from Grid1', () => {
356
+ cy.get('#slickGridContainer-grid1').as('grid1');
357
+
358
+ cy.get('@grid1')
359
+ .find('.filter-title')
360
+ .type('{backspace}{backspace}')
361
+ .invoke('text')
362
+ .then((text) => {
363
+ expect(text.trim()).to.eq('');
364
+ });
365
+ });
366
+
367
+ it('should go to Page 61 of Grid1 and expect to find "Task 300" still be selected', () => {
368
+ cy.get('#slickGridContainer-grid1').as('grid1');
369
+
370
+ cy.get('@grid1').find('[data-test=page-number-input]').clear().type('61').type('{enter}');
371
+
372
+ cy.get('[data-test=grid1-selections]').contains('Task 300');
373
+
374
+ cy.get('.slick-cell.l0.r0.slick-cell-checkboxsel.selected').should('exist');
375
+
376
+ cy.get('[data-test=grid1-selections]').contains('Task 300');
377
+ });
378
+
379
+ it('should go to a different page for next test to confirm that it will then go to page 1', () => {
380
+ cy.get('#slickGridContainer-grid2').as('grid2');
381
+
382
+ cy.get('@grid2').find('[data-test=page-number-input]').clear().type('22').type('{enter}');
383
+
384
+ cy.get('@grid2').find('[data-test=page-count]').contains('105');
385
+
386
+ cy.get('@grid2').find('[data-test=item-from]').contains('106');
387
+
388
+ cy.get('@grid2').find('[data-test=item-to]').contains('110');
389
+
390
+ cy.get('@grid2').find('[data-test=total-items]').contains('525');
391
+ });
392
+
393
+ it('should have 2 rows (Task 3,Task 13) selected in 2nd grid after typing in a search filter (3)', () => {
394
+ cy.get('#slickGridContainer-grid2').as('grid2');
395
+
396
+ cy.get('@grid2').find('.filter-title').type('3').wait(100);
397
+
398
+ cy.get('@grid2')
399
+ .find('[data-test=page-number-input]')
400
+ .invoke('val')
401
+ .then((pageNumber) => expect(pageNumber).to.eq('1'));
402
+
403
+ cy.get('@grid2').find('.slick-row').should('not.have.length', 0);
404
+
405
+ cy.get('[data-test=grid2-selections]').should('contain', 'Task 3,Task 13');
406
+
407
+ cy.get('@grid2').find('.slick-row').children().filter('.slick-cell-checkboxsel.selected').should('have.length', 2);
408
+
409
+ cy.window().then((win) => {
410
+ expect(win.console.log).to.be.calledWith('Grid State changed:: ', {
411
+ newValues: { gridRowIndexes: [1, 0], dataContextIds: [1, 12, 13, 3, 522], filteredDataContextIds: [3, 13] },
412
+ type: 'rowSelection',
413
+ });
414
+ expect(win.console.log).to.be.calledWith('Grid State changed:: ', {
415
+ newValues: [
416
+ {
417
+ columnId: 'title',
418
+ operator: 'Contains',
419
+ searchTerms: ['3'],
420
+ targetSelector: 'input.form-control.filter-title.search-filter.slick-filter.filled',
421
+ },
422
+ ],
423
+ type: 'filter',
424
+ });
425
+ });
426
+ });
427
+
428
+ it('should remove filter from Grid2', () => {
429
+ cy.get('#slickGridContainer-grid2').as('grid2');
430
+
431
+ cy.get('@grid2').find('.filter-title').type('{backspace}');
432
+ });
433
+ });
434
+
435
+ describe('Remove Pagination', () => {
436
+ it('should remove Pagination and not expect any DOM elements of it', () => {
437
+ cy.get('[data-test=toggle-pagination-grid2]').click();
438
+
439
+ cy.get('#slickGridContainer-grid2 .slick-pagination').should('not.exist');
440
+
441
+ cy.window().then((win) => {
442
+ expect(win.console.log).to.have.callCount(2);
443
+ expect(win.console.log).to.be.calledWith('Grid State changed:: ', {
444
+ newValues: {
445
+ gridRowIndexes: [1, 12, 13, 3, 522],
446
+ dataContextIds: [1, 12, 13, 3, 522],
447
+ filteredDataContextIds: [1, 3, 12, 13, 522],
448
+ },
449
+ type: 'rowSelection',
450
+ });
451
+ });
452
+ });
453
+
454
+ it('should have 5 rows (Task 1,Task 3,Task 12,Task 13,Task 522) selected in the entire 2nd grid BUT only 2 shown in the DOM in the top portion of the grid (because SlickGrid uses virtual rendering)', () => {
455
+ cy.get('#slickGridContainer-grid2').as('grid2');
456
+
457
+ cy.get('[data-test=grid2-selections]').should('contain', 'Task 1,Task 3,Task 12,Task 13,Task 522');
458
+
459
+ cy.get('@grid2').find('.slick-row').children().filter('.slick-cell-checkboxsel.selected').should('have.length', 2);
460
+ });
461
+
462
+ it('should scroll to the bottom of 2nd Grid and still have 5 rows (Task 1,Task 3,Task 12,Task 13,Task 522) selected and find 2 row selected because we now have 2 rows that got rendered (first and last)', () => {
463
+ cy.get('#slickGridContainer-grid2').as('grid2');
464
+
465
+ cy.get('[data-test=grid2-selections]').should('contain', 'Task 1,Task 3,Task 12,Task 13,Task 522');
466
+
467
+ cy.get('@grid2').find('.slick-viewport-top.slick-viewport-left').scrollTo('bottom').wait(10);
468
+
469
+ cy.get('@grid2').find('.slick-row').children().filter('.slick-cell-checkboxsel.selected').should('have.length', 2);
470
+ });
471
+
472
+ it('should have 2 rows (Task 3,Task 13) selected in 2nd grid after typing in a search filter (3)', () => {
473
+ cy.get('#slickGridContainer-grid2').as('grid2');
474
+
475
+ cy.get('@grid2').find('.filter-title').type('3');
476
+
477
+ cy.get('@grid2').find('.slick-viewport-top.slick-viewport-left').scrollTo('top').wait(10);
478
+
479
+ cy.get('@grid2').find('.slick-row').should('not.have.length', 0);
480
+
481
+ cy.get('[data-test=grid2-selections]').should('contain', 'Task 3,Task 13');
482
+
483
+ cy.get('@grid2').find('.slick-row').children().filter('.slick-cell-checkboxsel.selected').should('have.length', 2);
484
+
485
+ cy.window().then((win) => {
486
+ expect(win.console.log).to.have.callCount(4);
487
+ expect(win.console.log).to.be.calledWith('Grid State changed:: ', {
488
+ newValues: { gridRowIndexes: [1, 0], dataContextIds: [1, 12, 13, 3, 522], filteredDataContextIds: [3, 13] },
489
+ type: 'rowSelection',
490
+ });
491
+ expect(win.console.log).to.be.calledWith('Grid State changed:: ', {
492
+ newValues: [
493
+ {
494
+ columnId: 'title',
495
+ operator: 'Contains',
496
+ searchTerms: ['3'],
497
+ targetSelector: 'input.form-control.filter-title.search-filter.slick-filter.filled',
498
+ },
499
+ ],
500
+ type: 'filter',
501
+ });
502
+ });
503
+ });
504
+
505
+ it('should remove filter from Grid2', () => {
506
+ cy.get('#slickGridContainer-grid2').as('grid2');
507
+
508
+ cy.get('@grid2').find('.filter-title').type('{backspace}');
509
+ });
510
+ });
511
+
512
+ describe('Re-enable Pagination', () => {
513
+ it('should re-enable the Pagination and expect to see it show it again below the grid at Page 1', () => {
514
+ cy.get('#slickGridContainer-grid2').as('grid2');
515
+
516
+ cy.get('[data-test=toggle-pagination-grid2]').click();
517
+
518
+ cy.get('#slickGridContainer-grid2 .slick-pagination').should('exist');
519
+
520
+ cy.get('@grid2')
521
+ .find('[data-test=page-number-input]')
522
+ .invoke('val')
523
+ .then((pageNumber) => expect(pageNumber).to.eq('1'));
524
+
525
+ cy.get('@grid2').find('[data-test=page-number-input]').click();
526
+
527
+ cy.get('@grid2').find('[data-test=page-count]').contains('105');
528
+
529
+ cy.get('@grid2').find('[data-test=item-from]').contains('1');
530
+
531
+ cy.get('@grid2').find('[data-test=item-to]').contains('5');
532
+
533
+ cy.get('@grid2').find('[data-test=total-items]').contains('525');
534
+
535
+ cy.window().then((win) => {
536
+ expect(win.console.log).to.have.callCount(4);
537
+ expect(win.console.log).to.be.calledWith('Grid State changed:: ', {
538
+ newValues: { gridRowIndexes: [1, 3], dataContextIds: [1, 12, 13, 3, 522], filteredDataContextIds: [1, 3, 12, 13, 522] },
539
+ type: 'rowSelection',
540
+ });
541
+ expect(win.console.log).to.be.calledWith('Grid State changed:: ', {
542
+ newValues: { pageNumber: 1, pageSize: 5 },
543
+ type: 'pagination',
544
+ });
545
+ });
546
+ });
547
+
548
+ it('should have 2 rows (Task 3,Task 13) selected in 2nd grid after typing in a search filter (3)', () => {
549
+ cy.get('#slickGridContainer-grid2').as('grid2');
550
+
551
+ cy.get('@grid2').find('.filter-title').type('3');
552
+
553
+ cy.get('@grid2').find('.slick-row').should('not.have.length', 0);
554
+
555
+ cy.get('[data-test=grid2-selections]').should('contain', 'Task 3,Task 13');
556
+
557
+ cy.get('@grid2').find('.slick-row').children().filter('.slick-cell-checkboxsel.selected').should('have.length', 2);
558
+
559
+ cy.window().then((win) => {
560
+ expect(win.console.log).to.have.callCount(4);
561
+ expect(win.console.log).to.be.calledWith('Grid State changed:: ', {
562
+ newValues: { gridRowIndexes: [1, 0], dataContextIds: [1, 12, 13, 3, 522], filteredDataContextIds: [3, 13] },
563
+ type: 'rowSelection',
564
+ });
565
+ expect(win.console.log).to.be.calledWith('Grid State changed:: ', {
566
+ newValues: [
567
+ {
568
+ columnId: 'title',
569
+ operator: 'Contains',
570
+ searchTerms: ['3'],
571
+ targetSelector: 'input.form-control.filter-title.search-filter.slick-filter.filled',
572
+ },
573
+ ],
574
+ type: 'filter',
575
+ });
576
+ });
577
+
578
+ cy.get('@grid2')
579
+ .find('[data-test=page-number-input]')
580
+ .invoke('val')
581
+ .then((pageNumber) => expect(pageNumber).to.eq('1'));
582
+
583
+ cy.get('@grid2').find('[data-test=page-count]').contains('3');
584
+
585
+ cy.get('@grid2').find('[data-test=item-from]').contains('1');
586
+
587
+ cy.get('@grid2').find('[data-test=item-to]').contains('5');
588
+
589
+ cy.get('@grid2').find('[data-test=total-items]').contains('179');
590
+ });
591
+
592
+ it('should Select All and expect all pages to no longer have any row selected', () => {
593
+ cy.get('#filter-checkbox-selectall-container input[type=checkbox]').click({ force: true });
594
+ });
595
+
596
+ it('should go to the next 2 pages and expect all rows selected in each page', () => {
597
+ cy.get('#slickGridContainer-grid2').as('grid2');
598
+
599
+ cy.get('@grid2').find('.icon-seek-next').click();
600
+
601
+ cy.get('@grid2').find('.slick-cell-checkboxsel input:checked').should('have.length', 5);
602
+
603
+ cy.get('@grid2').find('.icon-seek-next').click();
604
+
605
+ cy.get('@grid2').find('.slick-cell-checkboxsel input:checked').should('have.length', 5);
606
+ });
607
+
608
+ it('should uncheck 1 row and expect current and next page to have "Select All" uncheck', () => {
609
+ cy.get('#slickGridContainer-grid2').as('grid2');
610
+
611
+ cy.get('@grid2').find('.slick-row:nth(0) .slick-cell:nth(0) input[type=checkbox]').click({ force: true });
612
+
613
+ cy.get('@grid2').find('#filter-checkbox-selectall-container input[type=checkbox]').should('not.be.checked', true);
614
+
615
+ cy.get('@grid2').find('.icon-seek-next').click();
616
+
617
+ cy.get('@grid2').find('#filter-checkbox-selectall-container input[type=checkbox]').should('not.be.checked', true);
618
+ });
619
+
620
+ it('should go back to previous page, select the row that was unchecked and expect "Select All" to be selected again', () => {
621
+ cy.get('#slickGridContainer-grid2').as('grid2');
622
+
623
+ cy.get('@grid2').find('.icon-seek-prev').click();
624
+
625
+ cy.get('@grid2').find('.slick-row:nth(0) .slick-cell:nth(0) input[type=checkbox]').click({ force: true });
626
+
627
+ cy.get('@grid2').find('#filter-checkbox-selectall-container input[type=checkbox]').should('be.checked', true);
628
+
629
+ cy.get('@grid2').find('.icon-seek-next').click();
630
+
631
+ cy.get('@grid2').find('#filter-checkbox-selectall-container input[type=checkbox]').should('be.checked', true);
632
+ });
633
+
634
+ it('should Unselect All and expect all pages to no longer have any row selected', () => {
635
+ cy.get('#slickGridContainer-grid2').as('grid2');
636
+
637
+ cy.get('@grid2').find('#filter-checkbox-selectall-container input[type=checkbox]').click({ force: true });
638
+
639
+ cy.get('@grid2').find('.slick-cell-checkboxsel input:checked').should('have.length', 0);
640
+
641
+ cy.get('@grid2').find('.icon-seek-prev').click();
642
+
643
+ cy.get('@grid2').find('.slick-cell-checkboxsel input:checked').should('have.length', 0);
644
+
645
+ cy.get('@grid2').find('.icon-seek-prev').click();
646
+
647
+ cy.get('@grid2').find('.slick-cell-checkboxsel input:checked').should('have.length', 0);
648
+ });
649
+ });
650
+ });