tango-app-ui-store-builder 1.0.1-beta-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/components/create-layout/create-layout.component.mjs +1815 -0
  3. package/esm2022/lib/components/create-layout/popups/add-floor/add-floor.component.mjs +40 -0
  4. package/esm2022/lib/components/create-layout/popups/clear-all-steps/clear-all-steps.component.mjs +16 -0
  5. package/esm2022/lib/components/create-layout/popups/delete-layout/delete-layout.component.mjs +16 -0
  6. package/esm2022/lib/components/custom-select/custom-select.component.mjs +155 -0
  7. package/esm2022/lib/components/layout-builder/layout-builder.component.mjs +56 -0
  8. package/esm2022/lib/components/layout-summary/layout-summary.component.mjs +809 -0
  9. package/esm2022/lib/components/layout-summary/popups/complete-layout/complete-layout.component.mjs +16 -0
  10. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +87 -0
  11. package/esm2022/lib/components/store-layout-table/store-layout-table.component.mjs +709 -0
  12. package/esm2022/lib/components/store-offcanvas-component/store-offcanvas-component.component.mjs +99 -0
  13. package/esm2022/lib/interfaces/layout-builder.interface.mjs +2 -0
  14. package/esm2022/lib/services/store-builder.service.mjs +99 -0
  15. package/esm2022/lib/tango-store-builder-routing.module.mjs +41 -0
  16. package/esm2022/lib/tango-store-builder.module.mjs +71 -0
  17. package/esm2022/public-api.mjs +5 -0
  18. package/esm2022/tango-app-ui-store-builder.mjs +5 -0
  19. package/esm2022/tango-store-builder.mjs +5 -0
  20. package/fesm2022/tango-app-ui-store-builder.mjs +3947 -0
  21. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -0
  22. package/fesm2022/tango-store-builder.mjs +3947 -0
  23. package/fesm2022/tango-store-builder.mjs.map +1 -0
  24. package/index.d.ts +5 -0
  25. package/lib/components/create-layout/create-layout.component.d.ts +197 -0
  26. package/lib/components/create-layout/popups/add-floor/add-floor.component.d.ts +16 -0
  27. package/lib/components/create-layout/popups/clear-all-steps/clear-all-steps.component.d.ts +8 -0
  28. package/lib/components/create-layout/popups/delete-layout/delete-layout.component.d.ts +8 -0
  29. package/lib/components/custom-select/custom-select.component.d.ts +33 -0
  30. package/lib/components/layout-builder/layout-builder.component.d.ts +18 -0
  31. package/lib/components/layout-summary/layout-summary.component.d.ts +92 -0
  32. package/lib/components/layout-summary/popups/complete-layout/complete-layout.component.d.ts +8 -0
  33. package/lib/components/reactive-select/reactive-select.component.d.ts +26 -0
  34. package/lib/components/store-layout-table/store-layout-table.component.d.ts +73 -0
  35. package/lib/components/store-offcanvas-component/store-offcanvas-component.component.d.ts +26 -0
  36. package/lib/interfaces/layout-builder.interface.d.ts +23 -0
  37. package/lib/services/store-builder.service.d.ts +33 -0
  38. package/lib/tango-store-builder-routing.module.d.ts +7 -0
  39. package/lib/tango-store-builder.module.d.ts +22 -0
  40. package/package.json +25 -0
  41. package/public-api.d.ts +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tango-store-builder.mjs","sources":["../../../projects/tango-store-builder/src/lib/components/layout-builder/layout-builder.component.ts","../../../projects/tango-store-builder/src/lib/components/layout-builder/layout-builder.component.html","../../../projects/tango-store-builder/src/lib/services/store-builder.service.ts","../../../projects/tango-store-builder/src/lib/components/store-offcanvas-component/store-offcanvas-component.component.ts","../../../projects/tango-store-builder/src/lib/components/store-offcanvas-component/store-offcanvas-component.component.html","../../../projects/tango-store-builder/src/lib/components/create-layout/popups/add-floor/add-floor.component.ts","../../../projects/tango-store-builder/src/lib/components/create-layout/popups/add-floor/add-floor.component.html","../../../projects/tango-store-builder/src/lib/components/create-layout/popups/clear-all-steps/clear-all-steps.component.ts","../../../projects/tango-store-builder/src/lib/components/create-layout/popups/clear-all-steps/clear-all-steps.component.html","../../../projects/tango-store-builder/src/lib/components/create-layout/popups/delete-layout/delete-layout.component.ts","../../../projects/tango-store-builder/src/lib/components/create-layout/popups/delete-layout/delete-layout.component.html","../../../projects/tango-store-builder/src/lib/components/custom-select/custom-select.component.ts","../../../projects/tango-store-builder/src/lib/components/custom-select/custom-select.component.html","../../../projects/tango-store-builder/src/lib/components/create-layout/create-layout.component.ts","../../../projects/tango-store-builder/src/lib/components/create-layout/create-layout.component.html","../../../projects/tango-store-builder/src/lib/components/layout-summary/popups/complete-layout/complete-layout.component.ts","../../../projects/tango-store-builder/src/lib/components/layout-summary/popups/complete-layout/complete-layout.component.html","../../../projects/tango-store-builder/src/lib/components/layout-summary/layout-summary.component.ts","../../../projects/tango-store-builder/src/lib/components/layout-summary/layout-summary.component.html","../../../projects/tango-store-builder/src/lib/components/store-layout-table/store-layout-table.component.ts","../../../projects/tango-store-builder/src/lib/components/store-layout-table/store-layout-table.component.html","../../../projects/tango-store-builder/src/lib/tango-store-builder-routing.module.ts","../../../projects/tango-store-builder/src/lib/components/reactive-select/reactive-select.component.ts","../../../projects/tango-store-builder/src/lib/components/reactive-select/reactive-select.component.html","../../../projects/tango-store-builder/src/lib/tango-store-builder.module.ts","../../../projects/tango-store-builder/src/public-api.ts","../../../projects/tango-store-builder/src/tango-store-builder.ts"],"sourcesContent":["import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { PageInfoService } from 'tango-app-ui-global';\r\n\r\n@Component({\r\n selector: 'lib-layout-builder',\r\n templateUrl: './layout-builder.component.html',\r\n styleUrl: './layout-builder.component.scss'\r\n})\r\nexport class LayoutBuilderComponent implements OnInit, OnDestroy {\r\n\r\n currentRoute:string\r\n routerSub:Subscription\r\n type: 'create' | 'summary' = 'create'\r\n\r\n \r\n constructor(private router:Router, private pageInfo:PageInfoService){\r\n \r\n }\r\n ngOnDestroy(): void {\r\n this.routerSub.unsubscribe()\r\n }\r\n \r\n ngOnInit(): void {\r\n this.currentRoute = this.router.url;\r\n if(this.currentRoute.startsWith('/manage/planogram/layout-builder/create') ){\r\n this.type = 'create'\r\n }\r\n else if(this.currentRoute.startsWith('/manage/planogram/layout-builder/summary') ){\r\n this.type = 'summary'\r\n }\r\n this.routerSub = this.router.events.subscribe((event) => {\r\n if (event instanceof NavigationEnd) {\r\n this.currentRoute = event.urlAfterRedirects\r\n if(this.currentRoute.startsWith('/manage/planogram/layout-builder/create')){\r\n this.type = 'create'\r\n }\r\n else if(this.currentRoute.startsWith('/manage/planogram/layout-builder/summary')){\r\n this.type = 'summary'\r\n }\r\n }\r\n });\r\n\r\n this.setPageData()\r\n \r\n }\r\n\r\n setPageData() {\r\n this.pageInfo.setTitle(\"Create Store Layout\");\r\n this.pageInfo.setDescription(\"\");\r\n this.pageInfo.setBreadcrumbs([\r\n { title: \"Planogram\", path: \"/manage/planogram/store-layout\", isActive: false, isSeparator: false },\r\n { title: \"Planogram\", path: \"/manage/planogram/store-layout\", isActive: false, isSeparator: true },\r\n ]);\r\n }\r\n \r\n\r\n}\r\n","<div class=\"c-card\">\r\n <div *ngIf=\"type === 'create'\" class=\"active-dot\">\r\n 1\r\n </div>\r\n <div style=\"width: 8px;\" ></div>\r\n <div *ngIf=\"type === 'summary'\" class=\"success-dot me-2\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\r\n <path d=\"M9 2L3.5 7.5L1 5\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> \r\n </div> \r\n <div [ngClass]=\"type === 'create' ? 'active-txt' : 'success-txt'\" class=\" me-4\">\r\n Create layout\r\n </div>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"103\" height=\"2\" viewBox=\"0 0 103 2\" fill=\"none\">\r\n <path d=\"M0 1H103\" stroke=\"#98A2B3\" stroke-width=\"1.5\" />\r\n </svg>\r\n <div [ngClass]=\"type === 'summary' ? 'active-dot' : 'inactive-dot'\" class=\" me-2\">\r\n 2\r\n </div>\r\n <div [ngClass]=\"type === 'summary' ? 'active-txt' : 'inactive-txt'\">\r\n Summary\r\n </div>\r\n</div>\r\n<router-outlet></router-outlet>","import { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http';\r\nimport { Injectable, OnDestroy, } from '@angular/core';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { BehaviorSubject, Observable, Subject, takeUntil, catchError, map,throwError, of } 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\nconst CSV_TYPE = 'text/csv;charset=utf-8';\r\nconst CSV_EXTENSION = '.csv';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StoreBuilderService implements OnDestroy {\r\n storeBuilderUrl:string;\r\n storeUrl:string;\r\n private readonly destroy$ = new Subject();\r\n dropDownTrigger = new BehaviorSubject(null)\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.storeBuilderUrl = env.storeBuilderUrl;\r\n this.storeUrl = env.storeApiUrl;\r\n }\r\n });\r\n }\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 \r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n\r\n layoutList(data:any) {\r\n return this.http.post(`${this.storeBuilderUrl}/storeLayoutList`,data);\r\n }\r\n\r\n getStoreList(data:any) {\r\n return this.http.post(`${this.storeUrl}/storeInfraList`,data)\r\n }\r\n\r\n createLayout(data:any) {\r\n return this.http.post(`${this.storeBuilderUrl}/createStoreLayout`,data)\r\n }\r\n\r\n BulkUpload(data:any) {\r\n return this.http.post(`${this.storeBuilderUrl}/uploadBulkStore`,data)\r\n }\r\n\r\n getPlano(data:any) {\r\n return this.http.post(`${this.storeBuilderUrl}/storeList`,data)\r\n }\r\n\r\n deleteFloor(data:any) {\r\n return this.http.post(`${this.storeBuilderUrl}/deleteFloor`,data)\r\n }\r\n\r\n addFloor(data:any) {\r\n return this.http.post(`${this.storeBuilderUrl}/updateFloor`,data)\r\n }\r\n\r\n updateFloorLayout(data:any) {\r\n return this.http.post(`${this.storeBuilderUrl}/updateStoreLayout`,data)\r\n }\r\n\r\n getStoreDetails(data:any) {\r\n return this.http.post(`${this.storeBuilderUrl}/storeDetails`,data)\r\n }\r\n\r\n uploadFile(data:any) {\r\n return this.http.post(`${this.storeBuilderUrl}/uploadFile`,data)\r\n }\r\n\r\n deleteFile(data:any) {\r\n return this.http.post(`${this.storeBuilderUrl}/removeFile`,data)\r\n }\r\n\r\n updatePlanoStatus(data:any){\r\n return this.http.post(`${this.storeBuilderUrl}/updateStatus`,data)\r\n }\r\n\r\n deleteLayout(data:any) {\r\n return this.http.delete(`${this.storeBuilderUrl}/deleteStoreLayout/${data}`)\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, ElementRef, inject, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { NgbActiveOffcanvas } from '@ng-bootstrap/ng-bootstrap';\r\nimport { debounceTime, Subject, takeUntil } from 'rxjs';\r\nimport { StoreBuilderService } from '../../services/store-builder.service';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport dayjs from 'dayjs';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport utc from 'dayjs/plugin/utc.js';\r\ndayjs.extend( utc );\r\ndayjs.extend(customParseFormat);\r\n\r\n\r\n@Component({\r\n selector: 'lib-store-offcanvas-component',\r\n templateUrl: './store-offcanvas-component.component.html',\r\n styleUrl: './store-offcanvas-component.component.scss'\r\n})\r\nexport class StoreOffcanvasComponentComponent implements OnInit,OnDestroy{\r\n activeOffcanvas = inject(NgbActiveOffcanvas);\r\n @Input() store:any;\r\n @Input() id:any;\r\n @Input() clientId:string;\r\n private destroy$ = new Subject<void>();\r\n @ViewChild('xlsxFile') fileInput!: ElementRef;\r\n dayjs:any = dayjs;\r\n\r\n storeDetails:any;\r\n\r\n constructor(private builderService:StoreBuilderService,private toast:ToastService,private cd:ChangeDetectorRef){}\r\n\r\n\r\n ngOnInit(): void {\r\n this.builderService.getStoreDetails({storeId:this.store.storeId,clientId:this.clientId}).pipe(takeUntil(this.destroy$), debounceTime(300)).subscribe({\r\n next:(res:any) =>{\r\n if(res && res.code == 200) {\r\n this.storeDetails = res.data;\r\n }\r\n },\r\n error:(error:any) =>{\r\n this.toast.getErrorToast(error?.error?.error || 'Something went wrong')\r\n }\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 timeFormat(time:string) {\r\n console.log(this.dayjs(time,'HH:mm:ss'))\r\n return this.dayjs(time,'HH:mm:ss').format('HH:mm A')\r\n }\r\n\r\n onFileUpload(event:any) {\r\n console.log(event)\r\n let formData = new FormData();\r\n formData.append('file', event.target.files[0]);\r\n formData.append('id',this.id)\r\n this.builderService.uploadFile(formData).pipe(takeUntil(this.destroy$), debounceTime(300)).subscribe({\r\n next:(res:any) => {\r\n if(res && res.code == 200) {\r\n this.storeDetails.attachments.push(res.data);\r\n this.fileInput.nativeElement.value = '';\r\n this.cd.detectChanges();\r\n }\r\n },\r\n error:(error:any) => {\r\n this.toast.getErrorToast(error?.error?.error || 'Something went wrong');\r\n this.fileInput.nativeElement.value = '';\r\n }\r\n })\r\n }\r\n\r\n deleteFile(index:any) {\r\n this.builderService.deleteFile({id:this.id,fileIndex:index}).pipe(takeUntil(this.destroy$), debounceTime(300)).subscribe({\r\n next:(res:any) => {\r\n if(res && res.code == 200) {\r\n this.storeDetails.attachments.splice(index,1);\r\n this.cd.detectChanges();\r\n }\r\n },\r\n error:(error:any) => {\r\n this.toast.getErrorToast(error?.error?.error || 'Something went wrong');\r\n this.fileInput.nativeElement.value = '';\r\n }\r\n })\r\n }\r\n\r\n}\r\n","<div class=\"h100\">\r\n <div class=\"offcanvas-header\">\r\n <h5 class=\"offcanvas-title\">About</h5>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"activeOffcanvas.dismiss()\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"offcanvas-body d-flex flex-column justify-content-between h-90 \">\r\n <div>\r\n <div>\r\n <div class=\"mb-8\">\r\n <img [src]=\"storeDetails.cameraBaseImage\" class=\"w-100 h-155px symbol symbol-75px symbol-fixed\" *ngIf=\"storeDetails?.cameraBaseImage?.trim()\" />\r\n <div class=\"symbol symbol-75px symbol-fixed position-relative ng-star-inserted w-100\" *ngIf=\"!storeDetails?.cameraBaseImage?.trim()\">\r\n <div class=\"cont w-100\">\r\n <div class=\"bg-color mb-5\"><svg width=\"32\"\r\n height=\"30\" viewBox=\"0 0 23 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\" stroke=\"#667085\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> \\ <path\r\n id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n </svg>\r\n <div class=\"centered mt-8\">Preview not available</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex\">\r\n <div class=\"me-5 storeClass\">{{storeDetails?.storeName}}</div>\r\n <div class=\"storeBadge mt-1\"><span class=\"badge badge-light-primary text-active-primary\">{{'APP ID: ' +storeDetails?.appId}}</span></div>\r\n </div>\r\n <div class=\"mt-5 address\">\r\n {{storeDetails?.storeProfile?.address}} {{storeDetails?.storeProfile?.pincode}}\r\n </div>\r\n <div class=\"mt-10\">\r\n <div>\r\n <div class=\"d-flex mt-3\">\r\n <div>\r\n <span class=\"me-3\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M16.6667 17.5V15.8333C16.6667 14.9493 16.3155 14.1014 15.6904 13.4763C15.0653 12.8512 14.2174 12.5 13.3334 12.5H6.66671C5.78265 12.5 4.93481 12.8512 4.30968 13.4763C3.68456 14.1014 3.33337 14.9493 3.33337 15.8333V17.5M13.3334 5.83333C13.3334 7.67428 11.841 9.16667 10 9.16667C8.15909 9.16667 6.66671 7.67428 6.66671 5.83333C6.66671 3.99238 8.15909 2.5 10 2.5C11.841 2.5 13.3334 3.99238 13.3334 5.83333Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"spocTitle\">{{storeDetails?.spocDetails?.[0]?.name}}</span>\r\n </div>\r\n <div class=\"ms-5\">\r\n <span class=\"me-3\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M18.3333 14.0994V16.5994C18.3343 16.8315 18.2867 17.0612 18.1937 17.2739C18.1008 17.4865 17.9644 17.6774 17.7934 17.8343C17.6224 17.9912 17.4205 18.1107 17.2006 18.185C16.9808 18.2594 16.7478 18.287 16.5167 18.2661C13.9523 17.9875 11.4892 17.1112 9.32498 15.7078C7.31151 14.4283 5.60443 12.7212 4.32499 10.7078C2.91663 8.53377 2.04019 6.05859 1.76665 3.48276C1.74583 3.25232 1.77321 3.02006 1.84707 2.80078C1.92092 2.5815 2.03963 2.38 2.19562 2.20911C2.35162 2.03822 2.54149 1.90169 2.75314 1.8082C2.9648 1.71471 3.1936 1.66631 3.42499 1.6661H5.92499C6.32941 1.66212 6.72148 1.80533 7.02812 2.06904C7.33476 2.33275 7.53505 2.69897 7.59165 3.09943C7.69717 3.89949 7.89286 4.68504 8.17499 5.4411C8.2871 5.73937 8.31137 6.06353 8.24491 6.37516C8.17844 6.6868 8.02404 6.97286 7.79998 7.19943L6.74165 8.25776C7.92795 10.3441 9.65536 12.0715 11.7417 13.2578L12.8 12.1994C13.0266 11.9754 13.3126 11.821 13.6243 11.7545C13.9359 11.688 14.26 11.7123 14.5583 11.8244C15.3144 12.1066 16.0999 12.3022 16.9 12.4078C17.3048 12.4649 17.6745 12.6688 17.9388 12.9807C18.203 13.2926 18.3435 13.6907 18.3333 14.0994Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"spocTitle\">{{storeDetails?.spocDetails?.[0]?.contact}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <span class=\"me-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M18.3333 5.00065C18.3333 4.08398 17.5833 3.33398 16.6666 3.33398H3.33329C2.41663 3.33398 1.66663 4.08398 1.66663 5.00065M18.3333 5.00065V15.0007C18.3333 15.9173 17.5833 16.6673 16.6666 16.6673H3.33329C2.41663 16.6673 1.66663 15.9173 1.66663 15.0007V5.00065M18.3333 5.00065L9.99996 10.834L1.66663 5.00065\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span class=\"spocTitle\">{{storeDetails?.spocDetails?.[0]?.email}}</span>\r\n </div>\r\n <div class=\"mt-3\">\r\n <div class=\"d-flex mt-3\">\r\n <div>\r\n <span class=\"me-3\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_494_87212)\">\r\n <path\r\n d=\"M2.1875 20C1.60734 20 1.05094 19.7695 0.640704 19.3593C0.230468 18.9491 0 18.3927 0 17.8125L0 2.1875C0 0.98 0.98 0 2.1875 0H12.8125C14.02 0 15 0.98 15 2.1875V17.8125C15 17.9187 14.9925 18.0225 14.9775 18.125H17.8125C17.8954 18.125 17.9749 18.0921 18.0335 18.0335C18.0921 17.9749 18.125 17.8954 18.125 17.8125V10.3562C18.125 10.3048 18.1124 10.2542 18.0882 10.2089C18.064 10.1635 18.029 10.1248 17.9862 10.0962L16.6675 9.2175C16.5651 9.14921 16.4771 9.06142 16.4086 8.95913C16.3401 8.85684 16.2924 8.74206 16.2683 8.62135C16.2441 8.50063 16.244 8.37634 16.2679 8.25558C16.2918 8.13481 16.3392 8.01993 16.4075 7.9175C16.4758 7.81507 16.5636 7.72709 16.6659 7.65859C16.7682 7.59009 16.8829 7.5424 17.0037 7.51826C17.1244 7.49412 17.2487 7.49399 17.3694 7.51788C17.4902 7.54177 17.6051 7.58921 17.7075 7.6575L19.0262 8.53625C19.635 8.9425 20 9.625 20 10.3562V17.8125C20 18.3927 19.7695 18.9491 19.3593 19.3593C18.9491 19.7695 18.3927 20 17.8125 20H13.4375C13.3544 19.9999 13.2716 19.989 13.1912 19.9675C13.0675 19.9888 12.9412 20 12.8125 20H9.0625C8.81386 20 8.5754 19.9012 8.39959 19.7254C8.22377 19.5496 8.125 19.3111 8.125 19.0625V17.5H6.875V19.0625C6.875 19.3111 6.77623 19.5496 6.60041 19.7254C6.4246 19.9012 6.18614 20 5.9375 20H2.1875ZM1.875 17.8125C1.875 17.985 2.015 18.125 2.1875 18.125H5V16.5625C5 16.3139 5.09877 16.0754 5.27459 15.8996C5.4504 15.7238 5.68886 15.625 5.9375 15.625H9.0625C9.31114 15.625 9.5496 15.7238 9.72541 15.8996C9.90123 16.0754 10 16.3139 10 16.5625V18.125H12.8125C12.8954 18.125 12.9749 18.0921 13.0335 18.0335C13.0921 17.9749 13.125 17.8954 13.125 17.8125V2.1875C13.125 2.10462 13.0921 2.02513 13.0335 1.96653C12.9749 1.90792 12.8954 1.875 12.8125 1.875H2.1875C2.10462 1.875 2.02513 1.90792 1.96653 1.96653C1.90792 2.02513 1.875 2.10462 1.875 2.1875V17.8125ZM4.6875 7.5H5.3125C5.56114 7.5 5.7996 7.59877 5.97541 7.77459C6.15123 7.9504 6.25 8.18886 6.25 8.4375C6.25 8.68614 6.15123 8.9246 5.97541 9.10041C5.7996 9.27623 5.56114 9.375 5.3125 9.375H4.6875C4.43886 9.375 4.2004 9.27623 4.02459 9.10041C3.84877 8.9246 3.75 8.68614 3.75 8.4375C3.75 8.18886 3.84877 7.9504 4.02459 7.77459C4.2004 7.59877 4.43886 7.5 4.6875 7.5ZM3.75 4.6875C3.75 4.43886 3.84877 4.2004 4.02459 4.02459C4.2004 3.84877 4.43886 3.75 4.6875 3.75H5.3125C5.56114 3.75 5.7996 3.84877 5.97541 4.02459C6.15123 4.2004 6.25 4.43886 6.25 4.6875C6.25 4.93614 6.15123 5.1746 5.97541 5.35041C5.7996 5.52623 5.56114 5.625 5.3125 5.625H4.6875C4.43886 5.625 4.2004 5.52623 4.02459 5.35041C3.84877 5.1746 3.75 4.93614 3.75 4.6875ZM8.75 8.4375C8.75 8.18886 8.84877 7.9504 9.02459 7.77459C9.2004 7.59877 9.43886 7.5 9.6875 7.5H10.3125C10.5611 7.5 10.7996 7.59877 10.9754 7.77459C11.1512 7.9504 11.25 8.18886 11.25 8.4375C11.25 8.68614 11.1512 8.9246 10.9754 9.10041C10.7996 9.27623 10.5611 9.375 10.3125 9.375H9.6875C9.43886 9.375 9.2004 9.27623 9.02459 9.10041C8.84877 8.9246 8.75 8.68614 8.75 8.4375ZM9.6875 3.75H10.3125C10.5611 3.75 10.7996 3.84877 10.9754 4.02459C11.1512 4.2004 11.25 4.43886 11.25 4.6875C11.25 4.93614 11.1512 5.1746 10.9754 5.35041C10.7996 5.52623 10.5611 5.625 10.3125 5.625H9.6875C9.43886 5.625 9.2004 5.52623 9.02459 5.35041C8.84877 5.1746 8.75 4.93614 8.75 4.6875C8.75 4.43886 8.84877 4.2004 9.02459 4.02459C9.2004 3.84877 9.43886 3.75 9.6875 3.75ZM3.75 12.1875C3.75 11.9389 3.84877 11.7004 4.02459 11.5246C4.2004 11.3488 4.43886 11.25 4.6875 11.25H5.3125C5.56114 11.25 5.7996 11.3488 5.97541 11.5246C6.15123 11.7004 6.25 11.9389 6.25 12.1875C6.25 12.4361 6.15123 12.6746 5.97541 12.8504C5.7996 13.0262 5.56114 13.125 5.3125 13.125H4.6875C4.43886 13.125 4.2004 13.0262 4.02459 12.8504C3.84877 12.6746 3.75 12.4361 3.75 12.1875ZM9.6875 11.25H10.3125C10.5611 11.25 10.7996 11.3488 10.9754 11.5246C11.1512 11.7004 11.25 11.9389 11.25 12.1875C11.25 12.4361 11.1512 12.6746 10.9754 12.8504C10.7996 13.0262 10.5611 13.125 10.3125 13.125H9.6875C9.43886 13.125 9.2004 13.0262 9.02459 12.8504C8.84877 12.6746 8.75 12.4361 8.75 12.1875C8.75 11.9389 8.84877 11.7004 9.02459 11.5246C9.2004 11.3488 9.43886 11.25 9.6875 11.25Z\"\r\n fill=\"#667085\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_494_87212\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span><span class=\"spocTitle\">{{storeDetails?.businessType || '--'}}</span>\r\n </div>\r\n <div class=\"ms-5\">\r\n <span class=\"me-3\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M2.68027 5.80366L2.62703 5.88683C2.06898 6.87388 2.66481 8.1213 3.73642 8.2644C3.83351 8.27627 3.92385 8.28255 4.01212 8.28255C4.59027 8.28255 5.10144 8.03453 5.45772 7.6478L6.01105 7.04718L6.5625 7.64953C6.91445 8.03395 7.42446 8.28255 8.00651 8.28255C8.58595 8.28255 9.09889 8.0336 9.45052 7.64953L10.0037 7.04529L10.5569 7.64953C10.9085 8.0336 11.4215 8.28255 12.0009 8.28255C12.5803 8.28255 13.0933 8.0336 13.4449 7.64953L13.9981 7.04529L14.5513 7.64953C14.9029 8.0336 15.4158 8.28255 15.9953 8.28255C16.0806 8.28255 16.1737 8.27625 16.2701 8.2645C17.3653 8.11518 17.9631 6.80091 17.3244 5.80416C17.3244 5.8041 17.3243 5.80405 17.3243 5.80399L15.5661 3.06258L15.5661 3.06258L15.5652 3.06111C15.55 3.03728 15.5125 3.01172 15.4653 3.01172H4.53593C4.48878 3.01172 4.45129 3.03728 4.43609 3.06111L4.43547 3.06208L2.68027 5.80366ZM15.6517 10.7369V13.8689V14.6189H14.9017H5.09955H4.34955V13.8689V10.7374C4.23932 10.7456 4.12781 10.7498 4.01519 10.7498C3.97289 10.7498 3.93086 10.7492 3.88912 10.748V13.8689V15.8034C3.88912 16.4468 4.42303 16.9879 5.09955 16.9879H14.9017C15.5783 16.9879 16.1122 16.4468 16.1122 15.8034V13.8689V10.7482C16.0723 10.7493 16.0323 10.7498 15.9922 10.7498C15.8778 10.7498 15.7642 10.7455 15.6517 10.7369Z\"\r\n stroke=\"#667085\" stroke-width=\"1.5\" />\r\n </svg></span><span class=\"spocTitle\">{{storeDetails?.storeType?.type || '--'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_494_87218)\">\r\n <path\r\n d=\"M9.99996 4.99935V9.99935L13.3333 11.666M18.3333 9.99935C18.3333 14.6017 14.6023 18.3327 9.99996 18.3327C5.39759 18.3327 1.66663 14.6017 1.66663 9.99935C1.66663 5.39698 5.39759 1.66602 9.99996 1.66602C14.6023 1.66602 18.3333 5.39698 18.3333 9.99935Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_494_87218\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"spocTitle ms-3\">{{timeFormat(storeDetails?.storeProfile?.open)}} - {{timeFormat(storeDetails?.storeProfile?.close)}}</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-10\">\r\n <span class=\"me-5 badge badge-light-default mx-3 mb-5\" *ngFor=\"let file of storeDetails?.attachments;let i=index\"><a [href]=\"file.url\" download class=\"storeBadge\">{{file.name}}</a><span class=\"ms-3 cursor-pointer\" (click)=\"deleteFile(i)\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\">\r\n <path d=\"M9 3.5L3 9.5M3 3.5L9 9.5\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></span>\r\n <input style=\"display: none;\" type=\"file\" #file1 id=\"kt_account_team_size_select_2\" (change)=\"onFileUpload($event)\" />\r\n <button class=\"btn btn-outline\" (click)=\"file1.click()\"><span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"24\" viewBox=\"0 0 18 24\" fill=\"none\">\r\n <path\r\n d=\"M10.6875 17.7143L10.6875 10.8C11.2163 11.04 11.7788 11.2229 12.375 11.3257L12.375 17.7143C12.375 21.1886 9.6075 24 6.1875 24C2.7675 24 -1.22891e-07 21.1886 -2.74757e-07 17.7143L-7.99294e-07 5.71428C-9.09696e-07 3.18857 2.01375 1.14286 4.5 1.14286C5.52375 1.14286 6.4575 1.49714 7.21125 2.09143C6.975 2.70857 6.82875 3.37143 6.78375 4.05714C6.43887 3.56323 5.94815 3.19368 5.3827 3.00203C4.81724 2.81038 4.20641 2.80658 3.63868 2.99119C3.07096 3.17579 2.57583 3.53921 2.22503 4.0288C1.87422 4.51839 1.68595 5.10873 1.6875 5.71428L1.6875 17.7143C1.6875 20.24 3.70125 22.2857 6.1875 22.2857C8.67375 22.2857 10.6875 20.24 10.6875 17.7143ZM7.3125 15.4286C7.3125 16.0571 6.80625 16.5714 6.1875 16.5714C5.56875 16.5714 5.0625 16.0571 5.0625 15.4286L5.0625 6.85714L3.375 6.85714L3.375 15.4286C3.375 16.1863 3.67132 16.9131 4.19876 17.4489C4.72621 17.9847 5.44158 18.2857 6.1875 18.2857C6.93342 18.2857 7.64879 17.9847 8.17624 17.4489C8.70368 16.9131 9 16.1863 9 15.4286L9 9.66857C8.27675 9.0123 7.70119 8.20542 7.3125 7.30286L7.3125 15.4286ZM12.375 3.42857L9 3.42857L9 5.71428L12.375 5.71428L12.375 9.14286L14.625 9.14286L14.625 5.71428L18 5.71428L18 3.42857L14.625 3.42857L14.625 -2.54663e-06L12.375 -2.44828e-06L12.375 3.42857Z\"\r\n fill=\"#475467\" />\r\n </svg>\r\n </span>Attach File</button>\r\n </div>\r\n </div>\r\n</div>","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { Subject } from 'rxjs';\r\n\r\n\r\n@Component({\r\n selector: 'lib-add-floor',\r\n standalone: false,\r\n templateUrl: './add-floor.component.html',\r\n styleUrl: './add-floor.component.scss'\r\n})\r\nexport class AddFloorComponent implements OnInit, OnDestroy {\r\n floorNo:number = 1\r\n \r\n private destroy$ = new Subject();\r\n \r\n constructor(public modal:NgbActiveModal) {}\r\n \r\n ngOnInit(): void {\r\n \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 \r\n floorDec() {\r\n if(this.floorNo >= 2) {\r\n this.floorNo--;\r\n }\r\n }\r\n \r\n floorInc() {\r\n this.floorNo++;\r\n }\r\n \r\n \r\n createLayout() {\r\n let params = {\r\n floorNumber:this.floorNo,\r\n }\r\n\r\n this.modal.dismiss(params)\r\n }\r\n \r\n}\r\n"," <div class=\"card scroll\">\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">Add Floors</span>\r\n </div>\r\n </div>\r\n <div class=\"card-body storeCard\">\r\n <div class=\"selectStore\">\r\n <div class=\"mt-5\">No of floors</div>\r\n <div class=\"mt-2\">\r\n <div style=\"position: relative;\"><svg role=\"button\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" class=\"dec\" (click)=\"floorDec()\">\r\n <path d=\"M4.16602 10H15.8327\" stroke=\"#667085\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg><input readonly=\"\" type=\"number\" [(ngModel)]=\"floorNo\" id=\"floor\"\r\n autocomplete=\"off\" class=\"form-control inc-dec-input\"\r\n ><svg role=\"button\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\" class=\"inc\" (click)=\"floorInc()\">\r\n <path d=\"M8.00065 3.33337V12.6667M3.33398 8.00004H12.6673\" stroke=\"#667085\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer storeCard text-end border-0\">\r\n <button class=\"btn mx-5 btn-outline\" (click)=\"modal.dismiss()\">Cancel</button>\r\n <button class=\"btn btn-sm btn-primary\" (click)=\"createLayout()\">Save</button>\r\n </div>\r\n </div>\r\n","import { Component } from '@angular/core';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'lib-clear-all-steps',\r\n standalone: false,\r\n templateUrl: './clear-all-steps.component.html',\r\n styleUrl: './clear-all-steps.component.scss'\r\n})\r\nexport class ClearAllStepsComponent {\r\n constructor(public modal:NgbActiveModal){}\r\n\r\n}\r\n","<div class=\"header mb-5\" >\r\n Clear all steps\r\n</div>\r\n<div class=\"description mb-7\">\r\n Are you sure you want to clear all the steps for this layout? Please note that this action cannot be undone.\r\n</div>\r\n<div class=\"d-flex align-items-center justify-content-end\">\r\n <button class=\"btn btn-outline bg-white me-5\" (click)=\"modal.close()\" >Cancel</button>\r\n <button class=\"btn btn-sm btn-danger\" (click)=\"modal.close({message:'confirm'})\" >Clear All Steps</button>\r\n</div>","import { Component } from '@angular/core';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'lib-delete-layout',\r\n standalone: false,\r\n templateUrl: './delete-layout.component.html',\r\n styleUrl: './delete-layout.component.scss'\r\n})\r\nexport class DeleteLayoutComponent {\r\n\r\n constructor(public modal:NgbActiveModal){}\r\n\r\n}\r\n","<div class=\"header mb-5\" >\r\n Delete layout\r\n</div>\r\n<div class=\"description mb-4\">\r\n Are you sure you want to delete this layout? Please note that deleting this layout will also remove all associated unpublished VM and PID’s.\r\n</div>\r\n<div class=\"description mb-7\">\r\n This action cannot be undone.\r\n</div>\r\n<div class=\"d-flex align-items-center justify-content-end\">\r\n <button class=\"btn btn-outline bg-white me-5\" (click)=\"modal.close()\" >Cancel</button>\r\n <button class=\"btn btn-sm btn-danger\" (click)=\"modal.close({message:'confirm'})\">Delete</button>\r\n</div>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostListener, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { StoreBuilderService } from '../../services/store-builder.service';\r\n \r\n@Component({\r\n selector: 'lib-select-plano',\r\n templateUrl: './custom-select.component.html',\r\n styleUrl: './custom-select.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CustomSelectComponent implements OnChanges, OnInit {\r\n \r\n @HostListener('document:click', ['$event'])\r\n onClick(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n if (!target.closest('.dropdown')) {\r\n this.showDropdown = false;\r\n }\r\n }\r\n \r\n @Input() items: any\r\n @Input() searchField: string\r\n @Input() multi: boolean\r\n @Input() idField: string\r\n @Input() selectedValues: any = []\r\n @Input() disabled: boolean | undefined\r\n @Input() label: string\r\n \r\n @Output() selected = new EventEmitter<any>()\r\n filteredValues: any = []\r\n showDropdown: boolean\r\n searchValue: string\r\n instanceId: any;\r\n \r\n \r\n constructor(private cd: ChangeDetectorRef, private authService:StoreBuilderService) { }\r\n ngOnInit(): void {\r\n this.instanceId = crypto.randomUUID();\r\n this.authService.dropDownTrigger.subscribe((e)=>{ \r\n if(e !== this.instanceId){ \r\n this.showDropdown = false\r\n this.cd.detectChanges()\r\n }\r\n })\r\n }\r\n \r\n ngOnChanges(changes: SimpleChanges): void {\r\n \r\n if (changes['items'] && this.items?.length) {\r\n this.initializeItems();\r\n }\r\n if (changes['selectedValues'] && Array.isArray(changes['selectedValues']?.currentValue) && changes['selectedValues']?.currentValue?.length > 0 && changes['selectedValues']?.currentValue[0]) { \r\n this.updateSelectedValues();\r\n }\r\n }\r\n \r\n initializeItems() {\r\n this.filteredValues = this.items.map((item: any) => ({ ...item }));\r\n this.updateSelectedValues()\r\n }\r\n \r\n updateSelectedValues() { \r\n this.selectedValues?.forEach((selectedItem: any) => {\r\n const item = this.filteredValues?.find((filteredItem: any) => filteredItem?.[this.idField] === selectedItem?.[this.idField]);\r\n if (item) {\r\n item.isSelected = true;\r\n }\r\n });\r\n \r\n }\r\n \r\n openDropdown(event: any) {\r\n this.authService.dropDownTrigger.next(this.instanceId)\r\n event.stopPropagation();\r\n this.showDropdown = !this.showDropdown;\r\n }\r\n \r\n onInput(event: any) {\r\n if (!event.target.value) {\r\n this.filteredValues = [...this.items];\r\n } else {\r\n const searchTerm = event.target.value.toLowerCase();\r\n this.filteredValues = this.items.filter((item: any) =>\r\n item[this.searchField].toLowerCase().includes(searchTerm)\r\n );\r\n }\r\n this.updateSelectedValues();\r\n this.cd.detectChanges();\r\n }\r\n \r\n onSelect(event: any, item: any) { \r\n if (this.multi) {\r\n if (event.currentTarget.checked) {\r\n this.selectedValues.push(item ); \r\n } else {\r\n this.selectedValues = this.selectedValues.filter((elem: any) => elem[this.idField] !== item[this.idField]);\r\n }\r\n } else {\r\n this.selectedValues = [{ ...item }];\r\n this.filteredValues.forEach((element:any) => {\r\n if(element[this.idField] !== item[this.idField]){\r\n element.isSelected = false\r\n }\r\n });\r\n this.showDropdown = false;\r\n }\r\n \r\n const valuesToEmit = this.selectedValues.map((value: any) => {\r\n const selectedItem = { ...value };\r\n delete selectedItem.isSelected;\r\n return selectedItem;\r\n });\r\n \r\n this.cd.detectChanges();\r\n this.emitSelectedValues(valuesToEmit);\r\n \r\n }\r\n \r\n onSelectAll(event: any) {\r\n const selectAll = event.currentTarget.checked;\r\n this.filteredValues.forEach((item: any) => item.isSelected = selectAll);\r\n \r\n if (selectAll) {\r\n this.selectedValues = [...this.filteredValues];\r\n } else {\r\n this.selectedValues = [];\r\n }\r\n \r\n const valuesToEmit = this.selectedValues.map((value: any) => {\r\n const { isSelected, ...selectedItem } = value;\r\n return selectedItem;\r\n });\r\n \r\n this.cd.detectChanges();\r\n this.emitSelectedValues(valuesToEmit);\r\n }\r\n \r\n \r\n emitSelectedValues(values: any[]) {\r\n if (this.multi) {\r\n this.selected.emit(values);\r\n } else {\r\n this.selected.emit(values[0]);\r\n }\r\n }\r\n \r\n checkIfAllSelected() {\r\n return this.filteredValues.every((item: any) => item.isSelected);\r\n }\r\n}","<div class=\"outer-container\">\r\n <div [ngClass]=\"disabled ? 'disable-input':''\" (click)=\"openDropdown($event)\" class=\"form-select\">\r\n <ng-container *ngIf=\"multi\" >\r\n {{selectedValues?.length}} {{label}} Selected \r\n </ng-container>\r\n <ng-container *ngIf=\"!multi\" >\r\n {{selectedValues?.[0]?.[searchField]}}\r\n </ng-container>\r\n </div>\r\n <div [ngClass]=\"showDropdown ? '' : 'd-none'\" class=\"input-container dropdown\" >\r\n <div class=\"w-100 input-wrapper\">\r\n <input [(ngModel)]=\"searchValue\" placeholder=\"Search\" (input)=\"onInput($event)\" type=\"text\"> \r\n <svg class=\"search-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\">\r\n <path d=\"M14 14.5L11.1 11.6M12.6667 7.83333C12.6667 10.7789 10.2789 13.1667 7.33333 13.1667C4.38781 13.1667 2 10.7789 2 7.83333C2 4.88781 4.38781 2.5 7.33333 2.5C10.2789 2.5 12.6667 4.88781 12.6667 7.83333Z\" stroke=\"#667085\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> \r\n </div>\r\n <ul>\r\n <li *ngIf=\"multi && filteredValues?.length\">\r\n <label class=\"form-check\" for=\"selectAll\">\r\n <input (change)=\"onSelectAll($event)\" [checked]=\"checkIfAllSelected()\" class=\"form-check-input me-3\" type=\"checkbox\"\r\n id=\"selectAll\">\r\n <span class=\"form-check-label\" >\r\n Select All\r\n </span>\r\n </label>\r\n </li>\r\n <li *ngFor=\"let item of filteredValues\" [ngClass]=\"item.isSelected && !multi ? 'selected' : ''\" >\r\n <label [for]=\"item[idField] + instanceId\" [ngClass]=\"multi ? '': 'ps-0'\" class=\"form-check\">\r\n <input [ngClass]=\"multi ? '': 'd-none'\" (change)=\"onSelect($event, item)\" [(ngModel)]=\"item.isSelected\" class=\"form-check-input me-3\" type=\"checkbox\" value=\"\"\r\n [id]=\"item[idField] + instanceId\">\r\n <span class=\"form-check-label\" >\r\n {{item[searchField]}}\r\n </span>\r\n </label>\r\n </li>\r\n <li *ngIf=\"!filteredValues?.length\" >\r\n <span class=\"d-flex align-items-center justify-content-center\" >No data found</span>\r\n </li>\r\n </ul> \r\n </div> \r\n \r\n</div>","import { FormControl } from '@angular/forms';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { StoreBuilderService } from '../../services/store-builder.service';\r\nimport { HeaderFilter } from '../../interfaces/layout-builder.interface';\r\nimport { NgbModal, NgbOffcanvas } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ChangeDetectorRef, Component, ElementRef, HostListener, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core';\r\nimport { StoreOffcanvasComponentComponent } from '../store-offcanvas-component/store-offcanvas-component.component';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { AddFloorComponent } from './popups/add-floor/add-floor.component';\r\nimport { ClearAllStepsComponent } from './popups/clear-all-steps/clear-all-steps.component';\r\nimport { DeleteLayoutComponent } from './popups/delete-layout/delete-layout.component';\r\nimport * as XLSX from 'xlsx';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'lib-create-layout',\r\n templateUrl: './create-layout.component.html',\r\n styleUrl: './create-layout.component.scss'\r\n})\r\nexport class CreateLayoutComponent implements OnInit, OnDestroy {\r\n floorsInput = new FormControl()\r\n @ViewChild('gridCanvas', { static: true }) canvasRef!: ElementRef<HTMLCanvasElement>;\r\n @ViewChild('widgetCanvas', { static: false }) widgetCanvasRef!: ElementRef<HTMLCanvasElement>;\r\n @ViewChild('scrollContainer') scrollContainerRef!: ElementRef;\r\n\r\n\r\n gridWidth = 1;\r\n gridHeight = 1;\r\n\r\n private ctx!: CanvasRenderingContext2D;\r\n private canvas!: HTMLCanvasElement;\r\n\r\n private widgetCtx!: CanvasRenderingContext2D;\r\n private widgetCanvas!: HTMLCanvasElement;\r\n\r\n elementType: 'wall' | 'facade' | 'opening' | 'entrance' = 'wall'\r\n layoutPolygon: any[] = [[\r\n {\r\n \"x\": 100,\r\n \"y\": 100\r\n },\r\n {\r\n \"x\": 100,\r\n \"y\": 100\r\n },\r\n {\r\n \"elementType\": \"wall\",\r\n \"distance\": 0,\r\n \"unit\": \"ft\",\r\n \"direction\": \"right\",\r\n \"angle\": 90,\r\n \"elementNumber\": 1\r\n }\r\n ]]\r\n\r\n popupVisible = false;\r\n popupPosition: any = { x: 100, y: 100 };\r\n selectedLine: any\r\n selectedLineIndex: number | null\r\n movePixels = 0;\r\n moveAngle = 0;\r\n unit: 'ft' = 'ft'\r\n moveDirection: 'left' | 'right' | 'up' | 'down' = 'right';\r\n\r\n layoutMode: 'full' | 'half' = 'half'\r\n\r\n elementSelect: { show: boolean, index: number } = { show: false, index: 0 }\r\n directionSelect: { show: boolean, index: number } = { show: false, index: 0 }\r\n lineOptionsSelect: { show: boolean, index: number } = { show: false, index: 0 }\r\n widgetElementSelect: { show: boolean } = { show: false }\r\n layoutOptionSelect: { show: boolean, } = { show: false }\r\n floorSelect: { show: boolean, deleteIndex: number | null } = { show: false, deleteIndex: null }\r\n\r\n private scale = 1;\r\n panOffset = { x: 0, y: 0 };\r\n\r\n\r\n breakpoints: number[] = [0, 360];\r\n @ViewChild('circle') circleRef!: ElementRef;\r\n @ViewChild('pointer') pointerRef!: ElementRef;\r\n\r\n lines: { transform: string; highlight: boolean; invisible: boolean }[] = [];\r\n private minAngle!: number;\r\n private maxAngle!: number;\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n headerData: HeaderFilter | null | undefined;\r\n\r\n planoStoreList: any[] = []\r\n selectedStore: any\r\n selectedFloor: any\r\n\r\n undoStack: any[] = [];\r\n redoStack: any[] = [];\r\n\r\n planoIds: string[] = []\r\n\r\n itemsPerPage = 1\r\n currentPage = 0\r\n totalItems = 1\r\n paginationSizes = [1]\r\n pageSize = 1\r\n\r\n pixelPerMetre: number = 50\r\n\r\n cumulativeRotation = 0\r\n\r\n\r\n\r\n onPageChange(val: number) {\r\n this.selectedStore = this.planoStoreList[val - 1];\r\n this.selectedFloor = this.selectedStore.floor[0];\r\n this.floorsInput.setValue(this.selectedFloor.id, { emitEvent: false });\r\n this.generateLayoutPolygon(this.selectedFloor.layoutPolygon);\r\n this.redoStack = [];\r\n this.undoStack = [];\r\n }\r\n\r\n saveStateToUndo(): void {\r\n this.undoStack.push(JSON.parse(JSON.stringify(this.layoutPolygon)));\r\n }\r\n\r\n undo(): void {\r\n if (this.undoStack.length > 0) {\r\n this.redoStack.push(JSON.parse(JSON.stringify(this.layoutPolygon)));\r\n\r\n this.layoutPolygon = this.undoStack.pop();\r\n\r\n this.redrawCanvas()\r\n }\r\n }\r\n\r\n redo(): void {\r\n if (this.redoStack.length > 0) {\r\n this.undoStack.push(JSON.parse(JSON.stringify(this.layoutPolygon)));\r\n\r\n this.layoutPolygon = this.redoStack.pop();\r\n\r\n this.redrawCanvas()\r\n }\r\n }\r\n\r\n constructor(private cd: ChangeDetectorRef, private renderer: Renderer2, private route: ActivatedRoute,\r\n private apiService: StoreBuilderService, private router: Router, private offcanvasService: NgbOffcanvas, private toastService: ToastService, private modalDef: NgbModal) {\r\n this.headerData = JSON.parse(localStorage.getItem('header-filters') as string)\r\n }\r\n\r\n initializeLayout() {\r\n const centerX = this.canvas.width / 2 / this.scale;\r\n const centerY = this.canvas.height / 2 / this.scale;\r\n\r\n this.layoutPolygon = [\r\n [\r\n {\r\n \"x\": this.snapToGrid(centerX, this.gridHeight),\r\n \"y\": this.snapToGrid(centerY, this.gridWidth)\r\n },\r\n {\r\n \"x\": this.snapToGrid(centerX, this.gridHeight),\r\n \"y\": this.snapToGrid(centerY, this.gridWidth)\r\n },\r\n {\r\n \"elementType\": \"wall\",\r\n \"distance\": 0,\r\n \"unit\": \"ft\",\r\n \"direction\": \"right\",\r\n \"angle\": 90,\r\n \"elementNumber\": 1\r\n }\r\n ]\r\n ]\r\n this.openWidget({\r\n \"x\": this.snapToGrid(centerX, this.gridHeight),\r\n \"y\": this.snapToGrid(centerY, this.gridWidth)\r\n })\r\n }\r\n\r\n ngOnInit(): void {\r\n this.canvas = this.canvasRef.nativeElement;\r\n this.ctx = this.canvas.getContext('2d')!;\r\n\r\n this.canvas.width = 10000;\r\n this.canvas.height = 10000;\r\n\r\n this.drawGrid();\r\n\r\n this.canvas.addEventListener('mousedown', this.onMouseDown.bind(this));\r\n this.canvas.addEventListener('mousemove', this.onMouseMove.bind(this));\r\n\r\n this.minAngle = Math.min(...this.breakpoints);\r\n this.maxAngle = Math.max(...this.breakpoints);\r\n\r\n for (let i = 0; i < 360; i += 45) {\r\n this.lines.push({\r\n transform: `rotate(${i}deg)`,\r\n highlight: false,\r\n invisible: i < this.minAngle || i > this.maxAngle\r\n });\r\n }\r\n\r\n this.route.queryParams\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((params) => {\r\n if (params?.id) {\r\n this.planoIds = params.id.split(',') || [];\r\n this.getPlanoData()\r\n }\r\n });\r\n\r\n\r\n }\r\n\r\n onFloorSelect(floorId: string) {\r\n if (this.layoutPolygon[0][0].x !== this.layoutPolygon[0][1].x && this.layoutPolygon[0][0].y !== this.layoutPolygon[0][1].y) {\r\n this.updateFloorLayout()\r\n }\r\n this.selectedFloor = this.selectedStore.floor.filter((floor: any) => floor.id === floorId)[0]\r\n this.generateLayoutPolygon(this.selectedFloor.layoutPolygon)\r\n this.redoStack = []\r\n this.undoStack = []\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 onStoreChange(event: any) {\r\n if (this.layoutPolygon[0][0].x !== this.layoutPolygon[0][1].x && this.layoutPolygon[0][0].y !== this.layoutPolygon[0][1].y) {\r\n this.updateFloorLayout()\r\n }\r\n const index = this.planoStoreList.findIndex(item => item.planoId === event.planoId);\r\n this.currentPage = index + 1\r\n this.selectedStore = event;\r\n this.selectedFloor = this.selectedStore.floor[0];\r\n this.floorsInput.setValue(this.selectedFloor.id, { emitEvent: false });\r\n this.generateLayoutPolygon(this.selectedFloor.layoutPolygon);\r\n this.redoStack = [];\r\n this.undoStack = [];\r\n }\r\n\r\n openOffCanva() {\r\n let canvaRef = this.offcanvasService.open(StoreOffcanvasComponentComponent, { position: 'end', panelClass: 'set-height' })\r\n canvaRef.componentInstance.store = this.selectedStore;\r\n canvaRef.componentInstance.clientId = this.headerData?.client;\r\n canvaRef.componentInstance.id = this.selectedStore.planoId;\r\n }\r\n\r\n getPlanoData() {\r\n const payload = {\r\n id: this.planoIds\r\n }\r\n\r\n this.apiService.getPlano(payload).subscribe({\r\n next: (res: any) => {\r\n this.planoStoreList = res.data\r\n this.totalItems = res.data.length\r\n if (!this.selectedStore) {\r\n this.selectedStore = this.planoStoreList[0]\r\n } else {\r\n this.selectedStore = this.planoStoreList.filter((store: any) => store.planoId === this.selectedStore.planoId)[0]\r\n }\r\n if (!this.selectedFloor) {\r\n this.selectedFloor = this.selectedStore.floor[0]\r\n } else {\r\n this.selectedFloor = this.selectedStore.floor.filter((floor: any) => floor.id === this.selectedFloor.id)[0]\r\n if (!this.selectedFloor) {\r\n this.selectedFloor = this.selectedStore.floor[0]\r\n }\r\n }\r\n\r\n this.floorsInput.setValue(this.selectedFloor.id, { emitEvent: false })\r\n this.generateLayoutPolygon(this.selectedFloor.layoutPolygon)\r\n },\r\n error: (err) => {\r\n console.log(err)\r\n }\r\n })\r\n }\r\n\r\n updateFloorLayout() {\r\n const payload = {\r\n id: this.selectedFloor.id,\r\n layoutPolygon: this.layoutPolygon.map((segment) => {\r\n const [point1, point2, properties] = segment\r\n return properties\r\n }),\r\n status: 'draft'\r\n }\r\n\r\n this.apiService.updateFloorLayout(payload).subscribe({\r\n next: (res: any) => {\r\n if (res.code === 200) {\r\n this.getPlanoData()\r\n this.toastService.getSuccessToast(res.message)\r\n }\r\n },\r\n error: (err) => {\r\n console.log(err)\r\n }\r\n })\r\n }\r\n\r\n deleteFloor(index: number) {\r\n\r\n this.floorSelect = {\r\n show: !this.floorSelect.show,\r\n deleteIndex: null\r\n };\r\n\r\n const modelRef = this.modalDef.open(DeleteLayoutComponent, { centered: true });\r\n modelRef.result.then((val: any) => {\r\n if (val.message === 'confirm') {\r\n const payload = {\r\n id: this.selectedStore.floor[index].id,\r\n }\r\n \r\n this.apiService.deleteFloor(payload).subscribe({\r\n next: (res: any) => {\r\n if (res.code === 200) {\r\n this.getPlanoData()\r\n this.toastService.getSuccessToast(res.message)\r\n }\r\n },\r\n error: (err) => {\r\n console.log(err)\r\n }\r\n })\r\n }\r\n })\r\n\r\n }\r\n\r\n addFloor(planoId: string, floorCount: number) {\r\n const payload = {\r\n id: planoId,\r\n floorNumber: floorCount\r\n };\r\n\r\n this.apiService.addFloor(payload).subscribe({\r\n next: (res: any) => {\r\n if (res.code === 200) {\r\n this.getPlanoData()\r\n this.toastService.getSuccessToast(res.message)\r\n }\r\n },\r\n error: (err) => {\r\n console.log(err)\r\n }\r\n })\r\n }\r\n\r\n onSaveAsDraft() {\r\n if (this.layoutPolygon.length === 1 && this.layoutPolygon[0][0].x === this.layoutPolygon[0][1].x && this.layoutPolygon[0][0].y === this.layoutPolygon[0][1].y) {\r\n return\r\n }\r\n\r\n this.updateFloorLayout()\r\n\r\n }\r\n\r\n onConfigure() {\r\n if (this.planoStoreList.length === 1) {\r\n for (let index = 0; index < this.selectedStore.floor.length; index++) {\r\n let layoutInstruction\r\n if (this.selectedStore.floor[index].id === this.selectedFloor.id) {\r\n layoutInstruction = this.layoutPolygon.map((line) => {\r\n const [stert, end, properties] = line\r\n return properties\r\n })\r\n } else {\r\n layoutInstruction = this.selectedStore.floor[index].layoutPolygon\r\n }\r\n if (!this.isFloorCompleted(layoutInstruction)) {\r\n this.toastService.getErrorToast(`Please complete ${this.selectedStore.floor[index].floorName}`)\r\n return\r\n }\r\n }\r\n } else if (this.planoStoreList.length > 1) {\r\n for (let i = 0; i < this.planoStoreList.length; i++) {\r\n for (let j = 0; j < this.planoStoreList[i].floor.length; j++) {\r\n let layoutInstruction\r\n if (this.planoStoreList[i].floor[j].id === this.selectedFloor.id) {\r\n layoutInstruction = this.layoutPolygon.map((line) => {\r\n const [stert, end, properties] = line\r\n return properties\r\n })\r\n } else {\r\n layoutInstruction = this.planoStoreList[i].floor[j].layoutPolygon\r\n }\r\n if (!this.isFloorCompleted(layoutInstruction)) {\r\n this.toastService.getErrorToast(`Please complete ${this.planoStoreList[i].floor[j].floorName} of ${this.planoStoreList[i].storeName}`)\r\n return\r\n }\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n this.updateFloorLayout()\r\n this.router.navigate(['/manage/planogram/layout-builder/summary'], {\r\n queryParamsHandling: 'merge'\r\n });\r\n\r\n }\r\n\r\n drawWidgetRing() {\r\n this.widgetCanvas = this.widgetCanvasRef.nativeElement;\r\n this.widgetCtx = this.widgetCanvas.getContext('2d')!;\r\n\r\n this.widgetCanvas.width = 229;\r\n this.widgetCanvas.height = 229;\r\n this.widgetCtx.clearRect(0, 0, this.widgetCanvas.width, this.widgetCanvas.height);\r\n\r\n const direction: any = this.moveDirection\r\n const centerX = this.widgetCanvas.width / 2;\r\n const centerY = this.widgetCanvas.height / 2;\r\n const outerRadius = 114.5;\r\n const innerRadius = 85;\r\n\r\n this.widgetCtx.beginPath();\r\n this.widgetCtx.arc(centerX, centerY, outerRadius, 0, Math.PI * 2);\r\n this.widgetCtx.fillStyle = '#F9FAFB';\r\n this.widgetCtx.fill();\r\n\r\n this.widgetCtx.globalCompositeOperation = 'destination-out';\r\n this.widgetCtx.beginPath();\r\n this.widgetCtx.arc(centerX, centerY, innerRadius, 0, Math.PI * 2);\r\n this.widgetCtx.fill();\r\n\r\n this.widgetCtx.globalCompositeOperation = 'source-over';\r\n\r\n this.widgetCtx.beginPath();\r\n let startAngle, endAngle, color;\r\n switch (direction) {\r\n case 'down':\r\n startAngle = 0;\r\n endAngle = Math.PI;\r\n color = '#EAF7FF';\r\n break;\r\n case 'up':\r\n startAngle = Math.PI;\r\n endAngle = Math.PI * 2;\r\n color = '#EAF7FF';\r\n break;\r\n case 'right':\r\n startAngle = Math.PI * 1.5;\r\n endAngle = Math.PI * 0.5;\r\n color = '#EAF7FF';\r\n break;\r\n case 'left':\r\n startAngle = Math.PI * 0.5;\r\n endAngle = Math.PI * 1.5;\r\n color = '#EAF7FF';\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n this.widgetCtx.moveTo(centerX, centerY);\r\n this.widgetCtx.arc(centerX, centerY, outerRadius, startAngle, endAngle);\r\n this.widgetCtx.lineTo(centerX, centerY);\r\n this.widgetCtx.fillStyle = color;\r\n this.widgetCtx.fill();\r\n\r\n this.widgetCtx.globalCompositeOperation = 'destination-out';\r\n this.widgetCtx.beginPath();\r\n this.widgetCtx.arc(centerX, centerY, innerRadius, 0, Math.PI * 2);\r\n this.widgetCtx.fill();\r\n\r\n this.widgetCtx.globalCompositeOperation = 'source-over';\r\n }\r\n\r\n private updateWidgetPointer(): void {\r\n let angle: number;\r\n switch (this.moveDirection) {\r\n case 'right':\r\n angle = 0 + this.moveAngle;\r\n break;\r\n case 'down':\r\n angle = 90 + this.moveAngle;\r\n break;\r\n case 'left':\r\n angle = 180 + this.moveAngle;\r\n break;\r\n case 'up':\r\n angle = 270 + this.moveAngle;\r\n break;\r\n default:\r\n return;\r\n }\r\n const pointer = this.pointerRef?.nativeElement;\r\n this.renderer.setStyle(pointer, 'transform', `rotate(${angle}deg)`);\r\n\r\n this.lines.forEach((line) => {\r\n const lineAngle = parseInt(line.transform.replace('rotate(', ''), 10);\r\n line.highlight = angle >= lineAngle && angle >= this.minAngle && lineAngle <= this.maxAngle;\r\n });\r\n\r\n\r\n }\r\n\r\n\r\n drawGrid(): void {\r\n this.ctx.save();\r\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n\r\n this.ctx.scale(this.scale, this.scale);\r\n this.ctx.translate(this.panOffset.x, this.panOffset.y);\r\n\r\n\r\n // for (let x = 0; x <= this.canvas.width; x += this.gridWidth) {\r\n // for (let y = 0; y <= this.canvas.height; y += this.gridHeight) {\r\n // this.ctx.beginPath();\r\n // this.ctx.arc(x, y, 1, 0, Math.PI * 2);\r\n // this.ctx.fillStyle = 'rgba(0, 0, 0, 0.3)';\r\n // this.ctx.fill();\r\n // }\r\n // }\r\n\r\n this.ctx.restore();\r\n }\r\n\r\n drawPolygon(polygon = this.layoutPolygon) {\r\n if (polygon.length < 1) return; // If the polygon has no edges, exit early.\r\n\r\n this.ctx.save(); // Save the current canvas state.\r\n this.ctx.scale(this.scale, this.scale); // Scale the canvas context to match the desired scale.\r\n this.ctx.translate(this.panOffset.x, this.panOffset.y);\r\n\r\n\r\n // Function to draw an arrowhead at a specific location and angle.\r\n function drawArrowhead(ctx: any, x: any, y: any, angle: any) {\r\n const size = 5; // Define the size of the arrowhead.\r\n ctx.save(); // Save the current canvas state.\r\n ctx.translate(x, y); // Move the context to the arrowhead position.\r\n ctx.rotate(angle); // Rotate the context to match the arrow's angle.\r\n ctx.beginPath(); // Start a new path.\r\n ctx.moveTo(0, 0); // Move to the tip of the arrowhead.\r\n ctx.lineTo(-size, -size / 2); // Draw one side of the arrowhead.\r\n ctx.lineTo(-size, size / 2); // Draw the other side of the arrowhead.\r\n ctx.closePath(); // Close the arrowhead path.\r\n ctx.fillStyle = 'black'; // Set the arrowhead color.\r\n ctx.fill(); // Fill the arrowhead.\r\n ctx.restore(); // Restore the previous canvas state.\r\n }\r\n\r\n this.ctx.beginPath(); // Begin the main polygon path.\r\n polygon.forEach((edge, edgeIndex) => {\r\n const point = edge[0]; // Starting point of the edge.\r\n const nextPoint = edge[1]; // Ending point of the edge.\r\n const properties = edge[2]; // Properties of the edge (e.g., labels, distances).\r\n\r\n // Draw the main polygon edge.\r\n if (edgeIndex === 0) this.ctx.moveTo(point.x, point.y); // Move to the first edge starting point.\r\n this.ctx.lineTo(nextPoint.x, nextPoint.y); // Draw a line to the next point.\r\n\r\n // Calculate the perpendicular offset for the bounding box.\r\n const dx = nextPoint.x - point.x; // X-difference between start and end points.\r\n const dy = nextPoint.y - point.y; // Y-difference between start and end points.\r\n const length = Math.sqrt(dx * dx + dy * dy); // Length of the edge.\r\n const offsetX = (dy / length) * 20; // Offset in the X direction.\r\n const offsetY = (-dx / length) * 20; // Offset in the Y direction.\r\n\r\n // Define the bounding box points.\r\n const boxPoints = [\r\n { x: point.x, y: point.y },\r\n { x: nextPoint.x, y: nextPoint.y },\r\n { x: nextPoint.x + offsetX, y: nextPoint.y + offsetY },\r\n { x: point.x + offsetX, y: point.y + offsetY },\r\n ];\r\n\r\n // Draw the bounding box.\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(boxPoints[0].x, boxPoints[0].y);\r\n boxPoints.forEach((pt, index) => {\r\n if (properties.elementType === 'entrance') {\r\n if (index < 2) {\r\n this.ctx.lineTo(pt.x, pt.y)\r\n }\r\n } else {\r\n this.ctx.lineTo(pt.x, pt.y); // Draw each edge of the box.\r\n }\r\n });\r\n if (properties.elementType === 'opening') {\r\n this.ctx.closePath(); // Close the bounding box path.\r\n this.ctx.fillStyle = '#F9FAFB'; // Set a translucent fill color.\r\n this.ctx.fill(); // Fill the bounding box.\r\n\r\n this.selectedLineIndex === edgeIndex ? this.ctx.strokeStyle = '#008EDF' : this.ctx.strokeStyle = '#F9FAFB'\r\n\r\n this.ctx.stroke(); // Draw the bounding box border. \r\n } else {\r\n this.ctx.closePath(); // Close the bounding box path.\r\n this.ctx.fillStyle = '#F9FAFB'; // Set a translucent fill color.\r\n this.ctx.fill(); // Fill the bounding box.\r\n this.selectedLineIndex === edgeIndex ? this.ctx.strokeStyle = '#008EDF' : this.ctx.strokeStyle = '#1D2939'\r\n this.ctx.stroke(); // Draw the bounding box border. \r\n }\r\n\r\n\r\n // Position text in the middle of the bounding box.\r\n const textX = (boxPoints[1].x + boxPoints[3].x) / 2;\r\n const textY = (boxPoints[1].y + boxPoints[3].y) / 2;\r\n\r\n this.ctx.save(); // Save the current canvas state.\r\n this.ctx.translate(textX, textY); // Move the context to the text position.\r\n\r\n // Rotate text based on the edge direction.\r\n if (dx === 0) {\r\n this.ctx.rotate(-Math.PI / 2); // Rotate for vertical edges.\r\n } else if (dy !== 0) {\r\n const angle = Math.atan2(dy, dx); // Calculate angle for diagonal edges.\r\n this.ctx.rotate(angle); // Rotate the text to match the angle.\r\n }\r\n\r\n // Draw the edge properties as text.\r\n this.ctx.font = '12px Arial'; // Set the font style and size.\r\n this.ctx.fillStyle = 'black'; // Set the text color.\r\n this.ctx.textAlign = 'center'; // Align text to the center.\r\n this.ctx.textBaseline = 'middle'; // Align text vertically in the middle.\r\n this.ctx.fillText(\r\n `${properties.elementType} ${properties.elementNumber} - ${properties.distance} ${properties.unit}`,\r\n 0,\r\n 0\r\n );\r\n this.ctx.restore(); // Restore the previous canvas state.\r\n\r\n if (properties.distance >= 4) {\r\n // Define the midpoints of the left and right edges of the bounding box.\r\n const centerX = textX;\r\n const centerY = textY;\r\n const rightX = (boxPoints[1].x + boxPoints[2].x) / 2;\r\n const rightY = (boxPoints[1].y + boxPoints[2].y) / 2;\r\n const leftX = (boxPoints[0].x + boxPoints[3].x) / 2;\r\n const leftY = (boxPoints[0].y + boxPoints[3].y) / 2;\r\n\r\n // Helper function to adjust points by a specific distance.\r\n function adjustPoint(x1: any, y1: any, x2: any, y2: any, distance: any) {\r\n const angle = Math.atan2(y2 - y1, x2 - x1); // Calculate the angle.\r\n return {\r\n x: x1 + Math.cos(angle) * distance, // Adjust X by distance.\r\n y: y1 + Math.sin(angle) * distance, // Adjust Y by distance.\r\n };\r\n }\r\n\r\n // Define the arrow line start and end points for the right side.\r\n const rightStart = adjustPoint(centerX, centerY, rightX, rightY, 50);\r\n const rightEnd = adjustPoint(rightX, rightY, centerX, centerY, 10);\r\n\r\n // Define the arrow line start and end points for the left side.\r\n const leftStart = adjustPoint(centerX, centerY, leftX, leftY, 50);\r\n const leftEnd = adjustPoint(leftX, leftY, centerX, centerY, 10);\r\n\r\n // Draw the right arrow.\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(rightStart.x, rightStart.y);\r\n this.ctx.lineTo(rightEnd.x, rightEnd.y);\r\n this.ctx.strokeStyle = 'black'; // Set the arrow line color.\r\n this.ctx.stroke(); // Draw the arrow line.\r\n let rightAngle = Math.atan2(rightEnd.y - rightStart.y, rightEnd.x - rightStart.x);\r\n drawArrowhead(this.ctx, rightEnd.x, rightEnd.y, rightAngle); // Draw the arrowhead.\r\n\r\n // Draw the left arrow.\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(leftStart.x, leftStart.y);\r\n this.ctx.lineTo(leftEnd.x, leftEnd.y);\r\n this.ctx.strokeStyle = 'black'; // Set the arrow line color.\r\n this.ctx.stroke(); // Draw the arrow line.\r\n let leftAngle = Math.atan2(leftEnd.y - leftStart.y, leftEnd.x - leftStart.x);\r\n drawArrowhead(this.ctx, leftEnd.x, leftEnd.y, leftAngle); // Draw the arrowhead.\r\n\r\n }\r\n\r\n // For Entrance\r\n if (properties.elementType === 'entrance') {\r\n // Calculate the angle of the main line (edge) in radians.\r\n const angle = Math.atan2(nextPoint.y - point.y, nextPoint.x - point.x);\r\n\r\n // Add 15 degrees to the angle for the entrance line.\r\n const entranceAngle = angle + (15 * Math.PI) / 180; // Convert 15 degrees to radians.\r\n\r\n // Define the length of the entrance line.\r\n const lineLength = this.convertToPixels(properties.distance, properties.unit) * 0.75;\r\n\r\n // Calculate the endpoint of the entrance line based on the angle.\r\n const endPoint = {\r\n x: point.x + Math.cos(entranceAngle) * lineLength,\r\n y: point.y + Math.sin(entranceAngle) * lineLength,\r\n };\r\n\r\n // Draw the entrance line.\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(point.x, point.y);\r\n this.ctx.lineTo(endPoint.x, endPoint.y);\r\n this.selectedLineIndex === edgeIndex ? this.ctx.strokeStyle = '#008EDF' : this.ctx.strokeStyle = '#1D2939'\r\n this.ctx.stroke();\r\n }\r\n\r\n\r\n });\r\n\r\n this.ctx.restore(); // Restore the original canvas state.\r\n }\r\n\r\n @HostListener('wheel', ['$event'])\r\n onMouseWheel(event: WheelEvent) {\r\n if (event.ctrlKey) {\r\n event.preventDefault();\r\n const scaleFactor = event.deltaY < 0 ? 1.01 : 1 / 1.01;\r\n this.adjustZoom(event, scaleFactor);\r\n }\r\n }\r\n\r\n adjustZoom(event: MouseEvent, scaleFactor: number): void {\r\n const rect = this.canvas.getBoundingClientRect();\r\n\r\n const mouseX = (event.clientX - rect.left - this.panOffset.x) / this.scale;\r\n const mouseY = (event.clientY - rect.top - this.panOffset.y) / this.scale;\r\n\r\n this.scale *= scaleFactor;\r\n\r\n this.panOffset.x -= mouseX * (scaleFactor - 1) * this.scale;\r\n this.panOffset.y -= mouseY * (scaleFactor - 1) * this.scale;\r\n\r\n this.redrawCanvas();\r\n }\r\n\r\n resetZoom(): void {\r\n this.scale = 1;\r\n this.panOffset = { x: 0, y: 0 };\r\n this.redrawCanvas();\r\n }\r\n\r\n\r\n\r\n transformPoint(point: { x: number; y: number }): { x: number; y: number } {\r\n return {\r\n x: point.x * this.scale + this.panOffset.x,\r\n y: point.y * this.scale + this.panOffset.y,\r\n };\r\n }\r\n\r\n drawLine(ctx: CanvasRenderingContext2D, line: { x: number; y: number }[]): void {\r\n if (line.length < 2) return;\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(line[0].x, line[0].y);\r\n for (let i = 1; i < line.length; i++) {\r\n ctx.lineTo(line[i].x, line[i].y);\r\n }\r\n ctx.stroke();\r\n }\r\n\r\n\r\n\r\n\r\n redrawCanvas(): void {\r\n this.drawGrid();\r\n this.drawPolygon();\r\n }\r\n\r\n\r\n\r\n\r\n @HostListener('document:click', ['$event'])\r\n onOutsideClick(event: MouseEvent): void {\r\n const clickedInside1 = (event.target as HTMLElement).closest('.elipsis-icon-dropdown');\r\n if (!clickedInside1) {\r\n this.lineOptionsSelect = { show: false, index: 0 };\r\n }\r\n\r\n const clickedInside2 = (event.target as HTMLElement).closest('.direction-dropdown');\r\n if (!clickedInside2) {\r\n this.directionSelect = { show: false, index: 0 };\r\n }\r\n\r\n const clickedInside3 = (event.target as HTMLElement).closest('.element-type-dropdown');\r\n if (!clickedInside3) {\r\n this.elementSelect = { show: false, index: 0 };\r\n }\r\n\r\n const clickedInside4 = (event.target as HTMLElement).closest('.widget-element-type-dropdown');\r\n if (!clickedInside4) {\r\n this.widgetElementSelect = { show: false };\r\n }\r\n\r\n const clickedInside5 = (event.target as HTMLElement).closest('.top-elipsis-menu');\r\n if (!clickedInside5) {\r\n this.layoutOptionSelect = { show: false };\r\n }\r\n\r\n const clickedInside6 = (event.target as HTMLElement).closest('.floor-select');\r\n if (!clickedInside6) {\r\n this.floorSelect = { show: false, deleteIndex: null };\r\n }\r\n }\r\n\r\n toggleLineOptionsSelect(index: number): void {\r\n this.lineOptionsSelect = {\r\n show: this.lineOptionsSelect.index !== index || !this.lineOptionsSelect.show,\r\n index,\r\n };\r\n }\r\n\r\n toggleDirectionSelect(index: number): void {\r\n this.directionSelect = {\r\n show: this.directionSelect.index !== index || !this.directionSelect.show,\r\n index,\r\n };\r\n }\r\n\r\n toggleElementSelect(index: number): void {\r\n this.elementSelect = {\r\n show: this.elementSelect.index !== index || !this.elementSelect.show,\r\n index,\r\n };\r\n }\r\n\r\n toggleWidgetElementSelect(): void {\r\n this.widgetElementSelect = {\r\n show: !this.widgetElementSelect.show,\r\n };\r\n }\r\n\r\n toggleLayoutOptionSelect(): void {\r\n this.layoutOptionSelect = {\r\n show: !this.layoutOptionSelect.show,\r\n };\r\n }\r\n\r\n toggleFloorSelect(): void {\r\n this.floorSelect = {\r\n show: !this.floorSelect.show,\r\n deleteIndex: null\r\n };\r\n }\r\n\r\n\r\n drop(event: CdkDragDrop<any[]>) {\r\n\r\n this.saveStateToUndo()\r\n moveItemInArray(this.layoutPolygon, event.previousIndex, event.currentIndex);\r\n\r\n const instructions = this.layoutPolygon.map((segment) => {\r\n const [point1, point2, properties] = segment\r\n return properties\r\n })\r\n\r\n this.generateLayoutPolygon(instructions)\r\n this.redoStack = [];\r\n\r\n\r\n }\r\n\r\n\r\n snapToGrid(value: number, gridSize: number): number {\r\n return Math.round(value / gridSize) * gridSize;\r\n }\r\n\r\n isPointInPolygon(point: any, polygon: any[]): boolean {\r\n let { x, y } = point;\r\n let inside = false;\r\n\r\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\r\n const xi = polygon[i].x, yi = polygon[i].y;\r\n const xj = polygon[j].x, yj = polygon[j].y;\r\n\r\n const onEdge =\r\n (y - yi) * (xj - xi) === (x - xi) * (yj - yi) &&\r\n Math.min(xi, xj) <= x && x <= Math.max(xi, xj) &&\r\n Math.min(yi, yj) <= y && y <= Math.max(yi, yj);\r\n\r\n if (onEdge) {\r\n return true;\r\n }\r\n\r\n const intersect = ((yi > y) !== (yj > y)) &&\r\n (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\r\n if (intersect) inside = !inside;\r\n }\r\n\r\n return inside;\r\n }\r\n\r\n\r\n movePointWithAngle(): void {\r\n if (this.movePixels <= 0) return;\r\n\r\n this.saveStateToUndo()\r\n\r\n let radians: number;\r\n\r\n switch (this.moveDirection) {\r\n case 'up':\r\n radians = ((180 - this.moveAngle) * Math.PI) / 180;\r\n break;\r\n case 'left':\r\n radians = ((270 - this.moveAngle) * Math.PI) / 180;\r\n break;\r\n case 'down':\r\n radians = ((360 - this.moveAngle) * Math.PI) / 180;\r\n break;\r\n case 'right':\r\n radians = ((90 - this.moveAngle) * Math.PI) / 180;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n if (this.selectedLine) {\r\n const lineIndex = ((array1 = this.layoutPolygon, array2 = this.selectedLine) => {\r\n return array1.findIndex(innerArray =>\r\n innerArray.length === array2.length &&\r\n innerArray.every((item: any, index: any) => JSON.stringify(item) === JSON.stringify(array2[index]))\r\n );\r\n })();\r\n\r\n const [start, end, properties] = this.layoutPolygon[lineIndex];\r\n const newX = start.x + Math.cos(radians) * this.convertToPixels(this.movePixels, this.unit);\r\n const newY = start.y - Math.sin(radians) * this.convertToPixels(this.movePixels, this.unit);\r\n\r\n const snappedX = this.snapToGrid(newX, this.gridWidth);\r\n const snappedY = this.snapToGrid(newY, this.gridHeight);\r\n\r\n this.layoutPolygon[lineIndex][1].x = snappedX;\r\n this.layoutPolygon[lineIndex][1].y = snappedY;\r\n this.layoutPolygon[lineIndex][2].angle = this.moveAngle;\r\n this.layoutPolygon[lineIndex][2].direction = this.moveDirection;\r\n this.layoutPolygon[lineIndex][2].distance = this.movePixels;\r\n this.layoutPolygon[lineIndex][2].elementType = this.elementType;\r\n\r\n this.redrawCanvas()\r\n this.closeWidget()\r\n this.selectedLine = null\r\n\r\n } else {\r\n const lastLine = this.layoutPolygon[this.layoutPolygon.length - 1];\r\n const newX = lastLine[1].x + Math.cos(radians) * this.convertToPixels(this.movePixels, this.unit);\r\n const newY = lastLine[1].y - Math.sin(radians) * this.convertToPixels(this.movePixels, this.unit);\r\n\r\n const snappedX = this.snapToGrid(newX, this.gridWidth);\r\n const snappedY = this.snapToGrid(newY, this.gridHeight);\r\n\r\n const newPoint = { x: snappedX, y: snappedY };\r\n\r\n\r\n if (this.layoutPolygon.length > 0) {\r\n const lastPoint = lastLine[1];\r\n const firstPoint = this.layoutPolygon[0][0];\r\n\r\n\r\n if (newPoint.x === firstPoint.x && newPoint.y === firstPoint.y) {\r\n this.layoutPolygon.push([lastPoint, newPoint, { elementType: this.elementType, distance: this.movePixels, unit: this.unit, direction: this.moveDirection, angle: this.moveAngle, elementNumber: this.getMaxElementNumber(this.layoutPolygon, this.elementType) }]);\r\n this.closeWidget()\r\n\r\n } else if (\r\n !this.layoutPolygon.some(line =>\r\n (line[0].x === newPoint.x && line[0].y === newPoint.y) ||\r\n (line[1].x === newPoint.x && line[1].y === newPoint.y)\r\n )\r\n ) {\r\n if (this.layoutPolygon.length === 1 && this.layoutPolygon[0][0].x === this.layoutPolygon[0][1].x && this.layoutPolygon[0][0].y === this.layoutPolygon[0][1].y) {\r\n this.layoutPolygon[0] = [this.layoutPolygon[0][0], newPoint, { elementType: this.elementType, distance: this.movePixels, unit: this.unit, direction: this.moveDirection, angle: this.moveAngle, elementNumber: 1 }]\r\n } else {\r\n this.layoutPolygon.push([lastPoint, newPoint, { elementType: this.elementType, distance: this.movePixels, unit: this.unit, direction: this.moveDirection, angle: this.moveAngle, elementNumber: this.getMaxElementNumber(this.layoutPolygon, this.elementType) }]);\r\n }\r\n this.openWidget(newPoint)\r\n }\r\n }\r\n\r\n this.redoStack = [];\r\n\r\n this.cd.detectChanges();\r\n this.redrawCanvas()\r\n }\r\n\r\n\r\n }\r\n\r\n getMaxElementNumber(data: any, elementType: string) {\r\n if (!Array.isArray(data)) {\r\n throw new Error(\"Invalid data format: data should be an array.\");\r\n }\r\n\r\n return Math.round(data.reduce((maxNumber, segment) => {\r\n if (Array.isArray(segment)) {\r\n const element = segment.find(item => item.elementType === elementType);\r\n if (element && typeof element.elementNumber === 'number') {\r\n maxNumber = Math.max(maxNumber, element.elementNumber);\r\n }\r\n }\r\n return maxNumber;\r\n }, 0)) + 1;\r\n }\r\n\r\n onMouseDown(event: MouseEvent): void {\r\n const rect = this.canvas.getBoundingClientRect();\r\n const mouseX = event.clientX - rect.left;\r\n const mouseY = event.clientY - rect.top;\r\n\r\n\r\n for (const line of this.layoutPolygon) {\r\n const point = line[0];\r\n const nextPoint = line[1];\r\n\r\n const dx = nextPoint.x - point.x;\r\n const dy = nextPoint.y - point.y;\r\n const length = Math.sqrt(dx * dx + dy * dy);\r\n const offsetX = (dy / length) * 20;\r\n const offsetY = (-dx / length) * 20;\r\n\r\n const boxCorners = [\r\n { x: point.x, y: point.y },\r\n { x: nextPoint.x, y: nextPoint.y },\r\n { x: nextPoint.x + offsetX, y: nextPoint.y + offsetY },\r\n { x: point.x + offsetX, y: point.y + offsetY }\r\n ];\r\n\r\n if (this.isPointInPolygon({ x: mouseX, y: mouseY }, boxCorners)) {\r\n for (let i = 0; i < this.layoutPolygon.length; i++) {\r\n const [start, end, properties] = this.layoutPolygon[i];\r\n if (this.isLineEqual(start, end, boxCorners[0], boxCorners[1], 0)) {\r\n this.selectLine(line, i);\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.layoutPolygon.length === 1 && this.layoutPolygon[0][0].x === this.layoutPolygon[0][1].x && this.layoutPolygon[0][0].y === this.layoutPolygon[0][1].y) {\r\n return\r\n }\r\n\r\n this.selectedLine = null\r\n this.selectedLineIndex = null\r\n this.redrawCanvas()\r\n this.closeWidget()\r\n }\r\n\r\n\r\n selectLine(line: any, index: number) {\r\n const [start, end, properties] = line\r\n\r\n this.selectedLine = line\r\n this.selectedLineIndex = index\r\n this.elementType = properties.elementType\r\n this.movePixels = properties.distance\r\n this.moveDirection = properties.direction\r\n this.moveAngle = properties.angle\r\n this.unit = properties.unit\r\n this.openWidget(end)\r\n this.redrawCanvas()\r\n }\r\n\r\n openWidget(position: { x: number, y: number }, offset = { up: 0, right: 5, down: 15, left: 0, }) {\r\n this.popupVisible = true\r\n const adjustedPosition = {\r\n x: position.x + offset.right + offset.left,\r\n y: position.y + offset.up + offset.down,\r\n };\r\n\r\n this.popupPosition = adjustedPosition\r\n this.scrollToCanvasPosition(adjustedPosition)\r\n setTimeout(() => {\r\n this.drawWidgetRing()\r\n this.updateWidgetPointer()\r\n }, 500);\r\n\r\n }\r\n\r\n closeWidget() {\r\n this.popupVisible = false\r\n }\r\n\r\n onMouseMove(event: MouseEvent): void {\r\n const rect = this.canvas.getBoundingClientRect();\r\n const mouseX = event.clientX - rect.left;\r\n const mouseY = event.clientY - rect.top;\r\n\r\n let hoveredPolygonBox = this.layoutPolygon.some(line => {\r\n const point = line[0];\r\n const nextPoint = line[1];\r\n\r\n const dx = nextPoint.x - point.x;\r\n const dy = nextPoint.y - point.y;\r\n const length = Math.sqrt(dx * dx + dy * dy);\r\n const offsetX = (dy / length) * 20;\r\n const offsetY = (-dx / length) * 20;\r\n\r\n const boxCorners = [\r\n { x: point.x, y: point.y },\r\n { x: nextPoint.x, y: nextPoint.y },\r\n { x: nextPoint.x + offsetX, y: nextPoint.y + offsetY },\r\n { x: point.x + offsetX, y: point.y + offsetY }\r\n ];\r\n\r\n return this.isPointInPolygon({ x: mouseX, y: mouseY }, boxCorners);\r\n });\r\n\r\n\r\n this.canvas.style.cursor = hoveredPolygonBox ? 'pointer' : 'default';\r\n\r\n }\r\n\r\n\r\n drawLineWithLength(start: any, end: any): void {\r\n const midX = (start.x + end.x) / 2;\r\n const midY = (start.y + end.y) / 2;\r\n\r\n const distance = Math.sqrt(\r\n Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2)\r\n ).toFixed(0);\r\n\r\n const textSpacing = 10;\r\n let textX = midX;\r\n let textY = midY;\r\n\r\n if (start.y === end.y) {\r\n textY += textSpacing;\r\n } else if (start.x === end.x) {\r\n textX += textSpacing;\r\n } else {\r\n const angle = Math.atan2(end.y - start.y, end.x - start.x);\r\n textX += textSpacing * Math.cos(angle);\r\n textY += textSpacing * Math.sin(angle);\r\n }\r\n\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(start.x, start.y);\r\n this.ctx.lineTo(end.x, end.y);\r\n this.ctx.strokeStyle = 'black';\r\n this.ctx.stroke();\r\n\r\n this.ctx.save();\r\n if (start.y === end.y) {\r\n this.ctx.font = '12px Arial';\r\n this.ctx.fillStyle = 'black';\r\n this.ctx.fillText(`${distance}px`, textX, textY);\r\n } else if (start.x === end.x) {\r\n this.ctx.translate(textX, textY);\r\n this.ctx.rotate(-Math.PI / 2);\r\n this.ctx.font = '12px Arial';\r\n this.ctx.fillStyle = 'black';\r\n this.ctx.fillText(`${distance}px`, 0, 0);\r\n this.ctx.restore();\r\n } else {\r\n this.ctx.font = '12px Arial';\r\n this.ctx.fillStyle = 'black';\r\n this.ctx.fillText(`${distance}px`, textX, textY);\r\n }\r\n this.ctx.restore();\r\n }\r\n\r\n layoutLengthPreview() {\r\n if (this.layoutPolygon.length === 1 && this.layoutPolygon[0][0].x === this.layoutPolygon[0][1].x && this.layoutPolygon[0][0].y === this.layoutPolygon[0][1].y) {\r\n return\r\n }\r\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n let radians: number;\r\n switch (this.moveDirection) {\r\n case 'up':\r\n radians = ((180 - this.moveAngle) * Math.PI) / 180;\r\n break;\r\n case 'left':\r\n radians = ((270 - this.moveAngle) * Math.PI) / 180;\r\n break;\r\n case 'down':\r\n radians = ((360 - this.moveAngle) * Math.PI) / 180;\r\n break;\r\n case 'right':\r\n radians = ((90 - this.moveAngle) * Math.PI) / 180;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n const lastLine = this.layoutPolygon[this.layoutPolygon.length - 1];\r\n const newX = lastLine[1].x + Math.cos(radians) * this.convertToPixels(this.movePixels, this.unit);\r\n const newY = lastLine[1].y - Math.sin(radians) * this.convertToPixels(this.movePixels, this.unit);\r\n\r\n const snappedX = this.snapToGrid(newX, this.gridWidth);\r\n const snappedY = this.snapToGrid(newY, this.gridHeight);\r\n\r\n const previewPoint = { x: snappedX, y: snappedY };\r\n\r\n this.redrawCanvas()\r\n this.drawLineWithLength(lastLine[1], previewPoint)\r\n\r\n\r\n }\r\n\r\n\r\n rotatePolygons(): void {\r\n this.saveStateToUndo();\r\n this.closeWidget()\r\n\r\n const angle = 90;\r\n this.cumulativeRotation = (this.cumulativeRotation + angle) % 360;\r\n\r\n const rotatePoint = (point: { x: number; y: number }, center: { x: number; y: number }, angle: number): { x: number; y: number } => {\r\n const dx = point.x - center.x;\r\n const dy = point.y - center.y;\r\n const radianAngle = angle * (Math.PI / 180);\r\n\r\n const cos = Math.cos(radianAngle);\r\n const sin = Math.sin(radianAngle);\r\n\r\n return {\r\n x: center.x + dx * cos - dy * sin,\r\n y: center.y + dx * sin + dy * cos,\r\n };\r\n };\r\n\r\n const getPolygonLineCenter = (line: any[]): { x: number; y: number } => {\r\n const [start, end] = line;\r\n return {\r\n x: (start.x + end.x) / 2,\r\n y: (start.y + end.y) / 2,\r\n };\r\n };\r\n\r\n const getOverallCenter = (lines: any[]): { x: number; y: number } => {\r\n const sum = lines.reduce(\r\n (acc, line) => {\r\n const center = getPolygonLineCenter(line);\r\n acc.x += center.x;\r\n acc.y += center.y;\r\n return acc;\r\n },\r\n { x: 0, y: 0 }\r\n );\r\n\r\n return { x: sum.x / lines.length, y: sum.y / lines.length };\r\n };\r\n\r\n const overallCenter = getOverallCenter(this.layoutPolygon);\r\n\r\n this.layoutPolygon = this.layoutPolygon.map((line) => {\r\n const [start, end, properties] = line;\r\n return [\r\n rotatePoint(start, overallCenter, angle),\r\n rotatePoint(end, overallCenter, angle),\r\n properties,\r\n ];\r\n });\r\n\r\n this.redoStack = [];\r\n this.redrawCanvas();\r\n }\r\n\r\n resetOrientation(): void {\r\n if (this.cumulativeRotation === 0) return;\r\n\r\n const angleToReset = -this.cumulativeRotation;\r\n const resetRotation = (point: { x: number; y: number }, center: { x: number; y: number }, angle: number): { x: number; y: number } => {\r\n const dx = point.x - center.x;\r\n const dy = point.y - center.y;\r\n const radianAngle = angle * (Math.PI / 180);\r\n\r\n const cos = Math.cos(radianAngle);\r\n const sin = Math.sin(radianAngle);\r\n\r\n return {\r\n x: center.x + dx * cos - dy * sin,\r\n y: center.y + dx * sin + dy * cos,\r\n };\r\n };\r\n\r\n const getPolygonLineCenter = (line: any[]): { x: number; y: number } => {\r\n const [start, end] = line;\r\n return {\r\n x: (start.x + end.x) / 2,\r\n y: (start.y + end.y) / 2,\r\n };\r\n };\r\n\r\n const getOverallCenter = (lines: any[]): { x: number; y: number } => {\r\n const sum = lines.reduce(\r\n (acc, line) => {\r\n const center = getPolygonLineCenter(line);\r\n acc.x += center.x;\r\n acc.y += center.y;\r\n return acc;\r\n },\r\n { x: 0, y: 0 }\r\n );\r\n\r\n return { x: sum.x / lines.length, y: sum.y / lines.length };\r\n };\r\n\r\n const overallCenter = getOverallCenter(this.layoutPolygon);\r\n\r\n this.layoutPolygon = this.layoutPolygon.map((line) => {\r\n const [start, end, properties] = line;\r\n return [\r\n resetRotation(start, overallCenter, angleToReset),\r\n resetRotation(end, overallCenter, angleToReset),\r\n properties,\r\n ];\r\n });\r\n\r\n this.cumulativeRotation = 0; // Reset rotation tracker\r\n this.redrawCanvas();\r\n }\r\n\r\n\r\n\r\n\r\n isLineEqual(\r\n start1: { x: number, y: number },\r\n end1: { x: number, y: number },\r\n start2: { x: number, y: number },\r\n end2: { x: number, y: number },\r\n tolerance: number\r\n ): boolean {\r\n const arePointsEqual = (p1: { x: number, y: number }, p2: { x: number, y: number }) =>\r\n Math.abs(p1.x - p2.x) <= tolerance && Math.abs(p1.y - p2.y) <= tolerance;\r\n\r\n return (\r\n (arePointsEqual(start1, start2) && arePointsEqual(end1, end2)) ||\r\n (arePointsEqual(start1, end2) && arePointsEqual(end1, start2))\r\n );\r\n }\r\n\r\n convertToPixels(value: number, unit: 'ft' | 'm'): number {\r\n const PIXELS_PER_METER = this.pixelPerMetre;\r\n const PIXELS_PER_FOOT = PIXELS_PER_METER / 3.28084;\r\n\r\n if (typeof value !== 'number' || value < 0) {\r\n throw new Error('Value must be a non-negative number');\r\n }\r\n\r\n switch (unit) {\r\n case 'm':\r\n return value * PIXELS_PER_METER;\r\n case 'ft':\r\n return value * PIXELS_PER_FOOT;\r\n default:\r\n throw new Error(\"Invalid unit. Supported units are 'mt' for meters and 'ft' for feet.\");\r\n }\r\n }\r\n\r\n onElementTypeChange(type: string, index: number) {\r\n const [point1, point2, properties] = this.layoutPolygon[index]\r\n properties.elementType = type\r\n this.layoutPolygon[index] = [point1, point2, properties]\r\n this.elementSelect = { show: false, index: 0 };\r\n this.redrawCanvas()\r\n }\r\n\r\n onDistanceChange(value: 'increment' | 'decrement', index: number) {\r\n this.saveStateToUndo()\r\n const [point1, point2, properties] = this.layoutPolygon[index];\r\n let radians: number;\r\n switch (properties.direction) {\r\n case 'up':\r\n radians = ((180 - properties.angle) * Math.PI) / 180;\r\n break;\r\n case 'left':\r\n radians = ((270 - properties.angle) * Math.PI) / 180;\r\n break;\r\n case 'down':\r\n radians = ((360 - properties.angle) * Math.PI) / 180;\r\n break;\r\n case 'right':\r\n radians = ((90 - properties.angle) * Math.PI) / 180;\r\n break;\r\n default:\r\n return;\r\n }\r\n if (value === 'increment') {\r\n\r\n const newX = point2.x + Math.cos(radians) * this.convertToPixels(1, properties.unit);\r\n const newY = point2.y - Math.sin(radians) * this.convertToPixels(1, properties.unit);\r\n\r\n const snappedX = this.snapToGrid(newX, this.gridWidth);\r\n const snappedY = this.snapToGrid(newY, this.gridHeight);\r\n\r\n const newpoint = { x: snappedX, y: snappedY };\r\n point2.x = newpoint.x;\r\n point2.y = newpoint.y;\r\n properties.distance = properties.distance + 1;\r\n } else if (value === 'decrement') {\r\n\r\n const newX = point2.x - Math.cos(radians) * this.convertToPixels(1, properties.unit);\r\n const newY = point2.y + Math.sin(radians) * this.convertToPixels(1, properties.unit);\r\n\r\n const snappedX = this.snapToGrid(newX, this.gridWidth);\r\n const snappedY = this.snapToGrid(newY, this.gridHeight);\r\n\r\n const newpoint = { x: snappedX, y: snappedY };\r\n if (properties.distance > 1) {\r\n point2.x = newpoint.x;\r\n point2.y = newpoint.y;\r\n properties.distance = properties.distance - 1;\r\n }\r\n\r\n }\r\n this.layoutPolygon[index] = [point1, point2, properties];\r\n this.lineOptionsSelect = { show: false, index: 0 };\r\n this.redoStack = [];\r\n this.redrawCanvas()\r\n\r\n }\r\n\r\n onWidgetDistanceChange(value: 'increment' | 'decrement') {\r\n if (value === 'increment') {\r\n this.movePixels = this.movePixels + 1;\r\n } else if (value === 'decrement') {\r\n if (this.movePixels > 1) {\r\n this.movePixels = this.movePixels - 1;\r\n }\r\n }\r\n }\r\n\r\n onWidgetAngleChange(value: 'increment' | 'decrement') {\r\n if (value === 'increment') {\r\n if (this.moveAngle < 180) {\r\n this.moveAngle = this.moveAngle + 5;\r\n }\r\n } else if (value === 'decrement') {\r\n if (this.moveAngle > 0) {\r\n this.moveAngle = this.moveAngle - 5;\r\n }\r\n }\r\n\r\n\r\n this.updateWidgetPointer()\r\n }\r\n\r\n onWidgetDirectionChange(direction: 'left' | 'right' | 'up' | 'down') {\r\n this.moveDirection = direction;\r\n this.drawWidgetRing()\r\n this.updateWidgetPointer()\r\n }\r\n\r\n onDirectionChange(value: 'up' | 'left' | 'down' | 'right', index: number) {\r\n this.saveStateToUndo()\r\n const [point1, point2, properties] = this.layoutPolygon[index];\r\n\r\n let radians: number;\r\n switch (value) {\r\n case 'up':\r\n radians = ((180 - properties.angle) * Math.PI) / 180;\r\n break;\r\n case 'left':\r\n radians = ((270 - properties.angle) * Math.PI) / 180;\r\n break;\r\n case 'down':\r\n radians = ((360 - properties.angle) * Math.PI) / 180;\r\n break;\r\n case 'right':\r\n radians = ((90 - properties.angle) * Math.PI) / 180;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n const movementDistance = this.convertToPixels(properties.distance, properties.unit);\r\n\r\n const newX = point1.x + Math.cos(radians) * movementDistance;\r\n const newY = point1.y - Math.sin(radians) * movementDistance;\r\n\r\n const snappedX = this.snapToGrid(newX, this.gridWidth);\r\n const snappedY = this.snapToGrid(newY, this.gridHeight);\r\n\r\n point2.x = snappedX;\r\n point2.y = snappedY;\r\n properties.direction = value;\r\n\r\n this.layoutPolygon[index] = [point1, point2, properties];\r\n this.directionSelect = { show: false, index: 0 };\r\n this.redoStack = [];\r\n this.redrawCanvas()\r\n }\r\n\r\n onLineDelete(index: number) {\r\n this.saveStateToUndo()\r\n this.layoutPolygon.splice(index, 1);\r\n this.redoStack = [];\r\n this.redrawCanvas()\r\n }\r\n\r\n onAddStep(index: number) {\r\n this.saveStateToUndo()\r\n const [point1, point2, properties] = this.layoutPolygon[index];\r\n let radians = ((90 - 90) * Math.PI) / 180;;\r\n\r\n const newX = point2.x + Math.cos(radians) * this.convertToPixels(1, this.unit);\r\n const newY = point2.y - Math.sin(radians) * this.convertToPixels(1, this.unit);\r\n\r\n const snappedX = this.snapToGrid(newX, this.gridWidth);\r\n const snappedY = this.snapToGrid(newY, this.gridHeight);\r\n\r\n const newpoint = { x: snappedX, y: snappedY };\r\n\r\n this.layoutPolygon.splice(index + 1, 0,\r\n [point2, newpoint,\r\n { elementType: 'wall', distance: 1, unit: this.unit, direction: 'right', angle: 90, elementNumber: this.getMaxElementNumber(this.layoutPolygon, 'wall') }]);\r\n this.redoStack = [];\r\n this.redrawCanvas()\r\n this.lineOptionsSelect = { show: false, index: 0 }\r\n\r\n }\r\n\r\n onDuplicateStep(index: number) {\r\n this.redoStack = [];\r\n const [point1, point2, properties] = JSON.parse(JSON.stringify(this.layoutPolygon[index]));\r\n let radians: number;\r\n switch (properties.direction) {\r\n case 'up':\r\n radians = ((180 - properties.angle) * Math.PI) / 180;\r\n break;\r\n case 'left':\r\n radians = ((270 - properties.angle) * Math.PI) / 180;\r\n break;\r\n case 'down':\r\n radians = ((360 - properties.angle) * Math.PI) / 180;\r\n break;\r\n case 'right':\r\n radians = ((90 - properties.angle) * Math.PI) / 180;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n const newX = point2.x + Math.cos(radians) * this.convertToPixels(properties.distance, properties.unit);\r\n const newY = point2.y - Math.sin(radians) * this.convertToPixels(properties.distance, properties.unit);\r\n\r\n const snappedX = this.snapToGrid(newX, this.gridWidth);\r\n const snappedY = this.snapToGrid(newY, this.gridHeight);\r\n\r\n const newpoint = { x: snappedX, y: snappedY };\r\n\r\n properties.elementNumber = this.getMaxElementNumber(this.layoutPolygon, properties.elementType)\r\n\r\n this.layoutPolygon.splice(index + 1, 0,\r\n [point2, newpoint, properties]);\r\n this.lineOptionsSelect = { show: false, index: 0 };\r\n this.redoStack = [];\r\n this.redrawCanvas()\r\n\r\n }\r\n\r\n\r\n scrollToCanvasPosition(coordinates: { x: number; y: number }): void {\r\n const container = this.scrollContainerRef.nativeElement;\r\n\r\n const containerRect = container.getBoundingClientRect();\r\n const containerScrollLeft = container.scrollLeft;\r\n const containerScrollTop = container.scrollTop;\r\n\r\n const targetX = coordinates.x;\r\n const targetY = coordinates.y;\r\n\r\n const offset = {\r\n up: 100,\r\n down: 200,\r\n left: 100,\r\n right: 100,\r\n };\r\n\r\n const visibleLeft = containerScrollLeft + offset.left;\r\n const visibleRight = containerScrollLeft + containerRect.width - offset.right;\r\n const visibleTop = containerScrollTop + offset.up;\r\n const visibleBottom = containerScrollTop + containerRect.height - offset.down;\r\n\r\n const isXInView = targetX >= visibleLeft && targetX <= visibleRight;\r\n const isYInView = targetY >= visibleTop && targetY <= visibleBottom;\r\n\r\n if (!isXInView || !isYInView) {\r\n const adjustedX = Math.max(0, targetX - offset.left);\r\n const adjustedY = Math.max(0, targetY - offset.up);\r\n\r\n container.scrollTo({\r\n left: adjustedX,\r\n top: adjustedY,\r\n behavior: 'smooth',\r\n });\r\n }\r\n }\r\n\r\n onClearAll() {\r\n const modelRef = this.modalDef.open(ClearAllStepsComponent, { centered: true });\r\n modelRef.result.then((val: any) => {\r\n if (val.message === 'confirm') {\r\n this.toastService.getSuccessToast('Layout cleared successfully')\r\n this.undoStack = []\r\n this.redoStack = []\r\n this.initializeLayout()\r\n this.redrawCanvas()\r\n }\r\n })\r\n\r\n }\r\n\r\n onDeleteLayout() {\r\n const modelRef = this.modalDef.open(DeleteLayoutComponent, { centered: true });\r\n modelRef.result.then((val: any) => {\r\n if (val.message === 'confirm') {\r\n this.undoStack = []\r\n this.redoStack = []\r\n this.layoutPolygon = [];\r\n this.updateFloorLayout()\r\n this.initializeLayout()\r\n this.redrawCanvas()\r\n }\r\n })\r\n\r\n }\r\n\r\n async exportAsPng() {\r\n const padding = 100;\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d')!;\r\n canvas.width = 10000; \r\n canvas.height = 10000;\r\n \r\n const centerX = canvas.width / 2 / this.scale;\r\n const centerY = canvas.height / 2 / this.scale;\r\n \r\n let currentPoint = {\r\n x: this.snapToGrid(centerX, this.gridHeight),\r\n y: this.snapToGrid(centerY, this.gridWidth),\r\n };\r\n \r\n const renderCanvas = async (layoutPolygon: any[]): Promise<string> => {\r\n const exportLayout: any[] = [];\r\n \r\n layoutPolygon.forEach((instruction: any) => {\r\n const radians: number = {\r\n up: ((180 - instruction.angle) * Math.PI) / 180,\r\n left: ((270 - instruction.angle) * Math.PI) / 180,\r\n down: ((360 - instruction.angle) * Math.PI) / 180,\r\n right: ((90 - instruction.angle) * Math.PI) / 180,\r\n }[instruction.direction as 'up' | 'left' | 'down' | 'right'];\r\n \r\n if (radians === undefined) {\r\n throw new Error(`Invalid direction: ${instruction.direction}`);\r\n }\r\n \r\n const distanceInPixels = this.convertToPixels(instruction.distance, instruction.unit);\r\n const newX = currentPoint.x + Math.cos(radians) * distanceInPixels;\r\n const newY = currentPoint.y - Math.sin(radians) * distanceInPixels;\r\n \r\n const newPoint = {\r\n x: this.snapToGrid(newX, this.gridWidth),\r\n y: this.snapToGrid(newY, this.gridHeight),\r\n };\r\n \r\n const lineSegment = [\r\n currentPoint,\r\n newPoint,\r\n {\r\n elementType: instruction.elementType,\r\n distance: instruction.distance,\r\n unit: instruction.unit,\r\n direction: instruction.direction,\r\n angle: instruction.angle,\r\n elementNumber: instruction.elementNumber,\r\n },\r\n ];\r\n \r\n exportLayout.push(lineSegment);\r\n currentPoint = newPoint;\r\n });\r\n \r\n let minX = Infinity,\r\n minY = Infinity,\r\n maxX = -Infinity,\r\n maxY = -Infinity;\r\n \r\n exportLayout.forEach(([point1, point2]) => {\r\n [point1, point2].forEach((point) => {\r\n if (point.x !== undefined) {\r\n minX = Math.min(minX, point.x);\r\n maxX = Math.max(maxX, point.x);\r\n }\r\n if (point.y !== undefined) {\r\n minY = Math.min(minY, point.y);\r\n maxY = Math.max(maxY, point.y);\r\n }\r\n });\r\n });\r\n \r\n minX -= padding;\r\n minY -= padding;\r\n maxX += padding;\r\n maxY += padding;\r\n \r\n canvas.width = maxX - minX;\r\n canvas.height = maxY - minY;\r\n \r\n ctx.fillStyle = 'white';\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n \r\n ctx.save();\r\n ctx.translate(-minX, -minY);\r\n ctx.scale(this.scale, this.scale);\r\n \r\n function drawArrowhead(ctx: CanvasRenderingContext2D, x: number, y: number, angle: number) {\r\n const size = 5;\r\n ctx.save();\r\n ctx.translate(x, y);\r\n ctx.rotate(angle);\r\n ctx.beginPath();\r\n ctx.moveTo(0, 0);\r\n ctx.lineTo(-size, -size / 2);\r\n ctx.lineTo(-size, size / 2);\r\n ctx.closePath();\r\n ctx.fillStyle = 'black';\r\n ctx.fill();\r\n ctx.restore();\r\n }\r\n \r\n ctx.beginPath();\r\n exportLayout.forEach((edge, edgeIndex) => {\r\n const point = edge[0];\r\n const nextPoint = edge[1];\r\n const properties = edge[2];\r\n\r\n if (edgeIndex === 0) ctx.moveTo(point.x, point.y);\r\n ctx.lineTo(nextPoint.x, nextPoint.y);\r\n\r\n const dx = nextPoint.x - point.x;\r\n const dy = nextPoint.y - point.y;\r\n const length = Math.sqrt(dx * dx + dy * dy);\r\n const offsetX = (dy / length) * 20;\r\n const offsetY = (-dx / length) * 20;\r\n\r\n const boxPoints = [\r\n { x: point.x, y: point.y },\r\n { x: nextPoint.x, y: nextPoint.y },\r\n { x: nextPoint.x + offsetX, y: nextPoint.y + offsetY },\r\n { x: point.x + offsetX, y: point.y + offsetY },\r\n ];\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(boxPoints[0].x, boxPoints[0].y);\r\n boxPoints.forEach((pt, index) => {\r\n if (properties.elementType === 'entrance') {\r\n if (index < 2) {\r\n ctx.lineTo(pt.x, pt.y)\r\n }\r\n } else {\r\n ctx.lineTo(pt.x, pt.y);\r\n }\r\n });\r\n if (properties.elementType === 'opening') {\r\n ctx.closePath();\r\n ctx.fillStyle = '#F9FAFB';\r\n ctx.fill();\r\n\r\n ctx.strokeStyle = '#F9FAFB';\r\n\r\n ctx.stroke();\r\n } else {\r\n ctx.closePath();\r\n ctx.fillStyle = '#F9FAFB';\r\n ctx.fill();\r\n ctx.strokeStyle = '#1D2939';\r\n ctx.stroke();\r\n }\r\n\r\n\r\n const textX = (boxPoints[1].x + boxPoints[3].x) / 2;\r\n const textY = (boxPoints[1].y + boxPoints[3].y) / 2;\r\n\r\n ctx.save();\r\n ctx.translate(textX, textY);\r\n\r\n if (dx === 0) {\r\n ctx.rotate(-Math.PI / 2);\r\n } else if (dy !== 0) {\r\n const angle = Math.atan2(dy, dx);\r\n ctx.rotate(angle);\r\n }\r\n\r\n ctx.font = '12px Arial';\r\n ctx.fillStyle = 'black';\r\n ctx.textAlign = 'center';\r\n ctx.textBaseline = 'middle';\r\n ctx.fillText(\r\n `${properties.elementType} ${properties.elementNumber} - ${properties.distance} ${properties.unit}`,\r\n 0,\r\n 0\r\n );\r\n ctx.restore();\r\n if (properties.distance >= 4) {\r\n const centerX = textX;\r\n const centerY = textY;\r\n const rightX = (boxPoints[1].x + boxPoints[2].x) / 2;\r\n const rightY = (boxPoints[1].y + boxPoints[2].y) / 2;\r\n const leftX = (boxPoints[0].x + boxPoints[3].x) / 2;\r\n const leftY = (boxPoints[0].y + boxPoints[3].y) / 2;\r\n\r\n function adjustPoint(x1: any, y1: any, x2: any, y2: any, distance: any) {\r\n const angle = Math.atan2(y2 - y1, x2 - x1);\r\n return {\r\n x: x1 + Math.cos(angle) * distance,\r\n y: y1 + Math.sin(angle) * distance,\r\n };\r\n }\r\n\r\n const rightStart = adjustPoint(centerX, centerY, rightX, rightY, 50);\r\n const rightEnd = adjustPoint(rightX, rightY, centerX, centerY, 10);\r\n const leftStart = adjustPoint(centerX, centerY, leftX, leftY, 50);\r\n const leftEnd = adjustPoint(leftX, leftY, centerX, centerY, 10);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(rightStart.x, rightStart.y);\r\n ctx.lineTo(rightEnd.x, rightEnd.y);\r\n ctx.strokeStyle = 'black';\r\n ctx.stroke();\r\n let rightAngle = Math.atan2(rightEnd.y - rightStart.y, rightEnd.x - rightStart.x);\r\n drawArrowhead(ctx, rightEnd.x, rightEnd.y, rightAngle);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(leftStart.x, leftStart.y);\r\n ctx.lineTo(leftEnd.x, leftEnd.y);\r\n ctx.strokeStyle = 'black';\r\n ctx.stroke();\r\n let leftAngle = Math.atan2(leftEnd.y - leftStart.y, leftEnd.x - leftStart.x);\r\n drawArrowhead(ctx, leftEnd.x, leftEnd.y, leftAngle);\r\n\r\n }\r\n\r\n if (properties.elementType === 'entrance') {\r\n const angle = Math.atan2(nextPoint.y - point.y, nextPoint.x - point.x);\r\n\r\n const entranceAngle = angle + (15 * Math.PI) / 180;\r\n\r\n const lineLength = this.convertToPixels(properties.distance, properties.unit) * 0.75;\r\n const endPoint = {\r\n x: point.x + Math.cos(entranceAngle) * lineLength,\r\n y: point.y + Math.sin(entranceAngle) * lineLength,\r\n };\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(point.x, point.y);\r\n ctx.lineTo(endPoint.x, endPoint.y);\r\n ctx.strokeStyle = '#1D2939';\r\n ctx.stroke();\r\n }\r\n });\r\n \r\n ctx.restore();\r\n \r\n return new Promise((resolve) => {\r\n canvas.toBlob((blob:any) => {\r\n const link = document.createElement('a');\r\n link.download = `${this.selectedStore.storeName}_${this.selectedFloor.floorName}_layout.png`;\r\n link.href = URL.createObjectURL(blob);\r\n link.click();\r\n canvas.remove();\r\n resolve('');\r\n });\r\n });\r\n };\r\n \r\n const layoutInstructions = this.layoutPolygon.map((segment) => {\r\n const [, , properties] = segment;\r\n return properties;\r\n });\r\n \r\n await renderCanvas(layoutInstructions);\r\n }\r\n \r\n\r\n generateLayoutPolygon(layoutInstructions: any) {\r\n this.pixelPerMetre = this.normalizedPixelPerMetre(layoutInstructions)\r\n\r\n this.layoutPolygon = [];\r\n\r\n const centerX = this.canvas.width / 2 / this.scale;\r\n const centerY = this.canvas.height / 2 / this.scale;\r\n\r\n if (!layoutInstructions.length) {\r\n this.initializeLayout()\r\n this.redrawCanvas()\r\n return\r\n }\r\n\r\n let currentPoint = {\r\n \"x\": this.snapToGrid(centerX, this.gridHeight),\r\n \"y\": this.snapToGrid(centerY, this.gridWidth)\r\n };\r\n\r\n layoutInstructions.forEach((instruction: any) => {\r\n const radians: number = {\r\n 'up': ((180 - instruction.angle) * Math.PI) / 180,\r\n 'left': ((270 - instruction.angle) * Math.PI) / 180,\r\n 'down': ((360 - instruction.angle) * Math.PI) / 180,\r\n 'right': ((90 - instruction.angle) * Math.PI) / 180,\r\n }[instruction.direction as 'up' | 'left' | 'down' | 'right'];\r\n\r\n if (radians === undefined) {\r\n throw new Error(`Invalid direction: ${instruction.direction}`);\r\n }\r\n\r\n const distanceInPixels = this.convertToPixels(instruction.distance, instruction.unit);\r\n const newX = currentPoint.x + Math.cos(radians) * distanceInPixels;\r\n const newY = currentPoint.y - Math.sin(radians) * distanceInPixels;\r\n\r\n const newPoint = {\r\n x: this.snapToGrid(newX, this.gridWidth),\r\n y: this.snapToGrid(newY, this.gridHeight),\r\n };\r\n\r\n const lineSegment = [\r\n currentPoint,\r\n newPoint,\r\n {\r\n elementType: instruction.elementType,\r\n distance: instruction.distance,\r\n unit: instruction.unit,\r\n direction: instruction.direction,\r\n angle: instruction.angle,\r\n elementNumber: instruction.elementNumber,\r\n },\r\n ];\r\n\r\n this.layoutPolygon.push(lineSegment);\r\n\r\n currentPoint = newPoint;\r\n });\r\n\r\n\r\n const lastPoint = this.layoutPolygon[this.layoutPolygon.length - 1][1]\r\n\r\n if (this.isFloorCompleted(layoutInstructions)) {\r\n this.findPolygonCenterAndScroll()\r\n this.closeWidget()\r\n } else {\r\n this.openWidget(lastPoint)\r\n }\r\n\r\n this.redrawCanvas()\r\n\r\n }\r\n\r\n normalizedPixelPerMetre(polygon: any): number {\r\n const MIN_PIXELS_PER_METER = 50;\r\n const MAX_PIXELS_PER_METER = 150;\r\n\r\n let totalLength = 0;\r\n let lineCount = 0;\r\n\r\n polygon.forEach((line: any) => {\r\n if (line.unit === 'ft') {\r\n totalLength = totalLength + (line.distance * 3.28084);\r\n } else {\r\n totalLength = totalLength + line.distance;\r\n }\r\n lineCount++;\r\n });\r\n\r\n const averageLength = lineCount > 0 ? totalLength / lineCount : 0;\r\n\r\n const MAX_AVERAGE_LENGTH = 50;\r\n const MIN_AVERAGE_LENGTH = 5;\r\n\r\n const normalizedLength = Math.min(\r\n Math.max(averageLength, MIN_AVERAGE_LENGTH),\r\n MAX_AVERAGE_LENGTH\r\n );\r\n\r\n const pixelsPerMeter =\r\n MAX_PIXELS_PER_METER -\r\n ((normalizedLength - MIN_AVERAGE_LENGTH) / (MAX_AVERAGE_LENGTH - MIN_AVERAGE_LENGTH)) *\r\n (MAX_PIXELS_PER_METER - MIN_PIXELS_PER_METER);\r\n\r\n return Math.round(pixelsPerMeter);\r\n }\r\n\r\n isFloorCompleted(layoutInstructions: any, thresholdInFeet: number = 1): boolean {\r\n const layoutPolygon: any[] = [];\r\n const centerX = this.canvas.width / 2 / this.scale;\r\n const centerY = this.canvas.height / 2 / this.scale;\r\n\r\n let currentPoint = {\r\n x: this.snapToGrid(centerX, this.gridHeight),\r\n y: this.snapToGrid(centerY, this.gridWidth),\r\n };\r\n\r\n layoutInstructions.forEach((instruction: any) => {\r\n const radians: number = {\r\n 'up': ((180 - instruction.angle) * Math.PI) / 180,\r\n 'left': ((270 - instruction.angle) * Math.PI) / 180,\r\n 'down': ((360 - instruction.angle) * Math.PI) / 180,\r\n 'right': ((90 - instruction.angle) * Math.PI) / 180,\r\n }[instruction.direction as 'up' | 'left' | 'down' | 'right'];\r\n\r\n if (radians === undefined) {\r\n throw new Error(`Invalid direction: ${instruction.direction}`);\r\n }\r\n\r\n const distanceInPixels = this.convertToPixels(instruction.distance, instruction.unit);\r\n const newX = currentPoint.x + Math.cos(radians) * distanceInPixels;\r\n const newY = currentPoint.y - Math.sin(radians) * distanceInPixels;\r\n\r\n const newPoint = {\r\n x: this.snapToGrid(newX, this.gridWidth),\r\n y: this.snapToGrid(newY, this.gridHeight),\r\n };\r\n\r\n const lineSegment = [\r\n currentPoint,\r\n newPoint,\r\n {\r\n elementType: instruction.elementType,\r\n distance: instruction.distance,\r\n unit: instruction.unit,\r\n direction: instruction.direction,\r\n angle: instruction.angle,\r\n elementNumber: instruction.elementNumber,\r\n },\r\n ];\r\n\r\n layoutPolygon.push(lineSegment);\r\n currentPoint = newPoint;\r\n });\r\n\r\n const firstPoint = layoutPolygon?.[0]?.[0];\r\n const lastPoint = layoutPolygon?.[layoutPolygon.length - 1]?.[1];\r\n\r\n if (layoutPolygon.length <= 1 || !firstPoint || !lastPoint) {\r\n return false;\r\n }\r\n\r\n const distanceBetweenPoints = Math.sqrt(\r\n Math.pow(lastPoint.x - firstPoint.x, 2) + Math.pow(lastPoint.y - firstPoint.y, 2)\r\n );\r\n\r\n const thresholdInPixels = this.convertToPixels(thresholdInFeet, 'ft');\r\n return distanceBetweenPoints <= thresholdInPixels;\r\n }\r\n\r\n\r\n validateAngleInput(event: Event, index: number) {\r\n const inputElement = event.target as HTMLInputElement;\r\n let value = parseInt(inputElement.value, 10);\r\n\r\n if (isNaN(value)) {\r\n value = 0;\r\n }\r\n\r\n if (value < 0) {\r\n value = 0;\r\n } else if (value > 180) {\r\n value = 180;\r\n }\r\n\r\n inputElement.value = value.toString();\r\n this.layoutPolygon[index][2].angle = value;\r\n\r\n\r\n }\r\n\r\n onAngleChange(index: number) {\r\n this.saveStateToUndo()\r\n const [point1, point2, properties] = this.layoutPolygon[index];\r\n\r\n let radians: number;\r\n switch (properties.direction) {\r\n case 'up':\r\n radians = ((180 - properties.angle) * Math.PI) / 180;\r\n break;\r\n case 'left':\r\n radians = ((270 - properties.angle) * Math.PI) / 180;\r\n break;\r\n case 'down':\r\n radians = ((360 - properties.angle) * Math.PI) / 180;\r\n break;\r\n case 'right':\r\n radians = ((90 - properties.angle) * Math.PI) / 180;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n const movementDistance = this.convertToPixels(properties.distance, properties.unit);\r\n\r\n const newX = point1.x + Math.cos(radians) * movementDistance;\r\n const newY = point1.y - Math.sin(radians) * movementDistance;\r\n\r\n const snappedX = this.snapToGrid(newX, this.gridWidth);\r\n const snappedY = this.snapToGrid(newY, this.gridHeight);\r\n\r\n point2.x = snappedX;\r\n point2.y = snappedY;\r\n properties.angle = this.layoutPolygon[index][2].angle;\r\n\r\n this.layoutPolygon[index] = [point1, point2, properties];\r\n\r\n this.redoStack = [];\r\n this.redrawCanvas()\r\n }\r\n\r\n openAddFloorModal() {\r\n const modelRef = this.modalDef.open(AddFloorComponent, { centered: true });\r\n modelRef.result.then((val: any) => {\r\n if (val.floorNumber) {\r\n this.addFloor(this.selectedStore.planoId, val.floorNumber)\r\n }\r\n }).catch((err) => {\r\n if (err.floorNumber) {\r\n this.addFloor(this.selectedStore.planoId, err.floorNumber)\r\n }\r\n })\r\n\r\n }\r\n\r\n\r\n findPolygonCenterAndScroll(polygon: any = this.layoutPolygon): void {\r\n const vertices = polygon.flatMap((line: any) => line.slice(0, 2));\r\n\r\n const minX = Math.min(...vertices.map((v: any) => v.x));\r\n const maxX = Math.max(...vertices.map((v: any) => v.x));\r\n const minY = Math.min(...vertices.map((v: any) => v.y));\r\n const maxY = Math.max(...vertices.map((v: any) => v.y));\r\n\r\n let center = { x: (minX + maxX) / 2, y: (minY + maxY) / 2 };\r\n\r\n const step = 1;\r\n let bestPoint = center;\r\n let bestDistanceSum = Number.MAX_VALUE;\r\n\r\n for (let x = minX; x <= maxX; x += step) {\r\n for (let y = minY; y <= maxY; y += step) {\r\n const point = { x, y };\r\n if (isPointInsidePolygon(point, vertices)) {\r\n const distanceSum = vertices.reduce(\r\n (sum: number, vertex: any) => sum + Math.sqrt((point.x - vertex.x) ** 2 + (point.y - vertex.y) ** 2),\r\n 0\r\n );\r\n if (distanceSum < bestDistanceSum) {\r\n bestDistanceSum = distanceSum;\r\n bestPoint = point;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const scrollContainer = this.scrollContainerRef.nativeElement;\r\n scrollContainer.scrollTo({\r\n left: bestPoint.x - scrollContainer.offsetWidth / 2,\r\n top: bestPoint.y - scrollContainer.offsetHeight / 2,\r\n behavior: 'smooth'\r\n });\r\n\r\n this.resetZoom()\r\n this.resetOrientation()\r\n\r\n function isPointInsidePolygon(point: any, vertices: any): boolean {\r\n let count = 0;\r\n for (let i = 0; i < vertices.length; i++) {\r\n const start = vertices[i];\r\n const end = vertices[(i + 1) % vertices.length];\r\n if (rayIntersectsSegment(point, { start, end })) {\r\n count++;\r\n }\r\n }\r\n return count % 2 === 1;\r\n }\r\n\r\n function rayIntersectsSegment(point: any, segment: any): boolean {\r\n const { x, y } = point;\r\n const { start, end } = segment;\r\n\r\n if (y < Math.min(start.y, end.y) || y > Math.max(start.y, end.y)) {\r\n return false;\r\n }\r\n\r\n const t = (y - start.y) / (end.y - start.y);\r\n const intersectX = start.x + t * (end.x - start.x);\r\n\r\n return intersectX >= x;\r\n }\r\n }\r\n\r\n exportToExcel() {\r\n\r\n const layoutPolygon = this.layoutPolygon.map((segment) => {\r\n const [point1, point2, properties] = segment\r\n return properties\r\n })\r\n\r\n const formattedData = layoutPolygon.map((item:any, index:number) => ({\r\n 'Step': index + 1,\r\n 'Elements': `${item.elementType} ${item.elementNumber}`,\r\n 'Measurements(ft)': item.distance,\r\n 'Direction': item.direction,\r\n 'Degree': item.angle\r\n }));\r\n\r\n const worksheet = XLSX.utils.json_to_sheet(formattedData);\r\n\r\n const workbook = XLSX.utils.book_new();\r\n XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');\r\n\r\n const fileName = `${this.selectedStore.storeName}_${this.selectedFloor.floorName}_layout.xlsx`\r\n\r\n XLSX.writeFile(workbook, fileName);\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n}\r\n","<div class=\"d-flex align-items-center justify-content-between mb-6\">\r\n <div>\r\n <div *ngIf=\"planoStoreList.length === 1\" class=\"storename-txt\">\r\n {{selectedStore?.storeName}} - Layout\r\n </div>\r\n <div *ngIf=\"planoStoreList.length > 1\">\r\n <lib-select-plano [items]=\"planoStoreList\" [multi]=\"false\" [searchField]=\"'storeName'\" [idField]=\"'storeId'\"\r\n (selected)=\"onStoreChange($event)\" [selectedValues]=\"[selectedStore]\"></lib-select-plano>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center\">\r\n <button (click)=\"onSaveAsDraft()\" class=\"btn btn-outline bg-white me-5\">Save As Draft</button>\r\n <button (click)=\"onConfigure()\" class=\"btn btn-sm btn-primary me-5\">Configure</button>\r\n <button (click)=\"openOffCanva()\" class=\"btn btn-sm btn-outline bg-white\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9 3V21M5 3H19C20.1046 3 21 3.89543 21 5V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19V5C3 3.89543 3.89543 3 5 3Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"row\">\r\n <div [ngClass]=\"layoutMode === 'full' ? 'col-2' : 'col-5'\">\r\n <div class=\"c-card\" style=\"height: 75dvh; position: relative;\">\r\n <div class=\"resize-icon\" *ngIf=\"layoutMode === 'half'\" (click)=\"layoutMode = 'full'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M8.27259 12.6365L4.63623 9.00013L8.27259 5.36377M13.3635 12.6365L9.72714 9.00013L13.3635 5.36377\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div class=\"resize-icon\" *ngIf=\"layoutMode === 'full'\" (click)=\"layoutMode = 'half'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M9.72741 5.36399L13.3638 9.00036L9.72741 12.6367M4.6365 5.36399L8.27286 9.00036L4.6365 12.6367\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div class=\"d-flex align-items-center justify-content-between mb-5\" style=\"height: 8%;\">\r\n <div>\r\n <div class=\"l-pane-head\">\r\n Layout details\r\n </div>\r\n <div *ngIf=\"layoutMode === 'half'\" class=\"l-pane-desc\">\r\n Below are the sequence of steps for this layout\r\n </div>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <ng-container *ngIf=\"layoutMode === 'half'\">\r\n <svg (click)=\"undo()\" class=\"me-3 cursor-pointer\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path [attr.fill]=\"undoStack.length ? '#1D2939' : '#D0D5DD'\"\r\n d=\"M7 19V17H14.1C15.15 17 16.0627 16.6667 16.838 16C17.6133 15.3333 18.0007 14.5 18 13.5C18 12.5 17.6123 11.6667 16.837 11C16.0617 10.3333 15.1493 10 14.1 10H7.8L10.4 12.6L9 14L4 9L9 4L10.4 5.4L7.8 8H14.1C15.7167 8 17.1043 8.525 18.263 9.575C19.4217 10.625 20.0007 11.9333 20 13.5C20 15.0667 19.4207 16.375 18.262 17.425C17.1033 18.475 15.716 19 14.1 19H7Z\"\r\n fill=\"#D0D5DD\" />\r\n </svg>\r\n <svg (click)=\"redo()\" class=\"me-6 cursor-pointer\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path [attr.fill]=\"redoStack.length ? '#1D2939' : '#D0D5DD'\"\r\n d=\"M9.9 19C8.28333 19 6.89567 18.475 5.737 17.425C4.57833 16.375 3.99933 15.0667 4 13.5C4 11.9333 4.57933 10.625 5.738 9.575C6.89667 8.525 8.284 8 9.9 8H16.2L13.6 5.4L15 4L20 9L15 14L13.6 12.6L16.2 10H9.9C8.85 10 7.93733 10.3333 7.162 11C6.38667 11.6667 5.99933 12.5 6 13.5C6 14.5 6.38767 15.3333 7.163 16C7.93833 16.6667 8.85067 17 9.9 17H17V19H9.9Z\"\r\n fill=\"#D0D5DD\" />\r\n </svg>\r\n <div (click)=\"toggleLayoutOptionSelect()\"\r\n class=\"d-flex align-items-center justify-content-center h-100 elipsis-icon-dropdown top-elipsis-menu\">\r\n <div class=\"elipsis-btn\">\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 <path\r\n d=\"M11 11.9997C11 12.5289 11.4477 12.958 12 12.958C12.5523 12.958 13 12.5289 13 11.9997C13 11.4704 12.5523 11.0413 12 11.0413C11.4477 11.0413 11 11.4704 11 11.9997Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M11 18.708C11 19.2373 11.4477 19.6663 12 19.6663C12.5523 19.6663 13 19.2373 13 18.708C13 18.1787 12.5523 17.7497 12 17.7497C11.4477 17.7497 11 18.1787 11 18.708Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M11 5.29134C11 5.82061 11.4477 6.24967 12 6.24967C12.5523 6.24967 13 5.82061 13 5.29134C13 4.76207 12.5523 4.33301 12 4.33301C11.4477 4.33301 11 4.76207 11 5.29134Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <ul *ngIf=\"layoutOptionSelect?.show\" [ngClass]=\" (layoutOptionSelect.show ) ? 'z-1': ''\"\r\n class=\"list-unstyled mb-2\">\r\n <li>\r\n <div class=\"d-flex justify-content-between w-100\">\r\n <div class=\"menu-txt1\">Export</div>\r\n <span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"8\" height=\"14\" viewBox=\"0 0 8 14\" fill=\"none\">\r\n <path d=\"M1 13L7 7L1 1\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </div>\r\n <div class=\"export-options\">\r\n <ul>\r\n <li (click)=\"exportToExcel()\" >XLSX</li>\r\n <li (click)=\"exportAsPng()\" >PNG</li>\r\n </ul>\r\n </div>\r\n\r\n </li>\r\n <li (click)=\"onClearAll()\">\r\n <div class=\"d-flex\">\r\n <div class=\"menu-txt1\">Clear all</div>\r\n </div>\r\n\r\n </li>\r\n <li (click)=\"onDeleteLayout()\">\r\n <div class=\"d-flex\">\r\n <div class=\"menu-txt1 text-danger\">Delete</div>\r\n </div>\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- <div class=\"d-flex align-items-center flex-column mx-auto\" style=\"margin-top: 200px;\" >\r\n <div class=\"no-steps-txt mb-3\">\r\n No steps have been created so far\r\n </div>\r\n <div class=\"no-text-desc text-center\">\r\n Start designing the layout by applying the steps using elements and dimensions.\r\n </div>\r\n </div> -->\r\n\r\n <div class=\"table-responsive hide-scrollbar \" style=\"height: 92%;\">\r\n <table class=\"table\">\r\n <thead class=\"thead-light\">\r\n <tr>\r\n <th>Steps</th>\r\n <th>Elements and Definition</th>\r\n <th>Feet</th>\r\n <th>Direction</th>\r\n <th>Degree</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n <ng-container *ngFor=\"let item of layoutPolygon; let i = index\">\r\n <tr [ngClass]=\"selectedLineIndex === i ? 'selected-element' : ''\" *ngIf=\"item?.[2]\" cdkDrag>\r\n <td>\r\n <div class=\"d-flex align-items-center justify-content-center w-100 h-100 drag-handler\">\r\n <span class=\"mr-2 \" >\r\n <svg class=\"cursor-pointer\" xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"19\" viewBox=\"0 0 19 19\">\r\n <circle cx=\"5\" cy=\"5\" r=\"2\" fill=\"gray\" />\r\n <circle cx=\"14\" cy=\"5\" r=\"2\" fill=\"gray\" />\r\n <circle cx=\"5\" cy=\"10\" r=\"2\" fill=\"gray\" />\r\n <circle cx=\"14\" cy=\"10\" r=\"2\" fill=\"gray\" />\r\n <circle cx=\"5\" cy=\"15\" r=\"2\" fill=\"gray\" />\r\n <circle cx=\"14\" cy=\"15\" r=\"2\" fill=\"gray\" />\r\n </svg>\r\n </span>\r\n <span>{{ i + 1}}</span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div (click)=\"toggleElementSelect(i)\"\r\n class=\"element-type-dropdown me-2 position-relative\">\r\n <div>\r\n <svg *ngIf=\"item[2].elementType === 'wall'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M1.33333 1.33333V0L2.66667 0V1.33333L6.66667 1.33333V0L8 0V1.33333L12 1.33333V0L13.3333 0V1.33333L17.3333 1.33333V0L18.6667 0V1.33333H20V2.66667H18.6667V6.66667H20V8H18.6667V12H20V13.3333H18.6667V17.3333H20V18.6667H18.6667V20H17.3333V18.6667H13.3333V20H12V18.6667H8V20H6.66667V18.6667H2.66667V20H1.33333V18.6667H0L0 17.3333H1.33333L1.33333 13.3333H0L0 12H1.33333L1.33333 8H0L0 6.66667H1.33333L1.33333 2.66667H0L0 1.33333H1.33333ZM2.66667 2.66667L2.66667 6.66667H6.66667V2.66667L2.66667 2.66667ZM8 2.66667V6.66667H12V2.66667L8 2.66667ZM13.3333 2.66667V6.66667H17.3333V2.66667H13.3333ZM17.3333 8L13.3333 8V12L17.3333 12V8ZM17.3333 13.3333L13.3333 13.3333L13.3333 17.3333H17.3333V13.3333ZM12 17.3333L12 13.3333H8L8 17.3333H12ZM6.66667 17.3333V13.3333H2.66667V17.3333H6.66667ZM2.66667 12H6.66667V8H2.66667L2.66667 12ZM8 8V12H12V8H8Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n\r\n <svg *ngIf=\"item[2].elementType === 'facade'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\"\r\n viewBox=\"0 0 22 22\" fill=\"none\">\r\n <path\r\n d=\"M1 11V2.25C1 1.5625 1.5625 1 2.25 1H19.75C20.4375 1 21 1.5625 21 2.25V19.75C21 20.4375 20.4375 21 19.75 21H2.25C1.5625 21 1 20.4375 1 19.75V11Z\"\r\n stroke=\"#344054\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <svg *ngIf=\"item[2].elementType === 'opening'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M12.5 2.5H15.8333C16.2754 2.5 16.6993 2.6756 17.0118 2.98816C17.3244 3.30072 17.5 3.72464 17.5 4.16667V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H12.5M8.33333 14.1667L12.5 10M12.5 10L8.33333 5.83333M12.5 10H2.5\"\r\n stroke=\"#101828\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <svg *ngIf=\"item[2].elementType === 'entrance'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"18\"\r\n viewBox=\"0 0 21 18\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M17.9333 1.37949C8.7909 1.37949 1.37949 8.7909 1.37949 17.9333H0C0 8.02903 8.02903 0 17.9333 0V1.37949Z\"\r\n fill=\"#1D2939\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M19.3132 1.37949H17.9333L17.9337 16.5538H19.3132V1.37949ZM16.5542 0V17.9333H20.6927V0H16.5542Z\"\r\n fill=\"#1D2939\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"down-arrow\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <ul *ngIf=\"elementSelect?.show && elementSelect?.index === i\"\r\n [ngClass]=\" (elementSelect.show && elementSelect.index === i) ? 'z-1': ''\"\r\n class=\"list-unstyled mb-2\">\r\n <li (click)=\"onElementTypeChange('wall', i)\"\r\n [ngClass]=\"item[2].elementType === 'wall' ? 'selected' : ''\">\r\n <div class=\"d-flex\">\r\n <div class=\"me-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M1.33333 1.33333V0L2.66667 0V1.33333L6.66667 1.33333V0L8 0V1.33333L12 1.33333V0L13.3333 0V1.33333L17.3333 1.33333V0L18.6667 0V1.33333H20V2.66667H18.6667V6.66667H20V8H18.6667V12H20V13.3333H18.6667V17.3333H20V18.6667H18.6667V20H17.3333V18.6667H13.3333V20H12V18.6667H8V20H6.66667V18.6667H2.66667V20H1.33333V18.6667H0L0 17.3333H1.33333L1.33333 13.3333H0L0 12H1.33333L1.33333 8H0L0 6.66667H1.33333L1.33333 2.66667H0L0 1.33333H1.33333ZM2.66667 2.66667L2.66667 6.66667H6.66667V2.66667L2.66667 2.66667ZM8 2.66667V6.66667H12V2.66667L8 2.66667ZM13.3333 2.66667V6.66667H17.3333V2.66667H13.3333ZM17.3333 8L13.3333 8V12L17.3333 12V8ZM17.3333 13.3333L13.3333 13.3333L13.3333 17.3333H17.3333V13.3333ZM12 17.3333L12 13.3333H8L8 17.3333H12ZM6.66667 17.3333V13.3333H2.66667V17.3333H6.66667ZM2.66667 12H6.66667V8H2.66667L2.66667 12ZM8 8V12H12V8H8Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n </div>\r\n <div>Wall</div>\r\n </div>\r\n <div>\r\n <svg *ngIf=\"item[2].elementType === 'wall'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M16.6663 5L7.49967 14.1667L3.33301 10\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </li>\r\n <li (click)=\"onElementTypeChange('facade', i)\"\r\n [ngClass]=\"item[2].elementType === 'facade' ? 'selected' : ''\">\r\n <div class=\"d-flex\">\r\n <div class=\"me-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\"\r\n height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\">\r\n <path\r\n d=\"M1 11V2.25C1 1.5625 1.5625 1 2.25 1H19.75C20.4375 1 21 1.5625 21 2.25V19.75C21 20.4375 20.4375 21 19.75 21H2.25C1.5625 21 1 20.4375 1 19.75V11Z\"\r\n stroke=\"#344054\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div>Glass/Facade</div>\r\n </div>\r\n <div>\r\n <svg *ngIf=\"item[2].elementType === 'facade'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M16.6663 5L7.49967 14.1667L3.33301 10\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </li>\r\n <li (click)=\"onElementTypeChange('opening', i)\"\r\n [ngClass]=\"item[2].elementType === 'opening' ? 'selected' : ''\">\r\n <div class=\"d-flex\">\r\n <div class=\"me-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M12.5 2.5H15.8333C16.2754 2.5 16.6993 2.6756 17.0118 2.98816C17.3244 3.30072 17.5 3.72464 17.5 4.16667V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H12.5M8.33333 14.1667L12.5 10M12.5 10L8.33333 5.83333M12.5 10H2.5\"\r\n stroke=\"#101828\" stroke-width=\"1.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div>Opening</div>\r\n </div>\r\n <div>\r\n <svg *ngIf=\"item[2].elementType === 'opening'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M16.6663 5L7.49967 14.1667L3.33301 10\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </li>\r\n <li (click)=\"onElementTypeChange('entrance', i)\"\r\n [ngClass]=\"item[2].elementType === 'entrance' ? 'selected' : ''\">\r\n <div class=\"d-flex\">\r\n <div class=\"me-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\"\r\n height=\"18\" viewBox=\"0 0 21 18\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M17.9333 1.37949C8.7909 1.37949 1.37949 8.7909 1.37949 17.9333H0C0 8.02903 8.02903 0 17.9333 0V1.37949Z\"\r\n fill=\"#1D2939\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M19.3132 1.37949H17.9333L17.9337 16.5538H19.3132V1.37949ZM16.5542 0V17.9333H20.6927V0H16.5542Z\"\r\n fill=\"#1D2939\" />\r\n </svg>\r\n </div>\r\n <div>Entrance</div>\r\n </div>\r\n <div>\r\n <svg *ngIf=\"item[2].elementType === 'entrance'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M16.6663 5L7.49967 14.1667L3.33301 10\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n <div class=\"element-name\">{{item[2].elementType}} {{item[2].elementNumber}}\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"unit-input\">\r\n <svg (click)=\"onDistanceChange('decrement', i)\" class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\"\r\n viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path d=\"M2.9165 7H11.0832\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{item[2].distance}}</span>\r\n <svg (click)=\"onDistanceChange('increment', i)\" class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\"\r\n viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path d=\"M6.99984 2.9165V11.0832M2.9165 6.99984H11.0832\" stroke=\"#667085\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </td>\r\n <td>\r\n <div (click)=\"toggleDirectionSelect(i)\"\r\n class=\"direction-dropdown position-relative\">\r\n <div>\r\n {{item[2].direction}}\r\n </div>\r\n\r\n <div class=\"down-arrow\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <ul *ngIf=\"directionSelect?.show && directionSelect?.index === i\"\r\n [ngClass]=\" (directionSelect.show && directionSelect.index === i) ? 'z-1': ''\"\r\n class=\"list-unstyled mb-2\">\r\n <li (click)=\"onDirectionChange('up', i)\"\r\n [ngClass]=\"item[2].direction === 'up' ? 'selected' : ''\">\r\n <div class=\"d-flex\">\r\n <div>Up</div>\r\n </div>\r\n <div>\r\n <svg *ngIf=\"item[2].direction === 'up'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M16.6663 5L7.49967 14.1667L3.33301 10\" stroke=\"#00A3FF\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </li>\r\n <li (click)=\"onDirectionChange('down', i)\"\r\n [ngClass]=\"item[2].direction === 'down' ? 'selected' : ''\">\r\n <div class=\"d-flex\">\r\n\r\n <div>Down</div>\r\n </div>\r\n <div>\r\n <svg *ngIf=\"item[2].direction === 'down'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M16.6663 5L7.49967 14.1667L3.33301 10\" stroke=\"#00A3FF\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </li>\r\n <li (click)=\"onDirectionChange('right', i)\"\r\n [ngClass]=\"item[2].direction === 'right' ? 'selected' : ''\">\r\n <div class=\"d-flex\">\r\n\r\n <div>Right</div>\r\n </div>\r\n <div>\r\n <svg *ngIf=\"item[2].direction === 'right'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M16.6663 5L7.49967 14.1667L3.33301 10\" stroke=\"#00A3FF\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </li>\r\n <li (click)=\"onDirectionChange('left', i)\"\r\n [ngClass]=\"item[2].direction === 'left' ? 'selected' : ''\">\r\n <div class=\"d-flex\">\r\n\r\n <div>Left</div>\r\n </div>\r\n <div>\r\n <svg *ngIf=\"item[2].direction === 'left'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M16.6663 5L7.49967 14.1667L3.33301 10\" stroke=\"#00A3FF\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n </td>\r\n\r\n <td>\r\n <input min=\"0\" max=\"180\" class=\"angle-input\" [(ngModel)]=\"item[2].angle\"\r\n type=\"number\" (input)=\"validateAngleInput($event, i)\" (blur)=\"onAngleChange(i)\">\r\n <!-- <span class=\"angle-input\">\r\n {{item[2].angle}}°\r\n </span> -->\r\n </td>\r\n <td>\r\n <div (click)=\"toggleLineOptionsSelect(i)\"\r\n class=\"d-flex align-items-center justify-content-center h-100 elipsis-icon-dropdown\">\r\n <svg class=\"cursor-pointer\" xmlns=\"http://www.w3.org/2000/svg\" width=\"4\"\r\n height=\"19\" viewBox=\"0 0 4 19\" fill=\"none\">\r\n <path\r\n d=\"M1 9.50016C1 10.0294 1.44771 10.4585 2 10.4585C2.55228 10.4585 3 10.0294 3 9.50016C3 8.97089 2.55228 8.54183 2 8.54183C1.44771 8.54183 1 8.97089 1 9.50016Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M0.999999 16.2085C0.999999 16.7378 1.44771 17.1668 2 17.1668C2.55228 17.1668 3 16.7378 3 16.2085C3 15.6792 2.55228 15.2502 2 15.2502C1.44771 15.2502 0.999999 15.6792 0.999999 16.2085Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M1 2.79183C1 3.3211 1.44772 3.75016 2 3.75016C2.55228 3.75016 3 3.3211 3 2.79183C3 2.26256 2.55228 1.8335 2 1.8335C1.44772 1.8335 1 2.26256 1 2.79183Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <ul *ngIf=\"lineOptionsSelect?.show && lineOptionsSelect?.index === i\"\r\n [ngClass]=\" (lineOptionsSelect.show && lineOptionsSelect.index === i) ? 'z-1': ''\"\r\n class=\"list-unstyled mb-2\">\r\n <li (click)=\"onAddStep(i)\">\r\n <div class=\"d-flex\">\r\n <div>Add new step</div>\r\n </div>\r\n\r\n </li>\r\n <li (click)=\"onDuplicateStep(i)\">\r\n <div class=\"d-flex\">\r\n <div>Duplicate</div>\r\n </div>\r\n\r\n </li>\r\n <li (click)=\"onLineDelete(i)\">\r\n <div class=\"d-flex\">\r\n <div class=\"text-danger\">Delete</div>\r\n </div>\r\n\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n </ng-container>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <div [ngClass]=\"layoutMode === 'full' ? 'col-10' : 'col-7'\">\r\n <div class=\"c-card \" style=\"height: 75dvh;\">\r\n <div style=\"height: 7%;\" class=\"d-flex align-items-center justify-content-between\">\r\n <div>\r\n <!-- <lib-reactive-select *ngIf=\"floorsInput.value\" [formControl]=\"floorsInput\" [idField]=\"'id'\"\r\n [nameField]=\"'floorName'\" [data]=\"selectedStore?.floor\"></lib-reactive-select> -->\r\n <div (click)=\"toggleFloorSelect()\" class=\"floor-select\">\r\n <div>{{selectedFloor?.floorName}}</div>\r\n <div><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></div>\r\n <ul *ngIf=\"floorSelect?.show\" class=\"list-unstyled mb-2\">\r\n <li (click)=\"onFloorSelect(floor.id)\"\r\n *ngFor=\"let floor of selectedStore?.floor; let i = index\"\r\n [ngClass]=\"floor.id === selectedFloor.id ? 'selected': ''\">\r\n <div class=\"d-flex justify-content-between\">\r\n <span>{{floor?.floorName}}</span>\r\n <span *ngIf=\"selectedStore?.floor.length > 1\"\r\n (click)=\"$event.stopPropagation(); floorSelect.deleteIndex = i\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"23\"\r\n viewBox=\"0 0 24 23\" fill=\"none\">\r\n <path\r\n d=\"M11 11.4999C11 12.0292 11.4477 12.4583 12 12.4583C12.5523 12.4583 13 12.0292 13 11.4999C13 10.9706 12.5523 10.5416 12 10.5416C11.4477 10.5416 11 10.9706 11 11.4999Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M11 18.2083C11 18.7375 11.4477 19.1666 12 19.1666C12.5523 19.1666 13 18.7375 13 18.2083C13 17.679 12.5523 17.2499 12 17.2499C11.4477 17.2499 11 17.679 11 18.2083Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M11 4.79159C11 5.32086 11.4477 5.74992 12 5.74992C12.5523 5.74992 13 5.32086 13 4.79159C13 4.26231 12.5523 3.83325 12 3.83325C11.4477 3.83325 11 4.26231 11 4.79159Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <div *ngIf=\"floorSelect.deleteIndex === i\"\r\n (click)=\"$event.stopPropagation(); deleteFloor(i)\" class=\"option\">Delete</div>\r\n </li>\r\n <li (click)=\"openAddFloorModal()\">\r\n <span>\r\n <span class=\"mr-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33325V12.6666M3.3335 7.99992H12.6668\" stroke=\"#101828\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span>Add floor</span>\r\n </span>\r\n\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"d-flex align-items-center\" >\r\n <button (click)=\"findPolygonCenterAndScroll()\" class=\"btn btn-sm btn-outline bg-white me-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" viewBox=\"0 0 128 128\" id=\"recenter\">\r\n <path stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"7\" d=\"M38 74L49 63.5 38 53M53.5 37.5L64 48.5 74.5 37.5M90 53L79 63.5 90 74M74.5 89.5L64 78.5 53.5 89.5\"></path>\r\n <path stroke=\"#000\" stroke-linecap=\"round\" stroke-width=\"7\" d=\"M44 64L16 64M63.5 43.5L63.5 15.5M84 63L112 63M64.5 83.5L64.5 111.5\"></path>\r\n <circle cx=\"64\" cy=\"64\" r=\"5\" fill=\"#000\"></circle>\r\n </svg>\r\n </button>\r\n <button class=\"btn btn-sm btn-outline bg-white\" (click)=\"rotatePolygons()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\">\r\n <path\r\n d=\"M6.36265 7.17838L7.17625 6.36238L5.90425 5.09158L5.08945 5.90518L6.36265 7.17838ZM15.671 6.36358L19.6379 10.3304L20.9099 9.0572L16.9442 5.09038L15.671 6.36358ZM19.6379 18.8252L18.8243 19.6388L20.0963 20.9096L20.9099 20.0972L19.6379 18.8252ZM10.3295 19.6388L6.36265 15.672L5.09065 16.9452L9.05626 20.9108L10.3295 19.6388ZM18.8243 19.6388C17.6543 20.8076 16.8407 21.6188 16.1459 22.1492C15.4715 22.664 15.0155 22.8284 14.5763 22.8284V24.6284C15.5675 24.6284 16.4027 24.2168 17.2367 23.5808C18.0503 22.9604 18.9635 22.0448 20.0963 20.912L18.8243 19.6388ZM9.05626 20.9108C10.1891 22.0448 11.1023 22.9592 11.9159 23.5808C12.7499 24.2168 13.5851 24.6284 14.5763 24.6284V22.8284C14.1371 22.8284 13.6823 22.664 13.0067 22.1492C12.3119 21.6188 11.4983 20.8076 10.3295 19.6388L9.05626 20.9108ZM19.6379 10.3304C20.8067 11.4992 21.6179 12.3128 22.1483 13.0076C22.6631 13.6832 22.8275 14.138 22.8275 14.5772H24.6275C24.6275 13.586 24.2159 12.7508 23.5799 11.9168C22.9595 11.1032 22.0427 10.19 20.9099 9.0572L19.6379 10.3304ZM20.9099 20.0972C22.0439 18.9632 22.9583 18.0512 23.5799 17.2376C24.2159 16.4036 24.6275 15.5684 24.6275 14.5772H22.8275C22.8275 15.0164 22.6631 15.4724 22.1483 16.1468C21.6179 16.8416 20.8067 17.6552 19.6379 18.8252L20.9099 20.0972ZM7.17625 6.36238C8.34625 5.19358 9.15985 4.38118 9.85465 3.85078C10.529 3.33598 10.985 3.17278 11.4242 3.17278V1.37158C10.433 1.37158 9.59785 1.78318 8.76385 2.41918C7.94905 3.04078 7.03705 3.95518 5.90425 5.08798L7.17625 6.36238ZM16.9442 5.09038C15.8114 3.95638 14.8982 3.04078 14.0846 2.41918C13.2506 1.78318 12.4154 1.37158 11.4242 1.37158V3.17278C11.8634 3.17278 12.3182 3.33598 12.9938 3.85078C13.6886 4.38118 14.5022 5.19238 15.671 6.36118L16.9442 5.09038ZM5.08945 5.90278C3.95665 7.03558 3.04225 7.94758 2.42065 8.76238C1.78465 9.59638 1.37305 10.4316 1.37305 11.4228H3.17305C3.17305 10.9836 3.33745 10.5276 3.85225 9.85318C4.38265 9.15838 5.19385 8.34478 6.36265 7.17478L5.08945 5.90278ZM6.36265 15.6708C5.19385 14.5008 4.38265 13.6872 3.85225 12.9924C3.33745 12.318 3.17305 11.862 3.17305 11.4228H1.37305C1.37305 12.414 1.78465 13.2492 2.42065 14.0832C3.04225 14.8968 3.95665 15.81 5.08945 16.9428L6.36265 15.6708Z\"\r\n fill=\"#1D2939\" />\r\n <path\r\n d=\"M23.2 6.9832L25 8.2C25 4.582 22.4056 1.5796 19 1M2.8 19.0168L1 17.8C1 21.418 3.5944 24.4204 7 25\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button> \r\n </div>\r\n \r\n </div>\r\n <div class=\"hide-scrollbar\" style=\"height: 93%; overflow: scroll; position: relative;\" #scrollContainer>\r\n <canvas #gridCanvas>\r\n\r\n </canvas>\r\n\r\n <div *ngIf=\"popupVisible && popupPosition\" [style.top.px]=\"popupPosition.y\"\r\n [style.left.px]=\"popupPosition.x\" class=\"angle-widget\">\r\n <div (click)=\"toggleWidgetElementSelect()\" style=\"width: 147px;\"\r\n class=\"element-type-dropdown widget-element-type-dropdown d-flex justify-content-between position-relative\">\r\n <div>\r\n <span class=\"d-flex align-items-center\" *ngIf=\"elementType === 'wall'\">\r\n <svg class=\"me-3\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M1.33333 1.33333V0L2.66667 0V1.33333L6.66667 1.33333V0L8 0V1.33333L12 1.33333V0L13.3333 0V1.33333L17.3333 1.33333V0L18.6667 0V1.33333H20V2.66667H18.6667V6.66667H20V8H18.6667V12H20V13.3333H18.6667V17.3333H20V18.6667H18.6667V20H17.3333V18.6667H13.3333V20H12V18.6667H8V20H6.66667V18.6667H2.66667V20H1.33333V18.6667H0L0 17.3333H1.33333L1.33333 13.3333H0L0 12H1.33333L1.33333 8H0L0 6.66667H1.33333L1.33333 2.66667H0L0 1.33333H1.33333ZM2.66667 2.66667L2.66667 6.66667H6.66667V2.66667L2.66667 2.66667ZM8 2.66667V6.66667H12V2.66667L8 2.66667ZM13.3333 2.66667V6.66667H17.3333V2.66667H13.3333ZM17.3333 8L13.3333 8V12L17.3333 12V8ZM17.3333 13.3333L13.3333 13.3333L13.3333 17.3333H17.3333V13.3333ZM12 17.3333L12 13.3333H8L8 17.3333H12ZM6.66667 17.3333V13.3333H2.66667V17.3333H6.66667ZM2.66667 12H6.66667V8H2.66667L2.66667 12ZM8 8V12H12V8H8Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n <span class=\"type-txt\">Wall</span>\r\n </span>\r\n\r\n <span class=\"d-flex align-items-center\" *ngIf=\"elementType === 'facade'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 22 22\"\r\n fill=\"none\">\r\n <path\r\n d=\"M1 11V2.25C1 1.5625 1.5625 1 2.25 1H19.75C20.4375 1 21 1.5625 21 2.25V19.75C21 20.4375 20.4375 21 19.75 21H2.25C1.5625 21 1 20.4375 1 19.75V11Z\"\r\n stroke=\"#344054\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"type-txt\">Glass...</span>\r\n </span>\r\n\r\n <span class=\"d-flex align-items-center\" *ngIf=\"elementType === 'opening'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M12.5 2.5H15.8333C16.2754 2.5 16.6993 2.6756 17.0118 2.98816C17.3244 3.30072 17.5 3.72464 17.5 4.16667V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H12.5M8.33333 14.1667L12.5 10M12.5 10L8.33333 5.83333M12.5 10H2.5\"\r\n stroke=\"#101828\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"type-txt\">Openi...</span>\r\n </span>\r\n\r\n <span class=\"d-flex align-items-center\" *ngIf=\"elementType === 'entrance'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"18\" viewBox=\"0 0 21 18\"\r\n fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M17.9333 1.37949C8.7909 1.37949 1.37949 8.7909 1.37949 17.9333H0C0 8.02903 8.02903 0 17.9333 0V1.37949Z\"\r\n fill=\"#1D2939\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M19.3132 1.37949H17.9333L17.9337 16.5538H19.3132V1.37949ZM16.5542 0V17.9333H20.6927V0H16.5542Z\"\r\n fill=\"#1D2939\" />\r\n </svg>\r\n <span class=\"type-txt\">Entra...</span>\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"down-arrow\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <ul *ngIf=\"widgetElementSelect?.show \" [ngClass]=\" widgetElementSelect.show ? 'z-4': ''\"\r\n class=\"list-unstyled mb-2\">\r\n <li (click)=\"elementType = 'wall'\" [ngClass]=\"elementType === 'wall' ? 'selected' : ''\"\r\n class=\"selected\">\r\n <div class=\"d-flex\">\r\n <div class=\"me-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M1.33333 1.33333V0L2.66667 0V1.33333L6.66667 1.33333V0L8 0V1.33333L12 1.33333V0L13.3333 0V1.33333L17.3333 1.33333V0L18.6667 0V1.33333H20V2.66667H18.6667V6.66667H20V8H18.6667V12H20V13.3333H18.6667V17.3333H20V18.6667H18.6667V20H17.3333V18.6667H13.3333V20H12V18.6667H8V20H6.66667V18.6667H2.66667V20H1.33333V18.6667H0L0 17.3333H1.33333L1.33333 13.3333H0L0 12H1.33333L1.33333 8H0L0 6.66667H1.33333L1.33333 2.66667H0L0 1.33333H1.33333ZM2.66667 2.66667L2.66667 6.66667H6.66667V2.66667L2.66667 2.66667ZM8 2.66667V6.66667H12V2.66667L8 2.66667ZM13.3333 2.66667V6.66667H17.3333V2.66667H13.3333ZM17.3333 8L13.3333 8V12L17.3333 12V8ZM17.3333 13.3333L13.3333 13.3333L13.3333 17.3333H17.3333V13.3333ZM12 17.3333L12 13.3333H8L8 17.3333H12ZM6.66667 17.3333V13.3333H2.66667V17.3333H6.66667ZM2.66667 12H6.66667V8H2.66667L2.66667 12ZM8 8V12H12V8H8Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n </div>\r\n <div>Wall</div>\r\n </div>\r\n <div>\r\n <svg *ngIf=\"elementType === 'wall'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M16.6663 5L7.49967 14.1667L3.33301 10\" stroke=\"#00A3FF\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </li>\r\n <li (click)=\"elementType = 'facade'\" [ngClass]=\"elementType === 'facade' ? 'selected' : ''\">\r\n <div class=\"d-flex\">\r\n <div class=\"me-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\"\r\n viewBox=\"0 0 22 22\" fill=\"none\">\r\n <path\r\n d=\"M1 11V2.25C1 1.5625 1.5625 1 2.25 1H19.75C20.4375 1 21 1.5625 21 2.25V19.75C21 20.4375 20.4375 21 19.75 21H2.25C1.5625 21 1 20.4375 1 19.75V11Z\"\r\n stroke=\"#344054\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div>Glass/Facade</div>\r\n </div>\r\n <div>\r\n <svg *ngIf=\"elementType === 'facade'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M16.6663 5L7.49967 14.1667L3.33301 10\" stroke=\"#00A3FF\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </li>\r\n <li (click)=\"elementType = 'opening'\"\r\n [ngClass]=\"elementType === 'opening' ? 'selected' : ''\">\r\n <div class=\"d-flex\">\r\n <div class=\"me-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M12.5 2.5H15.8333C16.2754 2.5 16.6993 2.6756 17.0118 2.98816C17.3244 3.30072 17.5 3.72464 17.5 4.16667V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H12.5M8.33333 14.1667L12.5 10M12.5 10L8.33333 5.83333M12.5 10H2.5\"\r\n stroke=\"#101828\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div>Opening</div>\r\n </div>\r\n <div>\r\n <svg *ngIf=\"elementType === 'opening'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M16.6663 5L7.49967 14.1667L3.33301 10\" stroke=\"#00A3FF\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </li>\r\n <li (click)=\"elementType = 'entrance'\"\r\n [ngClass]=\"elementType === 'entrance' ? 'selected' : ''\">\r\n <div class=\"d-flex\">\r\n <div class=\"me-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"18\"\r\n viewBox=\"0 0 21 18\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M17.9333 1.37949C8.7909 1.37949 1.37949 8.7909 1.37949 17.9333H0C0 8.02903 8.02903 0 17.9333 0V1.37949Z\"\r\n fill=\"#1D2939\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M19.3132 1.37949H17.9333L17.9337 16.5538H19.3132V1.37949ZM16.5542 0V17.9333H20.6927V0H16.5542Z\"\r\n fill=\"#1D2939\" />\r\n </svg>\r\n </div>\r\n <div>Entrance</div>\r\n </div>\r\n <div>\r\n <svg *ngIf=\"elementType === 'entrance'\" xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M16.6663 5L7.49967 14.1667L3.33301 10\" stroke=\"#00A3FF\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n\r\n <div class=\"unit-input\">\r\n <svg (click)=\"onWidgetDistanceChange('decrement')\" class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path d=\"M2.9165 7H11.0832\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{movePixels}}</span>\r\n <svg (click)=\"onWidgetDistanceChange('increment')\" class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path d=\"M6.99984 2.9165V11.0832M2.9165 6.99984H11.0832\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"position-relative\" style=\"position: relative; width: 229px; height: 229px;\">\r\n <div\r\n style=\"position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 3;\">\r\n <div style=\"margin-bottom: 27px;\" class=\"d-flex justify-content-center\">\r\n <div (click)=\"onWidgetDirectionChange('up')\"\r\n [ngClass]=\"moveDirection === 'up' ? 'direction-selected' : ''\"\r\n class=\"direction-input\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <path\r\n d=\"M6.00016 10.6673L6.00016 1.33398M6.00016 1.33398L1.3335 6.00065M6.00016 1.33398L10.6668 6.00065\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div (click)=\"onWidgetDirectionChange('left')\"\r\n [ngClass]=\"moveDirection === 'left' ? 'direction-selected' : ''\"\r\n style=\"margin-right: 8px;\" class=\"direction-input\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <path\r\n d=\"M10.6663 5.99935L1.33301 5.99935M1.33301 5.99935L5.99967 10.666M1.33301 5.99935L5.99968 1.33268\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"unit-input\">\r\n <svg (click)=\"onWidgetAngleChange('decrement')\" class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\"\r\n fill=\"none\">\r\n <path d=\"M2.9165 7H11.0832\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{moveAngle}}°</span>\r\n <svg (click)=\"onWidgetAngleChange('increment')\" class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\"\r\n fill=\"none\">\r\n <path d=\"M6.99984 2.9165V11.0832M2.9165 6.99984H11.0832\" stroke=\"#667085\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <div (click)=\"onWidgetDirectionChange('right')\"\r\n [ngClass]=\"moveDirection === 'right' ? 'direction-selected' : ''\"\r\n style=\"margin-left: 8px;\" class=\"direction-input\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <path\r\n d=\"M1.33366 6.00065L10.667 6.00065M10.667 6.00065L6.00033 1.33398M10.667 6.00065L6.00033 10.6673\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n </div>\r\n\r\n <div style=\"margin-top: 27px;\" class=\"d-flex justify-content-center\">\r\n <div (click)=\"onWidgetDirectionChange('down')\"\r\n [ngClass]=\"moveDirection === 'down' ? 'direction-selected' : ''\"\r\n class=\"direction-input\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <path\r\n d=\"M5.99984 1.33268L5.99984 10.666M5.99984 10.666L10.6665 5.99935M5.99984 10.666L1.33317 5.99935\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <canvas height=\"229px\" width=\"229px\" #widgetCanvas\r\n style=\"position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 1;\"></canvas>\r\n <div style=\"position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 2;\"\r\n #circle class=\"circle\">\r\n <div class=\"line\" *ngFor=\"let line of lines\"\r\n [ngClass]=\"{'line--highlight': line.highlight, 'line--invisible': line.invisible}\"\r\n [style.transform]=\"line.transform\"></div>\r\n\r\n <div #pointer class=\"pointer\"></div>\r\n </div>\r\n </div>\r\n\r\n <button (click)=\"movePointWithAngle()\"\r\n [disabled]=\"!movePixels && moveAngle !== undefined && moveAngle !== null\"\r\n class=\" w-100 go-btn\">Go</button>\r\n\r\n </div>\r\n\r\n <!-- <div *ngIf=\"popupVisible && popupPosition\" [style.top.px]=\"popupPosition.y\" [style.left.px]=\"popupPosition.x\"\r\n class=\"popup\">\r\n <label>Move Pixels:</label>\r\n <select [(ngModel)]=\"elementType\">\r\n <option value=\"wall\">Wall</option>\r\n <option value=\"facade\">Glass/Facade</option>\r\n <option value=\"opening\">Opening</option>\r\n <option value=\"entrance\">Entrance</option>\r\n </select>\r\n <input type=\"number\" [(ngModel)]=\"movePixels\" />\r\n\r\n <select [(ngModel)]=\"moveDirection\">\r\n <option value=\"right\">Right</option>\r\n <option value=\"down\">Down</option>\r\n <option value=\"left\">Left</option>\r\n <option value=\"up\">Up</option>\r\n </select>\r\n <input type=\"number\" [(ngModel)]=\"moveAngle\" (ngModelChange)=\"layoutLengthPreview()\" />\r\n <button (click)=\"movePointWithAngle()\">Move with angle</button>\r\n </div> -->\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"planoStoreList.length > 1\" class=\"col-12 mt-6\">\r\n <div style=\"padding: 0px !important;\" class=\"c-card\">\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" (pageChange)=\"onPageChange($event)\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"></lib-pagination>\r\n </div>\r\n </div>\r\n\r\n</div>","import { Component } from '@angular/core';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'lib-complete-layout',\r\n standalone: false,\r\n templateUrl: './complete-layout.component.html',\r\n styleUrl: './complete-layout.component.scss'\r\n})\r\nexport class CompleteLayoutComponent {\r\n constructor(public modal:NgbActiveModal){}\r\n \r\n}\r\n","<div class=\"header mb-5\" >\r\n Complete layout\r\n</div>\r\n<div class=\"description mb-7\">\r\n Are you sure you want to finalize this layout? You can always return and make edits before submitting it for fixture validation.\r\n</div>\r\n<div class=\"d-flex align-items-center justify-content-end\">\r\n <button class=\"btn btn-outline bg-white me-5\" (click)=\"modal.close()\" >Cancel</button>\r\n <button class=\"btn btn-sm btn-primary\" (click)=\"modal.close({message:'confirm'})\">Complete</button>\r\n</div>","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, Renderer2, ViewChild } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { HeaderFilter } from '../../interfaces/layout-builder.interface';\r\nimport { StoreBuilderService } from '../../services/store-builder.service';\r\nimport { NgbModal, NgbOffcanvas } from '@ng-bootstrap/ng-bootstrap';\r\nimport { StoreOffcanvasComponentComponent } from '../store-offcanvas-component/store-offcanvas-component.component';\r\nimport { CompleteLayoutComponent } from './popups/complete-layout/complete-layout.component';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\n\r\n@Component({\r\n selector: 'lib-layout-summary',\r\n templateUrl: './layout-summary.component.html',\r\n styleUrl: './layout-summary.component.scss'\r\n})\r\nexport class LayoutSummaryComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n floorsInput = new FormControl()\r\n @ViewChild('gridCanvas', { static: true }) canvasRef!: ElementRef<HTMLCanvasElement>;\r\n @ViewChild('scrollContainer') scrollContainerRef!: ElementRef;\r\n @ViewChild('completeLayout') completeLayout!: ElementRef;\r\n\r\n\r\n gridWidth = 5;\r\n gridHeight = 5;\r\n\r\n private ctx!: CanvasRenderingContext2D;\r\n private canvas!: HTMLCanvasElement;\r\n\r\n layoutPolygon: any[] = [[\r\n {\r\n \"x\": 100,\r\n \"y\": 100\r\n },\r\n {\r\n \"x\": 100,\r\n \"y\": 100\r\n },\r\n {\r\n \"elementType\": \"wall\",\r\n \"distance\": 0,\r\n \"unit\": \"ft\",\r\n \"direction\": \"right\",\r\n \"angle\": 90,\r\n \"elementNumber\": 1\r\n }\r\n ]]\r\n\r\n private scale = 1;\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n headerData: HeaderFilter | null | undefined;\r\n\r\n planoStoreList: any[] = []\r\n selectedStore: any\r\n selectedFloor: any\r\n wallCapacity: number\r\n facadeCapacity: number\r\n floorCapacity: number\r\n\r\n floorSelect: { show: boolean, deleteIndex: number | null } = { show: false, deleteIndex: null }\r\n\r\n markAsCompleteType: 'single' | 'multiple' = 'single'\r\n\r\n itemsPerPage = 1\r\n currentPage = 0\r\n totalItems = 1\r\n paginationSizes = [1]\r\n pageSize = 1\r\n\r\n pixelPerMetre: number = 50\r\n\r\n\r\n onFloorSelect(floorId: string) {\r\n if (this.layoutPolygon[0][0].x !== this.layoutPolygon[0][1].x && this.layoutPolygon[0][0].y !== this.layoutPolygon[0][1].y) {\r\n this.updateFloorLayout()\r\n }\r\n this.selectedFloor = this.selectedStore.floor.filter((floor: any) => floor.id === floorId)[0]\r\n this.generateLayoutPolygon(this.selectedFloor.layoutPolygon)\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onOutsideClick(event: MouseEvent): void {\r\n\r\n const clickedInside6 = (event.target as HTMLElement).closest('.floor-select');\r\n if (!clickedInside6) {\r\n this.floorSelect = { show: false, deleteIndex: null };\r\n }\r\n }\r\n\r\n toggleFloorSelect(): void {\r\n this.floorSelect = {\r\n show: !this.floorSelect.show,\r\n deleteIndex: null\r\n };\r\n }\r\n\r\n constructor(private route: ActivatedRoute, private apiService: StoreBuilderService, private modalService: NgbModal,\r\n private offcanvasService: NgbOffcanvas, private router: Router, private modalDef: NgbModal, private toastService:ToastService) {\r\n this.headerData = JSON.parse(localStorage.getItem('header-filters') as string)\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.initializeLayout()\r\n }\r\n\r\n initializeLayout() {\r\n const centerX = this.canvas.width / 2 / this.scale;\r\n const centerY = this.canvas.height / 2 / this.scale;\r\n\r\n this.layoutPolygon = [\r\n [\r\n {\r\n \"x\": this.snapToGrid(centerX, this.gridHeight),\r\n \"y\": this.snapToGrid(centerY, this.gridWidth)\r\n },\r\n {\r\n \"x\": this.snapToGrid(centerX, this.gridHeight),\r\n \"y\": this.snapToGrid(centerY, this.gridWidth)\r\n },\r\n {\r\n \"elementType\": \"wall\",\r\n \"distance\": 0,\r\n \"unit\": \"ft\",\r\n \"direction\": \"right\",\r\n \"angle\": 90,\r\n \"elementNumber\": 1\r\n }\r\n ]\r\n ]\r\n }\r\n\r\n ngOnInit(): void {\r\n this.canvas = this.canvasRef.nativeElement;\r\n this.ctx = this.canvas.getContext('2d')!;\r\n\r\n this.canvas.width = 10000;\r\n this.canvas.height = 10000;\r\n\r\n\r\n this.drawGrid();\r\n\r\n this.route.queryParams\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((params) => {\r\n if (params?.id) {\r\n const ids = params.id.split(',') || [];\r\n this.getPlanoData(ids)\r\n }\r\n });\r\n\r\n this.floorsInput.valueChanges.subscribe((val) => {\r\n if (val) {\r\n if (this.layoutPolygon[0][0].x !== this.layoutPolygon[0][1].x && this.layoutPolygon[0][0].y !== this.layoutPolygon[0][1].y) {\r\n this.updateFloorLayout()\r\n }\r\n this.selectedFloor = this.selectedStore.floor.filter((floor: any) => floor.id === val)[0]\r\n this.generateLayoutPolygon(this.selectedFloor.layoutPolygon)\r\n }\r\n })\r\n\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 onStoreChange(event: any) {\r\n if (this.layoutPolygon[0][0].x !== this.layoutPolygon[0][1].x && this.layoutPolygon[0][0].y !== this.layoutPolygon[0][1].y) {\r\n this.updateFloorLayout()\r\n }\r\n const index = this.planoStoreList.findIndex(item => item.planoId === event.planoId);\r\n this.currentPage = index + 1\r\n this.selectedStore = event;\r\n this.selectedFloor = this.selectedStore.floor[0];\r\n this.floorsInput.setValue(this.selectedFloor.id, { emitEvent: false });\r\n this.generateLayoutPolygon(this.selectedFloor.layoutPolygon);\r\n }\r\n\r\n getPlanoData(planoId: string[]) {\r\n const payload = {\r\n id: planoId\r\n }\r\n\r\n this.apiService.getPlano(payload).subscribe({\r\n next: (res: any) => {\r\n this.planoStoreList = res.data\r\n this.totalItems = res.data.length\r\n // this.planoStoreList = res.data.filter((plano:any) => plano.status !== 'completed');\r\n if (!this.selectedStore) {\r\n this.selectedStore = this.planoStoreList[0]\r\n } else {\r\n this.selectedStore = this.planoStoreList.filter((store: any) => store.planoId === this.selectedStore.planoId)[0]\r\n }\r\n if (!this.selectedFloor) {\r\n this.selectedFloor = this.selectedStore.floor[0]\r\n } else {\r\n this.selectedFloor = this.selectedStore.floor.filter((floor: any) => floor.id === this.selectedFloor.id)[0]\r\n }\r\n\r\n this.planoStoreList.forEach((store) => {\r\n if (store.planoId === this.selectedStore.planoId) {\r\n store.selected = true\r\n }\r\n })\r\n\r\n this.floorsInput.setValue(this.selectedFloor.id, { emitEvent: false })\r\n this.generateLayoutPolygon(this.selectedFloor.layoutPolygon)\r\n },\r\n error: (err) => {\r\n console.log(err)\r\n }\r\n })\r\n }\r\n\r\n updateFloorLayout() {\r\n const payload = {\r\n id: this.selectedFloor.id,\r\n layoutPolygon: this.layoutPolygon.map((segment) => {\r\n const [point1, point2, properties] = segment\r\n return properties\r\n })\r\n }\r\n\r\n this.apiService.updateFloorLayout(payload).subscribe({\r\n next: (res) => {\r\n this.getPlanoData(this.selectedStore.planoId)\r\n },\r\n error: (err) => {\r\n console.log(err)\r\n }\r\n })\r\n }\r\n\r\n onComplete() {\r\n\r\n if (this.planoStoreList.length === 1) {\r\n const modelRef = this.modalDef.open(CompleteLayoutComponent, { centered: true });\r\n modelRef.result.then((val: any) => {\r\n if (val.message === 'confirm') {\r\n this.updatePlanoStatus()\r\n }\r\n })\r\n } else {\r\n this.modalService.open(this.completeLayout, { centered: true, size: \"lg\" })\r\n }\r\n }\r\n\r\n\r\n drawGrid(): void {\r\n this.ctx.save();\r\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n this.ctx.scale(this.scale, this.scale);\r\n this.ctx.fillStyle = 'white';\r\n this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\r\n\r\n }\r\n\r\n drawPolygon(polygon = this.layoutPolygon) {\r\n if (polygon.length < 1) return; // If the polygon has no edges, exit early.\r\n\r\n this.ctx.save(); // Save the current canvas state.\r\n this.ctx.scale(this.scale, this.scale); // Scale the canvas context to match the desired scale.\r\n // this.ctx.translate(this.panOffset.x, this.panOffset.y);\r\n\r\n\r\n // Function to draw an arrowhead at a specific location and angle.\r\n function drawArrowhead(ctx: any, x: any, y: any, angle: any) {\r\n const size = 5; // Define the size of the arrowhead.\r\n ctx.save(); // Save the current canvas state.\r\n ctx.translate(x, y); // Move the context to the arrowhead position.\r\n ctx.rotate(angle); // Rotate the context to match the arrow's angle.\r\n ctx.beginPath(); // Start a new path.\r\n ctx.moveTo(0, 0); // Move to the tip of the arrowhead.\r\n ctx.lineTo(-size, -size / 2); // Draw one side of the arrowhead.\r\n ctx.lineTo(-size, size / 2); // Draw the other side of the arrowhead.\r\n ctx.closePath(); // Close the arrowhead path.\r\n ctx.fillStyle = 'black'; // Set the arrowhead color.\r\n ctx.fill(); // Fill the arrowhead.\r\n ctx.restore(); // Restore the previous canvas state.\r\n }\r\n\r\n this.ctx.beginPath(); // Begin the main polygon path.\r\n polygon.forEach((edge, edgeIndex) => {\r\n const point = edge[0]; // Starting point of the edge.\r\n const nextPoint = edge[1]; // Ending point of the edge.\r\n const properties = edge[2]; // Properties of the edge (e.g., labels, distances).\r\n\r\n // Draw the main polygon edge.\r\n if (edgeIndex === 0) this.ctx.moveTo(point.x, point.y); // Move to the first edge starting point.\r\n this.ctx.lineTo(nextPoint.x, nextPoint.y); // Draw a line to the next point.\r\n\r\n // Calculate the perpendicular offset for the bounding box.\r\n const dx = nextPoint.x - point.x; // X-difference between start and end points.\r\n const dy = nextPoint.y - point.y; // Y-difference between start and end points.\r\n const length = Math.sqrt(dx * dx + dy * dy); // Length of the edge.\r\n const offsetX = (dy / length) * 20; // Offset in the X direction.\r\n const offsetY = (-dx / length) * 20; // Offset in the Y direction.\r\n\r\n // Define the bounding box points.\r\n const boxPoints = [\r\n { x: point.x, y: point.y },\r\n { x: nextPoint.x, y: nextPoint.y },\r\n { x: nextPoint.x + offsetX, y: nextPoint.y + offsetY },\r\n { x: point.x + offsetX, y: point.y + offsetY },\r\n ];\r\n\r\n // Draw the bounding box.\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(boxPoints[0].x, boxPoints[0].y);\r\n boxPoints.forEach((pt, index) => {\r\n if (properties.elementType === 'entrance') {\r\n if (index < 2) {\r\n this.ctx.lineTo(pt.x, pt.y)\r\n }\r\n } else {\r\n this.ctx.lineTo(pt.x, pt.y); // Draw each edge of the box.\r\n }\r\n });\r\n if (properties.elementType === 'opening') {\r\n this.ctx.closePath(); // Close the bounding box path.\r\n this.ctx.fillStyle = '#F9FAFB'; // Set a translucent fill color.\r\n this.ctx.fill(); // Fill the bounding box.\r\n\r\n this.ctx.strokeStyle = '#F9FAFB'\r\n\r\n this.ctx.stroke(); // Draw the bounding box border. \r\n } else {\r\n this.ctx.closePath(); // Close the bounding box path.\r\n this.ctx.fillStyle = '#F9FAFB'; // Set a translucent fill color.\r\n this.ctx.fill(); // Fill the bounding box.\r\n this.ctx.strokeStyle = '#1D2939'\r\n this.ctx.stroke(); // Draw the bounding box border. \r\n }\r\n\r\n\r\n // Position text in the middle of the bounding box.\r\n const textX = (boxPoints[1].x + boxPoints[3].x) / 2;\r\n const textY = (boxPoints[1].y + boxPoints[3].y) / 2;\r\n\r\n this.ctx.save(); // Save the current canvas state.\r\n this.ctx.translate(textX, textY); // Move the context to the text position.\r\n\r\n // Rotate text based on the edge direction.\r\n if (dx === 0) {\r\n this.ctx.rotate(-Math.PI / 2); // Rotate for vertical edges.\r\n } else if (dy !== 0) {\r\n const angle = Math.atan2(dy, dx); // Calculate angle for diagonal edges.\r\n this.ctx.rotate(angle); // Rotate the text to match the angle.\r\n }\r\n\r\n // Draw the edge properties as text.\r\n this.ctx.font = '12px Arial'; // Set the font style and size.\r\n this.ctx.fillStyle = 'black'; // Set the text color.\r\n this.ctx.textAlign = 'center'; // Align text to the center.\r\n this.ctx.textBaseline = 'middle'; // Align text vertically in the middle.\r\n this.ctx.fillText(\r\n `${properties.elementType} ${properties.elementNumber} - ${properties.distance} ${properties.unit}`,\r\n 0,\r\n 0\r\n );\r\n this.ctx.restore(); // Restore the previous canvas state.\r\n\r\n if (properties.distance >= 4) {\r\n // Define the midpoints of the left and right edges of the bounding box.\r\n const centerX = textX;\r\n const centerY = textY;\r\n const rightX = (boxPoints[1].x + boxPoints[2].x) / 2;\r\n const rightY = (boxPoints[1].y + boxPoints[2].y) / 2;\r\n const leftX = (boxPoints[0].x + boxPoints[3].x) / 2;\r\n const leftY = (boxPoints[0].y + boxPoints[3].y) / 2;\r\n\r\n // Helper function to adjust points by a specific distance.\r\n function adjustPoint(x1: any, y1: any, x2: any, y2: any, distance: any) {\r\n const angle = Math.atan2(y2 - y1, x2 - x1); // Calculate the angle.\r\n return {\r\n x: x1 + Math.cos(angle) * distance, // Adjust X by distance.\r\n y: y1 + Math.sin(angle) * distance, // Adjust Y by distance.\r\n };\r\n }\r\n\r\n // Define the arrow line start and end points for the right side.\r\n const rightStart = adjustPoint(centerX, centerY, rightX, rightY, 50);\r\n const rightEnd = adjustPoint(rightX, rightY, centerX, centerY, 10);\r\n\r\n // Define the arrow line start and end points for the left side.\r\n const leftStart = adjustPoint(centerX, centerY, leftX, leftY, 50);\r\n const leftEnd = adjustPoint(leftX, leftY, centerX, centerY, 10);\r\n\r\n // Draw the right arrow.\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(rightStart.x, rightStart.y);\r\n this.ctx.lineTo(rightEnd.x, rightEnd.y);\r\n this.ctx.strokeStyle = 'black'; // Set the arrow line color.\r\n this.ctx.stroke(); // Draw the arrow line.\r\n let rightAngle = Math.atan2(rightEnd.y - rightStart.y, rightEnd.x - rightStart.x);\r\n drawArrowhead(this.ctx, rightEnd.x, rightEnd.y, rightAngle); // Draw the arrowhead.\r\n\r\n // Draw the left arrow.\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(leftStart.x, leftStart.y);\r\n this.ctx.lineTo(leftEnd.x, leftEnd.y);\r\n this.ctx.strokeStyle = 'black'; // Set the arrow line color.\r\n this.ctx.stroke(); // Draw the arrow line.\r\n let leftAngle = Math.atan2(leftEnd.y - leftStart.y, leftEnd.x - leftStart.x);\r\n drawArrowhead(this.ctx, leftEnd.x, leftEnd.y, leftAngle); // Draw the arrowhead.\r\n\r\n }\r\n\r\n // For Entrance\r\n if (properties.elementType === 'entrance') {\r\n // Calculate the angle of the main line (edge) in radians.\r\n const angle = Math.atan2(nextPoint.y - point.y, nextPoint.x - point.x);\r\n\r\n // Add 15 degrees to the angle for the entrance line.\r\n const entranceAngle = angle + (15 * Math.PI) / 180; // Convert 15 degrees to radians.\r\n\r\n // Define the length of the entrance line.\r\n const lineLength = this.convertToPixels(properties.distance, properties.unit) * 0.75;\r\n\r\n // Calculate the endpoint of the entrance line based on the angle.\r\n const endPoint = {\r\n x: point.x + Math.cos(entranceAngle) * lineLength,\r\n y: point.y + Math.sin(entranceAngle) * lineLength,\r\n };\r\n\r\n // Draw the entrance line.\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(point.x, point.y);\r\n this.ctx.lineTo(endPoint.x, endPoint.y);\r\n this.ctx.strokeStyle = '#1D2939'\r\n this.ctx.stroke();\r\n }\r\n\r\n\r\n });\r\n\r\n this.ctx.restore(); // Restore the original canvas state.\r\n }\r\n\r\n zoomIn(): void {\r\n this.scale *= 1.1;\r\n this.redrawCanvas();\r\n }\r\n\r\n zoomOut(): void {\r\n this.scale /= 1.1;\r\n this.redrawCanvas();\r\n }\r\n\r\n redrawCanvas(): void {\r\n this.drawGrid();\r\n this.drawPolygon();\r\n }\r\n\r\n\r\n\r\n snapToGrid(value: number, gridSize: number): number {\r\n return Math.round(value / gridSize) * gridSize;\r\n }\r\n\r\n\r\n rotatePolygons(): void {\r\n const rotatePoint = (point: { x: number; y: number }, center: { x: number; y: number }): { x: number; y: number } => {\r\n const dx = point.x - center.x;\r\n const dy = point.y - center.y;\r\n return { x: center.x - dy, y: center.y + dx };\r\n };\r\n\r\n const getPolygonLineCenter = (line: any[]): { x: number; y: number } => {\r\n const [start, end] = line;\r\n return {\r\n x: (start.x + end.x) / 2,\r\n y: (start.y + end.y) / 2,\r\n };\r\n };\r\n\r\n const getOverallCenter = (lines: any[]): { x: number; y: number } => {\r\n const sum = lines.reduce(\r\n (acc, line) => {\r\n const center = getPolygonLineCenter(line);\r\n acc.x += center.x;\r\n acc.y += center.y;\r\n return acc;\r\n },\r\n { x: 0, y: 0 }\r\n );\r\n\r\n return { x: sum.x / lines.length, y: sum.y / lines.length };\r\n };\r\n\r\n const overallCenter = getOverallCenter(this.layoutPolygon);\r\n\r\n this.layoutPolygon = this.layoutPolygon.map((line) => {\r\n const [start, end, properties] = line;\r\n return [\r\n rotatePoint(start, overallCenter),\r\n rotatePoint(end, overallCenter),\r\n properties\r\n ];\r\n });\r\n\r\n\r\n this.drawGrid();\r\n this.drawPolygon();\r\n }\r\n\r\n convertToPixels(value: number, unit: 'ft' | 'm'): number {\r\n const PIXELS_PER_METER = this.pixelPerMetre;\r\n const PIXELS_PER_FOOT = PIXELS_PER_METER / 3.28084;\r\n\r\n if (typeof value !== 'number' || value < 0) {\r\n throw new Error('Value must be a non-negative number');\r\n }\r\n\r\n switch (unit) {\r\n case 'm':\r\n return value * PIXELS_PER_METER;\r\n case 'ft':\r\n return value * PIXELS_PER_FOOT;\r\n default:\r\n throw new Error(\"Invalid unit. Supported units are 'mt' for meters and 'ft' for feet.\");\r\n }\r\n }\r\n\r\n\r\n scrollToCanvasPosition(coordinates: { x: number; y: number }): void {\r\n const container = this.scrollContainerRef.nativeElement;\r\n\r\n const containerRect = container.getBoundingClientRect();\r\n const containerScrollLeft = container.scrollLeft;\r\n const containerScrollTop = container.scrollTop;\r\n\r\n const targetX = coordinates.x;\r\n const targetY = coordinates.y;\r\n\r\n const offset = {\r\n up: 50,\r\n down: 200,\r\n left: 100,\r\n right: 100,\r\n };\r\n\r\n const visibleLeft = containerScrollLeft + offset.left;\r\n const visibleRight = containerScrollLeft + containerRect.width - offset.right;\r\n const visibleTop = containerScrollTop + offset.up;\r\n const visibleBottom = containerScrollTop + containerRect.height - offset.down;\r\n\r\n const isXInView = targetX >= visibleLeft && targetX <= visibleRight;\r\n const isYInView = targetY >= visibleTop && targetY <= visibleBottom;\r\n\r\n if (!isXInView || !isYInView) {\r\n const adjustedX = Math.max(0, targetX - offset.left);\r\n const adjustedY = Math.max(0, targetY - offset.up);\r\n\r\n container.scrollTo({\r\n left: adjustedX,\r\n top: adjustedY,\r\n behavior: 'smooth',\r\n });\r\n }\r\n }\r\n\r\n calculatePolygonArea(elements: any[]): number {\r\n const vertices: { x: number; y: number }[] = [];\r\n const centerX = 0; // Assuming (0,0) as the starting point for calculation\r\n const centerY = 0;\r\n let currentPoint = { x: centerX, y: centerY };\r\n\r\n const conversionFactor = 50; // Pixels per foot (adjust as needed)\r\n\r\n // Compute vertices based on layout instructions\r\n for (const element of elements) {\r\n const radians: number = {\r\n up: ((180 - element.angle) * Math.PI) / 180,\r\n left: ((270 - element.angle) * Math.PI) / 180,\r\n down: ((360 - element.angle) * Math.PI) / 180,\r\n right: ((90 - element.angle) * Math.PI) / 180,\r\n }[element.direction as 'up' | 'left' | 'down' | 'right'];\r\n\r\n if (radians === undefined) {\r\n throw new Error(`Invalid direction: ${element.direction}`);\r\n }\r\n\r\n const distanceInPixels = element.distance * conversionFactor;\r\n const newX = currentPoint.x + Math.cos(radians) * distanceInPixels;\r\n const newY = currentPoint.y - Math.sin(radians) * distanceInPixels;\r\n\r\n vertices.push({ x: currentPoint.x, y: currentPoint.y });\r\n\r\n currentPoint = {\r\n x: this.snapToGrid(newX, this.gridWidth),\r\n y: this.snapToGrid(newY, this.gridHeight),\r\n };\r\n }\r\n\r\n // Close the polygon by adding the starting vertex at the end\r\n vertices.push(vertices[0]);\r\n\r\n // Apply the Shoelace formula\r\n let areaInPixels = 0;\r\n for (let i = 0; i < vertices.length - 1; i++) {\r\n const x1 = vertices[i].x;\r\n const y1 = vertices[i].y;\r\n const x2 = vertices[i + 1].x;\r\n const y2 = vertices[i + 1].y;\r\n areaInPixels += x1 * y2 - y1 * x2;\r\n }\r\n\r\n // Convert area from pixels² to feet²\r\n const areaInSquareFeet = Math.abs(areaInPixels / 2) / (conversionFactor * conversionFactor);\r\n\r\n return Math.round(areaInSquareFeet); // Return the area in square feet\r\n }\r\n\r\n\r\n\r\n\r\n generateLayoutPolygon(layoutInstructions: any) {\r\n\r\n this.pixelPerMetre = this.normalizedPixelPerMetre(layoutInstructions)\r\n\r\n this.wallCapacity = layoutInstructions.reduce((acc: any, val: any) => {\r\n if (val.elementType === 'wall') {\r\n return acc += val.distance\r\n } else {\r\n return acc\r\n }\r\n }, 0)\r\n this.facadeCapacity = layoutInstructions.reduce((acc: any, val: any) => {\r\n if (val.elementType === 'facade') {\r\n return acc += val.distance\r\n } else {\r\n return acc\r\n }\r\n }, 0)\r\n\r\n this.floorCapacity = this.calculatePolygonArea(layoutInstructions)\r\n\r\n this.layoutPolygon = [];\r\n\r\n const centerX = this.canvas.width / 2 / this.scale;\r\n const centerY = this.canvas.height / 2 / this.scale;\r\n\r\n let currentPoint = {\r\n \"x\": this.snapToGrid(centerX, this.gridHeight),\r\n \"y\": this.snapToGrid(centerY, this.gridWidth)\r\n };\r\n\r\n if (!layoutInstructions.length) {\r\n\r\n this.layoutPolygon = [\r\n [\r\n {\r\n \"x\": this.snapToGrid(centerX, this.gridHeight),\r\n \"y\": this.snapToGrid(centerY, this.gridWidth)\r\n },\r\n {\r\n \"x\": this.snapToGrid(centerX, this.gridHeight),\r\n \"y\": this.snapToGrid(centerY, this.gridWidth)\r\n },\r\n {\r\n \"elementType\": \"wall\",\r\n \"distance\": 0,\r\n \"unit\": \"ft\",\r\n \"direction\": \"right\",\r\n \"angle\": 90,\r\n \"elementNumber\": 1\r\n }\r\n ]\r\n ]\r\n this.openWidget({ x: this.snapToGrid(centerX, this.gridHeight), y: this.snapToGrid(centerY, this.gridWidth) })\r\n this.drawGrid()\r\n this.drawPolygon()\r\n return\r\n }\r\n\r\n layoutInstructions.forEach((instruction: any) => {\r\n const radians: number = {\r\n 'up': ((180 - instruction.angle) * Math.PI) / 180,\r\n 'left': ((270 - instruction.angle) * Math.PI) / 180,\r\n 'down': ((360 - instruction.angle) * Math.PI) / 180,\r\n 'right': ((90 - instruction.angle) * Math.PI) / 180,\r\n }[instruction.direction as 'up' | 'left' | 'down' | 'right'];\r\n\r\n if (radians === undefined) {\r\n throw new Error(`Invalid direction: ${instruction.direction}`);\r\n }\r\n\r\n const distanceInPixels = this.convertToPixels(instruction.distance, instruction.unit);\r\n const newX = currentPoint.x + Math.cos(radians) * distanceInPixels;\r\n const newY = currentPoint.y - Math.sin(radians) * distanceInPixels;\r\n\r\n const newPoint = {\r\n x: this.snapToGrid(newX, this.gridWidth),\r\n y: this.snapToGrid(newY, this.gridHeight),\r\n };\r\n\r\n const lineSegment = [\r\n currentPoint,\r\n newPoint,\r\n {\r\n elementType: instruction.elementType,\r\n distance: instruction.distance,\r\n unit: instruction.unit,\r\n direction: instruction.direction,\r\n angle: instruction.angle,\r\n elementNumber: instruction.elementNumber,\r\n },\r\n ];\r\n\r\n this.layoutPolygon.push(lineSegment);\r\n\r\n currentPoint = newPoint;\r\n });\r\n\r\n const lastPoint = this.layoutPolygon[this.layoutPolygon.length - 1][1]\r\n\r\n if (this.isFloorCompleted(layoutInstructions)) {\r\n this.findPolygonCenterAndScroll()\r\n } else {\r\n this.openWidget(lastPoint)\r\n }\r\n\r\n this.drawGrid()\r\n this.drawPolygon()\r\n\r\n }\r\n\r\n isFloorCompleted(layoutInstructions: any, thresholdInFeet: number = 1): boolean {\r\n const layoutPolygon: any[] = [];\r\n const centerX = this.canvas.width / 2 / this.scale;\r\n const centerY = this.canvas.height / 2 / this.scale;\r\n\r\n let currentPoint = {\r\n x: this.snapToGrid(centerX, this.gridHeight),\r\n y: this.snapToGrid(centerY, this.gridWidth),\r\n };\r\n\r\n layoutInstructions.forEach((instruction: any) => {\r\n const radians: number = {\r\n 'up': ((180 - instruction.angle) * Math.PI) / 180,\r\n 'left': ((270 - instruction.angle) * Math.PI) / 180,\r\n 'down': ((360 - instruction.angle) * Math.PI) / 180,\r\n 'right': ((90 - instruction.angle) * Math.PI) / 180,\r\n }[instruction.direction as 'up' | 'left' | 'down' | 'right'];\r\n\r\n if (radians === undefined) {\r\n throw new Error(`Invalid direction: ${instruction.direction}`);\r\n }\r\n\r\n const distanceInPixels = this.convertToPixels(instruction.distance, instruction.unit);\r\n const newX = currentPoint.x + Math.cos(radians) * distanceInPixels;\r\n const newY = currentPoint.y - Math.sin(radians) * distanceInPixels;\r\n\r\n const newPoint = {\r\n x: this.snapToGrid(newX, this.gridWidth),\r\n y: this.snapToGrid(newY, this.gridHeight),\r\n };\r\n\r\n const lineSegment = [\r\n currentPoint,\r\n newPoint,\r\n {\r\n elementType: instruction.elementType,\r\n distance: instruction.distance,\r\n unit: instruction.unit,\r\n direction: instruction.direction,\r\n angle: instruction.angle,\r\n elementNumber: instruction.elementNumber,\r\n },\r\n ];\r\n\r\n layoutPolygon.push(lineSegment);\r\n currentPoint = newPoint;\r\n });\r\n\r\n const firstPoint = layoutPolygon?.[0]?.[0];\r\n const lastPoint = layoutPolygon?.[layoutPolygon.length - 1]?.[1];\r\n\r\n if (layoutPolygon.length <= 1 || !firstPoint || !lastPoint) {\r\n return false;\r\n }\r\n\r\n const distanceBetweenPoints = Math.sqrt(\r\n Math.pow(lastPoint.x - firstPoint.x, 2) + Math.pow(lastPoint.y - firstPoint.y, 2)\r\n );\r\n\r\n const thresholdInPixels = this.convertToPixels(thresholdInFeet, 'ft');\r\n return distanceBetweenPoints <= thresholdInPixels;\r\n }\r\n\r\n openWidget(position: { x: number, y: number }, offset = { up: 0, right: 5, down: 15, left: 0, }) {\r\n const adjustedPosition = {\r\n x: position.x + offset.right + offset.left,\r\n y: position.y + offset.up + offset.down,\r\n };\r\n\r\n this.scrollToCanvasPosition(adjustedPosition)\r\n\r\n }\r\n\r\n openOffCanva() {\r\n let canvaRef = this.offcanvasService.open(StoreOffcanvasComponentComponent, { position: 'end', panelClass: 'set-height' })\r\n canvaRef.componentInstance.store = this.selectedStore;\r\n canvaRef.componentInstance.clientId = this.headerData?.client;\r\n canvaRef.componentInstance.id = this.selectedStore.planoId;\r\n }\r\n\r\n onModalSelectAll(event: any) {\r\n this.planoStoreList.forEach((store) => store.selected = event.target.checked)\r\n }\r\n\r\n get isAllStoreSelected() {\r\n return this.planoStoreList.every((store) => store.selected)\r\n }\r\n\r\n onModalTypeChange(event: 'single' | 'multiple') {\r\n if (event === 'single') {\r\n this.planoStoreList.forEach((store, index) => {\r\n if (store.planoId === this.selectedStore.planoId) {\r\n store.selected = true\r\n } else {\r\n store.selected = false\r\n }\r\n })\r\n } else if (event === 'multiple') {\r\n this.planoStoreList.forEach((store) => store.selected = true)\r\n }\r\n\r\n }\r\n\r\n updatePlanoStatus() {\r\n const payload = {\r\n storeId: this.planoStoreList.filter((store) => store.selected === true).map((store) => store.storeId),\r\n status: \"completed\"\r\n }\r\n\r\n this.apiService.updatePlanoStatus(payload).subscribe({\r\n next: (res:any) => {\r\n if(res.code === 200){\r\n this.toastService.getSuccessToast(res.message)\r\n this.router.navigateByUrl('/manage/planogram/store-layout')\r\n }\r\n },\r\n error: (err) => {\r\n console.log(err)\r\n }\r\n })\r\n }\r\n\r\n onPageChange(val: number) {\r\n this.selectedStore = this.planoStoreList[val - 1];\r\n this.selectedFloor = this.selectedStore.floor[0];\r\n this.floorsInput.setValue(this.selectedFloor.id, { emitEvent: false });\r\n this.generateLayoutPolygon(this.selectedFloor.layoutPolygon);\r\n }\r\n\r\n normalizedPixelPerMetre(polygon: any): number {\r\n const MIN_PIXELS_PER_METER = 50;\r\n const MAX_PIXELS_PER_METER = 150;\r\n\r\n let totalLength = 0;\r\n let lineCount = 0;\r\n\r\n polygon.forEach((line: any) => {\r\n if (line.unit === 'ft') {\r\n totalLength = totalLength + (line.distance * 3.28084);\r\n } else {\r\n totalLength = totalLength + line.distance;\r\n }\r\n lineCount++;\r\n });\r\n\r\n const averageLength = lineCount > 0 ? totalLength / lineCount : 0;\r\n\r\n const MAX_AVERAGE_LENGTH = 50;\r\n const MIN_AVERAGE_LENGTH = 5;\r\n\r\n const normalizedLength = Math.min(\r\n Math.max(averageLength, MIN_AVERAGE_LENGTH),\r\n MAX_AVERAGE_LENGTH\r\n );\r\n\r\n const pixelsPerMeter =\r\n MAX_PIXELS_PER_METER -\r\n ((normalizedLength - MIN_AVERAGE_LENGTH) / (MAX_AVERAGE_LENGTH - MIN_AVERAGE_LENGTH)) *\r\n (MAX_PIXELS_PER_METER - MIN_PIXELS_PER_METER);\r\n\r\n return Math.round(pixelsPerMeter);\r\n }\r\n\r\n findPolygonCenterAndScroll(polygon: any = this.layoutPolygon): void {\r\n const vertices = polygon.flatMap((line: any) => line.slice(0, 2));\r\n\r\n const minX = Math.min(...vertices.map((v: any) => v.x));\r\n const maxX = Math.max(...vertices.map((v: any) => v.x));\r\n const minY = Math.min(...vertices.map((v: any) => v.y));\r\n const maxY = Math.max(...vertices.map((v: any) => v.y));\r\n\r\n let center = { x: (minX + maxX) / 2, y: (minY + maxY) / 2 };\r\n\r\n const step = 1;\r\n let bestPoint = center;\r\n let bestDistanceSum = Number.MAX_VALUE;\r\n\r\n for (let x = minX; x <= maxX; x += step) {\r\n for (let y = minY; y <= maxY; y += step) {\r\n const point = { x, y };\r\n if (isPointInsidePolygon(point, vertices)) {\r\n const distanceSum = vertices.reduce(\r\n (sum: number, vertex: any) => sum + Math.sqrt((point.x - vertex.x) ** 2 + (point.y - vertex.y) ** 2),\r\n 0\r\n );\r\n if (distanceSum < bestDistanceSum) {\r\n bestDistanceSum = distanceSum;\r\n bestPoint = point;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const scrollContainer = this.scrollContainerRef.nativeElement;\r\n scrollContainer.scrollTo({\r\n left: bestPoint.x - scrollContainer.offsetWidth / 2,\r\n top: bestPoint.y - scrollContainer.offsetHeight / 2,\r\n behavior: 'smooth'\r\n });\r\n\r\n function isPointInsidePolygon(point: any, vertices: any): boolean {\r\n let count = 0;\r\n for (let i = 0; i < vertices.length; i++) {\r\n const start = vertices[i];\r\n const end = vertices[(i + 1) % vertices.length];\r\n if (rayIntersectsSegment(point, { start, end })) {\r\n count++;\r\n }\r\n }\r\n return count % 2 === 1;\r\n }\r\n\r\n function rayIntersectsSegment(point: any, segment: any): boolean {\r\n const { x, y } = point;\r\n const { start, end } = segment;\r\n\r\n if (y < Math.min(start.y, end.y) || y > Math.max(start.y, end.y)) {\r\n return false;\r\n }\r\n\r\n const t = (y - start.y) / (end.y - start.y);\r\n const intersectX = start.x + t * (end.x - start.x);\r\n\r\n return intersectX >= x;\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n}\r\n","<div class=\"d-flex align-items-center justify-content-between mb-6\">\r\n <div>\r\n <div *ngIf=\"planoStoreList.length === 1\" class=\"storename-txt\">\r\n {{selectedStore?.storeName}} - Layout\r\n </div>\r\n <div *ngIf=\"planoStoreList.length > 1\">\r\n <lib-select-plano [items]=\"planoStoreList\" [multi]=\"false\" [searchField]=\"'storeName'\" [idField]=\"'storeId'\"\r\n (selected)=\"onStoreChange($event)\" [selectedValues]=\"[selectedStore]\"></lib-select-plano>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center\">\r\n <button (click)=\"onComplete()\" class=\"btn btn-sm btn-primary me-5\">Complete</button>\r\n <button (click)=\"openOffCanva()\" class=\"btn btn-sm btn-outline bg-white\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9 3V21M5 3H19C20.1046 3 21 3.89543 21 5V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19V5C3 3.89543 3.89543 3 5 3Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"row mb-6\">\r\n <div class=\"col-4\">\r\n <div class=\"area-card\">\r\n <div>\r\n <div> <span class=\"main-txt me-2\">{{wallCapacity || 0}}</span> <span class=\"unit-txt\">rft</span> </div>\r\n <div class=\"sub-txt\">Wall capacity</div>\r\n </div>\r\n <div>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"65\" height=\"65\" viewBox=\"0 0 65 65\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M4.33333 4.33333V0H8.66667V4.33333H21.6667V0H26V4.33333H39V0H43.3333V4.33333H56.3333V0H60.6667V4.33333H65V8.66667H60.6667V21.6667H65V26H60.6667V39H65V43.3333H60.6667V56.3333H65V60.6667H60.6667V65H56.3333V60.6667H43.3333V65H39V60.6667H26V65H21.6667V60.6667H8.66667V65H4.33333V60.6667H0V56.3333H4.33333V43.3333H0V39H4.33333V26H0V21.6667H4.33333V8.66667H0V4.33333H4.33333ZM8.66667 8.66667V21.6667H21.6667V8.66667H8.66667ZM26 8.66667V21.6667H39V8.66667H26ZM43.3333 8.66667V21.6667H56.3333V8.66667H43.3333ZM56.3333 26H43.3333V39H56.3333V26ZM56.3333 43.3333H43.3333V56.3333H56.3333V43.3333ZM39 56.3333V43.3333H26V56.3333H39ZM21.6667 56.3333V43.3333H8.66667V56.3333H21.6667ZM8.66667 39H21.6667V26H8.66667V39ZM26 26V39H39V26H26Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"area-card\">\r\n <div>\r\n <div> <span class=\"main-txt me-2\">{{facadeCapacity || 0}}</span> <span class=\"unit-txt\">rft</span> </div>\r\n <div class=\"sub-txt\">Facade capacity</div>\r\n </div>\r\n <div>\r\n <svg width=\"65\" height=\"65\" viewBox=\"0 0 65 65\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"64\" height=\"64\" fill=\"#FDFDFD\" stroke=\"black\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"area-card\">\r\n <div>\r\n <div> <span class=\"main-txt me-2\">{{floorCapacity || 0}}</span> <span class=\"unit-txt\">sqft</span> </div>\r\n <div class=\"sub-txt\">Floor capacity</div>\r\n </div>\r\n <div>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"102\" height=\"58\" viewBox=\"0 0 102 58\" fill=\"none\">\r\n <path d=\"M3.54359 36.4607L29.8929 2.06432L98.0939 6.44191L99.908 55.5468L3.54359 36.4607Z\" stroke=\"#475467\"\r\n stroke-width=\"4\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"row\">\r\n <div class=\"col-4\">\r\n <div class=\"c-card\" style=\"height: 75dvh; position: relative;\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-5\" style=\"height: 8%;\">\r\n <div>\r\n <div class=\"l-pane-head\">\r\n Capacity details\r\n </div>\r\n <div class=\"l-pane-desc\">\r\n Below are the capacity details of the elements\r\n </div>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"table-responsive hide-scrollbar \" style=\"height: 92%;\">\r\n <table class=\"table\">\r\n <thead class=\"thead-light\">\r\n <tr>\r\n <th>#</th>\r\n <th> <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M1.33333 1.33333V0L2.66667 0V1.33333L6.66667 1.33333V0L8 0V1.33333L12 1.33333V0L13.3333 0V1.33333L17.3333 1.33333V0L18.6667 0V1.33333H20V2.66667H18.6667V6.66667H20V8H18.6667V12H20V13.3333H18.6667V17.3333H20V18.6667H18.6667V20H17.3333V18.6667H13.3333V20H12V18.6667H8V20H6.66667V18.6667H2.66667V20H1.33333V18.6667H0L0 17.3333H1.33333L1.33333 13.3333H0L0 12H1.33333L1.33333 8H0L0 6.66667H1.33333L1.33333 2.66667H0L0 1.33333H1.33333ZM2.66667 2.66667L2.66667 6.66667H6.66667V2.66667L2.66667 2.66667ZM8 2.66667V6.66667H12V2.66667L8 2.66667ZM13.3333 2.66667V6.66667H17.3333V2.66667H13.3333ZM17.3333 8L13.3333 8V12L17.3333 12V8ZM17.3333 13.3333L13.3333 13.3333L13.3333 17.3333H17.3333V13.3333ZM12 17.3333L12 13.3333H8L8 17.3333H12ZM6.66667 17.3333V13.3333H2.66667V17.3333H6.66667ZM2.66667 12H6.66667V8H2.66667L2.66667 12ZM8 8V12H12V8H8Z\"\r\n fill=\"#344054\" />\r\n </svg> <span>Wall</span> </th>\r\n <th>RFT ({{wallCapacity || 0}})</th>\r\n\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let item of layoutPolygon; let i = index\">\r\n <tr *ngIf=\"item[2] && item[2].elementType === 'wall'\">\r\n <td>\r\n {{1}}\r\n </td>\r\n <td>\r\n <div class=\"table-td\">{{item[2].elementType}} {{item[2].elementNumber}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-td\">{{item[2].distance}}</div>\r\n\r\n </td>\r\n </tr>\r\n </ng-container>\r\n\r\n </tbody>\r\n </table>\r\n <table class=\"table\">\r\n <thead class=\"thead-light\">\r\n <tr>\r\n <th>#</th>\r\n <th> <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 22 22\"\r\n fill=\"none\">\r\n <path\r\n d=\"M1 11V2.25C1 1.5625 1.5625 1 2.25 1H19.75C20.4375 1 21 1.5625 21 2.25V19.75C21 20.4375 20.4375 21 19.75 21H2.25C1.5625 21 1 20.4375 1 19.75V11Z\"\r\n stroke=\"#344054\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> <span>Facade</span> </th>\r\n <th>RFT ({{facadeCapacity || 0}})</th>\r\n\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let item of layoutPolygon; let i = index\">\r\n <tr *ngIf=\"item[2] && item[2].elementType === 'facade'\">\r\n <td>\r\n {{i}}\r\n </td>\r\n <td>\r\n <div class=\"table-td\">{{item[2].elementType}} {{item[2].elementNumber}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-td\">{{item[2].distance}}</div>\r\n\r\n </td>\r\n </tr>\r\n </ng-container>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"col-8\">\r\n <div class=\"c-card \" style=\"height: 75dvh;\">\r\n <div style=\"height: 8%;\" class=\"d-flex align-items-center justify-content-between\">\r\n <div>\r\n <!-- <lib-reactive-select *ngIf=\"floorsInput.value\" [formControl]=\"floorsInput\" [idField]=\"'id'\"\r\n [nameField]=\"'floorName'\" [data]=\"selectedStore?.floor\"></lib-reactive-select> -->\r\n <div (click)=\"toggleFloorSelect()\" class=\"floor-select\">\r\n <div>{{selectedFloor?.floorName}}</div>\r\n <div><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></div>\r\n <ul *ngIf=\"floorSelect?.show\" class=\"list-unstyled mb-2\">\r\n <li (click)=\"onFloorSelect(floor.id)\" *ngFor=\"let floor of selectedStore?.floor; let i = index\"\r\n [ngClass]=\"floor.id === selectedFloor.id ? 'selected': ''\">\r\n <div class=\"d-flex justify-content-between\">\r\n <span>{{floor?.floorName}}</span>\r\n\r\n </div>\r\n\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-sm btn-outline bg-white\" (click)=\"rotatePolygons()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\">\r\n <path\r\n d=\"M6.36265 7.17838L7.17625 6.36238L5.90425 5.09158L5.08945 5.90518L6.36265 7.17838ZM15.671 6.36358L19.6379 10.3304L20.9099 9.0572L16.9442 5.09038L15.671 6.36358ZM19.6379 18.8252L18.8243 19.6388L20.0963 20.9096L20.9099 20.0972L19.6379 18.8252ZM10.3295 19.6388L6.36265 15.672L5.09065 16.9452L9.05626 20.9108L10.3295 19.6388ZM18.8243 19.6388C17.6543 20.8076 16.8407 21.6188 16.1459 22.1492C15.4715 22.664 15.0155 22.8284 14.5763 22.8284V24.6284C15.5675 24.6284 16.4027 24.2168 17.2367 23.5808C18.0503 22.9604 18.9635 22.0448 20.0963 20.912L18.8243 19.6388ZM9.05626 20.9108C10.1891 22.0448 11.1023 22.9592 11.9159 23.5808C12.7499 24.2168 13.5851 24.6284 14.5763 24.6284V22.8284C14.1371 22.8284 13.6823 22.664 13.0067 22.1492C12.3119 21.6188 11.4983 20.8076 10.3295 19.6388L9.05626 20.9108ZM19.6379 10.3304C20.8067 11.4992 21.6179 12.3128 22.1483 13.0076C22.6631 13.6832 22.8275 14.138 22.8275 14.5772H24.6275C24.6275 13.586 24.2159 12.7508 23.5799 11.9168C22.9595 11.1032 22.0427 10.19 20.9099 9.0572L19.6379 10.3304ZM20.9099 20.0972C22.0439 18.9632 22.9583 18.0512 23.5799 17.2376C24.2159 16.4036 24.6275 15.5684 24.6275 14.5772H22.8275C22.8275 15.0164 22.6631 15.4724 22.1483 16.1468C21.6179 16.8416 20.8067 17.6552 19.6379 18.8252L20.9099 20.0972ZM7.17625 6.36238C8.34625 5.19358 9.15985 4.38118 9.85465 3.85078C10.529 3.33598 10.985 3.17278 11.4242 3.17278V1.37158C10.433 1.37158 9.59785 1.78318 8.76385 2.41918C7.94905 3.04078 7.03705 3.95518 5.90425 5.08798L7.17625 6.36238ZM16.9442 5.09038C15.8114 3.95638 14.8982 3.04078 14.0846 2.41918C13.2506 1.78318 12.4154 1.37158 11.4242 1.37158V3.17278C11.8634 3.17278 12.3182 3.33598 12.9938 3.85078C13.6886 4.38118 14.5022 5.19238 15.671 6.36118L16.9442 5.09038ZM5.08945 5.90278C3.95665 7.03558 3.04225 7.94758 2.42065 8.76238C1.78465 9.59638 1.37305 10.4316 1.37305 11.4228H3.17305C3.17305 10.9836 3.33745 10.5276 3.85225 9.85318C4.38265 9.15838 5.19385 8.34478 6.36265 7.17478L5.08945 5.90278ZM6.36265 15.6708C5.19385 14.5008 4.38265 13.6872 3.85225 12.9924C3.33745 12.318 3.17305 11.862 3.17305 11.4228H1.37305C1.37305 12.414 1.78465 13.2492 2.42065 14.0832C3.04225 14.8968 3.95665 15.81 5.08945 16.9428L6.36265 15.6708Z\"\r\n fill=\"#1D2939\" />\r\n <path d=\"M23.2 6.9832L25 8.2C25 4.582 22.4056 1.5796 19 1M2.8 19.0168L1 17.8C1 21.418 3.5944 24.4204 7 25\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <div class=\"hide-scrollbar\" style=\"height: 92%; overflow: scroll; position: relative;\" #scrollContainer>\r\n <canvas #gridCanvas>\r\n\r\n </canvas>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"planoStoreList.length > 1\" class=\"col-12 mt-6\">\r\n <div style=\"padding: 0px !important;\" class=\"c-card\">\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" (pageChange)=\"onPageChange($event)\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"></lib-pagination>\r\n </div>\r\n</div>\r\n\r\n</div>\r\n\r\n<ng-template #completeLayout let-modal>\r\n <div class=\"card\">\r\n <div style=\"min-height: unset; border-bottom: unset; padding-top: 2.25rem;\" class=\"card-header\">\r\n <div class=\"card-title\">\r\n <span class=\"modal-header-txt\">Complete Layout</span>\r\n </div>\r\n </div>\r\n <div style=\"padding-top: 1rem;\" class=\"card-body\">\r\n <div class=\"form-check\">\r\n <input (ngModelChange)=\"onModalTypeChange($event)\" [(ngModel)]=\"markAsCompleteType\" class=\"form-check-input\" type=\"radio\" name=\"one\" id=\"single\"\r\n value=\"single\">\r\n <div class=\"ms-3\">\r\n <div class=\"modal-main-txt\">Mark as complete for only <span\r\n class=\"highlight-txt\">{{selectedStore?.storeName}}</span></div>\r\n <div class=\"modal-sub-txt\">This action will considered as layout completion for {{selectedStore?.storeName}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"w-100 h-0 border my-5 border-bottom-grey\"></div>\r\n <div class=\"form-check mb-5\">\r\n <input (ngModelChange)=\"onModalTypeChange($event)\" [(ngModel)]=\"markAsCompleteType\" class=\"form-check-input\" type=\"radio\" name=\"one\" id=\"multiple\"\r\n value=\"multiple\">\r\n <div class=\"ms-3\">\r\n <div class=\"modal-main-txt\">Mark as complete for all {{planoStoreList.length}} stores</div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"markAsCompleteType === 'multiple'\" class=\"table-responsive\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr style=\"border-bottom: 1px solid #EAECF0; background: #FCFCFD;\">\r\n <th>\r\n <div class=\"form-check\">\r\n <input (click)=\"onModalSelectAll($event)\" [(ngModel)]=\"isAllStoreSelected\" class=\"form-check-input c-checkbox\" type=\"checkbox\">\r\n <label class=\"form-check-label check-label modal-storeName\">\r\n Store Name\r\n </label>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr style=\"border-bottom: 1px solid #EAECF0;\" *ngFor=\"let store of planoStoreList\">\r\n <td>\r\n <div class=\"form-check\">\r\n <input [(ngModel)]=\"store.selected\" class=\"form-check-input c-checkbox\" type=\"checkbox\">\r\n <label class=\"form-check-label check-label modal-storeName\">\r\n {{store?.storeName}}\r\n </label>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"d-flex align-items-center justify-content-end\">\r\n <button (click)=\"modal.dismiss()\" class=\"btn btn-outline bg-white me-5\">Cancel</button>\r\n <button (click)=\"updatePlanoStatus(); modal.dismiss()\" class=\"btn btn-sm btn-primary \">Complete</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</ng-template>","import { Component, OnDestroy, OnInit, ViewChild,HostListener, ElementRef } from '@angular/core';\r\nimport { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';\r\nimport { Subject, takeUntil,debounceTime } from 'rxjs';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { StoreBuilderService } from '../../services/store-builder.service';\r\nimport * as XLSX from 'xlsx';\r\nimport { Router } from '@angular/router';\r\nimport JSZip from 'jszip';\r\nimport {DeleteLayoutComponent} from '../create-layout/popups/delete-layout/delete-layout.component'\r\n\r\n@Component({\r\n selector: 'lib-store-layout-table',\r\n templateUrl: './store-layout-table.component.html',\r\n styleUrl: './store-layout-table.component.scss'\r\n})\r\nexport class StoreLayoutTableComponent implements OnInit,OnDestroy {\r\n @ViewChild('file') fileInput!: ElementRef;\r\n loading:boolean = true;\r\n selectedTab:string = 'layoutBuilder';\r\n floorNo:number=1;\r\n searchStore:string;\r\n storeList:any[] = []\r\n store:any[] = [];\r\n paginationSizes:any = [];\r\n selectedStore:any = {};\r\n showDropDown:boolean = false;\r\n totalItems:number;\r\n dynamicData:any = {\r\n clientId:'',\r\n limit:10,\r\n offset:1,\r\n searchValue:'',\r\n sortColumnName:'',\r\n sortBy:'',\r\n filter:[]\r\n }\r\n layoutList:any = [];\r\n pageSize:any=10;\r\n dataObject: any = [\r\n {\r\n Description: 'status',\r\n Issues: [\r\n { text: 'Draft', id: 'draft' },\r\n { text: 'Completed', id: 'completed' },\r\n ],\r\n },\r\n ];\r\n error:any = [];\r\n excelData:any;\r\n showNoData:boolean = true;\r\n private destroy$ = new Subject();\r\n private scale = 1;\r\n gridWidth = 5;\r\n gridHeight = 5;\r\n pixelSize:any = 50;\r\n @ViewChild('createBuilder') createBuilder: any;\r\n @ViewChild('uploadBuilder') uploadBuilder: any;\r\n\r\n constructor(private modalDef:NgbModal,private pageInfo:PageInfoService,private toast:ToastService,private gs:GlobalStateService,private builderService:StoreBuilderService,private Router:Router) {}\r\n\r\n ngOnInit(): void {\r\n this.setPageData();\r\n let getDetails = JSON.parse(localStorage.getItem('header-filters') as string)\r\n console.log(getDetails)\r\n if(getDetails) {\r\n this.dynamicData.clientId = getDetails?.client || getDetails?.clients?.[0] || getDetails?.clients?.[1];\r\n this.getLayoutList();\r\n this.getStoreList()\r\n }\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 setPageData() {\r\n this.pageInfo.setTitle(\"Planogram\");\r\n this.pageInfo.setDescription(\"\");\r\n this.pageInfo.setBreadcrumbs([]);\r\n }\r\n\r\n getLayoutList() {\r\n this.loading = true;\r\n this.layoutList = [];\r\n this.builderService.layoutList(this.dynamicData).pipe(takeUntil(this.destroy$), debounceTime(300)).subscribe({\r\n next:(res:any) => {\r\n this.loading = false;\r\n if(res && res?.data?.data.length) {\r\n this.showNoData = false;\r\n this.layoutList = res.data.data;\r\n this.totalItems = res.data.count;\r\n if(this.totalItems < 9) {\r\n this.paginationSizes = [this.totalItems];\r\n this.pageSize = this.totalItems;\r\n }\r\n else {\r\n this.paginationSizes = [10,20,30];\r\n this.pageSize = this.dynamicData.limit;\r\n }\r\n }\r\n else {\r\n if(this.dynamicData.searchValue.length || this.dynamicData.filter.length) {\r\n this.showNoData = false;\r\n }else {\r\n this.showNoData = true;\r\n }\r\n this.layoutList = [];\r\n }\r\n },\r\n error:(err:any) =>{\r\n this.showNoData = true;\r\n this.loading = false;\r\n this.layoutList = [];\r\n this.toast.getErrorToast(err?.error?.error || 'Something went wrong')\r\n }\r\n });\r\n }\r\n\r\n getStoreList() {\r\n let data = {\r\n \"clientId\": [this.dynamicData.clientId],\r\n \"offset\": 1,\r\n \"limit\": 10000,\r\n \"sortColumName\": \"storeId\",\r\n \"sortBy\": -1,\r\n \"searchValue\": \"\",\r\n \"export\": false,\r\n \"status\": [\r\n \"Live\",\r\n \"onboarded\",\r\n \"deployed\",\r\n \"paired\",\r\n \"installationfailed\",\r\n \"Infra Issue\"\r\n ]\r\n }\r\n this.builderService.getStoreList(data).subscribe((res: any) => {\r\n if(res && res.code == 200 && res.data.result.length) {\r\n let stores:any = [];\r\n res.data.result.forEach((item:any) => {\r\n stores.push({\r\n name:item.storeName,\r\n id:item.storeId\r\n })\r\n })\r\n this.storeList = this.store = stores;\r\n }\r\n else {\r\n this.storeList = [];\r\n }\r\n });\r\n }\r\n\r\n applyFilters(event:any) {\r\n this.dynamicData.limit = 10;\r\n this.dynamicData.filter = event?.[0]?.Issues.map((ele:any) => ele.id);\r\n this.getLayoutList();\r\n }\r\n\r\n BuilderCreate() {\r\n this.showDropDown = false;\r\n this.selectedStore = {};\r\n this.floorNo = 1;\r\n this.modalDef.open(this.createBuilder,{centered:true});\r\n }\r\n\r\n floorDec() {\r\n if(this.floorNo >= 2) {\r\n this.floorNo--;\r\n }\r\n }\r\n\r\n floorInc() {\r\n this.floorNo++;\r\n }\r\n\r\n filterSearch() {\r\n if(this.searchStore.trim().length) {\r\n let store = this.searchStore.split(',');\r\n if(store.length > 1) {\r\n store = store.map((item:any) => item.trim().toLowerCase())\r\n this.storeList = this.store.filter((item:any) => store.includes(item.name.toLowerCase()))\r\n }\r\n else {\r\n this.storeList = this.store.filter((item:any) => item.name.toLowerCase().includes(this.searchStore.trim().toLowerCase()))\r\n }\r\n }\r\n else {\r\n this.storeList = [...this.store]\r\n }\r\n }\r\n\r\n updateSelectedStore(index:number){\r\n this.selectedStore = this.storeList[index];\r\n this.closeDropDown();\r\n }\r\n\r\n closeDropDown() {\r\n this.showDropDown = false;\r\n }\r\n\r\n toggleDropDown() {\r\n this.showDropDown = true;\r\n }\r\n\r\n createLayout() {\r\n let params = {\r\n storeName:this.selectedStore.name,\r\n storeId:this.selectedStore.id,\r\n clientId:this.dynamicData.clientId,\r\n floorNumber:this.floorNo,\r\n }\r\n\r\n this.builderService.createLayout(params).pipe(takeUntil(this.destroy$), debounceTime(300)).subscribe({\r\n next:(res:any) =>{\r\n if(res.code == 200) {\r\n this.toast.getSuccessToast(res?.message || 'Layout created successfully');\r\n this.selectedStore ={};\r\n this.floorNo = 1;\r\n this.modalDef.dismissAll();\r\n this.Router.navigateByUrl(`/manage/planogram/layout-builder/create?id=${res.data.id}`)\r\n }\r\n },\r\n error:(err:any) =>{\r\n console.log(err)\r\n this.toast.getErrorToast(err?.error?.error || 'Something went wrong')\r\n }\r\n });\r\n }\r\n\r\n onPageChange(event:any) {\r\n this.dynamicData.offset = event;\r\n this.getLayoutList();\r\n }\r\n\r\n onPageSizeChange(event:any) {\r\n this.dynamicData.offset = 1;\r\n this.dynamicData.limit = event;\r\n this.getLayoutList();\r\n }\r\n\r\n search() {\r\n this.dynamicData.limit = 10;\r\n this.dynamicData.offset = 1;\r\n this.dynamicData.sortColumnName = '';\r\n this.dynamicData.sortBy = '';\r\n this.getLayoutList();\r\n }\r\n\r\n onSort(data:any) {\r\n this.dynamicData.offset = 1;\r\n if(this.dynamicData.sortColumnName == data) {\r\n this.dynamicData.sortBy = this.dynamicData.sortBy == 1 ? -1 : 1;\r\n }\r\n else {\r\n this.dynamicData.sortBy = 1;\r\n this.dynamicData.sortColumnName = data;\r\n }\r\n this.getLayoutList();\r\n }\r\n\r\n getHeadersFromSheet(sheet: any): string[] {\r\n const headers: string[] = [];\r\n const range = XLSX.utils.decode_range(sheet['!ref']);\r\n \r\n // Loop through the columns in the first row\r\n for (let col = range.s.c; col <= range.e.c; col++) {\r\n const cell = sheet[XLSX.utils.encode_cell({ r: range.s.r, c: col })];\r\n if (cell) {\r\n headers.push(cell.v);\r\n }\r\n }\r\n return headers;\r\n }\r\n\r\n onFileUpload(event:any) {\r\n let data: any;\r\n const target: DataTransfer = <DataTransfer>(event.target);\r\n let isExcelFile = !!target.files[0].name.match(/(.xls|.xlsx)/);\r\n this.error = [];\r\n\r\n if (isExcelFile) {\r\n const reader: FileReader = new FileReader();\r\n reader.readAsBinaryString(target.files[0]);\r\n reader.onload = (e: any) => {\r\n const bstr: string = e.target.result;\r\n const wb: XLSX.WorkBook = XLSX.read(bstr, { type: 'binary' });\r\n const wsname: string = wb.SheetNames[0];\r\n const ws: XLSX.WorkSheet = wb.Sheets[wsname];\r\n data = XLSX.utils.sheet_to_json(ws);\r\n const worksheet = wb.Sheets[wb.SheetNames[0]];\r\n\r\n // Get the header row (first row)\r\n const headers = this.getHeadersFromSheet(worksheet);\r\n if(!data.length) {\r\n this.fileInput.nativeElement.value = '';\r\n return this.toast.getErrorToast('Please enter values');\r\n }\r\n let storeList:any = [];\r\n let emptyList:any=[];\r\n data.forEach((item:any,index:any) => {\r\n let getValue = headers.filter(key => item[key] === null || item[key] === '' || item[key] == undefined);\r\n if(getValue.length) {\r\n getValue.forEach((item) => {\r\n let letter = item == 'Store Name' ? 'A' : item == 'No.of.Floors' ? 'B' : item == 'Step' ? 'C' : item == 'Elements' ? 'D' : item == 'Measurements(ft)' ? 'E' : item == 'direction' ? 'F' : 'G';\r\n emptyList.push(letter + parseInt(index + 2))\r\n })\r\n }\r\n else {\r\n let checkDuplicate = storeList.findIndex((ele:any) => ele.storeName.trim() == item['Store Name'].trim() && ele.floorNumber == item['No.of.Floors'] && ele.step == item['Step'])\r\n if(checkDuplicate == -1) {\r\n storeList.push(\r\n {\r\n storeName:item['Store Name'].trim(),\r\n floorNumber:item['No.of.Floors'],\r\n step:item['Step'],\r\n elements:item['Elements'] == 'Glass/Facade' ? 'facade' : item['Elements'].toLowerCase(),\r\n distance:item['Measurements(ft)'],\r\n direction:item['Direction'].toLowerCase(),\r\n degree:item['Degree']\r\n }\r\n )\r\n }\r\n else {\r\n this.error.push({index:index + 2,message:'Duplicate Step',ExistIndex:checkDuplicate + 2,series:'C'});\r\n }\r\n }\r\n })\r\n if(emptyList.length) {\r\n console.log(emptyList)\r\n this.error.push({index:emptyList.toString(),message:'Missing Field'});\r\n }\r\n let uniqueStore = [...new Set(storeList.map((ele:any) => ele.storeName))];\r\n this.excelData = {\r\n totalStore:uniqueStore.length,\r\n totalRow: data.length,\r\n totalError:this.error.length\r\n }\r\n console.log(this.error)\r\n if(this.error.length) {\r\n this.modalDef.dismissAll();\r\n this.fileInput.nativeElement.value = '';\r\n this.modalDef.open(this.uploadBuilder,{centered:true});\r\n return;\r\n }\r\n this.builderService.BulkUpload({data:storeList,clientId:this.dynamicData.clientId}).pipe(takeUntil(this.destroy$), debounceTime(300)).subscribe({\r\n next:(res:any) => {\r\n this.modalDef.dismissAll();\r\n if(res && res.code == 200) {\r\n this.fileInput.nativeElement.value = '';\r\n this.toast.getSuccessToast(res?.message || 'Bulk store upload successfully');\r\n this.Router.navigateByUrl(`/manage/planogram/layout-builder/create?id=${res.data.id}`)\r\n }\r\n },\r\n error:(err:any) =>{\r\n this.modalDef.dismissAll();\r\n if(err?.error?.error) {\r\n let error = err?.error?.error;\r\n error.forEach((err:any) => {\r\n let errorKey:any = [];\r\n data.forEach((ele:any,index:any) =>{\r\n let findExists = err.value.find((elem:any) => elem == ele['Store Name']);\r\n if(findExists) {\r\n errorKey.push(`A${index+2}`)\r\n }\r\n })\r\n this.error.push({index:errorKey.toString(),message:err.message});\r\n })\r\n this.excelData.totalError = this.error.length;\r\n this.fileInput.nativeElement.value = '';\r\n this.modalDef.open(this.uploadBuilder,{centered:true});\r\n return;\r\n }\r\n }\r\n })\r\n }\r\n }\r\n else {\r\n this.toast.getErrorToast('Please upload xlsx file')\r\n }\r\n }\r\n\r\n Reupload() {\r\n this.fileInput.nativeElement.value = '';\r\n let ele = document.getElementById('xlsxUpload');\r\n ele?.click();\r\n }\r\n\r\n showDeleteDropDown(i:any) {\r\n this.layoutList.forEach((item:any,index:any) => {\r\n if(i == index) {\r\n item.deleteIndex = item?.deleteIndex ? false : true;\r\n }\r\n else {\r\n item.deleteIndex = false;\r\n }\r\n })\r\n }\r\n\r\n deleteLayout(id:any) {\r\n let modelRef = this.modalDef.open(DeleteLayoutComponent,{centered:true});\r\n modelRef.result.then((res) =>{\r\n if(res.message == 'confirm') {\r\n this.builderService.deleteLayout(id).pipe(takeUntil(this.destroy$), debounceTime(300)).subscribe({\r\n next:(res:any) =>{\r\n if(res && res.code == 200) {\r\n this.toast.getSuccessToast(res?.message || 'Layout deleted successfully');\r\n this.getLayoutList();\r\n }\r\n },\r\n error:(error:any) => {\r\n this.toast.getErrorToast(error?.error?.error || 'Something went wrong');\r\n }\r\n });\r\n }\r\n })\r\n }\r\n\r\n normalizedPixelPerMetre(polygon: any): number {\r\n const MIN_PIXELS_PER_METER = 50;\r\n const MAX_PIXELS_PER_METER = 150;\r\n\r\n let totalLength = 0;\r\n let lineCount = 0;\r\n\r\n polygon.forEach((line: any) => {\r\n if (line.unit === 'ft') {\r\n totalLength = totalLength + (line.distance * 3.28084);\r\n } else {\r\n totalLength = totalLength + line.distance;\r\n }\r\n lineCount++;\r\n });\r\n\r\n const averageLength = lineCount > 0 ? totalLength / lineCount : 0;\r\n\r\n const MAX_AVERAGE_LENGTH = 50;\r\n const MIN_AVERAGE_LENGTH = 5;\r\n\r\n const normalizedLength = Math.min(\r\n Math.max(averageLength, MIN_AVERAGE_LENGTH),\r\n MAX_AVERAGE_LENGTH\r\n );\r\n\r\n const pixelsPerMeter =\r\n MAX_PIXELS_PER_METER -\r\n ((normalizedLength - MIN_AVERAGE_LENGTH) / (MAX_AVERAGE_LENGTH - MIN_AVERAGE_LENGTH)) *\r\n (MAX_PIXELS_PER_METER - MIN_PIXELS_PER_METER);\r\n\r\n return Math.round(pixelsPerMeter);\r\n }\r\n\r\n convertToPixels(value: number, unit: 'ft' | 'm'): number {\r\n const PIXELS_PER_METER = this.pixelSize;\r\n const PIXELS_PER_FOOT = PIXELS_PER_METER / 3.28084;\r\n\r\n if (typeof value !== 'number' || value < 0) {\r\n throw new Error('Value must be a non-negative number');\r\n }\r\n\r\n switch (unit) {\r\n case 'm':\r\n return value * PIXELS_PER_METER;\r\n case 'ft':\r\n return value * PIXELS_PER_FOOT;\r\n default:\r\n throw new Error(\"Invalid unit. Supported units are 'mt' for meters and 'ft' for feet.\");\r\n }\r\n }\r\n\r\n snapToGrid(value: number, gridSize: number): number {\r\n return Math.round(value / gridSize) * gridSize;\r\n }\r\n\r\n download(data:any) {\r\n this.builderService.getPlano({id:[data._id]}).pipe(takeUntil(this.destroy$), debounceTime(300)).subscribe({\r\n next:(res:any) =>{\r\n if(res && res.code == 200) {\r\n this.onExportAsZip(data.storeName,res.data[0]);\r\n }\r\n },\r\n error:(error:any) => {\r\n this.toast.getErrorToast(error?.error?.error || 'Something went wrong');\r\n }\r\n });\r\n }\r\n\r\n async onExportAsZip(store:String,data:any) {\r\n const zip = new JSZip();\r\n const padding = 100;\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d')!;\r\n canvas.width = 10000; \r\n canvas.height = 10000;\r\n \r\n const centerX = canvas.width / 2 / this.scale;\r\n const centerY = canvas.height / 2 / this.scale;\r\n \r\n let currentPoint = {\r\n x: this.snapToGrid(centerX, this.gridHeight),\r\n y: this.snapToGrid(centerY, this.gridWidth),\r\n };\r\n \r\n const renderCanvas = async (layoutPolygon: any[]): Promise<string> => {\r\n const exportLayout: any[] = [];\r\n \r\n layoutPolygon.forEach((instruction: any) => {\r\n const radians: number = {\r\n up: ((180 - instruction.angle) * Math.PI) / 180,\r\n left: ((270 - instruction.angle) * Math.PI) / 180,\r\n down: ((360 - instruction.angle) * Math.PI) / 180,\r\n right: ((90 - instruction.angle) * Math.PI) / 180,\r\n }[instruction.direction as 'up' | 'left' | 'down' | 'right'];\r\n if (radians === undefined) {\r\n throw new Error(`Invalid direction: ${instruction.direction}`);\r\n }\r\n this.pixelSize = this.normalizedPixelPerMetre(layoutPolygon);\r\n const distanceInPixels = this.convertToPixels(instruction.distance, instruction.unit);\r\n const newX = currentPoint.x + Math.cos(radians) * distanceInPixels;\r\n const newY = currentPoint.y - Math.sin(radians) * distanceInPixels;\r\n const newPoint = {\r\n x: this.snapToGrid(newX, this.gridWidth),\r\n y: this.snapToGrid(newY, this.gridHeight),\r\n };\r\n const lineSegment = [\r\n currentPoint,\r\n newPoint,\r\n {\r\n elementType: instruction.elementType,\r\n distance: instruction.distance,\r\n unit: instruction.unit,\r\n direction: instruction.direction,\r\n angle: instruction.angle,\r\n elementNumber: instruction.elementNumber,\r\n },\r\n ];\r\n exportLayout.push(lineSegment);\r\n currentPoint = newPoint;\r\n });\r\n \r\n let minX = Infinity,\r\n minY = Infinity,\r\n maxX = -Infinity,\r\n maxY = -Infinity;\r\n \r\n exportLayout.forEach(([point1, point2]) => {\r\n [point1, point2].forEach((point) => {\r\n if (point.x !== undefined) {\r\n minX = Math.min(minX, point.x);\r\n maxX = Math.max(maxX, point.x);\r\n }\r\n if (point.y !== undefined) {\r\n minY = Math.min(minY, point.y);\r\n maxY = Math.max(maxY, point.y);\r\n }\r\n });\r\n });\r\n minX -= padding;\r\n minY -= padding;\r\n maxX += padding;\r\n maxY += padding;\r\n \r\n canvas.width = maxX - minX;\r\n canvas.height = maxY - minY;\r\n \r\n ctx.fillStyle = 'white';\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n ctx.save();\r\n ctx.translate(-minX, -minY);\r\n ctx.scale(this.scale, this.scale);\r\n \r\n function drawArrowhead(ctx: CanvasRenderingContext2D, x: number, y: number, angle: number) {\r\n const size = 5;\r\n ctx.save();\r\n ctx.translate(x, y);\r\n ctx.rotate(angle);\r\n ctx.beginPath();\r\n ctx.moveTo(0, 0);\r\n ctx.lineTo(-size, -size / 2);\r\n ctx.lineTo(-size, size / 2);\r\n ctx.closePath();\r\n ctx.fillStyle = 'black';\r\n ctx.fill();\r\n ctx.restore();\r\n }\r\n\r\n ctx.beginPath();\r\n exportLayout.forEach((edge, edgeIndex) => {\r\n const point = edge[0];\r\n const nextPoint = edge[1];\r\n const properties = edge[2];\r\n\r\n if (edgeIndex === 0) ctx.moveTo(point.x, point.y);\r\n ctx.lineTo(nextPoint.x, nextPoint.y);\r\n\r\n const dx = nextPoint.x - point.x;\r\n const dy = nextPoint.y - point.y;\r\n const length = Math.sqrt(dx * dx + dy * dy);\r\n const offsetX = (dy / length) * 20;\r\n const offsetY = (-dx / length) * 20;\r\n\r\n const boxPoints = [\r\n { x: point.x, y: point.y },\r\n { x: nextPoint.x, y: nextPoint.y },\r\n { x: nextPoint.x + offsetX, y: nextPoint.y + offsetY },\r\n { x: point.x + offsetX, y: point.y + offsetY },\r\n ];\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(boxPoints[0].x, boxPoints[0].y);\r\n boxPoints.forEach((pt, index) => {\r\n if (properties.elementType === 'entrance') {\r\n if (index < 2) {\r\n ctx.lineTo(pt.x, pt.y)\r\n }\r\n } else {\r\n ctx.lineTo(pt.x, pt.y);\r\n }\r\n });\r\n if (properties.elementType === 'opening') {\r\n ctx.closePath();\r\n ctx.fillStyle = '#F9FAFB';\r\n ctx.fill();\r\n\r\n ctx.strokeStyle = '#F9FAFB';\r\n \r\n ctx.stroke(); \r\n } else {\r\n ctx.closePath();\r\n ctx.fillStyle = '#F9FAFB';\r\n ctx.fill();\r\n ctx.strokeStyle = '#1D2939';\r\n ctx.stroke(); \r\n }\r\n\r\n\r\n const textX = (boxPoints[1].x + boxPoints[3].x) / 2;\r\n const textY = (boxPoints[1].y + boxPoints[3].y) / 2;\r\n\r\n ctx.save();\r\n ctx.translate(textX, textY);\r\n\r\n if (dx === 0) {\r\n ctx.rotate(-Math.PI / 2);\r\n } else if (dy !== 0) {\r\n const angle = Math.atan2(dy, dx);\r\n ctx.rotate(angle);\r\n }\r\n\r\n ctx.font = '12px Arial';\r\n ctx.fillStyle = 'black';\r\n ctx.textAlign = 'center';\r\n ctx.textBaseline = 'middle';\r\n ctx.fillText(\r\n `${properties.elementType} ${properties.elementNumber} - ${properties.distance} ${properties.unit}`,\r\n 0,\r\n 0\r\n );\r\n ctx.restore();\r\n if(properties.distance >= 4){\r\n const centerX = textX;\r\n const centerY = textY;\r\n const rightX = (boxPoints[1].x + boxPoints[2].x) / 2;\r\n const rightY = (boxPoints[1].y + boxPoints[2].y) / 2;\r\n const leftX = (boxPoints[0].x + boxPoints[3].x) / 2;\r\n const leftY = (boxPoints[0].y + boxPoints[3].y) / 2;\r\n\r\n function adjustPoint(x1: any, y1: any, x2: any, y2: any, distance: any) {\r\n const angle = Math.atan2(y2 - y1, x2 - x1);\r\n return {\r\n x: x1 + Math.cos(angle) * distance,\r\n y: y1 + Math.sin(angle) * distance,\r\n };\r\n }\r\n\r\n const rightStart = adjustPoint(centerX, centerY, rightX, rightY, 50);\r\n const rightEnd = adjustPoint(rightX, rightY, centerX, centerY, 10);\r\n const leftStart = adjustPoint(centerX, centerY, leftX, leftY, 50);\r\n const leftEnd = adjustPoint(leftX, leftY, centerX, centerY, 10);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(rightStart.x, rightStart.y);\r\n ctx.lineTo(rightEnd.x, rightEnd.y);\r\n ctx.strokeStyle = 'black';\r\n ctx.stroke();\r\n let rightAngle = Math.atan2(rightEnd.y - rightStart.y, rightEnd.x - rightStart.x);\r\n drawArrowhead(ctx, rightEnd.x, rightEnd.y, rightAngle);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(leftStart.x, leftStart.y);\r\n ctx.lineTo(leftEnd.x, leftEnd.y);\r\n ctx.strokeStyle = 'black';\r\n ctx.stroke();\r\n let leftAngle = Math.atan2(leftEnd.y - leftStart.y, leftEnd.x - leftStart.x);\r\n drawArrowhead(ctx, leftEnd.x, leftEnd.y, leftAngle);\r\n\r\n }\r\n \r\n if (properties.elementType === 'entrance') {\r\n const angle = Math.atan2(nextPoint.y - point.y, nextPoint.x - point.x);\r\n \r\n const entranceAngle = angle + (15 * Math.PI) / 180;\r\n \r\n const lineLength = this.convertToPixels(properties.distance, properties.unit) * 0.75;\r\n const endPoint = {\r\n x: point.x + Math.cos(entranceAngle) * lineLength,\r\n y: point.y + Math.sin(entranceAngle) * lineLength,\r\n };\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(point.x, point.y);\r\n ctx.lineTo(endPoint.x, endPoint.y);\r\n ctx.strokeStyle = '#1D2939';\r\n ctx.stroke();\r\n }\r\n });\r\n\r\n ctx.restore();\r\n\r\n return new Promise((resolve) => {\r\n console.log(canvas)\r\n canvas.toBlob((blob) => {\r\n console.log(blob)\r\n const reader = new FileReader();\r\n reader.onload = () => resolve(reader.result as string);\r\n reader.readAsDataURL(blob!);\r\n canvas.remove();\r\n });\r\n });\r\n };\r\n\r\n for (let i = 0; i < data.floor.length; i++) {\r\n const imageDataUrl = await renderCanvas(data.floor[i].layoutPolygon);\r\n const base64Data = imageDataUrl.split(',')[1];\r\n zip.file(`${store}_${data.floor[i].floorName}_layout.png`, base64Data, { base64: true });\r\n }\r\n\r\n zip.generateAsync({ type: 'blob' }).then((blob:any) => {\r\n const link = document.createElement('a');\r\n link.href = URL.createObjectURL(blob);\r\n link.download = `${data.storeName}_layouts.zip`;\r\n link.click();\r\n });\r\n }\r\n\r\n @HostListener(\"document:click\", [\"$event\"])\r\n onOutsideClick(event:MouseEvent):void {\r\n console.log(event)\r\n const closeDropDelete = (event.target as HTMLElement).closest(\".close-delete\");\r\n console.log(closeDropDelete)\r\n if (!closeDropDelete) {\r\n this.layoutList.forEach((item:any,index:any) => {\r\n item.deleteIndex = false;\r\n })\r\n }\r\n }\r\n clickOutside(event: MouseEvent): void {\r\n const clickedInside = (event.target as HTMLElement).closest(\r\n \".dropdown-close\"\r\n );\r\n if (!clickedInside) {\r\n this.closeDropDown();\r\n }\r\n }\r\n\r\n \r\n}\r\n","\r\n<div class=\"mx-3 mt-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder flex-nowrap\">\r\n <li class=\"nav-item cursor-pointer\" [ngClass]=\"selectedTab === 'layoutBuilder' ? 'tabClassActive' :''\"><a class=\"text-active-primary px-4 py-3\" [ngClass]=\"selectedTab === 'layoutBuilder' ? 'active' :''\">Layout builder</a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" [ngClass]=\"selectedTab === 'storeBuilder' ? 'tabClassActive' :''\"><a class=\"text-active-primary px-4 py-3\" [ngClass]=\"selectedTab === 'storeBuilder' ? 'active' :''\">Store builder</a>\r\n </li>\r\n </ul>\r\n</div>\r\n<input style=\"display: none;\" type=\"file\" #file id=\"xlsxUpload\" (change)=\"onFileUpload($event)\" />\r\n<div class=\"card mt-5\" *ngIf=\"selectedTab === 'layoutBuilder'\">\r\n <div class=\"card-header border-0\" *ngIf=\"!showNoData\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Store layout </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-8\">\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\"\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 type=\"text\" class=\"form-control ps-14 mx-2 footfallsearch\"\r\n placeholder=\"Search\" autocomplete=\"off\" [(ngModel)]=\"dynamicData.searchValue\" (change)=\"search()\"/>\r\n\r\n <lib-filters [dataObject]=\"dataObject\" (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n <a type=\"button\" (click)=\"BuilderCreate()\"\r\n class=\"btn btn-primary ms-2 rounded-3 text-nowrap ng-star-inserted\" tabindex=\"0\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg><span class=\"ms-2 text-white\">Create Manually</span></a>\r\n \r\n <button type=\"button\" class=\"btn-outline ps-4 pe-2 btn align-items-end text-nowrap invheader mx-2\" >\r\n <span class=\"d-flex align-items-center\">\r\n <div class=\"cursor-pointer\" (click)=\"file.click()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n 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\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> <span>Upload</span>\r\n </div>\r\n <div class=\"vr ms-3 me-1\"></div>\r\n <div class=\"cursor-pointer\">\r\n <a href=\"../../../assets/files/StoreBuilderTemplate.xlsx\" download>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M6 9L12 15L18 9\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </a>\r\n </div>\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0 mt-5\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table text-nowrap bottom-border\" *ngIf=\"layoutList.length\">\r\n <thead>\r\n <tr>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name <svg\r\n [ngClass]=\"dynamicData.sortColumnName === 'storeName' && dynamicData.sortBy === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"dynamicData.sortColumnName === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('layoutName')\">Layout Name <svg\r\n [ngClass]=\"dynamicData.sortColumnName === 'layoutName' && dynamicData.sortBy === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"dynamicData.sortColumnName === 'layoutName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('floorNumber')\">No of Floors <svg\r\n [ngClass]=\"dynamicData.sortColumnName === 'floorNumber' && dynamicData.sortBy === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"dynamicData.sortColumnName === 'floorNumber' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th> <span class=\"cursor-pointer\" (click)=\"onSort('createdByName')\">Created By <svg\r\n [ngClass]=\"dynamicData.sortColumnName === 'createdByName' && dynamicData.sortBy === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"dynamicData.sortColumnName === 'createdByName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('createdAt')\">Created Date <svg\r\n [ngClass]=\"dynamicData.sortColumnName === 'createdAt' && dynamicData.sortBy === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"dynamicData.sortColumnName === 'createdAt' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('status')\">Status <svg\r\n [ngClass]=\"dynamicData.sortColumnName === 'status' && dynamicData.sortBy === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"dynamicData.sortColumnName === 'status' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of layoutList;let i =index;\">\r\n <td><span><a class=\"storeLink cursor-pointer\" [href]=\"'/manage/planogram/layout-builder/create?id='+item._id\">{{item?.storeName}}</a></span></td>\r\n <td><span><a class=\"storeLink cursor-pointer\" [href]=\"'/manage/planogram/layout-builder/create?id='+item._id\">{{item?.layoutName}}</a></span></td>\r\n <td>{{item.floorNumber}}</td>\r\n <td><div class=\"symbol symbol-35px symbol-circle\"><span\r\n class=\"symbol-label bg-light-primary text-primary me-2\">{{item?.createdByName.slice(0,2).toUpperCase()}}</span></div>{{item?.createdByName}}</td>\r\n <td>{{item.createdAt}}</td>\r\n <td><span class=\"badge badge-light-success\">{{item.status | titlecase}}</span></td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div class=\"me-10\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" *ngIf=\"item.status !== 'draft'\" (click)=\"download(item)\" class=\"cursor-pointer\">\r\n <path\r\n 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.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <a [href]=\"'/manage/planogram/layout-builder/create?id='+item._id\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" *ngIf=\"item.status === 'draft'\">\r\n <path\r\n d=\"M14.1667 2.49993C14.3855 2.28106 14.6454 2.10744 14.9313 1.98899C15.2173 1.87054 15.5238 1.80957 15.8333 1.80957C16.1429 1.80957 16.4494 1.87054 16.7353 1.98899C17.0213 2.10744 17.2811 2.28106 17.5 2.49993C17.7189 2.7188 17.8925 2.97863 18.0109 3.2646C18.1294 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1294 4.78262 18.0109 5.06859C17.8925 5.35455 17.7189 5.61439 17.5 5.83326L6.25 17.0833L1.66667 18.3333L2.91667 13.7499L14.1667 2.49993Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></a>\r\n </div>\r\n <div class=\"close-delete\">\r\n <div class=\"position-relative\">\r\n <span (click)=\"$event.stopPropagation();showDeleteDropDown(i)\" class=\"cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"23\" viewBox=\"0 0 24 23\" fill=\"none\">\r\n <path\r\n d=\"M11 11.4999C11 12.0292 11.4477 12.4583 12 12.4583C12.5523 12.4583 13 12.0292 13 11.4999C13 10.9706 12.5523 10.5416 12 10.5416C11.4477 10.5416 11 10.9706 11 11.4999Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M11 18.2083C11 18.7375 11.4477 19.1666 12 19.1666C12.5523 19.1666 13 18.7375 13 18.2083C13 17.679 12.5523 17.2499 12 17.2499C11.4477 17.2499 11 17.679 11 18.2083Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M11 4.79159C11 5.32086 11.4477 5.74992 12 5.74992C12.5523 5.74992 13 5.32086 13 4.79159C13 4.26231 12.5523 3.83325 12 3.83325C11.4477 3.83325 11 4.26231 11 4.79159Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <div *ngIf=\"item?.deleteIndex\" (click)=\"$event.stopPropagation(); deleteLayout(item._id)\" class=\"option cursor-pointer\">Delete\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-container>\r\n <div class=\"row loader d-flex justify-content-center align-items-center\" *ngIf=\"loading\">\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=\"!showNoData && !layoutList.length && !loading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Store Layout</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container class=\"mb-10\">\r\n <div class=\"row h-400px mt-10\" *ngIf=\"!loading && this.showNoData\">\r\n <div class=\"col-lg-6 text-center\">\r\n <div class=\"text-center\">\r\n <div class=\"round d-flex justify-content-center\">\r\n <div class=\"icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <path\r\n d=\"M19.9999 13.333V26.6663M13.3333 19.9997H26.6666M36.6666 19.9997C36.6666 29.2044 29.2047 36.6663 19.9999 36.6663C10.7952 36.6663 3.33325 29.2044 3.33325 19.9997C3.33325 10.7949 10.7952 3.33301 19.9999 3.33301C29.2047 3.33301 36.6666 10.7949 36.6666 19.9997Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"3.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"titleHead mt-3\">\r\n Create a store layout manually\r\n </div>\r\n <div class=\"titleContent mt-3\">\r\n You can create a single store layout manually by step by step\r\n </div>\r\n <div class=\"titleContent mt-8\">\r\n <button class=\"btn btn-outline btnClass\" (click)=\"BuilderCreate()\">\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M12 5V19M5 12H19\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n Create manually\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 text-center\">\r\n \r\n <div class=\"end-border position-relative text-center\">\r\n <span class=\"or-center bg-white step-text\">or</span>\r\n <div class=\"round d-flex justify-content-center\">\r\n <div class=\"icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <path\r\n d=\"M35 25V31.6667C35 32.5507 34.6488 33.3986 34.0237 34.0237C33.3986 34.6488 32.5507 35 31.6667 35H8.33333C7.44928 35 6.60143 34.6488 5.97631 34.0237C5.35119 33.3986 5 32.5507 5 31.6667V25M28.3333 13.3333L20 5M20 5L11.6667 13.3333M20 5V25\"\r\n stroke=\"#00A3FF\" stroke-width=\"3.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"titleHead mt-3\">\r\n Create a store layout using CSV\r\n </div>\r\n <div class=\"titleContent mt-3\">\r\n You can create a single or a multiple store layout using CSV.\r\n </div>\r\n <div class=\"d-flex justify-content-center mt-10\">\r\n <div class=\"titleContent text-center\">\r\n <div class=\"d-flex step-text\"><div>Step1 - </div><div class=\"ms-1 \"><a class=\"dowloadLink\" href=\"../../../assets/files/StoreBuilderTemplate.xlsx\" download>Download the template here</a></div></div>\r\n <div class=\"mt-2 d-flex step-text\"><div>Step2 - </div><div class=\"ms-1\">Add your data to the Template File</div></div>\r\n <div class=\"mt-2 d-flex step-text\"><div>Step3 - </div><div class=\"ms-1\">Upload it below for processing</div></div>\r\n </div>\r\n </div>\r\n <div class=\"titleContent mt-8\">\r\n <button class=\"btn btn-primary btnClass\" (click)=\"file.click()\">\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <path\r\n d=\"M18 12.5V15.8333C18 16.2754 17.8244 16.6993 17.5118 17.0118C17.1993 17.3244 16.7754 17.5 16.3333 17.5H4.66667C4.22464 17.5 3.80072 17.3244 3.48816 17.0118C3.17559 16.6993 3 16.2754 3 15.8333V12.5M14.6667 6.66667L10.5 2.5M10.5 2.5L6.33333 6.66667M10.5 2.5V12.5\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n Upload CSV\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!loading && layoutList.length\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"dynamicData.limit\" [currentPage]=\"dynamicData.offset\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #createBuilder let-modal>\r\n <div class=\"card scroll\">\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">Create store layout</span>\r\n </div>\r\n </div>\r\n <div class=\"card-body storeCard\">\r\n <div class=\"selectStore\">\r\n <div class=\"mt-2\">\r\n <div class=\"pt-3 position-relative\" (clickOutside)=\"closeDropDown()\">\r\n <label for=\"inputmodel\" class=\"label pb-2\">Select Store</label>\r\n <div class=\"dropdown-close\">\r\n <div class=\"w-100\">\r\n <div class=\"d-flex align-items-center position-relative w-100\">\r\n <input type=\"text\" class=\"form-control dropdown-input\"\r\n (click)=\"toggleDropDown()\" readonly placeholder=\"Select One Store\" [ngModel]=\"selectedStore?.name\"/>\r\n </div>\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu w-100\" *ngIf=\"showDropDown\">\r\n <div class=\"mx-3\">\r\n <input type=\"text\" class=\"form-control mb-2\" placeholder=\"Search Store...\"\r\n [(ngModel)]=\"searchStore\" (ngModelChange)=\"filterSearch()\" />\r\n </div>\r\n <div [class]=\"storeList.length > 5 ? 'h-200px overflow-auto' : 'h-auto'\">\r\n <div class=\"dropdown-item form-check custom-dropdown-item\" *ngFor=\"let store of storeList;let i= index\"\r\n (click)=\"updateSelectedStore(i)\">\r\n <label class=\"\" [for]=\"store.name\">\r\n {{ store.name }}\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"h-auto\" *ngIf=\"!storeList.length\">\r\n <div class=\"dropdown-item form-check custom-dropdown-item\" >\r\n <label class=\"\">No Data.</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-5\">No of floors</div>\r\n <div class=\"mt-2\">\r\n <div style=\"position: relative;\"><svg role=\"button\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" class=\"dec\" (click)=\"floorDec()\">\r\n <path d=\"M4.16602 10H15.8327\" stroke=\"#667085\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg><input readonly=\"\" type=\"number\" [(ngModel)]=\"floorNo\" id=\"floor\"\r\n autocomplete=\"off\" class=\"form-control inc-dec-input\"\r\n ><svg role=\"button\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\" class=\"inc\" (click)=\"floorInc()\">\r\n <path d=\"M8.00065 3.33337V12.6667M3.33398 8.00004H12.6673\" stroke=\"#667085\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer storeCard text-end border-0\">\r\n <button class=\"btn mx-5 btn-outline\" (click)=\"modal.dismiss()\">Cancel</button>\r\n <button class=\"btn btn-sm btn-primary\" (click)=\"createLayout()\" [disabled]=\"!selectedStore?.name\">Save</button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #uploadBuilder let-modal>\r\n <div class=\"card scroll\">\r\n <div class=\"card-body\">\r\n <div class=\"cardTitle\">Create store layout (CSV Upload)</div>\r\n <div class=\"row mt-6\">\r\n <div class=\"col-md-4\">\r\n <div class=\"card p-2 padding-left\">\r\n <div class=\"count\">{{excelData.totalStore}}</div>\r\n <div class=\"countTitle\">Total store</div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"card p-2\">\r\n <div class=\"count\">{{excelData.totalRow}}</div>\r\n <div class=\"countTitle\">Rows processed</div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"card p-2\">\r\n <div class=\"count text-danger\">{{excelData.totalError}}</div>\r\n <div class=\"countTitle text-danger\">Error</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-5\">\r\n <div class=\"cardTitle\">Invalid details!</div>\r\n <div class=\"countTitle fontWeight\">Please provide correct and complete layout information.</div>\r\n <div class=\"error mt-5 p-5 pt-0 h-auto mh-200px overflow-scroll\" *ngIf=\"error\">\r\n <div class=\"mt-5\" *ngFor=\"let error of error;let i =index\">\r\n <span>{{i + 1}}&#41; {{error.message}} - <span *ngIf=\"error?.ExistIndex\">{{error.series}}{{error.ExistIndex}},</span>{{error.series}}{{error.index}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer storeCard text-end border-0\">\r\n <button class=\"btn mx-5 btn-outline\" (click)=\"modal.dismiss()\">Cancel</button>\r\n <button class=\"btn btn-sm btn-danger\" (click)=\"Reupload()\">Reupload</button>\r\n </div>\r\n </div>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { LayoutBuilderComponent } from './components/layout-builder/layout-builder.component';\r\nimport { CreateLayoutComponent } from './components/create-layout/create-layout.component';\r\nimport { LayoutSummaryComponent } from './components/layout-summary/layout-summary.component';\r\nimport { StoreLayoutTableComponent } from './components/store-layout-table/store-layout-table.component';\r\n\r\nconst routes: Routes = [\r\n \r\n {\r\n path:'layout-builder',\r\n component:LayoutBuilderComponent,\r\n children:[\r\n {\r\n path:'create',\r\n component:CreateLayoutComponent\r\n },\r\n {\r\n path:'summary',\r\n component:LayoutSummaryComponent\r\n },\r\n ]\r\n },\r\n { \r\n path:'store-layout',\r\n component:StoreLayoutTableComponent\r\n }\r\n];\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes,)],\r\n exports: [RouterModule]\r\n})\r\nexport class TangoStoreBuilderRoutingModule { }\r\n","import { ChangeDetectorRef, Component, HostListener, Input, Provider, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nconst SELECT_CONTROL_VALUE_ACCESSOR: Provider = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ReactiveSelectComponent),\r\n multi: true,\r\n};\r\n\r\n@Component({\r\n selector: 'lib-reactive-select',\r\n templateUrl: './reactive-select.component.html',\r\n styleUrl: './reactive-select.component.scss',\r\n providers: [SELECT_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class ReactiveSelectComponent implements ControlValueAccessor {\r\n\r\n private onTouched: Function;\r\n private onChanged: Function;\r\n protected isDisabled: boolean;\r\n @Input() idField: string\r\n @Input() nameField: string\r\n @Input() label: string\r\n @Input() data: any\r\n protected isOpened: boolean = false\r\n protected selected: Record<string, any> | null = null\r\n protected selectedId: string | number\r\n\r\n constructor(private cd:ChangeDetectorRef){}\r\n\r\n writeValue(val: string | number): void {\r\n setTimeout(() => { \r\n this.selectedId = val\r\n this.selected = this.data.filter((item:Record<string, any>)=> item?.[this.idField] === val)[0] \r\n this.cd.detectChanges()\r\n }, 0); \r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChanged = fn\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled\r\n }\r\n\r\n onSelect(item: Record<string, any>) {\r\n this.onTouched()\r\n this.selected = item\r\n this.selectedId = item?.[this.idField] \r\n this.isOpened = false\r\n this.onChanged(this.selectedId)\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClick(event: MouseEvent) {\r\n if (!this.isDisabled) {\r\n const targetElement = event.target as HTMLElement;\r\n if (!this.isComponentClicked(targetElement)) {\r\n this.isOpened = false;\r\n }\r\n }\r\n }\r\n\r\n isComponentClicked(targetElement: HTMLElement): boolean {\r\n const parentElement = targetElement.parentElement;\r\n if (parentElement) {\r\n const clickedOnComponent = parentElement.classList.contains('custom-select');\r\n if (clickedOnComponent) {\r\n return true;\r\n } else {\r\n return this.isComponentClicked(parentElement);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n\r\n}\r\n","<div class=\"custom-select\">\r\n <div class=\"form-group\">\r\n <label *ngIf=\"label\" class=\"form-label\">{{label}}</label>\r\n <div class=\"position-relative\">\r\n <div (click)=\"isOpened = !isOpened;\" [ngClass]=\"isDisabled ? 'disable' : ''\" class=\"form-select dropselect\">\r\n {{selected?.[nameField]}}</div>\r\n <div *ngIf=\"isOpened\" class=\"card py-2 w-100 position-absolute end-0 z-1 drop-list\">\r\n <ul class=\"list-unstyled mb-2\">\r\n <li *ngFor=\"let item of data\" (click)=\"onSelect(item)\"\r\n [ngClass]=\"item?.[idField] === selected?.[idField] ? 'active' : ''\"\r\n class=\"text px-5 items cursor-pointer py-4\">\r\n {{item?.[nameField]}}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { LayoutBuilderComponent } from './components/layout-builder/layout-builder.component';\r\nimport { CreateLayoutComponent } from './components/create-layout/create-layout.component';\r\nimport { LayoutSummaryComponent } from './components/layout-summary/layout-summary.component';\r\nimport { TangoStoreBuilderRoutingModule } from './tango-store-builder-routing.module';\r\nimport { StoreLayoutTableComponent } from './components/store-layout-table/store-layout-table.component';\r\nimport { CommonSharedModule } from 'tango-app-ui-shared';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveSelectComponent } from './components/reactive-select/reactive-select.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { CustomSelectComponent } from './components/custom-select/custom-select.component';\r\nimport { StoreOffcanvasComponentComponent } from './components/store-offcanvas-component/store-offcanvas-component.component';\r\nimport { AddFloorComponent } from './components/create-layout/popups/add-floor/add-floor.component';\r\nimport { ClearAllStepsComponent } from './components/create-layout/popups/clear-all-steps/clear-all-steps.component';\r\nimport { DeleteLayoutComponent } from './components/create-layout/popups/delete-layout/delete-layout.component';\r\nimport { CompleteLayoutComponent } from './components/layout-summary/popups/complete-layout/complete-layout.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n LayoutBuilderComponent,\r\n CreateLayoutComponent,\r\n LayoutSummaryComponent,\r\n StoreLayoutTableComponent,\r\n ReactiveSelectComponent,\r\n CustomSelectComponent,\r\n StoreOffcanvasComponentComponent,\r\n AddFloorComponent,\r\n ClearAllStepsComponent,\r\n DeleteLayoutComponent,\r\n CompleteLayoutComponent\r\n\r\n ],\r\n imports: [\r\n TangoStoreBuilderRoutingModule,\r\n CommonModule,\r\n FormsModule,\r\n CommonSharedModule,\r\n ReactiveFormsModule,\r\n DragDropModule,\r\n ],\r\n exports: [\r\n ]\r\n})\r\nexport class TangoStoreBuilderModule { }\r\n","/*\r\n * Public API Surface of tango-store-builder\r\n */\r\n\r\nexport * from './lib/tango-store-builder.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i1","i1.StoreBuilderService","i2","i2.StoreBuilderService","i8.CustomSelectComponent","i7.CustomSelectComponent","i4.StoreBuilderService","i5","i6","i7"],"mappings":"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"}