@smarterplan/ngx-smarterplan-core 0.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2020/lib/components/csv-export/csv-export.component.mjs +59 -0
- package/esm2020/lib/components/loader/loader.component.mjs +14 -0
- package/esm2020/lib/components/menu-bar/avatar/avatar.component.mjs +75 -0
- package/esm2020/lib/components/menu-bar/menu-bar.component.mjs +115 -0
- package/esm2020/lib/components/menu-bar/navigation-bar/navigation-bar.component.mjs +254 -0
- package/esm2020/lib/components/menu-bar/range-date-picker/range-date-picker.component.mjs +81 -0
- package/esm2020/lib/components/modal-switch-visit/modal-switch-visit.component.mjs +39 -0
- package/esm2020/lib/components/search-bar/search-bar.component.mjs +63 -0
- package/esm2020/lib/components/support-modal/support-modal.component.mjs +59 -0
- package/esm2020/lib/config.mjs +4 -0
- package/esm2020/lib/helpers.service.mjs +468 -0
- package/esm2020/lib/mattertagData.mjs +177 -0
- package/esm2020/lib/ngx-smarterplan-core.module.mjs +117 -0
- package/esm2020/lib/ngx-smarterplan-core.service.mjs +14 -0
- package/esm2020/lib/pipes/duration-to-string.pipe.mjs +66 -0
- package/esm2020/lib/pipes/hashtag-from-id.pipe.mjs +26 -0
- package/esm2020/lib/pipes/safe-url.pipe.mjs +20 -0
- package/esm2020/lib/pipes/time-date-to-local-string.pipe.mjs +104 -0
- package/esm2020/lib/pipes/username-from-id.pipe.mjs +29 -0
- package/esm2020/lib/services/base-tab.service.mjs +24 -0
- package/esm2020/lib/services/baseVisibility.service.mjs +17 -0
- package/esm2020/lib/services/booking.service.mjs +161 -0
- package/esm2020/lib/services/content.service.mjs +135 -0
- package/esm2020/lib/services/filter.service.mjs +560 -0
- package/esm2020/lib/services/intervention.service.mjs +236 -0
- package/esm2020/lib/services/locale.service.mjs +45 -0
- package/esm2020/lib/services/matterport-import.service.mjs +339 -0
- package/esm2020/lib/services/matterport.service.mjs +876 -0
- package/esm2020/lib/services/models/affectation.service.mjs +60 -0
- package/esm2020/lib/services/models/base-object.service.mjs +70 -0
- package/esm2020/lib/services/models/capture.service.mjs +34 -0
- package/esm2020/lib/services/models/comment.service.mjs +98 -0
- package/esm2020/lib/services/models/domain.service.mjs +77 -0
- package/esm2020/lib/services/models/equipment.service.mjs +629 -0
- package/esm2020/lib/services/models/event.service.mjs +128 -0
- package/esm2020/lib/services/models/feature.service.mjs +339 -0
- package/esm2020/lib/services/models/hashtag.service.mjs +38 -0
- package/esm2020/lib/services/models/layer.service.mjs +33 -0
- package/esm2020/lib/services/models/measurement.service.mjs +158 -0
- package/esm2020/lib/services/models/mission.service.mjs +185 -0
- package/esm2020/lib/services/models/navigation.service.mjs +76 -0
- package/esm2020/lib/services/models/node.service.mjs +31 -0
- package/esm2020/lib/services/models/operation.service.mjs +59 -0
- package/esm2020/lib/services/models/organisation.service.mjs +73 -0
- package/esm2020/lib/services/models/plan.service.mjs +573 -0
- package/esm2020/lib/services/models/poi.service.mjs +48 -0
- package/esm2020/lib/services/models/profile.service.mjs +54 -0
- package/esm2020/lib/services/models/property.service.mjs +34 -0
- package/esm2020/lib/services/models/space.service.mjs +184 -0
- package/esm2020/lib/services/models/template.service.mjs +41 -0
- package/esm2020/lib/services/models/ticket.service.mjs +454 -0
- package/esm2020/lib/services/models/visit.service.mjs +130 -0
- package/esm2020/lib/services/models/zone.service.mjs +184 -0
- package/esm2020/lib/services/navigator.service.mjs +165 -0
- package/esm2020/lib/services/s3.service.mjs +124 -0
- package/esm2020/lib/services/search.service.mjs +124 -0
- package/esm2020/lib/services/support.service.mjs +42 -0
- package/esm2020/lib/services/tag.service.mjs +101 -0
- package/esm2020/lib/services/user.service.mjs +444 -0
- package/esm2020/lib/services/viewer.service.mjs +395 -0
- package/esm2020/lib/services/zone-drawer.service.mjs +76 -0
- package/esm2020/lib/types.service.mjs +266 -0
- package/esm2020/public-api.mjs +63 -0
- package/esm2020/smarterplan-ngx-smarterplan-core.mjs +5 -0
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +10057 -0
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -0
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +9371 -0
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -0
- package/lib/components/csv-export/csv-export.component.d.ts +18 -0
- package/lib/components/loader/loader.component.d.ts +8 -0
- package/lib/components/menu-bar/avatar/avatar.component.d.ts +18 -0
- package/lib/components/menu-bar/menu-bar.component.d.ts +35 -0
- package/lib/components/menu-bar/navigation-bar/navigation-bar.component.d.ts +66 -0
- package/lib/components/menu-bar/range-date-picker/range-date-picker.component.d.ts +24 -0
- package/lib/components/modal-switch-visit/modal-switch-visit.component.d.ts +22 -0
- package/lib/components/search-bar/search-bar.component.d.ts +16 -0
- package/lib/components/support-modal/support-modal.component.d.ts +24 -0
- package/lib/config.d.ts +17 -0
- package/lib/helpers.service.d.ts +79 -0
- package/lib/mattertagData.d.ts +65 -0
- package/lib/ngx-smarterplan-core.module.d.ts +28 -0
- package/lib/ngx-smarterplan-core.service.d.ts +6 -0
- package/lib/pipes/duration-to-string.pipe.d.ts +12 -0
- package/lib/pipes/hashtag-from-id.pipe.d.ts +10 -0
- package/lib/pipes/safe-url.pipe.d.ts +10 -0
- package/lib/pipes/time-date-to-local-string.pipe.d.ts +16 -0
- package/lib/pipes/username-from-id.pipe.d.ts +11 -0
- package/lib/services/base-tab.service.d.ts +10 -0
- package/lib/services/baseVisibility.service.d.ts +8 -0
- package/lib/services/booking.service.d.ts +21 -0
- package/lib/services/content.service.d.ts +28 -0
- package/lib/services/filter.service.d.ts +58 -0
- package/lib/services/intervention.service.d.ts +25 -0
- package/lib/services/locale.service.d.ts +23 -0
- package/lib/services/matterport-import.service.d.ts +46 -0
- package/lib/services/matterport.service.d.ts +141 -0
- package/lib/services/models/affectation.service.d.ts +14 -0
- package/lib/services/models/base-object.service.d.ts +20 -0
- package/lib/services/models/capture.service.d.ts +13 -0
- package/lib/services/models/comment.service.d.ts +26 -0
- package/lib/services/models/domain.service.d.ts +19 -0
- package/lib/services/models/equipment.service.d.ts +88 -0
- package/lib/services/models/event.service.d.ts +43 -0
- package/lib/services/models/feature.service.d.ts +71 -0
- package/lib/services/models/hashtag.service.d.ts +13 -0
- package/lib/services/models/layer.service.d.ts +11 -0
- package/lib/services/models/measurement.service.d.ts +43 -0
- package/lib/services/models/mission.service.d.ts +32 -0
- package/lib/services/models/navigation.service.d.ts +22 -0
- package/lib/services/models/node.service.d.ts +12 -0
- package/lib/services/models/operation.service.d.ts +15 -0
- package/lib/services/models/organisation.service.d.ts +19 -0
- package/lib/services/models/plan.service.d.ts +117 -0
- package/lib/services/models/poi.service.d.ts +15 -0
- package/lib/services/models/profile.service.d.ts +15 -0
- package/lib/services/models/property.service.d.ts +13 -0
- package/lib/services/models/space.service.d.ts +38 -0
- package/lib/services/models/template.service.d.ts +15 -0
- package/lib/services/models/ticket.service.d.ts +86 -0
- package/lib/services/models/visit.service.d.ts +24 -0
- package/lib/services/models/zone.service.d.ts +25 -0
- package/lib/services/navigator.service.d.ts +55 -0
- package/lib/services/s3.service.d.ts +13 -0
- package/lib/services/search.service.d.ts +20 -0
- package/lib/services/support.service.d.ts +17 -0
- package/lib/services/tag.service.d.ts +45 -0
- package/lib/services/user.service.d.ts +104 -0
- package/lib/services/viewer.service.d.ts +113 -0
- package/lib/services/zone-drawer.service.d.ts +7 -0
- package/lib/types.service.d.ts +723 -0
- package/package.json +41 -0
- package/public-api.d.ts +56 -0
- package/smarterplan-ngx-smarterplan-core.d.ts +5 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smarterplan-ngx-smarterplan-core.mjs","sources":["../../../projects/ngx-smarterplan-core/src/lib/ngx-smarterplan-core.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/csv-export/csv-export.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/csv-export/csv-export.component.html","../../../projects/ngx-smarterplan-core/src/lib/types.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/poi.service.ts","../../../projects/ngx-smarterplan-core/src/lib/mattertagData.ts","../../../projects/ngx-smarterplan-core/src/lib/services/baseVisibility.service.ts","../../../projects/ngx-smarterplan-core/src/lib/config.ts","../../../projects/ngx-smarterplan-core/src/lib/services/matterport.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/viewer.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/modal-switch-visit/modal-switch-visit.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/modal-switch-visit/modal-switch-visit.component.html","../../../projects/ngx-smarterplan-core/src/lib/services/s3.service.ts","../../../projects/ngx-smarterplan-core/src/lib/helpers.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/profile.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/mission.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/property.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/user.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/zone.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/filter.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/navigation.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/base-object.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/operation.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/event.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/affectation.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/navigator.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/intervention.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/ticket.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/equipment.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/search.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/search-bar/search-bar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/search-bar/search-bar.component.html","../../../projects/ngx-smarterplan-core/src/lib/pipes/duration-to-string.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/hashtag.service.ts","../../../projects/ngx-smarterplan-core/src/lib/pipes/hashtag-from-id.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/pipes/safe-url.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/pipes/time-date-to-local-string.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/pipes/username-from-id.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/services/support.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/loader/loader.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/loader/loader.component.html","../../../projects/ngx-smarterplan-core/src/lib/components/support-modal/support-modal.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/support-modal/support-modal.component.html","../../../projects/ngx-smarterplan-core/src/lib/services/locale.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/range-date-picker/range-date-picker.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/range-date-picker/range-date-picker.component.html","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/avatar/avatar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/capture.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/node.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/zone-drawer.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/plan.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/visit.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/space.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/navigation-bar/navigation-bar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/navigation-bar/navigation-bar.component.html","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/menu-bar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/menu-bar.component.html","../../../projects/ngx-smarterplan-core/src/lib/ngx-smarterplan-core.module.ts","../../../projects/ngx-smarterplan-core/src/lib/services/tag.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/comment.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/content.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/base-tab.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/layer.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/matterport-import.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/organisation.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/domain.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/booking.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/measurement.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/feature.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/template.service.ts","../../../projects/ngx-smarterplan-core/src/public-api.ts","../../../projects/ngx-smarterplan-core/src/smarterplan-ngx-smarterplan-core.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxSmarterplanCoreService {\n\n constructor() { }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-csv-export',\n templateUrl: './csv-export.component.html',\n styleUrls: ['./csv-export.component.scss']\n})\nexport class CsvExportComponent {\n \n /** Header of the CSV, titles for each columns */\n @Input() headers: string[] = [];\n\n /** Array of each rows (array of array of string), if it's not set, then the function getRows() will be used */\n @Input() rowsInput: string[][] = undefined;\n\n /** Function used to get rows if rowsInput is not set, call each time the user click on the button to generate the CSV file */\n @Input() getRows = undefined;\n\n /** Title of the file to download */\n @Input() title: string = \"file\";\n\n /** Label for the button to click */\n @Input() buttonLabel: string = \"Export\";\n\n /** Delimiter for the CSV */\n delimeter: string = \";\";\n\n async onClickDownload() {\n let rows: string[][] = this.rowsInput;\n if (!rows) {\n rows = await Promise.resolve(this.getRows());\n }\n const data = `data:text/csv;charset=utf-8,${this.headers.join(\n this.delimeter,\n )}\\n${rows\n .map((row) =>\n /** Clean each rows/cells */\n row\n .map((value) =>\n value\n .replace(this.delimeter, \" \")\n .replace(\"\\n\", \" \")\n .replace(\"\\r\", \" \"),\n )\n .join(this.delimeter),\n )\n .join(\"\\n\")}`;\n\n /** Create a link to download the file */\n const link = document.createElement(\"a\");\n link.setAttribute(\"href\", encodeURI(data));\n link.setAttribute(\"download\", `${this.title}.csv`);\n document.body.append(link);\n link.click();\n link.remove();\n }\n}\n","<span [style.cursor]=\"'pointer'\" (click)=\"onClickDownload()\" class=\"download-csv d-flex\">\n <span class=\"iconify\" data-icon=\"mdi:file-download-outline\"></span>\n {{ buttonLabel | translate}}\n</span>\n","\r\nexport enum PoiType {\r\n EQUIPMENT = \"EQUIPMENT\",\r\n INFORMATION = \"INFORMATION\",\r\n TICKET = \"TICKET\",\r\n MEASURE = \"MEASURE\",\r\n DATA = \"DATA\",\r\n PEOPLE = \"PEOPLE\",\r\n DESK = \"DESK\"\r\n}\r\n\r\nexport enum TicketPriority {\r\n MINIMUM = \"MINIMUM\",\r\n LOW = \"LOW\",\r\n MEDIUM = \"MEDIUM\",\r\n HIGH = \"HIGH\",\r\n MAXIMUM = \"MAXIMUM\"\r\n}\r\n\r\nexport enum TagAction {\r\n HOVER_ON = \"hoverOn\",\r\n AUDIO_CLICK = \"audioClick\",\r\n VIDEO_CLICK = \"videoClick\",\r\n IMAGE_CLICK = \"imageClick\",\r\n DOC_CLICK = \"docClick\",\r\n CLOSE_MODAL = \"closeModal\",\r\n NEXT_SLIDE = \"nextSlide\",\r\n DETAIL_CLICK = \"detailsClick\",\r\n TICKET_CLICK = \"ticketClick\",\r\n YOUTUBE_CLICK = \"youtubeClick\",\r\n}\r\n\r\nexport enum TicketStatus {\r\n TO_BE_PROCESSED = \"TO_BE_PROCESSED\",\r\n PLANNED = \"PLANNED\",\r\n IN_PROGRESS = \"IN_PROGRESS\",\r\n WAITING_FOR_VALIDATION = \"WAITING_FOR_VALIDATION\",\r\n VALIDATED = \"VALIDATED\",\r\n REJECTED = \"REJECTED\",\r\n RESOLVED = \"RESOLVED\",\r\n ARCHIVED = \"ARCHIVED\",\r\n LATE = \"LATE\",\r\n BLOCKED = \"BLOCKED\",\r\n COMPLETED = \"COMPLETED\",\r\n DELAYED = \"DELAYED\",\r\n CANCELLED = \"CANCELLED\",\r\n TO_REDO = \"TO_REDO\",\r\n CREATED = \"CREATED\"\r\n}\r\n\r\nexport enum DomainType {\r\n EQUIPMENT = \"EQUIPMENT\",\r\n MISSION = \"MISSION\",\r\n TICKET = \"TICKET\",\r\n POI = \"POI\",\r\n FEATURE = \"FEATURE\",\r\n BOOKING = \"BOOKING\"\r\n }\r\n\r\nexport enum RoleStatus {\r\n VISITOR = \"VISITOR\",\r\n VISITOR_MUSEUM = \"VISITOR_MUSEUM\",\r\n GUIDE_MUSEUM = \"GUIDE_MUSEUM\",\r\n OCCUPANT = \"OCCUPANT\",\r\n SERVICE = \"SERVICE\",\r\n MANAGER = \"MANAGER\",\r\n OWNER = \"OWNER\",\r\n ADMIN = \"ADMIN\"\r\n}\r\n\r\nexport enum ProfileStatus {\r\n WAITING_FOR_VALIDATION = \"WAITING_FOR_VALIDATION\",\r\n WAITING_FOR_ACTIVATION = \"WAITING_FOR_ACTIVATION\",\r\n ACTIVE = \"ACTIVE\",\r\n INACTIVE = \"INACTIVE\",\r\n BLOCKED = \"BLOCKED\"\r\n }\r\n\r\nexport enum LevelStatus {\r\n MINIMUM = \"MINIMUM\",\r\n LOW = \"LOW\",\r\n MEDIUM = \"MEDIUM\",\r\n HIGH = \"HIGH\",\r\n MAXIMUM = \"MAXIMUM\"\r\n }\r\n\r\nexport enum PropertyType {\r\n PROPERTY = \"PROPERTY\",\r\n VISIT = \"VISIT\",\r\n OCCUPANT = \"OCCUPANT\",\r\n SHARED = \"SHARED\"\r\n }\r\n\r\nexport enum SpaceStatus {\r\n DPE_TO_VALIDATE = \"DPE_TO_VALIDATE\",\r\n DPE_VALIDATED = \"DPE_VALIDATED\",\r\n DPE_FETCH = \"DPE_FETCH\"\r\n }\r\n\r\nexport enum Locale {\r\n FR = \"FR\",\r\n EN = \"EN\"\r\n }\r\n\r\nexport enum EmailStatus {\r\n CREATION_TO_DELIVER = \"CREATION_TO_DELIVER\",\r\n UPDATE_TO_DELIVER = \"UPDATE_TO_DELIVER\",\r\n CANCELLATION_TO_DELIVER = \"CANCELLATION_TO_DELIVER\",\r\n SENT = \"SENT\",\r\n SOFT_BOUNCE = \"SOFT_BOUNCE\",\r\n HARD_BOUNCE = \"HARD_BOUNCE\",\r\n REJECTED = \"REJECTED\"\r\n} \r\n\r\nexport enum CaptureViewer {\r\n CUPIX = \"CUPIX\",\r\n MATTERPORT = \"MATTERPORT\",\r\n SMARTERPLAN_V1 = \"SMARTERPLAN_V1\"\r\n}\r\n\r\nexport enum InventoryStatus {\r\n SUCCESS = \"SUCCESS\",\r\n ERROR = \"ERROR\",\r\n TO_RUN = \"TO_RUN\",\r\n TO_RUN_ONE_IMAGE = \"TO_RUN_ONE_IMAGE\",\r\n ERROR_FILE_OBJ_NOT_EXIST = \"ERROR_FILE_OBJ_NOT_EXIST\",\r\n ERROR_FILE_JSON_NOT_EXIST = \"ERROR_FILE_JSON_NOT_EXIST\",\r\n ERROR_FILE_MODEL_NOT_EXIST = \"ERROR_FILE_MODEL_NOT_EXIST\"\r\n}\r\n\r\nexport enum TypeNote {\r\n CONTRACTUAL = \"CONTRACTUAL\",\r\n INFORMATION = \"INFORMATION\",\r\n TECHNICAL = \"TECHNICAL\",\r\n FINANCIAL = \"FINANCIAL\",\r\n OTHER = \"OTHER\",\r\n IMAGE = \"IMAGE\"\r\n}\r\n\r\nexport enum FeatureType {\r\n DESK = \"DESK\",\r\n INDICATOR_TEMP = \"INDICATOR_TEMP\",\r\n INFORMATION = \"INFORMATION\",\r\n INDICATOR_CO2 = \"INDICATOR_CO2\",\r\n PURCHASE = \"PURCHASE\"\r\n}\r\n\r\nexport enum TicketType {\r\n REPORTING = \"REPORTING\",\r\n REQUEST_FOR_INTERVENTION = \"REQUEST_FOR_INTERVENTION\",\r\n REQUEST_FOR_MAINTENANCE = \"REQUEST_FOR_MAINTENANCE\",\r\n WORK_ORDER = \"WORK_ORDER\",\r\n INCIDENT = \"INCIDENT\",\r\n INFORMATION = \"INFORMATION\"\r\n}\r\n\r\nexport enum EventType {\r\n EQUIPMENT = \"EQUIPMENT\",\r\n COMMENT = \"COMMENT\",\r\n CONTRACTUAL_INTERVENTION = \"CONTRACTUAL_INTERVENTION\",\r\n NON_CONTRACTUAL_INTERVENTION = \"NON_CONTRACTUAL_INTERVENTION\",\r\n TICKET = \"TICKET\",\r\n REPORTING = \"REPORTING\",\r\n REQUEST_FOR_INTERVENTION = \"REQUEST_FOR_INTERVENTION\",\r\n REQUEST_FOR_MAINTENANCE = \"REQUEST_FOR_MAINTENANCE\",\r\n WORK_ORDER = \"WORK_ORDER\",\r\n INCIDENT = \"INCIDENT\",\r\n MEASURE = \"MEASURE\",\r\n BOOKING = \"BOOKING\",\r\n BOOKING_SUBCRIPTION = \"BOOKING_SUBCRIPTION\"\r\n }\r\n \r\n export enum EventStatus {\r\n TO_BE_PROCESSED = \"TO_BE_PROCESSED\",\r\n PLANNED = \"PLANNED\",\r\n IN_PROGRESS = \"IN_PROGRESS\",\r\n WAITING_FOR_VALIDATION = \"WAITING_FOR_VALIDATION\",\r\n VALIDATED = \"VALIDATED\",\r\n REJECTED = \"REJECTED\",\r\n RESOLVED = \"RESOLVED\",\r\n ARCHIVED = \"ARCHIVED\",\r\n LATE = \"LATE\",\r\n BLOCKED = \"BLOCKED\",\r\n COMPLETED = \"COMPLETED\",\r\n DELAYED = \"DELAYED\",\r\n CANCELLED = \"CANCELLED\",\r\n TO_REDO = \"TO_REDO\",\r\n CREATED = \"CREATED\",\r\n LINKED_TO_EQUIPMENT = \"LINKED_TO_EQUIPMENT\",\r\n UNLINKED_FROM_EQUIPMENT = \"UNLINKED_FROM_EQUIPMENT\",\r\n EDITED = \"EDITED\",\r\n LINKED_TO_A_PARENT_TICKET = \"LINKED_TO_A_PARENT_TICKET\",\r\n WAITING_FOR_ACCEPTATION = \"WAITING_FOR_ACCEPTATION\",\r\n ACCEPTED = \"ACCEPTED\",\r\n REFUSED = \"REFUSED\",\r\n DOMAIN_UPDATED = \"DOMAIN_UPDATED\",\r\n DATES_UPDATED = \"DATES_UPDATED\",\r\n TICKET_CHILD_REMOVED = \"TICKET_CHILD_REMOVED\",\r\n TYPE_UPDATED = \"TYPE_UPDATED\",\r\n DATE_END_UPDATED = \"DATE_END_UPDATED\",\r\n DATE_START_UPDATED = \"DATE_START_UPDATED\",\r\n POSITION_SET = \"POSITION_SET\",\r\n POSITION_UPDATED = \"POSITION_UPDATED\",\r\n POSITION_REMOVED = \"POSITION_REMOVED\"\r\n }\r\n \r\nexport enum PaymentStatus {\r\n UNPAID = \"UNPAID\",\r\n PAID = \"PAID\",\r\n PENDING = \"PENDING\",\r\n ERROR = \"ERROR\"\r\n}\r\n\r\nexport enum CommentType {\r\n MEASURE = \"MEASURE\",\r\n VIDEO = \"VIDEO\",\r\n DOCUMENT = \"DOCUMENT\",\r\n IMAGE = \"IMAGE\",\r\n TEXT = \"TEXT\",\r\n AUDIO = \"AUDIO\",\r\n URL = \"URL\",\r\n YOUTUBE = \"YOUTUBE\",\r\n URL_SHOP = \"URL_SHOP\"\r\n}\r\n \r\n/** Interface for Update (only id is required) */\r\nexport interface IUpdate {\r\n id: string;\r\n}\r\n\r\nexport type AWSType = {\r\n __typename?: string | null;\r\n id?: string | null;\r\n createdAt?: string;\r\n updatedAt?: string;\r\n}\r\n\r\nexport type DbObjectType = {\r\n spaceID?: string | null;\r\n description?: string | null;\r\n pois?: {\r\n __typename?: \"ModelPOIConnection\";\r\n items?: Array<POI> | null;\r\n nextToken?: string | null;\r\n } | null;\r\n space?: Space | null;\r\n domainID?: string | null;\r\n} & AWSType;\r\n\r\nexport type Ticket = {\r\n spaceID: string;\r\n title: string;\r\n status?: TicketStatus | null;\r\n priority?: TicketPriority | null;\r\n ownerMissionID?: string | null;\r\n ownerMission?: Mission | null;\r\n type?: TicketType | null;\r\n parentID?: string | null;\r\n level?: LevelStatus | null;\r\n friendlyLabel?: string | null;\r\n events?: {\r\n __typename?: \"ModelEventConnection\";\r\n items?: Array<Event> | null;\r\n nextToken?: string | null;\r\n } | null;\r\n assignees?: {\r\n __typename?: \"ModelAffectationConnection\";\r\n items?: Array<Affectation> | null;\r\n nextToken?: string | null;\r\n } | null;\r\n equipments?: Array<Equipment> | null;\r\n operations?: {\r\n __typename?: \"ModelOperationConnection\";\r\n items?: Array<Operation | null> | null;\r\n nextToken?: string | null;\r\n };\r\n comments?: {\r\n __typename?: \"ModelCommentConnection\";\r\n items?: Array<Comment | null> | null;\r\n nextToken?: string | null;\r\n };\r\n prestataire?: Prestataire | null;\r\n children?: {\r\n __typename?: \"ModelTicketConnection\";\r\n items?: Array<Ticket | null> | null;\r\n nextToken?: string | null;\r\n };\r\n archivedForMissionID?: string[] | null;\r\n} & DbObjectType;\r\n\r\nexport type Operation = {\r\n id?: string | null;\r\n ticketID?: string | null;\r\n equipmentID?: string | null;\r\n deletedAt?: number | null;\r\n ticket?: Ticket | null;\r\n equipment?: Equipment | null;\r\n } & AWSType;\r\n\r\nexport type Equipment = {\r\n name: string;\r\n notes?: {\r\n __typename?: \"ModelNoteConnection\";\r\n items?: Array<Note | null> | null;\r\n nextToken?: string | null;\r\n };\r\n documents?: Array<EquipmentDocument> | null;\r\n documentationImageUrlSigned?: string | null;\r\n subEquipments?: Array<Equipment | null> | null;\r\n subequipmentsIDs?: Array<string | null> | null;\r\n serialNumber?: string | null;\r\n domain?: Domain | null;\r\n childDomain?: Domain | null;\r\n parentDomain?: Domain | null;\r\n photo?: string | null;\r\n zone?: Zone | null;\r\n tickets?: Ticket[] | null;\r\n domainID?: string | null;\r\n spaceID: string;\r\n archivedForMissionID?: string[] | null;\r\n annotation?: string | null;\r\n} & DbObjectType;\r\n\r\n// not in db\r\nexport type EquipmentDocument = {\r\n filename: string;\r\n url: string;\r\n urlSigned: string;\r\n noteID: string;\r\n};\r\n\r\n// not in db\r\nexport type Prestataire = {\r\n organisation: Organisation;\r\n mission: Mission;\r\n profile: Profile;\r\n name: string;\r\n};\r\n\r\nexport type Note = {\r\n id?: string | null;\r\n attachment?: string | null;\r\n signDate?: number | null;\r\n expirationDate?: number | null;\r\n type?: TypeNote | null;\r\n ownerMissionID?: string | null;\r\n equipmentID?: string | null;\r\n } & AWSType;\r\n\r\nexport type Domain = {\r\n name: string;\r\n slug?: string | null;\r\n abbreviation?: string | null;\r\n description?: string | null;\r\n organisationID?: string | null;\r\n parentID?: string | null;\r\n type?: DomainType | null;\r\n parent?: Domain | null;\r\n children?: {\r\n __typename?: \"ModelDomainConnection\";\r\n items?: Array<Domain | null> | null;\r\n nextToken?: string | null;\r\n };\r\n} & AWSType;\r\n\r\nexport type POI = {\r\n id?: string | null;\r\n coordinate?: string | null;\r\n tagIcon?: string | null;\r\n tagDescription?: string | null;\r\n tagImageID?: string | null;\r\n metadata?: string | null;\r\n matterportSweepID?: string | null;\r\n type?: PoiType | null;\r\n elementID?: string | null;\r\n virtual?: boolean | null;\r\n};\r\n\r\nexport enum ViewerInteractions {\r\n DEFAULT = 0,\r\n ADDING_TICKET,\r\n POSITIONING,\r\n ADDING_EQUIPMENT,\r\n ADDING_MEASURE,\r\n ADDING_FEATURE,\r\n}\r\n\r\nexport type Mission = {\r\n userID: string;\r\n role?: RoleStatus | null;\r\n organisationID: string;\r\n spaceID?: string | null;\r\n level?: LevelStatus | null;\r\n orderedOrganisationID?: string | null;\r\n zoneID?: string | null;\r\n groups?: Array<string | null> | null;\r\n emailStatus?: EmailStatus | null;\r\n description?: string | null;\r\n metadata?: string | null;\r\n deletedAt?: number | null;\r\n assignments?: {\r\n __typename?: \"ModelAffectationConnection\";\r\n items?: Array<Affectation | null> | null;\r\n nextToken?: string | null;\r\n };\r\n organisation?: Organisation | null;\r\n orderedOrganisation?: Organisation | null;\r\n user?: Profile | null;\r\n domains?: string[] | null;\r\n // domainObjects?: Domain[] | null;\r\n space?: Space | null;\r\n zone?: Zone | null;\r\n startDateTime?: string | null;\r\n endDateTime?: string | null;\r\n hashtags?: Array<string | null> | null;\r\n templateMissionID?: string | null;\r\n templateMission?: VisitTemplate | null;\r\n locale?: Locale | null;\r\n isInWaitingRoom?: boolean | null;\r\n blockedInChat?: boolean | null;\r\n} & AWSType;\r\n\r\nexport type Affectation = {\r\n mission?: Mission | null;\r\n group: string;\r\n metadata?: string | null;\r\n deletedAt?: number | null;\r\n missionID: string;\r\n ticketID: string;\r\n} & AWSType;\r\n\r\nexport type MediaContent = {\r\n path: string;\r\n title: string;\r\n description: string;\r\n showInTag?: boolean;\r\n type?: CommentType;\r\n};\r\n\r\nexport type Comment = {\r\n title: string;\r\n ticket?: Ticket | null;\r\n owner?: Mission | null;\r\n annexe?: string | null;\r\n ticketID?: string | null;\r\n type?: CommentType | null;\r\n dimensions?: Array<number | null> | null;\r\n featureID?: string | null;\r\n isCoverImage?: boolean | null;\r\n index?: number | null;\r\n shownInTag?: boolean | null;\r\n externalLink?: string | null;\r\n} & AWSType & DbObjectType;\r\n\r\n\r\nexport type Zone = {\r\n sweepIDs?: string[] | null;\r\n layer?: Layer | null;\r\n parent?: Zone | null;\r\n virtual?: boolean | null;\r\n name: string;\r\n tags?: Array<string | null> | null;\r\n parentID?: string | null;\r\n spaceID?: string | null;\r\n space?: Space | null;\r\n isMuseumVisitZone?: boolean | null;\r\n nodeIDs?: Array<string | null> | null;\r\n surface?: number | null;\r\n metadata?: string | null;\r\n} & AWSType;\r\n\r\n\r\nexport type Layer = {\r\n name: string;\r\n} & AWSType;\r\n\r\nexport type Profile = {\r\n id?: string | null;\r\n userID: string;\r\n avatar?: string | null;\r\n token?: string | null;\r\n tokenExpiredAt?: number | null;\r\n status?: ProfileStatus | null;\r\n metadata?: string | null;\r\n lastConnectedAt?: number | null;\r\n pseudo?: string | null;\r\n } & AWSType;\r\n\r\n export class ProfileEntity implements Profile {\r\n id?: string | null;\r\n\r\n userID: string;\r\n\r\n avatar?: string | null;\r\n\r\n token?: string | null;\r\n\r\n tokenExpiredAt?: number | null;\r\n\r\n status?: ProfileStatus | null;\r\n\r\n createdAt?: string;\r\n\r\n updatedAt?: string;\r\n\r\n firstName: string;\r\n\r\n lastName: string;\r\n\r\n email: string;\r\n\r\n phone: string;\r\n\r\n pseudo: string;\r\n\r\n constructor(init?: Partial<Profile>) {\r\n Object.assign(this, init);\r\n this.metadata = init.metadata;\r\n }\r\n\r\n get metadata(): string {\r\n return JSON.stringify({\r\n firstName: this.firstName,\r\n lastName: this.lastName,\r\n email: this.email,\r\n phone: this.phone,\r\n });\r\n }\r\n\r\n set metadata(m: string) {\r\n const d = JSON.parse(m);\r\n if (d) {\r\n this.firstName = d.firstName;\r\n this.lastName = d.lastName;\r\n this.email = d.email;\r\n this.phone = d.phone;\r\n }\r\n }\r\n\r\n get displayName(): string {\r\n if (this.pseudo) {\r\n return this.pseudo;\r\n }\r\n if (this.lastName.length > 0) {\r\n return `${this.firstName} ${this.lastName}`;\r\n }\r\n return this.email;\r\n }\r\n}\r\n\r\nexport type Organisation = {\r\n name: string;\r\n siret?: string | null;\r\n address?: string | null;\r\n city?: string | null;\r\n postal?: number | null;\r\n logoUrl?: string | null;\r\n originDate?: number | null;\r\n deletedAt?: number | null;\r\n shareToken?: string | null;\r\n tokenExpiresAt?: number | null;\r\n connectedAccountStripeID?: string | null;\r\n stripeOnBoardingCompleted?: boolean | null;\r\n stripeToken?: string | null;\r\n stripeChargesEnabled?: boolean | null;\r\n contactDetails?: string | null;\r\n ticketOrganisationsId?: string | null;\r\n // properties?: {\r\n // __typename?: \"ModelPropertyConnection\";\r\n // items?: Array<Property | null> | null;\r\n // nextToken?: string | null;\r\n // } | null;\r\n} & AWSType;\r\n\r\nexport type Property = {\r\n type: PropertyType;\r\n deletedAt?: number | null;\r\n organisationID: string;\r\n spaceID: string;\r\n zoneID?: string | null;\r\n space?: Space | null;\r\n organisation?: Organisation | null;\r\n // zone?: Zone | null;\r\n} & AWSType;\r\n\r\nexport type Space = {\r\n name: string;\r\n addresses?: string | null;\r\n annexes?: string | null;\r\n tags?: Array<string | null> | null;\r\n latitude?: number | null;\r\n longitude?: number | null;\r\n metadata?: string | null;\r\n level?: LevelStatus | null;\r\n deletedAt?: number | null;\r\n constructionYear?: string | null;\r\n classEnergyConsumption?: string | null;\r\n classGes?: string | null;\r\n status?: SpaceStatus | null;\r\n guestLink?: string | null;\r\n signedImageUrl?: string | null;\r\n zones?: {\r\n __typename?: \"ModelZoneConnection\";\r\n items?: Array<Zone | null> | null;\r\n nextToken?: string | null;\r\n };\r\n properties?: {\r\n __typename?: \"ModelPropertyConnection\";\r\n items?: Array<Property | null> | null;\r\n nextToken?: string | null;\r\n };\r\n visits?: Visit[] | null;\r\n} & AWSType;\r\n\r\n// not in DB\r\nexport type Visit = {\r\n captureID: string;\r\n model3d: string;\r\n takenAt: number;\r\n spaceID: string;\r\n viewer: CaptureViewer;\r\n surface: number;\r\n node: Node;\r\n name?: string | null;\r\n imagesImported: boolean;\r\n};\r\n\r\n\r\nexport type Hashtag = {\r\n name?: string | null;\r\n organisationID?: string | null;\r\n spaceID?: string | null;\r\n organization?: Organisation | null;\r\n space?: Space | null;\r\n} & AWSType;\r\n\r\nexport type Capture = {\r\n // clientRef?: string | null;\r\n // originCoordinate?: string | null;\r\n // originAngle?: string | null;\r\n // originZoom?: string | null;\r\n takenAt?: number | null;\r\n viewer?: CaptureViewer | null;\r\n publishedAt?: number | null;\r\n surface?: number | null;\r\n metadata?: string | null;\r\n spaceID?: string | null;\r\n nodes?: {\r\n __typename?: \"ModelNodeConnection\";\r\n items?: Array<Node | null> | null;\r\n nextToken?: string | null;\r\n };\r\n} & AWSType;\r\n\r\nexport type Node = {\r\n model3D?: string | null;\r\n coordinate?: string | null;\r\n size?: string | null;\r\n scale?: string | null;\r\n version?: number | null;\r\n active?: number | null;\r\n order?: number | null;\r\n // quality?: NodeQuality | null;\r\n metadata?: string | null;\r\n captureID?: string | null;\r\n inventoryStatus?: InventoryStatus | null;\r\n navigationForInventory?: string | null;\r\n capture?: Capture | null;\r\n} & AWSType;\r\n\r\nexport type Plan = {\r\n name?: string | null;\r\n annexe?: string | null;\r\n calibration?: string | null;\r\n zoneID?: string | null;\r\n isCurrentForZone?: boolean | null;\r\n spaceID?: string | null;\r\n isModified?: boolean | null;\r\n isImportedMatterport?: boolean | null;\r\n filepath?: string;\r\n model3d?: string | null;\r\n floor?: string | null;\r\n visitName?: string | null;\r\n zone?: Zone | null;\r\n extension?: string | null;\r\n navigationIDs?: string[] | null;\r\n} & AWSType;\r\n\r\nexport type Navigation = {\r\n matterportSweepID?: string | null;\r\n position?: string | null;\r\n rotation?: string | null;\r\n radius?: number | null;\r\n url?: string | null;\r\n tags?: Array<string | null> | null;\r\n level?: LevelStatus | null;\r\n nodeID?: string | null;\r\n spaceID?: string | null;\r\n positionOnPlan?: Array<string | null> | null;\r\n navigationSiblingsId?: string | null;\r\n pois?: {\r\n __typename?: \"ModelPOIConnection\";\r\n items?: Array<POI | null> | null;\r\n nextToken?: string | null;\r\n };\r\n node?: Node | null;\r\n} & AWSType;\r\n\r\nexport type MenuItem = { label: string; url?: string; back?: any };\r\n\r\n// not in db\r\nexport type Measurement = {\r\n id: string;\r\n poi: POI;\r\n comment: Comment;\r\n singedUrlPhoto?: string | null;\r\n values: Array<number> | null;\r\n numberPoints: number;\r\n};\r\n\r\nexport type Feature = {\r\n title?: string | null;\r\n shortDescription?: string | null;\r\n ownerMissionID?: string | null;\r\n level?: LevelStatus | null;\r\n index?: number | null;\r\n type?: FeatureType | null;\r\n archivedForMissionID?: Array<string | null> | null;\r\n stripeProductID?: string | null;\r\n stripePriceID?: string | null;\r\n bookingPriceMetadata?: string | null;\r\n locale?: Locale | null;\r\n hashtags?: Array<string | null> | null;\r\n coverImageUrl?: string | null;\r\n images?: Array<MediaContent> | null;\r\n videos?: Array<MediaContent> | null;\r\n audios?: Array<MediaContent> | null;\r\n externalLinks?: Array<MediaContent> | null;\r\n documents?: Array<{\r\n path: string;\r\n title: string;\r\n description: string;\r\n }> | null;\r\n comments?: {\r\n __typename?: \"ModelCommentConnection\";\r\n items?: Array<Comment | null> | null;\r\n nextToken?: string | null;\r\n };\r\n domain?: Domain | null;\r\n isBookingPlace?: boolean | null;\r\n events?: {\r\n __typename?: \"ModelEventConnection\";\r\n items?: Array<Event | null> | null;\r\n nextToken?: string | null;\r\n };\r\n spaceID: string;\r\n} & DbObjectType;\r\n\r\nexport type Event = {\r\n title: string;\r\n type?: EventType | null;\r\n estimateStartDate?: number | null;\r\n estimateDuration?: number | null;\r\n estimateEndDate?: number | null;\r\n realStartDate?: number | null;\r\n timeSpent?: number | null;\r\n realEndDate?: number | null;\r\n status?: EventStatus | null;\r\n description?: string | null;\r\n group?: string | null;\r\n metadata?: string | null;\r\n ownerID?: string | null;\r\n ticketID?: string | null;\r\n createdAt?: string | null;\r\n translationPath?: string | null;\r\n featureID?: string | null;\r\n archivedByOwner?: boolean | null;\r\n paymentStatus?: PaymentStatus | null;\r\n stripeSessionID?: string | null;\r\n notificationStatus?: EmailStatus | null;\r\n refusalReason?: string | null;\r\n agoStr?: boolean | string | null;\r\n owner?: Mission | null;\r\n author?: ProfileEntity | null;\r\n feature?: Feature | null;\r\n} & AWSType;\r\n\r\n//not in DB (variation of Event)\r\nexport type RequestIntervention = {\r\n estimateStartDate?: number | null;\r\n estimateDuration?: number | null;\r\n estimateEndDate?: number | null;\r\n realStartDate?: number | null;\r\n realDuration?: number | null;\r\n realEndDate?: number | null;\r\n type: EventType.REQUEST_FOR_INTERVENTION;\r\n status: EventStatus;\r\n intervention?: Event | null;\r\n report?: Event | null;\r\n ticketID: string;\r\n} & AWSType;\r\n\r\n//not in DB (variation of Event)\r\nexport type Intervention = {\r\n estimateStartDate?: number | null;\r\n estimateDuration?: number | null;\r\n estimateEndDate?: number | null;\r\n realStartDate?: number | null;\r\n realDuration?: number | null;\r\n realEndDate?: number | null;\r\n type: EventType;\r\n status: EventStatus;\r\n} & AWSType;\r\n\r\nexport type VisitTemplate = {\r\n id?: string | null;\r\n title?: string | null;\r\n level?: LevelStatus | null;\r\n description?: string | null;\r\n metadata?: string | null;\r\n deletedAt?: number | null;\r\n startDateTime?: string | null;\r\n endDateTime?: string | null;\r\n hashtags?: Array<string | null> | null;\r\n organisationID: string;\r\n spaceID?: string | null;\r\n zoneID?: string | null;\r\n locale?: Locale | null;\r\n realStartedAt?: number | null;\r\n realEndedAt?: number | null;\r\n space?: Space | null;\r\n zone?: Zone | null;\r\n organisation?: Organisation | null;\r\n userMissions?:{\r\n __typename: \"ModelMissionConnection\";\r\n items: Array<Mission | null>;\r\n nextToken?: string | null;\r\n } | null;\r\n} & AWSType;","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { removeNullKeysFromObject } from \"../../helpers.service\";\r\nimport { POI, PoiType } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class PoiService {\r\n API: any; //AWS APIService\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getPoiByElementId(elementId: string): Promise<POI | null> {\r\n const pois = await this.API.__proto__.PoisByElement(elementId);\r\n if (pois && pois.items.length > 0) {\r\n return pois.items[0];\r\n }\r\n return null;\r\n }\r\n\r\n async getPoisByType(type: PoiType): Promise<[POI] | any> {\r\n return this.API.__proto__.PoisByType(type).then((pois) => pois.items);\r\n }\r\n\r\n async createPOIForSpaceID(\r\n poi: POI\r\n ): Promise<POI> {\r\n removeNullKeysFromObject(poi);\r\n return this.API.__proto__.CreatePOI(poi);\r\n }\r\n\r\n poiIsVirtual(poi: POI): boolean {\r\n const { coordinate } = poi;\r\n return !coordinate;\r\n }\r\n\r\n async updatePoi(poi: {}): Promise<POI> {\r\n return this.API.__proto__.UpdatePOI(poi);\r\n }\r\n\r\n async deletePoi(poiID: string): Promise<POI> {\r\n return this.API.__proto__.DeletePOI({ id: poiID });\r\n }\r\n\r\n async getPoisByMatterportSweepByType(\r\n sweep: string,\r\n type: PoiType,\r\n ): Promise<POI[]> {\r\n return this.API.__proto__.ListPOIs(\r\n { matterportSweepID: { eq: sweep } },\r\n 300,\r\n ).then((response) => response.items.filter((poi) => poi.type === type));\r\n }\r\n}\r\n","/* eslint-disable unicorn/filename-case */\r\n\r\nimport { Comment, DbObjectType, Equipment, Feature, POI, PoiType, Ticket } from \"./types.service\";\r\n\r\n\r\nexport class MattertagData {\r\n private ticket: Ticket;\r\n\r\n private equipment: Equipment;\r\n\r\n private comment: Comment;\r\n\r\n private feature: Feature;\r\n\r\n private type: PoiType = PoiType.TICKET;\r\n\r\n public elementID: string;\r\n\r\n private position: any = { x: 0, y: 0, z: 0 };\r\n\r\n private normal: any = { x: 0, y: 1, z: 0 };\r\n\r\n private mediaSrc: string;\r\n\r\n private sweepID: string;\r\n\r\n public customIconIndex = 0;\r\n\r\n private rotation: { x: number; y: number };\r\n\r\n private poi: POI;\r\n\r\n constructor(type: PoiType) {\r\n this.setType(type);\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Setters\r\n ------------------------------------------------------------------------------*/\r\n\r\n setType(type: PoiType) {\r\n this.type = type;\r\n }\r\n\r\n setTicket(ticket: Ticket) {\r\n this.ticket = ticket;\r\n this.setElementID(ticket.id);\r\n this.setType(PoiType.TICKET);\r\n }\r\n\r\n setEquipment(equip: Equipment) {\r\n this.equipment = equip;\r\n this.setElementID(equip.id);\r\n this.setType(PoiType.EQUIPMENT);\r\n }\r\n\r\n setComment(comment: Comment) {\r\n this.comment = comment;\r\n this.setElementID(comment.id);\r\n this.setType(PoiType.MEASURE);\r\n }\r\n\r\n setFeature(feature: Feature) {\r\n this.feature = feature;\r\n this.setElementID(feature.id);\r\n this.setType(PoiType.DATA);\r\n }\r\n\r\n setDesk(feature: Feature) {\r\n this.feature = feature;\r\n this.setElementID(feature.id);\r\n this.setType(PoiType.DESK);\r\n }\r\n\r\n setElementID(ticketID: any) {\r\n this.elementID = ticketID;\r\n }\r\n\r\n setPosition(position: any) {\r\n this.position = position;\r\n }\r\n\r\n setNormal(normal: any) {\r\n this.normal = normal;\r\n }\r\n\r\n setMediaSource(source: string) {\r\n this.mediaSrc = source;\r\n }\r\n\r\n setSweepID(sweepID: string) {\r\n this.sweepID = sweepID;\r\n }\r\n\r\n setRotation(rotation: { x: number; y: number }) {\r\n this.rotation = rotation;\r\n }\r\n\r\n setPoi(poi: POI) {\r\n this.poi = poi;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Getters\r\n ------------------------------------------------------------------------------*/\r\n\r\n // MattertagData\r\n getData() {\r\n let label = \"New Tag\";\r\n switch (this.type) {\r\n case PoiType.TICKET:\r\n label = this.ticket ? this.ticket.title! : \"New Tag\";\r\n break;\r\n case PoiType.EQUIPMENT:\r\n label = this.equipment ? this.equipment.name! : \"New Tag\";\r\n break;\r\n case PoiType.MEASURE:\r\n label = this.comment ? this.comment.title! : \"New Tag\";\r\n break;\r\n case PoiType.DATA:\r\n label = \"\";\r\n break;\r\n default:\r\n label = \"New Tag\";\r\n break;\r\n }\r\n const data = {\r\n label,\r\n description: \"\",\r\n anchorPosition: {\r\n x: this.position.x * 1,\r\n y: this.position.y * 1,\r\n z: this.position.z * 1,\r\n },\r\n stemVector: {\r\n x: this.normal.x * 0.3,\r\n y: this.normal.y * 0.3,\r\n z: this.normal.z * 0.3,\r\n },\r\n color: {\r\n // blue disc\r\n r: 0,\r\n g: 0,\r\n b: 1,\r\n },\r\n };\r\n return data;\r\n }\r\n\r\n getType() {\r\n return this.type;\r\n }\r\n\r\n getNormal() {\r\n return this.normal;\r\n }\r\n\r\n getMenuToOpen(): string {\r\n switch (this.type) {\r\n case PoiType.TICKET:\r\n return this.ticket ? \"positioning_ticket\" : \"add_ticket\";\r\n case PoiType.EQUIPMENT:\r\n return this.equipment ? \"positioning_equip\" : \"add_equip\";\r\n case PoiType.DATA:\r\n return this.feature ? \"positioning_feature\" : \"add_feature\";\r\n case PoiType.DESK:\r\n return this.feature ? \"positioning_feature\" : \"add_desk\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n getIcon() {\r\n switch (this.type) {\r\n case PoiType.TICKET:\r\n return \"icon_ticket.png\";\r\n case PoiType.EQUIPMENT:\r\n return \"icon_equipment.png\";\r\n }\r\n return \"\";\r\n }\r\n\r\n getCoordinateString() {\r\n return JSON.stringify({\r\n x: this.position.x,\r\n y: this.position.y,\r\n z: this.position.z,\r\n xRotation: this.rotation ? this.rotation.x : null,\r\n yRotation: this.rotation ? this.rotation.y : null,\r\n });\r\n }\r\n\r\n getMetadataString() {\r\n return JSON.stringify({\r\n icon: this.getIcon(),\r\n normal: this.getNormal(),\r\n });\r\n }\r\n\r\n getSweepID() {\r\n return this.sweepID;\r\n }\r\n\r\n getObject(): any {\r\n if (this.ticket) {\r\n return this.ticket;\r\n }\r\n if (this.equipment) {\r\n return this.equipment;\r\n }\r\n if (this.feature) {\r\n return this.feature;\r\n }\r\n if (this.comment) {\r\n return this.comment;\r\n }\r\n return null;\r\n }\r\n\r\n getRotation(): { x: number; y: number } {\r\n return this.rotation;\r\n }\r\n\r\n getPoi(): POI {\r\n return this.poi;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseVisibilityService {\r\n detailShowing = new Subject<boolean>();\r\n\r\n constructor() { }\r\n}","\r\nexport class Config {\r\n my_config: { \r\n icon_ticket: string; \r\n icon_equipment: string;\r\n icon_measure: string;\r\n icon_data: string;\r\n icon_position: string;\r\n MAX_CHARACTER_DESCRIPTION_TAG: number;\r\n DEFAULT_HEIGHT_HTML_TAG: number;\r\n DEFAULT_OPACITY_TAG: number;\r\n COLD_LIMIT: number;\r\n HOT_LIMIT: number;\r\n DEFAULT_WIDTH_HTML_TAG: number;\r\n MAX_IMAGE_HEIGHT_HTML_TAG: number};\r\n\r\n constructor() { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Subject } from 'rxjs';\r\nimport { getDistanceBetweenTwoPoints, poiTypeToString, wait } from '../helpers.service';\r\nimport { MattertagData } from '../mattertagData';\r\nimport { Comment, DbObjectType, Equipment, Feature, POI, PoiType, TagAction, Ticket, TicketPriority, ViewerInteractions } from '../types.service';\r\nimport { BaseTagService } from './tag.service';\r\nimport { BaseVisibilityService } from './baseVisibility.service';\r\nimport { Config } from '../config';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MatterportService {\r\n public sdk: any;\r\n\r\n private container: any;\r\n\r\n // Position camera\r\n private poseMatterport: any;\r\n\r\n public poseCamera: { rotation: any; position: any; sweep: any };\r\n\r\n // Pointer trick\r\n private pointerButton: any;\r\n\r\n private oldPoseMatterportPosition: any;\r\n\r\n // Measure mode\r\n private isMeasureModeOn = false;\r\n\r\n // Timers\r\n private lastActionTime = -1;\r\n\r\n private interactionMode: number = ViewerInteractions.DEFAULT;\r\n\r\n private mattertags: Array<string> = [];\r\n\r\n private dictionnaryTags: Map<string, {mattertagData: MattertagData; elementID: string}> = new Map;\r\n\r\n private lastMeasure = [];\r\n\r\n private distancesLastMeasure:number[] = [];\r\n\r\n private resolution = {\r\n width: 500,\r\n height: 600,\r\n };\r\n\r\n private visibility = {\r\n mattertags: false,\r\n sweeps: true,\r\n };\r\n\r\n private lastScreenshotUri: any;\r\n\r\n public sweeps: Array<string> | null;\r\n\r\n public currentSweep: Subject<string> = new Subject();\r\n\r\n private floors?: Array<{ id: string; name: string; sequence: number }> | null;\r\n\r\n private _currentSpaceID: string;\r\n\r\n public get currentSpaceID(): string {\r\n return this._currentSpaceID;\r\n }\r\n\r\n public set currentSpaceID(value: string) {\r\n this._currentSpaceID = value;\r\n }\r\n\r\n timerPointer: any;\r\n\r\n forbiddenSweeps: string[] = [];\r\n\r\n public tagAction: Subject<{ action: string; data: string }> = new Subject();\r\n\r\n public mattertagToFollow: string | null;\r\n\r\n tagService: BaseTagService;\r\n\r\n config: Config;\r\n\r\n public inTransitionMode = false;\r\n\r\n public inTransitionSweep = false;\r\n\r\n constructor(\r\n @Inject('config') config: Config,\r\n private router: Router,\r\n private visibilityService: BaseVisibilityService\r\n ) {\r\n this.config = config;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\nUtils async\r\n------------------------------------------------------------------------------*/\r\n\r\n async initSdk(tagService: BaseTagService, isMuseum: boolean = false): Promise<boolean> {\r\n if (this.sdk) {\r\n await this.action_delete_all_mattertags();\r\n }\r\n this.tagService = tagService;\r\n return new Promise((resolve, reject) => {\r\n // Retrieve DOM elements\r\n this.pointerButton = document.querySelector(\r\n \"#viewer-pointer-trick\",\r\n ) as HTMLElement;\r\n this.container = document.querySelector(\r\n \"#viewer-module\",\r\n ) as HTMLElement;\r\n const iframe = document.querySelector(\r\n \"#viewer-module\",\r\n ) as HTMLIFrameElement;\r\n if (!iframe) {\r\n return;\r\n }\r\n\r\n // Add listeners\r\n if (this.pointerButton) {\r\n this.pointerButton.addEventListener(\r\n \"click\",\r\n function (e: any) {\r\n this.addMattertag();\r\n this.updatePositionInTagData();\r\n }.bind(this),\r\n );\r\n // cancel on right click\r\n this.pointerButton.addEventListener(\r\n \"contextmenu\",\r\n function (e: { preventDefault: () => void; }) {\r\n console.log(\"cancel on right click\");\r\n e.preventDefault();\r\n this.action_canceled();\r\n alert(\"action cancelled\");\r\n }.bind(this),\r\n );\r\n }\r\n\r\n // Load SDK\r\n console.log(\"Loading Matterport SDK\");\r\n // @ts-ignore\r\n window.MP_SDK.connect(\r\n iframe,\r\n \"qn9wsasuy5h2fzrbrn1nzr0id\",\r\n \"3.11\",\r\n ).then(async (sdk:any) => {\r\n // Instanciate sdk\r\n this.sdk = sdk;\r\n\r\n // Load Mattertag icons\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-ticket\",\r\n this.config.my_config.icon_ticket,\r\n );\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-equipment\",\r\n this.config.my_config.icon_equipment,\r\n );\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-measure\",\r\n this.config.my_config.icon_measure,\r\n );\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-data\",\r\n this.config.my_config.icon_data,\r\n );\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-position\",\r\n this.config.my_config.icon_position,\r\n );\r\n\r\n // 3D position's pointer\r\n this.sdk.Pointer.intersection.subscribe(\r\n function (intersection: any) {\r\n this.poseMatterport = intersection;\r\n\r\n if (!this.oldPoseMatterportPosition) {\r\n this.oldPoseMatterportPosition = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n };\r\n }\r\n\r\n if (\r\n this.interactionMode !==\r\n ViewerInteractions.DEFAULT &&\r\n this.mattertagToFollow\r\n ) {\r\n // follow the pointer and changes the position of the last tag\r\n // (we are about to validate, but it exists in sdk already)\r\n this.enable_following_tag(this.mattertagToFollow);\r\n }\r\n }.bind(this),\r\n );\r\n\r\n // subscribe to measurements\r\n if (!isMuseum) {\r\n this.sdk.Measurements.data.subscribe({\r\n onAdded: function (index: any, item: { points: any; }, collection: any) {\r\n // console.log(\r\n // \"item added to the collection\",\r\n // index,\r\n // item,\r\n // );\r\n // this.measurements[index] = item;\r\n this.lastMeasure = item.points;\r\n }.bind(this),\r\n onCollectionUpdated: function (collection: any) {\r\n // console.log('the entire up-to-date collection', collection);\r\n this.getDistanceForLastMeasurement();\r\n }.bind(this),\r\n });\r\n this.sdk.Measurements.mode.subscribe(\r\n function (measurementModeState: { active: any; }) {\r\n // measurement mode state has changed\r\n this.isMeasureModeOn = measurementModeState.active;\r\n // console.log('Is measurement mode currently active? ', measurementModeState.active);\r\n }.bind(this),\r\n );\r\n }\r\n \r\n\r\n // Camera's viewpoint\r\n this.sdk.Camera.pose.subscribe(\r\n function subscr(pose: any) {\r\n this.poseCamera = pose;\r\n // console.log('Current position is ', pose.position);\r\n // console.log('Rotation angle is ', pose.rotation);\r\n // console.log(\"Sweep UUID is\", pose.sweep);\r\n }.bind(this),\r\n );\r\n\r\n // subscribe to sweeps\r\n this.sdk.Sweep.data.subscribe({\r\n onCollectionUpdated: function subscr(collection: {}) {\r\n // console.log(collection);\r\n this.sweeps = Object.keys(collection);\r\n }.bind(this),\r\n });\r\n\r\n // subscribe to current sweep\r\n this.sdk.Sweep.current.subscribe(\r\n function subscr(currentSweep: { sid: string; }) {\r\n // Change to the current sweep has occurred.\r\n if (currentSweep.sid === \"\") {\r\n // console.log('Not currently stationed at a sweep position');\r\n } else {\r\n // console.log(\"emmiting sweep\", currentSweep.sid);\r\n this.currentSweep.next(currentSweep.sid);\r\n }\r\n }.bind(this),\r\n );\r\n\r\n // Subscribe to Floor data\r\n this.sdk.Floor.data.subscribe({\r\n onCollectionUpdated: function upd(this: any, collection: any) {\r\n this.floors = Object.values(collection);\r\n }.bind(this),\r\n });\r\n\r\n // on tag click open details page\r\n this.sdk.on(\"tag.click\", (sid: string) => {\r\n // get object of this tag\r\n try {\r\n const mattertagData = this.dictionnaryTags.get(sid)?.mattertagData!;\r\n const url= tagService.getUrlForSeeDetails(\r\n mattertagData.getObject(),\r\n mattertagData.getType(),\r\n );\r\n if (url !== \"\") {\r\n this.visibilityService.detailShowing.next(true);\r\n this.router.navigate([url]);\r\n }\r\n } catch {\r\n console.log(\"Cannot show details for tag\");\r\n }\r\n });\r\n\r\n // Pointer trick\r\n // Create a div that will appear when the cursor is still\r\n // It will intercept the click of the mouse before it trigerring the Matterport's tour navigation\r\n this.timerPointer = setInterval(\r\n this.updatePointerTrick.bind(this),\r\n 50,\r\n );\r\n \r\n \r\n /**\r\n * Transitions\r\n */\r\n this.sdk.on(\"viewmode.changestart\",function(to, from) {\r\n // console.log('Starting to move to ' + to + ' from ' + from);\r\n this.inTransitionMode = true;\r\n }.bind(this));\r\n\r\n this.sdk.on(\"viewmode.changeend\",function(oldMode, newMode) {\r\n // console.log('Ended to move to ' + newMode + ' from ' + oldMode);\r\n if(newMode !== \"mode.transitioning\") {\r\n this.inTransitionMode = false;\r\n }\r\n }.bind(this));\r\n\r\n this.sdk.on(sdk.Sweep.Event.ENTER,\r\n function(oldSweep, newSweep){\r\n // console.log('Leaving sweep ' + oldSweep);\r\n // console.log('Entering sweep ' + newSweep);\r\n this.inTransitionSweep = false;\r\n }.bind(this)\r\n );\r\n this.sdk.on(sdk.Sweep.Event.EXIT,\r\n function(fromSweep, toSweep){\r\n // console.log('Leaving sweep ' + fromSweep);\r\n // console.log('Transitioning to sweep ' + toSweep);\r\n this.inTransitionSweep = true;\r\n }.bind(this)\r\n );\r\n resolve(true);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Add Mattertag to the dictionnary of the current tags\r\n * @param mattertagID\r\n * @param mattertagData\r\n * @param tagType\r\n * @param ticketID\r\n */\r\n addMattertagToObject(mattertagID: string, mattertagData: MattertagData) {\r\n if (this.sdk) {\r\n this.mattertags.push(mattertagID);\r\n this.dictionnaryTags.set(mattertagID,{\r\n mattertagData,\r\n elementID: mattertagData.elementID,\r\n });\r\n this.editTagStyle(mattertagID, mattertagData);\r\n }\r\n }\r\n\r\n getDistanceForLastMeasurement() {\r\n if (this.lastMeasure.length > 0) {\r\n const numberPoints = this.lastMeasure.length;\r\n this.distancesLastMeasure = [];\r\n for (let index = 1; index < numberPoints; index += 1) {\r\n const distance = getDistanceBetweenTwoPoints(\r\n this.lastMeasure[index - 1],\r\n this.lastMeasure[index],\r\n );\r\n this.distancesLastMeasure.push(distance);\r\n }\r\n this.takeScreenShot().then((res) => {\r\n this.goToMenu(`visit/${this.currentSpaceID}/add_measurement`);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Init the Mattertag that will follow the cursor\r\n * @param tagType\r\n */\r\n async add_cursor_mattertag(\r\n tagType: PoiType,\r\n element?: any,\r\n positioning: boolean = false,\r\n ) {\r\n if (!this.poseMatterport) return;\r\n const mattertagData = new MattertagData(tagType);\r\n if (positioning) {\r\n // set the coordinates of the existing tag\r\n const [poi] = element.pois.items;\r\n if (poi && poi.coordinate) {\r\n mattertagData.setPosition(JSON.parse(poi.coordinate));\r\n mattertagData.setPoi(poi); // to keep custom tagIon and opacity\r\n }\r\n }\r\n mattertagData.setSweepID(this.poseCamera.sweep);\r\n mattertagData.setRotation(this.poseCamera.rotation);\r\n if (element) {\r\n switch (tagType) {\r\n case PoiType.TICKET:\r\n mattertagData.setTicket(element);\r\n break;\r\n case PoiType.EQUIPMENT:\r\n mattertagData.setEquipment(element);\r\n break;\r\n case PoiType.DATA:\r\n mattertagData.setFeature(element);\r\n break;\r\n case PoiType.DESK:\r\n mattertagData.setDesk(element);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n this.mattertagToFollow = await this.add_mattertag_to_viewer(\r\n mattertagData,\r\n );\r\n if (positioning) {\r\n this.sdk.Mattertag.editIcon(\r\n this.mattertagToFollow,\r\n \"icon-position\",\r\n );\r\n this.sdk.Mattertag.editOpacity(this.mattertagToFollow, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Add Mattertag from its data\r\n * @param tagID\r\n * @param tagType\r\n * @param mattertagData\r\n */\r\n async add_mattertag_to_viewer(\r\n mattertagData: MattertagData,\r\n ): Promise<string | null> {\r\n let sidList;\r\n if (!this.sdk) {\r\n return null;\r\n }\r\n try {\r\n sidList = await this.sdk.Mattertag.add(mattertagData.getData());\r\n } catch (error) {\r\n console.log(\r\n \"Tag does not belong to the visit\",\r\n error,\r\n mattertagData.getData(),\r\n );\r\n }\r\n if (sidList) {\r\n const mattertagID = sidList[0];\r\n // console.log(\"added tag\", mattertagData.getType(), mattertagID);\r\n this.addMattertagToObject(mattertagID, mattertagData);\r\n return mattertagID;\r\n }\r\n return null;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\nUtils - Mattertag\r\n------------------------------------------------------------------------------*/\r\n\r\n addMattertag() {\r\n this.setInteractionMode(ViewerInteractions.DEFAULT);\r\n this.action_open_menu(this.getMenuToOpenForLastTag());\r\n this.resetActionTime();\r\n }\r\n\r\n updatePointerTrick() {\r\n if (\r\n this.interactionMode !== ViewerInteractions.DEFAULT &&\r\n this.mattertagToFollow &&\r\n this.poseMatterport &&\r\n this.getDistPosition(\r\n this.poseMatterport.position,\r\n this.oldPoseMatterportPosition,\r\n ) > 25\r\n ) {\r\n this.pointerButton.style.display = \"none\";\r\n\r\n const size = {\r\n w: this.container.clientWidth,\r\n h: this.container.clientHeight,\r\n };\r\n const coords = this.sdk.Conversion.worldToScreen(\r\n this.poseMatterport.position,\r\n this.poseCamera,\r\n size,\r\n );\r\n this.pointerButton.style.left = `${\r\n coords.x * Math.sign(coords.x) - 25\r\n }px`;\r\n this.pointerButton.style.top = `${\r\n coords.y * Math.sign(coords.x) - 25\r\n }px`;\r\n this.oldPoseMatterportPosition = {\r\n ...this.poseMatterport.position,\r\n };\r\n } else {\r\n this.pointerButton.style.display = \"block\";\r\n }\r\n }\r\n\r\n async editTagStyle(mattertagID: string, mattertagData: MattertagData) {\r\n const stringTagType = poiTypeToString(mattertagData.getType());\r\n let opacity = this.config.my_config.DEFAULT_OPACITY_TAG;\r\n let iconName = `icon-${stringTagType}`;\r\n const poi = mattertagData.getPoi();\r\n if (poi && poi.tagIcon) {\r\n const tagIcon = JSON.parse(poi.tagIcon);\r\n // TODO for indicators\r\n // if (mattertagData.getType() === PoiType.DATA) {\r\n // const feature = mattertagData.getObject();\r\n // tagIcon.src = this.tagService.getIconTagImageForFeature(\r\n // feature,\r\n // poi,\r\n // );\r\n // poi.tagIcon = tagIcon;\r\n // }\r\n if (tagIcon.src) {\r\n const pathSigned = await this.tagService.getSignedTagIconSource(tagIcon.src);\r\n if (pathSigned) {\r\n try {\r\n iconName = `icon-${stringTagType}-${mattertagID}-${mattertagData.customIconIndex}`;\r\n await this.sdk.Mattertag.registerIcon(\r\n iconName,\r\n pathSigned,\r\n );\r\n mattertagData.customIconIndex += 1;\r\n } catch {\r\n console.log(\"error registerIcon\");\r\n }\r\n }\r\n }\r\n if (tagIcon.opacity) {\r\n opacity = tagIcon.opacity;\r\n }\r\n }\r\n try {\r\n this.sdk.Mattertag.editIcon(mattertagID, iconName);\r\n this.sdk.Mattertag.editOpacity(mattertagID, opacity);\r\n } catch (error) {\r\n console.log(\"Error editIcon or opacity\", error);\r\n }\r\n }\r\n\r\n enable_following_tag(mattertag: any) {\r\n this.sdk.Mattertag.editPosition(mattertag, {\r\n anchorPosition: {\r\n x: this.poseMatterport.position.x * 1,\r\n y: this.poseMatterport.position.y * 1,\r\n z: this.poseMatterport.position.z * 1,\r\n },\r\n stemVector: {\r\n x: this.poseMatterport.normal.x * 0.3,\r\n y: this.poseMatterport.normal.y * 0.3,\r\n z: this.poseMatterport.normal.z * 0.3,\r\n },\r\n });\r\n }\r\n\r\n resetActionTime() {\r\n this.lastActionTime = -1;\r\n }\r\n\r\n goToLastTag() {\r\n setTimeout(() => {\r\n this.goToTag(this.mattertags[this.mattertags.length - 1]);\r\n }, 2000);\r\n }\r\n\r\n async goToTag(mattertagID: string) {\r\n if (mattertagID === \"\") return;\r\n try {\r\n await this.sdk.Mattertag.navigateToTag(\r\n mattertagID,\r\n this.sdk.Mattertag.Transition.FLY,\r\n );\r\n } catch (error) {\r\n console.log(\"cannot navigate to tag\", error);\r\n }\r\n }\r\n\r\n goToMenu(menuUrl: any) {\r\n this.router.navigate([menuUrl]);\r\n }\r\n\r\n /**\r\n * Get the distance betwween two 3D positions\r\n * Used in order to see how much the cursor has moved from the previous position\r\n * @param pos1\r\n * @param pos2\r\n */\r\n getDistPosition(pos1: any, pos2: any) {\r\n const size = {\r\n w: this.container.clientWidth,\r\n h: this.container.clientHeight,\r\n };\r\n const coords1 = this.sdk.Conversion.worldToScreen(\r\n pos1,\r\n this.poseCamera,\r\n size,\r\n );\r\n const coords2 = this.sdk.Conversion.worldToScreen(\r\n pos2,\r\n this.poseCamera,\r\n size,\r\n );\r\n return Math.sqrt(\r\n (coords1.x - coords2.x) ** 2 + (coords1.y - coords2.y) ** 2,\r\n );\r\n }\r\n\r\n updatePositionInTagData() {\r\n const lastTag = this.getLastTag();\r\n if (lastTag) {\r\n this.dictionnaryTags.get(lastTag)!.mattertagData.setPosition(\r\n this.poseMatterport.position,\r\n );\r\n this.dictionnaryTags.get(lastTag)!.mattertagData.setNormal(\r\n this.poseMatterport.normal,\r\n );\r\n this.updateMatterTagFromId(lastTag);\r\n }\r\n }\r\n\r\n async updateMatterTagFromId(\r\n mattertagID: string,\r\n object: any = null,\r\n tagType: PoiType | null = null,\r\n ) {\r\n this.sdk.Mattertag.editBillboard(\r\n mattertagID,\r\n this.dictionnaryTags.get(mattertagID)!.mattertagData.getData(),\r\n );\r\n if (object && tagType) {\r\n this.injectHtmlInTag(tagType, object, mattertagID);\r\n }\r\n this.editTagStyle(\r\n mattertagID,\r\n this.dictionnaryTags.get(mattertagID)!.mattertagData,\r\n );\r\n }\r\n\r\n deleteMattertagFromId(mattertagID: string) {\r\n this.sdk.Mattertag.remove(mattertagID);\r\n this.dictionnaryTags.delete(mattertagID);\r\n }\r\n\r\n deleteLastMattertag() {\r\n const mattertagID = this.mattertags.pop();\r\n if (mattertagID) {\r\n this.deleteMattertagFromId(mattertagID);\r\n }\r\n \r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\nUtils - Toolbar\r\n------------------------------------------------------------------------------*/\r\n\r\n action_toolbox_floorplan() {\r\n this.sdk.Mode.moveTo(\"mode.floorplan\");\r\n }\r\n\r\n action_toolbox_inside_view() {\r\n this.sdk.Mode.moveTo(\"mode.inside\");\r\n }\r\n\r\n async action_toolbox_dollhouse() {\r\n setTimeout(async () => {\r\n console.log(\"mode: \",this.inTransitionMode, \" sweep: \", this.inTransitionSweep)\r\n if (this.inTransitionMode || this.inTransitionSweep) {\r\n console.log(\"viewer is in transition, cannot go dollhouse\")\r\n return;\r\n }\r\n try {\r\n await this.sdk.Mode.moveTo(\"mode.dollhouse\");\r\n } catch(e) {\r\n console.log(\"cannot go to dollhouse\", e)\r\n }\r\n }, 1200);\r\n }\r\n\r\n action_toolbox_mesure() {\r\n const newState = !this.isMeasureModeOn;\r\n this.sdk.Measurements.toggleMode(newState).then(() => {\r\n console.log(\r\n `Measurement mode is now ${newState ? \"enabled\" : \"disabled\"}`,\r\n );\r\n });\r\n }\r\n\r\n action_toolbox_cancel_mesure() {\r\n if (this.isMeasureModeOn) {\r\n this.action_toolbox_mesure();\r\n }\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\nActions\r\n------------------------------------------------------------------------------*/\r\n\r\n async action_add_mattertag_from_POI(\r\n tagType: PoiType,\r\n object: Ticket | Equipment | Comment | Feature,\r\n poi: POI,\r\n ): Promise<any> {\r\n // check if tag exists already\r\n const {tag, sweep} = this.getTagFromElementId(object.id)\r\n if (tag) {\r\n // console.log(\"tag exists\", object)\r\n return;\r\n }\r\n const mattertagData: MattertagData = new MattertagData(tagType);\r\n switch (tagType) {\r\n case PoiType.TICKET:\r\n mattertagData.setTicket(object as Ticket);\r\n break;\r\n case PoiType.EQUIPMENT:\r\n mattertagData.setEquipment(object as Equipment);\r\n break;\r\n case PoiType.MEASURE:\r\n mattertagData.setComment(object as Comment);\r\n break;\r\n case PoiType.DATA:\r\n mattertagData.setFeature(object as Feature);\r\n break;\r\n case PoiType.DESK:\r\n mattertagData.setFeature(object as Feature);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (poi.coordinate) {\r\n mattertagData.setPosition(JSON.parse(poi.coordinate));\r\n }\r\n if (poi.metadata) {\r\n const tagMetadata = JSON.parse(poi.metadata);\r\n if (tagMetadata.normal) {\r\n mattertagData.setNormal(tagMetadata.normal);\r\n } else {\r\n mattertagData.setNormal({ x: 0, y: -0.15, z: 0 });\r\n }\r\n }\r\n if (poi.matterportSweepID) {\r\n mattertagData.setSweepID(poi.matterportSweepID);\r\n }\r\n mattertagData.setPoi(poi);\r\n\r\n const createdTag = await this.add_mattertag_to_viewer(mattertagData);\r\n if (createdTag && this.sdk) {\r\n await this.injectHtmlInTag(tagType, object, createdTag);\r\n }\r\n }\r\n\r\n async injectHtmlInTag(\r\n tagType: PoiType,\r\n object: DbObjectType,\r\n tagID: string,\r\n ) {\r\n let { html, height } = await this.tagService.getHtmlToInject(\r\n tagType,\r\n object,\r\n this.config.my_config.DEFAULT_HEIGHT_HTML_TAG\r\n );\r\n if (html !== \"\" && this.sdk) {\r\n const scriptTag = this.tagService.getScriptForTag(object, tagType);\r\n html += `${scriptTag}`;\r\n this.sdk.Mattertag.injectHTML(tagID, html, {\r\n size: {\r\n w: this.config.my_config.DEFAULT_WIDTH_HTML_TAG,\r\n h: height,\r\n },\r\n })\r\n .then((messenger) => {\r\n messenger.on(\r\n TagAction.DETAIL_CLICK,\r\n this.tagService.onActionDetailClick.bind(this.tagService)\r\n );\r\n messenger.on(\r\n TagAction.TICKET_CLICK,\r\n this.tagService.onActionDetailClick.bind(this.tagService)\r\n );\r\n messenger.on(\r\n TagAction.AUDIO_CLICK,\r\n this.tagService.onActionAudioClick.bind(this.tagService)\r\n );\r\n messenger.on(\r\n TagAction.IMAGE_CLICK,\r\n this.tagService.onActionImageClick.bind(this.tagService)\r\n );\r\n messenger.on(\r\n TagAction.VIDEO_CLICK,\r\n this.tagService.onActionVideoClick.bind(this.tagService)\r\n );\r\n messenger.on(\r\n TagAction.DOC_CLICK,\r\n this.tagService.onActionDocClick.bind(this.tagService)\r\n );\r\n messenger.on(\r\n TagAction.YOUTUBE_CLICK,\r\n this.tagService.onActionYoutubeClick.bind(this.tagService)\r\n );\r\n })\r\n .catch((error: any) =>\r\n console.log(\"Cannot inject html for tag\", tagID, error),\r\n );\r\n }\r\n }\r\n\r\n async action_delete_all_mattertags() {\r\n // await Promise.all(\r\n this.mattertags.map(async (tag) => {\r\n await this.sdk.Mattertag.remove(tag);\r\n });\r\n // );\r\n this.mattertags = [];\r\n this.dictionnaryTags.clear();\r\n }\r\n\r\n async action_delete_element(\r\n element: DbObjectType,\r\n ) {\r\n const sidTag = this.getTagFromElementId(element.id!).tag;\r\n if (sidTag) {\r\n let resp;\r\n try {\r\n resp = await this.sdk.Mattertag.remove(sidTag);\r\n } catch (error) {\r\n console.log(\"Cannot delete tag\", sidTag, error);\r\n }\r\n if (resp) {\r\n this.dictionnaryTags.delete(sidTag);\r\n const index = this.mattertags.indexOf(sidTag);\r\n this.mattertags.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n async action_add_ticket() {\r\n await this.add_cursor_mattertag(PoiType.TICKET);\r\n this.setInteractionMode(ViewerInteractions.ADDING_TICKET);\r\n }\r\n\r\n async action_position_element(\r\n poiType: PoiType,\r\n element: DbObjectType,\r\n ) {\r\n await this.add_cursor_mattertag(poiType, element, true);\r\n this.setInteractionMode(ViewerInteractions.POSITIONING);\r\n }\r\n\r\n async action_add_equip() {\r\n await this.add_cursor_mattertag(PoiType.EQUIPMENT);\r\n this.setInteractionMode(ViewerInteractions.ADDING_EQUIPMENT);\r\n }\r\n\r\n async action_add_measurement() {\r\n await this.add_cursor_mattertag(PoiType.MEASURE);\r\n this.setInteractionMode(ViewerInteractions.ADDING_MEASURE);\r\n }\r\n\r\n async action_add_feature() {\r\n await this.add_cursor_mattertag(PoiType.DATA);\r\n this.setInteractionMode(ViewerInteractions.ADDING_FEATURE);\r\n }\r\n\r\n async action_add_desk() {\r\n await this.add_cursor_mattertag(PoiType.DESK);\r\n this.setInteractionMode(ViewerInteractions.ADDING_FEATURE);\r\n }\r\n\r\n action_completed() {\r\n return (\r\n Date.now() - this.lastActionTime > 2000 &&\r\n this.lastActionTime !== -1\r\n );\r\n }\r\n\r\n action_canceled() {\r\n this.setInteractionMode(ViewerInteractions.DEFAULT);\r\n this.deleteLastMattertag();\r\n }\r\n\r\n action_open_menu(menu: string) {\r\n this.visibilityService.detailShowing.next(true);\r\n const lastTag = this.getLastTag();\r\n switch (menu) {\r\n case \"add_equip\":\r\n this.goToLastTag();\r\n this.goToMenu(`visit/${this.currentSpaceID}/add_equip`);\r\n break;\r\n case \"add_ticket\":\r\n this.goToLastTag();\r\n this.goToMenu(`visit/${this.currentSpaceID}/add_ticket`);\r\n break;\r\n case \"add_feature\":\r\n this.goToLastTag();\r\n let url: string;\r\n if (this.router.url.includes(\"?\")) {\r\n url = this.router.url.substring(0, this.router.url.indexOf(\"?\"));\r\n } else {\r\n url = this.router.url;\r\n }\r\n this.goToMenu(`${url}/add_feature`);\r\n break;\r\n case \"add_desk\":\r\n this.goToLastTag();\r\n this.router.navigate(\r\n [`visit/${this.currentSpaceID}/add_feature`],\r\n { queryParams: { isDesk: true } },\r\n );\r\n break;\r\n case \"positioning_ticket\":\r\n console.log(\"positioning_ticket\");\r\n if (lastTag) {\r\n this.router.navigate(\r\n [\r\n `visit/${this.currentSpaceID}/detail/${this.dictionnaryTags.get(lastTag).elementID}`,\r\n ],\r\n { queryParams: { positioning: true } },\r\n );\r\n }\r\n break;\r\n case \"positioning_equip\":\r\n if (lastTag) {\r\n this.router.navigate(\r\n [\r\n `visit/${this.currentSpaceID}/equip/${this.dictionnaryTags.get(lastTag).elementID}`,\r\n ],\r\n { queryParams: { positioning: true } },\r\n );\r\n }\r\n break;\r\n case \"positioning_feature\":\r\n if (lastTag) {\r\n this.router.navigate([`${this.router.url}`], {\r\n queryParams: { positioning: true },\r\n });\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n async action_go_to_floor(floorName: string, matterportFloorSequence: number = null) {\r\n if (!this.floors) {\r\n console.log(\"Floor are not loaded yet\");\r\n return;\r\n }\r\n // console.log(this.floors);\r\n // look up for sequence number (the safest method)\r\n let floorMatterport = this.floors.find(\r\n (floor) => floor.sequence === matterportFloorSequence,\r\n );\r\n if (!floorMatterport) {\r\n floorMatterport = this.floors.find(\r\n (floor) => floorName.includes(floor.name) && floor.name != \"\",\r\n );\r\n }\r\n if (!floorMatterport) {\r\n floorMatterport = this.floors.find((floor) =>\r\n floorName.includes(floor.id),\r\n );\r\n }\r\n // console.log(floorMatterport)\r\n if (floorMatterport) {\r\n let retry = true;\r\n while(retry) {\r\n try {\r\n const floorIndex = await this.sdk.Floor.moveTo(floorMatterport.sequence);\r\n // console.log(\"moved to floorIndex\", floorIndex);\r\n retry = false;\r\n } catch (error) {\r\n console.log(\"Cannot move to Floor\", error);\r\n await wait(100);\r\n }\r\n }\r\n } else {\r\n console.warn(\"No matterport floor found to move to\")\r\n }\r\n }\r\n\r\n async action_go_to_sweep(\r\n sweep: string,\r\n rotation: { x: number; y: number } = null,\r\n ) {\r\n if (this.forbiddenSweeps.includes(sweep)) {\r\n console.log(\"user is not allowed to go to this sweep\");\r\n return;\r\n }\r\n // console.log(\"going to sweep\", sweep, \"with rotation:\", rotation);\r\n setTimeout(async () => {\r\n if (this.inTransitionMode || this.inTransitionSweep) {\r\n console.log(\"Cannot go to sweep, in transition\");\r\n return;\r\n }\r\n try {\r\n this.inTransitionSweep = true;\r\n await this.sdk.Sweep.moveTo(sweep, {\r\n transition: \"transition.fly\",\r\n transitionTime: 1500,\r\n });\r\n } catch (error) {\r\n this.inTransitionSweep = false;\r\n console.log(\"Cannot move to sweep\", error);\r\n }\r\n if (rotation) {\r\n await this.sdk.Camera.setRotation(rotation, { speed: 100 }); // speed is degrees per second\r\n }\r\n }, 1000);\r\n }\r\n\r\n getCurrentSweep(): string | null {\r\n if (this.poseCamera) {\r\n return this.poseCamera.sweep;\r\n }\r\n return null;\r\n }\r\n\r\n getCurrentCameraPosition(): {\r\n rotation: any;\r\n position: any;\r\n sweep: any;\r\n } | null {\r\n if (this.poseCamera) {\r\n return this.poseCamera;\r\n }\r\n return null;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\nSetters\r\n------------------------------------------------------------------------------*/\r\n\r\n setInteractionMode(interactionMode: number) {\r\n this.interactionMode = interactionMode;\r\n }\r\n\r\n setTicketAndPoiInTag(mattertagID: string, ticket: Ticket, poi: POI | null = null) {\r\n this.dictionnaryTags.get(mattertagID).mattertagData.setTicket(ticket);\r\n if (poi) {\r\n this.dictionnaryTags.get(mattertagID).mattertagData.setPoi(poi);\r\n }\r\n this.dictionnaryTags.get(mattertagID).elementID = ticket.id;\r\n this.updateMatterTagFromId(mattertagID, ticket, PoiType.TICKET);\r\n }\r\n\r\n setEquipmentAndPoiInTag(\r\n mattertagID: string,\r\n equip: Equipment,\r\n poi: POI | null = null,\r\n ) {\r\n this.dictionnaryTags.get(mattertagID).mattertagData.setEquipment(equip);\r\n if (poi) {\r\n this.dictionnaryTags.get(mattertagID).mattertagData.setPoi(poi);\r\n }\r\n this.dictionnaryTags.get(mattertagID).elementID = equip.id;\r\n this.updateMatterTagFromId(mattertagID, equip, PoiType.EQUIPMENT);\r\n }\r\n\r\n setFeatureAndPoiInTag(\r\n mattertagID: string,\r\n feature: Feature,\r\n poi: POI | null = null,\r\n ) {\r\n this.dictionnaryTags.get(mattertagID).mattertagData.setFeature(feature);\r\n if (poi) {\r\n this.dictionnaryTags.get(mattertagID).mattertagData.setPoi(poi);\r\n }\r\n this.dictionnaryTags.get(mattertagID).elementID = feature.id;\r\n const tagType = feature.isBookingPlace ? PoiType.DESK : PoiType.DATA;\r\n this.updateMatterTagFromId(mattertagID, feature, tagType);\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\nGetters\r\n------------------------------------------------------------------------------*/\r\n\r\n getInteractionMode() {\r\n return this.interactionMode;\r\n }\r\n\r\n public getTagFromElementId(elementID: string): {\r\n tag: string | null;\r\n sweep: string | null;\r\n } {\r\n for (let index = 0; index < this.mattertags.length; index += 1) {\r\n if (\r\n this.dictionnaryTags.get(this.mattertags[index]).elementID ===\r\n elementID\r\n ) {\r\n const { mattertagData } =\r\n this.dictionnaryTags.get(this.mattertags[index]);\r\n const sweep = mattertagData.getSweepID();\r\n if (!sweep) {\r\n return { tag: this.mattertags[index], sweep: null };\r\n }\r\n if (this.sweeps && this.sweeps.includes(sweep)) {\r\n return { tag: this.mattertags[index], sweep };\r\n }\r\n return { tag: null, sweep };\r\n }\r\n }\r\n return { tag: null, sweep: null };\r\n }\r\n\r\n getTags() {\r\n return this.mattertags;\r\n }\r\n\r\n getLastTag(): string | null {\r\n if (this.mattertagToFollow) {\r\n return this.mattertagToFollow\r\n } else {\r\n return this.mattertags.length === 0\r\n ? null\r\n : this.mattertags[this.mattertags.length - 1];\r\n }\r\n }\r\n\r\n getMenuToOpenForLastTag() {\r\n const lastTag = this.getLastTag();\r\n if (lastTag) {\r\n return this.dictionnaryTags.get(lastTag).mattertagData.getMenuToOpen()\r\n }\r\n return null;\r\n }\r\n\r\n getTagDataFromId(mattertagID: string): MattertagData | null {\r\n try {\r\n return this.dictionnaryTags.get(mattertagID)!.mattertagData;\r\n } catch {\r\n console.log(\"cannot retrieve mattertagData for tag\", mattertagID);\r\n }\r\n return null;\r\n }\r\n\r\n getLastDistances() {\r\n return this.distancesLastMeasure;\r\n }\r\n\r\n takeScreenShot(): Promise<any> {\r\n return this.sdk.Renderer.takeScreenShot(\r\n this.resolution,\r\n this.visibility,\r\n ).then(\r\n function (screenShotUri: any) {\r\n // base64 string\r\n this.lastScreenshotUri = screenShotUri;\r\n return Promise.resolve();\r\n }.bind(this),\r\n );\r\n }\r\n\r\n getScreenShotUri() {\r\n return this.lastScreenshotUri;\r\n }\r\n\r\n getLastMeasurement(): Object {\r\n const data = {\r\n measure: this.lastMeasure,\r\n sweep: this.poseCamera.sweep,\r\n };\r\n return data;\r\n }\r\n\r\n async clearAll() {\r\n console.log(\"removing viewer\");\r\n this.action_delete_all_mattertags();\r\n this.floors = null;\r\n this.sweeps = null;\r\n this.sdk = null;\r\n clearInterval(this.timerPointer);\r\n this.forbiddenSweeps = [];\r\n }\r\n\r\n async removeForbiddenSweeps(forbiddenSweeps: string[]) {\r\n this.forbiddenSweeps = [...forbiddenSweeps];\r\n let removed = 0;\r\n await Promise.all(\r\n forbiddenSweeps.map(async (sweep) => {\r\n try {\r\n await this.sdk.Sweep.disable(sweep);\r\n removed += 1;\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }),\r\n );\r\n console.log(\"removed sweeps:\", removed);\r\n }\r\n}\r\n","/* eslint-disable no-await-in-loop */\r\n/* eslint-disable camelcase */\r\n/* eslint-disable no-underscore-dangle */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { MatterportService } from \"./matterport.service\";\r\nimport { BaseTagService } from \"./tag.service\";\r\nimport { DbObjectType, POI, ViewerInteractions, PoiType, Comment, Equipment, Ticket, Feature } from \"../types.service\";\r\nimport { PoiService } from \"./models/poi.service\";\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ViewerService {\r\n private viewerMode: string = \"Matterport\";\r\n\r\n public currentModel3D: string;\r\n\r\n private tourUrl: string;\r\n\r\n public viewerIsOn: Subject<{\r\n spaceID: string | null;\r\n model3D: string | null;\r\n sweep: string | null;\r\n rotation: { x: number; y: number } | null;\r\n }> = new Subject();\r\n\r\n public dataIsLoaded: Subject<boolean> = new Subject();\r\n\r\n public isLoaded = false;\r\n\r\n public showingViewer = false;\r\n \r\n public sweepToMove: string | null;\r\n\r\n public rotationToMove: { x: number; y: number } | null;\r\n\r\n public toolboxStates = {\r\n dollhouse: {\r\n stat: false,\r\n iconId: \"ui-dollhouse\",\r\n show() {},\r\n hide() {},\r\n },\r\n floorplan: {\r\n stat: false,\r\n },\r\n mesure: {\r\n stat: false,\r\n iconId: \"ui-mesure\",\r\n show() {},\r\n hide() {},\r\n },\r\n filter: {\r\n stat: false,\r\n },\r\n };\r\n\r\n constructor(\r\n private poiService: PoiService,\r\n private matterportService: MatterportService,\r\n ) {\r\n this.setMode(\"Matterport\");\r\n }\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Utils\r\n -----------------------------------------------------------------------------------------------------------------*/\r\n\r\n checkMode(indexMode: string) {\r\n return this.viewerMode === indexMode;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Setters\r\n -----------------------------------------------------------------------------------------------------------------*/\r\n\r\n setMode(indexMode: string) {\r\n this.viewerMode = indexMode;\r\n }\r\n\r\n setTourUrl(model3d: string, showIconPlan: boolean = true, showIconDollhouse: boolean = true, showIconFloors: boolean = true) {\r\n // this.tourUrl = this.checkMode(\"Matterport\")\r\n // ? `https://my.matterport.com/show/?m=${model3d}&play=1&qs=1&hr=0>=0&title=0&log=0&brand=0&applicationKey=qn9wsasuy5h2fzrbrn1nzr0id&mds=0`\r\n // : \"http://cupixweework.s3-website.eu-west-3.amazonaws.com/\";\r\n this.tourUrl = `https://my.matterport.com/show/?m=${model3d}&play=1&qs=1&hr=0>=0&title=0&log=0&brand=0&search=0&applicationKey=qn9wsasuy5h2fzrbrn1nzr0id&mds=0`;\r\n if (!showIconPlan) {\r\n this.tourUrl += \"&fp=0\"\r\n }\r\n if (!showIconDollhouse) {\r\n this.tourUrl += \"&dh=0\"\r\n }\r\n if(!showIconFloors) {\r\n this.tourUrl += \"&f=0\"\r\n }\r\n }\r\n\r\n clearAll() {\r\n this.sweepToMove = null;\r\n this.rotationToMove = null;\r\n if (this.checkMode(\"Matterport\")) {\r\n this.showingViewer = false;\r\n this.isLoaded = false;\r\n this.matterportService.clearAll();\r\n this.viewerIsOn.next({\r\n spaceID: null,\r\n model3D: null,\r\n sweep: null,\r\n rotation: null,\r\n });\r\n }\r\n }\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Getters\r\n -----------------------------------------------------------------------------------------------------------------*/\r\n\r\n getMode() {\r\n return this.viewerMode;\r\n }\r\n\r\n getViewerSelectedService() {\r\n // Matterport\r\n // if (this.checkMode(\"Matterport\")) {\r\n // return this.getMatterportService();\r\n // }\r\n return this.getMatterportService();\r\n }\r\n\r\n getTourUrl() {\r\n return this.tourUrl;\r\n }\r\n\r\n getMatterportService() {\r\n return this.matterportService;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Generic Main action functions\r\n -----------------------------------------------------------------------------------------------------------------*/\r\n setSweepToMove(sweep: string) {\r\n this.sweepToMove = sweep;\r\n }\r\n\r\n setRotationToMove(rotation: { x: number; y: number }) {\r\n this.rotationToMove = rotation;\r\n }\r\n\r\n async action_move_to_tag(elementId: string): Promise<boolean> {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n const result =\r\n this.matterportService.getTagFromElementId(elementId);\r\n if (result.tag) {\r\n await this.matterportService.goToTag(result.tag);\r\n return true;\r\n }\r\n if (result.sweep) {\r\n this.sweepToMove = result.sweep;\r\n }\r\n return false;\r\n }\r\n return false;\r\n }\r\n\r\n async action_load_all_tickets_from_database(\r\n tickets: Ticket[],\r\n ): Promise<any> {\r\n await Promise.all(\r\n tickets.map(async (ticket) => {\r\n const poi = await this.poiService.getPoiByElementId(ticket.id!);\r\n if (poi && poi.coordinate) {\r\n await this.actionAddObjectFromPOI(ticket, poi);\r\n }\r\n }),\r\n );\r\n }\r\n\r\n async action_load_all_equipments_from_database(equipments: Equipment[]) {\r\n // console.log(\"adding equips\", equipments);\r\n await Promise.all(\r\n equipments.map(async (equip) => {\r\n const poi = await this.poiService.getPoiByElementId(equip.id!);\r\n if (poi && poi.coordinate) {\r\n await this.actionAddObjectFromPOI(equip, poi);\r\n }\r\n }),\r\n );\r\n }\r\n\r\n async action_load_all_measurements_from_database(comments: Comment[]) {\r\n // console.log(\"adding measures\", comments);\r\n await Promise.all(\r\n comments.map(async (comment) => {\r\n const poi = await this.poiService.getPoiByElementId(comment.id!);\r\n if (poi && poi.coordinate) {\r\n this.actionAddObjectFromPOI(\r\n comment,\r\n poi,\r\n );\r\n }\r\n }),\r\n );\r\n }\r\n\r\n async action_load_all_features_from_database(features: Feature[]) {\r\n // console.log(\"adding features\", features);\r\n await Promise.all(\r\n features.map(async (feature) => {\r\n const poi = await this.poiService.getPoiByElementId(feature.id!);\r\n if (poi && poi.coordinate) {\r\n this.actionAddObjectFromPOI(feature, poi);\r\n }\r\n }),\r\n );\r\n }\r\n\r\n async actionAddObjectFromPOI(\r\n object: Ticket | Equipment | Comment | Feature,\r\n poi: POI\r\n ) {\r\n if (this.checkMode(\"Matterport\")) {\r\n return this.matterportService.action_add_mattertag_from_POI(\r\n poi.type!,\r\n object,\r\n poi,\r\n );\r\n }\r\n // Cupix\r\n // TODO\r\n return Promise.resolve();\r\n }\r\n\r\n\r\n async action_delete_element(\r\n element: DbObjectType,\r\n ) {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n await this.matterportService.action_delete_element(element);\r\n }\r\n }\r\n\r\n /**\r\n * Enable ticket placement menu to add a new ticket\r\n */\r\n async action_add_ticket() {\r\n this.action_toolbox_inside_view();\r\n\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n if (\r\n this.matterportService.getInteractionMode() ===\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n await this.matterportService.action_add_ticket();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n *\r\n */\r\n async action_position_ticket(ticket: DbObjectType) {\r\n // Matterport\r\n if (\r\n this.checkMode(\"Matterport\") &&\r\n this.matterportService.getInteractionMode() ===\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n await this.matterportService.action_position_element(\r\n PoiType.TICKET,\r\n ticket,\r\n );\r\n }\r\n // Cupix\r\n }\r\n\r\n /**\r\n * Position a feature with Matterport\r\n * @param feature The feature that will be positioned\r\n */\r\n async action_position_feature(feature: DbObjectType) {\r\n // Matterport\r\n if (\r\n this.checkMode(\"Matterport\") &&\r\n this.matterportService.getInteractionMode() ===\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n await this.matterportService.action_position_element(\r\n PoiType.DATA,\r\n feature,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Enable equipement placement menu to add a new equipment\r\n */\r\n async action_add_equip() {\r\n this.action_toolbox_inside_view();\r\n\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n if (\r\n this.matterportService.getInteractionMode() ===\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n await this.matterportService.action_add_equip();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n *\r\n */\r\n async action_position_equip(equipment: DbObjectType) {\r\n // Matterport\r\n if (\r\n this.checkMode(\"Matterport\") &&\r\n this.matterportService.getInteractionMode() ===\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n await this.matterportService.action_position_element(\r\n PoiType.EQUIPMENT,\r\n equipment,\r\n );\r\n }\r\n // Cupix\r\n }\r\n\r\n action_add_feature() {\r\n this.action_toolbox_inside_view();\r\n\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n if (\r\n this.matterportService.getInteractionMode() ===\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n this.matterportService.action_add_feature();\r\n }\r\n }\r\n }\r\n\r\n action_add_desk() {\r\n this.action_toolbox_inside_view();\r\n\r\n // Matterport\r\n if (\r\n this.checkMode(\"Matterport\") &&\r\n this.matterportService.getInteractionMode() ===\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n this.matterportService.action_add_desk();\r\n }\r\n }\r\n\r\n /**\r\n * Enable ticket placement menu to add a new ticket\r\n */\r\n action_canceled() {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_canceled();\r\n }\r\n }\r\n\r\n action_toolbox_inside_view() {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_toolbox_inside_view();\r\n }\r\n }\r\n\r\n action_toolbox_dollhouse() {\r\n if (\r\n this.matterportService.getInteractionMode() !==\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n this.action_canceled();\r\n }\r\n\r\n this.action_toolbox_cancel_mesure();\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_toolbox_dollhouse();\r\n }\r\n }\r\n\r\n action_toolbox_mesure() {\r\n if (\r\n this.matterportService.getInteractionMode() !==\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n this.action_canceled();\r\n }\r\n\r\n this.action_toolbox_inside_view();\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_toolbox_mesure();\r\n }\r\n }\r\n\r\n action_toolbox_cancel_mesure() {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_toolbox_cancel_mesure();\r\n }\r\n }\r\n\r\n async action_update_poi(\r\n poi: POI,\r\n isValid: boolean,\r\n element: DbObjectType,\r\n ): Promise<POI> {\r\n if (this.checkMode(\"Matterport\")) {\r\n if (isValid) {\r\n const lastTag = this.matterportService.mattertagToFollow\r\n ? this.matterportService.mattertagToFollow\r\n : this.matterportService.getLastTag();\r\n if (!lastTag) {\r\n return Promise.resolve(poi);\r\n }\r\n const tagData =\r\n this.matterportService.getTagDataFromId(lastTag);\r\n if (!tagData) {\r\n return Promise.resolve(poi);\r\n }\r\n \r\n const poiMetadata = poi.metadata\r\n ? JSON.parse(poi.metadata)\r\n : {};\r\n poiMetadata.normal = tagData.getNormal();\r\n const poiInput = {\r\n id: poi.id,\r\n coordinate: tagData.getCoordinateString(),\r\n matterportSweepID: tagData.getSweepID(),\r\n metadata: JSON.stringify(poiMetadata),\r\n };\r\n const updatedPoi: POI = await this.poiService.updatePoi(\r\n poiInput,\r\n );\r\n tagData.setPoi(updatedPoi);\r\n await this.matterportService.injectHtmlInTag(\r\n poi.type!,\r\n element,\r\n lastTag\r\n );\r\n await this.matterportService.editTagStyle(lastTag, tagData);\r\n this.matterportService.goToTag(lastTag);\r\n\r\n return Promise.resolve(updatedPoi);\r\n }\r\n this.matterportService.deleteLastMattertag();\r\n return Promise.resolve(poi);\r\n }\r\n return Promise.resolve(poi);\r\n }\r\n\r\n /**\r\n * Move an existing poi in Matterport\r\n * @param poi\r\n * @param element\r\n */\r\n async action_move_poi_visually(\r\n poi: POI,\r\n element: Ticket | Feature | Equipment | Comment,\r\n ) {\r\n await this.action_delete_element(element);\r\n await this.actionAddObjectFromPOI(element, poi);\r\n }\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Cupix\r\n -----------------------------------------------------------------------------------------------------------------*/\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Matterport\r\n https://matterport.github.io/showcase-sdk/docs/sdk/reference/current/modules/mattertag.html#add\r\n https://matterport.github.io/showcase-sdk/docs/sdk/reference/current/modules/mattertag.html#remove\r\n-----------------------------------------------------------------------------------------------------------------*/\r\n\r\n async initMatterportSdk(spaceID: string, model3D: string, tagService: BaseTagService, isMuseum: boolean = false): Promise<void> {\r\n this.isLoaded = false;\r\n this.matterportService.currentSpaceID = spaceID;\r\n return this.matterportService.initSdk(tagService, isMuseum).then(async (result) => {\r\n if (result) {\r\n const { sdk } = this.matterportService;\r\n sdk.App.state.subscribe(function (appState) {\r\n // app state has changed\r\n // console.log('The current phase: ', appState.phase);\r\n if (appState.phase === sdk.App.Phase.PLAYING) {\r\n // console.log('The app is playing');\r\n this.showingViewer = true;\r\n this.viewerIsOn.next({\r\n spaceID,\r\n model3D,\r\n sweep: this.sweepToMove,\r\n rotation: this.rotationToMove,\r\n });\r\n this.dataIsLoaded.next(true);\r\n this.isLoaded = true;\r\n this.sweepToMove = null;\r\n this.rotationToMove = null;\r\n }\r\n }.bind(this));\r\n return Promise.resolve();\r\n }\r\n return Promise.reject();\r\n });\r\n }\r\n\r\n removeForbiddenSweeps(forbiddenSweeps: string[]) {\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.removeForbiddenSweeps(forbiddenSweeps);\r\n }\r\n }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { ViewerService } from '../../services/viewer.service';\n\n@Component({\n selector: 'lib-modal-switch-visit',\n templateUrl: './modal-switch-visit.component.html',\n styleUrls: ['./modal-switch-visit.component.scss']\n})\nexport class ModalSwitchVisitComponent implements OnInit {\n @Input() content: string;\n @Input() model3D: string;\n @Input() spaceID: string;\n @Input() dataToMove: {sweepToMove:string, rotation:any};\n constructor(public activeModal: NgbActiveModal, private router: Router, private viewerService: ViewerService, \n // private objectSubService: ObjectSubscriptionService\n ) {}\n\n ngOnInit(): void {}\n\n switchVisit() {\n this.activeModal.close();\n if (this.dataToMove) {\n this.viewerService.setSweepToMove(this.dataToMove.sweepToMove);\n this.viewerService.setRotationToMove(this.dataToMove.rotation);\n }\n // this.objectSubService.forceRemove = true; // we reset the tags when changing visit\n this.router.navigate([\"visit\", this.spaceID], {\n queryParams: { model3D: this.model3D, sweep: true },\n });\n }\n\n}\n","<p>modal-switch-visit works!</p>\n","import { Storage } from \"aws-amplify\";\r\nimport { Equipment } from \"../types.service\";\r\n\r\nexport const deleteFromS3 = async (path) => {\r\n await Storage.remove(path, { level: \"public\" })\r\n .then((result) => console.log(\"Successfully deleted =>\", result))\r\n .catch((error) => console.log(\"Deleting from S3 error:\", error));\r\n};\r\n\r\nexport const uploadFileToS3 = async (\r\n path: string,\r\n file: File,\r\n objectId: string | null,\r\n): Promise<string> => {\r\n const prefix = objectId ? `${objectId.slice(0, 8)}_` : \"\";\r\n return Storage.put(path + prefix + file.name, file, {\r\n progressCallback(progress) {\r\n // console.log('Uploaded : ', progress);\r\n },\r\n contentType: file.type,\r\n })\r\n .then((result: any) => {\r\n console.log(\"Success =>\", result);\r\n return result.key;\r\n })\r\n .catch((error) => {\r\n console.log(\"error =>\", error);\r\n return null;\r\n });\r\n};\r\n\r\nexport const getSignedImageUrlForEquipment = async (\r\n equip: Equipment,\r\n): Promise<string | null> => {\r\n if (!equip.photo) {\r\n return Promise.resolve(null);\r\n }\r\n return Storage.get(equip.photo, { level: \"public\" })\r\n .then((result) => {\r\n return result as string;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n return null;\r\n });\r\n \r\n};\r\n\r\nexport const getSignedImageUrlForProfile = async (\r\n profile,\r\n): Promise<string | void> => {\r\n return Storage.get(profile.avatar, { level: \"public\" })\r\n .then((result) => {\r\n return result as string;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n });\r\n};\r\n\r\nexport const getSignedImageUrlForSpace = async (\r\n space,\r\n): Promise<string | void> => {\r\n return Storage.get(space.annexes, { level: \"public\" })\r\n .then((result) => {\r\n return result as string;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n });\r\n};\r\n\r\nexport const uploadBase64Image = async (\r\n uri: string,\r\n objectId: string | null,\r\n path: string,\r\n friendlyFileName: string,\r\n): Promise<string> => {\r\n return fetch(uri)\r\n .then((res) => res.blob())\r\n .then((blob) => {\r\n const file = new File([blob], `${friendlyFileName}.jpeg`, {\r\n type: \"image/jpeg\",\r\n });\r\n return uploadFileToS3(path, file, objectId);\r\n });\r\n};\r\n\r\nexport const removeAllFilesFromFolderS3 = async (\r\n folderPath: string,\r\n): Promise<any> => {\r\n const arrayOfPromises = [];\r\n Storage.list(folderPath, { level: \"public\" })\r\n .then((res) => {\r\n Object.keys(res).map(async (key) => {\r\n const file = res[key];\r\n arrayOfPromises.push(deleteFromS3(file.key));\r\n });\r\n })\r\n .catch((error) => console.error(\"List failure\", error));\r\n return Promise.all(arrayOfPromises);\r\n};\r\n\r\nexport const listFilesInFolder = async (folderPath: string): Promise<any> => {\r\n return Storage.list(folderPath, { level: \"public\" })\r\n .then((res) => {\r\n return res;\r\n })\r\n .catch((error) => console.error(\"List failure\", error));\r\n};\r\n\r\nexport const getSignedFile = async (path): Promise<string | null> => {\r\n return Storage.get(path, { level: \"public\" })\r\n .then((result) => {\r\n return result as string;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n return null;\r\n });\r\n\r\n};\r\n\r\nexport const downloadFileAsObject = async (path): Promise<Object | void> => {\r\n return Storage.get(path, { download: true, level: \"public\" })\r\n .then((result) => {\r\n return result as Object;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n });\r\n};\r\n\r\nexport const getBufferForFileFromS3 = async (path): Promise<ArrayBuffer> => {\r\n const object = await downloadFileAsObject(path);\r\n if (object) {\r\n // @ts-ignore\r\n return new ArrayBuffer(object.Body, \"binary\");\r\n }\r\n return null;\r\n};\r\n\r\nexport const uploadJsonToS3 = async (\r\n path: string,\r\n json: string,\r\n filename: string,\r\n): Promise<string> => {\r\n return Storage.put(path + filename, json, {\r\n contentType: \"application/json\",\r\n })\r\n .then((result: any) => {\r\n console.log(\"Success =>\", result);\r\n return result.key;\r\n })\r\n .catch((error) => {\r\n console.log(\"error =>\", error);\r\n return null;\r\n });\r\n};","import { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\nimport { ModalSwitchVisitComponent } from \"./components/modal-switch-visit/modal-switch-visit.component\";\r\nimport { downloadFileAsObject } from \"./services/s3.service\";\r\nimport { EquipmentDocument, LevelStatus, Locale, Mission, PoiType, RoleStatus } from \"./types.service\";\r\n\r\nexport function getDistanceBetweenTwoPoints(startPoint, endPoint) {\r\n const dx = endPoint.x - startPoint.x;\r\n const dy = endPoint.y - startPoint.y;\r\n const dz = endPoint.z - startPoint.z;\r\n const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);\r\n return Math.round(distance * 100) / 100;\r\n}\r\n\r\nexport function poiTypeToString(type: PoiType): string {\r\n switch (type) {\r\n case PoiType.EQUIPMENT:\r\n return \"equipment\";\r\n case PoiType.TICKET:\r\n return \"ticket\";\r\n case PoiType.DATA:\r\n return \"data\";\r\n case PoiType.DESK:\r\n return \"data\";\r\n case PoiType.INFORMATION:\r\n return \"information\";\r\n case PoiType.MEASURE:\r\n return \"measure\";\r\n case PoiType.PEOPLE:\r\n return \"people\";\r\n default:\r\n return \"ticket\";\r\n }\r\n}\r\n\r\nexport function wait(timeout: number): Promise<void> {\r\n return new Promise((resolve) => {\r\n timeout = timeout || 2000;\r\n setTimeout(() => {\r\n resolve();\r\n }, timeout);\r\n });\r\n}\r\n\r\nexport const waitUntil = (condition: () => boolean) => {\r\n return new Promise<void>((resolve, reject) => {\r\n const intervalId = setInterval(() => {\r\n if (condition()) {\r\n clearInterval(intervalId);\r\n resolve();\r\n }\r\n }, 30);\r\n });\r\n};\r\n\r\nexport function enumToArray(enumerable: any) {\r\n return Object.keys(enumerable)\r\n .filter((value) => isNaN(Number(value)) === true)\r\n .map((key) => enumerable[key]);\r\n}\r\n\r\nexport function getLevelsBelow(level: LevelStatus): LevelStatus[] {\r\n const all = [\r\n LevelStatus.MINIMUM,\r\n LevelStatus.LOW,\r\n LevelStatus.MEDIUM,\r\n LevelStatus.HIGH,\r\n LevelStatus.MAXIMUM,\r\n ];\r\n switch (level) {\r\n case LevelStatus.MAXIMUM:\r\n return all;\r\n case LevelStatus.HIGH:\r\n all.splice(4, 1);\r\n return all;\r\n case LevelStatus.MEDIUM:\r\n all.splice(3, 2);\r\n return all;\r\n case LevelStatus.LOW:\r\n return [LevelStatus.MINIMUM, LevelStatus.LOW];\r\n case LevelStatus.MINIMUM:\r\n return [LevelStatus.MINIMUM];\r\n default:\r\n return [LevelStatus.MINIMUM];\r\n }\r\n}\r\n\r\nexport function getHighestLevelForMissions(missions: Mission[]): LevelStatus {\r\n let latestVisibleLevels = [LevelStatus.MINIMUM];\r\n for (const m of missions) {\r\n const visibleLevels = getLevelsBelow(m.level);\r\n if (visibleLevels.length > latestVisibleLevels.length) {\r\n latestVisibleLevels = visibleLevels;\r\n }\r\n }\r\n switch (latestVisibleLevels.length) {\r\n case 1:\r\n return LevelStatus.MINIMUM;\r\n case 2:\r\n return LevelStatus.LOW;\r\n case 3:\r\n return LevelStatus.MEDIUM;\r\n case 4:\r\n return LevelStatus.HIGH;\r\n case 5:\r\n return LevelStatus.MAXIMUM;\r\n default:\r\n return LevelStatus.MINIMUM;\r\n }\r\n}\r\n\r\nexport function getHighestRoleForMissions(missions: Mission[]): RoleStatus {\r\n let highestRole = RoleStatus.VISITOR;\r\n for (const m of missions) {\r\n if (m.role === RoleStatus.ADMIN) {\r\n return RoleStatus.ADMIN;\r\n }\r\n if (highestRole === RoleStatus.OWNER) {\r\n continue;\r\n }\r\n if (m.role === RoleStatus.OWNER) {\r\n highestRole = RoleStatus.OWNER;\r\n }\r\n if (m.role === RoleStatus.MANAGER) {\r\n highestRole = RoleStatus.MANAGER;\r\n }\r\n if (\r\n m.role === RoleStatus.SERVICE &&\r\n highestRole !== RoleStatus.MANAGER\r\n ) {\r\n highestRole = RoleStatus.SERVICE;\r\n }\r\n if (\r\n m.role === RoleStatus.OCCUPANT &&\r\n highestRole === RoleStatus.VISITOR\r\n ) {\r\n highestRole = RoleStatus.OCCUPANT;\r\n }\r\n if (m.role === RoleStatus.GUIDE_MUSEUM) {\r\n highestRole = RoleStatus.GUIDE_MUSEUM;\r\n }\r\n if (m.role === RoleStatus.VISITOR_MUSEUM) {\r\n highestRole = RoleStatus.VISITOR_MUSEUM;\r\n }\r\n }\r\n return highestRole;\r\n}\r\n\r\nexport function getRolesBelowForManager(role: RoleStatus): RoleStatus[] {\r\n const all = [\r\n RoleStatus.VISITOR,\r\n RoleStatus.OCCUPANT,\r\n RoleStatus.SERVICE,\r\n RoleStatus.MANAGER,\r\n RoleStatus.OWNER,\r\n RoleStatus.ADMIN,\r\n ];\r\n const museum = [RoleStatus.VISITOR_MUSEUM, RoleStatus.GUIDE_MUSEUM];\r\n switch (role) {\r\n case RoleStatus.ADMIN:\r\n return [...all, ...museum];\r\n case RoleStatus.OWNER:\r\n all.splice(5, 1);\r\n return all;\r\n case RoleStatus.MANAGER:\r\n all.splice(4, 2);\r\n return all;\r\n case RoleStatus.GUIDE_MUSEUM:\r\n return museum;\r\n default:\r\n return all.splice(4, 2);\r\n }\r\n}\r\n\r\nexport function filterUniqueArrayByID(arrayOfObjects: any[]): any[] {\r\n return arrayOfObjects.filter(\r\n (v, index, a) => a.findIndex((t) => t.id === v.id) === index,\r\n );\r\n}\r\n\r\nexport function removeNullKeysFromObject(object: Object) {\r\n for (const key of Object.keys(object)) {\r\n if (object[key] === null) {\r\n delete object[key];\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Test if a date has expired\r\n * @param date\r\n * @returns true if the date has expired, false otherwise\r\n */\r\n export function dateHasExpired(\r\n date: string | Date | number | null | undefined,\r\n): boolean {\r\n if (date) {\r\n return new Date(date) <= new Date();\r\n }\r\n return false;\r\n}\r\n\r\nexport function stringLocaleToEnum(locale: string): Locale {\r\n switch (locale) {\r\n case \"en\":\r\n return Locale.EN;\r\n case \"fr\":\r\n return Locale.FR;\r\n default:\r\n return Locale.EN;\r\n }\r\n}\r\n\r\n\r\nexport function getMetaForImage(url): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n\r\n img.addEventListener(\"load\", () => {\r\n resolve(img);\r\n });\r\n img.addEventListener(\"error\", () => reject());\r\n img.src = url;\r\n });\r\n}\r\n\r\nexport function sortAlphabeticallyOnName(array: { name: string }[]): any[] {\r\n return array.sort((a, b) => a.name.localeCompare(b.name));\r\n}\r\n\r\nexport function validEmail(email: string) {\r\n const re =\r\n /^(([^\\s\"(),.:;<>@[\\\\\\]]+(\\.[^\\s\"(),.:;<>@[\\\\\\]]+)*)|(\".+\"))@((\\[(?:\\d{1,3}\\.){3}\\d{1,3}])|(([\\dA-Za-z\\-]+\\.)+[A-Za-z]{2,}))$/;\r\n return re.test(email);\r\n}\r\n\r\nexport function downloadBlob(blob, filename) {\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = filename || \"download\";\r\n const clickHandler = () => {\r\n setTimeout(() => {\r\n URL.revokeObjectURL(url);\r\n a.removeEventListener(\"click\", clickHandler);\r\n }, 150);\r\n };\r\n a.addEventListener(\"click\", clickHandler, false);\r\n a.click();\r\n return a;\r\n}\r\n\r\n/*\r\n Open modal if one has to switch virtual visit\r\n*/\r\nexport function openModalForVisitSwitch(\r\n modalService: NgbModal,\r\n model3D: string,\r\n spaceID: string,\r\n dataToMove: {sweepToMove:string, rotation:any} | null = null\r\n) {\r\n const modalReference = modalService.open(ModalSwitchVisitComponent);\r\n modalReference.componentInstance.content =\r\n \"This object belongs to another 3D visit. Are you sure you want to switch the visit?\";\r\n modalReference.componentInstance.model3D = model3D;\r\n modalReference.componentInstance.spaceID = spaceID;\r\n if (dataToMove) {\r\n modalReference.componentInstance.dataToMove = dataToMove;\r\n }\r\n \r\n}\r\n\r\n/**\r\n * Return a string of a given date time in local format.\r\n * The format is determined by the current language.\r\n */\r\n export function dateTimeToLocalString(\r\n date: number | string | Date,\r\n translate?: TranslateService,\r\n mode?,\r\n): string {\r\n let lang = \"en-EN\";\r\n if (translate) {\r\n /** Get current language */\r\n lang = translate.currentLang\r\n ? translate.currentLang\r\n : translate.defaultLang;\r\n /** Transforme '_fr' to 'fr' */\r\n if (lang) {\r\n lang = lang.slice(1);\r\n }\r\n \r\n }\r\n\r\n let options: {\r\n month?;\r\n year?;\r\n day?;\r\n hour?;\r\n minute?;\r\n second?;\r\n dateStyle?;\r\n timeStyle?;\r\n weekday?;\r\n timeZone?;\r\n timeZoneName?;\r\n };\r\n switch (mode) {\r\n case \"day_numeric\":\r\n options = { day: \"numeric\" };\r\n break;\r\n case \"day\":\r\n options = { weekday: \"long\" };\r\n break;\r\n case \"date\":\r\n options = { dateStyle: \"long\" };\r\n break;\r\n case \"short_date_time\":\r\n options = {\r\n year: \"2-digit\",\r\n month: \"2-digit\",\r\n day: \"2-digit\",\r\n hour: \"2-digit\",\r\n minute: \"2-digit\",\r\n };\r\n break;\r\n case \"time\":\r\n options = { hour: \"numeric\", minute: \"numeric\" };\r\n break;\r\n case \"day_time_zone\":\r\n options = {\r\n weekday: \"long\",\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n timeZoneName: \"shortOffset\",\r\n };\r\n break;\r\n default:\r\n options = {\r\n dateStyle: \"long\",\r\n timeStyle: \"short\",\r\n };\r\n }\r\n return new Date(date).toLocaleString(lang, options);\r\n}\r\n\r\n/**\r\n * Compares two string arrays\r\n * @param array1\r\n * @param array2\r\n * @returns\r\n */\r\n export function arraysContainSameElements(\r\n array1: string[],\r\n array2: string[],\r\n): boolean {\r\n return JSON.stringify(array1) === JSON.stringify(array2);\r\n}\r\n\r\n\r\nexport function getVisitUrl(currentUrl: string): string {\r\n const path = currentUrl.split(\"/\");\r\n path.splice(3, path.length - 2);\r\n return path.join(\"/\");\r\n}\r\n\r\n/**\r\n * Extract spaceID from url when in visit 3D\r\n */\r\n export function getSpaceIDFromUrl(url: string): string {\r\n const visitUrl = getVisitUrl(url);\r\n return visitUrl.split(\"/\")[2];\r\n}\r\n\r\n/**\r\n * Download related\r\n */\r\n import FileSaver from \"file-saver\";\r\n\r\n export function downloadFile(fileUrl: string, fileName: string) {\r\n FileSaver.saveAs(fileUrl + fileName, fileName);\r\n }\r\n \r\n export function openDocument(fileUrl: string, fileName: string, id: number) {\r\n window.open(`${fileUrl + fileName}#doc=${id}`, \"_blank\", \"\");\r\n }\r\n \r\n export const downloadEquipmentDocument = async (\r\n document_: EquipmentDocument,\r\n ): Promise<Object | void> => {\r\n const signedFile = await downloadFileAsObject(document_.url);\r\n if (signedFile) {\r\n // @ts-ignore\r\n downloadBlob(signedFile.Body, document_.filename);\r\n }\r\n };\r\n\r\n export async function checkElementById(selector) {\r\n let querySelector = null;\r\n while (querySelector === null) {\r\n await rafAsync();\r\n querySelector = document.getElementById(selector);\r\n }\r\n return querySelector;\r\n}\r\n\r\nfunction rafAsync() {\r\n return new Promise((resolve) => {\r\n requestAnimationFrame(resolve); // faster than set time out\r\n });\r\n}\r\n\r\n/* @param {Array} numbers An array of numbers.\r\n * @return {Number} The calculated average (or mean) value from the specified\r\n * numbers.\r\n */\r\nexport function mean(numbers: number[]) {\r\n let total = 0;\r\n for (const number of numbers) {\r\n total += number;\r\n }\r\n return total / numbers.length;\r\n}\r\n\r\nexport function convertTimestampToLocalZone(timestamp: number): number {\r\n const selectedDate = new Date(timestamp);\r\n const localOffset = -1 * selectedDate.getTimezoneOffset() * 60000;\r\n const stamp = timestamp + localOffset;\r\n return stamp;\r\n}\r\n\r\n/**\r\n * Return string for period of time. Parameters are DateTime objects of luxon library.\r\n */\r\n export function translateDatePeriod(\r\n translateService: any,\r\n dateStartPeriod: any,\r\n dateEndPeriod: any,\r\n): string {\r\n const locale = getLocaleLong(translateService);\r\n return `${dateStartPeriod.toLocaleString({\r\n locale,\r\n month: \"long\",\r\n day: \"2-digit\",\r\n })} - ${dateEndPeriod.toLocaleString({\r\n locale,\r\n month: \"long\",\r\n day: \"2-digit\",\r\n })} `;\r\n}\r\n\r\n\r\n/**\r\n* Return local in the canonical form: \"en-GB\", \"fr-FR\"\r\n*/\r\nexport function getLocaleLong(translate: TranslateService): string {\r\n let lang = translate.currentLang\r\n ? translate.currentLang\r\n : translate.defaultLang;\r\n\r\n /** Transform '_fr' to 'fr' */\r\n lang = lang.slice(1);\r\n if (lang === \"en\") {\r\n return \"en-GB\";\r\n }\r\n return `${lang}-${lang.toUpperCase()}`;\r\n}\r\n\r\n/**\r\n * Return local in the short form: \"en\", \"fr\"\r\n */\r\n export function getLocaleShort(translate: TranslateService): string {\r\n let lang = translate.currentLang\r\n ? translate.currentLang\r\n : translate.defaultLang;\r\n\r\n /** Transform '_fr' to 'fr' */\r\n lang = lang.slice(1);\r\n return lang;\r\n}\r\n\r\n/**\r\n * Format string to lowercase, no spaces\r\n */\r\n export function stringToLowercaseNoSpaces(input: string): string {\r\n const words = input.toLowerCase().split(/\\s+/);\r\n return words.join(\"\");\r\n}\r\n\r\n/**\r\n * Test if the object === {}\r\n * @param obj object {key:value}\r\n * @returns boolean\r\n */\r\n export function isEmptyObject(object): boolean {\r\n for (const x in object) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function shuffleArray(array: any[]) {\r\n const newArray = [...array];\r\n for (let index = array.length - 1; index > 0; index--) {\r\n const indexNew = Math.floor(Math.random() * (index + 1));\r\n // eslint-disable-next-line no-param-reassign\r\n [newArray[index], newArray[indexNew]] = [\r\n newArray[indexNew],\r\n newArray[index],\r\n ];\r\n }\r\n return newArray;\r\n}\r\n\r\nexport function numberToDateString(timestamp: number): string {\r\n const jsDate = new Date(timestamp);\r\n return jsDate.toLocaleString(\"fr-FR\");\r\n}\r\n\r\nexport function durationToString(\r\n duration: number,\r\n translate: TranslateService,\r\n): string {\r\n const days = Math.floor(duration / 3600 / 24);\r\n const hours = Math.floor((duration - days * 24 * 3600) / 3600);\r\n const minutes = Math.floor((duration % 3600) / 60);\r\n const seconds = Math.floor(duration % 60);\r\n\r\n const daysString = translate.instant(\"day(s)\");\r\n const hoursString = translate.instant(\"hour(s)\");\r\n const oneHourString = translate.instant(\"hour\");\r\n const minutesString = translate.instant(\"minute(s)\");\r\n const secondsString = translate.instant(\"second(s)\");\r\n\r\n if (duration > 3600 * 24 * 7) {\r\n return `${days} ${daysString}`;\r\n }\r\n if (duration > 3600 * 24) {\r\n return `${days} ${daysString} ${hours} ${hoursString}`;\r\n }\r\n if (duration === 3600) {\r\n return `${hours} ${oneHourString}`;\r\n }\r\n if (duration > 3600) {\r\n if (minutes === 0) {\r\n return `${hours} ${hoursString}`;\r\n }\r\n return `${hours} ${hoursString} ${minutes} ${minutesString}`;\r\n }\r\n if (duration >= 60) {\r\n if (seconds === 0) {\r\n return `${minutes} ${minutesString}`;\r\n }\r\n return `${minutes} ${minutesString} ${seconds} ${secondsString}`;\r\n }\r\n return `${seconds} ${secondsString}`;\r\n}\r\n","import { Inject } from \"@angular/core\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { AWSType, Profile } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ProfileService {\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async createProfile(profile: Profile): Promise<Profile> {\r\n return this.API.__proto__.CreateProfile(profile);\r\n }\r\n\r\n async getProfile(id: string): Promise<Profile> {\r\n return this.API.__proto__.GetProfile(id);\r\n }\r\n\r\n async updateProfile(profile: any): Promise<Profile> {\r\n if (profile.id === undefined) {\r\n console.log(`an ID is required for update Profile`);\r\n return null;\r\n }\r\n return this.API.__proto__.UpdateProfile(profile);\r\n }\r\n\r\n async deleteProfile(id: string): Promise<Profile> {\t\r\n return this.API.__proto__.DeleteProfile({id:id});\r\n }\r\n\r\n async getProfileFromAWSID(userID: string): Promise<Profile> {\r\n return this.API.__proto__.ProfilesByUserID(userID).then((results) => {\r\n if (results.items.length === 0) {\r\n return null;\r\n }\r\n return results.items[0];\r\n });\r\n }\r\n\r\n async getUsersForMail(mail: string): Promise<Profile[]> {\r\n return this.API.__proto__.ListProfiles({ metadata: { contains: mail } }).then(\r\n (results) => {\r\n return results.items.filter((profile) => !profile.deletedAt);\r\n },\r\n );\r\n }\r\n\r\n async getProfilesForStatus(status: string): Promise<Profile[]> {\r\n return (\r\n await this.API.__proto__.ListProfiles({\r\n status: { eq: status },\r\n })\r\n ).items;\r\n }\r\n}","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { dateHasExpired } from \"../../helpers.service\";\r\nimport { Mission, Organisation, Profile, ProfileStatus, RoleStatus } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class MissionService {\r\n currentMissionsUpdated = new Subject<boolean>();\r\n\r\n lastExpiredMission: Mission;\r\n\r\n nextMissionToStart: Mission;\r\n\r\n currentUserID: string;\r\n\r\n API: any; //AWS\r\n\r\n constructor(\r\n // private affectationService: AffectationService,\r\n @Inject('currentAPIService') apiInjected: any\r\n ) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getMissionsFromUserID(userID: string): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsByUser(userID).then((missions) => {\r\n return missions.items.filter((mis) => !mis.deletedAt);\r\n });\r\n }\r\n\r\n async getMissionsByOrderedOrganisation(\r\n orderedOrgID: string,\r\n ): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsByOrderedOrganisation(orderedOrgID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n\r\n async getMissionsByOrganisation(orgID: string): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsByOrganisation(orgID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n\r\n async create(mission: Mission): Promise<Mission> {\r\n const updMission = await this.API.__proto__.CreateMission(mission);\r\n console.log(\"Mission created\", updMission);\r\n await this.checkIfCurrentUserMissionChanged(updMission);\r\n return updMission;\r\n }\r\n\r\n async update(mission: any): Promise<Mission> {\r\n const updMission = await this.API.__proto__.UpdateMission(mission);\r\n console.log(\"Mission updated\", updMission);\r\n await this.checkIfCurrentUserMissionChanged(updMission);\r\n return updMission;\r\n }\r\n\r\n async assertRoleForUserInOrg(\r\n user: Profile,\r\n org: Organisation,\r\n role: RoleStatus,\r\n ): Promise<boolean> {\r\n return this.getMissionsFromUserID(user.id).then((missions) => {\r\n if (missions) {\r\n const misOrg = missions.filter((mis) => {\r\n return mis.organisationID === org.id && mis.role === role;\r\n });\r\n return misOrg.length > 0;\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n async getMissionsByOrderedOrganisationBySpace(\r\n ordOrgID: string,\r\n spaceID: string,\r\n ): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsByOrderedOrganisationBySpace(ordOrgID, {\r\n eq: spaceID,\r\n }).then((mis) => mis.items);\r\n }\r\n\r\n async softDeleteMission(missionID: string): Promise<Mission> {\r\n // const hardDelete = await this.canHardDeteleMission(mission.id);\r\n // if (hardDelete) {\r\n // return this.hardDeleteMission(mission.id);\r\n // }\r\n console.log(\"Soft Deleting mission\");\r\n const missionUpd = await this.update({\r\n id: missionID,\r\n deletedAt: Date.now(),\r\n });\r\n await this.checkIfCurrentUserMissionChanged(missionUpd);\r\n return missionUpd;\r\n }\r\n\r\n async list(): Promise<Mission[]> {\r\n const mis = await this.API.__proto__.ListMissions();\r\n return mis.items.filter((m) => !m.deletedAt);\r\n }\r\n\r\n // async canHardDeteleMission(missionID: string): Promise<boolean> {\r\n // const events = (\r\n // await this.API.ListEvents({ ownerID: { eq: missionID } })\r\n // ).items;\r\n // if (events.length > 0) {\r\n // return false;\r\n // }\r\n // const comments = (\r\n // await this.API.ListComments({ ownerID: { eq: missionID } })\r\n // ).items;\r\n // if (comments.length > 0) {\r\n // return false;\r\n // }\r\n // const affectations =\r\n // await this.affectationService.getAffectationsFromMissionID(\r\n // missionID,\r\n // );\r\n // if (affectations.length > 0) {\r\n // return false;\r\n // }\r\n // return true;\r\n // }\r\n\r\n async hardDeleteMission(missionID: string): Promise<Mission> {\r\n return this.API.__proto__.DeleteMission({ id: missionID });\r\n }\r\n\r\n getActivatedMissions(missions: Mission[]): Mission[] {\r\n const activated = [];\r\n missions.map(async (mission) => {\r\n const isActivated =\r\n mission.groups && mission.groups.includes(ProfileStatus.ACTIVE);\r\n if (isActivated) {\r\n activated.push(mission);\r\n }\r\n });\r\n return activated;\r\n }\r\n\r\n async getMissionsForZone(zoneID: string): Promise<Mission[]> {\r\n return (await this.API.__proto__.MissionsByZone(zoneID)).items.filter(\r\n (mis) => !mis.deletedAt,\r\n );\r\n }\r\n\r\n async getMissionsForSpace(spaceID: string): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsBySpace(spaceID).then((missions) => missions.items)\r\n }\r\n\r\n activateMission(mis: Mission) {\r\n if (\r\n mis &&\r\n (!mis.groups || !mis.groups.includes(ProfileStatus.ACTIVE))\r\n ) {\r\n const groups = mis.groups ? mis.groups : [];\r\n groups.push(ProfileStatus.ACTIVE);\r\n this.update({ id: mis.id, groups });\r\n }\r\n }\r\n\r\n async getMissionsByTemplate(templateID: string): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsByTemplate(templateID).then((missions) => missions.items);\r\n }\r\n\r\n async getMission(missionID: string): Promise<Mission> {\r\n return this.API.__proto__.GetMission(missionID);\r\n }\r\n\r\n async getMissionsByZoneByRole(\r\n zoneID: string,\r\n role: RoleStatus,\r\n ): Promise<Mission[]> {\r\n return (\r\n await this.API.__proto__.MissionsByZoneByRole(\r\n zoneID,\r\n { eq: role },\r\n null,\r\n {deletedAt: {attributeExists: false}},\r\n 200,\r\n )\r\n ).items;\r\n }\r\n\r\n async checkIfCurrentUserMissionChanged(changedMission: Mission) {\r\n if (this.currentUserID === changedMission.userID) {\r\n this.currentMissionsUpdated.next(true);\r\n }\r\n }\r\n\r\n async instantMissionsOfCurrent(\r\n currentUserID: string,\r\n ): Promise<Mission[] | null> {\r\n this.currentUserID = currentUserID;\r\n let missions = await this.getMissionsFromUserID(currentUserID);\r\n \r\n /** Filter to keep only available missions */\r\n missions = missions.filter((mission) => {\r\n const hasExpired = dateHasExpired(mission.endDateTime);\r\n\r\n /** Update this.lastExpiredMission */\r\n if (hasExpired) {\r\n const lastExpiredDate = this.lastExpiredMission\r\n ? new Date(this.lastExpiredMission.endDateTime)\r\n : null;\r\n const dateExpired = new Date(mission.endDateTime);\r\n if (!lastExpiredDate || dateExpired > lastExpiredDate) {\r\n this.lastExpiredMission = mission;\r\n }\r\n }\r\n return !hasExpired;\r\n });\r\n\r\n if (missions.some((mis)=>mis.role === RoleStatus.VISITOR_MUSEUM) && missions.length > 0) {\r\n // workflow for VISITOR_MUSEUM\r\n return missions;\r\n }\r\n /** Keep only started missions */\r\n let nextMissionDate = null;\r\n missions = missions.filter((mission) => {\r\n const started = mission.startDateTime\r\n ? dateHasExpired(mission.startDateTime)\r\n : true;\r\n /** Update next mission to start */\r\n if (!started) {\r\n const missionDate = new Date(mission.startDateTime);\r\n if (!nextMissionDate || missionDate < nextMissionDate) {\r\n this.nextMissionToStart = mission;\r\n nextMissionDate = missionDate;\r\n }\r\n }\r\n return started;\r\n });\r\n return missions.length > 0 ? missions : null;\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Property } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class PropertyService{\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async createProperty(property: Property): Promise<Property> {\r\n return this.API.__proto__.CreateProperty(property);\r\n }\r\n\r\n async deleteProperty(propertyID: string): Promise<Property> {\r\n return this.API.__proto__.DeleteProperty({id: propertyID});\r\n }\r\n \r\n async getPropertiesForOrganisation(orgID: string): Promise<Property[]> {\r\n return this.API.__proto__.PropertiesByOrganisation(orgID).then(\r\n (props) => props.items,\r\n );\r\n }\r\n\r\n async listProperties(): Promise<Property[]> {\r\n return this.API.__proto__.ListPropertys().then((props) => props.items);\r\n }\r\n\r\n async listPropertiesForSpace(spaceID: string): Promise<Property[]> {\r\n return this.API.__proto__.ListPropertys({ spaceID: { eq: spaceID } }).then((props) => props.items);\r\n }\r\n}","import { Injectable, NgZone } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { Router } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\nimport { LevelStatus, Mission, Organisation, Profile, ProfileEntity, ProfileStatus, PropertyType, RoleStatus } from \"../types.service\";\r\nimport { enumToArray, filterUniqueArrayByID, getHighestLevelForMissions, getHighestRoleForMissions, getLevelsBelow, getRolesBelowForManager } from \"../helpers.service\";\r\nimport { ProfileService } from \"./models/profile.service\";\r\nimport { MissionService } from \"./models/mission.service\";\r\nimport { PropertyService } from \"./models/property.service\";\r\nimport { DateTime } from \"luxon\";\r\nimport { Auth } from \"aws-amplify\";\r\n\r\ninterface CreateUser {\r\n email: string;\r\n phone: string;\r\n lastName: string;\r\n firstName: string;\r\n password?: string;\r\n}\r\n\r\n/**\r\n * UserService handles user's lifecycle, from creation to deletion\r\n */\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseUserService {\r\n\r\n isChanged: Subject<boolean> = new Subject<boolean>();\r\n\r\n updating = false;\r\n\r\n managers = [\r\n RoleStatus.ADMIN,\r\n RoleStatus.MANAGER,\r\n RoleStatus.OWNER,\r\n RoleStatus.GUIDE_MUSEUM,\r\n ];\r\n\r\n currentMissions: Mission[];\r\n\r\n lastExpiredMission: Mission;\r\n\r\n nextMissionToStart: Mission;\r\n\r\n cu: ProfileEntity = null;\r\n\r\n constructor(\r\n private profileService: ProfileService,\r\n private missionService: MissionService,\r\n private propertyService: PropertyService,\r\n private router: Router,\r\n private location: Location,\r\n private ngZone: NgZone,\r\n private translate: TranslateService,\r\n ) {\r\n // this.checkConnectedAWSUser();\r\n this.missionService.currentMissionsUpdated.subscribe(async (data) => {\r\n console.log(\"current missions updated\");\r\n this.currentMissions =\r\n await this.missionService.instantMissionsOfCurrent(this.cu.id);\r\n console.log(\"user is changed emitting\");\r\n this.isChanged.next(true);\r\n });\r\n }\r\n\r\n /**\r\n * Checks if AWS user is connected and assigng it to current user (this.cu)\r\n **/\r\n async checkConnectedAWSUser() {\r\n if (!this.cu) {\r\n console.log(\"first connection\");\r\n let cau = null;\r\n let user = null;\r\n try {\r\n cau = await Auth.currentAuthenticatedUser();\r\n user = await this.current(cau);\r\n console.log(user)\r\n } catch {}\r\n if (!user) {\r\n console.log(\"here\")\r\n this.router.navigate([\"auth\"]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * createUser spawns a new User, along with:\r\n * - a proper AWSCognito signup\r\n * - a Profile entry holding the AWSCognito ID\r\n * - a Mission entry holding the Organisation ID\r\n *\r\n * @see 174\r\n * @see https://docs.amplify.aws/lib/auth/emailpassword/q/platform/js#sign-up\r\n * @todo wonder if we can mash together Profile, Mission and User entries\r\n * @param u User to be created\r\n */\r\n async createUserAWSandProfile(\r\n u: {\r\n email: string;\r\n phone: string;\r\n lastName: string;\r\n firstName: string;\r\n password?: string;\r\n },\r\n prevalidated: boolean = false,\r\n ): Promise<Profile> {\r\n const attributes = {\r\n email: u.email.trim(),\r\n given_name: u.firstName,\r\n family_name: u.lastName,\r\n zoneinfo: \"fr\", // @todo deal with zoneinfo and locale\r\n locale: \"fr\",\r\n \"custom:prevalidated\": \"false\",\r\n };\r\n if (prevalidated) {\r\n attributes[\"custom:prevalidated\"] = \"true\";\r\n }\r\n // AWSCognito\r\n const password = u.password ? u.password : \"temporaryp\";\r\n let error;\r\n try {\r\n const { userSub } = await Auth.signUp({\r\n username: u.email, // username should be an email they say\r\n password,\r\n attributes,\r\n clientMetadata: {\r\n phone: u.phone,\r\n },\r\n });\r\n if (userSub) {\r\n return this.createProfile(userSub, u);\r\n }\r\n } catch (error_: any) {\r\n switch (error_.code) {\r\n case \"InvalidPasswordException\":\r\n error = \"auth.error.wrong_password\";\r\n break;\r\n case \"UserNotConfirmedException\":\r\n error = \"auth.error.user_not_confirmed\";\r\n break;\r\n case \"InvalidParameterException\":\r\n error = \"auth.error.invalid_parameter\";\r\n break;\r\n default:\r\n error = error_.message;\r\n }\r\n console.log(`AWS Sign UP error : ${error}`);\r\n }\r\n return Promise.reject(error);\r\n }\r\n \r\n async createProfile(\r\n awsUserID: string,\r\n u: CreateUser,\r\n ): Promise<Profile> {\r\n const profile = await this.profileService.createProfile({\r\n userID: awsUserID,\r\n metadata: JSON.stringify({\r\n email: u.email,\r\n phone: u.phone,\r\n lastName: u.lastName,\r\n firstName: u.firstName,\r\n }),\r\n status: ProfileStatus.WAITING_FOR_ACTIVATION,\r\n });\r\n return profile;\r\n }\r\n\r\n currentOrganisation(spaceID: string = null): Organisation {\r\n if (this.cu) {\r\n if (!spaceID) {\r\n return this.currentMissions[0].organisation;\r\n }\r\n return this.currentMission(spaceID).organisation;\r\n }\r\n return null;\r\n }\r\n\r\n async current(\r\n user,\r\n fastConnect: boolean = false,\r\n ): Promise<ProfileEntity | null> {\r\n if (!this.cu && !this.updating) {\r\n this.updating = true;\r\n this.cu = await this.userFromAWSID(user.username);\r\n if (!this.cu && user.attributes.email) {\r\n console.log(\r\n `No profile for userID 🔪 ${user.attributes.email}`,\r\n );\r\n // There's no profiles, profiles.items.length === 0\r\n // It's maybe the 🤮 case where the profile has been saved with an email\r\n // instead of an hashed id\r\n // If found, we need to replace the id in both the Profile\r\n const emailProfile = await this.userFromAWSID(\r\n user.attributes.email,\r\n );\r\n if (emailProfile) {\r\n console.log(\r\n `👏 doing the spacehip reversal email on ${user.attributes.email}`,\r\n );\r\n this.cu = await this.userFromAWSID(user.username);\r\n }\r\n }\r\n if (!this.cu) {\r\n this.updating = false;\r\n await Auth.signOut();\r\n return null;\r\n }\r\n const missions = await this.missionService.instantMissionsOfCurrent(\r\n this.cu.id\r\n );\r\n this.currentMissions = missions;\r\n let okToLogin = true;\r\n if (!fastConnect && !this.isSPAdmin()) {\r\n // check access token if not Fast connect (fast connect is for the guest connection via link(/redirect?user=))\r\n // and not SmarterPlan Admin\r\n okToLogin = await this.checkAccessToken(\r\n user.signInUserSession.accessToken.jwtToken,\r\n );\r\n }\r\n if (!okToLogin) {\r\n this.cu = null;\r\n this.currentMissions = [];\r\n this.updating = false;\r\n await Auth.signOut();\r\n return null;\r\n }\r\n await this.profileService.updateProfile({\r\n id: this.cu.id,\r\n lastConnectedAt: Date.now(),\r\n });\r\n if (!missions && this.location.path() !== \"/no-mission\") {\r\n this.ngZone.run(() => {\r\n this.router.navigate([\"/no-mission\"]);\r\n });\r\n }\r\n console.log(\"user is changed emitting\");\r\n this.isChanged.next(true);\r\n this.updating = false;\r\n }\r\n return this.cu;\r\n }\r\n\r\n async userFromAWSID(userId: string): Promise<ProfileEntity | null> {\r\n const profile = await this.profileService.getProfileFromAWSID(userId);\r\n if (profile) {\r\n return new ProfileEntity(profile);\r\n }\r\n return null;\r\n }\r\n\r\n async userFromUserID(userID: string): Promise<ProfileEntity | null> {\r\n const profile = await this.profileService.getProfile(userID);\r\n return new ProfileEntity(profile);\r\n }\r\n\r\n currentMission(spaceID: string): Mission {\r\n const mission = this.getMissionForSpace(spaceID);\r\n return mission;\r\n }\r\n\r\n isManager(spaceID: string): boolean {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return this.managers.includes(mission.role);\r\n }\r\n return false;\r\n }\r\n\r\n isService(spaceID: string): boolean {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.SERVICE;\r\n }\r\n return false;\r\n }\r\n\r\n isAdmin(spaceID: string): boolean {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.ADMIN;\r\n }\r\n return false;\r\n }\r\n\r\n isSmarterPlan(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n const spMissions = this.currentMissions.filter(\r\n (m) =>\r\n m.organisationID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" &&\r\n this.managers.includes(m.role),\r\n ); // ID of SmarterPlan\r\n return spMissions.length > 0;\r\n }\r\n\r\n isSPAdmin(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n const spMissions = this.currentMissions.filter(\r\n (m) =>\r\n m.organisationID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" &&\r\n m.role === RoleStatus.ADMIN,\r\n ); // ID of SmarterPlan\r\n return spMissions.length > 0;\r\n }\r\n\r\n getMissionForSpace(spaceID: string): Mission {\r\n if (!this.currentMissions) {\r\n return null;\r\n }\r\n return this.currentMissions.find((m) => m.spaceID === spaceID);\r\n }\r\n\r\n hasManagerRoleInAnyMission(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n return this.currentMissions.some((mis) =>\r\n this.managers.includes(mis.role),\r\n );\r\n }\r\n\r\n hasServiceRoleInAnyMission(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n return this.currentMissions.some(\r\n (mis) => mis.role === RoleStatus.SERVICE,\r\n );\r\n }\r\n\r\n hasAdminRoleInAnyMission(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n return this.currentMissions.some(\r\n (mis) => mis.role === RoleStatus.ADMIN,\r\n );\r\n }\r\n\r\n async createOrUpdateMissionForOrgWithProperty(\r\n missionInput: Mission,\r\n orgID: string,\r\n create: boolean = true,\r\n ): Promise<Mission> {\r\n const mission = await (create\r\n ? this.missionService.create(missionInput)\r\n : this.missionService.update(missionInput));\r\n\r\n if (this.managers.includes(mission.role) && mission.spaceID) {\r\n const properties =\r\n await this.propertyService.getPropertiesForOrganisation(orgID);\r\n const propertySpaceIDs = properties.map(\r\n (property_) => property_.spaceID,\r\n );\r\n if (propertySpaceIDs.includes(mission.spaceID)) {\r\n return mission;\r\n }\r\n // we delegate the rights of the space\r\n await this.propertyService.createProperty({\r\n spaceID: mission.spaceID,\r\n organisationID: orgID,\r\n type: PropertyType.SHARED,\r\n });\r\n }\r\n return mission;\r\n }\r\n\r\n async softDeleteUser(userID: string) {\r\n const missions = await this.missionService.getMissionsFromUserID(userID);\r\n if (missions.length === 0) {\r\n await this.profileService.updateProfile({ id: userID, deletedAt: Date.now() });\r\n console.log(\"Profile soft deleted\");\r\n }\r\n }\r\n /**\r\n * Checks if the Profile (by id) can be removed completely from the DB (no missions in the DB)\r\n * @param profileID\r\n * @returns boolean\r\n */\r\n async canHardDeleteUser(profileID: string): Promise<boolean> {\r\n const missions = (await this.missionService.getMissionsFromUserID(profileID));\r\n return missions.length === 0;\r\n }\r\n\r\n async hardDeleteUser(userID: string) {\r\n const deleted = await this.profileService.deleteProfile(userID);\r\n console.log(\"Profile hard deleted\");\r\n return deleted;\r\n }\r\n\r\n getManagerMissions(): Mission[] {\r\n if (!this.currentMissions) {\r\n return [];\r\n }\r\n return this.currentMissions.filter((mis) =>\r\n this.managers.includes(mis.role),\r\n );\r\n }\r\n\r\n getAvalableLevelsForCurrentUser(): LevelStatus[] {\r\n if (!this.currentMissions) {\r\n return [LevelStatus.MINIMUM];\r\n }\r\n const levels = enumToArray(LevelStatus);\r\n const highestLevel = getHighestLevelForMissions(this.currentMissions);\r\n\r\n return levels.filter((level) =>\r\n getLevelsBelow(highestLevel).includes(level),\r\n );\r\n }\r\n\r\n getAvailableRolesForCurrentUser(): RoleStatus[] {\r\n if (!this.currentMissions) {\r\n return [RoleStatus.VISITOR];\r\n }\r\n const roles = enumToArray(RoleStatus);\r\n const highestRole = getHighestRoleForMissions(this.currentMissions);\r\n return roles.filter((role) =>\r\n getRolesBelowForManager(highestRole).includes(role),\r\n );\r\n }\r\n\r\n /** Test if the user have the role given in parameter : \"roleStatus\" */\r\n isRole(roleStatus: RoleStatus): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n return this.currentMissions.some((m) => m.role === roleStatus);\r\n }\r\n\r\n isGuide(spaceID: string = null): boolean {\r\n if (spaceID) {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.GUIDE_MUSEUM;\r\n }\r\n }\r\n return this.isRole(RoleStatus.GUIDE_MUSEUM);\r\n }\r\n\r\n isMuseumVisitor(spaceID: string = null): boolean {\r\n if (spaceID) {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.VISITOR_MUSEUM;\r\n }\r\n }\r\n return this.isRole(RoleStatus.VISITOR_MUSEUM);\r\n }\r\n\r\n isOccupant(): boolean {\r\n return this.isRole(RoleStatus.OCCUPANT);\r\n }\r\n\r\n isVisitor(spaceID: string = null): boolean {\r\n if (spaceID) {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.VISITOR;\r\n }\r\n }\r\n return this.isRole(RoleStatus.VISITOR);\r\n }\r\n\r\n isMuseumUser(spaceID: string = null): boolean {\r\n return this.isGuide(spaceID) || this.isMuseumVisitor(spaceID);\r\n }\r\n\r\n hasOnlyMuseumRole(): boolean {\r\n if (this.currentMissions) {\r\n return this.currentMissions.every(\r\n (m) =>\r\n m.role === RoleStatus.GUIDE_MUSEUM ||\r\n m.role === RoleStatus.VISITOR_MUSEUM,\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n async profileForMail(mail: string): Promise<Profile> {\r\n const usersWithMail = await this.profileService.getUsersForMail(mail);\r\n return usersWithMail.length > 0 ? usersWithMail[0] : null;\r\n }\r\n\r\n currentOrderedOrgList(): Organisation[] {\r\n if (!this.currentMissions) {\r\n return [];\r\n }\r\n const orderedOrgList = this.currentMissions.map(\r\n (mis) => mis.orderedOrganisation,\r\n );\r\n return filterUniqueArrayByID(orderedOrgList);\r\n }\r\n\r\n userHasAccessToAllZonesInSpace(spaceID: string): boolean {\r\n const missionsForSpace = this.currentMissions.filter(\r\n (mis) => mis.spaceID === spaceID,\r\n );\r\n return missionsForSpace.some(\r\n (mission) =>\r\n !mission.zoneID || (mission.zone && !mission.zone.parentID),\r\n );\r\n }\r\n\r\n async logoutCurrentAndSignOutAuth() {\r\n await this.profileService.updateProfile({\r\n id: this.cu.id,\r\n token: null,\r\n });\r\n this.cu = null;\r\n this.currentMissions = null;\r\n this.isChanged.next(false)\r\n await Auth.signOut();\r\n }\r\n\r\n async checkAccessToken(jwtToken: string): Promise<boolean> {\r\n const now = DateTime.local();\r\n // console.log(\"now\", now);\r\n // console.log(\"in one hour\", now.plus({ hours: 1 }).toMillis());\r\n if (this.cu.token && this.cu.tokenExpiredAt > now.toMillis()) {\r\n // check token\r\n if (this.cu.token === jwtToken) {\r\n console.log(\"same aws token\");\r\n return true;\r\n }\r\n alert(this.translate.instant(\"auth.error.activeToken\"));\r\n return false;\r\n }\r\n await this.profileService.updateProfile({\r\n id: this.cu.id,\r\n tokenExpiredAt: now.plus({ hours: 1 }).toMillis(),\r\n token: jwtToken,\r\n status: ProfileStatus.ACTIVE,\r\n });\r\n return true;\r\n }\r\n\r\n async clearUserToken(id) {\r\n await this.profileService.updateProfile({\r\n id: id,\r\n token: null,\r\n });\r\n }\r\n\r\n updateCurrentUser(profile: Profile) {\r\n this.cu = new ProfileEntity(profile);\r\n this.isChanged.next(true);\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { DbObjectType, Zone } from \"../../types.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ZoneService {\r\n API: any; //AWS APIService\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any, private userService: BaseUserService) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getZonesBySpace(spaceID: string): Promise<Array<Zone>> {\r\n const list: Zone[] = [];\r\n if (this.API.__proto__.hasOwnProperty('ZonesBySpace')) {\r\n const zones = await this.API.__proto__.ZonesBySpace(spaceID);\r\n if (zones) {\r\n for (const zone of zones.items) {\r\n const zoneObject = { ...zone } as Zone;\r\n zoneObject.virtual = this.zoneIsVirtual(zone);\r\n list.push(zoneObject);\r\n }\r\n }\r\n return list;\r\n } else {\r\n throw new Error('ZonesBySpace not implemented');\r\n }\r\n \r\n }\r\n\r\n async getZonesBySpaceForUser(spaceID: string): Promise<Zone[]> {\r\n const missionForLocation = this.userService.currentMission(spaceID);\r\n const list = [];\r\n if (missionForLocation && missionForLocation.zoneID) {\r\n const allowedZone = await this.getZone(missionForLocation.zoneID);\r\n allowedZone.virtual = this.zoneIsVirtual(allowedZone);\r\n if (allowedZone.parent) {\r\n // list.push(allowedZone.parent);\r\n } else {\r\n // the whole building is authorized\r\n return this.getZonesBySpace(spaceID);\r\n }\r\n list.push(allowedZone);\r\n const children = await this.API.ListZones({\r\n parentID: { eq: allowedZone.id },\r\n });\r\n if (children.items.length > 0) {\r\n for (const child of children.items) {\r\n const childZone = { ...child } as Zone;\r\n childZone.virtual = this.zoneIsVirtual(child);\r\n list.push(childZone);\r\n }\r\n }\r\n } else {\r\n return this.getZonesBySpace(spaceID);\r\n }\r\n return list;\r\n }\r\n\r\n async filterZonesIDsForUser(zones: Zone[]): Promise<Zone[]> {\r\n const { spaceID } = zones[0];\r\n const zoneIDs = new Set(zones.map((zone) => zone.id));\r\n const allowedZones = await this.getZonesBySpaceForUser(spaceID);\r\n const filteredZones = allowedZones.filter((zone) =>\r\n zoneIDs.has(zone.id),\r\n );\r\n return filteredZones;\r\n }\r\n\r\n async deleteZone(zoneID: string): Promise<Zone> {\r\n return this.API.__proto__.DeleteZone({ id: zoneID });\r\n }\r\n\r\n async getZonesForSweepForSpace(\r\n sweepID: string,\r\n spaceID: string,\r\n ): Promise<Zone[]> {\r\n const zonesSpace = (await this.API.__proto__.ZonesBySpace(spaceID)).items;\r\n return zonesSpace.filter(\r\n (zone) => zone.sweepIDs && zone.sweepIDs.includes(sweepID),\r\n );\r\n }\r\n\r\n // // eslint-disable-next-line class-methods-use-this\r\n sortZonesFromChildToParent(zonesToSort: Zone[]) {\r\n // get default\r\n const defaultZone = zonesToSort.find((z) => !z.parentID);\r\n if (defaultZone) {\r\n const indexOf = zonesToSort.indexOf(defaultZone);\r\n zonesToSort.splice(indexOf, 1);\r\n }\r\n const zones = zonesToSort.sort((a, b) => {\r\n if (a.parentID === b.id) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n // so far by number of navigation points in them\r\n // const zones = zonesToSort.sort(\r\n // (a, b) => a.navigations.items.length - b.navigations.items.length,\r\n // );\r\n if (defaultZone) {\r\n zones.push(defaultZone);\r\n }\r\n return zones;\r\n }\r\n\r\n async getZonesForObject(\r\n object: DbObjectType,\r\n ): Promise<Zone[]> {\r\n if (object.pois.items && object.pois.items.length > 0) {\r\n const [poi] = object.pois.items;\r\n if (poi.matterportSweepID) {\r\n const zones = await this.getZonesForSweepForSpace(\r\n poi.matterportSweepID,\r\n object.spaceID,\r\n );\r\n return zones;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async createVirtualZone(zoneInput: Zone): Promise<Zone> {\r\n zoneInput.sweepIDs = [];\r\n const zone = await this.API.__proto__.CreateZone(zoneInput);\r\n console.log(\"virtual zone created\", zone);\r\n return zone;\r\n }\r\n\r\n zoneIsVirtual(zone: Zone): boolean {\r\n if (!zone.sweepIDs) {\r\n return true;\r\n }\r\n if (\r\n (zone.tags && zone.tags.includes(\"virtual\")) ||\r\n zone.sweepIDs.length === 0\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n async getModel3DForZone(zoneID: string): Promise<string> {\r\n const zone = await this.API.__proto__.GetZone(zoneID);\r\n if (zone.nodeIDs) {\r\n const node = await this.API.__proto__.GetNode(zone.nodeIDs[0]);\r\n return node.model3D;\r\n }\r\n return null;\r\n }\r\n\r\n async getZone(zoneID: string): Promise<Zone> {\r\n return this.API.__proto__.GetZone(zoneID);\r\n }\r\n\r\n async getDefaultZoneForSpace(spaceID: string): Promise<Zone> {\r\n return this.getZonesBySpace(spaceID).then(async (zones) => {\r\n const zonesBuilding = zones.filter(\r\n (zone) => zone.layer && zone.layer.name === \"BUILDING\",\r\n );\r\n if (zonesBuilding.length === 1) {\r\n return zonesBuilding[0];\r\n }\r\n const parentZone = zones.find((zone) => !zone.parentID);\r\n return parentZone;\r\n });\r\n }\r\n\r\n async create(input: Zone): Promise<Zone> {\r\n return this.API.__proto__.CreateZone(input);\r\n }\r\n\r\n // async getSortedZonesForSweepForUser(\r\n // sweep: string,\r\n // spaceID: string,\r\n // ): Promise<Zone[]> {\r\n // if (!spaceID) {\r\n // return [];\r\n // }\r\n // const zones = await this.getZonesForSweepForSpace(sweep, spaceID);\r\n // if (zones.length === 0) {\r\n // return [];\r\n // }\r\n // const filteredZones = await this.filterZonesIDsForUser(zones);\r\n // if (filteredZones.length > 0) {\r\n // let zonesSorted = this.sortZonesFromChildToParent(filteredZones);\r\n // zonesSorted = zonesSorted.filter((zone) => zone !== undefined);\r\n // return zonesSorted;\r\n // }\r\n // return [];\r\n // }\r\n\r\n async updateZone(input: any): Promise<Zone> {\r\n return this.API.__proto__.UpdateZone(input);\r\n }\r\n\r\n async getZonesForNodeForSpace(\r\n nodeID: string,\r\n spaceID: string,\r\n ): Promise<Zone[]> {\r\n return this.API.__proto__.ZonesBySpace(spaceID).then(async (zones) => {\r\n const filteredZones = zones.items.filter(\r\n (zone) => zone.nodeIDs && zone.nodeIDs.includes(nodeID),\r\n );\r\n return filteredZones;\r\n });\r\n }\r\n}\r\n","/* eslint-disable no-case-declarations */\r\n/* eslint-disable no-await-in-loop */\r\n/* eslint-disable guard-for-in */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Subject, Subscription } from \"rxjs\";\r\nimport { getLevelsBelow, getHighestLevelForMissions, getHighestRoleForMissions, filterUniqueArrayByID } from \"../helpers.service\";\r\nimport { Zone, Equipment, LevelStatus, Measurement, Mission, Organisation, PoiType, ProfileEntity, RoleStatus, Space, Ticket, DbObjectType, Feature, Comment, VisitTemplate } from \"../types.service\";\r\nimport { PoiService } from \"./models/poi.service\";\r\nimport { ZoneService } from \"./models/zone.service\";\r\nimport { BaseUserService } from \"./user.service\";\r\nenum FilterType {\r\n DOMAIN = \"DOMAIN\",\r\n LEVEL = \"LEVEL\",\r\n ROLE = \"ROLE\",\r\n ZONE = \"ZONE\",\r\n SPACE = \"SPACE\",\r\n HASHTAG = \"HASHTAG\",\r\n}\r\nimport levenshtein from 'js-levenshtein';\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class FilterService {\r\n private updateDateFilter: Subject<Date[]> = new Subject();\r\n\r\n public currentDateFilter: Date[];\r\n\r\n constructor(\r\n private userService: BaseUserService,\r\n private zoneService: ZoneService,\r\n private poiService: PoiService,\r\n ) {}\r\n\r\n filterTicketsByDomain(ticketsToFilter: Ticket[], domain: string) {\r\n return ticketsToFilter.filter((tic) => tic.domainID === domain);\r\n }\r\n\r\n filterObjectsByLevel(objectsToFilter: any[], level: LevelStatus): any[] {\r\n const visibleLevels = getLevelsBelow(level);\r\n const filtered = objectsToFilter.filter((tic) =>\r\n visibleLevels.includes(tic.level),\r\n );\r\n return filtered;\r\n }\r\n\r\n filterTicketsForMission(\r\n ticketsToFilter: Ticket[],\r\n mission: Mission,\r\n ): Ticket[] {\r\n const managerRoles: RoleStatus[] = [\r\n RoleStatus.MANAGER,\r\n RoleStatus.ADMIN,\r\n RoleStatus.OWNER,\r\n ];\r\n if (!managerRoles.includes(mission.role)) {\r\n if (mission.role === RoleStatus.SERVICE) {\r\n // SERVICE can see tickets to which he is assigned\r\n const ticketsAssigned = [];\r\n for (const t of ticketsToFilter) {\r\n if (t.assignees.items.length > 0) {\r\n for (const assignment of t.assignees.items) {\r\n if (assignment.missionID === mission.id) {\r\n ticketsAssigned.push(t);\r\n }\r\n }\r\n }\r\n }\r\n return ticketsAssigned;\r\n }\r\n // OCCUPANT and VISITOR can see only tickets that they created\r\n return ticketsToFilter.filter((ticket) => {\r\n return ticket.ownerMissionID === mission.id;\r\n });\r\n }\r\n return ticketsToFilter;\r\n }\r\n\r\n getFiltersForRole(role: RoleStatus): FilterType[] {\r\n switch (role) {\r\n case RoleStatus.ADMIN:\r\n return [FilterType.LEVEL];\r\n case RoleStatus.MANAGER:\r\n return [FilterType.ZONE, FilterType.LEVEL];\r\n case RoleStatus.OWNER:\r\n return [FilterType.ZONE, FilterType.LEVEL];\r\n case RoleStatus.SERVICE:\r\n return [\r\n // FilterType.ZONE,\r\n // FilterType.LEVEL,\r\n // FilterType.DOMAIN,\r\n FilterType.ROLE, // that is the most severe filter\r\n ];\r\n case RoleStatus.OCCUPANT:\r\n return [\r\n FilterType.ZONE,\r\n FilterType.DOMAIN,\r\n FilterType.ROLE,\r\n FilterType.LEVEL,\r\n FilterType.HASHTAG,\r\n ];\r\n case RoleStatus.VISITOR:\r\n return [\r\n FilterType.ZONE,\r\n FilterType.LEVEL,\r\n FilterType.DOMAIN,\r\n FilterType.ROLE,\r\n FilterType.HASHTAG,\r\n ];\r\n case RoleStatus.VISITOR_MUSEUM:\r\n return [FilterType.ZONE, FilterType.LEVEL, FilterType.HASHTAG];\r\n case RoleStatus.GUIDE_MUSEUM:\r\n return [FilterType.LEVEL];\r\n default:\r\n return [FilterType.LEVEL];\r\n }\r\n }\r\n\r\n async filterTicketsForCurrentUserInSpace(\r\n tickets: Ticket[],\r\n spaceID: string,\r\n ): Promise<Ticket[]> {\r\n const finalTickets: Ticket[] = [];\r\n let domFiltered: Ticket[] = tickets;\r\n let roleFiltered: Ticket[] = tickets;\r\n let levelFiltered: Ticket[] = tickets;\r\n let zoneFiltered: Ticket[] = tickets;\r\n const missions = this.userService.currentMissions;\r\n if (missions) {\r\n const currentSpaceMissions = missions.filter(\r\n (m) => m.spaceID === spaceID,\r\n );\r\n if (currentSpaceMissions.length > 0) {\r\n const highestLelel =\r\n getHighestLevelForMissions(currentSpaceMissions);\r\n const highestRole =\r\n getHighestRoleForMissions(currentSpaceMissions);\r\n // console.log(\"Highest level: \", highestLelel, \", Highest Role: \", highestRole)\r\n\r\n const filters = this.getFiltersForRole(highestRole);\r\n for (const filter of filters) {\r\n if (filter === FilterType.DOMAIN) {\r\n let domains: string[] = [];\r\n for (const m of currentSpaceMissions) {\r\n if (m.domains) {\r\n domains = [...domains, ...m.domains];\r\n }\r\n }\r\n let allDomainsFiltered = [];\r\n for (const d of domains) {\r\n const currentDomFiltered =\r\n this.filterTicketsByDomain(tickets, d);\r\n allDomainsFiltered = [\r\n ...allDomainsFiltered,\r\n ...currentDomFiltered,\r\n ];\r\n }\r\n domFiltered = allDomainsFiltered;\r\n }\r\n if (filter === FilterType.ROLE) {\r\n const highestRoleMission = currentSpaceMissions.find(\r\n (m) => m.role === highestRole,\r\n );\r\n roleFiltered = this.filterTicketsForMission(\r\n tickets,\r\n highestRoleMission,\r\n );\r\n }\r\n\r\n if (filter === FilterType.LEVEL) {\r\n levelFiltered = this.filterObjectsByLevel(\r\n tickets,\r\n highestLelel,\r\n );\r\n }\r\n\r\n if (filter === FilterType.ZONE) {\r\n zoneFiltered = await this.applyZoneFilterForMissions(\r\n currentSpaceMissions,\r\n tickets,\r\n );\r\n }\r\n }\r\n // keep only tickets present in all filtered arrays\r\n // console.log(domFiltered);\r\n // console.log(roleFiltered);\r\n // console.log(levelFiltered);\r\n // console.log(zoneFiltered);\r\n for (const tic of levelFiltered) {\r\n if (\r\n domFiltered.includes(tic) &&\r\n roleFiltered.includes(tic) &&\r\n zoneFiltered.includes(tic)\r\n ) {\r\n finalTickets.push(tic);\r\n }\r\n }\r\n }\r\n }\r\n // console.log(finalTickets);\r\n return finalTickets;\r\n }\r\n\r\n subscribeToDataFilterUpdate(\r\n next?: (value: any) => void,\r\n error?: (error: any) => void,\r\n complete?: () => void,\r\n ): Subscription {\r\n const s = this.updateDateFilter.subscribe(next, error, complete);\r\n return s;\r\n }\r\n\r\n dateFilterUpdated(dateRange: Date[] | null) {\r\n this.currentDateFilter = dateRange;\r\n this.updateDateFilter.next(dateRange);\r\n }\r\n\r\n filterObjectsForDateRange(objects: any[], dateRange: Date[]): any[] {\r\n return objects.filter((object) => {\r\n const createdAtDate = new Date(object.createdAt);\r\n return (\r\n createdAtDate >= dateRange[0] && createdAtDate <= dateRange[1]\r\n );\r\n });\r\n }\r\n\r\n filterMeasurementsForDateRange(\r\n measurements: Measurement[],\r\n dateRange: Date[],\r\n ): Measurement[] {\r\n return measurements.filter((measure) => {\r\n const createdAtDate = new Date(measure.comment.createdAt);\r\n return (\r\n createdAtDate >= dateRange[0] && createdAtDate <= dateRange[1]\r\n );\r\n });\r\n }\r\n\r\n async filterObjectsForZone(\r\n objects: any[],\r\n zoneID: string = null,\r\n zone: Zone = null,\r\n ): Promise<any[]> {\r\n const filteredObjects = [];\r\n await Promise.all(\r\n objects.map(async (object) => {\r\n const [poi] = object.pois.items;\r\n if (poi && zone) {\r\n if (zone.sweepIDs && zone.sweepIDs.includes(poi.matterportSweepID)) {\r\n if (this.poiService.poiIsVirtual(poi) && zone.layer && zone.layer.name === \"FLOOR\" ) {\r\n // we include in Floor zone only\r\n filteredObjects.push(object);\r\n }\r\n if (!this.poiService.poiIsVirtual(poi)) {\r\n filteredObjects.push(object);\r\n }\r\n }\r\n }\r\n if (poi && !zone && zoneID) {\r\n const zones = await this.zoneService.getZonesForObject(\r\n object,\r\n );\r\n if (\r\n zones &&\r\n zones.some(\r\n (zone_) =>\r\n zone_.id === zoneID ||\r\n zone_.parentID === zoneID,\r\n )\r\n ) {\r\n filteredObjects.push(object);\r\n }\r\n }\r\n }),\r\n );\r\n return filteredObjects;\r\n }\r\n\r\n filterEquipmentsByDomainList(\r\n equipments: Equipment[],\r\n domainIDList: string[],\r\n ): Equipment[] {\r\n let filtered = [];\r\n const filteredByDomain = equipments.filter((equip) =>\r\n domainIDList.includes(equip.domainID),\r\n );\r\n filtered = [...filtered, ...filteredByDomain];\r\n const filteredByParentDomain = equipments.filter(\r\n (equip) =>\r\n equip.domain &&\r\n equip.domain.parentID &&\r\n domainIDList.includes(equip.domain.parentID),\r\n );\r\n filtered = [...filtered, ...filteredByParentDomain];\r\n return filterUniqueArrayByID(filtered);\r\n }\r\n\r\n filterEquipmentsForTerm(equips: Equipment[], term: string): Equipment[] {\r\n // filter domains\r\n let byDomain = equips.filter((eq) => {\r\n if (eq.domain && eq.domain.name) {\r\n const normalizedDomain = eq.domain.name.toLowerCase();\r\n const lev = levenshtein(normalizedDomain, term);\r\n return lev <= 2 || normalizedDomain.includes(term);\r\n }\r\n return false;\r\n });\r\n const byParentDomain = equips.filter((eq) => {\r\n if (eq.domain && eq.domain.parentID) {\r\n const normalizedParent = eq.domain.parent.name.toLowerCase();\r\n const lev = levenshtein(normalizedParent, term);\r\n return lev <= 2 || normalizedParent.includes(term);\r\n }\r\n return false;\r\n });\r\n byDomain = [...byDomain, ...byParentDomain];\r\n // filter name\r\n let byName = [];\r\n const terms = term.split(\" \").filter((token) => token.length > 2);\r\n for (const eq of equips) {\r\n const words = eq.name\r\n .toLowerCase()\r\n .split(\" \")\r\n .filter((token) => token.length > 2);\r\n const matched = [];\r\n for (const token of terms) {\r\n for (const word of words) {\r\n if (levenshtein(token, word) <= 1) {\r\n matched.push(true);\r\n break;\r\n }\r\n }\r\n }\r\n if (matched.length === terms.length) {\r\n byName.push(eq);\r\n }\r\n }\r\n\r\n const byNameSimple = equips.filter((eq) =>\r\n eq.name.toLowerCase().includes(term),\r\n );\r\n byName = [...byName, ...byNameSimple];\r\n // by serial number\r\n const bySerialNumber = equips.filter(\r\n (eq) => eq.serialNumber && eq.serialNumber.toLowerCase() === term,\r\n );\r\n const result = [...byDomain, ...byName, ...bySerialNumber];\r\n return filterUniqueArrayByID(result);\r\n }\r\n\r\n filterTicketsForTerm(tickets: Ticket[], term: string): Ticket[] {\r\n // filter term in title and description\r\n const byTitle = this.filterObjectsForTerm(tickets, term);\r\n // by equipment\r\n const byEquipment = tickets.filter(\r\n (ticket) =>\r\n ticket.equipments &&\r\n this.filterEquipmentsForTerm(ticket.equipments, term).length >\r\n 0,\r\n );\r\n return filterUniqueArrayByID([...byTitle, ...byEquipment]);\r\n }\r\n\r\n filterLocationsForTerm(locations: Space[], term: string): Space[] {\r\n // by name\r\n const byName = locations.filter((loc) =>\r\n loc.name.toLowerCase().includes(term),\r\n );\r\n // by address\r\n const byAddress = locations.filter((loc) =>\r\n loc.addresses.toLowerCase().includes(term),\r\n );\r\n return filterUniqueArrayByID([...byName, ...byAddress]);\r\n }\r\n\r\n filterOrganisationsForTerm(\r\n orgs: Organisation[],\r\n term: string,\r\n ): Organisation[] {\r\n const byName = orgs.filter((org) => {\r\n const words = org.name.toLowerCase().split(\" \");\r\n return (\r\n words.some(\r\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\r\n ) || org.name.toLowerCase().includes(term)\r\n );\r\n });\r\n return byName;\r\n }\r\n\r\n filterUsersForTerm(users: ProfileEntity[], term: string) {\r\n const byName = users.filter((user) => {\r\n const words = user.displayName.toLowerCase().split(\" \");\r\n return (\r\n words.some(\r\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\r\n ) || user.displayName.toLowerCase().includes(term)\r\n );\r\n });\r\n return byName;\r\n }\r\n\r\n async filterFeaturesForCurrentUserInSpace(\r\n features: Feature[],\r\n spaceID: string,\r\n ): Promise<Feature[]> {\r\n const finalFeatures: Feature[] = [];\r\n let levelFiltered: Feature[] = features;\r\n let zoneFiltered: Feature[] = features;\r\n let hashtagFiltered: Feature[] = features;\r\n const missions = this.userService.currentMissions;\r\n if (missions) {\r\n const currentSpaceMissions = missions.filter(\r\n (m) => m.spaceID === spaceID,\r\n );\r\n if (currentSpaceMissions.length > 0) {\r\n const highestLelel =\r\n getHighestLevelForMissions(currentSpaceMissions);\r\n const highestRole =\r\n getHighestRoleForMissions(currentSpaceMissions);\r\n\r\n const filters = this.getFiltersForRole(highestRole);\r\n for (const filter of filters) {\r\n if (filter === FilterType.LEVEL) {\r\n levelFiltered = this.filterObjectsByLevel(\r\n features,\r\n highestLelel,\r\n );\r\n }\r\n if (filter === FilterType.ZONE) {\r\n zoneFiltered = await this.applyZoneFilterForMissions(\r\n currentSpaceMissions,\r\n features,\r\n );\r\n }\r\n if (filter === FilterType.HASHTAG) {\r\n hashtagFiltered =\r\n this.filterFeaturesByHashtagsAndLocale(\r\n currentSpaceMissions,\r\n features,\r\n );\r\n }\r\n }\r\n for (const feature of levelFiltered) {\r\n if (\r\n hashtagFiltered.includes(feature) &&\r\n zoneFiltered.includes(feature)\r\n ) {\r\n finalFeatures.push(feature);\r\n }\r\n }\r\n }\r\n }\r\n return finalFeatures;\r\n }\r\n\r\n filterFeaturesForTerm(features: Feature[], term: string): Feature[] {\r\n // filter term in title\r\n const byTitle = this.filterObjectsForTerm(features, term);\r\n // by comments\r\n const byComment = features.filter(\r\n (feature) =>\r\n this.filterObjectsForTerm(feature.comments.items, term).length >\r\n 0,\r\n );\r\n return filterUniqueArrayByID([...byTitle, ...byComment]);\r\n }\r\n\r\n /**\r\n *\r\n * @param objects Array of Comments, Tickets, Features. Obligatory proporties: title, description\r\n * @param term string\r\n */\r\n filterObjectsForTerm(objects: any[], term: string): any[] {\r\n // filter term in title\r\n const byTitle = objects.filter((feature) => {\r\n const words = feature.title.toLowerCase().split(\" \");\r\n return (\r\n words.some(\r\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\r\n ) || feature.title.toLowerCase().includes(term)\r\n );\r\n });\r\n // term present in description\r\n const byDescription = objects.filter(\r\n (feature) =>\r\n feature.description &&\r\n feature.description.toLowerCase().includes(term),\r\n );\r\n return filterUniqueArrayByID([...byTitle, ...byDescription]);\r\n }\r\n\r\n filterMissionByStartTimeDateForDateRange(\r\n missions: any[],\r\n dateRange: Date[],\r\n ): any[] {\r\n return missions.filter((mission) => {\r\n const startDateTime = new Date(mission.startDateTime);\r\n return (\r\n startDateTime >= dateRange[0] && startDateTime <= dateRange[1]\r\n );\r\n });\r\n }\r\n\r\n async applyZoneFilterForMissions(\r\n currentSpaceMissions: Mission[],\r\n objects: any[],\r\n ): Promise<any[]> {\r\n const allowedZones = [];\r\n for (const mission of currentSpaceMissions) {\r\n if (mission.zoneID) {\r\n allowedZones.push(mission.zoneID);\r\n }\r\n }\r\n if (allowedZones.length === currentSpaceMissions.length) {\r\n let allZoneFiltered = [];\r\n await Promise.all(\r\n allowedZones.map(async (zoneID) => {\r\n const currentZoneFiltered = await this.filterObjectsForZone(\r\n objects,\r\n zoneID,\r\n );\r\n allZoneFiltered = [\r\n ...allZoneFiltered,\r\n ...currentZoneFiltered,\r\n ];\r\n }),\r\n );\r\n return filterUniqueArrayByID(allZoneFiltered);\r\n }\r\n return objects;\r\n }\r\n\r\n async filterEquipmentsForCurrentUserInSpace(\r\n spaceID: string,\r\n equips: Equipment[],\r\n ): Promise<Equipment[]> {\r\n const finalEquips: Equipment[] = [];\r\n let domFiltered: Equipment[] = equips;\r\n const roleFiltered: Equipment[] = equips;\r\n const levelFiltered: Equipment[] = equips;\r\n let zoneFiltered: Equipment[] = equips;\r\n const missions = this.userService.currentMissions;\r\n if (missions) {\r\n const currentSpaceMissions = missions.filter(\r\n (m) => m.spaceID === spaceID,\r\n );\r\n if (currentSpaceMissions.length > 0) {\r\n const highestLelel =\r\n getHighestLevelForMissions(currentSpaceMissions);\r\n const highestRole =\r\n getHighestRoleForMissions(currentSpaceMissions);\r\n // console.log(\"Highest level: \", highestLelel, \", Highest Role: \", highestRole)\r\n\r\n const filters = this.getFiltersForRole(highestRole);\r\n for (const filter of filters) {\r\n if (filter === FilterType.DOMAIN) {\r\n let domains: string[] = [];\r\n for (const m of currentSpaceMissions) {\r\n if (m.domains) {\r\n domains = [...domains, ...m.domains];\r\n }\r\n }\r\n let allDomainsFiltered = [];\r\n const currentDomFiltered =\r\n this.filterEquipmentsByDomainList(equips, domains);\r\n allDomainsFiltered = [\r\n ...allDomainsFiltered,\r\n ...currentDomFiltered,\r\n ];\r\n domFiltered = allDomainsFiltered;\r\n }\r\n if (filter === FilterType.ROLE) {\r\n // const highestRoleMission = currentSpaceMissions.find(\r\n // (m) => m.role === highestRole,\r\n // );\r\n // TODO\r\n }\r\n\r\n if (filter === FilterType.LEVEL) {\r\n // TODO, equipment does not have level\r\n }\r\n\r\n if (filter === FilterType.ZONE) {\r\n zoneFiltered = await this.applyZoneFilterForMissions(\r\n currentSpaceMissions,\r\n equips,\r\n );\r\n }\r\n }\r\n for (const tic of levelFiltered) {\r\n if (\r\n domFiltered.includes(tic) &&\r\n roleFiltered.includes(tic) &&\r\n zoneFiltered.includes(tic)\r\n ) {\r\n finalEquips.push(tic);\r\n }\r\n }\r\n }\r\n }\r\n return finalEquips;\r\n }\r\n\r\n async filterMeasurementsForCurrentUserInSpace(\r\n spaceID: string,\r\n comments: Comment[],\r\n ): Promise<Comment[]> {\r\n let finalMeasurements: Comment[] = [];\r\n let zoneFiltered: Comment[] = comments;\r\n const missions = this.userService.currentMissions;\r\n if (missions) {\r\n const currentSpaceMissions = missions.filter(\r\n (m) => m.spaceID === spaceID,\r\n );\r\n if (currentSpaceMissions.length > 0) {\r\n const highestRole =\r\n getHighestRoleForMissions(currentSpaceMissions);\r\n\r\n const filters = this.getFiltersForRole(highestRole);\r\n for (const filter of filters) {\r\n if (filter === FilterType.ZONE) {\r\n zoneFiltered = await this.applyZoneFilterForMissions(\r\n currentSpaceMissions,\r\n comments,\r\n );\r\n }\r\n }\r\n finalMeasurements = zoneFiltered;\r\n }\r\n }\r\n return finalMeasurements;\r\n }\r\n\r\n async isObjectAllowedForUserInSpace(\r\n object: Object,\r\n spaceID: string,\r\n ): Promise<boolean> {\r\n const mission = this.userService.currentMission(spaceID);\r\n const filters = this.getFiltersForRole(mission.role);\r\n for (const filter of filters) {\r\n if (\r\n filter === FilterType.LEVEL &&\r\n Object.prototype.hasOwnProperty.call(object, \"level\")\r\n ) {\r\n const levelFiltered = this.filterObjectsByLevel(\r\n [object],\r\n mission.level,\r\n );\r\n if (levelFiltered.length === 0) {\r\n return false;\r\n }\r\n }\r\n if (filter === FilterType.ZONE) {\r\n const zoneFiltered = await this.applyZoneFilterForMissions(\r\n [mission],\r\n [object],\r\n );\r\n if (zoneFiltered.length === 0) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n filterTemplatesForTerm(missions: Mission[], term: string): Mission[] {\r\n // term present in description\r\n const byDescription = missions.filter(\r\n (mis) =>\r\n mis.description && mis.description.toLowerCase().includes(term),\r\n );\r\n // by user lastName which is the name of the visit:\r\n // metadata: \"{\\\"firstName\\\":\\\"\\\",\\\"lastName\\\":\\\"Visite du 5 Juillet\\\"}\"\r\n const userProfiles = missions.map((mis) => new ProfileEntity(mis.user));\r\n const byUserLastname = this.filterUsersForTerm(userProfiles, term);\r\n const userIds = new Set(byUserLastname.map((user) => user.id));\r\n const missionsByUser = missions.filter((mis) =>\r\n userIds.has(mis.userID),\r\n );\r\n return filterUniqueArrayByID([...byDescription, ...missionsByUser]);\r\n }\r\n\r\n async filterObjectsForSweep(\r\n objects: any[],\r\n objectType: PoiType,\r\n sweep: string,\r\n ): Promise<any[]> {\r\n let filtered = [];\r\n switch (objectType) {\r\n case PoiType.EQUIPMENT:\r\n const pois =\r\n await this.poiService.getPoisByMatterportSweepByType(\r\n sweep,\r\n objectType,\r\n );\r\n const equipIDs = new Set(pois.map((poi) => poi.elementID));\r\n filtered = objects.filter((object) => equipIDs.has(object.id));\r\n break;\r\n default:\r\n break;\r\n }\r\n return filtered;\r\n }\r\n\r\n filterFeaturesByHashtagsAndLocale(\r\n currentSpaceMissions: Mission[],\r\n features: Feature[],\r\n ): Feature[] {\r\n const [currentMission] = currentSpaceMissions;\r\n // filter by locale\r\n let filteredLocale = [...features];\r\n if (currentMission.locale) {\r\n filteredLocale = features.filter(\r\n (feature) =>\r\n feature.locale && feature.locale === currentMission.locale,\r\n );\r\n }\r\n // filter by hashtags\r\n if (currentMission.hashtags && currentMission.hashtags.length > 0) {\r\n const filteredByHashtags = [];\r\n for (const feature of filteredLocale) {\r\n if (!feature.hashtags || feature.hashtags.length === 0) {\r\n // Feature without hashtag is available for everybody\r\n filteredByHashtags.push(feature);\r\n } else if (\r\n currentMission.hashtags.every((hashtag) =>\r\n feature.hashtags.includes(hashtag),\r\n )\r\n ) {\r\n filteredByHashtags.push(feature);\r\n }\r\n }\r\n return filteredByHashtags;\r\n }\r\n return filteredLocale;\r\n }\r\n\r\n filterFeaturesForMissionWithoutZone(\r\n features: Feature[],\r\n mission: Mission,\r\n ): Feature[] {\r\n const finalFeatures: Feature[] = [];\r\n let levelFiltered: Feature[] = features;\r\n let zoneFiltered: Feature[] = features;\r\n let hashtagFiltered: Feature[] = features;\r\n\r\n const filters = this.getFiltersForRole(mission.role);\r\n for (const filter of filters) {\r\n if (filter === FilterType.LEVEL) {\r\n levelFiltered = this.filterObjectsByLevel(\r\n features,\r\n mission.level,\r\n );\r\n }\r\n // if (filter === FilterType.ZONE) {\r\n // zoneFiltered = await this.applyZoneFilterForMissions(\r\n // currentSpaceMissions,\r\n // features,\r\n // );\r\n // }\r\n if (filter === FilterType.HASHTAG) {\r\n hashtagFiltered =\r\n this.filterFeaturesByHashtagsAndLocale(\r\n [mission],\r\n features,\r\n );\r\n }\r\n }\r\n for (const feature of levelFiltered) {\r\n if (\r\n hashtagFiltered.includes(feature) &&\r\n zoneFiltered.includes(feature)\r\n ) {\r\n finalFeatures.push(feature);\r\n }\r\n }\r\n return finalFeatures;\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Navigation, Zone } from \"../../types.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { ZoneService } from \"./zone.service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class NavigationService {\r\n\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any,\r\n private userService: BaseUserService,\r\n private zoneService: ZoneService) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async createNavigation(navInput: Navigation): Promise<Navigation> {\r\n return this.API.__proto__.CreateNavigation(navInput);\r\n }\r\n\r\n async deleteNavigation(id: string): Promise<Navigation> {\r\n return this.API.__proto__.DeleteNavigation({ id });\r\n }\r\n\r\n async getNavigationsForNode(nodeID: string): Promise<Navigation[]> {\r\n return this.API.__proto__.NavigationsByNode(nodeID, null, null, 500).then(\r\n (navs) => navs.items,\r\n );\r\n }\r\n\r\n async getNavigation(id: string): Promise<Navigation> {\r\n return this.API.__proto__.GetNavigation(id);\r\n }\r\n\r\n async getSweepsIDsForSpace(spaceID: string): Promise<string[]> {\r\n const zones = await this.zoneService.getZonesBySpace(spaceID);\r\n const zonesWithSweeps = zones.filter((zone) => zone.sweepIDs && zone.sweepIDs.length > 0);\r\n const allSweeps = zonesWithSweeps.flatMap((zone) => zone.sweepIDs);\r\n return [...new Set(allSweeps)];\r\n }\r\n\r\n async getAllowedSweepsIDsForUserInSpace(\r\n spaceID: string,\r\n ): Promise<string[]> {\r\n const missionsForSpace = this.userService.currentMissions.filter(\r\n (mis) => mis.spaceID === spaceID,\r\n );\r\n let navIDs = [];\r\n if (this.userService.userHasAccessToAllZonesInSpace(spaceID)) {\r\n return this.getSweepsIDsForSpace(spaceID);\r\n }\r\n await Promise.all(\r\n missionsForSpace.map(async (mission) => {\r\n navIDs = [...navIDs, ...mission.zone.sweepIDs];\r\n }),\r\n );\r\n return navIDs;\r\n }\r\n\r\n async getForbiddenNavigationIDsForUserInSpace(\r\n spaceID: string,\r\n ): Promise<string[]> {\r\n const allowed = await this.getAllowedSweepsIDsForUserInSpace(spaceID);\r\n const allNavs = await this.getSweepsIDsForSpace(spaceID);\r\n const difference = allNavs.filter((x) => !allowed.includes(x));\r\n return difference.length > 0 ? difference : null;\r\n }\r\n\r\n async getNavigationsForMatterportIDForSpace(\r\n matterportID: string,\r\n spaceID: string,\r\n ): Promise<Navigation[]> {\r\n return this.API.__proto__.NavigationsByMatterportIDBySpace(matterportID, {\r\n eq: spaceID,\r\n }).then((navs) => navs.items);\r\n }\r\n\r\n async getNavigationsForZone(zone: Zone): Promise<Navigation[]> {\r\n const responseNavs = [];\r\n await Promise.all(\r\n zone.sweepIDs.map(async (sweepID) => {\r\n const navs = await this.getNavigationsForMatterportIDForSpace(\r\n sweepID,\r\n zone.spaceID,\r\n );\r\n if (navs.length > 0) {\r\n responseNavs.push(navs[0]);\r\n }\r\n }),\r\n );\r\n return responseNavs;\r\n }\r\n\r\n async updateNavigation(\r\n navInput: any,\r\n ): Promise<Navigation> {\r\n return this.API.__proto__.UpdateNavigation(navInput);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Equipment, Feature, POI, Ticket } from \"../../types.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseObjectService {\r\n constructor(\r\n protected poiService: PoiService,\r\n private navigationService: NavigationService,\r\n ) {}\r\n\r\n async getModel3dAndSweep(object: Feature | Ticket | Equipment): Promise<{\r\n model3D: string;\r\n sweep: string;\r\n rotation: { x: number; y: number };\r\n } | void> {\r\n return this.poiService\r\n .getPoiByElementId(object.id)\r\n .then(async (poi) => {\r\n if (poi && poi.matterportSweepID) {\r\n const navigations =\r\n await this.navigationService.getNavigationsForMatterportIDForSpace(\r\n poi.matterportSweepID,\r\n object.spaceID,\r\n );\r\n const [poiNavigation] = navigations;\r\n if (this.poiService.poiIsVirtual(poi)) {\r\n return {\r\n model3D: poiNavigation.node.model3D,\r\n sweep: null,\r\n rotation: null,\r\n };\r\n }\r\n const coordinate = JSON.parse(poi.coordinate);\r\n let rotation = null;\r\n if (coordinate.xRotation) {\r\n rotation = {\r\n x: Number(coordinate.xRotation),\r\n y: Number(coordinate.yRotation),\r\n };\r\n }\r\n return {\r\n model3D: poiNavigation.node.model3D,\r\n sweep: poi.matterportSweepID,\r\n rotation,\r\n };\r\n }\r\n return null;\r\n })\r\n .catch((error) => {\r\n return null;\r\n })\r\n }\r\n\r\n async updateIconForAllObjects(\r\n objects: Ticket[] | Feature[] | Equipment[],\r\n tagIcon: string,\r\n ): Promise<POI[]> {\r\n const IDs = [];\r\n for (const object of objects) {\r\n IDs.push(object.id);\r\n }\r\n const pois = [];\r\n await Promise.all(\r\n IDs.map(async (id) => {\r\n const poi = await this.poiService.getPoiByElementId(id);\r\n const updated = await this.poiService.updatePoi({\r\n id: poi.id,\r\n tagIcon,\r\n });\r\n pois.push(updated);\r\n }),\r\n );\r\n console.log(\"updated\", pois.length, \"pois with new icons\");\r\n return pois;\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Operation, Ticket } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class OperationService {\r\n API: any; //AWS\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getOperationsByTicketID(id: string): Promise<Operation[]> {\r\n return this.API.__proto__.OperationsByTicket(id).then((res) => res.items);\r\n }\r\n\r\n async getOperationsByEquipmentID(id: string): Promise<Operation[]> {\r\n return this.API.__proto__.OperationsByEquipment(id).then((res) => res.items);\r\n }\r\n\r\n async getTicketsByEquipmentID(id: string): Promise<Ticket[]> {\r\n const operations = await this.getOperationsByEquipmentID(id);\r\n const tickets = operations.map((operation) => operation.ticket);\r\n return tickets;\r\n }\r\n\r\n async deleteOperationsForEquipment(equipID: string): Promise<Operation[]> {\r\n const deleted = [];\r\n await this.getOperationsByEquipmentID(equipID)\r\n .then(async (operations) => {\r\n if (operations.length > 0) {\r\n await Promise.all(\r\n operations.map(async (op) => {\r\n const deletedOp = await this.API.__proto__.DeleteOperation({ id: op.id });\r\n deleted.push(deletedOp)\r\n }),\r\n );\r\n }\r\n });\r\n return deleted;\r\n }\r\n\r\n async deleteOperationsForTicket(ticketID: string) {\r\n await this.getOperationsByTicketID(ticketID)\r\n .then(async (operations) => {\r\n if (operations.length > 0) {\r\n await Promise.all(\r\n operations.map(async (op) => {\r\n await this.API.__proto__.DeleteOperation({ id: op.id });\r\n }),\r\n );\r\n }\r\n });\r\n }\r\n\r\n async deleteOperation(operationID: string): Promise<Operation> {\r\n return this.API.__proto__.DeleteOperation({ id: operationID });\r\n }\r\n\r\n async createOperation(operation: Operation): Promise<Operation> {\r\n return this.API.__proto__.CreateOperation(operation);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Inject } from \"@angular/core\";\r\nimport { dateTimeToLocalString } from \"../../helpers.service\";\r\nimport { ProfileEntity } from \"../../types.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { Event } from \"../../types.service\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class EventService {\r\n \r\n translationEventSubcriptions = {};\r\n\r\n API: any;\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any, \r\n private userService: BaseUserService,\r\n private translate: TranslateService ) {\r\n this.API = apiInjected;\r\n }\r\n\r\n /**\r\n * CRUD \r\n * */\r\n async createEvent(input: Event): Promise<Event> {\r\n return this.API.__proto__.CreateEvent(input);\r\n }\r\n\r\n async updateEvent(input: any): Promise<Event> {\r\n return this.API.__proto__.UpdateEvent(input);\r\n }\r\n\r\n async deleteEvent(eventID: string): Promise<Event> {\r\n return this.API.__proto__.DeleteEvent({id: eventID});\r\n }\r\n\r\n async getEvent(eventID: string): Promise<Event>{\r\n return this.API.__proto__.GetEvent(eventID);\r\n }\r\n\r\n /** \r\n * Custom get by GSI \r\n * */\r\n async getEventsByTicketID(ticketID: string): Promise<Event[]> {\r\n return this.API.__proto__.EventsByTicket(ticketID).then((events)=> events.items);\r\n }\r\n\r\n async getEventsByTicketIDSortedByDateDesc(ticketID: string): Promise<Event[]> {\r\n return this.API.__proto__.EventsByTicketByDate(\r\n ticketID,\r\n null,\r\n \"DESC\",\r\n ).then((events) => events.items);\r\n }\r\n\r\n async getEventsByGroup(group: string): Promise<Event[]> {\r\n return (await this.API.__proto__.EventsByGroup(group)).items;\r\n }\r\n\r\n /**\r\n * \r\n * SORTING\r\n */\r\n\r\n sortEventsByCreatedAtDateDesc(events: Event[]): Event[] {\r\n events.sort((event1, event2) => {\r\n // @ts-ignore\r\n return new Date(event2.createdAt) - new Date(event1.createdAt);\r\n });\r\n return events;\r\n }\r\n\r\n sortEventsByCreatedAtDateAsc(events: Event[]): Event[] {\r\n events.sort((event1, event2) => {\r\n // @ts-ignore\r\n return new Date(event1.createdAt) - new Date(event2.createdAt);\r\n });\r\n return events;\r\n }\r\n\r\n /**\r\n * TRANSLATIONS \r\n * */\r\n /** Apply a translation to a ticket event, with the current language */\r\n async applyTicketEventTranslate(event: Event) {\r\n const meta = await this.getTranslatedMetaEvent(event);\r\n const path = event.translationPath;\r\n if (path) {\r\n const titlePath = `${path}.title`;\r\n const descriptionPath = `${path}.description`;\r\n const value = this.translate.instant(\r\n [titlePath, descriptionPath],\r\n meta,\r\n );\r\n event.title = value[titlePath];\r\n event.description = value[descriptionPath];\r\n }\r\n }\r\n\r\n /** Unsubscribe a ticket event for his translation */\r\n ticketEventSubscribeTranslation(event: Event) {\r\n if (event.id in this.translationEventSubcriptions) {\r\n this.ticketEventUnsubscribeTranslation(event.id);\r\n }\r\n this.translationEventSubcriptions[event.id] =\r\n this.translate.onLangChange.subscribe((change) => {\r\n this.applyTicketEventTranslate(event);\r\n });\r\n this.applyTicketEventTranslate(event);\r\n }\r\n\r\n /** Unsubscribe a ticket event for his translation */\r\n ticketEventUnsubscribeTranslation(id: string) {\r\n if (id in this.translationEventSubcriptions) {\r\n this.translationEventSubcriptions[id].unsubscribe();\r\n delete this.translationEventSubcriptions[id];\r\n }\r\n }\r\n\r\n /** Generate the translated metadata of an event, according to the current language */\r\n async getTranslatedMetaEvent(event: Event): Promise<any> {\r\n let meta: any = {};\r\n\r\n const owner: ProfileEntity = await this.userService.userFromUserID(\r\n event.owner.userID,\r\n );\r\n\r\n try {\r\n if (event.metadata) meta = JSON.parse(event.metadata);\r\n } catch {}\r\n meta.firstName = owner.firstName;\r\n meta.lastName = owner.lastName;\r\n\r\n if (event.estimateStartDate) {\r\n meta.fromDate = dateTimeToLocalString(\r\n event.estimateStartDate,\r\n this.translate,\r\n );\r\n }\r\n if (event.estimateEndDate)\r\n meta.toDate = dateTimeToLocalString(\r\n event.estimateEndDate,\r\n this.translate,\r\n );\r\n\r\n if (meta.oldStatus)\r\n meta.oldStatus = this.translate.instant(meta.oldStatus);\r\n if (meta.newStatus)\r\n meta.newStatus = this.translate.instant(meta.newStatus);\r\n if (meta.type) meta.type = this.translate.instant(meta.type);\r\n return meta;\r\n }\r\n \r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Affectation } from \"../../types.service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class AffectationService {\r\n API: any;\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getAffectationsFromTicketID(\r\n ticketID: string,\r\n ): Promise<Affectation[] | void> {\r\n return this.API.__proto__.ListAffectations({\r\n ticketID: {\r\n eq: ticketID,\r\n } ,\r\n })\r\n .then((results) => {\r\n return results.items;\r\n })\r\n .catch((error) => {\r\n console.log(\r\n ` Error while retrieving affectations for ${ticketID} : ${JSON.stringify(error)}`,\r\n );\r\n });\r\n }\r\n\r\n async getAffectationsFromMissionID(\r\n missionID: string,\r\n ): Promise<Affectation[] | void> {\r\n return this.API.__proto__.AffectationsByMission(missionID).then((resposne) => resposne.items);\r\n }\r\n\r\n async softDeleteAffectationByMissionByTicket(\r\n ticketID: string,\r\n missionID: string,\r\n ): Promise<Affectation[]> {\r\n const affectations: Affectation[] =\r\n await this.getAffecationsForTicketForMission(missionID, ticketID);\r\n await Promise.all(\r\n affectations.map(async (affectation) => {\r\n const deleted = await this.API.__proto__.UpdateAffectation({\r\n id: affectation.id,\r\n deletedAt: Date.now(),\r\n });\r\n console.log(\"soft deleted affectation\", deleted);\r\n }),\r\n );\r\n return affectations;\r\n }\r\n\r\n async getAffecationsForTicketForMission(\r\n ticketID: string,\r\n missionID: string,\r\n ): Promise<Affectation[]> {\r\n return this.API.__proto__.AffectationsByMissionByTicket(missionID, {\r\n eq: ticketID,\r\n }).then((resposne) => resposne.items);\r\n }\r\n\r\n async softDeleteAffectationByID(\r\n affectationID: string,\r\n ): Promise<Affectation> {\r\n return this.API.__proto__.UpdateAffectation({\r\n id: affectationID,\r\n deletedAt: Date.now(),\r\n });\r\n }\r\n\r\n async createAffectation(input: Affectation): Promise<Affectation> {\r\n return this.API.__proto__.CreateAffectation(input);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { debounceTime, first } from \"rxjs/operators\";\r\nimport { Zone } from \"../types.service\"\r\nimport { MatterportService } from \"./matterport.service\";\r\nimport { ZoneService } from \"./models/zone.service\";\r\nimport { BaseUserService } from \"./user.service\";\r\nimport { ViewerService } from \"./viewer.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class NavigatorService {\r\n\r\n currentSweep: string | null;\r\n\r\n targetSweep: string | null;\r\n\r\n targetRotation: { x: number; y: number } | null;\r\n\r\n currentModel3D: string | null;\r\n\r\n currentSpaceID: string | null;\r\n\r\n currentZone: Zone | null;\r\n\r\n visitLastPosition: Map<string, { sweep: string; rotation: any }> =\r\n new Map();\r\n\r\n floorToGo: Zone | null;\r\n\r\n locationIDChange: Subject<string | null> = new Subject();\r\n\r\n zoneChange: Subject<Zone | null> = new Subject();\r\n\r\n navBarZoneIDChange: Subject<string | null> = new Subject();\r\n\r\n isVisibleChanged = new Subject<boolean>();\r\n\r\n currentNavBarLocationID: string;\r\n\r\n currentNavBarZoneID: string;\r\n\r\n zonesSortedForCurrentSweep: Zone[] | null;\r\n\r\n zonesForUserChange: Subject<Zone[] | null> = new Subject();\r\n\r\n zonesForUserForSpace: Zone[] | null;\r\n\r\n queueSweeps: string[] = [];\r\n\r\n constructor(\r\n private matterportService: MatterportService,\r\n private viewerService: ViewerService,\r\n private zoneService: ZoneService,\r\n private userService: BaseUserService,\r\n ) {\r\n this.matterportService.currentSweep\r\n .pipe(first()) // take first in order not to wait 2 sec an first load\r\n .subscribe((sweep: string) => {\r\n this.currentSweep = sweep;\r\n if (this.zonesForUserForSpace) {\r\n this.setZonesForCurrentSweep();\r\n }\r\n });\r\n this.matterportService.currentSweep\r\n .pipe(debounceTime<string>(2000)) // delays values emitted and return only the latest\r\n .subscribe((sweep: string) => {\r\n this.currentSweep = sweep;\r\n if (this.zonesForUserForSpace) {\r\n this.setZonesForCurrentSweep();\r\n }\r\n });\r\n this.viewerService.viewerIsOn.pipe().subscribe(\r\n (data: {\r\n spaceID: string | null;\r\n model3D: string | null;\r\n sweep: string | null;\r\n rotation: { x: number; y: number } | null;\r\n }) => {\r\n if (this.currentSpaceID !== data.spaceID) {\r\n this.currentSpaceID = data.spaceID;\r\n }\r\n if (!data.spaceID) {\r\n this.zonesForUserForSpace = null;\r\n this.zonesSortedForCurrentSweep = null;\r\n this.currentZone = null;\r\n this.zoneChange.next(null);\r\n this.currentSweep = null;\r\n // save last position\r\n const lastPose = this.matterportService.poseCamera;\r\n if (lastPose && this.currentModel3D && this.userService.cu) {\r\n this.visitLastPosition.set(this.currentModel3D, {\r\n sweep: lastPose.sweep,\r\n rotation: lastPose.rotation,\r\n });\r\n }\r\n this.currentModel3D = data.model3D;\r\n } else {\r\n this.currentModel3D = data.model3D;\r\n this.targetSweep = data.sweep;\r\n this.targetRotation = data.rotation;\r\n this.onViewerLoaded();\r\n }\r\n },\r\n );\r\n this.userService.isChanged.subscribe((isConnected) => {\r\n if (!isConnected) {\r\n // user disconnected, clean Map\r\n this.visitLastPosition = new Map();\r\n }\r\n })\r\n }\r\n\r\n getLastPositionForModel(model3D: string) {\r\n return this.visitLastPosition.get(model3D);\r\n }\r\n\r\n goToSweepWithRotation(\r\n sweep: string,\r\n rotation: { x: number; y: number } | null = null,\r\n ) {\r\n this.matterportService.action_go_to_sweep(sweep, rotation);\r\n }\r\n\r\n goToFloor(floor: Zone) {\r\n let matterportFloorSequence = null;\r\n if (floor.metadata) {\r\n const metadata = JSON.parse(floor.metadata);\r\n if (metadata.matterportFloorSequence !== undefined) {\r\n matterportFloorSequence = metadata.matterportFloorSequence;\r\n }\r\n }\r\n this.matterportService.action_go_to_floor(floor.name, matterportFloorSequence);\r\n }\r\n\r\n async onViewerLoaded() {\r\n let sweepToGo: string | null = null\r\n let rotation: { x: number; y: number } | null = null;\r\n if (this.targetSweep) {\r\n sweepToGo = this.targetSweep;\r\n rotation = this.targetRotation\r\n ? this.targetRotation\r\n : this.checkRotationForSweep(this.targetSweep);\r\n } else {\r\n const lastPostion = this.getLastPositionForModel(\r\n this.currentModel3D!,\r\n );\r\n if (lastPostion) {\r\n sweepToGo = lastPostion.sweep;\r\n rotation = lastPostion.rotation;\r\n }\r\n }\r\n if (this.targetRotation) {\r\n rotation = this.targetRotation;\r\n }\r\n if (sweepToGo && !this.floorToGo) {\r\n // console.log(\"go to sweep\", sweepToGo);\r\n this.goToSweepWithRotation(sweepToGo, rotation);\r\n }\r\n if (this.floorToGo) {\r\n this.goToFloor(this.floorToGo);\r\n this.floorToGo = null;\r\n }\r\n // if first load and zones are not set\r\n this.zonesForUserForSpace =\r\n await this.zoneService.getZonesBySpaceForUser(this.currentSpaceID!);\r\n this.setZonesForCurrentSweep();\r\n }\r\n\r\n checkRotationForSweep(sweep: string): { x: number; y: number } | null {\r\n const lastPosition = this.visitLastPosition.get(this.currentModel3D!);\r\n if (lastPosition && lastPosition.sweep === sweep) {\r\n return lastPosition.rotation;\r\n }\r\n return null;\r\n }\r\n\r\n setZonesForCurrentSweep() {\r\n if (!this.currentSweep) {\r\n return\r\n }\r\n const zonesForSweep = this.zonesForUserForSpace?.filter(\r\n (zone) =>\r\n zone.sweepIDs && zone.sweepIDs.includes(this.currentSweep!)\r\n );\r\n if (zonesForSweep && zonesForSweep.length > 0) { \r\n this.zonesSortedForCurrentSweep = zonesForSweep.sort((a, b) => {\r\n if (a.sweepIDs!.length === b.sweepIDs!.length) {\r\n // if the same amount of sweeps: floor == the whole space\r\n if (a.layer && b.layer) {\r\n // put type BUILDING at the end\r\n return a.layer.name !== \"BUILDING\"\r\n ? -1\r\n : b.layer.name !== \"BUILDING\"\r\n ? 1\r\n : 0;\r\n }\r\n return a.parent?.sweepIDs ? -1 : b.parent?.sweepIDs ? 1 : 0;\r\n }\r\n return a.sweepIDs!.length - b.sweepIDs!.length;\r\n });\r\n this.zonesForUserChange.next(this.zonesSortedForCurrentSweep);\r\n\r\n if (\r\n this.zonesSortedForCurrentSweep.length > 0 &&\r\n this.currentZone !== this.zonesSortedForCurrentSweep[0]\r\n ) {\r\n [this.currentZone] = this.zonesSortedForCurrentSweep;\r\n this.zoneChange.next(this.currentZone);\r\n }\r\n }\r\n \r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Event, EventStatus, EventType, Prestataire, ProfileEntity, RequestIntervention, Ticket } from \"../types.service\";\r\nimport { EventService } from \"./models/event.service\";\r\nimport { MissionService } from \"./models/mission.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class InterventionService {\r\n interventionEventTypes = [\r\n EventType.NON_CONTRACTUAL_INTERVENTION,\r\n EventType.CONTRACTUAL_INTERVENTION,\r\n EventType.REPORTING,\r\n EventType.REQUEST_FOR_INTERVENTION,\r\n ];\r\n\r\n constructor(\r\n private eventService: EventService,\r\n private missionService: MissionService,\r\n ) {}\r\n\r\n async getRequestInterventionFromTicket(\r\n ticket: Ticket,\r\n ): Promise<RequestIntervention> {\r\n const events =\r\n await this.eventService.getEventsByTicketIDSortedByDateDesc(\r\n ticket.id,\r\n );\r\n const relatedEvents = events.filter((event_) =>\r\n this.interventionEventTypes.includes(event_.type),\r\n );\r\n const allRequests = relatedEvents.filter(\r\n (event_) => event_.type === EventType.REQUEST_FOR_INTERVENTION,\r\n );\r\n if (allRequests.length > 0) {\r\n const mostRecent = allRequests[0];\r\n\r\n const composedRequest =\r\n this.eventToRequestIntervention(mostRecent);\r\n\r\n if (composedRequest.status === EventStatus.CANCELLED) {\r\n return composedRequest;\r\n }\r\n\r\n let eventsForMostRecentRequest = relatedEvents.filter(\r\n (event) => event.group === composedRequest.id,\r\n );\r\n let intervention;\r\n if (eventsForMostRecentRequest.length === 0) {\r\n // back compatibility\r\n eventsForMostRecentRequest = relatedEvents;\r\n // get intervention\r\n intervention = this.composeInterventionForRequest(\r\n relatedEvents,\r\n null,\r\n );\r\n // set duration\r\n composedRequest.realDuration =\r\n this.getDurationForRequest(\r\n relatedEvents,\r\n null,\r\n );\r\n } else {\r\n intervention = this.composeInterventionForRequest(\r\n eventsForMostRecentRequest,\r\n composedRequest.id,\r\n );\r\n composedRequest.realDuration =\r\n this.getDurationForRequest(\r\n eventsForMostRecentRequest,\r\n composedRequest.id,\r\n );\r\n }\r\n\r\n if (!composedRequest.estimateStartDate) {\r\n composedRequest.estimateStartDate =\r\n this.getMostRecentEstimateStartDate(\r\n eventsForMostRecentRequest,\r\n );\r\n }\r\n composedRequest.realStartDate =\r\n this.getEarliestRealStartDateForRequest(\r\n relatedEvents,\r\n composedRequest.id,\r\n );\r\n if (!composedRequest.estimateEndDate) {\r\n composedRequest.estimateEndDate =\r\n this.getMostRecentEstimateEndDate(\r\n eventsForMostRecentRequest,\r\n );\r\n }\r\n composedRequest.realEndDate =\r\n this.getLatestRealEndDateForRequest(\r\n relatedEvents,\r\n composedRequest.id,\r\n );\r\n\r\n composedRequest.intervention = intervention;\r\n return composedRequest;\r\n }\r\n return null;\r\n }\r\n\r\n composeInterventionForRequest(\r\n relatedEvents: Event[],\r\n requestID: string,\r\n ): Event {\r\n const interventions = requestID\r\n ? relatedEvents.filter(\r\n (event_) =>\r\n (event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.CONTRACTUAL_INTERVENTION) &&\r\n event_.group === requestID,\r\n )\r\n : relatedEvents.filter(\r\n (event_) =>\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.CONTRACTUAL_INTERVENTION,\r\n );\r\n\r\n if (interventions.length > 0) {\r\n const lastIntervention = interventions[0];\r\n return lastIntervention;\r\n }\r\n return null;\r\n }\r\n\r\n async getPrestataireForTicket(ticket: Ticket): Promise<Prestataire> {\r\n if (ticket.assignees.items.length > 0) {\r\n const sortedAffectations = ticket.assignees.items.sort(\r\n (a, b) =>\r\n // @ts-ignore\r\n // eslint-disable-next-line prettier/prettier\r\n new Date(b.createdAt) - new Date(a.createdAt),\r\n );\r\n const missionIDpresta = sortedAffectations[0].missionID;\r\n const prestaMission = await this.missionService.getMission(\r\n missionIDpresta,\r\n );\r\n const userPrestataire = new ProfileEntity(prestaMission.user);\r\n const prestataire = {\r\n organisation: prestaMission.organisation,\r\n mission: prestaMission,\r\n profile: userPrestataire,\r\n name: userPrestataire.displayName,\r\n };\r\n return prestataire;\r\n }\r\n return null;\r\n }\r\n\r\n getEarliestRealStartDateForRequest(\r\n events: Event[],\r\n requestID: string,\r\n ): number | null {\r\n let date = null;\r\n const interventions = events.filter(\r\n (event_) =>\r\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION) &&\r\n event_.group === requestID,\r\n );\r\n const sortedInterventions =\r\n this.eventService.sortEventsByCreatedAtDateAsc(interventions);\r\n if (sortedInterventions.length > 0) {\r\n for (const event of sortedInterventions) {\r\n if (event.realStartDate) {\r\n date = event.realStartDate;\r\n break;\r\n }\r\n }\r\n }\r\n return date;\r\n }\r\n\r\n getLatestRealEndDateForRequest(\r\n events: Event[],\r\n requestID: string,\r\n ): number | null {\r\n let date = null;\r\n const interventions = events.filter(\r\n (event_) =>\r\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION) &&\r\n event_.group === requestID,\r\n );\r\n const sortedInterventions =\r\n this.eventService.sortEventsByCreatedAtDateDesc(interventions);\r\n if (sortedInterventions.length > 0) {\r\n for (const event of sortedInterventions) {\r\n if (event.realEndDate) {\r\n date = event.realEndDate;\r\n break;\r\n }\r\n }\r\n }\r\n return date;\r\n }\r\n\r\n getDurationForRequest(events: Event[], requestID: string): number {\r\n let duration = 0; // in miliseconds\r\n const interventions = requestID\r\n ? events.filter(\r\n (event_) =>\r\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\r\n event_.type ===\r\n EventType.NON_CONTRACTUAL_INTERVENTION) &&\r\n event_.group === requestID,\r\n )\r\n : events.filter(\r\n (event_) =>\r\n event_.type === EventType.CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION,\r\n );\r\n for (const event of interventions) {\r\n if (event.timeSpent) {\r\n duration += event.timeSpent;\r\n }\r\n }\r\n return duration;\r\n }\r\n\r\n getIntervention(events): Event | null {\r\n const interventions = events.filter(\r\n (event_) =>\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.CONTRACTUAL_INTERVENTION,\r\n );\r\n if (interventions.length > 0) {\r\n const lastIntervention = interventions[0];\r\n return lastIntervention;\r\n }\r\n return null;\r\n }\r\n\r\n eventToRequestIntervention(event: Event): RequestIntervention {\r\n const request = {\r\n id: event.group === \"default\" ? event.id : event.group,\r\n realEndDate: event.realEndDate,\r\n realStartDate: event.realStartDate,\r\n estimateStartDate: event.estimateStartDate,\r\n estimateEndDate: event.estimateEndDate,\r\n realDuration: event.timeSpent,\r\n type: event.type,\r\n status: event.status,\r\n createdAt: event.createdAt,\r\n updatedAt: event.updatedAt,\r\n ticketID: event.ticketID,\r\n } as RequestIntervention;\r\n return request;\r\n }\r\n\r\n getMostRecentTimeSpent(events: Event[]): number | null {\r\n let timeSpent = null;\r\n const sortedEvents = this.getAllEventsAfterLastCreated(events);\r\n for (const event_ of sortedEvents) {\r\n if (event_.timeSpent) {\r\n timeSpent = event_.timeSpent;\r\n break;\r\n }\r\n }\r\n return timeSpent;\r\n }\r\n\r\n getAllEventsAfterLastCreated(events: Event[]): Event[] {\r\n const eventsAfter: Event[] = [];\r\n const currentIntervention = this.getCurrentIntevention(events);\r\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\r\n if (sortedEvents.length > 0 && currentIntervention) {\r\n for (const event_ of sortedEvents) {\r\n eventsAfter.push(event_);\r\n if (event_.id === currentIntervention.id) {\r\n break;\r\n }\r\n }\r\n }\r\n return eventsAfter;\r\n }\r\n\r\n getCurrentIntevention(events: Event[]): Event {\r\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\r\n let currentIntervention;\r\n for (const event_ of sortedEvents) {\r\n if (event_.status === EventStatus.CREATED) {\r\n currentIntervention = event_;\r\n }\r\n if (event_.status !== EventStatus.CREATED && currentIntervention) {\r\n break;\r\n }\r\n }\r\n return currentIntervention;\r\n }\r\n\r\n getMostRecentEstimateStartDate(events: Event[]): number | null {\r\n let estimateStartDate = null;\r\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\r\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\r\n for (const event_ of sortedEvents) {\r\n if (event_.estimateStartDate) {\r\n estimateStartDate = event_.estimateStartDate;\r\n break;\r\n }\r\n }\r\n return estimateStartDate;\r\n }\r\n\r\n getMostRecentEstimateEndDate(events: Event[]): number | null {\r\n let date = null;\r\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\r\n for (const event_ of sortedEvents) {\r\n if (event_.estimateEndDate) {\r\n date = event_.estimateEndDate;\r\n break;\r\n }\r\n }\r\n return date;\r\n }\r\n\r\n // getMostRecentRealStartDate(events: Event[]): number | null {\r\n // let date = null;\r\n // // const sortedEvents = this.sortEventsByCreatedAtDateDesc(events);\r\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\r\n // for (const event_ of sortedEvents) {\r\n // if (event_.realStartDate) {\r\n // date = event_.realStartDate;\r\n // break;\r\n // }\r\n // }\r\n // return date;\r\n // }\r\n\r\n // getMostRecentRealStartDateGlobal(events: Event[]): number | null {\r\n // let date = null;\r\n // // const sortedEvents = this.sortEventsByCreatedAtDateDesc(events);\r\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\r\n // if (sortedEvents.length > 0) {\r\n // for (const event_ of sortedEvents) {\r\n // if (event_.realStartDate) {\r\n // date = event_.realStartDate;\r\n // break;\r\n // }\r\n // }\r\n // }\r\n // return date;\r\n // }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\n/* eslint-disable consistent-return */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { Subject, Subscription } from \"rxjs\";\r\nimport { openModalForVisitSwitch } from \"../../helpers.service\";\r\nimport { MattertagData } from \"../../mattertagData\";\r\nimport { Event, Ticket, TicketType, TicketPriority, TicketStatus, EventStatus, EventType, Affectation, POI, PoiType, IUpdate } from \"../../types.service\";\r\nimport { FilterService } from \"../filter.service\";\r\nimport { NavigatorService } from \"../navigator.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { ViewerService } from \"../viewer.service\";\r\nimport { BaseObjectService } from \"./base-object.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { OperationService } from \"./operation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\nimport InformationIcon from \"@iconify-icons/mdi/information-outline\";\r\nimport AccidentIcon from \"@iconify-icons/mdi/alert\";\r\nimport WordOrderIcon from \"@iconify-icons/mdi/account-hard-hat\";\r\nimport ReportingIcon from \"@iconify-icons/mdi/file-document-outline\";\r\nimport MaintenanceIcon from \"@iconify-icons/mdi/tools\";\r\nimport { EventService } from \"./event.service\";\r\nimport { InterventionService } from \"../intervention.service\";\r\nimport { AffectationService } from \"./affectation.service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class TicketsService extends BaseObjectService {\r\n currentTickets: { zone: Ticket[]; space: Ticket[] } = {\r\n zone: [],\r\n space: [],\r\n };\r\n\r\n ticketTags: Subject<Ticket[]> = new Subject();\r\n\r\n ticketsFiltered: Ticket[] = [];\r\n\r\n ticketsUpdated: Subject<{\r\n zone: Ticket[];\r\n space: Ticket[];\r\n }> = new Subject();\r\n\r\n currentSpaceID: string;\r\n\r\n zoneIDFilter: string;\r\n\r\n dateFilter: Date[];\r\n\r\n ticketTypeFilter: TicketType[];\r\n\r\n reportingIcon = ReportingIcon;\r\n\r\n maintenanceIcon = MaintenanceIcon;\r\n\r\n workorderIcon = WordOrderIcon;\r\n\r\n informationIcon = InformationIcon;\r\n\r\n accidentIcon = AccidentIcon;\r\n\r\n updateDone: Subject<boolean> = new Subject();\r\n\r\n updating: Subject<boolean> = new Subject();\r\n\r\n API: any;\r\n\r\n isMuseumUser = false;\r\n\r\n navSubscription: Subscription;\r\n\r\n filetrSubscription: Subscription;\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any,\r\n private operationService: OperationService,\r\n private eventService: EventService,\r\n private affectationService: AffectationService,\r\n poiService: PoiService,\r\n private userService: BaseUserService,\r\n private navigatorService: NavigatorService,\r\n private filterService: FilterService,\r\n private interventionService: InterventionService,\r\n navigationService: NavigationService,\r\n private viewerService: ViewerService,\r\n private modalService: NgbModal,\r\n ) {\r\n super(poiService, navigationService);\r\n this.API = apiInjected;\r\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n this.initSubscriptions();\r\n this.userService.isChanged.subscribe((isConnected) => {\r\n if (isConnected) {\r\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n this.initSubscriptions();\r\n } else {\r\n if (this.navSubscription) {\r\n this.navSubscription.unsubscribe();\r\n this.filetrSubscription.unsubscribe();\r\n }\r\n }\r\n });\r\n }\r\n\r\n async initTickets() {\r\n let ticketsFiltered = [];\r\n if (this.currentSpaceID) {\r\n this.updating.next(true);\r\n await this.getTicketsBySpace(this.currentSpaceID).then(\r\n (tickets) => {\r\n if (tickets) {\r\n ticketsFiltered = tickets;\r\n }\r\n },\r\n );\r\n ticketsFiltered =\r\n await this.filterService.filterTicketsForCurrentUserInSpace(\r\n ticketsFiltered,\r\n this.currentSpaceID,\r\n );\r\n if (this.dateFilter) {\r\n ticketsFiltered = this.filterService.filterObjectsForDateRange(\r\n ticketsFiltered,\r\n this.dateFilter,\r\n );\r\n }\r\n if (this.ticketTypeFilter) {\r\n ticketsFiltered = ticketsFiltered.filter((ticket) =>\r\n this.ticketTypeFilter.includes(ticket.type),\r\n );\r\n }\r\n this.currentTickets.space = ticketsFiltered;\r\n this.ticketTags.next(ticketsFiltered); // tags without zone filter\r\n\r\n if (this.zoneIDFilter) {\r\n ticketsFiltered = await this.filterService.filterObjectsForZone(\r\n ticketsFiltered,\r\n this.zoneIDFilter,\r\n );\r\n }\r\n this.currentTickets.zone = ticketsFiltered;\r\n this.ticketsUpdated.next(this.currentTickets);\r\n this.updating.next(false);\r\n } else {\r\n this.ticketTags.next(null);\r\n }\r\n }\r\n\r\n async adaptTicket(ticket: Ticket): Promise<Ticket> {\r\n if (ticket.comments.items.length > 0) {\r\n ticket.comments.items.sort((a, b) => {\r\n // @ts-ignore\r\n return new Date(b.createdAt) - new Date(a.createdAt);\r\n });\r\n }\r\n\r\n if (ticket.events.items.length > 0) {\r\n // Sort events by date\r\n ticket.events.items.sort((event1, event2) => {\r\n // @ts-ignore\r\n return new Date(event2.createdAt) - new Date(event1.createdAt);\r\n });\r\n }\r\n ticket.prestataire =\r\n await this.interventionService.getPrestataireForTicket(ticket);\r\n return ticket;\r\n }\r\n\r\n getPriorityColor(ticket: Ticket): string {\r\n switch (ticket.priority) {\r\n case TicketPriority.MAXIMUM:\r\n return \"crimson\";\r\n case TicketPriority.HIGH:\r\n return \"red\";\r\n case TicketPriority.MEDIUM:\r\n return \"orange\";\r\n case TicketPriority.LOW:\r\n return \"green\";\r\n case TicketPriority.MINIMUM:\r\n return \"blue\";\r\n default:\r\n return \"blue\";\r\n }\r\n }\r\n\r\n getStatusColor(ticket: Ticket): string {\r\n switch (ticket.status) {\r\n case TicketStatus.TO_BE_PROCESSED:\r\n return \"#B0B0B1\";\r\n case TicketStatus.PLANNED:\r\n return \"#EBDF27\";\r\n case TicketStatus.IN_PROGRESS:\r\n return \"#EBDF27\";\r\n case TicketStatus.WAITING_FOR_VALIDATION:\r\n return \"#EBDF27\";\r\n case TicketStatus.VALIDATED:\r\n return \"#BCE2E5\";\r\n case TicketStatus.REJECTED:\r\n return \"#e84c35\";\r\n case TicketStatus.RESOLVED:\r\n return \"#BCE2E5\";\r\n case TicketStatus.ARCHIVED:\r\n return \"#B0B0B1\";\r\n case TicketStatus.LATE:\r\n return \"#e84c35\";\r\n case TicketStatus.BLOCKED:\r\n return \"#e84c35\";\r\n case TicketStatus.COMPLETED:\r\n return \"#388659\";\r\n case TicketStatus.DELAYED:\r\n return \"#DB7543\";\r\n case TicketStatus.CANCELLED:\r\n return \"#e84c35\";\r\n case TicketStatus.TO_REDO:\r\n return \"#DB7543\";\r\n case TicketStatus.CREATED:\r\n return \"#B0B0B1\";\r\n default:\r\n return \"#BCE2E5\";\r\n }\r\n }\r\n\r\n getTicketPriorityNumber(t): number {\r\n return t.priority === TicketPriority.MINIMUM\r\n ? -1\r\n : t.priority === TicketPriority.LOW\r\n ? 0\r\n : t.priority === TicketPriority.MEDIUM\r\n ? 1\r\n : t.priority === TicketPriority.HIGH\r\n ? 2\r\n : t.priority === TicketPriority.MAXIMUM\r\n ? 3\r\n : -1;\r\n }\r\n\r\n getTicketIcon(type: TicketType): any {\r\n // const typeIcon : TicketType = ticket.type;\r\n switch (type) {\r\n case TicketType.REPORTING:\r\n return this.reportingIcon;\r\n case TicketType.REQUEST_FOR_INTERVENTION:\r\n return this.maintenanceIcon;\r\n case TicketType.REQUEST_FOR_MAINTENANCE:\r\n return this.maintenanceIcon;\r\n case TicketType.WORK_ORDER:\r\n return this.workorderIcon;\r\n case TicketType.INCIDENT:\r\n return this.accidentIcon;\r\n case TicketType.INFORMATION:\r\n return this.informationIcon;\r\n default:\r\n return this.maintenanceIcon;\r\n }\r\n }\r\n\r\n async addEventToTicket(ticket: Ticket, event: Event): Promise<Event> {\r\n const currentMission = this.userService.currentMission(ticket.spaceID);\r\n event.group = event.group ? event.group : \"default\";\r\n event.ticketID = event.ticketID ? event.ticketID : ticket.id;\r\n event.status = event.status ? event.status : EventStatus.CREATED;\r\n event.type = event.type ? event.type : EventType.TICKET;\r\n event.ownerID = event.ownerID ? event.ownerID : currentMission.id;\r\n try {\r\n const receivedEvent = await this.eventService.createEvent(event);\r\n // console.log('Event successfully created !');\r\n return receivedEvent;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n async addTicket(ticket: Ticket): Promise<Ticket | void> {\r\n ticket.status = TicketStatus.CREATED;\r\n if (!ticket.ownerMissionID) {\r\n ticket.ownerMissionID = this.userService.currentMission(\r\n ticket.spaceID,\r\n ).id;\r\n }\r\n // TODO!!! filter missions by space of ticket\r\n try {\r\n const receivedTicket = await this.createTicket(ticket);\r\n // console.log('!!! Response from creating ticket :');\r\n // console.log(receivedTicket);\r\n this.addEventToTicket(receivedTicket, {\r\n title: \"Création du ticket\",\r\n description: `Ticket créé par -`,\r\n translationPath: \"ticketEvent.ticket.created\",\r\n });\r\n this.updateDone.next(true);\r\n return receivedTicket; // instead of true\r\n } catch (error) {\r\n console.log(\"Ticket creation FAILED\");\r\n console.log(JSON.stringify(error));\r\n }\r\n }\r\n\r\n async updateTicketWithEvent(\r\n ticket: IUpdate & Partial<Ticket>,\r\n event?: Event,\r\n ): Promise<Ticket> {\r\n const receivedTicket = await this.updateTicket(ticket);\r\n if (receivedTicket) {\r\n console.log(\"Updated ticket :\");\r\n console.log(receivedTicket);\r\n if (event) {\r\n await this.addEventToTicket(receivedTicket, event);\r\n }\r\n this.updateDone.next(true);\r\n }\r\n return receivedTicket;\r\n }\r\n\r\n async removeAssigneeFromTicket(\r\n ticket: Ticket,\r\n assignee: Affectation,\r\n ): Promise<Ticket> {\r\n try {\r\n const affectation =\r\n await this.affectationService.softDeleteAffectationByID(\r\n assignee.id,\r\n );\r\n if (!affectation) {\r\n console.warn(\r\n `removeAssigneeFromTicket(${ticket.id}, ${assignee.id}) failed`,\r\n );\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n return ticket;\r\n }\r\n\r\n async updateTicketLocation(\r\n ticket: Ticket,\r\n tagData: MattertagData\r\n ): Promise<POI> {\r\n const poiInput = {\r\n coordinate: tagData.getCoordinateString(),\r\n type: PoiType.TICKET,\r\n elementID: ticket.id,\r\n metadata: tagData.getMetadataString(),\r\n matterportSweepID: tagData.getSweepID(),\r\n } as POI;\r\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\r\n await this.addEventToTicket(ticket, {\r\n title: \"Changement position du ticket\",\r\n description: \"Le point d'intérêt du ticket a été modifié\",\r\n status: EventStatus.POSITION_SET,\r\n translationPath: \"ticketEvent.position.set\",\r\n });\r\n return poi;\r\n }\r\n\r\n async updateStatusOfTicket(\r\n ticket: Ticket,\r\n status: TicketStatus,\r\n ): Promise<any> {\r\n const currentStatus = ticket.status;\r\n const oldTicketStatus = ticket.status;\r\n ticket.status = status;\r\n if (currentStatus === status) {\r\n return ticket;\r\n }\r\n console.log(\"Updating status\");\r\n return this.updateTicket({\r\n id: ticket.id,\r\n status,\r\n });\r\n }\r\n\r\n async updateTypeOfTicket(ticket: Ticket, type: TicketType): Promise<any> {\r\n const previousType = ticket.type;\r\n ticket.type = type;\r\n await this.updateTicketWithEvent(\r\n { id: ticket.id, type: ticket.type },\r\n {\r\n title: \"Type changé\",\r\n description: `Changement de ${previousType} vers ${ticket.type}`,\r\n metadata: JSON.stringify({ type: ticket.type }),\r\n translationPath: \"ticketEvent.ticket.type\",\r\n },\r\n );\r\n return ticket;\r\n }\r\n\r\n async getTicketsForUserForSpace(spaceID: string): Promise<Ticket[]> {\r\n const ticketsSpace = await this.getTicketsBySpace(spaceID);\r\n return this.filterService.filterTicketsForCurrentUserInSpace(\r\n ticketsSpace,\r\n spaceID,\r\n );\r\n }\r\n\r\n\r\n /** Basic CRUD operations */\r\n async readTicket(id: string) {\r\n return this.API.__proto__.GetTicket(id);\r\n }\r\n\r\n async createTicket(input: Ticket): Promise<Ticket> {\r\n return this.API.__proto__.CreateTicket(input);\r\n }\r\n\r\n async updateTicket(input: IUpdate & Partial<Ticket>): Promise<Ticket> {\r\n return this.API.__proto__.UpdateTicket(input);\r\n }\r\n\r\n async deleteTicket(ticket: Ticket): Promise<Ticket> {\r\n const deleted = await this.API.__proto__.DeleteTicket({ id: ticket.id });\r\n\r\n // delete POI\r\n const poi = await this.poiService.getPoiByElementId(ticket.id);\r\n if (poi) {\r\n this.poiService.deletePoi(poi.id);\r\n }\r\n\r\n // clean parentID\r\n if (ticket.children.items.length > 0) {\r\n ticket.children.items.map(async (childTicket) => {\r\n try {\r\n await this.API.__proto__.UpdateTicket({\r\n id: childTicket.id,\r\n parentID: null,\r\n });\r\n } catch {\r\n console.warn(\"Could not update ticket\", childTicket.id);\r\n }\r\n\r\n await this.API.__proto__.CreateEvent({\r\n title: \"Ticket parent supprimé\",\r\n ticketID: childTicket.id,\r\n description: `Ticket \\\"$ticket.title}\\\" a été supprimé`,\r\n });\r\n });\r\n }\r\n // delete events\r\n await Promise.all(\r\n ticket.events.items.map(async (event_) => {\r\n await this.API.__proto__.DeleteEvent({ id: event_.id });\r\n }),\r\n );\r\n // delete affectationns\r\n if (ticket.assignees.items.length > 0) {\r\n for (const element of ticket.assignees.items) {\r\n this.API.__proto__.DeleteAffectation({ id: element.id });\r\n }\r\n }\r\n // delete comments\r\n await Promise.all(\r\n ticket.comments.items.map(async (comment) => {\r\n await this.API.__proto__.DeleteComment({ id: comment.id });\r\n }),\r\n );\r\n await this.operationService.deleteOperationsForTicket(ticket.id);\r\n return deleted;\r\n }\r\n\r\n /** Custom requests */\r\n async getTicketsBySpace(spaceID: string): Promise<Ticket[]> {\r\n return this.API.__proto__.TicketsBySpace(spaceID).then(\r\n (tickets) => tickets.items,\r\n );\r\n }\r\n\r\n async updateIconForAllTicketsInSpace(\r\n tagIcon: string,\r\n spaceID: string,\r\n ): Promise<{ tickets: Ticket[]; pois: POI[] }> {\r\n const tickets = await this.getTicketsBySpace(spaceID);\r\n const pois = await this.updateIconForAllObjects(tickets, tagIcon);\r\n return { tickets, pois };\r\n }\r\n\r\n /** Archive related */\r\n /** Return true if the current user has archived this ticket */\r\n isArchived(ticket: Ticket): boolean {\r\n return ticket.archivedForMissionID\r\n ? ticket.archivedForMissionID.includes(\r\n this.userService.currentMission(ticket.spaceID).id,\r\n )\r\n : false;\r\n }\r\n\r\n setArchived(ticket: Ticket, archived: boolean) {\r\n let archivedList = ticket.archivedForMissionID\r\n ? ticket.archivedForMissionID\r\n : [];\r\n const missionID = this.userService.currentMission(ticket.spaceID).id;\r\n\r\n archivedList = archivedList.filter((m) => m !== missionID);\r\n\r\n if (archived) {\r\n archivedList.push(missionID);\r\n }\r\n\r\n return this.updateTicketWithEvent({\r\n id: ticket.id,\r\n archivedForMissionID: archivedList,\r\n });\r\n }\r\n\r\n async navigateToTicketIn3D(\r\n ticket: Ticket,\r\n forceSwitchVisit: boolean = false,\r\n ) {\r\n let url = `visit/${ticket.spaceID}`;\r\n if (forceSwitchVisit) {\r\n url += `/detail/${ticket.id}`;\r\n }\r\n const canGoToTag = await this.viewerService.action_move_to_tag(\r\n `${ticket.id}`,\r\n );\r\n if (canGoToTag) {\r\n return;\r\n }\r\n const result = await this.getModel3dAndSweep(ticket);\r\n if (!result || !result.model3D) {\r\n alert(\"Error while getting virtual visit model\");\r\n return;\r\n }\r\n if (!forceSwitchVisit) {\r\n /** Si on ne force pas la visite, on demande si on veut etre switch */\r\n openModalForVisitSwitch(\r\n this.modalService,\r\n result.model3D,\r\n ticket.spaceID,\r\n { sweepToMove: result.sweep, rotation: result.rotation },\r\n );\r\n } else {\r\n /** Si on force le switch de la visit */\r\n window.open(\r\n `${url}?model3D=${result.model3D}&sweep=true`,\r\n \"_blank\",\r\n );\r\n }\r\n }\r\n\r\n initSubscriptions() {\r\n if (!this.isMuseumUser) {\r\n this.navSubscription = this.navigatorService.zoneChange.subscribe((zone) => {\r\n this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n if (!this.currentSpaceID) {\r\n this.ticketTags.next(null);\r\n this.ticketsUpdated.next({ space: [], zone: null });\r\n this.ticketTypeFilter = null;\r\n this.zoneIDFilter = null;\r\n } else if (zone.id !== this.zoneIDFilter) {\r\n this.zoneIDFilter = zone.id;\r\n // console.log(\"going to init tickets from zone\");\r\n this.initTickets();\r\n }\r\n });\r\n this.filetrSubscription = this.filterService.subscribeToDataFilterUpdate((dateRange) => {\r\n this.dateFilter = dateRange;\r\n this.initTickets();\r\n });\r\n this.dateFilter = this.filterService.currentDateFilter;\r\n this.updateDone.subscribe(() => {\r\n if (this.currentSpaceID) {\r\n this.initTickets();\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable, Inject } from \"@angular/core\";\r\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { Subject } from \"rxjs\";\r\nimport { openModalForVisitSwitch, removeNullKeysFromObject } from \"../../helpers.service\";\r\nimport { MattertagData } from \"../../mattertagData\";\r\nimport { Note, Zone, Equipment, EquipmentDocument, Ticket, TypeNote, Mission, EventStatus, EventType, Operation, POI, PoiType, RoleStatus } from \"../../types.service\";\r\nimport { FilterService } from \"../filter.service\";\r\nimport { NavigatorService } from \"../navigator.service\";\r\nimport { deleteFromS3, getSignedFile, getSignedImageUrlForEquipment, uploadFileToS3 } from \"../s3.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { ViewerService } from \"../viewer.service\";\r\nimport { BaseObjectService } from \"./base-object.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { OperationService } from \"./operation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\nimport { TicketsService } from \"./ticket.service\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class EquipmentService extends BaseObjectService {\r\n private prefix = {\r\n technical: \"equipments/note/technical/\",\r\n image: \"equipments/note/image/\",\r\n financial: \"equipments/note/financial/\",\r\n information: \"equipments/note/information/\",\r\n other: \"equipments/note/other/\",\r\n contractual: \"equipments/note/contractual\",\r\n };\r\n\r\n equipmentsUpdated: Subject<{\r\n space: Equipment[];\r\n zone: Equipment[];\r\n }> = new Subject();\r\n\r\n currentEquipments: {\r\n space: Equipment[];\r\n zonesMap: Map<string, Equipment[]>;\r\n } = {\r\n space: [],\r\n zonesMap: new Map(),\r\n };\r\n\r\n equipmentsTags: Subject<Equipment[]> = new Subject();\r\n\r\n zoneIDFilter: string;\r\n\r\n currentZone: Zone;\r\n\r\n currentSpaceID: string;\r\n\r\n /** Null means we do not apply a filter, empty array ([]), means we that we hide all equipment */\r\n equipmentDomainFilter: string[] = null;\r\n\r\n updating: Subject<boolean> = new Subject();\r\n\r\n currentlyUpdating = false;\r\n\r\n currentSweep: string;\r\n\r\n deleteObservable: Subject<Equipment> = new Subject();\r\n\r\n createObservable: Subject<Equipment> = new Subject();\r\n\r\n updateObservable: Subject<Equipment> = new Subject();\r\n\r\n API: any; //AWS\r\n\r\n isMuseumUser = false;\r\n\r\n private destroy$ = new Subject();\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any,\r\n poiService: PoiService,\r\n navigationService: NavigationService,\r\n private operationService: OperationService,\r\n private ticketsService: TicketsService,\r\n private navigatorService: NavigatorService,\r\n private filterService: FilterService,\r\n private userService: BaseUserService,\r\n private viewerService: ViewerService,\r\n private modalService: NgbModal,) \r\n {\r\n super(poiService, navigationService);\r\n this.API = apiInjected;\r\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n this.initSubscriptions();\r\n this.userService.isChanged.subscribe((isConnected) => {\r\n if (isConnected) {\r\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n this.initSubscriptions();\r\n } else {\r\n this.unsubscribe();\r\n }\r\n });\r\n }\r\n\r\n async readEquipment(id: string): Promise<Equipment> {\r\n return this.API.__proto__.GetEquipment(id).then(async (receivedEquip) => {\r\n let equip: Equipment;\r\n if (receivedEquip) {\r\n equip = receivedEquip;\r\n equip = await this.getSignedUrlsForEquipment(receivedEquip);\r\n if (equip.domain) {\r\n if (equip.domain.parentID) {\r\n equip.childDomain = equip.domain;\r\n equip.parentDomain = equip.domain.parent;\r\n } else {\r\n equip.parentDomain = equip.domain;\r\n }\r\n }\r\n if (equip.subequipmentsIDs) {\r\n const subEquips = [];\r\n await Promise.all(\r\n equip.subequipmentsIDs.map(async (subId) => {\r\n const subEquip = await this.API.GetEquipment(subId);\r\n subEquips.push(subEquip);\r\n }),\r\n );\r\n equip.subEquipments = subEquips;\r\n }\r\n }\r\n return equip;\r\n });\r\n }\r\n\r\n async createEquipment(\r\n equip: Equipment,\r\n imageFile: File,\r\n documentFile: File,\r\n ): Promise<Equipment | void> {\r\n removeNullKeysFromObject(equip);\r\n return this.API.CreateEquipment(equip).then(\r\n async (receivedEquipment) => {\r\n let equipment = receivedEquipment as Equipment;\r\n if (equipment) {\r\n console.log(\"equipment created:\", equipment);\r\n if (documentFile) {\r\n await this.uploadDoc(\r\n equipment,\r\n documentFile,\r\n TypeNote.TECHNICAL,\r\n );\r\n }\r\n if (imageFile) {\r\n equipment = await this.uploadImage(\r\n equipment,\r\n imageFile,\r\n );\r\n }\r\n }\r\n return equipment;\r\n },\r\n );\r\n }\r\n\r\n async getSignedUrlsForEquipment(equip: Equipment): Promise<Equipment> {\r\n const equipment = { ...equip };\r\n if (equipment.notes.items.length > 0) {\r\n const docs = [];\r\n await Promise.all(\r\n equipment.notes.items.map(async (note) => {\r\n equip.documentationImageUrlSigned = await getSignedImageUrlForEquipment(equipment);\r\n if (note.attachment && note.type !== TypeNote.IMAGE) {\r\n const { length } = note.attachment.split(\"/\");\r\n const filename = note.attachment.split(\"/\")[length - 1];\r\n const attachment = await getSignedFile(note.attachment);\r\n if (attachment) {\r\n docs.push({\r\n filename,\r\n url: note.attachment,\r\n urlSigned: attachment,\r\n noteID: note.id,\r\n } as EquipmentDocument);\r\n }\r\n }\r\n }),\r\n );\r\n equipment.documents = docs;\r\n return equipment;\r\n }\r\n return equipment;\r\n }\r\n\r\n async getEquipmentsForTicket(ticket: Ticket): Promise<Equipment[]> {\r\n const equips = [];\r\n if (ticket.operations.items.length > 0) {\r\n await Promise.all(\r\n ticket.operations.items.map(async (operation) => {\r\n const equipment = await this.readEquipment(\r\n operation.equipmentID,\r\n );\r\n equips.push(equipment);\r\n }),\r\n );\r\n }\r\n return equips;\r\n }\r\n\r\n async getEquipmentsForSpace(spaceID: string): Promise<Equipment[]> {\r\n // split by 100\r\n const limit = 100;\r\n let equipsToken = { equips: [], nextToken: null };\r\n do {\r\n equipsToken =\r\n await this.mergeEquipmentsForSpaceWithNextTokenWithLimit(\r\n spaceID,\r\n limit,\r\n equipsToken,\r\n );\r\n } while (equipsToken.nextToken);\r\n return equipsToken.equips;\r\n }\r\n\r\n async mergeEquipmentsForSpaceWithNextTokenWithLimit(\r\n spaceID: string,\r\n limit: number,\r\n equipsToken: { equips: Equipment[]; nextToken: string | null },\r\n ): Promise<{ equips: Equipment[]; nextToken: string | null }> {\r\n return this.API.__proto__.EquipmentsBySpace(\r\n spaceID,\r\n null,\r\n \"DESC\",\r\n null,\r\n limit,\r\n equipsToken.nextToken, // nextToken\r\n ).then((response) => {\r\n const equipsLimit = response.items;\r\n const equipsObject = {\r\n equips: [...equipsToken.equips, ...equipsLimit],\r\n nextToken: response.nextToken,\r\n };\r\n return equipsObject;\r\n });\r\n }\r\n\r\n async uploadImageForAllEquipments(\r\n equipments: Equipment[],\r\n imageFile: File,\r\n ): Promise<Equipment[]> {\r\n if (equipments.length === 0) {\r\n return [];\r\n }\r\n\r\n return uploadFileToS3(this.prefix.image, imageFile, \"BATCH\").then(\r\n async (url) => {\r\n if (url) {\r\n const equips = [];\r\n for (const equip of equipments) {\r\n const currentMission = this.userService.currentMission(\r\n equip.spaceID,\r\n );\r\n await this.API.__proto__.CreateNote({\r\n attachment: url,\r\n type: TypeNote.IMAGE,\r\n equipmentID: equip.id,\r\n ownerMissionID: currentMission\r\n ? currentMission.id\r\n : null,\r\n });\r\n const update = await this.API.__proto__.UpdateEquipment({\r\n id: equip.id,\r\n photo: url,\r\n });\r\n equips.push(update);\r\n }\r\n return equips;\r\n }\r\n return [];\r\n },\r\n );\r\n }\r\n\r\n async uploadImage(\r\n equipment: Equipment,\r\n imageFile: File,\r\n ): Promise<Equipment> {\r\n const equips = await this.uploadImageForAllEquipments(\r\n [equipment],\r\n imageFile,\r\n );\r\n if (equips.length === 0) {\r\n return null;\r\n }\r\n return equips[0];\r\n }\r\n\r\n async updateEquipment(\r\n equip: any,\r\n file: File = null,\r\n noteType: TypeNote = null,\r\n ): Promise<Equipment> {\r\n removeNullKeysFromObject(equip);\r\n return this.API.__proto__.UpdateEquipment(equip).then(\r\n async (receivedEquipment) => {\r\n let equipment = receivedEquipment as Equipment;\r\n if (equipment) {\r\n console.log(\"equipment updated:\", equipment);\r\n if (noteType) {\r\n switch (noteType) {\r\n case TypeNote.IMAGE:\r\n equipment = await this.uploadImage(\r\n equipment,\r\n file,\r\n );\r\n break;\r\n default:\r\n await this.uploadDoc(equipment, file, noteType);\r\n break;\r\n }\r\n }\r\n }\r\n return equipment;\r\n },\r\n );\r\n }\r\n\r\n getPrefixDoc(type: TypeNote) {\r\n let prefix;\r\n switch (type) {\r\n case TypeNote.INFORMATION:\r\n prefix = this.prefix.information;\r\n break;\r\n case TypeNote.FINANCIAL:\r\n prefix = this.prefix.financial;\r\n break;\r\n case TypeNote.CONTRACTUAL:\r\n prefix = this.prefix.contractual;\r\n break;\r\n case TypeNote.OTHER:\r\n prefix = this.prefix.other;\r\n break;\r\n case TypeNote.IMAGE:\r\n prefix = this.prefix.image;\r\n break;\r\n default:\r\n prefix = this.prefix.technical;\r\n break;\r\n }\r\n return prefix;\r\n }\r\n\r\n async uploadDocForAllEquipments(\r\n equipments: Equipment[],\r\n documentFile: File,\r\n type: TypeNote,\r\n ) {\r\n if (equipments.length === 0) {\r\n return [];\r\n }\r\n const prefix = this.getPrefixDoc(type);\r\n const url = await uploadFileToS3(prefix, documentFile, \"BATCH\");\r\n if (url) {\r\n const updateList = [];\r\n for (const equip of equipments) {\r\n const mission = this.userService.currentMission(equip.spaceID);\r\n const newEquip = await this.API.__proto__.CreateNote({\r\n attachment: url,\r\n type,\r\n equipmentID: equip.id,\r\n ownerMissionID: mission ? mission.id : null,\r\n });\r\n updateList.push(newEquip);\r\n }\r\n return updateList;\r\n }\r\n return [];\r\n }\r\n\r\n async uploadDoc(\r\n equipment: Equipment,\r\n documentFile: File,\r\n type: TypeNote,\r\n ): Promise<Note> {\r\n const prefix = this.getPrefixDoc(type);\r\n const mission = this.userService.currentMission(equipment.spaceID);\r\n return uploadFileToS3(prefix, documentFile, equipment.id).then(\r\n async (url) => {\r\n if (url) {\r\n return this.API.__proto__.CreateNote({\r\n attachment: url,\r\n type,\r\n equipmentID: equipment.id,\r\n ownerMissionID: mission ? mission.id : null,\r\n });\r\n }\r\n return null;\r\n },\r\n );\r\n }\r\n\r\n async deleteEquipment(equip: Equipment): Promise<Equipment> {\r\n const deleted = await this.API.__proto__.DeleteEquipment({ id: equip.id });\r\n console.log(\"Deleted equipment\", deleted);\r\n\r\n // delete POI\r\n const [poi] = equip.pois.items;\r\n if (poi) {\r\n await this.poiService.deletePoi(poi.id);\r\n }\r\n // delete notes related\r\n if (equip.notes.items.length > 0) {\r\n await Promise.all(\r\n equip.notes.items.map(async (note: Note) => {\r\n // delete files from S3\r\n /** Not shared with other equipment */\r\n if (\r\n note.attachment &&\r\n !note.attachment.split(\"/\").pop().startsWith(\"BATCH_\")\r\n ) {\r\n await deleteFromS3(note.attachment);\r\n }\r\n await this.API.__proto__.DeleteNote({ id: note.id });\r\n }),\r\n );\r\n }\r\n // delete operations (remove from linked tickets)\r\n await this.operationService.deleteOperationsForEquipment(equip.id)\r\n return deleted;\r\n }\r\n\r\n async updateEquipmentLocation(\r\n equip: Equipment,\r\n tagData: MattertagData,\r\n ): Promise<POI> {\r\n const poiInput = {\r\n coordinate: tagData.getCoordinateString(),\r\n type: PoiType.EQUIPMENT,\r\n elementID: equip.id,\r\n metadata: tagData.getMetadataString(),\r\n matterportSweepID: tagData.getSweepID(),\r\n } as POI;\r\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\r\n return poi;\r\n }\r\n\r\n async removeTicketFromEquipment(\r\n ticket: Ticket,\r\n equip: Equipment,\r\n ): Promise<Operation> {\r\n const operationEquip =\r\n await this.operationService.getOperationsByEquipmentID(equip.id);\r\n const operationToDelete = operationEquip.find(\r\n (op) => op.ticketID === ticket.id,\r\n );\r\n return this.operationService.deleteOperation(operationToDelete.id).then(\r\n (res) => {\r\n this.ticketsService.addEventToTicket(ticket as Ticket, {\r\n title: \"Equipement retiré du ticket\",\r\n description: `Equipement ${equip.name} a été retiré du ticket`,\r\n status: EventStatus.UNLINKED_FROM_EQUIPMENT,\r\n type: EventType.TICKET,\r\n translationPath: \"ticketEvent.ticket.unlinkedFromEquipment\",\r\n metadata: JSON.stringify({ equipment: equip.name }),\r\n });\r\n return res;\r\n },\r\n );\r\n }\r\n\r\n async initEquips() {\r\n if (!this.currentSpaceID) {\r\n return;\r\n }\r\n this.updating.next(true);\r\n this.currentlyUpdating = true;\r\n\r\n let eqList = await this.getEquipmentsForSpace(this.currentSpaceID);\r\n eqList = await this.filterService.filterEquipmentsForCurrentUserInSpace(\r\n this.currentSpaceID,\r\n eqList,\r\n );\r\n // console.log(eqList);\r\n if (eqList.length > 0) {\r\n let filteredEquips = eqList.filter(\r\n (equipment) => !this.isArchived(equipment),\r\n );\r\n\r\n await Promise.all(\r\n filteredEquips.map(async (equip) => {\r\n equip.documentationImageUrlSigned = await getSignedImageUrlForEquipment(equip);\r\n }),\r\n );\r\n if (this.equipmentDomainFilter) {\r\n filteredEquips =\r\n this.filterService.filterEquipmentsByDomainList(\r\n filteredEquips,\r\n this.equipmentDomainFilter,\r\n );\r\n }\r\n this.currentEquipments.space = filteredEquips;\r\n if (this.zoneIDFilter) {\r\n filteredEquips = (await this.filterService.filterObjectsForZone(\r\n filteredEquips,\r\n this.zoneIDFilter,\r\n this.currentZone,\r\n )) as Equipment[];\r\n }\r\n this.currentEquipments.zonesMap.set(\r\n this.zoneIDFilter,\r\n filteredEquips,\r\n );\r\n this.equipmentsTags.next(filteredEquips); // adding tags only for the current zone\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: filteredEquips,\r\n }); // for lateral menu\r\n } else {\r\n if (this.zoneIDFilter) {\r\n this.currentEquipments.zonesMap.set(this.zoneIDFilter, []);\r\n }\r\n this.equipmentsUpdated.next({ space: [], zone: [] }); // for lateral menu\r\n }\r\n // console.log(this.currentEquipments);\r\n this.updating.next(false);\r\n this.currentlyUpdating = false;\r\n }\r\n\r\n async getEquipmentsForCurrentUserForSpace(\r\n spaceID,\r\n missions: Mission[],\r\n ): Promise<Equipment[]> {\r\n let results = [];\r\n\r\n const spaceMissions = missions.filter((m) => m.spaceID === spaceID);\r\n if (spaceMissions.length === 0) {\r\n return results;\r\n }\r\n const canSeeEquips = spaceMissions.some(\r\n (m) =>\r\n this.userService.managers.includes(m.role) ||\r\n m.role === RoleStatus.SERVICE,\r\n );\r\n if (!canSeeEquips) {\r\n return results;\r\n }\r\n let domains = [];\r\n for (const m of spaceMissions) {\r\n domains = [...domains, m.domains];\r\n }\r\n if (domains.length === 0) {\r\n return results;\r\n }\r\n results = await this.getEquipmentsForSpace(spaceID);\r\n // results = this.filterService.filterEquipmentsByDomainList(\r\n // results,\r\n // domains,\r\n // );\r\n return results;\r\n }\r\n\r\n async updateIconForAllEquipmentsInSpace(\r\n tagIcon: string,\r\n spaceID: string,\r\n domainID: string = null,\r\n ): Promise<{ equips: Equipment[]; pois: POI[] }> {\r\n let equips = await this.getEquipmentsForSpace(spaceID);\r\n if (domainID) {\r\n equips = equips.filter((equip) => equip.domainID === domainID);\r\n }\r\n const pois = await this.updateIconForAllObjects(equips, tagIcon);\r\n return { equips, pois };\r\n }\r\n\r\n /** Return true if the current user has archived this equipment */\r\n isArchived(equipment: Equipment): boolean {\r\n return equipment.archivedForMissionID\r\n ? equipment.archivedForMissionID.includes(\r\n this.userService.currentMission(equipment.spaceID).id,\r\n )\r\n : false;\r\n }\r\n\r\n setArchived(equipment: Equipment, archived: boolean) {\r\n let archivedList = equipment.archivedForMissionID\r\n ? equipment.archivedForMissionID\r\n : [];\r\n const missionID = this.userService.currentMission(equipment.spaceID).id;\r\n\r\n archivedList = archivedList.filter((m) => m !== missionID);\r\n\r\n if (archived) {\r\n archivedList.push(missionID);\r\n }\r\n\r\n return this.updateEquipment({\r\n id: equipment.id,\r\n archivedForMissionID: archivedList,\r\n });\r\n }\r\n\r\n async deleteFile(document_: EquipmentDocument) {\r\n await deleteFromS3(document_.url);\r\n await this.API.DeleteNote({ id: document_.noteID });\r\n }\r\n\r\n async navigateToEquipmentIn3D(\r\n equipment: Equipment,\r\n forceSwitchVisit: boolean = false,\r\n ) {\r\n let url = `visit/${equipment.spaceID}`;\r\n if (forceSwitchVisit) {\r\n url += `/equip/${equipment.id}`;\r\n }\r\n const canGoToTag = await this.viewerService.action_move_to_tag(\r\n `${equipment.id}`,\r\n );\r\n if (canGoToTag) {\r\n return;\r\n }\r\n const result = await this.getModel3dAndSweep(equipment);\r\n\r\n if (!result || !result.model3D) {\r\n alert(\"Error while getting virtual visit model\");\r\n return;\r\n }\r\n if (!forceSwitchVisit) {\r\n // check if we are moving within the same 3D model\r\n const currentModel = localStorage.getItem(\"model3D\");\r\n if (currentModel && currentModel === result.model3D) {\r\n // we add tag to the visit\r\n const poi = equipment.pois.items[0];\r\n if (poi.coordinate) {\r\n // we force add because we might be in an another zone\r\n await this.viewerService.actionAddObjectFromPOI(\r\n equipment,\r\n poi,\r\n );\r\n await this.viewerService.action_move_to_tag(equipment.id);\r\n }\r\n } else {\r\n /** Si on ne force pas la visite, on demande si on veut etre switch */\r\n openModalForVisitSwitch(\r\n this.modalService,\r\n result.model3D,\r\n equipment.spaceID,\r\n { sweepToMove: result.sweep, rotation: result.rotation },\r\n );\r\n }\r\n } else {\r\n /** Si on force le switch de la visit */\r\n window.open(\r\n `${url}?model3D=${result.model3D}&sweep=true`,\r\n \"_blank\",\r\n );\r\n }\r\n }\r\n\r\n async updateEquipsForZone() {\r\n this.updating.next(true);\r\n let filteredEquips = [];\r\n if (this.currentEquipments.space.length > 0) {\r\n if (\r\n this.zoneIDFilter &&\r\n this.currentEquipments.zonesMap.has(this.zoneIDFilter)\r\n ) {\r\n filteredEquips = this.currentEquipments.zonesMap.get(\r\n this.zoneIDFilter,\r\n );\r\n // console.log(\"i have equips for this zone\", filteredEquips);\r\n } else {\r\n filteredEquips = (await this.filterService.filterObjectsForZone(\r\n this.currentEquipments.space,\r\n this.zoneIDFilter,\r\n this.currentZone,\r\n )) as Equipment[];\r\n\r\n this.currentEquipments.zonesMap.set(this.zoneIDFilter, [\r\n ...filteredEquips,\r\n ]);\r\n }\r\n if (this.equipmentDomainFilter) {\r\n filteredEquips =\r\n this.filterService.filterEquipmentsByDomainList(\r\n filteredEquips,\r\n this.equipmentDomainFilter,\r\n );\r\n }\r\n this.equipmentsTags.next(filteredEquips); // adding tags only for the current zone\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: filteredEquips,\r\n }); // for lateral menu\r\n } else {\r\n this.equipmentsUpdated.next({ space: [], zone: [] }); // for lateral menu\r\n }\r\n this.updating.next(false);\r\n }\r\n\r\n updateDueToDelete(deletedEquipment: Equipment) {\r\n // console.log(\"update due to delete\", deletedEquipment);\r\n const equip = this.currentEquipments.space.find(\r\n (_equip) => _equip.id === deletedEquipment.id,\r\n );\r\n if (equip) {\r\n const index = this.currentEquipments.space.indexOf(equip);\r\n this.currentEquipments.space.splice(index, 1);\r\n }\r\n for (const zone of this.currentEquipments.zonesMap.keys()) {\r\n const equipToDelete = this.currentEquipments.zonesMap\r\n .get(zone)\r\n .find((_equip) => _equip.id === deletedEquipment.id);\r\n if (equipToDelete) {\r\n const index = this.currentEquipments.zonesMap\r\n .get(zone)\r\n .indexOf(equipToDelete);\r\n this.currentEquipments.zonesMap.get(zone).splice(index, 1);\r\n }\r\n }\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\r\n }); // for lateral menu\r\n }\r\n\r\n updateDueToCreate(createdEquip: Equipment) {\r\n this.currentEquipments.space.unshift(createdEquip);\r\n this.currentEquipments.zonesMap\r\n .get(this.zoneIDFilter)\r\n .unshift(createdEquip);\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\r\n }); // for lateral menu\r\n }\r\n\r\n updateDueToEquipUpdated(updatedEquip: Equipment) {\r\n const equip = this.currentEquipments.space.find(\r\n (_equip) => _equip.id === updatedEquip.id,\r\n );\r\n if (equip) {\r\n const index = this.currentEquipments.space.indexOf(equip);\r\n if (this.isArchived(equip)) {\r\n // we remove archived equipment\r\n this.currentEquipments.space.splice(index, 1);\r\n } else {\r\n this.currentEquipments.space.splice(index, 1, updatedEquip);\r\n }\r\n }\r\n for (const zone of this.currentEquipments.zonesMap.keys()) {\r\n const equipToUpd = this.currentEquipments.zonesMap\r\n .get(zone)\r\n .find((_equip) => _equip.id === updatedEquip.id);\r\n if (equipToUpd) {\r\n const index = this.currentEquipments.zonesMap\r\n .get(zone)\r\n .indexOf(equipToUpd);\r\n if (this.isArchived(equip)) {\r\n this.currentEquipments.zonesMap.get(zone).splice(index, 1);\r\n } else {\r\n this.currentEquipments.zonesMap\r\n .get(zone)\r\n .splice(index, 1, updatedEquip);\r\n }\r\n }\r\n }\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\r\n }); // for lateral menu\r\n }\r\n\r\n initSubscriptions() {\r\n if (!this.isMuseumUser) {\r\n console.log(\"subscribe to equipments\");\r\n this.navigatorService.zoneChange.pipe(takeUntil(this.destroy$)).subscribe((zone) => {\r\n if (!zone || !this.navigatorService.currentSpaceID) {\r\n this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n this.equipmentsTags.next(null);\r\n this.equipmentsUpdated.next({ space: [], zone: null });\r\n this.zoneIDFilter = null;\r\n this.currentEquipments = {\r\n space: [],\r\n zonesMap: new Map(),\r\n };\r\n return;\r\n }\r\n if (zone.id !== this.zoneIDFilter) {\r\n this.zoneIDFilter = zone.id;\r\n this.currentZone = zone;\r\n if (\r\n this.currentSpaceID ===\r\n this.navigatorService.currentSpaceID\r\n ) {\r\n // same space, only zone update\r\n // console.log(\r\n // \"going to update equips for zone (same space)\",\r\n // zone,\r\n // );\r\n\r\n this.updateEquipsForZone();\r\n } else {\r\n this.currentSpaceID =\r\n this.navigatorService.currentSpaceID;\r\n // console.log(\r\n // \"going to init equips for zone for new space\",\r\n // this.currentSpaceID,\r\n // );\r\n this.initEquips();\r\n }\r\n }\r\n });\r\n\r\n this.deleteObservable.pipe(takeUntil(this.destroy$)).subscribe((equipment) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToDelete(equipment);\r\n }\r\n });\r\n\r\n this.createObservable.pipe(takeUntil(this.destroy$)).subscribe((equipment) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToCreate(equipment);\r\n }\r\n });\r\n\r\n this.updateObservable.pipe(takeUntil(this.destroy$)).subscribe((equipment) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToEquipUpdated(equipment);\r\n }\r\n });\r\n }\r\n }\r\n\r\n unsubscribe() {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n}","/* eslint-disable no-case-declarations */\r\n/* eslint-disable no-param-reassign */\r\n/* eslint-disable no-await-in-loop */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Mission } from \"../types.service\";\r\nimport { FilterService } from \"./filter.service\";\r\nimport { EquipmentService } from \"./models/equipment.service\";\r\n\r\nexport enum SearchObjectType {\r\n USER = \"USER\",\r\n EQUIPMENT = \"EQUIPMENT\",\r\n TICKET = \"TICKET\",\r\n LOCATION = \"LOCATION\",\r\n FEATURE = \"FEATURE\",\r\n TEMPLATE = \"TEMPLATE\",\r\n}\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class SearchService {\r\n constructor(\r\n private filterService: FilterService,\r\n private equipmentService: EquipmentService,\r\n ) { }\r\n\r\n async searchForTermForTypeInMap(\r\n term: string,\r\n objectType: SearchObjectType,\r\n searchable: any,\r\n ): Promise<any> {\r\n let results;\r\n switch (objectType) {\r\n case SearchObjectType.EQUIPMENT:\r\n results = new Map();\r\n for (const [space, equips] of searchable.entries()) {\r\n const filteredEquips =\r\n this.filterService.filterEquipmentsForTerm(\r\n equips,\r\n term,\r\n );\r\n results.set(space, filteredEquips);\r\n }\r\n break;\r\n case SearchObjectType.TICKET:\r\n results = new Map();\r\n for (const [space, tickets] of searchable.entries()) {\r\n await Promise.all(\r\n tickets.map(async (ticket) => {\r\n const equips =\r\n await this.equipmentService.getEquipmentsForTicket(\r\n ticket,\r\n );\r\n if (equips.length > 0) {\r\n ticket.equipments = equips;\r\n }\r\n }),\r\n );\r\n const filteredTickets =\r\n this.filterService.filterTicketsForTerm(\r\n tickets,\r\n term,\r\n );\r\n results.set(space, filteredTickets);\r\n }\r\n break;\r\n case SearchObjectType.LOCATION:\r\n results = this.filterService.filterLocationsForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n case SearchObjectType.USER:\r\n results = [];\r\n for (const orgObject of searchable) {\r\n const orgResults =\r\n this.filterService.filterOrganisationsForTerm(\r\n [orgObject.org],\r\n term,\r\n );\r\n if (orgResults.length === 0) {\r\n const profiles = orgObject.users.map(\r\n (object) => object.user,\r\n );\r\n const userResults =\r\n this.filterService.filterUsersForTerm(\r\n profiles,\r\n term,\r\n );\r\n const filteredUserMissions = orgObject.users.filter(\r\n (object) => userResults.includes(object.user),\r\n );\r\n if (userResults.length > 0) {\r\n results.push({\r\n org: orgObject.org,\r\n users: filteredUserMissions,\r\n });\r\n }\r\n } else {\r\n results.push(orgObject);\r\n }\r\n }\r\n break;\r\n case SearchObjectType.FEATURE:\r\n results = new Map();\r\n for (const [space, features] of searchable.entries()) {\r\n const filteredFeatures =\r\n await this.filterService.filterFeaturesForTerm(\r\n features,\r\n term,\r\n );\r\n results.set(space, filteredFeatures);\r\n }\r\n break;\r\n case SearchObjectType.TEMPLATE:\r\n results = new Map();\r\n for (const [zone, templates] of searchable) {\r\n const templateResults =\r\n this.filterService.filterTemplatesForTerm(\r\n templates as Mission[],\r\n term,\r\n );\r\n if (templateResults.length > 0) {\r\n results.set(zone, templateResults);\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return results;\r\n }\r\n\r\n async searchForTermForTypeInList(\r\n term: string,\r\n objectType: SearchObjectType,\r\n searchable: any[],\r\n ): Promise<any[]> {\r\n let results;\r\n switch (objectType) {\r\n case SearchObjectType.EQUIPMENT:\r\n results = this.filterService.filterEquipmentsForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n case SearchObjectType.TICKET:\r\n await Promise.all(\r\n searchable.map(async (ticket) => {\r\n const equips =\r\n await this.equipmentService.getEquipmentsForTicket(\r\n ticket,\r\n );\r\n if (equips.length > 0) {\r\n ticket.equipements = equips;\r\n }\r\n }),\r\n );\r\n results = this.filterService.filterTicketsForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n case SearchObjectType.LOCATION:\r\n results = this.filterService.filterLocationsForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n case SearchObjectType.FEATURE:\r\n results = this.filterService.filterFeaturesForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n default:\r\n break;\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { SearchObjectType, SearchService } from '../../services/search.service';\r\n\r\n@Component({\r\n selector: 'lib-search-bar',\r\n templateUrl: './search-bar.component.html',\r\n styleUrls: ['./search-bar.component.scss']\r\n})\r\nexport class SearchBarComponent implements OnInit {\r\n\r\n @Input() searchable: any;\r\n\r\n @Input() objectType: SearchObjectType;\r\n\r\n @Output() searchEvent = new EventEmitter();\r\n\r\n public model: any;\r\n\r\n // formatter = (result: string) => result.toUpperCase();\r\n\r\n // search: OperatorFunction<string, readonly string[]> = (\r\n // text$: Observable<string>,\r\n // ) =>\r\n // text$.pipe(\r\n // debounceTime(200),\r\n // distinctUntilChanged(),\r\n // map((term) =>\r\n // term === \"\"\r\n // ? []\r\n // : this.searchable\r\n // .filter((v) =>\r\n // v.toLowerCase().includes(term.toLowerCase()),\r\n // )\r\n // .slice(0, 10),\r\n // ),\r\n // );\r\n\r\n // filter = (input: string[]) => string[];\r\n\r\n constructor(private searchService: SearchService) { }\r\n\r\n ngOnInit(): void {\r\n const input = document.querySelector(\"#searchbar\") as HTMLInputElement;\r\n input.addEventListener(\"keydown\", ({ key }) => {\r\n if (key === \"Enter\") {\r\n this.onSubmit();\r\n }\r\n });\r\n }\r\n\r\n onSubmit() {\r\n const input = document.querySelector(\"#searchbar\") as HTMLInputElement;\r\n const searchValue = input.value.toLowerCase();\r\n if (searchValue !== \"\") {\r\n this.filter(searchValue);\r\n } else {\r\n this.searchEvent.emit(null);\r\n }\r\n }\r\n\r\n async filter(term: string) {\r\n const results = await this.searchService.searchForTermForTypeInMap(\r\n term,\r\n this.objectType,\r\n this.searchable,\r\n );\r\n this.searchEvent.emit(results);\r\n }\r\n}\r\n","<div class=\"col-md-8 searchbar\">\n <div class=\"row depend\">\n <div class=\"col-md-5\">\n <input id=\"searchbar\" type=\"text\" class=\"form-control\" placeholder=\"keyword\" />\n </div>\n <div class=\"col-md-5\">\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onSubmit()\">{{ 'Search' |\n translate}}</button>\n </div>\n </div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, Subscription } from 'rxjs';\n\n@Pipe({\n name: 'durationToString'\n})\nexport class DurationToStringPipe implements PipeTransform {\n durationToString(\n duration: number\n ): string {\n const days = Math.floor(duration / 3600 / 24);\n const hours = Math.floor((duration - days * 24 * 3600) / 3600);\n const minutes = Math.floor((duration % 3600) / 60);\n const seconds = Math.floor(duration % 60);\n \n const daysString = this.translate.instant(\"day(s)\");\n const hoursString = this.translate.instant(\"hour(s)\");\n const oneHourString = this.translate.instant(\"hour\");\n const minutesString = this.translate.instant(\"minute(s)\");\n const secondsString = this.translate.instant(\"second(s)\");\n \n if (duration > 3600 * 24 * 7) {\n return `${days} ${daysString}`;\n }\n if (duration > 3600 * 24) {\n return `${days} ${daysString} ${hours} ${hoursString}`;\n }\n if (duration === 3600) {\n return `${hours} ${oneHourString}`;\n }\n if (duration > 3600) {\n if (minutes === 0) {\n return `${hours} ${hoursString}`;\n }\n return `${hours} ${hoursString} ${minutes} ${minutesString}`;\n }\n if (duration >= 60) {\n if (seconds === 0) {\n return `${minutes} ${minutesString}`;\n }\n return `${minutes} ${minutesString} ${seconds} ${secondsString}`;\n }\n return `${seconds} ${secondsString}`;\n }\n\n constructor(private translate: TranslateService) { }\n\n transform(duration: number): Observable<string> {\n let subscript: Subscription;\n\n const dateObserver: Observable<string> = new Observable((observer) => {\n subscript = this.translate.onLangChange.subscribe((event) => {\n observer.next(this.durationToString(duration));\n });\n observer.next(this.durationToString(duration));\n\n return {\n unsubscribe() {\n subscript.unsubscribe();\n },\n };\n });\n return dateObserver;\n }\n\n}\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Hashtag, Node } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class HashtagService {\r\n currentSpaceID: string;\r\n\r\n currentHashtags: Hashtag[] = [];\r\n\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getHashtag(hashtagID: string): Promise<Hashtag> {\r\n return this.API.__proto__.GetHashtag(hashtagID);\r\n }\r\n\r\n async createHashtag(hashtag: Hashtag): Promise<Hashtag> {\r\n const hashtagCreated = await this.API.__proto__.CreateHashtag(hashtag);\r\n this.currentHashtags.push(hashtagCreated);\r\n return hashtagCreated;\r\n }\r\n\r\n async getHashtagsForSpace(spaceID: string = null): Promise<Hashtag[]> {\r\n if (!spaceID) {\r\n if (this.currentHashtags.length === 0 && this.currentSpaceID) {\r\n return this.API.__proto__.HashtagsBySpace(this.currentSpaceID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n return this.currentHashtags;\r\n }\r\n this.currentSpaceID = spaceID;\r\n return this.API.__proto__.HashtagsBySpace(spaceID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { HashtagService } from '../services/models/hashtag.service';\n\n@Pipe({\n name: 'hashtagFromID'\n})\nexport class HashtagFromIdPipe implements PipeTransform {\n\n constructor(\n private hashtagService: HashtagService\n ) {}\n\n async transform(hashtagID: string): Promise<string> {\n if (this.hashtagService.currentHashtags.length === 0) {\n return this.hashtagService.getHashtag(hashtagID).then((hashtag) => {\n return hashtag.name;\n });\n }\n const hashtag = this.hashtagService.currentHashtags.find(\n (_hashtag) => _hashtag.id === hashtagID,\n );\n return hashtag ? hashtag.name : \"\";\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeUrl'\n})\nexport class SafeUrlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) { }\n\n transform(url: any) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { Observable } from 'rxjs/internal/Observable';\n\n@Pipe({\n name: 'timeDateString'\n})\nexport class TimeDateToLocalStringPipe implements PipeTransform {\n /**\n * Return a string of a given date time in local format.\n * The format is determined by the current language.\n */\n dateTimeToLocalString(\n date: number | string | Date,\n mode?: string,\n ): string {\n let lang = \"en-EN\";\n if (this.translate) {\n /** Get current language */\n lang = this.translate.currentLang\n ? this.translate.currentLang\n : this.translate.defaultLang;\n /** Transforme '_fr' to 'fr' */\n if (lang) {\n lang = lang.slice(1);\n }\n \n }\n \n let options: {\n month?;\n year?;\n day?;\n hour?;\n minute?;\n second?;\n dateStyle?;\n timeStyle?;\n weekday?;\n timeZone?;\n timeZoneName?;\n };\n switch (mode) {\n case \"day_numeric\":\n options = { day: \"numeric\" };\n break;\n case \"day\":\n options = { weekday: \"long\" };\n break;\n case \"date\":\n options = { dateStyle: \"long\" };\n break;\n case \"short_date_time\":\n options = {\n year: \"2-digit\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n break;\n case \"time\":\n options = { hour: \"numeric\", minute: \"numeric\" };\n break;\n case \"time_zone\":\n options = { hour: \"numeric\", minute: \"numeric\", timeZoneName: \"shortOffset\"};\n break;\n case \"day_time_zone_weekday\":\n options = {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZoneName: \"shortOffset\",\n };\n break;\n case \"date_time_zone\":\n options = {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZoneName: \"shortOffset\",\n };\n break;\n default:\n options = {\n dateStyle: \"long\",\n timeStyle: \"short\",\n };\n }\n return new Date(date).toLocaleString(lang, options);\n }\n\n constructor(private translate: TranslateService) { }\n\n transform(date: number | string | Date, mode?: any): Observable<string> {\n let subscript: Subscription;\n\n const dateObserver: Observable<string> = new Observable((observer) => {\n subscript = this.translate.onLangChange.subscribe((event) => {\n observer.next(\n this.dateTimeToLocalString(date, mode),\n );\n });\n observer.next(this.dateTimeToLocalString(date, mode));\n\n return {\n unsubscribe() {\n subscript.unsubscribe();\n },\n };\n });\n return dateObserver;\n }\n\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { BaseUserService } from \"../services/user.service\";\r\n\r\n@Pipe({\r\n name: \"usernameFromId\",\r\n})\r\nexport class UsernameFromIdPipe implements PipeTransform {\r\n static cache = {};\r\n\r\n constructor(private userService: BaseUserService) {}\r\n\r\n async transform(userId: string): Promise<string> {\r\n if (UsernameFromIdPipe.cache[userId] !== undefined) {\r\n return new Promise<string>((resolve) => {\r\n resolve(UsernameFromIdPipe.cache[userId]);\r\n });\r\n }\r\n const user = await this.userService.userFromUserID(userId);\r\n // @ts-ignore\r\n UsernameFromIdPipe.cache[userId] = `${user.displayName}`;\r\n return UsernameFromIdPipe.cache[userId];\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { API } from \"aws-amplify\";\r\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportService {\r\n modalReference;\r\n\r\n constructor(public modalService: NgbModal) { }\r\n\r\n /**\r\n * Open the support form\r\n */\r\n openSupportForm(formComponent) {\r\n this.modalReference = this.modalService.open(formComponent, {\r\n modalDialogClass: 'modal-padding',\r\n });\r\n }\r\n\r\n /**\r\n * Send support request to jira\r\n */\r\n async sendSupport(data:any):Promise<string>{\r\n return new Promise(async (resolve)=>{\r\n const response = await API.post(\"helpEmail\", \"/jira-email/new\", {\r\n body : data,\r\n });\r\n if(response.err){\r\n resolve('error')\r\n }else{\r\n resolve('send')\r\n }\r\n })\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-loader',\r\n templateUrl: './loader.component.html',\r\n styleUrls: ['./loader.component.scss']\r\n})\r\nexport class LoaderComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","<div class=\"sk-fading-circle\">\r\n <img src=\"../../../../assets/icons/smarterplan.svg\">\r\n <div class=\"sk-circle1 sk-circle\"></div>\r\n <div class=\"sk-circle2 sk-circle\"></div>\r\n <div class=\"sk-circle3 sk-circle\"></div>\r\n <div class=\"sk-circle4 sk-circle\"></div>\r\n <div class=\"sk-circle5 sk-circle\"></div>\r\n <div class=\"sk-circle6 sk-circle\"></div>\r\n <div class=\"sk-circle7 sk-circle\"></div>\r\n <div class=\"sk-circle8 sk-circle\"></div>\r\n <div class=\"sk-circle9 sk-circle\"></div>\r\n <div class=\"sk-circle10 sk-circle\"></div>\r\n <div class=\"sk-circle11 sk-circle\"></div>\r\n <div class=\"sk-circle12 sk-circle\"></div>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\r\nimport { BaseUserService } from '../../services/user.service';\r\nimport { Auth } from \"aws-amplify\";\r\nimport { SupportService } from '../../services/support.service';\r\n\r\n@Component({\r\n selector: 'app-support-modal',\r\n templateUrl: './support-modal.component.html',\r\n styleUrls: ['./support-modal.component.scss']\r\n})\r\nexport class SupportModalComponent implements OnInit {\r\n status = 'new';\r\n\r\n supportForm: FormGroup;\r\n\r\n currentUser: any;\r\n\r\n loading: boolean = true;\r\n\r\n constructor(\r\n private supportService: SupportService,\r\n public activeModal: NgbActiveModal,\r\n private formBuilder: FormBuilder,\r\n private userService: BaseUserService,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.iniForm();\r\n }\r\n\r\n onClose() {\r\n this.activeModal.close();\r\n }\r\n\r\n async getCurrentUser(): Promise<any> {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const cau = await Auth.currentAuthenticatedUser();\r\n resolve(await this.userService.current(cau));\r\n } catch (error) {\r\n resolve(undefined);\r\n }\r\n })\r\n }\r\n\r\n async iniForm() {\r\n this.currentUser = await this.getCurrentUser();\r\n this.supportForm = this.formBuilder.group({\r\n description: ['', [Validators.required]],\r\n title: ['', [Validators.required]],\r\n email: [(this.currentUser ? this.currentUser.email : ''), [Validators.required, Validators.email]]\r\n });\r\n this.loading = false;\r\n }\r\n \r\n async onSubmit() {\r\n this.loading = true;\r\n this.status = await this.supportService.sendSupport(this.supportForm.value);\r\n this.loading = false;\r\n }\r\n\r\n}","<div class=\"modal-header\">\r\n <h5 class=\"modal-title\" translate=\"Help\"></h5>\r\n <!-- <button (click)=\"onClose()\" type=\"button\" class=\"btn rounded-pill btn-museum\" data-dismiss=\"modal\" aria-label=\"Close\" [title]=\"'Close'|translate\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button> -->\r\n</div>\r\n<div class=\"modal-body\">\r\n <div class=\"support-loader-container\">\r\n <lib-loader *ngIf=\"loading\"></lib-loader>\r\n </div>\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"supportForm\" style=\"margin-top:1rem;\" *ngIf=\"!loading && status==='new'\">\r\n <div>\r\n <label>{{'Title' | translate}} *</label>\r\n <div>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" data-testid=\"new-support-title\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"!currentUser\">\r\n <label>{{'Email' | translate}} *</label>\r\n <div>\r\n <input type=\"email\" class=\"form-control\" formControlName=\"email\" data-testid=\"new-support-email\">\r\n </div>\r\n </div>\r\n <div>\r\n <label>{{'Description' | translate}} *</label>\r\n <div>\r\n <textarea id=\"comment-text\" name=\"comment\" formControlName=\"description\" class=\"form-control\"\r\n data-testid=\"new-support-comment\"></textarea>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n <div *ngIf=\"status ==='send'\" translate=\"Your request has been registered\" data-testid=\"new-support-send-info\">\r\n </div>\r\n <div *ngIf=\"status ==='error'\" translate=\"An error has occurred, please renew your request\" data-testid=\"new-support-error-info\">\r\n\r\n </div>\r\n</div>\r\n<div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn rounded-pill btn-museum\" data-dismiss=\"modal\" translate=\"Close\" (click)=\"onClose()\"\r\n data-testid=\"new-support-close-btn\"></button>\r\n <button *ngIf=\"!loading && status==='new'\" type=\"button\" class=\"btn rounded-pill btn-museum\" translate=\"Submit\"\r\n (click)=\"onSubmit()\" [disabled]=\"!supportForm.valid\" data-testid=\"new-support-submit-btn\"></button>\r\n</div>","import { Injectable } from \"@angular/core\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\nimport { Subject } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class LocaleService {\r\n currentLocale = \"en\";\r\n\r\n // Observable string sources\r\n private showModalSource = new Subject();\r\n\r\n showModal$ = this.showModalSource.asObservable();\r\n\r\n constructor(public translate: TranslateService) {}\r\n\r\n modal() {\r\n this.showModalSource.next(true);\r\n }\r\n\r\n /**\r\n * Reload the app to another language.\r\n *\r\n * Navigation is required because of the way angular localizes: locales are\r\n * completely different compilation bundles, in separate directories, hence\r\n * you need to reload.\r\n *\r\n * @param lang\r\n */\r\n change(lang: string): void {\r\n console.log(\"Switching to\", lang);\r\n this.currentLocale = lang;\r\n this.translate.use(`_${lang}`); // because files are \"_en.json\"\r\n }\r\n\r\n getLocale(): string {\r\n const lang = this.translate.currentLang\r\n ? this.translate.currentLang\r\n : this.translate.defaultLang;\r\n return lang.slice(1);\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\nimport { NgbDate, NgbCalendar, NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';\nimport { FilterService } from '../../../services/filter.service';\n\n@Component({\n selector: 'lib-range-date-picker',\n templateUrl: './range-date-picker.component.html',\n styleUrls: ['./range-date-picker.component.scss']\n})\nexport class RangeDatePickerComponent implements OnInit {\n hoveredDate: NgbDate | null = null;\n\n fromDate: NgbDate | null;\n\n toDate: NgbDate | null;\n\n constructor(\n private calendar: NgbCalendar,\n public formatter: NgbDateParserFormatter,\n private filterService: FilterService,\n ) {\n // this.fromDate = calendar.getPrev(calendar.getToday(), \"d\", 30);\n // this.toDate = calendar.getToday();\n }\n\n ngOnInit(): void {\n this.filterService.dateFilterUpdated(null);\n }\n\n onDateSelection(date: NgbDate) {\n if (!this.fromDate && !this.toDate) {\n this.fromDate = date;\n } else if (\n this.fromDate &&\n !this.toDate &&\n date &&\n date.after(this.fromDate)\n ) {\n this.toDate = date;\n } else {\n this.toDate = null;\n this.fromDate = date;\n }\n }\n\n isHovered(date: NgbDate) {\n return (\n this.fromDate &&\n !this.toDate &&\n this.hoveredDate &&\n date.after(this.fromDate) &&\n date.before(this.hoveredDate)\n );\n }\n\n isInside(date: NgbDate) {\n return (\n this.toDate && date.after(this.fromDate) && date.before(this.toDate)\n );\n }\n\n isRange(date: NgbDate) {\n return (\n date.equals(this.fromDate) ||\n (this.toDate && date.equals(this.toDate)) ||\n this.isInside(date) ||\n this.isHovered(date)\n );\n }\n\n validateInput(currentValue: NgbDate | null, input: string): NgbDate | null {\n const parsed = this.formatter.parse(input);\n return parsed && this.calendar.isValid(NgbDate.from(parsed))\n ? NgbDate.from(parsed)\n : currentValue;\n }\n\n emitRange() {\n if (this.fromDate && this.toDate) {\n const from = new Date(\n this.fromDate.year,\n this.fromDate.month - 1,\n this.fromDate.day,\n );\n const to = new Date(\n this.toDate.year,\n this.toDate.month - 1,\n this.toDate.day,\n 23,\n 59,\n );\n this.filterService.dateFilterUpdated([from, to]);\n }\n }\n\n onClearDates() {\n this.fromDate = null;\n this.toDate = null;\n this.filterService.dateFilterUpdated(null);\n }\n\n onApply() {\n if (this.fromDate && this.toDate) {\n this.emitRange();\n }\n }\n\n\n}\n","<form class=\"form-inline\">\n <div class=\"mb-3 hidden\">\n <div class=\"input-group\">\n <input name=\"datepicker\" class=\"form-control\" ngbDatepicker #datepicker=\"ngbDatepicker\"\n [autoClose]=\"'outside'\" (dateSelect)=\"onDateSelection($event)\" [displayMonths]=\"2\" [dayTemplate]=\"t\"\n outsideDays=\"hidden\" [startDate]=\"fromDate!\" tabindex=\"-1\">\n <ng-template #t let-date let-focused=\"focused\">\n <span class=\"custom-day\" [class.focused]=\"focused\" [class.range]=\"isRange(date)\"\n [class.faded]=\"isHovered(date) || isInside(date)\" (mouseenter)=\"hoveredDate = date\"\n (mouseleave)=\"hoveredDate = null\">\n {{ date.day }}\n </span>\n </ng-template>\n </div>\n </div>\n <div>\n <div class=\"input-group\">\n <input #dpFromDate class=\"form-control\" placeholder=\"dd/MM/yyyy\" name=\"dpFromDate\"\n [value]=\"formatter.format(fromDate)\" (input)=\"fromDate = validateInput(fromDate, dpFromDate.value)\">\n <div class=\"input-group-append\">\n <button class=\"btn btn-outline-secondary calendar\" (click)=\"datepicker.toggle()\" type=\"button\"></button>\n </div>\n </div>\n </div>\n <div class=\"mb-3 ms-2\">\n <div class=\"input-group\">\n <input #dpToDate class=\"form-control\" placeholder=\"dd/MM/yyyy\" name=\"dpToDate\"\n [value]=\"formatter.format(toDate)\" (input)=\"toDate = validateInput(toDate, dpToDate.value)\">\n <div class=\"input-group-append\">\n <button class=\"btn btn-outline-secondary calendar\" (click)=\"datepicker.toggle()\" type=\"button\"></button>\n </div>\n </div>\n </div>\n <button class=\"btn btn-outline-primary rounded-pill ms-3\" (click)=\"onApply()\" [disabled]=\"!toDate\">{{'Apply' |\n translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill ms-3\" (click)=\"onClearDates()\">{{'Clear' |\n translate}}</button>\n</form>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ProfileService } from '../../../services/models/profile.service';\nimport { uploadFileToS3, getSignedImageUrlForProfile } from '../../../services/s3.service';\nimport { BaseUserService } from '../../../services/user.service';\nimport { ProfileEntity } from '../../../types.service';\nimport { Md5 } from \"ts-md5/dist/md5\";\n\nconst cache = {};\n@Component({\n selector: 'lib-avatar',\n template: `<img [src]=\"avatar\" />`,\n styleUrls: [\"./avatar.component.scss\"],\n})\nexport class AvatarComponent implements OnInit {\n\n @Input() size: number = 45;\n\n @Input() userID: string;\n\n currentUser: ProfileEntity;\n\n avatar;\n\n constructor(\n private userService: BaseUserService,\n private profileService: ProfileService,\n ) {\n this.userService.isChanged.subscribe(() => {\n if (!this.currentUser) {\n this.currentUser = this.userService.cu;\n this.setAvatar(this.currentUser);\n }\n });\n }\n\n async ngOnInit(): Promise<void> {\n if (this.userID) {\n const profile = await this.profileService.getProfile(this.userID);\n if (profile) {\n const user = new ProfileEntity(profile);\n this.setAvatar(user);\n }\n } else {\n this.currentUser = this.userService.cu;\n this.setAvatar(this.currentUser);\n }\n }\n\n async setAvatar(user: ProfileEntity) {\n const { id, avatar, email } = user;\n\n // If avatar is not cached, check first if we have an avatar URL to fetch\n // from S3. If not, retrieve it from libravatar.\n // TODO use in a Service to be able to change/upload freely.\n if (!cache.hasOwnProperty(id)) {\n if (!avatar && email) {\n const md5 = new Md5();\n const md5hash = md5.appendStr(email).end();\n const avatar = `https://seccdn.libravatar.org/avatar/${md5hash}?s=${this.size}&default=identicon`;\n const url = await fetch(avatar)\n .then((res) => res.blob())\n .then((blob) => {\n const file = new File([blob], \"avatar.jpeg\", {\n type: \"image/jpeg\",\n });\n return uploadFileToS3(\"avatars/\", file, id);\n });\n await this.profileService.updateProfile({ id, avatar: url });\n user.avatar = url;\n cache[id] = avatar;\n }\n if (avatar) {\n // TODO generating signed urls for avatar makes NO SENSE ($$$)\n // Sorry got to copypaste that, but really need to get rid of\n cache[id] = await getSignedImageUrlForProfile(user);\n }\n }\n this.avatar = cache[id];\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Capture } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class CaptureService {\r\n API: any; //AWS\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected\r\n }\r\n\r\n async getCapturesBySpace(spaceID: string): Promise<Capture[]> {\r\n return this.API.CapturesBySpace(spaceID).then((cap) => cap.items);\r\n }\r\n\r\n async getCapture(captureID: string): Promise<Capture> {\r\n return this.API.__proto__.GetCapture(captureID);\r\n }\r\n\r\n async deleteCapture(captureID: string): Promise<Capture> {\r\n return this.API.__proto__.DeleteCapture({id: captureID});\r\n }\r\n\r\n async updateCapture(capture: any): Promise<Capture> {\r\n return this.API.__proto__.UpdateCapture(capture);\r\n }\r\n\r\n async createCapture(capture: Capture): Promise<Capture> {\r\n return this.API.__proto__.CreateCapture(capture);\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Node } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class NodeService {\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async updateNode(input: any): Promise<Node> {\r\n return this.API.__proto__.UpdateNode(input);\r\n }\r\n\r\n async deleteNode(id: string): Promise<Node> {\r\n return this.API.__proto__.DeleteNode({ id });\r\n }\r\n\r\n async getNode(id: string): Promise<Node> {\r\n return this.API.__proto__.GetNode(id);\r\n }\r\n\r\n async createNode(input: Node): Promise<Node> {\r\n return this.API.__proto__.CreateNode(input);\r\n }\r\n}\r\n","import { getMetaForImage, wait } from \"../helpers.service\";\r\nimport { Navigation, Plan } from \"../types.service\";\r\n\r\nexport function getCoefficientsForImage(\r\n img: HTMLImageElement,\r\n rectangle: any,\r\n): { coeffX: number; coeffY: number } {\r\n let coeffY;\r\n let coeffX;\r\n const imgRatio = img.width / img.height;\r\n const rectRatio = rectangle.width / rectangle.height;\r\n // console.log(\"image\", img.width, img.height);\r\n // console.log(\"rectangle\", rectangle.width, rectangle.height);\r\n // console.log(imgRatio, rectRatio);\r\n if (imgRatio > rectRatio) {\r\n // img is fitted in rectangle by width\r\n coeffX = img.width / rectangle.width;\r\n const effectiveImageHeight = rectangle.width / imgRatio;\r\n coeffY = img.height / effectiveImageHeight;\r\n } else {\r\n coeffY = img.height / rectangle.height;\r\n const effectiveImageWidth = rectangle.height * imgRatio;\r\n coeffX = img.width / effectiveImageWidth;\r\n }\r\n // console.log(coeffX, coeffY);\r\n return { coeffX, coeffY };\r\n}\r\n\r\nexport function styleButton(button: HTMLButtonElement) {\r\n button.style.backgroundImage = `url(\"https://api.iconify.design/mdi:adjust.svg?color=green&height=17&width=17\")`;\r\n button.style.backgroundColor = \"transparent\";\r\n button.style.position = \"absolute\";\r\n button.style.border = \"none\";\r\n button.style.width = \"17px\";\r\n button.style.height = \"17px\";\r\n button.disabled = true;\r\n}\r\n\r\nexport const showScanPointsOnPlanInDiv = async (\r\n plan: Plan,\r\n divPlan: HTMLElement,\r\n navigations: Navigation[],\r\n): Promise<HTMLButtonElement[]> => {\r\n if (!divPlan || !plan.filepath) {\r\n return [];\r\n }\r\n const calibrage = JSON.parse(plan.calibration);\r\n\r\n const img = await getMetaForImage(plan.filepath);\r\n divPlan.style.backgroundImage = `url(${plan.filepath})`;\r\n divPlan.style.backgroundSize = \"contain\";\r\n divPlan.style.backgroundRepeat = \"no-repeat\";\r\n await wait(1500); // while image is loaded to div\r\n divPlan.innerHTML = \"\"; // remove all previous buttons if exist\r\n const rect = divPlan.getBoundingClientRect();\r\n const { coeffX, coeffY } = getCoefficientsForImage(img, rect);\r\n const buttons = [];\r\n await Promise.all(\r\n navigations.map(async (navigation) => {\r\n const element = document.createElement(\"button\");\r\n styleButton(element);\r\n element.id = navigation.matterportSweepID;\r\n if (calibrage.new) {\r\n // new procedure of calibrage\r\n // find position for a given plan\r\n const positionsOnPlan = navigation.positionOnPlan.map((entry) =>\r\n JSON.parse(entry),\r\n );\r\n const positionOnPlan = positionsOnPlan.find(\r\n (data) => data.planID === plan.id,\r\n );\r\n if (positionOnPlan) {\r\n const realWidth = img.width / coeffX;\r\n const realHeight = img.height / coeffY;\r\n element.style.top = `${\r\n (positionOnPlan.y * realHeight) / calibrage.imgHeight -\r\n 10\r\n }px`;\r\n element.style.left = `${\r\n (positionOnPlan.x * realWidth) / calibrage.imgWidth - 10\r\n }px`;\r\n }\r\n } else {\r\n const position = JSON.parse(navigation.position);\r\n const x = calibrage.offsetX + position.x * calibrage.x;\r\n const y = calibrage.offsetY + position.z * calibrage.y;\r\n element.style.top = `${y / coeffY - 10}px`;\r\n element.style.left = `${x / coeffX - 10}px`;\r\n }\r\n divPlan.append(element);\r\n buttons.push(element);\r\n }),\r\n );\r\n return buttons;\r\n};\r\n","/* eslint-disable func-names */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { getDocument, GlobalWorkerOptions } from \"pdfjs-dist\";\r\nimport panzoom from \"panzoom\";\r\nimport { Subject } from \"rxjs\";\r\nimport { Router } from \"@angular/router\";\r\nimport { Plan, PoiType, Zone } from \"../../types.service\";\r\nimport { BaseVisibilityService } from \"../baseVisibility.service\";\r\nimport { MatterportService } from \"../matterport.service\";\r\nimport { ViewerService } from \"../viewer.service\";\r\nimport { ZoneService } from \"./zone.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { getSignedFile, uploadFileToS3 } from \"../s3.service\";\r\nimport { BaseTagService } from \"../tag.service\";\r\nimport { Config } from \"../../config\";\r\nimport { getCoefficientsForImage } from \"../zone-drawer.service\";\r\nimport { getMetaForImage } from \"../../helpers.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class PlanService {\r\n chosenPlan: Plan;\r\n\r\n currentPlan: Plan;\r\n\r\n currentSweep: string;\r\n\r\n planFileCache: File;\r\n\r\n planCanvas: any;\r\n\r\n planDiv: HTMLElement | SVGElement;\r\n\r\n panzoom: any;\r\n\r\n isReady: boolean = false;\r\n\r\n userPositionBtn: HTMLButtonElement;\r\n\r\n coeffPlanX: number;\r\n\r\n coeffPlanY: number;\r\n\r\n calibrationPlan: any;\r\n\r\n detailTagDiv: HTMLElement;\r\n\r\n detailTagDivIsHover = false;\r\n\r\n btnTagIsHover = false;\r\n\r\n resizePlanSubscription = new Subject<boolean>();\r\n\r\n imgPlan: HTMLImageElement;\r\n\r\n lastTouchTime = 0;\r\n\r\n delayDblTouch = 500;\r\n\r\n htmlContentToInject: {\r\n title: string;\r\n content: string;\r\n elementID: string;\r\n y: number;\r\n x: number;\r\n tagIcon: string;\r\n url: string;\r\n }[] = [];\r\n\r\n cache: {\r\n equipIDs: string[];\r\n ticketIDs: string[];\r\n measurementsIDs: string[];\r\n featureIDs: string[];\r\n zoneID: string;\r\n plan: Plan;\r\n htmlContent: {\r\n title: string;\r\n content: string;\r\n elementID: string;\r\n y: number;\r\n x: number;\r\n tagIcon: string;\r\n url: string;\r\n }[];\r\n };\r\n\r\n focusMouseTagDiv: boolean = false;\r\n\r\n API: any; //AWS\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any,\r\n private zoneService: ZoneService,\r\n private navigationService: NavigationService,\r\n // private tagService: TagService,\r\n private viewerService: ViewerService,\r\n private router: Router,\r\n private matterportService: MatterportService,\r\n // private config: AppConfig,\r\n private visibilityService: BaseVisibilityService,\r\n ) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async createPlan(planInput: Plan): Promise<Plan> {\r\n return this.API.__proto__.CreatePlan(planInput);\r\n }\r\n\r\n async deletePlan(plan: Plan): Promise<Plan> {\r\n // await deleteFromS3(plan.annexe);\r\n return this.API.__proto__.DeletePlan({ id: plan.id });\r\n }\r\n\r\n async getPlansForSpace(spaceID: string): Promise<Plan[]> {\r\n return this.API.__proto__.PlansBySpace(spaceID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n\r\n async getPlansForZone(zoneID: string): Promise<Plan[]> {\r\n return this.API.__proto__.PlansByZone(zoneID).then((response) => response.items);\r\n }\r\n\r\n async getSingedPlansForSpace(spaceID: string): Promise<Plan[]> {\r\n const plansFromDB = await this.getPlansForSpace(spaceID);\r\n // console.log(plansFromDB);\r\n const plans = [];\r\n if (plansFromDB.length > 0) {\r\n await Promise.all(\r\n plansFromDB.map(async (plan) => {\r\n const planObject = { ...plan } as Plan;\r\n // annexe looks like visits/modelID/plans/file.extension\r\n const signed = await getSignedFile(plan.annexe);\r\n if (signed) {\r\n planObject.filepath = signed;\r\n }\r\n if (plan.annexe) {\r\n const [, modelID, , filenameWithExtension] =\r\n plan.annexe.split(\"/\");\r\n const [, extention] = filenameWithExtension.split(\".\");\r\n planObject.model3d = modelID;\r\n planObject.extension = extention;\r\n plans.push(planObject);\r\n } else {\r\n console.log(`Error plan have not annexe => `);\r\n console.log(plan.id);\r\n }\r\n }),\r\n );\r\n }\r\n return plans;\r\n }\r\n\r\n async getPlansWithZonesForSpace(spaceID: string): Promise<Plan[]> {\r\n const plans = await this.getPlansForSpace(spaceID);\r\n const plansZones = plans.filter(\r\n (plan) => plan.zone && plan.calibration,\r\n );\r\n return plansZones;\r\n }\r\n\r\n setChosenPlan(chosenPlan: Plan) {\r\n this.chosenPlan = chosenPlan;\r\n }\r\n\r\n getChosenPlan(): Plan {\r\n return this.chosenPlan;\r\n }\r\n\r\n setPlanFileCache(planFileCache: File): Promise<void> {\r\n this.planFileCache = planFileCache;\r\n return Promise.resolve();\r\n }\r\n\r\n getPlanFileCache(): File {\r\n return this.planFileCache;\r\n }\r\n\r\n async createPlanWithAnnexe(\r\n plan: Plan,\r\n file: File,\r\n ): Promise<Plan> {\r\n const createdPlan = await this.createPlan(plan);\r\n const model3D = await this.zoneService.getModel3DForZone(plan.zoneID);\r\n const url = await uploadFileToS3(\r\n `visits/${model3D}/plans/`,\r\n file,\r\n createdPlan.id,\r\n );\r\n if (url) {\r\n return this.API.__proto__.UpdatePlan({ id: createdPlan.id, annexe: url });\r\n }\r\n return createdPlan;\r\n }\r\n\r\n async updatePlan(plan: any): Promise<Plan> {\r\n return this.API.__proto__.UpdatePlan(plan);\r\n }\r\n\r\n async updatePlanFile(): Promise<string> {\r\n if (this.chosenPlan && this.planFileCache) {\r\n const model3D = await this.zoneService.getModel3DForZone(\r\n this.chosenPlan.zoneID,\r\n );\r\n return uploadFileToS3(\r\n `visits/${model3D}/plans/`,\r\n this.planFileCache,\r\n this.chosenPlan.id,\r\n );\r\n }\r\n return Promise.reject();\r\n }\r\n\r\n async setAllPlansForZoneNotCurrent(zoneID: string, currentPlanID: string) {\r\n const plans = await this.API.__proto__.ListPlans({ zoneID: { eq: zoneID } });\r\n await Promise.all(\r\n plans.items.map(async (plan) => {\r\n if (plan.isCurrentForZone && plan.id !== currentPlanID) {\r\n await this.updatePlan({\r\n id: plan.id,\r\n isCurrentForZone: false,\r\n });\r\n }\r\n }),\r\n );\r\n }\r\n\r\n async configurePlan(\r\n currentPlan: Plan,\r\n divId: string = \"planDivPane\",\r\n ): Promise<boolean> {\r\n this.isReady = false;\r\n if (!this.detailTagDiv) {\r\n this.detailTagDiv = document.querySelector(\r\n `#detailTagDiv`,\r\n ) as HTMLElement;\r\n }\r\n this.detailTagDiv.addEventListener(\"mouseenter\", () => {\r\n this.focusMouseTagDiv = true;\r\n });\r\n this.detailTagDiv.addEventListener(\"mouseleave\", () => {\r\n this.btnTagIsHover = false;\r\n this.detailTagDiv.style.display = \"none\";\r\n this.focusMouseTagDiv = false;\r\n });\r\n\r\n this.calibrationPlan = JSON.parse(currentPlan.calibration);\r\n this.currentPlan = currentPlan;\r\n this.planDiv = document.querySelector(`#${divId}`) as HTMLElement;\r\n this.planDiv.addEventListener(\r\n \"touchstart\",\r\n this.handleTouch.bind(this),\r\n );\r\n this.planDiv.addEventListener(\r\n \"dblclick\",\r\n this.onDblClickPlan.bind(this),\r\n );\r\n\r\n if (!currentPlan.annexe.includes(\"pdf\")) {\r\n this.imgPlan = await getMetaForImage(currentPlan.filepath);\r\n const rect = this.planDiv.getBoundingClientRect();\r\n const { coeffX, coeffY } = getCoefficientsForImage(\r\n this.imgPlan,\r\n rect,\r\n );\r\n this.coeffPlanX = coeffX;\r\n this.coeffPlanY = coeffY;\r\n\r\n this.planDiv.style.backgroundImage = `url(${currentPlan.filepath})`;\r\n } else {\r\n await this.drawPdf(currentPlan);\r\n }\r\n this.planDiv.style.backgroundSize = \"contain\";\r\n this.planDiv.style.backgroundRepeat = \"no-repeat\";\r\n\r\n this.panzoom = panzoom(this.planDiv, {\r\n bounds: true,\r\n boundsPadding: 0,\r\n maxZoom: 3.5,\r\n zoomDoubleClickSpeed: 1, //disables double click zoom\r\n });\r\n return true;\r\n }\r\n\r\n clearPlanImage() {\r\n if (this.planDiv) {\r\n this.planDiv.style.backgroundImage = null;\r\n }\r\n }\r\n\r\n async drawPdf(currentPlan: Plan): Promise<void> {\r\n return new Promise(async (resolve) => {\r\n const canvas = document.createElement(\r\n \"canvas\",\r\n ) as HTMLCanvasElement;\r\n\r\n const context = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\r\n const pdfjsWorker = await import(\r\n \"pdfjs-dist/build/pdf.worker.entry\"\r\n );\r\n\r\n GlobalWorkerOptions.workerSrc = pdfjsWorker;\r\n const pdf = await getDocument(\r\n currentPlan.filepath,\r\n ).promise;\r\n const page = await pdf.getPage(1);\r\n\r\n const viewPortParameters = { scale: 1.5 };\r\n const viewport = page.getViewport(viewPortParameters);\r\n\r\n canvas.height = viewport.height;\r\n canvas.width = viewport.width;\r\n const renderContext = {\r\n canvasContext: context,\r\n viewport,\r\n };\r\n const renderTask = page.render(renderContext).promise;\r\n renderTask.then(async () => {\r\n const imgUrl = canvas.toDataURL(\"image/png\");\r\n this.imgPlan = await getMetaForImage(imgUrl);\r\n const rect = this.planDiv.getBoundingClientRect();\r\n const { coeffX, coeffY } = getCoefficientsForImage(\r\n this.imgPlan,\r\n rect,\r\n );\r\n this.coeffPlanX = coeffX;\r\n this.coeffPlanY = coeffY;\r\n this.planDiv.style.backgroundImage = `url(${imgUrl})`;\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n async drawElement(element: any, tagType: PoiType, currentPlan: Plan, tagService: BaseTagService, config: Config) {\r\n const [poi] = element.pois.items;\r\n if (poi && poi.coordinate && currentPlan) {\r\n const { zone } = currentPlan;\r\n if (zone) {\r\n const position = JSON.parse(poi.coordinate);\r\n const button = document.createElement(\"button\");\r\n let elementTitle: string;\r\n const url = tagService.getUrlForSeeDetails(\r\n element,\r\n tagType,\r\n );\r\n let tagIconImage: string;\r\n switch (tagType) {\r\n case PoiType.TICKET: {\r\n elementTitle = element.title;\r\n tagIconImage = config.my_config.icon_ticket;\r\n break;\r\n }\r\n case PoiType.EQUIPMENT: {\r\n tagIconImage =config.my_config.icon_equipment;\r\n elementTitle = element.name;\r\n break;\r\n }\r\n case PoiType.MEASURE:\r\n elementTitle = element.title;\r\n tagIconImage = config.my_config.icon_measure;\r\n break;\r\n case PoiType.DATA:\r\n tagIconImage = config.my_config.icon_data;\r\n break;\r\n case PoiType.DESK:\r\n tagIconImage = config.my_config.icon_data;\r\n break;\r\n default:\r\n return;\r\n }\r\n if (poi.tagIcon) {\r\n const tagIcon = JSON.parse(poi.tagIcon);\r\n if (tagType === PoiType.DATA) {\r\n tagIcon.src = tagService.getIconTagImageForFeature(\r\n element,\r\n poi,\r\n );\r\n }\r\n // poi.tagIcon = tagIcon;\r\n\r\n if (tagIcon.src) {\r\n const source = await getSignedFile(tagIcon.src);\r\n if (source) {\r\n tagIconImage = source;\r\n }\r\n }\r\n }\r\n this.styleButton(button, tagIconImage);\r\n button.id = element.id;\r\n this.planDiv.append(button);\r\n let x: number;\r\n let y: number;\r\n if (this.calibrationPlan.new) {\r\n // alert(\"new calibration plan: positioning not ready yet\");\r\n const position2D =\r\n this.transformPosition3DForNewCalibration(position);\r\n x = position2D.x;\r\n y = position2D.y;\r\n button.style.top = `${y / position2D.coeffY - 5}px`;\r\n button.style.left = `${x / position2D.coeffX - 5}px`;\r\n } else {\r\n // to remove when all calibrations are new\r\n x =\r\n this.calibrationPlan.offsetX +\r\n position.x * this.calibrationPlan.x;\r\n y =\r\n this.calibrationPlan.offsetY +\r\n position.z * this.calibrationPlan.y;\r\n button.style.top = `${y / this.coeffPlanY - 5}px`;\r\n button.style.left = `${x / this.coeffPlanX - 5}px`;\r\n }\r\n\r\n const {html, height} = await tagService.getHtmlToInject(\r\n tagType,\r\n element,\r\n 0\r\n );\r\n this.htmlContentToInject.push({\r\n elementID: element.id,\r\n title: elementTitle || \"\",\r\n content: html,\r\n y,\r\n x,\r\n tagIcon: tagIconImage,\r\n url,\r\n });\r\n this.addListenersToButton(button, url);\r\n }\r\n }\r\n }\r\n\r\n async drawUserPosition(currentSweep = this.currentSweep) {\r\n this.currentSweep = currentSweep;\r\n if (this.calibrationPlan && currentSweep) {\r\n const position =\r\n this.matterportService.getCurrentCameraPosition()?.position;\r\n if (position) {\r\n if (!this.userPositionBtn) {\r\n this.userPositionBtn = document.createElement(\"button\");\r\n this.userPositionBtn.id = \"currentPosition\";\r\n this.planDiv.append(this.userPositionBtn);\r\n this.userPositionBtn.title = \"You are here\";\r\n this.styleButton(\r\n this.userPositionBtn,\r\n \"https://api.iconify.design/bx:bxs-user-circle.svg?color=green&height=17&width=17\",\r\n );\r\n }\r\n let x: number;\r\n let y: number;\r\n if (this.calibrationPlan.new) {\r\n const position2D =\r\n this.transformPosition3DForNewCalibration(position);\r\n x = position2D.x / position2D.coeffX - 5;\r\n y = position2D.y / position2D.coeffY - 5;\r\n } else {\r\n x =\r\n (this.calibrationPlan.offsetX +\r\n position.x * this.calibrationPlan.x) /\r\n this.coeffPlanX;\r\n y =\r\n (this.calibrationPlan.offsetY +\r\n position.z * this.calibrationPlan.y) /\r\n this.coeffPlanY;\r\n }\r\n this.userPositionBtn.style.top = `${y}px`;\r\n this.userPositionBtn.style.left = `${x}px`;\r\n }\r\n }\r\n }\r\n\r\n removeCurrentPosition() {\r\n const button = document.querySelector(\"#currentPosition\");\r\n if (button) {\r\n button.remove();\r\n this.userPositionBtn = null;\r\n }\r\n }\r\n\r\n styleButton(button: HTMLButtonElement, url: string) {\r\n button.style.backgroundImage = `url(${url})`;\r\n button.style.backgroundColor = \"transparent\";\r\n button.style.position = \"absolute\";\r\n button.style.border = \"none\";\r\n button.style.width = \"10px\";\r\n button.style.height = \"10px\";\r\n button.disabled = false;\r\n button.style.backgroundSize = \"contain\";\r\n button.style.backgroundRepeat = \"no-repeat\";\r\n }\r\n\r\n addListenersToButton(button: HTMLButtonElement, url: string) {\r\n button.addEventListener(\"mouseenter\", async (event) => {\r\n const contentForButton = this.htmlContentToInject.find(\r\n (object) => object.elementID === button.id,\r\n );\r\n this.btnTagIsHover = true;\r\n const title = document.querySelector(`#titleTagDiv`) as HTMLElement;\r\n if (contentForButton.title) {\r\n title.style.display = \"inline\";\r\n title.innerHTML = contentForButton.title;\r\n } else {\r\n title.style.display = \"none\";\r\n }\r\n\r\n const content = document.querySelector(\r\n `#htmlTagDiv`,\r\n ) as HTMLElement;\r\n this.detailTagDiv.style.top = `${event.clientY + 10}px`;\r\n this.detailTagDiv.style.left = `${\r\n event.clientX < 120 ? 0 : event.clientX - 120\r\n }px`;\r\n this.detailTagDiv.style.display = \"block\";\r\n // console.log(contentForButton.content);\r\n content.innerHTML = contentForButton.content;\r\n const detailButton = content.querySelector(\"#detailBtn\");\r\n if (detailButton) {\r\n detailButton.addEventListener(\"click\", () => {\r\n this.visibilityService.detailShowing.next(true);\r\n this.router.navigate([url]);\r\n });\r\n }\r\n const bookingButton = content.querySelector(\"#bookingBtn\");\r\n if (bookingButton) {\r\n bookingButton.addEventListener(\"click\", () => {\r\n this.visibilityService.detailShowing.next(true);\r\n this.router.navigate([url]);\r\n });\r\n }\r\n });\r\n\r\n button.addEventListener(\"mouseleave\", async () => {\r\n // we wait if user hovers on to div of the tag (changes this.focusMouseTagDiv)\r\n this.btnTagIsHover = false;\r\n setTimeout(() => {\r\n if (!this.focusMouseTagDiv && !this.btnTagIsHover) {\r\n this.detailTagDiv.style.display = \"none\";\r\n }\r\n }, 100);\r\n });\r\n button.addEventListener(\"click\", async () => {\r\n this.detailTagDiv.style.display = \"none\";\r\n await this.viewerService.action_move_to_tag(button.id);\r\n this.visibilityService.detailShowing.next(true);\r\n this.router.navigate([url]);\r\n });\r\n }\r\n\r\n clearBtn(idList: any[]) {\r\n for (const id of idList) {\r\n const button = document.querySelector(`#\\\\${id}`);\r\n if (button) {\r\n button.remove();\r\n }\r\n }\r\n }\r\n\r\n clearAllButtons() {\r\n const div = document.querySelector(\"#planDivPane\");\r\n if (div) {\r\n const buttons = div.querySelectorAll(\"button\");\r\n // eslint-disable-next-line unicorn/no-array-for-each\r\n buttons.forEach(function (currentValue) {\r\n currentValue.remove();\r\n });\r\n this.userPositionBtn = null;\r\n }\r\n }\r\n\r\n onPlanRemove() {\r\n console.log(\"removing plan\");\r\n this.userPositionBtn = null;\r\n this.calibrationPlan = null;\r\n this.currentSweep = null;\r\n this.detailTagDiv = null;\r\n }\r\n\r\n async resizePlan(isRemoving: boolean) {\r\n this.resizePlanSubscription.next(false);\r\n if (isRemoving) {\r\n return;\r\n }\r\n if (this.planDiv && this.currentSweep) {\r\n this.panzoom = panzoom(this.planDiv, {\r\n bounds: true,\r\n boundsPadding: 0,\r\n maxZoom: 3.5,\r\n });\r\n setTimeout(() => {\r\n const rect = this.planDiv.getBoundingClientRect();\r\n const { coeffX, coeffY } = getCoefficientsForImage(\r\n this.imgPlan,\r\n rect,\r\n );\r\n this.coeffPlanX = coeffX;\r\n this.coeffPlanY = coeffY;\r\n this.resizePlanSubscription.next(true);\r\n }, 200);\r\n }\r\n }\r\n\r\n handleTouch(event) {\r\n const now = Date.now();\r\n if (now - this.lastTouchTime < this.delayDblTouch) {\r\n this.lastTouchTime = 0;\r\n // this.onDblClickPlan(event);\r\n /** Simulate a dblclick for phone (we don't get offsetX/Y on touchevent) */\r\n const newEvent = document.createEvent(\"MouseEvents\");\r\n const touch = event.changedTouches[0];\r\n newEvent.initMouseEvent(\r\n \"dblclick\",\r\n true,\r\n true,\r\n event.target.ownerDocument.defaultView,\r\n 0,\r\n touch.screenX,\r\n touch.screenY,\r\n touch.clientX,\r\n touch.clientY,\r\n event.ctrlKey,\r\n event.altKey,\r\n event.shirtKey,\r\n event.metaKey,\r\n 0,\r\n null,\r\n );\r\n event.target.dispatchEvent(newEvent);\r\n } else {\r\n this.lastTouchTime = now;\r\n }\r\n }\r\n\r\n async onDblClickPlan(event) {\r\n event.preventDefault();\r\n const clickX = event.offsetX;\r\n const clickY = event.offsetY;\r\n const zonePlan = this.currentPlan.zone;\r\n if (zonePlan) {\r\n const navigations: any =\r\n await this.navigationService.getNavigationsForZone(zonePlan);\r\n if (navigations.length > 0) {\r\n await Promise.all(\r\n navigations.map(async (nav) => {\r\n const position = JSON.parse(nav.position);\r\n let x: number;\r\n let y: number;\r\n if (this.calibrationPlan.new) {\r\n const position2D =\r\n this.transformPosition3DForNewCalibration(\r\n position,\r\n );\r\n x = position2D.x / position2D.coeffX;\r\n y = position2D.y / position2D.coeffY;\r\n } else {\r\n x =\r\n (this.calibrationPlan.offsetX +\r\n position.x * this.calibrationPlan.x) /\r\n this.coeffPlanX;\r\n y =\r\n (this.calibrationPlan.offsetY +\r\n position.z * this.calibrationPlan.y) /\r\n this.coeffPlanY;\r\n }\r\n\r\n const distX = Math.abs(clickX - x);\r\n const distY = Math.abs(clickY - y);\r\n nav.dist = Math.sqrt(\r\n Math.pow(distX, 2) + Math.pow(distY, 2),\r\n );\r\n }),\r\n );\r\n navigations.sort((a, b) => {\r\n return a.dist - b.dist;\r\n });\r\n this.matterportService.action_go_to_sweep(\r\n navigations[0].matterportSweepID,\r\n );\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Configures plan from cache (previous plan).\r\n */\r\n async uploadPlanFromCache(): Promise<void> {\r\n this.htmlContentToInject = this.cache.htmlContent;\r\n await this.configurePlan(this.cache.plan);\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * Puts buttons (tags) from cache according to passed element IDs (for filter if any)\r\n * @param elementIDs elements (tickets, equipments, etc) to be shown on plan\r\n */\r\n uploadTagsFromCache() {\r\n // console.log(\"uploading tags from cache\");\r\n for (const cached of this.cache.htmlContent) {\r\n const button = document.createElement(\"button\");\r\n this.styleButton(button, cached.tagIcon);\r\n button.id = cached.elementID;\r\n this.planDiv.append(button);\r\n if (this.calibrationPlan.new) {\r\n const newCoeffX =\r\n this.coeffPlanX /\r\n (this.imgPlan.width / this.calibrationPlan.imgWidth);\r\n const newCoeffY =\r\n this.coeffPlanY /\r\n (this.imgPlan.height / this.calibrationPlan.imgHeight);\r\n button.style.top = `${cached.y / newCoeffY - 5}px`;\r\n button.style.left = `${cached.x / newCoeffX - 5}px`;\r\n } else {\r\n button.style.top = `${cached.y / this.coeffPlanY - 5}px`;\r\n button.style.left = `${cached.x / this.coeffPlanX - 5}px`;\r\n }\r\n\r\n this.addListenersToButton(button, cached.url);\r\n }\r\n }\r\n\r\n async getCalibratedPlanForZone(zone: Zone): Promise<Plan> {\r\n let plans = (await this.API.PlansByZone(zone.id)).items;\r\n let parentZone = null;\r\n if (plans.length === 0) {\r\n // try to find parent zone\r\n parentZone = await this.API.GetZone(zone.parentID);\r\n plans = (await this.API.PlansByZone(zone.parentID)).items;\r\n }\r\n const calibratedPlan = plans.find(\r\n (plan) => plan.calibration && plan.isCurrentForZone,\r\n ) as Plan;\r\n if (calibratedPlan) {\r\n const signed = await getSignedFile(calibratedPlan.annexe);\r\n if (signed) {\r\n calibratedPlan.filepath = signed;\r\n }\r\n calibratedPlan.navigationIDs = parentZone\r\n ? parentZone.sweepIDs\r\n : zone.sweepIDs;\r\n }\r\n return calibratedPlan || null;\r\n }\r\n\r\n transformPosition3DForNewCalibration(position: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n }): { x: number; y: number; coeffX: number; coeffY: number } {\r\n const positionX =\r\n this.calibrationPlan.nameXAxis === \"x\" ? position.x : position.z;\r\n const positionY =\r\n this.calibrationPlan.nameYAxis === \"x\" ? position.x : position.z;\r\n let x =\r\n this.calibrationPlan.offsetX +\r\n positionX * this.calibrationPlan.scaleX;\r\n let y =\r\n this.calibrationPlan.offsetY +\r\n positionY * this.calibrationPlan.scaleY;\r\n const newCoeffX =\r\n this.coeffPlanX /\r\n (this.imgPlan.width / this.calibrationPlan.imgWidth);\r\n // console.log(\"newCoeffX\", newCoeffX);\r\n const newCoeffY =\r\n this.coeffPlanY /\r\n (this.imgPlan.height / this.calibrationPlan.imgHeight);\r\n x =\r\n x / this.calibrationPlan.scalePlan -\r\n this.calibrationPlan.offsetXPlan;\r\n y =\r\n y / this.calibrationPlan.scalePlan -\r\n this.calibrationPlan.offsetYPlan;\r\n // console.log(x, y);\r\n return { x, y, coeffX: newCoeffX, coeffY: newCoeffY };\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\n/* eslint-disable no-restricted-syntax */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Plan, Space, Visit, Zone } from \"../../types.service\";\r\nimport { getSignedFile, listFilesInFolder } from \"../s3.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { CaptureService } from \"./capture.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { NodeService } from \"./node.service\";\r\nimport { PlanService } from \"./plan.service\";\r\nimport { ZoneService } from \"./zone.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class VisitService {\r\n choosenPlan: Plan;\r\n\r\n constructor(\r\n private captureService: CaptureService,\r\n private nodeService: NodeService,\r\n private navigationService: NavigationService,\r\n private zoneService: ZoneService,\r\n private planService: PlanService,\r\n private userService: BaseUserService,\r\n ) {}\r\n\r\n async getVisitsForSpaceForUser(spaceID: string): Promise<Visit[]> {\r\n const visits = [];\r\n const missionsForSpace = this.userService.currentMissions.filter(\r\n (mis) => mis.spaceID === spaceID,\r\n );\r\n const allAllowed =\r\n this.userService.userHasAccessToAllZonesInSpace(spaceID);\r\n const captures = await this.captureService.getCapturesBySpace(spaceID);\r\n const nodes = captures.flatMap((cap) => cap.nodes.items);\r\n let allAllowedNodes = nodes;\r\n let allowedNodeIDs = [];\r\n if (!allAllowed) {\r\n const allowedZones = missionsForSpace.map((mis) => mis.zone);\r\n for (const zone of allowedZones) {\r\n allowedNodeIDs = [...allowedNodeIDs, ...zone.nodeIDs];\r\n }\r\n allowedNodeIDs = [...new Set(allowedNodeIDs)]; // to make unique\r\n allAllowedNodes = allAllowedNodes.filter((node) =>\r\n allowedNodeIDs.includes(node.id),\r\n );\r\n }\r\n for (const node of allAllowedNodes) {\r\n // console.log(node)\r\n const folder = `visits/${node.model3D}/sweeps/`;\r\n const files = await listFilesInFolder(folder);\r\n const isImported = Object.keys(files).length > 20; // TODO : at least 20 should be imported...\r\n const capture = captures.find((cap) =>\r\n cap.nodes.items.includes(node),\r\n );\r\n const visit = {\r\n captureID: node.captureID,\r\n model3d: node.model3D,\r\n takenAt: capture.takenAt,\r\n spaceID,\r\n viewer: capture.viewer,\r\n surface: capture.surface,\r\n node,\r\n name: node.metadata,\r\n imagesImported: isImported,\r\n } as Visit;\r\n visits.push(visit);\r\n }\r\n return visits;\r\n }\r\n\r\n async deleteVisit(visit: Visit, spaceID: string): Promise<any> {\r\n await this.nodeService.deleteNode(visit.node.id);\r\n const capture = await this.captureService.getCapture(visit.captureID);\r\n if (capture.nodes.items.length === 0) {\r\n await this.captureService.deleteCapture(visit.captureID);\r\n }\r\n const navigations = await this.navigationService.getNavigationsForNode(\r\n visit.node.id,\r\n );\r\n const zonesToDelete = await this.zoneService.getZonesForNodeForSpace(\r\n visit.node.id,\r\n spaceID,\r\n );\r\n await Promise.all(\r\n navigations.map(async (navig) => {\r\n await this.navigationService.deleteNavigation(navig.id);\r\n }),\r\n );\r\n if (zonesToDelete.length > 0) {\r\n await Promise.all(\r\n zonesToDelete.map(async (zone) => {\r\n const plans = await this.planService.getPlansForZone(\r\n zone.id,\r\n );\r\n if (plans.length > 0) {\r\n await Promise.all(\r\n plans.map(async (plan) => {\r\n await this.planService.deletePlan(plan);\r\n }),\r\n );\r\n }\r\n await this.zoneService.deleteZone(zone.id);\r\n }),\r\n );\r\n }\r\n // removeAllFilesFromFolderS3(`visits/${visit.model3d}/sweeps`);\r\n return Promise.resolve();\r\n }\r\n\r\n async loadImagesForSpace(space: Space): Promise<any> {\r\n const list = [];\r\n return this.getVisitsForSpaceForUser(space.id).then(async (visits) => {\r\n if (visits) {\r\n space.visits = visits;\r\n await Promise.all(\r\n visits.map(async (visit) => {\r\n const folder = `visits/${visit.model3d}/sweeps/`;\r\n const files = await listFilesInFolder(folder);\r\n await Promise.all(\r\n Object.keys(files).map(async (key) => {\r\n const file = files[key];\r\n const signed = await getSignedFile(file.key);\r\n const filename = file.key.split(\"/\")[3];\r\n list.push({\r\n path: signed,\r\n filename,\r\n visit,\r\n });\r\n }),\r\n );\r\n }),\r\n );\r\n return list;\r\n }\r\n return list;\r\n });\r\n }\r\n\r\n\r\n async getDefaultZoneForVisit(visit: Visit): Promise<Zone> {\r\n return this.zoneService\r\n .getZonesBySpace(visit.spaceID)\r\n .then(async (zones) => {\r\n const zonesWithVisitName = zones.filter(\r\n (zone) =>\r\n zone.name === visit.name &&\r\n zone.layer &&\r\n zone.layer.name === \"BUILDING\",\r\n );\r\n if (zonesWithVisitName.length === 1) {\r\n return zonesWithVisitName[0];\r\n }\r\n const parentZone = zones.find((zone) => !zone.parentID);\r\n return parentZone;\r\n });\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { filterUniqueArrayByID, sortAlphabeticallyOnName } from \"../../helpers.service\";\r\nimport { Space, Layer, PropertyType } from \"../../types.service\";\r\nimport { getSignedImageUrlForSpace } from \"../s3.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { CaptureService } from \"./capture.service\";\r\nimport { MissionService } from \"./mission.service\";\r\nimport { PropertyService } from \"./property.service\";\r\nimport { VisitService } from \"./visit.service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class SpaceService {\r\n\r\n locationsForUser: Space[] = [];\r\n\r\n locationUpdated: Subject<Space[]> = new Subject<Space[]>();\r\n\r\n API: any; //AWS\r\n\r\n constructor(\r\n private visitService: VisitService,\r\n private userService: BaseUserService,\r\n private propertyService: PropertyService,\r\n private captureService: CaptureService,\r\n private missionService: MissionService,\r\n @Inject('currentAPIService') apiInjected: any\r\n ) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async listSpaces(): Promise<Space[]> {\r\n return this.API.__proto__.ListSpaces().then((spaces) =>\r\n spaces.items.filter((sp) => !sp.deletedAt),\r\n );\r\n }\r\n\r\n async getLocationsForCurrentUser(): Promise<Space[]> {\r\n const missions = this.userService.currentMissions;\r\n if (!missions) return [];\r\n let locations = [];\r\n await Promise.all(\r\n missions.map(async (mission) => {\r\n if (mission.space && !mission.space.deletedAt) {\r\n const space = await this.getSpace(mission.space.id);\r\n await this.signUrlForSpace(space);\r\n await this.visitService\r\n .getVisitsForSpaceForUser(space.id)\r\n .then((visits) => {\r\n if (visits) {\r\n space.visits = visits;\r\n }\r\n });\r\n locations.push(space);\r\n }\r\n }),\r\n );\r\n if (locations.length > 0) {\r\n locations = sortAlphabeticallyOnName(\r\n filterUniqueArrayByID(locations),\r\n );\r\n }\r\n this.locationsForUser = locations;\r\n this.locationUpdated.next(locations);\r\n return locations;\r\n }\r\n\r\n async signUrlForSpace(loc: Space) {\r\n if (loc.annexes) {\r\n getSignedImageUrlForSpace(loc).then((url) => {\r\n if (url) {\r\n loc.annexes = url;\r\n }\r\n });\r\n }\r\n }\r\n\r\n async getAllowedSpacesForOrg(\r\n orgID: string,\r\n userOrgID: string,\r\n ): Promise<Space[]> {\r\n if (\r\n userOrgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" ||\r\n orgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\"\r\n ) {\r\n return this.listSpaces();\r\n }\r\n return this.getSpacesForOrg(userOrgID);\r\n }\r\n\r\n async getSpacesForOrg(orgID: string): Promise<Space[]> {\r\n const properties =\r\n await this.propertyService.getPropertiesForOrganisation(orgID);\r\n if (properties.length > 0) {\r\n const spaces = [];\r\n for (const property of properties) {\r\n if (property.space && !property.space.deletedAt) {\r\n spaces.push(property.space);\r\n }\r\n }\r\n return spaces;\r\n }\r\n return null;\r\n }\r\n\r\n async createSpace(values: Space, layer?: Layer): Promise<any> {\r\n const loc = await this.API.__proto__.CreateSpace(values);\r\n const zoneInput = {\r\n name: values.name,\r\n spaceID: loc.id,\r\n surface: 0,\r\n layerID: layer ? layer.id : null,\r\n };\r\n await this.API.__proto__.CreateZone(zoneInput);\r\n return loc;\r\n }\r\n\r\n async updateSpace(input: any): Promise<Space> {\r\n return this.API.__proto__.UpdateSpace(input);\r\n }\r\n\r\n async getSpace(id: string): Promise<Space> {\r\n return this.API.__proto__.GetSpace(id);\r\n }\r\n\r\n async getModel3DForSpace(spaceID: string): Promise<string> {\r\n const captures = await this.captureService.getCapturesBySpace(spaceID);\r\n if (captures.length > 0 && captures[0].nodes.items.length > 0) {\r\n return captures[0].nodes.items[0].model3D;\r\n }\r\n return null;\r\n }\r\n\r\n async getAllowedModel3DForSpace(spaceID: string): Promise<string> {\r\n const visits = await this.visitService.getVisitsForSpaceForUser(\r\n spaceID,\r\n );\r\n if (visits.length > 0) {\r\n return visits[0].model3d;\r\n }\r\n return null;\r\n }\r\n\r\n async softDeleteSpace(spaceID: string) {\r\n await this.updateSpace({\r\n id: spaceID,\r\n deletedAt: Date.now(),\r\n });\r\n const missions = await this.missionService.getMissionsForSpace(spaceID);\r\n const properties = await this.propertyService.listPropertiesForSpace(spaceID);\r\n if (this.userService.isSPAdmin()) {\r\n // delete all properties\r\n await Promise.all(\r\n properties.map(async (property) => {\r\n await this.propertyService.deleteProperty(property.id);\r\n }),\r\n );\r\n // delete all missions\r\n await Promise.all(\r\n missions.map(async (mission) => {\r\n await this.missionService.update({\r\n id: mission.id,\r\n deletedAt: Date.now(),\r\n });\r\n }),\r\n );\r\n } else {\r\n // delete property for current Org\r\n const currentOrg = this.userService.currentOrganisation(spaceID);\r\n const propertyToDelete = properties.find(\r\n (property) => property.organisationID === currentOrg.id,\r\n );\r\n if (propertyToDelete) {\r\n await this.propertyService.deleteProperty(propertyToDelete.id);\r\n }\r\n const missionsToDelete = missions.filter(\r\n (mission) =>\r\n mission.organisationID === currentOrg.id ||\r\n mission.orderedOrganisationID === currentOrg.id,\r\n );\r\n await Promise.all(\r\n missionsToDelete.map(async (mission) => {\r\n await this.missionService.update({\r\n id: mission.id,\r\n deletedAt: Date.now(),\r\n });\r\n }),\r\n );\r\n }\r\n const tickets = (await this.API.__proto__.TicketsBySpace(spaceID)).items;\r\n await Promise.all(\r\n tickets.map(async (ticket) => {\r\n await this.API.__proto__.DeleteTicket({id:ticket.id});\r\n }),\r\n );\r\n // TODO equipments, etc\r\n\r\n // remove from list\r\n this.locationsForUser = this.locationsForUser.filter((space)=>space.id !== spaceID);\r\n this.locationUpdated.next(this.locationsForUser);\r\n }\r\n\r\n /**\r\n * If current user can archive a space (only if his organisation is owning the property (PropertyType.PROPERTY))\r\n * @param spaceID\r\n * @returns\r\n */\r\n async canArchiveSpace(spaceID: string): Promise<boolean> {\r\n const currentOrg = this.userService.currentOrganisation(spaceID);\r\n const orgProperties =\r\n await this.propertyService.getPropertiesForOrganisation(\r\n currentOrg.id,\r\n );\r\n const property = orgProperties.find(\r\n (property_) => property_.spaceID === spaceID,\r\n );\r\n if (property.type === PropertyType.PROPERTY) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { SpaceService } from '../../../services/models/space.service';\nimport { VisitService } from '../../../services/models/visit.service';\nimport { ZoneService } from '../../../services/models/zone.service';\nimport { NavigatorService } from '../../../services/navigator.service';\nimport { ViewerService } from '../../../services/viewer.service';\nimport { Space, Visit, Zone } from '../../../types.service';\n\n@Component({\n selector: 'lib-navigation-bar',\n templateUrl: './navigation-bar.component.html',\n styleUrls: ['./navigation-bar.component.scss']\n})\nexport class NavigationBarComponent implements OnInit {\n @ViewChild(\"navbarSelectMenu\") navbarSelectMenu!: any;\n\n locations: Space[];\n\n spaceSubscription: Subscription;\n\n viewerSubscription: Subscription;\n\n locationIDSubscription: Subscription;\n\n currentLocationID: string;\n\n currentModel3d: string;\n\n selectedLocation: Space = null;\n\n selectedModel3d: string;\n\n selectedFloor: Zone = null;\n\n selectedZone: Zone = null;\n\n selectedChildZone: Zone = null;\n\n visitsPerSpace: Visit[] = null;\n\n floorsPerSpace: Zone[] = null;\n\n zonesPerSpace: Zone[] = null;\n\n zonesPerFloor: Zone[] = null;\n\n childrenZones: Zone[] = null;\n\n sweepToGo: string;\n\n floorToGo: Zone;\n\n constructor(\n private router: Router,\n private spaceService: SpaceService,\n private zoneService: ZoneService,\n private visitService: VisitService,\n private viewerService: ViewerService,\n private navigatorService: NavigatorService,\n ) {\n this.spaceSubscription = this.spaceService.locationUpdated.subscribe(\n (locs) => {\n this.locations = locs;\n if (this.selectedLocation) {\n this.selectedLocation = this.findLocationByID(\n this.selectedLocation.id,\n ); // Update Object (object address will change);\n }\n },\n );\n this.viewerSubscription = this.viewerService.viewerIsOn.subscribe(\n (data: {\n spaceID: string;\n model3D: string;\n sweep: string | null;\n }) => {\n console.log(\"menu navigation received update\", data);\n this.currentLocationID = data.spaceID;\n this.currentModel3d = data.model3D;\n if (!data.spaceID) {\n this.selectedLocation = null;\n this.sendUpdateLocationEvent();\n return;\n }\n if (\n (!this.selectedLocation ||\n this.selectedLocation.id !== data.spaceID) &&\n this.locations\n ) {\n this.selectedLocation = this.findLocationByID(data.spaceID);\n this.sendUpdateLocationEvent();\n }\n },\n );\n\n /**\n * We listen for Location change event\n */\n this.locationIDSubscription =\n this.navigatorService.locationIDChange.subscribe((id: string) => {\n this.clearData();\n this.selectedLocation = this.findLocationByID(id);\n this.navigatorService.currentNavBarLocationID = id;\n this.onSelectedLocationChanged();\n });\n }\n\n ngOnInit() {\n this.initLocations();\n }\n\n ngOnDestroy() {\n this.spaceSubscription.unsubscribe();\n this.viewerSubscription.unsubscribe();\n this.locationIDSubscription.unsubscribe();\n }\n\n async initLocations() {\n this.locations = this.spaceService.locationsForUser;\n if (this.locations.length === 0) {\n this.locations =\n await this.spaceService.getLocationsForCurrentUser();\n }\n if (this.currentLocationID && this.locations.length > 0) {\n this.selectedLocation = this.findLocationByID(\n this.currentLocationID,\n );\n if (this.selectedLocation) {\n this.sendUpdateLocationEvent();\n }\n }\n }\n\n /**\n * Find a location with a given ID\n * @param id ID for the location\n * @returns The location or null if no location were found\n */\n findLocationByID(id: string): Space {\n const space = this.locations.find((loc) => loc.id === id);\n return space || null; /** Convert to null if undefined */\n }\n\n clearData(clearVisits: boolean = true) {\n this.floorsPerSpace = null;\n this.selectedFloor = null;\n this.zonesPerFloor = null;\n this.childrenZones = null;\n this.selectedModel3d = null;\n this.sweepToGo = null;\n this.floorToGo = null;\n this.selectedZone = null;\n this.selectedChildZone = null;\n if (clearVisits) {\n this.visitsPerSpace = null;\n this.zonesPerSpace = null;\n }\n }\n\n /**\n * When the selectedLocation changes\n * Send a event to locationIDChange from NavigatorService\n * The event will be catch by this component and the filter bar will be update\n */\n sendUpdateLocationEvent() {\n const locationID = this.selectedLocation\n ? this.selectedLocation.id\n : null;\n this.navigatorService.locationIDChange.next(locationID);\n }\n\n async onSelectedLocationChanged() {\n if (!this.selectedLocation) {\n return;\n }\n try {\n this.visitsPerSpace =\n await this.visitService.getVisitsForSpaceForUser(\n this.selectedLocation.id,\n );\n this.zonesPerSpace = await this.zoneService.getZonesBySpaceForUser(\n this.selectedLocation.id,\n );\n if (this.visitsPerSpace.length === 1) {\n this.selectedModel3d = this.visitsPerSpace[0].model3d;\n this.floorsPerSpace = this.zonesPerSpace.filter(\n (zone) => zone.layer && zone.layer.name.includes(\"FLOOR\"),\n );\n if (this.floorsPerSpace.length === 1) {\n [this.selectedFloor] = this.floorsPerSpace;\n this.onFloorClick(false);\n }\n }\n } catch (error) {\n console.log(\"error onChosenLocation\", error);\n }\n }\n\n async onLocationClick() {\n this.clearData();\n await this.sendUpdateLocationEvent();\n }\n\n async onFloorClick(emitEvent = true) {\n this.sweepToGo = null;\n this.selectedZone = null;\n this.selectedChildZone = null;\n if (this.selectedFloor === null) {\n this.navigatorService.navBarZoneIDChange.next(null);\n this.navigatorService.currentNavBarZoneID = null;\n return;\n }\n if (emitEvent) {\n this.navigatorService.navBarZoneIDChange.next(\n this.selectedFloor.id,\n );\n }\n\n this.navigatorService.currentNavBarZoneID = this.selectedFloor.id;\n this.zonesPerFloor = this.zonesPerSpace.filter(\n (zone) =>\n // zone.id === this.selectedFloor.id ||\n zone.parentID === this.selectedFloor.id,\n );\n }\n\n async onZoneClick() {\n this.selectedChildZone = null;\n if (this.selectedZone === null) {\n if (this.selectedFloor === null) {\n this.navigatorService.navBarZoneIDChange.next(null);\n this.navigatorService.currentNavBarZoneID = null;\n } else {\n this.navigatorService.navBarZoneIDChange.next(\n this.selectedFloor.id,\n );\n this.navigatorService.currentNavBarZoneID =\n this.selectedFloor.id;\n }\n return;\n }\n this.childrenZones = this.zonesPerSpace.filter(\n (zone) => zone.parentID === this.selectedZone.id,\n );\n this.navigatorService.navBarZoneIDChange.next(this.selectedZone.id);\n this.navigatorService.currentNavBarZoneID = this.selectedZone.id;\n }\n\n async onVisitClick(event) {\n this.clearData(false);\n const index = event.target.value;\n const visit = this.visitsPerSpace[index];\n this.selectedModel3d = visit.model3d;\n const parentZoneForVisit =\n await this.visitService.getDefaultZoneForVisit(visit);\n this.floorsPerSpace = this.zonesPerSpace.filter(\n (zone) =>\n zone.layer &&\n zone.layer.name.includes(\"FLOOR\") &&\n zone.parentID === parentZoneForVisit.id,\n );\n }\n\n goTo() {\n if (this.selectedZone && !this.selectedZone.virtual) {\n this.sweepToGo = this.selectedChildZone\n ? this.selectedChildZone.sweepIDs[0]\n : this.selectedZone.sweepIDs[0];\n }\n if (this.selectedFloor && !this.selectedZone) {\n this.floorToGo = this.selectedFloor;\n }\n if (this.hasToChangeVisit()) {\n this.goToSweepOrFloor();\n } else {\n if (this.sweepToGo) {\n console.log(\"before set sweep\", this.sweepToGo);\n this.viewerService.setSweepToMove(this.sweepToGo);\n }\n if (this.floorToGo && this.floorsPerSpace.length !== 1) {\n this.navigatorService.floorToGo = this.floorToGo;\n }\n this.router.navigate([\"visit\", this.selectedLocation.id], {\n queryParams: { model3D: this.selectedModel3d },\n });\n }\n }\n\n hasToChangeVisit(): boolean {\n return (\n this.currentLocationID === this.selectedLocation.id &&\n this.selectedModel3d === this.currentModel3d\n );\n }\n\n goToSweepOrFloor() {\n if (this.sweepToGo) {\n this.navigatorService.goToSweepWithRotation(this.sweepToGo);\n }\n if (this.floorToGo) {\n this.navigatorService.goToFloor(this.floorToGo);\n }\n }\n\n // hasHistory(): boolean {\n // return this.navigatorService.modelHasHistory(this.selectedModel3d);\n // }\n\n canGo(): boolean {\n const viewerIsReady =\n this.viewerService.isLoaded && this.viewerService.showingViewer;\n const noViewer = !this.viewerService.showingViewer;\n return viewerIsReady || noViewer;\n }\n\n showLocation(): string {\n if (\n window.innerWidth < 750 &&\n this.navbarSelectMenu &&\n this.navbarSelectMenu.nativeElement.className.search(\"show\") ===\n -1 &&\n this.selectedLocation\n ) {\n return this.selectedLocation.name;\n }\n return \"\";\n }\n}\n","<nav class=\"navbar navbar-expand-md navbar-dark navbar-inverse second-nav\">\n <div class=\"d-flex col-12\">\n <div class=\"me-3\">\n <span class=\"iconify\" data-icon=\"mdi:map-marker-outline\" style=\"color: white;\" data-width=\"30\" data-height=\"30\"></span>\n </div>\n\n <div #navbarSelectMenu class=\"collapse navbar-collapse\" id=\"nav-item-container-blue\">\n <div class=\"d-flex flex-column flex-md-row \">\n <select class=\"form-control flex-fill location select-menu\" [(ngModel)]=\"selectedLocation\"\n (ngModelChange)=\"onLocationClick()\">\n <option [ngValue]=\"null\" selected>{{ 'Location' | translate }}</option>\n <option *ngFor=\"let loc of locations; index as index\" [ngValue]=\"loc\"> {{ loc.name }}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" (change)=\"onVisitClick($event)\"\n *ngIf=\"visitsPerSpace && visitsPerSpace.length > 1\">\n <option value=\"default\" selected disabled hidden>{{'Visit' | translate}}</option>\n <option *ngFor=\"let visit of visitsPerSpace; index as index\" value=\"{{index}}\">{{ visit.name}}\n </option>\n </select>\n <select class=\"form-control flex-fill floor select-menu\" [(ngModel)]=\"selectedFloor\"\n (ngModelChange)=\"onFloorClick()\">\n <option [ngValue]=\"null\" selected>{{'Floor' | translate}}</option>\n <option *ngFor=\"let zone of floorsPerSpace\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu zone\" [(ngModel)]=\"selectedZone\"\n (ngModelChange)=\"onZoneClick()\">\n <option [ngValue]=\"null\" selected>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of zonesPerFloor\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" [(ngModel)]=\"selectedChildZone\"\n *ngIf=\"childrenZones && childrenZones.length>0\">\n <option [ngValue]=\"null\" selected disabled>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of childrenZones\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <!-- <select class=\"form-control flex-fill\">\n <option i18n>{{'Favorites' | translate}}</option>\n </select> -->\n </div>\n <div class=\"row\" style=\"margin-left: 0;\">\n <div class=\"outer_circle\">\n <button id='btn-icon' [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\"\n (click)=\"goTo()\"></button>\n </div>\n <button (click)=\"goTo()\" class=\"btn rounded-pill btn-3d\"\n [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\">{{'3D visit' | translate}}</button>\n </div>\n </div>\n\n <h4 style=\"line-height: 29px;margin: 0;\" *ngIf=\"showLocation()\">\n {{ showLocation() }}\n </h4>\n </div>\n</nav>\n","import { Component, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { LocaleService } from '../../services/locale.service';\r\nimport { NavigatorService } from '../../services/navigator.service';\r\nimport { SupportService } from '../../services/support.service';\r\nimport { BaseUserService } from '../../services/user.service';\r\nimport { ProfileEntity, Mission } from '../../types.service';\r\nimport { SupportModalComponent } from '../support-modal/support-modal.component';\r\n\r\n@Component({\r\n selector: 'lib-menu-bar',\r\n templateUrl: './menu-bar.component.html',\r\n styleUrls: ['./menu-bar.component.scss']\r\n})\r\nexport class MenuBarComponent implements OnInit {\r\n\r\n user: ProfileEntity;\r\n\r\n mission: Mission;\r\n\r\n isVisitor = true;\r\n\r\n isVisible = false;\r\n\r\n isManager: boolean;\r\n\r\n userSubscription: Subscription;\r\n\r\n navSubscription: Subscription;\r\n\r\n constructor(\r\n private router: Router,\r\n public localeService: LocaleService,\r\n private userService: BaseUserService,\r\n private navigatorService: NavigatorService,\r\n private supportService: SupportService,\r\n ) {\r\n this.userSubscription = this.userService.isChanged.subscribe(\r\n (isChanged) => {\r\n if (isChanged) {\r\n this.update();\r\n }\r\n },\r\n );\r\n this.navSubscription = this.navigatorService.isVisibleChanged.subscribe(\r\n (data) => {\r\n this.isVisible = data;\r\n },\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n this.update();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const input = document.querySelector(\r\n \"#mainSearchBar\",\r\n ) as HTMLInputElement;\r\n if (input) {\r\n input.addEventListener(\"keydown\", ({ key }) => {\r\n if (key === \"Enter\") {\r\n this.onSubmit();\r\n }\r\n });\r\n }\r\n this.handleCloseNavbarForItems();\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.userSubscription) {\r\n this.userSubscription.unsubscribe();\r\n }\r\n if (this.navSubscription) {\r\n this.navSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n async signOut() {\r\n await this.userService.logoutCurrentAndSignOutAuth();\r\n this.router.navigate([\"auth\"]); \r\n }\r\n\r\n async update() {\r\n this.user = this.userService.cu;\r\n this.mission = this.userService.currentMissions[0];\r\n this.isManager = this.userService.hasManagerRoleInAnyMission();\r\n this.isVisitor = this.userService.isVisitor();\r\n if (!this.isVisitor) {\r\n this.isVisible = true;\r\n }\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n onSubmit() {\r\n const input = document.querySelector(\r\n \"#mainSearchBar\",\r\n ) as HTMLInputElement;\r\n const searchValue = input.value.toLowerCase();\r\n if (searchValue !== \"\") {\r\n const baseUrl = location.origin;\r\n window.open(\r\n `${baseUrl}/dashboard/search?term=${searchValue}`,\r\n \"_blank\",\r\n );\r\n }\r\n }\r\n\r\n onToggleVisible() {\r\n this.isVisible = !this.isVisible;\r\n }\r\n\r\n handleCloseNavbarForItems() {\r\n const navItems = document.querySelectorAll(\".nav-link\");\r\n const buttonNavToggler = document.querySelector(\".navbar-toggler\");\r\n const navbarItemContainer = document.querySelector(\r\n \"#nav-item-container\",\r\n ) as HTMLDivElement;\r\n const navbarItemContainerTwo = document.querySelector(\r\n \"#nav-item-container-blue\",\r\n ) as HTMLDivElement;\r\n // eslint-disable-next-line unicorn/no-array-for-each\r\n navItems.forEach((navItem) => {\r\n navItem.addEventListener(\"click\", () => {\r\n if (navbarItemContainer.classList.contains(\"show\")) {\r\n buttonNavToggler.setAttribute(\"aria-expanded\", \"false\");\r\n navbarItemContainer.classList.remove(\"show\");\r\n navbarItemContainer.classList.replace(\r\n \"collapse\",\r\n \"collapsing\",\r\n );\r\n navbarItemContainerTwo.classList.remove(\"show\");\r\n navbarItemContainerTwo.classList.replace(\r\n \"collapse\",\r\n \"collapsing\",\r\n );\r\n\r\n setTimeout(() => {\r\n navbarItemContainer.classList.replace(\r\n \"collapsing\",\r\n \"collapse\",\r\n );\r\n }, 500);\r\n setTimeout(() => {\r\n navbarItemContainerTwo.classList.replace(\r\n \"collapsing\",\r\n \"collapse\",\r\n );\r\n }, 500);\r\n }\r\n });\r\n });\r\n }\r\n\r\n openSupportForm() {\r\n this.supportService.openSupportForm(SupportModalComponent);\r\n }\r\n\r\n}\r\n","<div id=\"menu-bar\">\r\n <div *ngIf=\"!isVisitor\">\r\n <nav class=\"navbar navbar-expand-md navbar-light p-0\">\r\n <div class=\"container-fluid\" *ngIf=\"isVisible\">\r\n <div class=\"navbar-brand\" [routerLink]=\"['/dashboard']\">\r\n <img alt=\"\" src=\"../assets/images/logos/logo-rvb-straight.png\">\r\n </div>\r\n <button class=\"navbar-toggler\" data-bs-target=\".navbar-collapse\" data-bs-toggle=\"collapse\" type=\"button\">\r\n <span class=\"navbar-toggler-icon\"></span>\r\n </button>\r\n <div class=\"collapse navbar-collapse\" id=\"nav-item-container\">\r\n <form class=\"form-inline ms-3\">\r\n <input class=\"form-control search-button\" placeholder=\"keyword\" id=\"mainSearchBar\" type=\"text\">\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSubmit()\">{{'Search' |\r\n translate}}</button>\r\n <lib-range-date-picker></lib-range-date-picker>\r\n </form>\r\n \r\n <!-- <div class=\"d-md-none\">\r\n <app-dashboard-navigation></app-dashboard-navigation>\r\n </div> -->\r\n <div class=\"ms-auto nav-item dropdown\">\r\n <div class=\"profile_pic dropdown-toggle\" data-bs-toggle=\"dropdown\">\r\n <lib-avatar></lib-avatar>\r\n </div>\r\n <div class=\"dropdown-menu dropdown-menu-right\">\r\n <p *ngIf=\"user && mission\" class=\"p-2\">\r\n <span class=\"username\">{{ user.displayName }}</span><br />\r\n <span class=\"user-role\">{{ mission.role }}</span><br />\r\n <span class=\"org\">{{ mission.organisation ? mission.organisation.name : \"No organisation\" |\r\n translate}}</span>\r\n </p>\r\n <div class=\"dropdown-divider\"></div>\r\n <!-- <a class=\"dropdown-item\" routerLink=\"/debug\" *ngIf=\"isManager\">Debug</a> -->\r\n <a class=\"dropdown-item\" (click)=\"localeService.modal()\">{{'Language' | translate}}</a>\r\n <a class=\"dropdown-item\" routerLink=\"/dashboard\">{{'Data management' | translate}}</a>\r\n <a class=\"dropdown-item\" routerLink=\"/admin\" *ngIf=\"isManager\">\r\n {{'Users management' | translate}}</a>\r\n <a class=\"dropdown-item\" routerLink=\"/profile\">\r\n {{'Profile' | translate}}</a>\r\n <div class=\"dropdown-divider\"></div>\r\n <button class=\"dropdown-item\" (click)=\"openSupportForm()\">{{\"Help\" | translate}}</button>\r\n <button class=\"dropdown-item\" (click)=\"signOut()\">{{\"Logout\" | translate}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </nav>\r\n <lib-navigation-bar *ngIf=\"isVisible\"></lib-navigation-bar>\r\n </div>\r\n</div>\r\n \r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { CsvExportComponent } from './components/csv-export/csv-export.component';\r\nimport { SearchBarComponent } from './components/search-bar/search-bar.component';\r\nimport { Config } from './config';\r\nimport { DurationToStringPipe } from './pipes/duration-to-string.pipe';\r\nimport { HashtagFromIdPipe } from './pipes/hashtag-from-id.pipe';\r\nimport { SafeUrlPipe } from './pipes/safe-url.pipe';\r\nimport { TimeDateToLocalStringPipe } from './pipes/time-date-to-local-string.pipe';\r\nimport { ModalSwitchVisitComponent } from './components/modal-switch-visit/modal-switch-visit.component';\r\nimport { UsernameFromIdPipe } from './pipes/username-from-id.pipe';\r\nimport { MenuBarComponent } from './components/menu-bar/menu-bar.component';\r\nimport { AvatarComponent } from './components/menu-bar/avatar/avatar.component';\r\nimport { NavigationBarComponent } from './components/menu-bar/navigation-bar/navigation-bar.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { RangeDatePickerComponent } from './components/menu-bar/range-date-picker/range-date-picker.component';\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { LoaderComponent } from './components/loader/loader.component';\r\nimport { SupportModalComponent } from './components/support-modal/support-modal.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n@NgModule({\r\n declarations: [\r\n TimeDateToLocalStringPipe,\r\n SafeUrlPipe,\r\n HashtagFromIdPipe,\r\n DurationToStringPipe,\r\n CsvExportComponent,\r\n SearchBarComponent,\r\n UsernameFromIdPipe,\r\n ModalSwitchVisitComponent,\r\n MenuBarComponent,\r\n AvatarComponent,\r\n NavigationBarComponent,\r\n RangeDatePickerComponent,\r\n LoaderComponent,\r\n SupportModalComponent\r\n ],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CommonModule,\r\n RouterModule,\r\n NgbModule,\r\n TranslateModule.forChild({\r\n extend: true\r\n })\r\n ],\r\n exports: [\r\n CsvExportComponent,\r\n SearchBarComponent,\r\n TimeDateToLocalStringPipe,\r\n SafeUrlPipe,\r\n HashtagFromIdPipe,\r\n DurationToStringPipe,\r\n UsernameFromIdPipe,\r\n MenuBarComponent,\r\n LoaderComponent,\r\n SupportModalComponent\r\n ]\r\n})\r\nexport class NgxSmarterplanCoreModule {\r\n public static forRoot(config: Config): ModuleWithProviders<NgxSmarterplanCoreModule> {\r\n return {\r\n ngModule: NgxSmarterplanCoreModule,\r\n providers: [\r\n {\r\n provide: 'config',\r\n useValue: config\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","/* eslint-disable no-case-declarations */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Comment, DbObjectType, Equipment, Feature, POI, PoiType, TagAction, Ticket } from \"../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseTagService {\r\n\r\n constructor() {}\r\n\r\n async getHtmlToInject(\r\n tagType: PoiType,\r\n object: DbObjectType,\r\n maxHeightDiv: number\r\n ): Promise<{ html: string; height: number }> {\r\n throw new Error(`getHtmlToInject is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n getUrlForSeeDetails(\r\n object: DbObjectType,\r\n tagType: PoiType,\r\n ): string {\r\n switch (tagType) {\r\n case PoiType.TICKET: {\r\n return `visit/${object.spaceID}/detail/${object.id}`;\r\n }\r\n case PoiType.EQUIPMENT: {\r\n return `visit/${object.spaceID}/equip/${object.id}`;\r\n }\r\n case PoiType.MEASURE: {\r\n return `visit/${object.spaceID}/measurement/${object.id}`;\r\n }\r\n case PoiType.DATA: {\r\n return `visit/${object.spaceID}/feature/${object.id}`;\r\n }\r\n case PoiType.DESK: {\r\n return `visit/${object.spaceID}/add_booking/${object.id}`;\r\n }\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n async prepareEquipmentHtml(\r\n equip: Equipment,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareEquipmentHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareTicketHtml(\r\n ticket: Ticket,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareTicketHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareFeatureHtml(\r\n feature: Feature,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareFeatureHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareMeasurementHtml(\r\n measure: Comment,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareMeasurementHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareDeskHtml(\r\n feature: Feature,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareDeskHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareIndicatorHtml(\r\n feature: Feature,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareDeskHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async getSignedTagIconSource(tagIconSrc: string): Promise<string | null> {\r\n throw new Error(`getSignedTagIconSource is not implemented in the base class.`);\r\n }\r\n\r\n getIconTagImageForFeature(feature: DbObjectType, poi: POI): string {\r\n const tagIcon = JSON.parse(poi.tagIcon);\r\n return tagIcon.src;\r\n }\r\n\r\n\r\n getScriptForTag(object, tagType: PoiType): string {\r\n throw new Error(`getScriptForTag is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionDetailClick(url: string) {\r\n throw new Error(`onActionDetailClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionAudioClick(audioCommentID: string) {\r\n throw new Error(`onActionDetailClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionVideoClick(url: string) {\r\n throw new Error(`onActionVideoClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionImageClick(imageCommentID: string) {\r\n throw new Error(`onActionImageClick is not implemented in the base class.\r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionDocClick(url: string) {\r\n throw new Error(`onActionDocClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n \r\n onActionYoutubeClick(url: string) {\r\n throw new Error(`onActionYoutubeClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Measurement, Feature, Comment, IUpdate, CommentType } from \"../../types.service\";\r\nimport { uploadFileToS3 } from \"../s3.service\";\r\nimport { PoiService } from \"./poi.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class CommentService {\r\n\r\n API: any; // AWS\r\n constructor(@Inject('currentAPIService') apiInjected: any, \r\n private poiService: PoiService) {\r\n this.API = apiInjected;\r\n }\r\n\r\n getCommentsFromTicketID(ticketID: string): Promise<Comment[]> {\r\n return this.API.__proto__.CommentsByTicket(ticketID).then((res)=>res.items);\r\n }\r\n\r\n async getCommentsBySpaceID(spaceID: string): Promise<Comment[]> {\r\n return this.API.__proto__.ListComments({ spaceID: { eq: spaceID } }).then(\r\n (comments) => comments.items,\r\n );\r\n }\r\n\r\n async readCommentAsMeasurement(commentID: string): Promise<Measurement> {\r\n const comment = await this.getComment(commentID);\r\n if (comment.ticketID && !comment.ticket) {\r\n comment.ticket = await this.API.__proto__.GetTicket(comment.ticketID);\r\n }\r\n const values = comment.dimensions;\r\n const numberPoints = values.length + 1;\r\n const poi = await this.poiService.getPoiByElementId(commentID);\r\n const measure = {\r\n id: comment.id,\r\n comment,\r\n poi,\r\n numberPoints,\r\n values,\r\n } as Measurement;\r\n return measure;\r\n }\r\n\r\n /**\r\n * CRUD\r\n *\r\n */\r\n async getComment(commentID: string): Promise<Comment> {\r\n return this.API.__proto__.GetComment(commentID);\r\n }\r\n\r\n async deleteComment(commentID: string): Promise<Comment> {\r\n return this.API.__proto__.DeleteComment({ id: commentID });\r\n }\r\n\r\n async createComment(comment: Comment): Promise<Comment> {\r\n return this.API.__proto__.CreateComment(comment);\r\n }\r\n\r\n async updateComment(input: any): Promise<Comment> {\r\n return this.API.__proto__.UpdateComment(input);\r\n }\r\n\r\n async uploadFileForComment(file: File, id: string = null): Promise<string> {\r\n return uploadFileToS3(\"comments/\", file, id);\r\n }\r\n\r\n /** Create a new comment with an existing Annexe */\r\n async createCommentWithFileURL(\r\n comment: Comment,\r\n url: string,\r\n ): Promise<Comment> {\r\n const newComment = comment;\r\n newComment.annexe = url;\r\n return this.createComment(newComment);\r\n }\r\n\r\n async createCommentWithFile(\r\n comment: Comment,\r\n file: File,\r\n ): Promise<Comment> {\r\n let createdComment = await this.createComment(comment);\r\n if (file) {\r\n const url = await this.uploadFileForComment(\r\n file,\r\n createdComment.id,\r\n );\r\n createdComment = await this.updateComment({\r\n id: createdComment.id,\r\n annexe: url,\r\n });\r\n }\r\n return createdComment;\r\n }\r\n\r\n \r\n\r\n async setCommentAsCoverForFeature(\r\n commentID: string,\r\n feature: Feature,\r\n ): Promise<Comment> {\r\n const updatedComment = await this.updateComment({\r\n id: commentID,\r\n isCoverImage: true,\r\n });\r\n await Promise.all(\r\n feature.comments.items.map(async (image) => {\r\n if (\r\n image.type === CommentType.IMAGE &&\r\n image.id !== commentID\r\n ) {\r\n await this.updateComment({\r\n id: image.id,\r\n isCoverImage: false,\r\n });\r\n }\r\n }),\r\n );\r\n return updatedComment;\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Injectable, OnInit } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { Subject } from \"rxjs\";\r\nimport { MediaContent } from \"../types.service\";\r\nimport { CommentService } from \"./models/comment.service\";\r\nimport { FeatureService } from \"./models/feature.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ContentService {\r\n modalReference;\r\n\r\n currentAudio: HTMLAudioElement;\r\n\r\n closeModal = new Subject<boolean>();\r\n\r\n nextSlide = new Subject<string>();\r\n\r\n constructor(public modalService: NgbModal, private router: Router, private commentService: CommentService) {}\r\n\r\n presentVideoModal(video: MediaContent, videoComponent: any, modalDialogClass: string) {\r\n this.modalReference = this.modalService.open(videoComponent, {\r\n modalDialogClass: modalDialogClass,\r\n });\r\n this.modalReference.componentInstance.video = video;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n }\r\n\r\n async presentAudioModal(audioCommentID: string, audioComponent: any, modalDialogClass: string) {\r\n const audioComment = await this.commentService.getComment(audioCommentID);\r\n const audioMediaContent = {\r\n path: audioComment.annexe,\r\n title: audioComment.title,\r\n description: audioComment.description,\r\n } as MediaContent;\r\n this.modalReference = this.modalService.open(audioComponent, {\r\n modalDialogClass: modalDialogClass,\r\n });\r\n this.modalReference.componentInstance.audio = audioMediaContent;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal(); \r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n }\r\n\r\n presentImageCarouselModal(featureID: string, carouselComponent: any, modalDialogClass: string, \r\n fromTag = true, selectedImageIndex='0') {\r\n this.modalReference = this.modalService.open(\r\n carouselComponent,\r\n {\r\n modalDialogClass: modalDialogClass,\r\n },\r\n );\r\n this.modalReference.componentInstance.featureID = featureID;\r\n this.modalReference.componentInstance.fromTag = fromTag;\r\n this.modalReference.componentInstance.selectedImageIndex = selectedImageIndex;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.componentInstance.slideChanged.subscribe(\r\n (slide) => {\r\n this.nextSlide.next(slide.current);\r\n },\r\n );\r\n }\r\n\r\n presentPdfModal(url: string, pdfComponent: any, modalDialogClass: string,) {\r\n this.modalReference = this.modalService.open(pdfComponent, {\r\n modalDialogClass: modalDialogClass,\r\n });\r\n this.modalReference.componentInstance.url = url;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n }\r\n\r\n presentMuseumImageCarouselModal(\r\n carouselComponent: any,\r\n modalDialogClass: string,\r\n fromTag = true,\r\n selectedImageIndex = \"0\",\r\n images: any[] = null,\r\n commentImageID: string = null,\r\n ) {\r\n this.modalReference = this.modalService.open(carouselComponent, {\r\n modalDialogClass,\r\n });\r\n this.modalReference.componentInstance.fromTag = fromTag;\r\n this.modalReference.componentInstance.selectedImageIndex =\r\n selectedImageIndex;\r\n this.modalReference.componentInstance.images = images;\r\n this.modalReference.componentInstance.commentID = commentImageID;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.componentInstance.slideChanged.subscribe(\r\n (slide) => {\r\n this.nextSlide.next(slide.current);\r\n },\r\n );\r\n }\r\n\r\n toogleAudioElement(url: string) {\r\n if (!this.currentAudio || this.currentAudio.src !== url) {\r\n this.currentAudio = new Audio(url);\r\n }\r\n if (this.currentAudio.duration > 0 && !this.currentAudio.paused) {\r\n // it is playing, we stop it\r\n this.currentAudio.pause();\r\n } else {\r\n this.currentAudio.play();\r\n }\r\n }\r\n\r\n showFullscreenCarouselForFeature(featureID: string, fromTag = false) {\r\n const url = this.router.serializeUrl(\r\n this.router.createUrlTree([`/fullscreen/${featureID}`], {\r\n queryParams: { fromTag },\r\n }),\r\n );\r\n window.open(url, \"_blank\");\r\n }\r\n\r\n emitCloseModal() {\r\n this.modalReference = null;\r\n this.closeModal.next(true);\r\n }\r\n\r\n forceCloseCurrentModal() {\r\n if (this.modalReference) {\r\n this.modalReference.dismiss(\"forced\");\r\n }\r\n }\r\n\r\n moveToSlide(slide: string) {\r\n if (this.modalReference) {\r\n this.modalReference.componentInstance.navigateToSlide(slide);\r\n }\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseLateralTabService {\r\n activeTab = \"tickets\";\r\n\r\n firstLoad = true;\r\n\r\n constructor() { }\r\n\r\n storeTabHistory(tab: string) {\r\n this.activeTab = tab;\r\n }\r\n\r\n getTabHistory(): string {\r\n // throw new Error(\"Method 'getTabHistory' not implemented.\");\r\n return this.activeTab;\r\n }\r\n}\r\n","import { Injectable, Inject } from \"@angular/core\";\r\nimport { Layer } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class LayerService {\r\n API: any; //AWS\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getLayerForOrganisation(orgID: string): Promise<Layer[]> {\r\n return this.API.__proto__.LayersByOrganisation(orgID).then((list) => list.items);\r\n }\r\n\r\n async createLayerForOrganisation(\r\n layerName: string,\r\n orgID: string,\r\n ): Promise<Layer> {\r\n return this.API.__proto__.CreateLayer({\r\n name: layerName.toUpperCase(),\r\n organisationID: orgID,\r\n });\r\n }\r\n\r\n async getLayerByNameForOrganisation(layerName: string, orgID: string) {\r\n return this.API.__proto__.LayersByOrganisation(orgID, null, {\r\n name: { eq: layerName.toUpperCase() },\r\n }).then((list) => list.items);\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { removeNullKeysFromObject, wait } from \"../helpers.service\";\r\nimport { LevelStatus, Layer, Node, Zone, Navigation, Plan } from \"../types.service\";\r\nimport { LayerService } from \"./models/layer.service\";\r\nimport { NavigationService } from \"./models/navigation.service\";\r\nimport { PlanService } from \"./models/plan.service\";\r\nimport { ZoneService } from \"./models/zone.service\";\r\nimport { uploadJsonToS3, uploadBase64Image, removeAllFilesFromFolderS3 } from \"./s3.service\";\r\nimport { BaseUserService } from \"./user.service\";\r\nimport { ViewerService } from \"./viewer.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class MatterportImportService {\r\n private currentFrame;\r\n\r\n public sdk: any;\r\n\r\n private sweeps: Object;\r\n\r\n public floors: Object;\r\n\r\n private currentFloor;\r\n\r\n private _modelID: string;\r\n\r\n private _spaceID: string;\r\n\r\n public get spaceID(): string {\r\n return this._spaceID;\r\n }\r\n\r\n public set spaceID(value: string) {\r\n this._spaceID = value;\r\n }\r\n\r\n public get modelID(): string {\r\n return this._modelID;\r\n }\r\n\r\n public set modelID(value: string) {\r\n this._modelID = value;\r\n }\r\n\r\n public stop = false;\r\n\r\n public importingImages: Subject<boolean> = new Subject<boolean>();\r\n\r\n public intersection: Subject<any> = new Subject<any>();\r\n\r\n public sweepProcessedCount: Subject<number> = new Subject<number>();\r\n\r\n public totalSweepsCount: Subject<number> = new Subject<number>();\r\n\r\n constructor(\r\n private navigationService: NavigationService,\r\n private zoneService: ZoneService,\r\n private viewerService: ViewerService,\r\n private layerService: LayerService,\r\n private userService: BaseUserService,\r\n private planService: PlanService,\r\n ) {}\r\n\r\n async initSdkForModel(modelID: string): Promise<boolean> {\r\n this.stop = false;\r\n return new Promise((resolve, reject) => {\r\n // Load SDK\r\n console.log(\"Loading Matterport SDK\");\r\n this.modelID = modelID;\r\n const iframe = document.createElement(\"iframe\");\r\n if (!iframe) {\r\n reject(new Error(\"Cannot create iframe\"));\r\n }\r\n this.viewerService.setTourUrl(modelID);\r\n const url = this.viewerService.getTourUrl();\r\n iframe.setAttribute(\"src\", url);\r\n iframe.allow = \"xr-spatial-tracking\";\r\n iframe.height = \"100%\";\r\n iframe.width = \"100%\";\r\n iframe.id = \"viewer-module\";\r\n const element = document.querySelector(\"#viewer-frame\");\r\n element.append(iframe);\r\n this.currentFrame = iframe;\r\n\r\n // @ts-ignore\r\n window.MP_SDK.connect(iframe, \"qn9wsasuy5h2fzrbrn1nzr0id\", \"3.11\")\r\n .then(async (sdk) => {\r\n // Instanciate sdk\r\n this.sdk = sdk;\r\n\r\n // Sibscribe to Floor data\r\n this.sdk.Floor.data.subscribe({\r\n onCollectionUpdated: function upd(collection: any) {\r\n // console.log(\"Floors\", collection);\r\n this.floors = collection;\r\n }.bind(this),\r\n });\r\n // Subscribe to current Floor\r\n this.sdk.Floor.current.subscribe(\r\n function upd(currentFloor) {\r\n this.currentFloor = currentFloor;\r\n // Change to the current floor has occurred.\r\n // if (currentFloor.sequence === -1) {\r\n // console.log(\"Currently viewing all floors\");\r\n // } else if (currentFloor.sequence === undefined) {\r\n // if (currentFloor.id === undefined) {\r\n // console.log(\"Current viewing an unplaced unaligned sweep\");\r\n // } else {\r\n // // console.log('Currently transitioning between floors');\r\n // }\r\n // } else {\r\n // // console.log('Currently on floor', currentFloor.id);\r\n // // console.log('Current floor\\'s sequence index', currentFloor.sequence);\r\n // // console.log('Current floor\\'s name', currentFloor.name)\r\n // }\r\n }.bind(this),\r\n );\r\n\r\n // Subscribe to Sweep data\r\n this.sdk.Sweep.data.subscribe({\r\n onCollectionUpdated: function upd(collection) {\r\n // console.log(\r\n // \"the entire up-to-date collection\",\r\n // collection,\r\n // );\r\n this.sweeps = collection;\r\n }.bind(this),\r\n });\r\n\r\n // Subscribe to intersection\r\n this.sdk.Pointer.intersection.subscribe(\r\n function pointer(intersectionData) {\r\n this.intersection.next(intersectionData.position);\r\n }.bind(this),\r\n );\r\n // remove labels\r\n this.sdk.Settings.update(\"labels\", false)\r\n .then(function (data) {\r\n // Setting update complete.\r\n console.log(`Labels setting: ${data}`);\r\n })\r\n .catch(function (error) {\r\n // Setting update error.\r\n });\r\n\r\n setTimeout(async () => {\r\n console.log(\"init done\");\r\n resolve(true);\r\n }, 5000);\r\n })\r\n .catch((handleError) => console.error(handleError));\r\n });\r\n }\r\n\r\n async importData(\r\n spaceID: string,\r\n surface: number,\r\n reloading: boolean = false,\r\n node: Node = null,\r\n ): Promise<boolean> {\r\n this.spaceID = spaceID;\r\n let floorZones: Zone[] = [];\r\n const zones = await this.zoneService.getZonesBySpace(spaceID);\r\n const mainZone = zones.find((z) => !z.parentID);\r\n if (this.sweeps && mainZone) {\r\n console.log(\"importing data from matterport\");\r\n // save sweeps data as json\r\n const json = JSON.stringify(Object.values(this.sweeps));\r\n await uploadJsonToS3(\r\n `visits/${this.modelID}/inventory/`,\r\n json,\r\n \"data.json\",\r\n );\r\n if (reloading) {\r\n // perform only 360 import since we are reloading\r\n await this.import360images();\r\n console.log(\"after reloading\");\r\n return Promise.resolve(true);\r\n }\r\n // check layer of building type\r\n const layerBuilding = await this.getLayerByName(\"BUILDING\");\r\n const createdDefaultZone = await this.createZone(\r\n node.metadata,\r\n layerBuilding.id,\r\n surface,\r\n mainZone.id,\r\n Object.keys(this.sweeps),\r\n node,\r\n );\r\n if (!createdDefaultZone) {\r\n return Promise.resolve(false);\r\n }\r\n if (this.floors) {\r\n floorZones = await this.importFloorData(\r\n createdDefaultZone.id,\r\n node,\r\n );\r\n }\r\n // console.log(floorZones);\r\n await Promise.all(\r\n Object.keys(this.sweeps).map(async (key) => {\r\n const sweepInfo = this.sweeps[key];\r\n const navigationInput = {\r\n matterportSweepID: sweepInfo.uuid,\r\n position: JSON.stringify(sweepInfo.position),\r\n rotation: JSON.stringify(sweepInfo.rotation),\r\n level: LevelStatus.LOW,\r\n nodeID: node.id,\r\n spaceID,\r\n } as Navigation;\r\n const nav = await this.navigationService.createNavigation(\r\n navigationInput,\r\n );\r\n if (!nav) {\r\n console.log(\r\n \"could create navigation\",\r\n navigationInput.id,\r\n );\r\n }\r\n }),\r\n );\r\n await this.import360images();\r\n return Promise.resolve(true);\r\n }\r\n return Promise.resolve(false);\r\n }\r\n\r\n async createZone(\r\n name: string,\r\n layerID: string,\r\n surface: number = null,\r\n parentID: string = null,\r\n sweeps: string[] = [],\r\n node: Node = null,\r\n metadata: string = null,\r\n ): Promise<Zone> {\r\n const zoneInput = {\r\n name,\r\n spaceID: this.spaceID,\r\n layerID,\r\n sweepIDs: sweeps,\r\n nodeIDs: node ? [node.id] : null,\r\n } as Zone;\r\n removeNullKeysFromObject(zoneInput);\r\n if (surface) {\r\n zoneInput.surface = surface;\r\n }\r\n if (parentID) {\r\n zoneInput.parentID = parentID;\r\n }\r\n if (metadata) {\r\n zoneInput.metadata = metadata;\r\n }\r\n const newLocal = await this.zoneService.create(zoneInput);\r\n return newLocal;\r\n }\r\n\r\n async import360images(): Promise<boolean> {\r\n console.log(\"Importing 360 images\");\r\n this.importingImages.next(true);\r\n return new Promise(async (resolve) => {\r\n const scans = Object.values(this.sweeps);\r\n let maxScan;\r\n let indexScan;\r\n const nmbScans = Object.keys(scans).length;\r\n console.log(\"Total number of scan points :\", nmbScans);\r\n this.totalSweepsCount.next(nmbScans);\r\n // check if we started to load images already\r\n if (localStorage.getItem(\"indexScanLoad\")) {\r\n console.log(\r\n \"retaking import from scan\",\r\n localStorage.getItem(\"indexScanLoad\"),\r\n );\r\n indexScan = +localStorage.getItem(\"indexScanLoad\");\r\n nmbScans < indexScan + 50\r\n ? (maxScan = nmbScans)\r\n : (maxScan = indexScan + 50);\r\n } else {\r\n indexScan = 0;\r\n nmbScans < 50 ? (maxScan = nmbScans) : (maxScan = 50);\r\n maxScan;\r\n }\r\n\r\n for (let index = indexScan; index < maxScan; index += 1) {\r\n if (!this.stop) {\r\n await this.sdk.Sweep.moveTo(scans[index].uuid);\r\n await this.sdk.Camera.setRotation({\r\n x: 0,\r\n y: 0,\r\n });\r\n const img = await this.sdk.Renderer.takeEquirectangular(\r\n { width: 2048, height: 1024 },\r\n { mattertags: false, sweeps: true },\r\n );\r\n await uploadBase64Image(\r\n img,\r\n scans[index].uuid,\r\n `visits/${this.modelID}/sweeps/`,\r\n \"sweep\",\r\n );\r\n this.sweepProcessedCount.next(index);\r\n } else {\r\n localStorage.removeItem(\"indexScanLoad\");\r\n removeAllFilesFromFolderS3(`visits/${this.modelID}/sweeps`);\r\n console.log(\"Abandoning import beacuse it was cancelled\");\r\n resolve(false);\r\n break;\r\n }\r\n }\r\n if (maxScan === nmbScans) {\r\n console.log(\"Import 360 done\");\r\n localStorage.removeItem(\"indexScanLoad\");\r\n this.removeFrame();\r\n this.stop = true;\r\n resolve(true);\r\n } else if (!this.stop) {\r\n // to restart the procedure from where we left of\r\n localStorage.setItem(\"indexScanLoad\", maxScan.toString());\r\n this.removeFrame();\r\n await this.initSdkForModel(this.modelID);\r\n await this.importData(this.spaceID, 0, true);\r\n resolve(true);\r\n }\r\n });\r\n }\r\n\r\n async moveToFloor(floorName: string) {\r\n // by name\r\n // console.log(floorName);\r\n let floorMatterport = Object.values(this.floors).find(\r\n (floor) => floor.name !== \"\" && floorName.includes(floor.name),\r\n );\r\n // by id\r\n if (!floorMatterport) {\r\n floorMatterport = Object.values(this.floors).find((floor) =>\r\n floorName.includes(floor.id),\r\n );\r\n }\r\n // console.log(floorMatterport);\r\n if (floorMatterport) {\r\n try {\r\n await this.sdk.Floor.moveTo(floorMatterport.sequence);\r\n } catch (error) {\r\n console.log(\"Cannot move to Floor\", error);\r\n }\r\n }\r\n }\r\n\r\n public async importFloorData(\r\n defautZoneID: string,\r\n node: Node,\r\n ): Promise<Zone[]> {\r\n const zones = [];\r\n await this.sdk.Mode.moveTo(this.sdk.Mode.Mode.FLOORPLAN);\r\n const nmbFloors = Object.keys(this.floors).length;\r\n console.log(\"Total number of floors\", nmbFloors);\r\n for (let index = 0; index < nmbFloors; index += 1) {\r\n // eslint-disable-next-line no-await-in-loop\r\n console.log(\"Importing floor\", index);\r\n await this.sdk.Floor.moveTo(index).then(async () => {\r\n await wait(700);\r\n // console.log(\"about to save the floor\", index);\r\n const zone = await this.saveFloor(defautZoneID, node);\r\n // console.log(\"received floor zone\", zone);\r\n zones.push(zone);\r\n });\r\n }\r\n return Promise.resolve(zones);\r\n }\r\n\r\n private async saveFloor(defautZoneID: string, node: Node): Promise<Zone> {\r\n let name = this.currentFloor.id;\r\n if (this.currentFloor.name !== \"\") {\r\n name = this.currentFloor.name;\r\n }\r\n const layerFloor = await this.getLayerByName(\"FLOOR\");\r\n const sweepsInfo = Object.values(this.sweeps);\r\n const sweepsForFloor = sweepsInfo.filter(\r\n (sweepInfo) => sweepInfo.floorInfo.id === this.currentFloor.id,\r\n );\r\n const sweepIDs: string[] = sweepsForFloor.map((sweep) => sweep.uuid);\r\n const zone = await this.createZone(\r\n `Étage ${name} - ${node.metadata}`,\r\n layerFloor.id,\r\n null,\r\n defautZoneID,\r\n sweepIDs,\r\n node,\r\n JSON.stringify({matterportFloorSequence: this.currentFloor.sequence})\r\n );\r\n // TODO link to scans\r\n const base64 = await this.sdk.Renderer.takeScreenShot(\r\n { width: 4096, height: 2048 },\r\n );\r\n const spaceIDshort = this.spaceID.slice(0, 8);\r\n await uploadBase64Image(\r\n base64,\r\n null,\r\n `visits/${this.modelID}/plans/`,\r\n `plan_floor_${this.currentFloor.id}_${spaceIDshort}`,\r\n );\r\n // create Plan object\r\n const plan = {\r\n name: `plan_floor_${this.currentFloor.id}`,\r\n annexe: `visits/${this.modelID}/plans/plan_floor_${this.currentFloor.id}_${spaceIDshort}.jpeg`,\r\n zoneID: zone.id,\r\n spaceID: this.spaceID,\r\n isCurrentForZone: true,\r\n isModified: false,\r\n isImportedMatterport: true,\r\n } as Plan;\r\n await this.planService.createPlan(plan);\r\n // console.log(\"floor saved\");\r\n return Promise.resolve(zone);\r\n }\r\n\r\n abandon() {\r\n setTimeout(() => {\r\n console.log(\"abandonning import\");\r\n this.removeFrame();\r\n this.stop = true;\r\n }, 1500);\r\n }\r\n\r\n removeFrame() {\r\n this.currentFrame.remove();\r\n }\r\n\r\n async getLayerByName(name: string): Promise<Layer> {\r\n const mission = this.userService.currentMission(this.spaceID);\r\n const currentOrgId = mission.organisationID;\r\n const layers = await this.layerService.getLayerByNameForOrganisation(\r\n name,\r\n currentOrgId,\r\n );\r\n if (layers.length > 0) {\r\n return layers[0];\r\n }\r\n // create then\r\n return this.layerService.createLayerForOrganisation(name, currentOrgId);\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { Organisation, Property } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class OrganisationService { \r\n smarterPlanID = \"6e28201f-4679-4c29-9d2d-8a325f57cee9\";\r\n API: any; //AWS APIService\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getPropertiesForOrganisation(\r\n orgID: string,\r\n ): Promise<Array<Property>> {\r\n const org = await this.API.__proto__.GetOrganisation({ id: orgID });\r\n if (org) {\r\n return org.properties.items;\r\n }\r\n return [];\r\n }\r\n\r\n async getOrganisationByToken(token: string): Promise<Organisation> {\r\n const orgs = await this.API.__proto__.OrganisationsByToken(token);\r\n if (orgs.items.length > 0) {\r\n const org = orgs.items[0];\r\n return this.tokenIsExpiredForOrg(org) ? null : org;\r\n }\r\n return null;\r\n }\r\n\r\n tokenIsExpiredForOrg(org: Organisation): boolean {\r\n const expirationDate = new Date(org.tokenExpiresAt);\r\n const diffTime = expirationDate.getTime() - Date.now();\r\n return diffTime < 0;\r\n }\r\n\r\n async softDeteleOrg(orgID: string): Promise<Organisation> {\r\n return this.API.__proto__.UpdateOrganisation({\r\n id: orgID,\r\n deletedAt: Date.now(),\r\n });\r\n }\r\n\r\n async updateOrganisation(input: any): Promise<Organisation> {\r\n return this.API.__proto__.UpdateOrganisation(input);\r\n }\r\n\r\n async deleteOrganisation(orgID: string): Promise<Organisation> {\r\n return this.API.__proto__.DeleteOrganisation({ id: orgID });\r\n }\r\n\r\n async createOrganisation(input: Organisation): Promise<Organisation> {\r\n return this.API.__proto__.CreateOrganisation(input);\r\n }\r\n\r\n async getOrganisation(orgID: string): Promise<Organisation> {\r\n return this.API.__proto__.GetOrganisation({ id: orgID });\r\n }\r\n\r\n async listOrganisations(): Promise<Organisation[]> {\r\n return this.API.__proto__.ListOrganisations().then((orgs) => orgs.items);\r\n }\r\n\r\n async getOrganisationForSpace(spaceID: string): Promise<Organisation> {\r\n const properties = await this.API.__proto__.ListPropertys({\r\n spaceID: { eq: spaceID },\r\n });\r\n let orgs = properties.items.map((property) => property.organisation);\r\n if (orgs.length === 1) {\r\n return orgs[0];\r\n }\r\n orgs = orgs.filter((org) => org.id !== this.smarterPlanID);\r\n return orgs.length > 0 ? orgs[0] : null;\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { filterUniqueArrayByID } from \"../../helpers.service\";\r\nimport { Domain, DomainType } from \"../../types.service\";\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class DomainService {\r\n API: any; //AWS\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n \r\n async getGenericDomainsAndForOrganisation(\r\n organisationID: string,\r\n ): Promise<any | void> {\r\n return this.API.__proto__.ListDomains().then((domains) => {\r\n return domains.items.filter((dom) => {\r\n return (\r\n dom.organisationID === organisationID || !dom.organisationID\r\n );\r\n });\r\n });\r\n }\r\n\r\n async getGenericDomainsAndForOrgAndOrderedOrg(\r\n orgID: string,\r\n orderedOrgID: string = null,\r\n ): Promise<Domain[]> {\r\n if (orgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\") {\r\n // I am SmarterPlan, i can see all\r\n return this.API.__proto__.ListDomains().then((response) => response.items);\r\n }\r\n const currentOrgDomains =\r\n await this.getGenericDomainsAndForOrganisation(orgID);\r\n if (!orderedOrgID || orgID === orderedOrgID) {\r\n return currentOrgDomains;\r\n }\r\n const orderedOrgDomains =\r\n await this.getGenericDomainsAndForOrganisation(orderedOrgID);\r\n const merged = [...currentOrgDomains, ...orderedOrgDomains];\r\n return filterUniqueArrayByID(merged);\r\n }\r\n\r\n async getDomainsForOrgExcludingTypes(\r\n types: DomainType[],\r\n organisationID: string,\r\n ): Promise<Domain[]> {\r\n return this.getGenericDomainsAndForOrganisation(organisationID).then(\r\n (domains) => {\r\n return domains.filter((dom) => !types.includes(dom.type));\r\n },\r\n );\r\n }\r\n\r\n async getDomain(id: string): Promise<Domain> {\r\n return this.API.__proto__.GetDomain(id);\r\n }\r\n\r\n async updateDomain(input: any): Promise<Domain> {\r\n return this.API.__proto__.UpdateDomain(input);\r\n }\r\n\r\n async deleteDomain(id: string): Promise<Domain> {\r\n return this.API.__proto__.DeleteDomain({ id });\r\n }\r\n\r\n async getRootDomains(orgID: string): Promise<Domain[]> {\r\n const allDomains = await this.getGenericDomainsAndForOrganisation(\r\n orgID,\r\n );\r\n const root = allDomains.filter((dom) => !dom.parentID);\r\n return root.sort((a, b) => a.name.localeCompare(b.name));\r\n }\r\n\r\n async createDomain(input: Domain): Promise<Domain> {\r\n return this.API.__proto__.CreateDomain(input);\r\n }\r\n\r\n async getDomainsForOrgForType(\r\n type: DomainType,\r\n organisationID: string,\r\n orderedOrg: string = null,\r\n ): Promise<Domain[]> {\r\n return this.getGenericDomainsAndForOrgAndOrderedOrg(\r\n organisationID,\r\n orderedOrg,\r\n ).then((domains) => {\r\n return domains.filter((dom) => dom.type === type);\r\n });\r\n }\r\n\r\n async getParentDomainsForOrgAndOrderedOrgForType(\r\n type: DomainType,\r\n organisationID: string,\r\n orderedOrg: string = null,\r\n ): Promise<Domain[]> {\r\n return this.getGenericDomainsAndForOrgAndOrderedOrg(\r\n organisationID,\r\n orderedOrg,\r\n ).then((domains) => {\r\n return domains.filter((dom) => dom.type === type && !dom.parentID);\r\n });\r\n }\r\n\r\n async getDomainsForMissionsForOrg(orgID: string): Promise<Domain[]> {\r\n const domains = await this.getDomainsForOrgExcludingTypes(\r\n [DomainType.BOOKING, DomainType.FEATURE, DomainType.MISSION],\r\n orgID,\r\n );\r\n return domains.filter((dom) => !dom.parentID);\r\n }\r\n}\r\n","import { dateHasExpired } from \"../helpers.service\";\r\nimport { EventType, EventStatus, EmailStatus, Event, ProfileEntity } from \"../types.service\";\r\nimport { EventService } from \"./models/event.service\";\r\nimport { MissionService } from \"./models/mission.service\";\r\nimport { BaseUserService } from \"./user.service\";\r\n\r\nexport class BookingService {\r\n\r\n constructor(private eventService: EventService,private userService: BaseUserService,\r\n private missionService: MissionService,) {}\r\n\r\n getFutureOrCurrentEvents(events: Event[]): Event[] {\r\n const now = new Date();\r\n return events\r\n .filter((event) => event.realEndDate > now.getTime())\r\n .sort((a, b) => a.realStartDate - b.realStartDate);\r\n }\r\n\r\n getEventsWithRealStartDateBeforeToday(events: Event[]): Event[] {\r\n const now = new Date();\r\n now.setHours(0, 0, 0, 0);\r\n return events\r\n .filter((event) => event.realStartDate < now.getTime())\r\n .sort((a, b) => b.realStartDate - a.realStartDate);\r\n }\r\n\r\n async autoUpdateBookingEvent(\r\n eventProm: Event | Promise<Event>,\r\n ): Promise<Event> {\r\n const event = await eventProm;\r\n const startExpired = dateHasExpired(event.realStartDate);\r\n const endExpired = dateHasExpired(event.realEndDate);\r\n\r\n if (event.type === EventType.BOOKING && endExpired) {\r\n /** [BOOKING] VALIDATED => LATE */\r\n if (event.status === EventStatus.VALIDATED) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.LATE,\r\n });\r\n }\r\n /** [BOOKING] CREATED => REFUSED */\r\n if (event.status === EventStatus.CREATED) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.REFUSED,\r\n });\r\n }\r\n }\r\n if (event.type === EventType.BOOKING_SUBCRIPTION) {\r\n /** [SUB] CREATED => REFUSED */\r\n if (event.status === EventStatus.CREATED && endExpired) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.REFUSED,\r\n });\r\n }\r\n /** [SUB] IN_PROGRESS | VALIDATED => COMPLETED */\r\n if (\r\n endExpired &&\r\n (event.status === EventStatus.IN_PROGRESS ||\r\n event.status === EventStatus.VALIDATED)\r\n ) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.COMPLETED,\r\n });\r\n }\r\n /** [SUB] CREATED => IN_PROGRESS */\r\n if (startExpired && event.status === EventStatus.CREATED) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.IN_PROGRESS,\r\n });\r\n }\r\n }\r\n\r\n return event;\r\n }\r\n\r\n mergeEventsToSubscriptsionUnique(\r\n event: Event,\r\n uniqueList: Event[],\r\n ): Event[] {\r\n if (!event || event.type !== EventType.BOOKING_SUBCRIPTION)\r\n return uniqueList;\r\n\r\n const newUniqueList = [...uniqueList]; // deep copy\r\n const index = newUniqueList.findIndex(\r\n (event_) => event_.group === event.group,\r\n );\r\n\r\n /** If an event of the same group already exist, we merge date, to get the min and max date and update status */\r\n if (index >= 0) {\r\n const groupEvent = newUniqueList[index];\r\n if (groupEvent.realStartDate > event.realStartDate) {\r\n groupEvent.realStartDate = event.realStartDate;\r\n }\r\n if (groupEvent.realEndDate < event.realEndDate) {\r\n groupEvent.realEndDate = event.realEndDate;\r\n groupEvent.status = event.status;\r\n }\r\n groupEvent.author = event.author;\r\n } else {\r\n newUniqueList.push({ ...event });\r\n }\r\n\r\n return newUniqueList;\r\n }\r\n\r\n /** Merge a subscription event list to a unique event */\r\n mergeEventsToSubscriptions(allBokings: Event[]): Event[] {\r\n let uniqueList = [];\r\n for (const event of allBokings) {\r\n uniqueList = this.mergeEventsToSubscriptsionUnique(\r\n event,\r\n uniqueList,\r\n );\r\n }\r\n return uniqueList;\r\n }\r\n\r\n async updateStatusOfEventsInSubscriptionWithReason(\r\n subscriptionGroup: string,\r\n newStatus: EventStatus,\r\n reason: string = null,\r\n ): Promise<Event[]> {\r\n const eventsOfSubcription = await this.eventService.getEventsByGroup(\r\n subscriptionGroup,\r\n );\r\n const updatedEvents = [];\r\n await Promise.all(\r\n eventsOfSubcription.map(async (event) => {\r\n const updEvent = await this.eventService.updateEvent({\r\n id: event.id,\r\n status: newStatus,\r\n refusalReason: reason,\r\n notificationStatus: reason\r\n ? EmailStatus.UPDATE_TO_DELIVER\r\n : null,\r\n });\r\n updatedEvents.push(updEvent);\r\n }),\r\n );\r\n return updatedEvents;\r\n }\r\n\r\n getActiveFutureBookings(allBooking: Event[]): Event[] {\r\n let bookings = this.getFutureOrCurrentEvents(allBooking);\r\n bookings = bookings.filter(\r\n (event_) =>\r\n event_.status !== EventStatus.CANCELLED &&\r\n event_.status !== EventStatus.REFUSED &&\r\n event_.status !== EventStatus.ARCHIVED,\r\n );\r\n return bookings;\r\n }\r\n\r\n async archiveForOwnerEventsInSubscription(\r\n subscriptionGroup: string,\r\n ): Promise<Event[]> {\r\n const eventsOfSubcription = await this.eventService.getEventsByGroup(\r\n subscriptionGroup,\r\n );\r\n const updatedEvents = [];\r\n await Promise.all(\r\n eventsOfSubcription.map(async (event) => {\r\n const updEvent = await this.eventService.updateEvent({\r\n id: event.id,\r\n archivedByOwner: true,\r\n });\r\n updatedEvents.push(updEvent);\r\n }),\r\n );\r\n return updatedEvents;\r\n }\r\n\r\n getConflictBookingForDates(\r\n start: number,\r\n end: number,\r\n bookingsToFilter: Event[],\r\n ): Event | null {\r\n for (const booking of bookingsToFilter) {\r\n if (\r\n booking.status !== EventStatus.REFUSED &&\r\n booking.status !== EventStatus.CANCELLED &&\r\n booking.status !== EventStatus.ARCHIVED\r\n ) {\r\n if (\r\n start >= booking.realStartDate &&\r\n start + 1000 < booking.realEndDate\r\n ) {\r\n return booking;\r\n }\r\n if (\r\n end > booking.realStartDate + 1000 &&\r\n end <= booking.realEndDate\r\n ) {\r\n return booking;\r\n }\r\n if (\r\n start <= booking.realStartDate &&\r\n end >= booking.realEndDate\r\n ) {\r\n return booking;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async getAuthorOfEvent(event: Event): Promise<ProfileEntity> {\r\n const authorMission = await this.missionService.getMission(\r\n event.ownerID,\r\n );\r\n const author = await this.userService.userFromUserID(\r\n authorMission.userID,\r\n );\r\n return author;\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { Measurement, PoiType, Comment, POI } from \"../../types.service\";\r\nimport { FilterService } from \"../filter.service\";\r\nimport { NavigatorService } from \"../navigator.service\";\r\nimport { deleteFromS3, uploadFileToS3 } from \"../s3.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { CommentService } from \"./comment.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class MeasurementService {\r\n path = \"measurements/\";\r\n\r\n currentMeasurements: {\r\n space: Measurement[];\r\n zone: Measurement[];\r\n } = { space: [], zone: [] };\r\n\r\n measurementsTags: Subject<Comment[]> = new Subject();\r\n\r\n measurementsUpdated: Subject<{\r\n space: Measurement[];\r\n zone: Measurement[];\r\n }> = new Subject();\r\n\r\n currentSpaceID: string;\r\n\r\n zoneIDFilter: string;\r\n\r\n dateFilter: Date[];\r\n\r\n measurementFilter: boolean = false; // if false means no filtering, everything is allowed\r\n\r\n updateDone: Subject<boolean> = new Subject();\r\n\r\n updating: Subject<boolean> = new Subject();\r\n\r\n constructor(\r\n private navigatorService: NavigatorService,\r\n private filterService: FilterService,\r\n private commentService: CommentService,\r\n private poiService: PoiService,\r\n private userService: BaseUserService,\r\n private navigationService: NavigationService,\r\n ) {\r\n const isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n if (!isMuseumUser) {\r\n this.navigatorService.zoneChange.subscribe((zone) => {\r\n this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n if (!this.currentSpaceID) {\r\n this.measurementsTags.next(null);\r\n this.measurementsUpdated.next({ space: [], zone: null });\r\n this.measurementFilter = null;\r\n this.zoneIDFilter = null;\r\n } else if (zone.id !== this.zoneIDFilter) {\r\n this.zoneIDFilter = zone.id;\r\n // console.log(\"going to init measurements from zone\");\r\n this.initMeasurements();\r\n }\r\n });\r\n this.filterService.subscribeToDataFilterUpdate((dateRange) => {\r\n this.dateFilter = dateRange;\r\n this.initMeasurements();\r\n });\r\n this.dateFilter = this.filterService.currentDateFilter;\r\n this.updateDone.subscribe(() => this.initMeasurements());\r\n }\r\n }\r\n\r\n async initMeasurements() {\r\n if (this.currentSpaceID) {\r\n this.updating.next(true);\r\n let comments = await this.commentService.getCommentsBySpaceID(\r\n this.currentSpaceID,\r\n );\r\n comments =\r\n await this.filterService.filterMeasurementsForCurrentUserInSpace(\r\n this.currentSpaceID,\r\n comments,\r\n );\r\n let measurements = [];\r\n if (comments.length > 0) {\r\n await Promise.all(\r\n comments.map(async (comment) => {\r\n const measurement =\r\n await this.commentService.readCommentAsMeasurement(\r\n comment.id,\r\n );\r\n measurements.push(measurement);\r\n }),\r\n );\r\n if (this.dateFilter) {\r\n measurements =\r\n this.filterService.filterMeasurementsForDateRange(\r\n measurements,\r\n this.dateFilter,\r\n );\r\n }\r\n if (this.measurementFilter) {\r\n measurements = [];\r\n }\r\n this.currentMeasurements.space = measurements;\r\n // emit on tags should be after setting current.space !!\r\n this.measurementsTags.next(measurements.map((m) => m.comment));\r\n\r\n if (this.zoneIDFilter) {\r\n const commentsZone =\r\n await this.filterService.filterObjectsForZone(\r\n measurements.map((measure) => measure.comment),\r\n this.zoneIDFilter,\r\n );\r\n measurements = measurements.filter((measure) =>\r\n commentsZone.includes(measure.comment),\r\n );\r\n }\r\n measurements.sort((a, b) => {\r\n return (\r\n // @ts-ignore\r\n new Date(b.comment.createdAt) -\r\n // @ts-ignore\r\n new Date(a.comment.createdAt)\r\n );\r\n });\r\n this.currentMeasurements.zone = measurements;\r\n this.measurementsUpdated.next(this.currentMeasurements);\r\n } else {\r\n this.currentMeasurements.space = [];\r\n this.currentMeasurements.zone = [];\r\n this.measurementsUpdated.next({ space: [], zone: [] }); // for lateral menu\r\n }\r\n } else {\r\n this.measurementsTags.next(null);\r\n }\r\n this.updating.next(false);\r\n }\r\n\r\n async deleteMeasurement(measurement: Measurement): Promise<Comment> {\r\n const deletedComment = await this.commentService.deleteComment(\r\n measurement.comment.id,\r\n );\r\n if (deletedComment) {\r\n await this.poiService.deletePoi(measurement.poi.id);\r\n const prefix = `${measurement.comment.id.slice(0, 8)}_`;\r\n const path = `${this.path + prefix}mesure.jpeg`;\r\n await deleteFromS3(path);\r\n }\r\n return deletedComment;\r\n }\r\n\r\n async createMeasurementForSpace(\r\n commentInput: Comment,\r\n dataMeasurements: { measure: any[]; sweep: string },\r\n screenshot: any,\r\n spaceID: string,\r\n ): Promise<Measurement> {\r\n const lastMeasure = dataMeasurements.measure;\r\n const sweepID = dataMeasurements.sweep;\r\n const lastPoint = lastMeasure[lastMeasure.length - 1];\r\n let comment = await this.commentService.createComment(commentInput);\r\n const poiInput = {\r\n coordinate: JSON.stringify({\r\n x: lastPoint.x,\r\n y: lastPoint.y,\r\n z: lastPoint.z,\r\n }),\r\n type: PoiType.MEASURE,\r\n elementID: comment.id,\r\n matterportSweepID: sweepID,\r\n } as POI;\r\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\r\n const screen = await fetch(screenshot);\r\n const blob = await screen.blob();\r\n const file = new File([blob], \"mesure.jpeg\", { type: \"image/jpeg\" });\r\n const url = await uploadFileToS3(this.path, file, comment.id);\r\n if (url) {\r\n comment = await this.commentService.updateComment({\r\n id: comment.id,\r\n annexe: url,\r\n });\r\n }\r\n const measurement = {\r\n comment,\r\n poi,\r\n } as Measurement;\r\n return measurement;\r\n }\r\n\r\n async getModel3DForMeasurement(measurement: Measurement): Promise<string> {\r\n const poi = await this.poiService.getPoiByElementId(\r\n measurement.comment.id,\r\n );\r\n if (poi && poi.matterportSweepID) {\r\n const navigations =\r\n await this.navigationService.getNavigationsForMatterportIDForSpace(\r\n poi.matterportSweepID,\r\n measurement.comment.spaceID,\r\n );\r\n const [poiNavigation] = navigations;\r\n return poiNavigation.node.model3D;\r\n }\r\n return null;\r\n }\r\n}\r\n","/* eslint-disable no-await-in-loop */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { MattertagData } from \"../../mattertagData\";\r\nimport { Feature, Hashtag, FeatureType, CommentType, POI, PoiType, Event, LevelStatus } from \"../../types.service\";\r\nimport { FilterService } from \"../filter.service\";\r\nimport { NavigatorService } from \"../navigator.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { BaseObjectService } from \"./base-object.service\";\r\nimport { CommentService } from \"./comment.service\";\r\nimport { HashtagService } from \"./hashtag.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class FeatureService extends BaseObjectService {\r\n API: any; //AWS\r\n\r\n featureUpdated: Subject<{\r\n space: Feature[];\r\n zone: Feature[];\r\n }> = new Subject();\r\n\r\n currentFeatures: { space: Feature[]; zone: Feature[] } = {\r\n space: [],\r\n zone: [],\r\n };\r\n\r\n featureTags: Subject<Feature[]> = new Subject();\r\n\r\n featureFiltered: Feature[] = [];\r\n\r\n updateDone: Subject<boolean> = new Subject();\r\n\r\n zoneIDFilter: string;\r\n\r\n currentSpaceID: string;\r\n\r\n updating: Subject<boolean> = new Subject();\r\n\r\n isUpdating = false;\r\n\r\n featureDomainFilter: string[] = null;\r\n\r\n deskDomainFilter: string[] = null;\r\n\r\n deskBookingsUpdated: Subject<Event[]> = new Subject();\r\n\r\n public currentHashtags: Hashtag[] = [];\r\n\r\n createObservable: Subject<Feature> = new Subject();\r\n\r\n deleteObservable: Subject<Feature> = new Subject();\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any,\r\n private navigatorService: NavigatorService,\r\n private filterService: FilterService,\r\n poiService: PoiService,\r\n private commentService: CommentService,\r\n private userService: BaseUserService,\r\n navigationService: NavigationService,\r\n private hashtagService: HashtagService,\r\n ) {\r\n super(poiService, navigationService);\r\n this.API = apiInjected;\r\n this.featureUpdated.subscribe((list) => {\r\n this.currentFeatures = list;\r\n });\r\n this.navigatorService.zoneChange.subscribe((zone) => {\r\n this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n if (!this.currentSpaceID) {\r\n this.featureTags.next(null);\r\n this.featureUpdated.next({ space: [], zone: null });\r\n this.zoneIDFilter = null;\r\n } else if (zone.id !== this.zoneIDFilter && !this.userService.isMuseumUser(this.currentSpaceID)) {\r\n this.zoneIDFilter = zone.id;\r\n this.initFeatures();\r\n }\r\n });\r\n this.updateDone.subscribe(() => {\r\n if (this.currentSpaceID) {\r\n this.initFeatures();\r\n }\r\n });\r\n\r\n this.deleteObservable.subscribe((feature) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToDelete(feature);\r\n }\r\n });\r\n\r\n this.createObservable.subscribe((feature) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToCreate(feature);\r\n }\r\n });\r\n }\r\n\r\n /*\r\n * CRUD\r\n */\r\n async createFeature(feature: Feature): Promise<Feature> {\r\n return this.API.__proto__.CreateFeature(feature);\r\n }\r\n\r\n async deleteFeature(feature: Feature): Promise<Feature> {\r\n const deleted = await this.API.__proto__.DeleteFeature({ id: feature.id });\r\n if (deleted) {\r\n const poi = await this.poiService.getPoiByElementId(feature.id);\r\n if (poi) {\r\n await this.poiService.deletePoi(poi.id);\r\n }\r\n // delete comments\r\n for (const comment of deleted.comments.items) {\r\n await this.commentService.deleteComment(comment.id);\r\n }\r\n }\r\n return deleted;\r\n }\r\n\r\n async updateFeature(feature: any): Promise<Feature> {\r\n return this.API.__proto__.UpdateFeature(feature);\r\n }\r\n\r\n async getFeature(id: string): Promise<Feature> {\r\n const feature = (await this.API.__proto__.GetFeature(id)) as Feature;\r\n feature.events.items.sort((a, b) => b.realStartDate - a.realStartDate);\r\n this.setCoverImage(feature);\r\n this.setImages(feature);\r\n this.setVideos(feature);\r\n this.setDocuments(feature);\r\n this.setAudio(feature);\r\n this.setExternalLinks(feature);\r\n this.isBookingPlace(feature);\r\n return feature;\r\n }\r\n\r\n\r\n async initFeatures() {\r\n if (!this.currentSpaceID) {\r\n return;\r\n }\r\n this.updating.next(true);\r\n this.isUpdating = true;\r\n const featureList = await this.getFeaturesForSpace(this.currentSpaceID);\r\n this.currentHashtags = await this.hashtagService.getHashtagsForSpace(\r\n this.currentSpaceID,\r\n );\r\n // console.log(this.currentHashtags);\r\n if (featureList.length > 0) {\r\n let filteredFeatures = [...featureList];\r\n let filteredPointInterest = filteredFeatures.filter(\r\n (feature) => feature.type !== FeatureType.DESK,\r\n );\r\n let filteredDesks = filteredFeatures.filter(\r\n (feature) => feature.type === FeatureType.DESK,\r\n );\r\n if (this.featureDomainFilter) {\r\n filteredPointInterest = filteredPointInterest.filter(\r\n (feature) =>\r\n this.featureDomainFilter.find(\r\n (domain) =>\r\n feature.domain && domain === feature.domain.id,\r\n ),\r\n );\r\n }\r\n if (this.deskDomainFilter) {\r\n filteredDesks = filteredDesks.filter((feature) =>\r\n this.deskDomainFilter.find(\r\n (domain) =>\r\n feature.domain && domain === feature.domain.id,\r\n ),\r\n );\r\n }\r\n filteredFeatures = [...filteredPointInterest, ...filteredDesks];\r\n this.currentFeatures.space = filteredFeatures.sort(\r\n (a, b) => a.index - b.index,\r\n );\r\n // emit on tags should be after setting current.space !!\r\n this.featureTags.next(filteredFeatures); // for tags update without zone filtering\r\n if (this.zoneIDFilter) {\r\n filteredFeatures =\r\n (await this.filterService.filterObjectsForZone(\r\n filteredFeatures,\r\n this.zoneIDFilter,\r\n )) as Feature[];\r\n }\r\n this.currentFeatures.zone = filteredFeatures.sort(\r\n (a, b) => a.index - b.index,\r\n );\r\n // console.log(this.currentFeatures);\r\n this.featureUpdated.next(this.currentFeatures); // for lateral menu\r\n } else {\r\n this.featureUpdated.next({ space: [], zone: [] }); // for lateral menu\r\n }\r\n this.updating.next(false);\r\n this.isUpdating = false;\r\n }\r\n\r\n async getFeaturesForSpace(\r\n spaceID: string,\r\n keepArchived: boolean = false,\r\n ): Promise<Feature[]> {\r\n const features = await this.API.__proto__.FeaturesBySpace(spaceID).then(\r\n (response) => response.items,\r\n );\r\n let featuresForUser =\r\n await this.filterService.filterFeaturesForCurrentUserInSpace(\r\n features,\r\n spaceID,\r\n );\r\n if (!keepArchived) {\r\n featuresForUser = featuresForUser.filter(\r\n (feature) => !this.isArchived(feature),\r\n );\r\n }\r\n for (const feature of featuresForUser) {\r\n this.setCoverImage(feature);\r\n this.isBookingPlace(feature);\r\n }\r\n return featuresForUser;\r\n }\r\n\r\n async getFeaturesBySpaceWithoutFiltering(spaceID: string): Promise<Feature[]> {\r\n let features = await this.API.__proto__.FeaturesBySpace(spaceID).then(\r\n (response) => response.items,\r\n );\r\n features = features.filter(\r\n (feature) => !this.isArchived(feature),\r\n );\r\n for (const feature of features) {\r\n this.setCoverImage(feature);\r\n this.isBookingPlace(feature);\r\n }\r\n return features;\r\n }\r\n\r\n isBookingPlace(feature: Feature) {\r\n feature.isBookingPlace = feature.type === FeatureType.DESK;\r\n }\r\n\r\n \r\n setCoverImage(feature: Feature) {\r\n const coverImage = feature.comments.items.find(\r\n (com) => com.isCoverImage,\r\n );\r\n if (coverImage) {\r\n feature.coverImageUrl = coverImage.annexe;\r\n } else if (\r\n feature.comments.items.some((com) => com.type === CommentType.IMAGE)\r\n ) {\r\n const imageComment = feature.comments.items.find(\r\n (com) => com.type === CommentType.IMAGE,\r\n );\r\n feature.coverImageUrl = imageComment.annexe;\r\n }\r\n }\r\n\r\n async updateFeatureLocation(\r\n feature: Feature,\r\n tagData: MattertagData,\r\n spaceID: string,\r\n ): Promise<POI> {\r\n const poiInput = {\r\n coordinate: tagData.getCoordinateString(),\r\n type: feature.isBookingPlace ? PoiType.DESK : PoiType.DATA,\r\n elementID: feature.id,\r\n metadata: tagData.getMetadataString(),\r\n matterportSweepID: tagData.getSweepID(),\r\n } as POI;\r\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\r\n return poi;\r\n }\r\n\r\n setImages(feature: Feature) {\r\n const imagesComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.IMAGE)\r\n .sort((a, b) => a.index - b.index);\r\n const images = [];\r\n for (const image of imagesComments) {\r\n images.push({\r\n path: image.annexe,\r\n title: image.title,\r\n description: image.description,\r\n showInTag: image.shownInTag,\r\n });\r\n }\r\n feature.images = images;\r\n }\r\n\r\n setVideos(feature: Feature) {\r\n const videosComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.VIDEO || com.type === CommentType.YOUTUBE)\r\n .sort((a, b) => a.index - b.index);\r\n const videos = [];\r\n for (const video of videosComments) {\r\n videos.push({\r\n path: video.type === CommentType.YOUTUBE ? 'https://www.youtube.com/embed/' + video.externalLink : video.annexe,\r\n title: video.title,\r\n description: video.description,\r\n type: video.type,\r\n });\r\n }\r\n feature.videos = videos;\r\n }\r\n\r\n setDocuments(feature: Feature) {\r\n const documentComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.DOCUMENT)\r\n .sort((a, b) => a.index - b.index);\r\n const docs = [];\r\n for (const document of documentComments) {\r\n docs.push({\r\n path: document.annexe,\r\n title: document.title,\r\n description: document.description,\r\n });\r\n }\r\n feature.documents = docs;\r\n }\r\n\r\n setAudio(feature: Feature) {\r\n const audioComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.AUDIO)\r\n .sort((a, b) => a.index - b.index);\r\n const audios = [];\r\n for (const audio of audioComments) {\r\n audios.push({\r\n path: audio.annexe,\r\n title: audio.title,\r\n description: audio.description,\r\n });\r\n }\r\n feature.audios = audios;\r\n }\r\n\r\n setExternalLinks(feature: Feature) {\r\n const linksComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.URL)\r\n .sort((a, b) => a.index - b.index);\r\n const externalLinks = [];\r\n for (const link of linksComments) {\r\n externalLinks.push({\r\n path: link.externalLink,\r\n title: link.title,\r\n description: link.description,\r\n showInTag: link.shownInTag,\r\n });\r\n }\r\n feature.externalLinks = externalLinks;\r\n }\r\n\r\n \r\n\r\n \r\n\r\n async getFirstFeatureForSpace(spaceID: string): Promise<Feature> {\r\n const features = await this.getFeaturesForSpace(spaceID);\r\n const first = features.find((feat) => feat.index === 1);\r\n return first;\r\n }\r\n\r\n async updateIconForAllFeaturesInSpace(\r\n tagIcon: string,\r\n spaceID: string,\r\n categoryID: string = null,\r\n ): Promise<{ features: Feature[]; pois: POI[] }> {\r\n let features = await this.getFeaturesForSpace(spaceID);\r\n if (categoryID) {\r\n features = features.filter(\r\n (feature) => feature.domainID === categoryID,\r\n );\r\n }\r\n const pois = await this.updateIconForAllObjects(features, tagIcon);\r\n return { features, pois };\r\n }\r\n\r\n async getCreatedIndicesForFeaturesInSpace(\r\n spaceID: string,\r\n ): Promise<number[]> {\r\n let features = (await this.API.__proto__.FeaturesBySpace(spaceID)).items;\r\n features = features.filter((feat) => feat.index);\r\n return features.map((feat) => feat.index);\r\n }\r\n\r\n async getDesksForSpace(spaceID: string): Promise<Feature[]> {\r\n const features = await this.getFeaturesForSpace(spaceID);\r\n return features.filter((feat) => feat.isBookingPlace);\r\n }\r\n\r\n /** Return true if the current user has archived this feature */\r\n isArchived(feature: Feature): boolean {\r\n return feature.archivedForMissionID\r\n ? feature.archivedForMissionID.includes(\r\n this.userService.currentMission(feature.spaceID).id,\r\n )\r\n : false;\r\n }\r\n\r\n setArchived(feature: Feature, archived: boolean) {\r\n let archivedList = feature.archivedForMissionID\r\n ? feature.archivedForMissionID\r\n : [];\r\n const missionID = this.userService.currentMission(feature.spaceID).id;\r\n\r\n archivedList = archivedList.filter((m) => m !== missionID);\r\n\r\n if (archived) {\r\n archivedList.push(missionID);\r\n }\r\n\r\n return this.updateFeature({\r\n id: feature.id,\r\n archivedForMissionID: archivedList,\r\n });\r\n }\r\n\r\n\r\n async updateDueToCreate(feature: Feature) {\r\n this.currentFeatures.space.unshift(feature);\r\n this.currentFeatures.zone.unshift(feature);\r\n this.featureUpdated.next({\r\n space: this.currentFeatures.space,\r\n zone: this.currentFeatures.zone,\r\n }); // for lateral menu\r\n }\r\n\r\n async updateDueToDelete(deletedFeature: Feature) {\r\n const feature = this.currentFeatures.space.find(\r\n (_feature) => _feature.id === deletedFeature.id,\r\n );\r\n if (feature) {\r\n const index = this.currentFeatures.space.indexOf(feature);\r\n this.currentFeatures.space.splice(index, 1);\r\n }\r\n const zoneFeature = this.currentFeatures.zone.find(\r\n (_feature) => _feature.id === deletedFeature.id,\r\n );\r\n if (zoneFeature) {\r\n const index = this.currentFeatures.zone.indexOf(zoneFeature);\r\n this.currentFeatures.zone.splice(index, 1);\r\n }\r\n this.featureUpdated.next({\r\n space: this.currentFeatures.space,\r\n zone: this.currentFeatures.zone,\r\n }); // for lateral menu\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { VisitTemplate } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class TemplateService {\r\n API: any; //AWS\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any\r\n ) {\r\n this.API = apiInjected;\r\n }\r\n\r\n // --CRUD---\r\n async create(template: VisitTemplate): Promise<VisitTemplate> {\r\n return this.API.__proto__.CreateVisitTemplate(template);\r\n }\r\n\r\n async update(template: any): Promise<VisitTemplate> {\r\n return this.API.__proto__.UpdateVisitTemplate(template);\r\n }\r\n\r\n async detele(templateID: string): Promise<VisitTemplate> {\r\n return this.API.__proto__.DeleteVisitTemplate({id:templateID});\r\n }\r\n\r\n async softDelete(templateID: string): Promise<VisitTemplate> {\r\n return this.update({id: templateID, deletedAt: Date.now()});\r\n }\r\n\r\n async get(templateID: string): Promise<VisitTemplate> {\r\n return this.API.__proto__.GetVisitTemplate(templateID);\r\n }\r\n\r\n async getTemplatesBySpace(spaceID: string): Promise<VisitTemplate[]> {\r\n return this.API.__proto__.TemplatesBySpace(spaceID).then((response) => response.items);\r\n }\r\n\r\n async getTemplatesByZone(zoneID: string): Promise<VisitTemplate[]> {\r\n return this.API.__proto__.TemplatesByZone(zoneID).then((response) => response.items);\r\n }\r\n}","/*\r\n * Public API Surface of ngx-smarterplan-core\r\n */\r\n\r\nexport * from './lib/ngx-smarterplan-core.service';\r\nexport * from './lib/ngx-smarterplan-core.module';\r\nexport * from './lib/types.service';\r\nexport * from './lib/services/matterport.service';\r\nexport * from './lib/services/tag.service';\r\nexport * from './lib/services/baseVisibility.service';\r\nexport * from './lib/services/content.service';\r\nexport * from './lib/services/viewer.service';\r\nexport * from './lib/services/navigator.service';\r\nexport * from './lib/config';\r\nexport * from './lib/services/base-tab.service';\r\nexport * from './lib/services/user.service';\r\nexport * from './lib/helpers.service';\r\nexport * from './lib/services/locale.service';\r\nexport * from './lib/services/s3.service';\r\nexport * from './lib/services/filter.service';\r\nexport * from './lib/services/search.service';\r\nexport * from './lib/services/zone-drawer.service';\r\nexport * from './lib/services/matterport-import.service';\r\n\r\n// DynamoDB (model) services\r\nexport * from './lib/services/models/profile.service';\r\nexport * from './lib/services/models/zone.service';\r\nexport * from './lib/services/models/mission.service';\r\nexport * from './lib/services/models/poi.service';\r\nexport * from './lib/services/models/property.service';\r\nexport * from './lib/services/models/organisation.service';\r\nexport * from './lib/services/models/domain.service';\r\nexport * from './lib/services/models/space.service';\r\nexport * from './lib/services/models/capture.service';\r\nexport * from './lib/services/models/visit.service';\r\nexport * from './lib/services/models/plan.service';\r\nexport * from './lib/services/models/hashtag.service';\r\nexport * from './lib/services/models/navigation.service';\r\nexport * from './lib/services/models/node.service';\r\nexport * from './lib/services/models/equipment.service';\r\nexport * from './lib/services/models/layer.service';\r\nexport * from './lib/services/models/ticket.service';\r\nexport * from './lib/services/models/operation.service';\r\nexport * from './lib/services/intervention.service';\r\nexport * from './lib/services/models/event.service';\r\nexport * from './lib/services/booking.service';\r\nexport * from './lib/services/models/affectation.service';\r\nexport * from './lib/services/models/measurement.service';\r\nexport * from './lib/services/models/comment.service';\r\nexport * from './lib/services/models/feature.service';\r\nexport * from './lib/services/models/template.service';\r\nexport * from './lib/services/support.service';\r\n\r\n\r\n// Components\r\nexport * from './lib/components/csv-export/csv-export.component';\r\nexport * from './lib/components/search-bar/search-bar.component';\r\nexport * from './lib/components/menu-bar/menu-bar.component';\r\nexport * from './lib/components/loader/loader.component';\r\nexport * from './lib/components/support-modal/support-modal.component';\r\n\r\n// Pipes\r\nexport * from './lib/pipes/duration-to-string.pipe';\r\nexport * from './lib/pipes/hashtag-from-id.pipe';\r\nexport * from './lib/pipes/safe-url.pipe';\r\nexport * from './lib/pipes/time-date-to-local-string.pipe';\r\nexport * from './lib/pipes/username-from-id.pipe';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.BaseVisibilityService","i1.PoiService","i2.MatterportService","i2","i3.ViewerService","i1.ProfileService","i2.MissionService","i3.PropertyService","i4","i5","i6","i1.BaseUserService","i2.ZoneService","i3.PoiService","i2.NavigationService","i1.MatterportService","i2.ViewerService","i3.ZoneService","i4.BaseUserService","i1.EventService","i1.OperationService","i2.EventService","i3.AffectationService","i4.PoiService","i5.BaseUserService","i6.NavigatorService","i7.FilterService","i8.InterventionService","i9.NavigationService","i10.ViewerService","i11","i3.OperationService","i4.TicketsService","i5.NavigatorService","i6.FilterService","i7.BaseUserService","i8.ViewerService","i9","i1.FilterService","i2.EquipmentService","i1.SearchService","i1.HashtagService","Observable","i1.SupportService","i5.LoaderComponent","i7","i2.FilterService","i2.ProfileService","i1.ZoneService","i5.MatterportService","i6.BaseVisibilityService","i1.CaptureService","i2.NodeService","i3.NavigationService","i4.ZoneService","i5.PlanService","i6.BaseUserService","i2.SpaceService","i4.VisitService","i5.ViewerService","i8","i10","i2.LocaleService","i3.BaseUserService","i4.NavigatorService","i5.SupportService","i6.RangeDatePickerComponent","i7.AvatarComponent","i8.NavigationBarComponent","i12","i3.CommentService","i1.NavigationService","i4.LayerService","i6.PlanService","i1.NavigatorService","i6.NavigationService","i4.CommentService","i7.HashtagService"],"mappings":"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"}
|