tango-app-ui-manage-tickets 3.7.0-beta.15 → 3.7.0-beta.16

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 (91) 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-metrics/audit-metrics.component.html +345 -0
  13. package/src/lib/components/audit-metrics/audit-metrics.component.scss +34 -0
  14. package/src/lib/components/audit-metrics/audit-metrics.component.spec.ts +23 -0
  15. package/src/lib/components/audit-metrics/audit-metrics.component.ts +292 -0
  16. package/src/lib/components/comment-model/comment-model.component.html +24 -0
  17. package/src/lib/components/comment-model/comment-model.component.scss +20 -0
  18. package/src/lib/components/comment-model/comment-model.component.spec.ts +23 -0
  19. package/src/lib/components/comment-model/comment-model.component.ts +53 -0
  20. package/src/lib/components/count/count.component.html +54 -0
  21. package/src/lib/components/count/count.component.scss +14 -0
  22. package/src/lib/components/count/count.component.spec.ts +23 -0
  23. package/src/lib/components/count/count.component.ts +82 -0
  24. package/src/lib/components/footfall-dic/footfall-dic.component.html +1242 -0
  25. package/src/lib/components/footfall-dic/footfall-dic.component.scss +273 -0
  26. package/src/lib/components/footfall-dic/footfall-dic.component.spec.ts +23 -0
  27. package/src/lib/components/footfall-dic/footfall-dic.component.ts +1106 -0
  28. package/src/lib/components/group-select/group-select.component.html +44 -0
  29. package/src/lib/components/group-select/group-select.component.scss +144 -0
  30. package/src/lib/components/group-select/group-select.component.spec.ts +23 -0
  31. package/src/lib/components/group-select/group-select.component.ts +145 -0
  32. package/src/lib/components/re-trigger/re-trigger.component.html +53 -0
  33. package/src/lib/components/re-trigger/re-trigger.component.scss +16 -0
  34. package/src/lib/components/re-trigger/re-trigger.component.spec.ts +23 -0
  35. package/src/lib/components/re-trigger/re-trigger.component.ts +96 -0
  36. package/src/lib/components/reactive-select/reactive-select.component.html +18 -0
  37. package/src/lib/components/reactive-select/reactive-select.component.scss +52 -0
  38. package/src/lib/components/reactive-select/reactive-select.component.spec.ts +23 -0
  39. package/src/lib/components/reactive-select/reactive-select.component.ts +104 -0
  40. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.html +38 -0
  41. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.scss +35 -0
  42. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.spec.ts +23 -0
  43. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.ts +116 -0
  44. package/src/lib/components/tickets/tickets.component.html +439 -0
  45. package/src/lib/components/tickets/tickets.component.scss +131 -0
  46. package/src/lib/components/tickets/tickets.component.spec.ts +23 -0
  47. package/src/lib/components/tickets/tickets.component.ts +748 -0
  48. package/src/lib/services/excel.service.ts +48 -0
  49. package/src/lib/services/ticket.service.spec.ts +16 -0
  50. package/src/lib/services/ticket.service.ts +175 -0
  51. package/src/lib/tango-manage-tickets-routing.module.ts +16 -0
  52. package/src/lib/tango-manage-tickets.module.ts +34 -0
  53. package/{public-api.d.ts → src/public-api.ts} +8 -2
  54. package/tsconfig.lib.json +14 -0
  55. package/tsconfig.lib.prod.json +10 -0
  56. package/tsconfig.spec.json +14 -0
  57. package/esm2022/lib/components/add-csm-modal/add-csm-modal.component.mjs +0 -98
  58. package/esm2022/lib/components/audit-log/audit-log.component.mjs +0 -11
  59. package/esm2022/lib/components/audit-metrics/audit-metrics.component.mjs +0 -298
  60. package/esm2022/lib/components/comment-model/comment-model.component.mjs +0 -58
  61. package/esm2022/lib/components/count/count.component.mjs +0 -89
  62. package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +0 -983
  63. package/esm2022/lib/components/group-select/group-select.component.mjs +0 -155
  64. package/esm2022/lib/components/re-trigger/re-trigger.component.mjs +0 -96
  65. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +0 -108
  66. package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +0 -127
  67. package/esm2022/lib/components/tickets/tickets.component.mjs +0 -793
  68. package/esm2022/lib/services/excel.service.mjs +0 -45
  69. package/esm2022/lib/services/ticket.service.mjs +0 -161
  70. package/esm2022/lib/tango-manage-tickets-routing.module.mjs +0 -24
  71. package/esm2022/lib/tango-manage-tickets.module.mjs +0 -54
  72. package/esm2022/public-api.mjs +0 -6
  73. package/esm2022/tango-app-ui-manage-tickets.mjs +0 -5
  74. package/fesm2022/tango-app-ui-manage-tickets.mjs +0 -3006
  75. package/fesm2022/tango-app-ui-manage-tickets.mjs.map +0 -1
  76. package/index.d.ts +0 -5
  77. package/lib/components/add-csm-modal/add-csm-modal.component.d.ts +0 -30
  78. package/lib/components/audit-log/audit-log.component.d.ts +0 -5
  79. package/lib/components/audit-metrics/audit-metrics.component.d.ts +0 -59
  80. package/lib/components/comment-model/comment-model.component.d.ts +0 -17
  81. package/lib/components/count/count.component.d.ts +0 -23
  82. package/lib/components/footfall-dic/footfall-dic.component.d.ts +0 -139
  83. package/lib/components/group-select/group-select.component.d.ts +0 -33
  84. package/lib/components/re-trigger/re-trigger.component.d.ts +0 -32
  85. package/lib/components/reactive-select/reactive-select.component.d.ts +0 -32
  86. package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +0 -27
  87. package/lib/components/tickets/tickets.component.d.ts +0 -84
  88. package/lib/services/excel.service.d.ts +0 -10
  89. package/lib/services/ticket.service.d.ts +0 -49
  90. package/lib/tango-manage-tickets-routing.module.d.ts +0 -7
  91. package/lib/tango-manage-tickets.module.d.ts +0 -21
@@ -0,0 +1,439 @@
1
+ <div class="card">
2
+ <div class="card-header border-0 pt-3">
3
+ <h3 class="card-title align-items-start flex-column">
4
+ <span *ngIf="type !=='dataMismatch' && type !== 'mat'" class="card-label mb-2">{{type | titlecase}}</span>
5
+ <span *ngIf="type ==='dataMismatch'" class="card-label mb-2">Data Mismatch</span>
6
+ <span *ngIf="type ==='mat'" class="card-label mb-2">Employee Mat</span>
7
+
8
+ <!-- <span class="text-sub mb-2">Last updated 1 hour ago</span> -->
9
+ </h3>
10
+ <div class="card-toolbar">
11
+ <div *ngIf="!assignTicket" class="d-flex">
12
+ <div class="d-flex align-items-center position-relative my-1">
13
+ <span class="svg-icon svg-icon-1 position-absolute ms-3">
14
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
15
+ <rect opacity="0.5" x="17.0365" y="15.1223" width="8.15546" height="2" rx="1"
16
+ transform="rotate(45 17.0365 15.1223)" fill="currentColor"></rect>
17
+ <path
18
+ d="M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z"
19
+ fill="currentColor"></path>
20
+ </svg>
21
+ </span>
22
+ <input type="text" class="form-control ps-14 me-2" placeholder="Search" autocomplete="off"
23
+ (change)="searchData()" [(ngModel)]="searchValue" />
24
+ <lib-filters *ngIf="users.userType === 'tango' && userList?.length || users.userType === 'client' && storeList?.length" [dataObject]="dataObject"
25
+ (appliedFilters)="applyFilters($event)"></lib-filters>
26
+
27
+ <button type="button" *ngIf="!noData&&!loading" (click)="exportXLSX()"
28
+ class="btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val">
29
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
30
+ <path
31
+ d="M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5"
32
+ stroke="#344054" stroke-width="1.67" stroke-linecap="round" stroke-linejoin="round" />
33
+ </svg>
34
+ <span class="ms-2">Export</span>
35
+ </button>
36
+ </div>
37
+ </div>
38
+ <div *ngIf="assignTicket" class="d-flex">
39
+ <button type="button" (click)="addAssignTicket()"
40
+ class="btn mx-2 btn-primary rounded-3 text-nowrap border-val">
41
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
42
+ <path d="M9.99984 4.1665V15.8332M4.1665 9.99984H15.8332" stroke="white" stroke-width="1.67"
43
+ stroke-linecap="round" stroke-linejoin="round" />
44
+ </svg>
45
+ <span class="ms-2 text-white">Assign Ticket</span>
46
+ </button>
47
+
48
+ </div>
49
+ </div>
50
+ </div>
51
+
52
+ <div class="card-body">
53
+
54
+
55
+ <ul *ngIf="!loading && listArray?.length && type !== 'mat' && type !== 'dataMismatch'" class="nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll">
56
+ <li class="nav-item" *ngFor="let obj of listArray.slice().reverse()" (click)="selectedTabs(obj)">
57
+ <a [ngClass]="{'active': selectedTab === obj.name}" class="nav-link cursor-pointer no-border me-2">
58
+ {{obj.name | titlecase}} <span class="mx-2"
59
+ [ngClass]="selectedTab === obj.name ? 'text-border-priamry' : 'text-border'">{{obj.count}}</span>
60
+ </a>
61
+ </li>
62
+ </ul>
63
+ <ul *ngIf="!loading && listArray?.length && type === 'dataMismatch'" class="nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll">
64
+ <li class="nav-item" *ngFor="let obj of listArray.slice().reverse()" (click)="selectedTabs(obj)">
65
+ <a [ngClass]="selectedTab === transformName(obj.name) ? 'active' : ''" class="nav-link cursor-pointer no-border me-2">
66
+ {{obj.name | titlecase}} <span class="mx-2"
67
+ [ngClass]="selectedTab === transformName(obj.name) ? 'text-border-priamry' : 'text-border'">{{obj.count}}</span>
68
+ </a>
69
+ </li>
70
+ </ul>
71
+ <div *ngIf="loading" class="row loader d-flex justify-content-center align-items-center">
72
+ <div class="shimmer">
73
+ <div class="wrapper">
74
+ <div class="stroke animate title"></div>
75
+ <div class="stroke animate link"></div>
76
+ <div class="stroke animate description"></div>
77
+ </div>
78
+ </div>
79
+ <div class="shimmer">
80
+ <div class="wrapper">
81
+ <div class="stroke animate title"></div>
82
+ <div class="stroke animate link"></div>
83
+ <div class="stroke animate description"></div>
84
+ </div>
85
+ </div>
86
+ </div>
87
+ <div *ngIf="noData" class="row">
88
+ <div class="col-lg-12 mb-3">
89
+ <div class="card-body d-flex justify-content-center align-items-center flex-column">
90
+ <img class="img-src" src="./assets/tango/Icons/Nodata.svg" alt="">
91
+ </div>
92
+ </div>
93
+ </div>
94
+ <div *ngIf="!loading && !noData" class="table-responsive mt-5">
95
+ <table class="table bottom-border text-nowrap ">
96
+ <thead>
97
+ <tr>
98
+ <th class="cursor-pointer" >
99
+
100
+ <input *ngIf="this.users.userType ==='tango'"
101
+ class="form-check-input cursor-pointer me-4" type="checkbox" [(ngModel)]="selectAll"
102
+ (click)="selectAllStore($event)"> <span class="cursor-pointer" (click)="onSort('ticketId')"> Ticket ID <svg
103
+ [ngClass]="sortedColumn === 'ticketId' && sortDirection === 1 ? 'rotate' : ''"
104
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
105
+ <path
106
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
107
+ [attr.stroke]="sortedColumn === 'ticketId' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
108
+ stroke-linejoin="round" />
109
+ </svg></span>
110
+ </th>
111
+ <th class="cursor-pointer" *ngIf="type !=='dataMismatch'" (click)="onSort('issueDate')"> Created Date
112
+ <svg [ngClass]="sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''"
113
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
114
+ <path
115
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
116
+ [attr.stroke]="sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
117
+ stroke-linejoin="round" />
118
+ </svg></th>
119
+ <th class="cursor-pointer" *ngIf="type ==='infra'" (click)="onSort('createdAt')"> Created Time
120
+ <svg [ngClass]="sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''"
121
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
122
+ <path
123
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
124
+ [attr.stroke]="sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
125
+ stroke-linejoin="round" />
126
+ </svg></th>
127
+ <th class="cursor-pointer" *ngIf="type ==='infra'" (click)="onSort('issueClosedDate')"> Closed Time
128
+ <svg [ngClass]="sortedColumn === 'issueClosedDate' && sortDirection === 1 ? 'rotate' : ''"
129
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
130
+ <path
131
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
132
+ [attr.stroke]="sortedColumn === 'issueClosedDate' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
133
+ stroke-linejoin="round" />
134
+ </svg></th>
135
+ <th class="cursor-pointer" *ngIf="type ==='dataMismatch'" class="cursor-pointer" (click)="onSort('createdAt')"> Created Date
136
+ <svg [ngClass]="sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''"
137
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
138
+ <path
139
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
140
+ [attr.stroke]="sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
141
+ stroke-linejoin="round" />
142
+ </svg></th>
143
+ <th class="cursor-pointer" *ngIf="type ==='dataMismatch'" class="cursor-pointer" ><span (click)="onSort('issueDate')">Issue Date
144
+ <svg [ngClass]="sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''"
145
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
146
+ <path
147
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
148
+ [attr.stroke]="sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
149
+ stroke-linejoin="round" />
150
+ </svg></span>
151
+ </th>
152
+ <th class="cursor-pointer" *ngIf="(gs.userAccess | async)?.userType === 'tango'" class="cursor-pointer" (click)="onSort('clientName')">Brand Name<svg
153
+ [ngClass]="sortedColumn === 'clientName' && sortDirection === 1 ? 'rotate' : ''"
154
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
155
+ <path
156
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
157
+ [attr.stroke]="sortedColumn === 'clientName' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
158
+ stroke-linejoin="round" />
159
+ </svg></th>
160
+ <th class="cursor-pointer" *ngIf="(gs.userAccess | async)?.userType === 'tango'" class="cursor-pointer" (click)="onSort('clientId')">Brand ID<svg
161
+ [ngClass]="sortedColumn === 'clientId' && sortDirection === 1 ? 'rotate' : ''"
162
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
163
+ <path
164
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
165
+ [attr.stroke]="sortedColumn === 'clientId' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
166
+ stroke-linejoin="round" />
167
+ </svg></th>
168
+ <th class="cursor-pointer" (click)="onSort('storeName')">Store Name<svg
169
+ [ngClass]="sortedColumn === 'storeName' && sortDirection === 1 ? 'rotate' : ''"
170
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
171
+ <path
172
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
173
+ [attr.stroke]="sortedColumn === 'storeName' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
174
+ stroke-linejoin="round" />
175
+ </svg></th>
176
+ <th class="cursor-pointer" (click)="onSort('storeId')">Store ID<svg
177
+ [ngClass]="sortedColumn === 'storeId' && sortDirection === 1 ? 'rotate' : ''"
178
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
179
+ <path
180
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
181
+ [attr.stroke]="sortedColumn === 'storeId' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
182
+ stroke-linejoin="round" />
183
+ </svg></th>
184
+ <th class="cursor-pointer" *ngIf="this.users.userType ==='tango' && (type ==='infra'||type ==='dataMismatch'||type ==='mat')" (click)="onSort('userName')">Resolved By<svg [ngClass]="sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''"
185
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
186
+ <path
187
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
188
+ [attr.stroke]="sortedColumn === 'userName' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
189
+ stroke-linejoin="round" />
190
+ </svg></th>
191
+ <th class="cursor-pointer" *ngIf="this.users.userType ==='tango' && type ==='installation'" (click)="onSort('userName')">Installed By<svg [ngClass]="sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''"
192
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
193
+ <path
194
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
195
+ [attr.stroke]="sortedColumn === 'userName' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
196
+ stroke-linejoin="round" />
197
+ </svg></th>
198
+ <th *ngIf="type ==='dataMismatch'" class="cursor-pointer" (click)="onSort('issueType')">Issue Type
199
+ <svg [ngClass]="sortedColumn === 'issueType' && sortDirection === 1 ? 'rotate' : ''"
200
+ xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"
201
+ fill="none">
202
+ <path
203
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
204
+ [attr.stroke]="sortedColumn === 'issueType' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
205
+ stroke-linejoin="round" />
206
+ </svg>
207
+ </th>
208
+ <th *ngIf="type ==='dataMismatch'" class="cursor-pointer" (click)="onSort('type')">Query Type
209
+ <svg [ngClass]="sortedColumn === 'type' && sortDirection === 1 ? 'rotate' : ''"
210
+ xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"
211
+ fill="none">
212
+ <path
213
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
214
+ [attr.stroke]="sortedColumn === 'type' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
215
+ stroke-linejoin="round" />
216
+ </svg>
217
+ </th>
218
+ <th *ngIf="type ==='dataMismatch'" class="cursor-pointer" (click)="onSort('reportedFootfall')">Reported Footfall
219
+ <svg [ngClass]="sortedColumn === 'reportedFootfall' && sortDirection === 1 ? 'rotate' : ''"
220
+ xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"
221
+ fill="none">
222
+ <path
223
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
224
+ [attr.stroke]="sortedColumn === 'reportedFootfall' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
225
+ stroke-linejoin="round" />
226
+ </svg>
227
+ </th>
228
+ <th *ngIf="type ==='dataMismatch'" class="cursor-pointer" (click)="onSort('mappedCount')">Unique Images
229
+ <svg [ngClass]="sortedColumn === 'mappedCount' && sortDirection === 1 ? 'rotate' : ''"
230
+ xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"
231
+ fill="none">
232
+ <path
233
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
234
+ [attr.stroke]="sortedColumn === 'mappedCount' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
235
+ stroke-linejoin="round" />
236
+ </svg>
237
+ </th>
238
+ <th *ngIf="type ==='dataMismatch'" class="cursor-pointer" (click)="onSort('successPercentage')">Success Percentage
239
+ <svg [ngClass]="sortedColumn === 'successPercentage' && sortDirection === 1 ? 'rotate' : ''"
240
+ xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"
241
+ fill="none">
242
+ <path
243
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
244
+ [attr.stroke]="sortedColumn === 'successPercentage' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
245
+ stroke-linejoin="round" />
246
+ </svg>
247
+ </th>
248
+ <th class="cursor-pointer" *ngIf="type ==='installation'" (click)="onSort('status')">Deployed Status<svg
249
+ [ngClass]="sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''"
250
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
251
+ <path
252
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
253
+ [attr.stroke]="sortedColumn === 'status' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
254
+ stroke-linejoin="round" />
255
+ </svg></th>
256
+ <th *ngIf="type ==='dataMismatch' ||type ==='mat'|| type ==='infra'" class="cursor-pointer" (click)="onSort('status')">Status<svg
257
+ [ngClass]="sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''"
258
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
259
+ <path
260
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
261
+ [attr.stroke]="sortedColumn === 'status' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
262
+ stroke-linejoin="round" />
263
+ </svg></th>
264
+ <!-- added config and total downtime as per the prioduct team requirement -->
265
+ <th *ngIf="type==='infra'">Configured Ticket Time
266
+ </th>
267
+
268
+ <th *ngIf="type==='infra'" >Total Downtime
269
+ </th>
270
+ <!-- -->
271
+
272
+ <th *ngIf="type !== 'mat' && type !== 'dataMismatch'" class="cursor-pointer" (click)="onSort('primaryIssue')">Primary Issues<svg
273
+ [ngClass]="sortedColumn === 'primaryIssue' && sortDirection === 1 ? 'rotate' : ''"
274
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
275
+ <path
276
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
277
+ [attr.stroke]="sortedColumn === 'primaryIssue' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
278
+ stroke-linejoin="round" />
279
+ </svg></th>
280
+ <th *ngIf="type !== 'mat' && type !== 'dataMismatch'" class="cursor-pointer" (click)="onSort('secondaryIssue')">Secondary Issues<svg
281
+ [ngClass]="sortedColumn === 'secondaryIssue' && sortDirection === 1 ? 'rotate' : ''"
282
+ width="16" height="16" viewBox="0 0 16 16" fill="none">
283
+ <path
284
+ d="M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004"
285
+ [attr.stroke]="sortedColumn === 'secondaryIssue' ? '#00A3FF' : '#667085'" stroke-width="1.33333" stroke-linecap="round"
286
+ stroke-linejoin="round" />
287
+ </svg></th>
288
+ <th *ngIf="type!=='installation'">Actions</th>
289
+ </tr>
290
+ </thead>
291
+ <tbody>
292
+ <tr *ngFor="let obj of tableListArray">
293
+ <td>
294
+ <input *ngIf="this.users.userType ==='tango'" class="form-check-input cursor-pointer me-4 mt-3" type="checkbox" [(ngModel)]="obj.checked"
295
+ (change)="updateCheck($event,obj?.ticketId)">
296
+ <span *ngIf="type === 'dataMismatch' || type === 'mat' || type === 'infra'"
297
+ class="txt-light-primary cursor-pointer" (click)="tickets(type,obj.clientId,obj.storeId,obj.clientName)">
298
+ {{obj.ticketId}}
299
+ </span>
300
+ <span *ngIf="type === 'installation'">
301
+ {{obj.ticketId}}
302
+ </span>
303
+ </td>
304
+ <td *ngIf="type === 'dataMismatch'">
305
+ {{obj?.createdAt |
306
+ date: 'dd MMM, yyyy'}}</td>
307
+ <td *ngIf="type === 'dataMismatch'">
308
+ {{obj?.issueDate |
309
+ date: 'dd MMM, yyyy'}}</td>
310
+ <td *ngIf="type !== 'dataMismatch'">
311
+ {{obj?.createdAt |
312
+ date: 'dd MMM, yyyy'}}
313
+ </td>
314
+ <td *ngIf="type === 'infra'">
315
+ {{obj?.createdAt |
316
+ date: 'hh:mm a' | uppercase}}
317
+ </td>
318
+ <td *ngIf="type === 'infra'">
319
+ {{obj?.issueClosedDate?(obj?.issueClosedDate |
320
+ date: 'hh:mm a' | uppercase):"--"}}
321
+ </td>
322
+ <td *ngIf="this.users.userType ==='tango'">
323
+ <div class="table-title cursor-pointer" (click)="clientTickets(obj.clientId,obj.storeId,obj.clientName)">
324
+ <span class="txt-light-primary">
325
+ {{obj.clientName}}
326
+ </span>
327
+ </div>
328
+ </td>
329
+ <td *ngIf="this.users.userType ==='tango'">{{obj.clientId}}
330
+ </td>
331
+ <td>
332
+ <div class="table-title cursor-pointer" (click)="storeTickets(obj.clientId,obj.storeId,obj.clientName)">
333
+ <span class="txt-light-primary">
334
+ {{obj.storeName}}
335
+ </span>
336
+ </div>
337
+ </td>
338
+ <td>{{obj.storeId}}
339
+ </td>
340
+
341
+ <td *ngIf="this.users.userType ==='tango'">
342
+ <div class="table-title cursor-pointer" >
343
+ <span >
344
+ {{obj.userName}}
345
+ </span>
346
+ </div>
347
+ </td>
348
+ <td *ngIf="type ==='dataMismatch' && obj.issueType ==='lowcount'" >Low Count</td>
349
+ <td *ngIf="type ==='dataMismatch' && obj.issueType ==='highcount'">High Count</td>
350
+ <td class="text-capitalize" *ngIf="type ==='dataMismatch'">{{obj?.type ? obj?.type:'--'}}</td>
351
+ <td class="text-capitalize" *ngIf="type ==='dataMismatch'">{{obj?.reportedFootfall ? obj?.reportedFootfall:'--'}}</td>
352
+ <td class="text-capitalize" *ngIf="type ==='dataMismatch'">{{obj?.mappedCount ? obj?.mappedCount:'--'}}</td>
353
+ <td class="text-capitalize" *ngIf="type ==='dataMismatch'">{{obj?.successPercentage ? obj?.successPercentage:'--'}}</td>
354
+ <td *ngIf="type==='installation'">
355
+ <span *ngIf="obj.installationStatus ==='paired' || obj.installationStatus ==='onboarded'"
356
+ class="badge badge-light-primary mx-4">{{obj.installationStatus | titlecase}}</span>
357
+ <span *ngIf="obj.installationStatus ==='live'" class="badge badge-light-success mx-4">Live</span>
358
+ <span *ngIf="obj.installationStatus ==='installationfailed'"
359
+ class="badge badge-light-warning mx-4">Installationfailed</span>
360
+ <span *ngIf="obj.installationStatus ==='deployed'"
361
+ class="badge badge-light-success mx-4 text-capitalize">deployed</span>
362
+ </td>
363
+ <td *ngIf="type==='infra' || type==='mat' || type==='dataMismatch'">
364
+ <span *ngIf="obj.status ==='open'" class="badge badge-light-danger">Open</span>
365
+ <span *ngIf="obj.status ==='closed'" class="badge badge-light-success">Closed</span>
366
+ <span *ngIf="obj.status ==='inprogress'" class="badge badge-light-primary">In
367
+ Progress</span>
368
+ </td>
369
+ <td *ngIf="type==='infra'">
370
+ {{obj.configuredDownTime?obj.configuredDownTime*60:0 || 0 }} {{obj.configuredDownTime > 1? 'mins' : 'min'}}
371
+ </td>
372
+ <td *ngIf="type==='infra'">
373
+ {{obj.totalDownTime || 0 }} {{obj.totalDownTime > 1? 'mins' : 'min'}}
374
+ </td>
375
+ <td *ngIf="type==='installation' || type==='infra'">
376
+ <div>
377
+ <span *ngIf="obj.primaryIssue !=='-'">{{obj.primaryIssue ? obj.primaryIssue :'Issue not identified'}}</span>
378
+ <span *ngIf="obj.primaryIssue ==='-'">Issue not identified</span>
379
+ </div>
380
+ </td>
381
+ <td *ngIf="type==='installation' || type==='infra'">
382
+ <span *ngIf="obj.secondaryIssue">{{obj.secondaryIssue}}</span>
383
+ </td>
384
+ <td *ngIf="type==='infra' || type ==='dataMismatch'">
385
+ <span class="mx-2 cursor-pointer" *ngIf="this.users.userType ==='tango'" (click)="commentModal(obj)"><svg
386
+ xmlns="http://www.w3.org/2000/svg" width="21" height="20" viewBox="0 0 21 20" fill="none">
387
+ <path
388
+ d="M17.6431 12.5C17.6431 12.942 17.4675 13.366 17.1549 13.6785C16.8423 13.9911 16.4184 14.1667 15.9764 14.1667H5.9764L2.64307 17.5V4.16667C2.64307 3.72464 2.81866 3.30072 3.13122 2.98816C3.44378 2.67559 3.86771 2.5 4.30973 2.5H15.9764C16.4184 2.5 16.8423 2.67559 17.1549 2.98816C17.4675 3.30072 17.6431 3.72464 17.6431 4.16667V12.5Z"
389
+ stroke="#667085" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round" />
390
+ </svg></span>
391
+ <span class="mx-2 cursor-pointer" (click)="tickets(type,obj.clientId,obj.storeId,obj.clientName)"><svg
392
+ xmlns="http://www.w3.org/2000/svg" width="21" height="20" viewBox="0 0 21 20" fill="none">
393
+ <g clip-path="url(#clip0_10640_18061)">
394
+ <path
395
+ d="M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z"
396
+ stroke="#667085" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round" />
397
+ <path
398
+ d="M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z"
399
+ stroke="#667085" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round" />
400
+ </g>
401
+ <defs>
402
+ <clipPath id="clip0_10640_18061">
403
+ <rect width="20" height="20" fill="white" transform="translate(0.143066)" />
404
+ </clipPath>
405
+ </defs>
406
+ </svg></span>
407
+ </td>
408
+ <td *ngIf="type === 'mat'">
409
+ <span class="mx-2 cursor-pointer" (click)="routeToMat(obj.storeId,obj.clientId,obj.clientName)"><svg
410
+ xmlns="http://www.w3.org/2000/svg" width="21" height="20" viewBox="0 0 21 20" fill="none">
411
+ <g clip-path="url(#clip0_10640_18061)">
412
+ <path
413
+ d="M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z"
414
+ stroke="#667085" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round" />
415
+ <path
416
+ d="M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z"
417
+ stroke="#667085" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round" />
418
+ </g>
419
+ <defs>
420
+ <clipPath id="clip0_10640_18061">
421
+ <rect width="20" height="20" fill="white" transform="translate(0.143066)" />
422
+ </clipPath>
423
+ </defs>
424
+ </svg></span>
425
+
426
+ </td>
427
+
428
+
429
+ </tr>
430
+ </tbody>
431
+ </table>
432
+ </div>
433
+ <div *ngIf="!loading && !noData" class="my-3">
434
+ <lib-pagination [itemsPerPage]="pageSize" [currentPage]="currentPage" [totalItems]="totalItems"
435
+ [paginationSizes]="paginationSizes" [pageSize]="setpageSize()" (pageChange)="onPageChange($event)"
436
+ (pageSizeChange)="onPageSizeChange($event)"></lib-pagination>
437
+ </div>
438
+ </div>
439
+ </div>
@@ -0,0 +1,131 @@
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
+
11
+ .text-border {
12
+ border-radius: 16px !important;
13
+ background: var(--Gray-100, #F2F4F7) !important;
14
+ color: var(--Gray-700, #344054);
15
+ text-align: center;
16
+ font-size: 14px;
17
+ font-weight: 500;
18
+ line-height: 20px;
19
+ padding: 2px 10px !important;
20
+ }
21
+
22
+ .text-border-priamry{
23
+ border-radius: 16px;
24
+ background: var(--Primary-50, #EAF8FF);
25
+ color: var(--Primary-700, #009BF3);
26
+ text-align: center;
27
+ font-size: 14px;
28
+ font-weight: 500;
29
+ line-height: 20px;
30
+ padding: 2px 10px !important;
31
+ mix-blend-mode: multiply !important;
32
+ }
33
+
34
+ .text-sub {
35
+ color: var(--Gray-500, #667085) !important;
36
+ font-family: 'Inter';
37
+ font-size: 14px !important;
38
+ font-weight: 400 !important;
39
+ line-height: 20px;
40
+ }
41
+
42
+ .border-val {
43
+ color: var(--Gray-700, #344054) !important;
44
+ font-family: 'Inter';
45
+ font-size: 14px !important;
46
+ font-weight: 600 !important;
47
+ line-height: 20px;
48
+ text-transform: capitalize;
49
+ }
50
+
51
+ td {
52
+ vertical-align: middle;
53
+ line-height: 35px !important;
54
+ }
55
+
56
+ .table-title-primary {
57
+ color: var(--Primary-700, #009BF3) !important;
58
+ font-weight: 500 !important;
59
+ }
60
+ .table-sub {
61
+ line-height: 30px !important;
62
+ color: var(--Gray-500, #667085) !important;
63
+ }
64
+
65
+ .txt-light-primary {
66
+ color: #009BF3 !important;
67
+ }
68
+
69
+ input[type='checkbox'] {
70
+ width: 16px !important;
71
+ height: 16px !important;
72
+ margin: 0px 5px;
73
+ border-radius: 4px !important;
74
+ -webkit-appearance: none;
75
+ -moz-appearance: none;
76
+ -o-appearance: none;
77
+ appearance: none;
78
+ outline: 1px solid var(--gray-300, #D0D5DD);
79
+ box-shadow: none;
80
+ font-size: 0.8em;
81
+ text-align: center;
82
+ line-height: 1em;
83
+ background: white;
84
+ }
85
+
86
+ input[type='checkbox']:checked {
87
+ outline: 1px solid var(--primary-600, #00A3FF);
88
+ background-color: var(--primary-50, #EAF8FF);
89
+ }
90
+
91
+ input[type='checkbox']:checked:after {
92
+ content: '';
93
+ transform: rotate(45deg);
94
+ border-bottom: 2px solid #00A3FF;
95
+ border-right: 2px solid #00A3FF;
96
+ display: inline-block;
97
+ width: 0.2em;
98
+ padding-left: 0px;
99
+ padding-top: 9px;
100
+ padding-right: 4px;
101
+ }
102
+
103
+ .img-src{
104
+ width:25%;
105
+ height:20%
106
+ }
107
+
108
+ .rotate {
109
+ rotate: 180deg;
110
+ transition: 1s;
111
+ }
112
+ .viewbutton{
113
+ border-radius: 8px;
114
+ border: 1px solid var(--Gray-300, #D0D5DD);
115
+ box-shadow: 0px 1px 2px 0px rgba(16, 24, 40, 0.05);
116
+ // width: 56px;
117
+ padding: 10px 16px;
118
+ justify-content: center;
119
+ align-items: center;
120
+ gap: 10px;
121
+ color: var(--Gray-700, #344054);
122
+ font-family: 'Inter';
123
+ font-size: 12px;
124
+ font-weight: 600;
125
+ }
126
+
127
+ .horizontal-scroll {
128
+ overflow-x: auto; /* Enable horizontal scrolling */
129
+ overflow-y: hidden; /* Disable vertical scrolling */
130
+ white-space: nowrap; /* Prevents content from wrapping */
131
+ }
@@ -0,0 +1,23 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { TicketsComponent } from './tickets.component';
4
+
5
+ describe('TicketsComponent', () => {
6
+ let component: TicketsComponent;
7
+ let fixture: ComponentFixture<TicketsComponent>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ declarations: [TicketsComponent]
12
+ })
13
+ .compileComponents();
14
+
15
+ fixture = TestBed.createComponent(TicketsComponent);
16
+ component = fixture.componentInstance;
17
+ fixture.detectChanges();
18
+ });
19
+
20
+ it('should create', () => {
21
+ expect(component).toBeTruthy();
22
+ });
23
+ });