@iamproperty/components 7.0.0 → 7.1.0--beta2

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 (411) hide show
  1. package/assets/css/components/actionbar.css.map +1 -1
  2. package/assets/css/components/actionbar.global.css.map +1 -1
  3. package/assets/css/components/address-lookup.css.map +1 -1
  4. package/assets/css/components/applied-filters.css.map +1 -1
  5. package/assets/css/components/barchart.component.css +1 -1
  6. package/assets/css/components/barchart.component.css.map +1 -1
  7. package/assets/css/components/card.component.css +1 -1
  8. package/assets/css/components/card.component.css.map +1 -1
  9. package/assets/css/components/card.module.css.map +1 -1
  10. package/assets/css/components/carousel.component.css +1 -1
  11. package/assets/css/components/carousel.component.css.map +1 -1
  12. package/assets/css/components/carousel.config.css.map +1 -1
  13. package/assets/css/components/charts.config.css.map +1 -1
  14. package/assets/css/components/charts.css +1 -1
  15. package/assets/css/components/charts.css.map +1 -1
  16. package/assets/css/components/charts.module.css +1 -1
  17. package/assets/css/components/charts.module.css.map +1 -1
  18. package/assets/css/components/collapsible-side.css.map +1 -1
  19. package/assets/css/components/fileupload.css.map +1 -1
  20. package/assets/css/components/filter-card.component.css.map +1 -1
  21. package/assets/css/components/header.css.map +1 -1
  22. package/assets/css/components/inline-edit.css.map +1 -1
  23. package/assets/css/components/inline-edit.preload.css.map +1 -1
  24. package/assets/css/components/marketing.css.map +1 -1
  25. package/assets/css/components/multi-step.component.css.map +1 -1
  26. package/assets/css/components/multiselect.css +1 -1
  27. package/assets/css/components/multiselect.css.map +1 -1
  28. package/assets/css/components/multiselect.preload.css.map +1 -1
  29. package/assets/css/components/nav.css +1 -1
  30. package/assets/css/components/nav.css.map +1 -1
  31. package/assets/css/components/nav.docs.css.map +1 -1
  32. package/assets/css/components/nav.global.css +1 -1
  33. package/assets/css/components/nav.global.css.map +1 -1
  34. package/assets/css/components/nav.old.css +1 -1
  35. package/assets/css/components/nav.old.css.map +1 -1
  36. package/assets/css/components/nav.preload.css.map +1 -1
  37. package/assets/css/components/notification.css.map +1 -1
  38. package/assets/css/components/notification.global.css.map +1 -1
  39. package/assets/css/components/pagination.css.map +1 -1
  40. package/assets/css/components/property-searchbar.css +1 -1
  41. package/assets/css/components/property-searchbar.css.map +1 -1
  42. package/assets/css/components/record-card.component.css.map +1 -1
  43. package/assets/css/components/slider.css.map +1 -1
  44. package/assets/css/components/snapshot.css.map +1 -1
  45. package/assets/css/components/stepper.css.map +1 -1
  46. package/assets/css/components/table.css +1 -1
  47. package/assets/css/components/table.css.map +1 -1
  48. package/assets/css/components/table.global.css +1 -1
  49. package/assets/css/components/table.global.css.map +1 -1
  50. package/assets/css/components/tabs.css.map +1 -1
  51. package/assets/css/components/testimonial.css.map +1 -1
  52. package/assets/css/components/timeline.css +1 -1
  53. package/assets/css/components/timeline.css.map +1 -1
  54. package/assets/css/components/video-card.component.css.map +1 -1
  55. package/assets/css/core.min.css +1 -1
  56. package/assets/css/core.min.css.map +1 -1
  57. package/assets/css/style.min.css +1 -1
  58. package/assets/css/style.min.css.map +1 -1
  59. package/assets/js/components/_global.js +8 -8
  60. package/assets/js/components/accordion/accordion.component.js +13 -10
  61. package/assets/js/components/accordion/accordion.component.min.js +4 -4
  62. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  63. package/assets/js/components/actionbar/actionbar.component.js +97 -83
  64. package/assets/js/components/actionbar/actionbar.component.min.js +5 -5
  65. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  66. package/assets/js/components/address-lookup/address-lookup.component.js +30 -26
  67. package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
  68. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  69. package/assets/js/components/applied-filters/applied-filters.component.js +10 -6
  70. package/assets/js/components/applied-filters/applied-filters.component.min.js +3 -3
  71. package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
  72. package/assets/js/components/barchart/barchart.component.js +8 -7
  73. package/assets/js/components/barchart/barchart.component.min.js +4 -4
  74. package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
  75. package/assets/js/components/card/card.component.js +27 -12
  76. package/assets/js/components/card/card.component.min.js +3 -3
  77. package/assets/js/components/card/card.component.min.js.map +1 -1
  78. package/assets/js/components/carousel/carousel.component.js +18 -12
  79. package/assets/js/components/carousel/carousel.component.min.js +4 -4
  80. package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
  81. package/assets/js/components/chart/chart.component.js +9 -8
  82. package/assets/js/components/collapsible-side/collapsible-side.component.js +20 -8
  83. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  84. package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
  85. package/assets/js/components/fileupload/fileupload.component.js +11 -7
  86. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  87. package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
  88. package/assets/js/components/filter-card/filter-card.component.js +19 -9
  89. package/assets/js/components/filter-card/filter-card.component.min.js +2 -2
  90. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
  91. package/assets/js/components/filterlist/filterlist.component.js +10 -6
  92. package/assets/js/components/filterlist/filterlist.component.min.js +3 -3
  93. package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -1
  94. package/assets/js/components/header/header.component.js +8 -4
  95. package/assets/js/components/header/header.component.min.js +1 -1
  96. package/assets/js/components/header/header.component.min.js.map +1 -1
  97. package/assets/js/components/inline-edit/inline-edit.component.js +43 -23
  98. package/assets/js/components/inline-edit/inline-edit.component.min.js +4 -4
  99. package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
  100. package/assets/js/components/marketing/marketing.component.js +11 -5
  101. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  102. package/assets/js/components/marketing/marketing.component.min.js.map +1 -1
  103. package/assets/js/components/multi-step/multi-step.component.js +22 -19
  104. package/assets/js/components/multiselect/multiselect.component.js +62 -45
  105. package/assets/js/components/multiselect/multiselect.component.min.js +5 -5
  106. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  107. package/assets/js/components/nav/nav.component.js +57 -38
  108. package/assets/js/components/nav/nav.component.min.js +5 -5
  109. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  110. package/assets/js/components/notification/notification.component.js +9 -5
  111. package/assets/js/components/notification/notification.component.min.js +5 -5
  112. package/assets/js/components/notification/notification.component.min.js.map +1 -1
  113. package/assets/js/components/pagination/pagination.component.js +18 -14
  114. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  115. package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
  116. package/assets/js/components/record-card/record-card.component.js +10 -8
  117. package/assets/js/components/record-card/record-card.component.min.js +2 -2
  118. package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
  119. package/assets/js/components/search/search.component.js +22 -17
  120. package/assets/js/components/search/search.component.min.js +4 -4
  121. package/assets/js/components/search/search.component.min.js.map +1 -1
  122. package/assets/js/components/slider/slider.component.js +25 -21
  123. package/assets/js/components/slider/slider.component.min.js +3 -3
  124. package/assets/js/components/slider/slider.component.min.js.map +1 -1
  125. package/assets/js/components/table/table.component.js +30 -24
  126. package/assets/js/components/table/table.component.min.js +7 -7
  127. package/assets/js/components/table/table.component.min.js.map +1 -1
  128. package/assets/js/components/tabs/tabs.component.js +10 -6
  129. package/assets/js/components/tabs/tabs.component.min.js +3 -3
  130. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  131. package/assets/js/components/video-card/video-card.component.js +45 -33
  132. package/assets/js/components/video-card/video-card.component.min.js +3 -3
  133. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  134. package/assets/js/components.bundle.js +1 -1
  135. package/assets/js/components.bundle.js.map +1 -1
  136. package/assets/js/components.js +35 -8
  137. package/assets/js/modules/applied-filters.js +20 -20
  138. package/assets/js/modules/carousel.js +65 -60
  139. package/assets/js/modules/chart.js +184 -134
  140. package/assets/js/modules/chart.module.js +74 -63
  141. package/assets/js/modules/data-layer.js +17 -17
  142. package/assets/js/modules/dialogs.js +47 -38
  143. package/assets/js/modules/drawer.js +1 -1
  144. package/assets/js/modules/dynamicEvents.js +24 -24
  145. package/assets/js/modules/file-upload.js +8 -9
  146. package/assets/js/modules/fileupload.js +5 -5
  147. package/assets/js/modules/filterlist.js +4 -4
  148. package/assets/js/modules/form.js +22 -18
  149. package/assets/js/modules/helpers.js +54 -44
  150. package/assets/js/modules/inputs.js +25 -21
  151. package/assets/js/modules/nav.js +3 -1
  152. package/assets/js/modules/notification.js +6 -6
  153. package/assets/js/modules/orderablelist.js +12 -12
  154. package/assets/js/modules/pagination.js +5 -5
  155. package/assets/js/modules/table.js +242 -181
  156. package/assets/js/modules/tabs.js +71 -60
  157. package/assets/js/modules/testimonial.js +11 -12
  158. package/assets/js/scripts.bundle.js +1 -1
  159. package/assets/js/scripts.bundle.js.map +1 -1
  160. package/assets/js/scripts.bundle.min.js +1 -1
  161. package/assets/js/scripts.bundle.min.js.map +1 -1
  162. package/assets/js/scripts.js +1 -1
  163. package/assets/js/tests/chart.spec.js +5 -5
  164. package/assets/js/tests/filterlist.spec.js +2 -2
  165. package/assets/js/tests/slider.spec.js +2 -2
  166. package/assets/js/tests/table.spec.js +2 -2
  167. package/assets/js/vendor/hibp.js +4 -4
  168. package/assets/sass/_components.scss +28 -40
  169. package/assets/sass/_corefiles.scss +22 -29
  170. package/assets/sass/_elements.scss +19 -19
  171. package/assets/sass/_fonts.scss +10 -7
  172. package/assets/sass/_func.scss +14 -14
  173. package/assets/sass/_functions/functions.scss +115 -90
  174. package/assets/sass/_functions/mixins.scss +72 -112
  175. package/assets/sass/_functions/utilities.scss +447 -393
  176. package/assets/sass/_functions/variables.scss +1357 -1371
  177. package/assets/sass/_print.scss +18 -16
  178. package/assets/sass/_tests/colours.spec.scss +15 -14
  179. package/assets/sass/_tests/func.spec.scss +1 -2
  180. package/assets/sass/_tests/mixins.spec.scss +9 -14
  181. package/assets/sass/_tests/typography.spec.scss +1 -2
  182. package/assets/sass/_utilities.scss +8 -12
  183. package/assets/sass/components/actionbar.global.scss +45 -64
  184. package/assets/sass/components/actionbar.scss +58 -84
  185. package/assets/sass/components/address-lookup.scss +9 -11
  186. package/assets/sass/components/applied-filters.scss +3 -7
  187. package/assets/sass/components/barchart.component.scss +68 -99
  188. package/assets/sass/components/card.component.scss +35 -50
  189. package/assets/sass/components/card.module.scss +34 -37
  190. package/assets/sass/components/carousel.component.scss +198 -177
  191. package/assets/sass/components/carousel.config.scss +13 -19
  192. package/assets/sass/components/charts.config.scss +16 -23
  193. package/assets/sass/components/charts.module.scss +139 -178
  194. package/assets/sass/components/charts.scss +173 -232
  195. package/assets/sass/components/collapsible-side.scss +65 -98
  196. package/assets/sass/components/fileupload.scss +17 -23
  197. package/assets/sass/components/filter-card.component.scss +21 -28
  198. package/assets/sass/components/header.scss +24 -37
  199. package/assets/sass/components/inline-edit.preload.scss +24 -45
  200. package/assets/sass/components/inline-edit.scss +4 -5
  201. package/assets/sass/components/marketing.scss +19 -14
  202. package/assets/sass/components/multi-step.component.scss +36 -42
  203. package/assets/sass/components/multiselect.preload.scss +9 -12
  204. package/assets/sass/components/multiselect.scss +20 -24
  205. package/assets/sass/components/nav.docs.scss +7 -15
  206. package/assets/sass/components/nav.global.scss +123 -177
  207. package/assets/sass/components/nav.old.scss +64 -135
  208. package/assets/sass/components/nav.preload.scss +11 -12
  209. package/assets/sass/components/nav.scss +126 -173
  210. package/assets/sass/components/notification.global.scss +2 -3
  211. package/assets/sass/components/notification.scss +17 -32
  212. package/assets/sass/components/pagination.scss +32 -44
  213. package/assets/sass/components/property-searchbar.scss +2 -6
  214. package/assets/sass/components/record-card.component.scss +42 -55
  215. package/assets/sass/components/slider.scss +38 -35
  216. package/assets/sass/components/snapshot.scss +4 -10
  217. package/assets/sass/components/stepper.scss +14 -22
  218. package/assets/sass/components/table.global.scss +130 -171
  219. package/assets/sass/components/table.scss +17 -27
  220. package/assets/sass/components/tabs.scss +23 -32
  221. package/assets/sass/components/testimonial.scss +6 -14
  222. package/assets/sass/components/timeline.scss +8 -12
  223. package/assets/sass/components/video-card.component.scss +9 -14
  224. package/assets/sass/components.reset.scss +5 -5
  225. package/assets/sass/core.scss +3 -3
  226. package/assets/sass/elements/admin-panel.scss +41 -45
  227. package/assets/sass/elements/badge-tag.scss +16 -26
  228. package/assets/sass/elements/brand.scss +13 -16
  229. package/assets/sass/elements/buttons.scss +80 -106
  230. package/assets/sass/elements/container.scss +24 -133
  231. package/assets/sass/elements/details.scss +30 -50
  232. package/assets/sass/elements/dialog.scss +4 -6
  233. package/assets/sass/elements/forms.scss +421 -437
  234. package/assets/sass/elements/icons.scss +3 -4
  235. package/assets/sass/elements/links.scss +17 -25
  236. package/assets/sass/elements/lists.scss +30 -47
  237. package/assets/sass/elements/media.scss +1 -4
  238. package/assets/sass/elements/modal.scss +54 -80
  239. package/assets/sass/elements/popover.scss +28 -45
  240. package/assets/sass/elements/progress.scss +30 -40
  241. package/assets/sass/elements/table.element.scss +10 -15
  242. package/assets/sass/elements/tooltips.scss +27 -49
  243. package/assets/sass/elements/type.scss +47 -53
  244. package/assets/sass/email.scss +7 -9
  245. package/assets/sass/error.scss +23 -20
  246. package/assets/sass/foundations/bs_grid.scss +0 -1
  247. package/assets/sass/foundations/grid.scss +120 -122
  248. package/assets/sass/foundations/reboot.scss +27 -35
  249. package/assets/sass/foundations/root.scss +21 -31
  250. package/assets/sass/helpers/dynamic.scss +5 -5
  251. package/assets/sass/helpers/line-clamp.scss +1 -2
  252. package/assets/sass/helpers/max-height.scss +28 -36
  253. package/assets/sass/helpers/wider-colours.scss +2 -5
  254. package/assets/sass/main.scss +4 -4
  255. package/assets/sass/templates/auth.scss +11 -18
  256. package/assets/sass/templates/form.scss +16 -29
  257. package/assets/ts/components/_global.ts +14 -17
  258. package/assets/ts/components/accordion/accordion.component.ts +23 -19
  259. package/assets/ts/components/actionbar/README.md +8 -7
  260. package/assets/ts/components/actionbar/actionbar.component.ts +170 -220
  261. package/assets/ts/components/address-lookup/address-lookup.component.ts +94 -130
  262. package/assets/ts/components/applied-filters/README.md +1 -1
  263. package/assets/ts/components/applied-filters/applied-filters.component.ts +16 -15
  264. package/assets/ts/components/barchart/barchart.component.ts +29 -26
  265. package/assets/ts/components/card/card.component.ts +56 -57
  266. package/assets/ts/components/carousel/README.md +8 -9
  267. package/assets/ts/components/carousel/carousel.component.ts +30 -33
  268. package/assets/ts/components/chart/README.md +1 -3
  269. package/assets/ts/components/chart/chart.component.ts +24 -36
  270. package/assets/ts/components/collapsible-side/README.md +1 -1
  271. package/assets/ts/components/collapsible-side/collapsible-side.component.ts +44 -57
  272. package/assets/ts/components/fileupload/README.md +3 -3
  273. package/assets/ts/components/fileupload/fileupload.component.ts +23 -28
  274. package/assets/ts/components/filter-card/filter-card.component.ts +32 -33
  275. package/assets/ts/components/filterlist/README.md +3 -3
  276. package/assets/ts/components/filterlist/filterlist.component.ts +18 -16
  277. package/assets/ts/components/header/README.md +8 -9
  278. package/assets/ts/components/header/header.component.ts +15 -16
  279. package/assets/ts/components/inline-edit/README.md +1 -0
  280. package/assets/ts/components/inline-edit/inline-edit.component.ts +71 -71
  281. package/assets/ts/components/marketing/marketing.component.ts +17 -16
  282. package/assets/ts/components/multi-step/multi-step.component.ts +114 -156
  283. package/assets/ts/components/multiselect/README.md +5 -5
  284. package/assets/ts/components/multiselect/multiselect.component.ts +116 -133
  285. package/assets/ts/components/nav/README.md +13 -13
  286. package/assets/ts/components/nav/nav.component.ts +171 -167
  287. package/assets/ts/components/notification/README.md +9 -9
  288. package/assets/ts/components/notification/notification.component.ts +33 -32
  289. package/assets/ts/components/pagination/README.md +12 -12
  290. package/assets/ts/components/pagination/pagination.component.ts +51 -69
  291. package/assets/ts/components/record-card/record-card.component.ts +24 -34
  292. package/assets/ts/components/search/README.md +6 -7
  293. package/assets/ts/components/search/search.component.ts +75 -91
  294. package/assets/ts/components/slider/slider.component.ts +62 -77
  295. package/assets/ts/components/table/README.md +8 -8
  296. package/assets/ts/components/table/table.component.ts +97 -134
  297. package/assets/ts/components/tabs/README.md +4 -4
  298. package/assets/ts/components/tabs/tabs.component.ts +16 -14
  299. package/assets/ts/components/video-card/video-card.component.ts +89 -93
  300. package/assets/ts/components.ts +44 -20
  301. package/assets/ts/html.d.ts +1 -7
  302. package/assets/ts/modules/applied-filters.ts +104 -135
  303. package/assets/ts/modules/card.module.ts +13 -18
  304. package/assets/ts/modules/carousel.ts +194 -195
  305. package/assets/ts/modules/chart.module.ts +201 -246
  306. package/assets/ts/modules/chart.ts +454 -472
  307. package/assets/ts/modules/data-layer.md +35 -31
  308. package/assets/ts/modules/data-layer.ts +18 -18
  309. package/assets/ts/modules/dialogs.ts +113 -117
  310. package/assets/ts/modules/drawer.ts +7 -9
  311. package/assets/ts/modules/dynamicEvents.ts +67 -100
  312. package/assets/ts/modules/file-upload.ts +43 -40
  313. package/assets/ts/modules/fileupload.ts +38 -60
  314. package/assets/ts/modules/filterlist.ts +14 -20
  315. package/assets/ts/modules/form.ts +126 -128
  316. package/assets/ts/modules/helpers.ts +114 -120
  317. package/assets/ts/modules/inputs.ts +88 -120
  318. package/assets/ts/modules/nav.ts +19 -18
  319. package/assets/ts/modules/notification.ts +28 -32
  320. package/assets/ts/modules/orderablelist.ts +90 -82
  321. package/assets/ts/modules/pagination.ts +14 -19
  322. package/assets/ts/modules/table.ts +516 -599
  323. package/assets/ts/modules/tabs.ts +120 -145
  324. package/assets/ts/modules/testimonial.ts +59 -64
  325. package/assets/ts/scripts.ts +7 -9
  326. package/assets/ts/tests/chart.spec.ts +11 -20
  327. package/assets/ts/tests/data-layer.spec.js +3 -4
  328. package/assets/ts/tests/filterlist.spec.ts +3 -6
  329. package/assets/ts/tests/slider.spec.ts +9 -15
  330. package/assets/ts/tests/table.spec.ts +7 -24
  331. package/assets/ts/vendor/hibp.ts +43 -43
  332. package/dist/components.es.js +280 -270
  333. package/dist/components.umd.js +67 -67
  334. package/dist/style.css +1 -1
  335. package/package.json +14 -4
  336. package/src/components/Accordion/Accordion.spec.js +25 -31
  337. package/src/components/Accordion/Accordion.vue +16 -19
  338. package/src/components/Accordion/AccordionItem.vue +39 -37
  339. package/src/components/Accordion/README.md +10 -12
  340. package/src/components/Actionbar/Actionbar.vue +15 -18
  341. package/src/components/Actionbar/README.md +8 -7
  342. package/src/components/AddressLookup/AddressLookup.vue +14 -16
  343. package/src/components/AppliedFilters/AppliedFilters.vue +14 -16
  344. package/src/components/Banner/Banner.spec.js +13 -15
  345. package/src/components/Banner/Banner.vue +19 -19
  346. package/src/components/Banner/README.md +8 -10
  347. package/src/components/BarChart/BarChart.vue +14 -16
  348. package/src/components/Card/Card.vue +13 -16
  349. package/src/components/Card/README.md +8 -8
  350. package/src/components/Carousel/Carousel.vue +15 -18
  351. package/src/components/Carousel/README.md +7 -7
  352. package/src/components/Chart/Chart.spec.js +64 -87
  353. package/src/components/Chart/Chart.vue +41 -40
  354. package/src/components/Chart/README.md +8 -9
  355. package/src/components/CollapsibleSideMenu/CollapsibleSideMenu.vue +8 -10
  356. package/src/components/CollapsibleSideMenu/README.md +1 -1
  357. package/src/components/FileUpload/FileUpload.vue +35 -40
  358. package/src/components/FileUpload/README.md +3 -3
  359. package/src/components/FilterCard/FilterCard.vue +14 -16
  360. package/src/components/Filterlist/Filterlist.vue +7 -9
  361. package/src/components/Filterlist/README.md +3 -3
  362. package/src/components/Header/Header.vue +23 -26
  363. package/src/components/Header/README.md +8 -9
  364. package/src/components/InlineEdit/InlineEdit.vue +26 -32
  365. package/src/components/Input/Input.vue +323 -233
  366. package/src/components/Input/README.md +11 -11
  367. package/src/components/Marketing/Marketing.vue +24 -27
  368. package/src/components/Marketing/README.md +7 -7
  369. package/src/components/MultiStep/MultiStep.vue +13 -15
  370. package/src/components/Multiselect/Multiselect.vue +14 -17
  371. package/src/components/Nav/Nav.vue +15 -29
  372. package/src/components/Nav/README.md +12 -12
  373. package/src/components/Nav-old/Nav.vue +88 -93
  374. package/src/components/Nav-old/README.md +11 -12
  375. package/src/components/NoteFeed/NoteFeed.vue +59 -56
  376. package/src/components/NoteFeed/README.md +6 -6
  377. package/src/components/Notification/Notification.vue +11 -15
  378. package/src/components/Notification/README.md +9 -9
  379. package/src/components/Pagination/Pagination.vue +14 -24
  380. package/src/components/Pagination/README.md +12 -12
  381. package/src/components/PropertySearchbar/PropertySearchbar.vue +191 -160
  382. package/src/components/PropertySearchbar/README.md +14 -15
  383. package/src/components/RecordCard/RecordCard.vue +14 -16
  384. package/src/components/Search/README.md +1 -1
  385. package/src/components/Search/Search.vue +13 -16
  386. package/src/components/Slider/Slider.vue +13 -16
  387. package/src/components/Snapshot/README.md +9 -10
  388. package/src/components/Snapshot/Snapshot.vue +15 -17
  389. package/src/components/Stepper/README.md +12 -13
  390. package/src/components/Stepper/Step.vue +22 -18
  391. package/src/components/Stepper/Stepper.spec.js +41 -46
  392. package/src/components/Stepper/Stepper.vue +17 -18
  393. package/src/components/Table/README.md +12 -11
  394. package/src/components/Table/Table.spec.js +17 -28
  395. package/src/components/Table/Table.vue +49 -48
  396. package/src/components/Tabs/README.md +8 -8
  397. package/src/components/Tabs/Tab.vue +21 -21
  398. package/src/components/Tabs/Tabs.vue +14 -17
  399. package/src/components/Testimonial/README.md +11 -12
  400. package/src/components/Testimonial/Testimonial.spec.js +22 -26
  401. package/src/components/Testimonial/Testimonial.vue +31 -25
  402. package/src/components/Timeline/README.md +3 -3
  403. package/src/components/Timeline/Timeline.spec.js +9 -11
  404. package/src/components/Timeline/Timeline.vue +10 -10
  405. package/src/components/VideoCard/VideoCard.vue +14 -16
  406. package/src/foundations/Logo/Logo.spec.js +30 -30
  407. package/src/foundations/Logo/Logo.vue +28 -28
  408. package/src/foundations/Logo/README.md +5 -4
  409. package/src/helpers/strings.js +11 -8
  410. package/src/index.js +27 -28
  411. package/src/vue-shim.d.ts +4 -4
@@ -1,184 +1,173 @@
1
1
  // @ts-nocheck
2
- import { zeroPad, isNumeric, ucfirst, resolvePath } from "./helpers";
2
+ import { zeroPad, isNumeric, ucfirst, resolvePath } from './helpers';
3
3
 
4
4
  // Basic functionality needed
5
5
  export const addDataAttributes = (table) => {
6
-
7
6
  const colHeadings = Array.from(table.querySelectorAll('thead th'));
8
7
  const colRows = Array.from(table.querySelectorAll('tbody tr'));
9
8
 
10
9
  colRows.forEach((row, index) => {
11
-
12
10
  const cells = Array.from(row.querySelectorAll('th, td'));
13
- const statuses = ['0','low','medium','high','unknown','n/a','pending','verified','due','overdue','incomplete','complete','completed','approval required','upcoming','requires approval','to do','on track','not started','warning','error'];
14
-
15
- cells.forEach((cell, cellIndex) => {
11
+ const statuses = [
12
+ '0',
13
+ 'low',
14
+ 'medium',
15
+ 'high',
16
+ 'unknown',
17
+ 'n/a',
18
+ 'pending',
19
+ 'verified',
20
+ 'due',
21
+ 'overdue',
22
+ 'incomplete',
23
+ 'complete',
24
+ 'completed',
25
+ 'approval required',
26
+ 'upcoming',
27
+ 'requires approval',
28
+ 'to do',
29
+ 'on track',
30
+ 'not started',
31
+ 'warning',
32
+ 'error',
33
+ ];
16
34
 
35
+ cells.forEach((cell, cellIndex) => {
17
36
  const heading = colHeadings[cellIndex];
18
- if(typeof heading != "undefined"){
19
-
20
- let tempDiv = document.createElement("div");
37
+ if (typeof heading != 'undefined') {
38
+ const tempDiv = document.createElement('div');
21
39
  tempDiv.innerHTML = heading.innerHTML;
22
- let headingText = tempDiv.textContent || tempDiv.innerText || "";
23
- cell.setAttribute('data-label',headingText);
40
+ const headingText = tempDiv.textContent || tempDiv.innerText || '';
41
+ cell.setAttribute('data-label', headingText);
24
42
 
25
- if(heading.hasAttribute('data-td-class'))
26
- cell.setAttribute('class',heading.getAttribute('data-td-class'))
43
+ if (heading.hasAttribute('data-td-class')) cell.setAttribute('class', heading.getAttribute('data-td-class'));
27
44
 
28
- if(heading.hasAttribute('data-format')){
29
- cell.setAttribute('data-format',heading.getAttribute('data-format'))
30
- cell.innerHTML = formatCell(heading.getAttribute('data-format'),cell.textContent.trim()); //Make sure date format is consistent
45
+ if (heading.hasAttribute('data-format')) {
46
+ cell.setAttribute('data-format', heading.getAttribute('data-format'));
47
+ cell.innerHTML = formatCell(heading.getAttribute('data-format'), cell.textContent.trim()); //Make sure date format is consistent
31
48
  }
32
49
 
33
- if(statuses.includes(cell.textContent.trim().toLowerCase())){
34
- cell.setAttribute('data-content',cell.textContent.trim().toLowerCase());
50
+ if (statuses.includes(cell.textContent.trim().toLowerCase())) {
51
+ cell.setAttribute('data-content', cell.textContent.trim().toLowerCase());
35
52
  }
36
53
  }
37
54
  });
38
55
  });
39
- }
56
+ };
40
57
 
41
58
  export const getLargestLastColWidth = (table) => {
42
-
43
59
  let largestWidth = 0;
44
60
 
45
61
  Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {
62
+ const htmlStyles = window.getComputedStyle(document.querySelector('html'));
63
+ const lastColChild = row.querySelector(':scope > *:last-child > *:first-child');
46
64
 
47
- let htmlStyles = window.getComputedStyle(document.querySelector('html'));
48
- let lastColChild = row.querySelector(':scope > *:last-child > *:first-child');
49
-
50
- if(lastColChild){
51
-
65
+ if (lastColChild) {
52
66
  lastColChild.classList.add('text-nowrap');
53
- let responsiveWidth = lastColChild.offsetWidth/parseFloat(htmlStyles.fontSize);
67
+ let responsiveWidth = lastColChild.offsetWidth / parseFloat(htmlStyles.fontSize);
54
68
  responsiveWidth += 1.7;
55
69
  largestWidth = largestWidth > responsiveWidth ? largestWidth : responsiveWidth;
56
70
  }
57
71
  });
58
72
 
59
73
  return largestWidth;
60
- }
74
+ };
61
75
 
62
76
  export const createMobileButton = (table, wrapper) => {
77
+ if (wrapper.classList.contains('table--fullwidth') && !wrapper.hasAttribute('data-expandable')) return false;
63
78
 
64
- if(wrapper.classList.contains('table--fullwidth') && !wrapper.hasAttribute('data-expandable'))
65
- return false;
66
-
67
- if(table.querySelectorAll('thead tr th').length < 4 && !wrapper.hasAttribute('data-expandable'))
68
- return false;
79
+ if (table.querySelectorAll('thead tr th').length < 4 && !wrapper.hasAttribute('data-expandable')) return false;
69
80
 
70
81
  //If the expand column already exists we don't need to add a new one.
71
- Array.from(table.querySelectorAll('thead tr')).forEach((row,index) => {
72
- if(!table.querySelectorAll('thead tr th.expand-button-heading').length){
73
- row.insertAdjacentHTML(
74
- 'afterbegin',
75
- `<th class="th--fixed expand-button-heading"></th>`
76
- );
82
+ Array.from(table.querySelectorAll('thead tr')).forEach((row, index) => {
83
+ if (!table.querySelectorAll('thead tr th.expand-button-heading').length) {
84
+ row.insertAdjacentHTML('afterbegin', `<th class="th--fixed expand-button-heading"></th>`);
77
85
  }
78
86
  });
79
87
 
80
- Array.from(table.querySelectorAll('tbody tr')).forEach((row,index) => {
88
+ Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {
81
89
  const preExpanded = row.getAttribute('data-view') === 'full' ? 'aria-expanded' : '';
82
90
  row.insertAdjacentHTML(
83
91
  'afterbegin',
84
92
  `<td class="td--fixed td--expand"><button class="btn btn-compact btn-secondary" data-expand-button ${preExpanded}>Expand</button></td>`
85
93
  );
86
94
  });
87
-
88
-
89
- }
95
+ };
90
96
 
91
97
  export const addTableEventListeners = (table) => {
92
-
93
98
  table.addEventListener('click', (event) => {
94
-
95
- if (event && event.target instanceof HTMLElement && event.target.closest('[data-expand-button]')){
96
-
97
- let button = event.target.closest('[data-expand-button]');
98
- let tableRow = button.closest('tr');
99
+ if (event && event.target instanceof HTMLElement && event.target.closest('[data-expand-button]')) {
100
+ const button = event.target.closest('[data-expand-button]');
101
+ const tableRow = button.closest('tr');
99
102
 
100
103
  button.toggleAttribute('aria-expanded');
101
104
 
102
- if(tableRow.getAttribute('data-view') == "full")
103
- tableRow.setAttribute('data-view','default');
104
- else
105
- tableRow.setAttribute('data-view','full');
105
+ if (tableRow.getAttribute('data-view') == 'full') tableRow.setAttribute('data-view', 'default');
106
+ else tableRow.setAttribute('data-view', 'full');
106
107
 
107
108
  button.blur();
108
- };
109
+ }
109
110
  });
110
- }
111
+ };
111
112
 
112
113
  // Filters
113
114
  export const createSearchDataList = (table, form) => {
115
+ const searchInput = form.querySelector('input[data-search]');
114
116
 
115
- let searchInput = form.querySelector('input[data-search]');
116
-
117
- if(!searchInput)
118
- return false;
117
+ if (!searchInput) return false;
119
118
 
120
119
  const searchID = searchInput.getAttribute('id');
121
120
  const searchableColumns = searchInput.getAttribute('data-search').split(',');
122
- let inputWrapper = searchInput.parentNode;
121
+ const inputWrapper = searchInput.parentNode;
123
122
 
124
- let searchableTerms = {};
123
+ const searchableTerms = {};
125
124
  searchableColumns.forEach((columnHeading, index) => {
126
-
127
- Array.from(table.querySelectorAll('td[data-label="'+columnHeading.trim()+'"]')).forEach((td, index) => {
128
-
129
- if(td.querySelector('.td__content'))
125
+ Array.from(table.querySelectorAll('td[data-label="' + columnHeading.trim() + '"]')).forEach((td, index) => {
126
+ if (td.querySelector('.td__content'))
130
127
  searchableTerms[td.querySelector('.td__content').textContent] = td.querySelector('.td__content').textContent;
131
- else
132
- searchableTerms[td.textContent] = td.textContent;
128
+ else searchableTerms[td.textContent] = td.textContent;
133
129
  });
134
130
  });
135
131
 
136
- searchInput.setAttribute('list',`${searchID}_list`);
137
- searchInput.setAttribute('autocomplete','off');
132
+ searchInput.setAttribute('list', `${searchID}_list`);
133
+ searchInput.setAttribute('autocomplete', 'off');
138
134
 
139
- if(!inputWrapper.querySelector('datalist'))
140
- inputWrapper.innerHTML += `<datalist id="${searchID}_list"></datalist>`;
141
-
142
- inputWrapper.querySelector('datalist').innerHTML = `${Object.keys(searchableTerms).map(term => `<option value="${term}"></option>`).join("")}`;
143
- }
135
+ if (!inputWrapper.querySelector('datalist')) inputWrapper.innerHTML += `<datalist id="${searchID}_list"></datalist>`;
144
136
 
145
- export const addFilterEventListeners = (table, form, pagination, wrapper, savedTableBody) => {
137
+ inputWrapper.querySelector('datalist').innerHTML = `${Object.keys(searchableTerms)
138
+ .map((term) => `<option value="${term}"></option>`)
139
+ .join('')}`;
140
+ };
146
141
 
147
- var timer;
142
+ export const addFilterEventListeners = (table, form, pagination, wrapper, savedTableBody) => {
143
+ let timer;
148
144
 
149
145
  // Check what conditions are set on the table to see what the form actions are
150
- let formSubmit = function(event, paginate = false){
151
-
152
- if(wrapper.hasAttribute('data-no-submit')){
146
+ const formSubmit = function (event, paginate = false) {
147
+ if (wrapper.hasAttribute('data-no-submit')) {
153
148
  return false;
154
149
  }
155
150
 
156
- if(form.classList.contains('processing'))
157
- return false;
158
-
159
- Array.from(form.querySelectorAll('iam-applied-filters')).forEach((element,index) => {
151
+ if (form.classList.contains('processing')) return false;
160
152
 
161
- var event = new Event('tags-set');
153
+ Array.from(form.querySelectorAll('iam-applied-filters')).forEach((element, index) => {
154
+ const event = new Event('tags-set');
162
155
  element.dispatchEvent(event);
163
156
  });
164
157
 
165
158
  // Before submitting check if any duplicate checkboxes within the filters dialog needs to upset the original input
166
- if(event.type == "submit"){
159
+ if (event.type == 'submit') {
167
160
  form.classList.add('processing');
168
- Array.from(form.querySelectorAll('[data-duplicate]')).forEach((element,index) => {
169
-
161
+ Array.from(form.querySelectorAll('[data-duplicate]')).forEach((element, index) => {
170
162
  const id = element.getAttribute('data-duplicate');
171
163
  const input = document.getElementById(id);
172
164
  const card = document.querySelector(`[for="${id}"] iam-card`);
173
165
 
174
-
175
- if(input.checked != element.checked){
176
-
177
- if(card){
178
- let clickEvent = new Event('click');
166
+ if (input.checked != element.checked) {
167
+ if (card) {
168
+ const clickEvent = new Event('click');
179
169
  card.dispatchEvent(clickEvent);
180
- }
181
- else {
170
+ } else {
182
171
  input.checked = element.checked;
183
172
  }
184
173
  }
@@ -186,188 +175,174 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
186
175
  form.classList.remove('processing');
187
176
  }
188
177
 
189
- if(form.hasAttribute('data-ajax')){
190
-
178
+ if (form.hasAttribute('data-ajax')) {
191
179
  // Default back to page 1
192
- if(!paginate){
193
- let paginationInput = form.querySelector('[data-pagination]');
180
+ if (!paginate) {
181
+ const paginationInput = form.querySelector('[data-pagination]');
194
182
  paginationInput.value = 1;
195
183
  wrapper.setAttribute('data-page', 1);
196
184
  }
197
185
 
198
- loadAjaxTable(table, form, pagination,wrapper);
199
- }
200
- else if(form.hasAttribute('data-submit')){
186
+ loadAjaxTable(table, form, pagination, wrapper);
187
+ } else if (form.hasAttribute('data-submit')) {
201
188
  form.submit();
202
- }
203
- else {
189
+ } else {
204
190
  filterTable(table, form, wrapper);
205
- populateDataQueries(table,form);
191
+ populateDataQueries(table, form);
206
192
  }
207
193
 
208
194
  // Pass post data back to the page
209
- if(form.hasAttribute('data-ajax-post')){
210
-
211
- let formData = new FormData(form);
212
- let queryString = new URLSearchParams(formData).toString();
213
- const http = new XMLHttpRequest()
195
+ if (form.hasAttribute('data-ajax-post')) {
196
+ const formData = new FormData(form);
197
+ const queryString = new URLSearchParams(formData).toString();
198
+ const http = new XMLHttpRequest();
214
199
  http.open('GET', `${window.location.href}?ajax=true&${queryString}`);
215
200
  http.send();
216
201
  }
217
- }
202
+ };
218
203
 
219
- if(form.querySelector('iam-actionbar[data-search]')){
204
+ if (form.querySelector('iam-actionbar[data-search]')) {
220
205
  form.querySelector('iam-actionbar[data-search]').addEventListener('search-submit', (event) => {
221
-
222
- if(form.querySelector('input[data-search]')){
206
+ if (form.querySelector('input[data-search]')) {
223
207
  form.querySelector('input[data-search]').value = event.detail.search;
208
+ } else {
209
+ form.insertAdjacentHTML(
210
+ 'beforeend',
211
+ `<input type="hidden" name="search" data-search="${form.querySelector('iam-actionbar[data-search]').getAttribute('data-search')}" value="${event.detail.search}"/>`
212
+ );
224
213
  }
225
- else {
226
- form.insertAdjacentHTML('beforeend',`<input type="hidden" name="search" data-search="${form.querySelector('iam-actionbar[data-search]').getAttribute('data-search')}" value="${event.detail.search}"/>`);
227
- }
228
-
214
+
229
215
  clearTimeout(timer);
230
216
  formSubmit(event);
231
217
  });
232
218
  }
233
219
 
234
-
235
220
  form.addEventListener('keyup', (event) => {
236
-
237
221
  clearTimeout(timer);
238
222
 
239
- if (event && event.target instanceof HTMLElement && event.target.closest('input[data-search]')){
240
-
241
- timer = setTimeout(function(){
223
+ if (event && event.target instanceof HTMLElement && event.target.closest('input[data-search]')) {
224
+ timer = setTimeout(function () {
242
225
  formSubmit(event);
243
226
  }, 500);
244
- };
227
+ }
245
228
  });
246
229
 
247
230
  form.addEventListener('change', (event) => {
248
-
249
231
  clearTimeout(timer);
250
-
251
- if (event && event.target instanceof HTMLElement && event.target.closest('[data-sort]')){
252
-
253
- if(!form.hasAttribute('data-submit')){
232
+
233
+ if (event && event.target instanceof HTMLElement && event.target.closest('[data-sort]')) {
234
+ if (!form.hasAttribute('data-submit')) {
254
235
  sortTable(table, form, savedTableBody);
255
236
  }
256
237
 
257
238
  formSubmit(event);
258
239
  }
259
240
 
260
- if (event && event.target instanceof HTMLElement && event.target.closest('input[data-search]')){
261
-
241
+ if (event && event.target instanceof HTMLElement && event.target.closest('input[data-search]')) {
262
242
  formSubmit(event);
263
243
  }
264
244
 
265
- if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter][data-no-ajax]')){ // Allow for input fields to filter the current results without a new ajax call
245
+ if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter][data-no-ajax]')) {
246
+ // Allow for input fields to filter the current results without a new ajax call
266
247
 
267
248
  filterTable(table, form, wrapper);
268
- populateDataQueries(table,form);
269
- }
270
- else if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter]') && event.target.closest('form .dialog__wrapper > dialog')){
271
-
249
+ populateDataQueries(table, form);
250
+ } else if (
251
+ event &&
252
+ event.target instanceof HTMLElement &&
253
+ event.target.closest('[data-filter]') &&
254
+ event.target.closest('form .dialog__wrapper > dialog')
255
+ ) {
272
256
  formSubmit(event);
273
- }
274
- else if (event && event.target instanceof HTMLElement && event.target.closest('[data-filter]') && !event.target.closest('form dialog')){
275
-
257
+ } else if (
258
+ event &&
259
+ event.target instanceof HTMLElement &&
260
+ event.target.closest('[data-filter]') &&
261
+ !event.target.closest('form dialog')
262
+ ) {
276
263
  formSubmit(event);
277
264
  }
278
265
 
279
- if (event && event.target instanceof HTMLElement && event.target.closest('[data-show]')){
280
-
266
+ if (event && event.target instanceof HTMLElement && event.target.closest('[data-show]')) {
281
267
  formSubmit(event);
282
268
  }
283
269
 
284
- if (event && event.target instanceof HTMLElement && event.target.closest('[data-mimic]')){
285
-
270
+ if (event && event.target instanceof HTMLElement && event.target.closest('[data-mimic]')) {
286
271
  formSubmit(event);
287
272
  }
288
273
 
274
+ if (event && event.target instanceof HTMLElement && event.target.hasAttribute('id')) {
275
+ const id = event.target.getAttribute('id');
289
276
 
290
- if(event && event.target instanceof HTMLElement && event.target.hasAttribute('id')){
291
-
292
- let id = event.target.getAttribute('id');
293
-
294
- if(document.querySelector(`[data-duplicate="${id}"]`)){
277
+ if (document.querySelector(`[data-duplicate="${id}"]`)) {
295
278
  document.querySelector(`[data-duplicate="${id}"]`).checked = event.target.checked;
296
279
  }
297
280
  }
298
281
  });
299
282
 
300
-
301
283
  form.addEventListener('click', (event) => {
302
-
303
284
  clearTimeout(timer);
304
-
305
- if (event && event.target instanceof HTMLElement && event.target.closest('dialog button:not([type="button"])')){
306
-
307
- let button = event.target.closest('dialog button:not([type="button"])');
308
- let modal = button.closest('dialog');
285
+
286
+ if (event && event.target instanceof HTMLElement && event.target.closest('dialog button:not([type="button"])')) {
287
+ const button = event.target.closest('dialog button:not([type="button"])');
288
+ const modal = button.closest('dialog');
309
289
 
310
290
  modal.close();
311
291
  }
312
292
 
313
293
  // Prevent the form from submitting
314
- if (event && event.target instanceof HTMLElement && event.target.closest('.dialog__close')){
315
-
294
+ if (event && event.target instanceof HTMLElement && event.target.closest('.dialog__close')) {
316
295
  event.preventDefault();
317
296
  event.stopPropagation();
318
297
  }
319
298
 
320
- if (event && event.target instanceof HTMLElement && event.target.closest('[data-clear]')){
321
-
299
+ if (event && event.target instanceof HTMLElement && event.target.closest('[data-clear]')) {
322
300
  form.classList.add('processing');
323
301
  // Make sure any applied filters have been removed
324
- Array.from(form.querySelectorAll('.applied-filters')).forEach((filters,index) => {
325
- filters.innerHTML = "";
302
+ Array.from(form.querySelectorAll('.applied-filters')).forEach((filters, index) => {
303
+ filters.innerHTML = '';
326
304
  });
327
305
 
328
306
  // Make sure cards are unlicked
329
- let frm_elements = form.elements;
330
-
331
- for (let i = 0; i < frm_elements.length; i++)
332
- {
333
- let field_type = frm_elements[i].type.toLowerCase() ? frm_elements[i].type.toLowerCase() : "text";
334
- switch (field_type)
335
- {
336
- case "text":
337
- case "password":
338
- case "textarea":
339
- frm_elements[i].value = "";
340
- break;
341
- case "radio":
342
- case "checkbox":
343
- if (frm_elements[i].checked)
344
- {
345
- let input = frm_elements[i];
346
- let id = input.getAttribute('id');
347
- let label = document.querySelector(`[for="${id}"`);
348
-
349
- if(label.querySelector('iam-card')){
350
- let card = label.querySelector('iam-card');
351
- let clickEvent = new Event('click');
352
- card.dispatchEvent(clickEvent);
353
- }
354
-
355
- input.checked = false;
307
+ const frm_elements = form.elements;
308
+
309
+ for (let i = 0; i < frm_elements.length; i++) {
310
+ const field_type = frm_elements[i].type.toLowerCase() ? frm_elements[i].type.toLowerCase() : 'text';
311
+ switch (field_type) {
312
+ case 'text':
313
+ case 'password':
314
+ case 'textarea':
315
+ frm_elements[i].value = '';
316
+ break;
317
+ case 'radio':
318
+ case 'checkbox':
319
+ if (frm_elements[i].checked) {
320
+ const input = frm_elements[i];
321
+ const id = input.getAttribute('id');
322
+ const label = document.querySelector(`[for="${id}"`);
323
+
324
+ if (label.querySelector('iam-card')) {
325
+ const card = label.querySelector('iam-card');
326
+ const clickEvent = new Event('click');
327
+ card.dispatchEvent(clickEvent);
356
328
  }
357
- break;
358
- case "select-one":
359
- case "select-multi":
360
- frm_elements[i].selectedIndex = -1;
361
- break;
362
- case "hidden":
329
+
330
+ input.checked = false;
331
+ }
332
+ break;
333
+ case 'select-one':
334
+ case 'select-multi':
335
+ frm_elements[i].selectedIndex = -1;
336
+ break;
337
+ case 'hidden':
363
338
  default:
364
- break;
365
- }
339
+ break;
340
+ }
366
341
  }
367
342
 
368
343
  form.classList.remove('processing');
369
344
 
370
- if(!form.hasAttribute('data-submit')){
345
+ if (!form.hasAttribute('data-submit')) {
371
346
  sortTable(table, form, savedTableBody);
372
347
  }
373
348
 
@@ -376,10 +351,9 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
376
351
  });
377
352
 
378
353
  form.addEventListener('submit', (event) => {
379
-
380
354
  clearTimeout(timer);
381
355
 
382
- if(!form.hasAttribute('data-submit')){
356
+ if (!form.hasAttribute('data-submit')) {
383
357
  event.preventDefault();
384
358
  }
385
359
 
@@ -387,82 +361,66 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
387
361
  });
388
362
 
389
363
  form.addEventListener('force', (event) => {
390
-
391
364
  formSubmit(event);
392
365
  });
393
366
 
394
367
  form.addEventListener('paginate', (event) => {
395
-
396
- formSubmit(event,true);
368
+ formSubmit(event, true);
397
369
  });
398
370
 
399
-
400
-
401
-
402
371
  // Mmimic fields
403
- let forms = [];
404
- let fields = [];
372
+ const forms = [];
373
+ const fields = [];
405
374
 
406
375
  // Collect the forms that we need to add an event listener for.
407
376
  Array.from(form.querySelectorAll('[data-mimic]')).forEach((input, index) => {
408
-
409
- let mimicField = input.getAttribute('data-mimic');
377
+ const mimicField = input.getAttribute('data-mimic');
410
378
 
411
379
  Array.from(document.querySelectorAll(`[name="${mimicField}"]`)).forEach((mimicInput, index) => {
380
+ const parentForm = mimicInput.closest('form');
412
381
 
413
- let parentForm = mimicInput.closest('form');
414
-
415
- if(!forms.includes(parentForm)){
382
+ if (!forms.includes(parentForm)) {
416
383
  forms.push(parentForm);
417
384
  }
418
385
 
419
- if(!fields.includes(mimicField)){
386
+ if (!fields.includes(mimicField)) {
420
387
  fields.push(mimicField);
421
388
  }
422
-
423
389
  });
424
390
  });
425
391
 
426
-
427
392
  // For each form add change listener
428
393
  forms.forEach((parentForm, index) => {
394
+ const updateMimicInput = function () {
395
+ const mimickedAlready = [];
396
+ const formData = new FormData(parentForm);
429
397
 
430
- const updateMimicInput = function(){
431
- let mimickedAlready = [];
432
- let formData = new FormData(parentForm);
433
-
434
398
  let i = 1;
435
399
  for (const [key, value] of formData) {
436
-
437
- if(document.querySelector(`[data-mimic="${key}"]`) && !mimickedAlready.includes(key)){
438
-
400
+ if (document.querySelector(`[data-mimic="${key}"]`) && !mimickedAlready.includes(key)) {
439
401
  mimickedAlready.push(key);
440
402
  document.querySelector(`[data-mimic="${key}"]`).value = value;
441
- }
442
- else if(document.querySelector(`[data-mimic="${key}"]`))
443
- document.querySelector(`[data-mimic="${key}"]`).value += ","+value;
403
+ } else if (document.querySelector(`[data-mimic="${key}"]`))
404
+ document.querySelector(`[data-mimic="${key}"]`).value += ',' + value;
444
405
 
445
406
  i++;
446
407
  }
447
408
 
448
409
  for (const value of mimickedAlready) {
449
- const event = new Event("force");
410
+ const event = new Event('force');
450
411
  form.dispatchEvent(event);
451
412
  }
452
413
 
453
-
454
414
  // Check for empties
455
415
  for (const field of fields) {
456
- if(!formData.has(field) && parentForm.querySelector(`[name="${field}"]`)){
457
-
458
- document.querySelector(`[data-mimic="${field}"]`).value = "";
459
-
460
- const event = new Event("force");
416
+ if (!formData.has(field) && parentForm.querySelector(`[name="${field}"]`)) {
417
+ document.querySelector(`[data-mimic="${field}"]`).value = '';
418
+
419
+ const event = new Event('force');
461
420
  form.dispatchEvent(event);
462
421
  }
463
422
  }
464
-
465
- }
423
+ };
466
424
 
467
425
  parentForm.addEventListener('force', (event) => {
468
426
  updateMimicInput();
@@ -472,80 +430,76 @@ export const addFilterEventListeners = (table, form, pagination, wrapper, savedT
472
430
  updateMimicInput();
473
431
  });
474
432
  });
475
- }
433
+ };
476
434
 
477
435
  export const sortTable = (table, form, savedTableBody) => {
478
-
479
- if(form.getAttribute('data-ajax')){
436
+ if (form.getAttribute('data-ajax')) {
480
437
  return false;
481
438
  }
482
439
 
483
- let tbody = table.querySelector('tbody');
484
-
440
+ const tbody = table.querySelector('tbody');
485
441
 
486
442
  let selectedOption = form.querySelector(`input[type="radio"][data-sort]:checked`);
487
443
 
488
- if(form.querySelector('select[data-sort]')){
489
-
490
- let select = form.querySelector('select[data-sort]');
444
+ if (form.querySelector('select[data-sort]')) {
445
+ const select = form.querySelector('select[data-sort]');
491
446
  selectedOption = form.querySelector(`select[data-sort] option:nth-child(${select.selectedIndex + 1})`);
492
447
  }
493
448
 
494
- let sortBy = selectedOption.getAttribute('data-sort');
495
- let order = selectedOption.getAttribute('data-order');
496
- let format = selectedOption.getAttribute('data-format');
449
+ const sortBy = selectedOption.getAttribute('data-sort');
450
+ const order = selectedOption.getAttribute('data-order');
451
+ const format = selectedOption.getAttribute('data-format');
497
452
 
498
- if(!sortBy){
499
-
453
+ if (!sortBy) {
500
454
  tbody.innerHTML = savedTableBody.innerHTML;
501
455
  addDataAttributes(table);
502
456
  return false;
503
457
  }
504
458
 
505
459
  let orderArray = [];
506
- if(!['asc','desc','descending'].includes(order)){
460
+ if (!['asc', 'desc', 'descending'].includes(order)) {
507
461
  orderArray = order.split(',');
508
462
  }
509
463
 
510
464
  // Create an array from the table rows, the index created is then used to sort the array
511
465
  let tableArr = [];
512
466
  Array.from(tbody.querySelectorAll('tr')).forEach((tableRow, index) => {
467
+ let rowIndex = tableRow
468
+ .querySelector('td[data-label="' + sortBy + '"], th[data-label="' + sortBy + '"]')
469
+ .textContent.trim();
513
470
 
514
- let rowIndex = tableRow.querySelector('td[data-label="'+sortBy+'"], th[data-label="'+sortBy+'"]').textContent.trim();
515
-
516
- if(tableRow.querySelector('[data-label="'+sortBy+'"] .td__content')){
517
- rowIndex = tableRow.querySelector('[data-label="'+sortBy+'"] .td__content').textContent.trim();
471
+ if (tableRow.querySelector('[data-label="' + sortBy + '"] .td__content')) {
472
+ rowIndex = tableRow.querySelector('[data-label="' + sortBy + '"] .td__content').textContent.trim();
518
473
  }
519
474
 
520
475
  // If a predefined order set replace the search term with an ordered numeric value so it can be sorted
521
- if(orderArray.length && orderArray.includes(rowIndex)){
476
+ if (orderArray.length && orderArray.includes(rowIndex)) {
522
477
  rowIndex = orderArray.indexOf(rowIndex);
523
478
  }
524
479
 
525
- if(isNumeric(rowIndex)){
526
- rowIndex = zeroPad(rowIndex,10);
480
+ if (isNumeric(rowIndex)) {
481
+ rowIndex = zeroPad(rowIndex, 10);
527
482
  }
528
483
 
529
484
  // If the sort format is date then lets transform the index to a sortable date (this is never displayed)
530
- if(format && format == "date"){
485
+ if (format && format == 'date') {
531
486
  rowIndex = new Date(rowIndex);
532
487
  }
533
-
488
+
534
489
  const dataRow = {
535
490
  index: rowIndex,
536
- row: tableRow
537
- }
491
+ row: tableRow,
492
+ };
538
493
  tableArr.push(dataRow);
539
494
  });
540
495
 
541
496
  // Sort array alphabetically
542
- tableArr.sort((a, b) => (a.index > b.index) ? 1 : -1)
497
+ tableArr.sort((a, b) => (a.index > b.index ? 1 : -1));
543
498
 
544
499
  // Reverse if descending
545
- if(order == "descending" || order == "desc"){
500
+ if (order == 'descending' || order == 'desc') {
546
501
  tableArr = tableArr.reverse();
547
502
  }
548
-
549
503
 
550
504
  // Create a string to return and populate the tbody
551
505
  let strTbody = '';
@@ -553,35 +507,33 @@ export const sortTable = (table, form, savedTableBody) => {
553
507
  strTbody += tableRow.row.outerHTML;
554
508
  });
555
509
  tbody.innerHTML = strTbody;
556
- }
510
+ };
557
511
 
558
512
  export const filterTable = (table, form, wrapper) => {
559
-
560
513
  table.classList.remove('table--filtered');
561
514
 
562
- let filters = filterFilters(form);
563
- let searches = [];
515
+ const filters = filterFilters(form);
516
+ const searches = [];
564
517
  let matched = 0;
565
- let page = form.querySelector('[data-pagination]') ? parseInt(form.querySelector('[data-pagination]').value) : 1;
566
- let showRows = form.querySelector('[data-show]') ? parseInt(form.querySelector('[data-show]').value) : 15;
518
+ const page = form.querySelector('[data-pagination]') ? parseInt(form.querySelector('[data-pagination]').value) : 1;
519
+ const showRows = form.querySelector('[data-show]') ? parseInt(form.querySelector('[data-show]').value) : 15;
567
520
 
568
521
  // Reset
569
522
  Array.from(table.querySelectorAll('tbody tr')).forEach((row, index) => {
570
523
  row.classList.remove('filtered');
571
524
  row.classList.remove('filtered--matched');
572
525
  row.classList.remove('filtered--show');
573
-
526
+
574
527
  row.removeAttribute('data-filtered-by');
575
528
  });
576
529
 
577
530
  // Add search columns too
578
- if(form.querySelector('input[data-search]')){
579
- let searchInput = form.querySelector('input[data-search]');
580
- let searchColumns = form.querySelector('input[data-search]').getAttribute('data-search').split(',');
531
+ if (form.querySelector('input[data-search]')) {
532
+ const searchInput = form.querySelector('input[data-search]');
533
+ const searchColumns = form.querySelector('input[data-search]').getAttribute('data-search').split(',');
581
534
 
582
535
  searchColumns.forEach((column, index) => {
583
-
584
- searches.push({'column':`${column.trim()}`,'value':`${searchInput.value}`});
536
+ searches.push({ column: `${column.trim()}`, value: `${searchInput.value}` });
585
537
  });
586
538
  }
587
539
 
@@ -593,437 +545,393 @@ export const filterTable = (table, form, wrapper) => {
593
545
 
594
546
  let filterCount = 0;
595
547
  Object.values(filters).forEach((filter, index) => {
596
-
597
- if(typeof filter == "object" && Object.values(filter).length){
548
+ if (typeof filter == 'object' && Object.values(filter).length) {
598
549
  filterCount += Object.values(filter).length;
599
- }
600
- else {
550
+ } else {
601
551
  filterCount++;
602
552
  }
603
-
604
553
  });
605
554
 
606
- if(filterCount) {
607
-
555
+ if (filterCount) {
608
556
  Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {
609
557
  element.innerHTML += `(${filterCount})`;
610
558
  element.parentNode.classList.add('hover');
611
559
  });
612
560
  }
613
-
561
+
614
562
  // Filter the table
615
563
  table.classList.add('table--filtered');
616
564
  for (const [key, filterValue] of Object.entries(filters)) {
617
-
618
565
  Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {
619
-
620
566
  let isMatched = false;
621
567
  filterValue.forEach((filter, index) => {
568
+ const filterTd = row.querySelector(`[data-label="${key}"]`);
622
569
 
623
- let filterTd = row.querySelector(`[data-label="${key}"]`)
624
-
625
- if(filter.includes('-date-from')){
626
-
627
- let fromDate = new Date(filter.replace('-date-from',''));
628
- let checkDate = new Date(filterTd.textContent.toLowerCase());
570
+ if (filter.includes('-date-from')) {
571
+ const fromDate = new Date(filter.replace('-date-from', ''));
572
+ const checkDate = new Date(filterTd.textContent.toLowerCase());
629
573
 
630
574
  fromDate.setHours(0, 0, 0, 0);
631
575
  checkDate.setHours(0, 0, 0, 0);
632
576
 
633
- if(checkDate < fromDate){
634
-
577
+ if (checkDate < fromDate) {
635
578
  row.classList.add('less-than-from-date');
636
579
  isMatched = false;
637
- }
638
- else if(!row.classList.contains('less-than-from-date') && !row.classList.contains('greater-than-to-date')) {
639
-
580
+ } else if (
581
+ !row.classList.contains('less-than-from-date') &&
582
+ !row.classList.contains('greater-than-to-date')
583
+ ) {
640
584
  isMatched = true;
641
585
  }
642
- }
643
- else if(filter.includes('-date-to')){
644
-
645
- let toDate = new Date(filter.replace('-date-to',''));
646
- let checkDate = new Date(filterTd.textContent.toLowerCase());
586
+ } else if (filter.includes('-date-to')) {
587
+ const toDate = new Date(filter.replace('-date-to', ''));
588
+ const checkDate = new Date(filterTd.textContent.toLowerCase());
647
589
 
648
590
  toDate.setHours(0, 0, 0, 0);
649
591
  checkDate.setHours(0, 0, 0, 0);
650
592
 
651
- if(checkDate > toDate){
652
-
593
+ if (checkDate > toDate) {
653
594
  row.classList.add('greater-than-to-date');
654
595
  isMatched = false;
655
- }
656
- else if(!row.classList.contains('less-than-from-date') && !row.classList.contains('greater-than-to-date')) {
657
-
596
+ } else if (
597
+ !row.classList.contains('less-than-from-date') &&
598
+ !row.classList.contains('greater-than-to-date')
599
+ ) {
658
600
  isMatched = true;
659
601
  }
660
602
  }
661
-
603
+
662
604
  // Dynamic values
663
- if(filter && filter == "$today"){
605
+ if (filter && filter == '$today') {
664
606
  filter = formatCell('date', new Date());
665
- }
666
- else if(filter && filter == "$yesterday"){
667
-
668
- let yesterday = new Date();
607
+ } else if (filter && filter == '$yesterday') {
608
+ const yesterday = new Date();
669
609
  yesterday.setDate(yesterday.getDate() - 1);
670
610
  filter = formatCell('date', yesterday);
671
- }
672
- else if(filter && (filter == "$thisWeek" || filter == "$lastWeek")){
673
-
674
- let today = new Date();
675
- let mondayThisWeek = new Date(today.setDate(today.getDate() - (today.getDay()-1)));
676
- let sundayThisWeek = new Date(today.setDate(today.getDate() - today.getDay() + 7));
677
- let checkDate = new Date(filterTd.textContent.toLowerCase());
611
+ } else if (filter && (filter == '$thisWeek' || filter == '$lastWeek')) {
612
+ const today = new Date();
613
+ const mondayThisWeek = new Date(today.setDate(today.getDate() - (today.getDay() - 1)));
614
+ const sundayThisWeek = new Date(today.setDate(today.getDate() - today.getDay() + 7));
615
+ const checkDate = new Date(filterTd.textContent.toLowerCase());
678
616
 
679
617
  today.setHours(0, 0, 0, 0);
680
618
  mondayThisWeek.setHours(0, 0, 0, 0);
681
619
  sundayThisWeek.setHours(0, 0, 0, 0);
682
620
  checkDate.setHours(0, 0, 0, 0);
683
621
 
684
- if(filter == "$thisWeek"){
685
- isMatched = (checkDate >= mondayThisWeek && checkDate <= sundayThisWeek);
686
- }
687
- else {
688
- let mondayLastWeek = new Date(mondayThisWeek.setDate(mondayThisWeek.getDate() - 7));
689
- let sundayLastWeek = new Date(sundayThisWeek.setDate(sundayThisWeek.getDate() - 7));
622
+ if (filter == '$thisWeek') {
623
+ isMatched = checkDate >= mondayThisWeek && checkDate <= sundayThisWeek;
624
+ } else {
625
+ const mondayLastWeek = new Date(mondayThisWeek.setDate(mondayThisWeek.getDate() - 7));
626
+ const sundayLastWeek = new Date(sundayThisWeek.setDate(sundayThisWeek.getDate() - 7));
690
627
 
691
628
  mondayLastWeek.setHours(0, 0, 0, 0);
692
629
  sundayLastWeek.setHours(0, 0, 0, 0);
693
630
 
694
- isMatched = (checkDate >= mondayLastWeek && checkDate <= sundayLastWeek);
631
+ isMatched = checkDate >= mondayLastWeek && checkDate <= sundayLastWeek;
695
632
  }
696
- }
697
- else if(filter && filter == "$thisMonth"){
698
-
699
- let today = new Date(), year = today.getFullYear(), month = today.getMonth();
633
+ } else if (filter && filter == '$thisMonth') {
634
+ const today = new Date(),
635
+ year = today.getFullYear(),
636
+ month = today.getMonth();
700
637
 
701
- var firstDayMonth = new Date(year, month, 1);
702
- var lastDayMonth = new Date(year, month + 1, 0);
703
- let checkDate = new Date(filterTd.textContent.toLowerCase());
638
+ const firstDayMonth = new Date(year, month, 1);
639
+ const lastDayMonth = new Date(year, month + 1, 0);
640
+ const checkDate = new Date(filterTd.textContent.toLowerCase());
704
641
 
705
642
  firstDayMonth.setHours(0, 0, 0, 0);
706
643
  lastDayMonth.setHours(0, 0, 0, 0);
707
644
  checkDate.setHours(0, 0, 0, 0);
708
645
 
709
- isMatched = (checkDate >= firstDayMonth && checkDate <= lastDayMonth);
710
- }
711
- else if(filter && filter == "$lastMonth"){
646
+ isMatched = checkDate >= firstDayMonth && checkDate <= lastDayMonth;
647
+ } else if (filter && filter == '$lastMonth') {
648
+ const today = new Date(),
649
+ year = today.getFullYear(),
650
+ month = today.getMonth();
712
651
 
713
- let today = new Date(), year = today.getFullYear(), month = today.getMonth();
714
-
715
- var firstDayLastMonth = new Date(year, month - 1, 1);
716
- var lastDayLastMonth = new Date(year, month, 0);
717
- let checkDate = new Date(filterTd.textContent.toLowerCase());
652
+ const firstDayLastMonth = new Date(year, month - 1, 1);
653
+ const lastDayLastMonth = new Date(year, month, 0);
654
+ const checkDate = new Date(filterTd.textContent.toLowerCase());
718
655
 
719
656
  firstDayLastMonth.setHours(0, 0, 0, 0);
720
657
  lastDayLastMonth.setHours(0, 0, 0, 0);
721
658
  checkDate.setHours(0, 0, 0, 0);
722
659
 
723
- isMatched = (checkDate >= firstDayLastMonth && checkDate <= lastDayLastMonth);
660
+ isMatched = checkDate >= firstDayLastMonth && checkDate <= lastDayLastMonth;
724
661
  }
725
-
726
- if(filterTd && filterTd.textContent.toLowerCase().includes(filter.replace('-',' ').toLowerCase())){
662
+
663
+ if (filterTd && filterTd.textContent.toLowerCase().includes(filter.replace('-', ' ').toLowerCase())) {
727
664
  isMatched = true;
728
665
  }
729
-
730
666
  });
731
667
 
732
- if(!isMatched) {
733
-
668
+ if (!isMatched) {
734
669
  row.classList.add('filtered');
735
- row.setAttribute('data-filtered-by',key)
670
+ row.setAttribute('data-filtered-by', key);
736
671
  }
737
-
738
672
  });
739
673
  }
740
674
  // Search whats left of the table after filtering
741
675
  Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {
742
-
743
676
  let isSearched = searches.length > 0 && searches[0].value.length >= 3 ? false : true;
744
-
745
- searches.forEach((search, index) => {
746
677
 
747
- let searchTd = row.querySelector(`[data-label="${search.column}"]`);
678
+ searches.forEach((search, index) => {
679
+ const searchTd = row.querySelector(`[data-label="${search.column}"]`);
748
680
 
749
- if(searchTd && search.value.length >= 3 && searchTd.textContent.toLowerCase().includes(search.value.toLowerCase())){
681
+ if (
682
+ searchTd &&
683
+ search.value.length >= 3 &&
684
+ searchTd.textContent.toLowerCase().includes(search.value.toLowerCase())
685
+ ) {
750
686
  isSearched = true;
751
687
  }
752
-
753
688
  });
754
689
 
755
- if(!isSearched){
690
+ if (!isSearched) {
756
691
  row.classList.add('filtered');
757
692
  }
758
693
  });
759
694
 
760
695
  // Work out what to display after pagination
761
696
  Array.from(table.querySelectorAll('tbody tr:not(.filtered)')).forEach((row, index) => {
762
-
763
697
  matched++;
764
698
 
765
699
  row.classList.add('filtered--matched');
766
700
 
767
- // pagination bit
768
- let matchesPage = Math.ceil(matched/showRows);
769
- if(matchesPage == parseInt(page)){
701
+ // pagination bit
702
+ const matchesPage = Math.ceil(matched / showRows);
703
+ if (matchesPage == parseInt(page)) {
770
704
  row.classList.add('filtered--show');
771
705
  }
772
706
  });
773
707
 
774
- if(wrapper){
775
- wrapper.setAttribute('data-total',matched);
776
- wrapper.setAttribute('data-show',showRows);
777
- wrapper.setAttribute('data-page',page);
708
+ if (wrapper) {
709
+ wrapper.setAttribute('data-total', matched);
710
+ wrapper.setAttribute('data-show', showRows);
711
+ wrapper.setAttribute('data-page', page);
778
712
  }
713
+ };
779
714
 
780
- }
781
-
782
- export const populateDataQueries = (table,form,wrapper) => {
783
-
715
+ export const populateDataQueries = (table, form, wrapper) => {
784
716
  const dataQueries = Array.from(form.querySelectorAll('[data-query]'));
785
717
 
786
718
  dataQueries.forEach((queryElement, index) => {
787
-
788
- let query = queryElement.getAttribute('data-query');
719
+ const query = queryElement.getAttribute('data-query');
789
720
  let numberOfMatchedRows = 0;
790
721
 
791
- if(query == 'total'){
792
- if(wrapper.hasAttribute('data-total'))
793
- numberOfMatchedRows = wrapper.getAttribute('data-total');
722
+ if (query == 'total') {
723
+ if (wrapper.hasAttribute('data-total')) numberOfMatchedRows = wrapper.getAttribute('data-total');
794
724
  else
795
- numberOfMatchedRows = table.classList.contains('table--filtered') ? table.querySelectorAll('tbody tr').length : table.querySelectorAll('tbody tr').length;
796
- }
797
- else if(!query.includes(' == ') && query.includes(' & ')){
798
-
799
- let queries = query.split(' & ');
725
+ numberOfMatchedRows = table.classList.contains('table--filtered')
726
+ ? table.querySelectorAll('tbody tr').length
727
+ : table.querySelectorAll('tbody tr').length;
728
+ } else if (!query.includes(' == ') && query.includes(' & ')) {
729
+ const queries = query.split(' & ');
800
730
  let selector = '';
801
731
 
802
- queries.forEach(element => {
732
+ queries.forEach((element) => {
803
733
  selector += `:not([data-filtered-by="${element}"])`;
804
734
  });
805
-
806
- numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr${selector}`)).length;
807
- }
808
- else if(!query.includes(' == ')){
809
735
 
736
+ numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr${selector}`)).length;
737
+ } else if (!query.includes(' == ')) {
810
738
  numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr:not([data-filtered-by="${query}"])`)).length;
811
- }
812
- else if(query.includes(' && ')){
813
-
814
- let queries = query.split(' && ');
815
-
816
- numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr:not(.filtered)`)).filter(function(row){
739
+ } else if (query.includes(' && ')) {
740
+ const queries = query.split(' && ');
817
741
 
742
+ numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr:not(.filtered)`)).filter(function (row) {
818
743
  let matched = true;
819
744
 
820
745
  for (const [index, value] of Object.entries(queries)) {
821
-
822
- let queryParts = value.split(' == ');
746
+ const queryParts = value.split(' == ');
823
747
 
824
- if(!row.querySelector(`td[data-label="${queryParts[0]}"]`) || row.querySelector(`td[data-label="${queryParts[0]}"]`).textContent != `${queryParts[1]}`)
748
+ if (
749
+ !row.querySelector(`td[data-label="${queryParts[0]}"]`) ||
750
+ row.querySelector(`td[data-label="${queryParts[0]}"]`).textContent != `${queryParts[1]}`
751
+ )
825
752
  matched = false;
826
753
  }
827
754
 
828
755
  return matched;
829
-
830
756
  }).length;
831
- }
832
- else {
833
-
834
- let queryParts = query.split(' == ');
835
- numberOfMatchedRows = Array.from(table.querySelectorAll(`tbody tr.filtered--matched td[data-label="${queryParts[0]}"], tbody tr[data-filtered-by="${queryParts[0]}"] td[data-label="${queryParts[0]}"]`)).filter(function(element){
757
+ } else {
758
+ const queryParts = query.split(' == ');
759
+ numberOfMatchedRows = Array.from(
760
+ table.querySelectorAll(
761
+ `tbody tr.filtered--matched td[data-label="${queryParts[0]}"], tbody tr[data-filtered-by="${queryParts[0]}"] td[data-label="${queryParts[0]}"]`
762
+ )
763
+ ).filter(function (element) {
836
764
  return element.textContent === queryParts[1];
837
765
  }).length;
838
766
  }
839
767
 
840
- if(queryElement.hasAttribute('data-total')){
768
+ if (queryElement.hasAttribute('data-total')) {
841
769
  queryElement.setAttribute('data-total', numberOfMatchedRows);
842
- }
843
- else {
770
+ } else {
844
771
  queryElement.innerHTML = numberOfMatchedRows;
845
772
  }
846
-
847
773
  });
848
- }
774
+ };
849
775
 
850
776
  // Pagination
851
- export const addPaginationEventListeners = function(table, form, pagination, wrapper){
852
-
853
- if(wrapper.hasAttribute('data-no-submit')){
777
+ export const addPaginationEventListeners = function (table, form, pagination, wrapper) {
778
+ if (wrapper.hasAttribute('data-no-submit')) {
854
779
  return false;
855
780
  }
856
781
 
857
782
  pagination.addEventListener('update-page', (event) => {
858
-
859
- let paginationInput = form.querySelector('[data-pagination]');
860
- let newPage = event.detail.page;
783
+ const paginationInput = form.querySelector('[data-pagination]');
784
+ const newPage = event.detail.page;
861
785
 
862
786
  // Set the filter value
863
787
  paginationInput.value = newPage;
864
- form.dispatchEvent(new Event("paginate"));
788
+ form.dispatchEvent(new Event('paginate'));
865
789
 
866
790
  // Reset the data attribute
867
- wrapper.setAttribute('data-page',newPage);
791
+ wrapper.setAttribute('data-page', newPage);
868
792
 
869
- if(table.hasAttribute('data-show-history')){
870
-
793
+ if (table.hasAttribute('data-show-history')) {
871
794
  const url = new URL(location);
872
- url.searchParams.set("page", newPage);
873
- history.pushState({'type':'pagination','form':form.getAttribute('id'),'page':newPage}, "", url)
795
+ url.searchParams.set('page', newPage);
796
+ history.pushState({ type: 'pagination', form: form.getAttribute('id'), page: newPage }, '', url);
874
797
  }
875
798
 
876
799
  // scroll back to the top of the table
877
- if(!wrapper.hasAttribute('data-no-scroll')){
800
+ if (!wrapper.hasAttribute('data-no-scroll')) {
878
801
  const yOffset = -250;
879
802
  const y = table.getBoundingClientRect().top + window.pageYOffset + yOffset;
880
- window.scrollTo({top: y, behavior: 'smooth'});
803
+ window.scrollTo({ top: y, behavior: 'smooth' });
881
804
  }
882
805
  });
883
806
 
884
807
  pagination.addEventListener('update-show', (event) => {
885
-
886
- let showInput = form.querySelector('[data-show]');
887
- let showRows = event.detail.show;
808
+ const showInput = form.querySelector('[data-show]');
809
+ const showRows = event.detail.show;
888
810
  showInput.value = showRows;
889
811
  wrapper.setAttribute('data-show', showRows);
890
- form.dispatchEvent(new Event("submit"));
812
+ form.dispatchEvent(new Event('submit'));
891
813
  });
892
- }
814
+ };
893
815
 
894
816
  // Export CSV Data
895
817
  export const addExportEventListeners = (button, table) => {
896
-
897
- if(!button){
818
+ if (!button) {
898
819
  return false;
899
820
  }
900
821
 
901
822
  button.addEventListener('click', (event) => {
902
823
  exportAsCSV(table);
903
824
  });
904
- }
825
+ };
905
826
 
906
- export const exportAsCSV = function(table){
907
-
908
- var csvData = [];
827
+ export const exportAsCSV = function (table) {
828
+ let csvData = [];
909
829
  // Get each row data
910
- var rows = table.getElementsByTagName('tr');
911
- for (var i = 0; i < rows.length; i++) {
912
-
830
+ const rows = table.getElementsByTagName('tr');
831
+ for (let i = 0; i < rows.length; i++) {
913
832
  // Get each column data
914
- var cols = rows[i].querySelectorAll('td,th');
833
+ const cols = rows[i].querySelectorAll('td,th');
915
834
 
916
835
  // Stores each csv row data
917
- var csvRow = [];
918
- for (var j = 0; j < cols.length; j++) {
919
-
836
+ const csvRow = [];
837
+ for (let j = 0; j < cols.length; j++) {
920
838
  // Get the text data of each cell of a row and push it to csvrow
921
839
  csvRow.push(`"${cols[j].textContent}"`);
922
840
  }
923
841
 
924
842
  // Combine each column value with comma
925
- csvData.push(csvRow.join(","));
843
+ csvData.push(csvRow.join(','));
926
844
  }
927
845
 
928
846
  // Combine each row data with new line character
929
847
  csvData = csvData.join('\n');
930
-
848
+
931
849
  // Create CSV file object and feed our csvData into it
932
- let CSVFile = new Blob([csvData], {
933
- type: "text/csv"
850
+ const CSVFile = new Blob([csvData], {
851
+ type: 'text/csv',
934
852
  });
935
853
 
936
854
  // Create to temporary link to initiate download process
937
- var tempLink = document.createElement('a');
938
- tempLink.download = "export.csv";
939
- var url = window.URL.createObjectURL(CSVFile);
855
+ const tempLink = document.createElement('a');
856
+ tempLink.download = 'export.csv';
857
+ const url = window.URL.createObjectURL(CSVFile);
940
858
  tempLink.href = url;
941
859
 
942
860
  // This link should not be displayed
943
- tempLink.style.display = "none";
861
+ tempLink.style.display = 'none';
944
862
  document.body.appendChild(tempLink);
945
863
 
946
864
  // Automatically click the link to trigger download
947
865
  tempLink.click();
948
866
  document.body.removeChild(tempLink);
949
- }
867
+ };
950
868
 
951
869
  // After table is loaded
952
- export const makeTableFunctional = function(table, form, pagination, wrapper){
953
-
870
+ export const makeTableFunctional = function (table, form, pagination, wrapper) {
954
871
  addDataAttributes(table);
955
872
  createMobileButton(table, wrapper);
956
873
  populateDataQueries(table, form, wrapper);
957
-
958
- // Work out the largest width of the CTA's in the last column
959
- if(wrapper && wrapper.classList.contains('table--cta')){
960
874
 
875
+ // Work out the largest width of the CTA's in the last column
876
+ if (wrapper && wrapper.classList.contains('table--cta')) {
961
877
  const largestWidth = getLargestLastColWidth(table);
962
- wrapper.style.setProperty("--cta-width", `${largestWidth}rem`);
878
+ wrapper.style.setProperty('--cta-width', `${largestWidth}rem`);
963
879
 
964
880
  function outputsize() {
965
-
966
881
  Array.from(table.querySelectorAll('tr')).forEach((row, index) => {
967
- let rowHeight = row.offsetHeight;
968
- row.style.setProperty("--row-height", `${rowHeight}px`);
882
+ const rowHeight = row.offsetHeight;
883
+ row.style.setProperty('--row-height', `${rowHeight}px`);
969
884
  });
970
885
  }
971
-
972
- new ResizeObserver(outputsize).observe(table)
973
- }
974
- }
975
886
 
976
- const filterFilters = function(form){
887
+ new ResizeObserver(outputsize).observe(table);
888
+ }
889
+ };
977
890
 
978
- let filters = new Object();
891
+ const filterFilters = function (form) {
892
+ const filters = new Object();
979
893
 
980
894
  // Filter
981
- let filterInputs = Array.from(form.querySelectorAll('[data-filter]'));
895
+ const filterInputs = Array.from(form.querySelectorAll('[data-filter]'));
982
896
 
983
897
  filterInputs.forEach((filterInput, index) => {
984
-
985
898
  // Ignore uncked radio inputs
986
- if(filterInput.type == 'radio' && !filterInput.checked){
899
+ if (filterInput.type == 'radio' && !filterInput.checked) {
987
900
  return;
988
901
  }
989
-
990
- if(filterInput.type == 'checkbox' && !filterInput.checked){
902
+
903
+ if (filterInput.type == 'checkbox' && !filterInput.checked) {
991
904
  return;
992
905
  }
993
906
 
994
907
  if (filterInput && filterInput.value) {
995
-
996
- let dataFilter = filterInput.getAttribute('data-filter');
908
+ const dataFilter = filterInput.getAttribute('data-filter');
997
909
  let filterValue = filterInput.value;
998
910
 
999
- if(filterInput.hasAttribute('data-date-from'))
1000
- filterValue += '-date-from'
911
+ if (filterInput.hasAttribute('data-date-from')) filterValue += '-date-from';
912
+
913
+ if (filterInput.hasAttribute('data-date-to')) filterValue += '-date-to';
1001
914
 
1002
- if(filterInput.hasAttribute('data-date-to'))
1003
- filterValue += '-date-to'
915
+ if (!filters[dataFilter]) filters[dataFilter] = [];
1004
916
 
1005
- if(!filters[dataFilter])
1006
- filters[dataFilter] = new Array();
1007
-
1008
917
  filters[dataFilter].push(filterValue);
1009
918
  }
1010
919
  });
1011
920
 
1012
921
  return filters;
1013
- }
922
+ };
1014
923
 
1015
- export const loadAjaxTable = async function (table, form, pagination, wrapper){
1016
-
1017
- let formData = new FormData(form);
1018
- let queryString = new URLSearchParams(formData).toString();
1019
- let columns = table.querySelectorAll('thead tr th:not(.expand-button-heading)');
1020
- let tbody = table.querySelector('tbody');
1021
- let ajaxURL = form.getAttribute('data-ajax');
924
+ export const loadAjaxTable = async function (table, form, pagination, wrapper) {
925
+ const formData = new FormData(form);
926
+ const queryString = new URLSearchParams(formData).toString();
927
+ const columns = table.querySelectorAll('thead tr th:not(.expand-button-heading)');
928
+ const tbody = table.querySelector('tbody');
929
+ const ajaxURL = form.getAttribute('data-ajax');
1022
930
 
1023
931
  wrapper.classList.add('table--loading');
1024
-
932
+
1025
933
  // Display the filter count
1026
- let filters = filterFilters(form);
934
+ const filters = filterFilters(form);
1027
935
 
1028
936
  Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {
1029
937
  element.innerHTML = '';
@@ -1032,15 +940,11 @@ export const loadAjaxTable = async function (table, form, pagination, wrapper){
1032
940
 
1033
941
  let filterCount = 0;
1034
942
  Object.values(filters).forEach((filter, index) => {
1035
-
1036
- if(typeof filter == "object" && Object.values(filter).length)
1037
- filterCount += Object.values(filter).length;
1038
- else
1039
- filterCount++;
943
+ if (typeof filter == 'object' && Object.values(filter).length) filterCount += Object.values(filter).length;
944
+ else filterCount++;
1040
945
  });
1041
946
 
1042
- if(filterCount) {
1043
-
947
+ if (filterCount) {
1044
948
  Array.from(form.querySelectorAll('[data-filter-count]')).forEach((element, index) => {
1045
949
  element.innerHTML += `(${filterCount})`;
1046
950
  element.parentNode.classList.add('hover');
@@ -1048,159 +952,172 @@ export const loadAjaxTable = async function (table, form, pagination, wrapper){
1048
952
  }
1049
953
 
1050
954
  // Setup controller vars if not already set
1051
- if(!window.controller)
1052
- window.controller = [];
955
+ if (!window.controller) window.controller = [];
1053
956
 
1054
957
  // Abort if controller already present for this url
1055
- if(window.controller[ajaxURL])
1056
- window.controller[ajaxURL].abort();
958
+ if (window.controller[ajaxURL]) window.controller[ajaxURL].abort();
1057
959
 
1058
960
  // Create a new controller so it can be aborted if new fetch made
1059
961
  window.controller[ajaxURL] = new AbortController();
1060
962
  const { signal } = controller[ajaxURL];
1061
963
 
1062
964
  // Set loading on the pagination
1063
- pagination.setAttribute('data-loading','true');
965
+ pagination.setAttribute('data-loading', 'true');
1064
966
  form.classList.add('processing');
1065
967
 
1066
968
  try {
1067
- await fetch(ajaxURL+'?'+queryString, {
969
+ await fetch(ajaxURL + '?' + queryString, {
1068
970
  signal: signal,
1069
971
  method: 'get',
1070
972
  credentials: 'same-origin',
1071
973
  headers: new Headers({
1072
974
  'Content-Type': 'application/json',
1073
975
  Accept: 'application/json',
1074
- 'X-Requested-With': 'XMLHttpRequest'
1075
- })
976
+ 'X-Requested-With': 'XMLHttpRequest',
977
+ }),
1076
978
  })
1077
- .then((response) => response.json()).then((response) => {
1078
-
1079
- let schema = form.hasAttribute('data-schema') ? form.getAttribute('data-schema') : 'data';
1080
- let totalNumberSchema = form.hasAttribute('data-schema-total') ? form.getAttribute('data-schema-total') : 'meta.total';
1081
- let currentPageSchema = form.hasAttribute('data-schema-page') ? form.getAttribute('data-schema-page') : 'meta.current_page';
1082
-
1083
- let totalNumber = resolvePath(response, totalNumberSchema, 15);
1084
- let currentPage = resolvePath(response, currentPageSchema, 1);
1085
- let data = resolvePath(response, schema);
1086
- let emptyMsg = wrapper.hasAttribute('data-empty-msg') ? wrapper.getAttribute('data-empty-msg') : "No results found";
1087
-
1088
- if (data) {
1089
-
1090
- tbody.innerHTML = '';
1091
-
1092
- data.forEach((row, index) => {
1093
-
1094
- var table_row = document.createElement('tr');
1095
-
1096
- columns.forEach((col, index) => {
1097
- let cellOutput = '';
1098
- var table_cell = document.createElement('td');
1099
- // Add some data to help with the mobile layout design
1100
- table_cell.setAttribute('data-label',col.innerText);
1101
-
1102
- if(col.getAttribute('data-output')){
1103
- var cellTemplate = col.getAttribute('data-output');
1104
- // Use a regex to replace {var} with actual values from the json data
1105
- cellOutput = cellTemplate.replace( new RegExp(/{(.*?)}/,"gm"), function(matched){ return resolvePath(row, matched.replace('{','').replace('}','')); });
1106
- }
1107
-
1108
- // If an output array is defined then the content is going to made of of multiple values from an array
1109
- if(col.hasAttribute('data-output-array')){
1110
-
1111
- var cellTemplate = col.getAttribute('data-output');
1112
- let arrValue = resolvePath(row, cellTemplate.replace('{','').replace('}',''));
1113
-
1114
- cellOutput = "";
1115
- arrValue.forEach((rowValue, i) => {
1116
-
1117
- let cellTemplateValue = col.getAttribute('data-output-array');
1118
- let cellOutputValue = "";
1119
-
1120
- // If we need to transform some of the data
1121
- if(col.hasAttribute('data-output-array-property') && col.hasAttribute('data-output-array-transform')){
1122
-
1123
- const propertyValue = resolvePath(rowValue, col.getAttribute('data-output-array-property'));
1124
- const transforms = JSON.parse(col.getAttribute('data-output-array-transform'));
1125
- const transformValue = transforms[propertyValue];
1126
-
1127
- cellOutputValue = cellTemplateValue.replace(`{${col.getAttribute('data-output-array-property')}}`,transformValue);
1128
- }
979
+ .then((response) => response.json())
980
+ .then((response) => {
981
+ const schema = form.hasAttribute('data-schema') ? form.getAttribute('data-schema') : 'data';
982
+ const totalNumberSchema = form.hasAttribute('data-schema-total')
983
+ ? form.getAttribute('data-schema-total')
984
+ : 'meta.total';
985
+ const currentPageSchema = form.hasAttribute('data-schema-page')
986
+ ? form.getAttribute('data-schema-page')
987
+ : 'meta.current_page';
988
+
989
+ const totalNumber = resolvePath(response, totalNumberSchema, 15);
990
+ const currentPage = resolvePath(response, currentPageSchema, 1);
991
+ const data = resolvePath(response, schema);
992
+ const emptyMsg = wrapper.hasAttribute('data-empty-msg')
993
+ ? wrapper.getAttribute('data-empty-msg')
994
+ : 'No results found';
995
+
996
+ if (data) {
997
+ tbody.innerHTML = '';
998
+
999
+ data.forEach((row, index) => {
1000
+ const table_row = document.createElement('tr');
1001
+
1002
+ columns.forEach((col, index) => {
1003
+ let cellOutput = '';
1004
+ const table_cell = document.createElement('td');
1005
+ // Add some data to help with the mobile layout design
1006
+ table_cell.setAttribute('data-label', col.innerText);
1007
+
1008
+ if (col.getAttribute('data-output')) {
1009
+ var cellTemplate = col.getAttribute('data-output');
1010
+ // Use a regex to replace {var} with actual values from the json data
1011
+ cellOutput = cellTemplate.replace(new RegExp(/{(.*?)}/, 'gm'), function (matched) {
1012
+ return resolvePath(row, matched.replace('{', '').replace('}', ''));
1013
+ });
1014
+ }
1129
1015
 
1130
- cellOutputValue = cellOutputValue.replace( new RegExp(/{(.*?)}/,"gm"), function(matched){ return resolvePath(rowValue, matched.replace('{','').replace('}','')); });
1131
- cellOutput += cellOutputValue;
1132
- });
1133
- }
1016
+ // If an output array is defined then the content is going to made of of multiple values from an array
1017
+ if (col.hasAttribute('data-output-array')) {
1018
+ var cellTemplate = col.getAttribute('data-output');
1019
+ const arrValue = resolvePath(row, cellTemplate.replace('{', '').replace('}', ''));
1020
+
1021
+ cellOutput = '';
1022
+ arrValue.forEach((rowValue, i) => {
1023
+ const cellTemplateValue = col.getAttribute('data-output-array');
1024
+ let cellOutputValue = '';
1025
+
1026
+ // If we need to transform some of the data
1027
+ if (
1028
+ col.hasAttribute('data-output-array-property') &&
1029
+ col.hasAttribute('data-output-array-transform')
1030
+ ) {
1031
+ const propertyValue = resolvePath(rowValue, col.getAttribute('data-output-array-property'));
1032
+ const transforms = JSON.parse(col.getAttribute('data-output-array-transform'));
1033
+ const transformValue = transforms[propertyValue];
1034
+
1035
+ cellOutputValue = cellTemplateValue.replace(
1036
+ `{${col.getAttribute('data-output-array-property')}}`,
1037
+ transformValue
1038
+ );
1039
+ }
1134
1040
 
1041
+ cellOutputValue = cellOutputValue.replace(new RegExp(/{(.*?)}/, 'gm'), function (matched) {
1042
+ return resolvePath(rowValue, matched.replace('{', '').replace('}', ''));
1043
+ });
1044
+ cellOutput += cellOutputValue;
1045
+ });
1046
+ }
1135
1047
 
1136
- if(col.hasAttribute('data-transform')){
1048
+ if (col.hasAttribute('data-transform')) {
1049
+ const transforms = JSON.parse(col.getAttribute('data-transform'));
1050
+ cellOutput = transforms[cellOutput];
1137
1051
 
1138
- const transforms = JSON.parse(col.getAttribute('data-transform'));
1139
- cellOutput = transforms[cellOutput];
1052
+ if (!cellOutput && col.hasAttribute('data-default')) cellOutput = col.getAttribute('data-default');
1053
+ }
1140
1054
 
1141
- if(!cellOutput && col.hasAttribute('data-default'))
1142
- cellOutput = col.getAttribute('data-default');
1143
- }
1055
+ table_cell.innerHTML = cellOutput;
1056
+ table_row.appendChild(table_cell);
1057
+ });
1144
1058
 
1145
- table_cell.innerHTML = cellOutput;
1146
- table_row.appendChild(table_cell)
1059
+ tbody.appendChild(table_row);
1147
1060
  });
1148
1061
 
1149
- tbody.appendChild(table_row)
1150
- });
1062
+ createSearchDataList(table, form);
1063
+ // Add data to the pagination
1064
+ wrapper.setAttribute('data-total', parseInt(totalNumber));
1065
+ wrapper.setAttribute('data-page', parseInt(currentPage));
1151
1066
 
1152
- createSearchDataList(table, form)
1153
- // Add data to the pagination
1154
- wrapper.setAttribute('data-total', parseInt(totalNumber));
1155
- wrapper.setAttribute('data-page', parseInt(currentPage));
1067
+ makeTableFunctional(table, form, pagination, wrapper);
1156
1068
 
1157
-
1158
- makeTableFunctional(table, form, pagination, wrapper);
1069
+ Array.from(form.querySelectorAll('[data-ajax-query]')).forEach((queryElement, index) => {
1070
+ const totalNumber = resolvePath(response, queryElement.getAttribute('data-ajax-query'), '');
1159
1071
 
1160
- Array.from(form.querySelectorAll('[data-ajax-query]')).forEach((queryElement, index) => {
1072
+ if (queryElement.hasAttribute('data-total')) queryElement.setAttribute('data-total', totalNumber);
1073
+ else queryElement.innerHTML = totalNumber;
1074
+ });
1161
1075
 
1162
- let totalNumber = resolvePath(response, queryElement.getAttribute('data-ajax-query'), '');
1076
+ if (parseInt(totalNumber) == 0) {
1077
+ tbody.innerHTML = `<tr><td colspan="100%"><span>${emptyMsg}</span></td></tr>`;
1078
+ }
1163
1079
 
1164
- if(queryElement.hasAttribute('data-total'))
1165
- queryElement.setAttribute('data-total', totalNumber);
1166
- else
1167
- queryElement.innerHTML = totalNumber;
1168
- });
1080
+ wrapper.classList.remove('table--loading');
1169
1081
 
1170
- if(parseInt(totalNumber) == 0){
1171
- tbody.innerHTML = `<tr><td colspan="100%"><span>${emptyMsg}</span></td></tr>`;
1082
+ window.dataLayer = window.dataLayer || [];
1083
+ window.dataLayer.push({
1084
+ event: 'Ajax table loaded',
1085
+ url: ajaxURL,
1086
+ formData: queryString,
1087
+ });
1088
+ } else {
1089
+ tbody.innerHTML = '<tr><td colspan="100%"><span>Error loading table</span></td></tr>';
1172
1090
  }
1173
1091
 
1174
- wrapper.classList.remove('table--loading');
1175
-
1176
- window.dataLayer = window.dataLayer || [];
1177
- window.dataLayer.push({
1178
- "event": "Ajax table loaded",
1179
- "url": ajaxURL,
1180
- "formData": queryString
1181
- });
1182
- }
1183
- else {
1184
- tbody.innerHTML = '<tr><td colspan="100%"><span>Error loading table</span></td></tr>';
1185
- }
1186
-
1187
- // Remove loading on the pagination
1188
- pagination.removeAttribute('data-loading');
1189
- form.classList.remove('processing');
1190
- });
1092
+ // Remove loading on the pagination
1093
+ pagination.removeAttribute('data-loading');
1094
+ form.classList.remove('processing');
1095
+ });
1191
1096
  } catch (error) {
1192
1097
  console.log(error);
1193
1098
  }
1194
- }
1099
+ };
1195
1100
 
1196
1101
  export const formatCell = (format, cellOutput) => {
1197
-
1198
1102
  switch (format) {
1199
1103
  case 'datetime':
1200
- return new Date(cellOutput).toLocaleDateString('en-gb', { weekday: 'short', year:"2-digit", month:"long", day: "numeric", }) + " " + new Date(cellOutput).toLocaleTimeString("en-gb", { hour: "2-digit", minute: "2-digit"});
1104
+ return (
1105
+ new Date(cellOutput).toLocaleDateString('en-gb', {
1106
+ weekday: 'short',
1107
+ year: '2-digit',
1108
+ month: 'long',
1109
+ day: 'numeric',
1110
+ }) +
1111
+ ' ' +
1112
+ new Date(cellOutput).toLocaleTimeString('en-gb', { hour: '2-digit', minute: '2-digit' })
1113
+ );
1201
1114
  case 'date':
1202
- return new Date(cellOutput).toLocaleDateString('en-gb', {day: "numeric", month:"long", year:"2-digit" });
1115
+ return new Date(cellOutput).toLocaleDateString('en-gb', {
1116
+ day: 'numeric',
1117
+ month: 'long',
1118
+ year: '2-digit',
1119
+ });
1203
1120
  case 'capitalise':
1204
- return cellOutput = ucfirst(cellOutput);
1121
+ return (cellOutput = ucfirst(cellOutput));
1205
1122
  }
1206
- }
1123
+ };