@angular-generic-table/core 5.0.0-alpha.1 → 5.0.0-rc.10

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 (260) hide show
  1. package/README.md +13 -134
  2. package/angular-generic-table-core.d.ts +2 -19
  3. package/esm2020/angular-generic-table-core.mjs +5 -0
  4. package/esm2020/lib/core.component.mjs +122 -0
  5. package/esm2020/lib/core.module.mjs +23 -0
  6. package/esm2020/lib/core.service.mjs +14 -0
  7. package/esm2020/lib/enums/order.enum.mjs +6 -0
  8. package/esm2020/lib/models/table-column.interface.mjs +2 -0
  9. package/esm2020/lib/models/table-config.interface.mjs +2 -0
  10. package/esm2020/lib/models/table-info.interface.mjs +2 -0
  11. package/esm2020/lib/models/table-meta.interface.mjs +2 -0
  12. package/esm2020/lib/models/table-row.interface.mjs +2 -0
  13. package/esm2020/lib/models/table-sort.interface.mjs +2 -0
  14. package/esm2020/lib/pagination/pagination.component.mjs +63 -0
  15. package/esm2020/lib/pagination/pagination.module.mjs +18 -0
  16. package/esm2020/lib/pipes/capital-case.pipe.mjs +17 -0
  17. package/esm2020/lib/pipes/dash-case.pipe.mjs +17 -0
  18. package/esm2020/lib/pipes/dynamic.pipe.mjs +25 -0
  19. package/esm2020/lib/pipes/highlight.pipe.mjs +48 -0
  20. package/esm2020/lib/pipes/sort-class.pipe.mjs +16 -0
  21. package/esm2020/lib/utilities/utilities.mjs +39 -0
  22. package/esm2020/public-api.mjs +15 -0
  23. package/fesm2015/angular-generic-table-core.mjs +384 -0
  24. package/fesm2015/angular-generic-table-core.mjs.map +1 -0
  25. package/fesm2020/angular-generic-table-core.mjs +381 -0
  26. package/fesm2020/angular-generic-table-core.mjs.map +1 -0
  27. package/lib/core.component.d.ts +33 -0
  28. package/lib/core.module.d.ts +12 -1
  29. package/lib/core.service.d.ts +6 -0
  30. package/lib/enums/order.enum.d.ts +4 -0
  31. package/lib/models/table-column.interface.d.ts +15 -0
  32. package/lib/models/table-config.interface.d.ts +15 -0
  33. package/lib/models/table-info.interface.d.ts +4 -0
  34. package/lib/models/table-meta.interface.d.ts +8 -0
  35. package/lib/models/table-row.interface.d.ts +4 -0
  36. package/lib/models/table-sort.interface.d.ts +5 -0
  37. package/lib/pagination/pagination.component.d.ts +14 -0
  38. package/lib/pagination/pagination.module.d.ts +8 -0
  39. package/lib/pipes/capital-case.pipe.d.ts +7 -0
  40. package/lib/pipes/dash-case.pipe.d.ts +4 -1
  41. package/lib/pipes/dynamic.pipe.d.ts +9 -0
  42. package/lib/pipes/highlight.pipe.d.ts +7 -0
  43. package/lib/pipes/sort-class.pipe.d.ts +11 -0
  44. package/lib/utilities/utilities.d.ts +6 -0
  45. package/package.json +26 -24
  46. package/public-api.d.ts +11 -0
  47. package/scss/index.scss +102 -0
  48. package/CHANGELOG.md +0 -461
  49. package/LICENSE.md +0 -201
  50. package/angular-generic-table-core.metadata.json +0 -1
  51. package/bundles/angular-generic-table-core.umd.js +0 -3675
  52. package/bundles/angular-generic-table-core.umd.js.map +0 -1
  53. package/bundles/angular-generic-table-core.umd.min.js +0 -2
  54. package/bundles/angular-generic-table-core.umd.min.js.map +0 -1
  55. package/css/generic-table.css +0 -168
  56. package/css/generic-table.css.map +0 -9
  57. package/css/generic-table.min.css +0 -2
  58. package/css/generic-table.min.css.map +0 -1
  59. package/esm2015/angular-generic-table-core.js +0 -28
  60. package/esm2015/angular-generic-table-core.metadata.json +0 -1
  61. package/esm2015/lib/components/generic-table/generic-table.component.js +0 -1738
  62. package/esm2015/lib/components/generic-table/generic-table.component.metadata.json +0 -1
  63. package/esm2015/lib/components/gt-checkbox/gt-checkbox.component.js +0 -88
  64. package/esm2015/lib/components/gt-checkbox/gt-checkbox.component.metadata.json +0 -1
  65. package/esm2015/lib/components/gt-custom-component-factory/gt-custom-component-factory.component.js +0 -112
  66. package/esm2015/lib/components/gt-custom-component-factory/gt-custom-component-factory.component.metadata.json +0 -1
  67. package/esm2015/lib/components/gt-drilldown/gt-drilldown.component.js +0 -53
  68. package/esm2015/lib/components/gt-drilldown/gt-drilldown.component.metadata.json +0 -1
  69. package/esm2015/lib/components/gt-dropdown/gt-dropdown.component.js +0 -176
  70. package/esm2015/lib/components/gt-dropdown/gt-dropdown.component.metadata.json +0 -1
  71. package/esm2015/lib/components/gt-expanding-row/gt-expanding-row.component.js +0 -147
  72. package/esm2015/lib/components/gt-expanding-row/gt-expanding-row.component.metadata.json +0 -1
  73. package/esm2015/lib/components/gt-pagination/gt-pagination.component.js +0 -141
  74. package/esm2015/lib/components/gt-pagination/gt-pagination.component.metadata.json +0 -1
  75. package/esm2015/lib/components/gt-table-info/gt-table-info.component.js +0 -103
  76. package/esm2015/lib/components/gt-table-info/gt-table-info.component.metadata.json +0 -1
  77. package/esm2015/lib/core.module.js +0 -96
  78. package/esm2015/lib/core.module.metadata.json +0 -1
  79. package/esm2015/lib/directives/component-anchor.directive.js +0 -65
  80. package/esm2015/lib/directives/component-anchor.directive.metadata.json +0 -1
  81. package/esm2015/lib/directives/gt-column-width.directive.js +0 -73
  82. package/esm2015/lib/directives/gt-column-width.directive.metadata.json +0 -1
  83. package/esm2015/lib/interfaces/gt-config-field.js +0 -96
  84. package/esm2015/lib/interfaces/gt-config-field.metadata.json +0 -1
  85. package/esm2015/lib/interfaces/gt-config-setting.js +0 -41
  86. package/esm2015/lib/interfaces/gt-config-setting.metadata.json +0 -1
  87. package/esm2015/lib/interfaces/gt-config-total.js +0 -20
  88. package/esm2015/lib/interfaces/gt-config-total.metadata.json +0 -1
  89. package/esm2015/lib/interfaces/gt-config.js +0 -24
  90. package/esm2015/lib/interfaces/gt-config.metadata.json +0 -1
  91. package/esm2015/lib/interfaces/gt-event.js +0 -16
  92. package/esm2015/lib/interfaces/gt-event.metadata.json +0 -1
  93. package/esm2015/lib/interfaces/gt-information.js +0 -38
  94. package/esm2015/lib/interfaces/gt-information.metadata.json +0 -1
  95. package/esm2015/lib/interfaces/gt-options.js +0 -55
  96. package/esm2015/lib/interfaces/gt-options.metadata.json +0 -1
  97. package/esm2015/lib/interfaces/gt-render-field.js +0 -29
  98. package/esm2015/lib/interfaces/gt-render-field.metadata.json +0 -1
  99. package/esm2015/lib/interfaces/gt-row-meta.js +0 -18
  100. package/esm2015/lib/interfaces/gt-row-meta.metadata.json +0 -1
  101. package/esm2015/lib/interfaces/gt-row.js +0 -20
  102. package/esm2015/lib/interfaces/gt-row.metadata.json +0 -1
  103. package/esm2015/lib/interfaces/gt-texts.js +0 -36
  104. package/esm2015/lib/interfaces/gt-texts.metadata.json +0 -1
  105. package/esm2015/lib/pipes/dash-case.pipe.js +0 -30
  106. package/esm2015/lib/pipes/dash-case.pipe.metadata.json +0 -1
  107. package/esm2015/lib/pipes/gt-chunk.pipe.js +0 -52
  108. package/esm2015/lib/pipes/gt-chunk.pipe.metadata.json +0 -1
  109. package/esm2015/lib/pipes/gt-column-class.pipe.js +0 -51
  110. package/esm2015/lib/pipes/gt-column-class.pipe.metadata.json +0 -1
  111. package/esm2015/lib/pipes/gt-filter.pipe.js +0 -60
  112. package/esm2015/lib/pipes/gt-filter.pipe.metadata.json +0 -1
  113. package/esm2015/lib/pipes/gt-highlight.pipe.js +0 -72
  114. package/esm2015/lib/pipes/gt-highlight.pipe.metadata.json +0 -1
  115. package/esm2015/lib/pipes/gt-is-editable.pipe.js +0 -37
  116. package/esm2015/lib/pipes/gt-is-editable.pipe.metadata.json +0 -1
  117. package/esm2015/lib/pipes/gt-is-observable.pipe.js +0 -31
  118. package/esm2015/lib/pipes/gt-is-observable.pipe.metadata.json +0 -1
  119. package/esm2015/lib/pipes/gt-meta.pipe.js +0 -54
  120. package/esm2015/lib/pipes/gt-meta.pipe.metadata.json +0 -1
  121. package/esm2015/lib/pipes/gt-order-by.pipe.js +0 -202
  122. package/esm2015/lib/pipes/gt-order-by.pipe.metadata.json +0 -1
  123. package/esm2015/lib/pipes/gt-property.pipe.js +0 -52
  124. package/esm2015/lib/pipes/gt-property.pipe.metadata.json +0 -1
  125. package/esm2015/lib/pipes/gt-render.pipe.js +0 -173
  126. package/esm2015/lib/pipes/gt-render.pipe.metadata.json +0 -1
  127. package/esm2015/lib/pipes/gt-row-class.pipe.js +0 -66
  128. package/esm2015/lib/pipes/gt-row-class.pipe.metadata.json +0 -1
  129. package/esm2015/lib/pipes/gt-search.pipe.js +0 -114
  130. package/esm2015/lib/pipes/gt-search.pipe.metadata.json +0 -1
  131. package/esm2015/lib/pipes/gt-totals-position.pipe.js +0 -35
  132. package/esm2015/lib/pipes/gt-totals-position.pipe.metadata.json +0 -1
  133. package/esm2015/lib/pipes/gt-totals.pipe.js +0 -46
  134. package/esm2015/lib/pipes/gt-totals.pipe.metadata.json +0 -1
  135. package/esm2015/lib/pipes/gt-visible.pipe.js +0 -71
  136. package/esm2015/lib/pipes/gt-visible.pipe.metadata.json +0 -1
  137. package/esm2015/public_api.js +0 -18
  138. package/esm2015/public_api.metadata.json +0 -1
  139. package/esm5/angular-generic-table-core.js +0 -28
  140. package/esm5/angular-generic-table-core.metadata.json +0 -1
  141. package/esm5/lib/components/generic-table/generic-table.component.js +0 -1813
  142. package/esm5/lib/components/generic-table/generic-table.component.metadata.json +0 -1
  143. package/esm5/lib/components/gt-checkbox/gt-checkbox.component.js +0 -100
  144. package/esm5/lib/components/gt-checkbox/gt-checkbox.component.metadata.json +0 -1
  145. package/esm5/lib/components/gt-custom-component-factory/gt-custom-component-factory.component.js +0 -136
  146. package/esm5/lib/components/gt-custom-component-factory/gt-custom-component-factory.component.metadata.json +0 -1
  147. package/esm5/lib/components/gt-drilldown/gt-drilldown.component.js +0 -41
  148. package/esm5/lib/components/gt-drilldown/gt-drilldown.component.metadata.json +0 -1
  149. package/esm5/lib/components/gt-dropdown/gt-dropdown.component.js +0 -179
  150. package/esm5/lib/components/gt-dropdown/gt-dropdown.component.metadata.json +0 -1
  151. package/esm5/lib/components/gt-expanding-row/gt-expanding-row.component.js +0 -173
  152. package/esm5/lib/components/gt-expanding-row/gt-expanding-row.component.metadata.json +0 -1
  153. package/esm5/lib/components/gt-pagination/gt-pagination.component.js +0 -149
  154. package/esm5/lib/components/gt-pagination/gt-pagination.component.metadata.json +0 -1
  155. package/esm5/lib/components/gt-table-info/gt-table-info.component.js +0 -111
  156. package/esm5/lib/components/gt-table-info/gt-table-info.component.metadata.json +0 -1
  157. package/esm5/lib/core.module.js +0 -100
  158. package/esm5/lib/core.module.metadata.json +0 -1
  159. package/esm5/lib/directives/component-anchor.directive.js +0 -66
  160. package/esm5/lib/directives/component-anchor.directive.metadata.json +0 -1
  161. package/esm5/lib/directives/gt-column-width.directive.js +0 -81
  162. package/esm5/lib/directives/gt-column-width.directive.metadata.json +0 -1
  163. package/esm5/lib/interfaces/gt-config-field.js +0 -96
  164. package/esm5/lib/interfaces/gt-config-field.metadata.json +0 -1
  165. package/esm5/lib/interfaces/gt-config-setting.js +0 -41
  166. package/esm5/lib/interfaces/gt-config-setting.metadata.json +0 -1
  167. package/esm5/lib/interfaces/gt-config-total.js +0 -20
  168. package/esm5/lib/interfaces/gt-config-total.metadata.json +0 -1
  169. package/esm5/lib/interfaces/gt-config.js +0 -24
  170. package/esm5/lib/interfaces/gt-config.metadata.json +0 -1
  171. package/esm5/lib/interfaces/gt-event.js +0 -16
  172. package/esm5/lib/interfaces/gt-event.metadata.json +0 -1
  173. package/esm5/lib/interfaces/gt-information.js +0 -38
  174. package/esm5/lib/interfaces/gt-information.metadata.json +0 -1
  175. package/esm5/lib/interfaces/gt-options.js +0 -55
  176. package/esm5/lib/interfaces/gt-options.metadata.json +0 -1
  177. package/esm5/lib/interfaces/gt-render-field.js +0 -29
  178. package/esm5/lib/interfaces/gt-render-field.metadata.json +0 -1
  179. package/esm5/lib/interfaces/gt-row-meta.js +0 -18
  180. package/esm5/lib/interfaces/gt-row-meta.metadata.json +0 -1
  181. package/esm5/lib/interfaces/gt-row.js +0 -20
  182. package/esm5/lib/interfaces/gt-row.metadata.json +0 -1
  183. package/esm5/lib/interfaces/gt-texts.js +0 -36
  184. package/esm5/lib/interfaces/gt-texts.metadata.json +0 -1
  185. package/esm5/lib/pipes/dash-case.pipe.js +0 -38
  186. package/esm5/lib/pipes/dash-case.pipe.metadata.json +0 -1
  187. package/esm5/lib/pipes/gt-chunk.pipe.js +0 -70
  188. package/esm5/lib/pipes/gt-chunk.pipe.metadata.json +0 -1
  189. package/esm5/lib/pipes/gt-column-class.pipe.js +0 -61
  190. package/esm5/lib/pipes/gt-column-class.pipe.metadata.json +0 -1
  191. package/esm5/lib/pipes/gt-filter.pipe.js +0 -73
  192. package/esm5/lib/pipes/gt-filter.pipe.metadata.json +0 -1
  193. package/esm5/lib/pipes/gt-highlight.pipe.js +0 -77
  194. package/esm5/lib/pipes/gt-highlight.pipe.metadata.json +0 -1
  195. package/esm5/lib/pipes/gt-is-editable.pipe.js +0 -47
  196. package/esm5/lib/pipes/gt-is-editable.pipe.metadata.json +0 -1
  197. package/esm5/lib/pipes/gt-is-observable.pipe.js +0 -39
  198. package/esm5/lib/pipes/gt-is-observable.pipe.metadata.json +0 -1
  199. package/esm5/lib/pipes/gt-meta.pipe.js +0 -65
  200. package/esm5/lib/pipes/gt-meta.pipe.metadata.json +0 -1
  201. package/esm5/lib/pipes/gt-order-by.pipe.js +0 -223
  202. package/esm5/lib/pipes/gt-order-by.pipe.metadata.json +0 -1
  203. package/esm5/lib/pipes/gt-property.pipe.js +0 -63
  204. package/esm5/lib/pipes/gt-property.pipe.metadata.json +0 -1
  205. package/esm5/lib/pipes/gt-render.pipe.js +0 -182
  206. package/esm5/lib/pipes/gt-render.pipe.metadata.json +0 -1
  207. package/esm5/lib/pipes/gt-row-class.pipe.js +0 -75
  208. package/esm5/lib/pipes/gt-row-class.pipe.metadata.json +0 -1
  209. package/esm5/lib/pipes/gt-search.pipe.js +0 -125
  210. package/esm5/lib/pipes/gt-search.pipe.metadata.json +0 -1
  211. package/esm5/lib/pipes/gt-totals-position.pipe.js +0 -45
  212. package/esm5/lib/pipes/gt-totals-position.pipe.metadata.json +0 -1
  213. package/esm5/lib/pipes/gt-totals.pipe.js +0 -57
  214. package/esm5/lib/pipes/gt-totals.pipe.metadata.json +0 -1
  215. package/esm5/lib/pipes/gt-visible.pipe.js +0 -79
  216. package/esm5/lib/pipes/gt-visible.pipe.metadata.json +0 -1
  217. package/esm5/public_api.js +0 -18
  218. package/esm5/public_api.metadata.json +0 -1
  219. package/fesm2015/angular-generic-table-core.js +0 -3285
  220. package/fesm2015/angular-generic-table-core.js.map +0 -1
  221. package/fesm5/angular-generic-table-core.js +0 -3574
  222. package/fesm5/angular-generic-table-core.js.map +0 -1
  223. package/lib/components/generic-table/generic-table.component.d.ts +0 -282
  224. package/lib/components/gt-checkbox/gt-checkbox.component.d.ts +0 -12
  225. package/lib/components/gt-custom-component-factory/gt-custom-component-factory.component.d.ts +0 -27
  226. package/lib/components/gt-drilldown/gt-drilldown.component.d.ts +0 -6
  227. package/lib/components/gt-dropdown/gt-dropdown.component.d.ts +0 -21
  228. package/lib/components/gt-expanding-row/gt-expanding-row.component.d.ts +0 -34
  229. package/lib/components/gt-pagination/gt-pagination.component.d.ts +0 -11
  230. package/lib/components/gt-table-info/gt-table-info.component.d.ts +0 -15
  231. package/lib/directives/component-anchor.directive.d.ts +0 -10
  232. package/lib/directives/gt-column-width.directive.d.ts +0 -11
  233. package/lib/interfaces/gt-config-field.d.ts +0 -87
  234. package/lib/interfaces/gt-config-setting.d.ts +0 -21
  235. package/lib/interfaces/gt-config-total.d.ts +0 -8
  236. package/lib/interfaces/gt-config.d.ts +0 -12
  237. package/lib/interfaces/gt-event.d.ts +0 -4
  238. package/lib/interfaces/gt-information.d.ts +0 -15
  239. package/lib/interfaces/gt-options.d.ts +0 -27
  240. package/lib/interfaces/gt-render-field.d.ts +0 -19
  241. package/lib/interfaces/gt-row-meta.d.ts +0 -5
  242. package/lib/interfaces/gt-row.d.ts +0 -6
  243. package/lib/interfaces/gt-texts.d.ts +0 -14
  244. package/lib/pipes/gt-chunk.pipe.d.ts +0 -8
  245. package/lib/pipes/gt-column-class.pipe.d.ts +0 -6
  246. package/lib/pipes/gt-filter.pipe.d.ts +0 -5
  247. package/lib/pipes/gt-highlight.pipe.d.ts +0 -7
  248. package/lib/pipes/gt-is-editable.pipe.d.ts +0 -4
  249. package/lib/pipes/gt-is-observable.pipe.d.ts +0 -4
  250. package/lib/pipes/gt-meta.pipe.d.ts +0 -5
  251. package/lib/pipes/gt-order-by.pipe.d.ts +0 -11
  252. package/lib/pipes/gt-property.pipe.d.ts +0 -7
  253. package/lib/pipes/gt-render.pipe.d.ts +0 -19
  254. package/lib/pipes/gt-row-class.pipe.d.ts +0 -5
  255. package/lib/pipes/gt-search.pipe.d.ts +0 -10
  256. package/lib/pipes/gt-totals-position.pipe.d.ts +0 -5
  257. package/lib/pipes/gt-totals.pipe.d.ts +0 -4
  258. package/lib/pipes/gt-visible.pipe.d.ts +0 -9
  259. package/public_api.d.ts +0 -18
  260. package/scss/generic-table.scss +0 -246
@@ -1 +0,0 @@
1
- {"version":3,"file":"angular-generic-table-core.js.map","sources":["ng://@angular-generic-table/core/lib/pipes/gt-meta.pipe.ts","ng://@angular-generic-table/core/lib/components/generic-table/generic-table.component.ts","ng://@angular-generic-table/core/lib/components/gt-table-info/gt-table-info.component.ts","ng://@angular-generic-table/core/lib/components/gt-pagination/gt-pagination.component.ts","ng://@angular-generic-table/core/lib/components/gt-expanding-row/gt-expanding-row.component.ts","ng://@angular-generic-table/core/lib/components/gt-dropdown/gt-dropdown.component.ts","ng://@angular-generic-table/core/lib/components/gt-drilldown/gt-drilldown.component.ts","ng://@angular-generic-table/core/lib/components/gt-custom-component-factory/gt-custom-component-factory.component.ts","ng://@angular-generic-table/core/lib/components/gt-checkbox/gt-checkbox.component.ts","ng://@angular-generic-table/core/lib/pipes/gt-visible.pipe.ts","ng://@angular-generic-table/core/lib/pipes/gt-search.pipe.ts","ng://@angular-generic-table/core/lib/pipes/gt-is-editable.pipe.ts","ng://@angular-generic-table/core/lib/pipes/gt-is-observable.pipe.ts","ng://@angular-generic-table/core/lib/pipes/gt-highlight.pipe.ts","ng://@angular-generic-table/core/lib/pipes/gt-column-class.pipe.ts","ng://@angular-generic-table/core/lib/pipes/gt-row-class.pipe.ts","ng://@angular-generic-table/core/lib/pipes/gt-totals-position.pipe.ts","ng://@angular-generic-table/core/lib/pipes/gt-totals.pipe.ts","ng://@angular-generic-table/core/lib/pipes/gt-order-by.pipe.ts","ng://@angular-generic-table/core/lib/pipes/gt-filter.pipe.ts","ng://@angular-generic-table/core/lib/pipes/gt-chunk.pipe.ts","ng://@angular-generic-table/core/lib/pipes/gt-property.pipe.ts","ng://@angular-generic-table/core/lib/pipes/dash-case.pipe.ts","ng://@angular-generic-table/core/lib/pipes/gt-render.pipe.ts","ng://@angular-generic-table/core/lib/directives/component-anchor.directive.ts","ng://@angular-generic-table/core/lib/directives/gt-column-width.directive.ts","ng://@angular-generic-table/core/lib/core.module.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { GtRow } from '../interfaces/gt-row';\n\n@Pipe({\n\tname: 'gtMeta'\n})\nexport class GtMetaPipe implements PipeTransform {\n\ttransform(\n\t\tallRows: Array<GtRow>,\n\t\trowIndex?: string,\n\t\tpage?: number,\n\t\trecordLength?: number\n\t): Array<GtRow> {\n\t\tfor (let i = 0; i < allRows.length; i++) {\n\t\t\tif (!allRows[i].$$gtRowId) {\n\t\t\t\tallRows[i].$$gtRowId = rowIndex\n\t\t\t\t\t? allRows[i][rowIndex]\n\t\t\t\t\t: page\n\t\t\t\t\t\t? page * recordLength +\n\t\t\t\t\t\t i +\n\t\t\t\t\t\t '_' +\n\t\t\t\t\t\t Math.random()\n\t\t\t\t\t\t\t\t.toString(36)\n\t\t\t\t\t\t\t\t.substr(2, 16)\n\t\t\t\t\t\t: i +\n\t\t\t\t\t\t '_' +\n\t\t\t\t\t\t Math.random()\n\t\t\t\t\t\t\t\t.toString(36)\n\t\t\t\t\t\t\t\t.substr(2, 16);\n\t\t\t}\n\t\t\tif (!allRows[i].$$gtInitialRowIndex) {\n\t\t\t\tallRows[i].$$gtInitialRowIndex = i;\n\t\t\t}\n\t\t}\n\t\treturn allRows;\n\t}\n}\n","import {\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOnChanges,\n\tOnDestroy,\n\tOnInit,\n\tOutput,\n\tRenderer2,\n\tSimpleChanges,\n\tType\n} from '@angular/core';\nimport { GtRow } from '../../interfaces/gt-row';\nimport { GtExpandedRow } from '../gt-expanding-row/gt-expanding-row.component';\nimport { GtOptions } from '../../interfaces/gt-options';\nimport { GtConfigField } from '../../interfaces/gt-config-field';\nimport { GtConfigSetting } from '../../interfaces/gt-config-setting';\nimport { GtRowMeta } from '../../interfaces/gt-row-meta';\nimport { GtTexts } from '../../interfaces/gt-texts';\nimport { GtConfig } from '../../interfaces/gt-config';\nimport { GtEvent } from '../../interfaces/gt-event';\nimport { GtInformation } from '../../interfaces/gt-information';\nimport { GtRenderField } from '../../interfaces/gt-render-field';\nimport { GtMetaPipe } from '../../pipes/gt-meta.pipe';\n\n@Component({\n\tselector: 'generic-table',\n\ttemplate: `<table class=\"table\" ngClass=\"{{gtClasses}} {{gtOptions.stack ? 'table-stacked':''}}\"\n *ngIf=\"gtFields && gtSettings && (gtFields | gtVisible:gtSettings:refreshPipe).length > 0\">\n <thead>\n <tr>\n <th class=\"gt-sort-label\" *ngIf=\"gtOptions.stack\">{{gtTexts.sortLabel}}</th>\n <th *ngFor=\"let column of gtSettings | gtVisible:gtSettings:refreshPipe\"\n ngClass=\"{{column.objectKey +'-column' | dashCase}} {{gtFields | gtProperty:column.objectKey:'classNames'}} {{column.sortEnabled ? 'sort-'+column.sort:''}} {{column.sortEnabled && column.sortOrder >= 0 ? 'sort-order-'+column.sortOrder:''}} {{ gtFields | gtColumnClass:column }}\"\n (click)=\"column.sortEnabled ? gtSort(column.objectKey,$event):'';\">\n <span *ngIf=\"!(gtFields | gtProperty:column.objectKey:'header')\">{{gtFields | gtProperty:column.objectKey:'name'}}</span>\n <gt-custom-component-factory *ngIf=\"(gtFields | gtProperty:column.objectKey:'header')\"\n [type]=\"(gtFields | gtProperty:column.objectKey:'header')?.type\"\n [injector]=\"(gtFields | gtProperty:column.objectKey:'header')?.injector\"\n [column]=\"gtFields | gtProperty:column.objectKey:'name'\"></gt-custom-component-factory>\n <gt-checkbox *ngIf=\"(gtFields | gtProperty:column.objectKey:'columnComponent')?.type === 'checkbox'\" [checked]=\"(gtOptions.lazyLoad ? lazyAllSelected:selectedRows.length === gtData.length)\" (changed)=\"toggleAllRows()\"></gt-checkbox>\n </th>\n </tr>\n </thead>\n <ng-template\n [ngIf]=\"gtTotals && (gtOptions.lazyLoad === false ? (gtData | gtFilter:gtInfo.filter:gtInfo:refreshFilter:gtData.length | gtSearch:gtInfo.searchTerms:gtInfo:gtSettings:gtFields:gtData.length).length > 0 : gtData.length > 0)\">\n <thead class=\"gt-totals\">\n <tr *ngFor=\"let total of gtTotals | gtTotalsPosition\">\n <td *ngFor=\"let column of gtSettings | gtVisible:gtSettings:refreshPipe;let i = index;\"\n ngClass=\"{{column.objectKey +'-totals-column' | dashCase}} {{gtFields | gtProperty:column.objectKey:'classNames'}} {{ gtFields | gtColumnClass:column }}\">\n <span *ngIf=\"i === 0\" class=\"float-left\">{{total.name}}</span><span\n [innerHTML]=\"total.fields[column.objectKey] | gtTotals:(total.update === false || gtOptions.lazyLoad === true) ? gtData:(gtData | gtFilter:gtInfo.filter:gtInfo:refreshFilter:gtData.length | gtSearch:gtInfo.searchTerms:gtInfo:gtSettings:gtFields:gtData.length):column.objectKey:refreshTotals\"></span>\n </td>\n </tr>\n </thead>\n <tfoot class=\"gt-totals\">\n <tr *ngFor=\"let total of gtTotals | gtTotalsPosition:'footer'\">\n <td *ngFor=\"let column of gtSettings | gtVisible:gtSettings:refreshPipe;let i = index;\"\n ngClass=\"{{column.objectKey +'-totals-column' | dashCase}} {{gtFields | gtProperty:column.objectKey:'classNames'}} {{ gtFields | gtColumnClass:column }}\">\n <span *ngIf=\"i === 0\" class=\"float-left\">{{total.name}}</span><span\n [innerHTML]=\"total.fields[column.objectKey] | gtTotals:(total.update === false || gtOptions.lazyLoad === true) ? gtData:(gtData | gtFilter:gtInfo.filter:gtInfo:refreshFilter:gtData.length | gtSearch:gtInfo.searchTerms:gtInfo:gtSettings:gtFields:gtData.length):column.objectKey:refreshTotals\"></span>\n </td>\n </tr>\n </tfoot>\n </ng-template>\n <tbody *ngIf=\"gtData && gtInfo\">\n <ng-template class=\"table-rows\" ngFor let-row let-last=\"last\" [ngForTrackBy]=\"trackByFn\"\n [ngForOf]=\"gtOptions.lazyLoad && gtInfo ? (gtData[gtInfo.pageCurrent-1]) : (gtData | gtFilter:gtInfo.filter:gtInfo:refreshFilter:gtData.length | gtSearch:gtInfo.searchTerms:gtInfo:gtSettings:gtFields:gtData.length | gtOrderBy:sortOrder:gtFields:refreshSorting:gtData.length | gtChunk:gtInfo:gtInfo.recordLength:gtInfo.pageCurrent:refreshPageArray:gtData.length:gtEvent:data | gtRowClass:gtFields)\">\n <tr [ngClass]=\"{'row-selected':metaInfo[row.$$gtRowId]?.isSelected, 'row-open':metaInfo[row.$$gtRowId]?.isOpen, 'row-loading':loading, 'row-expandable':gtRowComponent}\"\n class=\"{{row.$$gtRowClass}}\"\n (click)=\"gtOptions.rowSelection ? toggleSelect(row):rowClick(row, $event)\">\n <td *ngFor=\"let column of row | gtRender:gtSettings:gtFields:refreshPipe:loading:gtOptions.highlightSearch:gtInfo.searchTerms;trackBy:trackByColumnFn\"\n ngClass=\"{{column.objectKey +'-column' | dashCase}} {{gtFields | gtProperty:column.objectKey:'classNames'}} {{(gtFields | gtProperty:column.objectKey:'inlineEdit') ? 'gt-inline-edit':''}} {{column.edited ? 'gt-edited':''}} {{ gtFields | gtColumnClass:column:row }}\">\n <span class=\"gt-row-label\"\n *ngIf=\"gtOptions.stack\">{{(gtFields | gtProperty:column.objectKey:'stackedHeading') ? (gtFields | gtProperty:column.objectKey:'stackedHeading') : (gtFields | gtProperty:column.objectKey:'name')}}</span>\n <gt-custom-component-factory *ngIf=\"column.columnComponent && column.columnComponent.type !== 'checkbox'\" class=\"gt-row-content\"\n [type]=\"column.columnComponent.type\"\n [injector]=\"column.columnComponent.injector\" [row]=\"row\"\n [column]=\"column\" (redrawEvent)=\"redraw($event)\"\n [searchTerms]=\"gtInfo.searchTerms\" (searchEvent)=\"redraw($event)\"\n (click)=\"column.click ? column.click(row,column,$event):'';column.expand ? toggleCollapse(row, column.expand):''\"></gt-custom-component-factory>\n <span *ngIf=\"!column.columnComponent && (!(gtFields | gtProperty:column.objectKey:'inlineEdit') || ((gtFields | gtProperty:column.objectKey:'inlineEdit')?.active | gtIsObservable) && !((gtFields | gtProperty:column.objectKey:'inlineEdit')?.active | async) || (!((gtFields | gtProperty:column.objectKey:'inlineEdit')?.active | gtIsObservable) && !((gtFields | gtProperty:column.objectKey:'inlineEdit')?.active | gtIsEditable:row:refreshPipe)))\"\n class=\"gt-row-content\" [innerHTML]=\"column.renderValue\"\n (click)=\"column.click ? column.click(row,column,$event):'';column.expand ? toggleCollapse(row, column.expand):''\"></span>\n <ng-template\n [ngIf]=\"!column.columnComponent && (((gtFields | gtProperty:column.objectKey:'inlineEdit')?.active | gtIsObservable) && ((gtFields | gtProperty:column.objectKey:'inlineEdit')?.active | async) || ((gtFields | gtProperty:column.objectKey:'inlineEdit')?.active | gtIsEditable:row:refreshPipe))\">\n <ng-template [ngIf]=\"([true,'email','number','password', 'text'].indexOf((gtFields | gtProperty:column.objectKey:'inlineEdit').type) !== -1) || !(gtFields | gtProperty:column.objectKey:'inlineEdit').type\">\n <input class=\"inline-edit\" [attr.type]=\"!(gtFields | gtProperty:column.objectKey:'inlineEdit').type ? 'text' : !((gtFields | gtProperty:column.objectKey:'inlineEdit').type | gtIsObservable) ? (gtFields | gtProperty:column.objectKey:'inlineEdit').type:(gtFields | gtProperty:column.objectKey:'inlineEdit').type | async\" [(ngModel)]=\"column.renderValue\"\n (input)=\"gtUpdateColumn($event,row, column)\">\n <span class=\"gt-inline-edit-notice\">{{gtTexts.inlineEditEdited}}</span>\n </ng-template>\n <gt-dropdown\n *ngIf=\"(((gtFields | gtProperty:column.objectKey:'inlineEdit').type) && ((gtFields | gtProperty:column.objectKey:'inlineEdit').type).length > 0) || ((gtFields | gtProperty:column.objectKey:'inlineEdit').type | gtIsObservable)\"\n [options]=\"!((gtFields | gtProperty:column.objectKey:'inlineEdit').type | gtIsObservable) ? (gtFields | gtProperty:column.objectKey:'inlineEdit').type : (gtFields | gtProperty:column.objectKey:'inlineEdit').type | async\"\n [id]=\"'_' + row.$$gtRowId + '_' + column.objectKey\"\n [(selected)]=\"column.renderValue\" (selectedChange)=\"gtDropdownSelect(row, column)\">Add\n inline editing module\n </gt-dropdown>\n </ng-template>\n <ng-template [ngIf]=\"!column.columnComponent && !((gtFields | gtProperty:column.objectKey:'inlineEdit')?.active) \">\n <ng-template\n [ngIf]=\"[true,'email','number','password'].indexOf(gtFields | gtProperty:column.objectKey:'inlineEdit') !== -1\">\n <input class=\"inline-edit\" [attr.type]=\"(gtFields | gtProperty:column.objectKey:'inlineEdit') === true ? 'text':(gtFields | gtProperty:column.objectKey:'inlineEdit')\" [(ngModel)]=\"column.renderValue\"\n (input)=\"gtUpdateColumn($event,row, column)\">\n <span class=\"gt-inline-edit-notice\">{{gtTexts.inlineEditEdited}}</span>\n </ng-template>\n <gt-dropdown\n *ngIf=\"(gtFields | gtProperty:column.objectKey:'inlineEdit') && [true,'email','number','password'].indexOf(gtFields | gtProperty:column.objectKey:'inlineEdit') === -1\"\n [options]=\"gtFields | gtProperty:column.objectKey:'inlineEdit'\"\n [id]=\"'_' + row.$$gtRowId + '_' + column.objectKey\"\n [(selected)]=\"column.renderValue\" (selectedChange)=\"gtDropdownSelect(row, column)\">Add\n inline editing module\n </gt-dropdown>\n </ng-template>\n <gt-checkbox *ngIf=\"column.columnComponent && column.columnComponent.type === 'checkbox'\" [checked]=\"metaInfo[row.$$gtRowId]?.isSelected\" (changed)=\"toggleSelect(row)\"></gt-checkbox>\n </td>\n </tr>\n <tr class=\"row-expanded\" *ngIf=\"metaInfo[row.$$gtRowId]?.isOpen\">\n <td [attr.colspan]=\"(gtFields | gtVisible:gtSettings:refreshPipe).length\">\n <gt-expanding-row [row]=\"row\"\n [type]=\"expandedRow.component ? expandedRow.component:gtRowComponent\"\n [columnWidth]=\"columnWidth\"\n [gtFields]=\"gtFields\"\n [gtOptions]=\"gtOptions\"\n [gtEvent]=\"gtEvent\"\n [gtInfo]=\"gtInfo\"\n [gtSettings]=\"gtSettings\"\n [data]=\"expandedRow.data ? expandedRow.data:row\"\n (redrawEvent)=\"redraw($event)\"\n (toggleRowEvent)=\"toggleCollapse($event)\"></gt-expanding-row>\n </td>\n </tr>\n <tr *ngIf=\"gtOptions.reportColumnWidth && last\">\n <td style=\"padding: 0; border:none;\"\n *ngFor=\"let column of gtSettings | gtVisible:gtSettings:refreshPipe\" gtColumnWidth\n [objectKey]=\"column.objectKey\" [widths]=\"columnWidth\"></td>\n </tr>\n </ng-template>\n <tr *ngIf=\"gtInfo.pageTotal === 0 && (gtInfo.searchTerms || gtInfo.filter) && !loading\">\n <td class=\"gt-no-matching-results\" [attr.colspan]=\"(gtFields | gtVisible:gtSettings).length\">\n {{gtTexts.noMatchingData}}\n </td>\n </tr>\n <tr *ngIf=\"gtInfo.pageTotal === 0 && !(gtInfo.searchTerms || gtInfo.filter) && !loading\">\n <td class=\"gt-no-results\" [attr.colspan]=\"(gtFields | gtVisible:gtSettings).length\">{{gtTexts.noData}}\n </td>\n </tr>\n <tr *ngIf=\"gtInfo.pageTotal === 0 && loading\">\n <td class=\"gt-loading-data\" [attr.colspan]=\"(gtFields | gtVisible:gtSettings).length\">{{gtTexts.loading}}</td>\n </tr>\n </tbody>\n</table>\n<table class=\"table\" ngClass=\"{{gtClasses}} {{gtOptions.stack ? 'table-stacked':''}}\"\n *ngIf=\"gtFields && gtSettings && (gtFields | gtVisible:gtSettings:refreshPipe).length === 0\">\n <thead>\n <tr>\n <th class=\"gt-no-visible-columns\">{{gtTexts.noVisibleColumnsHeading}}</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td class=\"gt-no-visible-columns\">{{gtTexts.noVisibleColumns}}</td>\n </tr>\n </tbody>\n</table>\n<table class=\"table\" ngClass=\"{{gtClasses}} {{gtOptions.stack ? 'table-stacked':''}}\"\n *ngIf=\"!gtFields || !gtSettings\">\n <thead>\n <tr>\n <th class=\"gt-loading-config\">&nbsp;</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td class=\"gt-loading-config\">&nbsp;</td>\n </tr>\n </tbody>\n</table>\n`\n})\nexport class GenericTableComponent<R extends GtRow, C extends GtExpandedRow<R>>\n\timplements OnInit, OnChanges, OnDestroy {\n\tget gtRowComponent(): Type<C> {\n\t\treturn this._gtRowComponent;\n\t}\n\n\tget hasEdits(): boolean {\n\t\treturn Object.keys(this.editedRows).length > 0;\n\t}\n\n\tget gtOptions(): GtOptions {\n\t\treturn this._gtOptions;\n\t}\n\n\tget gtTotals(): any {\n\t\treturn this._gtTotals;\n\t}\n\n\tget gtFields(): GtConfigField<R, any>[] {\n\t\treturn this._gtFields;\n\t}\n\n\tget gtSettings(): GtConfigSetting[] {\n\t\treturn this._gtSettings;\n\t}\n\n\tget gtData(): Array<any> {\n\t\treturn this._gtData;\n\t}\n\n\t@Input()\n\tset gtOptions(value: GtOptions) {\n\t\tthis._gtOptions = value;\n\n\t\t// if number of rows is passed and if number of rows differs from current record length...\n\t\tif (\n\t\t\tthis.gtOptions.numberOfRows &&\n\t\t\tthis.gtInfo.recordLength !== this.gtOptions.numberOfRows\n\t\t) {\n\t\t\t// ...update record length and redraw table\n\t\t\tthis.gtInfo.recordLength = this.gtOptions.numberOfRows;\n\t\t\tthis.redraw();\n\t\t}\n\n\t\t// ...extend gtOptions default values with values passed into component\n\t\tthis._gtOptions = <GtOptions>this.extend(\n\t\t\tthis.gtDefaultOptions,\n\t\t\tthis._gtOptions\n\t\t);\n\t}\n\n\t@Input()\n\tset gtTotals(value: any) {\n\t\tthis._gtTotals = value;\n\t}\n\t@Input()\n\tset gtFields(value: GtConfigField<R, any>[]) {\n\t\tthis._gtFields = value;\n\t\tconst COLUMNS_WITH_CLASS_NAMES = this._gtFields\n\t\t\t.map(column => column)\n\t\t\t.filter(column => column.classNames);\n\t\t// TODO: remove deprecated warning when setting has been removed\n\t\tif (COLUMNS_WITH_CLASS_NAMES.length > 0) {\n\t\t\tconsole.warn(\n\t\t\t\t'Field setting \"classNames\" have been deprecated in favor for \"columnClass\" and will be removed in the future, please update field settings for column with object key: ' +\n\t\t\t\t\tCOLUMNS_WITH_CLASS_NAMES[0].objectKey\n\t\t\t);\n\t\t}\n\t}\n\t@Input()\n\tset gtSettings(value: GtConfigSetting[]) {\n\t\tthis._gtSettings = value;\n\n\t\t// loop through current settings\n\t\tfor (let i = 0; i < this._gtSettings.length; i++) {\n\t\t\t// set sort enabled/disabled setting\n\t\t\tthis._gtSettings[i].sortEnabled =\n\t\t\t\tthis._gtSettings[i].sortEnabled !== false\n\t\t\t\t\t? (this._gtSettings[i].sortEnabled = !(\n\t\t\t\t\t\t\tthis._gtSettings[i].sort &&\n\t\t\t\t\t\t\tthis._gtSettings[i].sort.indexOf('disable') !== -1\n\t\t\t\t\t ))\n\t\t\t\t\t: false;\n\n\t\t\t// check if sorting is undefined...\n\t\t\tif (typeof this._gtSettings[i].sort === 'undefined') {\n\t\t\t\t// ...is so, set sorting property to enable\n\t\t\t\tthis._gtSettings[i].sort = 'enable';\n\t\t\t}\n\n\t\t\t// check if column order is undefined...\n\t\t\tif (\n\t\t\t\ttypeof this._gtSettings[i].columnOrder === 'undefined' &&\n\t\t\t\tthis._gtSettings[i].enabled !== false\n\t\t\t) {\n\t\t\t\t// ...is so, set sorting property to enable\n\t\t\t\tthis._gtSettings[i].columnOrder = this._gtSettings[i - 1]\n\t\t\t\t\t? this._gtSettings[i - 1].columnOrder + 1\n\t\t\t\t\t: 0;\n\t\t\t}\n\n\t\t\t// check if column lock settings are undefined...\n\t\t\tif (typeof this._gtSettings[i].lockSettings === 'undefined') {\n\t\t\t\t// ...if so, set lock settings to false unless field is disabled (enable === false)\n\t\t\t\tthis._gtSettings[i].lockSettings =\n\t\t\t\t\tthis._gtSettings[i].enabled === false || false;\n\t\t\t}\n\t\t}\n\t\tthis.restructureSorting();\n\t}\n\t@Input()\n\tset gtData(initialData: Array<any>) {\n\t\tconst data = this._gtOptions.mutateData\n\t\t\t? [...initialData]\n\t\t\t: this.cloneDeep(initialData);\n\t\tif (this.gtOptions.lazyLoad && this.gtInfo) {\n\t\t\tthis.gtMetaPipe.transform(\n\t\t\t\tdata,\n\t\t\t\tthis.gtOptions.rowIndex,\n\t\t\t\tthis.gtInfo.pageCurrent - 1,\n\t\t\t\tthis.gtInfo.recordLength\n\t\t\t);\n\t\t\tif (this.lazyAllSelected) {\n\t\t\t\tconst UNIQUE_ROWS = this.selectedRows.map(row => row.$$gtRowId);\n\t\t\t\tdata.map(row => {\n\t\t\t\t\tif (UNIQUE_ROWS.indexOf(row.$$gtRowId) === -1) {\n\t\t\t\t\t\tthis.selectedRows.push(row);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis._updateMetaInfo(this.selectedRows, 'isSelected', true);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.gtMetaPipe.transform(data, this.gtOptions.rowIndex);\n\t\t}\n\t\tif (this.gtOptions.rowSelectionInitialState) {\n\t\t\tdata.map(row => {\n\t\t\t\tconst selected =\n\t\t\t\t\ttypeof this.gtOptions.rowSelectionInitialState === 'function'\n\t\t\t\t\t\t? this.gtOptions.rowSelectionInitialState(row)\n\t\t\t\t\t\t: this.gtOptions.rowSelectionInitialState;\n\t\t\t\tif (selected) {\n\t\t\t\t\tif (typeof this.metaInfo[row.$$gtRowId] === 'undefined') {\n\t\t\t\t\t\tthis.metaInfo[row.$$gtRowId] = { isSelected: true };\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.metaInfo[row.$$gtRowId].isSelected = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis.selectedRows.push(row);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (\n\t\t\tthis.gtOptions.rowExpandInitialState &&\n\t\t\tthis.gtOptions.rowExpandInitialComponent\n\t\t) {\n\t\t\tdata.map(row => {\n\t\t\t\tconst expanded =\n\t\t\t\t\ttypeof this.gtOptions.rowExpandInitialState === 'function'\n\t\t\t\t\t\t? this.gtOptions.rowExpandInitialState(row)\n\t\t\t\t\t\t: this.gtOptions.rowExpandInitialState;\n\t\t\t\tthis.expandedRow = this.gtOptions.rowExpandInitialComponent;\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tif (typeof this.metaInfo[row.$$gtRowId] === 'undefined') {\n\t\t\t\t\t\tthis.metaInfo[row.$$gtRowId] = { isOpen: true };\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.metaInfo[row.$$gtRowId].isOpen = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis._gtData = data;\n\t}\n\n\t@Input()\n\tset gtRowComponent(value: Type<C>) {\n\t\tconsole.warn(\n\t\t\t'GtRowComponent has been deprecated and support will be removed in a future release, see https://github.com/hjalmers/angular-generic-table/issues/34'\n\t\t);\n\t\tthis._gtRowComponent = value;\n\t}\n\n\tpublic columnWidth: Object = {};\n\tpublic configObject: GtConfig<R>;\n\tpublic sortOrder: Array<any> = [];\n\tpublic metaInfo: { [gtRowId: string]: GtRowMeta } = {};\n\tpublic selectedRows: Array<GtRow> = [];\n\tpublic openRows: Array<GtRow> = [];\n\tprivate _gtSettings: GtConfigSetting[] = [];\n\tprivate _gtFields: GtConfigField<R, any>[] = [];\n\tprivate _gtData: Array<any>;\n\tprivate _gtTotals: any;\n\tprivate _gtRowComponent: Type<C>;\n\tpublic expandedRow: {\n\t\tcomponent: Type<C>;\n\t\tdata?: Array<any>;\n\t};\n\tpublic gtDefaultTexts: GtTexts = {\n\t\tloading: 'Loading...',\n\t\tnoData: 'No data',\n\t\tnoMatchingData: 'No data matching results found',\n\t\tnoVisibleColumnsHeading: 'No visible columns',\n\t\tnoVisibleColumns: 'Please select at least one column to be visible.',\n\t\ttableInfo:\n\t\t\t'Showing #recordFrom to #recordTo of #recordsAfterSearch entries.',\n\t\ttableInfoAfterSearch:\n\t\t\t'Showing #recordFrom to #recordTo of #recordsAfterSearch entries (filtered from a total of #recordsAll entries).',\n\t\tcsvDownload: 'download',\n\t\tsortLabel: 'Sort:',\n\t\tpaginateNext: 'Next page',\n\t\tpaginatePrevious: 'Previous page',\n\t\tinlineEditEdited: 'Press enter to save'\n\t};\n\t@Input() gtTexts: GtTexts = this.gtDefaultTexts;\n\t@Input() gtClasses: string;\n\t@Output() gtEvent: EventEmitter<GtEvent> = new EventEmitter();\n\tpublic gtDefaultOptions: GtOptions = {\n\t\tcsvDelimiter: ';',\n\t\tstack: false,\n\t\tlazyLoad: false,\n\t\tcache: false,\n\t\tdebounceTime: 200,\n\t\thighlightSearch: false,\n\t\trowSelection: false,\n\t\trowSelectionAllowMultiple: true,\n\t\trowExpandAllowMultiple: true,\n\t\tnumberOfRows: 10,\n\t\treportColumnWidth: false,\n\t\tallowUnsorted: true,\n\t\tmutateData: true\n\t};\n\tprivate _gtOptions: GtOptions = this.gtDefaultOptions;\n\tpublic store: Array<any> = [];\n\tpublic loading = true;\n\tprivate debounceTimer: void = null;\n\tpublic loadingProperty: string;\n\tpublic lazyAllSelected = false;\n\n\t@Input()\n\tgtInfo: GtInformation = {\n\t\tpageCurrent: 1,\n\t\tpageTotal: 0,\n\t\trecordFrom: 0,\n\t\trecordTo: 0,\n\t\trecordLength: this.gtOptions.numberOfRows,\n\t\trecordsAll: 0,\n\t\trecordsAfterFilter: 0,\n\t\trecordsAfterSearch: 0\n\t};\n\n\tpublic refreshPipe = false;\n\tpublic refreshTotals = false;\n\tpublic refreshSorting = false;\n\tpublic refreshFilter = false;\n\tpublic refreshPageArray = false;\n\tprivate globalInlineEditListener: Function;\n\tpublic editedRows: {\n\t\t[key: string]: {\n\t\t\tchanges: { [key: string]: GtRenderField<GtRow, any> };\n\t\t\trow: GtRow;\n\t\t};\n\t} = {};\n\n\tpublic data: { exportData: Array<any> } = { exportData: [] }; // Store filtered data for export\n\n\tconstructor(private renderer: Renderer2, private gtMetaPipe: GtMetaPipe) {\n\t\tthis.gtEvent.subscribe(($event: GtEvent) => {\n\t\t\tif ($event.name === 'gt-info') {\n\t\t\t\tthis.updateRecordRange();\n\t\t\t}\n\t\t\tif ($event.name === 'gt-row-updated') {\n\t\t\t\tthis.updateTotals();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Sort table by object key.\n\t * @param objectKey - name of key to sort on.\n\t * @param event - such as key press during sorting.\n\t */\n\tpublic gtSort = function(objectKey: string, event: any) {\n\t\tthis.inlineEditCancel(); // cancel inline editing\n\n\t\t// loop through current settings\n\t\tfor (let i = 0; i < this._gtSettings.length; i++) {\n\t\t\tif (this._gtSettings[i].objectKey === objectKey) {\n\t\t\t\t// check if sorting is disabled...\n\t\t\t\tif (\n\t\t\t\t\tthis._gtSettings[i].sort &&\n\t\t\t\t\tthis._gtSettings[i].sort.indexOf('disable') !== -1\n\t\t\t\t) {\n\t\t\t\t\t// ...if so, exit function without applying any sorting\n\t\t\t\t\treturn;\n\t\t\t\t} else if (\n\t\t\t\t\t/* check if sorting is undefined... */ typeof this._gtSettings[i]\n\t\t\t\t\t\t.sort === 'undefined'\n\t\t\t\t) {\n\t\t\t\t\t// ...is so, set sorting property to enable\n\t\t\t\t\tthis._gtSettings[i].sort = 'enable';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// check length\n\t\tconst ctrlKey = event.metaKey || event.ctrlKey;\n\t\tconst sort = this.sortOrder.slice(0);\n\n\t\tlet match = -1;\n\t\tlet matchDesc = -1;\n\t\tlet pos = -1;\n\n\t\t// check if property already exits\n\t\tfor (let i = 0; i < sort.length; i++) {\n\t\t\tconst hit = sort[i].indexOf(objectKey);\n\t\t\tif (hit !== -1) {\n\t\t\t\tmatch = this.sortOrder.indexOf(objectKey);\n\t\t\t\tmatchDesc =\n\t\t\t\t\tmatch === -1 ? this.sortOrder.indexOf('-' + objectKey) : match;\n\t\t\t\tpos = Math.max(match, matchDesc);\n\t\t\t}\n\t\t}\n\n\t\t// if ctrl key or meta key is press together with sort...\n\t\tif (ctrlKey) {\n\t\t\tif (this.sortOrder[this.sortOrder.length - 1] === '$$gtInitialRowIndex') {\n\t\t\t\tthis.sortOrder.pop();\n\t\t\t}\n\t\t\tswitch (pos) {\n\t\t\t\t// ...and property is not sorted before...\n\t\t\t\tcase -1:\n\t\t\t\t\t// ...add property to sorting\n\t\t\t\t\tthis.sortOrder.push(objectKey);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// ...and property is sorted before...\n\t\t\t\t\tif (match !== -1) {\n\t\t\t\t\t\t// ...change from asc to desc if sorted asc\n\t\t\t\t\t\tthis.sortOrder[pos] = '-' + objectKey;\n\t\t\t\t\t} else if (this.sortOrder.length > 1) {\n\t\t\t\t\t\t// ...remove sorting if sorted desc\n\t\t\t\t\t\tif (ctrlKey) {\n\t\t\t\t\t\t\tthis.sortOrder[pos] = objectKey;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.sortOrder.splice(pos, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this.sortOrder.length === 1) {\n\t\t\t\t\t\t// ...set sorting to asc if only sorted property\n\t\t\t\t\t\tthis.sortOrder[pos] = objectKey;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\t/* if ctrl key or meta key is not press together with sort... */\n\t\t\tswitch (pos) {\n\t\t\t\t// ...and property is not sorted before...\n\t\t\t\tcase -1:\n\t\t\t\t\t// ...sort by property\n\t\t\t\t\tthis.sortOrder = [objectKey];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// ...change from desc to asc and vise versa\n\t\t\t\t\tthis.sortOrder =\n\t\t\t\t\t\tmatch !== -1\n\t\t\t\t\t\t\t? ['-' + objectKey]\n\t\t\t\t\t\t\t: ctrlKey || !this.gtOptions.allowUnsorted\n\t\t\t\t\t\t\t\t? [objectKey]\n\t\t\t\t\t\t\t\t: [];\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// update settings object with new sorting information\n\t\tfor (let i = 0; i < this._gtSettings.length; i++) {\n\t\t\tif (this._gtSettings[i].objectKey === objectKey) {\n\t\t\t\tswitch (this._gtSettings[i].sort) {\n\t\t\t\t\t// if sorted asc...\n\t\t\t\t\tcase 'asc':\n\t\t\t\t\t\t// ...change to desc\n\t\t\t\t\t\tthis._gtSettings[i].sort = 'desc';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t// if sorted desc...\n\t\t\t\t\tcase 'desc':\n\t\t\t\t\t\t// ...change to asc if it's the only sorted property otherwise remove sorting\n\t\t\t\t\t\tthis._gtSettings[i].sort =\n\t\t\t\t\t\t\t(this.sortOrder.length === 1 && sort.length < 2) ||\n\t\t\t\t\t\t\tctrlKey ||\n\t\t\t\t\t\t\t!this.gtOptions.allowUnsorted\n\t\t\t\t\t\t\t\t? 'asc'\n\t\t\t\t\t\t\t\t: 'enable';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t// if sorting enabled...\n\t\t\t\t\tcase 'enable':\n\t\t\t\t\t\t// ...change to asc\n\t\t\t\t\t\tthis._gtSettings[i].sort = 'asc';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis._gtSettings[i].sortOrder =\n\t\t\t\t\tthis._gtSettings[i].sort === 'enable'\n\t\t\t\t\t\t? this._gtSettings.length - 1\n\t\t\t\t\t\t: this.sortOrder.indexOf(objectKey) === -1\n\t\t\t\t\t\t\t? this.sortOrder.indexOf('-' + objectKey)\n\t\t\t\t\t\t\t: this.sortOrder.indexOf(objectKey);\n\t\t\t} else if (\n\t\t\t\tthis._gtSettings[i].sort &&\n\t\t\t\tthis._gtSettings[i].sort.indexOf('disable') === -1 &&\n\t\t\t\tthis.sortOrder.indexOf(this._gtSettings[i].objectKey) === -1 &&\n\t\t\t\tthis.sortOrder.indexOf('-' + this._gtSettings[i].objectKey) === -1\n\t\t\t) {\n\t\t\t\tthis._gtSettings[i].sort = 'enable';\n\t\t\t\tthis._gtSettings[i].sortOrder = this._gtSettings.length - 1;\n\t\t\t}\n\t\t}\n\n\t\t// refresh sorting pipe\n\t\tthis.refreshSorting = !this.refreshSorting;\n\t\tthis.refreshPageArray = !this.refreshPageArray;\n\n\t\t// sort by initial sort order as last resort\n\t\tthis.sortOrder.push('$$gtInitialRowIndex');\n\n\t\t// emit sort event\n\t\tthis.gtEvent.emit({\n\t\t\tname: 'gt-sorting-applied',\n\t\t\tvalue: this.sortOrder\n\t\t});\n\t};\n\n\t/**\n\t * Change number of rows to be displayed.\n\t * @param rowLength - total number of rows.\n\t * @param reset - should page be reset to first page.\n\t */\n\tpublic changeRowLength = function(rowLength: any, reset?: boolean) {\n\t\tlet lengthValue = isNaN(parseInt(rowLength, 10))\n\t\t\t? 0\n\t\t\t: parseInt(rowLength, 10);\n\t\tlet newPosition = 1;\n\n\t\tif (!lengthValue && this.gtData) {\n\t\t\tlengthValue = this.gtData.length;\n\t\t}\n\n\t\t// if reset is not true and we're not lazy loading data...\n\t\tif (reset !== true && this._gtOptions.lazyLoad !== true) {\n\t\t\t// ...get current position in record set\n\t\t\tconst currentRecord =\n\t\t\t\tthis.gtInfo.recordLength * (this.gtInfo.pageCurrent - 1);\n\t\t\tconst currentPosition =\n\t\t\t\tthis._gtData.indexOf(this._gtData[currentRecord]) + 1;\n\n\t\t\t// ...get new position\n\t\t\tnewPosition = Math.ceil(currentPosition / lengthValue);\n\t\t}\n\n\t\t// change row length\n\t\tthis.gtInfo.recordLength = lengthValue;\n\n\t\t// go to new position\n\t\tthis.gtInfo.pageCurrent = newPosition;\n\n\t\t// if lazy loading data...\n\t\tif (this._gtOptions.lazyLoad) {\n\t\t\t// ...replace data with place holders for new data\n\t\t\tthis._gtData[0] = this.loadingContent(lengthValue);\n\n\t\t\t// ...empty current store\n\t\t\tthis.store = [];\n\t\t}\n\n\t\t// this.updateRecordRange();\n\n\t\tthis.gtEvent.emit({\n\t\t\tname: 'gt-row-length-changed',\n\t\t\tvalue: lengthValue\n\t\t});\n\t};\n\n\t/**\n\t * Force a redraw of table rows.\n\t * As the table uses pure pipes, we need to force a redraw if an object in the array is changed to see the changes.\n\t */\n\tpublic redraw = function($event?: any) {\n\t\tthis.refreshSorting = !this.refreshSorting;\n\t\tthis.refreshPageArray = !this.refreshPageArray;\n\t\tthis.refreshPipe = !this.refreshPipe;\n\t};\n\n\t/** Update record range. */\n\tprivate updateRecordRange() {\n\t\tthis.gtInfo.recordFrom =\n\t\t\tthis.gtInfo.recordsAfterSearch === 0\n\t\t\t\t? 0\n\t\t\t\t: (this.gtInfo.pageCurrent - 1) * this.gtInfo.recordLength + 1;\n\t\tthis.gtInfo.recordTo =\n\t\t\tthis.gtInfo.recordsAfterSearch <\n\t\t\tthis.gtInfo.pageCurrent * this.gtInfo.recordLength\n\t\t\t\t? this.gtInfo.recordsAfterSearch\n\t\t\t\t: this.gtInfo.pageCurrent * this.gtInfo.recordLength;\n\t}\n\n\t/** Update totals. */\n\tprivate updateTotals() {\n\t\tthis.refreshTotals = !this.refreshTotals;\n\t}\n\n\t/** Go to next page. */\n\tpublic nextPage = function() {\n\t\tconst page =\n\t\t\tthis.gtInfo.pageCurrent === this.gtInfo.pageTotal\n\t\t\t\t? this.gtInfo.pageTotal\n\t\t\t\t: this.gtInfo.pageCurrent + 1;\n\t\tthis.goToPage(page);\n\t};\n\n\t/** Go to previous page. */\n\tpublic previousPage = function() {\n\t\tconst page =\n\t\t\tthis.gtInfo.pageCurrent === 1 ? 1 : this.gtInfo.pageCurrent - 1;\n\t\tthis.goToPage(page);\n\t};\n\n\t/** Request more data (used when lazy loading) */\n\tprivate getData = function() {\n\t\t// ...emit event requesting for more data\n\t\tthis.gtEvent.emit({\n\t\t\tname: 'gt-page-changed-lazy',\n\t\t\tvalue: {\n\t\t\t\tpageCurrent: this.gtInfo.pageCurrent,\n\t\t\t\trecordLength: this.gtInfo.recordLength\n\t\t\t}\n\t\t});\n\t};\n\n\t/**\n\t * Go to specific page.\n\t * @param page - page number.\n\t */\n\tpublic goToPage = function(page: number) {\n\t\tconst previousPage = this.gtInfo.pageCurrent;\n\t\tthis.gtInfo.pageCurrent = page;\n\t\tthis.inlineEditCancel(); // cancel inline edit\n\n\t\t// if lazy loading and if page contains no records...\n\t\tif (this._gtOptions.lazyLoad) {\n\t\t\t// ...if data for current page contains no entries...\n\t\t\tif (\n\t\t\t\tthis._gtOptions.cache === false ||\n\t\t\t\tthis._gtData[this.gtInfo.pageCurrent - 1].length === 0\n\t\t\t) {\n\t\t\t\t// ...create temporary content while waiting for data\n\t\t\t\tthis._gtData[this.gtInfo.pageCurrent - 1] = this.loadingContent(\n\t\t\t\t\tthis.gtInfo.recordLength\n\t\t\t\t);\n\t\t\t\tthis.loading = true; // loading true\n\t\t\t}\n\t\t\t// ...if first entry in current page equals our loading placeholder...\n\t\t\tif (\n\t\t\t\tthis._gtData[this.gtInfo.pageCurrent - 1][0][this.loadingProperty] ===\n\t\t\t\tthis.gtTexts.loading\n\t\t\t) {\n\t\t\t\t// ...get data\n\t\t\t\tclearTimeout(this.debounceTimer);\n\t\t\t\tthis.debounceTimer = setTimeout(() => {\n\t\t\t\t\tthis.getData();\n\t\t\t\t}, this._gtOptions.debounceTime);\n\t\t\t}\n\t\t}\n\n\t\t// this.updateRecordRange();\n\n\t\t// ...emit page change event\n\t\tif (previousPage !== page) {\n\t\t\tthis.gtEvent.emit({\n\t\t\t\tname: 'gt-page-changed',\n\t\t\t\tvalue: {\n\t\t\t\t\tpageCurrent: this.gtInfo.pageCurrent,\n\t\t\t\t\tpagePrevious: previousPage,\n\t\t\t\t\trecordLength: this.gtInfo.recordLength\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Get meta data for row.\n\t */\n\tpublic getRowState(row: R): GtRowMeta {\n\t\treturn typeof this.metaInfo[row.$$gtRowId] === 'undefined'\n\t\t\t? null\n\t\t\t: this.metaInfo[row.$$gtRowId];\n\t}\n\n\t/**\n\t * Expand all rows.\n\t * @param expandedRow - component to render when rows are expanded.\n\t */\n\tpublic expandAllRows(expandedRow: { component: Type<C>; data?: any }): void {\n\t\tthis.expandedRow = expandedRow;\n\t\tthis._toggleAllRowProperty('isOpen', true);\n\t}\n\n\t/**\n\t * Collapse all rows.\n\t */\n\tpublic collapseAllRows(): void {\n\t\tthis._toggleAllRowProperty('isOpen', false);\n\t}\n\n\t/**\n\t * Select all rows.\n\t */\n\tpublic selectAllRows(): void {\n\t\tthis._toggleAllRowProperty('isSelected', true);\n\t}\n\n\t/**\n\t * Deselect all rows.\n\t */\n\tpublic deselectAllRows(): void {\n\t\tthis._toggleAllRowProperty('isSelected', false);\n\t}\n\t/**\n\t * Toggle all rows.\n\t */\n\tpublic toggleAllRows(): void {\n\t\tif (this._gtOptions.lazyLoad) {\n\t\t\tif (!this.lazyAllSelected || this.selectedRows.length === 0) {\n\t\t\t\tthis.selectAllRows();\n\t\t\t\tthis.lazyAllSelected = true;\n\t\t\t} else {\n\t\t\t\tthis.deselectAllRows();\n\t\t\t\tthis.lazyAllSelected = false;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.selectedRows.length !== this.gtData.length) {\n\t\t\t\tthis.selectAllRows();\n\t\t\t} else {\n\t\t\t\tthis.deselectAllRows();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Toggle row collapsed state ie. expanded/open or collapsed/closed.\n\t * @param row - row object that should be expanded/collapsed.\n\t * @param expandedRow - component to render when row is expanded.\n\t */\n\tpublic toggleCollapse(\n\t\trow: GtRow,\n\t\texpandedRow?: { component: Type<C>; data?: any }\n\t) {\n\t\tif (expandedRow) {\n\t\t\tthis.expandedRow = expandedRow;\n\t\t}\n\t\tthis._toggleRowProperty(row, 'isOpen');\n\t}\n\n\t/**\n\t * Toggle row selected state ie. selected or not.\n\t * @param row - row object that should be selected/deselected.\n\t */\n\tpublic toggleSelect(row: GtRow) {\n\t\tthis._toggleRowProperty(row, 'isSelected');\n\t}\n\n\tpublic rowClick(row: GtRow, $event: MouseEvent) {\n\t\tthis.gtEvent.emit({\n\t\t\tname: 'gt-row-clicked',\n\t\t\tvalue: { row: row, event: $event }\n\t\t});\n\t}\n\n\t/**\n\t * Update row data.\n\t * @param row - row object that has been edited.\n\t * @param oldValue - row object before edit.\n\t */\n\tpublic updateRow(row: GtRow, oldValue: GtRow) {\n\t\tthis._toggleRowProperty(row, 'isUpdated', oldValue);\n\t}\n\n\t/**\n\t * removes a row from the table\n\t * @param row - the row object to remove\n\t */\n\tpublic removeRow(row: GtRow) {\n\t\tif (this.isRowSelected(row)) {\n\t\t\tthis.toggleSelect(row);\n\t\t}\n\t\tconst index = this._gtData.indexOf(row);\n\t\tthis._gtData.splice(index, 1);\n\t}\n\n\t/**\n\t * check if a row is selected\n\t * @param row - row object\n\t */\n\tpublic isRowSelected(row: GtRow): boolean {\n\t\treturn (\n\t\t\tthis.metaInfo[row.$$gtRowId] && this.metaInfo[row.$$gtRowId].isSelected\n\t\t);\n\t}\n\n\t/**\n\t * Update meta info for all rows, ie. isSelected, isOpen.\n\t * @param array - array that holds rows that need to be updated.\n\t * @param property - name of property that should be changed/toggled.\n\t * @param active - should rows be expanded/open, selected.\n\t * @param exception - update all rows except this one.\n\t */\n\tprivate _updateMetaInfo(\n\t\tarray: Array<GtRow>,\n\t\tproperty: string,\n\t\tactive: boolean,\n\t\texception?: GtRow\n\t) {\n\t\tfor (let i = 0; i < array.length; i++) {\n\t\t\tif (!this.metaInfo[array[i].$$gtRowId]) {\n\t\t\t\tthis.metaInfo[array[i].$$gtRowId] = {};\n\t\t\t}\n\t\t\tif (exception && array[i].$$gtRowId === exception.$$gtRowId) {\n\t\t\t} else {\n\t\t\t\tthis.metaInfo[array[i].$$gtRowId][property] = active;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Push selected/expanded lazy loaded rows to array with meta data.\n\t * @param target - array to which rows should be added.\n\t * @param source - array that holds rows that should be added.\n\t * @returns array with added rows.\n\t */\n\tprivate _pushLazyRows(\n\t\ttarget: Array<GtRow>,\n\t\tsource: Array<GtRow>\n\t): Array<GtRow> {\n\t\tconst UNIQUE_ROWS = target.map(row => row.$$gtRowId);\n\t\tfor (let i = 0; i < source.length; i++) {\n\t\t\t// only add if not already in list\n\t\t\tif (UNIQUE_ROWS.indexOf(source[i].$$gtRowId) === -1) {\n\t\t\t\ttarget.push(source[i]);\n\t\t\t}\n\t\t}\n\t\treturn target;\n\t}\n\n\t/**\n\t * Toggle meta info for all rows, ie. isSelected, isOpen.\n\t * @param property - name of property that should be changed/toggled.\n\t * @param active - should rows be expanded/open, selected.\n\t */\n\tprivate _toggleAllRowProperty(property: string, active: boolean) {\n\t\tlet eventName: string;\n\t\tlet eventValue: any;\n\t\tswitch (property) {\n\t\t\tcase 'isOpen':\n\t\t\t\t// check if multiple expanded rows are allowed...\n\t\t\t\tif (this._gtOptions.rowExpandAllowMultiple === false) {\n\t\t\t\t\t// ...if not, exit function\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t'feature disabled: enable by setting \"rowExpandAllowMultiple = true\"'\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (active) {\n\t\t\t\t\teventName = 'expand-all';\n\t\t\t\t\tthis.openRows = this._gtOptions.lazyLoad\n\t\t\t\t\t\t? this._pushLazyRows(\n\t\t\t\t\t\t\t\tthis.openRows,\n\t\t\t\t\t\t\t\tthis._gtData[this.gtInfo.pageCurrent - 1].slice()\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: this._gtData.slice();\n\t\t\t\t\tthis._updateMetaInfo(this.openRows, property, active);\n\t\t\t\t} else {\n\t\t\t\t\teventName = 'collapse-all';\n\t\t\t\t\tthis._updateMetaInfo(this.openRows, property, active);\n\t\t\t\t\tthis.openRows = [];\n\t\t\t\t}\n\t\t\t\teventValue = {\n\t\t\t\t\texpandedRows: this.openRows,\n\t\t\t\t\tchangedRow: 'all'\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'isSelected':\n\t\t\t\t// check if multi row selection is allowed...\n\t\t\t\tif (this._gtOptions.rowSelectionAllowMultiple === false) {\n\t\t\t\t\t// ...if not, exit function\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t'feature disabled: enable by setting \"rowSelectionAllowMultiple = true\"'\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (active) {\n\t\t\t\t\teventName = 'select-all';\n\t\t\t\t\tthis.selectedRows = this._gtOptions.lazyLoad\n\t\t\t\t\t\t? this._pushLazyRows(\n\t\t\t\t\t\t\t\tthis.selectedRows,\n\t\t\t\t\t\t\t\tthis._gtData[this.gtInfo.pageCurrent - 1].slice()\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: this._gtData.slice();\n\t\t\t\t\tthis._updateMetaInfo(this.selectedRows, property, active);\n\t\t\t\t} else {\n\t\t\t\t\teventName = 'deselect-all';\n\t\t\t\t\tthis._updateMetaInfo(this.selectedRows, property, active);\n\t\t\t\t\tthis.selectedRows = [];\n\t\t\t\t}\n\t\t\t\teventValue = {\n\t\t\t\t\tselectedRows: this.selectedRows,\n\t\t\t\t\tchangedRow: 'all'\n\t\t\t\t};\n\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.gtEvent.emit({\n\t\t\tname: 'gt-row-' + eventName,\n\t\t\tvalue: eventValue\n\t\t});\n\t}\n\n\t/**\n\t * Toggle meta info for row, ie. isSelected, isOpen.\n\t * @param row - row object.\n\t * @param property - name of property that should be changed/toggled.\n\t * @param propertyValues - optional property values that can be passed.\n\t */\n\tprivate _toggleRowProperty(\n\t\trow: GtRow,\n\t\tproperty: string,\n\t\tpropertyValues?: any\n\t) {\n\t\tlet eventName: string;\n\t\tlet eventValue: any;\n\t\t// make sure gtRowId exists on row object\n\t\tif (typeof row.$$gtRowId !== 'undefined') {\n\t\t\t// check if meta info exists for row\n\t\t\tif (!this.metaInfo[row.$$gtRowId]) {\n\t\t\t\t// if not, add object to store meta info\n\t\t\t\tthis.metaInfo[row.$$gtRowId] = {};\n\t\t\t}\n\n\t\t\tswitch (property) {\n\t\t\t\tcase 'isOpen':\n\t\t\t\t\tconst opened = this.metaInfo[row.$$gtRowId][property];\n\n\t\t\t\t\t// check if multiple expanded rows are allowed...\n\t\t\t\t\tif (this._gtOptions.rowExpandAllowMultiple === false) {\n\t\t\t\t\t\t// ...if not, collapse all rows except current row\n\t\t\t\t\t\tthis._updateMetaInfo(this.openRows, property, false, row);\n\t\t\t\t\t\tthis.openRows = [];\n\t\t\t\t\t}\n\n\t\t\t\t\t// check if row is expanded\n\t\t\t\t\tif (!opened) {\n\t\t\t\t\t\teventName = 'expand';\n\t\t\t\t\t\t// add row to expanded rows\n\t\t\t\t\t\tthis.openRows.push(row);\n\t\t\t\t\t} else {\n\t\t\t\t\t\teventName = 'collapse';\n\t\t\t\t\t\t// loop through expanded rows...\n\t\t\t\t\t\tfor (let i = 0; i < this.openRows.length; i++) {\n\t\t\t\t\t\t\t// if expanded row equals passed row...\n\t\t\t\t\t\t\tif (this.openRows[i].$$gtRowId === row.$$gtRowId) {\n\t\t\t\t\t\t\t\t// ...remove row from expanded rows...\n\t\t\t\t\t\t\t\tthis.openRows.splice(i, 1);\n\n\t\t\t\t\t\t\t\t// ...and exit loop\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\teventValue = {\n\t\t\t\t\t\texpandedRows: this.openRows,\n\t\t\t\t\t\tchangedRow: row\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'isSelected':\n\t\t\t\t\tconst selected = this.metaInfo[row.$$gtRowId][property];\n\n\t\t\t\t\t// check if multi row selection is allowed...\n\t\t\t\t\tif (this._gtOptions.rowSelectionAllowMultiple === false) {\n\t\t\t\t\t\t// ...if not, deselect all rows except current row\n\t\t\t\t\t\tthis._updateMetaInfo(this.selectedRows, property, false, row);\n\t\t\t\t\t\tthis.selectedRows = [];\n\t\t\t\t\t}\n\n\t\t\t\t\t// check if row is selected\n\t\t\t\t\tif (!selected) {\n\t\t\t\t\t\teventName = 'select';\n\t\t\t\t\t\t// add row to selected rows\n\t\t\t\t\t\tthis.selectedRows.push(row);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (this.gtOptions.lazyLoad && this.lazyAllSelected) {\n\t\t\t\t\t\t\tthis.lazyAllSelected = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\teventName = 'deselect';\n\t\t\t\t\t\t// loop through selected rows...\n\t\t\t\t\t\tfor (let i = 0; i < this.selectedRows.length; i++) {\n\t\t\t\t\t\t\t// if selected row equals passed row...\n\t\t\t\t\t\t\tif (this.selectedRows[i].$$gtRowId === row.$$gtRowId) {\n\t\t\t\t\t\t\t\t// ...remove row from selected rows...\n\t\t\t\t\t\t\t\tthis.selectedRows.splice(i, 1);\n\n\t\t\t\t\t\t\t\t// ...and exit loop\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\teventValue = {\n\t\t\t\t\t\tselectedRows: this.selectedRows,\n\t\t\t\t\t\tchangedRow: row\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'isUpdated':\n\t\t\t\t\teventName = 'updated';\n\t\t\t\t\tconst oldValue = propertyValues;\n\t\t\t\t\t// check if edit object exists for row\n\t\t\t\t\tif (typeof this.metaInfo[row.$$gtRowId][property] === 'undefined') {\n\t\t\t\t\t\tthis.metaInfo[row.$$gtRowId][property] = {\n\t\t\t\t\t\t\toriginalValue: oldValue,\n\t\t\t\t\t\t\toldValue: oldValue,\n\t\t\t\t\t\t\tnewValue: row\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.metaInfo[row.$$gtRowId][property].oldValue = oldValue;\n\t\t\t\t\t\tthis.metaInfo[row.$$gtRowId][property].newValue = row;\n\t\t\t\t\t}\n\t\t\t\t\teventValue = this.metaInfo[row.$$gtRowId][property];\n\t\t\t\t\tthis.redraw();\n\t\t\t\t\tthis.inlineEditCancel(row);\n\t\t\t\t\t// this.gtData = [...this.gtData.map((r) => { return{...r}; })];\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.gtEvent.emit({\n\t\t\t\tname: 'gt-row-' + eventName,\n\t\t\t\tvalue: eventValue\n\t\t\t});\n\t\t\tif (property !== 'isUpdated') {\n\t\t\t\tthis.metaInfo[row.$$gtRowId][property] = !this.metaInfo[row.$$gtRowId][\n\t\t\t\t\tproperty\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Update column.\n\t * @param $event - key up event.\n\t * @param row - row object.\n\t * @param column - column object.\n\t */\n\tpublic gtUpdateColumn(\n\t\t$event: KeyboardEvent,\n\t\trow: GtRow,\n\t\tcolumn: GtRenderField<any, any>\n\t) {\n\t\tthis._editRow(row, column);\n\t}\n\n\t/**\n\t * Dropdown select.\n\t * @param row - row object.\n\t * @param column - column object.\n\t */\n\tpublic gtDropdownSelect(row: GtRow, column: GtRenderField<any, any>) {\n\t\tconst oldValue = { ...row };\n\t\trow[column.objectKey] = column.renderValue;\n\t\tthis.updateRow(row, oldValue);\n\t}\n\n\tprivate _editRow(row: GtRow, column: GtRenderField<any, any>) {\n\t\tconst OBJECT_KEY = column.objectKey; // declare object key which contains changes\n\n\t\t// check if cell has changed value\n\t\tcolumn.edited = row[column.objectKey] !== column.renderValue;\n\t\t// check if row contains changes...\n\t\tif (!this.editedRows[row.$$gtRowId]) {\n\t\t\t// if not, create an object for the changed row\n\t\t\tthis.editedRows[row.$$gtRowId] = {\n\t\t\t\tchanges: {}, // create placeholder for changes\n\t\t\t\trow: row // store reference to the row that should be updated\n\t\t\t};\n\t\t}\n\n\t\t// store changed column under changes if it has been edited\n\t\tif (column.edited) {\n\t\t\tthis.editedRows[row.$$gtRowId].changes[OBJECT_KEY] = column;\n\t\t} else {\n\t\t\t// delete change object if column is unchanged\n\t\t\tdelete this.editedRows[row.$$gtRowId].changes[OBJECT_KEY];\n\t\t\t// check how many columns have been changed\n\t\t\tconst CHANGED_COLUMNS = Object.keys(\n\t\t\t\tthis.editedRows[row.$$gtRowId].changes\n\t\t\t).length;\n\t\t\tif (CHANGED_COLUMNS === 0) {\n\t\t\t\t// delete row from edited rows if no columns have been edited\n\t\t\t\tdelete this.editedRows[row.$$gtRowId];\n\t\t\t}\n\t\t}\n\t\t// if no listener is present...\n\t\tif (!this.globalInlineEditListener) {\n\t\t\t// ...listen for update event\n\t\t\tthis._listenForKeydownEvent();\n\t\t}\n\t}\n\t/**\n\t * Listen for key down event - listen for key down event during inline edit.\n\t */\n\tprivate _listenForKeydownEvent() {\n\t\t// add global listener for key down events\n\t\tthis.globalInlineEditListener = this.renderer.listen(\n\t\t\t'document',\n\t\t\t'keydown',\n\t\t\t$event => {\n\t\t\t\tswitch ($event.key) {\n\t\t\t\t\tcase 'Enter': // update data object\n\t\t\t\t\t\tthis.inlineEditUpdate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Escape': // cancel\n\t\t\t\t\t\tthis.inlineEditCancel();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\t/**\n\t * Inline edit update - accept changes and update row values.\n\t */\n\tpublic inlineEditUpdate() {\n\t\t// loop through rows that have been edited\n\t\tObject.keys(this.editedRows).map(key => {\n\t\t\tconst ROW = this.editedRows[key].row; // row to update\n\t\t\tconst CHANGES = this.editedRows[key].changes; // changes to the row\n\n\t\t\t// loop through changes in row\n\t\t\tObject.keys(CHANGES).map(objectKey => {\n\t\t\t\tconst oldValue = { ...ROW };\n\t\t\t\tROW[objectKey] = CHANGES[objectKey].renderValue; // update data value\n\t\t\t\tthis.updateRow(ROW, oldValue); // update meta info for row and send event\n\t\t\t\tCHANGES[objectKey].edited = false; // disable edit mode\n\t\t\t});\n\t\t});\n\t\t// clear rows marked as edited as the rows have been updated\n\t\tthis.editedRows = {};\n\t\t// remove listener\n\t\tthis._stopListeningForKeydownEvent();\n\t}\n\t/**\n\t * Inline edit cancel - cancel and reset inline edits.\n\t */\n\tpublic inlineEditCancel(row?: GtRow) {\n\t\tif (row) {\n\t\t\tdelete this.editedRows[row.$$gtRowId];\n\t\t\t// remove listener\n\t\t\tthis._stopListeningForKeydownEvent();\n\t\t\treturn;\n\t\t}\n\n\t\t// loop through rows that have been edited\n\t\tObject.keys(this.editedRows).map(key => {\n\t\t\tconst ROW = this.editedRows[key].row; // row to update\n\t\t\tconst CHANGES = this.editedRows[key].changes; // changes to the row\n\n\t\t\t// loop through changes in row\n\t\t\tObject.keys(CHANGES).map(objectKey => {\n\t\t\t\tCHANGES[objectKey].renderValue = ROW[objectKey]; // reset rendered value\n\t\t\t\tCHANGES[objectKey].edited = false; // disable edit mode\n\t\t\t});\n\t\t});\n\t\t// clear rows marked as edited as the rows have been updated\n\t\tthis.editedRows = {};\n\t\t// remove listener\n\t\tthis._stopListeningForKeydownEvent();\n\t}\n\t/**\n\t * Stop listening for key down event - stop listening for key down events passed during inline edit.\n\t */\n\tprivate _stopListeningForKeydownEvent() {\n\t\tif (this.globalInlineEditListener) {\n\t\t\tthis.globalInlineEditListener();\n\t\t\tthis.globalInlineEditListener = null;\n\t\t}\n\t}\n\n\t/**\n\t * Apply filter(s).\n\t * @param filter - object containing key value pairs, where value should be array of values.\n\t */\n\tpublic gtApplyFilter(filter: Object) {\n\t\tthis.gtInfo.filter = filter;\n\t\t// go to first page\n\t\tthis.goToPage(1);\n\t\tthis.updateTotals();\n\t}\n\n\t/** Clear/remove applied filter(s). */\n\tpublic gtClearFilter() {\n\t\tthis.gtInfo.filter = false;\n\t\tthis.updateTotals();\n\t\t// this.updateRecordRange();\n\t}\n\n\t/**\n\t * Search\n\t * @param value - string containing one or more words\n\t */\n\tpublic gtSearch(value: string) {\n\t\tthis.gtInfo.searchTerms = value;\n\t\t// always go to first page when searching\n\t\tthis.goToPage(1);\n\t\tthis.updateTotals();\n\t}\n\n\t/**\n\t * Add rows\n\t * @param rows - rows to add\n\t * @returns new data array.\n\t */\n\tpublic gtAdd(rows: Array<R>): ReadonlyArray<R> {\n\t\tthis.gtData = [...this.gtData, ...rows];\n\t\treturn [...this.gtData];\n\t}\n\n\t/**\n\t * Delete row\n\t * @param objectKey - object key you want to find match with\n\t * @param value - the value that should be deleted\n\t * @param match - all: delete all matches, first: delete first match (default)\n\t * @returns new data array.\n\t */\n\tpublic gtDelete(\n\t\tobjectKey: string,\n\t\tvalue: string | number,\n\t\tmatch: 'first' | 'all' = 'first'\n\t): ReadonlyArray<R> {\n\t\tif (match === 'first') {\n\t\t\tfor (let i = 0; i < this.gtData.length; i++) {\n\t\t\t\tif (this.gtData[i][objectKey] === value) {\n\t\t\t\t\tif (this.isRowSelected(this.gtData[i])) {\n\t\t\t\t\t\tthis.toggleSelect(this.gtData[i]);\n\t\t\t\t\t}\n\t\t\t\t\tthis.gtData.splice(i, 1);\n\t\t\t\t\tthis.gtData = [...this.gtData];\n\t\t\t\t\tif (match === 'first') {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let i = this.gtData.length; i > 0; i--) {\n\t\t\t\tif (this.gtData[i - 1][objectKey] === value) {\n\t\t\t\t\tif (this.isRowSelected(this.gtData[i - 1])) {\n\t\t\t\t\t\tthis.toggleSelect(this.gtData[i - 1]);\n\t\t\t\t\t}\n\t\t\t\t\tthis.gtData.splice(i - 1, 1);\n\t\t\t\t\tthis.gtData = [...this.gtData];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn [...this.gtData];\n\t}\n\n\t/**\n\t * Create store to hold previously loaded records.\n\t * @param records - total number of records in store.\n\t * @param perPage - how many records to show per page.\n\t * @returns a nested array to hold records per page.\n\t */\n\tprivate createStore(records: number, perPage: number): Array<Array<any>> {\n\t\tconst stores = Math.ceil(records / perPage);\n\t\tconst store: Array<Array<any>> = [];\n\t\tfor (let i = 0; i < stores; i++) {\n\t\t\tstore[i] = [];\n\t\t}\n\t\treturn store;\n\t}\n\n\t/**\n\t * Create placeholders for rows while loading data from back-end.\n\t * @param perPage - how many records to show per page.\n\t * @returns an array containing empty records to be presented while fetching real data.\n\t */\n\tprivate loadingContent(perPage: number) {\n\t\t// create row object\n\t\tconst rowObject: Object = {\n\t\t\t$$loading: true\n\t\t};\n\t\tlet order = 0;\n\n\t\t// sort settings by column order\n\t\tthis._gtSettings.sort(this.getColumnOrder);\n\n\t\t// loop through all settings objects...\n\t\tfor (let i = 0; i < this._gtSettings.length; i++) {\n\t\t\tconst setting = this._gtSettings[i];\n\n\t\t\t// ...if column is visible and enabled...\n\t\t\tif (setting.visible !== false && setting.enabled !== false) {\n\t\t\t\t// ...if first column, set value to loading text otherwise leave it empty\n\t\t\t\tif (order === 0) {\n\t\t\t\t\trowObject[setting.objectKey] = this.gtTexts.loading;\n\t\t\t\t\tthis.loadingProperty = setting.objectKey;\n\t\t\t\t} else {\n\t\t\t\t\trowObject[setting.objectKey] = '';\n\t\t\t\t}\n\t\t\t\torder++;\n\t\t\t} else {\n\t\t\t\trowObject[setting.objectKey] = '';\n\t\t\t}\n\t\t}\n\n\t\t// create content placeholder\n\t\tconst contentPlaceholder: Array<any> = [];\n\n\t\t// create equal number of rows as rows per page\n\t\tfor (let i = 0; i < perPage; i++) {\n\t\t\t// ...add temporary row object\n\t\t\tcontentPlaceholder.push(rowObject);\n\t\t}\n\t\treturn contentPlaceholder;\n\t}\n\n\t// TODO: move to helper functions\n\t/** Sort by sort order */\n\tprivate getSortOrder = function(a: GtConfigSetting, b: GtConfigSetting) {\n\t\tif (a.sortOrder < b.sortOrder) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.sortOrder > b.sortOrder || typeof a.sortOrder === 'undefined') {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t};\n\n\t// TODO: move to helper functions\n\t/** Sort by column order */\n\tprivate getColumnOrder = function(a: GtConfigSetting, b: GtConfigSetting) {\n\t\tif (a.columnOrder === undefined) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.columnOrder < b.columnOrder) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.columnOrder > b.columnOrder) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t};\n\n\t// TODO: move to helper functions\n\t/** Create a deep copy of data */\n\tprivate cloneDeep = function(o: any) {\n\t\treturn JSON.parse(JSON.stringify(o));\n\t};\n\n\t/** Export data as CSV\n\t * @param fileName - optional file name (overrides default file name).\n\t * @param useBOM - use BOM (byte order marker).\n\t */\n\tpublic exportCSV(fileName?: string, useBOM: boolean = false) {\n\t\tconst data = this.data.exportData;\n\t\tlet csv = '';\n\t\tconst BOM = '\\uFEFF';\n\n\t\t// csv export headers\n\t\tfor (let i = 0; i < this._gtSettings.length; i++) {\n\t\t\tif (this._gtSettings[i].export !== false) {\n\t\t\t\tcsv += this.getProperty(this._gtFields, this._gtSettings[i].objectKey)\n\t\t\t\t\t.name;\n\n\t\t\t\tif (i < this._gtSettings.length - 1) {\n\t\t\t\t\tcsv += this._gtOptions.csvDelimiter;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// csv export body\n\t\tdata.forEach(row => {\n\t\t\tcsv += '\\n';\n\t\t\tfor (let i = 0; i < this._gtSettings.length; i++) {\n\t\t\t\tif (this._gtSettings[i].export !== false) {\n\t\t\t\t\t// get field settings\n\t\t\t\t\tconst fieldSetting = this.getProperty(\n\t\t\t\t\t\tthis._gtFields,\n\t\t\t\t\t\tthis._gtSettings[i].objectKey\n\t\t\t\t\t);\n\n\t\t\t\t\t// get export value, if export function is defined use it otherwise check for value function and as a last resort export raw data\n\t\t\t\t\tlet exportValue: string =\n\t\t\t\t\t\tfieldSetting.export && typeof fieldSetting.export === 'function'\n\t\t\t\t\t\t\t? fieldSetting.export(row)\n\t\t\t\t\t\t\t: fieldSetting.value && typeof fieldSetting.value === 'function'\n\t\t\t\t\t\t\t\t? fieldSetting.value(row)\n\t\t\t\t\t\t\t\t: row[this._gtSettings[i].objectKey];\n\n\t\t\t\t\t// escape export value using double quotes (\") if export value contains delimiter\n\t\t\t\t\texportValue =\n\t\t\t\t\t\ttypeof exportValue === 'string' &&\n\t\t\t\t\t\texportValue.indexOf(this._gtOptions.csvDelimiter) !== -1\n\t\t\t\t\t\t\t? '\"' + exportValue + '\"'\n\t\t\t\t\t\t\t: exportValue;\n\n\t\t\t\t\tcsv += exportValue;\n\t\t\t\t\tif (i < this._gtSettings.length - 1) {\n\t\t\t\t\t\tcsv += this._gtOptions.csvDelimiter;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tconst blob = new Blob([(useBOM ? BOM : '') + csv], {\n\t\t\ttype: 'text/csv;charset=utf-8'\n\t\t});\n\n\t\tif (window.navigator.msSaveOrOpenBlob) {\n\t\t\tnavigator.msSaveOrOpenBlob(\n\t\t\t\tblob,\n\t\t\t\tfileName ? fileName + '.csv' : this.gtTexts.csvDownload + '.csv'\n\t\t\t);\n\t\t} else {\n\t\t\tconst link = document.createElement('a');\n\t\t\tlink.style.display = 'none';\n\t\t\tdocument.body.appendChild(link);\n\t\t\tif (link.download !== undefined) {\n\t\t\t\tlink.setAttribute(\n\t\t\t\t\t'href',\n\t\t\t\t\t'data:text/csv;charset=utf-8,' +\n\t\t\t\t\t\tencodeURIComponent((useBOM ? BOM : '') + csv)\n\t\t\t\t); // URL.createObjectURL(blob));\n\t\t\t\tlink.setAttribute(\n\t\t\t\t\t'download',\n\t\t\t\t\tfileName ? fileName + '.csv' : this.gtTexts.csvDownload + '.csv'\n\t\t\t\t);\n\t\t\t\tdocument.body.appendChild(link);\n\t\t\t\tlink.click();\n\t\t\t} else {\n\t\t\t\tcsv = 'data:text/csv;charset=utf-8,' + (useBOM ? BOM : '') + csv;\n\t\t\t\twindow.open(encodeURIComponent(csv));\n\t\t\t}\n\t\t\tdocument.body.removeChild(link);\n\t\t}\n\n\t\t// emit export event\n\t\tthis.gtEvent.emit({\n\t\t\tname: 'gt-exported-csv',\n\t\t\tvalue: fileName ? fileName : this.gtTexts.csvDownload + '.csv'\n\t\t});\n\t}\n\n\t/** Return property */\n\tprivate getProperty = function(array: Array<any>, key: string) {\n\t\tfor (let i = 0; i < array.length; i++) {\n\t\t\tif (array[i].objectKey === key) {\n\t\t\t\treturn array[i];\n\t\t\t}\n\t\t}\n\t};\n\n\tprivate restructureSorting = function() {\n\t\t/** Check and store sort order upon initialization.\n\t\t * This is done by checking sort properties in the settings array of the table, if no sorting is defined\n\t\t * we'll sort the data by the first visible and enabled column in the table(ascending). Please note that actually\n\t\t * sorting have to be done server side when lazy loading data for obvious reasons. */\n\t\t// create sorting array\n\t\tconst sorting = [];\n\t\tif (this._gtSettings) {\n\t\t\t// ...sort settings by sort order\n\t\t\tthis._gtSettings.sort(this.getSortOrder);\n\n\t\t\t// ...loop through settings\n\t\t\tfor (let i = 0; i < this._gtSettings.length; i++) {\n\t\t\t\tconst setting = this._gtSettings[i];\n\n\t\t\t\t// ...if sorted ascending...\n\t\t\t\tif (setting.sort === 'asc') {\n\t\t\t\t\t// ... add to sorting\n\t\t\t\t\tsorting.push(setting.objectKey);\n\t\t\t\t} else if (setting.sort === 'desc') {\n\t\t\t\t\t/* ...else if sorted descending... */ // ... add to sorting\n\t\t\t\t\tsorting.push('-' + setting.objectKey);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// ...if no sorting applied...\n\t\t\tif (sorting.length === 0) {\n\t\t\t\tsorting.push('$$gtRowId');\n\t\t\t\t/*// ...sort settings by column order\n\t\t\t\tthis._gtSettings.sort(this.getColumnOrder);\n\n\t\t\t\t// ...loop through settings\n\t\t\t\tfor (let i = 0; i < this._gtSettings.length; i++) {\n\t\t\t\t\tconst setting = this._gtSettings[i];\n\n\t\t\t\t\t// ...if column is enabled and visible...\n\t\t\t\t\tif (setting.enabled !== false && setting.visible !== false) {\n\t\t\t\t\t\t// ...add first match and exit function\n\t\t\t\t\t\tthis.sortOrder = [this._gtSettings[i].objectKey];\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}*/\n\t\t\t}\n\t\t}\n\n\t\tif (this.sortOrder.length === 0) {\n\t\t\tthis.sortOrder = sorting;\n\t\t}\n\t};\n\n\tngOnInit() {\n\t\t// if number of row to display from start is set to null or 0...\n\t\tif (!this.gtOptions.numberOfRows) {\n\t\t\t// ...change row length\n\t\t\tthis.changeRowLength(this.gtOptions.numberOfRows);\n\t\t}\n\t\tthis.restructureSorting();\n\t}\n\n\t/**\n\t * Extend object function.\n\t */\n\tprivate extend = function(a: Object, b: Object) {\n\t\tfor (const key in b) {\n\t\t\tif (b.hasOwnProperty(key)) {\n\t\t\t\ta[key] = b[key];\n\t\t\t}\n\t\t}\n\t\treturn a;\n\t};\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\t// if gt texts have changed...\n\t\tif (changes['gtTexts']) {\n\t\t\t// ...extend gtOptions default values with values passed into component\n\t\t\tthis.gtTexts = <GtTexts>this.extend(this.gtDefaultTexts, this.gtTexts);\n\t\t}\n\n\t\t// if lazy loading data and paging information is available...\n\t\tif (this.gtOptions.lazyLoad && this.gtInfo) {\n\t\t\t// ...calculate total number of pages\n\t\t\tthis.gtInfo.pageTotal = Math.ceil(\n\t\t\t\tthis.gtInfo.recordsAfterSearch / this.gtInfo.recordLength\n\t\t\t);\n\n\t\t\t// ...declare store position\n\t\t\tconst storePosition = this.gtInfo.pageCurrent - 1;\n\n\t\t\t// ...and if store is empty or page length has changed...\n\t\t\tif (\n\t\t\t\tthis.store.length === 0 ||\n\t\t\t\tthis.store[0].length !== this.gtInfo.recordLength\n\t\t\t) {\n\t\t\t\t// ...create store\n\t\t\t\tthis.store = this.createStore(\n\t\t\t\t\tthis.gtInfo.recordsAfterSearch,\n\t\t\t\t\tthis.gtInfo.recordLength\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// ...store retrieved data in store at store position\n\t\t\tthis.store[storePosition] = this.gtData;\n\t\t\tthis.gtInfo.visibleRecords = [...this.gtData]; // add visible rows\n\n\t\t\t// replace data with store\n\t\t\tthis._gtData = this.store;\n\t\t\tthis.loading = false;\n\t\t\tthis.updateRecordRange();\n\t\t\tthis.gtEvent.emit({\n\t\t\t\tname: 'gt-info',\n\t\t\t\tvalue: this.gtInfo\n\t\t\t});\n\t\t} else if (\n\t\t\tthis._gtData &&\n\t\t\tthis._gtData.length >= 0 &&\n\t\t\tchanges['gtData'] &&\n\t\t\tchanges['gtData'].previousValue\n\t\t) {\n\t\t\tthis.loading = false;\n\t\t} else if (\n\t\t\tchanges['gtData'] &&\n\t\t\tchanges['gtData'].firstChange &&\n\t\t\tthis._gtData &&\n\t\t\tthis._gtData.length > 0\n\t\t) {\n\t\t\tthis.loading = false;\n\t\t}\n\t}\n\n\ttrackByFn(index: number, item: GtRow) {\n\t\treturn item.$$gtRowId;\n\t}\n\n\ttrackByColumnFn(index: number, item: GtConfigField<any, any>) {\n\t\treturn item.objectKey;\n\t}\n\n\tngOnDestroy() {\n\t\t// remove listener\n\t\tthis._stopListeningForKeydownEvent();\n\t}\n}\n","import {\n\tAfterViewChecked,\n\tChangeDetectorRef,\n\tComponent,\n\tInput\n} from '@angular/core';\n\n@Component({\n\tselector: 'gt-table-info',\n\ttemplate: `\n\t\t<span *ngIf=\"genericTable.gtInfo\">{{(customText? customText:genericTable.gtTexts) | gtTableInfo:\n\t\t\tgenericTable.gtInfo:\n\t\t\tgenericTable.gtInfo.recordsAfterSearch:\n\t\t\tgenericTable.gtInfo.recordFrom:\n\t\t\tgenericTable.gtInfo.recordTo:\n\t\t\tgenericTable.gtInfo.recordsAll:\n\t\t\tgenericTable.gtTexts.loading:\n\t\t\tgenericTable.gtTexts.tableInfoAfterSearch}}</span>\n `,\n\tstyles: []\n})\nexport class GtTableInfoComponent implements AfterViewChecked {\n\t@Input() genericTable: GenericTableComponent<any, any>;\n\t@Input() customText: string;\n\n\tconstructor(private _changeDetectionRef: ChangeDetectorRef) {}\n\n\tngAfterViewChecked() {\n\t\tthis._changeDetectionRef.detectChanges();\n\t}\n}\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { GenericTableComponent } from '../generic-table/generic-table.component';\nimport { GtTexts } from '../../interfaces/gt-texts';\nimport { GtInformation } from '../../interfaces/gt-information';\n\n@Pipe({\n\tname: 'gtTableInfo'\n})\nexport class TableInfoPipe implements PipeTransform {\n\ttransform(\n\t\ttexts: GtTexts | string,\n\t\tkeys: GtInformation,\n\t\trecordsAfterSearch: number,\n\t\trecordFrom: number,\n\t\trecordTo: number,\n\t\trecordsAll: number,\n\t\tloading: string,\n\t\ttableInfoAfterSearch: string\n\t): string {\n\t\tlet text = typeof texts === 'object' ? texts.tableInfo : '';\n\t\tif (keys.recordsAfterSearch !== keys.recordsAll) {\n\t\t\ttext = typeof texts === 'object' ? texts.tableInfoAfterSearch : '';\n\t\t}\n\t\tfor (const key in keys) {\n\t\t\tif (keys.hasOwnProperty(key)) {\n\t\t\t\tconst searchString = new RegExp('#' + key, 'g');\n\t\t\t\ttext = text.replace(searchString, keys[key]);\n\t\t\t}\n\t\t}\n\t\treturn text;\n\t}\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n\tselector: 'gt-pagination',\n\ttemplate: `\n\t\t<nav class=\"gt-pagination\" aria-label=\"Table navigation\" *ngIf=\"genericTable && genericTable.gtInfo && ready && genericTable.gtData?.length > 0\" [ngClass]=\"{'no-data':genericTable.gtInfo.pageTotal === 0}\">\n\t\t\t<ul class=\"pagination\" [ngClass]=\"gtClasses\">\n\t\t\t\t<li class=\"page-item\" [ngClass]=\"{'disabled' : genericTable.gtInfo.pageCurrent === 1 || genericTable.loading }\"><a class=\"page-link\" href=\"javascript:void(0);\" (click)=\"genericTable.gtInfo.pageCurrent > 1 && genericTable.previousPage()\" [attr.aria-label]=\"genericTable.gtTexts.paginatePrevious\"><span aria-hidden=\"true\">&laquo;</span><span class=\"sr-only\">{{genericTable.gtTexts.paginatePrevious}}</span></a></li>\n\t\t\t\t<li class=\"page-item\" [ngClass]=\"{'disabled' : genericTable.loading && genericTable.gtInfo.pageCurrent !== page, 'active' : genericTable.gtInfo.pageCurrent === page }\" *ngFor=\"let page of genericTable.gtInfo.pageTotal | gtPaginationPipe:genericTable.gtInfo.pageCurrent\"><a class=\"page-link\" [tabindex]=\"page === true ? -1:0\" href=\"javascript:void(0);\" (click)=\"page === true ? '':genericTable.goToPage(page)\">{{page === true ? '&hellip;':page}}</a></li>\n\t\t\t\t<li class=\"page-item\" [ngClass]=\"{'disabled' : genericTable.gtInfo.pageCurrent === genericTable.gtInfo.pageTotal || genericTable.loading }\"><a class=\"page-link gt-link\" href=\"javascript:void(0);\" (click)=\"genericTable.gtInfo.pageCurrent !== genericTable.gtInfo.pageTotal && genericTable.nextPage()\" [attr.aria-label]=\"genericTable.gtTexts.paginateNext\"><span aria-hidden=\"true\">&raquo;</span><span class=\"sr-only\">{{genericTable.gtTexts.paginateNext}}</span></a></li>\n\t\t\t</ul>\n\t\t</nav>\n `,\n\tstyles: [`.gt-link {cursor: pointer;}`]\n})\nexport class GtPaginationComponent {\n\tget genericTable(): GenericTableComponent<any, any> {\n\t\treturn this._genericTable;\n\t}\n\n\t@Input()\n\tset genericTable(value: GenericTableComponent<any, any>) {\n\t\tif (value) {\n\t\t\tvalue.gtEvent.subscribe((res: any) => {\n\t\t\t\tif (res.name === 'gt-info' && res.value.pageTotal > 0) {\n\t\t\t\t\tthis.ready = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis._genericTable = value;\n\t}\n\n\tprivate _genericTable: GenericTableComponent<any, any>;\n\t@Input() gtClasses: string;\n\tpublic ready = false;\n}\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { GenericTableComponent } from '../generic-table/generic-table.component';\n\n@Pipe({\n\tname: 'gtPaginationPipe'\n})\nexport class PaginationPipe implements PipeTransform {\n\ttransform(totalPages: number, currentPage: number): Array<any> {\n\t\tif (totalPages === 0) {\n\t\t\treturn [1];\n\t\t}\n\t\tconst pagination: Array<any> = []; // create new empty array for pagination\n\t\tconst siblings = 2; // sibling elements ie. number of elements on each side of current page\n\t\tconst paginationLength =\n\t\t\ttotalPages < siblings * 2 + 1 ? totalPages : siblings * 2 + 1; // number of elements in pagination array\n\t\tconst start = currentPage <= siblings ? 1 : currentPage - siblings; // starting position for array\n\t\tconst modifier =\n\t\t\ttotalPages - (currentPage + siblings) <= 0\n\t\t\t\t? totalPages - (currentPage + siblings)\n\t\t\t\t: 0; // modifier for pagination values\n\t\tconst modifiedPosition = start + modifier <= 0 ? 1 : start + modifier;\n\n\t\t// push pages to pagination array\n\t\tfor (let i = 0; i < paginationLength; i++) {\n\t\t\tpagination.push(modifiedPosition + i);\n\t\t}\n\n\t\t// if first page is not included in pagination...\n\t\tif (pagination.indexOf(1) === -1) {\n\t\t\t// ...check if second page is in pagination...\n\t\t\tif (pagination.indexOf(2) === -1) {\n\t\t\t\t// ...if not check if total number of pages equals seven and number of siblings are two...\n\t\t\t\tif (totalPages === 7 && siblings === 2) {\n\t\t\t\t\t// ...add second page and don't convert page number to ellipsis\n\t\t\t\t\tpagination.unshift(2);\n\t\t\t\t} else {\n\t\t\t\t\t// ...if not, use this placeholder for ellipsis instead of actual page number\n\t\t\t\t\tpagination[0] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// ...add first page as first array item\n\t\t\tpagination.unshift(1);\n\t\t} else if (totalPages > paginationLength) {\n\t\t\t// if first page is included add extra page to keep number of items consistent\n\t\t\tpagination.splice(paginationLength, 0, paginationLength + 1);\n\t\t}\n\t\t// check if last page is included in pagination...\n\t\tif (pagination.indexOf(totalPages) === -1) {\n\t\t\t// ...if not, page next to last should either show ellipsis or actual page number for the page\n\t\t\tpagination[pagination.length - 1] =\n\t\t\t\tpagination[pagination.length - 1] === totalPages - 1\n\t\t\t\t\t? totalPages - 1\n\t\t\t\t\t: true;\n\n\t\t\t// ...add last page to pagination\n\t\t\tpagination.push(totalPages);\n\t\t}\n\n\t\treturn pagination;\n\t}\n}\n","import { Component, EventEmitter, Input, Output, Type } from '@angular/core';\nimport { GtRow } from '../../interfaces/gt-row';\nimport { GtConfigSetting } from '../../interfaces/gt-config-setting';\nimport { GtConfigField } from '../../interfaces/gt-config-field';\nimport { GtEvent } from '../../interfaces/gt-event';\n\nexport class GtExpandedRow<R extends GtRow> {\n\trow: R;\n\tcolumnWidth: Object;\n\tgtSettings: Array<GtConfigSetting>;\n\tgtFields: Array<GtConfigField<R, any>>;\n\tgtOptions: any;\n\tgtInfo: any;\n\tdata: any;\n\tredrawEvent = new EventEmitter<R>();\n\tgtEvent: EventEmitter<GtEvent>;\n\ttoggleRowEvent = new EventEmitter<R>();\n\n\tpublic $hide(): void {\n\t\tthis.toggleRowEvent.emit(this.row);\n\t}\n\n\tpublic $redraw($event?: any): void {\n\t\tthis.redrawEvent.emit(this.row);\n\t}\n\tpublic $rowClick(row: GtRow, $event: MouseEvent) {\n\t\tthis.gtEvent.emit({\n\t\t\tname: 'gt-row-clicked',\n\t\t\tvalue: { row: row, event: $event }\n\t\t});\n\t}\n}\n\n@Component({\n\tselector: 'gt-expanding-row',\n\ttemplate: `\n\t\t<div gtComponentAnchor\n\t\t\t [ctor]=\"type\" (instance)=\"newInstance($event)\"></div>\n `,\n\tstyles: []\n})\nexport class GtExpandingRowComponent<\n\tR extends GtRow,\n\tC extends GtExpandedRow<R>\n> {\n\t@Input() type: Type<C>;\n\t@Input() row: R;\n\t@Input() columnWidth: Object;\n\t@Input() gtSettings: Array<GtConfigSetting>;\n\t@Input() gtFields: Array<GtConfigField<R, any>>;\n\t@Input() gtOptions: any;\n\t@Input() gtInfo: any;\n\t@Input() data: any;\n\n\t@Output() redrawEvent = new EventEmitter<R>();\n\t@Output() toggleRowEvent = new EventEmitter<R>();\n\t@Input() gtEvent: any;\n\n\tnewInstance(instance: C): void {\n\t\tinstance.row = this.row;\n\t\tinstance.columnWidth = this.columnWidth;\n\t\tinstance.gtSettings = this.gtSettings;\n\t\tinstance.gtFields = this.gtFields;\n\t\tinstance.gtOptions = this.gtOptions;\n\t\tinstance.gtInfo = this.gtInfo;\n\t\tinstance.data =\n\t\t\ttypeof this.data === 'function' ? this.data(this.row) : this.data;\n\t\tinstance.redrawEvent.subscribe(this.redrawEvent);\n\t\tinstance.toggleRowEvent.subscribe(this.toggleRowEvent);\n\t\tinstance.gtEvent = this.gtEvent;\n\t}\n}\n","import {\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOnDestroy,\n\tOnInit,\n\tOutput,\n\tRenderer2\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as Tether from 'tether';\n\n@Component({\n\tselector: 'gt-dropdown',\n\ttemplate: `\n\t\t<div class=\"dropdown gt-dropdown\" [ngClass]=\"{'show':active}\" [attr.id]=\"id\">\n\t\t\t<div class=\"dropdown-toggle\" (click)=\"toggleDropdown()\" [attr.aria-expanded]=\"active\">{{selected}}</div>\n\t\t\t<div class=\"gt-dropdown-menu dropdown-menu\" *ngIf=\"active\" [ngClass]=\"{'show':active}\" [attr.id]=\"id+'_menu'\">\n\t\t\t\t<button *ngFor=\"let option of options;\" class=\"dropdown-item\" (click)=\"select(option)\" [ngClass]=\"{'active':option === selected}\">{{option}}</button>\n\t\t\t</div>\n\t\t</div>\n `,\n\tstyles: [\n\t\t`\n\t\t.gt-dropdown .dropdown-toggle {\n\t\t\tcursor: pointer;\n\t\t}\n\t\t.gt-dropdown .dropdown-toggle::after {\n\t\t\ttransition: opacity 0.4s ease-in-out;\n\t\t\topacity: 0;\n\t\t}\n\t\t.gt-dropdown .dropdown-toggle:hover::after {\n\t\t\topacity: 1;\n\t\t}\n\t`\n\t]\n})\nexport class GtDropdownComponent implements OnInit, OnDestroy {\n\tget selected() {\n\t\treturn this._selected;\n\t}\n\n\t_selected: any;\n\t@Input()\n\tset selected(selection) {\n\t\tthis._selected = selection;\n\t}\n\t@Input() options: Array<any>;\n\t@Input() id: string;\n\t@Output() selectedChange: EventEmitter<any> = new EventEmitter();\n\n\tactive = false; // is dropdown active or not\n\tstate: Subject<boolean> = new Subject(); // current state of dropdown\n\ttether: any;\n\tclickListener: Function;\n\tkeyupListener: Function;\n\n\tconstructor(private renderer: Renderer2) {}\n\n\tselect(option: any) {\n\t\tthis.active = false;\n\t\tthis.state.next(this.active);\n\t\tif (this._selected !== option) {\n\t\t\tthis.selectedChange.emit(option);\n\t\t}\n\t}\n\n\ttoggleDropdown() {\n\t\tthis.active = !this.active;\n\t\tsetTimeout(() => {\n\t\t\tthis.state.next(this.active);\n\t\t}, 0);\n\t}\n\n\tngOnInit() {\n\t\tthis.state.subscribe(state => {\n\t\t\tif (state) {\n\t\t\t\tthis.tether = new Tether({\n\t\t\t\t\telement: '#' + this.id + '_menu',\n\t\t\t\t\ttarget: '#' + this.id,\n\t\t\t\t\tattachment: 'top left',\n\t\t\t\t\ttargetAttachment: 'bottom left',\n\t\t\t\t\tconstraints: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tto: 'window',\n\t\t\t\t\t\t\tattachment: 'together'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t});\n\n\t\t\t\tthis.tether.position();\n\n\t\t\t\t// set up click listener and listen for click outside dropdown\n\t\t\t\tthis.clickListener = this.renderer.listen(\n\t\t\t\t\t'document',\n\t\t\t\t\t'click',\n\t\t\t\t\t(event: MouseEvent) => {\n\t\t\t\t\t\tthis.active = false;\n\t\t\t\t\t\tthis.state.next(this.active);\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// set up keyboard listener and listen for escape key up\n\t\t\t\tthis.keyupListener = this.renderer.listen(\n\t\t\t\t\t'document',\n\t\t\t\t\t'keyup',\n\t\t\t\t\t(event: KeyboardEvent) => {\n\t\t\t\t\t\tswitch (event.key) {\n\t\t\t\t\t\t\tcase 'Escape':\n\t\t\t\t\t\t\t\tthis.active = false;\n\t\t\t\t\t\t\t\tthis.state.next(this.active);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.tether.destroy();\n\t\t\t\tthis.removeListeners();\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnDestroy() {\n\t\tthis.removeListeners();\n\t}\n\n\tremoveListeners() {\n\t\tif (this.clickListener) {\n\t\t\tthis.clickListener();\n\t\t}\n\t\tif (this.keyupListener) {\n\t\t\tthis.keyupListener();\n\t\t}\n\t}\n}\n","import { Component, OnInit } from '@angular/core';\nimport { GtExpandedRow } from '../gt-expanding-row/gt-expanding-row.component';\n\n@Component({\n\tselector: 'gt-drilldown',\n\ttemplate: `\n\t\t<table class=\"table\">\n\t\t\t<tr *ngFor=\"let row of data\" (click)=\"$rowClick(row, $event)\">\n\t\t\t\t<td *ngFor=\"let column of row | gtRender:gtSettings:gtFields:null:null:gtOptions.highlightSearch:gtInfo.searchTerms;\"\n\t\t\t\t\tngClass=\"{{column.objectKey +'-column' | dashCase}} {{gtFields | gtProperty:column.objectKey:'classNames'}} {{(gtFields | gtProperty:column.objectKey:'inlineEdit') ? 'gt-inline-edit':''}} {{column.edited ? 'gt-edited':''}} {{ gtFields | gtColumnClass:row:column }}\" [style.width]=\"columnWidth[column.objectKey]\" [style.max-width]=\"columnWidth[column.objectKey]\">\n <span class=\"gt-row-label\"\n\t\t\t\t\t\t\t *ngIf=\"gtOptions.stack\">{{(gtFields | gtProperty:column.objectKey:'stackedHeading') ? (gtFields | gtProperty:column.objectKey:'stackedHeading') : (gtFields | gtProperty:column.objectKey:'name')}}</span>\n\t\t\t\t\t<gt-custom-component-factory *ngIf=\"column.columnComponent\" class=\"gt-row-content\"\n\t\t\t\t\t\t\t\t\t\t\t\t [type]=\"column.columnComponent.type\"\n\t\t\t\t\t\t\t\t\t\t\t\t [injector]=\"column.columnComponent.injector\" [row]=\"row\"\n\t\t\t\t\t\t\t\t\t\t\t\t [column]=\"column\" (redrawEvent)=\"$redraw($event)\"\n\t\t\t\t\t\t\t\t\t\t\t\t (click)=\"column.click ? column.click(row,column,$event):'';\"></gt-custom-component-factory>\n\t\t\t\t\t<span *ngIf=\"!column.columnComponent\"\n\t\t\t\t\t\t class=\"gt-row-content\" [innerHTML]=\"column.renderValue\"\n\t\t\t\t\t\t (click)=\"column.click ? column.click(row,column,$event):''\"></span>\n\t\t\t\t</td>\n\n\t\t\t</tr>\n\t\t</table>\n `,\n\tstyles: []\n})\nexport class GtDrilldownComponent extends GtExpandedRow<any> implements OnInit {\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tngOnInit() {}\n}\n","import {\n\tComponent,\n\tEventEmitter,\n\tInjector,\n\tInput,\n\tOnInit,\n\tOutput,\n\tType\n} from '@angular/core';\nimport { ReplaySubject } from 'rxjs';\n\nexport abstract class GtCustomComponent<R> implements OnInit {\n\trow: R;\n\tcolumn: any;\n\tredrawEvent = new EventEmitter<{ row: R; column: any }>();\n\tsearchTerms: string;\n\t$searchTerms: ReplaySubject<string> = new ReplaySubject(1);\n\n\tprotected $redraw($event?: any) {\n\t\tthis.redrawEvent.emit({ row: this.row, column: this.column });\n\t}\n\tngOnInit() {\n\t\tthis.$searchTerms.subscribe(terms => (this.searchTerms = terms));\n\t}\n}\n\n@Component({\n\tselector: 'gt-custom-component-factory',\n\ttemplate: `\n\t\t<div gtComponentAnchor [ctor]=\"type\"\n\t\t\t [injector]=\"injector\"\n\t\t\t (instance)=\"instance($event)\"></div>\n\t`\n})\nexport class GtCustomComponentFactory<R, C extends GtCustomComponent<R>> {\n\t@Input()\n\tset searchTerms(value: string) {\n\t\tthis.$searchTerms.next(value);\n\t}\n\t@Input() type: Type<C>;\n\t@Input() injector: Injector;\n\t@Input() row: R;\n\t@Input() column: any;\n\t$searchTerms: ReplaySubject<string> = new ReplaySubject(1);\n\t@Output() redrawEvent = new EventEmitter<{ row: R; column: any }>();\n\n\tinstance(instance: C) {\n\t\tinstance.row = this.row;\n\t\tinstance.column = this.column;\n\t\tinstance.$searchTerms = this.$searchTerms;\n\t\tinstance.redrawEvent.subscribe(this.redrawEvent);\n\t}\n}\n","import {\n\tComponent,\n\tEventEmitter,\n\tHostBinding,\n\tInput,\n\tOnInit,\n\tOutput\n} from '@angular/core';\n\n@Component({\n\tselector: 'gt-checkbox',\n\ttemplate: `\n\t\t<label class=\"custom-control custom-checkbox p-0\" (click)=\"$event.stopPropagation()\">\n\t\t\t<input #checkbox type=\"checkbox\" class=\"custom-control-input\" [(checked)]=\"checked\" (change)=\"toggle($event);\">\n\t\t\t<span class=\"custom-control-label\"></span>\n\t\t</label>\n `,\n\tstyles: []\n})\nexport class GtCheckboxComponent implements OnInit {\n\tget initialValue(): boolean {\n\t\treturn this._initialValue;\n\t}\n\n\t@HostBinding('class') class = 'd-flex justify-content-end';\n\n\t@Input()\n\tset initialValue(value: boolean) {\n\t\tthis._initialValue = value;\n\t}\n\tget checked(): boolean {\n\t\treturn this._checked;\n\t}\n\n\t@Input()\n\tset checked(value: boolean) {\n\t\tthis._checked = value;\n\t}\n\n\tprivate _checked: boolean;\n\tprivate _initialValue: boolean;\n\t@Output() changed: EventEmitter<boolean> = new EventEmitter();\n\n\tconstructor() {}\n\n\tngOnInit() {}\n\n\ttoggle(checked: boolean) {\n\t\tthis.changed.emit(this.checked);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GtConfigField } from '../interfaces/gt-config-field';\nimport { GtConfigSetting } from '../interfaces/gt-config-setting';\nimport { GtRow } from '../interfaces/gt-row';\n\n@Pipe({\n\tname: 'gtVisible'\n})\nexport class GtVisiblePipe<R extends GtRow> implements PipeTransform {\n\t// TODO: move to helper functions\n\t/** Sort by column order */\n\tprivate getColumnOrder = function(a: any, b: any) {\n\t\tif (a.columnOrder < b.columnOrder) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.columnOrder > b.columnOrder || typeof a.columnOrder === 'undefined') {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t};\n\n\ttransform(\n\t\tarray: Array<any>,\n\t\tsettings: Array<GtConfigSetting>,\n\t\trefreshPipe?: boolean\n\t): Array<GtConfigField<R, any>> | Array<GtConfigSetting> {\n\t\tconst visibleColumns = settings\n\t\t\t.sort(this.getColumnOrder)\n\t\t\t.map((setting: GtConfigSetting) => {\n\t\t\t\tif (setting.visible !== false && setting.enabled !== false) {\n\t\t\t\t\treturn setting.objectKey;\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn array\n\t\t\t.filter((column: any) => {\n\t\t\t\treturn visibleColumns.indexOf(column.objectKey) !== -1;\n\t\t\t})\n\t\t\t.sort(function(a, b) {\n\t\t\t\treturn visibleColumns.indexOf(a.objectKey) <\n\t\t\t\t\tvisibleColumns.indexOf(b.objectKey)\n\t\t\t\t\t? -1\n\t\t\t\t\t: 1;\n\t\t\t});\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GtConfigField } from '../interfaces/gt-config-field';\nimport { GtRow } from '../interfaces/gt-row';\nimport { GtConfigSetting } from '../interfaces/gt-config-setting';\nimport { GtInformation } from '../interfaces/gt-information';\n\n@Pipe({\n\tname: 'gtSearch'\n})\nexport class GtSearchPipe<R extends GtRow> implements PipeTransform {\n\t/** Return property */\n\tprivate getProperty = function(array: Array<any>, key: string) {\n\t\tfor (let i = 0; i < array.length; i++) {\n\t\t\tif (array[i].objectKey === key) {\n\t\t\t\treturn array[i];\n\t\t\t}\n\t\t}\n\t};\n\n\ttransform(\n\t\tallRows: any,\n\t\tsearchTerms: string,\n\t\tgtInfo: GtInformation,\n\t\tsettings: Array<GtConfigSetting>,\n\t\tfields: Array<GtConfigField<R, any>>,\n\t\trefreshData: number\n\t): any {\n\t\t// if no search terms are defined...\n\t\tif (!searchTerms || searchTerms.replace(/\"/g, '').length === 0) {\n\t\t\t// ...return all rows\n\t\t\tconst length = allRows === null ? 0 : allRows.length;\n\t\t\tgtInfo.recordsAfterSearch = length;\n\t\t\treturn allRows;\n\t\t}\n\n\t\tconst searchFunction: any = {};\n\t\tconst fieldsTemp: Array<any> = [];\n\n\t\tfor (let k = 0; k < fields.length; k++) {\n\t\t\tconst field = fields[k];\n\n\t\t\t// check if field should be included in global search\n\t\t\tconst include =\n\t\t\t\tthis.getProperty(settings, field.objectKey).search === false\n\t\t\t\t\t? false\n\t\t\t\t\t: true;\n\n\t\t\t// if include...\n\t\t\tif (include) {\n\t\t\t\t// ...and if search function is defined...\n\t\t\t\tif (typeof field.search === 'function') {\n\t\t\t\t\t// ...add it as search function for field\n\t\t\t\t\tsearchFunction[field.objectKey] = field.search;\n\t\t\t\t}\n\t\t\t\t// ...if no search function is defined but value function is defined...\n\t\t\t\telse if (typeof field.value === 'function') {\n\t\t\t\t\t// ...add it as search function for field\n\t\t\t\t\tsearchFunction[field.objectKey] = field.value;\n\t\t\t\t}\n\n\t\t\t\t// ...push it to our fields array\n\t\t\t\tfieldsTemp.push(field);\n\t\t\t}\n\t\t}\n\n\t\tconst filteredRows: Array<any> = [];\n\t\tsearchTerms = typeof searchTerms === 'undefined' ? '' : searchTerms;\n\t\tconst searchTermsArray = searchTerms.toLowerCase().match(/(\".*\"|[^\\s]+)/g);\n\n\t\tfor (let i = 0; i < allRows.length; i++) {\n\t\t\tconst row = allRows[i];\n\t\t\tlet string = '';\n\n\t\t\tfor (let j = 0; j < fieldsTemp.length; j++) {\n\t\t\t\tconst separator = j === 0 ? '' : ' & ';\n\t\t\t\tstring += searchFunction[fieldsTemp[j].objectKey]\n\t\t\t\t\t? separator + searchFunction[fieldsTemp[j].objectKey](row, j)\n\t\t\t\t\t: separator + row[fieldsTemp[j].objectKey];\n\t\t\t}\n\t\t\tstring = string.toLowerCase();\n\t\t\tlet match: Boolean = true;\n\n\t\t\tfor (let k = 0; k < searchTermsArray.length; k++) {\n\t\t\t\tconst term = searchTermsArray[k].replace(/\"/g, '');\n\t\t\t\tmatch = string.indexOf(term) !== -1;\n\n\t\t\t\tif (!match) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (match) {\n\t\t\t\tfilteredRows.push(row);\n\t\t\t}\n\t\t}\n\t\tgtInfo.recordsAfterSearch = filteredRows.length;\n\t\t// gtInfo.refresh(filteredRows.length,gt);\n\t\treturn filteredRows;\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'gtIsEditable'\n})\nexport class GtIsEditablePipe implements PipeTransform {\n\ttransform(property: any, row: any, refreshPipe: boolean): boolean {\n\t\tif (typeof property === 'function') {\n\t\t\treturn property(row);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Pipe({\n\tname: 'gtIsObservable'\n})\nexport class GtIsObservablePipe implements PipeTransform {\n\ttransform(input: any): boolean {\n\t\treturn input instanceof Observable;\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({\n\tname: 'gtHighlight'\n})\nexport class GtHighlightPipe implements PipeTransform {\n\tconstructor(private sanitizer: DomSanitizer) {}\n\n\ttransform(text: string, searchTerm: string): SafeHtml {\n\t\tconst haystackAlwaysString = text + '';\n\t\tlet highlightedText = haystackAlwaysString; // fallback\n\n\t\tlet searchPattern;\n\t\ttry {\n\t\t\tsearchPattern = new RegExp(\n\t\t\t\t'(' +\n\t\t\t\tsearchTerm\n\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t.match(/\".*?\"|[^ ]+/g) // extract words\n\t\t\t\t\t.map(\n\t\t\t\t\t\tneedle => needle.replace(/\"(.*?)\"/, '$1') // strip away '\"'\n\t\t\t\t\t)\n\t\t\t\t\t.join('|') + // combine words\n\t\t\t\t\t')',\n\t\t\t\t'ig'\n\t\t\t);\n\t\t} catch (error) {\n\t\t\treturn this.sanitizer.bypassSecurityTrustHtml(highlightedText);\n\t\t}\n\n\t\tconst containsTagPattern = /(<.*?>)(.*)(<\\/.*?>)/gi;\n\t\tconst containsTagMatches = containsTagPattern.exec(haystackAlwaysString);\n\n\t\tif (containsTagMatches) {\n\t\t\t// tag exists in haystack\n\t\t\thighlightedText =\n\t\t\t\tcontainsTagMatches[1] +\n\t\t\t\tcontainsTagMatches[2].replace(\n\t\t\t\t\tsearchPattern,\n\t\t\t\t\t'<span class=\"gt-highlight-search\">$1</span>'\n\t\t\t\t) +\n\t\t\t\tcontainsTagMatches[3];\n\t\t} else {\n\t\t\thighlightedText = haystackAlwaysString.replace(\n\t\t\t\tsearchPattern,\n\t\t\t\t'<span class=\"gt-highlight-search\">$1</span>'\n\t\t\t);\n\t\t}\n\n\t\treturn this.sanitizer.bypassSecurityTrustHtml(highlightedText);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GtConfigField } from '../interfaces/gt-config-field';\nimport { GtRow } from '../interfaces/gt-row';\n\n@Pipe({\n\tname: 'gtColumnClass'\n})\nexport class GtColumnClassPipe implements PipeTransform {\n\ttransform(\n\t\tgtFields: Array<GtConfigField<any, any>>,\n\t\tcolumn: GtConfigField<GtRow, any>,\n\t\trow?: GtRow\n\t): any {\n\t\t// find columns with columnClass property defined\n\t\tconst COLUMN_WITH_CLASS = gtFields\n\t\t\t.map(field => field)\n\t\t\t.filter(\n\t\t\t\tfield => field.columnClass && field.objectKey === column.objectKey\n\t\t\t)[0];\n\t\tif (!COLUMN_WITH_CLASS) {\n\t\t\treturn;\n\t\t} else if (typeof COLUMN_WITH_CLASS.columnClass === 'function') {\n\t\t\t// if column class is a function, try using the function...\n\t\t\ttry {\n\t\t\t\treturn COLUMN_WITH_CLASS.columnClass(row, column);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t'Error when trying to get column class name using formula.',\n\t\t\t\t\terror\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\t// if not a function, return plain string value\n\t\t\treturn COLUMN_WITH_CLASS.columnClass;\n\t\t}\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GtConfigField } from '../interfaces/gt-config-field';\n\n@Pipe({\n\tname: 'gtRowClass'\n})\nexport class GtRowClassPipe implements PipeTransform {\n\ttransform(array: Array<any>, gtFields: Array<GtConfigField<any, any>>): any {\n\t\tif (array) {\n\t\t\t// find columns with rowClass property defined\n\t\t\tconst COLUMNS_WITH_CLASS = gtFields\n\t\t\t\t.map(column => column)\n\t\t\t\t.filter(column => column.rowClass);\n\t\t\tCOLUMNS_WITH_CLASS.map(column => {\n\t\t\t\t// for each column with rowClass property defined...\n\t\t\t\tarray.map(row => {\n\t\t\t\t\t// loop through rows and set row class\n\t\t\t\t\tif (typeof column.rowClass === 'function') {\n\t\t\t\t\t\t// if row class is a function, try using the function...\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (row.$$gtRowClass) {\n\t\t\t\t\t\t\t\trow.$$gtRowClass = row.$$gtRowClass.concat(\n\t\t\t\t\t\t\t\t\t' ' + column.rowClass(row, column)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\trow.$$gtRowClass = column.rowClass(row, column);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t'Error when trying to get row class name using formula.',\n\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// if not a function, return plain string value\n\t\t\t\t\t\tif (row.$$gtRowClass) {\n\t\t\t\t\t\t\trow.$$gtRowClass = row.$$gtRowClass.concat(' ' + column.rowClass);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trow.$$gtRowClass = column.rowClass;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\treturn array;\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GtConfigTotal } from '../interfaces/gt-config-total';\n\n@Pipe({\n\tname: 'gtTotalsPosition'\n})\nexport class GtTotalsPositionPipe implements PipeTransform {\n\ttransform(\n\t\tarray: Array<GtConfigTotal>,\n\t\tposition: 'header' | 'footer' = 'header'\n\t): Array<any> {\n\t\treturn array.filter(total => {\n\t\t\t// if no position is defined assume position to be header\n\t\t\tconst totalPosition = total.position ? total.position : 'header';\n\t\t\treturn totalPosition === position;\n\t\t});\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'gtTotals'\n})\nexport class GtTotalsPipe implements PipeTransform {\n\ttransform(\n\t\tvalue: string | number | Function,\n\t\tdata: Array<any>,\n\t\tobjectKey: string,\n\t\trefresh: boolean\n\t): any {\n\t\tlet output;\n\n\t\tif (data.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof value === 'function') {\n\t\t\toutput = value(data, objectKey);\n\t\t} else if (value) {\n\t\t\toutput = value;\n\t\t} else {\n\t\t\toutput = '';\n\t\t}\n\n\t\treturn output;\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GtConfigField } from '../interfaces/gt-config-field';\nimport { GtRow } from '../interfaces/gt-row';\n\n@Pipe({\n\tname: 'gtOrderBy'\n})\nexport class GtOrderByPipe<R extends GtRow> implements PipeTransform {\n\tstatic _orderByComparator(a: any, b: any): number {\n\t\t// sort boolean values as strings\n\t\tif (typeof a === 'boolean') {\n\t\t\ta = a.toString();\n\t\t}\n\t\tif (typeof b === 'boolean') {\n\t\t\tb = b.toString();\n\t\t}\n\n\t\tif (\n\t\t\tisNaN(parseFloat(a)) ||\n\t\t\t!isFinite(a) ||\n\t\t\t(isNaN(parseFloat(b)) || !isFinite(b))\n\t\t) {\n\t\t\tif (\n\t\t\t\tb === null ||\n\t\t\t\t(typeof b === 'undefined' && (a !== null && typeof a !== 'undefined'))\n\t\t\t) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (\n\t\t\t\ta === null ||\n\t\t\t\t(typeof a === 'undefined' && (b !== null && typeof b !== 'undefined'))\n\t\t\t) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// isn't a number so lowercase the string to properly compare\n\t\t\ttry {\n\t\t\t\tif (a.toLowerCase() < b.toLowerCase()) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif (a.toLowerCase() > b.toLowerCase()) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t} else {\n\t\t\t// parse strings as numbers to compare properly\n\t\t\tif (parseFloat(a) < parseFloat(b)) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif (parseFloat(a) > parseFloat(b)) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t}\n\n\t\treturn 0; // equal each other\n\t}\n\n\t/** Return property */\n\tprivate getProperty = function(array: Array<any>, key: string) {\n\t\tfor (let i = 0; i < array.length; i++) {\n\t\t\tif (array[i].objectKey === key) {\n\t\t\t\treturn array[i];\n\t\t\t}\n\t\t}\n\t};\n\n\t/** Return sort function */\n\tprivate getSortFunction(field: any) {\n\t\tif (!field) {\n\t\t\t// console.log('error trying to sort undefined field');\n\t\t\treturn false;\n\t\t}\n\t\tif (typeof field.sort === 'function') {\n\t\t\treturn field.sort;\n\t\t} else if (typeof field.value === 'function') {\n\t\t\treturn field.value;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\ttransform(\n\t\tinput: any,\n\t\tsortByProperties: Array<string>,\n\t\tfields: GtConfigField<R, any>[],\n\t\trefreshSorting: boolean,\n\t\trefreshData: number\n\t): any {\n\t\tif (!Array.isArray(input) || input === null) {\n\t\t\treturn input;\n\t\t}\n\t\tif (\n\t\t\t!Array.isArray(sortByProperties) ||\n\t\t\t(Array.isArray(sortByProperties) && sortByProperties.length === 1)\n\t\t) {\n\t\t\tconst propertyToCheck: string = sortByProperties[0];\n\t\t\tconst desc = propertyToCheck.substr(0, 1) === '-';\n\n\t\t\t// basic array\n\t\t\tif (\n\t\t\t\t!propertyToCheck ||\n\t\t\t\tpropertyToCheck === '-' ||\n\t\t\t\tpropertyToCheck === '+'\n\t\t\t) {\n\t\t\t\treturn !desc ? input.sort() : input.sort().reverse();\n\t\t\t} else {\n\t\t\t\tconst property: string =\n\t\t\t\t\tpropertyToCheck.substr(0, 1) === '+' ||\n\t\t\t\t\tpropertyToCheck.substr(0, 1) === '-'\n\t\t\t\t\t\t? propertyToCheck.substr(1)\n\t\t\t\t\t\t: propertyToCheck;\n\n\t\t\t\t// check if custom sort function is defined\n\t\t\t\tconst sortFunction: any = this.getSortFunction(\n\t\t\t\t\tthis.getProperty(fields, property)\n\t\t\t\t);\n\n\t\t\t\t// console.log(property);\n\t\t\t\treturn input.sort(function(a: any, b: any) {\n\t\t\t\t\t// use custom sort function if one is defined\n\t\t\t\t\tconst propertyA =\n\t\t\t\t\t\tsortFunction === false\n\t\t\t\t\t\t\t? property === '$$gtRowId'\n\t\t\t\t\t\t\t\t? +a.$$gtRowId.split('_')[0]\n\t\t\t\t\t\t\t\t: a[property]\n\t\t\t\t\t\t\t: sortFunction(a);\n\t\t\t\t\tconst propertyB =\n\t\t\t\t\t\tsortFunction === false\n\t\t\t\t\t\t\t? property === '$$gtRowId'\n\t\t\t\t\t\t\t\t? +b.$$gtRowId.split('_')[0]\n\t\t\t\t\t\t\t\t: b[property]\n\t\t\t\t\t\t\t: sortFunction(b);\n\n\t\t\t\t\t// if both values are undefined...\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof propertyA === 'undefined' &&\n\t\t\t\t\t\ttypeof propertyB === 'undefined'\n\t\t\t\t\t) {\n\t\t\t\t\t\t// ...skip comparison\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn !desc\n\t\t\t\t\t\t? GtOrderByPipe._orderByComparator(propertyA, propertyB)\n\t\t\t\t\t\t: -GtOrderByPipe._orderByComparator(propertyA, propertyB);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\t// loop over property of the array in order and sort\n\t\t\treturn input.sort((a: any, b: any) => {\n\t\t\t\t// console.log('multiple');\n\t\t\t\tfor (let i = 0; i < sortByProperties.length; i++) {\n\t\t\t\t\tconst desc = sortByProperties[i].substr(0, 1) === '-';\n\t\t\t\t\tconst property =\n\t\t\t\t\t\tsortByProperties[i].substr(0, 1) === '+' ||\n\t\t\t\t\t\tsortByProperties[i].substr(0, 1) === '-'\n\t\t\t\t\t\t\t? sortByProperties[i].substr(1)\n\t\t\t\t\t\t\t: sortByProperties[i];\n\n\t\t\t\t\t// console.log(property);\n\t\t\t\t\t// check if custom sort function is defined\n\t\t\t\t\tconst sortFunction: any = this.getSortFunction(\n\t\t\t\t\t\tthis.getProperty(fields, property)\n\t\t\t\t\t);\n\n\t\t\t\t\t// use custom sort function if one is defined\n\t\t\t\t\tconst propertyA =\n\t\t\t\t\t\tsortFunction === false\n\t\t\t\t\t\t\t? property === '$$gtRowId'\n\t\t\t\t\t\t\t\t? +a.$$gtRowId.split('_')[0]\n\t\t\t\t\t\t\t\t: a[property]\n\t\t\t\t\t\t\t: sortFunction(a);\n\t\t\t\t\tconst propertyB =\n\t\t\t\t\t\tsortFunction === false\n\t\t\t\t\t\t\t? property === '$$gtRowId'\n\t\t\t\t\t\t\t\t? +b.$$gtRowId.split('_')[0]\n\t\t\t\t\t\t\t\t: b[property]\n\t\t\t\t\t\t\t: sortFunction(b);\n\n\t\t\t\t\tconst comparison = !desc\n\t\t\t\t\t\t? GtOrderByPipe._orderByComparator(propertyA, propertyB)\n\t\t\t\t\t\t: -GtOrderByPipe._orderByComparator(propertyA, propertyB);\n\n\t\t\t\t\t// don't return 0 yet in case of needing to sort by next property\n\t\t\t\t\tif (comparison !== 0) {\n\t\t\t\t\t\treturn comparison;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn 0; // equal each other\n\t\t\t});\n\t\t}\n\t}\n}\n","import { Pipe, PipeTransform, EventEmitter, Output } from '@angular/core';\nimport { GtInformation } from '../interfaces/gt-information';\n\n@Pipe({\n\tname: 'gtFilter'\n})\nexport class GtFilterPipe implements PipeTransform {\n\t// @Output() filterInfo = new EventEmitter();\n\n\ttransform(\n\t\tallRows: any[],\n\t\tfilterBy: Object,\n\t\tgtInfo: GtInformation,\n\t\trefreshFilter: boolean,\n\t\trefreshData: number\n\t): any[] {\n\t\t// console.log(allRows,filterBy);\n\t\tgtInfo.recordsAll = allRows.length;\n\t\tif (!Array.isArray(allRows) || !filterBy) {\n\t\t\t// gtInfo.filtered = false;\n\n\t\t\tconst length = allRows === null ? 0 : allRows.length;\n\t\t\tgtInfo.recordsAfterFilter = length;\n\t\t\treturn allRows;\n\t\t}\n\n\t\tconst output = [];\n\t\tfor (let i = 0; i < allRows.length; i++) {\n\t\t\tconst rowObject = allRows[i];\n\t\t\tlet match = true;\n\n\t\t\tfor (const property in filterBy) {\n\t\t\t\tif (filterBy.hasOwnProperty(property)) {\n\t\t\t\t\t// console.log(property);\n\t\t\t\t\t// console.log(filter[property].indexOf(obj[property]));\n\t\t\t\t\tif (filterBy[property].indexOf(rowObject[property]) === -1) {\n\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (match) {\n\t\t\t\toutput.push(rowObject);\n\t\t\t}\n\t\t}\n\t\tgtInfo.recordsAfterFilter = output.length; // .emit(output.length);\n\t\treturn output;\n\t}\n}\n","import { Pipe, PipeTransform, EventEmitter } from '@angular/core';\nimport { GtInformation } from '../interfaces/gt-information';\nimport { GtEvent } from '../interfaces/gt-event';\n\n@Pipe({\n\tname: 'gtChunk'\n})\nexport class GtChunkPipe implements PipeTransform {\n\ttransform(\n\t\tarray: any[],\n\t\tgtInfo: GtInformation,\n\t\tchunkSize: number,\n\t\tpage: number,\n\t\trefreshPageArray: boolean,\n\t\trefreshData: number,\n\t\tgtEvent: EventEmitter<GtEvent>,\n\t\tdata: { exportData: Array<any> }\n\t): any[] {\n\t\tif (!Array.isArray(array)) {\n\t\t\treturn array;\n\t\t}\n\t\tdata.exportData = array; // store data for export\n\n\t\tconst PAGES = [];\n\t\tconst ENTRIES = array.length;\n\n\t\tfor (let i = 0; i < ENTRIES; i += chunkSize) {\n\t\t\tPAGES.push(array.slice(i, i + chunkSize));\n\t\t}\n\t\tgtInfo.visibleRecords = !PAGES[page - 1] ? [] : [...PAGES[page - 1]]; // add visible rows\n\t\tgtInfo.pageTotal = PAGES.length; // add number of pages\n\n\t\tsetTimeout(\n\t\t\t() =>\n\t\t\t\tgtEvent.emit({\n\t\t\t\t\tname: 'gt-info',\n\t\t\t\t\tvalue: gtInfo\n\t\t\t\t}),\n\t\t\t0\n\t\t);\n\t\treturn PAGES[page - 1];\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GtConfigField } from '../interfaces/gt-config-field';\nimport { GtConfigSetting } from '../interfaces/gt-config-setting';\nimport { GtRow } from '../interfaces/gt-row';\n\n@Pipe({\n\tname: 'gtProperty'\n})\nexport class GtPropertyPipe<R extends GtRow> implements PipeTransform {\n\ttransform(\n\t\tconfig: GtConfigField<R, any>[] | GtConfigSetting[],\n\t\tobjectKey: string,\n\t\tproperty: string,\n\t\trefresh?: boolean\n\t): any {\n\t\tlet output = null;\n\t\ttry {\n\t\t\tfor (let i = 0; i < config.length; i++) {\n\t\t\t\tif (config[i].objectKey === objectKey) {\n\t\t\t\t\toutput = config[i][property];\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.log(\n\t\t\t\t'cannot read property: \"' +\n\t\t\t\t\tproperty +\n\t\t\t\t\t'\" on missing key: \"' +\n\t\t\t\t\tobjectKey +\n\t\t\t\t\t'\" in config.',\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t\treturn output;\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'dashCase'\n})\nexport class DashCasePipe implements PipeTransform {\n\ttransform(string: string): string {\n\t\treturn string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GtConfigSetting } from '../interfaces/gt-config-setting';\nimport { GtConfigField } from '../interfaces/gt-config-field';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { GtRow } from '../interfaces/gt-row';\nimport { GtRenderField } from '../interfaces/gt-render-field';\nimport { GtHighlightPipe } from './gt-highlight.pipe';\n\n@Pipe({\n\tname: 'gtRender'\n})\nexport class GtRenderPipe<R extends GtRow> implements PipeTransform {\n\tconstructor(\n\t\tprivate sanitizer: DomSanitizer,\n\t\tprivate gtHighlightPipe: GtHighlightPipe\n\t) {}\n\n\t// TODO: move to helper functions\n\t/** Sort by column order */\n\tprivate getColumnOrder = function(a: GtConfigSetting, b: GtConfigSetting) {\n\t\tif (a.columnOrder < b.columnOrder) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.columnOrder > b.columnOrder || typeof a.columnOrder === 'undefined') {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t};\n\n\t/** Sort by length */\n\tprivate getOrderByLength = function(a: any, b: any) {\n\t\treturn b.length - a.length;\n\t};\n\n\t/** Return property */\n\tprivate getProperty = function(array: Array<any>, key: string) {\n\t\tfor (let i = 0; i < array.length; i++) {\n\t\t\tif (array[i].objectKey === key) {\n\t\t\t\treturn array[i];\n\t\t\t}\n\t\t}\n\t};\n\n\ttransform(\n\t\trow: any,\n\t\tsettings: Array<GtConfigSetting>,\n\t\tfields: Array<GtConfigField<R, any>>,\n\t\tupdated: boolean,\n\t\tloading: boolean,\n\t\thighlight: boolean = false,\n\t\tsearchString?: string\n\t): Array<GtRenderField<R, any>> {\n\t\t// let arr = [{\"temp\":123,\"name\":\"happy\"},{\"temp\":456,\"name\":\"dfgdfg\"},{\"temp\":789,\"name\":\"asdasd\"}];\n\t\t// console.log(arr,arr.map(function(item){return item.temp}));\n\t\t// console.log(settings.map('objectKey'));\n\n\t\t// console.log('render');\n\t\tconst columns: Array<string> = [];\n\t\tfor (let i = 0; i < settings.length; i++) {\n\t\t\tif (settings[i].visible !== false && settings[i].enabled !== false) {\n\t\t\t\tcolumns.push(settings[i].objectKey);\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < fields.length; i++) {\n\t\t\t// console.log(!row[fields[i].objectKey]);\n\t\t\tif (\n\t\t\t\tfields[i].value &&\n\t\t\t\ttypeof fields[i].value === 'function' &&\n\t\t\t\t!row.hasOwnProperty(fields[i].objectKey)\n\t\t\t) {\n\t\t\t\trow[fields[i].objectKey] = loading ? '' : fields[i].value(row);\n\t\t\t}\n\t\t}\n\t\t// console.log(row);\n\t\tconst keys: Array<any> = [];\n\t\tfor (const key in row) {\n\t\t\t// console.log(key);\n\t\t\tif (columns.indexOf(key) !== -1) {\n\t\t\t\tlet fieldSetting;\n\t\t\t\tfor (let i = 0; i < fields.length; i++) {\n\t\t\t\t\tif (fields[i].objectKey === key) {\n\t\t\t\t\t\tfieldSetting = fields[i];\n\t\t\t\t\t\t// console.log(fieldSetting);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst columnObject: GtRenderField<R, any> = {\n\t\t\t\t\tobjectKey: key,\n\t\t\t\t\tsortValue: row[key]\n\t\t\t\t};\n\n\t\t\t\t// add component if defined\n\t\t\t\tif (fieldSetting.columnComponent) {\n\t\t\t\t\tcolumnObject.columnComponent = fieldSetting.columnComponent;\n\t\t\t\t}\n\n\t\t\t\tif (loading) {\n\t\t\t\t\tcolumnObject.renderValue = row[key] !== null ? row[key] : '';\n\t\t\t\t} else if (\n\t\t\t\t\thighlight &&\n\t\t\t\t\tsearchString &&\n\t\t\t\t\tthis.getProperty(settings, key).search !== false\n\t\t\t\t) {\n\t\t\t\t\tcolumnObject.renderValue =\n\t\t\t\t\t\tfieldSetting.render && typeof fieldSetting.render === 'function'\n\t\t\t\t\t\t\t? this.gtHighlightPipe.transform(\n\t\t\t\t\t\t\t\t\tfieldSetting.render(row),\n\t\t\t\t\t\t\t\t\tsearchString\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: this.gtHighlightPipe.transform(\n\t\t\t\t\t\t\t\t\trow[key] !== null ? row[key] : '',\n\t\t\t\t\t\t\t\t\tsearchString\n\t\t\t\t\t\t\t );\n\t\t\t\t} else {\n\t\t\t\t\tcolumnObject.renderValue =\n\t\t\t\t\t\tfieldSetting.render && typeof fieldSetting.render === 'function'\n\t\t\t\t\t\t\t? this.sanitizer.bypassSecurityTrustHtml(fieldSetting.render(row))\n\t\t\t\t\t\t\t: row[key] !== null\n\t\t\t\t\t\t\t\t? row[key]\n\t\t\t\t\t\t\t\t: '';\n\t\t\t\t}\n\n\t\t\t\tif (fieldSetting.click && typeof fieldSetting.click === 'function') {\n\t\t\t\t\tcolumnObject.click = fieldSetting.click;\n\t\t\t\t}\n\t\t\t\tif (fieldSetting.expand) {\n\t\t\t\t\tcolumnObject.expand = fieldSetting.expand;\n\t\t\t\t}\n\n\t\t\t\tkeys.push(columnObject);\n\t\t\t}\n\t\t}\n\n\t\tkeys.sort(function(a: any, b: any) {\n\t\t\treturn columns.indexOf(a.objectKey) < columns.indexOf(b.objectKey)\n\t\t\t\t? -1\n\t\t\t\t: 1;\n\t\t});\n\t\treturn keys;\n\t}\n}\n","import {\n\tComponentFactory,\n\tComponentFactoryResolver,\n\tComponentRef,\n\tDirective,\n\tEventEmitter,\n\tInjector,\n\tInput,\n\tOnInit,\n\tOutput,\n\tType,\n\tViewContainerRef\n} from '@angular/core';\n\n@Directive({\n\tselector: '[gtComponentAnchor]'\n})\nexport class ComponentAnchorDirective<C> implements OnInit {\n\t@Input() ctor: Type<C>;\n\t@Input() injector: Injector;\n\t@Output() instance: EventEmitter<C> = new EventEmitter<C>();\n\n\tconstructor(\n\t\tprivate componentFactoryResolver: ComponentFactoryResolver,\n\t\tprivate viewContainer: ViewContainerRef\n\t) {}\n\n\tngOnInit(): void {\n\t\tconst factory: ComponentFactory<\n\t\t\tC\n\t\t> = this.componentFactoryResolver.resolveComponentFactory(this.ctor);\n\t\tconst component: ComponentRef<C> = this.viewContainer.createComponent(\n\t\t\tfactory,\n\t\t\t0,\n\t\t\tthis.injector\n\t\t);\n\t\tthis.instance.emit(component.instance);\n\t}\n}\n","import {\n\tChangeDetectorRef,\n\tDirective,\n\tElementRef,\n\tHostListener,\n\tInput\n} from '@angular/core';\n\n@Directive({\n\tselector: '[gtColumnWidth]'\n})\nexport class GtColumnWidthDirective {\n\t@Input() objectKey: string;\n\t@Input() widths: Object;\n\t@HostListener('window:resize', ['$event'])\n\tpublic onResize($event: any) {\n\t\tthis.checkSize();\n\t}\n\tconstructor(\n\t\tprivate hostElement: ElementRef,\n\t\tprivate cdRef: ChangeDetectorRef\n\t) {}\n\tngOnInit() {\n\t\tthis.checkSize();\n\t}\n\n\tcheckSize() {\n\t\tthis.widths[this.objectKey] = window\n\t\t\t.getComputedStyle(this.hostElement.nativeElement, null)\n\t\t\t.getPropertyValue('width');\n\t\tthis.cdRef.detectChanges();\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport { GtCheckboxComponent } from './components/gt-checkbox/gt-checkbox.component';\nimport { GtDrilldownComponent } from './components/gt-drilldown/gt-drilldown.component';\nimport { GtDropdownComponent } from './components/gt-dropdown/gt-dropdown.component';\nimport { GtExpandingRowComponent } from './components/gt-expanding-row/gt-expanding-row.component';\nimport {\n\tGtPaginationComponent,\n\tPaginationPipe\n} from './components/gt-pagination/gt-pagination.component';\nimport {\n\tGtTableInfoComponent,\n\tTableInfoPipe\n} from './components/gt-table-info/gt-table-info.component';\nimport { GenericTableComponent } from './components/generic-table/generic-table.component';\nimport { GtVisiblePipe } from './pipes/gt-visible.pipe';\nimport { GtSearchPipe } from './pipes/gt-search.pipe';\nimport { GtIsEditablePipe } from './pipes/gt-is-editable.pipe';\nimport { GtIsObservablePipe } from './pipes/gt-is-observable.pipe';\nimport { GtHighlightPipe } from './pipes/gt-highlight.pipe';\nimport { GtColumnClassPipe } from './pipes/gt-column-class.pipe';\nimport { GtRowClassPipe } from './pipes/gt-row-class.pipe';\nimport { GtTotalsPositionPipe } from './pipes/gt-totals-position.pipe';\nimport { GtTotalsPipe } from './pipes/gt-totals.pipe';\nimport { GtMetaPipe } from './pipes/gt-meta.pipe';\nimport { GtOrderByPipe } from './pipes/gt-order-by.pipe';\nimport { GtFilterPipe } from './pipes/gt-filter.pipe';\nimport { GtChunkPipe } from './pipes/gt-chunk.pipe';\nimport { GtPropertyPipe } from './pipes/gt-property.pipe';\nimport { DashCasePipe } from './pipes/dash-case.pipe';\nimport { GtRenderPipe } from './pipes/gt-render.pipe';\nimport { GtCustomComponentFactory } from './components/gt-custom-component-factory/gt-custom-component-factory.component';\nimport { ComponentAnchorDirective } from './directives/component-anchor.directive';\nimport { GtColumnWidthDirective } from './directives/gt-column-width.directive';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n\tdeclarations: [\n\t\tComponentAnchorDirective,\n\t\tGenericTableComponent,\n\t\tGtPaginationComponent,\n\t\tGtVisiblePipe,\n\t\tGtRenderPipe,\n\t\tDashCasePipe,\n\t\tGtPropertyPipe,\n\t\tGtChunkPipe,\n\t\tGtFilterPipe,\n\t\tGtOrderByPipe,\n\t\tGtExpandingRowComponent,\n\t\tGtCustomComponentFactory,\n\t\tGtSearchPipe,\n\t\tPaginationPipe,\n\t\tGtTableInfoComponent,\n\t\tTableInfoPipe,\n\t\tGtMetaPipe,\n\t\tGtTotalsPipe,\n\t\tGtTotalsPositionPipe,\n\t\tGtRowClassPipe,\n\t\tGtColumnClassPipe,\n\t\tGtHighlightPipe,\n\t\tGtIsObservablePipe,\n\t\tGtIsEditablePipe,\n\t\tGtDropdownComponent,\n\t\tGtColumnWidthDirective,\n\t\tGtDrilldownComponent,\n\t\tGtCheckboxComponent\n\t],\n\timports: [CommonModule, FormsModule],\n\texports: [\n\t\tGenericTableComponent,\n\t\tGtPaginationComponent,\n\t\tGtTableInfoComponent,\n\t\tGtRenderPipe,\n\t\tGtColumnClassPipe,\n\t\tGtPropertyPipe,\n\t\tGtHighlightPipe,\n\t\tGtExpandingRowComponent,\n\t\tGtDropdownComponent,\n\t\tGtDrilldownComponent,\n\t\tGtCheckboxComponent\n\t],\n\tentryComponents: [GtDrilldownComponent, GtCheckboxComponent],\n\tproviders: [GtMetaPipe, GtHighlightPipe]\n})\nexport class GenericTableModule {}\n"],"names":[],"mappings":"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"}