tango-app-ui-manage-tickets 3.7.0-beta.58 → 3.7.0-beta.60

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 (177) 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/components/add-csm-modal/add-csm-modal.component.html +32 -0
  5. package/src/lib/components/add-csm-modal/add-csm-modal.component.scss +14 -0
  6. package/src/lib/components/add-csm-modal/add-csm-modal.component.spec.ts +23 -0
  7. package/src/lib/components/add-csm-modal/add-csm-modal.component.ts +94 -0
  8. package/src/lib/components/audit-log/audit-log.component.html +1 -0
  9. package/src/lib/components/audit-log/audit-log.component.scss +0 -0
  10. package/src/lib/components/audit-log/audit-log.component.spec.ts +23 -0
  11. package/src/lib/components/audit-log/audit-log.component.ts +10 -0
  12. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.html +234 -0
  13. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.scss +186 -0
  14. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.spec.ts +23 -0
  15. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.ts +520 -0
  16. package/src/lib/components/audit-metrics/audit-metrics.component.html +345 -0
  17. package/src/lib/components/audit-metrics/audit-metrics.component.scss +34 -0
  18. package/src/lib/components/audit-metrics/audit-metrics.component.spec.ts +23 -0
  19. package/src/lib/components/audit-metrics/audit-metrics.component.ts +292 -0
  20. package/src/lib/components/audit-report-popup/audit-report-popup.component.html +111 -0
  21. package/src/lib/components/audit-report-popup/audit-report-popup.component.scss +101 -0
  22. package/src/lib/components/audit-report-popup/audit-report-popup.component.spec.ts +23 -0
  23. package/src/lib/components/audit-report-popup/audit-report-popup.component.ts +397 -0
  24. package/src/lib/components/audit-retag/audit-retag.component.html +129 -0
  25. package/src/lib/components/audit-retag/audit-retag.component.scss +146 -0
  26. package/src/lib/components/audit-retag/audit-retag.component.spec.ts +23 -0
  27. package/src/lib/components/audit-retag/audit-retag.component.ts +489 -0
  28. package/src/lib/components/comment-model/comment-model.component.html +24 -0
  29. package/src/lib/components/comment-model/comment-model.component.scss +20 -0
  30. package/src/lib/components/comment-model/comment-model.component.spec.ts +23 -0
  31. package/src/lib/components/comment-model/comment-model.component.ts +53 -0
  32. package/src/lib/components/count/count.component.html +54 -0
  33. package/src/lib/components/count/count.component.scss +14 -0
  34. package/src/lib/components/count/count.component.spec.ts +23 -0
  35. package/src/lib/components/count/count.component.ts +82 -0
  36. package/src/lib/components/custom-select/custom-select.component.html +134 -0
  37. package/src/lib/components/custom-select/custom-select.component.scss +204 -0
  38. package/src/lib/components/custom-select/custom-select.component.spec.ts +23 -0
  39. package/src/lib/components/custom-select/custom-select.component.ts +189 -0
  40. package/src/lib/components/filter-options/filter-options.component.html +51 -0
  41. package/src/lib/components/filter-options/filter-options.component.scss +102 -0
  42. package/src/lib/components/filter-options/filter-options.component.spec.ts +23 -0
  43. package/src/lib/components/filter-options/filter-options.component.ts +38 -0
  44. package/src/lib/components/footfall-dic/footfall-dic.component.html +1275 -0
  45. package/src/lib/components/footfall-dic/footfall-dic.component.scss +273 -0
  46. package/src/lib/components/footfall-dic/footfall-dic.component.spec.ts +23 -0
  47. package/src/lib/components/footfall-dic/footfall-dic.component.ts +1206 -0
  48. package/src/lib/components/footfall-dicview/footfall-dicview.component.html +1136 -0
  49. package/src/lib/components/footfall-dicview/footfall-dicview.component.scss +416 -0
  50. package/src/lib/components/footfall-dicview/footfall-dicview.component.spec.ts +23 -0
  51. package/src/lib/components/footfall-dicview/footfall-dicview.component.ts +1168 -0
  52. package/src/lib/components/footfall-popup/footfall-popup.component.html +61 -0
  53. package/src/lib/components/footfall-popup/footfall-popup.component.scss +20 -0
  54. package/src/lib/components/footfall-popup/footfall-popup.component.spec.ts +23 -0
  55. package/src/lib/components/footfall-popup/footfall-popup.component.ts +12 -0
  56. package/src/lib/components/group-select/group-select.component.html +44 -0
  57. package/src/lib/components/group-select/group-select.component.scss +144 -0
  58. package/src/lib/components/group-select/group-select.component.spec.ts +23 -0
  59. package/src/lib/components/group-select/group-select.component.ts +145 -0
  60. package/src/lib/components/re-trigger/re-trigger.component.html +53 -0
  61. package/src/lib/components/re-trigger/re-trigger.component.scss +16 -0
  62. package/src/lib/components/re-trigger/re-trigger.component.spec.ts +23 -0
  63. package/src/lib/components/re-trigger/re-trigger.component.ts +96 -0
  64. package/src/lib/components/reactive-select/reactive-select.component.html +18 -0
  65. package/src/lib/components/reactive-select/reactive-select.component.scss +52 -0
  66. package/src/lib/components/reactive-select/reactive-select.component.spec.ts +23 -0
  67. package/src/lib/components/reactive-select/reactive-select.component.ts +104 -0
  68. package/src/lib/components/remove-audit/remove-audit.component.html +38 -0
  69. package/src/lib/components/remove-audit/remove-audit.component.scss +27 -0
  70. package/src/lib/components/remove-audit/remove-audit.component.spec.ts +23 -0
  71. package/src/lib/components/remove-audit/remove-audit.component.ts +81 -0
  72. package/src/lib/components/start-audit/start-audit.component.html +174 -0
  73. package/src/lib/components/start-audit/start-audit.component.scss +185 -0
  74. package/src/lib/components/start-audit/start-audit.component.spec.ts +23 -0
  75. package/src/lib/components/start-audit/start-audit.component.ts +761 -0
  76. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.html +43 -0
  77. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.scss +35 -0
  78. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.spec.ts +23 -0
  79. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.ts +118 -0
  80. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.html +386 -0
  81. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.scss +87 -0
  82. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.spec.ts +23 -0
  83. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.ts +494 -0
  84. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.html +4743 -0
  85. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.scss +1208 -0
  86. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.spec.ts +23 -0
  87. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.ts +3351 -0
  88. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.html +100 -0
  89. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.scss +34 -0
  90. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.spec.ts +23 -0
  91. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.ts +48 -0
  92. package/src/lib/components/tickets/tickets.component.html +451 -0
  93. package/src/lib/components/tickets/tickets.component.scss +131 -0
  94. package/src/lib/components/tickets/tickets.component.spec.ts +23 -0
  95. package/src/lib/components/tickets/tickets.component.ts +809 -0
  96. package/src/lib/components/viewcategory/viewcategory.component.html +38 -0
  97. package/src/lib/components/viewcategory/viewcategory.component.scss +29 -0
  98. package/src/lib/components/viewcategory/viewcategory.component.spec.ts +23 -0
  99. package/src/lib/components/viewcategory/viewcategory.component.ts +79 -0
  100. package/src/lib/services/audit.service.spec.ts +16 -0
  101. package/src/lib/services/audit.service.ts +98 -0
  102. package/src/lib/services/excel.service.ts +48 -0
  103. package/src/lib/services/ticket.service.spec.ts +16 -0
  104. package/src/lib/services/ticket.service.ts +501 -0
  105. package/src/lib/services/timer.service.spec.ts +16 -0
  106. package/src/lib/services/timer.service.ts +92 -0
  107. package/src/lib/tango-manage-tickets-routing.module.ts +37 -0
  108. package/src/lib/tango-manage-tickets.module.ts +68 -0
  109. package/{public-api.d.ts → src/public-api.ts} +8 -2
  110. package/tsconfig.lib.json +14 -0
  111. package/tsconfig.lib.prod.json +10 -0
  112. package/tsconfig.spec.json +14 -0
  113. package/esm2022/lib/components/add-csm-modal/add-csm-modal.component.mjs +0 -98
  114. package/esm2022/lib/components/audit-log/audit-log.component.mjs +0 -11
  115. package/esm2022/lib/components/audit-mapping-list/audit-mapping-list.component.mjs +0 -486
  116. package/esm2022/lib/components/audit-metrics/audit-metrics.component.mjs +0 -298
  117. package/esm2022/lib/components/audit-report-popup/audit-report-popup.component.mjs +0 -389
  118. package/esm2022/lib/components/audit-retag/audit-retag.component.mjs +0 -470
  119. package/esm2022/lib/components/comment-model/comment-model.component.mjs +0 -58
  120. package/esm2022/lib/components/count/count.component.mjs +0 -89
  121. package/esm2022/lib/components/custom-select/custom-select.component.mjs +0 -187
  122. package/esm2022/lib/components/filter-options/filter-options.component.mjs +0 -41
  123. package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +0 -1061
  124. package/esm2022/lib/components/footfall-dicview/footfall-dicview.component.mjs +0 -1014
  125. package/esm2022/lib/components/footfall-popup/footfall-popup.component.mjs +0 -15
  126. package/esm2022/lib/components/group-select/group-select.component.mjs +0 -155
  127. package/esm2022/lib/components/re-trigger/re-trigger.component.mjs +0 -96
  128. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +0 -108
  129. package/esm2022/lib/components/remove-audit/remove-audit.component.mjs +0 -81
  130. package/esm2022/lib/components/start-audit/start-audit.component.mjs +0 -761
  131. package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +0 -131
  132. package/esm2022/lib/components/ticket-filter-panel/ticket-filter-panel.component.mjs +0 -435
  133. package/esm2022/lib/components/ticket-footfall-new/ticket-footfall-new.component.mjs +0 -2673
  134. package/esm2022/lib/components/ticketclosepopup/ticketclosepopup.component.mjs +0 -43
  135. package/esm2022/lib/components/tickets/tickets.component.mjs +0 -847
  136. package/esm2022/lib/components/viewcategory/viewcategory.component.mjs +0 -89
  137. package/esm2022/lib/services/audit.service.mjs +0 -88
  138. package/esm2022/lib/services/excel.service.mjs +0 -45
  139. package/esm2022/lib/services/ticket.service.mjs +0 -314
  140. package/esm2022/lib/services/timer.service.mjs +0 -84
  141. package/esm2022/lib/tango-manage-tickets-routing.module.mjs +0 -44
  142. package/esm2022/lib/tango-manage-tickets.module.mjs +0 -109
  143. package/esm2022/public-api.mjs +0 -6
  144. package/esm2022/tango-app-ui-manage-tickets.mjs +0 -5
  145. package/fesm2022/tango-app-ui-manage-tickets.mjs +0 -10083
  146. package/fesm2022/tango-app-ui-manage-tickets.mjs.map +0 -1
  147. package/index.d.ts +0 -5
  148. package/lib/components/add-csm-modal/add-csm-modal.component.d.ts +0 -30
  149. package/lib/components/audit-log/audit-log.component.d.ts +0 -5
  150. package/lib/components/audit-mapping-list/audit-mapping-list.component.d.ts +0 -73
  151. package/lib/components/audit-metrics/audit-metrics.component.d.ts +0 -59
  152. package/lib/components/audit-report-popup/audit-report-popup.component.d.ts +0 -52
  153. package/lib/components/audit-retag/audit-retag.component.d.ts +0 -59
  154. package/lib/components/comment-model/comment-model.component.d.ts +0 -17
  155. package/lib/components/count/count.component.d.ts +0 -23
  156. package/lib/components/custom-select/custom-select.component.d.ts +0 -35
  157. package/lib/components/filter-options/filter-options.component.d.ts +0 -15
  158. package/lib/components/footfall-dic/footfall-dic.component.d.ts +0 -143
  159. package/lib/components/footfall-dicview/footfall-dicview.component.d.ts +0 -132
  160. package/lib/components/footfall-popup/footfall-popup.component.d.ts +0 -8
  161. package/lib/components/group-select/group-select.component.d.ts +0 -33
  162. package/lib/components/re-trigger/re-trigger.component.d.ts +0 -32
  163. package/lib/components/reactive-select/reactive-select.component.d.ts +0 -32
  164. package/lib/components/remove-audit/remove-audit.component.d.ts +0 -16
  165. package/lib/components/start-audit/start-audit.component.d.ts +0 -86
  166. package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +0 -28
  167. package/lib/components/ticket-filter-panel/ticket-filter-panel.component.d.ts +0 -79
  168. package/lib/components/ticket-footfall-new/ticket-footfall-new.component.d.ts +0 -286
  169. package/lib/components/ticketclosepopup/ticketclosepopup.component.d.ts +0 -15
  170. package/lib/components/tickets/tickets.component.d.ts +0 -88
  171. package/lib/components/viewcategory/viewcategory.component.d.ts +0 -16
  172. package/lib/services/audit.service.d.ts +0 -36
  173. package/lib/services/excel.service.d.ts +0 -10
  174. package/lib/services/ticket.service.d.ts +0 -85
  175. package/lib/services/timer.service.d.ts +0 -22
  176. package/lib/tango-manage-tickets-routing.module.d.ts +0 -7
  177. package/lib/tango-manage-tickets.module.d.ts +0 -38
@@ -0,0 +1,43 @@
1
+ <div class="card mb-5 py-3 px-5">
2
+ <ul class="nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap">
3
+ <li class="nav-item">
4
+ <a [routerLink]="['/manage/tickets']" [queryParams]="{ type: 'installation' }" (click)="Selectedtabs('installation')"
5
+ [ngClass]="SelectedTab === 'installation' ? 'active' : ''" class="nav-link cursor-pointer no-border me-3">
6
+ Installation<span class="mx-2 " [ngClass]="SelectedTab ==='installation' ? 'badge-num-primary' :'badge-num-muted'">{{ticketAllCount?.installationCount?ticketAllCount?.installationCount:0}}</span>
7
+ </a>
8
+ </li>
9
+ <li class="nav-item" >
10
+ <a [routerLink]="['/manage/tickets']" [queryParams]="{ type: 'infra' }" (click)="Selectedtabs('infra')"
11
+ [ngClass]="SelectedTab === 'infra' ? 'active' : ''" class="nav-link cursor-pointer no-border me-3">
12
+ Infra<span class="mx-2" [ngClass]="SelectedTab ==='infra' ? 'badge-num-primary' :'badge-num-muted'">{{ticketAllCount?.infraCount?ticketAllCount?.infraCount:0}}</span>
13
+ </a>
14
+ </li>
15
+ <li class="nav-item" [routerLink]="['/manage/tickets']" [queryParams]="{ type: 'dataMismatch' }" (click)="Selectedtabs('dataMismatch')">
16
+ <a [ngClass]="SelectedTab ==='dataMismatch' ? 'active' :''" class="nav-link cursor-pointer me-3">Data Mismatch
17
+ <span class="mx-2" [ngClass]="SelectedTab ==='dataMismatch' ? 'badge-num-primary' :'badge-num-muted'">{{ticketAllCount?.datamismatchCount? ticketAllCount?.datamismatchCount:0}}</span></a>
18
+ </li>
19
+ <!-- <li *ngIf="this.users.userType ==='tango'" class="nav-item" [routerLink]="['/manage/tickets']" [queryParams]="{ type: 'audit' }" (click)="Selectedtabs('audit')"><a [ngClass]="SelectedTab ==='audit' ? 'active' :''"
20
+ class="nav-link cursor-pointer no-border me-3">Audit</a>
21
+ </li> -->
22
+ <li *ngIf="this.users.userType ==='tango'" class="nav-item" (click)="Selectedtabs('mat')"><a [routerLink]="['/manage/tickets']" [queryParams]="{ type: 'mat' }" [ngClass]="SelectedTab ==='mat' ? 'active' :''"
23
+ class="nav-link cursor-pointer no-border me-3">Employee Mat
24
+ <span class="mx-2 " [ngClass]="SelectedTab ==='mat' ? 'badge-num-primary' :'badge-num-muted'">{{ticketAllCount?.matCount ?ticketAllCount?.matCount:0}}</span></a>
25
+ </li>
26
+ <!-- <li *ngIf="(gs.userAccess | async)?.userType === 'tango' || clientData?.isVMS" class="nav-item" (click)="Selectedtabs('footfall')"><a [routerLink]="['/manage/tickets']" [queryParams]="{ type: 'footfall' }" [ngClass]="SelectedTab ==='footfall' ? 'active' :''"
27
+ class="nav-link cursor-pointer no-border me-3">Footfall Directory
28
+ <span class="mx-2 " [ngClass]="SelectedTab ==='footfall' ? 'badge-num-primary' :'badge-num-muted'">{{ticketAllCount?.footfallDirectory ?ticketAllCount?.footfallDirectory:0}}</span>
29
+
30
+ </a>
31
+ </li> -->
32
+ <li *ngIf="this.users.userType ==='tango' || (this.users.userType ==='client' && this.users.role !=='user')" class="nav-item" (click)="Selectedtabs('footfall')"><a [routerLink]="['/manage/tickets']" [queryParams]="{ type: 'footfall' }" [ngClass]="SelectedTab ==='footfall' ? 'active' :''"
33
+ class="nav-link cursor-pointer no-border me-3">Footfall Directory
34
+ <span class="mx-2" [ngClass]="SelectedTab ==='footfall' ? 'badge-num-primary' :'badge-num-muted'">{{ticketAllCount?.footfallDirectory ?ticketAllCount?.footfallDirectory:0}}</span>
35
+ </a>
36
+ </li>
37
+ </ul>
38
+ </div>
39
+ <lib-ticket-footfall-new *ngIf="SelectedTab ==='footfall'"></lib-ticket-footfall-new>
40
+ <lib-footfall-dic *ngIf="SelectedTab ==='footfall-new'"></lib-footfall-dic>
41
+ <lib-tickets *ngIf="SelectedTab !=='audit' && SelectedTab !=='footfall' && SelectedTab !=='footfall-new'"></lib-tickets>
42
+ <lib-audit-metrics *ngIf="SelectedTab ==='audit'"></lib-audit-metrics>
43
+ <router-outlet></router-outlet>
@@ -0,0 +1,35 @@
1
+ .nav-item .nav-link.active{
2
+ border:none;
3
+ border-radius: 6px;
4
+ background: var(--Primary-50, #EAF8FF);
5
+ padding: 8px 12px;
6
+ }
7
+ .nav-item .nav-link:hover{
8
+ border: none;
9
+ }
10
+ .badge-num-primary {
11
+ border-radius: 16px !important;
12
+ background: var(--Primary-50, #EAF8FF) !important;
13
+ color: var(--Primary-700, #009BF3) !important;
14
+ text-align: center;
15
+ font-size: 14px !important;
16
+ font-style: normal;
17
+ font-weight: 500;
18
+ line-height: 20px;
19
+ padding: 2px 10px !important;
20
+ mix-blend-mode: multiply !important;
21
+ }
22
+
23
+ .badge-num-muted {
24
+ border-radius: 16px !important;
25
+ background: var(--Primary-50, #F2F4F7) !important;
26
+ color: var(--Gray-700, #344054) !important;
27
+ text-align: center;
28
+ font-size: 14px;
29
+ font-style: normal;
30
+ font-weight: 500;
31
+ line-height: 20px;
32
+ padding: 2px 10px !important;
33
+ mix-blend-mode: multiply !important;
34
+ }
35
+
@@ -0,0 +1,23 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { TangoManageTicketsComponent } from './tango-manage-tickets.component';
4
+
5
+ describe('TangoManageTicketsComponent', () => {
6
+ let component: TangoManageTicketsComponent;
7
+ let fixture: ComponentFixture<TangoManageTicketsComponent>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ declarations: [TangoManageTicketsComponent]
12
+ })
13
+ .compileComponents();
14
+
15
+ fixture = TestBed.createComponent(TangoManageTicketsComponent);
16
+ component = fixture.componentInstance;
17
+ fixture.detectChanges();
18
+ });
19
+
20
+ it('should create', () => {
21
+ expect(component).toBeTruthy();
22
+ });
23
+ });
@@ -0,0 +1,118 @@
1
+ import { Component, OnDestroy, OnInit } from '@angular/core';
2
+ import { ActivatedRoute, Router } from '@angular/router';
3
+ import { GlobalStateService, PageInfoService } from 'tango-app-ui-global';
4
+ import { Subject, takeUntil } from "rxjs";
5
+ import { TicketService } from '../../services/ticket.service';
6
+ @Component({
7
+ selector: 'lib-tango-manage-tickets',
8
+ templateUrl: './tango-manage-tickets.component.html',
9
+ styleUrl: './tango-manage-tickets.component.scss'
10
+ })
11
+ export class TangoManageTicketsComponent implements OnInit,OnDestroy {
12
+ SelectedTab:any='installation'
13
+ private readonly destroy$ = new Subject();
14
+ headerFilters: any;
15
+ ticketAllCount: any;
16
+ users: any;
17
+ constructor(private pageInfo:PageInfoService,private route: ActivatedRoute,private router:Router,public gs:GlobalStateService,private service:TicketService){
18
+ }
19
+ clientData:any;
20
+ ngOnInit(): void {
21
+ const userData: any = JSON.parse(localStorage.getItem("user-info") || "{}");
22
+ this.users = userData;
23
+ const clientData: any = JSON.parse(localStorage.getItem("client-details") || "{}");
24
+ this.clientData = clientData;
25
+ this.route?.queryParams?.pipe(takeUntil(this.destroy$)).subscribe(params => {
26
+ if (params.hasOwnProperty('type')) {
27
+ const type = params['type'];
28
+ this.Selectedtabs(type);
29
+
30
+ } else{
31
+ this.updateStoreIdQueryParam()
32
+ }
33
+ });
34
+ this.onLoad();
35
+ this.setPageData();
36
+ }
37
+
38
+ updateStoreIdQueryParam() {
39
+ const queryParams = { ...this.route?.snapshot?.queryParams };
40
+ // Update storeId in queryParams
41
+ queryParams.type = this.SelectedTab.toLocaleLowerCase();
42
+ // Navigate to the same route with updated queryParams
43
+ this.router.navigate([], { queryParams: queryParams, queryParamsHandling: 'merge' });
44
+ }
45
+
46
+ setPageData(){
47
+ this.pageInfo.setTitle('Tickets')
48
+ this.pageInfo.setDescription('Summary of queries raised,addresed & resolved')
49
+ let breadcrumbs : any[]=[];
50
+ if (this.gs.userAccess.value?.userType === "tango") {
51
+ breadcrumbs= [
52
+ {
53
+ title: "Manage",
54
+ path: "/manage/brands",
55
+ isActive: false,
56
+ isSeparator: false,
57
+ },
58
+ {
59
+ title: "Manage",
60
+ path: "/manage/brands",
61
+ isActive: false,
62
+ isSeparator: true,
63
+ },
64
+ ];
65
+ } else if (this.gs.userAccess.value?.userType === "client") {
66
+ breadcrumbs= [
67
+ {
68
+ title: "Manage",
69
+ path: "/manage/summary",
70
+ isActive: false,
71
+ isSeparator: false,
72
+ },
73
+ {
74
+ title: "Manage",
75
+ path: "/manage/summary",
76
+ isActive: false,
77
+ isSeparator: true,
78
+ },
79
+ ];
80
+ }
81
+ this.pageInfo.setBreadcrumbs(breadcrumbs);
82
+ }
83
+
84
+
85
+ Selectedtabs(value:any){
86
+ this.SelectedTab = value;
87
+ }
88
+ ngOnDestroy(): void {
89
+ this.destroy$.next(true);
90
+ this.destroy$.complete();
91
+ }
92
+ onLoad(){
93
+ this.gs.dataRangeValue?.pipe(takeUntil(this.destroy$))?.subscribe({
94
+ next: (data: any) => {
95
+ if (data) {
96
+ this.headerFilters = data;
97
+ this.getAllCount();
98
+ }
99
+ }
100
+ })
101
+ }
102
+
103
+ getAllCount(){
104
+ let obj ={
105
+ clientId: this.headerFilters?.clients,
106
+ fromDate: this.headerFilters?.date?.startDate,
107
+ toDate: this.headerFilters?.date?.endDate
108
+ }
109
+ this.service.getAllCounts(obj)?.pipe(takeUntil(this.destroy$))?.subscribe({
110
+ next: (res: any) => {
111
+ if(res.code ===200){
112
+ this.ticketAllCount = res?.data[0];
113
+ }
114
+ }
115
+ })
116
+ }
117
+
118
+ }
@@ -0,0 +1,386 @@
1
+ <!-- ticket-filter-panel.component.html -->
2
+ <div class="filter-wrapper" *ngIf="isOpen">
3
+ <div class="filter-card">
4
+ <div class="filter-header d-flex justify-content-between align-items-center mb-3">
5
+ <div class="title">Filter Options</div>
6
+ <!-- <button type="button" class="btn-close" (click)="close()">✕</button> -->
7
+ </div>
8
+
9
+ <form [formGroup]="filterForm">
10
+ <!-- Status -->
11
+ <div class="mb-3 position-relative" (click)="$event.stopPropagation()">
12
+ <label class="form-label">Status</label>
13
+
14
+ <!-- Header / trigger -->
15
+ <div
16
+ class="status-select border rounded px-3 py-2 d-flex justify-content-between align-items-center"
17
+ (click)="toggleDropdown('status', $event)"
18
+ >
19
+ <span *ngIf="!selectedStatuses.length">Select</span>
20
+
21
+ <span *ngIf="selectedStatuses.length === 1">
22
+ {{ selectedStatuses[0] }}
23
+ </span>
24
+
25
+ <span *ngIf="selectedStatuses.length > 1" class="d-flex align-items-center">
26
+ <span>{{ selectedStatuses[0] }}</span>
27
+ <span class="badge ms-2">
28
+ +{{ selectedStatuses.length - 1 }}
29
+ </span>
30
+ </span>
31
+
32
+ </div>
33
+
34
+ <!-- DROPDOWN PANEL (OVERLAY) -->
35
+ <div
36
+ class="status-dropdown position-absolute w-100 mt-1 border rounded p-1 bg-white"
37
+ style="z-index: 1000; max-height: 220px; overflow-y: auto;"
38
+ *ngIf="isDropdownOpen('status')"
39
+ (click)="$event.stopPropagation()"
40
+ >
41
+ <!-- Select All -->
42
+ <div class="form-check px-0 d-flex align-items-center mb-2">
43
+ <input
44
+ type="checkbox"
45
+ class="form-check-input "
46
+ id="status-select-all"
47
+ [checked]="areAllStatusesSelected()"
48
+ (change)="onStatusSelectAllChange($event)"
49
+ />
50
+ <label class="form-check-label text-dark ms-2" for="status-select-all">
51
+ Select All
52
+ </label>
53
+ </div>
54
+
55
+
56
+ <!-- Options -->
57
+ <div
58
+ class="form-check px-0 d-flex align-items-center mb-1"
59
+ *ngFor="let s of statusOptions"
60
+ >
61
+ <input
62
+ type="checkbox"
63
+ class="form-check-input "
64
+ [id]="'status-' + s"
65
+ [checked]="isStatusSelected(s)"
66
+ (change)="onStatusChange($event, s)"
67
+ />
68
+ <label class="form-check-label text-dark ms-2" [for]="'status-' + s">
69
+ {{ s }}
70
+ </label>
71
+ </div>
72
+ </div>
73
+ </div>
74
+
75
+
76
+
77
+ <!-- Reviewer accuracy -->
78
+ <div class="mb-3" *ngIf="showReviewerAccuracy" (click)="closeAll()">
79
+ <label class="form-label">Reviewer accuracy (%) by condition</label>
80
+ <div class="d-flex gap-2">
81
+ <select class="form-select w-100" formControlName="reviewerCondition">
82
+ <option [ngValue]="null">Select</option>
83
+ <option *ngFor="let c of conditionOptions" [ngValue]="c.value">
84
+ {{ c.label }}
85
+ </option>
86
+ </select>
87
+
88
+ <!-- one or two inputs -->
89
+ <ng-container *ngIf="isBetween('reviewerCondition'); else singleReviewer">
90
+ <input
91
+ type="number"
92
+ min="1"
93
+ max="100"
94
+ class="form-control"
95
+ formControlName="reviewerFrom"
96
+ placeholder="From" (input)="limitValue($event, 'reviewerFrom')" />
97
+ <input
98
+ type="number"
99
+ min="1"
100
+ max="100"
101
+ class="form-control"
102
+ formControlName="reviewerTo"
103
+ placeholder="To" (input)="limitValue($event, 'reviewerTo')" />
104
+ </ng-container>
105
+ <ng-template #singleReviewer>
106
+ <input
107
+ type="number"
108
+ min="1"
109
+ max="100"
110
+ class="form-control"
111
+ formControlName="reviewerFrom"
112
+ placeholder="1 to 100%" (input)="limitValue($event, 'reviewerFrom')" />
113
+ </ng-template>
114
+ </div>
115
+ </div>
116
+
117
+ <!-- Approver accuracy -->
118
+ <div class="mb-3" *ngIf="showApproverAccuracy" (click)="closeAll()">
119
+ <label class="form-label">Approver accuracy (%) by condition</label>
120
+ <div class="d-flex gap-2">
121
+ <select class="form-select w-100" formControlName="approverCondition">
122
+ <option [ngValue]="null">Select</option>
123
+ <option *ngFor="let c of conditionOptions" [ngValue]="c.value">
124
+ {{ c.label }}
125
+ </option>
126
+ </select>
127
+
128
+ <ng-container *ngIf="isBetween('approverCondition'); else singleApprover">
129
+ <input
130
+ type="number"
131
+ min="1"
132
+ max="100"
133
+ class="form-control"
134
+ formControlName="approverFrom"
135
+ placeholder="From"
136
+ (input)="limitValue($event, 'approverFrom')"/>
137
+ <input
138
+ type="number"
139
+ min="1"
140
+ max="100"
141
+ class="form-control"
142
+ formControlName="approverTo"
143
+ placeholder="To" (input)="limitValue($event, 'approverTo')" />
144
+ </ng-container>
145
+ <ng-template #singleApprover>
146
+ <input
147
+ type="number"
148
+ min="1"
149
+ max="100"
150
+ class="form-control"
151
+ formControlName="approverFrom"
152
+ placeholder="1 to 100%" (input)="limitValue($event, 'approverFrom')" />
153
+ </ng-template>
154
+ </div>
155
+ </div>
156
+
157
+ <!-- Tango accuracy -->
158
+ <div class="mb-3" *ngIf="showTangoAccuracy" (click)="closeAll()">
159
+ <label class="form-label">Tango accuracy (%) by condition</label>
160
+ <div class="d-flex gap-2">
161
+ <select class="form-select w-100" formControlName="tangoCondition">
162
+ <option [ngValue]="null">Select</option>
163
+ <option *ngFor="let c of conditionOptions" [ngValue]="c.value">
164
+ {{ c.label }}
165
+ </option>
166
+ </select>
167
+
168
+ <ng-container *ngIf="isBetween('tangoCondition'); else singleTango">
169
+ <input
170
+ type="number"
171
+ min="1"
172
+ max="100"
173
+ class="form-control"
174
+ formControlName="tangoFrom"
175
+ placeholder="From" (input)="limitValue($event, 'tangoFrom')" />
176
+ <input
177
+ type="number"
178
+ min="1"
179
+ max="100"
180
+ class="form-control"
181
+ formControlName="tangoTo"
182
+ placeholder="To" (input)="limitValue($event, 'tangoTo')" />
183
+ </ng-container>
184
+ <ng-template #singleTango>
185
+ <input
186
+ type="number"
187
+ min="1"
188
+ max="100"
189
+ class="form-control"
190
+ formControlName="tangoFrom"
191
+ placeholder="1 to 100%" (input)="limitValue($event, 'tangoFrom')" />
192
+ </ng-template>
193
+ </div>
194
+ </div>
195
+ <div
196
+ class="mb-3 position-relative"
197
+ *ngIf="showReviewedBy"
198
+ (click)="$event.stopPropagation()"
199
+ >
200
+ <label class="form-label">Reviewed by</label>
201
+
202
+ <!-- Trigger / display -->
203
+ <div
204
+ class="border rounded px-3 py-2 d-flex justify-content-between align-items-center"
205
+ (click)="toggleDropdown('reviewer', $event)"
206
+ >
207
+ <!-- 0 selected -->
208
+ <span *ngIf="!selectedReviewedBy.length">
209
+ Select
210
+ </span>
211
+
212
+ <!-- 1 selected -->
213
+ <span *ngIf="selectedReviewedBy.length === 1">
214
+ {{ selectedReviewedBy[0] }}
215
+ </span>
216
+
217
+ <!-- >1 selected -->
218
+ <span
219
+ *ngIf="selectedReviewedBy.length > 1"
220
+ class="d-flex align-items-center"
221
+ >
222
+ <span>{{ selectedReviewedBy[0] }}</span>
223
+ <span class="badge ms-2">
224
+ +{{ selectedReviewedBy.length - 1 }}
225
+ </span>
226
+ </span>
227
+ </div>
228
+
229
+ <div
230
+ *ngIf="isDropdownOpen('reviewer')"
231
+ class="position-absolute w-100 border rounded bg-white p-1 mt-1"
232
+ style="z-index: 1000; max-height: 220px; overflow-y: auto;"
233
+ (click)="$event.stopPropagation()"
234
+ >
235
+
236
+ <!-- 🔍 Search box -->
237
+ <!-- <div class="mb-2 px-0">
238
+ <input
239
+ type="text"
240
+ class="form-control form-control-sm"
241
+ placeholder="Search by email"
242
+ [(ngModel)]="reviewerSearchTerm"
243
+ (click)="$event.stopPropagation()"
244
+ />
245
+ </div> -->
246
+
247
+ <!-- Select All -->
248
+ <div class="form-check px-0 mb-2 d-flex align-items-center">
249
+ <input
250
+ type="checkbox"
251
+ class="form-check-input"
252
+ id="reviewer-all"
253
+ [checked]="areAllReviewersSelected()"
254
+ (change)="onReviewerSelectAll($event)"
255
+ />
256
+ <label for="reviewer-all" class="form-check-label text-dark ms-2">
257
+ Select All
258
+ </label>
259
+ </div>
260
+
261
+ <!-- Options – now use getter filteredReviewerList -->
262
+ <div
263
+ class="form-check mb-1 px-0 d-flex align-items-center"
264
+ *ngFor="let u of filteredReviewerList"
265
+ >
266
+ <input
267
+ class="form-check-input"
268
+ type="checkbox"
269
+ [id]="'rev-' + u.email"
270
+ [checked]="isReviewerSelected(u.email)"
271
+ (change)="onReviewerChange($event, u.email)"
272
+ />
273
+ <label class="form-check-label text-dark ms-2" [for]="'rev-' + u.email">
274
+ {{ u.email }}
275
+ </label>
276
+ </div>
277
+ </div>
278
+
279
+
280
+ </div>
281
+
282
+
283
+ <!-- Approved By -->
284
+ <div
285
+ class="mb-3 position-relative"
286
+ *ngIf="showApprovedBy"
287
+ (click)="$event.stopPropagation()"
288
+ >
289
+ <label class="form-label">Approved by</label>
290
+
291
+ <!-- Trigger / display -->
292
+ <div
293
+ class="border rounded px-3 py-2 d-flex justify-content-between align-items-center"
294
+ (click)="toggleDropdown('approver', $event)"
295
+ >
296
+ <!-- 0 selected -->
297
+ <span *ngIf="!selectedApprovedBy.length">
298
+ Select
299
+ </span>
300
+
301
+ <!-- 1 selected -->
302
+ <span *ngIf="selectedApprovedBy.length === 1">
303
+ {{ selectedApprovedBy[0] }}
304
+ </span>
305
+
306
+ <!-- >1 selected -->
307
+ <span
308
+ *ngIf="selectedApprovedBy.length > 1"
309
+ class="d-flex align-items-center"
310
+ >
311
+ <span>{{ selectedApprovedBy[0] }}</span>
312
+ <span class="badge ms-2">
313
+ +{{ selectedApprovedBy.length - 1 }}
314
+ </span>
315
+ </span>
316
+
317
+ </div>
318
+ <!-- Dropdown panel -->
319
+ <div
320
+ *ngIf="isDropdownOpen('approver')"
321
+ class="position-absolute w-100 border rounded bg-white p-1 mt-1"
322
+ style="z-index: 1000; max-height: 220px; overflow-y: auto;"
323
+ (click)="$event.stopPropagation()"
324
+ >
325
+
326
+ <!-- 🔍 Search box -->
327
+ <!-- <div class="mb-2 px-0">
328
+ <input
329
+ type="text"
330
+ class="form-control form-control-sm"
331
+ placeholder="Search by email"
332
+ [ngModel]="approverSearchTerm"
333
+ (ngModelChange)="onReviewerSearch($event)"
334
+ (click)="$event.stopPropagation()"
335
+ />
336
+ </div> -->
337
+
338
+ <!-- Select All -->
339
+ <div class="form-check px-0 mb-2 d-flex align-items-center">
340
+ <input
341
+ type="checkbox"
342
+ class="form-check-input"
343
+ id="reviewer-all"
344
+ [checked]="areAllReviewersSelected()"
345
+ (change)="onReviewerSelectAll($event)"
346
+ />
347
+ <label for="reviewer-all" class="form-check-label text-dark ms-2">
348
+ Select All
349
+ </label>
350
+ </div>
351
+
352
+ <!-- Options (use filteredReviewerList instead of userList) -->
353
+ <div
354
+ class="form-check mb-1 px-0 d-flex align-items-center"
355
+ *ngFor="let u of filteredApproverList"
356
+ >
357
+ <input
358
+ class="form-check-input"
359
+ type="checkbox"
360
+ [id]="'rev-' + u.email"
361
+ [checked]="isReviewerSelected(u.email)"
362
+ (change)="onReviewerChange($event, u.email)"
363
+ />
364
+ <label class="form-check-label text-dark ms-2" [for]="'rev-' + u.email">
365
+ {{ u.email }}
366
+ </label>
367
+ </div>
368
+ </div>
369
+
370
+ <!-- Dropdown panel -->
371
+
372
+ </div>
373
+
374
+
375
+ <!-- Footer buttons -->
376
+ <div class="d-flex justify-content-between w-100 mt-4">
377
+ <button type="button" class="btn btn-outline w-50 me-1" (click)="onReset()">
378
+ Reset
379
+ </button>
380
+ <button type="button" class="btn btn-primary w-50 ms-1" (click)="onApply()">
381
+ Apply
382
+ </button>
383
+ </div>
384
+ </form>
385
+ </div>
386
+ </div>
@@ -0,0 +1,87 @@
1
+ /* ticket-filter-panel.component.scss */
2
+ .filter-wrapper {
3
+ position: absolute; // or fixed if you want full overlay
4
+ top: 0;
5
+ right: 0;
6
+ padding: 16px;
7
+ z-index: 1050;
8
+ }
9
+
10
+ .filter-card {
11
+ width: 350px;
12
+ background: #ffffff;
13
+ border-radius: 12px;
14
+ padding: 16px 18px;
15
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.08);
16
+ font-size: 13px;
17
+ }
18
+
19
+ .filter-header .title {
20
+ font-weight: 600;
21
+ font-size: 14px;
22
+ }
23
+
24
+ .btn-close {
25
+ border: none;
26
+ background: transparent;
27
+ font-size: 16px;
28
+ cursor: pointer;
29
+ }
30
+
31
+ .form-label {
32
+ font-size: 12px;
33
+ margin-bottom: 4px;
34
+ }
35
+
36
+ .form-select,
37
+ .form-control {
38
+ font-size: 13px;
39
+ }
40
+
41
+ .gap-2 {
42
+ gap: 4px;
43
+ }
44
+ .badge {
45
+ padding: 0 6px;
46
+ border-radius: 999px;
47
+ font-size: 11px;
48
+ background: #e5f3ff;
49
+ color: #007bff;
50
+ }
51
+
52
+ input[type='checkbox'] {
53
+ width: 16px !important;
54
+ height: 16px !important;
55
+ margin: -2px 5px -2px;
56
+ border-radius: 4px !important;
57
+ -webkit-appearance: none;
58
+ -moz-appearance: none;
59
+ -o-appearance: none;
60
+ appearance: none;
61
+ outline: 1px solid var(--gray-600, #D0D5DD) !important;
62
+ box-shadow: none;
63
+ font-size: 0.5em;
64
+ text-align: center;
65
+ line-height: 1em;
66
+ background: white;
67
+ }
68
+
69
+ input[type='checkbox'] {
70
+ outline: 1px solid var(--primary-600, #00A3FF) !important;
71
+ background-color: var(--primary-50, #EAF8FF);
72
+ }
73
+
74
+ input[type='checkbox']:checked:after {
75
+ content: '';
76
+ transform: rotate(45deg);
77
+ border-bottom: 2px solid #00A3FF;
78
+ border-right: 2px solid #00A3FF;
79
+ display: inline-block;
80
+ width: 0.5em;
81
+ padding-left: 3px;
82
+ padding-top: 10px;
83
+ padding-right: 0px;
84
+ }
85
+ .text-dark{
86
+ color:#344054 !important;
87
+ }