tango-app-ui-analyse-zone 3.7.1-beta.4-demo → 3.7.1-beta.4-demo2
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.
- package/esm2022/lib/components/zone-v2/customer-journey/customer-journey.component.mjs +4 -3
- package/esm2022/lib/components/zone-v2/store-heatmap/store-heatmap.component.mjs +3 -3
- package/esm2022/lib/components/zone-v2/summary-table/summary-table.component.mjs +3 -3
- package/fesm2022/tango-app-ui-analyse-zone.mjs +7 -6
- package/fesm2022/tango-app-ui-analyse-zone.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tango-app-ui-analyse-zone.mjs","sources":["../../../projects/tango-analyse-zone/src/lib/components/services/zone.service.ts","../../../projects/tango-analyse-zone/src/lib/components/overallcards/overallcards.component.ts","../../../projects/tango-analyse-zone/src/lib/components/overallcards/overallcards.component.html","../../../projects/tango-analyse-zone/src/lib/components/top-performing-zones/top-performing-zones.component.ts","../../../projects/tango-analyse-zone/src/lib/components/top-performing-zones/top-performing-zones.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-summary-table/zone-summary-table.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-summary-table/zone-summary-table.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/concentrationheatmap/concentrationheatmap.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/concentrationheatmap/concentrationheatmap.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/zone-concentration.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/zone-concentration.component.html","../../../projects/tango-analyse-zone/src/lib/components/segmentation/segmentation.component.ts","../../../projects/tango-analyse-zone/src/lib/components/segmentation/segmentation.component.html","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client459/interation-table-client459.component.ts","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client459/interation-table-client459.component.html","../../../projects/tango-analyse-zone/src/lib/components/services/zonev2.service.ts","../../../projects/tango-analyse-zone/src/lib/components/customer-journey-chart/customer-journey-chart.component.ts","../../../projects/tango-analyse-zone/src/lib/components/customer-journey-chart/customer-journey-chart.component.html","../../../projects/tango-analyse-zone/src/lib/components/tango-analyse-zone/tango-analyse-zone.component.ts","../../../projects/tango-analyse-zone/src/lib/components/tango-analyse-zone/tango-analyse-zone.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zones-cards/zones-cards.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zones-cards/zones-cards.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-heatmap.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-heatmap.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/reactive-select/reactive-select.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/reactive-select/reactive-select.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/customer-journey/customer-journey.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/customer-journey/customer-journey.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/top-performing/top-performing.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/top-performing/top-performing.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/summary-table/summary-table.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/summary-table/summary-table.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zone-v2.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zone-v2.component.html","../../../projects/tango-analyse-zone/src/lib/tango-analyse-zone-routing.module.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory-view/image-directory-view.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory-view/image-directory-view.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory/image-directory.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory/image-directory.component.html","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client430/interation-table-client430.component.ts","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client430/interation-table-client430.component.html","../../../projects/tango-analyse-zone/src/lib/components/passerby-table/passerby-table.component.ts","../../../projects/tango-analyse-zone/src/lib/components/passerby-table/passerby-table.component.html","../../../projects/tango-analyse-zone/src/lib/tango-analyse-zone.module.ts","../../../projects/tango-analyse-zone/src/public-api.ts","../../../projects/tango-analyse-zone/src/tango-app-ui-analyse-zone.ts"],"sourcesContent":["import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable, OnDestroy, } from '@angular/core';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { BehaviorSubject, Observable, Subject, takeUntil, catchError, map,throwError, ReplaySubject } from 'rxjs';\r\nimport * as FileSaver from 'file-saver';\r\nimport * as XLSX from 'xlsx';\r\n \r\nconst EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\r\nconst EXCEL_EXTENSION = '.xlsx';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ZoneService implements OnDestroy {\r\n zoneAnalysisV1Url:any;\r\n trafficApiUrl:any;\r\n private reloadDataSubject = new BehaviorSubject<boolean>(false);\r\n reloadData$ = this.reloadDataSubject.asObservable();\r\n zoneSegmentation = new BehaviorSubject<any>(null);\r\n constructor(private http: HttpClient, private gs: GlobalStateService) {\r\n this.gs.environment.pipe(takeUntil(this.destroy$)).subscribe((env) => {\r\n if (env) {\r\n this.zoneAnalysisV1Url = env.zoneAnalysisV1Url;\r\n this.trafficApiUrl = env.trafficApiUrl;\r\n }\r\n });\r\n }\r\n triggerReload() {\r\n this.reloadDataSubject.next(true);\r\n }\r\n public exportAsExcelFile(json: any[], excelFileName: string): void {\r\n const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);\r\n const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };\r\n const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });\r\n this.saveAsExcelFile(excelBuffer, excelFileName);\r\n }\r\n \r\n public saveAsExcelFile(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + 'list'+ EXCEL_EXTENSION);\r\n }\r\n \r\n public saveAsTemplate(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n private readonly destroy$ = new Subject();\r\n\r\nngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n}\r\n\r\n zoneConcentrationTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneConcentrationSummaryTable_v1`, data)\r\n }\r\n // zoneConcentrationTableDataExport( data:any):Observable<any>{\r\n // return this.http.post(`${this.zoneAnalysisV1Url}/zoneConcentrationSummaryTable_v1`, data, {responseType: 'arraybuffer'})\r\n // }\r\n getOverallStoreConcentrationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneHeatmapDatas_v1`, data)\r\n }\r\n getOverallStoreHeatmapDates( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneHeatmapAvailableDates_v1`, data)\r\n }\r\n getCardData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/cardsAgeAnalysis_v1`, data)\r\n }\r\n getTopPerformingZonesData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/topPerformingZones_v1`, data)\r\n }\r\n getTopPerformingStoresTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/topPerformingStores_v1`, data)\r\n }\r\n getTopPerformingStoresTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/topPerformingStores_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getSummaryTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSummaryTable_v1`, data)\r\n }\r\n getSummaryTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSummaryTable_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getSegmentationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentation_v1`, data)\r\n }\r\n getSegmentationDataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentation_v1Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getInterationTable430Data( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_430`, data)\r\n }\r\n getInterationTable430DataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_430Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getInterationTable459Data( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_459`, data)\r\n }\r\n getInterationTable459DataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_459`, data, {responseType: 'arraybuffer'})\r\n }\r\n zoneInteractionTableExport_430( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTableExport_430`, data, {responseType: 'arraybuffer'})\r\n }\r\n zoneConcentrationTableDataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneConcentrationTableExport`, data, {responseType: 'arraybuffer'})\r\n }\r\n\r\n zonesegmentationTable( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentationTable_v1`, data)\r\n }\r\n getZoneSegmentationTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentationTableExport_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getPasserByTable430Data( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zonePasserByTable_v1`, data)\r\n }\r\n getPasserByTable430DataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zonePasserByTable_430Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getInteractionTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/interactionTable_v1`, data)\r\n }\r\n getInteractionTable430Export( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/interactionTable_430Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getZonewiseCustomerFunnelData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/ZonewiseCustomerFunnel_v1`, data)\r\n }\r\n getZonewiseCustomerFunnelExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/ZonewiseCustomerFunnel_Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getCheckTodayReportStatus(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.trafficApiUrl}/checkTodayReportStatus`, params);\r\n }\r\n private handleError(error: HttpErrorResponse): Observable<never> {\r\n return throwError(\r\n () => new Error(\"Something bad happened; please try again later\")\r\n );\r\n }\r\n\r\n}\r\n","import { ChangeDetectorRef, Component, NgZone, OnDestroy, OnInit } from '@angular/core';\r\nimport * as am5 from '@amcharts/amcharts5';\r\nimport * as am5percent from '@amcharts/amcharts5/percent';\r\nimport * as am5themes_Animated from '@amcharts/amcharts5/themes/Animated';\r\nimport { skip, takeUntil } from 'rxjs/operators';\r\nimport { Subject, debounceTime} from 'rxjs';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\n\r\n@Component({\r\n selector: 'lib-overallcards',\r\n templateUrl: './overallcards.component.html',\r\n styleUrl: './overallcards.component.scss',\r\n})\r\nexport class OverallcardsComponent implements OnDestroy,OnInit {\r\n cardData: any = {};\r\n genderAnalysis: any[] = [];\r\n ageAnalysis: any[] = [];\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n private genderroot!: am5.Root;\r\n private destroy$ = new Subject<void>();\r\n constructor(private zone: NgZone,private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n zoneName:any='Overall Store';\r\n clientData:any;\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n setTimeout(()=>{\r\n const clientData:any = JSON.parse(localStorage.getItem(\"client-details\") || \"{}\");\r\n this.clientData = clientData\r\n },100)\r\n this.changeDetector.detectChanges();\r\n // Check if ZoneService is defined and subscribe only once\r\n if (this.ZoneService?.zoneSegmentation) {\r\n this.ZoneService.zoneSegmentation\r\n .pipe(skip(1), takeUntil(this.destroy$)) // Skip the initial emission\r\n .subscribe((zoneData: any) => {\r\n this.zoneName = zoneData;\r\n this.getZoneSegmentation();\r\n this.getCardData();\r\n });\r\n }\r\n });\r\n \r\n \r\n }\r\n \r\n\r\n ngOnDestroy(): void {\r\n // this.zone.runOutsideAngular(() => {\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n // });\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n genderchart() {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"genderchartdiv\");\r\n if (!chartDiv) {\r\n // console.error(\"Could not find HTML element with id `genderchartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n this.genderroot = am5.Root.new('genderchartdiv');\r\n \r\n const chart = this.genderroot.container.children.push(\r\n am5percent.PieChart.new(this.genderroot, {\r\n endAngle: 270,\r\n innerRadius: am5.percent(60)\r\n })\r\n );\r\n \r\n const series = chart.series.push(\r\n am5percent.PieSeries.new(this.genderroot, {\r\n valueField: 'value',\r\n categoryField: 'category',\r\n endAngle: 270,\r\n alignLabels: false\r\n })\r\n );\r\n \r\n series.states.create('hidden', {\r\n endAngle: -90\r\n });\r\n \r\n series.labels.template.setAll({\r\n textType: 'circular',\r\n visible: false,\r\n centerX: 0,\r\n centerY: 0\r\n });\r\n\r\n series.data.setAll(this.genderAnalysis); \r\n const legend = this.genderroot.container.children.push(\r\n am5.Legend.new(this.genderroot, {\r\n x: am5.percent(50),\r\n centerX: am5.percent(50),\r\n y: am5.percent(95),\r\n layout: this.genderroot.horizontalLayout,\r\n })\r\n );\r\n\r\n legend.labels.template.setAll({\r\n text: \"{category}: {value}%\",\r\n fill: am5.color(\"#464E5F\"),\r\n fontFamily: \"Inter\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n \r\n });\r\n \r\n legend.valueLabels.template.setAll({\r\n text: \"{value}%\",\r\n fontWeight: \"700\",\r\n fontFamily: \"Inter\",\r\n fontSize: \"14px\",\r\n fill: am5.color(\"#464E5F\"),\r\n });\r\n legend.itemContainers.template.events.on(\"click\", (ev:any) => { ev.stopPropagation(); });\r\n legend.data.setAll(series.dataItems);\r\n \r\n // Animation\r\n series.appear(1000, 100);\r\n }, 100);\r\n }\r\n \r\n\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n zoneName:this.zoneName\r\n };\r\n\r\n this.ZoneService.getCardData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response.data.card;\r\n this.genderAnalysis = response.data.genderAnalysis;\r\n this.genderAnalysis.forEach((item:any) => {\r\n item.value = Math.round(item.value)\r\n })\r\n this.ageAnalysis = response.data.ageAnalysis;\r\n setTimeout(() => {\r\n this.genderchart(); // Call this method after data is set\r\n }, 200);\r\n \r\n this.cardDataLoading = false;\r\n this.cardNoData = false;\r\n } else {\r\n this.cardData = []\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = []\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getZoneSegmentation();\r\n }\r\n\r\n searchField(): void {\r\n this.headerData.search = this.searchInput;\r\n this.getZoneSegmentation();\r\n }\r\n searchInput:any='';\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n getZoneSegmentionData:any=[];\r\n segmentationDataLoading =false;\r\n segmentationNoData =false;\r\n getZoneSegmentation(){\r\n this.segmentationDataLoading =true;\r\n this.segmentationNoData =false;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n zoneName: this.zoneName,\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export:false\r\n };\r\n // };\r\n this.ZoneService.zonesegmentationTable(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n if(res && res.code === 200){\r\n this.getZoneSegmentionData = res?.data?.zoneConcentrationData;\r\n this.segmentationDataLoading =false;\r\n this.segmentationNoData =false;\r\n } else{\r\n this.segmentationDataLoading =false;\r\n this.segmentationNoData =true;\r\n }\r\n },\r\n error: (e) => {\r\n this.segmentationDataLoading =false;\r\n this.segmentationNoData =true;\r\n }\r\n })\r\n \r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n zoneName: this.zoneName,\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export:true\r\n };\r\n this.ZoneService.getZoneSegmentationTableExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Zone Segmentation ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n}\r\n","<div class=\"row\">\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"col-lg-4\">\r\n <div class=\"card\">\r\n <div class=\"card-header py-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"subtext\">Overall Store Footfall <span\r\n ngbTooltip=\"Unique Store Footfall Walk-ins\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span> \r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"headcount\">{{ cardData.oveallZoneFootfall?.count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row my-2 justify-content-evenly\">\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.bounced?.rate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Bounced Footfall Rate <span\r\n [ngbTooltip]=\"'Percentage of walk-ins who spent less than ' + (clientData?.bouncedLimit?.value ? clientData?.bouncedLimit?.value :clientData?.bouncedLimitValue || '') + ' mins'\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.engagers?.rate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Engagers Rate <span\r\n [ngbTooltip]=\"'Percentage of walk-ins who spent more than ' + (clientData?.bouncedLimit?.value ? clientData?.bouncedLimit?.value : clientData?.bouncedLimitValue || '') + ' mins'\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n </div>\r\n <div class=\"row my-2 justify-content-evenly\">\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} Mins</div>\r\n <div class=\"subtext mt-3\">Average Dwell Time <span\r\n ngbTooltip=\"Avg time spent by the engagers inside the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.concentration?.rate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Concentration Rate <span\r\n ngbTooltip=\"The proportion of walk-ins remaining in key areas\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"card\">\r\n <div class=\"headtext p-3\">Gender Analysis</div>\r\n <div class=\"card-body p-0\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"genderchartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"card\">\r\n <div class=\"headtext p-3\">Age Analysis</div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Age Range</th>\r\n <th>Percentage of FF</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of ageAnalysis\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">\r\n {{ item.category }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row\">\r\n <div class=\"col-6 mt-2\">\r\n <ngb-progressbar class=\"mb-3\" height=\"10px\" type=\"primary\" [value]=\"item.value\" />\r\n </div>\r\n <div class=\"col-6\">\r\n {{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}%\r\n \r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div> -->\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Age Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"getZoneSegmentionData?.length > 0\" class=\"col-4 h-auto\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 ps-3 pe-0 min-h-50px\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <div class=\"headtext\">Zone Segmentation</div>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button *ngIf=\"!segmentationNoData && !segmentationDataLoading\" type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!getZoneSegmentionData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"headtext p-3\">Zone Segmentation</div> -->\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-1 table-responsive agerangescroll1\">\r\n <table *ngIf=\"!segmentationDataLoading && !segmentationNoData\" class=\"table bottom-border text-nowrap\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Footfall\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n </div></th>\r\n <th> <div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Avg.Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('Trolley')\">\r\n Trolley\r\n <svg [ngClass]=\"sortColumName === 'Trolley' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'Trolley' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('Basket')\">\r\n Basket\r\n <svg [ngClass]=\"sortColumName === 'Basket' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'Basket' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"h-45px\">\r\n <tr *ngFor=\"let item of getZoneSegmentionData\">\r\n <td>\r\n <div class=\"table-title-primary\">{{ item.zoneName }}</div>\r\n </td>\r\n <td>\r\n {{ item.footfallCount }}\r\n </td>\r\n <td>\r\n {{ item.avgDwellTime }} mins\r\n </td>\r\n <td>\r\n {{ item.Trolley }}%\r\n </td>\r\n <td>\r\n {{ item.Basket }}%\r\n </td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"segmentationDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div> \r\n </div>\r\n <!-- <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div> -->\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"segmentationNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Segmentation</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectorRef, Component, ElementRef, NgZone, OnDestroy, OnInit } from '@angular/core';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\n\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { FormBuilder } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'lib-top-performing-zones',\r\n templateUrl: './top-performing-zones.component.html',\r\n styleUrl: './top-performing-zones.component.scss'\r\n})\r\nexport class TopPerformingZonesComponent implements OnInit,OnDestroy{\r\n private zoneroot: am5.Root;\r\n topPerformingStores: any[] = []; \r\n topPerformingZones: any[] = []; \r\n searchInput: string = '';\r\n searchDisabled: boolean = false;\r\n analysisLoading: boolean = true;\r\n analysisNoData: boolean = false;\r\n topperformingstoresLoading: boolean = true;\r\n topperformingstoresNodata: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n\r\n\r\n // invoiceNoData: boolean = true;\r\n // invoiceLoading: boolean = false;\r\n // isExport: boolean = false;\r\n // clientId: string = '';\r\n // userType:any = '';\r\n private readonly destroy$ = new Subject();\r\n constructor(private zone: NgZone, public modalService: NgbModal, private fb: FormBuilder, private ZoneService: ZoneService, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService,private elementRef: ElementRef,private router: Router,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getTopPerformingZones();\r\n this.getTopPerformingStores();\r\n // this.zonefootfall();\r\n})\r\n\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // this.zone.runOutsideAngular(() => {\r\n if (this.zoneroot) {\r\n this.zoneroot.dispose();\r\n }\r\n // });\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n\r\n getTopPerformingZones(): void {\r\n this.analysisLoading = true;\r\n this.analysisNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n };\r\n \r\n this.ZoneService.getTopPerformingZonesData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.analysisLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingZones = response.data.topPerformingZones;\r\n this.analysisLoading = false;\r\n this.analysisNoData = false;\r\n setTimeout(() => {\r\n this.zonefootfall(); \r\n }, 500);\r\n } else {\r\n this.analysisLoading = false;\r\n this.analysisNoData = true;\r\n }\r\n },\r\n error => {\r\n this.topPerformingZones = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n zonefootfall() {\r\n // setTimeout(() => {\r\n const chartDiv = document.getElementById(\"zonechartdiv\");\r\n if (!chartDiv) {\r\n // console.error(\"Could not find HTML element with id `zonechartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.zoneroot) {\r\n this.zoneroot.dispose();\r\n }\r\n \r\n this.zoneroot = am5.Root.new(\"zonechartdiv\");\r\n \r\n // Create chart\r\n const chart = this.zoneroot.container.children.push(am5xy.XYChart.new(this.zoneroot, {\r\n panX: true,\r\n panY: true,\r\n wheelX: \"none\",\r\n wheelY: \"none\",\r\n paddingLeft: 0\r\n }));\r\n \r\n // Hide zoom-out button\r\n chart.zoomOutButton.set(\"forceHidden\", true);\r\n \r\n // Create axes\r\n const xRenderer = am5xy.AxisRendererX.new(this.zoneroot, {\r\n minGridDistance: 30,\r\n minorGridEnabled: true\r\n });\r\n xRenderer.labels.template.setAll({\r\n rotation: -45,\r\n centerY: am5.p100,\r\n centerX: am5.p50,\r\n paddingRight: 15,\r\n textAlign: \"center\"\r\n });\r\n xRenderer.grid.template.set(\"visible\", false);\r\n \r\n const xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(this.zoneroot, {\r\n maxDeviation: 0.3,\r\n categoryField: \"zoneName\", // Change from \"country\" to \"zoneName\"\r\n renderer: xRenderer\r\n }));\r\n \r\n const yAxis = chart.yAxes.push(am5xy.ValueAxis.new(this.zoneroot, {\r\n maxDeviation: 0.1,\r\n min: 0,\r\n renderer: am5xy.AxisRendererY.new(this.zoneroot, {})\r\n }));\r\n \r\n yAxis.children.unshift(am5.Label.new(this.zoneroot, {\r\n rotation: -90,\r\n text: 'Footfall',\r\n y: am5.p50,\r\n centerX: am5.p50\r\n }));\r\n \r\n // Add series\r\n const series = chart.series.push(am5xy.ColumnSeries.new(this.zoneroot, {\r\n name: \"Footfall\",\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n valueYField: \"value\",\r\n categoryXField: \"zoneName\" // Change from \"country\" to \"zoneName\"\r\n }));\r\n \r\n // Rounded corners for columns\r\n series.columns.template.setAll({\r\n cornerRadiusTL: 0,\r\n cornerRadiusTR: 0,\r\n strokeOpacity: 0\r\n });\r\n \r\n // Add Label bullet\r\n series.bullets.push(() => {\r\n return am5.Bullet.new(this.zoneroot, {\r\n locationY: 1,\r\n sprite: am5.Label.new(this.zoneroot, {\r\n text: \"{valueYWorking.formatNumber('#.')}\",\r\n fill: this.zoneroot.interfaceColors.get(\"alternativeText\"),\r\n centerY: 0,\r\n centerX: am5.p50,\r\n populateText: true\r\n })\r\n });\r\n });\r\n series.columns.template.setAll({\r\n tooltipText: \"{categoryX}: {valueYWorking.formatNumber('#.')}\",\r\n tooltipY: am5.p50\r\n });\r\n if (this.topPerformingZones && this.topPerformingZones.length > 0) {\r\n xAxis.data.setAll(this.topPerformingZones);\r\n series.data.setAll(this.topPerformingZones);\r\n \r\n } else {\r\n // console.error(\"No data available for top performing zones\");\r\n }\r\n // }, 0);\r\n }\r\n\r\n getTopPerformingStores(): void {\r\n this.searchDisabled = true;\r\n this.topperformingstoresLoading = true;\r\n this.topperformingstoresNodata = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n\r\n this.ZoneService.getTopPerformingStoresTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.topperformingstoresLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response.data.topPerformingStores;\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n export: true,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n };\r\n\r\n this.ZoneService.getTopPerformingStoresTableExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'TopPerformingStores');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n searchField(e:any) {\r\n this.searchInput = e.target.value;\r\n this.getTopPerformingStores()\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getTopPerformingStores()\r\n }\r\n // storeView(data:any){\r\n // const datavalue: any = JSON.parse(\r\n // localStorage.getItem(\"header-filters\") || \"{}\"\r\n // );\r\n // datavalue.store = data;\r\n // localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n // this.changeDetector.detectChanges()\r\n // this.gs.dataRangeValue.next(datavalue)\r\n // this.router.navigate([\"/manage/stores/cameras\"], {\r\n // queryParams: { storeId: data},\r\n // });\r\n\r\n // }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n\r\n\r\n}\r\n\r\n","<div class=\"row\">\r\n <div class=\"col-lg-5\">\r\n <div class=\"card\">\r\n <div class=\"card-header p-4 border-0\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Zones <span\r\n ngbTooltip=\"Zones based on by the highest footfall\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span> </span>\r\n <span class=\"subratetext mt-2\">Based on Zone Footfall</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div *ngIf=\"!analysisLoading && !analysisNoData\" id=\"zonechartdiv\"></div>\r\n <ng-container *ngIf=\"analysisLoading\">\r\n <div class=\"row loader Analysiscard d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"analysisNoData && !analysisLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 Analysiscard\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-7\">\r\n <div class=\"h-100 card\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Stores <span\r\n ngbTooltip=\"Stores ranked based on the highest concentration rate\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n <span class=\"subratetext mt-2\">Based on Concentration Rate</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon invoicesearch svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path 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\" fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input type=\"text\" class=\"form-control ps-14 me-4 invoicesearch\" placeholder=\"Search...\" autocomplete=\"off\" \r\n (keyup.enter)=\"searchField($event)\" />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!topPerformingStores.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-container mx-4\">\r\n <table *ngIf=\"!topperformingstoresLoading && !topperformingstoresNodata\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('storeName')\">Store Name <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">Zone Name <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('concentrationRate')\">Concentration <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">Avg Dwell Time <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('overallFootfall')\">Overall Footfall <svg [ngClass]=\"sortColumName === 'overallFootfall' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'overallFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('zoneFootfall')\">Zone Footfall<svg [ngClass]=\"sortColumName === 'zoneFootfall' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive topstores\">\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td>\r\n <div class=\"table-title-primary cursor-pointer mb-2\" (click)=\"storeView(store.storeId)\">{{ store?.storeName || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.zoneName || '--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}} %</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}} mins</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.overallFootfall || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.zoneFootfall?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"topperformingstoresLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"topperformingstoresNodata && !topperformingstoresLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mt-18\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Stores</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> \r\n</div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { Subject, debounceTime, distinctUntilChanged, filter, takeUntil } from \"rxjs\";\r\nimport { FormControl } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'lib-zone-summary-table',\r\n templateUrl: './zone-summary-table.component.html',\r\n styleUrl: './zone-summary-table.component.scss'\r\n})\r\nexport class ZoneSummaryTableComponent {\r\n isExport: boolean = false;\r\n itemsPerPage = 10\r\n currentPage = 1\r\n totalItems = 0\r\n paginationSizes:any[] = [];\r\n pageSize = 10\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n searchInput: any =\"\";\r\n topPerformingStores: any[] = [];\r\n searchDisabled: boolean = false;\r\n invoiceList: any[] = [];\r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n headerData: any;\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n // loading: boolean = true;\r\n // noData: boolean = false;\r\n\r\n // user: any;\r\n // searchInput = new FormControl(\"\");\r\n // receivedData: string = \"stores\";\r\n // columns: any[];\r\n // sortColumName: string;\r\n // sortDirection: number;\r\n\r\n constructor(\r\n private ZoneService: ZoneService,\r\n private changeDetector: ChangeDetectorRef,\r\n public gs: GlobalStateService,public modalService: NgbModal,\r\n private router: Router,private route: ActivatedRoute,\r\n private toast: ToastService\r\n ) {}\r\n\r\n \r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getSummayTable();\r\n})\r\n \r\n }\r\n\r\n \r\n getSummayTable(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.ZoneService.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response.data.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n getSummayTable1(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.ZoneService.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response.data.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n // this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n onExport(): void {\r\n this.currentPage = 0;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: 10000,\r\n offset: this.currentPage,\r\n export: true\r\n };\r\n\r\n this.ZoneService.getSummaryTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'ZoneSummaryTable');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n }\r\n searchField(): void {\r\n this.headerData.search = this.searchInput;\r\n this.headerData.export = false;\r\n this.currentPage = 1;\r\n this.pageSize=10;\r\n this.getSummayTable();\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable();\r\n }\r\n onPageSizeChange(pageSize: any) {\r\n this.currentPage = 1;\r\n this.itemsPerPage = pageSize;\r\n this.pageSize = pageSize;\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable1()\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.currentPage = pageOffset\r\n this.getSummayTable1()\r\n }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n setPaginationSizes() {\r\n if (this.totalItems > 10) {\r\n this.paginationSizes = [10, 20, 30];\r\n } else {\r\n this.paginationSizes = [this.totalItems]; // Just one option if less than 10\r\n }\r\n this.pageSize = this.paginationSizes[0];\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Zone Summary Table</span>\r\n <span class=\"text-sub mb-2\"> From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\">\r\n </rect>\r\n <path\r\n 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\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 me-4 footfallsearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!topPerformingStores.length\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('date')\">\r\n Date\r\n <svg [ngClass]=\"sortColumName === 'date' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'date' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">\r\n Store Name\r\n <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">\r\n Store ID\r\n <svg [ngClass]=\"sortColumName === 'storeId' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Zone Conc.Rate\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Avg Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Zone FF\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('bouncedCount')\">\r\n Zone Bounced\r\n <svg [ngClass]=\"sortColumName === 'bouncedCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'bouncedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('engagersCount')\">\r\n Zone Engagers\r\n <svg [ngClass]=\"sortColumName === 'engagersCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'engagersCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('below12')\">\r\n Age Below 12\r\n <svg [ngClass]=\"sortColumName === 'below12' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'below12' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('13-19')\">\r\n Age 13-19\r\n <svg [ngClass]=\"sortColumName === '13-19' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '13-19' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('20-30')\">\r\n Age 20-30\r\n <svg [ngClass]=\"sortColumName === '20-30' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '20-30' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('31-45')\">\r\n Age 31-45\r\n <svg [ngClass]=\"sortColumName === '31-45' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '31-45' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('46-59')\">\r\n Age 46-59\r\n <svg [ngClass]=\"sortColumName === '46-59' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '46-59' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('60 above')\">\r\n Age 60+\r\n <svg [ngClass]=\"sortColumName === '60 above' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '60 above' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('maleCount')\">\r\n Male\r\n <svg [ngClass]=\"sortColumName === 'maleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'maleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('femaleCount')\">\r\n Female\r\n <svg [ngClass]=\"sortColumName === 'femaleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'femaleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td><div class=\"table-title\">{{ store?.date | date: 'd MMM, y' || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.zoneName || '--' }}</div></td>\r\n <td class=\"table-title-primary cursor-pointer\" (click)=\"storeView(store.storeId)\">{{ store.storeName || '--' }}</td>\r\n <td><div class=\"table-title\">{{ store.storeId || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div></td>\r\n <td><div class=\"table-title\">{{ store.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.footfallCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.bouncedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}</div></td>\r\n <td><div class=\"table-title\">{{ store.engagersCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.below12?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['13-19']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['20-30']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['31-45']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['46-59']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['60 above']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.maleCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}</div></td>\r\n <td><div class=\"table-title\">{{ store.femaleCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n </tr> \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Summary Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input } from '@angular/core';\r\nimport { NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'lib-concentrationheatmap',\r\n templateUrl: './concentrationheatmap.component.html',\r\n styleUrl: './concentrationheatmap.component.scss'\r\n})\r\nexport class ConcentrationheatmapComponent {\r\n @Input() imageURLV1: [];\r\n currentSlideIndex = 0;\r\n currentSlide = 0;\r\n overallStoreData: { ImageURLs: Array<{ URL: string, streamName: string }> } = { ImageURLs: [] };\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n if (this.imageURLV1) {\r\n this.overallStoreData.ImageURLs = this.imageURLV1; \r\n }\r\n\r\n \r\n\r\n}\r\nngAfterViewInit(): void {\r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n prevElement?.setAttribute('style',\"display:none\")\r\n}\r\n\r\nonSlideChange\r\n(slideEvent: NgbSlideEvent) {\r\n \r\nconst\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n let nextElement = document.querySelector('.modal-dialog .carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n if(this.currentSlide === this.overallStoreData.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else{\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n}\r\n}\r\n","<div class=\"modal-body\">\r\n<ngb-carousel #carousel1=\"ngbCarousel\" [interval]=\"0\" (slide)=\"onSlideChange($event)\" [pauseOnHover]=\"true\" *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs; let i= index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container\">\r\n <img [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n ","import { ChangeDetectorRef, Component, ElementRef, importProvidersFrom, NgZone, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { NgbCarouselConfig, NgbModal, NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport dayjs from 'dayjs';\r\nimport { ConcentrationheatmapComponent } from './concentrationheatmap/concentrationheatmap.component';\r\n\r\n@Component({\r\n selector: 'lib-zone-concentration',\r\n templateUrl: './zone-concentration.component.html',\r\n styleUrl: './zone-concentration.component.scss',\r\n providers: [NgbCarouselConfig],\r\n})\r\nexport class ZoneConcentrationComponent implements OnInit,OnDestroy {\r\n dayjs = dayjs;\r\n searchInput: any =\"\";\r\n searchDisabled: any = false;\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n zoneConcentrationData: any[] = [];\r\n overallStoreData: any = {};\r\n type: string = 'daily'; \r\n overallStoreConcentrationDates: any[] = [];\r\n selectedDate: string = '';\r\n periodzone: number = 1; \r\n customOption: boolean = false; \r\n timer_active: boolean = false; \r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n heatmapLoading: boolean = true;\r\n heatmapNoData: boolean = false;\r\n headerData: any;\r\n sortDirection: any = '';\r\n zoneName: string = '';\r\n disableDay: boolean = false;\r\n disableWeek: boolean = false;\r\n disableMonth: boolean = false;\r\n customArrow: boolean = false;\r\n isExport: boolean = false;\r\n currentSlide = 0;\r\n currentSlideIndex = 0;\r\n // startIndex: number = 0;\r\n // datesPerPage: number = 5;\r\n // visibleDates: any[] = [];\r\n // timer_active = 0;\r\n // periodzone = 1;\r\n // customOption: boolean = false;\r\n // overallStoreConcentrationDates: Array<{ zoneDate: string }> = [];\r\n private readonly destroy$ = new Subject();\r\n @ViewChild('dateList', {read:ElementRef}) dateList!:ElementRef;\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n storeIdarray: any =[];\r\n constructor(private zone: NgZone, public modalService: NgbModal, private fb: FormBuilder, private ZoneService: ZoneService, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService,private elementRef: ElementRef,) {}\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.storeIdarray = this.headerData?.stores.filter((store: any) => store.checked).map((store: any) => store.storeId)\r\n let sDate = this.dayjs(this.headerData.date.startDate);\r\n let eDate = this.dayjs(this.headerData.date.endDate);\r\n this.customArrow = false;\r\n this.type = 'daily';\r\n // if(eDate.diff(sDate,'day') < 7) {\r\n // this.disableWeek = true;\r\n // this.disableMonth = true;\r\n // // this.type = 'daily';\r\n // }\r\n // else if(eDate.diff(sDate,'day') < 27) {\r\n // this.disableMonth = true;\r\n // this.disableDay = false;\r\n // this.disableWeek = false;\r\n // // this.type = 'weekly';\r\n // }\r\n // else {\r\n // this.disableDay = false;\r\n // this.disableWeek = false;\r\n // this.disableMonth = false;\r\n // // this.type = 'monthly';\r\n // }\r\n this.getZoneConcentrationData();\r\n // this.getOverallStoreConcentrationData();\r\n // this.getOverallStoreHeatmapDates();\r\n})\r\n \r\n }\r\n\r\n getZoneConcentrationData(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"218-2\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n\r\n\r\n this.ZoneService.zoneConcentrationTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.zoneConcentrationData = response.data.zoneConcentrationData;\r\n // this.zoneName = response.data.zoneConcentrationData[0].zoneName;\r\n this.zoneName = this.zoneConcentrationData.length ? this.zoneConcentrationData[0].zoneName : '';\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\r\n this.searchDisabled = false;\r\n this.getOverallStoreHeatmapDates();\r\n } else {\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n // this.zoneConcentrationData = [];\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.zoneConcentrationData = []\r\n this.overallStoreData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.zoneConcentrationData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n export: true,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n };\r\n\r\n this.ZoneService.zoneConcentrationTableDataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'ZoneConcentrationSummary');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getZoneConcentrationData();\r\n }\r\n\r\n searchField(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"218-2\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n\r\n\r\n this.ZoneService.zoneConcentrationTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.zoneConcentrationData = response.data.zoneConcentrationData;\r\n // this.zoneName = response.data.zoneConcentrationData[0].zoneName;\r\n // this.zoneName = this.zoneConcentrationData.length ? this.zoneConcentrationData[0].zoneName : '';\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n // this.zoneConcentrationData = [];\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.zoneConcentrationData = []\r\n this.overallStoreData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.zoneConcentrationData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n \r\n }\r\n\r\n getOverallStoreConcentrationData(): void {\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-1176\"],\r\n clientId:this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type,\r\n zoneDate: this.selectedDate\r\n };\r\n this.ZoneService.getOverallStoreConcentrationData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n // this.heatmapLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n // this.overallStoreData = response.data.overallStoreConcentrationDatas;\r\n this.overallStoreData = response.data.overallStoreConcentrationDatas;\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\r\n setTimeout(() => {\r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n prevElement?.setAttribute('style','display:none');\r\n }, 200);\r\n } else {\r\n this.overallStoreData =[]\r\n // this.zoneConcentrationData = []\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n },\r\n error => {\r\n this.overallStoreData =[]\r\n // this.zoneConcentrationData = []\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\n getOverallStoreHeatmapDates(): void {\r\n this.overallStoreConcentrationDates = []\r\n this.overallStoreData =[]\r\n this.customArrow = false;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-1176\"],\r\n clientId:this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type\r\n };\r\n\r\n this.ZoneService.getOverallStoreHeatmapDates(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n if(response && response.data){\r\n this.overallStoreConcentrationDates = response.data.overallStoreConcentrationDates;\r\n this.selectedDate = this.overallStoreConcentrationDates[0].zoneDate; \r\n if (response?.code === 200 && response?.status === \"success\" && response.data.overallStoreConcentrationDates.length) {\r\n \r\n // if(['weekly','monthly'].includes(this.type)) {\r\n // let lastDigit = this.overallStoreConcentrationDates[this.overallStoreConcentrationDates.length -1].zoneDate;\r\n // let lastSplit = lastDigit.split('-')[1];\r\n // lastSplit = lastSplit +' '+ this.dayjs().format('YYYY');\r\n // if(this.dayjs(lastSplit,'MMM DD YYYY').format('YYYY-MM-DD') > this.dayjs(this.headerData.date.endDate).format('YYYY-MM-DD'))\r\n // this.overallStoreConcentrationDates.splice(this.overallStoreConcentrationDates.length-1,1);\r\n // }\r\n if (this.type === 'daily') {\r\n if (this.overallStoreConcentrationDates.length > 7) {\r\n this.customArrow = true;\r\n }\r\n } else if (this.type === 'weekly') {\r\n if (this.overallStoreConcentrationDates.length > 4) {\r\n this.customArrow = true;\r\n }\r\n } else { \r\n }\r\n this.getOverallStoreConcentrationData();\r\n // this.heatmapLoading = false;\r\n // this.heatmapNoData = false;\r\n } else {\r\n \r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n }else{\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n },\r\n error => {\r\n this.overallStoreData =[]\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\n onDateChange(date: string): void {\r\n if (this.selectedDate !== date) {\r\n this.selectedDate = date;\r\n this.getOverallStoreConcentrationData();\r\n }\r\n }\r\n\r\n selectPlan(selectedType: string): void {\r\n this.type = selectedType;\r\n this.getOverallStoreHeatmapDates(); \r\n // this.getOverallStoreConcentrationData();\r\n}\r\n\r\nonZoneClick(zoneName: string): void {\r\n this.zoneName = zoneName; \r\n this.getOverallStoreHeatmapDates();\r\n this.ZoneService.zoneSegmentation.next(zoneName)\r\n // this.getZoneSegmentation(zoneName) \r\n}\r\nconcentrationHeatmap(imageURLV1: string) {\r\n const modalRef = this.modalService.open(ConcentrationheatmapComponent, {\r\n centered: true, size: 'xl'\r\n });\r\n modalRef.componentInstance.imageURLV1 = imageURLV1;\r\n modalRef.result.then((result) => {\r\n \r\n });\r\n}\r\n\r\nscrollLeft() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: -200,behavior:'smooth'});}\r\nscrollRight() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: 200,behavior:'smooth'});}\r\n\r\n onSlideChange\r\n (slideEvent: NgbSlideEvent) {\r\n const\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n let nextElement = document.querySelector('.carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n else if(this.currentSlide === this.overallStoreData?.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else {\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n}\r\n\r\n\r\n}\r\n\r\n","<div class=\"card\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-5 right-border my-2\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header ps-3 pe-1\">\r\n <h3 class=\"card-title align-items-start flex-column ms-1\">\r\n <span class=\"headtext\">Concentration Summary <span\r\n ngbTooltip=\"Summary of overall zones at the store\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span> \r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n 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\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-10 invoicesearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader ms-2\" [disabled]=\"!zoneConcentrationData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <!-- <span class=\"ms-2\">Export</span> -->\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n \r\n <div class=\"table-container m-4\">\r\n <table class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Footfall <br>(Actuals)\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Dwell Time <br>(Average)\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"conc cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Concentration\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table-responsive\">\r\n <tr *ngFor=\"let zone of zoneConcentrationData\">\r\n <td>\r\n <div class=\"table-title-primary overallstore mb-2\">\r\n <span\r\n class=\"text-capitalize cursor-pointer\"><a (click)=\"onZoneClick(zone.zoneName)\">{{ zone.zoneName || '--' }}</a>\r\n </span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.footfallCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} mins\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody> \r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Concentration Summary</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-7\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ zoneName || '' }} Concentration Heatmap <span\r\n ngbTooltip=\"Density heatmap\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n </h3>\r\n\r\n <div class=\"card-toolbar text-nowrap me-4\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'daily',\r\n 'inactivePlanBtn': type !== 'daily',\r\n 'disabled': disableDay\r\n }\"\r\n (click)=\"selectPlan('daily')\"\r\n [attr.disabled]=\"disableDay ? true : null\">\r\n Day\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'weekly',\r\n 'inactivePlanBtn': type !== 'weekly',\r\n 'disabled': disableWeek\r\n }\"\r\n (click)=\"selectPlan('weekly')\" [disabled]=\"disableWeek\">\r\n Week\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'monthly',\r\n 'inactivePlanBtn': type !== 'monthly',\r\n 'disabled': disableMonth\r\n }\"\r\n (click)=\"selectPlan('monthly')\" [disabled]=\"disableMonth\">\r\n Month\r\n </button>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-lg-8 mb-6\">\r\n \r\n <div class=\"d-flex\">\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollLeft()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <ul *ngIf=\"periodzone === 1 && !customOption\" #dateList\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center m-2\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon active\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n \r\n <ul *ngIf=\"(periodzone === 2 || periodzone === 3) && !customOption\"\r\n \r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n \r\n <ul *ngIf=\"customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollRight()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </div>\r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <ngb-carousel #carousel [interval]=\"0\" [pauseOnHover]=\"true\" (slide)=\"onSlideChange($event)\" [id]=\"selectedDate\">\r\n <ng-container *ngFor=\"let image of overallStoreData?.ImageURLs;let i=index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container cursor-pointer\">\r\n <img (click)=\"concentrationHeatmap(overallStoreData?.ImageURLs)\" [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n <button *ngIf=\"image?.downtime != null\" class=\"minsbadge position-absolute top-0 end-0 m-3 me-18\">\r\n <span class=\"minsbadgeprimary mt-2 mb-2 \">{{image.downtime}} mins<span class=\"ms-1\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 12 10\" fill=\"none\">\r\n <path d=\"M7.14063 0.000488281C7.79785 0.000488281 8.42578 0.135108 8.99902 0.379231C9.59375 0.632395 10.1289 1.0041 10.5771 1.46523C11.0244 1.92534 11.3857 2.47588 11.6318 3.0897C11.8691 3.67941 12 4.32538 12 5.00049C12 5.6766 11.8691 6.32257 11.6318 6.91228C11.3857 7.5241 11.0244 8.07463 10.5762 8.53575C10.1289 8.99587 9.59375 9.36758 8.99707 9.62074C8.42383 9.86487 7.7959 9.99949 7.13965 9.99949C6.48242 9.99949 5.85449 9.86487 5.28125 9.62074C4.68652 9.36758 4.15137 8.99587 3.7041 8.53575L3.70312 8.53475C3.25488 8.07363 2.89453 7.52309 2.64844 6.91228C2.57227 6.72241 2.50684 6.52751 2.45312 6.32759C2.55469 6.33764 2.6582 6.34266 2.7627 6.34266C2.96094 6.34266 3.1543 6.32458 3.34277 6.28942C3.37402 6.38586 3.4082 6.4813 3.44531 6.57473C3.64746 7.07704 3.94434 7.52912 4.31348 7.90887C4.68262 8.28862 5.12305 8.59402 5.61035 8.80198C6.08008 9.0019 6.59668 9.11341 7.13965 9.11341C7.68262 9.11341 8.19824 9.0029 8.66895 8.80198C9.15723 8.59402 9.59668 8.28862 9.96582 7.90887C10.335 7.52912 10.6318 7.07604 10.834 6.57473C11.0283 6.09151 11.1367 5.56006 11.1367 5.00149C11.1367 4.44292 11.0293 3.91248 10.834 3.42826C10.6318 2.92595 10.335 2.47387 9.96582 2.09412C9.59668 1.71437 9.15625 1.40897 8.66895 1.20101C8.19922 1.00109 7.68262 0.889578 7.13965 0.889578C6.59668 0.889578 6.08106 1.00009 5.61035 1.20101C5.56836 1.21909 5.52637 1.23818 5.48535 1.25727C5.3252 0.998077 5.13184 0.762996 4.91016 0.559058C5.03125 0.494762 5.15527 0.435489 5.28125 0.38124C5.85645 0.135108 6.4834 0.000488281 7.14063 0.000488281ZM6.58301 2.62355C6.58301 2.50099 6.63184 2.39048 6.70898 2.31011C6.78711 2.22974 6.89453 2.18052 7.01367 2.18052C7.13281 2.18052 7.24023 2.22974 7.31836 2.31011C7.39648 2.39048 7.44434 2.50099 7.44434 2.62355V4.95629L9.13867 5.99004C9.24023 6.05233 9.30859 6.15178 9.33594 6.26129C9.36328 6.37079 9.35059 6.49135 9.29004 6.59583V6.59683C9.22949 6.70131 9.13281 6.77164 9.02637 6.79977C8.91992 6.8279 8.80273 6.81484 8.70117 6.75255H8.7002L6.80469 5.59623C6.73926 5.55906 6.68555 5.50481 6.64648 5.44051C6.60645 5.3732 6.58301 5.29384 6.58301 5.20945V2.62355Z\" fill=\"#009BF3\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.63477 0.265717C4.08984 0.265717 5.26953 1.4793 5.26953 2.97618C5.26953 4.47307 4.08984 5.68665 2.63477 5.68665C1.17969 5.68665 0 4.47307 0 2.97618C0 1.4793 1.17969 0.265717 2.63477 0.265717ZM2.63477 4.53033L4.04883 2.73206H3.1709V1.77566H2.09863V2.73206H1.2207L2.63477 4.53033Z\" fill=\"#F04438\"/>\r\n </svg></span></span>\r\n </button>\r\n <a [href]=\"image.URL\" download><svg\r\n id=\"download-icon\"\r\n width=\"44\"\r\n height=\"44\"\r\n viewBox=\"0 0 44 44\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\"\r\n >\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <filter\r\n id=\"filter0_d_3822_19479\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"44\"\r\n height=\"44\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\"\r\n >\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\"\r\n />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></a>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n <ng-container *ngIf=\"heatmapLoading\">\r\n <div class=\"row loader concheatmap d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heatmapNoData && !heatmapLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body concheatmap d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Overall Store Concentration Heatmap</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <div class=\"body me-4\">\r\n <div class=\"pt-10 m-6\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Total Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">{{overallStoreData?.totalFootfall?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Concentration %\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ overallStoreData?.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Bounced Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.bouncedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div></div>\r\n <div></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Engagers\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.engagersCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg. Dwell Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} mins\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Age Range\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.ageRange?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Male Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.maleRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Female Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.femaleRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Trolley\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.trolleyRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Basket\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.basketRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, skip, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\n\r\n@Component({\r\n selector: 'lib-segmentation',\r\n templateUrl: './segmentation.component.html',\r\n styleUrl: './segmentation.component.scss'\r\n})\r\n\r\nexport class SegmentationComponent implements OnInit, OnDestroy{\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n cardDataLoading1: boolean = true;\r\n cardNoData1: boolean = false;\r\n cardDataLoading3: boolean = true;\r\n cardNoData3: boolean = false;\r\n cardDataLoading4: boolean = true;\r\n cardNoData4: boolean = false;\r\n cardDataLoading5: boolean = true;\r\n cardNoData5: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private destroy$ = new Subject<void>();\r\n zoneName:any='Overall Store';\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n @Output() dataEmitter = new EventEmitter<string>();\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n if (this.headerData?.client === '430') {\r\n this.getCardData1();\r\n this.getCardData3();\r\n this.getCardData();\r\n this.getCardData4();\r\n this.getCardData5();\r\n if (this.ZoneService?.zoneSegmentation) {\r\n this.ZoneService.zoneSegmentation\r\n .pipe(skip(1),takeUntil(this.destroy$)) // Skip the initial emission\r\n .subscribe((zoneData: any) => {\r\n this.zoneName = zoneData;\r\n this.getCardData4();\r\n this.getCardData5();\r\n });\r\n }\r\n \r\n } else if (this.headerData?.client === '463') {\r\n this.getCardData();\r\n }\r\n \r\n})\r\n }\r\n private root!: am5.Root;\r\n ngOnDestroy(): void {\r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getSegmentationData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response.data.segmentationAnalysis\r\n // this.cardData = response.data.segmentationAnalysis.map((item: any) => ({\r\n // name: item.category,\r\n // value: item.value,\r\n // concentrationRate: item.concentrationRate\r\n // }));\r\n this.cardNoData = this.cardData.length === 0;\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n // this.dataEmitter.emit(this.cardData?.length);\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getSegmentationDataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'TrafficSegmentation');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n cardData1:any=[];\r\n getCardData1(): void {\r\n this.cardDataLoading1 = true;\r\n this.cardNoData1 = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getInterationTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading1 = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData1 = response.data.data\r\n this.cardNoData1 = this.cardData1.length === 0;\r\n setTimeout(() => {\r\n this.createChart(this.cardData1); // Call this method after data is set\r\n }, 200);\r\n // this.createChart(this.cardData);\r\n } else {\r\n this.cardData1 = [];\r\n this.cardNoData1 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData1 = [];\r\n this.cardNoData1 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n \r\n \r\n createChart(cardData1: any[]): void {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"chartdiv\");\r\n if (!chartDiv) {\r\n console.error(\"Could not find HTML element with id `chartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n \r\n this.root = am5.Root.new('chartdiv');\r\n \r\n const chart = this.root.container.children.push(\r\n am5xy.XYChart.new(this.root, {\r\n panX: false,\r\n panY: false,\r\n paddingLeft: 0,\r\n wheelX: \"panX\",\r\n wheelY: \"zoomX\",\r\n layout: this.root.verticalLayout\r\n })\r\n );\r\n \r\n const legend = chart.children.push(\r\n am5.Legend.new(this.root, {\r\n centerX: am5.p50,\r\n x: am5.p50\r\n })\r\n );\r\n \r\n const data: ChartData[] = cardData1.map((item: any) => ({\r\n year: item.store_name,\r\n customerCountOver10Min: item.customer_count_over10min,\r\n customerCountLessThanMin: item.customer_count_lessthanamin\r\n }));\r\n \r\n const xRenderer = am5xy.AxisRendererX.new(this.root, {\r\n cellStartLocation: 0.1,\r\n cellEndLocation: 0.9,\r\n minorGridEnabled: true\r\n });\r\n \r\n const xAxis = chart.xAxes.push(\r\n am5xy.CategoryAxis.new(this.root, {\r\n categoryField: \"year\",\r\n renderer: xRenderer,\r\n tooltip: am5.Tooltip.new(this.root, {})\r\n })\r\n );\r\n \r\n xRenderer.grid.template.setAll({\r\n location: 1\r\n });\r\n \r\n xAxis.data.setAll(data);\r\n \r\n xAxis.get(\"renderer\").labels.template.setAll({\r\n visible: false\r\n });\r\n \r\n const yAxis = chart.yAxes.push(\r\n am5xy.ValueAxis.new(this.root, {\r\n renderer: am5xy.AxisRendererY.new(this.root, {\r\n strokeOpacity: 0.1\r\n })\r\n })\r\n );\r\n \r\n // Use an arrow function to ensure `this` is bound correctly\r\n const makeSeries = (name: string, fieldName: keyof ChartData): void => {\r\n const series = chart.series.push(am5xy.ColumnSeries.new(this.root, {\r\n name: name,\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n valueYField: fieldName,\r\n categoryXField: \"year\"\r\n }));\r\n \r\n series.columns.template.setAll({\r\n tooltipText: \"{name}: {valueY}\",\r\n width: am5.percent(90),\r\n tooltipY: 0,\r\n strokeOpacity: 0\r\n });\r\n \r\n series.data.setAll(data);\r\n series.appear();\r\n \r\n series.bullets.push(() => {\r\n return am5.Bullet.new(this.root, {\r\n locationY: 0,\r\n sprite: am5.Label.new(this.root, {\r\n text: \"{valueY}\",\r\n fill: this.root.interfaceColors.get(\"alternativeText\"),\r\n centerY: 0,\r\n centerX: am5.p50,\r\n populateText: true\r\n })\r\n });\r\n });\r\n \r\n legend.data.push(series);\r\n };\r\n \r\n makeSeries(\"Customer spent more than 10 mins\", \"customerCountOver10Min\");\r\n makeSeries(\"Billing Conversion\", \"customerCountLessThanMin\");\r\n \r\n chart.appear(1000, 100);\r\n }, 100);\r\n }\r\n \r\n onExport1() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.getInterationTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'CustomerFunnel');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n onRateExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.zoneInteractionTableExport_430(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'InteractionvsConversion');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n cardData3:any=[]\r\n getCardData3(): void {\r\n this.cardDataLoading3 = true;\r\n this.cardNoData3 = true;\r\n const requestData = {\r\n search: this.searchInput3,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage3,\r\n offset: this.currentPage3,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getPasserByTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading3 = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData3 = response?.data?.passerByData\r\n this.cardNoData3 = this.cardData3.length === 0;\r\n } else {\r\n this.cardData3 = [];\r\n this.cardNoData3 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData3 = [];\r\n this.cardNoData3 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport3() {\r\n const requestData = {\r\n search: this.searchInput3,\r\n // sort: this.sortColumName,\r\n // sortBy: this.sortDirection,\r\n limit: this.itemsPerPage3,\r\n offset: this.currentPage3,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.getPasserByTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Passer-by Analysis ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n itemsPerPage3 = 10000\r\n currentPage3 = 0\r\n totalItems3 = 0\r\n searchInput3:any =''\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getCardData3();\r\n }\r\n\r\n cardData4:any=[]\r\n getCardData4(): void {\r\n this.cardDataLoading4 = true;\r\n this.cardNoData4 = true;\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export:false\r\n };\r\n \r\n this.ZoneService.getInteractionTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading4 = false;\r\n if (response?.code === 200 && response) {\r\n this.cardData4 = response?.data?.customerinteraction_data;\r\n this.cardData4.total = response?.data?.total;\r\n this.cardNoData4 = this.cardData4.length === 0;\r\n } else {\r\n this.cardData4 = [];\r\n this.cardNoData4 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData4 = [];\r\n this.cardNoData4 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n\r\n onExport4() {\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.getInteractionTable430Export(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Interaction Analysis ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n cardData5:any=[];\r\n getCardData5(): void {\r\n this.cardDataLoading5 = true;\r\n this.cardNoData5 = true;\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export:false\r\n };\r\n \r\n this.ZoneService.getZonewiseCustomerFunnelData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading5 = false;\r\n if (response?.code === 200 && response) {\r\n this.cardData5 = response?.data?.data;\r\n this.cardNoData5 = this.cardData5.length === 0;\r\n } else {\r\n this.cardData5 = [];\r\n this.cardNoData5 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData5 = [];\r\n this.cardNoData5 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n\r\n onExport5() {\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export:true\r\n };\r\n \r\n \r\n this.ZoneService.getZonewiseCustomerFunnelExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Zonewise Customer Funnel ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n}\r\ninterface ChartData {\r\n year: string; // or store name, depending on your requirement\r\n customerCountOver10Min: number;\r\n customerCountLessThanMin: number;\r\n}\r\n","<div class=\"row\" >\r\n\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData && (headerData?.client === '430') || (!cardNoData && headerData?.client === '463')\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Traffic Segmentation <span class=\"ms-1\"\r\n ngbTooltip=\"Entrance level traffic segmentation\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n <div class=\"card-body mb-18 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Entrance</th>\r\n <th>Entrance wise footfall</th>\r\n <th *ngIf=\"headerData?.client === '463'\">Concentration Rate</th>\r\n \r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td>{{ item.category }}</td>\r\n <td>{{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n <td *ngIf=\"headerData?.client === '463'\">{{ item.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} %</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Age Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData1 && headerData?.client === '430'\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start headtext p-3\">Customer Funnel <span class=\"ms-1\"\r\n ngbTooltip=\"Summary of walk-in behaviour from passerby to conversion at the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport1()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData1.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading1 && !cardNoData1\" class=\"body me-4\">\r\n <div *ngFor=\"let item of cardData1\" class=\"m-4\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Passer By\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.passer_by || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Drop In Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.drop_in_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ ((item.greeting_count / item.footfall) * 100).toFixed(1) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Interacted\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Taken to Assist a Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time_string || '--' }}\r\n <!-- {{ convertSecondsToMinSec(item.avg_time_taken) }} -->\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Spent with Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.assist_time_string || '--' }}\r\n <!-- {{ convertSecondsToMinSec(item.avg_interaction_time) }} -->\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone !== null ? item.footfall_overamin_inzone : '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate !== null ? item.billing_conversion_rate :'--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n \r\n\r\n \r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading1\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData1 && !cardDataLoading1\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n\r\n <!-- <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n \r\n <th>Interaction Rate</th>\r\n <th>Customer Attended</th>\r\n <th>Passer By</th>\r\n \r\n <th>Drop In Rate</th>\r\n <th>Billing Conversion</th>\r\n <th>Footfall</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.interaction_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.customer_attended }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.passer_by }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zonename }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.drop_in_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall_overamin_inzone }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n </div>\r\n</div>\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData5 && headerData?.client === '430'\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start headtext p-3\">Zonewise Customer Funnel <span class=\"ms-1\"\r\n ngbTooltip=\"Summary of walk-in behaviour from passerby to conversion at the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport5()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData5.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading5 && !cardNoData5\" class=\"body me-4 mb-8\">\r\n <div *ngFor=\"let item of cardData5\" class=\"m-4 agerangescroll\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ ((item.greeting_count / item.footfall) * 100).toFixed(1) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Interacted\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Taken to Assist a Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time_string || '--' }}\r\n <!-- {{ convertSecondsToMinSec(item.avg_time_taken) }} -->\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Spent with Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n <!-- {{ convertSecondsToMinSec(item.avg_interaction_time) }} -->\r\n {{ item.assist_time_string || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div *ngIf=\"zoneName ==='Overall Store'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone !== null ? item.footfall_overamin_inzone : '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"zoneName ==='Overall Store'\" class=\"borderdashed my-2\"></div>\r\n <div *ngIf=\"zoneName ==='Overall Store'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate !== null ? item.billing_conversion_rate + '%' : '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n \r\n \r\n \r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading5\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData5 && !cardDataLoading5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData1 && headerData?.client === '430'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start headtext p-3\">Interaction vs Conversion <span class=\"ms-1\"\r\n ngbTooltip=\"Comparison of engaged walk-in vs potential conversion in the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!-- [disabled]=\"!cardData.length\" -->\r\n <button type=\"button\" (click)=\"onRateExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-14 p-0\">\r\n <div *ngIf=\"!cardDataLoading1 && !cardNoData1\" id=\"chartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading1\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData1 && !cardDataLoading1\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData3 && headerData?.client === '430'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Passer-by Analysis <span class=\"ms-1\"\r\n ngbTooltip=\"Summary of camera wise passerby count\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport3()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData3.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n <div class=\"card-body mb-8 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading3 && !cardNoData3\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('streamName')\">\r\n Camera Name\r\n <svg [ngClass]=\"sortColumName === 'streamName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'streamName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('passerby_count')\">\r\n Passer-by Count\r\n <svg [ngClass]=\"sortColumName === 'passerby_count' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'passerby_count' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData3\">\r\n <td class=\"text-capitalize\">{{ item.streamName ? item.streamName :'--'}}</td>\r\n <td>{{ item.passerby_count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading3\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData3 && !cardDataLoading3\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for PasserBy Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData4 && headerData?.client === '430'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Interaction Analysis <span class=\"ms-1\"\r\n ngbTooltip=\"Time-series analysis of customer interactions\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport4()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData4.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-8 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading4 && !cardNoData4\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Category</th>\r\n <th>Value</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData4\">\r\n <td>\r\n {{ item.category }}\r\n </td>\r\n <td>\r\n <div class=\"row\">\r\n <div class=\"col-6 mt-2\">\r\n <ngb-progressbar class=\"mb-3\" height=\"10px\" type=\"primary\" [value]=\"item?.value\" [max]=\"cardData4?.total\" />\r\n </div>\r\n <div class=\"col-6\">\r\n {{ item?.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}\r\n \r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"cardDataLoading4\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div> -->\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData4 && !cardDataLoading4\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interaction Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n</div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\n\r\n@Component({\r\n selector: 'lib-interation-table-client459',\r\n templateUrl: './interation-table-client459.component.html',\r\n styleUrl: './interation-table-client459.component.scss'\r\n})\r\n\r\nexport class InterationTableClient459Component {\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private destroy$ = new Subject<void>();\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n})\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getInterationTable459Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response.data.data\r\n this.cardNoData = this.cardData.length === 0;\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getInterationTable459DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'QueueManagement');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n}","<div *ngIf=\"!cardNoData\" class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-4\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Queue Management</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Store ID</th>\r\n <th>Date</th>\r\n <th>Zone Name</th>\r\n <th>Hour</th>\r\n <th>Footfall</th>\r\n <th>Avg Time Spent (Mins)</th>\r\n <!-- <th>Min Time Spent</th>\r\n <th>Max Time Spent</th> -->\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.store_id || '--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.date || '--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zone_name || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.hour || '0' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.Footfall.toFixed(0)}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.avg_time_spent || '--'}}</div>\r\n </td>\r\n \r\n <!-- <td>\r\n <div class=\"table-title subscribedtext\">{{ item.min_time_spent || '--' }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.max_time_spent || '--' }}</div>\r\n </td> -->\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable, } from '@angular/core';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { BehaviorSubject, Observable, Subject, takeUntil, catchError, map,throwError } from 'rxjs';\r\nimport * as FileSaver from 'file-saver';\r\nimport * as XLSX from 'xlsx';\r\n\r\n \r\nconst EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\r\nconst EXCEL_EXTENSION = '.xlsx';\r\n \r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class Zonev2Service {\r\n zoneAnalysisUrl:any;\r\n trafficApiUrl: any;\r\n private footfallSubject = new BehaviorSubject<number | null>(null); // Initialize with null\r\n footfall$ = this.footfallSubject.asObservable();\r\n private reloadDataSubject = new BehaviorSubject<boolean>(false);\r\n reloadData$ = this.reloadDataSubject.asObservable();\r\n\r\n constructor(private http: HttpClient, private gs: GlobalStateService) {\r\n this.gs.environment.pipe(takeUntil(this.destroy$)).subscribe((env) => {\r\n if (env) {\r\n this.zoneAnalysisUrl = env.zoneAnalysisUrl;\r\n this.trafficApiUrl = env.trafficApiUrl;\r\n\r\n }\r\n });\r\n }\r\n triggerReload() {\r\n this.reloadDataSubject.next(true);\r\n }\r\n updateFootfall(count: number) {\r\n this.footfallSubject.next(count);\r\n }\r\n public exportAsExcelFile(json: any[], excelFileName: string): void {\r\n const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);\r\n const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };\r\n const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });\r\n this.saveAsExcelFile(excelBuffer, excelFileName);\r\n }\r\n \r\n public saveAsExcelFile(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n \r\n public saveAsTemplate(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n private readonly destroy$ = new Subject();\r\n\r\nngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n}\r\n // V2 API\r\n getZoneCardsData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zonecards_v2`, data)\r\n }\r\n getTopPerformingZones( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingZones_v2`, data)\r\n }\r\n getTopPerformingStores( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingStores_v2`, data)\r\n }\r\n getSummaryTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneSummaryTable_v2`, data)\r\n }\r\n getSummaryTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneSummaryTable_v2`, data, {responseType: 'arraybuffer'})\r\n }\r\n getAvailableZoneNames( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/availableZoneNames_v2`, data)\r\n }\r\n getOverallStoreHeatmapDates( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/overallStoreConcentrationDates_v2`, data)\r\n }\r\n getOverallStoreConcentrationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/overallStoreConcentrationHeatmap_v2`, data)\r\n }\r\n getAnalaysisSummary( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneConcentrationSummary_v2`, data)\r\n }\r\n getTrajectoryAnalysis( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/trajectoryAnalysis_v2`, data)\r\n }\r\n getFootfallDirectoryFolders(params: any): Observable<any> {\r\n return this.http.post<any>(\r\n `${this.trafficApiUrl}/footfallDirectoryFolders`,\r\n params\r\n );\r\n }\r\n getFootfallDirectory(params: any): Observable<any> {\r\n return this.http.post<any>(\r\n `${this.trafficApiUrl}/footfallDirectory`,\r\n params\r\n );\r\n }\r\n getStoresActive(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.zoneAnalysisUrl}/getMySubscription`, params);\r\n }\r\n getTrajectoryRateAnalysis( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/trajectoryAnalysisRate_V2`, data)\r\n }\r\n getCustomerJourney( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/customerJourney_V2`, data)\r\n }\r\n getCustomerJourneyTable( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/customerJourneyTable_V2`, data)\r\n }\r\n getCustomerJourneyTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/customerJourneyTable_V2`, data, {responseType: 'arraybuffer'})\r\n }\r\n getCheckTodayReportStatus(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.trafficApiUrl}/checkTodayReportStatus`, params);\r\n }\r\n\r\n \r\n private handleError(error: HttpErrorResponse): Observable<never> {\r\n return throwError(\r\n () => new Error(\"Something bad happened; please try again later\")\r\n );\r\n }\r\n\r\n}\r\n\r\n","import { AfterViewInit, Component, OnDestroy, OnInit } from '@angular/core';\r\n\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5flow from \"@amcharts/amcharts5/flow\";\r\nimport am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { Router } from '@angular/router';\r\nimport { Zonev2Service } from '../services/zonev2.service';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil } from \"rxjs\";\r\n\r\n@Component({\r\n selector: 'lib-customer-journey-chart',\r\n templateUrl: './customer-journey-chart.component.html',\r\n styleUrl: './customer-journey-chart.component.scss'\r\n})\r\nexport class CustomerJourneyChartComponent implements OnInit, AfterViewInit, OnDestroy {\r\n chartRoot: am5.Root;\r\n viewMode: 'chart' | 'table' = 'chart';\r\n\r\n headerData: any;\r\n\r\n isPageLoading: boolean = true;\r\n\r\n sortedColumn: string = '';\r\n sortOrder: number = 1;\r\n\r\n searchTerm: string = '';\r\n\r\n limit: number = 10;\r\n offset: number = 1;\r\n totalItems: number = 0;\r\n paginationSizes = [10, 20, 30];\r\n\r\n customerJourneyTableData: any[] = [];\r\n customerJourneyChartData: {\r\n from: string,\r\n to: string,\r\n value: number\r\n }[] = [];\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private router: Router,\r\n private toast: ToastService,\r\n private gs: GlobalStateService,\r\n private zoneV2Service: Zonev2Service\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n\r\n if (this.viewMode === 'chart') {\r\n this.getCustomerJourneyChartData();\r\n } else {\r\n this.getCustomerJourneyTableData();\r\n }\r\n })\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.initializeChart()\r\n }\r\n\r\n toggleView(view: 'chart' | 'table') {\r\n if (this.viewMode === view) return;\r\n this.viewMode = view;\r\n this.searchTerm = '';\r\n if (this.viewMode === 'chart') {\r\n this.getCustomerJourneyChartData();\r\n } else {\r\n this.getCustomerJourneyTableData();\r\n }\r\n }\r\n\r\n getCustomerJourneyTableData() {\r\n this.isPageLoading = true;\r\n this.customerJourneyTableData = []\r\n const payload = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n search: this.searchTerm.toLowerCase(),\r\n sort: this.sortedColumn,\r\n sortBy: this.sortOrder,\r\n limit: this.limit,\r\n offset: this.offset - 1,\r\n export: false,\r\n }\r\n\r\n this.zoneV2Service.getCustomerJourneyTable(payload).subscribe({\r\n next: (response: any) => {\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.customerJourneyTableData = response.data.customerJourneyTableData;\r\n this.totalItems = response.data['total_count']\r\n } else {\r\n this.customerJourneyTableData = []\r\n this.totalItems = 0\r\n }\r\n\r\n if (this.totalItems < 10) {\r\n this.paginationSizes = [this.totalItems]\r\n } else {\r\n this.paginationSizes = [10, 20, 30]\r\n }\r\n\r\n this.isPageLoading = false;\r\n },\r\n error: (err) => {\r\n this.customerJourneyTableData = [];\r\n this.isPageLoading = false;\r\n console.log(\"@@ ~ getCustomerJourneyTableData [ERR]:\", err);\r\n }\r\n })\r\n }\r\n\r\n getCustomerJourneyChartData() {\r\n this.isPageLoading = true;\r\n this.customerJourneyChartData = []\r\n const payload = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores?.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n search: this.searchTerm.toLowerCase(),\r\n sortType: 'bottom',\r\n limit: this.limit,\r\n offset: this.offset - 1,\r\n export: false,\r\n }\r\n\r\n this.zoneV2Service.getCustomerJourney(payload).subscribe({\r\n next: (response: any) => {\r\n if (response && response.status === 'success') {\r\n this.customerJourneyChartData = response.data.customerJourneyData;\r\n this.initializeChart(); // Initialize chart when data is available\r\n this.updateChartData(this.customerJourneyChartData);\r\n } else {\r\n this.customerJourneyChartData = []\r\n }\r\n this.isPageLoading = false;\r\n },\r\n error: (err) => {\r\n this.customerJourneyChartData = []\r\n this.isPageLoading = false;\r\n console.log('@@ getFixtureSizesList [ERR]: ', err)\r\n }\r\n })\r\n }\r\n\r\n initializeChart() {\r\n try {\r\n if (this.chartRoot) return; // Exit if already initialized.\r\n\r\n this.chartRoot = am5.Root.new('customerJourneyChart');\r\n this.chartRoot.setThemes([am5themes_Animated.new(this.chartRoot)]);\r\n\r\n this.chartRoot.container.children.push(am5flow.Sankey.new(this.chartRoot, {\r\n sourceIdField: \"from\",\r\n targetIdField: \"to\",\r\n valueField: \"value\",\r\n paddingRight: 30\r\n }));\r\n\r\n } catch (error) {\r\n console.log(\"@@ ~ initializeChart [ERR]:\", error);\r\n }\r\n }\r\n\r\n updateChartData(data: any) {\r\n let filteredData = this.removeCircularLinks(data);\r\n try {\r\n if (!this.chartRoot) throw new Error('Chart not found');\r\n\r\n const series = this.chartRoot.container.children.getIndex(0) as am5flow.Sankey;\r\n if (!series) throw new Error('Chart not found');\r\n\r\n if (filteredData.length > 0) {\r\n series.data.setAll(filteredData);\r\n } else {\r\n series.data.setAll([filteredData]);\r\n }\r\n\r\n } catch (error) {\r\n console.log(\"@@ ~ updateChartData [ERR]:\", error);\r\n }\r\n }\r\n\r\n addNewZone() {\r\n const data: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n data.store = data.stores[0].storeId;\r\n\r\n localStorage.setItem(\"header-filters\", JSON.stringify(data));\r\n this.gs.dataRangeValue.next(data)\r\n\r\n this.router.navigate([\"/manage/stores/zones\"], {\r\n queryParams: { storeId: data.stores[0].storeId },\r\n });\r\n }\r\n\r\n export() {\r\n const payload = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n search: this.searchTerm.toLowerCase(),\r\n sort: this.sortedColumn,\r\n sortBy: this.sortOrder,\r\n limit: 10000,\r\n offset: 0,\r\n export: true\r\n };\r\n console.log(\"@@ ~ this.headerData.date.startDate:\", this.headerData.date.endDate);\r\n\r\n this.zoneV2Service.getCustomerJourneyTableExport(payload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n let fileName = 'Customer_Journey_Export';\r\n\r\n if (this.headerData.date.startDate == this.headerData.date.endDate) {\r\n fileName = `${fileName}_${this.headerData.date.startDate}`\r\n } else {\r\n fileName = `${fileName}_${this.headerData.date.startDate}_${this.headerData.date.endDate}`\r\n }\r\n\r\n this.zoneV2Service.saveAsExcelFile(res, fileName);\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n\r\n }\r\n\r\n removeCircularLinks(data: any[]): any[] {\r\n const graph = new Map();\r\n const result = [];\r\n\r\n function hasCycle(from: any, to: any, visited: any) {\r\n if (from === to) return true;\r\n if (visited.has(from)) return false;\r\n\r\n visited.add(from);\r\n\r\n if (graph.has(from)) {\r\n for (const neighbor of graph.get(from)) {\r\n if (hasCycle(neighbor, to, visited)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n visited.delete(from);\r\n return false;\r\n }\r\n\r\n for (const { from, to, value } of data) {\r\n if (hasCycle(to, from, new Set())) {\r\n continue;\r\n }\r\n\r\n result.push({ from, to, value });\r\n\r\n if (!graph.has(from)) {\r\n graph.set(from, []);\r\n }\r\n graph.get(from).push(to);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n onSearch(): void {\r\n this.sortedColumn = '';\r\n this.sortOrder = 1\r\n this.offset = 1;\r\n this.limit = 10;\r\n\r\n this.getCustomerJourneyTableData();\r\n }\r\n\r\n onSortTable(column: string): void {\r\n if (this.sortedColumn === column) {\r\n this.sortOrder = this.sortOrder === 1 ? -1 : 1;\r\n } else {\r\n this.sortedColumn = column;\r\n this.sortOrder = 1;\r\n }\r\n this.offset = 1;\r\n this.limit = 10;\r\n\r\n this.getCustomerJourneyTableData();\r\n }\r\n\r\n paginationSize(): number {\r\n return this.totalItems < 10 ? this.totalItems : this.limit;\r\n }\r\n\r\n onPageSizeChange(pageSize: number) {\r\n this.offset = 1;\r\n this.limit = Number(pageSize);\r\n this.getCustomerJourneyTableData()\r\n }\r\n\r\n onPageChange(pageOffset: any) {\r\n this.offset = Number(pageOffset);\r\n this.getCustomerJourneyTableData()\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.chartRoot?.dispose();\r\n }\r\n}\r\n","<section id=\"customer-journey-chart\" class=\"card p-5\">\r\n <!-- ---------HEADER---------- -->\r\n <div class=\"d-flex justify-content-between mb-3\">\r\n <div class=\"d-flex align-items-center justify-content-center gap-3\">\r\n <h3>Customer Journey</h3>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_13146_67458)\">\r\n <path\r\n d=\"M6.06065 6.91667C6.21739 6.47111 6.52675 6.0954 6.93395 5.85609C7.34116 5.61677 7.81991 5.52929 8.28544 5.60914C8.75096 5.68899 9.1732 5.93102 9.47737 6.29235C9.78154 6.65369 9.94802 7.11101 9.94732 7.58333C9.94732 8.91667 7.94732 9.58333 7.94732 9.58333M8.00065 12.25H8.00732M14.6673 8.91667C14.6673 12.5986 11.6826 15.5833 8.00065 15.5833C4.31875 15.5833 1.33398 12.5986 1.33398 8.91667C1.33398 5.23477 4.31875 2.25 8.00065 2.25C11.6826 2.25 14.6673 5.23477 14.6673 8.91667Z\"\r\n stroke=\"#98A2B3\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_13146_67458\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(0 0.916016)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-5\">\r\n <div style=\"position: relative\" [hidden]=\"viewMode === 'chart'\">\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"searchTerm\"\r\n (change)=\"onSearch()\"\r\n style=\"padding: 0.68rem 3rem\"\r\n class=\"form-control\"\r\n name=\"search\"\r\n autocomplete=\"off\"\r\n placeholder=\"Search\"\r\n />\r\n\r\n <span class=\"search-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-width=\"2\" />\r\n <line x1=\"13\" y1=\"13\" x2=\"16\" y2=\"16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n\r\n <button *ngIf=\"searchTerm\" type=\"button\" aria-label=\"Clear\" (click)=\"searchTerm = ''; onSearch()\" class=\"clear-search\">\r\n <svg width=\"64px\" height=\"64px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path d=\"M9 9L15 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <path d=\"M15 9L9 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"9\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n ></circle>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div id=\"segment-btn\">\r\n <div [class.active]=\"viewMode === 'chart'\" class=\"segment chart-btn\" (click)=\"toggleView('chart')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path\r\n d=\"M15 17.5833V9.25M10 17.5833V4.25M5 17.5833V12.5833\"\r\n stroke=\"#344054\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <div [class.active]=\"viewMode === 'table'\" class=\"segment table-btn\" (click)=\"toggleView('table')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path\r\n d=\"M6.66667 5.91602H17.5M6.66667 10.916H17.5M6.66667 15.916H17.5M2.5 5.91602H2.50833M2.5 10.916H2.50833M2.5 15.916H2.50833\"\r\n stroke=\"#344054\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dropdown\">\r\n <button class=\"btn btn-link p-0\" type=\"button\" data-bs-toggle=\"dropdown\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"25\" viewBox=\"0 0 24 25\" fill=\"none\">\r\n <path\r\n d=\"M12 13.916C12.5523 13.916 13 13.4683 13 12.916C13 12.3637 12.5523 11.916 12 11.916C11.4477 11.916 11 12.3637 11 12.916C11 13.4683 11.4477 13.916 12 13.916Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 6.91602C12.5523 6.91602 13 6.4683 13 5.91602C13 5.36373 12.5523 4.91602 12 4.91602C11.4477 4.91602 11 5.36373 11 5.91602C11 6.4683 11.4477 6.91602 12 6.91602Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 20.916C12.5523 20.916 13 20.4683 13 19.916C13 19.3637 12.5523 18.916 12 18.916C11.4477 18.916 11 19.3637 11 19.916C11 20.4683 11.4477 20.916 12 20.916Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li>\r\n <span class=\"dropdown-item cursor-pointer d-flex justify-content-start align-items-center\">\r\n <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M6.00065 1.33398V10.6673M1.33398 6.00065H10.6673\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <a (click)=\"addNewZone()\"> Add New Zone </a>\r\n </span>\r\n </li>\r\n <li [hidden]=\"viewMode === 'chart'\">\r\n <span class=\"dropdown-item cursor-pointer d-flex justify-content-start align-items-center\">\r\n <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M14 10V12.6667C14 13.0203 13.8595 13.3594 13.6095 13.6095C13.3594 13.8595 13.0203 14 12.6667 14H3.33333C2.97971 14 2.64057 13.8595 2.39052 13.6095C2.14048 13.3594 2 13.0203 2 12.6667V10M11.3333 5.33333L8 2M8 2L4.66667 5.33333M8 2V10\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <a (click)=\"export()\"> Export </a>\r\n </span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [hidden]=\"!isPageLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"isPageLoading\">\r\n <!-- ---------CHART---------- -->\r\n <div [hidden]=\"viewMode === 'table'\">\r\n <div [hidden]=\"customerJourneyChartData.length !== 0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\" />\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Chart</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"customerJourneyChartData.length === 0\">\r\n <div id=\"customerJourneyChart\"></div>\r\n </div>\r\n </div>\r\n\r\n <!-- ---------TABLE---------- -->\r\n <div [hidden]=\"viewMode === 'chart'\">\r\n <div [hidden]=\"customerJourneyTableData.length !== 0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\" />\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"customerJourneyTableData.length === 0\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('zoneName')\">\r\n Zone Name\r\n <svg\r\n [ngClass]=\"sortedColumn === 'zoneName' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'zoneName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <!-- <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('noOfStores')\">\r\n No. of stores\r\n <svg\r\n [ngClass]=\"sortedColumn === 'noOfStores' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'noOfStores' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th> -->\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('zoneFF')\">\r\n Zone FF\r\n <svg\r\n [ngClass]=\"sortedColumn === 'zoneFF' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'zoneFF' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('impressions')\">\r\n Concentration\r\n <svg\r\n [ngClass]=\"sortedColumn === 'impressions' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'impressions' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('AvgDwellTime')\">\r\n Avg Dwell Time\r\n <svg\r\n [ngClass]=\"sortedColumn === 'AvgDwellTime' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'AvgDwellTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of customerJourneyTableData\">\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneName || \"--\" }}</div>\r\n </td>\r\n <!-- <td>\r\n <div class=\"table-title\">{{ store.noOfStores || \"--\" }}</div>\r\n </td> -->\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneFF || \"--\" }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.impressions || 0 }}%</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.AvgDwellTime || 0 }} Mins</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <!-- Pagination -->\r\n <lib-pagination\r\n class=\"text-start\"\r\n [itemsPerPage]=\"limit\"\r\n [currentPage]=\"offset\"\r\n [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\"\r\n [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n ></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { ZoneService } from '../services/zone.service';\r\n@Component({\r\n selector: 'lib-tango-analyse-zone',\r\n templateUrl: './tango-analyse-zone.component.html',\r\n styleUrl: './tango-analyse-zone.component.scss',\r\n})\r\nexport class TangoAnalyseZoneComponent implements OnInit,OnDestroy {\r\n storeId: number = 0;\r\n clientId: number; \r\n headerData: any;\r\n showReportProcessingCard: boolean = true;\r\n yesterdayDate: string = '';\r\n dataProcessedLoading = true;\r\n private readonly destroy$ = new Subject();\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n constructor(\r\n private pageInfo: PageInfoService,public gs: GlobalStateService,private zoneService:ZoneService,private cd:ChangeDetectorRef,\r\n ) {\r\n }\r\n // receivedData: any = '';\r\n ngOnInit(): void {\r\n this.setPageData();\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.updateStoreId() \r\n this.checkTodayReportStatus() \r\n})\r\n\r\n}\r\n\r\nhasSegmentationData: boolean = false;\r\n\r\nupdateSegmentationStatus(hasData: boolean) {\r\n this.hasSegmentationData = hasData;\r\n}\r\n// receiveData(data: any) {\r\n// this.receivedData = data;\r\n// console.log(data)\r\n// this.cd.detectChanges();\r\n// }\r\n\r\n setPageData() {\r\n this.pageInfo.setTitle(\"Zones\");\r\n this.pageInfo.setDescription(\"Zones\");\r\n this.pageInfo.setBreadcrumbs([\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: false },\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: true },\r\n ]);\r\n }\r\n updateStoreId(): void {\r\n this.storeId = this.headerData.stores.filter((store: any) => store.checked).length;\r\n }\r\n\r\n checkTodayReportStatus(): void {\r\n this.dataProcessedLoading = true;\r\n const reportParams = {\r\n clientId: this.headerData?.client,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate\r\n };\r\n this.zoneService.getCheckTodayReportStatus(reportParams)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.dataProcessedLoading = false\r\n this.showReportProcessingCard = res?.data?.reportSendStatus === true;\r\n this.yesterdayDate = res?.data?.yesterday || '';\r\n this.cd.detectChanges();\r\n },\r\n \r\n error: (err: any) => {\r\n console.error('Error checking report status:', err);\r\n this.showReportProcessingCard = false;\r\n this.dataProcessedLoading = false;\r\n this.cd.detectChanges();\r\n }\r\n });\r\n }\r\n}\r\n","<div *ngIf=\"!showReportProcessingCard && !dataProcessedLoading\">\r\n<div *ngIf=\"storeId === 1\">\r\n<lib-zone-concentration></lib-zone-concentration>\r\n</div>\r\n<div class=\"mt-4\">\r\n <lib-overallcards></lib-overallcards>\r\n</div>\r\n<div *ngIf=\"storeId === 1\">\r\n <lib-segmentation></lib-segmentation>\r\n</div>\r\n <!-- <ng-container *ngIf=\"hasSegmentationData === true\"> -->\r\n \r\n <!-- </ng-container> -->\r\n <!-- <div *ngIf=\"storeId === 1 && headerData?.client === '430'\" class=\"col-8\">\r\n <lib-interation-table-client430></lib-interation-table-client430>\r\n </div>\r\n <div *ngIf=\"storeId === 1 && headerData?.client === '430'\" class=\"col-4\">\r\n <lib-passerby-table></lib-passerby-table>\r\n </div>\r\n </div> -->\r\n\r\n\r\n<div class=\"mt-4\" *ngIf=\"storeId === 1 && headerData?.client === '459'\">\r\n<lib-interation-table-client459></lib-interation-table-client459>\r\n</div>\r\n<div class=\"mt-2\" *ngIf=\"storeId > 1\">\r\n <lib-top-performing-zones></lib-top-performing-zones>\r\n</div>\r\n\r\n<div class=\"mt-2\" *ngIf=\"storeId === 1 && headerData?.client === '478'\">\r\n <lib-customer-journey-chart></lib-customer-journey-chart>\r\n</div>\r\n\r\n<div class=\"mt-4\" *ngIf=\"storeId > 1\">\r\n <lib-zone-summary-table></lib-zone-summary-table>\r\n</div>\r\n</div>\r\n\r\n<div *ngIf=\"showReportProcessingCard && !dataProcessedLoading\" class=\"row px-3\"> \r\n <div class=\"card dataprocessed pb-0 px-0 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"dataprocessedgif\" src=\"./assets/tango/Icons/data_analyse_gif.gif\" alt=\"\">\r\n <div class=\"dataprocessed-title\">Data being Processed</div>\r\n <div class=\"dataprocessed-sub\">Data for the selected date {{ yesterdayDate }}, is currently being processed and will be available shortly.</div>\r\n <div class=\"dataprocessed-sub\"> If you wish to view data for other dates, Remove {{ yesterdayDate }} from your selection or choose a different date range.</div> \r\n </div>\r\n\r\n</div>\r\n<div *ngIf=\"dataProcessedLoading\" class=\"card row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n</div> ","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime} from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'lib-zones-cards',\r\n templateUrl: './zones-cards.component.html',\r\n styleUrl: './zones-cards.component.scss'\r\n})\r\nexport class ZonesCardsComponent {\r\n zoneCardsData: any;\r\n headerData: any;\r\n zoneCardsFootfall: number | undefined;\r\n private destroy$ = new Subject<void>();\r\n constructor(private Zonev2Service: Zonev2Service,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService, private router: Router, private ActivatedRoute: ActivatedRoute,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getZoneCards();\r\n})\r\n }\r\n ngOnDestroy(): void {\r\n\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n getZoneCards(): void {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n };\r\n\r\n this.Zonev2Service.getZoneCardsData(requestData).pipe(takeUntil(this.destroy$)).subscribe(\r\n (response: any) => {\r\n if (response?.status === 'success') {\r\n this.zoneCardsData = response.data.card;\r\n this.Zonev2Service.updateFootfall(response.data.card.footfall.count);\r\n \r\n } else {\r\n this.zoneCardsData = []\r\n }\r\n },\r\n (error) => {\r\n this.zoneCardsData = []\r\n console.error('Error fetching zone card data', error);\r\n }\r\n );\r\n }\r\n\r\n// redirectToHeatmap(zoneName: string): void {\r\n// if (zoneName) {\r\n// this.router.navigate([], {\r\n// relativeTo: this.ActivatedRoute,\r\n// queryParams: { zoneName } });\r\n// const heatmapElement = document.querySelector(`#heatmapscroll`);\r\n// console.log(\"heatmapElement\", heatmapElement)\r\n// if (heatmapElement) {\r\n \r\n// heatmapElement.scrollIntoView({ block: 'center', behavior: 'smooth' });\r\n// }\r\n// }\r\n// }\r\n\r\n}\r\n","<div class=\"col-md-12\">\r\n <div class=\"row d-flex justify-content-between align-items-stretch\">\r\n\r\n <!-- Total Store Footfall Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.footfall?.count ? zoneCardsData?.footfall?.count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--'}}</span>\r\n <span class=\"cardtext\">Total Store Footfall</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">{{zoneCardsData?.footfall?.zoneName ? zoneCardsData?.footfall?.zoneName?.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--'}}</div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Footfall <span class=\"subcount\">- {{zoneCardsData?.footfall?.zoneFootfallCount ? zoneCardsData?.footfall?.zoneFootfallCount : '--'}}</span></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Highest Impression Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.impression?.rate ? zoneCardsData?.impression?.rate + '%' : '--'}}</span>\r\n <span class=\"cardtext\">Highest Store impression</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">\r\n \r\n {{zoneCardsData?.impression?.zoneName ? zoneCardsData?.impression?.zoneName : '--'}}\r\n \r\n </div>\r\n <div class=\"cardtext\">Zone with <span class=\"subcount\">{{zoneCardsData?.impression?.zoneImpressionRate ? zoneCardsData?.impression?.zoneImpressionRate + '%' : '--'}}</span> <br> impression</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Total Bounced Rate Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.bounced?.rate ? zoneCardsData?.bounced?.rate + '%' : '--'}}</span>\r\n <span class=\"cardtext\">Top Zone Bounced Rate</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">\r\n \r\n {{zoneCardsData?.bounced?.zoneName ? zoneCardsData?.bounced?.zoneName : '--'}}\r\n \r\n </div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Bounced rate</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Engagers Rate Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.engagers?.rate ? zoneCardsData?.engagers?.rate + '%' : '--'}}</span>\r\n <span class=\"cardtext\">Top Engagers Zone Rate</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">\r\n \r\n {{zoneCardsData?.engagers?.zoneName ? zoneCardsData?.engagers?.zoneName : '--'}}\r\n \r\n </div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Engager Rate</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Average Dwell Time Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.avgDwellTime?.rate ? zoneCardsData?.avgDwellTime?.rate + ' Mins' : '--'}}</span>\r\n <span class=\"cardtext\">Average Top Zone Dwell Time</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">{{zoneCardsData?.avgDwellTime?.zoneName ? zoneCardsData?.avgDwellTime?.zoneName : '--'}}</div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Dwell Time</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n","import { AfterViewInit, Component, Input, ViewChild } from '@angular/core';\r\nimport { NgbCarousel, NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'lib-store-zoom-heatmap',\r\n templateUrl: './store-zoom-heatmap.component.html',\r\n styleUrl: './store-zoom-heatmap.component.scss'\r\n})\r\nexport class StoreZoomHeatmapComponent implements AfterViewInit {\r\n @ViewChild('carousel1', { static: true }) carousel1!: NgbCarousel;\r\n \r\n @Input() imageURL: [];\r\n overallStoreData: { ImageURLs: Array<{ URL: string, streamName: string }> } = { ImageURLs: [] };\r\n currentSlideIndex = 0;\r\n\r\n currentSlide = 0;\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n if (this.imageURL) {\r\n this.overallStoreData.ImageURLs = this.imageURL; \r\n \r\n \r\n }\r\n}\r\n\r\nngAfterViewInit(): void {\r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n prevElement?.setAttribute('style',\"display:none\")\r\n}\r\n\r\nonSlideChange\r\n(slideEvent: NgbSlideEvent) {\r\nconst\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n let nextElement = document.querySelector('.modal-dialog .carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n if(this.currentSlide === this.overallStoreData.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else{\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n}\r\n}\r\n","<div class=\"modal-body\">\r\n <ngb-carousel #carousel1=\"ngbCarousel\" [interval]=\"0\" (slide)=\"onSlideChange($event)\" [pauseOnHover]=\"true\" *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs;let i= index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container\">\r\n <img [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n ","import { ChangeDetectorRef, Component, ElementRef, NgZone, AfterViewInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { NgbCarousel, NgbModal, NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport dayjs from 'dayjs';\r\nimport * as am5 from '@amcharts/amcharts5';\r\nimport * as am5percent from '@amcharts/amcharts5/percent';\r\nimport * as am5themes_Animated from '@amcharts/amcharts5/themes/Animated';\r\nimport * as am5flow from \"@amcharts/amcharts5/flow\";\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\nimport { StoreZoomHeatmapComponent } from './store-zoom-heatmap/store-zoom-heatmap.component';\r\nimport { ActivatedRoute } from '@angular/router';\r\n@Component({\r\n selector: 'lib-store-heatmap',\r\n templateUrl: './store-heatmap.component.html',\r\n styleUrl: './store-heatmap.component.scss'\r\n})\r\nexport class StoreHeatmapComponent {\r\n @ViewChild('carousel', { static: true }) carousel!: NgbCarousel;\r\n private readonly destroy$ = new Subject();\r\n selectedTab: string = '';\r\n headerData: any;\r\n dayjs = dayjs;\r\n disableDay: boolean = false;\r\n disableWeek: boolean = false;\r\n disableMonth: boolean = false;\r\n type: string = 'daily';\r\n heatmapLoading: boolean = true;\r\n heatmapNoData: boolean = false;\r\n zoneName: string = '';\r\n selectedDate: string = '';\r\n overallStoreData: any = {};\r\n overallStoreconcentrationData: any = {}\r\n // zoneConcentrationData: any[] = [];\r\n availableZones: any[] = [];\r\n overallStoreConcentrationDates: any[] = [];\r\n periodzone: number = 1;\r\n customOption: boolean = false;\r\n searchInput: any = \"\";\r\n sortColumName: string = '';\r\n sortBy: number = 1;\r\n sortDirection: number = -1;\r\n genderAnalysis: any[] = [];\r\n ageAnalysis: any[] = [];\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n private genderroot!: am5.Root;\r\n private arcroot!: am5.Root;\r\n currentZone: any; // Declare as 'any' or use a specific type if known\r\n otherZone: any;\r\n arcDiagram: any;\r\n currentSlideIndex = 0;\r\n customArrow: boolean = false;\r\n trajectoryNoData: boolean = false;\r\n trajectoryLoading: boolean = true;\r\n trajectoryRateNoData: boolean = false;\r\n trajectoryRateLoading: boolean = true;\r\n cardcustomArrow: boolean = false;\r\n\r\n currentSlide = 0;\r\n @ViewChild('dateList', {read:ElementRef}) dateList!:ElementRef;\r\n @ViewChild('zoneNameList', {read:ElementRef}) zoneNameList!:ElementRef;\r\n\r\n constructor(private zone: NgZone, public modalService: NgbModal, private fb: FormBuilder, private Zonev2Service: Zonev2Service, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService, private elementRef: ElementRef,private route: ActivatedRoute) { \r\n \r\n }\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n let sDate = this.dayjs(this.headerData.date.startDate);\r\n let eDate = this.dayjs(this.headerData.date.endDate);\r\n this.customArrow = false;\r\n this.cardcustomArrow = false;\r\n this.type = 'daily';\r\n // if(eDate.diff(sDate,'day') < 6) {\r\n // this.disableWeek = true;\r\n // this.disableMonth = true;\r\n // // this.type = 'daily';\r\n // }\r\n // else if(eDate.diff(sDate,'day') < 27) {\r\n // this.disableMonth = true;\r\n // this.disableDay = false;\r\n // this.disableWeek = false;\r\n // // this.type = 'weekly';\r\n // }\r\n // else {\r\n // this.disableDay = false;\r\n // this.disableWeek = false;\r\n // this.disableMonth = false;\r\n // // this.type = 'monthly';\r\n // }\r\n\r\n this.route.queryParams.subscribe(params => {\r\n this.zoneName = params['zoneName'];\r\n if (this.zoneName) {\r\n this.changeTab(this.zoneName);\r\n\r\n }\r\n });\r\n \r\n this.getAvailableZoneNames();\r\n // this.getTrajectoryAnalysis();\r\n \r\n // this.getOverallStoreConcentrationData();\r\n // this.getOverallStoreHeatmapDates();\r\n })\r\n\r\n }\r\n ngOnDestroy(): void {\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n if (this.arcroot) {\r\n this.arcroot.dispose();\r\n }\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n\r\n }\r\n\r\n changeTab(tabName: string) {\r\n this.selectedTab = tabName;\r\n this.zoneName = tabName;\r\n this.getOverallStoreHeatmapDates();\r\n this.getTrajectoryAnalysis();\r\n this.getTrajectoryRateAnalysis();\r\n this.getAnalaysisSummary()\r\n this.changeDetector.detectChanges(); \r\n }\r\n getAvailableZoneNames(): void {\r\n // this.cardcustomArrow = false;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n this.cardDataLoading = true;\r\n this.overallStoreData = [];\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate, // Adjust based on your date selection mechanism\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n };\r\n\r\n this.Zonev2Service.getAvailableZoneNames(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.availableZones = response.data.availableZoneData;\r\n if (this.availableZones.length) {\r\n\r\n this.selectedTab = this.availableZones[0].zoneName;\r\n this.zoneName = this.selectedTab;\r\n // this.changeTab(this.selectedTab);\r\n }\r\n // this.zoneName = response.data.zoneConcentrationData[0].zoneName;\r\n // this.zoneName = this.availableZones.length ? this.availableZones[0].zoneName : '';\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\r\n this.getOverallStoreHeatmapDates();\r\n this.getTrajectoryAnalysis();\r\n this.getTrajectoryRateAnalysis();\r\n this.getAnalaysisSummary()\r\n \r\n\r\n\r\n\r\n } else {\r\n // this.zonesummaryLoading = false;\r\n // this.zonesummaryNoData = true;\r\n\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n\r\n this.availableZones = [];\r\n this.overallStoreConcentrationDates = [];\r\n this.overallStoreconcentrationData = [];\r\n this.cardNoData = true;\r\n this.cardDataLoading = false;\r\n // this.overallStoreData = []\r\n this.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.availableZones = [];\r\n this.zoneName = \"\"\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n getOverallStoreConcentrationData(): void {\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n // this.cardDataLoading = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n // storeId: [\"11-1176\"],\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type,\r\n zoneDate: this.selectedDate\r\n };\r\n this.Zonev2Service.getOverallStoreConcentrationData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.heatmapLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n // this.overallStoreData = response.data.overallStoreConcentrationDatas;\r\n this.overallStoreconcentrationData = response.data.overallStoreConcentrationDatas;\r\n this.heatmapNoData = false;\r\n setTimeout(() => {\r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n prevElement?.setAttribute('style','display:none');\r\n }, 200);\r\n\r\n \r\n } else {\r\n this.overallStoreconcentrationData = [];\r\n // this.zoneConcentrationData = []\r\n // this.availableZones = [];\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n \r\n // this.getAnalaysisSummary()\r\n },\r\n error => {\r\n this.overallStoreconcentrationData = []\r\n // this.zoneConcentrationData = []\r\n // this.availableZones = [];\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\n getOverallStoreHeatmapDates(): void {\r\n this.overallStoreConcentrationDates = []\r\n this.customArrow = false;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n // this.cardDataLoading = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type\r\n };\r\n\r\n this.Zonev2Service.getOverallStoreHeatmapDates(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n if(response && response.data){\r\n this.overallStoreConcentrationDates = response.data.overallStoreConcentrationDates;\r\n this.selectedDate = this.overallStoreConcentrationDates[0].zoneDate;\r\n // if(['weekly','monthly'].includes(this.type)) {\r\n // let lastDigit = this.overallStoreConcentrationDates[this.overallStoreConcentrationDates.length -1].zoneDate;\r\n // let lastSplit = lastDigit.split('-')[1];\r\n // lastSplit = lastSplit +' '+ this.dayjs().format('YYYY');\r\n // if(this.dayjs(lastSplit,'MMM DD YYYY').format('YYYY-MM-DD') > this.dayjs(this.headerData.date.endDate).format('YYYY-MM-DD'))\r\n // this.overallStoreConcentrationDates.splice(this.overallStoreConcentrationDates.length-1,1);\r\n // }\r\n if (response?.code === 200 && response?.status === \"success\" && response.data.overallStoreConcentrationDates.length) {\r\n if (this.type === 'daily') {\r\n if (response.data.overallStoreConcentrationDates.length > 7) {\r\n this.customArrow = true;\r\n }\r\n } else if (this.type === 'weekly') {\r\n if (response.data.overallStoreConcentrationDates.length > 5) {\r\n this.customArrow = true;\r\n }\r\n } else { \r\n }\r\n this.getOverallStoreConcentrationData();\r\n // this.heatmapLoading = false;\r\n // this.heatmapNoData = false;\r\n } else {\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n // this.cardNoData = true;\r\n // this.cardDataLoading = false;\r\n \r\n }\r\n \r\n }else{\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n },\r\n error => {\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\n onDateChange(date: string): void {\r\n if (this.selectedDate !== date) {\r\n this.selectedDate = date;\r\n this.getOverallStoreConcentrationData();\r\n }\r\n }\r\n\r\n selectPlan(selectedType: string): void {\r\n this.type = selectedType;\r\n this.getOverallStoreHeatmapDates();\r\n // this.getOverallStoreConcentrationData();\r\n }\r\n\r\n onZoneClick(zoneName: string): void {\r\n \r\n this.zoneName = zoneName;\r\n this.getOverallStoreHeatmapDates();\r\n \r\n }\r\n concentrationHeatmap(imageURL: string) {\r\n const modalRef = this.modalService.open(StoreZoomHeatmapComponent, {\r\n centered: true, size: 'xl'\r\n });\r\n modalRef.componentInstance.imageURL = imageURL;\r\n modalRef.result.then((result) => {\r\n\r\n });\r\n }\r\n genderchart() {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"genderchartdiv\");\r\n if (!chartDiv) {\r\n // console.error(\"Could not find HTML element with id `genderchartdiv`\");\r\n return;\r\n }\r\n\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n this.genderroot = am5.Root.new('genderchartdiv');\r\n\r\n const chart = this.genderroot.container.children.push(\r\n am5percent.PieChart.new(this.genderroot, {\r\n endAngle: 270,\r\n innerRadius: am5.percent(60)\r\n })\r\n );\r\n\r\n const series = chart.series.push(\r\n am5percent.PieSeries.new(this.genderroot, {\r\n valueField: 'value',\r\n categoryField: 'category',\r\n endAngle: 270,\r\n alignLabels: false\r\n })\r\n );\r\n\r\n series.states.create('hidden', {\r\n endAngle: -90\r\n });\r\n\r\n series.labels.template.setAll({\r\n textType: 'circular',\r\n visible: false,\r\n centerX: 0,\r\n centerY: 0\r\n });\r\n\r\n series.data.setAll(this.genderAnalysis);\r\n const legend = this.genderroot.container.children.push(\r\n am5.Legend.new(this.genderroot, {\r\n x: am5.percent(50),\r\n centerX: am5.percent(50),\r\n y: am5.percent(94),\r\n layout: this.genderroot.horizontalLayout,\r\n })\r\n );\r\n\r\n legend.labels.template.setAll({\r\n text: \"{category}: {value}%\",\r\n fill: am5.color(\"#464E5F\"),\r\n fontFamily: \"Inter\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n\r\n });\r\n\r\n legend.valueLabels.template.setAll({\r\n text: \"{value}%\",\r\n fontWeight: \"700\",\r\n fontFamily: \"Inter\",\r\n fontSize: \"14px\",\r\n fill: am5.color(\"#464E5F\"),\r\n });\r\n\r\n legend.data.setAll(series.dataItems);\r\n\r\n // Animation\r\n series.appear(1000, 100);\r\n }, 100);\r\n }\r\n getAnalaysisSummary(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = false;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n // storeId: [\"204\"],\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n };\r\n\r\n this.Zonev2Service.getAnalaysisSummary(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n if (response && response.data && response.data.zoneConcentrationData && response.data.zoneConcentrationData.length > 0) {\r\n this.overallStoreData = response.data.zoneConcentrationData[0]; // Get the first zone data\r\n this.ageAnalysis = this.overallStoreData.ageAnalysis || [];\r\n this.genderAnalysis = this.overallStoreData.genderAnalysis || [];\r\n setTimeout(() => {\r\n this.genderchart();\r\n }, 200);\r\n \r\n this.cardDataLoading = false;\r\n this.cardNoData = false;\r\n } else {\r\n // this.cardData = []\r\n this.overallStoreData = [];\r\n \r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n // this.cardData = []\r\n this.overallStoreData = [];\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n\r\n getAgeArray() {\r\n let data: any = [];\r\n this.ageAnalysis.forEach((item: any, index: any) => {\r\n if (index % 2 == 0) {\r\n data.push(index);\r\n }\r\n })\r\n\r\n return data;\r\n }\r\n getTrajectoryAnalysis(): void {\r\n this.trajectoryLoading = true;\r\n this.trajectoryNoData = false;\r\n // this.cardDataLoading = true;\r\n // this.cardNoData = true;\r\n\r\n if (!this.zoneName || this.zoneName.trim() === '') {\r\n if (this.availableZones && this.availableZones.length > 0) {\r\n this.zoneName = this.availableZones[0].zoneName;\r\n } else {\r\n this.trajectoryLoading = false;\r\n this.trajectoryNoData = true;\r\n return; \r\n }\r\n }\r\n \r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName\r\n // zoneName: \"Fresh\", // Fixed as per your current implementation\r\n };\r\n \r\n this.Zonev2Service.getTrajectoryAnalysis(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.trajectoryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n const data = response.data.trajectoryAnalysisData;\r\n const zoneList = data.zoneList;\r\n const diagramData: Array<{ from: string; to: string; value: number; fill: am5.Color }> = [];\r\n zoneList.forEach((zone: { from: any; to: any; value: any; }, index: number) => {\r\n diagramData.push({\r\n from: zone.from,\r\n to: zone.to,\r\n value: zone.value, // Use the value from the API response\r\n fill: this.getZoneColor(index) // Custom function to get a color for the zone\r\n });\r\n });\r\n this.trajectoryNoData = false;\r\n if (diagramData.length > 0) {\r\n \r\n setTimeout(() => {\r\n this.createArcDiagram(diagramData);\r\n }, 200);\r\n // this.trajectoryNoData = false;\r\n } else {\r\n // this.trajectoryNoData = true;\r\n }\r\n \r\n // this.cardNoData = false;\r\n } else {\r\n this.trajectoryNoData = true; \r\n // this.cardDataLoading = false;\r\n // this.cardNoData = true; // Set no data flag if response is unsuccessful\r\n }\r\n this.cardDataLoading = false; // Stop loading spinner after data is processed\r\n },\r\n error => {\r\n this.trajectoryLoading = false;\r\n this.cardDataLoading = false;\r\n this.cardNoData = true; // Set no data flag on error\r\n });\r\n }\r\n getTrajectoryRateAnalysis(): void {\r\n this.trajectoryRateLoading = true;\r\n this.trajectoryRateNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n };\r\n \r\n this.Zonev2Service.getTrajectoryRateAnalysis(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(\r\n (response: any) => {\r\n this.trajectoryRateLoading = false;\r\n \r\n if (response?.code === 200 && response?.status === \"success\") {\r\n const zoneData = response.data.zoneConcentrationData[0]?.trajectoryAnalysisRateData;\r\n \r\n this.currentZone = response.data.zoneConcentrationData[0]?.currentZone;\r\n this.otherZone = zoneData.otherZone;\r\n if (this.currentZone && this.otherZone) {\r\n // this.currentZone.impressionRate, this.otherZone.ageGenderRate, etc.\r\n } else {\r\n // this.trajectoryRateNoData = true;\r\n }\r\n \r\n this.trajectoryRateNoData = false; // Data exists\r\n } else {\r\n // response.data.zoneConcentrationData = []\r\n this.trajectoryRateNoData = true;\r\n }\r\n this.cardDataLoading = false;\r\n },\r\n (error) => {\r\n this.trajectoryRateLoading = false;\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n );\r\n }\r\n \r\n createArcDiagram(diagramData: { from: string; to: string; value: number; fill: am5.Color; }[]): void {\r\n setTimeout(() => {\r\n // Dispose previous diagram if it exists\r\n if (this.arcDiagram) {\r\n this.arcDiagram.dispose();\r\n }\r\n\r\n // Create root element\r\n const root = am5.Root.new(\"arcDiagramDiv\");\r\n root.container.setAll({\r\n width: am5.p100, // 100% width\r\n height: am5.percent(80) // Adjust the percentage to control the height\r\n });\r\n\r\n // Create series\r\n const series = root.container.children.push(am5flow.ArcDiagram.new(root, {\r\n sourceIdField: \"from\",\r\n targetIdField: \"to\",\r\n valueField: \"value\",\r\n orientation: \"horizontal\"\r\n }));\r\n\r\n // Configure labels\r\n series.nodes.labels.template.setAll({\r\n fontSize: \"16px\",\r\n paddingLeft: 20,\r\n paddingRight: 20,\r\n width: 160\r\n });\r\n \r\n // Animated bullets\r\n series.bullets.push((root, series, dataItem) => {\r\n const bullet = am5.Bullet.new(root, {\r\n locationY: Math.random(),\r\n sprite: am5.Circle.new(root, {\r\n radius: 2,\r\n fill: dataItem.get(\"source\").get(\"fill\")\r\n })\r\n });\r\n\r\n bullet.animate({\r\n key: \"locationY\",\r\n to: 1,\r\n from: 0,\r\n duration: Math.random() * 1000 + 2000,\r\n loops: Infinity\r\n });\r\n\r\n return bullet;\r\n });\r\n\r\n // Set data dynamically from the API response\r\n series.data.setAll(diagramData);\r\n\r\n // Make stuff animate on load\r\n series.appear(1000, 100);\r\n this.arcDiagram = series;\r\n },100);\r\n }\r\n getZoneColor(index: number): am5.Color {\r\n const colors = [am5.color(0x4285F4), am5.color(0xAA46BB), am5.color(0xFF7043), am5.color(0x8E24AA)];\r\n return colors[index % colors.length];\r\n }\r\n onSlideChange\r\n (slideEvent: NgbSlideEvent) {\r\n const\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n let nextElement = document.querySelector('.carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n else if(this.currentSlide === this.overallStoreconcentrationData?.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else {\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n }\r\n\r\n scrollLeft() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: -200,behavior:'smooth'});}\r\n scrollRight() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: 200,behavior:'smooth'});}\r\n\r\n zonescrollLeft() {\r\n this.zoneNameList.nativeElement.scrollBy({\r\n left: -150, // Adjust the scroll amount as needed\r\n behavior: 'smooth'\r\n });\r\n }\r\n \r\n zonescrollRight() {\r\n this.zoneNameList.nativeElement.scrollBy({\r\n left: 150, // Adjust the scroll amount as needed\r\n behavior: 'smooth'\r\n });\r\n }\r\n}","<div class=\"card\">\r\n <div class=\"card-header storecard\">\r\n <div class=\"zone-container position-relative mx-5\">\r\n <span *ngIf=\"!heatmapLoading && !heatmapNoData\" class=\"cursor-pointer arrow-left position-absolute\" (click)=\"zonescrollLeft()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <div class=\"zone-buttons-container d-flex justify-content-start align-items-center no-wrap-list ms-4 me-10\" #zoneNameList>\r\n <button id=\"heatmapscroll\" *ngFor=\"let zone of availableZones\" \r\n class=\"btn btn-color-gray-600 btn-active btn-active-secondary py-3\"\r\n [ngClass]=\"selectedTab === zone.zoneName ? 'activePlanBtnprimary' : 'inactivePlanBtn'\"\r\n (click)=\"changeTab(zone.zoneName)\">\r\n {{ zone.zoneName }}\r\n </button>\r\n </div>\r\n <span *ngIf=\"!heatmapLoading && !heatmapNoData\" class=\"cursor-pointer arrow-right position-absolute\" (click)=\"zonescrollRight()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-12\">\r\n <div class=\"row p-3\">\r\n <div class=\"col-lg-6 right-border my-1\">\r\n <div class=\"card-header border-0 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Store Heatmap</span>\r\n </h3>\r\n \r\n <div class=\"card-toolbar text-nowrap me-4\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n \r\n <!-- <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'daily',\r\n 'inactivePlanBtn': type !== 'daily',\r\n 'disabled': disableDay\r\n }\" (click)=\"selectPlan('daily')\" [attr.disabled]=\"disableDay ? true : null\">\r\n Day\r\n </button>\r\n \r\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'weekly',\r\n 'inactivePlanBtn': type !== 'weekly',\r\n 'disabled': disableWeek\r\n }\" (click)=\"selectPlan('weekly')\" [attr.disabled]=\"disableWeek ? true : null\">\r\n Week\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'monthly',\r\n 'inactivePlanBtn': type !== 'monthly',\r\n 'disabled': disableMonth\r\n }\" (click)=\"selectPlan('monthly')\" [attr.disabled]=\"disableMonth ? true : null\">\r\n Month\r\n </button>\r\n </div> -->\r\n \r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div >\r\n <div class=\"d-flex\">\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollLeft()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <ul *ngIf=\"periodzone == 1 && !customOption\" #dateList\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center m-2\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon active\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <ul *ngIf=\"(periodzone == 2 || periodzone == 3) && !customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <ul *ngIf=\"customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollRight()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </div>\r\n \r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <ngb-carousel #carousel=\"ngbCarousel\" [interval]=\"0\" (slide)=\"onSlideChange($event)\" [pauseOnHover]=\"true\" [id]=\"selectedDate\">\r\n <ng-container *ngFor=\"let image of overallStoreconcentrationData?.ImageURLs;let i=index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container cursor-pointer\">\r\n <img (click)=\"concentrationHeatmap(overallStoreconcentrationData?.ImageURLs)\"\r\n [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n <a [href]=\"image.URL\" download><svg id=\"download-icon\" width=\"44\" height=\"44\"\r\n viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\"\r\n stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_3822_19479\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_3822_19479\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></a>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n </div>\r\n \r\n <ng-container *ngIf=\"heatmapLoading\">\r\n <div class=\"row loader concheatmap d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heatmapNoData && !heatmapLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body concheatmap d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Overall Store Concentration\r\n Heatmap</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"card-header border-0 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ selectedTab }} Analysis</span>\r\n </h3>\r\n </div>\r\n <div class=\"body me-4\">\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <!-- <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> -->\r\n <div class=\"m-4\" *ngIf=\"!cardDataLoading\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Footfall</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title ms-12\">{{ overallStoreData?.footfall?.zoneCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.footfall?.storeRate || '--' }}%</span> of store footfall\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Impression Rate</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">{{ overallStoreData?.impression?.zoneRate || '--' }}%</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.impression?.storeRate || '--' }}%</span> Store Impression\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Bounced Footfall</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title me-6\">{{ overallStoreData?.bounced?.zoneCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.bounced?.storeRate || '--' }}%</span> of total bounced\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Engagers</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title ms-10\">{{ overallStoreData?.engagers?.zoneCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.engagers?.storeRate || '--' }}%</span> of total engagers\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Avg. Zone Dwell Time</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title me-12\">{{ overallStoreData?.avgDwellTime?.zoneAvgDwellTime || '--' }} mins</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n Avg. dwell time <span class=\"textprimary mx-1\">{{ overallStoreData?.avgDwellTime?.storeAvgDwellTime || '--' }} mins</span>\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row\">\r\n <div class=\"col-5\">\r\n <div class=\"headtext p-3\">Age & Gender Analysis</div>\r\n <div class=\"card-body p-0 mb-2\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"genderchartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-7\">\r\n <div class=\"mt-14\">\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div class=\"card-body p-0 mt-20\">\r\n <div>\r\n \r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let i of getAgeArray()\">\r\n <td>\r\n <div class=\"overalltext\">{{ ageAnalysis[i]?.category || '' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ ageAnalysis[i]?.value?.toFixed(0) || '--' }}%</div>\r\n </td>\r\n <td *ngIf=\"ageAnalysis[i + 1]?.category\">\r\n <div class=\"overalltext\">{{ ageAnalysis[i + 1]?.category || '' }}</div>\r\n </td>\r\n <td *ngIf=\"ageAnalysis[i + 1]?.category\">\r\n <div class=\"table-title\">{{ ageAnalysis[i + 1]?.value?.toFixed(0) || '--' }}%</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"selectedTab !== 'Overall Store'\" class=\"row p-8\">\r\n <div class=\"col-12 trajectorycard\">\r\n <div class=\"card-header border-0 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ selectedTab }} Trajectory Analysis</span>\r\n </h3> \r\n </div>\r\n <div class=\"card-body\">\r\n \r\n \r\n\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <ng-container *ngIf=\"trajectoryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trajectoryNoData && !trajectoryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Trajectory Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!trajectoryLoading && !trajectoryNoData\" class=\"arcdiagram\">\r\n <div id=\"arcDiagramDiv\"></div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-6 p-12\">\r\n <ng-container *ngIf=\"trajectoryRateLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trajectoryRateNoData && !trajectoryRateLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Trajectory Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!trajectoryRateLoading && !trajectoryRateNoData\" class=\"row ps-15 mt-20\">\r\n \r\n <div class=\"col px-2\">\r\n <div class=\"card card-border p-6\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headcount\">\r\n {{ currentZone?.impressionRate || '--' }}% \r\n <span class=\"overalltext\">Impression Rate</span>\r\n </span>\r\n </h3>\r\n <span class=\"overalltext my-1\">\r\n {{ selectedTab }}\r\n <svg width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3.33594 8.57096H12.6693M12.6693 8.57096L8.0026 3.9043M12.6693 8.57096L8.0026 13.2376\" \r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"overalltext\">Other Zones</span>\r\n </span>\r\n <div class=\"textprimary my-4\">\r\n {{ currentZone?.ageGenderRate || '--' }}% \r\n <span class=\"ratetext\">{{ currentZone?.gender || '--' }} Rate</span>\r\n <span class=\"badgegrey ms-1\">{{ currentZone?.ageGroup || '--' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"col px-2\">\r\n <div class=\"card card-border p-6\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headcount\">\r\n {{ otherZone?.impressionRate || '--' }}% \r\n <span class=\"overalltext\">Impression Rate</span>\r\n </span>\r\n </h3>\r\n <span class=\"overalltext my-1\">\r\n Other Zones\r\n <svg width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3.33594 8.57096H12.6693M12.6693 8.57096L8.0026 3.9043M12.6693 8.57096L8.0026 13.2376\" \r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"overalltext\">{{ selectedTab }}</span>\r\n </span>\r\n <div class=\"textprimary my-4\">\r\n {{ otherZone?.ageGenderRate || '--' }}% \r\n <span class=\"ratetext\">{{ otherZone?.gender || '--' }} Rate</span>\r\n <span class=\"badgegrey ms-1\">{{ otherZone?.ageGroup || '--' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\">\r\n <div ngbAccordion>\r\n <div ngbAccordionItem [collapsed]=\"false\">\r\n <h2 ngbAccordionHeader>\r\n <button class=\"headtext\" ngbAccordionButton>Image Directory<div class=\"divider\"></div></button>\r\n </h2>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-image-directory></lib-image-directory>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container> -->\r\n \r\n</div>\r\n\r\n\r\n\r\n","import { Component, EventEmitter, HostListener, Input, Output, Provider, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nconst SELECT_CONTROL_VALUE_ACCESSOR: Provider = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ReactiveSelectComponent),\r\n multi: true,\r\n};\r\n\r\n@Component({\r\n selector: 'lib-reactive-select',\r\n templateUrl: './reactive-select.component.html',\r\n styleUrl: './reactive-select.component.scss',\r\n providers: [SELECT_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class ReactiveSelectComponent implements ControlValueAccessor {\r\n\r\n private onTouched: Function;\r\n private onChanged: Function;\r\n protected isDisabled: boolean;\r\n @Input() idField: string\r\n @Input() nameField: string\r\n @Input() label: string\r\n @Input() data: any\r\n protected isOpened: boolean = false\r\n protected selected: Record<string, any> | null = null\r\n protected selectedId: string | number\r\n\r\n writeValue(val: string | number): void {\r\n this.selectedId = val\r\n this.selected = this.data.filter((item:Record<string, any>)=> item?.[this.idField] === val)[0] \r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChanged = fn\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled\r\n\r\n }\r\n\r\n onSelect(item: Record<string, any>) {\r\n this.onTouched()\r\n this.selected = item\r\n this.selectedId = item?.[this.idField] \r\n this.isOpened = false\r\n this.onChanged(this.selectedId)\r\n this.onSelectionChange(item); \r\n }\r\n\r\n \r\n onSelectionChange(item: Record<string, any>) {\r\n this.valueChange.emit(item?.[this.idField]);\r\n }\r\n @HostListener('document:click', ['$event'])\r\n onClick(event: MouseEvent) {\r\n if (!this.isDisabled) {\r\n const targetElement = event.target as HTMLElement;\r\n if (!this.isComponentClicked(targetElement)) {\r\n this.isOpened = false;\r\n }\r\n }\r\n }\r\n\r\n isComponentClicked(targetElement: HTMLElement): boolean {\r\n const parentElement = targetElement.parentElement;\r\n if (parentElement) {\r\n const clickedOnComponent = parentElement.classList.contains('custom-select');\r\n if (clickedOnComponent) {\r\n return true;\r\n } else {\r\n return this.isComponentClicked(parentElement);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n\r\n}\r\n","<div class=\"custom-select w-200px\">\r\n <div class=\"form-group\">\r\n <label *ngIf=\"label\" class=\"form-label w-100\">{{label}}</label>\r\n <div class=\"position-relative\">\r\n <div (click)=\"isOpened = !isOpened;\" [ngClass]=\"isDisabled ? 'disable' : ''\" class=\"form-select dropselect w-100\">\r\n {{selected?.[nameField]}}</div>\r\n <div *ngIf=\"isOpened\" class=\"card py-2 w-100 position-absolute end-0 z-1 drop-list\">\r\n <ul class=\"list-unstyled mb-2 w-100\">\r\n <li *ngFor=\"let item of data\" (click)=\"onSelect(item)\"\r\n [ngClass]=\"item?.[idField] === selected?.[idField] ? 'active' : ''\"\r\n class=\"text px-5 items cursor-pointer py-4 w-100\">\r\n {{item?.[nameField]}}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component, OnInit, OnDestroy, ElementRef, NgZone, ChangeDetectorRef } from '@angular/core';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5flow from \"@amcharts/amcharts5/flow\";\r\nimport am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { Subject, debounceTime, distinctUntilChanged, filter, takeUntil } from \"rxjs\";\r\n\r\n@Component({\r\n selector: 'lib-customer-journey',\r\n templateUrl: './customer-journey.component.html',\r\n styleUrl: './customer-journey.component.scss'\r\n})\r\nexport class CustomerJourneyComponent implements OnDestroy,OnInit {\r\n private root: am5.Root;\r\n private destroy$ = new Subject<void>();\r\n form: FormGroup;\r\n selectControl: FormControl;\r\n datasets: Array<{ value: string, label: string }> = [\r\n { value: 'top', label: 'Highest Visited Path' },\r\n { value: 'bottom', label: 'Lowest Visited Path' }\r\n ];\r\n\r\n isExport: boolean = false;\r\n itemsPerPage = 10\r\n currentPage = 1\r\n totalItems = 0\r\n paginationSizes = [10, 20, 30]\r\n pageSize = 10\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n searchInput: any =\"\";\r\n customerJourneyData: any[] = [];\r\n searchDisabled: boolean = false;\r\n invoiceList: any[] = [];\r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n customerjourneyLoading: boolean = true;\r\n customerjourneyNoData: boolean = false;\r\n headerData: any;\r\n sortDirection: any = '';\r\n showAverage: boolean = true;\r\n totalfootfallCount: number | null = null;;\r\n\r\n constructor(private zone: NgZone, private elRef: ElementRef, private fb: FormBuilder, private Zonev2Service: Zonev2Service,\r\n private changeDetector: ChangeDetectorRef,\r\n public gs: GlobalStateService,public modalService: NgbModal,\r\n private router: Router,private route: ActivatedRoute,\r\n private toast: ToastService) {}\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n \r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.initializeChart();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.selectControl = new FormControl('top');\r\n this.form = this.fb.group({\r\n selectControl: this.selectControl\r\n });\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n // this.getCustomerJourney()\r\n this.getCustomerJourneyTable();\r\n // this.initializeChart();\r\n})\r\nthis.Zonev2Service.footfall$.subscribe((count) => {\r\n this.totalfootfallCount = count;\r\n this.getCustomerJourney();\r\n});\r\n \r\n }\r\n getCustomerJourney(): void {\r\n this.customerjourneyLoading = true;\r\n this.customerjourneyNoData = false;\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores?.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n search: this.searchInput,\r\n sortType: this.selectControl.value,\r\n limit: this.pageSize,\r\n offset: this.currentPage - 1,\r\n export: false,\r\n };\r\n\r\n this.Zonev2Service.getCustomerJourney(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n // this.customerjourneyLoading = true;\r\n if (response && response.status === 'success') {\r\n this.customerjourneyLoading = false;\r\n this.customerjourneyNoData = false;\r\n this.initializeChart(); // Initialize chart when data is available\r\n this.updateChart(response.data.customerJourneyData, this.totalfootfallCount);\r\n \r\n } else {\r\n this.customerjourneyLoading = false;\r\n this.customerjourneyNoData = true;\r\n }\r\n }, (error:any) => {\r\n this.customerjourneyLoading = false;\r\n this.customerjourneyNoData = true;\r\n // console.error('Error fetching customer journey data:', error);\r\n });\r\n}\r\ninitializeChart(): void {\r\n const chartDiv = document.getElementById('customerjourney');\r\n if (!chartDiv) {\r\n // console.error('Could not find HTML element with id customerjourney');\r\n return;\r\n }\r\n\r\n if (!this.root) { // Check if chart is already initialized\r\n try {\r\n this.root = am5.Root.new('customerjourney');\r\n this.root.setThemes([am5themes_Animated.new(this.root)]);\r\n\r\n const series = this.root.container.children.push(am5flow.Sankey.new(this.root, {\r\n sourceIdField: \"from\",\r\n targetIdField: \"to\",\r\n valueField: \"value\",\r\n paddingRight: 100\r\n }));\r\n } catch (error) {\r\n // console.error('Error initializing chart:', error);\r\n }\r\n }\r\n}\r\n\r\nupdateChart(data: any[], footfallCount: number | null): void {\r\n let filteredData = this.removeCircularLinks(data);\r\n // let firstZone = filteredData.filter((item:any) => {\r\n // let findExists = filteredData.find((ele:any) => ele.to == item.from);\r\n // if(!findExists) {\r\n // return item;\r\n // }\r\n // });\r\n // let lastZone = filteredData.filter((item:any) => {\r\n // let findExists = filteredData.find((ele:any) => ele.from == item.to);\r\n // if(!findExists) {\r\n // return item;\r\n // }\r\n // });\r\n \r\n // firstZone = firstZone.map((item) => {\r\n // return {from:'Entry ('+this.totalfootfallCount+')',\r\n // to:item.from,\r\n // value:item.value,}\r\n // })\r\n // lastZone = lastZone.map((item) => {\r\n // return {from:item.to,to:'Exit ('+this.totalfootfallCount+')',value:item.value,}\r\n // })\r\n\r\n // filteredData = [...firstZone,...filteredData,...lastZone];\r\n\r\n if (this.root) {\r\n const series = this.root.container.children.getIndex(0) as am5flow.Sankey;\r\n if (series) {\r\n // Check if data is available, otherwise use fallback data\r\n if (filteredData.length > 0) {\r\n series.data.setAll(filteredData); // Update with API data\r\n } else {\r\n \r\n // Predefined sample data as fallback\r\n series.data.setAll([filteredData]);\r\n }\r\n\r\n this.changeDetector.detectChanges(); // Trigger Angular change detection\r\n } else {\r\n // console.error('Series not found for chart');\r\n }\r\n }\r\n}\r\n\r\nremoveCircularLinks(data: any[]): any[] {\r\n const graph = new Map();\r\n const result = [];\r\n\r\n function hasCycle(from:any, to:any, visited:any) {\r\n if (from === to) return true;\r\n if (visited.has(from)) return false;\r\n\r\n visited.add(from);\r\n\r\n if (graph.has(from)) {\r\n for (const neighbor of graph.get(from)) {\r\n if (hasCycle(neighbor, to, visited)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n visited.delete(from);\r\n return false;\r\n }\r\n\r\n for (const { from, to, value } of data) {\r\n if (hasCycle(to, from, new Set())) {\r\n continue;\r\n }\r\n\r\n result.push({ from, to, value });\r\n\r\n if (!graph.has(from)) {\r\n graph.set(from, []);\r\n }\r\n graph.get(from).push(to);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n \r\n setColorStep(series: any, step: number): void {\r\n series.nodes.set(\"colors\", am5.ColorSet.new(this.root, {\r\n step: step\r\n }));\r\n }\r\n \r\n onValueChange(event: any): void {\r\n this.getCustomerJourney();\r\n }\r\n\r\n getCustomerJourneyTable(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.pageSize,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.Zonev2Service.getCustomerJourneyTable(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n // this.customerJourneyData = response.data;\r\n this.customerJourneyData = response.data.customerJourneyTableData;\r\n this.totalItems = response.data.totalCount\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.customerJourneyData = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.customerJourneyData = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n onExport(): void {\r\n this.currentPage = 1;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: 10000,\r\n offset: 0,\r\n export: true\r\n };\r\n\r\n this.Zonev2Service.getCustomerJourneyTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n // console.log('API Response:', res); \r\n this.Zonev2Service.saveAsExcelFile(res, 'CustomerJourney_list');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n }\r\n searchField(): void {\r\n this.getCustomerJourneyTable();\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getCustomerJourneyTable();\r\n }\r\n onPageSizeChange(pageSize: any) {\r\n this.currentPage = 1;\r\n this.pageSize = parseInt(pageSize)\r\n this.getCustomerJourneyTable()\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.currentPage = parseInt(pageOffset)\r\n this.getCustomerJourneyTable()\r\n }\r\n toggleView(): void {\r\n this.showAverage =!this.showAverage;\r\n if (this.showAverage === true) {\r\n // this.getCustomerJourney()\r\n // this.initializeChart();\r\n }\r\n }\r\n goToZone(){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n datavalue.store = datavalue.stores[0].storeId;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.router.navigate([\"/manage/stores/zones\"], {\r\n queryParams: { storeId: datavalue.stores[0].storeId},\r\n });\r\n \r\n }\r\n\r\n\r\n}","<div class=\"card\">\r\n <div [hidden]=\"!showAverage\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\"><span class=\"card-label mb-2\">Customer Journey</span></h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1 justify-content-between\">\r\n <button (click)=\"toggleView()\" type=\"button\" class=\"btn btn-outline align-items-end\">\r\n View All Zones</button>\r\n <form class=\"mx-4\" [formGroup]=\"form\">\r\n <lib-reactive-select\r\n [formControl]=\"selectControl\" \r\n [idField]=\"'value'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"datasets\"\r\n class=\"w-100\"\r\n (valueChange)=\"onValueChange($event)\">\r\n </lib-reactive-select>\r\n </form>\r\n\r\n <button (click)=\"goToZone()\"\r\n class=\"btn bg-light-primary btn-light-primary btn-active-light-primary\"><span\r\n ><svg \r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M9.99984 4.16602V15.8327M4.1665 9.99935H15.8332\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg></span> Add New Zone \r\n </button>\r\n \r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body\">\r\n <ng-container *ngIf=\"customerjourneyLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"customerjourneyNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Chart</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div [hidden]=\"customerjourneyLoading || customerjourneyNoData\" id=\"customerjourney\"></div>\r\n </div>\r\n</div>\r\n \r\n<div [hidden]=\"showAverage\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Customer Journey</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n \r\n <div class=\"d-flex align-items-center position-relative my-1 justify-content-between\">\r\n <button (click)=\"toggleView()\" type=\"button\" class=\"btn btn-outline align-items-end mx-4\">\r\n View Average Customer Journey</button>\r\n <span class=\"me-4\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute mt-3 ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\">\r\n </rect>\r\n <path\r\n 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\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 me-4 footfallsearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n /></span>\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!customerJourneyData.length\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('noOfStores')\">\r\n No. of stores\r\n <svg [ngClass]=\"sortColumName === 'noOfStores' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'noOfStores' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneFF')\">\r\n Zone FF\r\n <svg [ngClass]=\"sortColumName === 'zoneFF' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneFF' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('impressions')\">\r\n Impressions\r\n <svg [ngClass]=\"sortColumName === 'impressions' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'impressions' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('AvgDwellTime')\">\r\n Avg Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'AvgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'AvgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of customerJourneyData\">\r\n <td><div class=\"table-title\">{{ store.zoneName || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.noOfStores || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.zoneFF || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.impressions || '--' }}%</div></td>\r\n <td><div class=\"table-title\">{{ store.AvgDwellTime || '--' }} Mins</div></td>\r\n </tr> \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n \r\n </div>\r\n</div>\r\n</div>","import { ChangeDetectorRef, Component, ElementRef, NgZone } from '@angular/core';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { FormBuilder } from '@angular/forms';\r\n\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n@Component({\r\n selector: 'lib-top-performing',\r\n templateUrl: './top-performing.component.html',\r\n styleUrl: './top-performing.component.scss'\r\n})\r\n\r\nexport class TopPerformingComponent {\r\n topPerformingStores: any[] = []; \r\n topPerformingZones: any[] = []; \r\n searchInput: string = '';\r\n searchDisabled: boolean = false;\r\n analysisLoading: boolean = true;\r\n analysisNoData: boolean = false;\r\n topperformingstoresLoading: boolean = true;\r\n topperformingstoresNodata: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n type: string = 'top-zones';\r\n storetype: string = 'top-Stores';\r\n\r\n // Default selected type\r\n disableTopZones: boolean = false; // Control whether the Top 5 Zones button is disabled\r\n disableBottomZones: boolean = false;\r\n disableTopStores: boolean = false; // Control whether the Top 5 Zones button is disabled\r\n disableBottomStores: boolean = false;\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n pageSize = 5\r\n currentPage = 1\r\n\r\n // invoiceNoData: boolean = true;\r\n // invoiceLoading: boolean = false;\r\n // isExport: boolean = false;\r\n // clientId: string = '';\r\n // userType:any = '';\r\n private readonly destroy$ = new Subject();\r\n sortStoreColumName: any = '';\r\n constructor(public modalService: NgbModal, private fb: FormBuilder, private Zonev2Service: Zonev2Service, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService,private elementRef: ElementRef,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getTopPerformingZones('top');\r\n this.getTopPerformingStores('top')\r\n})\r\n }\r\n\r\n ngOnDestroy(): void {\r\n \r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n\r\n getTopPerformingZones(sortType: string): void {\r\n this.analysisLoading = true;\r\n this.analysisNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n sortType: sortType, // top or bottom\r\n limit: this.pageSize,\r\n offset: this.currentPage -1,\r\n };\r\n \r\n this.Zonev2Service.getTopPerformingZones(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.analysisLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if(response?.data?.topPerformingZones?.length === 0){\r\n this.analysisLoading = false;\r\n this.analysisNoData = true;\r\n }else{\r\n this.topPerformingZones = response?.data?.topPerformingZones;\r\n this.analysisLoading = false;\r\n this.analysisNoData = false;\r\n }\r\n } else {\r\n this.analysisLoading = false;\r\n this.analysisNoData = true;\r\n this.topPerformingZones = []\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.topPerformingZones = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n getTopPerformingStores(sortType: string): void {\r\n this.topperformingstoresLoading = true;\r\n this.topperformingstoresNodata = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n sortType: sortType, // top or bottom\r\n limit: this.pageSize,\r\n offset: this.currentPage -1, \r\n };\r\n\r\n this.Zonev2Service.getTopPerformingStores(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.topperformingstoresLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if(response?.data?.topPerformingStores?.length === 0){\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = true;\r\n }else{\r\n this.topPerformingStores = response?.data?.topPerformingStores;\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = false;\r\n }\r\n\r\n \r\n } else {\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = true;\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n\r\n sortData(column: string,): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getTopPerformingZones(this.type);\r\n }\r\n\r\n \r\n sortDataStore(column: string,): void {\r\n if (this.sortStoreColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortStoreColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getTopPerformingStores(this.storetype);\r\n }\r\n \r\n selectPlanzone(type: string): void {\r\n this.type = type;\r\n if (type === 'top-zones') {\r\n this.getTopPerformingZones('top'); // Fetch top zones\r\n } else if (type === 'bottom-zones') {\r\n this.getTopPerformingZones('bottom'); // Fetch bottom zones\r\n }\r\n }\r\n selectPlanStore(storetype: string): void {\r\n this.storetype = storetype;\r\n if (storetype === 'top-Stores') {\r\n this.getTopPerformingStores('top'); // Fetch top zones\r\n } else if (storetype === 'bottom-Stores') {\r\n this.getTopPerformingStores('bottom'); // Fetch bottom zones\r\n }\r\n }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n\r\n \r\n\r\n // selectPlan(planType: string): void {\r\n // if (planType === 'top-zones') {\r\n // this.type = 'top-zones'; // Select Top 5 Zones\r\n // } else if (planType === 'bottom-zones') {\r\n // this.type = 'bottom-zones'; // Select Bottom 5 Zones\r\n // }\r\n // }\r\n\r\n \r\n}","<div class=\"row \">\r\n <div class=\"d-flex justify-content-between p-3\">\r\n <div class=\"col-lg-6 card\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Zones <span\r\n ngbTooltip=\"Top performing zones across the stores selected\" placement=\"top\"\r\n triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n <span class=\"subratetext mt-2\">From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'top-zones',\r\n 'inactivePlanBtn': type !== 'top-zones',\r\n 'disabled': disableTopZones\r\n }\" \r\n (click)=\"selectPlanzone('top-zones')\" \r\n [attr.disabled]=\"disableTopZones ? true : null\">\r\n Top 5 Zones\r\n </button>\r\n \r\n <button class=\"btn btn-outline px-6 py-3\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'bottom-zones',\r\n 'inactivePlanBtn': type !== 'bottom-zones',\r\n 'disabled': disableBottomZones\r\n }\" \r\n (click)=\"selectPlanzone('bottom-zones')\" \r\n [attr.disabled]=\"disableBottomZones ? true : null\">\r\n Bottom 5 Zones\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-container mx-4\">\r\n <table *ngIf=\"!analysisLoading && !analysisNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Zone Name</th>\r\n <th>Footfall</th>\r\n <th>Bounced</th>\r\n <th>Engagers</th>\r\n <th>Impressions</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive topstores\">\r\n <tr *ngFor=\"let zone of topPerformingZones\">\r\n <td>\r\n <div class=\"table-title\">{{ zone?.zoneName ? zone.zoneName : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.footfallCount ? zone.footfallCount : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.bouncedCount ? zone.bouncedCount : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.engagersCount ? zone.engagersCount : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.impressionRate ? zone.impressionRate + '%' : '--' }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"analysisLoading\">\r\n <div class=\"row loader Analysiscard d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"analysisNoData && !analysisLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 Analysiscard\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Zones</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n \r\n </div>\r\n <div class=\"col-lg-6 card mx-2\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Stores <span\r\n ngbTooltip=\"Top performing stores and their concentration % along with avg dwell time\" placement=\"top\"\r\n triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n <span class=\"subratetext mt-2\">From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': storetype === 'top-Stores',\r\n 'inactivePlanBtn': storetype !== 'top-Stores',\r\n 'disabled': disableTopStores\r\n }\" \r\n (click)=\"selectPlanStore('top-Stores')\" \r\n [attr.disabled]=\"disableTopStores ? true : null\">\r\n Top 5 Stores\r\n </button>\r\n \r\n <button class=\"btn btn-outline px-6 py-3\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': storetype === 'bottom-Stores',\r\n 'inactivePlanBtn': storetype !== 'bottom-Stores',\r\n 'disabled': disableBottomStores\r\n }\" \r\n (click)=\"selectPlanStore('bottom-Stores')\" \r\n [attr.disabled]=\"disableBottomStores ? true : null\">\r\n Bottom 5 Stores\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-container mx-4\">\r\n <table *ngIf=\"!topperformingstoresLoading && !topperformingstoresNodata\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Store Info</th>\r\n <th>Zone Name</th>\r\n <th>Zone Footfall</th>\r\n <th>Impressions</th>\r\n <th>Avg Dwell Time</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive topstores\">\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td>\r\n <div class=\"table-title-primary cursor-pointer\" (click)=\"storeView(store.storeId)\">{{ store.storeName || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneName || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneFootfall || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.impressionRate || '--' }}%</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.avgDwellTime || '--' }} mins</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"topperformingstoresLoading\">\r\n <div class=\"row loader Analysiscard d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"topperformingstoresNodata && !topperformingstoresLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 Analysiscard\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Stores</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { Subject, debounceTime, distinctUntilChanged, filter, takeUntil } from \"rxjs\";\r\nimport { FormControl } from '@angular/forms';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n@Component({\r\n selector: 'lib-summary-table',\r\n templateUrl: './summary-table.component.html',\r\n styleUrl: './summary-table.component.scss'\r\n})\r\n\r\nexport class SummaryTableComponent {\r\n isExport: boolean = false;\r\n itemsPerPage = 10\r\n currentPage = 1\r\n totalItems = 0\r\n paginationSizes:any[] = [];\r\n pageSize = 10\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n searchInput: any =\"\";\r\n topPerformingStores: any[] = [];\r\n searchDisabled: boolean = false;\r\n invoiceList: any[] = [];\r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n headerData: any;\r\n private destroy$ = new Subject<void>();\r\n\r\n // loading: boolean = true;\r\n // noData: boolean = false;\r\n\r\n // user: any;\r\n // searchInput = new FormControl(\"\");\r\n // receivedData: string = \"stores\";\r\n // columns: any[];\r\n // sortColumName: string;\r\n // sortDirection: number;\r\n\r\n constructor(\r\n private Zonev2Service: Zonev2Service,\r\n private changeDetector: ChangeDetectorRef,\r\n public gs: GlobalStateService,public modalService: NgbModal,\r\n private router: Router,private route: ActivatedRoute,\r\n private toast: ToastService\r\n ) {}\r\n\r\n \r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getSummayTable();\r\n})\r\n \r\n }\r\n\r\n \r\n getSummayTable(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.Zonev2Service.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if(response?.data?.zoneSummaryData?.length === 0){\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = false;\r\n }else{\r\n this.topPerformingStores = response?.data?.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n }\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n getSummayTable1(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.Zonev2Service.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response?.data?.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n // this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n onExport(): void {\r\n this.currentPage = 0;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: 10000,\r\n offset: this.currentPage,\r\n export: true\r\n };\r\n\r\n this.Zonev2Service.getSummaryTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.Zonev2Service.saveAsExcelFile(res, 'ZoneSummaryTable_list');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n }\r\n searchField(): void {\r\n this.headerData.search = this.searchInput;\r\n this.headerData.export = false;\r\n this.currentPage = 1;\r\n this.pageSize=10;\r\n this.getSummayTable();\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable1();\r\n }\r\n onPageSizeChange(pageSize: any) {\r\n this.currentPage = 1;\r\n this.itemsPerPage = pageSize;\r\n this.pageSize = pageSize;\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable1()\r\n\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.currentPage = pageOffset\r\n this.getSummayTable()\r\n }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n setPaginationSizes() {\r\n if (this.totalItems > 10) {\r\n this.paginationSizes = [10, 20, 30];\r\n } else {\r\n this.paginationSizes = [this.totalItems]; // Just one option if less than 10\r\n }\r\n this.pageSize = this.paginationSizes[0];\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Zone Summary Table</span>\r\n <span class=\"text-sub mb-2\"> From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\">\r\n </rect>\r\n <path\r\n 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\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 me-4 footfallsearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!topPerformingStores.length\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">\r\n Store Name\r\n <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n \r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">\r\n Store ID\r\n <svg [ngClass]=\"sortColumName === 'storeId' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('date')\">\r\n Date\r\n <svg [ngClass]=\"sortColumName === 'date' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'date' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n \r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Zone Conc.Rate\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Avg Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Zone FF\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('bouncedCount')\">\r\n Zone Bounced\r\n <svg [ngClass]=\"sortColumName === 'bouncedCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'bouncedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('engagersCount')\">\r\n Zone Engagers\r\n <svg [ngClass]=\"sortColumName === 'engagersCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'engagersCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('below12')\">\r\n Age Below 12\r\n <svg [ngClass]=\"sortColumName === 'below12' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'below12' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('13-19')\">\r\n Age 13-19\r\n <svg [ngClass]=\"sortColumName === '13-19' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '13-19' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('20-30')\">\r\n Age 20-30\r\n <svg [ngClass]=\"sortColumName === '20-30' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '20-30' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('31-45')\">\r\n Age 31-45\r\n <svg [ngClass]=\"sortColumName === '31-45' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '31-45' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('46-59')\">\r\n Age 46-59\r\n <svg [ngClass]=\"sortColumName === '46-59' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '46-59' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('60 above')\">\r\n Age 60+\r\n <svg [ngClass]=\"sortColumName === '60 above' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '60 above' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('maleCount')\">\r\n Male\r\n <svg [ngClass]=\"sortColumName === 'maleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'maleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('femaleCount')\">\r\n Female\r\n <svg [ngClass]=\"sortColumName === 'femaleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'femaleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td><a class=\"table-title-primary cursor-pointer\" (click)=\"storeView(store.storeId)\">{{ store.storeName || '--' }}</a></td>\r\n <td><div class=\"table-title\">{{ store.storeId || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store?.date | date: 'd MMM, y' || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.zoneName || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.concentrationRate?.toFixed(0) || '0' }}%</div></td>\r\n <td><div class=\"table-title\">{{ store.avgDwellTime || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.footfallCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.bouncedCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.engagersCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.bellow12 || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['13-19'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['20-30'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['31-45'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['46-59'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['60 above'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.maleCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.femaleCount || '0' }}</div></td>\r\n </tr> \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Summary Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n \r\n </div>\r\n</div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { ZoneService } from '../services/zone.service';\r\n\r\n@Component({\r\n selector: 'lib-zone-v2',\r\n templateUrl: './zone-v2.component.html',\r\n styleUrl: './zone-v2.component.scss'\r\n})\r\nexport class ZoneV2Component {\r\n storeId: number = 0;\r\n headerData: any;\r\n showReportProcessingCard: boolean = true;\r\n yesterdayDate: string = '';\r\n dataProcessedLoading = true;\r\n private readonly destroy$ = new Subject();\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n constructor(\r\n private pageInfo: PageInfoService,public gs: GlobalStateService, private zoneService:ZoneService,private cd:ChangeDetectorRef\r\n ) {\r\n }\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.updateStoreId()\r\n this.setPageData();\r\n this.checkTodayReportStatus()\r\n})\r\n}\r\n\r\n setPageData() {\r\n this.pageInfo.setTitle(\"Zones\");\r\n this.pageInfo.setDescription(\"Zones\");\r\n this.pageInfo.setBreadcrumbs([\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: false },\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: true },\r\n ]);\r\n }\r\n updateStoreId(): void {\r\n this.storeId = this.headerData.stores.filter((store: any) => store.checked).length;\r\n }\r\n checkTodayReportStatus(): void {\r\n this.dataProcessedLoading = true;\r\n const reportParams = {\r\n clientId: this.headerData?.client,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate\r\n };\r\n this.zoneService.getCheckTodayReportStatus(reportParams)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.dataProcessedLoading = false\r\n this.showReportProcessingCard = res?.data?.reportSendStatus === true;\r\n this.yesterdayDate = res?.data?.yesterday || '';\r\n this.cd.detectChanges();\r\n },\r\n \r\n error: (err: any) => {\r\n console.error('Error checking report status:', err);\r\n this.showReportProcessingCard = false;\r\n }\r\n });\r\n }\r\n}\r\n\r\n","<div *ngIf=\"!showReportProcessingCard && !dataProcessedLoading\">\r\n<lib-zones-cards></lib-zones-cards>\r\n<div class=\"mt-4\">\r\n<lib-customer-journey></lib-customer-journey>\r\n</div>\r\n<div *ngIf=\"storeId === 1\" class=\"mt-4\">\r\n<lib-store-heatmap></lib-store-heatmap>\r\n</div>\r\n<div *ngIf=\"storeId > 1\" class=\"mt-2\">\r\n <lib-top-performing></lib-top-performing>\r\n</div>\r\n<div class=\"mt-4\" >\r\n <lib-summary-table></lib-summary-table>\r\n</div>\r\n</div>\r\n\r\n<div *ngIf=\"showReportProcessingCard && !dataProcessedLoading\" class=\"row px-3\"> \r\n <div class=\"card dataprocessed pb-0 px-0 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"dataprocessedgif\" src=\"./assets/tango/Icons/data_analyse_gif.gif\" alt=\"\">\r\n <div class=\"dataprocessed-title\">Data being Processed</div>\r\n <div class=\"dataprocessed-sub\">Data for the selected date {{ yesterdayDate }}, is currently being processed and will be available shortly.</div>\r\n <div class=\"dataprocessed-sub\"> If you wish to view data for other dates, Remove {{ yesterdayDate }} from your selection or choose a different date range.</div> \r\n </div>\r\n\r\n</div>\r\n<div *ngIf=\"dataProcessedLoading\" class=\"card row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n</div> \r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { TangoAnalyseZoneComponent } from './components/tango-analyse-zone/tango-analyse-zone.component';\r\nimport { ZoneV2Component } from './components/zone-v2/zone-v2.component';\r\n\r\n\r\nconst routes: Routes = [\r\n {\r\n path:'v1',\r\n component:TangoAnalyseZoneComponent\r\n },\r\n {\r\n path: 'v2',\r\n component: ZoneV2Component\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class TangoAnalyseZoneRoutingModule { }\r\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n\r\n@Component({\r\n selector: 'lib-image-directory-view',\r\n templateUrl: './image-directory-view.component.html',\r\n styleUrl: './image-directory-view.component.scss'\r\n})\r\nexport class ImageDirectoryViewComponent implements OnInit {\r\n @Input() Imagedata:any;\r\n @Input() processType:any;\r\n @Input() footfallDate:any;\r\n @Input() storeName:any;\r\n @Input() storeId:any;\r\n @Input() headerData:any;\r\n @Input() imageArray:any;\r\n @Input() folderName:any;\r\n Images: any;\r\n itemsPerPage = 10;\r\n currentPage = 1;\r\n totalItems = 1;\r\n paginationSizes = [1];\r\n pageSize = 1;\r\n dataSubscrptionValue: any=[];\r\n statusValues: any;\r\n filteredData: any;\r\n objData: any;\r\n storeArrayValue: any;\r\n constructor(private Zonev2Service:Zonev2Service, private cd: ChangeDetectorRef,){\r\n\r\n }\r\nngOnInit(): void {\r\n this.Images = this.Imagedata?.images?.entryTimeImage;\r\n this.filteredData = this.imageArray.filter((item:any) => item.folderName === this.folderName);\r\n this.totalItems = this.filteredData[0].count\r\n this.getStoreActive();\r\n}\r\nprivate readonly destroy$ = new Subject();\r\nngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n}\r\ngetStoreActive(){\r\nlet obj={\r\n \"clientId\":this.headerData.client,\r\n \"storeId\": this.storeId\r\n}\r\nthis.Zonev2Service\r\n.getStoresActive(obj)\r\n.pipe(takeUntil(this.destroy$))\r\n?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.dataSubscrptionValue = res.data.storeSubscription.product;\r\n }\r\n }\r\n })\r\n}\r\n\r\nimageData(type:any){\r\n if(type ==='entry'){\r\n this.Images = this.Imagedata?.images?.entryTimeImage\r\n } else if(type === 'exit'){\r\n this.Images = this.Imagedata?.images?.exitTimeImage\r\n } else if(type ==='staff') {\r\n this.Images = this.Imagedata?.images?.staffEngagementImage\r\n }\r\n\r\n}\r\n\r\n// getImageView() {\r\n// this.objData = {\r\n// storeId: this.headerData.stores\r\n// .filter((store: any) => store.checked)\r\n// .map((store: any) => store.storeId),\r\n// clientId: this.headerData.client,\r\n// processType: this.processType,\r\n// footfallDate: this.footfallDate,\r\n// folderName:this.folderName\r\n// };\r\n// this.service\r\n// .getFootfallDirectory(this.objData)\r\n// .pipe(takeUntil(this.destroy$))\r\n// ?.subscribe({\r\n// next: (res: any) => {\r\n// if (res && res.code === 200) {\r\n// if(!res?.data.footfallData.length){\r\n// } else{\r\n// this.Imagedata = res?.data.footfallData;\r\n// this.storeArrayValue = res?.data.storeName\r\n \r\n// this.cd.detectChanges();\r\n// }\r\n// } \r\n// },\r\n// error: (err: any) => {\r\n// this.cd.detectChanges();\r\n// },\r\n// complete: () => {},\r\n// });\r\n// }\r\n// onPageChange(pageOffset: number) {\r\n// this.currentPage = Number(pageOffset);\r\n// this.getImageView();\r\n// }\r\n\r\n// onPageSizeChange(pageSize: number) {\r\n// this.pageSize = Number(pageSize);\r\n// this.getImageView();\r\n// }\r\n}","<div class=\"row h-550px scroll w-100\"></div>\r\n <div class=\"col-md-12 col-lg-8 col-xl-8 col-xxl-8\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-7\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <!-- Display footfall count or '--' if not available -->\r\n <span class=\"card-label header\">{{storeName | titlecase}} - {{footfallDate | date:'dd MMM, yyyy'}}</span>\r\n </h3>\r\n </div>\r\n <!-- Switch toggle -->\r\n <div class=\"col-md-5 text-end\">\r\n <span class=\"custId\">Customer ID</span>\r\n <span class=\"badge badge-light-primary mx-2\">{{Imagedata?.tempId}}</span>\r\n <span class=\"badge badge-light-danger\">{{processType | titlecase}} </span>\r\n\r\n </div>\r\n </div>\r\n <div class=\"row contain\">\r\n <div class=\"col-12 mb-5\">\r\n <img class=\"cursor-pointer\" class=\"img-src\" [src]=\"Images\"\r\n (error)=\"Images = null\" alt=\"\">\r\n <div *ngIf=\"!Images\" class=\"no-preview\">\r\n <span class=\"mb-5\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\" d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-5 text-center\">Preview not available</span>\r\n <span class=\"description mb-5 text-center\">The selected camera is not available at the\r\n moment.</span>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row slider\">\r\n\r\n <ng-container>\r\n <div class=\"col-4\" *ngIf=\"Imagedata?.images?.entryTimeImage\">\r\n <div class=\"mb-5 border-2\" [ngClass]=\"{\r\n 'border-gray-active': Images === Imagedata?.images?.entryTimeImage,\r\n 'border-gray': Images !== Imagedata?.images?.entryTimeImage\r\n }\">\r\n <div>Entry Time</div>\r\n <img class=\"cursor-pointer w-100 rounded-2 mh-100px pb-1\"\r\n [src]=\"Imagedata?.images?.entryTimeImage\"\r\n (error)=\"Imagedata?.images.entryTimeImage = null\" alt=\"\" (click)=\"imageData('entry')\">\r\n <div *ngIf=\"!Imagedata?.images?.entryTimeImage\" class=\"no-preview-sm cursor-pointer\">\r\n <span class=\"mb-2\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-2 text-center\">Preview not available</span>\r\n <span class=\"description mb-2 text-center\">The selected camera is not available\r\n at\r\n the\r\n moment.</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\" *ngIf=\"Imagedata?.images?.staffEngagementImage\">\r\n <div class=\"mb-5 border-2\" [ngClass]=\"{\r\n 'border-gray-active': Images === Imagedata?.images?.staffEngagementImage,\r\n 'border-gray': Images !== Imagedata?.images?.staffEngagementImage\r\n }\">\r\n <div>Staff Engagement</div>\r\n <img class=\"cursor-pointer w-100 rounded-2 mh-100px pb-1\"\r\n [src]=\"Imagedata?.images?.staffEngagementImage\"\r\n (error)=\"Imagedata?.images.staffEngagementImage = null\" alt=\"\" (click)=\"imageData('staff')\">\r\n <div *ngIf=\"!Imagedata?.images?.staffEngagementImage\" class=\"no-preview-sm cursor-pointer\">\r\n <span class=\"mb-2\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-2 text-center\">Preview not available</span>\r\n <span class=\"description mb-2 text-center\">The selected camera is not available\r\n at\r\n the\r\n moment.</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4 \" *ngIf=\"Imagedata?.images?.exitTimeImage\">\r\n <div class=\"mb-5 border-2\" [ngClass]=\"{\r\n 'border-gray-active': Images === Imagedata?.images?.exitTimeImage,\r\n 'border-gray': Images !== Imagedata?.images?.exitTimeImage\r\n }\">\r\n <div>Exit Time</div>\r\n <img class=\"cursor-pointer w-100 rounded-2 mh-100px pb-1\"\r\n [src]=\"Imagedata?.images?.exitTimeImage\"\r\n (error)=\"Imagedata?.images.exitTimeImage = null\" alt=\"\" (click)=\"imageData('exit')\">\r\n <div *ngIf=\"!Imagedata?.images?.exitTimeImage\" class=\"no-preview-sm cursor-pointer\">\r\n <span class=\"mb-2\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-2 text-center\">Preview not available</span>\r\n <span class=\"description mb-2 text-center\">The selected camera is not available\r\n at\r\n the\r\n moment.</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <span (click)=\"next()\" class=\"next\">\r\n <span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"7\" height=\"12\" viewBox=\"0 0 7 12\"\r\n fill=\"none\">\r\n <path d=\"M1 11L6 6L1 1\" stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n\r\n </span> -->\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <!-- <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination> -->\r\n </div>\r\n <div class=\"col-md-12 col-lg-4 col-xl-4 col-xxl-4\">\r\n <div *ngIf=\"dataSubscrptionValue.tangoTraffic\" class=\"row\">\r\n <div class=\"col-12 mb-5 cam-details-header px-0\">Time Spent</div>\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-8\">\r\n\r\n <div class=\"py-2 img-doc-time text-primary text-decoration-underline fw-bold\">Entry Time <span\r\n class=\"ms-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33333 14H12.6667C13.403 14 14 13.403 14 12.6667V3.33333C14 2.59695 13.403 2 12.6667 2H3.33333C2.59695 2 2 2.59695 2 3.33333V12.6667C2 13.403 2.59695 14 3.33333 14ZM3.33333 14L10.6667 6.66667L14 10M6.66667 5.66667C6.66667 6.21895 6.21895 6.66667 5.66667 6.66667C5.11438 6.66667 4.66667 6.21895 4.66667 5.66667C4.66667 5.11438 5.11438 4.66667 5.66667 4.66667C6.21895 4.66667 6.66667 5.11438 6.66667 5.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n <div class=\"py-2 img-doc-time text-primary text-decoration-underline fw-bold\">Exit Time <span\r\n class=\"ms-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33333 14H12.6667C13.403 14 14 13.403 14 12.6667V3.33333C14 2.59695 13.403 2 12.6667 2H3.33333C2.59695 2 2 2.59695 2 3.33333V12.6667C2 13.403 2.59695 14 3.33333 14ZM3.33333 14L10.6667 6.66667L14 10M6.66667 5.66667C6.66667 6.21895 6.21895 6.66667 5.66667 6.66667C5.11438 6.66667 4.66667 6.21895 4.66667 5.66667C4.66667 5.11438 5.11438 4.66667 5.66667 4.66667C6.21895 4.66667 6.66667 5.11438 6.66667 5.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n <div class=\"py-2 img-doc-time\">Total Time Spent</div>\r\n <!-- <div class=\"py-2 img-doc-time\">Avg Dwell Time</div> -->\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n\r\n <div class=\"py-2 img-doc-value\">{{Imagedata.timeSpent.entryTime ?? '--'}} </div>\r\n <div class=\"py-2 img-doc-value\">{{Imagedata.timeSpent.exitTime ?? '--'}}</div>\r\n <div class=\"py-2 img-doc-value\">{{Imagedata.timeSpent.totalTimeSpent ?? '--'}}</div>\r\n <!-- <div class=\"py-2 img-doc-value\">20 Mins</div> -->\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <hr />\r\n\r\n <div *ngIf=\"!dataSubscrptionValue.tangoZone\" class=\"row my-2 px-2\">\r\n <div class=\"card productCard\">\r\n <div class=\"row \">\r\n <div class=\"col-md-7 py-5\">\r\n<div class=\"product-title\">\r\n Tango Zone\r\n</div>\r\n<div class=\"left-card-count-title mt-3\">\r\n Identify hotspots and optimize your merchandise with Tango Zone's store heatmap analytics\r\n</div>\r\n<div class=\"explore-btn mt-4\">Explore <span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15 10.8333V15.8333C15 16.2754 14.8244 16.6993 14.5118 17.0118C14.1993 17.3244 13.7754 17.5 13.3333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V6.66667C2.5 6.22464 2.67559 5.80072 2.98816 5.48816C3.30072 5.17559 3.72464 5 4.16667 5H9.16667M12.5 2.5H17.5M17.5 2.5V7.5M17.5 2.5L8.33333 11.6667\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-md-5 px-0\">\r\n <img class=\"h-100 w-100\" src=\"assets/tango/Images/zone-tango.svg\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"dataSubscrptionValue.tangoZone\" class=\"row\">\r\n <span class=\"zone-header\">Zones Visited</span>\r\n <ng-container class=\"h-200px scroll\">\r\n <div class=\"col-md-4 mt-2\">\r\n <span class=\"badge badge-light-primary \">Billing Area</span>\r\n </div>\r\n <div class=\"col-md-4 mt-2\">\r\n <span class=\"badge badge-light-primary \">Billing Area</span>\r\n </div>\r\n <div class=\"col-md-4 mt-2\">\r\n <span class=\"badge badge-light-primary \">Billing Area</span>\r\n </div>\r\n </ng-container>\r\n <div class=\"col-md-6 mt-5\">\r\n <span class=\"last-visit\">Last Visited Zone</span>\r\n </div>\r\n <div class=\"col-md-6 mt-5\">\r\n <span class=\"badge badge-light-primary mx-2\"> John Jacobs</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"dataSubscrptionValue.tangoZone\" class=\"mt-5 col-lg-12\">\r\n <button class=\"btn btn-light-primary1 w-100 px-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4713_25)\">\r\n <path d=\"M19.6673 5.83341L13.834 10.0001L19.6673 14.1667V5.83341Z\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12.1673 4.16675H3.00065C2.08018 4.16675 1.33398 4.91294 1.33398 5.83341V14.1667C1.33398 15.0872 2.08018 15.8334 3.00065 15.8334H12.1673C13.0878 15.8334 13.834 15.0872 13.834 14.1667V5.83341C13.834 4.91294 13.0878 4.16675 12.1673 4.16675Z\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4713_25\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.5)\"/>\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"ms-2\">View Trajectory</span></button>\r\n </div>\r\n <hr />\r\n <div *ngIf=\"!dataSubscrptionValue.tangoTrax\" class=\"row my-2 px-2\">\r\n <div class=\"card productCard\">\r\n <div class=\"row \">\r\n <div class=\"col-md-7 py-5\">\r\n<div class=\"product-title\">\r\n Tango Trax\r\n</div>\r\n<div class=\"left-card-count-title mt-3\">\r\n Create AI-driven checklists to streamline your processes and boost compliance with Tango Trax.\r\n</div>\r\n<div class=\"explore-btn mt-4\">Explore <span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15 10.8333V15.8333C15 16.2754 14.8244 16.6993 14.5118 17.0118C14.1993 17.3244 13.7754 17.5 13.3333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V6.66667C2.5 6.22464 2.67559 5.80072 2.98816 5.48816C3.30072 5.17559 3.72464 5 4.16667 5H9.16667M12.5 2.5H17.5M17.5 2.5V7.5M17.5 2.5L8.33333 11.6667\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-md-5 px-0\">\r\n <img class=\"h-100 w-100\" src=\"assets/tango/Images/trax-tango.svg\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div *ngIf=\"dataSubscrptionValue.tangoTrax\" class=\"row\">\r\n <div class=\"zone-header my-3 ps-3\">Staff Engagement</div>\r\n\r\n <div class=\"row ps-3 mb-2\">\r\n <div class=\"col-md-8\">\r\n\r\n <div class=\"py-2 img-doc-time text-primary text-decoration-underline fw-bold\">Time taken to assist <span\r\n class=\"ms-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33333 14H12.6667C13.403 14 14 13.403 14 12.6667V3.33333C14 2.59695 13.403 2 12.6667 2H3.33333C2.59695 2 2 2.59695 2 3.33333V12.6667C2 13.403 2.59695 14 3.33333 14ZM3.33333 14L10.6667 6.66667L14 10M6.66667 5.66667C6.66667 6.21895 6.21895 6.66667 5.66667 6.66667C5.11438 6.66667 4.66667 6.21895 4.66667 5.66667C4.66667 5.11438 5.11438 4.66667 5.66667 4.66667C6.21895 4.66667 6.66667 5.11438 6.66667 5.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n\r\n <div class=\"py-2 img-doc-time\">Time spent with staff</div>\r\n\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n\r\n <div class=\"py-2 img-doc-value\">{{Imagedata?.staffEngagement?.timeTakenToAssist ?? '--'}} </div>\r\n <div class=\"py-2 img-doc-value\">{{Imagedata?.staffEngagement?.timeSpentWithStaff ?? '--'}} </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <hr /> -->\r\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport dayjs from 'dayjs';\r\nimport { FormBuilder, FormControl } from '@angular/forms';\r\n\r\nimport { ImageDirectoryViewComponent } from '../image-directory-view/image-directory-view.component';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n@Component({\r\n selector: 'lib-image-directory',\r\n templateUrl: './image-directory.component.html',\r\n styleUrl: './image-directory.component.scss'\r\n})\r\n\r\nexport class ImageDirectoryComponent implements OnInit, OnDestroy {\r\n selectIndex: any = 0;\r\n selectedTime: any;\r\n objData: any;\r\n objectsArray: any;\r\n imagesArrayData: any;\r\n processType = \"footfall\";\r\n headerData: any;\r\n folderView = true;\r\n dayjs = dayjs;\r\n dateArray: string[];\r\n form: any;\r\n noData: boolean =false;\r\n loading:boolean =true;\r\n storeArrayValue: any;\r\n storeIdarray: any;\r\n constructor(\r\n private Zonev2Service: Zonev2Service,\r\n public gs: GlobalStateService,\r\n private cd: ChangeDetectorRef,\r\n private modalService: NgbModal,private fb: FormBuilder\r\n ) {\r\n this.form = this.fb.group({\r\n selectValue: new FormControl('') // Initialize as FormControl\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n if(data !==null || data?.client !== null){\r\n this.headerData = data;\r\n this.storeIdarray = this.headerData?.stores.filter((store:any) => store.checked).map((store:any) => store.storeId)\r\n this.objData = {\r\n storeId: data.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: data.client,\r\n processType: this.processType,\r\n footfallDate: this.headerData.date.endDate,\r\n };\r\n const initialValue = this.getInitialValue();\r\n const selectControl = this.form.get('selectValue') as FormControl;\r\n if (selectControl) {\r\n selectControl.setValue(initialValue);\r\n }\r\n this.backToFootfall();\r\n this.displayDateRange();\r\n }\r\n });\r\n }\r\n private readonly destroy$ = new Subject();\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n getImageFolder() {\r\n \r\n delete this.objData.folderName;\r\n this.Zonev2Service\r\n .getFootfallDirectoryFolders(this.objData)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.objectsArray = res?.data.footfallData;\r\n this.selectedTime = this.objectsArray[0].folderName;\r\n this.objData.folderName = this.selectedTime;\r\n this.getImageView();\r\n this.cd.detectChanges();\r\n } else {\r\n this.loading =false;\r\n this.noData =true;\r\n }\r\n },\r\n error: (err: any) => {\r\n this.cd.detectChanges();\r\n },\r\n complete: () => {},\r\n });\r\n }\r\n getImageView() {\r\n this.loading =true;\r\n this.noData =false;\r\n this.Zonev2Service\r\n .getFootfallDirectory(this.objData)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n if(!res?.data.footfallData.length){\r\n this.loading =false;\r\n this.noData =true;\r\n } else{\r\n this.imagesArrayData = res?.data.footfallData;\r\n this.storeArrayValue = res?.data.storeName\r\n this.loading =false;\r\n this.noData =false;\r\n this.cd.detectChanges();\r\n }\r\n } else {\r\n this.loading =false;\r\n this.noData =true;\r\n }\r\n },\r\n error: (err: any) => {\r\n this.cd.detectChanges();\r\n },\r\n complete: () => {},\r\n });\r\n }\r\n\r\n getimages(index: any, obj: any) {\r\n this.selectIndex = index;\r\n (this.objData.footfallDate = obj), (this.folderView = false);\r\n this.getImageFolder();\r\n }\r\n backToFootfall() {\r\n this.selectIndex = 0;\r\n this.folderView = true;\r\n }\r\n selectedTimes(val: any) {\r\n this.selectedTime = val;\r\n this.objData.folderName = val;\r\n this.folderView = false;\r\n this.selectedTime = val;\r\n this.getImageView();\r\n }\r\n\r\n imageView(obj: any,footfallDate:any) {\r\n const modalRef = this.modalService.open(ImageDirectoryViewComponent, {\r\n centered: true,\r\n size: \"xl\",\r\n scrollable: true,\r\n });\r\n modalRef.componentInstance.Imagedata = obj;\r\n modalRef.componentInstance.processType = this.objData.processType;\r\n modalRef.componentInstance.footfallDate = footfallDate;\r\n modalRef.componentInstance.storeName = this.storeArrayValue;\r\n modalRef.componentInstance.storeId = this.storeIdarray\r\n modalRef.componentInstance.headerData = this.headerData;\r\n modalRef.componentInstance.imageArray = this.objectsArray;\r\n modalRef.componentInstance.folderName = this.objData.folderName\r\n modalRef.result.then((result: any) => {});\r\n }\r\n\r\n getDateRangeArray(fromDate: string, toDate: string): string[] {\r\n const start = new Date(fromDate); // Convert string to Date object\r\n const end = new Date(toDate); // Convert string to Date object\r\n const dateArray: string[] = [];\r\n\r\n // Check if the dates are valid\r\n if (isNaN(start.getTime()) || isNaN(end.getTime())) {\r\n return dateArray;\r\n }\r\n\r\n // Loop from start date to end date\r\n let currentDate = start;\r\n while (currentDate <= end) {\r\n dateArray.push(currentDate.toISOString().split(\"T\")[0]); // Format YYYY-MM-DD\r\n currentDate.setDate(currentDate.getDate() + 1); // Increment the date by 1 day\r\n }\r\n\r\n return dateArray;\r\n }\r\n\r\n // Method to display or log the date range array\r\n displayDateRange() {\r\n const dates = this.getDateRangeArray(\r\n this.headerData.date.startDate,\r\n this.headerData.date.endDate\r\n );\r\n this.dateArray = dates;\r\n }\r\n datasets = [\r\n { value: 'footfall', label: 'Footfall' },\r\n { value: 'bounced', label: 'Bounced Footfall' },\r\n { value: 'engager', label: 'Engagers' },\r\n { value: 'missedOpportunity', label: 'Missed Opportunity' },\r\n { value: 'conversion', label: 'Conversion' }\r\n ];\r\n\r\n getInitialValue(): string {\r\n // For example, selecting the second item in the dataset\r\n return this.datasets[0].value; // Change as needed\r\n }\r\n onValueChange(selectedId: any) {\r\n this.objData.processType = selectedId,\r\n this.getImageFolder();\r\n }\r\n get selectControl(): FormControl {\r\n return this.form.get('selectValue') as FormControl;\r\n }\r\n}\r\n"," <div class=\"card-header border-0 px-0\">\r\n <div class=\"col-md-12\">\r\n <div class=\"switch-form-card\">\r\n <div class=\"d-flex align-items-center\">\r\n <svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#EAF8FF\" stroke-width=\"6\" />\r\n <path d=\"M23.8333 14.6666L15.5 24.6666H23L22.1667 31.3333L30.5 21.3333H23L23.8333 14.6666Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <div class=\"txt-one ms-2\">\r\n <ng-container>Examine individual footfall in gallery view with optimal sample images for detailed analysis.</ng-container>\r\n <!-- <ng-container *ngIf=\"isMultiple\">Upload multiple stores for configuration</ng-container> -->\r\n </div>\r\n </div>\r\n <div>\r\n <!-- <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M18.295 7.115C18.6844 6.72564 18.6844 6.09436 18.295 5.705C17.9056 5.31564 17.2744 5.31564 16.885 5.705L12 10.59L7.115 5.705C6.72564 5.31564 6.09436 5.31564 5.705 5.705C5.31564 6.09436 5.31564 6.72564 5.705 7.115L10.59 12L5.705 16.885C5.31564 17.2744 5.31564 17.9056 5.705 18.295C6.09436 18.6844 6.72564 18.6844 7.115 18.295L12 13.41L16.885 18.295C17.2744 18.6844 17.9056 18.6844 18.295 18.295C18.6844 17.9056 18.6844 17.2744 18.295 16.885L13.41 12L18.295 7.115Z\"\r\n fill=\"black\" />\r\n </svg> -->\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"folderView\" class=\"p-1\">\r\n <div class=\"row\">\r\n <div class=\"col-md-1 mt-5 text-center\" *ngFor=\"let obj of dateArray;let i = index\">\r\n <div (click)=\"getimages(i,obj)\">\r\n <div *ngIf=\"i === selectIndex;\">\r\n <span class=\"cursor-pointer\"><svg width=\"57\" height=\"56\" viewBox=\"0 0 57 56\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.154297\" width=\"56\" height=\"56\" rx=\"12\" fill=\"#33B5FF\" />\r\n <path\r\n d=\"M39.8216 36.1667C39.8216 36.7855 39.5758 37.379 39.1382 37.8166C38.7006 38.2542 38.1071 38.5 37.4883 38.5H18.8216C18.2028 38.5 17.6093 38.2542 17.1717 37.8166C16.7341 37.379 16.4883 36.7855 16.4883 36.1667V19.8333C16.4883 19.2145 16.7341 18.621 17.1717 18.1834C17.6093 17.7458 18.2028 17.5 18.8216 17.5H24.6549L26.9883 21H37.4883C38.1071 21 38.7006 21.2458 39.1382 21.6834C39.5758 22.121 39.8216 22.7145 39.8216 23.3333V36.1667Z\"\r\n stroke=\"white\" stroke-width=\"2.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <div class=\"text-center mt-2\">{{obj | date:'dd MMM'}}</div>\r\n </div>\r\n <div *ngIf=\"i !== selectIndex;\">\r\n <span class=\"cursor-pointer\"><svg width=\"57\" height=\"56\" viewBox=\"0 0 57 56\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.462891\" width=\"56\" height=\"56\" rx=\"12\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M40.1302 36.1667C40.1302 36.7855 39.8844 37.379 39.4468 37.8166C39.0092 38.2542 38.4157 38.5 37.7969 38.5H19.1302C18.5114 38.5 17.9179 38.2542 17.4803 37.8166C17.0427 37.379 16.7969 36.7855 16.7969 36.1667V19.8333C16.7969 19.2145 17.0427 18.621 17.4803 18.1834C17.9179 17.7458 18.5114 17.5 19.1302 17.5H24.9635L27.2969 21H37.7969C38.4157 21 39.0092 21.2458 39.4468 21.6834C39.8844 22.121 40.1302 22.7145 40.1302 23.3333V36.1667Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"2.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <div class=\"text-center mt-2\">{{obj | date:'dd MMM'}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n \r\n </div>\r\n <div *ngIf=\"!folderView\" class=\"p1\">\r\n <div class=\"row\">\r\n <div class=\"d-flex flex-shrink-0 mt-3 justify-content-between align-items-center\">\r\n <span class=\"cursor-pointer\" (click)=\"backToFootfall()\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_2585_7036)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path d=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2585_7036\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2585_7036\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <div class=\"ms-auto text-end\">\r\n <form [formGroup]=\"form\">\r\n <lib-reactive-select \r\n [formControl]=\"selectControl\" \r\n [idField]=\"'value'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"datasets\"\r\n class=\"w-100 text-start\"\r\n (valueChange)=\"onValueChange($event)\">\r\n </lib-reactive-select>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mt-6 p-0 w-100 overflow-x\">\r\n <div class=\"col text-nowrap\" *ngFor=\"let obj of objectsArray\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item cursor-pointer\">\r\n <a (click)=\"selectedTimes(obj.folderName)\"\r\n [ngClass]=\"selectedTime === obj?.folderName ? 'active' : ''\" class=\"nav-link cursor-pointer no-border mx-3 mb-2\">\r\n {{obj?.folderName}}<span class=\"mx-2 \" [ngClass]=\"selectedTime === obj?.folderName ? 'badge-num-primary' :'badge-num-muted'\">{{obj?.count?obj?.count:0}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this image directory</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row p-3 img-traffic contain\" *ngIf=\"!noData && !loading\">\r\n <div class=\"col-md-3 border-gray mx-2 p-2 mt-5\" *ngFor=\"let obj of imagesArrayData\">\r\n <img *ngIf=\"obj.images.entryTimeImage\" class=\"img-src cursor-pointer\" [src]=\"obj.images.entryTimeImage\" (error)=\"obj?.images.entryTimeImage = null\" alt=\"\" (click)=\"imageView(obj,objData.footfallDate)\">\r\n <div *ngIf=\"!obj.images.entryTimeImage\" class=\"no-preview\">\r\n <span class=\"mb-5\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-5 text-center\">Preview not available</span>\r\n <span class=\"description mb-5 text-center\">The selected camera is not available at the\r\n moment.</span>\r\n </div>\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-8\">\r\n <div class=\"py-2 img-doc-directory\">{{obj.tempId}} <span class=\"badge badge-light-success ms-2\">{{selectControl.value | titlecase}}</span></div>\r\n <div class=\"py-2 img-doc-time\">Entry Time</div>\r\n <div class=\"py-2 img-doc-time\">Exit Time</div>\r\n <div class=\"py-2 img-doc-time\">Total Time Spent</div>\r\n </div>\r\n <div class=\"col-md-4 text-end\" >\r\n <div class=\"py-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1841_143300)\">\r\n <path d=\"M14.1986 5.33333V14H2.19857V5.33333M6.86523 8H9.5319M0.865234 2H15.5319V5.33333H0.865234V2Z\" stroke=\"#101828\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1841_143300\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(0.199219)\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"py-2 img-doc-value\">{{obj.timeSpent.entryTime}} </div>\r\n <div class=\"py-2 img-doc-value\">{{obj.timeSpent.exitTime}}</div>\r\n <div class=\"py-2 img-doc-value\">{{obj.timeSpent.totalTimeSpent}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n\r\n","import { ChangeDetectorRef, Component, ElementRef } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\n\r\ninterface ChartData {\r\n year: string; // or store name, depending on your requirement\r\n customerCountOver10Min: number;\r\n customerCountLessThanMin: number;\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'lib-interation-table-client430',\r\n templateUrl: './interation-table-client430.component.html',\r\n styleUrl: './interation-table-client430.component.scss'\r\n})\r\nexport class InterationTableClient430Component {\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private root!: am5.Root;\r\n private destroy$ = new Subject<void>();\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService,private el: ElementRef,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n})\r\n }\r\n ngOnDestroy(): void {\r\n // this.zone.runOutsideAngular(() => {\r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n // });\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getInterationTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n console.log(this.cardData);\r\n this.cardData = response.data.data\r\n this.cardNoData = this.cardData.length === 0;\r\n setTimeout(() => {\r\n this.createChart(this.cardData); // Call this method after data is set\r\n }, 200);\r\n // this.createChart(this.cardData);\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n \r\n\r\n createChart(cardData: any[]): void {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"chartdiv\");\r\n if (!chartDiv) {\r\n console.error(\"Could not find HTML element with id `chartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n \r\n this.root = am5.Root.new('chartdiv');\r\n \r\n const chart = this.root.container.children.push(\r\n am5xy.XYChart.new(this.root, {\r\n panX: false,\r\n panY: false,\r\n paddingLeft: 0,\r\n wheelX: \"panX\",\r\n wheelY: \"zoomX\",\r\n layout: this.root.verticalLayout\r\n })\r\n );\r\n \r\n const legend = chart.children.push(\r\n am5.Legend.new(this.root, {\r\n centerX: am5.p50,\r\n x: am5.p50\r\n })\r\n );\r\n \r\n const data: ChartData[] = cardData.map((item: any) => ({\r\n year: item.store_name,\r\n customerCountOver10Min: item.customer_count_over10min,\r\n customerCountLessThanMin: item.customer_count_lessthanamin\r\n }));\r\n \r\n const xRenderer = am5xy.AxisRendererX.new(this.root, {\r\n cellStartLocation: 0.1,\r\n cellEndLocation: 0.9,\r\n minorGridEnabled: true\r\n });\r\n \r\n const xAxis = chart.xAxes.push(\r\n am5xy.CategoryAxis.new(this.root, {\r\n categoryField: \"year\",\r\n renderer: xRenderer,\r\n tooltip: am5.Tooltip.new(this.root, {})\r\n })\r\n );\r\n \r\n xRenderer.grid.template.setAll({\r\n location: 1\r\n });\r\n \r\n xAxis.data.setAll(data);\r\n \r\n xAxis.get(\"renderer\").labels.template.setAll({\r\n visible: false\r\n });\r\n \r\n const yAxis = chart.yAxes.push(\r\n am5xy.ValueAxis.new(this.root, {\r\n renderer: am5xy.AxisRendererY.new(this.root, {\r\n strokeOpacity: 0.1\r\n })\r\n })\r\n );\r\n \r\n // Use an arrow function to ensure `this` is bound correctly\r\n const makeSeries = (name: string, fieldName: keyof ChartData): void => {\r\n const series = chart.series.push(am5xy.ColumnSeries.new(this.root, {\r\n name: name,\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n valueYField: fieldName,\r\n categoryXField: \"year\"\r\n }));\r\n \r\n series.columns.template.setAll({\r\n tooltipText: \"{name}: {valueY}\",\r\n width: am5.percent(90),\r\n tooltipY: 0,\r\n strokeOpacity: 0\r\n });\r\n \r\n series.data.setAll(data);\r\n series.appear();\r\n \r\n series.bullets.push(() => {\r\n return am5.Bullet.new(this.root, {\r\n locationY: 0,\r\n sprite: am5.Label.new(this.root, {\r\n text: \"{valueY}\",\r\n fill: this.root.interfaceColors.get(\"alternativeText\"),\r\n centerY: 0,\r\n centerX: am5.p50,\r\n populateText: true\r\n })\r\n });\r\n });\r\n \r\n legend.data.push(series);\r\n };\r\n \r\n makeSeries(\"Customer spent more than 10 mins\", \"customerCountOver10Min\");\r\n makeSeries(\"Billing Conversion\", \"customerCountLessThanMin\");\r\n \r\n chart.appear(1000, 100);\r\n }, 100);\r\n }\r\n \r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getInterationTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'CustomerFunnel');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n onRateExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.zoneInteractionTableExport_430(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'InteractionvsConversion');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n}\r\n","\r\n<div class=\"row\">\r\n\r\n<div class=\"col-6 ps-5 pe-0\" *ngIf=\"!cardNoData\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Customer Funnel</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" class=\"body me-4\">\r\n <div *ngFor=\"let item of cardData\" class=\"m-4\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Passer By\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.passer_by || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Drop In Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.drop_in_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Attended\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Interaction Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time || '--' }} Mins\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n\r\n <!-- <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n \r\n <th>Interaction Rate</th>\r\n <th>Customer Attended</th>\r\n <th>Passer By</th>\r\n \r\n <th>Drop In Rate</th>\r\n <th>Billing Conversion</th>\r\n <th>Footfall</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.interaction_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.customer_attended }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.passer_by }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zonename }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.drop_in_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall_overamin_inzone }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-6 ps-7 pe-0\" *ngIf=\"!cardNoData\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Interaction vs Conversion</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!-- [disabled]=\"!cardData.length\" -->\r\n <button type=\"button\" (click)=\"onRateExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-14 p-0\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"chartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n \r\n</div>\r\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\n\r\n@Component({\r\n selector: 'lib-passerby-table',\r\n templateUrl: './passerby-table.component.html',\r\n styleUrl: './passerby-table.component.scss'\r\n})\r\nexport class PasserbyTableComponent implements OnInit,OnDestroy {\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private destroy$ = new Subject<void>();\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n})\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n itemsPerPage = 10000\r\n currentPage = 0\r\n totalItems = 0\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n searchInput: any =\"\";\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getPasserByTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response?.data?.passerByData\r\n this.cardNoData = this.cardData.length === 0;\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n search: this.searchInput,\r\n // sort: this.sortColumName,\r\n // sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getPasserByTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Passer-by Analysis ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getCardData();\r\n }\r\n}\r\n","<div class=\"row mt-2\">\r\n <div class=\"col-12 pe-0\" *ngIf=\"!cardNoData\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start flex-column headtext px-3\">Passer-by Analysis</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"card-body mb-8 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('streamName')\">\r\n Camera Name\r\n <svg [ngClass]=\"sortColumName === 'streamName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'streamName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('passerby_count')\">\r\n Passer-by Count\r\n <svg [ngClass]=\"sortColumName === 'passerby_count' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'passerby_count' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td class=\"text-capitalize\">{{ item.streamName ? item.streamName :'--'}}</td>\r\n <td>{{ item.passerby_count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for PasserBy Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TangoAnalyseZoneRoutingModule } from './tango-analyse-zone-routing.module';\r\nimport { NgbAccordionModule, NgbCarouselModule, NgbModule, NgbProgressbarModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { OverallcardsComponent } from './components/overallcards/overallcards.component';\r\nimport { TopPerformingZonesComponent } from './components/top-performing-zones/top-performing-zones.component';\r\nimport { ZoneSummaryTableComponent } from './components/zone-summary-table/zone-summary-table.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ZoneConcentrationComponent } from './components/zone-concentration/zone-concentration.component';\r\nimport { CommonSharedModule } from 'tango-app-ui-shared';\r\nimport { TangoAnalyseZoneComponent } from './components/tango-analyse-zone/tango-analyse-zone.component';\r\nimport { ConcentrationheatmapComponent } from './components/zone-concentration/concentrationheatmap/concentrationheatmap.component';\r\nimport { ZoneV2Component } from './components/zone-v2/zone-v2.component';\r\nimport { ZonesCardsComponent } from './components/zone-v2/zones-cards/zones-cards.component';\r\nimport { StoreHeatmapComponent } from './components/zone-v2/store-heatmap/store-heatmap.component';\r\nimport { ImageDirectoryComponent } from './components/zone-v2/image-directory/image-directory.component';\r\nimport { ImageDirectoryViewComponent } from './components/zone-v2/image-directory-view/image-directory-view.component';\r\nimport { CustomerJourneyComponent } from './components/zone-v2/customer-journey/customer-journey.component';\r\nimport { ReactiveSelectComponent } from './components/zone-v2/reactive-select/reactive-select.component';\r\nimport { TopPerformingComponent } from './components/zone-v2/top-performing/top-performing.component';\r\nimport { SummaryTableComponent } from './components/zone-v2/summary-table/summary-table.component';\r\nimport { StoreZoomHeatmapComponent } from './components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component';\r\nimport { SegmentationComponent } from './components/segmentation/segmentation.component';\r\nimport { InterationTableClient430Component } from './components/interation-table-client430/interation-table-client430.component';\r\nimport { InterationTableClient459Component } from './components/interation-table-client459/interation-table-client459.component';\r\nimport { PasserbyTableComponent } from './components/passerby-table/passerby-table.component';\r\nimport { CustomerJourneyChartComponent } from './components/customer-journey-chart/customer-journey-chart.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n OverallcardsComponent,\r\n TangoAnalyseZoneComponent,\r\n TopPerformingZonesComponent,\r\n ZoneSummaryTableComponent,\r\n ZoneConcentrationComponent,\r\n ConcentrationheatmapComponent,\r\n\r\n ZoneV2Component,\r\n ConcentrationheatmapComponent,\r\n ZonesCardsComponent,\r\n StoreHeatmapComponent,\r\n ImageDirectoryComponent,\r\n ImageDirectoryViewComponent,\r\n CustomerJourneyComponent,\r\n ReactiveSelectComponent,\r\n TopPerformingComponent,\r\n SummaryTableComponent,\r\n StoreZoomHeatmapComponent,\r\n SegmentationComponent,\r\n InterationTableClient430Component,\r\n InterationTableClient459Component,\r\n PasserbyTableComponent,\r\n CustomerJourneyChartComponent,\r\n \r\n ],\r\n imports: [\r\n // CommonModule,\r\n // TangoAnalyseZoneRoutingModule,\r\n // NgbProgressbarModule,\r\n // FormsModule,\r\n // ReactiveFormsModule,\r\n // NgbCarouselModule,\r\n // CommonSharedModule,\r\n // NgbTooltipModule,\r\n // NgbModule\r\n CommonModule,\r\n TangoAnalyseZoneRoutingModule,\r\n NgbProgressbarModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CommonSharedModule,\r\n NgbTooltipModule,\r\n NgbModule,\r\n NgbAccordionModule,\r\n CommonSharedModule,\r\n NgbCarouselModule\r\n ]\r\n})\r\nexport class TangoAnalyseZoneModule { }\r\n","/*\r\n * Public API Surface of tango-analyse-zone\r\n */\r\n\r\nexport * from './lib/components/tango-analyse-zone/tango-analyse-zone.component';\r\nexport * from './lib/tango-analyse-zone.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EXCEL_TYPE","EXCEL_EXTENSION","takeUntil","i1.ZoneService","i4","i5","i1","i2","i3.ZoneService","i6","i7","i3","skip","i4.Zonev2Service","i2.ZoneService","i4.OverallcardsComponent","i5.TopPerformingZonesComponent","i6.ZoneSummaryTableComponent","i7.ZoneConcentrationComponent","i8.SegmentationComponent","i9.InterationTableClient459Component","i10.CustomerJourneyChartComponent","i1.Zonev2Service","i3.Zonev2Service","i2.Zonev2Service","i8.ReactiveSelectComponent","i4.ZonesCardsComponent","i5.StoreHeatmapComponent","i6.CustomerJourneyComponent","i7.TopPerformingComponent","i8.SummaryTableComponent","debounceTime","i6.ReactiveSelectComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tango-app-ui-analyse-zone.mjs","sources":["../../../projects/tango-analyse-zone/src/lib/components/services/zone.service.ts","../../../projects/tango-analyse-zone/src/lib/components/overallcards/overallcards.component.ts","../../../projects/tango-analyse-zone/src/lib/components/overallcards/overallcards.component.html","../../../projects/tango-analyse-zone/src/lib/components/top-performing-zones/top-performing-zones.component.ts","../../../projects/tango-analyse-zone/src/lib/components/top-performing-zones/top-performing-zones.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-summary-table/zone-summary-table.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-summary-table/zone-summary-table.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/concentrationheatmap/concentrationheatmap.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/concentrationheatmap/concentrationheatmap.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/zone-concentration.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/zone-concentration.component.html","../../../projects/tango-analyse-zone/src/lib/components/segmentation/segmentation.component.ts","../../../projects/tango-analyse-zone/src/lib/components/segmentation/segmentation.component.html","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client459/interation-table-client459.component.ts","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client459/interation-table-client459.component.html","../../../projects/tango-analyse-zone/src/lib/components/services/zonev2.service.ts","../../../projects/tango-analyse-zone/src/lib/components/customer-journey-chart/customer-journey-chart.component.ts","../../../projects/tango-analyse-zone/src/lib/components/customer-journey-chart/customer-journey-chart.component.html","../../../projects/tango-analyse-zone/src/lib/components/tango-analyse-zone/tango-analyse-zone.component.ts","../../../projects/tango-analyse-zone/src/lib/components/tango-analyse-zone/tango-analyse-zone.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zones-cards/zones-cards.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zones-cards/zones-cards.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-heatmap.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-heatmap.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/reactive-select/reactive-select.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/reactive-select/reactive-select.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/customer-journey/customer-journey.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/customer-journey/customer-journey.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/top-performing/top-performing.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/top-performing/top-performing.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/summary-table/summary-table.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/summary-table/summary-table.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zone-v2.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zone-v2.component.html","../../../projects/tango-analyse-zone/src/lib/tango-analyse-zone-routing.module.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory-view/image-directory-view.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory-view/image-directory-view.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory/image-directory.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory/image-directory.component.html","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client430/interation-table-client430.component.ts","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client430/interation-table-client430.component.html","../../../projects/tango-analyse-zone/src/lib/components/passerby-table/passerby-table.component.ts","../../../projects/tango-analyse-zone/src/lib/components/passerby-table/passerby-table.component.html","../../../projects/tango-analyse-zone/src/lib/tango-analyse-zone.module.ts","../../../projects/tango-analyse-zone/src/public-api.ts","../../../projects/tango-analyse-zone/src/tango-app-ui-analyse-zone.ts"],"sourcesContent":["import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable, OnDestroy, } from '@angular/core';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { BehaviorSubject, Observable, Subject, takeUntil, catchError, map,throwError, ReplaySubject } from 'rxjs';\r\nimport * as FileSaver from 'file-saver';\r\nimport * as XLSX from 'xlsx';\r\n \r\nconst EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\r\nconst EXCEL_EXTENSION = '.xlsx';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ZoneService implements OnDestroy {\r\n zoneAnalysisV1Url:any;\r\n trafficApiUrl:any;\r\n private reloadDataSubject = new BehaviorSubject<boolean>(false);\r\n reloadData$ = this.reloadDataSubject.asObservable();\r\n zoneSegmentation = new BehaviorSubject<any>(null);\r\n constructor(private http: HttpClient, private gs: GlobalStateService) {\r\n this.gs.environment.pipe(takeUntil(this.destroy$)).subscribe((env) => {\r\n if (env) {\r\n this.zoneAnalysisV1Url = env.zoneAnalysisV1Url;\r\n this.trafficApiUrl = env.trafficApiUrl;\r\n }\r\n });\r\n }\r\n triggerReload() {\r\n this.reloadDataSubject.next(true);\r\n }\r\n public exportAsExcelFile(json: any[], excelFileName: string): void {\r\n const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);\r\n const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };\r\n const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });\r\n this.saveAsExcelFile(excelBuffer, excelFileName);\r\n }\r\n \r\n public saveAsExcelFile(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + 'list'+ EXCEL_EXTENSION);\r\n }\r\n \r\n public saveAsTemplate(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n private readonly destroy$ = new Subject();\r\n\r\nngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n}\r\n\r\n zoneConcentrationTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneConcentrationSummaryTable_v1`, data)\r\n }\r\n // zoneConcentrationTableDataExport( data:any):Observable<any>{\r\n // return this.http.post(`${this.zoneAnalysisV1Url}/zoneConcentrationSummaryTable_v1`, data, {responseType: 'arraybuffer'})\r\n // }\r\n getOverallStoreConcentrationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneHeatmapDatas_v1`, data)\r\n }\r\n getOverallStoreHeatmapDates( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneHeatmapAvailableDates_v1`, data)\r\n }\r\n getCardData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/cardsAgeAnalysis_v1`, data)\r\n }\r\n getTopPerformingZonesData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/topPerformingZones_v1`, data)\r\n }\r\n getTopPerformingStoresTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/topPerformingStores_v1`, data)\r\n }\r\n getTopPerformingStoresTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/topPerformingStores_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getSummaryTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSummaryTable_v1`, data)\r\n }\r\n getSummaryTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSummaryTable_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getSegmentationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentation_v1`, data)\r\n }\r\n getSegmentationDataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentation_v1Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getInterationTable430Data( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_430`, data)\r\n }\r\n getInterationTable430DataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_430Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getInterationTable459Data( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_459`, data)\r\n }\r\n getInterationTable459DataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_459`, data, {responseType: 'arraybuffer'})\r\n }\r\n zoneInteractionTableExport_430( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTableExport_430`, data, {responseType: 'arraybuffer'})\r\n }\r\n zoneConcentrationTableDataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneConcentrationTableExport`, data, {responseType: 'arraybuffer'})\r\n }\r\n\r\n zonesegmentationTable( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentationTable_v1`, data)\r\n }\r\n getZoneSegmentationTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentationTableExport_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getPasserByTable430Data( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zonePasserByTable_v1`, data)\r\n }\r\n getPasserByTable430DataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zonePasserByTable_430Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getInteractionTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/interactionTable_v1`, data)\r\n }\r\n getInteractionTable430Export( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/interactionTable_430Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getZonewiseCustomerFunnelData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/ZonewiseCustomerFunnel_v1`, data)\r\n }\r\n getZonewiseCustomerFunnelExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/ZonewiseCustomerFunnel_Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getCheckTodayReportStatus(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.trafficApiUrl}/checkTodayReportStatus`, params);\r\n }\r\n private handleError(error: HttpErrorResponse): Observable<never> {\r\n return throwError(\r\n () => new Error(\"Something bad happened; please try again later\")\r\n );\r\n }\r\n\r\n}\r\n","import { ChangeDetectorRef, Component, NgZone, OnDestroy, OnInit } from '@angular/core';\r\nimport * as am5 from '@amcharts/amcharts5';\r\nimport * as am5percent from '@amcharts/amcharts5/percent';\r\nimport * as am5themes_Animated from '@amcharts/amcharts5/themes/Animated';\r\nimport { skip, takeUntil } from 'rxjs/operators';\r\nimport { Subject, debounceTime} from 'rxjs';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\n\r\n@Component({\r\n selector: 'lib-overallcards',\r\n templateUrl: './overallcards.component.html',\r\n styleUrl: './overallcards.component.scss',\r\n})\r\nexport class OverallcardsComponent implements OnDestroy,OnInit {\r\n cardData: any = {};\r\n genderAnalysis: any[] = [];\r\n ageAnalysis: any[] = [];\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n private genderroot!: am5.Root;\r\n private destroy$ = new Subject<void>();\r\n constructor(private zone: NgZone,private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n zoneName:any='Overall Store';\r\n clientData:any;\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n setTimeout(()=>{\r\n const clientData:any = JSON.parse(localStorage.getItem(\"client-details\") || \"{}\");\r\n this.clientData = clientData\r\n },100)\r\n this.changeDetector.detectChanges();\r\n // Check if ZoneService is defined and subscribe only once\r\n if (this.ZoneService?.zoneSegmentation) {\r\n this.ZoneService.zoneSegmentation\r\n .pipe(skip(1), takeUntil(this.destroy$)) // Skip the initial emission\r\n .subscribe((zoneData: any) => {\r\n this.zoneName = zoneData;\r\n this.getZoneSegmentation();\r\n this.getCardData();\r\n });\r\n }\r\n });\r\n \r\n \r\n }\r\n \r\n\r\n ngOnDestroy(): void {\r\n // this.zone.runOutsideAngular(() => {\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n // });\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n genderchart() {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"genderchartdiv\");\r\n if (!chartDiv) {\r\n // console.error(\"Could not find HTML element with id `genderchartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n this.genderroot = am5.Root.new('genderchartdiv');\r\n \r\n const chart = this.genderroot.container.children.push(\r\n am5percent.PieChart.new(this.genderroot, {\r\n endAngle: 270,\r\n innerRadius: am5.percent(60)\r\n })\r\n );\r\n \r\n const series = chart.series.push(\r\n am5percent.PieSeries.new(this.genderroot, {\r\n valueField: 'value',\r\n categoryField: 'category',\r\n endAngle: 270,\r\n alignLabels: false\r\n })\r\n );\r\n \r\n series.states.create('hidden', {\r\n endAngle: -90\r\n });\r\n \r\n series.labels.template.setAll({\r\n textType: 'circular',\r\n visible: false,\r\n centerX: 0,\r\n centerY: 0\r\n });\r\n\r\n series.data.setAll(this.genderAnalysis); \r\n const legend = this.genderroot.container.children.push(\r\n am5.Legend.new(this.genderroot, {\r\n x: am5.percent(50),\r\n centerX: am5.percent(50),\r\n y: am5.percent(95),\r\n layout: this.genderroot.horizontalLayout,\r\n })\r\n );\r\n\r\n legend.labels.template.setAll({\r\n text: \"{category}: {value}%\",\r\n fill: am5.color(\"#464E5F\"),\r\n fontFamily: \"Inter\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n \r\n });\r\n \r\n legend.valueLabels.template.setAll({\r\n text: \"{value}%\",\r\n fontWeight: \"700\",\r\n fontFamily: \"Inter\",\r\n fontSize: \"14px\",\r\n fill: am5.color(\"#464E5F\"),\r\n });\r\n legend.itemContainers.template.events.on(\"click\", (ev:any) => { ev.stopPropagation(); });\r\n legend.data.setAll(series.dataItems);\r\n \r\n // Animation\r\n series.appear(1000, 100);\r\n }, 100);\r\n }\r\n \r\n\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n zoneName:this.zoneName\r\n };\r\n\r\n this.ZoneService.getCardData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response.data.card;\r\n this.genderAnalysis = response.data.genderAnalysis;\r\n this.genderAnalysis.forEach((item:any) => {\r\n item.value = Math.round(item.value)\r\n })\r\n this.ageAnalysis = response.data.ageAnalysis;\r\n setTimeout(() => {\r\n this.genderchart(); // Call this method after data is set\r\n }, 200);\r\n \r\n this.cardDataLoading = false;\r\n this.cardNoData = false;\r\n } else {\r\n this.cardData = []\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = []\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getZoneSegmentation();\r\n }\r\n\r\n searchField(): void {\r\n this.headerData.search = this.searchInput;\r\n this.getZoneSegmentation();\r\n }\r\n searchInput:any='';\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n getZoneSegmentionData:any=[];\r\n segmentationDataLoading =false;\r\n segmentationNoData =false;\r\n getZoneSegmentation(){\r\n this.segmentationDataLoading =true;\r\n this.segmentationNoData =false;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n zoneName: this.zoneName,\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export:false\r\n };\r\n // };\r\n this.ZoneService.zonesegmentationTable(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n if(res && res.code === 200){\r\n this.getZoneSegmentionData = res?.data?.zoneConcentrationData;\r\n this.segmentationDataLoading =false;\r\n this.segmentationNoData =false;\r\n } else{\r\n this.segmentationDataLoading =false;\r\n this.segmentationNoData =true;\r\n }\r\n },\r\n error: (e) => {\r\n this.segmentationDataLoading =false;\r\n this.segmentationNoData =true;\r\n }\r\n })\r\n \r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n zoneName: this.zoneName,\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export:true\r\n };\r\n this.ZoneService.getZoneSegmentationTableExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Zone Segmentation ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n}\r\n","<div class=\"row\">\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"col-lg-4\">\r\n <div class=\"card\">\r\n <div class=\"card-header py-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"subtext\">Overall Store Footfall <span\r\n ngbTooltip=\"Unique Store Footfall Walk-ins\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span> \r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"headcount\">{{ cardData.oveallZoneFootfall?.count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row my-2 justify-content-evenly\">\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.bounced?.rate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Bounced Footfall Rate <span\r\n [ngbTooltip]=\"'Percentage of walk-ins who spent less than ' + (clientData?.bouncedLimit?.value ? clientData?.bouncedLimit?.value :clientData?.bouncedLimitValue || '') + ' mins'\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.engagers?.rate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Engagers Rate <span\r\n [ngbTooltip]=\"'Percentage of walk-ins who spent more than ' + (clientData?.bouncedLimit?.value ? clientData?.bouncedLimit?.value : clientData?.bouncedLimitValue || '') + ' mins'\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n </div>\r\n <div class=\"row my-2 justify-content-evenly\">\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} Mins</div>\r\n <div class=\"subtext mt-3\">Average Dwell Time <span\r\n ngbTooltip=\"Avg time spent by the engagers inside the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.concentration?.rate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Concentration Rate <span\r\n ngbTooltip=\"The proportion of walk-ins remaining in key areas\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"card\">\r\n <div class=\"headtext p-3\">Gender Analysis</div>\r\n <div class=\"card-body p-0\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"genderchartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"card\">\r\n <div class=\"headtext p-3\">Age Analysis</div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Age Range</th>\r\n <th>Percentage of FF</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of ageAnalysis\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">\r\n {{ item.category }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row\">\r\n <div class=\"col-6 mt-2\">\r\n <ngb-progressbar class=\"mb-3\" height=\"10px\" type=\"primary\" [value]=\"item.value\" />\r\n </div>\r\n <div class=\"col-6\">\r\n {{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}%\r\n \r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div> -->\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Age Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"getZoneSegmentionData?.length > 0\" class=\"col-4 h-auto\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 ps-3 pe-0 min-h-50px\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <div class=\"headtext\">Zone Segmentation</div>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button *ngIf=\"!segmentationNoData && !segmentationDataLoading\" type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!getZoneSegmentionData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"headtext p-3\">Zone Segmentation</div> -->\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-1 table-responsive agerangescroll1\">\r\n <table *ngIf=\"!segmentationDataLoading && !segmentationNoData\" class=\"table bottom-border text-nowrap\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Footfall\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n </div></th>\r\n <th> <div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Avg.Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('Trolley')\">\r\n Trolley\r\n <svg [ngClass]=\"sortColumName === 'Trolley' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'Trolley' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('Basket')\">\r\n Basket\r\n <svg [ngClass]=\"sortColumName === 'Basket' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'Basket' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"h-45px\">\r\n <tr *ngFor=\"let item of getZoneSegmentionData\">\r\n <td>\r\n <div class=\"table-title-primary\">{{ item.zoneName }}</div>\r\n </td>\r\n <td>\r\n {{ item.footfallCount }}\r\n </td>\r\n <td>\r\n {{ item.avgDwellTime }} mins\r\n </td>\r\n <td>\r\n {{ item.Trolley }}%\r\n </td>\r\n <td>\r\n {{ item.Basket }}%\r\n </td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"segmentationDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div> \r\n </div>\r\n <!-- <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div> -->\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"segmentationNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Segmentation</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectorRef, Component, ElementRef, NgZone, OnDestroy, OnInit } from '@angular/core';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\n\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { FormBuilder } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'lib-top-performing-zones',\r\n templateUrl: './top-performing-zones.component.html',\r\n styleUrl: './top-performing-zones.component.scss'\r\n})\r\nexport class TopPerformingZonesComponent implements OnInit,OnDestroy{\r\n private zoneroot: am5.Root;\r\n topPerformingStores: any[] = []; \r\n topPerformingZones: any[] = []; \r\n searchInput: string = '';\r\n searchDisabled: boolean = false;\r\n analysisLoading: boolean = true;\r\n analysisNoData: boolean = false;\r\n topperformingstoresLoading: boolean = true;\r\n topperformingstoresNodata: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n\r\n\r\n // invoiceNoData: boolean = true;\r\n // invoiceLoading: boolean = false;\r\n // isExport: boolean = false;\r\n // clientId: string = '';\r\n // userType:any = '';\r\n private readonly destroy$ = new Subject();\r\n constructor(private zone: NgZone, public modalService: NgbModal, private fb: FormBuilder, private ZoneService: ZoneService, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService,private elementRef: ElementRef,private router: Router,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getTopPerformingZones();\r\n this.getTopPerformingStores();\r\n // this.zonefootfall();\r\n})\r\n\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // this.zone.runOutsideAngular(() => {\r\n if (this.zoneroot) {\r\n this.zoneroot.dispose();\r\n }\r\n // });\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n\r\n getTopPerformingZones(): void {\r\n this.analysisLoading = true;\r\n this.analysisNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n };\r\n \r\n this.ZoneService.getTopPerformingZonesData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.analysisLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingZones = response.data.topPerformingZones;\r\n this.analysisLoading = false;\r\n this.analysisNoData = false;\r\n setTimeout(() => {\r\n this.zonefootfall(); \r\n }, 500);\r\n } else {\r\n this.analysisLoading = false;\r\n this.analysisNoData = true;\r\n }\r\n },\r\n error => {\r\n this.topPerformingZones = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n zonefootfall() {\r\n // setTimeout(() => {\r\n const chartDiv = document.getElementById(\"zonechartdiv\");\r\n if (!chartDiv) {\r\n // console.error(\"Could not find HTML element with id `zonechartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.zoneroot) {\r\n this.zoneroot.dispose();\r\n }\r\n \r\n this.zoneroot = am5.Root.new(\"zonechartdiv\");\r\n \r\n // Create chart\r\n const chart = this.zoneroot.container.children.push(am5xy.XYChart.new(this.zoneroot, {\r\n panX: true,\r\n panY: true,\r\n wheelX: \"none\",\r\n wheelY: \"none\",\r\n paddingLeft: 0\r\n }));\r\n \r\n // Hide zoom-out button\r\n chart.zoomOutButton.set(\"forceHidden\", true);\r\n \r\n // Create axes\r\n const xRenderer = am5xy.AxisRendererX.new(this.zoneroot, {\r\n minGridDistance: 30,\r\n minorGridEnabled: true\r\n });\r\n xRenderer.labels.template.setAll({\r\n rotation: -45,\r\n centerY: am5.p100,\r\n centerX: am5.p50,\r\n paddingRight: 15,\r\n textAlign: \"center\"\r\n });\r\n xRenderer.grid.template.set(\"visible\", false);\r\n \r\n const xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(this.zoneroot, {\r\n maxDeviation: 0.3,\r\n categoryField: \"zoneName\", // Change from \"country\" to \"zoneName\"\r\n renderer: xRenderer\r\n }));\r\n \r\n const yAxis = chart.yAxes.push(am5xy.ValueAxis.new(this.zoneroot, {\r\n maxDeviation: 0.1,\r\n min: 0,\r\n renderer: am5xy.AxisRendererY.new(this.zoneroot, {})\r\n }));\r\n \r\n yAxis.children.unshift(am5.Label.new(this.zoneroot, {\r\n rotation: -90,\r\n text: 'Footfall',\r\n y: am5.p50,\r\n centerX: am5.p50\r\n }));\r\n \r\n // Add series\r\n const series = chart.series.push(am5xy.ColumnSeries.new(this.zoneroot, {\r\n name: \"Footfall\",\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n valueYField: \"value\",\r\n categoryXField: \"zoneName\" // Change from \"country\" to \"zoneName\"\r\n }));\r\n \r\n // Rounded corners for columns\r\n series.columns.template.setAll({\r\n cornerRadiusTL: 0,\r\n cornerRadiusTR: 0,\r\n strokeOpacity: 0\r\n });\r\n \r\n // Add Label bullet\r\n series.bullets.push(() => {\r\n return am5.Bullet.new(this.zoneroot, {\r\n locationY: 1,\r\n sprite: am5.Label.new(this.zoneroot, {\r\n text: \"{valueYWorking.formatNumber('#.')}\",\r\n fill: this.zoneroot.interfaceColors.get(\"alternativeText\"),\r\n centerY: 0,\r\n centerX: am5.p50,\r\n populateText: true\r\n })\r\n });\r\n });\r\n series.columns.template.setAll({\r\n tooltipText: \"{categoryX}: {valueYWorking.formatNumber('#.')}\",\r\n tooltipY: am5.p50\r\n });\r\n if (this.topPerformingZones && this.topPerformingZones.length > 0) {\r\n xAxis.data.setAll(this.topPerformingZones);\r\n series.data.setAll(this.topPerformingZones);\r\n \r\n } else {\r\n // console.error(\"No data available for top performing zones\");\r\n }\r\n // }, 0);\r\n }\r\n\r\n getTopPerformingStores(): void {\r\n this.searchDisabled = true;\r\n this.topperformingstoresLoading = true;\r\n this.topperformingstoresNodata = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n\r\n this.ZoneService.getTopPerformingStoresTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.topperformingstoresLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response.data.topPerformingStores;\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n export: true,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n };\r\n\r\n this.ZoneService.getTopPerformingStoresTableExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'TopPerformingStores');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n searchField(e:any) {\r\n this.searchInput = e.target.value;\r\n this.getTopPerformingStores()\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getTopPerformingStores()\r\n }\r\n // storeView(data:any){\r\n // const datavalue: any = JSON.parse(\r\n // localStorage.getItem(\"header-filters\") || \"{}\"\r\n // );\r\n // datavalue.store = data;\r\n // localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n // this.changeDetector.detectChanges()\r\n // this.gs.dataRangeValue.next(datavalue)\r\n // this.router.navigate([\"/manage/stores/cameras\"], {\r\n // queryParams: { storeId: data},\r\n // });\r\n\r\n // }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n\r\n\r\n}\r\n\r\n","<div class=\"row\">\r\n <div class=\"col-lg-5\">\r\n <div class=\"card\">\r\n <div class=\"card-header p-4 border-0\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Zones <span\r\n ngbTooltip=\"Zones based on by the highest footfall\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span> </span>\r\n <span class=\"subratetext mt-2\">Based on Zone Footfall</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div *ngIf=\"!analysisLoading && !analysisNoData\" id=\"zonechartdiv\"></div>\r\n <ng-container *ngIf=\"analysisLoading\">\r\n <div class=\"row loader Analysiscard d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"analysisNoData && !analysisLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 Analysiscard\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-7\">\r\n <div class=\"h-100 card\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Stores <span\r\n ngbTooltip=\"Stores ranked based on the highest concentration rate\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n <span class=\"subratetext mt-2\">Based on Concentration Rate</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon invoicesearch svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path 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\" fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input type=\"text\" class=\"form-control ps-14 me-4 invoicesearch\" placeholder=\"Search...\" autocomplete=\"off\" \r\n (keyup.enter)=\"searchField($event)\" />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!topPerformingStores.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-container mx-4\">\r\n <table *ngIf=\"!topperformingstoresLoading && !topperformingstoresNodata\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('storeName')\">Store Name <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">Zone Name <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('concentrationRate')\">Concentration <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">Avg Dwell Time <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('overallFootfall')\">Overall Footfall <svg [ngClass]=\"sortColumName === 'overallFootfall' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'overallFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('zoneFootfall')\">Zone Footfall<svg [ngClass]=\"sortColumName === 'zoneFootfall' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive topstores\">\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td>\r\n <div class=\"table-title-primary cursor-pointer mb-2\" (click)=\"storeView(store.storeId)\">{{ store?.storeName || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.zoneName || '--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}} %</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}} mins</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.overallFootfall || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.zoneFootfall?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"topperformingstoresLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"topperformingstoresNodata && !topperformingstoresLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mt-18\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Stores</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> \r\n</div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { Subject, debounceTime, distinctUntilChanged, filter, takeUntil } from \"rxjs\";\r\nimport { FormControl } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'lib-zone-summary-table',\r\n templateUrl: './zone-summary-table.component.html',\r\n styleUrl: './zone-summary-table.component.scss'\r\n})\r\nexport class ZoneSummaryTableComponent {\r\n isExport: boolean = false;\r\n itemsPerPage = 10\r\n currentPage = 1\r\n totalItems = 0\r\n paginationSizes:any[] = [];\r\n pageSize = 10\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n searchInput: any =\"\";\r\n topPerformingStores: any[] = [];\r\n searchDisabled: boolean = false;\r\n invoiceList: any[] = [];\r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n headerData: any;\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n // loading: boolean = true;\r\n // noData: boolean = false;\r\n\r\n // user: any;\r\n // searchInput = new FormControl(\"\");\r\n // receivedData: string = \"stores\";\r\n // columns: any[];\r\n // sortColumName: string;\r\n // sortDirection: number;\r\n\r\n constructor(\r\n private ZoneService: ZoneService,\r\n private changeDetector: ChangeDetectorRef,\r\n public gs: GlobalStateService,public modalService: NgbModal,\r\n private router: Router,private route: ActivatedRoute,\r\n private toast: ToastService\r\n ) {}\r\n\r\n \r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getSummayTable();\r\n})\r\n \r\n }\r\n\r\n \r\n getSummayTable(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.ZoneService.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response.data.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n getSummayTable1(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.ZoneService.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response.data.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n // this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n onExport(): void {\r\n this.currentPage = 0;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: 10000,\r\n offset: this.currentPage,\r\n export: true\r\n };\r\n\r\n this.ZoneService.getSummaryTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'ZoneSummaryTable');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n }\r\n searchField(): void {\r\n this.headerData.search = this.searchInput;\r\n this.headerData.export = false;\r\n this.currentPage = 1;\r\n this.pageSize=10;\r\n this.getSummayTable();\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable();\r\n }\r\n onPageSizeChange(pageSize: any) {\r\n this.currentPage = 1;\r\n this.itemsPerPage = pageSize;\r\n this.pageSize = pageSize;\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable1()\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.currentPage = pageOffset\r\n this.getSummayTable1()\r\n }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n setPaginationSizes() {\r\n if (this.totalItems > 10) {\r\n this.paginationSizes = [10, 20, 30];\r\n } else {\r\n this.paginationSizes = [this.totalItems]; // Just one option if less than 10\r\n }\r\n this.pageSize = this.paginationSizes[0];\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Zone Summary Table</span>\r\n <span class=\"text-sub mb-2\"> From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\">\r\n </rect>\r\n <path\r\n 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\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 me-4 footfallsearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!topPerformingStores.length\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('date')\">\r\n Date\r\n <svg [ngClass]=\"sortColumName === 'date' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'date' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">\r\n Store Name\r\n <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">\r\n Store ID\r\n <svg [ngClass]=\"sortColumName === 'storeId' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Zone Conc.Rate\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Avg Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Zone FF\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('bouncedCount')\">\r\n Zone Bounced\r\n <svg [ngClass]=\"sortColumName === 'bouncedCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'bouncedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('engagersCount')\">\r\n Zone Engagers\r\n <svg [ngClass]=\"sortColumName === 'engagersCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'engagersCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('below12')\">\r\n Age Below 12\r\n <svg [ngClass]=\"sortColumName === 'below12' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'below12' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('13-19')\">\r\n Age 13-19\r\n <svg [ngClass]=\"sortColumName === '13-19' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '13-19' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('20-30')\">\r\n Age 20-30\r\n <svg [ngClass]=\"sortColumName === '20-30' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '20-30' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('31-45')\">\r\n Age 31-45\r\n <svg [ngClass]=\"sortColumName === '31-45' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '31-45' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('46-59')\">\r\n Age 46-59\r\n <svg [ngClass]=\"sortColumName === '46-59' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '46-59' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('60 above')\">\r\n Age 60+\r\n <svg [ngClass]=\"sortColumName === '60 above' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '60 above' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('maleCount')\">\r\n Male\r\n <svg [ngClass]=\"sortColumName === 'maleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'maleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('femaleCount')\">\r\n Female\r\n <svg [ngClass]=\"sortColumName === 'femaleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'femaleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td><div class=\"table-title\">{{ store?.date | date: 'd MMM, y' || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.zoneName || '--' }}</div></td>\r\n <td class=\"table-title-primary cursor-pointer\" (click)=\"storeView(store.storeId)\">{{ store.storeName || '--' }}</td>\r\n <td><div class=\"table-title\">{{ store.storeId || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div></td>\r\n <td><div class=\"table-title\">{{ store.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.footfallCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.bouncedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}</div></td>\r\n <td><div class=\"table-title\">{{ store.engagersCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.below12?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['13-19']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['20-30']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['31-45']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['46-59']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['60 above']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.maleCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}</div></td>\r\n <td><div class=\"table-title\">{{ store.femaleCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n </tr> \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Summary Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input } from '@angular/core';\r\nimport { NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'lib-concentrationheatmap',\r\n templateUrl: './concentrationheatmap.component.html',\r\n styleUrl: './concentrationheatmap.component.scss'\r\n})\r\nexport class ConcentrationheatmapComponent {\r\n @Input() imageURLV1: [];\r\n currentSlideIndex = 0;\r\n currentSlide = 0;\r\n overallStoreData: { ImageURLs: Array<{ URL: string, streamName: string }> } = { ImageURLs: [] };\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n if (this.imageURLV1) {\r\n this.overallStoreData.ImageURLs = this.imageURLV1; \r\n }\r\n\r\n \r\n\r\n}\r\nngAfterViewInit(): void {\r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n prevElement?.setAttribute('style',\"display:none\")\r\n}\r\n\r\nonSlideChange\r\n(slideEvent: NgbSlideEvent) {\r\n \r\nconst\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n let nextElement = document.querySelector('.modal-dialog .carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n if(this.currentSlide === this.overallStoreData.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else{\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n}\r\n}\r\n","<div class=\"modal-body\">\r\n<ngb-carousel #carousel1=\"ngbCarousel\" [interval]=\"0\" (slide)=\"onSlideChange($event)\" [pauseOnHover]=\"true\" *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs; let i= index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container\">\r\n <img [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n ","import { ChangeDetectorRef, Component, ElementRef, importProvidersFrom, NgZone, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { NgbCarouselConfig, NgbModal, NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport dayjs from 'dayjs';\r\nimport { ConcentrationheatmapComponent } from './concentrationheatmap/concentrationheatmap.component';\r\n\r\n@Component({\r\n selector: 'lib-zone-concentration',\r\n templateUrl: './zone-concentration.component.html',\r\n styleUrl: './zone-concentration.component.scss',\r\n providers: [NgbCarouselConfig],\r\n})\r\nexport class ZoneConcentrationComponent implements OnInit,OnDestroy {\r\n dayjs = dayjs;\r\n searchInput: any =\"\";\r\n searchDisabled: any = false;\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n zoneConcentrationData: any[] = [];\r\n overallStoreData: any = {};\r\n type: string = 'daily'; \r\n overallStoreConcentrationDates: any[] = [];\r\n selectedDate: string = '';\r\n periodzone: number = 1; \r\n customOption: boolean = false; \r\n timer_active: boolean = false; \r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n heatmapLoading: boolean = true;\r\n heatmapNoData: boolean = false;\r\n headerData: any;\r\n sortDirection: any = '';\r\n zoneName: string = '';\r\n disableDay: boolean = false;\r\n disableWeek: boolean = false;\r\n disableMonth: boolean = false;\r\n customArrow: boolean = false;\r\n isExport: boolean = false;\r\n currentSlide = 0;\r\n currentSlideIndex = 0;\r\n // startIndex: number = 0;\r\n // datesPerPage: number = 5;\r\n // visibleDates: any[] = [];\r\n // timer_active = 0;\r\n // periodzone = 1;\r\n // customOption: boolean = false;\r\n // overallStoreConcentrationDates: Array<{ zoneDate: string }> = [];\r\n private readonly destroy$ = new Subject();\r\n @ViewChild('dateList', {read:ElementRef}) dateList!:ElementRef;\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n storeIdarray: any =[];\r\n constructor(private zone: NgZone, public modalService: NgbModal, private fb: FormBuilder, private ZoneService: ZoneService, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService,private elementRef: ElementRef,) {}\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.storeIdarray = this.headerData?.stores.filter((store: any) => store.checked).map((store: any) => store.storeId)\r\n let sDate = this.dayjs(this.headerData.date.startDate);\r\n let eDate = this.dayjs(this.headerData.date.endDate);\r\n this.customArrow = false;\r\n this.type = 'daily';\r\n // if(eDate.diff(sDate,'day') < 7) {\r\n // this.disableWeek = true;\r\n // this.disableMonth = true;\r\n // // this.type = 'daily';\r\n // }\r\n // else if(eDate.diff(sDate,'day') < 27) {\r\n // this.disableMonth = true;\r\n // this.disableDay = false;\r\n // this.disableWeek = false;\r\n // // this.type = 'weekly';\r\n // }\r\n // else {\r\n // this.disableDay = false;\r\n // this.disableWeek = false;\r\n // this.disableMonth = false;\r\n // // this.type = 'monthly';\r\n // }\r\n this.getZoneConcentrationData();\r\n // this.getOverallStoreConcentrationData();\r\n // this.getOverallStoreHeatmapDates();\r\n})\r\n \r\n }\r\n\r\n getZoneConcentrationData(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"218-2\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n\r\n\r\n this.ZoneService.zoneConcentrationTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.zoneConcentrationData = response.data.zoneConcentrationData;\r\n // this.zoneName = response.data.zoneConcentrationData[0].zoneName;\r\n this.zoneName = this.zoneConcentrationData.length ? this.zoneConcentrationData[0].zoneName : '';\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\r\n this.searchDisabled = false;\r\n this.getOverallStoreHeatmapDates();\r\n } else {\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n // this.zoneConcentrationData = [];\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.zoneConcentrationData = []\r\n this.overallStoreData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.zoneConcentrationData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n export: true,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n };\r\n\r\n this.ZoneService.zoneConcentrationTableDataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'ZoneConcentrationSummary');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getZoneConcentrationData();\r\n }\r\n\r\n searchField(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"218-2\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n\r\n\r\n this.ZoneService.zoneConcentrationTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.zoneConcentrationData = response.data.zoneConcentrationData;\r\n // this.zoneName = response.data.zoneConcentrationData[0].zoneName;\r\n // this.zoneName = this.zoneConcentrationData.length ? this.zoneConcentrationData[0].zoneName : '';\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n // this.zoneConcentrationData = [];\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.zoneConcentrationData = []\r\n this.overallStoreData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.zoneConcentrationData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n \r\n }\r\n\r\n getOverallStoreConcentrationData(): void {\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-1176\"],\r\n clientId:this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type,\r\n zoneDate: this.selectedDate\r\n };\r\n this.ZoneService.getOverallStoreConcentrationData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n // this.heatmapLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n // this.overallStoreData = response.data.overallStoreConcentrationDatas;\r\n this.overallStoreData = response.data.overallStoreConcentrationDatas;\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\r\n setTimeout(() => {\r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n prevElement?.setAttribute('style','display:none');\r\n }, 200);\r\n } else {\r\n this.overallStoreData =[]\r\n // this.zoneConcentrationData = []\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n },\r\n error => {\r\n this.overallStoreData =[]\r\n // this.zoneConcentrationData = []\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\n getOverallStoreHeatmapDates(): void {\r\n this.overallStoreConcentrationDates = []\r\n this.overallStoreData =[]\r\n this.customArrow = false;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-1176\"],\r\n clientId:this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type\r\n };\r\n\r\n this.ZoneService.getOverallStoreHeatmapDates(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n if(response && response.data){\r\n this.overallStoreConcentrationDates = response.data.overallStoreConcentrationDates;\r\n this.selectedDate = this.overallStoreConcentrationDates[0].zoneDate; \r\n if (response?.code === 200 && response?.status === \"success\" && response.data.overallStoreConcentrationDates.length) {\r\n \r\n // if(['weekly','monthly'].includes(this.type)) {\r\n // let lastDigit = this.overallStoreConcentrationDates[this.overallStoreConcentrationDates.length -1].zoneDate;\r\n // let lastSplit = lastDigit.split('-')[1];\r\n // lastSplit = lastSplit +' '+ this.dayjs().format('YYYY');\r\n // if(this.dayjs(lastSplit,'MMM DD YYYY').format('YYYY-MM-DD') > this.dayjs(this.headerData.date.endDate).format('YYYY-MM-DD'))\r\n // this.overallStoreConcentrationDates.splice(this.overallStoreConcentrationDates.length-1,1);\r\n // }\r\n if (this.type === 'daily') {\r\n if (this.overallStoreConcentrationDates.length > 7) {\r\n this.customArrow = true;\r\n }\r\n } else if (this.type === 'weekly') {\r\n if (this.overallStoreConcentrationDates.length > 4) {\r\n this.customArrow = true;\r\n }\r\n } else { \r\n }\r\n this.getOverallStoreConcentrationData();\r\n // this.heatmapLoading = false;\r\n // this.heatmapNoData = false;\r\n } else {\r\n \r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n }else{\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n },\r\n error => {\r\n this.overallStoreData =[]\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\n onDateChange(date: string): void {\r\n if (this.selectedDate !== date) {\r\n this.selectedDate = date;\r\n this.getOverallStoreConcentrationData();\r\n }\r\n }\r\n\r\n selectPlan(selectedType: string): void {\r\n this.type = selectedType;\r\n this.getOverallStoreHeatmapDates(); \r\n // this.getOverallStoreConcentrationData();\r\n}\r\n\r\nonZoneClick(zoneName: string): void {\r\n this.zoneName = zoneName; \r\n this.getOverallStoreHeatmapDates();\r\n this.ZoneService.zoneSegmentation.next(zoneName)\r\n // this.getZoneSegmentation(zoneName) \r\n}\r\nconcentrationHeatmap(imageURLV1: string) {\r\n const modalRef = this.modalService.open(ConcentrationheatmapComponent, {\r\n centered: true, size: 'xl'\r\n });\r\n modalRef.componentInstance.imageURLV1 = imageURLV1;\r\n modalRef.result.then((result) => {\r\n \r\n });\r\n}\r\n\r\nscrollLeft() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: -200,behavior:'smooth'});}\r\nscrollRight() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: 200,behavior:'smooth'});}\r\n\r\n onSlideChange\r\n (slideEvent: NgbSlideEvent) {\r\n const\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n let nextElement = document.querySelector('.carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n else if(this.currentSlide === this.overallStoreData?.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else {\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n}\r\n\r\n\r\n}\r\n\r\n","<div class=\"card\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-5 right-border my-2\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header ps-3 pe-1\">\r\n <h3 class=\"card-title align-items-start flex-column ms-1\">\r\n <span class=\"headtext\">Concentration Summary <span\r\n ngbTooltip=\"Summary of overall zones at the store\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span> \r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n 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\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-10 invoicesearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader ms-2\" [disabled]=\"!zoneConcentrationData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <!-- <span class=\"ms-2\">Export</span> -->\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n \r\n <div class=\"table-container m-4\">\r\n <table class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Footfall <br>(Actuals)\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Dwell Time <br>(Average)\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"conc cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Concentration\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table-responsive\">\r\n <tr *ngFor=\"let zone of zoneConcentrationData\">\r\n <td>\r\n <div class=\"table-title-primary overallstore mb-2\">\r\n <span\r\n class=\"text-capitalize cursor-pointer\"><a (click)=\"onZoneClick(zone.zoneName)\">{{ zone.zoneName || '--' }}</a>\r\n </span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.footfallCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} mins\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody> \r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Concentration Summary</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-7\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ zoneName || '' }} Concentration Heatmap <span\r\n ngbTooltip=\"Density heatmap\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n </h3>\r\n\r\n <div class=\"card-toolbar text-nowrap me-4\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'daily',\r\n 'inactivePlanBtn': type !== 'daily',\r\n 'disabled': disableDay\r\n }\"\r\n (click)=\"selectPlan('daily')\"\r\n [attr.disabled]=\"disableDay ? true : null\">\r\n Day\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'weekly',\r\n 'inactivePlanBtn': type !== 'weekly',\r\n 'disabled': disableWeek\r\n }\"\r\n (click)=\"selectPlan('weekly')\" [disabled]=\"disableWeek\">\r\n Week\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'monthly',\r\n 'inactivePlanBtn': type !== 'monthly',\r\n 'disabled': disableMonth\r\n }\"\r\n (click)=\"selectPlan('monthly')\" [disabled]=\"disableMonth\">\r\n Month\r\n </button>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-lg-8 mb-6\">\r\n \r\n <div class=\"d-flex\">\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollLeft()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <ul *ngIf=\"periodzone === 1 && !customOption\" #dateList\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center m-2\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon active\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n \r\n <ul *ngIf=\"(periodzone === 2 || periodzone === 3) && !customOption\"\r\n \r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n \r\n <ul *ngIf=\"customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollRight()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </div>\r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <ngb-carousel #carousel [interval]=\"0\" [pauseOnHover]=\"true\" (slide)=\"onSlideChange($event)\" [id]=\"selectedDate\">\r\n <ng-container *ngFor=\"let image of overallStoreData?.ImageURLs;let i=index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container cursor-pointer\">\r\n <img (click)=\"concentrationHeatmap(overallStoreData?.ImageURLs)\" [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n <button *ngIf=\"image?.downtime != null\" class=\"minsbadge position-absolute top-0 end-0 m-3 me-18\">\r\n <span class=\"minsbadgeprimary mt-2 mb-2 \">{{image.downtime}} mins<span class=\"ms-1\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 12 10\" fill=\"none\">\r\n <path d=\"M7.14063 0.000488281C7.79785 0.000488281 8.42578 0.135108 8.99902 0.379231C9.59375 0.632395 10.1289 1.0041 10.5771 1.46523C11.0244 1.92534 11.3857 2.47588 11.6318 3.0897C11.8691 3.67941 12 4.32538 12 5.00049C12 5.6766 11.8691 6.32257 11.6318 6.91228C11.3857 7.5241 11.0244 8.07463 10.5762 8.53575C10.1289 8.99587 9.59375 9.36758 8.99707 9.62074C8.42383 9.86487 7.7959 9.99949 7.13965 9.99949C6.48242 9.99949 5.85449 9.86487 5.28125 9.62074C4.68652 9.36758 4.15137 8.99587 3.7041 8.53575L3.70312 8.53475C3.25488 8.07363 2.89453 7.52309 2.64844 6.91228C2.57227 6.72241 2.50684 6.52751 2.45312 6.32759C2.55469 6.33764 2.6582 6.34266 2.7627 6.34266C2.96094 6.34266 3.1543 6.32458 3.34277 6.28942C3.37402 6.38586 3.4082 6.4813 3.44531 6.57473C3.64746 7.07704 3.94434 7.52912 4.31348 7.90887C4.68262 8.28862 5.12305 8.59402 5.61035 8.80198C6.08008 9.0019 6.59668 9.11341 7.13965 9.11341C7.68262 9.11341 8.19824 9.0029 8.66895 8.80198C9.15723 8.59402 9.59668 8.28862 9.96582 7.90887C10.335 7.52912 10.6318 7.07604 10.834 6.57473C11.0283 6.09151 11.1367 5.56006 11.1367 5.00149C11.1367 4.44292 11.0293 3.91248 10.834 3.42826C10.6318 2.92595 10.335 2.47387 9.96582 2.09412C9.59668 1.71437 9.15625 1.40897 8.66895 1.20101C8.19922 1.00109 7.68262 0.889578 7.13965 0.889578C6.59668 0.889578 6.08106 1.00009 5.61035 1.20101C5.56836 1.21909 5.52637 1.23818 5.48535 1.25727C5.3252 0.998077 5.13184 0.762996 4.91016 0.559058C5.03125 0.494762 5.15527 0.435489 5.28125 0.38124C5.85645 0.135108 6.4834 0.000488281 7.14063 0.000488281ZM6.58301 2.62355C6.58301 2.50099 6.63184 2.39048 6.70898 2.31011C6.78711 2.22974 6.89453 2.18052 7.01367 2.18052C7.13281 2.18052 7.24023 2.22974 7.31836 2.31011C7.39648 2.39048 7.44434 2.50099 7.44434 2.62355V4.95629L9.13867 5.99004C9.24023 6.05233 9.30859 6.15178 9.33594 6.26129C9.36328 6.37079 9.35059 6.49135 9.29004 6.59583V6.59683C9.22949 6.70131 9.13281 6.77164 9.02637 6.79977C8.91992 6.8279 8.80273 6.81484 8.70117 6.75255H8.7002L6.80469 5.59623C6.73926 5.55906 6.68555 5.50481 6.64648 5.44051C6.60645 5.3732 6.58301 5.29384 6.58301 5.20945V2.62355Z\" fill=\"#009BF3\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.63477 0.265717C4.08984 0.265717 5.26953 1.4793 5.26953 2.97618C5.26953 4.47307 4.08984 5.68665 2.63477 5.68665C1.17969 5.68665 0 4.47307 0 2.97618C0 1.4793 1.17969 0.265717 2.63477 0.265717ZM2.63477 4.53033L4.04883 2.73206H3.1709V1.77566H2.09863V2.73206H1.2207L2.63477 4.53033Z\" fill=\"#F04438\"/>\r\n </svg></span></span>\r\n </button>\r\n <a [href]=\"image.URL\" download><svg\r\n id=\"download-icon\"\r\n width=\"44\"\r\n height=\"44\"\r\n viewBox=\"0 0 44 44\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\"\r\n >\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <filter\r\n id=\"filter0_d_3822_19479\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"44\"\r\n height=\"44\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\"\r\n >\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\"\r\n />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></a>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n <ng-container *ngIf=\"heatmapLoading\">\r\n <div class=\"row loader concheatmap d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heatmapNoData && !heatmapLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body concheatmap d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Overall Store Concentration Heatmap</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <div class=\"body me-4\">\r\n <div class=\"pt-10 m-6\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Total Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">{{overallStoreData?.totalFootfall?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Concentration %\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ overallStoreData?.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Bounced Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.bouncedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div></div>\r\n <div></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Engagers\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.engagersCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg. Dwell Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} mins\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Age Range\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.ageRange?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Male Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.maleRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Female Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.femaleRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Trolley\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.trolleyRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Basket\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.basketRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, skip, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\n\r\n@Component({\r\n selector: 'lib-segmentation',\r\n templateUrl: './segmentation.component.html',\r\n styleUrl: './segmentation.component.scss'\r\n})\r\n\r\nexport class SegmentationComponent implements OnInit, OnDestroy{\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n cardDataLoading1: boolean = true;\r\n cardNoData1: boolean = false;\r\n cardDataLoading3: boolean = true;\r\n cardNoData3: boolean = false;\r\n cardDataLoading4: boolean = true;\r\n cardNoData4: boolean = false;\r\n cardDataLoading5: boolean = true;\r\n cardNoData5: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private destroy$ = new Subject<void>();\r\n zoneName:any='Overall Store';\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n @Output() dataEmitter = new EventEmitter<string>();\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n if (this.headerData?.client === '430') {\r\n this.getCardData1();\r\n this.getCardData3();\r\n this.getCardData();\r\n this.getCardData4();\r\n this.getCardData5();\r\n if (this.ZoneService?.zoneSegmentation) {\r\n this.ZoneService.zoneSegmentation\r\n .pipe(skip(1),takeUntil(this.destroy$)) // Skip the initial emission\r\n .subscribe((zoneData: any) => {\r\n this.zoneName = zoneData;\r\n this.getCardData4();\r\n this.getCardData5();\r\n });\r\n }\r\n \r\n } else if (this.headerData?.client === '463') {\r\n this.getCardData();\r\n }\r\n \r\n})\r\n }\r\n private root!: am5.Root;\r\n ngOnDestroy(): void {\r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getSegmentationData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response.data.segmentationAnalysis\r\n // this.cardData = response.data.segmentationAnalysis.map((item: any) => ({\r\n // name: item.category,\r\n // value: item.value,\r\n // concentrationRate: item.concentrationRate\r\n // }));\r\n this.cardNoData = this.cardData.length === 0;\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n // this.dataEmitter.emit(this.cardData?.length);\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getSegmentationDataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'TrafficSegmentation');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n cardData1:any=[];\r\n getCardData1(): void {\r\n this.cardDataLoading1 = true;\r\n this.cardNoData1 = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getInterationTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading1 = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData1 = response.data.data\r\n this.cardNoData1 = this.cardData1.length === 0;\r\n setTimeout(() => {\r\n this.createChart(this.cardData1); // Call this method after data is set\r\n }, 200);\r\n // this.createChart(this.cardData);\r\n } else {\r\n this.cardData1 = [];\r\n this.cardNoData1 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData1 = [];\r\n this.cardNoData1 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n \r\n \r\n createChart(cardData1: any[]): void {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"chartdiv\");\r\n if (!chartDiv) {\r\n console.error(\"Could not find HTML element with id `chartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n \r\n this.root = am5.Root.new('chartdiv');\r\n \r\n const chart = this.root.container.children.push(\r\n am5xy.XYChart.new(this.root, {\r\n panX: false,\r\n panY: false,\r\n paddingLeft: 0,\r\n wheelX: \"panX\",\r\n wheelY: \"zoomX\",\r\n layout: this.root.verticalLayout\r\n })\r\n );\r\n \r\n const legend = chart.children.push(\r\n am5.Legend.new(this.root, {\r\n centerX: am5.p50,\r\n x: am5.p50\r\n })\r\n );\r\n \r\n const data: ChartData[] = cardData1.map((item: any) => ({\r\n year: item.store_name,\r\n customerCountOver10Min: item.customer_count_over10min,\r\n customerCountLessThanMin: item.customer_count_lessthanamin\r\n }));\r\n \r\n const xRenderer = am5xy.AxisRendererX.new(this.root, {\r\n cellStartLocation: 0.1,\r\n cellEndLocation: 0.9,\r\n minorGridEnabled: true\r\n });\r\n \r\n const xAxis = chart.xAxes.push(\r\n am5xy.CategoryAxis.new(this.root, {\r\n categoryField: \"year\",\r\n renderer: xRenderer,\r\n tooltip: am5.Tooltip.new(this.root, {})\r\n })\r\n );\r\n \r\n xRenderer.grid.template.setAll({\r\n location: 1\r\n });\r\n \r\n xAxis.data.setAll(data);\r\n \r\n xAxis.get(\"renderer\").labels.template.setAll({\r\n visible: false\r\n });\r\n \r\n const yAxis = chart.yAxes.push(\r\n am5xy.ValueAxis.new(this.root, {\r\n renderer: am5xy.AxisRendererY.new(this.root, {\r\n strokeOpacity: 0.1\r\n })\r\n })\r\n );\r\n \r\n // Use an arrow function to ensure `this` is bound correctly\r\n const makeSeries = (name: string, fieldName: keyof ChartData): void => {\r\n const series = chart.series.push(am5xy.ColumnSeries.new(this.root, {\r\n name: name,\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n valueYField: fieldName,\r\n categoryXField: \"year\"\r\n }));\r\n \r\n series.columns.template.setAll({\r\n tooltipText: \"{name}: {valueY}\",\r\n width: am5.percent(90),\r\n tooltipY: 0,\r\n strokeOpacity: 0\r\n });\r\n \r\n series.data.setAll(data);\r\n series.appear();\r\n \r\n series.bullets.push(() => {\r\n return am5.Bullet.new(this.root, {\r\n locationY: 0,\r\n sprite: am5.Label.new(this.root, {\r\n text: \"{valueY}\",\r\n fill: this.root.interfaceColors.get(\"alternativeText\"),\r\n centerY: 0,\r\n centerX: am5.p50,\r\n populateText: true\r\n })\r\n });\r\n });\r\n \r\n legend.data.push(series);\r\n };\r\n \r\n makeSeries(\"Customer spent more than 10 mins\", \"customerCountOver10Min\");\r\n makeSeries(\"Billing Conversion\", \"customerCountLessThanMin\");\r\n \r\n chart.appear(1000, 100);\r\n }, 100);\r\n }\r\n \r\n onExport1() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.getInterationTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'CustomerFunnel');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n onRateExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.zoneInteractionTableExport_430(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'InteractionvsConversion');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n cardData3:any=[]\r\n getCardData3(): void {\r\n this.cardDataLoading3 = true;\r\n this.cardNoData3 = true;\r\n const requestData = {\r\n search: this.searchInput3,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage3,\r\n offset: this.currentPage3,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getPasserByTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading3 = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData3 = response?.data?.passerByData\r\n this.cardNoData3 = this.cardData3.length === 0;\r\n } else {\r\n this.cardData3 = [];\r\n this.cardNoData3 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData3 = [];\r\n this.cardNoData3 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport3() {\r\n const requestData = {\r\n search: this.searchInput3,\r\n // sort: this.sortColumName,\r\n // sortBy: this.sortDirection,\r\n limit: this.itemsPerPage3,\r\n offset: this.currentPage3,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.getPasserByTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Passer-by Analysis ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n itemsPerPage3 = 10000\r\n currentPage3 = 0\r\n totalItems3 = 0\r\n searchInput3:any =''\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getCardData3();\r\n }\r\n\r\n cardData4:any=[]\r\n getCardData4(): void {\r\n this.cardDataLoading4 = true;\r\n this.cardNoData4 = true;\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export:false\r\n };\r\n \r\n this.ZoneService.getInteractionTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading4 = false;\r\n if (response?.code === 200 && response) {\r\n this.cardData4 = response?.data?.customerinteraction_data;\r\n this.cardData4.total = response?.data?.total;\r\n this.cardNoData4 = this.cardData4.length === 0;\r\n } else {\r\n this.cardData4 = [];\r\n this.cardNoData4 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData4 = [];\r\n this.cardNoData4 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n\r\n onExport4() {\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.getInteractionTable430Export(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Interaction Analysis ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n cardData5:any=[];\r\n getCardData5(): void {\r\n this.cardDataLoading5 = true;\r\n this.cardNoData5 = true;\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export:false\r\n };\r\n \r\n this.ZoneService.getZonewiseCustomerFunnelData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading5 = false;\r\n if (response?.code === 200 && response) {\r\n this.cardData5 = response?.data?.data;\r\n this.cardNoData5 = this.cardData5.length === 0;\r\n } else {\r\n this.cardData5 = [];\r\n this.cardNoData5 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData5 = [];\r\n this.cardNoData5 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n\r\n onExport5() {\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export:true\r\n };\r\n \r\n \r\n this.ZoneService.getZonewiseCustomerFunnelExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Zonewise Customer Funnel ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n}\r\ninterface ChartData {\r\n year: string; // or store name, depending on your requirement\r\n customerCountOver10Min: number;\r\n customerCountLessThanMin: number;\r\n}\r\n","<div class=\"row\" >\r\n\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData && (headerData?.client === '430') || (!cardNoData && headerData?.client === '463')\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Traffic Segmentation <span class=\"ms-1\"\r\n ngbTooltip=\"Entrance level traffic segmentation\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n <div class=\"card-body mb-18 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Entrance</th>\r\n <th>Entrance wise footfall</th>\r\n <th *ngIf=\"headerData?.client === '463'\">Concentration Rate</th>\r\n \r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td>{{ item.category }}</td>\r\n <td>{{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n <td *ngIf=\"headerData?.client === '463'\">{{ item.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} %</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Age Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData1 && headerData?.client === '430'\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start headtext p-3\">Customer Funnel <span class=\"ms-1\"\r\n ngbTooltip=\"Summary of walk-in behaviour from passerby to conversion at the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport1()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData1.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading1 && !cardNoData1\" class=\"body me-4\">\r\n <div *ngFor=\"let item of cardData1\" class=\"m-4\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Passer By\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.passer_by || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Drop In Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.drop_in_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ ((item.greeting_count / item.footfall) * 100).toFixed(1) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Interacted\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Taken to Assist a Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time_string || '--' }}\r\n <!-- {{ convertSecondsToMinSec(item.avg_time_taken) }} -->\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Spent with Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.assist_time_string || '--' }}\r\n <!-- {{ convertSecondsToMinSec(item.avg_interaction_time) }} -->\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone !== null ? item.footfall_overamin_inzone : '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate !== null ? item.billing_conversion_rate :'--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n \r\n\r\n \r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading1\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData1 && !cardDataLoading1\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n\r\n <!-- <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n \r\n <th>Interaction Rate</th>\r\n <th>Customer Attended</th>\r\n <th>Passer By</th>\r\n \r\n <th>Drop In Rate</th>\r\n <th>Billing Conversion</th>\r\n <th>Footfall</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.interaction_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.customer_attended }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.passer_by }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zonename }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.drop_in_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall_overamin_inzone }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n </div>\r\n</div>\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData5 && headerData?.client === '430'\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start headtext p-3\">Zonewise Customer Funnel <span class=\"ms-1\"\r\n ngbTooltip=\"Summary of walk-in behaviour from passerby to conversion at the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport5()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData5.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading5 && !cardNoData5\" class=\"body me-4 mb-8\">\r\n <div *ngFor=\"let item of cardData5\" class=\"m-4 agerangescroll\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ ((item.greeting_count / item.footfall) * 100).toFixed(1) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Interacted\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Taken to Assist a Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time_string || '--' }}\r\n <!-- {{ convertSecondsToMinSec(item.avg_time_taken) }} -->\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Spent with Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n <!-- {{ convertSecondsToMinSec(item.avg_interaction_time) }} -->\r\n {{ item.assist_time_string || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div *ngIf=\"zoneName ==='Overall Store'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone !== null ? item.footfall_overamin_inzone : '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"zoneName ==='Overall Store'\" class=\"borderdashed my-2\"></div>\r\n <div *ngIf=\"zoneName ==='Overall Store'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate !== null ? item.billing_conversion_rate + '%' : '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n \r\n \r\n \r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading5\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData5 && !cardDataLoading5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData1 && headerData?.client === '430'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start headtext p-3\">Interaction vs Conversion <span class=\"ms-1\"\r\n ngbTooltip=\"Comparison of engaged walk-in vs potential conversion in the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!-- [disabled]=\"!cardData.length\" -->\r\n <button type=\"button\" (click)=\"onRateExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-14 p-0\">\r\n <div *ngIf=\"!cardDataLoading1 && !cardNoData1\" id=\"chartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading1\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData1 && !cardDataLoading1\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData3 && headerData?.client === '430'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Passer-by Analysis <span class=\"ms-1\"\r\n ngbTooltip=\"Summary of camera wise passerby count\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport3()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData3.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n <div class=\"card-body mb-8 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading3 && !cardNoData3\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('streamName')\">\r\n Camera Name\r\n <svg [ngClass]=\"sortColumName === 'streamName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'streamName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('passerby_count')\">\r\n Passer-by Count\r\n <svg [ngClass]=\"sortColumName === 'passerby_count' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'passerby_count' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData3\">\r\n <td class=\"text-capitalize\">{{ item.streamName ? item.streamName :'--'}}</td>\r\n <td>{{ item.passerby_count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading3\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData3 && !cardDataLoading3\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for PasserBy Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData4 && headerData?.client === '430'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Interaction Analysis <span class=\"ms-1\"\r\n ngbTooltip=\"Time-series analysis of customer interactions\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport4()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData4.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-8 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading4 && !cardNoData4\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Category</th>\r\n <th>Value</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData4\">\r\n <td>\r\n {{ item.category }}\r\n </td>\r\n <td>\r\n <div class=\"row\">\r\n <div class=\"col-6 mt-2\">\r\n <ngb-progressbar class=\"mb-3\" height=\"10px\" type=\"primary\" [value]=\"item?.value\" [max]=\"cardData4?.total\" />\r\n </div>\r\n <div class=\"col-6\">\r\n {{ item?.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}\r\n \r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"cardDataLoading4\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div> -->\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData4 && !cardDataLoading4\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interaction Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n</div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\n\r\n@Component({\r\n selector: 'lib-interation-table-client459',\r\n templateUrl: './interation-table-client459.component.html',\r\n styleUrl: './interation-table-client459.component.scss'\r\n})\r\n\r\nexport class InterationTableClient459Component {\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private destroy$ = new Subject<void>();\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n})\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getInterationTable459Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response.data.data\r\n this.cardNoData = this.cardData.length === 0;\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getInterationTable459DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'QueueManagement');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n}","<div *ngIf=\"!cardNoData\" class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-4\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Queue Management</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Store ID</th>\r\n <th>Date</th>\r\n <th>Zone Name</th>\r\n <th>Hour</th>\r\n <th>Footfall</th>\r\n <th>Avg Time Spent (Mins)</th>\r\n <!-- <th>Min Time Spent</th>\r\n <th>Max Time Spent</th> -->\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.store_id || '--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.date || '--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zone_name || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.hour || '0' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.Footfall.toFixed(0)}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.avg_time_spent || '--'}}</div>\r\n </td>\r\n \r\n <!-- <td>\r\n <div class=\"table-title subscribedtext\">{{ item.min_time_spent || '--' }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.max_time_spent || '--' }}</div>\r\n </td> -->\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable, } from '@angular/core';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { BehaviorSubject, Observable, Subject, takeUntil, catchError, map,throwError } from 'rxjs';\r\nimport * as FileSaver from 'file-saver';\r\nimport * as XLSX from 'xlsx';\r\n\r\n \r\nconst EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\r\nconst EXCEL_EXTENSION = '.xlsx';\r\n \r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class Zonev2Service {\r\n zoneAnalysisUrl:any;\r\n trafficApiUrl: any;\r\n private footfallSubject = new BehaviorSubject<number | null>(null); // Initialize with null\r\n footfall$ = this.footfallSubject.asObservable();\r\n private reloadDataSubject = new BehaviorSubject<boolean>(false);\r\n reloadData$ = this.reloadDataSubject.asObservable();\r\n\r\n constructor(private http: HttpClient, private gs: GlobalStateService) {\r\n this.gs.environment.pipe(takeUntil(this.destroy$)).subscribe((env) => {\r\n if (env) {\r\n this.zoneAnalysisUrl = env.zoneAnalysisUrl;\r\n this.trafficApiUrl = env.trafficApiUrl;\r\n\r\n }\r\n });\r\n }\r\n triggerReload() {\r\n this.reloadDataSubject.next(true);\r\n }\r\n updateFootfall(count: number) {\r\n this.footfallSubject.next(count);\r\n }\r\n public exportAsExcelFile(json: any[], excelFileName: string): void {\r\n const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);\r\n const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };\r\n const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });\r\n this.saveAsExcelFile(excelBuffer, excelFileName);\r\n }\r\n \r\n public saveAsExcelFile(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n \r\n public saveAsTemplate(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n private readonly destroy$ = new Subject();\r\n\r\nngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n}\r\n // V2 API\r\n getZoneCardsData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zonecards_v2`, data)\r\n }\r\n getTopPerformingZones( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingZones_v2`, data)\r\n }\r\n getTopPerformingStores( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingStores_v2`, data)\r\n }\r\n getSummaryTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneSummaryTable_v2`, data)\r\n }\r\n getSummaryTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneSummaryTable_v2`, data, {responseType: 'arraybuffer'})\r\n }\r\n getAvailableZoneNames( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/availableZoneNames_v2`, data)\r\n }\r\n getOverallStoreHeatmapDates( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/overallStoreConcentrationDates_v2`, data)\r\n }\r\n getOverallStoreConcentrationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/overallStoreConcentrationHeatmap_v2`, data)\r\n }\r\n getAnalaysisSummary( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneConcentrationSummary_v2`, data)\r\n }\r\n getTrajectoryAnalysis( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/trajectoryAnalysis_v2`, data)\r\n }\r\n getFootfallDirectoryFolders(params: any): Observable<any> {\r\n return this.http.post<any>(\r\n `${this.trafficApiUrl}/footfallDirectoryFolders`,\r\n params\r\n );\r\n }\r\n getFootfallDirectory(params: any): Observable<any> {\r\n return this.http.post<any>(\r\n `${this.trafficApiUrl}/footfallDirectory`,\r\n params\r\n );\r\n }\r\n getStoresActive(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.zoneAnalysisUrl}/getMySubscription`, params);\r\n }\r\n getTrajectoryRateAnalysis( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/trajectoryAnalysisRate_V2`, data)\r\n }\r\n getCustomerJourney( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/customerJourney_V2`, data)\r\n }\r\n getCustomerJourneyTable( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/customerJourneyTable_V2`, data)\r\n }\r\n getCustomerJourneyTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/customerJourneyTable_V2`, data, {responseType: 'arraybuffer'})\r\n }\r\n getCheckTodayReportStatus(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.trafficApiUrl}/checkTodayReportStatus`, params);\r\n }\r\n\r\n \r\n private handleError(error: HttpErrorResponse): Observable<never> {\r\n return throwError(\r\n () => new Error(\"Something bad happened; please try again later\")\r\n );\r\n }\r\n\r\n}\r\n\r\n","import { AfterViewInit, Component, OnDestroy, OnInit } from '@angular/core';\r\n\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5flow from \"@amcharts/amcharts5/flow\";\r\nimport am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { Router } from '@angular/router';\r\nimport { Zonev2Service } from '../services/zonev2.service';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil } from \"rxjs\";\r\n\r\n@Component({\r\n selector: 'lib-customer-journey-chart',\r\n templateUrl: './customer-journey-chart.component.html',\r\n styleUrl: './customer-journey-chart.component.scss'\r\n})\r\nexport class CustomerJourneyChartComponent implements OnInit, AfterViewInit, OnDestroy {\r\n chartRoot: am5.Root;\r\n viewMode: 'chart' | 'table' = 'chart';\r\n\r\n headerData: any;\r\n\r\n isPageLoading: boolean = true;\r\n\r\n sortedColumn: string = '';\r\n sortOrder: number = 1;\r\n\r\n searchTerm: string = '';\r\n\r\n limit: number = 10;\r\n offset: number = 1;\r\n totalItems: number = 0;\r\n paginationSizes = [10, 20, 30];\r\n\r\n customerJourneyTableData: any[] = [];\r\n customerJourneyChartData: {\r\n from: string,\r\n to: string,\r\n value: number\r\n }[] = [];\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private router: Router,\r\n private toast: ToastService,\r\n private gs: GlobalStateService,\r\n private zoneV2Service: Zonev2Service\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n\r\n if (this.viewMode === 'chart') {\r\n this.getCustomerJourneyChartData();\r\n } else {\r\n this.getCustomerJourneyTableData();\r\n }\r\n })\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.initializeChart()\r\n }\r\n\r\n toggleView(view: 'chart' | 'table') {\r\n if (this.viewMode === view) return;\r\n this.viewMode = view;\r\n this.searchTerm = '';\r\n if (this.viewMode === 'chart') {\r\n this.getCustomerJourneyChartData();\r\n } else {\r\n this.getCustomerJourneyTableData();\r\n }\r\n }\r\n\r\n getCustomerJourneyTableData() {\r\n this.isPageLoading = true;\r\n this.customerJourneyTableData = []\r\n const payload = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n search: this.searchTerm.toLowerCase(),\r\n sort: this.sortedColumn,\r\n sortBy: this.sortOrder,\r\n limit: this.limit,\r\n offset: this.offset - 1,\r\n export: false,\r\n }\r\n\r\n this.zoneV2Service.getCustomerJourneyTable(payload).subscribe({\r\n next: (response: any) => {\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.customerJourneyTableData = response.data.customerJourneyTableData;\r\n this.totalItems = response.data['total_count']\r\n } else {\r\n this.customerJourneyTableData = []\r\n this.totalItems = 0\r\n }\r\n\r\n if (this.totalItems < 10) {\r\n this.paginationSizes = [this.totalItems]\r\n } else {\r\n this.paginationSizes = [10, 20, 30]\r\n }\r\n\r\n this.isPageLoading = false;\r\n },\r\n error: (err) => {\r\n this.customerJourneyTableData = [];\r\n this.isPageLoading = false;\r\n console.log(\"@@ ~ getCustomerJourneyTableData [ERR]:\", err);\r\n }\r\n })\r\n }\r\n\r\n getCustomerJourneyChartData() {\r\n this.isPageLoading = true;\r\n this.customerJourneyChartData = []\r\n const payload = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores?.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n search: this.searchTerm.toLowerCase(),\r\n sortType: 'bottom',\r\n limit: this.limit,\r\n offset: this.offset - 1,\r\n export: false,\r\n }\r\n\r\n this.zoneV2Service.getCustomerJourney(payload).subscribe({\r\n next: (response: any) => {\r\n if (response && response.status === 'success') {\r\n this.customerJourneyChartData = response.data.customerJourneyData;\r\n this.initializeChart(); // Initialize chart when data is available\r\n this.updateChartData(this.customerJourneyChartData);\r\n } else {\r\n this.customerJourneyChartData = []\r\n }\r\n this.isPageLoading = false;\r\n },\r\n error: (err) => {\r\n this.customerJourneyChartData = []\r\n this.isPageLoading = false;\r\n console.log('@@ getFixtureSizesList [ERR]: ', err)\r\n }\r\n })\r\n }\r\n\r\n initializeChart() {\r\n try {\r\n if (this.chartRoot) return; // Exit if already initialized.\r\n\r\n this.chartRoot = am5.Root.new('customerJourneyChart');\r\n this.chartRoot.setThemes([am5themes_Animated.new(this.chartRoot)]);\r\n\r\n this.chartRoot.container.children.push(am5flow.Sankey.new(this.chartRoot, {\r\n sourceIdField: \"from\",\r\n targetIdField: \"to\",\r\n valueField: \"value\",\r\n paddingRight: 30\r\n }));\r\n\r\n } catch (error) {\r\n console.log(\"@@ ~ initializeChart [ERR]:\", error);\r\n }\r\n }\r\n\r\n updateChartData(data: any) {\r\n let filteredData = this.removeCircularLinks(data);\r\n try {\r\n if (!this.chartRoot) throw new Error('Chart not found');\r\n\r\n const series = this.chartRoot.container.children.getIndex(0) as am5flow.Sankey;\r\n if (!series) throw new Error('Chart not found');\r\n\r\n if (filteredData.length > 0) {\r\n series.data.setAll(filteredData);\r\n } else {\r\n series.data.setAll([filteredData]);\r\n }\r\n\r\n } catch (error) {\r\n console.log(\"@@ ~ updateChartData [ERR]:\", error);\r\n }\r\n }\r\n\r\n addNewZone() {\r\n const data: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n data.store = data.stores[0].storeId;\r\n\r\n localStorage.setItem(\"header-filters\", JSON.stringify(data));\r\n this.gs.dataRangeValue.next(data)\r\n\r\n this.router.navigate([\"/manage/stores/zones\"], {\r\n queryParams: { storeId: data.stores[0].storeId },\r\n });\r\n }\r\n\r\n export() {\r\n const payload = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n search: this.searchTerm.toLowerCase(),\r\n sort: this.sortedColumn,\r\n sortBy: this.sortOrder,\r\n limit: 10000,\r\n offset: 0,\r\n export: true\r\n };\r\n console.log(\"@@ ~ this.headerData.date.startDate:\", this.headerData.date.endDate);\r\n\r\n this.zoneV2Service.getCustomerJourneyTableExport(payload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n let fileName = 'Customer_Journey_Export';\r\n\r\n if (this.headerData.date.startDate == this.headerData.date.endDate) {\r\n fileName = `${fileName}_${this.headerData.date.startDate}`\r\n } else {\r\n fileName = `${fileName}_${this.headerData.date.startDate}_${this.headerData.date.endDate}`\r\n }\r\n\r\n this.zoneV2Service.saveAsExcelFile(res, fileName);\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n\r\n }\r\n\r\n removeCircularLinks(data: any[]): any[] {\r\n const graph = new Map();\r\n const result = [];\r\n\r\n function hasCycle(from: any, to: any, visited: any) {\r\n if (from === to) return true;\r\n if (visited.has(from)) return false;\r\n\r\n visited.add(from);\r\n\r\n if (graph.has(from)) {\r\n for (const neighbor of graph.get(from)) {\r\n if (hasCycle(neighbor, to, visited)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n visited.delete(from);\r\n return false;\r\n }\r\n\r\n for (const { from, to, value } of data) {\r\n if (hasCycle(to, from, new Set())) {\r\n continue;\r\n }\r\n\r\n result.push({ from, to, value });\r\n\r\n if (!graph.has(from)) {\r\n graph.set(from, []);\r\n }\r\n graph.get(from).push(to);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n onSearch(): void {\r\n this.sortedColumn = '';\r\n this.sortOrder = 1\r\n this.offset = 1;\r\n this.limit = 10;\r\n\r\n this.getCustomerJourneyTableData();\r\n }\r\n\r\n onSortTable(column: string): void {\r\n if (this.sortedColumn === column) {\r\n this.sortOrder = this.sortOrder === 1 ? -1 : 1;\r\n } else {\r\n this.sortedColumn = column;\r\n this.sortOrder = 1;\r\n }\r\n this.offset = 1;\r\n this.limit = 10;\r\n\r\n this.getCustomerJourneyTableData();\r\n }\r\n\r\n paginationSize(): number {\r\n return this.totalItems < 10 ? this.totalItems : this.limit;\r\n }\r\n\r\n onPageSizeChange(pageSize: number) {\r\n this.offset = 1;\r\n this.limit = Number(pageSize);\r\n this.getCustomerJourneyTableData()\r\n }\r\n\r\n onPageChange(pageOffset: any) {\r\n this.offset = Number(pageOffset);\r\n this.getCustomerJourneyTableData()\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.chartRoot?.dispose();\r\n }\r\n}\r\n","<section id=\"customer-journey-chart\" class=\"card p-5\">\r\n <!-- ---------HEADER---------- -->\r\n <div class=\"d-flex justify-content-between mb-3\">\r\n <div class=\"d-flex align-items-center justify-content-center gap-3\">\r\n <h3>Customer Journey</h3>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_13146_67458)\">\r\n <path\r\n d=\"M6.06065 6.91667C6.21739 6.47111 6.52675 6.0954 6.93395 5.85609C7.34116 5.61677 7.81991 5.52929 8.28544 5.60914C8.75096 5.68899 9.1732 5.93102 9.47737 6.29235C9.78154 6.65369 9.94802 7.11101 9.94732 7.58333C9.94732 8.91667 7.94732 9.58333 7.94732 9.58333M8.00065 12.25H8.00732M14.6673 8.91667C14.6673 12.5986 11.6826 15.5833 8.00065 15.5833C4.31875 15.5833 1.33398 12.5986 1.33398 8.91667C1.33398 5.23477 4.31875 2.25 8.00065 2.25C11.6826 2.25 14.6673 5.23477 14.6673 8.91667Z\"\r\n stroke=\"#98A2B3\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_13146_67458\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(0 0.916016)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-5\">\r\n <div style=\"position: relative\" [hidden]=\"viewMode === 'chart'\">\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"searchTerm\"\r\n (change)=\"onSearch()\"\r\n style=\"padding: 0.68rem 3rem\"\r\n class=\"form-control\"\r\n name=\"search\"\r\n autocomplete=\"off\"\r\n placeholder=\"Search\"\r\n />\r\n\r\n <span class=\"search-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-width=\"2\" />\r\n <line x1=\"13\" y1=\"13\" x2=\"16\" y2=\"16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n\r\n <button *ngIf=\"searchTerm\" type=\"button\" aria-label=\"Clear\" (click)=\"searchTerm = ''; onSearch()\" class=\"clear-search\">\r\n <svg width=\"64px\" height=\"64px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path d=\"M9 9L15 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <path d=\"M15 9L9 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"9\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n ></circle>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div id=\"segment-btn\">\r\n <div [class.active]=\"viewMode === 'chart'\" class=\"segment chart-btn\" (click)=\"toggleView('chart')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path\r\n d=\"M15 17.5833V9.25M10 17.5833V4.25M5 17.5833V12.5833\"\r\n stroke=\"#344054\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <div [class.active]=\"viewMode === 'table'\" class=\"segment table-btn\" (click)=\"toggleView('table')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path\r\n d=\"M6.66667 5.91602H17.5M6.66667 10.916H17.5M6.66667 15.916H17.5M2.5 5.91602H2.50833M2.5 10.916H2.50833M2.5 15.916H2.50833\"\r\n stroke=\"#344054\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dropdown\">\r\n <button class=\"btn btn-link p-0\" type=\"button\" data-bs-toggle=\"dropdown\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"25\" viewBox=\"0 0 24 25\" fill=\"none\">\r\n <path\r\n d=\"M12 13.916C12.5523 13.916 13 13.4683 13 12.916C13 12.3637 12.5523 11.916 12 11.916C11.4477 11.916 11 12.3637 11 12.916C11 13.4683 11.4477 13.916 12 13.916Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 6.91602C12.5523 6.91602 13 6.4683 13 5.91602C13 5.36373 12.5523 4.91602 12 4.91602C11.4477 4.91602 11 5.36373 11 5.91602C11 6.4683 11.4477 6.91602 12 6.91602Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 20.916C12.5523 20.916 13 20.4683 13 19.916C13 19.3637 12.5523 18.916 12 18.916C11.4477 18.916 11 19.3637 11 19.916C11 20.4683 11.4477 20.916 12 20.916Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li>\r\n <span class=\"dropdown-item cursor-pointer d-flex justify-content-start align-items-center\">\r\n <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M6.00065 1.33398V10.6673M1.33398 6.00065H10.6673\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <a (click)=\"addNewZone()\"> Add New Zone </a>\r\n </span>\r\n </li>\r\n <li [hidden]=\"viewMode === 'chart'\">\r\n <span class=\"dropdown-item cursor-pointer d-flex justify-content-start align-items-center\">\r\n <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M14 10V12.6667C14 13.0203 13.8595 13.3594 13.6095 13.6095C13.3594 13.8595 13.0203 14 12.6667 14H3.33333C2.97971 14 2.64057 13.8595 2.39052 13.6095C2.14048 13.3594 2 13.0203 2 12.6667V10M11.3333 5.33333L8 2M8 2L4.66667 5.33333M8 2V10\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <a (click)=\"export()\"> Export </a>\r\n </span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [hidden]=\"!isPageLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"isPageLoading\">\r\n <!-- ---------CHART---------- -->\r\n <div [hidden]=\"viewMode === 'table'\">\r\n <div [hidden]=\"customerJourneyChartData.length !== 0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\" />\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Chart</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"customerJourneyChartData.length === 0\">\r\n <div id=\"customerJourneyChart\"></div>\r\n </div>\r\n </div>\r\n\r\n <!-- ---------TABLE---------- -->\r\n <div [hidden]=\"viewMode === 'chart'\">\r\n <div [hidden]=\"customerJourneyTableData.length !== 0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\" />\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"customerJourneyTableData.length === 0\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('zoneName')\">\r\n Zone Name\r\n <svg\r\n [ngClass]=\"sortedColumn === 'zoneName' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'zoneName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <!-- <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('noOfStores')\">\r\n No. of stores\r\n <svg\r\n [ngClass]=\"sortedColumn === 'noOfStores' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'noOfStores' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th> -->\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('zoneFF')\">\r\n Zone FF\r\n <svg\r\n [ngClass]=\"sortedColumn === 'zoneFF' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'zoneFF' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('impressions')\">\r\n Concentration\r\n <svg\r\n [ngClass]=\"sortedColumn === 'impressions' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'impressions' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('AvgDwellTime')\">\r\n Avg Dwell Time\r\n <svg\r\n [ngClass]=\"sortedColumn === 'AvgDwellTime' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'AvgDwellTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of customerJourneyTableData\">\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneName || \"--\" }}</div>\r\n </td>\r\n <!-- <td>\r\n <div class=\"table-title\">{{ store.noOfStores || \"--\" }}</div>\r\n </td> -->\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneFF || \"--\" }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.impressions || 0 }}%</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.AvgDwellTime || 0 }} Mins</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <!-- Pagination -->\r\n <lib-pagination\r\n class=\"text-start\"\r\n [itemsPerPage]=\"limit\"\r\n [currentPage]=\"offset\"\r\n [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\"\r\n [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n ></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { ZoneService } from '../services/zone.service';\r\n@Component({\r\n selector: 'lib-tango-analyse-zone',\r\n templateUrl: './tango-analyse-zone.component.html',\r\n styleUrl: './tango-analyse-zone.component.scss',\r\n})\r\nexport class TangoAnalyseZoneComponent implements OnInit,OnDestroy {\r\n storeId: number = 0;\r\n clientId: number; \r\n headerData: any;\r\n showReportProcessingCard: boolean = true;\r\n yesterdayDate: string = '';\r\n dataProcessedLoading = true;\r\n private readonly destroy$ = new Subject();\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n constructor(\r\n private pageInfo: PageInfoService,public gs: GlobalStateService,private zoneService:ZoneService,private cd:ChangeDetectorRef,\r\n ) {\r\n }\r\n // receivedData: any = '';\r\n ngOnInit(): void {\r\n this.setPageData();\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.updateStoreId() \r\n this.checkTodayReportStatus() \r\n})\r\n\r\n}\r\n\r\nhasSegmentationData: boolean = false;\r\n\r\nupdateSegmentationStatus(hasData: boolean) {\r\n this.hasSegmentationData = hasData;\r\n}\r\n// receiveData(data: any) {\r\n// this.receivedData = data;\r\n// console.log(data)\r\n// this.cd.detectChanges();\r\n// }\r\n\r\n setPageData() {\r\n this.pageInfo.setTitle(\"Zones\");\r\n this.pageInfo.setDescription(\"Zones\");\r\n this.pageInfo.setBreadcrumbs([\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: false },\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: true },\r\n ]);\r\n }\r\n updateStoreId(): void {\r\n this.storeId = this.headerData.stores.filter((store: any) => store.checked).length;\r\n }\r\n\r\n checkTodayReportStatus(): void {\r\n this.dataProcessedLoading = true;\r\n const reportParams = {\r\n clientId: this.headerData?.client,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate\r\n };\r\n this.zoneService.getCheckTodayReportStatus(reportParams)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.dataProcessedLoading = false\r\n this.showReportProcessingCard = res?.data?.reportSendStatus === true;\r\n this.yesterdayDate = res?.data?.yesterday || '';\r\n this.cd.detectChanges();\r\n },\r\n \r\n error: (err: any) => {\r\n console.error('Error checking report status:', err);\r\n this.showReportProcessingCard = false;\r\n this.dataProcessedLoading = false;\r\n this.cd.detectChanges();\r\n }\r\n });\r\n }\r\n}\r\n","<div *ngIf=\"!showReportProcessingCard && !dataProcessedLoading\">\r\n<div *ngIf=\"storeId === 1\">\r\n<lib-zone-concentration></lib-zone-concentration>\r\n</div>\r\n<div class=\"mt-4\">\r\n <lib-overallcards></lib-overallcards>\r\n</div>\r\n<div *ngIf=\"storeId === 1\">\r\n <lib-segmentation></lib-segmentation>\r\n</div>\r\n <!-- <ng-container *ngIf=\"hasSegmentationData === true\"> -->\r\n \r\n <!-- </ng-container> -->\r\n <!-- <div *ngIf=\"storeId === 1 && headerData?.client === '430'\" class=\"col-8\">\r\n <lib-interation-table-client430></lib-interation-table-client430>\r\n </div>\r\n <div *ngIf=\"storeId === 1 && headerData?.client === '430'\" class=\"col-4\">\r\n <lib-passerby-table></lib-passerby-table>\r\n </div>\r\n </div> -->\r\n\r\n\r\n<div class=\"mt-4\" *ngIf=\"storeId === 1 && headerData?.client === '459'\">\r\n<lib-interation-table-client459></lib-interation-table-client459>\r\n</div>\r\n<div class=\"mt-2\" *ngIf=\"storeId > 1\">\r\n <lib-top-performing-zones></lib-top-performing-zones>\r\n</div>\r\n\r\n<div class=\"mt-2\" *ngIf=\"storeId === 1 && headerData?.client === '478'\">\r\n <lib-customer-journey-chart></lib-customer-journey-chart>\r\n</div>\r\n\r\n<div class=\"mt-4\" *ngIf=\"storeId > 1\">\r\n <lib-zone-summary-table></lib-zone-summary-table>\r\n</div>\r\n</div>\r\n\r\n<div *ngIf=\"showReportProcessingCard && !dataProcessedLoading\" class=\"row px-3\"> \r\n <div class=\"card dataprocessed pb-0 px-0 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"dataprocessedgif\" src=\"./assets/tango/Icons/data_analyse_gif.gif\" alt=\"\">\r\n <div class=\"dataprocessed-title\">Data being Processed</div>\r\n <div class=\"dataprocessed-sub\">Data for the selected date {{ yesterdayDate }}, is currently being processed and will be available shortly.</div>\r\n <div class=\"dataprocessed-sub\"> If you wish to view data for other dates, Remove {{ yesterdayDate }} from your selection or choose a different date range.</div> \r\n </div>\r\n\r\n</div>\r\n<div *ngIf=\"dataProcessedLoading\" class=\"card row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n</div> ","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime} from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'lib-zones-cards',\r\n templateUrl: './zones-cards.component.html',\r\n styleUrl: './zones-cards.component.scss'\r\n})\r\nexport class ZonesCardsComponent {\r\n zoneCardsData: any;\r\n headerData: any;\r\n zoneCardsFootfall: number | undefined;\r\n private destroy$ = new Subject<void>();\r\n constructor(private Zonev2Service: Zonev2Service,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService, private router: Router, private ActivatedRoute: ActivatedRoute,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getZoneCards();\r\n})\r\n }\r\n ngOnDestroy(): void {\r\n\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n getZoneCards(): void {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n };\r\n\r\n this.Zonev2Service.getZoneCardsData(requestData).pipe(takeUntil(this.destroy$)).subscribe(\r\n (response: any) => {\r\n if (response?.status === 'success') {\r\n this.zoneCardsData = response.data.card;\r\n this.Zonev2Service.updateFootfall(response.data.card.footfall.count);\r\n \r\n } else {\r\n this.zoneCardsData = []\r\n }\r\n },\r\n (error) => {\r\n this.zoneCardsData = []\r\n console.error('Error fetching zone card data', error);\r\n }\r\n );\r\n }\r\n\r\n// redirectToHeatmap(zoneName: string): void {\r\n// if (zoneName) {\r\n// this.router.navigate([], {\r\n// relativeTo: this.ActivatedRoute,\r\n// queryParams: { zoneName } });\r\n// const heatmapElement = document.querySelector(`#heatmapscroll`);\r\n// console.log(\"heatmapElement\", heatmapElement)\r\n// if (heatmapElement) {\r\n \r\n// heatmapElement.scrollIntoView({ block: 'center', behavior: 'smooth' });\r\n// }\r\n// }\r\n// }\r\n\r\n}\r\n","<div class=\"col-md-12\">\r\n <div class=\"row d-flex justify-content-between align-items-stretch\">\r\n\r\n <!-- Total Store Footfall Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.footfall?.count ? zoneCardsData?.footfall?.count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--'}}</span>\r\n <span class=\"cardtext\">Total Store Footfall</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">{{zoneCardsData?.footfall?.zoneName ? zoneCardsData?.footfall?.zoneName?.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--'}}</div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Footfall <span class=\"subcount\">- {{zoneCardsData?.footfall?.zoneFootfallCount ? zoneCardsData?.footfall?.zoneFootfallCount : '--'}}</span></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Highest Impression Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.impression?.rate ? zoneCardsData?.impression?.rate + '%' : '--'}}</span>\r\n <span class=\"cardtext\">Highest Store impression</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">\r\n \r\n {{zoneCardsData?.impression?.zoneName ? zoneCardsData?.impression?.zoneName : '--'}}\r\n \r\n </div>\r\n <div class=\"cardtext\">Zone with <span class=\"subcount\">{{zoneCardsData?.impression?.zoneImpressionRate ? zoneCardsData?.impression?.zoneImpressionRate + '%' : '--'}}</span> <br> impression</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Total Bounced Rate Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.bounced?.rate ? zoneCardsData?.bounced?.rate + '%' : '--'}}</span>\r\n <span class=\"cardtext\">Top Zone Bounced Rate</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">\r\n \r\n {{zoneCardsData?.bounced?.zoneName ? zoneCardsData?.bounced?.zoneName : '--'}}\r\n \r\n </div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Bounced rate</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Engagers Rate Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.engagers?.rate ? zoneCardsData?.engagers?.rate + '%' : '--'}}</span>\r\n <span class=\"cardtext\">Top Engagers Zone Rate</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">\r\n \r\n {{zoneCardsData?.engagers?.zoneName ? zoneCardsData?.engagers?.zoneName : '--'}}\r\n \r\n </div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Engager Rate</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Average Dwell Time Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.avgDwellTime?.rate ? zoneCardsData?.avgDwellTime?.rate + ' Mins' : '--'}}</span>\r\n <span class=\"cardtext\">Average Top Zone Dwell Time</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">{{zoneCardsData?.avgDwellTime?.zoneName ? zoneCardsData?.avgDwellTime?.zoneName : '--'}}</div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Dwell Time</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n","import { AfterViewInit, Component, Input, ViewChild } from '@angular/core';\r\nimport { NgbCarousel, NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'lib-store-zoom-heatmap',\r\n templateUrl: './store-zoom-heatmap.component.html',\r\n styleUrl: './store-zoom-heatmap.component.scss'\r\n})\r\nexport class StoreZoomHeatmapComponent implements AfterViewInit {\r\n @ViewChild('carousel1', { static: true }) carousel1!: NgbCarousel;\r\n \r\n @Input() imageURL: [];\r\n overallStoreData: { ImageURLs: Array<{ URL: string, streamName: string }> } = { ImageURLs: [] };\r\n currentSlideIndex = 0;\r\n\r\n currentSlide = 0;\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n if (this.imageURL) {\r\n this.overallStoreData.ImageURLs = this.imageURL; \r\n \r\n \r\n }\r\n}\r\n\r\nngAfterViewInit(): void {\r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n prevElement?.setAttribute('style',\"display:none\")\r\n}\r\n\r\nonSlideChange\r\n(slideEvent: NgbSlideEvent) {\r\nconst\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n let nextElement = document.querySelector('.modal-dialog .carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n if(this.currentSlide === this.overallStoreData.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else{\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n}\r\n}\r\n","<div class=\"modal-body\">\r\n <ngb-carousel #carousel1=\"ngbCarousel\" [interval]=\"0\" (slide)=\"onSlideChange($event)\" [pauseOnHover]=\"true\" *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs;let i= index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container\">\r\n <img [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n ","import { ChangeDetectorRef, Component, ElementRef, NgZone, AfterViewInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { NgbCarousel, NgbModal, NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport dayjs from 'dayjs';\r\nimport * as am5 from '@amcharts/amcharts5';\r\nimport * as am5percent from '@amcharts/amcharts5/percent';\r\nimport * as am5themes_Animated from '@amcharts/amcharts5/themes/Animated';\r\nimport * as am5flow from \"@amcharts/amcharts5/flow\";\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\nimport { StoreZoomHeatmapComponent } from './store-zoom-heatmap/store-zoom-heatmap.component';\r\nimport { ActivatedRoute } from '@angular/router';\r\n@Component({\r\n selector: 'lib-store-heatmap',\r\n templateUrl: './store-heatmap.component.html',\r\n styleUrl: './store-heatmap.component.scss'\r\n})\r\nexport class StoreHeatmapComponent {\r\n @ViewChild('carousel', { static: true }) carousel!: NgbCarousel;\r\n private readonly destroy$ = new Subject();\r\n selectedTab: string = '';\r\n headerData: any;\r\n dayjs = dayjs;\r\n disableDay: boolean = false;\r\n disableWeek: boolean = false;\r\n disableMonth: boolean = false;\r\n type: string = 'daily';\r\n heatmapLoading: boolean = true;\r\n heatmapNoData: boolean = false;\r\n zoneName: string = '';\r\n selectedDate: string = '';\r\n overallStoreData: any = {};\r\n overallStoreconcentrationData: any = {}\r\n // zoneConcentrationData: any[] = [];\r\n availableZones: any[] = [];\r\n overallStoreConcentrationDates: any[] = [];\r\n periodzone: number = 1;\r\n customOption: boolean = false;\r\n searchInput: any = \"\";\r\n sortColumName: string = '';\r\n sortBy: number = 1;\r\n sortDirection: number = -1;\r\n genderAnalysis: any[] = [];\r\n ageAnalysis: any[] = [];\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n private genderroot!: am5.Root;\r\n private arcroot!: am5.Root;\r\n currentZone: any; // Declare as 'any' or use a specific type if known\r\n otherZone: any;\r\n arcDiagram: any;\r\n currentSlideIndex = 0;\r\n customArrow: boolean = false;\r\n trajectoryNoData: boolean = false;\r\n trajectoryLoading: boolean = true;\r\n trajectoryRateNoData: boolean = false;\r\n trajectoryRateLoading: boolean = true;\r\n cardcustomArrow: boolean = false;\r\n\r\n currentSlide = 0;\r\n @ViewChild('dateList', {read:ElementRef}) dateList!:ElementRef;\r\n @ViewChild('zoneNameList', {read:ElementRef}) zoneNameList!:ElementRef;\r\n\r\n constructor(private zone: NgZone, public modalService: NgbModal, private fb: FormBuilder, private Zonev2Service: Zonev2Service, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService, private elementRef: ElementRef,private route: ActivatedRoute) { \r\n \r\n }\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n let sDate = this.dayjs(this.headerData.date.startDate);\r\n let eDate = this.dayjs(this.headerData.date.endDate);\r\n this.customArrow = false;\r\n this.cardcustomArrow = false;\r\n this.type = 'daily';\r\n // if(eDate.diff(sDate,'day') < 6) {\r\n // this.disableWeek = true;\r\n // this.disableMonth = true;\r\n // // this.type = 'daily';\r\n // }\r\n // else if(eDate.diff(sDate,'day') < 27) {\r\n // this.disableMonth = true;\r\n // this.disableDay = false;\r\n // this.disableWeek = false;\r\n // // this.type = 'weekly';\r\n // }\r\n // else {\r\n // this.disableDay = false;\r\n // this.disableWeek = false;\r\n // this.disableMonth = false;\r\n // // this.type = 'monthly';\r\n // }\r\n\r\n this.route.queryParams.subscribe(params => {\r\n this.zoneName = params['zoneName'];\r\n if (this.zoneName) {\r\n this.changeTab(this.zoneName);\r\n\r\n }\r\n });\r\n \r\n this.getAvailableZoneNames();\r\n // this.getTrajectoryAnalysis();\r\n \r\n // this.getOverallStoreConcentrationData();\r\n // this.getOverallStoreHeatmapDates();\r\n })\r\n\r\n }\r\n ngOnDestroy(): void {\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n if (this.arcroot) {\r\n this.arcroot.dispose();\r\n }\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n\r\n }\r\n\r\n changeTab(tabName: string) {\r\n this.selectedTab = tabName;\r\n this.zoneName = tabName;\r\n this.getOverallStoreHeatmapDates();\r\n this.getTrajectoryAnalysis();\r\n this.getTrajectoryRateAnalysis();\r\n this.getAnalaysisSummary()\r\n this.changeDetector.detectChanges(); \r\n }\r\n getAvailableZoneNames(): void {\r\n // this.cardcustomArrow = false;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n this.cardDataLoading = true;\r\n this.overallStoreData = [];\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate, // Adjust based on your date selection mechanism\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n };\r\n\r\n this.Zonev2Service.getAvailableZoneNames(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.availableZones = response.data.availableZoneData;\r\n if (this.availableZones.length) {\r\n\r\n this.selectedTab = this.availableZones[0].zoneName;\r\n this.zoneName = this.selectedTab;\r\n // this.changeTab(this.selectedTab);\r\n }\r\n // this.zoneName = response.data.zoneConcentrationData[0].zoneName;\r\n // this.zoneName = this.availableZones.length ? this.availableZones[0].zoneName : '';\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\r\n this.getOverallStoreHeatmapDates();\r\n this.getTrajectoryAnalysis();\r\n this.getTrajectoryRateAnalysis();\r\n this.getAnalaysisSummary()\r\n \r\n\r\n\r\n\r\n } else {\r\n // this.zonesummaryLoading = false;\r\n // this.zonesummaryNoData = true;\r\n\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n\r\n this.availableZones = [];\r\n this.overallStoreConcentrationDates = [];\r\n this.overallStoreconcentrationData = [];\r\n this.cardNoData = true;\r\n this.cardDataLoading = false;\r\n // this.overallStoreData = []\r\n this.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.availableZones = [];\r\n this.zoneName = \"\"\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n getOverallStoreConcentrationData(): void {\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n // this.cardDataLoading = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n // storeId: [\"11-1176\"],\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type,\r\n zoneDate: this.selectedDate\r\n };\r\n this.Zonev2Service.getOverallStoreConcentrationData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.heatmapLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n // this.overallStoreData = response.data.overallStoreConcentrationDatas;\r\n this.overallStoreconcentrationData = response.data.overallStoreConcentrationDatas;\r\n this.heatmapNoData = false;\r\n setTimeout(() => {\r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n prevElement?.setAttribute('style','display:none');\r\n }, 200);\r\n\r\n \r\n } else {\r\n this.overallStoreconcentrationData = [];\r\n // this.zoneConcentrationData = []\r\n // this.availableZones = [];\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n \r\n // this.getAnalaysisSummary()\r\n },\r\n error => {\r\n this.overallStoreconcentrationData = []\r\n // this.zoneConcentrationData = []\r\n // this.availableZones = [];\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\n getOverallStoreHeatmapDates(): void {\r\n this.overallStoreConcentrationDates = []\r\n this.customArrow = false;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n // this.cardDataLoading = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type\r\n };\r\n\r\n this.Zonev2Service.getOverallStoreHeatmapDates(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n if(response && response.data){\r\n this.overallStoreConcentrationDates = response.data.overallStoreConcentrationDates;\r\n this.selectedDate = this.overallStoreConcentrationDates[0].zoneDate;\r\n // if(['weekly','monthly'].includes(this.type)) {\r\n // let lastDigit = this.overallStoreConcentrationDates[this.overallStoreConcentrationDates.length -1].zoneDate;\r\n // let lastSplit = lastDigit.split('-')[1];\r\n // lastSplit = lastSplit +' '+ this.dayjs().format('YYYY');\r\n // if(this.dayjs(lastSplit,'MMM DD YYYY').format('YYYY-MM-DD') > this.dayjs(this.headerData.date.endDate).format('YYYY-MM-DD'))\r\n // this.overallStoreConcentrationDates.splice(this.overallStoreConcentrationDates.length-1,1);\r\n // }\r\n if (response?.code === 200 && response?.status === \"success\" && response.data.overallStoreConcentrationDates.length) {\r\n if (this.type === 'daily') {\r\n if (response.data.overallStoreConcentrationDates.length > 7) {\r\n this.customArrow = true;\r\n }\r\n } else if (this.type === 'weekly') {\r\n if (response.data.overallStoreConcentrationDates.length > 5) {\r\n this.customArrow = true;\r\n }\r\n } else { \r\n }\r\n this.getOverallStoreConcentrationData();\r\n // this.heatmapLoading = false;\r\n // this.heatmapNoData = false;\r\n } else {\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n // this.cardNoData = true;\r\n // this.cardDataLoading = false;\r\n \r\n }\r\n \r\n }else{\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n },\r\n error => {\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\n onDateChange(date: string): void {\r\n if (this.selectedDate !== date) {\r\n this.selectedDate = date;\r\n this.getOverallStoreConcentrationData();\r\n }\r\n }\r\n\r\n selectPlan(selectedType: string): void {\r\n this.type = selectedType;\r\n this.getOverallStoreHeatmapDates();\r\n // this.getOverallStoreConcentrationData();\r\n }\r\n\r\n onZoneClick(zoneName: string): void {\r\n \r\n this.zoneName = zoneName;\r\n this.getOverallStoreHeatmapDates();\r\n \r\n }\r\n concentrationHeatmap(imageURL: string) {\r\n const modalRef = this.modalService.open(StoreZoomHeatmapComponent, {\r\n centered: true, size: 'xl'\r\n });\r\n modalRef.componentInstance.imageURL = imageURL;\r\n modalRef.result.then((result) => {\r\n\r\n });\r\n }\r\n genderchart() {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"genderchartdiv\");\r\n if (!chartDiv) {\r\n // console.error(\"Could not find HTML element with id `genderchartdiv`\");\r\n return;\r\n }\r\n\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n this.genderroot = am5.Root.new('genderchartdiv');\r\n\r\n const chart = this.genderroot.container.children.push(\r\n am5percent.PieChart.new(this.genderroot, {\r\n endAngle: 270,\r\n innerRadius: am5.percent(60)\r\n })\r\n );\r\n\r\n const series = chart.series.push(\r\n am5percent.PieSeries.new(this.genderroot, {\r\n valueField: 'value',\r\n categoryField: 'category',\r\n endAngle: 270,\r\n alignLabels: false\r\n })\r\n );\r\n\r\n series.states.create('hidden', {\r\n endAngle: -90\r\n });\r\n\r\n series.labels.template.setAll({\r\n textType: 'circular',\r\n visible: false,\r\n centerX: 0,\r\n centerY: 0\r\n });\r\n\r\n series.data.setAll(this.genderAnalysis);\r\n const legend = this.genderroot.container.children.push(\r\n am5.Legend.new(this.genderroot, {\r\n x: am5.percent(50),\r\n centerX: am5.percent(50),\r\n y: am5.percent(94),\r\n layout: this.genderroot.horizontalLayout,\r\n })\r\n );\r\n\r\n legend.labels.template.setAll({\r\n text: \"{category}: {value}%\",\r\n fill: am5.color(\"#464E5F\"),\r\n fontFamily: \"Inter\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n\r\n });\r\n\r\n legend.valueLabels.template.setAll({\r\n text: \"{value}%\",\r\n fontWeight: \"700\",\r\n fontFamily: \"Inter\",\r\n fontSize: \"14px\",\r\n fill: am5.color(\"#464E5F\"),\r\n });\r\n\r\n legend.data.setAll(series.dataItems);\r\n\r\n // Animation\r\n series.appear(1000, 100);\r\n }, 100);\r\n }\r\n getAnalaysisSummary(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = false;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n // storeId: [\"204\"],\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n };\r\n\r\n this.Zonev2Service.getAnalaysisSummary(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n if (response && response.data && response.data.zoneConcentrationData && response.data.zoneConcentrationData.length > 0) {\r\n this.overallStoreData = response.data.zoneConcentrationData[0]; // Get the first zone data\r\n this.ageAnalysis = this.overallStoreData.ageAnalysis || [];\r\n this.genderAnalysis = this.overallStoreData.genderAnalysis || [];\r\n setTimeout(() => {\r\n this.genderchart();\r\n }, 200);\r\n \r\n this.cardDataLoading = false;\r\n this.cardNoData = false;\r\n } else {\r\n // this.cardData = []\r\n this.overallStoreData = [];\r\n \r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n // this.cardData = []\r\n this.overallStoreData = [];\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n\r\n getAgeArray() {\r\n let data: any = [];\r\n this.ageAnalysis.forEach((item: any, index: any) => {\r\n if (index % 2 == 0) {\r\n data.push(index);\r\n }\r\n })\r\n\r\n return data;\r\n }\r\n getTrajectoryAnalysis(): void {\r\n this.trajectoryLoading = true;\r\n this.trajectoryNoData = false;\r\n // this.cardDataLoading = true;\r\n // this.cardNoData = true;\r\n\r\n if (!this.zoneName || this.zoneName.trim() === '') {\r\n if (this.availableZones && this.availableZones.length > 0) {\r\n this.zoneName = this.availableZones[0].zoneName;\r\n } else {\r\n this.trajectoryLoading = false;\r\n this.trajectoryNoData = true;\r\n return; \r\n }\r\n }\r\n \r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName\r\n // zoneName: \"Fresh\", // Fixed as per your current implementation\r\n };\r\n \r\n this.Zonev2Service.getTrajectoryAnalysis(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.trajectoryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n const data = response.data.trajectoryAnalysisData;\r\n const zoneList = data.zoneList;\r\n const diagramData: Array<{ from: string; to: string; value: number; fill: am5.Color }> = [];\r\n zoneList.forEach((zone: { from: any; to: any; value: any; }, index: number) => {\r\n diagramData.push({\r\n from: zone.from,\r\n to: zone.to,\r\n value: zone.value, // Use the value from the API response\r\n fill: this.getZoneColor(index) // Custom function to get a color for the zone\r\n });\r\n });\r\n this.trajectoryNoData = false;\r\n if (diagramData.length > 0) {\r\n \r\n setTimeout(() => {\r\n this.createArcDiagram(diagramData);\r\n }, 200);\r\n // this.trajectoryNoData = false;\r\n } else {\r\n // this.trajectoryNoData = true;\r\n }\r\n \r\n // this.cardNoData = false;\r\n } else {\r\n this.trajectoryNoData = true; \r\n // this.cardDataLoading = false;\r\n // this.cardNoData = true; // Set no data flag if response is unsuccessful\r\n }\r\n this.cardDataLoading = false; // Stop loading spinner after data is processed\r\n },\r\n error => {\r\n this.trajectoryLoading = false;\r\n this.cardDataLoading = false;\r\n this.cardNoData = true; // Set no data flag on error\r\n });\r\n }\r\n getTrajectoryRateAnalysis(): void {\r\n this.trajectoryRateLoading = true;\r\n this.trajectoryRateNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n };\r\n \r\n this.Zonev2Service.getTrajectoryRateAnalysis(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(\r\n (response: any) => {\r\n this.trajectoryRateLoading = false;\r\n \r\n if (response?.code === 200 && response?.status === \"success\") {\r\n const zoneData = response.data.zoneConcentrationData[0]?.trajectoryAnalysisRateData;\r\n \r\n this.currentZone = response.data.zoneConcentrationData[0]?.currentZone;\r\n this.otherZone = zoneData.otherZone;\r\n if (this.currentZone && this.otherZone) {\r\n // this.currentZone.impressionRate, this.otherZone.ageGenderRate, etc.\r\n } else {\r\n // this.trajectoryRateNoData = true;\r\n }\r\n \r\n this.trajectoryRateNoData = false; // Data exists\r\n } else {\r\n // response.data.zoneConcentrationData = []\r\n this.trajectoryRateNoData = true;\r\n }\r\n this.cardDataLoading = false;\r\n },\r\n (error) => {\r\n this.trajectoryRateLoading = false;\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n );\r\n }\r\n \r\n createArcDiagram(diagramData: { from: string; to: string; value: number; fill: am5.Color; }[]): void {\r\n setTimeout(() => {\r\n // Dispose previous diagram if it exists\r\n if (this.arcDiagram) {\r\n this.arcDiagram.dispose();\r\n }\r\n\r\n // Create root element\r\n const root = am5.Root.new(\"arcDiagramDiv\");\r\n root.container.setAll({\r\n width: am5.p100, // 100% width\r\n height: am5.percent(80) // Adjust the percentage to control the height\r\n });\r\n\r\n // Create series\r\n const series = root.container.children.push(am5flow.ArcDiagram.new(root, {\r\n sourceIdField: \"from\",\r\n targetIdField: \"to\",\r\n valueField: \"value\",\r\n orientation: \"horizontal\"\r\n }));\r\n\r\n // Configure labels\r\n series.nodes.labels.template.setAll({\r\n fontSize: \"16px\",\r\n paddingLeft: 20,\r\n paddingRight: 20,\r\n width: 160\r\n });\r\n \r\n // Animated bullets\r\n series.bullets.push((root, series, dataItem) => {\r\n const bullet = am5.Bullet.new(root, {\r\n locationY: Math.random(),\r\n sprite: am5.Circle.new(root, {\r\n radius: 2,\r\n fill: dataItem.get(\"source\").get(\"fill\")\r\n })\r\n });\r\n\r\n bullet.animate({\r\n key: \"locationY\",\r\n to: 1,\r\n from: 0,\r\n duration: Math.random() * 1000 + 2000,\r\n loops: Infinity\r\n });\r\n\r\n return bullet;\r\n });\r\n\r\n // Set data dynamically from the API response\r\n series.data.setAll(diagramData);\r\n\r\n // Make stuff animate on load\r\n series.appear(1000, 100);\r\n this.arcDiagram = series;\r\n },100);\r\n }\r\n getZoneColor(index: number): am5.Color {\r\n const colors = [am5.color(0x4285F4), am5.color(0xAA46BB), am5.color(0xFF7043), am5.color(0x8E24AA)];\r\n return colors[index % colors.length];\r\n }\r\n onSlideChange\r\n (slideEvent: NgbSlideEvent) {\r\n const\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n let nextElement = document.querySelector('.carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n else if(this.currentSlide === this.overallStoreconcentrationData?.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else {\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n }\r\n\r\n scrollLeft() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: -200,behavior:'smooth'});}\r\n scrollRight() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: 200,behavior:'smooth'});}\r\n\r\n zonescrollLeft() {\r\n this.zoneNameList.nativeElement.scrollBy({\r\n left: -150, // Adjust the scroll amount as needed\r\n behavior: 'smooth'\r\n });\r\n }\r\n \r\n zonescrollRight() {\r\n this.zoneNameList.nativeElement.scrollBy({\r\n left: 150, // Adjust the scroll amount as needed\r\n behavior: 'smooth'\r\n });\r\n }\r\n}","<div class=\"card\">\r\n <div class=\"card-header storecard\">\r\n <div class=\"zone-container position-relative mx-5\">\r\n <span *ngIf=\"!heatmapLoading && !heatmapNoData\" class=\"cursor-pointer arrow-left position-absolute\" (click)=\"zonescrollLeft()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <div class=\"zone-buttons-container d-flex justify-content-start align-items-center no-wrap-list ms-4 me-10\" #zoneNameList>\r\n <button id=\"heatmapscroll\" *ngFor=\"let zone of availableZones\" \r\n class=\"btn btn-color-gray-600 btn-active btn-active-secondary py-3\"\r\n [ngClass]=\"selectedTab === zone.zoneName ? 'activePlanBtnprimary' : 'inactivePlanBtn'\"\r\n (click)=\"changeTab(zone.zoneName)\">\r\n {{ zone.zoneName }}\r\n </button>\r\n </div>\r\n <span *ngIf=\"!heatmapLoading && !heatmapNoData\" class=\"cursor-pointer arrow-right position-absolute\" (click)=\"zonescrollRight()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-12\">\r\n <div class=\"row p-3\">\r\n <div class=\"col-lg-6 right-border my-1\">\r\n <div class=\"card-header border-0 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Store Heatmap</span>\r\n </h3>\r\n \r\n <div class=\"card-toolbar text-nowrap me-4\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n \r\n <!-- <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'daily',\r\n 'inactivePlanBtn': type !== 'daily',\r\n 'disabled': disableDay\r\n }\" (click)=\"selectPlan('daily')\" [attr.disabled]=\"disableDay ? true : null\">\r\n Day\r\n </button>\r\n \r\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'weekly',\r\n 'inactivePlanBtn': type !== 'weekly',\r\n 'disabled': disableWeek\r\n }\" (click)=\"selectPlan('weekly')\" [attr.disabled]=\"disableWeek ? true : null\">\r\n Week\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'monthly',\r\n 'inactivePlanBtn': type !== 'monthly',\r\n 'disabled': disableMonth\r\n }\" (click)=\"selectPlan('monthly')\" [attr.disabled]=\"disableMonth ? true : null\">\r\n Month\r\n </button>\r\n </div> -->\r\n \r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div >\r\n <div class=\"d-flex\">\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollLeft()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <ul *ngIf=\"periodzone == 1 && !customOption\" #dateList\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center m-2\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon active\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <ul *ngIf=\"(periodzone == 2 || periodzone == 3) && !customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <ul *ngIf=\"customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollRight()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </div>\r\n \r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <ngb-carousel #carousel=\"ngbCarousel\" [interval]=\"0\" (slide)=\"onSlideChange($event)\" [pauseOnHover]=\"true\" [id]=\"selectedDate\">\r\n <ng-container *ngFor=\"let image of overallStoreconcentrationData?.ImageURLs;let i=index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container cursor-pointer\">\r\n <img (click)=\"concentrationHeatmap(overallStoreconcentrationData?.ImageURLs)\"\r\n [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n <a [href]=\"image.URL\" download><svg id=\"download-icon\" width=\"44\" height=\"44\"\r\n viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\"\r\n stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_3822_19479\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_3822_19479\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></a>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n </div>\r\n \r\n <ng-container *ngIf=\"heatmapLoading\">\r\n <div class=\"row loader concheatmap d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heatmapNoData && !heatmapLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body concheatmap d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Overall Store Concentration\r\n Heatmap</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"card-header border-0 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ selectedTab }} Analysis</span>\r\n </h3>\r\n </div>\r\n <div class=\"body me-4 mb-4\">\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <!-- <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> -->\r\n <div class=\"m-4\" *ngIf=\"!cardDataLoading\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Footfall</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title ms-12\">{{ overallStoreData?.footfall?.zoneCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.footfall?.storeRate || '--' }}%</span> of store footfall\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Impression Rate</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">{{ overallStoreData?.impression?.zoneRate || '--' }}%</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.impression?.storeRate || '--' }}%</span> Store Impression\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Bounced Footfall</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title me-6\">{{ overallStoreData?.bounced?.zoneCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.bounced?.storeRate || '--' }}%</span> of total bounced\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Engagers</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title ms-10\">{{ overallStoreData?.engagers?.zoneCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.engagers?.storeRate || '--' }}%</span> of total engagers\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Avg. Zone Dwell Time</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title me-12\">{{ overallStoreData?.avgDwellTime?.zoneAvgDwellTime || '--' }} mins</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n Avg. dwell time <span class=\"textprimary mx-1\">{{ overallStoreData?.avgDwellTime?.storeAvgDwellTime || '--' }} mins</span>\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row\">\r\n <!-- <div class=\"col-5\">\r\n <div class=\"headtext p-3\">Age & Gender Analysis</div>\r\n <div class=\"card-body p-0 mb-2\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"genderchartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-7\">\r\n <div class=\"mt-14\">\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div class=\"card-body p-0 mt-20\">\r\n <div>\r\n \r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let i of getAgeArray()\">\r\n <td>\r\n <div class=\"overalltext\">{{ ageAnalysis[i]?.category || '' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ ageAnalysis[i]?.value?.toFixed(0) || '--' }}%</div>\r\n </td>\r\n <td *ngIf=\"ageAnalysis[i + 1]?.category\">\r\n <div class=\"overalltext\">{{ ageAnalysis[i + 1]?.category || '' }}</div>\r\n </td>\r\n <td *ngIf=\"ageAnalysis[i + 1]?.category\">\r\n <div class=\"table-title\">{{ ageAnalysis[i + 1]?.value?.toFixed(0) || '--' }}%</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>-->\r\n </div> \r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"selectedTab !== 'Overall Store'\" class=\"row p-8\">\r\n <div class=\"col-12 trajectorycard\">\r\n <div class=\"card-header border-0 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ selectedTab }} Trajectory Analysis</span>\r\n </h3> \r\n </div>\r\n <div class=\"card-body\">\r\n \r\n \r\n\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <ng-container *ngIf=\"trajectoryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trajectoryNoData && !trajectoryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Trajectory Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!trajectoryLoading && !trajectoryNoData\" class=\"arcdiagram\">\r\n <div id=\"arcDiagramDiv\"></div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-6 p-12\">\r\n <ng-container *ngIf=\"trajectoryRateLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trajectoryRateNoData && !trajectoryRateLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Trajectory Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!trajectoryRateLoading && !trajectoryRateNoData\" class=\"row ps-15 mt-20\">\r\n \r\n <div class=\"col px-2\">\r\n <div class=\"card card-border p-6\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headcount\">\r\n {{ currentZone?.impressionRate || '--' }}% \r\n <span class=\"overalltext\">Impression Rate</span>\r\n </span>\r\n </h3>\r\n <span class=\"overalltext my-1\">\r\n {{ selectedTab }}\r\n <svg width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3.33594 8.57096H12.6693M12.6693 8.57096L8.0026 3.9043M12.6693 8.57096L8.0026 13.2376\" \r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"overalltext\">Other Zones</span>\r\n </span>\r\n <div class=\"textprimary my-4\">\r\n {{ currentZone?.ageGenderRate || '--' }}% \r\n <span class=\"ratetext\">{{ currentZone?.gender || '--' }} Rate</span>\r\n <span class=\"badgegrey ms-1\">{{ currentZone?.ageGroup || '--' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"col px-2\">\r\n <div class=\"card card-border p-6\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headcount\">\r\n {{ otherZone?.impressionRate || '--' }}% \r\n <span class=\"overalltext\">Impression Rate</span>\r\n </span>\r\n </h3>\r\n <span class=\"overalltext my-1\">\r\n Other Zones\r\n <svg width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3.33594 8.57096H12.6693M12.6693 8.57096L8.0026 3.9043M12.6693 8.57096L8.0026 13.2376\" \r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"overalltext\">{{ selectedTab }}</span>\r\n </span>\r\n <div class=\"textprimary my-4\">\r\n {{ otherZone?.ageGenderRate || '--' }}% \r\n <span class=\"ratetext\">{{ otherZone?.gender || '--' }} Rate</span>\r\n <span class=\"badgegrey ms-1\">{{ otherZone?.ageGroup || '--' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\">\r\n <div ngbAccordion>\r\n <div ngbAccordionItem [collapsed]=\"false\">\r\n <h2 ngbAccordionHeader>\r\n <button class=\"headtext\" ngbAccordionButton>Image Directory<div class=\"divider\"></div></button>\r\n </h2>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-image-directory></lib-image-directory>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container> -->\r\n \r\n</div>\r\n\r\n\r\n\r\n","import { Component, EventEmitter, HostListener, Input, Output, Provider, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nconst SELECT_CONTROL_VALUE_ACCESSOR: Provider = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ReactiveSelectComponent),\r\n multi: true,\r\n};\r\n\r\n@Component({\r\n selector: 'lib-reactive-select',\r\n templateUrl: './reactive-select.component.html',\r\n styleUrl: './reactive-select.component.scss',\r\n providers: [SELECT_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class ReactiveSelectComponent implements ControlValueAccessor {\r\n\r\n private onTouched: Function;\r\n private onChanged: Function;\r\n protected isDisabled: boolean;\r\n @Input() idField: string\r\n @Input() nameField: string\r\n @Input() label: string\r\n @Input() data: any\r\n protected isOpened: boolean = false\r\n protected selected: Record<string, any> | null = null\r\n protected selectedId: string | number\r\n\r\n writeValue(val: string | number): void {\r\n this.selectedId = val\r\n this.selected = this.data.filter((item:Record<string, any>)=> item?.[this.idField] === val)[0] \r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChanged = fn\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled\r\n\r\n }\r\n\r\n onSelect(item: Record<string, any>) {\r\n this.onTouched()\r\n this.selected = item\r\n this.selectedId = item?.[this.idField] \r\n this.isOpened = false\r\n this.onChanged(this.selectedId)\r\n this.onSelectionChange(item); \r\n }\r\n\r\n \r\n onSelectionChange(item: Record<string, any>) {\r\n this.valueChange.emit(item?.[this.idField]);\r\n }\r\n @HostListener('document:click', ['$event'])\r\n onClick(event: MouseEvent) {\r\n if (!this.isDisabled) {\r\n const targetElement = event.target as HTMLElement;\r\n if (!this.isComponentClicked(targetElement)) {\r\n this.isOpened = false;\r\n }\r\n }\r\n }\r\n\r\n isComponentClicked(targetElement: HTMLElement): boolean {\r\n const parentElement = targetElement.parentElement;\r\n if (parentElement) {\r\n const clickedOnComponent = parentElement.classList.contains('custom-select');\r\n if (clickedOnComponent) {\r\n return true;\r\n } else {\r\n return this.isComponentClicked(parentElement);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n\r\n}\r\n","<div class=\"custom-select w-200px\">\r\n <div class=\"form-group\">\r\n <label *ngIf=\"label\" class=\"form-label w-100\">{{label}}</label>\r\n <div class=\"position-relative\">\r\n <div (click)=\"isOpened = !isOpened;\" [ngClass]=\"isDisabled ? 'disable' : ''\" class=\"form-select dropselect w-100\">\r\n {{selected?.[nameField]}}</div>\r\n <div *ngIf=\"isOpened\" class=\"card py-2 w-100 position-absolute end-0 z-1 drop-list\">\r\n <ul class=\"list-unstyled mb-2 w-100\">\r\n <li *ngFor=\"let item of data\" (click)=\"onSelect(item)\"\r\n [ngClass]=\"item?.[idField] === selected?.[idField] ? 'active' : ''\"\r\n class=\"text px-5 items cursor-pointer py-4 w-100\">\r\n {{item?.[nameField]}}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component, OnInit, OnDestroy, ElementRef, NgZone, ChangeDetectorRef } from '@angular/core';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5flow from \"@amcharts/amcharts5/flow\";\r\nimport am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { Subject, debounceTime, distinctUntilChanged, filter, takeUntil } from \"rxjs\";\r\n\r\n@Component({\r\n selector: 'lib-customer-journey',\r\n templateUrl: './customer-journey.component.html',\r\n styleUrl: './customer-journey.component.scss'\r\n})\r\nexport class CustomerJourneyComponent implements OnDestroy,OnInit {\r\n private root: am5.Root;\r\n private destroy$ = new Subject<void>();\r\n form: FormGroup;\r\n selectControl: FormControl;\r\n datasets: Array<{ value: string, label: string }> = [\r\n { value: 'top', label: 'Highest Visited Path' },\r\n { value: 'bottom', label: 'Lowest Visited Path' }\r\n ];\r\n\r\n isExport: boolean = false;\r\n itemsPerPage = 10\r\n currentPage = 1\r\n totalItems = 0\r\n paginationSizes = [10, 20, 30]\r\n pageSize = 10\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n searchInput: any =\"\";\r\n customerJourneyData: any[] = [];\r\n searchDisabled: boolean = false;\r\n invoiceList: any[] = [];\r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n customerjourneyLoading: boolean = true;\r\n customerjourneyNoData: boolean = false;\r\n headerData: any;\r\n sortDirection: any = '';\r\n showAverage: boolean = true;\r\n totalfootfallCount: number | null = null;;\r\n\r\n constructor(private zone: NgZone, private elRef: ElementRef, private fb: FormBuilder, private Zonev2Service: Zonev2Service,\r\n private changeDetector: ChangeDetectorRef,\r\n public gs: GlobalStateService,public modalService: NgbModal,\r\n private router: Router,private route: ActivatedRoute,\r\n private toast: ToastService) {}\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n \r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.initializeChart();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.selectControl = new FormControl('top');\r\n this.form = this.fb.group({\r\n selectControl: this.selectControl\r\n });\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n // this.getCustomerJourney()\r\n this.getCustomerJourneyTable();\r\n // this.initializeChart();\r\n})\r\nthis.Zonev2Service.footfall$.subscribe((count) => {\r\n this.totalfootfallCount = count;\r\n this.getCustomerJourney();\r\n});\r\n \r\n }\r\n getCustomerJourney(): void {\r\n this.customerjourneyLoading = true;\r\n this.customerjourneyNoData = false;\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores?.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n search: this.searchInput,\r\n sortType: this.selectControl.value,\r\n limit: this.pageSize,\r\n offset: this.currentPage - 1,\r\n export: false,\r\n };\r\n\r\n this.Zonev2Service.getCustomerJourney(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n // this.customerjourneyLoading = true;\r\n if (response && response.status === 'success') {\r\n this.customerjourneyLoading = false;\r\n this.customerjourneyNoData = false;\r\n this.initializeChart(); // Initialize chart when data is available\r\n this.updateChart(response.data.customerJourneyData, this.totalfootfallCount);\r\n \r\n } else {\r\n this.customerjourneyLoading = false;\r\n this.customerjourneyNoData = true;\r\n }\r\n }, (error:any) => {\r\n this.customerjourneyLoading = false;\r\n this.customerjourneyNoData = true;\r\n // console.error('Error fetching customer journey data:', error);\r\n });\r\n}\r\ninitializeChart(): void {\r\n const chartDiv = document.getElementById('customerjourney');\r\n if (!chartDiv) {\r\n // console.error('Could not find HTML element with id customerjourney');\r\n return;\r\n }\r\n\r\n if (!this.root) { // Check if chart is already initialized\r\n try {\r\n this.root = am5.Root.new('customerjourney');\r\n this.root.setThemes([am5themes_Animated.new(this.root)]);\r\n\r\n const series = this.root.container.children.push(am5flow.Sankey.new(this.root, {\r\n sourceIdField: \"from\",\r\n targetIdField: \"to\",\r\n valueField: \"value\",\r\n paddingRight: 100\r\n }));\r\n } catch (error) {\r\n // console.error('Error initializing chart:', error);\r\n }\r\n }\r\n}\r\n\r\nupdateChart(data: any[], footfallCount: number | null): void {\r\n let filteredData = this.removeCircularLinks(data);\r\n // let firstZone = filteredData.filter((item:any) => {\r\n // let findExists = filteredData.find((ele:any) => ele.to == item.from);\r\n // if(!findExists) {\r\n // return item;\r\n // }\r\n // });\r\n // let lastZone = filteredData.filter((item:any) => {\r\n // let findExists = filteredData.find((ele:any) => ele.from == item.to);\r\n // if(!findExists) {\r\n // return item;\r\n // }\r\n // });\r\n \r\n // firstZone = firstZone.map((item) => {\r\n // return {from:'Entry ('+this.totalfootfallCount+')',\r\n // to:item.from,\r\n // value:item.value,}\r\n // })\r\n // lastZone = lastZone.map((item) => {\r\n // return {from:item.to,to:'Exit ('+this.totalfootfallCount+')',value:item.value,}\r\n // })\r\n\r\n // filteredData = [...firstZone,...filteredData,...lastZone];\r\n\r\n if (this.root) {\r\n const series = this.root.container.children.getIndex(0) as am5flow.Sankey;\r\n if (series) {\r\n // Check if data is available, otherwise use fallback data\r\n if (filteredData.length > 0) {\r\n series.data.setAll(filteredData); // Update with API data\r\n } else {\r\n \r\n // Predefined sample data as fallback\r\n series.data.setAll([filteredData]);\r\n }\r\n\r\n this.changeDetector.detectChanges(); // Trigger Angular change detection\r\n } else {\r\n // console.error('Series not found for chart');\r\n }\r\n }\r\n}\r\n\r\nremoveCircularLinks(data: any[]): any[] {\r\n const graph = new Map();\r\n const result = [];\r\n\r\n function hasCycle(from:any, to:any, visited:any) {\r\n if (from === to) return true;\r\n if (visited.has(from)) return false;\r\n\r\n visited.add(from);\r\n\r\n if (graph.has(from)) {\r\n for (const neighbor of graph.get(from)) {\r\n if (hasCycle(neighbor, to, visited)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n visited.delete(from);\r\n return false;\r\n }\r\n\r\n for (const { from, to, value } of data) {\r\n if (hasCycle(to, from, new Set())) {\r\n continue;\r\n }\r\n\r\n result.push({ from, to, value });\r\n\r\n if (!graph.has(from)) {\r\n graph.set(from, []);\r\n }\r\n graph.get(from).push(to);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n \r\n setColorStep(series: any, step: number): void {\r\n series.nodes.set(\"colors\", am5.ColorSet.new(this.root, {\r\n step: step\r\n }));\r\n }\r\n \r\n onValueChange(event: any): void {\r\n this.getCustomerJourney();\r\n }\r\n\r\n getCustomerJourneyTable(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.pageSize,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.Zonev2Service.getCustomerJourneyTable(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n // this.customerJourneyData = response.data;\r\n this.customerJourneyData = response.data.customerJourneyTableData;\r\n this.totalItems = response.data.totalCount\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.customerJourneyData = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.customerJourneyData = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n onExport(): void {\r\n this.currentPage = 1;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: 10000,\r\n offset: 0,\r\n export: true\r\n };\r\n\r\n this.Zonev2Service.getCustomerJourneyTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n // console.log('API Response:', res); \r\n this.Zonev2Service.saveAsExcelFile(res, 'CustomerJourney_list');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n }\r\n searchField(): void {\r\n this.getCustomerJourneyTable();\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getCustomerJourneyTable();\r\n }\r\n onPageSizeChange(pageSize: any) {\r\n this.currentPage = 1;\r\n this.pageSize = parseInt(pageSize)\r\n this.getCustomerJourneyTable()\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.currentPage = parseInt(pageOffset)\r\n this.getCustomerJourneyTable()\r\n }\r\n toggleView(): void {\r\n this.showAverage =!this.showAverage;\r\n if (this.showAverage === true) {\r\n // this.getCustomerJourney()\r\n // this.initializeChart();\r\n }\r\n }\r\n goToZone(){\r\n const stores = this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId);\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n datavalue.store = stores.length === 1 ? stores.toString() : datavalue.stores[0].storeId;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.router.navigate([\"/manage/stores/zones\"], {\r\n queryParams: { storeId: datavalue.store ? datavalue.store : datavalue.stores[0].storeId},\r\n });\r\n \r\n }\r\n\r\n\r\n}","<div class=\"card\">\r\n <div [hidden]=\"!showAverage\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\"><span class=\"card-label mb-2\">Customer Journey</span></h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1 justify-content-between\">\r\n <button (click)=\"toggleView()\" type=\"button\" class=\"btn btn-outline align-items-end\">\r\n View All Zones</button>\r\n <form class=\"mx-4\" [formGroup]=\"form\">\r\n <lib-reactive-select\r\n [formControl]=\"selectControl\" \r\n [idField]=\"'value'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"datasets\"\r\n class=\"w-100\"\r\n (valueChange)=\"onValueChange($event)\">\r\n </lib-reactive-select>\r\n </form>\r\n\r\n <button (click)=\"goToZone()\"\r\n class=\"btn bg-light-primary btn-light-primary btn-active-light-primary\"><span\r\n ><svg \r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M9.99984 4.16602V15.8327M4.1665 9.99935H15.8332\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg></span> Add New Zone \r\n </button>\r\n \r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body\">\r\n <ng-container *ngIf=\"customerjourneyLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"customerjourneyNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Chart</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div [hidden]=\"customerjourneyLoading || customerjourneyNoData\" id=\"customerjourney\"></div>\r\n </div>\r\n</div>\r\n \r\n<div [hidden]=\"showAverage\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Customer Journey</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n \r\n <div class=\"d-flex align-items-center position-relative my-1 justify-content-between\">\r\n <button (click)=\"toggleView()\" type=\"button\" class=\"btn btn-outline align-items-end mx-4\">\r\n View Average Customer Journey</button>\r\n <span class=\"me-4\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute mt-3 ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\">\r\n </rect>\r\n <path\r\n 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\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 me-4 footfallsearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n /></span>\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!customerJourneyData.length\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('noOfStores')\">\r\n No. of stores\r\n <svg [ngClass]=\"sortColumName === 'noOfStores' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'noOfStores' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneFF')\">\r\n Zone FF\r\n <svg [ngClass]=\"sortColumName === 'zoneFF' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneFF' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('impressions')\">\r\n Impressions\r\n <svg [ngClass]=\"sortColumName === 'impressions' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'impressions' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('AvgDwellTime')\">\r\n Avg Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'AvgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'AvgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of customerJourneyData\">\r\n <td><div class=\"table-title\">{{ store.zoneName || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.noOfStores || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.zoneFF || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.impressions || '--' }}%</div></td>\r\n <td><div class=\"table-title\">{{ store.AvgDwellTime || '--' }} Mins</div></td>\r\n </tr> \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n \r\n </div>\r\n</div>\r\n</div>","import { ChangeDetectorRef, Component, ElementRef, NgZone } from '@angular/core';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { FormBuilder } from '@angular/forms';\r\n\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n@Component({\r\n selector: 'lib-top-performing',\r\n templateUrl: './top-performing.component.html',\r\n styleUrl: './top-performing.component.scss'\r\n})\r\n\r\nexport class TopPerformingComponent {\r\n topPerformingStores: any[] = []; \r\n topPerformingZones: any[] = []; \r\n searchInput: string = '';\r\n searchDisabled: boolean = false;\r\n analysisLoading: boolean = true;\r\n analysisNoData: boolean = false;\r\n topperformingstoresLoading: boolean = true;\r\n topperformingstoresNodata: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n type: string = 'top-zones';\r\n storetype: string = 'top-Stores';\r\n\r\n // Default selected type\r\n disableTopZones: boolean = false; // Control whether the Top 5 Zones button is disabled\r\n disableBottomZones: boolean = false;\r\n disableTopStores: boolean = false; // Control whether the Top 5 Zones button is disabled\r\n disableBottomStores: boolean = false;\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n pageSize = 5\r\n currentPage = 1\r\n\r\n // invoiceNoData: boolean = true;\r\n // invoiceLoading: boolean = false;\r\n // isExport: boolean = false;\r\n // clientId: string = '';\r\n // userType:any = '';\r\n private readonly destroy$ = new Subject();\r\n sortStoreColumName: any = '';\r\n constructor(public modalService: NgbModal, private fb: FormBuilder, private Zonev2Service: Zonev2Service, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService,private elementRef: ElementRef,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getTopPerformingZones('top');\r\n this.getTopPerformingStores('top')\r\n})\r\n }\r\n\r\n ngOnDestroy(): void {\r\n \r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n\r\n getTopPerformingZones(sortType: string): void {\r\n this.analysisLoading = true;\r\n this.analysisNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n sortType: sortType, // top or bottom\r\n limit: this.pageSize,\r\n offset: this.currentPage -1,\r\n };\r\n \r\n this.Zonev2Service.getTopPerformingZones(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.analysisLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if(response?.data?.topPerformingZones?.length === 0){\r\n this.analysisLoading = false;\r\n this.analysisNoData = true;\r\n }else{\r\n this.topPerformingZones = response?.data?.topPerformingZones;\r\n this.analysisLoading = false;\r\n this.analysisNoData = false;\r\n }\r\n } else {\r\n this.analysisLoading = false;\r\n this.analysisNoData = true;\r\n this.topPerformingZones = []\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.topPerformingZones = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n getTopPerformingStores(sortType: string): void {\r\n this.topperformingstoresLoading = true;\r\n this.topperformingstoresNodata = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n sortType: sortType, // top or bottom\r\n limit: this.pageSize,\r\n offset: this.currentPage -1, \r\n };\r\n\r\n this.Zonev2Service.getTopPerformingStores(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.topperformingstoresLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if(response?.data?.topPerformingStores?.length === 0){\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = true;\r\n }else{\r\n this.topPerformingStores = response?.data?.topPerformingStores;\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = false;\r\n }\r\n\r\n \r\n } else {\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = true;\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n\r\n sortData(column: string,): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getTopPerformingZones(this.type);\r\n }\r\n\r\n \r\n sortDataStore(column: string,): void {\r\n if (this.sortStoreColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortStoreColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getTopPerformingStores(this.storetype);\r\n }\r\n \r\n selectPlanzone(type: string): void {\r\n this.type = type;\r\n if (type === 'top-zones') {\r\n this.getTopPerformingZones('top'); // Fetch top zones\r\n } else if (type === 'bottom-zones') {\r\n this.getTopPerformingZones('bottom'); // Fetch bottom zones\r\n }\r\n }\r\n selectPlanStore(storetype: string): void {\r\n this.storetype = storetype;\r\n if (storetype === 'top-Stores') {\r\n this.getTopPerformingStores('top'); // Fetch top zones\r\n } else if (storetype === 'bottom-Stores') {\r\n this.getTopPerformingStores('bottom'); // Fetch bottom zones\r\n }\r\n }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n\r\n \r\n\r\n // selectPlan(planType: string): void {\r\n // if (planType === 'top-zones') {\r\n // this.type = 'top-zones'; // Select Top 5 Zones\r\n // } else if (planType === 'bottom-zones') {\r\n // this.type = 'bottom-zones'; // Select Bottom 5 Zones\r\n // }\r\n // }\r\n\r\n \r\n}","<div class=\"row \">\r\n <div class=\"d-flex justify-content-between p-3\">\r\n <div class=\"col-lg-6 card\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Zones <span\r\n ngbTooltip=\"Top performing zones across the stores selected\" placement=\"top\"\r\n triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n <span class=\"subratetext mt-2\">From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'top-zones',\r\n 'inactivePlanBtn': type !== 'top-zones',\r\n 'disabled': disableTopZones\r\n }\" \r\n (click)=\"selectPlanzone('top-zones')\" \r\n [attr.disabled]=\"disableTopZones ? true : null\">\r\n Top 5 Zones\r\n </button>\r\n \r\n <button class=\"btn btn-outline px-6 py-3\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'bottom-zones',\r\n 'inactivePlanBtn': type !== 'bottom-zones',\r\n 'disabled': disableBottomZones\r\n }\" \r\n (click)=\"selectPlanzone('bottom-zones')\" \r\n [attr.disabled]=\"disableBottomZones ? true : null\">\r\n Bottom 5 Zones\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-container mx-4\">\r\n <table *ngIf=\"!analysisLoading && !analysisNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Zone Name</th>\r\n <th>Footfall</th>\r\n <th>Bounced</th>\r\n <th>Engagers</th>\r\n <th>Impressions</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive topstores\">\r\n <tr *ngFor=\"let zone of topPerformingZones\">\r\n <td>\r\n <div class=\"table-title\">{{ zone?.zoneName ? zone.zoneName : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.footfallCount ? zone.footfallCount : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.bouncedCount ? zone.bouncedCount : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.engagersCount ? zone.engagersCount : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.impressionRate ? zone.impressionRate + '%' : '--' }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"analysisLoading\">\r\n <div class=\"row loader Analysiscard d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"analysisNoData && !analysisLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 Analysiscard\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Zones</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n \r\n </div>\r\n <div class=\"col-lg-6 card mx-2\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Stores <span\r\n ngbTooltip=\"Top performing stores and their concentration % along with avg dwell time\" placement=\"top\"\r\n triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n <span class=\"subratetext mt-2\">From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': storetype === 'top-Stores',\r\n 'inactivePlanBtn': storetype !== 'top-Stores',\r\n 'disabled': disableTopStores\r\n }\" \r\n (click)=\"selectPlanStore('top-Stores')\" \r\n [attr.disabled]=\"disableTopStores ? true : null\">\r\n Top 5 Stores\r\n </button>\r\n \r\n <button class=\"btn btn-outline px-6 py-3\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': storetype === 'bottom-Stores',\r\n 'inactivePlanBtn': storetype !== 'bottom-Stores',\r\n 'disabled': disableBottomStores\r\n }\" \r\n (click)=\"selectPlanStore('bottom-Stores')\" \r\n [attr.disabled]=\"disableBottomStores ? true : null\">\r\n Bottom 5 Stores\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-container mx-4\">\r\n <table *ngIf=\"!topperformingstoresLoading && !topperformingstoresNodata\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Store Info</th>\r\n <th>Zone Name</th>\r\n <th>Zone Footfall</th>\r\n <th>Impressions</th>\r\n <th>Avg Dwell Time</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive topstores\">\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td>\r\n <div class=\"table-title-primary cursor-pointer\" (click)=\"storeView(store.storeId)\">{{ store.storeName || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneName || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneFootfall || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.impressionRate || '--' }}%</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.avgDwellTime || '--' }} mins</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"topperformingstoresLoading\">\r\n <div class=\"row loader Analysiscard d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"topperformingstoresNodata && !topperformingstoresLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 Analysiscard\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Stores</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { Subject, debounceTime, distinctUntilChanged, filter, takeUntil } from \"rxjs\";\r\nimport { FormControl } from '@angular/forms';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n@Component({\r\n selector: 'lib-summary-table',\r\n templateUrl: './summary-table.component.html',\r\n styleUrl: './summary-table.component.scss'\r\n})\r\n\r\nexport class SummaryTableComponent {\r\n isExport: boolean = false;\r\n itemsPerPage = 10\r\n currentPage = 1\r\n totalItems = 0\r\n paginationSizes:any[] = [];\r\n pageSize = 10\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n searchInput: any =\"\";\r\n topPerformingStores: any[] = [];\r\n searchDisabled: boolean = false;\r\n invoiceList: any[] = [];\r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n headerData: any;\r\n private destroy$ = new Subject<void>();\r\n\r\n // loading: boolean = true;\r\n // noData: boolean = false;\r\n\r\n // user: any;\r\n // searchInput = new FormControl(\"\");\r\n // receivedData: string = \"stores\";\r\n // columns: any[];\r\n // sortColumName: string;\r\n // sortDirection: number;\r\n\r\n constructor(\r\n private Zonev2Service: Zonev2Service,\r\n private changeDetector: ChangeDetectorRef,\r\n public gs: GlobalStateService,public modalService: NgbModal,\r\n private router: Router,private route: ActivatedRoute,\r\n private toast: ToastService\r\n ) {}\r\n\r\n \r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getSummayTable();\r\n})\r\n \r\n }\r\n\r\n \r\n getSummayTable(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.Zonev2Service.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if(response?.data?.zoneSummaryData?.length === 0){\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = false;\r\n }else{\r\n this.topPerformingStores = response?.data?.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n }\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n getSummayTable1(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.Zonev2Service.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response?.data?.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n // this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n onExport(): void {\r\n this.currentPage = 0;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: 10000,\r\n offset: this.currentPage,\r\n export: true\r\n };\r\n\r\n this.Zonev2Service.getSummaryTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.Zonev2Service.saveAsExcelFile(res, 'ZoneSummaryTable_list');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n }\r\n searchField(): void {\r\n this.headerData.search = this.searchInput;\r\n this.headerData.export = false;\r\n this.currentPage = 1;\r\n this.pageSize=10;\r\n this.getSummayTable();\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable1();\r\n }\r\n onPageSizeChange(pageSize: any) {\r\n this.currentPage = 1;\r\n this.itemsPerPage = pageSize;\r\n this.pageSize = pageSize;\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable1()\r\n\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.currentPage = pageOffset\r\n this.getSummayTable()\r\n }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n setPaginationSizes() {\r\n if (this.totalItems > 10) {\r\n this.paginationSizes = [10, 20, 30];\r\n } else {\r\n this.paginationSizes = [this.totalItems]; // Just one option if less than 10\r\n }\r\n this.pageSize = this.paginationSizes[0];\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Zone Summary Table</span>\r\n <span class=\"text-sub mb-2\"> From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\">\r\n </rect>\r\n <path\r\n 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\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 me-4 footfallsearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <!-- <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!topPerformingStores.length\">\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button> -->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">\r\n Store Name\r\n <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n \r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">\r\n Store ID\r\n <svg [ngClass]=\"sortColumName === 'storeId' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('date')\">\r\n Date\r\n <svg [ngClass]=\"sortColumName === 'date' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'date' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n \r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Zone Conc.Rate\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Avg Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Zone FF\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('bouncedCount')\">\r\n Zone Bounced\r\n <svg [ngClass]=\"sortColumName === 'bouncedCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'bouncedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('engagersCount')\">\r\n Zone Engagers\r\n <svg [ngClass]=\"sortColumName === 'engagersCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'engagersCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <!-- <th><div class=\"cursor-pointer\" (click)=\"sortData('below12')\">\r\n Age Below 12\r\n <svg [ngClass]=\"sortColumName === 'below12' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'below12' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('13-19')\">\r\n Age 13-19\r\n <svg [ngClass]=\"sortColumName === '13-19' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '13-19' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('20-30')\">\r\n Age 20-30\r\n <svg [ngClass]=\"sortColumName === '20-30' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '20-30' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('31-45')\">\r\n Age 31-45\r\n <svg [ngClass]=\"sortColumName === '31-45' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '31-45' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('46-59')\">\r\n Age 46-59\r\n <svg [ngClass]=\"sortColumName === '46-59' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '46-59' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('60 above')\">\r\n Age 60+\r\n <svg [ngClass]=\"sortColumName === '60 above' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '60 above' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('maleCount')\">\r\n Male\r\n <svg [ngClass]=\"sortColumName === 'maleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'maleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('femaleCount')\">\r\n Female\r\n <svg [ngClass]=\"sortColumName === 'femaleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'femaleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th> -->\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td><a class=\"table-title-primary cursor-pointer\" (click)=\"storeView(store.storeId)\">{{ store.storeName || '--' }}</a></td>\r\n <td><div class=\"table-title\">{{ store.storeId || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store?.date | date: 'd MMM, y' || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.zoneName || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.concentrationRate?.toFixed(0) || '0' }}%</div></td>\r\n <td><div class=\"table-title\">{{ store.avgDwellTime || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.footfallCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.bouncedCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.engagersCount || '0' }}</div></td>\r\n <!-- <td><div class=\"table-title\">{{ store.bellow12 || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['13-19'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['20-30'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['31-45'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['46-59'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['60 above'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.maleCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.femaleCount || '0' }}</div></td> -->\r\n </tr> \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Summary Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n \r\n </div>\r\n</div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { ZoneService } from '../services/zone.service';\r\n\r\n@Component({\r\n selector: 'lib-zone-v2',\r\n templateUrl: './zone-v2.component.html',\r\n styleUrl: './zone-v2.component.scss'\r\n})\r\nexport class ZoneV2Component {\r\n storeId: number = 0;\r\n headerData: any;\r\n showReportProcessingCard: boolean = true;\r\n yesterdayDate: string = '';\r\n dataProcessedLoading = true;\r\n private readonly destroy$ = new Subject();\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n constructor(\r\n private pageInfo: PageInfoService,public gs: GlobalStateService, private zoneService:ZoneService,private cd:ChangeDetectorRef\r\n ) {\r\n }\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.updateStoreId()\r\n this.setPageData();\r\n this.checkTodayReportStatus()\r\n})\r\n}\r\n\r\n setPageData() {\r\n this.pageInfo.setTitle(\"Zones\");\r\n this.pageInfo.setDescription(\"Zones\");\r\n this.pageInfo.setBreadcrumbs([\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: false },\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: true },\r\n ]);\r\n }\r\n updateStoreId(): void {\r\n this.storeId = this.headerData.stores.filter((store: any) => store.checked).length;\r\n }\r\n checkTodayReportStatus(): void {\r\n this.dataProcessedLoading = true;\r\n const reportParams = {\r\n clientId: this.headerData?.client,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate\r\n };\r\n this.zoneService.getCheckTodayReportStatus(reportParams)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.dataProcessedLoading = false\r\n this.showReportProcessingCard = res?.data?.reportSendStatus === true;\r\n this.yesterdayDate = res?.data?.yesterday || '';\r\n this.cd.detectChanges();\r\n },\r\n \r\n error: (err: any) => {\r\n console.error('Error checking report status:', err);\r\n this.showReportProcessingCard = false;\r\n }\r\n });\r\n }\r\n}\r\n\r\n","<div *ngIf=\"!showReportProcessingCard && !dataProcessedLoading\">\r\n<lib-zones-cards></lib-zones-cards>\r\n<div class=\"mt-4\">\r\n<lib-customer-journey></lib-customer-journey>\r\n</div>\r\n<div *ngIf=\"storeId === 1\" class=\"mt-4\">\r\n<lib-store-heatmap></lib-store-heatmap>\r\n</div>\r\n<div *ngIf=\"storeId > 1\" class=\"mt-2\">\r\n <lib-top-performing></lib-top-performing>\r\n</div>\r\n<div class=\"mt-4\" >\r\n <lib-summary-table></lib-summary-table>\r\n</div>\r\n</div>\r\n\r\n<div *ngIf=\"showReportProcessingCard && !dataProcessedLoading\" class=\"row px-3\"> \r\n <div class=\"card dataprocessed pb-0 px-0 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"dataprocessedgif\" src=\"./assets/tango/Icons/data_analyse_gif.gif\" alt=\"\">\r\n <div class=\"dataprocessed-title\">Data being Processed</div>\r\n <div class=\"dataprocessed-sub\">Data for the selected date {{ yesterdayDate }}, is currently being processed and will be available shortly.</div>\r\n <div class=\"dataprocessed-sub\"> If you wish to view data for other dates, Remove {{ yesterdayDate }} from your selection or choose a different date range.</div> \r\n </div>\r\n\r\n</div>\r\n<div *ngIf=\"dataProcessedLoading\" class=\"card row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n</div> \r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { TangoAnalyseZoneComponent } from './components/tango-analyse-zone/tango-analyse-zone.component';\r\nimport { ZoneV2Component } from './components/zone-v2/zone-v2.component';\r\n\r\n\r\nconst routes: Routes = [\r\n {\r\n path:'v1',\r\n component:TangoAnalyseZoneComponent\r\n },\r\n {\r\n path: 'v2',\r\n component: ZoneV2Component\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class TangoAnalyseZoneRoutingModule { }\r\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n\r\n@Component({\r\n selector: 'lib-image-directory-view',\r\n templateUrl: './image-directory-view.component.html',\r\n styleUrl: './image-directory-view.component.scss'\r\n})\r\nexport class ImageDirectoryViewComponent implements OnInit {\r\n @Input() Imagedata:any;\r\n @Input() processType:any;\r\n @Input() footfallDate:any;\r\n @Input() storeName:any;\r\n @Input() storeId:any;\r\n @Input() headerData:any;\r\n @Input() imageArray:any;\r\n @Input() folderName:any;\r\n Images: any;\r\n itemsPerPage = 10;\r\n currentPage = 1;\r\n totalItems = 1;\r\n paginationSizes = [1];\r\n pageSize = 1;\r\n dataSubscrptionValue: any=[];\r\n statusValues: any;\r\n filteredData: any;\r\n objData: any;\r\n storeArrayValue: any;\r\n constructor(private Zonev2Service:Zonev2Service, private cd: ChangeDetectorRef,){\r\n\r\n }\r\nngOnInit(): void {\r\n this.Images = this.Imagedata?.images?.entryTimeImage;\r\n this.filteredData = this.imageArray.filter((item:any) => item.folderName === this.folderName);\r\n this.totalItems = this.filteredData[0].count\r\n this.getStoreActive();\r\n}\r\nprivate readonly destroy$ = new Subject();\r\nngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n}\r\ngetStoreActive(){\r\nlet obj={\r\n \"clientId\":this.headerData.client,\r\n \"storeId\": this.storeId\r\n}\r\nthis.Zonev2Service\r\n.getStoresActive(obj)\r\n.pipe(takeUntil(this.destroy$))\r\n?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.dataSubscrptionValue = res.data.storeSubscription.product;\r\n }\r\n }\r\n })\r\n}\r\n\r\nimageData(type:any){\r\n if(type ==='entry'){\r\n this.Images = this.Imagedata?.images?.entryTimeImage\r\n } else if(type === 'exit'){\r\n this.Images = this.Imagedata?.images?.exitTimeImage\r\n } else if(type ==='staff') {\r\n this.Images = this.Imagedata?.images?.staffEngagementImage\r\n }\r\n\r\n}\r\n\r\n// getImageView() {\r\n// this.objData = {\r\n// storeId: this.headerData.stores\r\n// .filter((store: any) => store.checked)\r\n// .map((store: any) => store.storeId),\r\n// clientId: this.headerData.client,\r\n// processType: this.processType,\r\n// footfallDate: this.footfallDate,\r\n// folderName:this.folderName\r\n// };\r\n// this.service\r\n// .getFootfallDirectory(this.objData)\r\n// .pipe(takeUntil(this.destroy$))\r\n// ?.subscribe({\r\n// next: (res: any) => {\r\n// if (res && res.code === 200) {\r\n// if(!res?.data.footfallData.length){\r\n// } else{\r\n// this.Imagedata = res?.data.footfallData;\r\n// this.storeArrayValue = res?.data.storeName\r\n \r\n// this.cd.detectChanges();\r\n// }\r\n// } \r\n// },\r\n// error: (err: any) => {\r\n// this.cd.detectChanges();\r\n// },\r\n// complete: () => {},\r\n// });\r\n// }\r\n// onPageChange(pageOffset: number) {\r\n// this.currentPage = Number(pageOffset);\r\n// this.getImageView();\r\n// }\r\n\r\n// onPageSizeChange(pageSize: number) {\r\n// this.pageSize = Number(pageSize);\r\n// this.getImageView();\r\n// }\r\n}","<div class=\"row h-550px scroll w-100\"></div>\r\n <div class=\"col-md-12 col-lg-8 col-xl-8 col-xxl-8\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-7\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <!-- Display footfall count or '--' if not available -->\r\n <span class=\"card-label header\">{{storeName | titlecase}} - {{footfallDate | date:'dd MMM, yyyy'}}</span>\r\n </h3>\r\n </div>\r\n <!-- Switch toggle -->\r\n <div class=\"col-md-5 text-end\">\r\n <span class=\"custId\">Customer ID</span>\r\n <span class=\"badge badge-light-primary mx-2\">{{Imagedata?.tempId}}</span>\r\n <span class=\"badge badge-light-danger\">{{processType | titlecase}} </span>\r\n\r\n </div>\r\n </div>\r\n <div class=\"row contain\">\r\n <div class=\"col-12 mb-5\">\r\n <img class=\"cursor-pointer\" class=\"img-src\" [src]=\"Images\"\r\n (error)=\"Images = null\" alt=\"\">\r\n <div *ngIf=\"!Images\" class=\"no-preview\">\r\n <span class=\"mb-5\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\" d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-5 text-center\">Preview not available</span>\r\n <span class=\"description mb-5 text-center\">The selected camera is not available at the\r\n moment.</span>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row slider\">\r\n\r\n <ng-container>\r\n <div class=\"col-4\" *ngIf=\"Imagedata?.images?.entryTimeImage\">\r\n <div class=\"mb-5 border-2\" [ngClass]=\"{\r\n 'border-gray-active': Images === Imagedata?.images?.entryTimeImage,\r\n 'border-gray': Images !== Imagedata?.images?.entryTimeImage\r\n }\">\r\n <div>Entry Time</div>\r\n <img class=\"cursor-pointer w-100 rounded-2 mh-100px pb-1\"\r\n [src]=\"Imagedata?.images?.entryTimeImage\"\r\n (error)=\"Imagedata?.images.entryTimeImage = null\" alt=\"\" (click)=\"imageData('entry')\">\r\n <div *ngIf=\"!Imagedata?.images?.entryTimeImage\" class=\"no-preview-sm cursor-pointer\">\r\n <span class=\"mb-2\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-2 text-center\">Preview not available</span>\r\n <span class=\"description mb-2 text-center\">The selected camera is not available\r\n at\r\n the\r\n moment.</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\" *ngIf=\"Imagedata?.images?.staffEngagementImage\">\r\n <div class=\"mb-5 border-2\" [ngClass]=\"{\r\n 'border-gray-active': Images === Imagedata?.images?.staffEngagementImage,\r\n 'border-gray': Images !== Imagedata?.images?.staffEngagementImage\r\n }\">\r\n <div>Staff Engagement</div>\r\n <img class=\"cursor-pointer w-100 rounded-2 mh-100px pb-1\"\r\n [src]=\"Imagedata?.images?.staffEngagementImage\"\r\n (error)=\"Imagedata?.images.staffEngagementImage = null\" alt=\"\" (click)=\"imageData('staff')\">\r\n <div *ngIf=\"!Imagedata?.images?.staffEngagementImage\" class=\"no-preview-sm cursor-pointer\">\r\n <span class=\"mb-2\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-2 text-center\">Preview not available</span>\r\n <span class=\"description mb-2 text-center\">The selected camera is not available\r\n at\r\n the\r\n moment.</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4 \" *ngIf=\"Imagedata?.images?.exitTimeImage\">\r\n <div class=\"mb-5 border-2\" [ngClass]=\"{\r\n 'border-gray-active': Images === Imagedata?.images?.exitTimeImage,\r\n 'border-gray': Images !== Imagedata?.images?.exitTimeImage\r\n }\">\r\n <div>Exit Time</div>\r\n <img class=\"cursor-pointer w-100 rounded-2 mh-100px pb-1\"\r\n [src]=\"Imagedata?.images?.exitTimeImage\"\r\n (error)=\"Imagedata?.images.exitTimeImage = null\" alt=\"\" (click)=\"imageData('exit')\">\r\n <div *ngIf=\"!Imagedata?.images?.exitTimeImage\" class=\"no-preview-sm cursor-pointer\">\r\n <span class=\"mb-2\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-2 text-center\">Preview not available</span>\r\n <span class=\"description mb-2 text-center\">The selected camera is not available\r\n at\r\n the\r\n moment.</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <span (click)=\"next()\" class=\"next\">\r\n <span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"7\" height=\"12\" viewBox=\"0 0 7 12\"\r\n fill=\"none\">\r\n <path d=\"M1 11L6 6L1 1\" stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n\r\n </span> -->\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <!-- <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination> -->\r\n </div>\r\n <div class=\"col-md-12 col-lg-4 col-xl-4 col-xxl-4\">\r\n <div *ngIf=\"dataSubscrptionValue.tangoTraffic\" class=\"row\">\r\n <div class=\"col-12 mb-5 cam-details-header px-0\">Time Spent</div>\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-8\">\r\n\r\n <div class=\"py-2 img-doc-time text-primary text-decoration-underline fw-bold\">Entry Time <span\r\n class=\"ms-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33333 14H12.6667C13.403 14 14 13.403 14 12.6667V3.33333C14 2.59695 13.403 2 12.6667 2H3.33333C2.59695 2 2 2.59695 2 3.33333V12.6667C2 13.403 2.59695 14 3.33333 14ZM3.33333 14L10.6667 6.66667L14 10M6.66667 5.66667C6.66667 6.21895 6.21895 6.66667 5.66667 6.66667C5.11438 6.66667 4.66667 6.21895 4.66667 5.66667C4.66667 5.11438 5.11438 4.66667 5.66667 4.66667C6.21895 4.66667 6.66667 5.11438 6.66667 5.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n <div class=\"py-2 img-doc-time text-primary text-decoration-underline fw-bold\">Exit Time <span\r\n class=\"ms-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33333 14H12.6667C13.403 14 14 13.403 14 12.6667V3.33333C14 2.59695 13.403 2 12.6667 2H3.33333C2.59695 2 2 2.59695 2 3.33333V12.6667C2 13.403 2.59695 14 3.33333 14ZM3.33333 14L10.6667 6.66667L14 10M6.66667 5.66667C6.66667 6.21895 6.21895 6.66667 5.66667 6.66667C5.11438 6.66667 4.66667 6.21895 4.66667 5.66667C4.66667 5.11438 5.11438 4.66667 5.66667 4.66667C6.21895 4.66667 6.66667 5.11438 6.66667 5.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n <div class=\"py-2 img-doc-time\">Total Time Spent</div>\r\n <!-- <div class=\"py-2 img-doc-time\">Avg Dwell Time</div> -->\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n\r\n <div class=\"py-2 img-doc-value\">{{Imagedata.timeSpent.entryTime ?? '--'}} </div>\r\n <div class=\"py-2 img-doc-value\">{{Imagedata.timeSpent.exitTime ?? '--'}}</div>\r\n <div class=\"py-2 img-doc-value\">{{Imagedata.timeSpent.totalTimeSpent ?? '--'}}</div>\r\n <!-- <div class=\"py-2 img-doc-value\">20 Mins</div> -->\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <hr />\r\n\r\n <div *ngIf=\"!dataSubscrptionValue.tangoZone\" class=\"row my-2 px-2\">\r\n <div class=\"card productCard\">\r\n <div class=\"row \">\r\n <div class=\"col-md-7 py-5\">\r\n<div class=\"product-title\">\r\n Tango Zone\r\n</div>\r\n<div class=\"left-card-count-title mt-3\">\r\n Identify hotspots and optimize your merchandise with Tango Zone's store heatmap analytics\r\n</div>\r\n<div class=\"explore-btn mt-4\">Explore <span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15 10.8333V15.8333C15 16.2754 14.8244 16.6993 14.5118 17.0118C14.1993 17.3244 13.7754 17.5 13.3333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V6.66667C2.5 6.22464 2.67559 5.80072 2.98816 5.48816C3.30072 5.17559 3.72464 5 4.16667 5H9.16667M12.5 2.5H17.5M17.5 2.5V7.5M17.5 2.5L8.33333 11.6667\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-md-5 px-0\">\r\n <img class=\"h-100 w-100\" src=\"assets/tango/Images/zone-tango.svg\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"dataSubscrptionValue.tangoZone\" class=\"row\">\r\n <span class=\"zone-header\">Zones Visited</span>\r\n <ng-container class=\"h-200px scroll\">\r\n <div class=\"col-md-4 mt-2\">\r\n <span class=\"badge badge-light-primary \">Billing Area</span>\r\n </div>\r\n <div class=\"col-md-4 mt-2\">\r\n <span class=\"badge badge-light-primary \">Billing Area</span>\r\n </div>\r\n <div class=\"col-md-4 mt-2\">\r\n <span class=\"badge badge-light-primary \">Billing Area</span>\r\n </div>\r\n </ng-container>\r\n <div class=\"col-md-6 mt-5\">\r\n <span class=\"last-visit\">Last Visited Zone</span>\r\n </div>\r\n <div class=\"col-md-6 mt-5\">\r\n <span class=\"badge badge-light-primary mx-2\"> John Jacobs</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"dataSubscrptionValue.tangoZone\" class=\"mt-5 col-lg-12\">\r\n <button class=\"btn btn-light-primary1 w-100 px-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4713_25)\">\r\n <path d=\"M19.6673 5.83341L13.834 10.0001L19.6673 14.1667V5.83341Z\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12.1673 4.16675H3.00065C2.08018 4.16675 1.33398 4.91294 1.33398 5.83341V14.1667C1.33398 15.0872 2.08018 15.8334 3.00065 15.8334H12.1673C13.0878 15.8334 13.834 15.0872 13.834 14.1667V5.83341C13.834 4.91294 13.0878 4.16675 12.1673 4.16675Z\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4713_25\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.5)\"/>\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"ms-2\">View Trajectory</span></button>\r\n </div>\r\n <hr />\r\n <div *ngIf=\"!dataSubscrptionValue.tangoTrax\" class=\"row my-2 px-2\">\r\n <div class=\"card productCard\">\r\n <div class=\"row \">\r\n <div class=\"col-md-7 py-5\">\r\n<div class=\"product-title\">\r\n Tango Trax\r\n</div>\r\n<div class=\"left-card-count-title mt-3\">\r\n Create AI-driven checklists to streamline your processes and boost compliance with Tango Trax.\r\n</div>\r\n<div class=\"explore-btn mt-4\">Explore <span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15 10.8333V15.8333C15 16.2754 14.8244 16.6993 14.5118 17.0118C14.1993 17.3244 13.7754 17.5 13.3333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V6.66667C2.5 6.22464 2.67559 5.80072 2.98816 5.48816C3.30072 5.17559 3.72464 5 4.16667 5H9.16667M12.5 2.5H17.5M17.5 2.5V7.5M17.5 2.5L8.33333 11.6667\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-md-5 px-0\">\r\n <img class=\"h-100 w-100\" src=\"assets/tango/Images/trax-tango.svg\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div *ngIf=\"dataSubscrptionValue.tangoTrax\" class=\"row\">\r\n <div class=\"zone-header my-3 ps-3\">Staff Engagement</div>\r\n\r\n <div class=\"row ps-3 mb-2\">\r\n <div class=\"col-md-8\">\r\n\r\n <div class=\"py-2 img-doc-time text-primary text-decoration-underline fw-bold\">Time taken to assist <span\r\n class=\"ms-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33333 14H12.6667C13.403 14 14 13.403 14 12.6667V3.33333C14 2.59695 13.403 2 12.6667 2H3.33333C2.59695 2 2 2.59695 2 3.33333V12.6667C2 13.403 2.59695 14 3.33333 14ZM3.33333 14L10.6667 6.66667L14 10M6.66667 5.66667C6.66667 6.21895 6.21895 6.66667 5.66667 6.66667C5.11438 6.66667 4.66667 6.21895 4.66667 5.66667C4.66667 5.11438 5.11438 4.66667 5.66667 4.66667C6.21895 4.66667 6.66667 5.11438 6.66667 5.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n\r\n <div class=\"py-2 img-doc-time\">Time spent with staff</div>\r\n\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n\r\n <div class=\"py-2 img-doc-value\">{{Imagedata?.staffEngagement?.timeTakenToAssist ?? '--'}} </div>\r\n <div class=\"py-2 img-doc-value\">{{Imagedata?.staffEngagement?.timeSpentWithStaff ?? '--'}} </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <hr /> -->\r\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport dayjs from 'dayjs';\r\nimport { FormBuilder, FormControl } from '@angular/forms';\r\n\r\nimport { ImageDirectoryViewComponent } from '../image-directory-view/image-directory-view.component';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n@Component({\r\n selector: 'lib-image-directory',\r\n templateUrl: './image-directory.component.html',\r\n styleUrl: './image-directory.component.scss'\r\n})\r\n\r\nexport class ImageDirectoryComponent implements OnInit, OnDestroy {\r\n selectIndex: any = 0;\r\n selectedTime: any;\r\n objData: any;\r\n objectsArray: any;\r\n imagesArrayData: any;\r\n processType = \"footfall\";\r\n headerData: any;\r\n folderView = true;\r\n dayjs = dayjs;\r\n dateArray: string[];\r\n form: any;\r\n noData: boolean =false;\r\n loading:boolean =true;\r\n storeArrayValue: any;\r\n storeIdarray: any;\r\n constructor(\r\n private Zonev2Service: Zonev2Service,\r\n public gs: GlobalStateService,\r\n private cd: ChangeDetectorRef,\r\n private modalService: NgbModal,private fb: FormBuilder\r\n ) {\r\n this.form = this.fb.group({\r\n selectValue: new FormControl('') // Initialize as FormControl\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n if(data !==null || data?.client !== null){\r\n this.headerData = data;\r\n this.storeIdarray = this.headerData?.stores.filter((store:any) => store.checked).map((store:any) => store.storeId)\r\n this.objData = {\r\n storeId: data.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: data.client,\r\n processType: this.processType,\r\n footfallDate: this.headerData.date.endDate,\r\n };\r\n const initialValue = this.getInitialValue();\r\n const selectControl = this.form.get('selectValue') as FormControl;\r\n if (selectControl) {\r\n selectControl.setValue(initialValue);\r\n }\r\n this.backToFootfall();\r\n this.displayDateRange();\r\n }\r\n });\r\n }\r\n private readonly destroy$ = new Subject();\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n getImageFolder() {\r\n \r\n delete this.objData.folderName;\r\n this.Zonev2Service\r\n .getFootfallDirectoryFolders(this.objData)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.objectsArray = res?.data.footfallData;\r\n this.selectedTime = this.objectsArray[0].folderName;\r\n this.objData.folderName = this.selectedTime;\r\n this.getImageView();\r\n this.cd.detectChanges();\r\n } else {\r\n this.loading =false;\r\n this.noData =true;\r\n }\r\n },\r\n error: (err: any) => {\r\n this.cd.detectChanges();\r\n },\r\n complete: () => {},\r\n });\r\n }\r\n getImageView() {\r\n this.loading =true;\r\n this.noData =false;\r\n this.Zonev2Service\r\n .getFootfallDirectory(this.objData)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n if(!res?.data.footfallData.length){\r\n this.loading =false;\r\n this.noData =true;\r\n } else{\r\n this.imagesArrayData = res?.data.footfallData;\r\n this.storeArrayValue = res?.data.storeName\r\n this.loading =false;\r\n this.noData =false;\r\n this.cd.detectChanges();\r\n }\r\n } else {\r\n this.loading =false;\r\n this.noData =true;\r\n }\r\n },\r\n error: (err: any) => {\r\n this.cd.detectChanges();\r\n },\r\n complete: () => {},\r\n });\r\n }\r\n\r\n getimages(index: any, obj: any) {\r\n this.selectIndex = index;\r\n (this.objData.footfallDate = obj), (this.folderView = false);\r\n this.getImageFolder();\r\n }\r\n backToFootfall() {\r\n this.selectIndex = 0;\r\n this.folderView = true;\r\n }\r\n selectedTimes(val: any) {\r\n this.selectedTime = val;\r\n this.objData.folderName = val;\r\n this.folderView = false;\r\n this.selectedTime = val;\r\n this.getImageView();\r\n }\r\n\r\n imageView(obj: any,footfallDate:any) {\r\n const modalRef = this.modalService.open(ImageDirectoryViewComponent, {\r\n centered: true,\r\n size: \"xl\",\r\n scrollable: true,\r\n });\r\n modalRef.componentInstance.Imagedata = obj;\r\n modalRef.componentInstance.processType = this.objData.processType;\r\n modalRef.componentInstance.footfallDate = footfallDate;\r\n modalRef.componentInstance.storeName = this.storeArrayValue;\r\n modalRef.componentInstance.storeId = this.storeIdarray\r\n modalRef.componentInstance.headerData = this.headerData;\r\n modalRef.componentInstance.imageArray = this.objectsArray;\r\n modalRef.componentInstance.folderName = this.objData.folderName\r\n modalRef.result.then((result: any) => {});\r\n }\r\n\r\n getDateRangeArray(fromDate: string, toDate: string): string[] {\r\n const start = new Date(fromDate); // Convert string to Date object\r\n const end = new Date(toDate); // Convert string to Date object\r\n const dateArray: string[] = [];\r\n\r\n // Check if the dates are valid\r\n if (isNaN(start.getTime()) || isNaN(end.getTime())) {\r\n return dateArray;\r\n }\r\n\r\n // Loop from start date to end date\r\n let currentDate = start;\r\n while (currentDate <= end) {\r\n dateArray.push(currentDate.toISOString().split(\"T\")[0]); // Format YYYY-MM-DD\r\n currentDate.setDate(currentDate.getDate() + 1); // Increment the date by 1 day\r\n }\r\n\r\n return dateArray;\r\n }\r\n\r\n // Method to display or log the date range array\r\n displayDateRange() {\r\n const dates = this.getDateRangeArray(\r\n this.headerData.date.startDate,\r\n this.headerData.date.endDate\r\n );\r\n this.dateArray = dates;\r\n }\r\n datasets = [\r\n { value: 'footfall', label: 'Footfall' },\r\n { value: 'bounced', label: 'Bounced Footfall' },\r\n { value: 'engager', label: 'Engagers' },\r\n { value: 'missedOpportunity', label: 'Missed Opportunity' },\r\n { value: 'conversion', label: 'Conversion' }\r\n ];\r\n\r\n getInitialValue(): string {\r\n // For example, selecting the second item in the dataset\r\n return this.datasets[0].value; // Change as needed\r\n }\r\n onValueChange(selectedId: any) {\r\n this.objData.processType = selectedId,\r\n this.getImageFolder();\r\n }\r\n get selectControl(): FormControl {\r\n return this.form.get('selectValue') as FormControl;\r\n }\r\n}\r\n"," <div class=\"card-header border-0 px-0\">\r\n <div class=\"col-md-12\">\r\n <div class=\"switch-form-card\">\r\n <div class=\"d-flex align-items-center\">\r\n <svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#EAF8FF\" stroke-width=\"6\" />\r\n <path d=\"M23.8333 14.6666L15.5 24.6666H23L22.1667 31.3333L30.5 21.3333H23L23.8333 14.6666Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <div class=\"txt-one ms-2\">\r\n <ng-container>Examine individual footfall in gallery view with optimal sample images for detailed analysis.</ng-container>\r\n <!-- <ng-container *ngIf=\"isMultiple\">Upload multiple stores for configuration</ng-container> -->\r\n </div>\r\n </div>\r\n <div>\r\n <!-- <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M18.295 7.115C18.6844 6.72564 18.6844 6.09436 18.295 5.705C17.9056 5.31564 17.2744 5.31564 16.885 5.705L12 10.59L7.115 5.705C6.72564 5.31564 6.09436 5.31564 5.705 5.705C5.31564 6.09436 5.31564 6.72564 5.705 7.115L10.59 12L5.705 16.885C5.31564 17.2744 5.31564 17.9056 5.705 18.295C6.09436 18.6844 6.72564 18.6844 7.115 18.295L12 13.41L16.885 18.295C17.2744 18.6844 17.9056 18.6844 18.295 18.295C18.6844 17.9056 18.6844 17.2744 18.295 16.885L13.41 12L18.295 7.115Z\"\r\n fill=\"black\" />\r\n </svg> -->\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"folderView\" class=\"p-1\">\r\n <div class=\"row\">\r\n <div class=\"col-md-1 mt-5 text-center\" *ngFor=\"let obj of dateArray;let i = index\">\r\n <div (click)=\"getimages(i,obj)\">\r\n <div *ngIf=\"i === selectIndex;\">\r\n <span class=\"cursor-pointer\"><svg width=\"57\" height=\"56\" viewBox=\"0 0 57 56\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.154297\" width=\"56\" height=\"56\" rx=\"12\" fill=\"#33B5FF\" />\r\n <path\r\n d=\"M39.8216 36.1667C39.8216 36.7855 39.5758 37.379 39.1382 37.8166C38.7006 38.2542 38.1071 38.5 37.4883 38.5H18.8216C18.2028 38.5 17.6093 38.2542 17.1717 37.8166C16.7341 37.379 16.4883 36.7855 16.4883 36.1667V19.8333C16.4883 19.2145 16.7341 18.621 17.1717 18.1834C17.6093 17.7458 18.2028 17.5 18.8216 17.5H24.6549L26.9883 21H37.4883C38.1071 21 38.7006 21.2458 39.1382 21.6834C39.5758 22.121 39.8216 22.7145 39.8216 23.3333V36.1667Z\"\r\n stroke=\"white\" stroke-width=\"2.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <div class=\"text-center mt-2\">{{obj | date:'dd MMM'}}</div>\r\n </div>\r\n <div *ngIf=\"i !== selectIndex;\">\r\n <span class=\"cursor-pointer\"><svg width=\"57\" height=\"56\" viewBox=\"0 0 57 56\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.462891\" width=\"56\" height=\"56\" rx=\"12\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M40.1302 36.1667C40.1302 36.7855 39.8844 37.379 39.4468 37.8166C39.0092 38.2542 38.4157 38.5 37.7969 38.5H19.1302C18.5114 38.5 17.9179 38.2542 17.4803 37.8166C17.0427 37.379 16.7969 36.7855 16.7969 36.1667V19.8333C16.7969 19.2145 17.0427 18.621 17.4803 18.1834C17.9179 17.7458 18.5114 17.5 19.1302 17.5H24.9635L27.2969 21H37.7969C38.4157 21 39.0092 21.2458 39.4468 21.6834C39.8844 22.121 40.1302 22.7145 40.1302 23.3333V36.1667Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"2.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <div class=\"text-center mt-2\">{{obj | date:'dd MMM'}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n \r\n </div>\r\n <div *ngIf=\"!folderView\" class=\"p1\">\r\n <div class=\"row\">\r\n <div class=\"d-flex flex-shrink-0 mt-3 justify-content-between align-items-center\">\r\n <span class=\"cursor-pointer\" (click)=\"backToFootfall()\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_2585_7036)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path d=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2585_7036\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2585_7036\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <div class=\"ms-auto text-end\">\r\n <form [formGroup]=\"form\">\r\n <lib-reactive-select \r\n [formControl]=\"selectControl\" \r\n [idField]=\"'value'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"datasets\"\r\n class=\"w-100 text-start\"\r\n (valueChange)=\"onValueChange($event)\">\r\n </lib-reactive-select>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mt-6 p-0 w-100 overflow-x\">\r\n <div class=\"col text-nowrap\" *ngFor=\"let obj of objectsArray\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item cursor-pointer\">\r\n <a (click)=\"selectedTimes(obj.folderName)\"\r\n [ngClass]=\"selectedTime === obj?.folderName ? 'active' : ''\" class=\"nav-link cursor-pointer no-border mx-3 mb-2\">\r\n {{obj?.folderName}}<span class=\"mx-2 \" [ngClass]=\"selectedTime === obj?.folderName ? 'badge-num-primary' :'badge-num-muted'\">{{obj?.count?obj?.count:0}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this image directory</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row p-3 img-traffic contain\" *ngIf=\"!noData && !loading\">\r\n <div class=\"col-md-3 border-gray mx-2 p-2 mt-5\" *ngFor=\"let obj of imagesArrayData\">\r\n <img *ngIf=\"obj.images.entryTimeImage\" class=\"img-src cursor-pointer\" [src]=\"obj.images.entryTimeImage\" (error)=\"obj?.images.entryTimeImage = null\" alt=\"\" (click)=\"imageView(obj,objData.footfallDate)\">\r\n <div *ngIf=\"!obj.images.entryTimeImage\" class=\"no-preview\">\r\n <span class=\"mb-5\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-5 text-center\">Preview not available</span>\r\n <span class=\"description mb-5 text-center\">The selected camera is not available at the\r\n moment.</span>\r\n </div>\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-8\">\r\n <div class=\"py-2 img-doc-directory\">{{obj.tempId}} <span class=\"badge badge-light-success ms-2\">{{selectControl.value | titlecase}}</span></div>\r\n <div class=\"py-2 img-doc-time\">Entry Time</div>\r\n <div class=\"py-2 img-doc-time\">Exit Time</div>\r\n <div class=\"py-2 img-doc-time\">Total Time Spent</div>\r\n </div>\r\n <div class=\"col-md-4 text-end\" >\r\n <div class=\"py-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1841_143300)\">\r\n <path d=\"M14.1986 5.33333V14H2.19857V5.33333M6.86523 8H9.5319M0.865234 2H15.5319V5.33333H0.865234V2Z\" stroke=\"#101828\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1841_143300\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(0.199219)\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"py-2 img-doc-value\">{{obj.timeSpent.entryTime}} </div>\r\n <div class=\"py-2 img-doc-value\">{{obj.timeSpent.exitTime}}</div>\r\n <div class=\"py-2 img-doc-value\">{{obj.timeSpent.totalTimeSpent}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n\r\n","import { ChangeDetectorRef, Component, ElementRef } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\n\r\ninterface ChartData {\r\n year: string; // or store name, depending on your requirement\r\n customerCountOver10Min: number;\r\n customerCountLessThanMin: number;\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'lib-interation-table-client430',\r\n templateUrl: './interation-table-client430.component.html',\r\n styleUrl: './interation-table-client430.component.scss'\r\n})\r\nexport class InterationTableClient430Component {\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private root!: am5.Root;\r\n private destroy$ = new Subject<void>();\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService,private el: ElementRef,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n})\r\n }\r\n ngOnDestroy(): void {\r\n // this.zone.runOutsideAngular(() => {\r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n // });\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getInterationTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n console.log(this.cardData);\r\n this.cardData = response.data.data\r\n this.cardNoData = this.cardData.length === 0;\r\n setTimeout(() => {\r\n this.createChart(this.cardData); // Call this method after data is set\r\n }, 200);\r\n // this.createChart(this.cardData);\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n \r\n\r\n createChart(cardData: any[]): void {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"chartdiv\");\r\n if (!chartDiv) {\r\n console.error(\"Could not find HTML element with id `chartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n \r\n this.root = am5.Root.new('chartdiv');\r\n \r\n const chart = this.root.container.children.push(\r\n am5xy.XYChart.new(this.root, {\r\n panX: false,\r\n panY: false,\r\n paddingLeft: 0,\r\n wheelX: \"panX\",\r\n wheelY: \"zoomX\",\r\n layout: this.root.verticalLayout\r\n })\r\n );\r\n \r\n const legend = chart.children.push(\r\n am5.Legend.new(this.root, {\r\n centerX: am5.p50,\r\n x: am5.p50\r\n })\r\n );\r\n \r\n const data: ChartData[] = cardData.map((item: any) => ({\r\n year: item.store_name,\r\n customerCountOver10Min: item.customer_count_over10min,\r\n customerCountLessThanMin: item.customer_count_lessthanamin\r\n }));\r\n \r\n const xRenderer = am5xy.AxisRendererX.new(this.root, {\r\n cellStartLocation: 0.1,\r\n cellEndLocation: 0.9,\r\n minorGridEnabled: true\r\n });\r\n \r\n const xAxis = chart.xAxes.push(\r\n am5xy.CategoryAxis.new(this.root, {\r\n categoryField: \"year\",\r\n renderer: xRenderer,\r\n tooltip: am5.Tooltip.new(this.root, {})\r\n })\r\n );\r\n \r\n xRenderer.grid.template.setAll({\r\n location: 1\r\n });\r\n \r\n xAxis.data.setAll(data);\r\n \r\n xAxis.get(\"renderer\").labels.template.setAll({\r\n visible: false\r\n });\r\n \r\n const yAxis = chart.yAxes.push(\r\n am5xy.ValueAxis.new(this.root, {\r\n renderer: am5xy.AxisRendererY.new(this.root, {\r\n strokeOpacity: 0.1\r\n })\r\n })\r\n );\r\n \r\n // Use an arrow function to ensure `this` is bound correctly\r\n const makeSeries = (name: string, fieldName: keyof ChartData): void => {\r\n const series = chart.series.push(am5xy.ColumnSeries.new(this.root, {\r\n name: name,\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n valueYField: fieldName,\r\n categoryXField: \"year\"\r\n }));\r\n \r\n series.columns.template.setAll({\r\n tooltipText: \"{name}: {valueY}\",\r\n width: am5.percent(90),\r\n tooltipY: 0,\r\n strokeOpacity: 0\r\n });\r\n \r\n series.data.setAll(data);\r\n series.appear();\r\n \r\n series.bullets.push(() => {\r\n return am5.Bullet.new(this.root, {\r\n locationY: 0,\r\n sprite: am5.Label.new(this.root, {\r\n text: \"{valueY}\",\r\n fill: this.root.interfaceColors.get(\"alternativeText\"),\r\n centerY: 0,\r\n centerX: am5.p50,\r\n populateText: true\r\n })\r\n });\r\n });\r\n \r\n legend.data.push(series);\r\n };\r\n \r\n makeSeries(\"Customer spent more than 10 mins\", \"customerCountOver10Min\");\r\n makeSeries(\"Billing Conversion\", \"customerCountLessThanMin\");\r\n \r\n chart.appear(1000, 100);\r\n }, 100);\r\n }\r\n \r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getInterationTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'CustomerFunnel');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n onRateExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.zoneInteractionTableExport_430(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'InteractionvsConversion');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n}\r\n","\r\n<div class=\"row\">\r\n\r\n<div class=\"col-6 ps-5 pe-0\" *ngIf=\"!cardNoData\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Customer Funnel</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" class=\"body me-4\">\r\n <div *ngFor=\"let item of cardData\" class=\"m-4\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Passer By\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.passer_by || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Drop In Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.drop_in_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Attended\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Interaction Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time || '--' }} Mins\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n\r\n <!-- <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n \r\n <th>Interaction Rate</th>\r\n <th>Customer Attended</th>\r\n <th>Passer By</th>\r\n \r\n <th>Drop In Rate</th>\r\n <th>Billing Conversion</th>\r\n <th>Footfall</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.interaction_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.customer_attended }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.passer_by }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zonename }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.drop_in_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall_overamin_inzone }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-6 ps-7 pe-0\" *ngIf=\"!cardNoData\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Interaction vs Conversion</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!-- [disabled]=\"!cardData.length\" -->\r\n <button type=\"button\" (click)=\"onRateExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-14 p-0\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"chartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n \r\n</div>\r\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\n\r\n@Component({\r\n selector: 'lib-passerby-table',\r\n templateUrl: './passerby-table.component.html',\r\n styleUrl: './passerby-table.component.scss'\r\n})\r\nexport class PasserbyTableComponent implements OnInit,OnDestroy {\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private destroy$ = new Subject<void>();\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n})\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n itemsPerPage = 10000\r\n currentPage = 0\r\n totalItems = 0\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n searchInput: any =\"\";\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getPasserByTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response?.data?.passerByData\r\n this.cardNoData = this.cardData.length === 0;\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n search: this.searchInput,\r\n // sort: this.sortColumName,\r\n // sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getPasserByTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Passer-by Analysis ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getCardData();\r\n }\r\n}\r\n","<div class=\"row mt-2\">\r\n <div class=\"col-12 pe-0\" *ngIf=\"!cardNoData\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start flex-column headtext px-3\">Passer-by Analysis</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"card-body mb-8 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('streamName')\">\r\n Camera Name\r\n <svg [ngClass]=\"sortColumName === 'streamName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'streamName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('passerby_count')\">\r\n Passer-by Count\r\n <svg [ngClass]=\"sortColumName === 'passerby_count' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'passerby_count' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td class=\"text-capitalize\">{{ item.streamName ? item.streamName :'--'}}</td>\r\n <td>{{ item.passerby_count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for PasserBy Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TangoAnalyseZoneRoutingModule } from './tango-analyse-zone-routing.module';\r\nimport { NgbAccordionModule, NgbCarouselModule, NgbModule, NgbProgressbarModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { OverallcardsComponent } from './components/overallcards/overallcards.component';\r\nimport { TopPerformingZonesComponent } from './components/top-performing-zones/top-performing-zones.component';\r\nimport { ZoneSummaryTableComponent } from './components/zone-summary-table/zone-summary-table.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ZoneConcentrationComponent } from './components/zone-concentration/zone-concentration.component';\r\nimport { CommonSharedModule } from 'tango-app-ui-shared';\r\nimport { TangoAnalyseZoneComponent } from './components/tango-analyse-zone/tango-analyse-zone.component';\r\nimport { ConcentrationheatmapComponent } from './components/zone-concentration/concentrationheatmap/concentrationheatmap.component';\r\nimport { ZoneV2Component } from './components/zone-v2/zone-v2.component';\r\nimport { ZonesCardsComponent } from './components/zone-v2/zones-cards/zones-cards.component';\r\nimport { StoreHeatmapComponent } from './components/zone-v2/store-heatmap/store-heatmap.component';\r\nimport { ImageDirectoryComponent } from './components/zone-v2/image-directory/image-directory.component';\r\nimport { ImageDirectoryViewComponent } from './components/zone-v2/image-directory-view/image-directory-view.component';\r\nimport { CustomerJourneyComponent } from './components/zone-v2/customer-journey/customer-journey.component';\r\nimport { ReactiveSelectComponent } from './components/zone-v2/reactive-select/reactive-select.component';\r\nimport { TopPerformingComponent } from './components/zone-v2/top-performing/top-performing.component';\r\nimport { SummaryTableComponent } from './components/zone-v2/summary-table/summary-table.component';\r\nimport { StoreZoomHeatmapComponent } from './components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component';\r\nimport { SegmentationComponent } from './components/segmentation/segmentation.component';\r\nimport { InterationTableClient430Component } from './components/interation-table-client430/interation-table-client430.component';\r\nimport { InterationTableClient459Component } from './components/interation-table-client459/interation-table-client459.component';\r\nimport { PasserbyTableComponent } from './components/passerby-table/passerby-table.component';\r\nimport { CustomerJourneyChartComponent } from './components/customer-journey-chart/customer-journey-chart.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n OverallcardsComponent,\r\n TangoAnalyseZoneComponent,\r\n TopPerformingZonesComponent,\r\n ZoneSummaryTableComponent,\r\n ZoneConcentrationComponent,\r\n ConcentrationheatmapComponent,\r\n\r\n ZoneV2Component,\r\n ConcentrationheatmapComponent,\r\n ZonesCardsComponent,\r\n StoreHeatmapComponent,\r\n ImageDirectoryComponent,\r\n ImageDirectoryViewComponent,\r\n CustomerJourneyComponent,\r\n ReactiveSelectComponent,\r\n TopPerformingComponent,\r\n SummaryTableComponent,\r\n StoreZoomHeatmapComponent,\r\n SegmentationComponent,\r\n InterationTableClient430Component,\r\n InterationTableClient459Component,\r\n PasserbyTableComponent,\r\n CustomerJourneyChartComponent,\r\n \r\n ],\r\n imports: [\r\n // CommonModule,\r\n // TangoAnalyseZoneRoutingModule,\r\n // NgbProgressbarModule,\r\n // FormsModule,\r\n // ReactiveFormsModule,\r\n // NgbCarouselModule,\r\n // CommonSharedModule,\r\n // NgbTooltipModule,\r\n // NgbModule\r\n CommonModule,\r\n TangoAnalyseZoneRoutingModule,\r\n NgbProgressbarModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CommonSharedModule,\r\n NgbTooltipModule,\r\n NgbModule,\r\n NgbAccordionModule,\r\n CommonSharedModule,\r\n NgbCarouselModule\r\n ]\r\n})\r\nexport class TangoAnalyseZoneModule { }\r\n","/*\r\n * Public API Surface of tango-analyse-zone\r\n */\r\n\r\nexport * from './lib/components/tango-analyse-zone/tango-analyse-zone.component';\r\nexport * from './lib/tango-analyse-zone.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EXCEL_TYPE","EXCEL_EXTENSION","takeUntil","i1.ZoneService","i4","i5","i1","i2","i3.ZoneService","i6","i7","i3","skip","i4.Zonev2Service","i2.ZoneService","i4.OverallcardsComponent","i5.TopPerformingZonesComponent","i6.ZoneSummaryTableComponent","i7.ZoneConcentrationComponent","i8.SegmentationComponent","i9.InterationTableClient459Component","i10.CustomerJourneyChartComponent","i1.Zonev2Service","i3.Zonev2Service","i2.Zonev2Service","i8.ReactiveSelectComponent","i4.ZonesCardsComponent","i5.StoreHeatmapComponent","i6.CustomerJourneyComponent","i7.TopPerformingComponent","i8.SummaryTableComponent","debounceTime","i6.ReactiveSelectComponent"],"mappings":"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"}
|