tango-app-ui-shared 3.7.3-dev6-copilot → 3.7.3-dev6-demo7

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 (404) hide show
  1. package/.eslintrc.json +37 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +12 -25
  4. package/src/lib/guards/auth.guard.ts +20 -0
  5. package/src/lib/guards/lead.guard.ts +16 -0
  6. package/src/lib/guards/stores.guard.ts +16 -0
  7. package/src/lib/guards/tickets.guard.ts +16 -0
  8. package/{lib/i18n/index.d.ts → src/lib/i18n/index.ts} +2 -2
  9. package/src/lib/i18n/translation.module.ts +9 -0
  10. package/src/lib/i18n/translation.service.ts +61 -0
  11. package/src/lib/i18n/vocabs/ch.ts +105 -0
  12. package/src/lib/i18n/vocabs/de.ts +105 -0
  13. package/src/lib/i18n/vocabs/en.ts +105 -0
  14. package/src/lib/i18n/vocabs/es.ts +105 -0
  15. package/src/lib/i18n/vocabs/fr.ts +105 -0
  16. package/src/lib/i18n/vocabs/jp.ts +105 -0
  17. package/src/lib/interceptors/http-auth-interceptor.ts +225 -0
  18. package/src/lib/interfaces/global-state.ts +6 -0
  19. package/src/lib/modules/common/common-shared.module.ts +20 -0
  20. package/src/lib/modules/common/custom-select/custom-select.component.html +42 -0
  21. package/src/lib/modules/common/custom-select/custom-select.component.scss +131 -0
  22. package/src/lib/modules/common/custom-select/custom-select.component.spec.ts +23 -0
  23. package/src/lib/modules/common/custom-select/custom-select.component.ts +149 -0
  24. package/src/lib/modules/common/filters/filters.component.html +76 -0
  25. package/src/lib/modules/common/filters/filters.component.scss +131 -0
  26. package/src/lib/modules/common/filters/filters.component.spec.ts +23 -0
  27. package/src/lib/modules/common/filters/filters.component.ts +181 -0
  28. package/src/lib/modules/common/pagination/pagination.component.html +26 -0
  29. package/src/lib/modules/common/pagination/pagination.component.scss +63 -0
  30. package/src/lib/modules/common/pagination/pagination.component.spec.ts +23 -0
  31. package/src/lib/modules/common/pagination/pagination.component.ts +46 -0
  32. package/src/lib/modules/errors/error403/error403.component.html +25 -0
  33. package/src/lib/modules/errors/error403/error403.component.scss +0 -0
  34. package/src/lib/modules/errors/error403/error403.component.spec.ts +23 -0
  35. package/src/lib/modules/errors/error403/error403.component.ts +28 -0
  36. package/src/lib/modules/errors/error404/error404.component.html +24 -0
  37. package/src/lib/modules/errors/error404/error404.component.scss +0 -0
  38. package/src/lib/modules/errors/error404/error404.component.spec.ts +25 -0
  39. package/src/lib/modules/errors/error404/error404.component.ts +50 -0
  40. package/src/lib/modules/errors/error500/error500.component.html +24 -0
  41. package/src/lib/modules/errors/error500/error500.component.scss +0 -0
  42. package/src/lib/modules/errors/error500/error500.component.spec.ts +25 -0
  43. package/src/lib/modules/errors/error500/error500.component.ts +50 -0
  44. package/src/lib/modules/errors/errors-routing.module.ts +40 -0
  45. package/src/lib/modules/errors/errors.component.html +15 -0
  46. package/src/lib/modules/errors/errors.component.scss +4 -0
  47. package/src/lib/modules/errors/errors.component.spec.ts +25 -0
  48. package/src/lib/modules/errors/errors.component.ts +42 -0
  49. package/src/lib/modules/errors/errors.module.ts +25 -0
  50. package/src/lib/modules/errors/invalid-ip/invalid-ip.component.html +16 -0
  51. package/src/lib/modules/errors/invalid-ip/invalid-ip.component.scss +0 -0
  52. package/src/lib/modules/errors/invalid-ip/invalid-ip.component.spec.ts +23 -0
  53. package/src/lib/modules/errors/invalid-ip/invalid-ip.component.ts +43 -0
  54. package/src/lib/modules/intro/contact-support/contact-support.component.html +30 -0
  55. package/src/lib/modules/intro/contact-support/contact-support.component.scss +60 -0
  56. package/src/lib/modules/intro/contact-support/contact-support.component.spec.ts +23 -0
  57. package/src/lib/modules/intro/contact-support/contact-support.component.ts +17 -0
  58. package/src/lib/modules/intro/intro-routing.module.ts +16 -0
  59. package/src/lib/modules/intro/intro.module.ts +21 -0
  60. package/src/lib/modules/intro/lead-intro/lead-intro.component.html +325 -0
  61. package/src/lib/modules/intro/lead-intro/lead-intro.component.scss +185 -0
  62. package/src/lib/modules/intro/lead-intro/lead-intro.component.spec.ts +23 -0
  63. package/src/lib/modules/intro/lead-intro/lead-intro.component.ts +120 -0
  64. package/src/lib/modules/layout/components/csm-assign-confirmation/csm-assign-confirmation.component.html +44 -0
  65. package/src/lib/modules/layout/components/csm-assign-confirmation/csm-assign-confirmation.component.scss +28 -0
  66. package/src/lib/modules/layout/components/csm-assign-confirmation/csm-assign-confirmation.component.spec.ts +23 -0
  67. package/src/lib/modules/layout/components/csm-assign-confirmation/csm-assign-confirmation.component.ts +24 -0
  68. package/src/lib/modules/layout/content/content.component.html +12 -0
  69. package/src/lib/modules/layout/content/content.component.scss +0 -0
  70. package/src/lib/modules/layout/content/content.component.ts +102 -0
  71. package/src/lib/modules/layout/footer/footer.component.html +29 -0
  72. package/src/lib/modules/layout/footer/footer.component.scss +7 -0
  73. package/src/lib/modules/layout/footer/footer.component.spec.ts +25 -0
  74. package/src/lib/modules/layout/footer/footer.component.ts +13 -0
  75. package/src/lib/modules/layout/header/header-menu/header-menu.component.html +27 -0
  76. package/src/lib/modules/layout/header/header-menu/header-menu.component.scss +4 -0
  77. package/src/lib/modules/layout/header/header-menu/header-menu.component.spec.ts +25 -0
  78. package/src/lib/modules/layout/header/header-menu/header-menu.component.ts +38 -0
  79. package/src/lib/modules/layout/header/header.component.html +90 -0
  80. package/src/lib/modules/layout/header/header.component.scss +7 -0
  81. package/src/lib/modules/layout/header/header.component.spec.ts +25 -0
  82. package/src/lib/modules/layout/header/header.component.ts +139 -0
  83. package/src/lib/modules/layout/header/navbar/navbar.component.html +156 -0
  84. package/src/lib/modules/layout/header/navbar/navbar.component.scss +223 -0
  85. package/src/lib/modules/layout/header/navbar/navbar.component.spec.ts +23 -0
  86. package/src/lib/modules/layout/header/navbar/navbar.component.ts +255 -0
  87. package/src/lib/modules/layout/header/notifications-inner/notifications-inner.component.html +200 -0
  88. package/src/lib/modules/layout/header/notifications-inner/notifications-inner.component.scss +139 -0
  89. package/src/lib/modules/layout/header/notifications-inner/notifications-inner.component.ts +76 -0
  90. package/src/lib/modules/layout/header/page-title/page-title.component.html +32 -0
  91. package/src/lib/modules/layout/header/page-title/page-title.component.scss +11 -0
  92. package/src/lib/modules/layout/header/page-title/page-title.component.ts +47 -0
  93. package/src/lib/modules/layout/keenicon/icons.json +1 -0
  94. package/src/lib/modules/layout/keenicon/keenicon.component.html +4 -0
  95. package/src/lib/modules/layout/keenicon/keenicon.component.scss +0 -0
  96. package/src/lib/modules/layout/keenicon/keenicon.component.spec.ts +23 -0
  97. package/src/lib/modules/layout/keenicon/keenicon.component.ts +30 -0
  98. package/src/lib/modules/layout/layout/layout.component.html +71 -0
  99. package/src/lib/modules/layout/layout/layout.component.scss +23 -0
  100. package/src/lib/modules/layout/layout/layout.component.ts +425 -0
  101. package/src/lib/modules/layout/layout.module.ts +129 -0
  102. package/src/lib/modules/layout/scripts-init/scripts-init.component.html +0 -0
  103. package/src/lib/modules/layout/scripts-init/scripts-init.component.ts +81 -0
  104. package/src/lib/modules/layout/scroll-top/scroll-top.component.html +1 -0
  105. package/src/lib/modules/layout/scroll-top/scroll-top.component.ts +75 -0
  106. package/src/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.html +70 -0
  107. package/src/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.scss +57 -0
  108. package/src/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.spec.ts +23 -0
  109. package/src/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.ts +136 -0
  110. package/src/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.html +26 -0
  111. package/src/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.scss +0 -0
  112. package/src/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.spec.ts +23 -0
  113. package/src/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.ts +36 -0
  114. package/src/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.html +761 -0
  115. package/src/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.scss +38 -0
  116. package/src/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.spec.ts +23 -0
  117. package/src/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.ts +130 -0
  118. package/src/lib/modules/layout/sidebar/sidebar.component.html +16 -0
  119. package/src/lib/modules/layout/sidebar/sidebar.component.scss +3 -0
  120. package/src/lib/modules/layout/sidebar/sidebar.component.spec.ts +23 -0
  121. package/src/lib/modules/layout/sidebar/sidebar.component.ts +203 -0
  122. package/src/lib/modules/layout/toolbar/accounting/accounting.component.html +84 -0
  123. package/src/lib/modules/layout/toolbar/accounting/accounting.component.scss +0 -0
  124. package/src/lib/modules/layout/toolbar/accounting/accounting.component.spec.ts +23 -0
  125. package/src/lib/modules/layout/toolbar/accounting/accounting.component.ts +14 -0
  126. package/src/lib/modules/layout/toolbar/classic/classic.component.html +69 -0
  127. package/src/lib/modules/layout/toolbar/classic/classic.component.scss +238 -0
  128. package/src/lib/modules/layout/toolbar/classic/classic.component.spec.ts +23 -0
  129. package/src/lib/modules/layout/toolbar/classic/classic.component.ts +389 -0
  130. package/src/lib/modules/layout/toolbar/client-settings/client-settings.component.html +4 -0
  131. package/src/lib/modules/layout/toolbar/client-settings/client-settings.component.scss +3 -0
  132. package/src/lib/modules/layout/toolbar/client-settings/client-settings.component.spec.ts +23 -0
  133. package/src/lib/modules/layout/toolbar/client-settings/client-settings.component.ts +91 -0
  134. package/src/lib/modules/layout/toolbar/date-single-select/date-single-select.component.html +22 -0
  135. package/src/lib/modules/layout/toolbar/date-single-select/date-single-select.component.scss +156 -0
  136. package/src/lib/modules/layout/toolbar/date-single-select/date-single-select.component.spec.ts +23 -0
  137. package/src/lib/modules/layout/toolbar/date-single-select/date-single-select.component.ts +238 -0
  138. package/src/lib/modules/layout/toolbar/datepicker/datepicker.component.html +14 -0
  139. package/src/lib/modules/layout/toolbar/datepicker/datepicker.component.scss +149 -0
  140. package/src/lib/modules/layout/toolbar/datepicker/datepicker.component.spec.ts +23 -0
  141. package/src/lib/modules/layout/toolbar/datepicker/datepicker.component.ts +183 -0
  142. package/src/lib/modules/layout/toolbar/extended/extended.component.html +100 -0
  143. package/src/lib/modules/layout/toolbar/extended/extended.component.scss +0 -0
  144. package/src/lib/modules/layout/toolbar/extended/extended.component.spec.ts +23 -0
  145. package/src/lib/modules/layout/toolbar/extended/extended.component.ts +12 -0
  146. package/src/lib/modules/layout/toolbar/metrics-header/metrics-header.component.html +311 -0
  147. package/src/lib/modules/layout/toolbar/metrics-header/metrics-header.component.scss +311 -0
  148. package/src/lib/modules/layout/toolbar/metrics-header/metrics-header.component.spec.ts +23 -0
  149. package/src/lib/modules/layout/toolbar/metrics-header/metrics-header.component.ts +1555 -0
  150. package/src/lib/modules/layout/toolbar/reports/reports.component.html +62 -0
  151. package/src/lib/modules/layout/toolbar/reports/reports.component.scss +0 -0
  152. package/src/lib/modules/layout/toolbar/reports/reports.component.spec.ts +23 -0
  153. package/src/lib/modules/layout/toolbar/reports/reports.component.ts +14 -0
  154. package/src/lib/modules/layout/toolbar/saas/saas.component.html +77 -0
  155. package/src/lib/modules/layout/toolbar/saas/saas.component.scss +0 -0
  156. package/src/lib/modules/layout/toolbar/saas/saas.component.spec.ts +23 -0
  157. package/src/lib/modules/layout/toolbar/saas/saas.component.ts +14 -0
  158. package/src/lib/modules/layout/toolbar/single-clientstore-date/single-clientstore-date.component.html +26 -0
  159. package/src/lib/modules/layout/toolbar/single-clientstore-date/single-clientstore-date.component.scss +176 -0
  160. package/src/lib/modules/layout/toolbar/single-clientstore-date/single-clientstore-date.component.spec.ts +23 -0
  161. package/src/lib/modules/layout/toolbar/single-clientstore-date/single-clientstore-date.component.ts +235 -0
  162. package/src/lib/modules/layout/toolbar/single-store/single-store.component.html +39 -0
  163. package/src/lib/modules/layout/toolbar/single-store/single-store.component.scss +176 -0
  164. package/src/lib/modules/layout/toolbar/single-store/single-store.component.spec.ts +23 -0
  165. package/src/lib/modules/layout/toolbar/single-store/single-store.component.ts +188 -0
  166. package/src/lib/modules/layout/toolbar/single-storedate/single-storedate.component.html +17 -0
  167. package/src/lib/modules/layout/toolbar/single-storedate/single-storedate.component.scss +172 -0
  168. package/src/lib/modules/layout/toolbar/single-storedate/single-storedate.component.spec.ts +23 -0
  169. package/src/lib/modules/layout/toolbar/single-storedate/single-storedate.component.ts +179 -0
  170. package/src/lib/modules/layout/toolbar/storesingle/storesingle.component.html +4 -0
  171. package/src/lib/modules/layout/toolbar/storesingle/storesingle.component.scss +19 -0
  172. package/src/lib/modules/layout/toolbar/storesingle/storesingle.component.spec.ts +23 -0
  173. package/src/lib/modules/layout/toolbar/storesingle/storesingle.component.ts +105 -0
  174. package/src/lib/modules/layout/toolbar/toolbar.component.html +64 -0
  175. package/src/lib/modules/layout/toolbar/toolbar.component.scss +0 -0
  176. package/src/lib/modules/layout/toolbar/toolbar.component.spec.ts +25 -0
  177. package/src/lib/modules/layout/toolbar/toolbar.component.ts +400 -0
  178. package/src/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.html +259 -0
  179. package/src/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.scss +305 -0
  180. package/src/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.spec.ts +23 -0
  181. package/src/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.ts +1202 -0
  182. package/src/lib/modules/layout/toolbar/traffic-nob/traffic-nob.component.html +199 -0
  183. package/src/lib/modules/layout/toolbar/traffic-nob/traffic-nob.component.scss +311 -0
  184. package/src/lib/modules/layout/toolbar/traffic-nob/traffic-nob.component.spec.ts +23 -0
  185. package/src/lib/modules/layout/toolbar/traffic-nob/traffic-nob.component.ts +899 -0
  186. package/src/lib/modules/layout/toolbar/trax-header/trax-header.component.html +204 -0
  187. package/src/lib/modules/layout/toolbar/trax-header/trax-header.component.scss +311 -0
  188. package/src/lib/modules/layout/toolbar/trax-header/trax-header.component.spec.ts +23 -0
  189. package/src/lib/modules/layout/toolbar/trax-header/trax-header.component.ts +1045 -0
  190. package/src/lib/modules/layout/toolbar/trax-withoutdate/trax-withoutdate.component.html +190 -0
  191. package/src/lib/modules/layout/toolbar/trax-withoutdate/trax-withoutdate.component.scss +311 -0
  192. package/src/lib/modules/layout/toolbar/trax-withoutdate/trax-withoutdate.component.spec.ts +23 -0
  193. package/src/lib/modules/layout/toolbar/trax-withoutdate/trax-withoutdate.component.ts +825 -0
  194. package/src/lib/modules/layout/toolbar/zone-header/zone-header.component.html +259 -0
  195. package/src/lib/modules/layout/toolbar/zone-header/zone-header.component.scss +305 -0
  196. package/src/lib/modules/layout/toolbar/zone-header/zone-header.component.spec.ts +23 -0
  197. package/src/lib/modules/layout/toolbar/zone-header/zone-header.component.ts +1242 -0
  198. package/src/lib/modules/notification/conformation/conformation.component.html +25 -0
  199. package/src/lib/modules/notification/conformation/conformation.component.scss +0 -0
  200. package/src/lib/modules/notification/conformation/conformation.component.spec.ts +23 -0
  201. package/src/lib/modules/notification/conformation/conformation.component.ts +23 -0
  202. package/src/lib/modules/notification/notification/notification.component.html +209 -0
  203. package/src/lib/modules/notification/notification/notification.component.scss +211 -0
  204. package/src/lib/modules/notification/notification/notification.component.spec.ts +23 -0
  205. package/src/lib/modules/notification/notification/notification.component.ts +310 -0
  206. package/src/lib/modules/notification/notification-routing.module.ts +20 -0
  207. package/src/lib/modules/notification/notification.module.ts +21 -0
  208. package/src/lib/pipes/customDate.pipe.ts +18 -0
  209. package/src/lib/routes/route-wraper-modules/analyse-wrapper.module.ts +12 -0
  210. package/src/lib/routes/route-wraper-modules/edge-wrapper.module.ts +11 -0
  211. package/src/lib/routes/route-wraper-modules/manage-wrapper.module.ts +11 -0
  212. package/src/lib/routes/route-wraper-modules/profile-wrapper.module.ts +12 -0
  213. package/src/lib/routes/route-wraper-modules/store-wrapper.module.ts +11 -0
  214. package/src/lib/routes/route-wraper-modules/ticket-wrapper.module.ts +10 -0
  215. package/src/lib/routes/routing.ts +56 -0
  216. package/src/lib/services/auth.service.ts +178 -0
  217. package/src/lib/services/notification.service.spec.ts +16 -0
  218. package/src/lib/services/notification.service.ts +73 -0
  219. package/src/lib/services/toast.service.ts +82 -0
  220. package/{public-api.d.ts → src/public-api.ts} +71 -44
  221. package/tsconfig.lib.json +14 -0
  222. package/tsconfig.lib.prod.json +10 -0
  223. package/tsconfig.spec.json +14 -0
  224. package/esm2022/lib/guards/auth.guard.mjs +0 -26
  225. package/esm2022/lib/guards/lead.guard.mjs +0 -16
  226. package/esm2022/lib/guards/stores.guard.mjs +0 -16
  227. package/esm2022/lib/guards/tickets.guard.mjs +0 -16
  228. package/esm2022/lib/i18n/index.mjs +0 -3
  229. package/esm2022/lib/i18n/translation.module.mjs +0 -17
  230. package/esm2022/lib/i18n/translation.service.mjs +0 -53
  231. package/esm2022/lib/i18n/vocabs/ch.mjs +0 -106
  232. package/esm2022/lib/i18n/vocabs/de.mjs +0 -106
  233. package/esm2022/lib/i18n/vocabs/en.mjs +0 -106
  234. package/esm2022/lib/i18n/vocabs/es.mjs +0 -106
  235. package/esm2022/lib/i18n/vocabs/fr.mjs +0 -106
  236. package/esm2022/lib/i18n/vocabs/jp.mjs +0 -106
  237. package/esm2022/lib/interceptors/http-auth-interceptor.mjs +0 -124
  238. package/esm2022/lib/interfaces/global-state.mjs +0 -2
  239. package/esm2022/lib/modules/common/common-shared.module.mjs +0 -31
  240. package/esm2022/lib/modules/common/custom-select/custom-select.component.mjs +0 -155
  241. package/esm2022/lib/modules/common/filters/filters.component.mjs +0 -179
  242. package/esm2022/lib/modules/common/pagination/pagination.component.mjs +0 -49
  243. package/esm2022/lib/modules/errors/error403/error403.component.mjs +0 -33
  244. package/esm2022/lib/modules/errors/error404/error404.component.mjs +0 -44
  245. package/esm2022/lib/modules/errors/error500/error500.component.mjs +0 -45
  246. package/esm2022/lib/modules/errors/errors-routing.module.mjs +0 -48
  247. package/esm2022/lib/modules/errors/errors.component.mjs +0 -39
  248. package/esm2022/lib/modules/errors/errors.module.mjs +0 -37
  249. package/esm2022/lib/modules/errors/invalid-ip/invalid-ip.component.mjs +0 -44
  250. package/esm2022/lib/modules/intro/contact-support/contact-support.component.mjs +0 -19
  251. package/esm2022/lib/modules/intro/intro-routing.module.mjs +0 -24
  252. package/esm2022/lib/modules/intro/intro.module.mjs +0 -32
  253. package/esm2022/lib/modules/intro/lead-intro/lead-intro.component.mjs +0 -110
  254. package/esm2022/lib/modules/layout/components/csm-assign-confirmation/csm-assign-confirmation.component.mjs +0 -31
  255. package/esm2022/lib/modules/layout/content/content.component.mjs +0 -107
  256. package/esm2022/lib/modules/layout/footer/footer.component.mjs +0 -17
  257. package/esm2022/lib/modules/layout/header/header-menu/header-menu.component.mjs +0 -41
  258. package/esm2022/lib/modules/layout/header/header.component.mjs +0 -100
  259. package/esm2022/lib/modules/layout/header/navbar/navbar.component.mjs +0 -256
  260. package/esm2022/lib/modules/layout/header/notifications-inner/notifications-inner.component.mjs +0 -79
  261. package/esm2022/lib/modules/layout/header/page-title/page-title.component.mjs +0 -56
  262. package/esm2022/lib/modules/layout/keenicon/icons.json +0 -1
  263. package/esm2022/lib/modules/layout/keenicon/keenicon.component.mjs +0 -37
  264. package/esm2022/lib/modules/layout/layout/layout.component.mjs +0 -314
  265. package/esm2022/lib/modules/layout/layout.module.mjs +0 -195
  266. package/esm2022/lib/modules/layout/scripts-init/scripts-init.component.mjs +0 -74
  267. package/esm2022/lib/modules/layout/scroll-top/scroll-top.component.mjs +0 -74
  268. package/esm2022/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.mjs +0 -159
  269. package/esm2022/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.mjs +0 -45
  270. package/esm2022/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.mjs +0 -119
  271. package/esm2022/lib/modules/layout/sidebar/sidebar.component.mjs +0 -134
  272. package/esm2022/lib/modules/layout/toolbar/accounting/accounting.component.mjs +0 -16
  273. package/esm2022/lib/modules/layout/toolbar/classic/classic.component.mjs +0 -331
  274. package/esm2022/lib/modules/layout/toolbar/client-settings/client-settings.component.mjs +0 -88
  275. package/esm2022/lib/modules/layout/toolbar/date-single-select/date-single-select.component.mjs +0 -201
  276. package/esm2022/lib/modules/layout/toolbar/datepicker/datepicker.component.mjs +0 -150
  277. package/esm2022/lib/modules/layout/toolbar/extended/extended.component.mjs +0 -15
  278. package/esm2022/lib/modules/layout/toolbar/metrics-header/metrics-header.component.mjs +0 -1321
  279. package/esm2022/lib/modules/layout/toolbar/reports/reports.component.mjs +0 -18
  280. package/esm2022/lib/modules/layout/toolbar/saas/saas.component.mjs +0 -18
  281. package/esm2022/lib/modules/layout/toolbar/single-clientstore-date/single-clientstore-date.component.mjs +0 -216
  282. package/esm2022/lib/modules/layout/toolbar/single-store/single-store.component.mjs +0 -176
  283. package/esm2022/lib/modules/layout/toolbar/single-storedate/single-storedate.component.mjs +0 -166
  284. package/esm2022/lib/modules/layout/toolbar/storesingle/storesingle.component.mjs +0 -105
  285. package/esm2022/lib/modules/layout/toolbar/toolbar.component.mjs +0 -354
  286. package/esm2022/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.mjs +0 -1061
  287. package/esm2022/lib/modules/layout/toolbar/traffic-nob/traffic-nob.component.mjs +0 -795
  288. package/esm2022/lib/modules/layout/toolbar/trax-header/trax-header.component.mjs +0 -880
  289. package/esm2022/lib/modules/layout/toolbar/trax-withoutdate/trax-withoutdate.component.mjs +0 -729
  290. package/esm2022/lib/modules/notification/conformation/conformation.component.mjs +0 -22
  291. package/esm2022/lib/modules/notification/notification/notification.component.mjs +0 -317
  292. package/esm2022/lib/modules/notification/notification-routing.module.mjs +0 -28
  293. package/esm2022/lib/modules/notification/notification.module.mjs +0 -32
  294. package/esm2022/lib/pipes/customDate.pipe.mjs +0 -22
  295. package/esm2022/lib/routes/route-wraper-modules/edge-wrapper.module.mjs +0 -18
  296. package/esm2022/lib/routes/route-wraper-modules/eyetest-wrapper.module.mjs +0 -18
  297. package/esm2022/lib/routes/route-wraper-modules/manage-wrapper.module.mjs +0 -18
  298. package/esm2022/lib/routes/route-wraper-modules/profile-wrapper.module.mjs +0 -18
  299. package/esm2022/lib/routes/route-wraper-modules/store-wrapper.module.mjs +0 -18
  300. package/esm2022/lib/routes/route-wraper-modules/ticket-wrapper.module.mjs +0 -18
  301. package/esm2022/lib/routes/routing.mjs +0 -58
  302. package/esm2022/lib/services/auth.service.mjs +0 -141
  303. package/esm2022/lib/services/notification.service.mjs +0 -74
  304. package/esm2022/lib/services/toast.service.mjs +0 -83
  305. package/esm2022/public-api.mjs +0 -56
  306. package/esm2022/tango-app-ui-shared.mjs +0 -5
  307. package/fesm2022/tango-app-ui-shared-edge-wrapper.module-CFDk0tvS.mjs +0 -21
  308. package/fesm2022/tango-app-ui-shared-edge-wrapper.module-CFDk0tvS.mjs.map +0 -1
  309. package/fesm2022/tango-app-ui-shared-eyetest-wrapper.module-CfO814JB.mjs +0 -21
  310. package/fesm2022/tango-app-ui-shared-eyetest-wrapper.module-CfO814JB.mjs.map +0 -1
  311. package/fesm2022/tango-app-ui-shared-intro.module-DYh4ZRha.mjs +0 -188
  312. package/fesm2022/tango-app-ui-shared-intro.module-DYh4ZRha.mjs.map +0 -1
  313. package/fesm2022/tango-app-ui-shared-manage-wrapper.module-BHyh4Njw.mjs +0 -21
  314. package/fesm2022/tango-app-ui-shared-manage-wrapper.module-BHyh4Njw.mjs.map +0 -1
  315. package/fesm2022/tango-app-ui-shared-notification.module-C5ZmCf8U.mjs +0 -400
  316. package/fesm2022/tango-app-ui-shared-notification.module-C5ZmCf8U.mjs.map +0 -1
  317. package/fesm2022/tango-app-ui-shared-profile-wrapper.module-BNC1AGOk.mjs +0 -21
  318. package/fesm2022/tango-app-ui-shared-profile-wrapper.module-BNC1AGOk.mjs.map +0 -1
  319. package/fesm2022/tango-app-ui-shared-store-wrapper.module-DdaCYHdv.mjs +0 -21
  320. package/fesm2022/tango-app-ui-shared-store-wrapper.module-DdaCYHdv.mjs.map +0 -1
  321. package/fesm2022/tango-app-ui-shared-ticket-wrapper.module-r32uKkDO.mjs +0 -21
  322. package/fesm2022/tango-app-ui-shared-ticket-wrapper.module-r32uKkDO.mjs.map +0 -1
  323. package/fesm2022/tango-app-ui-shared.mjs +0 -11322
  324. package/fesm2022/tango-app-ui-shared.mjs.map +0 -1
  325. package/index.d.ts +0 -5
  326. package/lib/guards/auth.guard.d.ts +0 -10
  327. package/lib/guards/lead.guard.d.ts +0 -2
  328. package/lib/guards/stores.guard.d.ts +0 -2
  329. package/lib/guards/tickets.guard.d.ts +0 -2
  330. package/lib/i18n/translation.module.d.ts +0 -8
  331. package/lib/i18n/translation.service.d.ts +0 -19
  332. package/lib/i18n/vocabs/ch.d.ts +0 -104
  333. package/lib/i18n/vocabs/de.d.ts +0 -104
  334. package/lib/i18n/vocabs/en.d.ts +0 -104
  335. package/lib/i18n/vocabs/es.d.ts +0 -104
  336. package/lib/i18n/vocabs/fr.d.ts +0 -104
  337. package/lib/i18n/vocabs/jp.d.ts +0 -104
  338. package/lib/interceptors/http-auth-interceptor.d.ts +0 -19
  339. package/lib/interfaces/global-state.d.ts +0 -5
  340. package/lib/modules/common/common-shared.module.d.ts +0 -13
  341. package/lib/modules/common/custom-select/custom-select.component.d.ts +0 -33
  342. package/lib/modules/common/filters/filters.component.d.ts +0 -38
  343. package/lib/modules/common/pagination/pagination.component.d.ts +0 -18
  344. package/lib/modules/errors/error403/error403.component.d.ts +0 -14
  345. package/lib/modules/errors/error404/error404.component.d.ts +0 -15
  346. package/lib/modules/errors/error500/error500.component.d.ts +0 -15
  347. package/lib/modules/errors/errors-routing.module.d.ts +0 -7
  348. package/lib/modules/errors/errors.component.d.ts +0 -13
  349. package/lib/modules/errors/errors.module.d.ts +0 -13
  350. package/lib/modules/errors/invalid-ip/invalid-ip.component.d.ts +0 -17
  351. package/lib/modules/intro/contact-support/contact-support.component.d.ts +0 -9
  352. package/lib/modules/intro/intro-routing.module.d.ts +0 -7
  353. package/lib/modules/intro/intro.module.d.ts +0 -11
  354. package/lib/modules/intro/lead-intro/lead-intro.component.d.ts +0 -31
  355. package/lib/modules/layout/components/csm-assign-confirmation/csm-assign-confirmation.component.d.ts +0 -13
  356. package/lib/modules/layout/content/content.component.d.ts +0 -25
  357. package/lib/modules/layout/footer/footer.component.d.ts +0 -8
  358. package/lib/modules/layout/header/header-menu/header-menu.component.d.ts +0 -18
  359. package/lib/modules/layout/header/header.component.d.ts +0 -30
  360. package/lib/modules/layout/header/navbar/navbar.component.d.ts +0 -45
  361. package/lib/modules/layout/header/notifications-inner/notifications-inner.component.d.ts +0 -25
  362. package/lib/modules/layout/header/page-title/page-title.component.d.ts +0 -23
  363. package/lib/modules/layout/keenicon/keenicon.component.d.ts +0 -13
  364. package/lib/modules/layout/layout/layout.component.d.ts +0 -82
  365. package/lib/modules/layout/layout.module.d.ts +0 -49
  366. package/lib/modules/layout/scripts-init/scripts-init.component.d.ts +0 -19
  367. package/lib/modules/layout/scroll-top/scroll-top.component.d.ts +0 -19
  368. package/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.d.ts +0 -45
  369. package/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.d.ts +0 -19
  370. package/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.d.ts +0 -26
  371. package/lib/modules/layout/sidebar/sidebar.component.d.ts +0 -36
  372. package/lib/modules/layout/toolbar/accounting/accounting.component.d.ts +0 -8
  373. package/lib/modules/layout/toolbar/classic/classic.component.d.ts +0 -48
  374. package/lib/modules/layout/toolbar/client-settings/client-settings.component.d.ts +0 -16
  375. package/lib/modules/layout/toolbar/date-single-select/date-single-select.component.d.ts +0 -28
  376. package/lib/modules/layout/toolbar/datepicker/datepicker.component.d.ts +0 -28
  377. package/lib/modules/layout/toolbar/extended/extended.component.d.ts +0 -8
  378. package/lib/modules/layout/toolbar/metrics-header/metrics-header.component.d.ts +0 -103
  379. package/lib/modules/layout/toolbar/reports/reports.component.d.ts +0 -9
  380. package/lib/modules/layout/toolbar/saas/saas.component.d.ts +0 -9
  381. package/lib/modules/layout/toolbar/single-clientstore-date/single-clientstore-date.component.d.ts +0 -32
  382. package/lib/modules/layout/toolbar/single-store/single-store.component.d.ts +0 -33
  383. package/lib/modules/layout/toolbar/single-storedate/single-storedate.component.d.ts +0 -34
  384. package/lib/modules/layout/toolbar/storesingle/storesingle.component.d.ts +0 -24
  385. package/lib/modules/layout/toolbar/toolbar.component.d.ts +0 -56
  386. package/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.d.ts +0 -93
  387. package/lib/modules/layout/toolbar/traffic-nob/traffic-nob.component.d.ts +0 -80
  388. package/lib/modules/layout/toolbar/trax-header/trax-header.component.d.ts +0 -83
  389. package/lib/modules/layout/toolbar/trax-withoutdate/trax-withoutdate.component.d.ts +0 -74
  390. package/lib/modules/notification/conformation/conformation.component.d.ts +0 -10
  391. package/lib/modules/notification/notification/notification.component.d.ts +0 -63
  392. package/lib/modules/notification/notification-routing.module.d.ts +0 -7
  393. package/lib/modules/notification/notification.module.d.ts +0 -11
  394. package/lib/pipes/customDate.pipe.d.ts +0 -7
  395. package/lib/routes/route-wraper-modules/edge-wrapper.module.d.ts +0 -7
  396. package/lib/routes/route-wraper-modules/eyetest-wrapper.module.d.ts +0 -7
  397. package/lib/routes/route-wraper-modules/manage-wrapper.module.d.ts +0 -7
  398. package/lib/routes/route-wraper-modules/profile-wrapper.module.d.ts +0 -7
  399. package/lib/routes/route-wraper-modules/store-wrapper.module.d.ts +0 -7
  400. package/lib/routes/route-wraper-modules/ticket-wrapper.module.d.ts +0 -7
  401. package/lib/routes/routing.d.ts +0 -3
  402. package/lib/services/auth.service.d.ts +0 -49
  403. package/lib/services/notification.service.d.ts +0 -30
  404. package/lib/services/toast.service.d.ts +0 -10
@@ -0,0 +1,899 @@
1
+ import {
2
+ ChangeDetectorRef,
3
+ Component,
4
+ HostListener,
5
+ OnDestroy,
6
+ OnInit,
7
+ } from "@angular/core";
8
+ import dayjs from "dayjs";
9
+ import "dayjs/locale/en";
10
+ import { GlobalStateService } from "tango-app-ui-global";
11
+ import { NavigationEnd, Router } from "@angular/router";
12
+ import { AuthService } from "../../../../services/auth.service";
13
+ @Component({
14
+ selector: 'lib-traffic-nob',
15
+ templateUrl: './traffic-nob.component.html',
16
+ styleUrl: './traffic-nob.component.scss'
17
+ })
18
+ export class TrafficNobComponent implements OnInit {
19
+ dayjs = dayjs;
20
+ isCustomDate = (m: dayjs.Dayjs) => {
21
+ const isValidDate = m > this.dayjs();
22
+ return isValidDate ? "invalid-date" : false;
23
+ };
24
+
25
+ selectedDateRange: any = { startDate: dayjs().subtract(30, 'days'),
26
+ endDate: dayjs().subtract(1, "days"),};
27
+ selectedFilters: any = {
28
+ client: null,
29
+ clientName: null,
30
+ clients: [],
31
+ store: null,
32
+ stores: [],
33
+ date: null,
34
+ group: [],
35
+ location: [],
36
+ };
37
+ Opendropdown: boolean = false;
38
+ dropdownOpen: string | null = null; // 'location' or 'group'
39
+ searchLocationText: string = "";
40
+ searchGroupText: string = "";
41
+ locations: any[] = [];
42
+ filteredLocations: any[] = [];
43
+ groupsData: any[] = [];
44
+ filteredGroups: any[] = [];
45
+ filteredStores: any[] = [];
46
+ stores:any[] = []
47
+ searchStoreText:string = '';
48
+ clientList:any = []
49
+ selectedClient:any
50
+ locationLabel: any[]=[];
51
+ groupLabel: any[]=[];
52
+ users: any;
53
+ url: any;
54
+ constructor(
55
+ private auth: AuthService, private router: Router,
56
+ public gs: GlobalStateService,
57
+ private cd: ChangeDetectorRef,
58
+ ) {}
59
+
60
+ @HostListener('document:click', ['$event'])
61
+ onClick (event: MouseEvent) {
62
+ const target = event.target as HTMLElement;
63
+ if(!target.closest('.dropdown1')) {
64
+ this.Opendropdown = false;
65
+ }
66
+ }
67
+ closeDropdown1(){
68
+ this.Opendropdown = false;
69
+ }
70
+ ngOnInit(): void {
71
+ this.url = this.router.url.split("?")[0].split('/');
72
+ const user = JSON.parse(localStorage.getItem('user-info') as string);
73
+ this.users = user;
74
+ this.gs?.manageRefreshTrigger?.subscribe((e) => {
75
+ if (e) {
76
+ if (user.userType === 'tango') {
77
+ this.getClient();
78
+ } else{
79
+ const storedFilters = localStorage.getItem("header-filters");
80
+ if (storedFilters) {
81
+ const headerFilters = JSON.parse(storedFilters);
82
+ this.filteredStores = headerFilters?.stores.map((store:any) => ({
83
+ ...store,
84
+ checked: store.checked
85
+ }));
86
+ }
87
+ }
88
+ }
89
+ });
90
+
91
+ // Fetch client data if the user is of type 'tango'
92
+ if (user.userType === 'tango') {
93
+ this.getClient();
94
+ } else {
95
+ this.getLocations();
96
+ this.getGroups();
97
+ this.getStore();
98
+ // this.emitAndStoreFilters();
99
+ // console.log("1")
100
+ }
101
+
102
+ // Load filters from localStorage if they exist
103
+ const storedFilters = localStorage.getItem("header-filters");
104
+ if (storedFilters) {
105
+ const headerFilters = JSON.parse(storedFilters);
106
+
107
+ // Initialize selectedFilters with defaults or existing values
108
+ this.selectedFilters = {
109
+ client: headerFilters.client || this.users.client,
110
+ clientName: headerFilters.clientName || '',
111
+ clients: headerFilters.clients || [],
112
+ store: headerFilters.store || null,
113
+ date: headerFilters.date || {},
114
+ stores: headerFilters.stores || [],
115
+ group: headerFilters.group || [],
116
+ location: headerFilters.location || []
117
+ };
118
+
119
+ // Sync filtered data with stored selections
120
+ this.filteredLocations = this.syncWithLocalStorage(headerFilters.location);
121
+ this.filteredGroups = this.syncWithLocalStorage(headerFilters.group);
122
+ this.filteredStores = this.syncWithLocalStorage(headerFilters.stores);
123
+
124
+ // Format date range if it exists
125
+ if (headerFilters.date) {
126
+ this.selectedDateRange = {
127
+ startDate: this.dayjs(headerFilters.date.startDate, "YYYY-MM-DD").format("DD-MM-YYYY"),
128
+ endDate: this.dayjs(headerFilters.date.endDate, "YYYY-MM-DD").format("DD-MM-YYYY"),
129
+ };
130
+ } else {
131
+ this.selectedDateRange = {
132
+ startDate: this.dayjs(this.selectedDateRange.startDate, "YYYY-MM-DD").format("DD-MM-YYYY"),
133
+ endDate: this.dayjs(this.selectedDateRange.endDate, "YYYY-MM-DD").format("DD-MM-YYYY"),
134
+ };
135
+ }
136
+ // console.log("3")
137
+ // Emit data via service and update localStorage
138
+ this.emitAndStoreFilters();
139
+ } else {
140
+ // Initialize empty states if no header filters are present in localStorage
141
+ this.resetFilters();
142
+ // console.log("2")
143
+ }
144
+ }
145
+ private syncWithLocalStorage(items: any[]): any[] {
146
+ return items
147
+ ? items.map((item: any) => ({
148
+ ...item,
149
+ checked: item.checked === true
150
+ }))
151
+ : [];
152
+ }
153
+ private emitAndStoreFilters(): void {
154
+ this.gs.dataRangeValue.next(this.selectedFilters);
155
+ localStorage.setItem("header-filters", JSON.stringify(this.selectedFilters));
156
+ // console.log("1")
157
+ }
158
+
159
+ /**
160
+ * Reset selectedFilters and all related arrays to empty states
161
+ */
162
+ private resetFilters(): void {
163
+ this.selectedFilters = {
164
+ client: null,
165
+ clientName: '',
166
+ clients: [],
167
+ store: null,
168
+ date: {},
169
+ stores: [],
170
+ group: [],
171
+ location: []
172
+ };
173
+ this.filteredLocations = [];
174
+ this.filteredGroups = [];
175
+ this.filteredStores = [];
176
+ }
177
+ getClient(){
178
+ this.auth.getClients().subscribe({
179
+ next: (e) => {
180
+ if (e) {
181
+ this.clientList = e.data.result;
182
+ const headerFilters: any = JSON.parse(
183
+ localStorage.getItem("header-filters") || "{}"
184
+ );
185
+ if (headerFilters.client) {
186
+ this.clientList.find((obj: any) => {
187
+ if (obj.clientId === headerFilters.client) {
188
+ this.selectedClient = obj;
189
+ }
190
+ });
191
+
192
+ this.selectedFilters.client = headerFilters.client;
193
+ this.selectedFilters.clientName = headerFilters.clientName;
194
+ this.selectedFilters.clients = headerFilters.clients;
195
+ this.selectedFilters.store = headerFilters.store;
196
+ this.selectedFilters.date = headerFilters.date;
197
+ this.selectedFilters.stores = headerFilters.stores;
198
+ this.selectedFilters.group = headerFilters.group;
199
+ this.selectedFilters.location = headerFilters.location;
200
+ this.gs.dataRangeValue.next(this.selectedFilters);
201
+ // console.log("2")
202
+ // Ensure locations and groups are loaded before fetching stores
203
+ this.getLocations();
204
+ this.getGroups();
205
+ // Fetch stores only after locations and groups are set
206
+ this.getStore();
207
+ } else {
208
+ this.selectedClient = this.clientList[0];
209
+ this.selectedFilters.client = this.selectedClient.clientId;
210
+ this.selectedFilters.clientName = this.selectedClient.clientName
211
+ this.selectedFilters.clients = headerFilters.clients;
212
+ this.selectedFilters.store = headerFilters.store;
213
+ this.selectedFilters.date = headerFilters.date;
214
+ this.selectedFilters.stores = headerFilters.stores;
215
+ this.selectedFilters.group = headerFilters.group;
216
+ this.selectedFilters.location = headerFilters.location;
217
+ localStorage.setItem(
218
+ "header-filters",
219
+ JSON.stringify(this.selectedFilters)
220
+ );
221
+ this.gs.dataRangeValue.next(this.selectedFilters);
222
+ // console.log("3")
223
+ this.cd.detectChanges();
224
+ // Ensure locations and groups are loaded before fetching stores
225
+ this.getLocations();
226
+ this.getGroups();
227
+ // Fetch stores only after locations and groups are set
228
+ this.getStore();
229
+ }
230
+
231
+
232
+ } else {
233
+ this.selectedClient = this.clientList[0];
234
+ this.selectedFilters.client = this.selectedClient.clientId;
235
+ this.selectedFilters.clientName = this.selectedClient.clientName
236
+ // Ensure locations and groups are loaded before fetching stores
237
+ this.getLocations();
238
+ this.getGroups();
239
+ // Fetch stores only after locations and groups are set
240
+ this.getStore();
241
+ localStorage.setItem(
242
+ "header-filters",
243
+ JSON.stringify(this.selectedFilters)
244
+ );
245
+ this.gs.dataRangeValue.next(this.selectedFilters);
246
+ // console.log("4")
247
+ this.cd.detectChanges();
248
+ }
249
+ },
250
+ });
251
+ }
252
+ onClientSelect(event: any): void {
253
+ // Update the selected client
254
+ this.selectedClient = event;
255
+ // Clear previous filtered data and selections
256
+ this.filteredGroups = [];
257
+ this.filteredStores = [];
258
+ this.filteredLocations = [];
259
+ this.selectedFilters.stores = [];
260
+ this.selectedFilters.group = [];
261
+ this.selectedFilters.location = [];
262
+
263
+ // Fetch header filters from localStorage
264
+ const headerFilters: any = JSON.parse(localStorage.getItem("header-filters") || "{}");
265
+
266
+ // Update the selected filters with the new client
267
+ this.selectedFilters.client = this.selectedClient.clientId;
268
+ this.selectedFilters.clientName = this.selectedClient.clientName;
269
+
270
+ // Remove old store, group, and location data from the header filters
271
+ delete headerFilters.stores;
272
+ delete headerFilters.groups;
273
+ delete headerFilters.location;
274
+
275
+ // Fetch new data based on the new client
276
+ this.getLocations();
277
+ this.getStore();
278
+ this.getGroups();
279
+
280
+ // Update localStorage with the new client selection and empty filter data
281
+ localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
282
+ window.location.reload()
283
+ // Emit data to the global service
284
+ // this.gs.dataRangeValue.next(this.selectedFilters);
285
+ // Trigger change detection to reflect UI changes
286
+ this.cd.detectChanges();
287
+ }
288
+
289
+
290
+
291
+ ranges:any = {
292
+ Today: [dayjs(), dayjs()],
293
+ Yesterday: [dayjs().subtract(1, 'days'), dayjs().subtract(1, 'days')],
294
+ 'This Week': [dayjs().subtract(7, 'days'), dayjs().subtract(1, 'days')],
295
+ 'Last Week': [
296
+ dayjs().subtract(14, 'days').startOf('day'),
297
+ dayjs().subtract(8, 'days').endOf('day'),
298
+ ],
299
+ 'This Month': [dayjs().subtract(30, 'days'), dayjs().subtract(1, 'days')],
300
+ 'Last Month': [
301
+ dayjs().subtract(1, 'month').startOf('month'),
302
+ dayjs().subtract(1, 'month').endOf('month'),
303
+ ],
304
+ };
305
+
306
+ onStartDateChange(event: any) {
307
+ if (this.dayjs(event.startDate).isValid()) {
308
+
309
+ this.isCustomDate = (m: dayjs.Dayjs) => {
310
+ const isValidDate =
311
+ m > this.dayjs() || m > this.dayjs(event.startDate.add(90, "days"));
312
+ return isValidDate ? "invalid-date" : false;
313
+ };
314
+ }
315
+ }
316
+
317
+ datechange(event: any) {
318
+ if (event && event.startDate && event.endDate) {
319
+ if (
320
+ this.dayjs(event.startDate).isValid() &&
321
+ this.dayjs(event.endDate).isValid()
322
+ ) {
323
+ this.selectedDateRange.startDate = event.startDate;
324
+ this.selectedDateRange.endDate = event.endDate;
325
+ var datetime = {
326
+ startDate: this.dayjs(event.startDate, "DD-MM-YYYY").format(
327
+ "YYYY-MM-DD"
328
+ ),
329
+ endDate: this.dayjs(event.endDate, "DD-MM-YYYY").format("YYYY-MM-DD"),
330
+ };
331
+ this.selectedFilters.date = datetime;
332
+ localStorage.setItem(
333
+ "header-filters",
334
+ JSON.stringify(this.selectedFilters)
335
+ );
336
+ window.location.reload()
337
+ // this.gs.dataRangeValue.next(this.selectedFilters);
338
+ }
339
+ }
340
+ }
341
+ opendropdown(e:MouseEvent) {
342
+ e.stopPropagation();
343
+ this.Opendropdown = !this.Opendropdown;
344
+ }
345
+ getLocations(): void {
346
+ // const headerFilters: any = JSON.parse(localStorage.getItem("header-filters") || "{}");
347
+ let obj ={
348
+ clientId: this.selectedFilters.client ? this.selectedFilters.client :this.users.clientId,
349
+ city: [],
350
+ group: [],
351
+ }
352
+ this.auth.getLocation(obj).subscribe({
353
+ next: (res: any) => {
354
+ let cityList = this.selectedFilters?.location?.filter((location:any) => location.checked).map((loc:any) => loc.city);
355
+ // Map the fetched locations with default unchecked state
356
+ this.locations = res?.data?.locationData.map((city: any) => ({
357
+ city: city.city,
358
+ checked: cityList?.includes(city.city) ? true : false,
359
+ }));
360
+
361
+ // Sync the fetched locations with any stored checked values in localStorage
362
+ if (this.selectedFilters.location && Array.isArray(this.selectedFilters.location)) {
363
+ this.filteredLocations = this.locations.map(location => {
364
+ const matchedLocation = this.selectedFilters.location.find((loc: any) => loc.city === location.city);
365
+ return matchedLocation ? { ...location, checked: matchedLocation.checked } : location;
366
+ });
367
+ } else {
368
+ this.filteredLocations = this.locations;
369
+ }
370
+
371
+ if(this.searchLocationText) {
372
+ this.filteredLocations = this.locations.filter((location:any) => location.city.toLowerCase().includes(this.searchLocationText.toLowerCase()))
373
+ }
374
+ const selectedLocations = this.locations.filter((location) => location.checked).map((location) => location.city);
375
+ if (selectedLocations.length > 0) {
376
+ setTimeout(()=>{
377
+ this.getStore(); // Fetch stores based on selected groups
378
+ },1000)
379
+ }
380
+ },
381
+ error: (err) => {
382
+ console.error("Failed to fetch locations", err);
383
+ },
384
+ });
385
+ }
386
+
387
+ isAllLocationsSelected(): boolean {
388
+ return this.filteredLocations.every(location => location.checked);
389
+
390
+ }
391
+
392
+ selectedLocationsLabel(): string {
393
+ const selectedLocations = this.locationLabel = this.searchLocationText.length ? this.locations
394
+ .filter(location => location.checked).map(location => location.city) : this.filteredLocations
395
+ .filter(location => location.checked).map(location => location.city);
396
+ return selectedLocations.length === 0
397
+ ? ''
398
+ : selectedLocations.length === 1
399
+ ? selectedLocations[0]
400
+ : `${selectedLocations.length} locations`;
401
+ }
402
+
403
+ removeLocation(): void {
404
+ this.Reset();
405
+ }
406
+
407
+ getGroups(): void {
408
+ const city = this.locations
409
+ .filter(location => location.checked)
410
+ .map(location => location.city);
411
+ const obj = { city,clientId:this.selectedFilters.client ? this.selectedFilters.client :this.users.clientId,group:[] };
412
+ this.auth.getGroups(obj).subscribe({
413
+ next: (res: any) => {
414
+ let checkedGroup = this.selectedFilters?.group?.filter((group:any) => group.checked).map((group:any) => group.groupName);
415
+ const combinedGroups = res?.data?.groupData?.map((groupName: any) => ({
416
+ groupName: groupName.groupName,
417
+ checked: checkedGroup?.includes(groupName.groupName) ? true : false,
418
+ }));
419
+ this.groupsData = combinedGroups;
420
+ if(this.searchGroupText.length) {
421
+ this.filteredGroups = combinedGroups.filter((item:any) => item.groupName.toLowerCase().includes(this.searchGroupText));
422
+ }
423
+ else {
424
+ this.filteredGroups = combinedGroups;
425
+ }
426
+
427
+ // Auto-fetch stores when groups are selected
428
+ const selectedGroups = this.groupsData.filter((group) => group.checked).map((group) => group.groupName);
429
+ if (selectedGroups.length > 0) {
430
+ setTimeout(()=>{
431
+ this.getStore(); // Fetch stores based on selected groups
432
+ },1000)
433
+ }
434
+ },
435
+ error: (err) => {
436
+ console.error("Failed to fetch groups", err);
437
+ },
438
+ });
439
+ }
440
+
441
+ toggleDropdown(type: 'location' | 'group' | 'store'): void {
442
+ if (this.dropdownOpen === type) {
443
+ // If the dropdown is open, close it and avoid resetting the selected values unnecessarily
444
+ this.dropdownOpen = null;
445
+ } else {
446
+ // Open the specific dropdown and handle data fetching only if necessary
447
+ this.dropdownOpen = type;
448
+
449
+ if (type === 'group') {
450
+ // Fetch groups only if there are selected cities and no active search text
451
+ const selectedCities = this.locations
452
+ .filter((location) => location.checked)
453
+ .map((location) => location.city);
454
+
455
+ // Fetch groups only if locations are selected, no search text exists, and dropdown is opened
456
+ if (this.filteredLocations.length > 0 || (selectedCities.length > 0 && !this.searchGroupText.trim())) {
457
+ this.getGroups();
458
+ } else {
459
+ this.filteredGroups = []; // Clear groups if no locations are selected
460
+ }
461
+ }
462
+
463
+ if (type === 'store') {
464
+ // Fetch stores only if not already fetched and no search text is active
465
+ if ((!this.filteredStores || this.filteredStores.length === 0) && !this.searchStoreText.trim()) {
466
+ this.getStore();
467
+ }
468
+ }
469
+ }
470
+ }
471
+
472
+
473
+ handleGroupDropdownClick(): void {
474
+ if (this.dropdownOpen === 'group') {
475
+ this.resetSelectedGroups();
476
+ }
477
+ this.toggleDropdown('group');
478
+ }
479
+
480
+ resetSelectedGroups(): void {
481
+ this.filteredGroups.forEach((group) => (group.checked = false));
482
+ this.searchGroupText = "";
483
+ }
484
+ selectedGroupsLabel(): string {
485
+ const selectedGroups = this.groupLabel = this.searchGroupText.length ? this.groupsData.filter((group) => group.checked) : this.filteredGroups.filter((group) => group.checked);
486
+ return selectedGroups.length === 0
487
+ ? ""
488
+ : selectedGroups.length === 1
489
+ ? selectedGroups[0].groupName
490
+ : `${selectedGroups.length} Clusters`;
491
+ }
492
+ removeGroup(): void {
493
+ this.Reset();
494
+
495
+ }
496
+
497
+
498
+ isAllGroupsSelected(): boolean {
499
+
500
+ return this.filteredGroups.length ? this.filteredGroups.every((group) => group.checked) : false;
501
+ }
502
+
503
+ getStore(): void {
504
+ const city = this.locations
505
+ .filter(location => location.checked)
506
+ .map(location => location.city);
507
+
508
+ const group = this.groupsData
509
+ .filter(group => group.checked)
510
+ .map(group => group.groupName);
511
+
512
+ const data = { city, clusters:group, clientId: this.users.clientId ? this.users.clientId : this.selectedFilters.client };
513
+
514
+ this.auth.getHeaderStores(data).subscribe({
515
+ next: (res: any) => {
516
+ if(res &&res.code ===200){
517
+ this.stores = res.data.storesData;
518
+ // Retrieve checked store IDs from selectedFilters
519
+ const checkedStoreIds = this.selectedFilters?.stores
520
+ ? this.selectedFilters.stores.filter((store: any) => store.checked).map((store: any) => store.storeId)
521
+ : [];
522
+
523
+ this.stores.forEach(store => {
524
+ if (checkedStoreIds.includes(store.storeId)) {
525
+ store.checked = true; // Sync the checked state with full store list
526
+ }
527
+ });
528
+
529
+
530
+ // Map the stores and retain the 'checked' status
531
+ if(this.searchStoreText.length) {
532
+ this.filteredStores = this.stores?.filter(store => store.storeName.toLowerCase().includes(this.searchStoreText));
533
+ }
534
+ else {
535
+ this.filteredStores = this.stores;
536
+ }
537
+ // Ensure selectedFilters is in sync with filteredStores
538
+ if (!this.selectedFilters.stores || !this.selectedFilters.stores.length) {
539
+ this.stores.forEach(store => {
540
+ store.checked = true; // Sync the checked state with full store list
541
+ });
542
+
543
+ // No previously selected stores, mark all as checked
544
+ this.filteredStores = this.selectedFilters.stores = this.filteredStores.map(store => ({
545
+ ...store,
546
+ checked: true
547
+ }));
548
+ } else {
549
+ // Update selectedFilters to reflect current state of stores
550
+ this.selectedFilters.stores = this.filteredStores.map(store => ({
551
+ ...store,
552
+ checked: store.checked
553
+ }));
554
+ }
555
+ // Update localStorage with the latest selectedFilters
556
+ localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
557
+
558
+ // Emit data via service
559
+ // this.gs.dataRangeValue.next(this.selectedFilters);
560
+ // Trigger change detection to reflect changes in the UI
561
+ this.cd.detectChanges();
562
+ } else {
563
+ this.stores =[];
564
+ this.selectedFilters.stores=[];
565
+ this.filteredStores =[];
566
+ this.selectedFilters.stores = this.filteredStores.map(store => ({
567
+ ...store,
568
+ checked: false
569
+ }));
570
+ localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
571
+ }
572
+ },
573
+ error: (err) => {
574
+ this.stores =[];
575
+ this.selectedFilters.stores = this.filteredStores.map(store => ({
576
+ ...store,
577
+ checked: false
578
+ }));
579
+ this.filteredStores =[];
580
+ this.selectedFilters.stores=[];
581
+ localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
582
+ console.error("Failed to fetch stores", err);
583
+ },
584
+ });
585
+ }
586
+
587
+
588
+ resetSelectedStores(): void {
589
+ this.filteredStores.forEach((store) => (store.checked = false));
590
+ this.searchStoreText = "";
591
+ }
592
+
593
+ selectedStoresLabel(): string {
594
+ const selectedStores = this.searchStoreText.length ? this.stores.filter((store) => store.checked) : this.filteredStores.filter((store) => store.checked);
595
+ return selectedStores.length === 0
596
+ ? "0 Stores"
597
+ : selectedStores.length === 1
598
+ ? selectedStores[0].storeName
599
+ : `${selectedStores.length} Stores`;
600
+ }
601
+
602
+ isAllStoresSelected(): boolean {
603
+ return this.filteredStores.length > 0 && this.filteredStores.every(store => store.checked);
604
+ }
605
+ // Method to handle dropdown item selection
606
+ updateSelectedStores(): void {
607
+ this.filteredStores.forEach(store => {
608
+ const filteredStore = this.stores.findIndex(fStore => fStore.storeId === store.storeId);
609
+ if (filteredStore != -1) {
610
+ this.stores[filteredStore].checked = store.checked; // Sync the checked state with full store list
611
+ }
612
+ });
613
+ // Update selectedFilters based on the current store selection
614
+ this.selectedFilters.stores = this.stores.filter(store => store.checked);
615
+
616
+ // Update localStorage with the latest selection
617
+ localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
618
+
619
+ // Emit updated filters via service
620
+ // this.gs.dataRangeValue.next(this.selectedFilters);
621
+
622
+ // Trigger change detection if necessary
623
+ this.cd.detectChanges();
624
+ }
625
+ toggleSelectAllLocations(event: any): void {
626
+ const isChecked = event.target.checked;
627
+ this.filteredLocations.forEach((location) => (location.checked = isChecked));
628
+ this.updateSelectedLocations();
629
+ }
630
+
631
+ toggleSelectAllStores(event: Event): void {
632
+ const checked = (event.target as HTMLInputElement).checked;
633
+
634
+ // Apply the selection to both filtered and full list of stores
635
+ this.filteredStores.forEach(store => store.checked = checked);
636
+ this.stores.forEach(store => {
637
+ const filteredStore = this.filteredStores.find(fStore => fStore.storeId === store.storeId);
638
+ if (filteredStore) {
639
+ store.checked = checked; // Sync the checked state with full store list
640
+ }
641
+ });
642
+
643
+ // Update the selected stores and persist the selection
644
+ this.updateSelectedStores();
645
+ }
646
+
647
+ updateSelectedLocations(): void {
648
+ // When locations are selected, fetch the related groups
649
+ const selectedCities = this.filteredLocations
650
+ .filter((location) => location.checked)
651
+ .map((location) => location.city);
652
+ this.filteredLocations.forEach((location:any) => {
653
+ let findLocationIndex = this.locations.findIndex((loc:any) => loc.city == location.city);
654
+ if(findLocationIndex != -1) {
655
+ this.locations[findLocationIndex].checked = location.checked;
656
+ }
657
+ })
658
+ if (selectedCities.length > 0 || !selectedCities.length) {
659
+ this.selectedFilters.stores =[];
660
+ this.groupsData =[]
661
+ this.getGroups(); // Fetch groups based on selected cities
662
+ // If there are selected groups, fetch the stores based on selected groups
663
+ this.getStore();
664
+ this.selectedFilters.location = this.locations;
665
+
666
+ } else {
667
+ this.filteredGroups = []; // Clear groups if no locations are selected
668
+ this.selectedFilters.location = [];
669
+ }
670
+
671
+ this.selectedFilters.group = [];
672
+ this.filteredStores = []; // Reset stores as well
673
+ this.searchGroupText = '';
674
+ this.searchStoreText = '';
675
+ // this.Opendropdown = false;
676
+ }
677
+
678
+ toggleSelectAllGroups(event: any): void {
679
+ const isChecked = event.target.checked;
680
+ this.filteredGroups.forEach((group) => (group.checked = isChecked));
681
+ this.updateSelectedGroups();
682
+ // if (!isChecked) {
683
+ // this.selectedFilters.stores =[];
684
+ // // If there are selected groups, fetch the stores based on selected groups
685
+ // this.getStore();
686
+ // }
687
+ }
688
+
689
+ updateSelectedGroups(): void {
690
+ // Fetch the relevant stores after groups are selected
691
+ const selectedGroups = this.filteredGroups
692
+ .filter((group) => group.checked)
693
+ .map((group) => group.groupName);
694
+
695
+ this.filteredGroups.forEach((group:any) => {
696
+ let findGroupIndex = this.groupsData.findIndex((item:any) => item.groupName == group.groupName);
697
+ if(findGroupIndex != -1) {
698
+ this.groupsData[findGroupIndex].checked = group.checked;
699
+ }
700
+ })
701
+ if (selectedGroups.length > 0 || !selectedGroups.length) {
702
+ this.selectedFilters.stores =[];
703
+ // If there are selected groups, fetch the stores based on selected groups
704
+ this.getStore();
705
+ this.selectedFilters.group = this.groupsData;
706
+ } else {
707
+ // If no groups are selected, clear the stores list
708
+ this.filteredStores = [];
709
+
710
+ // Also, update localStorage to reflect the cleared store selection
711
+ this.selectedFilters.stores = [];
712
+ localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
713
+
714
+ // Emit data via service
715
+ // this.gs.dataRangeValue.next(this.selectedFilters);
716
+ }
717
+
718
+ // Clear the search store text when groups are updated
719
+ this.searchStoreText = '';
720
+ }
721
+
722
+
723
+ Reset(): void {
724
+ setTimeout(()=>{
725
+ // Clear selected groups, stores, and locations
726
+ this.filteredGroups = [];
727
+ this.filteredStores = [];
728
+ this.filteredLocations = []; // Reset locations as well
729
+ this.locations =[];this.groupsData =[]; this.stores =[];
730
+ // Clear search input fields
731
+ this.searchLocationText = "";
732
+ this.searchGroupText = "";
733
+ this.searchStoreText = "";
734
+ this.selectedFilters.stores =[];
735
+ this.selectedFilters.group =[];
736
+ this.selectedFilters.location =[];
737
+
738
+
739
+ // Fetch locations, groups, and stores again
740
+ this.getLocations();
741
+ this.getStore();
742
+ this.getGroups();
743
+ // Reset the filters in selectedFilters
744
+
745
+
746
+ // // Once stores are fetched, mark all as checked
747
+ // setTimeout(() => {
748
+ // this.filteredStores = this.stores.map(store => ({
749
+ // ...store,
750
+ // checked: true // Mark all stores as checked
751
+ // }));
752
+
753
+ // // Sync selectedFilters with the updated store state
754
+ // this.selectedFilters.stores = this.filteredStores.map(store => ({
755
+ // ...store,
756
+ // checked: true
757
+ // }));
758
+
759
+ // Update localStorage with the latest selectedFilters
760
+ localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
761
+ window.location.reload()
762
+ // Emit the reset filters to update other components if needed
763
+ // this.gs.dataRangeValue.next(this.selectedFilters);
764
+ // Trigger change detection
765
+ this.cd.detectChanges();
766
+ // Adding a slight delay to ensure stores are fetched first
767
+
768
+
769
+ // Close dropdown after reset if necessary
770
+ this.Opendropdown = false;
771
+ },100)
772
+ }
773
+
774
+
775
+
776
+ Apply(): void {
777
+ // Close the dropdown
778
+ this.Opendropdown = false;
779
+
780
+ // Fetch existing filters from localStorage
781
+ const headerFilters: any = JSON.parse(localStorage.getItem("header-filters") || "{}");
782
+ this.selectedFilters.store = null
783
+ // Ensure current selections are reflected
784
+ this.selectedFilters.location = this.locations;
785
+ this.selectedFilters.group = this.groupsData;
786
+ this.selectedFilters.stores = headerFilters.stores ? headerFilters.stores : this.stores;
787
+
788
+
789
+ // Store updated filters back in localStorage
790
+ localStorage.setItem("header-filters", JSON.stringify(this.selectedFilters));
791
+ window.location.reload()
792
+ // Emit the updated filters via the service
793
+ // this.gs.dataRangeValue.next(this.selectedFilters);
794
+ // Trigger refresh if necessary
795
+ // this.gs.manageRefreshTrigger.next(true);
796
+ this.cd.detectChanges();
797
+ }
798
+
799
+ filterLocations(): void {
800
+ const searchText = this.searchLocationText.toLowerCase();
801
+
802
+ if (searchText) {
803
+ // Preserve the checked state during filtering
804
+ this.filteredLocations = this.locations
805
+ .map(location => ({
806
+ ...location,
807
+ checked: this.filteredLocations.find(l => l.city === location.city)?.checked || false
808
+ }))
809
+ .filter(location =>
810
+ location?.city?.toLowerCase().includes(searchText)
811
+ );
812
+ } else {
813
+ // Restore the original checked state when search text is cleared
814
+ this.filteredLocations = this.locations.map(location => ({
815
+ ...location,
816
+ checked: this.selectedFilters.location.find((l:any) => l.city === location.city)?.checked || false
817
+ }));
818
+ }
819
+ }
820
+
821
+
822
+ filterGroups(): void {
823
+ const searchText = this.searchGroupText.toLowerCase();
824
+
825
+ if (searchText) {
826
+ // Preserve the checked state during filtering
827
+ this.filteredGroups = this.groupsData
828
+ .map(group => ({
829
+ ...group,
830
+ checked: this.filteredGroups.find(g => g.groupName === group.groupName)?.checked || false
831
+ }))
832
+ .filter(group =>
833
+ group?.groupName?.toLowerCase().includes(searchText)
834
+ );
835
+ } else {
836
+ // Restore the original checked state when search text is cleared
837
+ this.filteredGroups = this.groupsData.map(group => ({
838
+ ...group,
839
+ checked: this.selectedFilters.group.find((g:any) => g.groupName === group.groupName)?.checked || false
840
+ }));
841
+ }
842
+ }
843
+
844
+
845
+ filterStores(): void {
846
+ const searchText = this.searchStoreText.toLowerCase();
847
+ // Preserve checked states during filtering
848
+ if (searchText) {
849
+ // Filter based on search text while preserving checked state
850
+ this.filteredStores = this.stores
851
+ .map(store => ({
852
+ ...store,
853
+ // Check if the store is already checked in filteredStores, fallback to original stores' checked state
854
+ checked: this.selectedFilters.stores.find((s: any) => s.storeId === store.storeId)?.checked || store.checked || false
855
+ }))
856
+ .filter(store => store.storeName.toLowerCase().includes(searchText));
857
+ } else {
858
+ // When the search text is cleared, restore the original list with preserved checked states
859
+ this.filteredStores = this.stores.map(store => ({
860
+ ...store,
861
+ // Preserve the checked state based on the selected filters
862
+ checked: this.selectedFilters.stores.find((s: any) => s.storeId === store.storeId)?.checked || store.checked || false
863
+ }));
864
+ }
865
+ }
866
+
867
+
868
+
869
+ closeDropdown(): void {
870
+ this.dropdownOpen = null;
871
+ }
872
+
873
+ @HostListener("document:click", ["$event"])
874
+ clickOutside(event: MouseEvent): void {
875
+ const clickedInside = (event.target as HTMLElement).closest(
876
+ ".dropdown-container"
877
+ );
878
+ const clickedoutSide = (event.target as HTMLElement).closest(
879
+ ".dropdown1"
880
+ );
881
+ if (!clickedInside) {
882
+ this.closeDropdown();
883
+ }
884
+ if(!clickedoutSide) {
885
+ this.closeDropdown1();
886
+ }
887
+
888
+ }
889
+ }
890
+ interface City {
891
+ city: string;
892
+ }
893
+
894
+ interface Location {
895
+ city: City;
896
+ checked: boolean;
897
+ }
898
+
899
+