tango-app-ui-analyse-zone 3.3.0-alpha.3 → 3.3.0-alpha.4

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.
@@ -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/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/tango-analyse-zone-routing.module.ts","../../../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, } 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\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 {\r\n zoneAnalysisUrl:any;\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\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.zoneAnalysisUrl}/zoneConcentrationSummaryTable_v1`, data)\r\n }\r\n getOverallStoreConcentrationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneHeatmapDatas_v1`, data)\r\n }\r\n getOverallStoreHeatmapDates( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneHeatmapAvailableDates_v1`, data)\r\n }\r\n getCardData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/cardsAgeAnalysis_v1`, data)\r\n }\r\n getTopPerformingZonesData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingZones_v1`, data)\r\n }\r\n getTopPerformingStoresTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingStores_v1`, data)\r\n }\r\n getTopPerformingStoresTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingStores_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getSummaryTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneSummaryTable_v1`, data)\r\n }\r\n getSummaryTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneSummaryTable_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n\r\n \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","import { ChangeDetectorRef, Component, NgZone } 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 { 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\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 {\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,) {}\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.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 \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 };\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 // roundof(data:any) {\r\n // return data ? Math.round(parseInt(data)) : '--';\r\n // }\r\n}\r\n","<div class=\"row\">\r\n <div 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 Zone Footfall <span\r\n ngbTooltip=\"Unique zone footfall count with bounced and engagers rate %\"\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?.toFixed(0) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Bounced Footfall Rate</div>\r\n </div>\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.engagers?.rate?.toFixed(0) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Engagers Rate</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 || '--' }} Mins</div>\r\n <div class=\"subtext mt-3\">Average Dwell Time</div>\r\n </div>\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.concentration?.rate?.toFixed(0) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Concentration Rate</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 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>\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?.toFixed(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>\r\n","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\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\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 {\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() {\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 Analysis <span\r\n ngbTooltip=\"Top performing zones across the stores selected\"\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 <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=\"Top performing stores and their concentration % along with avg dwell time\"\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 <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\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-14 me-4 invoicesearch\" placeholder=\"Search...\" autocomplete=\"off\" \r\n (keyup.enter)=\"searchField()\" [disabled]=\"searchDisabled\" />\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?.toFixed(0) || '--'}} %</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.avgDwellTime?.toFixed(0) || '--'}} mins</div>\r\n </td>\r\n <!-- <td>\r\n <div class=\"table-title\">{{ store?.overallFootfall?.toFixed(0) || '--' }}</div>\r\n </td> -->\r\n <td>\r\n <div class=\"table-title\">{{ store?.zoneFootfall?.toFixed(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 = [10, 20, 30]\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.pageSize,\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.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 = 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: this.pageSize,\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.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.pageSize = parseInt(pageSize)\r\n this.getSummayTable()\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.currentPage = parseInt(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}\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 <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 [disabled]=\"searchDisabled\" />\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 StoreId\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?.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.below12 || '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 </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\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() imageURL: [];\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.imageURL) {\r\n this.overallStoreData.ImageURLs = this.imageURL; \r\n }\r\n\r\n}}\r\n","<div class=\"modal-body\">\r\n<ngb-carousel *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs\">\r\n <ng-template ngbSlide>\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 } from '@angular/core';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { NgbCarouselConfig, NgbModal } 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 {\r\n dayjs = dayjs;\r\n searchInput: any =\"\";\r\n searchDisabled: any = false;\r\n sortColumName: string = '';\r\n sortBy: number = 1;\r\n zoneConcentrationData: any[] = [];\r\n overallStoreData: any = {};\r\n type: string = ''; \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: number = -1;\r\n zoneName: string = '';\r\n disableDay: boolean = false;\r\n disableWeek: boolean = false;\r\n disableMonth: boolean = false;\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\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n\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 let sDate = this.dayjs(this.headerData.date.startDate);\r\n let eDate = this.dayjs(this.headerData.date.endDate);\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') < 28) {\r\n this.disableMonth = true;\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 };\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 \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.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.zoneConcentrationData = []\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 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.getZoneConcentrationData();\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 \r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\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.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 // this.heatmapLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\" && response.data.overallStoreConcentrationDates.length) {\r\n this.overallStoreConcentrationDates = response.data.overallStoreConcentrationDates;\r\n this.selectedDate = this.overallStoreConcentrationDates[0].zoneDate; \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 }\r\n },\r\n error => {\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}\r\nconcentrationHeatmap(imageURL: string) {\r\n const modalRef = this.modalService.open(ConcentrationheatmapComponent, {\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}\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 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column ms-3\">\r\n <span class=\"headtext\">Zone Concentration Summary</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\"\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 <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-10 invoicesearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (change)=\"searchField()\"\r\n [disabled]=\"searchDisabled\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\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 || '--' }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone.avgDwellTime?.toFixed(0) || '--' }} mins\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.concentrationRate?.toFixed(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 </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')\" [attr.disabled]=\"disableWeek ? true : null\">\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')\" [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 class=\"row\">\r\n <div class=\"col-lg-7\">\r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <div class=\"d-flex\">\r\n <ul *ngIf=\"periodzone == 1 && !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 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 </div>\r\n <ngb-carousel #carousel [interval]=\"0\" [pauseOnHover]=\"true\">\r\n <ng-container *ngFor=\"let image of overallStoreData?.ImageURLs\">\r\n <ng-template ngbSlide>\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 <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-5\">\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?.toFixed(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 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 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 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 || '--' }} mins\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 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 || '--' }}\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 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?.toFixed(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 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?.toFixed(0) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component } from '@angular/core';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\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 {\r\n storeId: number = 0;\r\n headerData: any;\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\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})\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: \"Analyze\", path: \"/manage/traffic\", isActive: false, isSeparator: false },\r\n { title: \"Analyze\", 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","<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 class=\"mt-2\" *ngIf=\"storeId > 1\">\r\n <lib-top-performing-zones></lib-top-performing-zones>\r\n</div>\r\n<div class=\"mt-4\" *ngIf=\"storeId > 1\">\r\n <lib-zone-summary-table></lib-zone-summary-table>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { TangoAnalyseZoneComponent } from '../public-api';\r\n\r\nconst routes: Routes = [\r\n {\r\n path:'',\r\n component:TangoAnalyseZoneComponent\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 { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TangoAnalyseZoneRoutingModule } from './tango-analyse-zone-routing.module';\r\nimport { 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\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 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 ]\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":["takeUntil","i1.ZoneService","i3","i4","i1","i2","i3.ZoneService","i5","i6","i7","i3.OverallcardsComponent","i4.TopPerformingZonesComponent","i5.ZoneSummaryTableComponent","i6.ZoneConcentrationComponent"],"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/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/tango-analyse-zone-routing.module.ts","../../../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, } 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\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 {\r\n zoneAnalysisUrl:any;\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\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.zoneAnalysisUrl}/zoneConcentrationSummaryTable_v1`, data)\r\n }\r\n getOverallStoreConcentrationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneHeatmapDatas_v1`, data)\r\n }\r\n getOverallStoreHeatmapDates( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneHeatmapAvailableDates_v1`, data)\r\n }\r\n getCardData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/cardsAgeAnalysis_v1`, data)\r\n }\r\n getTopPerformingZonesData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingZones_v1`, data)\r\n }\r\n getTopPerformingStoresTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingStores_v1`, data)\r\n }\r\n getTopPerformingStoresTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingStores_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getSummaryTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneSummaryTable_v1`, data)\r\n }\r\n getSummaryTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneSummaryTable_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n\r\n \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","import { ChangeDetectorRef, Component, NgZone } 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 { 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\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 {\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,) {}\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.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 \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 };\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 // roundof(data:any) {\r\n // return data ? Math.round(parseInt(data)) : '--';\r\n // }\r\n}\r\n","<div class=\"row\">\r\n <div 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 Zone Footfall <span\r\n ngbTooltip=\"Unique zone footfall count with bounced and engagers rate %\"\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 || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Bounced Footfall Rate</div>\r\n </div>\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.engagers?.rate || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Engagers Rate</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 || '--' }} Mins</div>\r\n <div class=\"subtext mt-3\">Average Dwell Time</div>\r\n </div>\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.concentration?.rate || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Concentration Rate</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 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>\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>\r\n","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\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\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 {\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() {\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 Analysis <span\r\n ngbTooltip=\"Top performing zones across the stores selected\"\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 <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=\"Top performing stores and their concentration % along with avg dwell time\"\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 <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\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-14 me-4 invoicesearch\" placeholder=\"Search...\" autocomplete=\"off\" \r\n (keyup.enter)=\"searchField()\" [disabled]=\"searchDisabled\" />\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 || '--'}} %</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.avgDwellTime || '--'}} 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 || '--' }}</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 = [10, 20, 30]\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.pageSize,\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.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 = 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: this.pageSize,\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.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.pageSize = parseInt(pageSize)\r\n this.getSummayTable()\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.currentPage = parseInt(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}\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 <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 [disabled]=\"searchDisabled\" />\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 StoreId\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 || '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.below12 || '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 </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\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() imageURL: [];\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.imageURL) {\r\n this.overallStoreData.ImageURLs = this.imageURL; \r\n }\r\n\r\n}}\r\n","<div class=\"modal-body\">\r\n<ngb-carousel *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs\">\r\n <ng-template ngbSlide>\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 } from '@angular/core';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { NgbCarouselConfig, NgbModal } 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 {\r\n dayjs = dayjs;\r\n searchInput: any =\"\";\r\n searchDisabled: any = false;\r\n sortColumName: string = '';\r\n sortBy: number = 1;\r\n zoneConcentrationData: any[] = [];\r\n overallStoreData: any = {};\r\n type: string = ''; \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 // 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\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n\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 let sDate = this.dayjs(this.headerData.date.startDate);\r\n let eDate = this.dayjs(this.headerData.date.endDate);\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') < 28) {\r\n this.disableMonth = true;\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 };\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 \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.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.zoneConcentrationData = []\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 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.getZoneConcentrationData();\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 \r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\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.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 // this.heatmapLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\" && response.data.overallStoreConcentrationDates.length) {\r\n this.overallStoreConcentrationDates = response.data.overallStoreConcentrationDates;\r\n this.selectedDate = this.overallStoreConcentrationDates[0].zoneDate; \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 }\r\n },\r\n error => {\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}\r\nconcentrationHeatmap(imageURL: string) {\r\n const modalRef = this.modalService.open(ConcentrationheatmapComponent, {\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}\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 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column ms-3\">\r\n <span class=\"headtext\">Zone Concentration Summary</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\"\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 <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-10 invoicesearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (change)=\"searchField()\"\r\n [disabled]=\"searchDisabled\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\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 || '--' }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone.avgDwellTime || '--' }} mins\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.concentrationRate || '--' }}%\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 </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')\" [attr.disabled]=\"disableWeek ? true : null\">\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')\" [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 class=\"row\">\r\n <div class=\"col-lg-7\">\r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <div class=\"d-flex\">\r\n <ul *ngIf=\"periodzone == 1 && !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 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 </div>\r\n <ngb-carousel #carousel [interval]=\"0\" [pauseOnHover]=\"true\">\r\n <ng-container *ngFor=\"let image of overallStoreData?.ImageURLs\">\r\n <ng-template ngbSlide>\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 <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-5\">\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 || '--' }}%</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 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 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 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 || '--' }} mins\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 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 || '--' }}\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 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 || '--' }}%\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 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 || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component } from '@angular/core';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\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 {\r\n storeId: number = 0;\r\n headerData: any;\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\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})\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: \"Analyze\", path: \"/manage/traffic\", isActive: false, isSeparator: false },\r\n { title: \"Analyze\", 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","<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 class=\"mt-2\" *ngIf=\"storeId > 1\">\r\n <lib-top-performing-zones></lib-top-performing-zones>\r\n</div>\r\n<div class=\"mt-4\" *ngIf=\"storeId > 1\">\r\n <lib-zone-summary-table></lib-zone-summary-table>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { TangoAnalyseZoneComponent } from '../public-api';\r\n\r\nconst routes: Routes = [\r\n {\r\n path:'',\r\n component:TangoAnalyseZoneComponent\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 { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TangoAnalyseZoneRoutingModule } from './tango-analyse-zone-routing.module';\r\nimport { 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\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 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 ]\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":["takeUntil","i1.ZoneService","i3","i4","i1","i2","i3.ZoneService","i5","i6","i7","i3.OverallcardsComponent","i4.TopPerformingZonesComponent","i5.ZoneSummaryTableComponent","i6.ZoneConcentrationComponent"],"mappings":"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"}