{"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/matterport-extensions/scene-component/SceneComponent.ts","../../../projects/ngx-smarterplan-core/src/lib/matterport-extensions/security-camera/SecurityCamera.ts","../../../projects/ngx-smarterplan-core/src/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.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/zoneChange.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/matterport-extensions/nest-thermostat/NestThermostat.ts","../../../projects/ngx-smarterplan-core/src/lib/matterport-extensions/nest-thermostat/PlaneRenderer.ts","../../../projects/ngx-smarterplan-core/src/lib/matterport-extensions/nest-thermostat/CanvasRenderer.ts","../../../projects/ngx-smarterplan-core/src/lib/matterport-extensions/tv-player/TvPlayer.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/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/validators/no-empty.directive.ts","../../../projects/ngx-smarterplan-core/src/lib/validators/email.directive.ts","../../../projects/ngx-smarterplan-core/src/lib/validators/text.directive.ts","../../../projects/ngx-smarterplan-core/src/lib/services/support.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/validators.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/services/amplify-cache.service.ts","../../../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/comment.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/content.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/feature.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/measurement.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/pipes/format-date-number-to-digits.pipe.ts","../../../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/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/object3D.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/models/template.service.ts","../../../projects/ngx-smarterplan-core/src/lib/validators/number.directive.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';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class NgxSmarterplanCoreService {\r\n\r\n  constructor() { }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'lib-csv-export',\r\n  templateUrl: './csv-export.component.html',\r\n  styleUrls: ['./csv-export.component.scss']\r\n})\r\nexport class CsvExportComponent {\r\n    \r\n    /** Header of the CSV, titles for each columns */\r\n    @Input() headers: string[] = [];\r\n\r\n    /** Array of each rows (array of array of string), if it's not set, then the function getRows() will be used */\r\n    @Input() rowsInput: string[][] = undefined;\r\n\r\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 */\r\n    @Input() getRows = undefined;\r\n\r\n    /** Title of the file to download */\r\n    @Input() title: string = \"file\";\r\n\r\n    /** Label for the button to click */\r\n    @Input() buttonLabel: string = \"Export\";\r\n\r\n    /** Delimiter for the CSV */\r\n    delimeter: string = \";\";\r\n\r\n    async onClickDownload() {\r\n        let rows: string[][] = this.rowsInput;\r\n        if (!rows) {\r\n            rows = await Promise.resolve(this.getRows());\r\n        }\r\n        const data = `data:text/csv;charset=utf-8,${this.headers.join(\r\n            this.delimeter,\r\n        )}\\n${rows\r\n            .map((row) =>\r\n                /** Clean each rows/cells */\r\n                row\r\n                    .map((value) =>\r\n                        value\r\n                            .replace(this.delimeter, \" \")\r\n                            .replace(\"\\n\", \" \")\r\n                            .replace(\"\\r\", \" \"),\r\n                    )\r\n                    .join(this.delimeter),\r\n            )\r\n            .join(\"\\n\")}`;\r\n\r\n        /** Create a link to download the file */\r\n        const link = document.createElement(\"a\");\r\n        link.setAttribute(\"href\", encodeURI(data));\r\n        link.setAttribute(\"download\", `${this.title}.csv`);\r\n        document.body.append(link);\r\n        link.click();\r\n        link.remove();\r\n    }\r\n}\r\n","<span [style.cursor]=\"'pointer'\" (click)=\"onClickDownload()\" class=\"download-csv d-flex\">\r\n    <span class=\"iconify\" data-icon=\"mdi:file-download-outline\"></span>\r\n    {{ buttonLabel | translate}}\r\n</span>\r\n","export enum CameraMode {\r\n  DOLLHOUSE = 'mode.dollhouse',\r\n  FLOORPLAN = 'mode.floorplan',\r\n  INSIDE = 'mode.inside',\r\n  OUTSIDE = 'mode.outside',\r\n  TRANSITIONING = 'mode.transitioning',\r\n}\r\n\r\nexport enum MattertagActionMode {\r\n  POSITION_TICKET = 'positioning_ticket',\r\n  ADD_TICKET = 'add_ticket',\r\n  ADD_OBJECT3D = 'add_object3D',\r\n  POSITION_OBJECT3D = 'positioning_object3D',\r\n  POSITION_EQUIPMENT = 'positioning_equip',\r\n  ADD_EQUIPMENT = 'add_equip',\r\n  POSITION_DATA = 'positioning_feature',\r\n  ADD_DATA = 'add_feature',\r\n  POSITION_DESK = 'positioning_feature',\r\n  ADD_DESK = 'add_desk',\r\n  POSITION_ROOM = 'positioning_room',\r\n  ADD_ROOM = 'add_room',\r\n}\r\n\r\nexport enum PoiType {\r\n  EQUIPMENT = 'EQUIPMENT',\r\n  INFORMATION = 'INFORMATION',\r\n  TICKET = 'TICKET',\r\n  OBJECT3D = 'OBJECT3D',\r\n  MEASURE = 'MEASURE',\r\n  DATA = 'DATA',\r\n  PEOPLE = 'PEOPLE',\r\n  DESK = 'DESK',\r\n  ROOM = 'ROOM',\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  OBJECT3D = 'OBJECT3D',\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  SATISFACTION_TO_DELIVER = 'SATISFACTION_TO_DELIVER',\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  OBJECT3D = 'OBJECT3D',\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\nexport 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  EMBED = 'EMBED',\r\n  IFRAME = 'IFRAME',\r\n}\r\n\r\nexport enum StatusEquipment {\r\n  TO_SETUP = 'TO_SETUP',\r\n  BROKEN = 'BROKEN',\r\n  UNINSTALLED = 'UNINSTALLED',\r\n  INCIDENT = 'INCIDENT',\r\n  IN_OPERATION = 'IN_OPERATION',\r\n  WAITING_FOR_REPAIR = 'WAITING_FOR_REPAIR',\r\n  DELETED = 'DELETED',\r\n  OUT_OF_ORDER = 'OUT_OF_ORDER',\r\n  TO_BE_REPLACED = 'TO_BE_REPLACED',\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  name?: string | null;\r\n  title?: 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  domain: Domain | null;\r\n  domainID: 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  status?: StatusEquipment | null;\r\n  family?: Array<string | null> | null;\r\n  manufacturer?: string | null;\r\n  sku?: string | null;\r\n  installDate?: number | null;\r\n  warrantyEndDate?: number | null;\r\n  isCreatedByAI?: boolean | null;\r\n  operations?: {\r\n    __typename?: 'ModelOperationConnection';\r\n    items?: Array<Operation | null> | null;\r\n    nextToken?: string | null;\r\n  };\r\n} & DbObjectType;\r\n\r\nexport type EquipmentSelected = {\r\n  selected?: boolean;\r\n} & Equipment;\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,\r\n  POSITIONING,\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  connectedToLiveAt?: string[] | null;\r\n  disconnectedFromLiveAt?: string[] | 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  ownerID?: string | 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 &\r\n  DbObjectType;\r\n\r\nexport type Zone = {\r\n  sweepIDs?: string[] | null;\r\n  layerID?: string | null;\r\n  code_ref?: 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  isMultipleFloorZone?: boolean | null;\r\n  audioID?: string | null;\r\n  audio?: Comment | null;\r\n  startSweepID?: string | null;\r\n} & AWSType;\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  deletedAt?: number | null;\r\n} & AWSType;\r\n\r\nexport 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  organisationID?: string | null;\r\n  organisation?: Organisation | null;\r\n  description?: string | null;\r\n  attachments?: Comment[] | 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  nmbImagesImported: number;\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  embeds?: Array<MediaContent> | null;\r\n  iframes?: Array<MediaContent> | 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;\r\n\r\nexport enum SpModule {\r\n  MUSEUM = 'MUSEUM',\r\n  HOTEL = 'HOTEL',\r\n  IMMO = 'IMMO',\r\n}\r\n\r\n/**\r\n * ThreeJS object3D\r\n */\r\nexport type IObject3D = {\r\n  id?: string; // used to replace threeJS uuid\r\n  object: string;\r\n  format: string;\r\n  mode: string;\r\n  position: { x: number; y: number; z: number; };\r\n  rotation: { x: number; y: number; z: number; };\r\n  scale: { x: number; y: number; z: number; };\r\n  viewFrustum: boolean;\r\n}\r\n\r\n\r\n/**\r\n * DynamoDb object3D\r\n */\r\nexport type Object3D = {\r\n  id: string;\r\n  path: string;\r\n  description: string;\r\n  name: string;\r\n  s3Bucket: boolean;\r\n  position: number[];\r\n  rotation: number[];\r\n  scale: number[];\r\n  spaceID: string;\r\n  viewFrustum: boolean;\r\n  pois: { items: POI[] };\r\n  // Not used yet\r\n  // domain: Domain | null;\r\n  // domainID: string | null;\r\n} & AWSType;\r\n","import THREE, { Scene } from 'three';\r\nimport Dict = NodeJS.Dict;\r\n\r\n/**\r\n * The base of all `SceneComponent` created with the sdk.\r\n * All properties of this class are always available to all components generated through the sdk.\r\n * These properties should all be considered reserved and should not be overwritten by the subclass.\r\n */\r\nabstract class SceneComponentPrivate {\r\n  /**\r\n   * @reserved\r\n   * The name registered to the factory used to generate this component.\r\n   */\r\n  declare readonly componentType: string;\r\n\r\n  /**\r\n   * @reserved\r\n   * A dictionary of properties that this component computes. Every component is guaranteed to have `outputs.collider` and `outputs.objectRoot`.\r\n   * This dictionary is observable and can be the source of a bind target.\r\n   *\r\n   */\r\n  declare outputs: ComponentOutput;\r\n\r\n  /**\r\n   * @reserved\r\n   * A dictionary of events that will be handled by this component's `onEvent`. Every component is guaranteed to have all of the `InteractionSelection` keys:\r\n   *  `events[InteractionSelection.CLICK]`, `events[InteractionSelection.HOVER]`, `events[InteractionSelection.DRAG]`\r\n   * Note: registering to receive `InteractionSelection.HOVER` will produce both `InteractionType.HOVER` and `InteractionType.UNHOVER` in `onEvent`.\r\n   */\r\n  declare events: Dict<boolean>;\r\n\r\n  /**\r\n   * @reserved\r\n   * The context provides access to the underlying framework, e.g. THREE.js.\r\n   */\r\n  declare context: ComponentContext;\r\n\r\n  /**\r\n   * @reserved\r\n   * Binds `this[prop]` to the output of `src[srcProp]`.\r\n   * When the value of `src[srcProp]` changes, the value is propagated and sets `this[prop]` to the same value automatically.\r\n   */\r\n  declare bind: (prop: string, src: SceneComponent['outputs' | 'inputs'], srcProp: keyof SceneComponent['outputs' | 'inputs']) => void;\r\n\r\n  /**\r\n   * @reserved\r\n   * Notifies this component of an `eventType` when the `src` Component calls `notify` with a `srcEventType` event\r\n   */\r\n  declare bindEvent: (eventType: string, src: SceneComponent, srcEventType: string) => void;\r\n\r\n  /**\r\n   * @reserved\r\n   * Notifies any event bindings of an event with `eventType` and data `eventData`\r\n   */\r\n  declare notify: (eventType: string, eventData?: unknown) => void;\r\n\r\n  /**\r\n   * @reserved\r\n   * Spy on a component's notify from outside of the component system\r\n   */\r\n  declare spyOnEvent: (spy: IComponentEventSpy) => ISubscription;\r\n}\r\n\r\nexport abstract class SceneComponent extends SceneComponentPrivate {\r\n  /**\r\n   * An optional dictionary of properties that affects the behavior of the component.\r\n   * The properties can be changed by an external source at any time. It is up to the component to respond appropriately to the changes.\r\n   * The input properties can also be bind targets to another observable source, e.g. the output property of another component.\r\n   */\r\n  inputs?: Dict<any>;\r\n\r\n  /**\r\n   * This event is called once after the scene node its attached to has started.\r\n   */\r\n  onInit?(): void;\r\n\r\n  /**\r\n   * This event is called at most once per frame when there are events on this component.\r\n   * Any of the interaction types specified in `this.interactions` or a call to notify for a bound event will trigger this event.\r\n   * @property {string | ComponentInteractionType} eventType The event type\r\n   * @property {unknown} eventData The data payload of the event\r\n   */\r\n  onEvent?(eventType: string, eventData: unknown): void;\r\n\r\n  /**\r\n   * This event is called after an input property has changed.\r\n   * It will be called at most once a frame.\r\n   */\r\n  onInputsUpdated?(previousInputs: this['inputs']): void;\r\n\r\n  /**\r\n   * This event is called once a frame after input changes have been detected.\r\n   */\r\n  onTick?(tickDelta: number): void;\r\n\r\n  /**\r\n   * @reserved\r\n   * A dictionary of events that will be handled by this component's `onEvent`. Every component is guaranteed to have all of the `InteractionSelection` keys:\r\n   *  `events[InteractionSelection.CLICK]`, `events[InteractionSelection.HOVER]`, `events[InteractionSelection.DRAG]`\r\n   * Note: registering to receive `InteractionSelection.HOVER` will produce both `InteractionType.HOVER` and `InteractionType.UNHOVER` in `onEvent`.\r\n   */\r\n  declare events: Record<string, boolean>;\r\n\r\n  /**\r\n   * @reserved\r\n   * A dictionary of events that will be emitted by this component.\r\n   */\r\n  emits?: Record<string, boolean>;\r\n\r\n  /**\r\n   * This event is called once right before the scene node has stopped.\r\n   */\r\n  onDestroy?(): void;\r\n}\r\n\r\n/**\r\n * A node of a scene graph.\r\n * Aggregates `SceneComponent` as children.\r\n */\r\nexport interface ISceneNode {\r\n  /**\r\n   * A human readable name provided by the user.\r\n   */\r\n  name: string;\r\n\r\n  /**\r\n   * The position of the node.\r\n   * The position, quaternion, scale transforms are applied in scale, quaternion, then scale order. (same as THREE.js)\r\n   */\r\n  readonly position: THREE.Vector3;\r\n\r\n  /**\r\n   * The orientation of the node.\r\n   * The position, quaternion, scale transforms are applied in scale, quaternion, then scale order. (same as THREE.js)\r\n   */\r\n  readonly quaternion: THREE.Quaternion;\r\n\r\n  /**\r\n   * The scale of the node.\r\n   * The position, quaternion, scale transforms are applied in scale, quaternion, then scale order. (same as THREE.js)\r\n   */\r\n  readonly scale: THREE.Vector3;\r\n\r\n  /**\r\n   * Create and add a child component to this node.\r\n   *\r\n   * @param factory The name associated with the factory to generate a `SceneComponent`\r\n   * @param initialInputs An initial set of inputs, immediately available to the newly create `SceneComponent.onInit`\r\n   */\r\n  addComponent(factory: string, initialInputs?: SceneComponent['inputs']): SceneComponent;\r\n\r\n  /**\r\n   * An iterator to iterate over the components added to this node using a for-of loop.\r\n   */\r\n  componentIterator(): IterableIterator<SceneComponent>;\r\n\r\n  /**\r\n   * Start the node and its components.\r\n   */\r\n  start(): void;\r\n\r\n  /**\r\n   * Stop the node and its components.\r\n   */\r\n  stop(): void;\r\n}\r\n\r\n/**\r\n * The types of the Interaction events received from the registered `InteractionSelection`\r\n */\r\nexport enum ComponentInteractionType {\r\n  /** CLICK events */\r\n  CLICK = 'INTERACTION.CLICK',\r\n  /** HOVER events */\r\n  HOVER = 'INTERACTION.HOVER',\r\n  /** DRAG events (mousedown then move) */\r\n  DRAG = 'INTERACTION.DRAG',\r\n  DRAG_BEGIN = 'INTERACTION.DRAG_BEGIN',\r\n  DRAG_END = 'INTERACTION.DRAG_END',\r\n  POINTER_MOVE = 'INTERACTION.POINTER_MOVE',\r\n  POINTER_BUTTON = 'INTERACTION.POINTER_BUTTON',\r\n  SCROLL = 'INTERACTION.SCROLL',\r\n  KEY = 'INTERACTION.KEY',\r\n  LONG_PRESS_START = 'INTERACTION.LONG_PRESS_START',\r\n  LONG_PRESS_END = 'INTERACTION.LONG_PRESS_END',\r\n  MULTI_SWIPE = 'INTERACTION.MULTI_SWIPE',\r\n  MULTI_SWIPE_END = 'INTERACTION.MULTI_SWIPE_END',\r\n  PINCH = 'INTERACTION.PINCH',\r\n  PINCH_END = 'INTERACTION.PINCH_END',\r\n  ROTATE = 'INTERACTION.ROTATE',\r\n  ROTATE_END = 'INTERACTION.ROTATE_END',\r\n}\r\n\r\nabstract class ComponentOutputReserved {\r\n  declare objectRoot: THREE.Object3D | null;\r\n  declare collider: THREE.Object3D | null;\r\n}\r\n\r\n// Hack around the type system to get a cleaner interface around `ComponentOutput`\r\ninterface ComponentOut extends Dict<any> { }\r\nclass ComponentOut extends ComponentOutputReserved { }\r\n\r\n/**\r\n * A general-use bag of properties.\r\n * At a minimum, it has `objectRoot` and `collider` automatically defined.\r\n */\r\nexport type ComponentOutput = ComponentOut;\r\n\r\n/**\r\n * The context of a component (available as `this.context`) in a `SceneComponent` subclass.\r\n * Access to the root `ISceneNode` and the THREE.js are available.\r\n */\r\nexport type ComponentContext = {\r\n  three: typeof THREE;\r\n  root: ISceneNode;\r\n  renderer: THREE.WebGLRenderer;\r\n  user: Dict<any>;\r\n  scene: Scene;\r\n};\r\n\r\n/**\r\n * A raycast intersection with a mesh\r\n */\r\nexport type Intersect = {\r\n  point: THREE.Vector3;\r\n  normal: THREE.Vector3;\r\n  collider: THREE.Object3D;\r\n};\r\n\r\n/**\r\n * A spy that can be attached to a component using `spyOnEvent`\r\n */\r\nexport interface IComponentEventSpy<T = unknown> {\r\n  readonly eventType: string;\r\n  onEvent(eventData?: T): void;\r\n}\r\n\r\n/**\r\n * An object responsible for removing a spy from a component's event\r\n */\r\nexport interface ISubscription {\r\n  cancel(): void;\r\n}\r\n\r\nexport interface IVector2 {\r\n  x: number;\r\n  y: number;\r\n}\r\n\r\nexport interface IVector3 {\r\n  x: number;\r\n  y: number;\r\n  z: number;\r\n}\r\n\r\nexport enum PointerButton {\r\n  PRIMARY,\r\n  MIDDLE,\r\n  SECONDARY,\r\n  BACK,\r\n  FORWARD,\r\n  COUNT,\r\n}\r\n\r\nexport enum PointerButtonMask {\r\n  NONE,\r\n  PRIMARY = 1 << PointerButton.PRIMARY,\r\n  SECONDARY = 1 << PointerButton.SECONDARY,\r\n  MIDDLE = 1 << PointerButton.MIDDLE,\r\n  BACK = 1 << PointerButton.BACK,\r\n  FORWARD = 1 << PointerButton.FORWARD,\r\n  ALL = (1 << PointerButton.COUNT) - 1,\r\n}\r\n\r\nexport enum PointerDevice {\r\n  MOUSE = 'mouse',\r\n  TOUCH = 'touch',\r\n  PEN = 'pen',\r\n  GAMEPAD = 'gamepad',\r\n}\r\n\r\n/**\r\n * Fired on every mouse down, provides current position/buttons down.\r\n */\r\nexport interface DragBeginEvent {\r\n  /** Current position */\r\n  readonly position: IVector2;\r\n  /** Buttons down during event */\r\n  readonly buttons: PointerButtonMask;\r\n}\r\n\r\n/**\r\n * Fired only after the pointer has moved far enough from DragBeginEvent\r\n */\r\nexport interface DragEvent {\r\n  /** Current position */\r\n  readonly position: IVector2;\r\n  /** Delta moved since last drag event */\r\n  readonly delta: IVector2;\r\n  /** Buttons down during event */\r\n  readonly buttons: PointerButtonMask;\r\n}\r\n\r\n/**\r\n * Fired on every mouse up, includes information about the difference between the DragBegin and current positions\r\n */\r\nexport interface DragEndEvent extends DragEvent {\r\n  /** duration since last DragEvent */\r\n  readonly timeSinceLastMove: number;\r\n\r\n  /** The delta between position, and the position from DragBeginEvent */\r\n  readonly fullDelta: IVector2;\r\n}\r\n\r\nexport interface PointerMoveEvent {\r\n  readonly id: number;\r\n  readonly position: IVector2;\r\n  readonly buttons: PointerButtonMask;\r\n  readonly device: PointerDevice;\r\n}\r\n\r\nexport interface PointerButtonEvent {\r\n  readonly id: number;\r\n  readonly position: IVector2;\r\n  readonly button: PointerButton;\r\n  readonly down: boolean;\r\n  readonly device: PointerDevice;\r\n}\r\n\r\nexport interface ScrollEvent {\r\n  readonly position: IVector2;\r\n  readonly delta: IVector2;\r\n}\r\n\r\nexport enum KeyState {\r\n  DOWN,\r\n  PRESSED,\r\n  UP,\r\n}\r\n\r\nexport enum Keys {\r\n  ESCAPE = 27,\r\n  ZERO = 48,\r\n  ONE = 49,\r\n  TWO = 50,\r\n  THREE = 51,\r\n  FOUR = 52,\r\n  FIVE = 53,\r\n  SIX = 54,\r\n  SEVEN = 55,\r\n  EIGHT = 56,\r\n  NINE = 57,\r\n  LEFTARROW = 37,\r\n  UPARROW = 38,\r\n  RIGHTARROW = 39,\r\n  DOWNARROW = 40,\r\n  TAB = 9,\r\n  A = 65,\r\n  B = 66,\r\n  C = 67,\r\n  D = 68,\r\n  E = 69,\r\n  F = 70,\r\n  G = 71,\r\n  H = 72,\r\n  I = 73,\r\n  J = 74,\r\n  K = 75,\r\n  L = 76,\r\n  M = 77,\r\n  N = 78,\r\n  O = 79,\r\n  P = 80,\r\n  Q = 81,\r\n  R = 82,\r\n  S = 83,\r\n  T = 84,\r\n  U = 85,\r\n  V = 86,\r\n  W = 87,\r\n  X = 88,\r\n  Y = 89,\r\n  Z = 90,\r\n  SPACE = 32,\r\n  RETURN = 13,\r\n  DELETE = 46,\r\n  BACKSPACE = 8,\r\n  SEMICOLON = 186,\r\n  PLUSEQUALS = 187,\r\n  DASHUNDERSCORE = 189,\r\n  OPENBRACKET = 219,\r\n  SHIFT = 16,\r\n  ALT = 18,\r\n  CONTROL = 17,\r\n}\r\n\r\nexport interface KeyEvent {\r\n  key: Keys;\r\n  state: KeyState;\r\n  modifiers: {\r\n    altKey: boolean,\r\n    shiftKey: boolean,\r\n    ctrlKey: boolean\r\n  };\r\n}\r\n\r\nexport interface LongPressStartEvent {\r\n  readonly position: IVector2;\r\n  readonly buttons: PointerButtonMask;\r\n  readonly threshold: number;\r\n}\r\n\r\nexport interface LongPressEndEvent { }\r\n\r\nexport interface MultiSwipeEvent {\r\n  readonly pointerCount: number;\r\n  readonly position: IVector2;\r\n  readonly delta: IVector2;\r\n}\r\n\r\nexport interface MultiSwipeEndEvent extends MultiSwipeEvent {\r\n  readonly timeSinceLastMove: number;\r\n}\r\n\r\nexport interface PinchEvent {\r\n  readonly pinchDelta: number;\r\n}\r\n\r\nexport interface PinchEndEvent extends PinchEvent {\r\n  readonly timeSinceLastMove: number;\r\n}\r\n\r\nexport interface RotateEvent {\r\n  readonly rotateDelta: number;\r\n}\r\n\r\nexport interface RotateEndEvent extends RotateEvent {\r\n  readonly timeSinceLastMove: number;\r\n}\r\n","import {\r\n  Object3D, Mesh, PerspectiveCamera,\r\n  MeshBasicMaterial, BoxGeometry, ShaderMaterial, LineBasicMaterial, EdgesGeometry,\r\n  AnimationMixer, Color, Matrix4, Vector3\r\n} from 'three';\r\nimport {SceneComponent, ISceneNode} from '../scene-component/SceneComponent';\r\n\r\ndeclare global {\r\n  interface Window {\r\n    THREE: any;\r\n  }\r\n}\r\n\r\ninterface Inputs {\r\n  nearPlane: number;\r\n  farPlane: number,\r\n  horizontalFOV: number,\r\n  aspect: number,\r\n  localPosition: { x: number; y: number; z: number; };\r\n  localRotation: { x: number; y: number; z: number; };\r\n  color: number;\r\n  panPeriod: number;\r\n  panAngle: number;\r\n}\r\n\r\ntype HighlightUniforms = {\r\n  color: { value: Color },\r\n  projPosition: { value: Vector3 };\r\n  lightMatrix: { value: Matrix4 };\r\n}\r\n\r\n\r\nexport class SecurityCamera extends SceneComponent {\r\n  private root: Object3D | null = null;\r\n  private pivot: Object3D | null = null;\r\n  private box: Mesh | null = null;\r\n  private edges: Mesh | null = null;\r\n  private projector: PerspectiveCamera;\r\n  private highlight: Mesh | null = null;\r\n  private highlightUniforms: HighlightUniforms = {\r\n    color: {value: new Color()},\r\n    projPosition: {value: new Vector3()},\r\n    lightMatrix: {value: new Matrix4()},\r\n  }\r\n  private mixer: AnimationMixer;\r\n\r\n  override inputs: Inputs = {\r\n    nearPlane: 0.1,\r\n    farPlane: 4,\r\n    horizontalFOV: 80,\r\n    aspect: 16 / 9,\r\n    localPosition: {x: 0, y: 0, z: 0},\r\n    localRotation: {x: 0, y: 0, z: 0},\r\n    color: 0xffffff,\r\n    panPeriod: 20,\r\n    panAngle: 180,\r\n  };\r\n\r\n  override outputs: any = {};\r\n\r\n\r\n  override onInit() {\r\n    const THREE = this.context.three;\r\n\r\n    this.root = new THREE.Object3D();\r\n    this.pivot = new THREE.Object3D();\r\n    this.root.add(this.pivot);\r\n    this.outputs.objectRoot = this.root;\r\n    this.root.position.set(this.inputs.localPosition.x, this.inputs.localPosition.y, this.inputs.localPosition.z);\r\n\r\n    const euler = new THREE.Euler(this.inputs.localRotation.x * Math.PI / 180, this.inputs.localRotation.y * Math.PI / 180, this.inputs.localRotation.z * Math.PI / 180, 'YXZ');\r\n    this.pivot.quaternion.setFromEuler(euler);\r\n\r\n    const aspect = this.inputs.aspect;\r\n    const DEG2RAD = Math.PI / 180;\r\n    const RAD2DEG = 1 / DEG2RAD;\r\n    const verticalFOV = 2 * Math.atan(1 / aspect * Math.tan(0.5 * this.inputs.horizontalFOV * DEG2RAD)) * RAD2DEG;\r\n    this.projector = new THREE.PerspectiveCamera(verticalFOV, aspect, this.inputs.nearPlane, this.inputs.farPlane);\r\n    // orientation of the projector is handled by the pivot\r\n    this.pivot.add(this.projector);\r\n\r\n    this.makeFrustumVisuals();\r\n\r\n    this.pivot.add(this.box);\r\n    this.pivot.add(this.edges);\r\n\r\n    this.makeHighlight();\r\n\r\n    // attach highighting to the mesh it represents\r\n    // TODO (scene query): this is very brittle but is the only way to attach something to a room of the model\r\n    this.outputs.objectRoot.parent.parent.add(this.highlight);\r\n\r\n    // create the animation mixer to rotate the camera\r\n    this.makeAnimation();\r\n  }\r\n\r\n  override onTick(delta: number) {\r\n    updateHighlightUniforms(this.projector, this.highlightUniforms);\r\n    if (this.mixer) {\r\n      this.mixer.update(delta / 1000);\r\n    }\r\n  }\r\n\r\n  override onDestroy() {\r\n    if (this.highlight && this.highlight.parent) {\r\n      this.highlight.parent.remove(this.highlight);\r\n      (this.highlight.material as ShaderMaterial).dispose();\r\n    }\r\n    if (this.edges) {\r\n      this.edges.geometry.dispose();\r\n      (this.edges.material as LineBasicMaterial).dispose();\r\n    }\r\n    if (this.box) {\r\n      this.box.geometry.dispose();\r\n      (this.box.material as MeshBasicMaterial).dispose();\r\n    }\r\n\r\n  }\r\n\r\n  private makeFrustumVisuals() {\r\n    const THREE = this.context.three;\r\n    if (this.box) {\r\n      this.root.remove(this.box);\r\n      (this.box.material as MeshBasicMaterial).dispose();\r\n      (this.box.geometry as BoxGeometry).dispose();\r\n      this.box = null;\r\n    }\r\n    if (this.edges) {\r\n      this.root.remove(this.edges);\r\n      (this.edges.material as LineBasicMaterial).dispose();\r\n      (this.edges.geometry as EdgesGeometry).dispose();\r\n      this.edges = null;\r\n    }\r\n\r\n    function edgesToCylinders(edgesGeometry: EdgesGeometry, thickness: number) {\r\n      const {position} = edgesGeometry.attributes;\r\n      const {array, count} = position;\r\n      const r = thickness / 2;\r\n      const geoms = [];\r\n      for (let i = 0; i < count * 3 - 1; i += 6) {\r\n        const a = new THREE.Vector3(array[i], array[i + 1], array[i + 2]);\r\n        const b = new THREE.Vector3(array[i + 3], array[i + 4], array[i + 5]);\r\n\r\n        const vec = new THREE.Vector3().subVectors(b, a);\r\n        const len = vec.length();\r\n        const geom = new THREE.CylinderBufferGeometry(r, r, len, 8);\r\n        geom.translate(0, len / 2, 0);\r\n        geom.rotateX(Math.PI / 2);\r\n        geom.lookAt(vec);\r\n        geom.translate(a.x, a.y, a.z);\r\n        geoms.push(geom);\r\n      }\r\n      // API to be updated in bundle - JSSDK-1222\r\n      return (THREE as any).mergeBufferGeometries(geoms);\r\n    }\r\n\r\n    const frustumLength = this.inputs.farPlane - this.inputs.nearPlane;\r\n    const boxGeometry: BoxGeometry = new THREE.BoxGeometry(2, 2, frustumLength);\r\n    const halfHAngle = this.inputs.horizontalFOV * 0.5 * Math.PI / 180;\r\n    const nearHalfWidth = Math.tan(halfHAngle) * this.inputs.nearPlane;\r\n    const farHalfWidth = Math.tan(halfHAngle) * this.inputs.farPlane;\r\n    const nearHalfHeight = nearHalfWidth / this.inputs.aspect;\r\n    const farHalfHeight = farHalfWidth / this.inputs.aspect;\r\n\r\n    const positions = boxGeometry.getAttribute('position');\r\n\r\n    for (let i = 0; i < positions.count; i++) {\r\n      const vertexZ = positions.getZ(i);\r\n      const vertexX = positions.getX(i);\r\n      const vertexY = positions.getY(i);\r\n      if (vertexZ > 0) {\r\n        // back of the camera\r\n        positions.setX(i, vertexX * nearHalfWidth)\r\n        positions.setY(i, vertexY * nearHalfHeight);\r\n      } else {\r\n        // front of the camera\r\n        positions.setX(i, vertexX * farHalfWidth)\r\n        positions.setY(i, vertexY * farHalfHeight);\r\n      }\r\n      positions.setZ(i, vertexZ - 0.5 * frustumLength - this.inputs.nearPlane);\r\n    }\r\n\r\n    var boxMaterial: MeshBasicMaterial = new THREE.MeshBasicMaterial({\r\n      color: this.inputs.color,\r\n      opacity: 0.05,\r\n      transparent: true,\r\n      side: THREE.BackSide,\r\n      blending: THREE.NormalBlending,\r\n      depthWrite: false,\r\n    });\r\n    this.box = new THREE.Mesh(boxGeometry, boxMaterial);\r\n    const edgesGeometry = edgesToCylinders(new THREE.EdgesGeometry(boxGeometry), 0.015);\r\n    this.edges = new THREE.Mesh(edgesGeometry, new THREE.MeshBasicMaterial({\r\n      color: 0xffffff,\r\n      opacity: 0.25,\r\n      transparent: true,\r\n      blending: THREE.AdditiveBlending,\r\n      depthWrite: false,\r\n    }));\r\n\r\n    const edgesGeometry2 = edgesToCylinders(new THREE.EdgesGeometry(boxGeometry), 0.06);\r\n    const edges2 = new THREE.Mesh(edgesGeometry2, new THREE.MeshBasicMaterial({\r\n      color: this.inputs.color,\r\n      opacity: 0.05,\r\n      transparent: true,\r\n      blending: THREE.AdditiveBlending,\r\n      depthWrite: false,\r\n    }));\r\n    this.pivot.add(edges2);\r\n  }\r\n\r\n  private makeHighlight() {\r\n    const THREE = this.context.three;\r\n\r\n    // TODO (scene query): this is very brittle and hardcoded but is the only way to get room geometries until we have a better way to query the scene graph\r\n    const floorMesh = this.outputs.objectRoot.parent.parent.getObjectByName('FloorMesh:0');\r\n    const roomMesh = floorMesh.children[0] as Mesh;\r\n\r\n    updateHighlightUniforms(this.projector, this.highlightUniforms);\r\n    this.highlightUniforms.color.value.setHex(this.inputs.color);\r\n\r\n    const shader = new THREE.ShaderMaterial({\r\n      polygonOffset: true,\r\n      polygonOffsetUnits: -0.1,\r\n      transparent: true,\r\n      uniforms: this.highlightUniforms,\r\n      vertexShader: vertexShader(),\r\n      fragmentShader: fragmentShader(),\r\n    });\r\n\r\n    // a mesh to represent the \"highlight\"\r\n    this.highlight = new THREE.Mesh(roomMesh.geometry, shader);\r\n  }\r\n\r\n  toggleViewFrustum(): void {\r\n    this.highlight.visible = !this.highlight.visible;\r\n    this.edges.visible = !this.edges.visible;\r\n    this.pivot.visible = !this.pivot.visible\r\n  }\r\n\r\n  private makeAnimation() {\r\n    const THREE = this.context.three;\r\n\r\n    // preapply the initial rotation of the root so that panAngle is relative to it.\r\n\r\n    // TODO: fix it!\r\n    const rootRotation = this.context.root.quaternion;\r\n\r\n    const yAxis = new THREE.Vector3(0, 1, 0);\r\n    const frame0 = new THREE.Quaternion().setFromAxisAngle(yAxis, 0).premultiply(rootRotation);\r\n    const frame1 = new THREE.Quaternion().setFromAxisAngle(yAxis, this.inputs.panAngle).premultiply(rootRotation);\r\n\r\n    // a track that has delays at the start and end for 5% of the animation\r\n    const track = new THREE.QuaternionKeyframeTrack('.quaternion', [\r\n      0, this.inputs.panPeriod * 0.05, this.inputs.panPeriod * 0.95, this.inputs.panPeriod\r\n    ], [\r\n      frame0.x, frame0.y, frame0.z, frame0.w,\r\n      frame0.x, frame0.y, frame0.z, frame0.w,\r\n      frame1.x, frame1.y, frame1.z, frame1.w,\r\n      frame1.x, frame1.y, frame1.z, frame1.w,\r\n    ]);\r\n\r\n    const clip = new THREE.AnimationClip('panning', this.inputs.panPeriod, [track]);\r\n\r\n    // There is no api to change the rotation of the root, so we will use a private property to access the Object3D.\r\n    // This will likely need to change in the future.\r\n    this.mixer = new THREE.AnimationMixer((this.context.root as any).obj3D);\r\n    const action = this.mixer.clipAction(clip);\r\n    action.loop = THREE.LoopPingPong;\r\n    action.play();\r\n  }\r\n\r\n}\r\n\r\nfunction vertexShader(): string {\r\n  return `\r\n    uniform mat4 lightMatrix;\r\n\r\n    varying vec4 vLightCoords;\r\n\r\n    void main() {\r\n      // create a UV region [0,1] x [0,1] to represent what the lightMatrix \"sees\"\r\n      vLightCoords = lightMatrix *  modelMatrix * vec4(position, 1.0);\r\n      gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n    }\r\n  `;\r\n}\r\n\r\nfunction fragmentShader() {\r\n  return `\r\n    uniform vec3 color;\r\n\r\n    varying vec4 vLightCoords;\r\n\r\n    void main() {\r\n      vec2 lightUV = vLightCoords.xy / vLightCoords.w;\r\n      float inView = float(max(lightUV.x, lightUV.y) <= 1.0 && min(lightUV.x, lightUV.y) >= 0.0 && vLightCoords.z > 0.0);\r\n\r\n      gl_FragColor = vec4(color, min(inView, 0.2));\r\n    }\r\n  `;\r\n}\r\n\r\nfunction updateHighlightUniforms(projector: PerspectiveCamera, uniforms: HighlightUniforms) {\r\n  projector.getWorldPosition(uniforms.projPosition.value);\r\n\r\n  // similar to a shadow matrix, but we're using it as a \"rectangular\" spotlight\r\n  // [lightBias] * [projection] * [viewMatrix]\r\n  uniforms.lightMatrix.value.makeScale(0.5, 0.5, 0.5);\r\n  uniforms.lightMatrix.value.setPosition(new Vector3(0.5, 0.5, 0.5))\r\n  uniforms.lightMatrix.value.multiplyMatrices(uniforms.lightMatrix.value, projector.projectionMatrix);\r\n  uniforms.lightMatrix.value.multiplyMatrices(uniforms.lightMatrix.value, projector.matrixWorldInverse);\r\n}\r\n\r\nexport const securityCameraType = 'mp.securityCamera';\r\nexport const makeSecurityCamera = function () {\r\n  return new SecurityCamera();\r\n}\r\n","import {\r\n  Object3D,\r\n  Mesh,\r\n  PerspectiveCamera,\r\n  ShaderMaterial,\r\n  MeshBasicMaterial,\r\n  BoxGeometry,\r\n  LineBasicMaterial,\r\n  EdgesGeometry,\r\n  Color,\r\n  Matrix4,\r\n  Vector3,\r\n  Euler,\r\n  CylinderBufferGeometry,\r\n  BackSide,\r\n  NormalBlending,\r\n  AdditiveBlending,\r\n} from 'three';\r\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js'\r\nimport {SceneComponent} from '../scene-component/SceneComponent';\r\n\r\ninterface Inputs {\r\n  nearPlane: number;\r\n  farPlane: number,\r\n  horizontalFOV: number,\r\n  aspect: number,\r\n  localPosition: { x: number; y: number; z: number; };\r\n  localRotation: { x: number; y: number; z: number; };\r\n  color: number;\r\n  panPeriod: number;\r\n  panAngle: number;\r\n}\r\n\r\ntype HighlightUniforms = {\r\n  color: { value: Color },\r\n  projPosition: { value: Vector3 };\r\n  lightMatrix: { value: Matrix4 };\r\n}\r\n\r\n/**\r\n * This class is the extracted View Frustum Mesh from\r\n * SecurityCamera example\r\n */\r\nexport class ViewFrustumMesh extends SceneComponent {\r\n\r\n  private root: Object3D | null = null;\r\n  private pivot: Object3D | null = null;\r\n  private box: Mesh | null = null;\r\n  private edges: Mesh | null = null;\r\n\r\n  private projector: PerspectiveCamera;\r\n\r\n  override inputs: Inputs = {\r\n    \"nearPlane\": 0.1,\r\n    \"farPlane\": 10,\r\n    \"horizontalFOV\": 52,\r\n    \"aspect\": 1.7777777777777777,\r\n    \"localPosition\": {\r\n      \"x\": 0,\r\n      \"y\": 0.18,\r\n      \"z\": -0.3\r\n    },\r\n    \"localRotation\": {\r\n      \"x\": -15,\r\n      \"y\": 0,\r\n      \"z\": 0\r\n    },\r\n    \"color\": 65280,\r\n    \"panPeriod\": 5,\r\n    \"panAngle\": -45\r\n  };\r\n\r\n  private highlight: Mesh | null = null;\r\n\r\n  private highlightUniforms: HighlightUniforms = {\r\n    color: {value: new Color()},\r\n    projPosition: {value: new Vector3()},\r\n    lightMatrix: {value: new Matrix4()},\r\n  }\r\n  override outputs: any = {};\r\n\r\n  override onInit() {\r\n\r\n    this.root = new Object3D();\r\n    this.pivot = new Object3D();\r\n    this.root.add(this.pivot);\r\n    this.outputs.objectRoot = this.root;\r\n\r\n    const euler = new Euler(this.inputs.localRotation.x * Math.PI / 180, this.inputs.localRotation.y * Math.PI / 180, this.inputs.localRotation.z * Math.PI / 180, 'YXZ');\r\n    this.pivot.quaternion.setFromEuler(euler);\r\n\r\n    this.makeFrustumVisuals();\r\n\r\n    this.pivot.add(this.box);\r\n    this.pivot.add(this.edges);\r\n\r\n    const aspect = this.inputs.aspect;\r\n    const DEG2RAD = Math.PI / 180;\r\n    const RAD2DEG = 1 / DEG2RAD;\r\n    const verticalFOV = 2 * Math.atan(1 / aspect * Math.tan(0.5 * this.inputs.horizontalFOV * DEG2RAD)) * RAD2DEG;\r\n    this.projector = new PerspectiveCamera(verticalFOV, aspect, this.inputs.nearPlane, this.inputs.farPlane);\r\n    this.pivot.add(this.projector);\r\n\r\n    this.makeHighlight();\r\n    this.context.scene.add(this.highlight);\r\n\r\n  }\r\n\r\n\r\n  onTickModified(delta: number, quaternion: any) {\r\n    this.pivot.quaternion.set(quaternion.x,quaternion.y,quaternion.z,quaternion.w);\r\n    updateHighlightUniforms(this.projector, this.highlightUniforms);\r\n  }\r\n\r\n  private makeFrustumVisuals() {\r\n    if (this.box) {\r\n      this.root.remove(this.box);\r\n      (this.box.material as MeshBasicMaterial).dispose();\r\n      (this.box.geometry as BoxGeometry).dispose();\r\n      this.box = null;\r\n    }\r\n    if (this.edges) {\r\n      this.root.remove(this.edges);\r\n      (this.edges.material as LineBasicMaterial).dispose();\r\n      (this.edges.geometry as EdgesGeometry).dispose();\r\n      this.edges = null;\r\n    }\r\n\r\n    function edgesToCylinders(edgesGeometry: EdgesGeometry, thickness: number) {\r\n      const {position} = edgesGeometry.attributes;\r\n      const {array, count} = position;\r\n      const r = thickness / 2;\r\n      const geoms = [];\r\n      for (let i = 0; i < count * 3 - 1; i += 6) {\r\n        const a = new Vector3(array[i], array[i + 1], array[i + 2]);\r\n        const b = new Vector3(array[i + 3], array[i + 4], array[i + 5]);\r\n\r\n        const vec = new Vector3().subVectors(b, a);\r\n        const len = vec.length();\r\n        const geom = new CylinderBufferGeometry(r, r, len, 8);\r\n        geom.translate(0, len / 2, 0);\r\n        geom.rotateX(Math.PI / 2);\r\n        geom.lookAt(vec);\r\n        geom.translate(a.x, a.y, a.z);\r\n        geoms.push(geom);\r\n      }\r\n      // API to be updated in bundle - JSSDK-1222\r\n      return BufferGeometryUtils.mergeBufferGeometries(geoms);\r\n    }\r\n\r\n    const frustumLength = this.inputs.farPlane - this.inputs.nearPlane;\r\n    const boxGeometry: BoxGeometry = new BoxGeometry(2, 2, frustumLength);\r\n    const halfHAngle = this.inputs.horizontalFOV * 0.5 * Math.PI / 180;\r\n    const nearHalfWidth = Math.tan(halfHAngle) * this.inputs.nearPlane;\r\n    const farHalfWidth = Math.tan(halfHAngle) * this.inputs.farPlane;\r\n    const nearHalfHeight = nearHalfWidth / this.inputs.aspect;\r\n    const farHalfHeight = farHalfWidth / this.inputs.aspect;\r\n\r\n    const positions = boxGeometry.getAttribute('position');\r\n\r\n    for (let i = 0; i < positions.count; i++) {\r\n      const vertexZ = positions.getZ(i);\r\n      const vertexX = positions.getX(i);\r\n      const vertexY = positions.getY(i);\r\n      if (vertexZ > 0) {\r\n        // back of the camera\r\n        positions.setX(i, vertexX * nearHalfWidth)\r\n        positions.setY(i, vertexY * nearHalfHeight);\r\n      } else {\r\n        // front of the camera\r\n        positions.setX(i, vertexX * farHalfWidth)\r\n        positions.setY(i, vertexY * farHalfHeight);\r\n      }\r\n      positions.setZ(i, vertexZ - 0.5 * frustumLength - this.inputs.nearPlane);\r\n    }\r\n\r\n    const boxMaterial: MeshBasicMaterial = new MeshBasicMaterial({\r\n      color: this.inputs.color,\r\n      opacity: 0.35,\r\n      transparent: true,\r\n      side: BackSide,\r\n      blending: NormalBlending,\r\n      depthWrite: false,\r\n    });\r\n    this.box = new Mesh(boxGeometry, boxMaterial);\r\n    const edgesGeometry = edgesToCylinders(new EdgesGeometry(boxGeometry), 0.015);\r\n    this.edges = new Mesh(edgesGeometry, new MeshBasicMaterial({\r\n      color: 0xffffff,\r\n      opacity: 0.25,\r\n      transparent: true,\r\n      blending: AdditiveBlending,\r\n      depthWrite: false,\r\n    }));\r\n\r\n    const edgesGeometry2 = edgesToCylinders(new EdgesGeometry(boxGeometry), 0.06);\r\n    const edges2 = new Mesh(edgesGeometry2, new MeshBasicMaterial({\r\n      color: this.inputs.color,\r\n      opacity: 0.35,\r\n      transparent: true,\r\n      blending: AdditiveBlending,\r\n      depthWrite: false,\r\n    }));\r\n    this.pivot.add(edges2);\r\n  }\r\n\r\n  private makeHighlight() {\r\n\r\n    let floorMesh = null;\r\n    floorMesh = this.context.scene.getObjectByName('FloorMesh:0');\r\n    const roomMesh = floorMesh.children[5] as Mesh;\r\n\r\n    updateHighlightUniforms(this.projector, this.highlightUniforms);\r\n    this.highlightUniforms.color.value.setHex(this.inputs.color);\r\n\r\n    const shader = new ShaderMaterial({\r\n      polygonOffset: true,\r\n      polygonOffsetUnits: -0.1,\r\n      transparent: true,\r\n      uniforms: this.highlightUniforms,\r\n      vertexShader: vertexShader(),\r\n      fragmentShader: fragmentShader(),\r\n    });\r\n\r\n    // a mesh to represent the \"highlight\"\r\n    this.highlight = new Mesh(roomMesh.geometry, shader);\r\n\r\n  }\r\n\r\n  override onDestroy() {\r\n    if (this.highlight && this.highlight.parent) {\r\n      this.highlight.parent.remove(this.highlight);\r\n      (this.highlight.material as ShaderMaterial).dispose();\r\n    }\r\n    if (this.edges) {\r\n      this.edges.geometry.dispose();\r\n      (this.edges.material as LineBasicMaterial).dispose();\r\n    }\r\n    if (this.box) {\r\n      this.box.geometry.dispose();\r\n      (this.box.material as MeshBasicMaterial).dispose();\r\n    }\r\n  }\r\n}\r\n\r\nfunction vertexShader(): string {\r\n  return `\r\n    uniform mat4 lightMatrix;\r\n\r\n    varying vec4 vLightCoords;\r\n\r\n    void main() {\r\n      // create a UV region [0,1] x [0,1] to represent what the lightMatrix \"sees\"\r\n      vLightCoords = lightMatrix *  modelMatrix * vec4(position, 1.0);\r\n      gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n    }\r\n  `;\r\n}\r\n\r\nfunction fragmentShader() {\r\n  return `\r\n    uniform vec3 color;\r\n\r\n    varying vec4 vLightCoords;\r\n\r\n    void main() {\r\n      vec2 lightUV = vLightCoords.xy / vLightCoords.w;\r\n      float inView = float(max(lightUV.x, lightUV.y) <= 1.0 && min(lightUV.x, lightUV.y) >= 0.0 && vLightCoords.z > 0.0);\r\n\r\n      gl_FragColor = vec4(color, min(inView, 0.2));\r\n    }\r\n  `;\r\n}\r\n\r\nfunction updateHighlightUniforms(projector: PerspectiveCamera, uniforms: HighlightUniforms) {\r\n  projector.getWorldPosition(uniforms.projPosition.value);\r\n\r\n  // similar to a shadow matrix, but we're using it as a \"rectangular\" spotlight\r\n  // [lightBias] * [projection] * [viewMatrix]\r\n  uniforms.lightMatrix.value.makeScale(0.5, 0.5, 0.5);\r\n  uniforms.lightMatrix.value.setPosition(new Vector3(0.5, 0.5, 0.5))\r\n  uniforms.lightMatrix.value.multiplyMatrices(uniforms.lightMatrix.value, projector.projectionMatrix);\r\n  uniforms.lightMatrix.value.multiplyMatrices(uniforms.lightMatrix.value, projector.matrixWorldInverse);\r\n}\r\n\r\nexport const ViewFrustumMeshType = 'mp.ViewFrustumMesh';\r\nexport const makeViewFrustumMesh = function () {\r\n  return new ViewFrustumMesh();\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 listCurrentProfiles(): Promise<Profile[]> {\r\n        const profiles = (await this.API.__proto__.ListProfiles()).items;\r\n        return profiles.filter((p) => !p.deletedAt);\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> {\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, VisitTemplate } from \"../../types.service\";\r\nimport { DateTime } from \"luxon\";\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 (await this.API.__proto__.MissionsByTemplate(templateID)).items.filter(\r\n            (mis) => !mis.deletedAt,\r\n        );\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    /**\r\n     * Filters the missions that assisted to live of the visit (by comparing the realStartTime of VisitTemplate and connectedAt time)\r\n     * @param template VisitTemplate \r\n     * @param missions Mission[] missions for this visit\r\n     * @returns Mission[] filtered missions\r\n     */\r\n    filterMissionsAssitedToLiveForTemplate(template: VisitTemplate, missions: Mission[]): Mission[] {\r\n        const visitStartTimestamp = template.realStartedAt;\r\n        return missions.filter((mis) => {\r\n            if (!mis.connectedToLiveAt) {\r\n                return false;\r\n            }\r\n            if (mis.connectedToLiveAt.length === 0) {\r\n                return false;\r\n            }\r\n            const lastConnectedAt = mis.connectedToLiveAt[mis.connectedToLiveAt.length - 1];\r\n            const lastConnectedAtTimestamp = DateTime.fromISO(lastConnectedAt).toMillis();\r\n            return lastConnectedAtTimestamp > visitStartTimestamp;\r\n        });\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        try {\r\n            return this.API.__proto__.ListProperties().then((props) => props.items);\r\n        } catch {\r\n            return this.API.__proto__.ListPropertys().then((props) => props.items);\r\n        }\r\n    }\r\n\r\n    async listPropertiesForSpace(spaceID: string): Promise<Property[]> {\r\n        try {\r\n            return this.API.__proto__.ListProperties({ spaceID: { eq: spaceID } }).then((props) => props.items);\r\n        } catch {\r\n            return this.API.__proto__.ListPropertys({ spaceID: { eq: spaceID } }).then((props) => props.items);\r\n        }\r\n\r\n    }\r\n}","import { Inject, 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, SpModule } 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    spModule: SpModule;\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        @Inject('SPModule') spModuleInjected: SpModule,\r\n    ) {\r\n        // this.checkConnectedAWSUser();\r\n        this.missionService.currentMissionsUpdated.subscribe(async (data) => {\r\n            this.currentMissions =\r\n                await this.missionService.instantMissionsOfCurrent(this.cu.id);\r\n            this.isChanged.next(true);\r\n        });\r\n        this.spModule = spModuleInjected;\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(\"check AWS user\");\r\n            let cau = null;\r\n            let user = null;\r\n            try {\r\n                if (!this.updating) {\r\n                    cau = await Auth.currentAuthenticatedUser();\r\n                    // console.log(\"connected\", cau);\r\n                    user = await this.current(cau);\r\n                    // console.log(\"current of userService\", user);\r\n                }\r\n            } catch { }\r\n            if (!user && !this.updating) {\r\n                // console.log(\"no user in check connected aws user\");\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    /**\r\n     * - Creates AWS user in Cognito for Hotel User Pool Schema (only email is required)\r\n     * - Creates Profile in DynamoDB\r\n     *\r\n     * @param u User to be created\r\n     */\r\n    async createHotelUserAWSandProfile(\r\n        user: {\r\n            email: string;\r\n            lastName: string;\r\n            firstName: string;\r\n        },\r\n    ): Promise<Profile> {\r\n        const attributes = {\r\n            email: user.email.trim()\r\n        };\r\n        // AWSCognito\r\n        const password = \"temporaryp\";\r\n        let error;\r\n        try {\r\n            const { userSub } = await Auth.signUp({\r\n                username: user.email.trim(),\r\n                password,\r\n                attributes,\r\n            });\r\n            if (userSub) {\r\n                return this.createProfile(userSub, user);\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.hasManagerRoleInAnyMission()) {\r\n                // check access token if not Fast connect (fast connect is for the guest connection via link(/redirect?user=))\r\n                // checks visitors(museum or not), occupants, service\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 logoutCurrentWihtoutAuth() {\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    }\r\n\r\n    async checkAccessToken(jwtToken: string): Promise<boolean> {\r\n        const now = DateTime.local();\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({ minutes: 5 }).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    getSpModule(): SpModule {\r\n        return this.spModule;\r\n    }\r\n}\r\n","import { EventEmitter, Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { Zone } from '../types.service';\r\n\r\n/**\r\n * Atomic zone change service to break cyclic dependencies issue\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ZoneChangeService {\r\n\r\n  zoneChange: Subject<Zone | null> = new Subject();\r\n  zonesForUserChange: Subject<Zone[] | null> = new Subject();\r\n\r\n  private currentZone: Zone;\r\n  private currentZones: Zone[];\r\n\r\n  public floorHasChanged: EventEmitter<Zone> = new EventEmitter<Zone>();\r\n\r\n  constructor() {\r\n    this.zoneChange.subscribe((zone) => {\r\n      //console.log(`new zone ${JSON.stringify(zone)}`);\r\n      this.currentZone = zone;\r\n    });\r\n\r\n    this.zonesForUserChange.subscribe((zones) => {\r\n      //console.log(`new zones ${JSON.stringify(zones)}`);\r\n      this.currentZones = zones;\r\n    });\r\n  }\r\n\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport {Inject, Injectable} from '@angular/core';\r\nimport {Subject, takeUntil} from 'rxjs';\r\nimport {removeNullKeysFromObject, waitUntil} from '../../helpers.service';\r\nimport {POI, PoiType, Zone} from '../../types.service';\r\nimport {ZoneChangeService} from '../zoneChange.service';\r\nimport {BaseUserService} from '../user.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class PoiService {\r\n  API: any; //AWS APIService\r\n  awsKinesisAnalytics: any; //AWS\r\n  selectedFloor: Zone = null;\r\n\r\n  currentSpaceID: string;\r\n\r\n  zoneIDFilter: string;\r\n\r\n  private destroy$ = new Subject();\r\n\r\n  constructor(\r\n    @Inject('currentAPIService') apiInjected: any,\r\n    @Inject('currentAwsKinesisAnalyticsService')\r\n      awsKinesisAnalyticsInjected: any,\r\n    private userService: BaseUserService,\r\n    private zoneChangeService: ZoneChangeService // inject ZoneChangeService instead of NavigatorService to fix circular dependancy\r\n  ) {\r\n    this.API = apiInjected;\r\n    this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;\r\n\r\n    this.zoneChangeService.zoneChange.subscribe((zone) => {\r\n      if (!zone) {\r\n        return;\r\n      }\r\n      if (zone.spaceID) {\r\n        this.currentSpaceID = zone.spaceID;\r\n      }\r\n      if (!this.currentSpaceID) {\r\n        this.zoneIDFilter = null;\r\n      } else if (zone.id !== this.zoneIDFilter) {\r\n        this.zoneIDFilter = zone.id;\r\n      }\r\n    });\r\n\r\n    this.zoneChangeService.floorHasChanged.subscribe((floor) => {\r\n      if (floor) {\r\n        this.selectedFloor = floor;\r\n      }\r\n    });\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(poi: POI): Promise<POI> {\r\n    removeNullKeysFromObject(poi);\r\n    if (!!this.awsKinesisAnalytics && !!this.awsKinesisAnalytics.record && this.awsKinesisAnalytics.record()) {\r\n      this.awsKinesisAnalytics.getInstance().record(\r\n        // @ts-ignore\r\n        {\r\n          data: {\r\n            eventType: 'Object Creation',\r\n            objectType: 'poi',\r\n            poi: poi,\r\n            user: this.userService.cu,\r\n            timestamp: new Date(),\r\n            floorId: this.selectedFloor?.id,\r\n            locationId: this.currentSpaceID,\r\n            zoneId: this.zoneIDFilter,\r\n          },\r\n          streamName: 'smarterplanKinesis-analytics',\r\n          // partitionKey: \"\",\r\n        },\r\n        'AWSKinesis'\r\n      );\r\n    }\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__\r\n      .ListPOIs({matterportSweepID: {eq: sweep}}, 300)\r\n      .then((response) => response.items.filter((poi) => poi.type === type));\r\n  }\r\n\r\n  unsubscribe() {\r\n    this.destroy$.next(true);\r\n    this.destroy$.complete();\r\n  }\r\n}\r\n","/* eslint-disable unicorn/filename-case */\r\nimport { DbObjectType, MattertagActionMode, POI, PoiType } from \"./types.service\";\r\n\r\nexport class MattertagData {\r\n\r\n    private object: DbObjectType;\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    setObject(object: DbObjectType, tagType: PoiType) {\r\n        this.object = object;\r\n        this.setElementID(object.id);\r\n        this.setType(tagType);\r\n    }\r\n\r\n    setElementID(ticketID: string) {\r\n        this.elementID = ticketID;\r\n    }\r\n\r\n    setPosition(position: { x: number; y:number; z:number; }) {\r\n        this.position = position;\r\n    }\r\n\r\n    setNormal(normal: { x: number; y:number; z:number; }) {\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.object ? \"\" : \"New Tag\"; // if the object exists we inject title in html\r\n                break;\r\n            case PoiType.EQUIPMENT:\r\n                label = this.object ? \"\" : \"New Tag\";\r\n                break;\r\n            case PoiType.MEASURE:\r\n                label = this.object ? \"\" : \"New Tag\";\r\n                break;\r\n            case PoiType.DATA:\r\n                label = this.object ? \"\" : \"New Tag\";\r\n                break;\r\n            case PoiType.DESK:\r\n                label = this.object ? \"\" : \"New Tag\";\r\n                break;\r\n            case PoiType.OBJECT3D:\r\n                label = this.object ? \"\" : \"Click on blinking icon to load a 3D object here\";\r\n                break;\r\n            case PoiType.ROOM:\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            media: {\r\n                type: \"mattertag.media.none\",\r\n                src: \"\"\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    getCallbackActionMode(): MattertagActionMode {\r\n        switch (this.type) {\r\n            case PoiType.TICKET:\r\n                return this.object ? MattertagActionMode.POSITION_TICKET : MattertagActionMode.ADD_TICKET;\r\n            case PoiType.OBJECT3D:\r\n                return MattertagActionMode.POSITION_OBJECT3D;\r\n                // return this.object ? MattertagActionMode.POSITION_OBJECT3D : MattertagActionMode.ADD_OBJECT3D;\r\n            case PoiType.EQUIPMENT:\r\n                return this.object ? MattertagActionMode.POSITION_EQUIPMENT : MattertagActionMode.ADD_EQUIPMENT;\r\n            case PoiType.DATA:\r\n                return this.object ? MattertagActionMode.POSITION_DATA : MattertagActionMode.ADD_DATA;\r\n            case PoiType.DESK:\r\n                return this.object ? MattertagActionMode.POSITION_DATA : MattertagActionMode.ADD_DESK;\r\n            case PoiType.ROOM:\r\n                return this.object ? MattertagActionMode.POSITION_ROOM : MattertagActionMode.ADD_ROOM;\r\n            default:\r\n                return MattertagActionMode.ADD_TICKET;\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            case PoiType.OBJECT3D:\r\n                return \"icon_object3d.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        return this.object;\r\n    }\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 {SceneComponent, ComponentOutput, ComponentContext} from '../scene-component/SceneComponent';\r\nimport {\r\n  Object3D,\r\n  AnimationMixer,\r\n  AnimationAction,\r\n  LoopOnce,\r\n  AnimationClip,\r\n  Mesh,\r\n  Texture,\r\n  MeshLambertMaterial,\r\n  VectorKeyframeTrack,\r\n  InterpolateSmooth,\r\n  MeshBasicMaterial,\r\n  LineSegments\r\n} from 'three';\r\nimport {CanvasRenderer, IPainter2d} from './CanvasRenderer';\r\nimport {PlaneRenderer, Size} from './PlaneRenderer';\r\n\r\nconst HoverEvent = 'hover';\r\nconst UnhoverEvent = 'unhover';\r\nconst RepaintEvent = 'repaint';\r\n\r\ntype Inputs = {\r\n  loadingState: string;\r\n  texture: Texture | null;\r\n  updateInterval: number;\r\n}\r\n\r\ntype Outputs = {\r\n  painter: IPainter2d | null;\r\n  visible: boolean;\r\n} & ComponentOutput;\r\n\r\n\r\nexport class NestThermostat extends SceneComponent implements IPainter2d {\r\n  private cv: CanvasRenderer | null = null;\r\n  private planeRenderer: PlaneRenderer | null = null;\r\n  private rootScene: Object3D | null = null;\r\n  private mixer: AnimationMixer | null = null;\r\n  private onEnterClip: AnimationClip | null = null;\r\n  private mesh: Mesh | null = null;\r\n  private currentTime: number = 0;\r\n  private nextUpdate: number = 0;\r\n  private temperature: number = 0;\r\n  private tempChangeRange: number = 5;\r\n  private component: SceneComponent;\r\n\r\n\r\n  override inputs: Inputs = {\r\n    loadingState: 'Idle',\r\n    texture: null,\r\n    updateInterval: 1000,\r\n  }\r\n\r\n  override outputs = {\r\n    painter: null,\r\n    visible: false,\r\n  } as Outputs;\r\n\r\n  override events = {\r\n    [HoverEvent]: true,\r\n    [UnhoverEvent]: true,\r\n  };\r\n\r\n  override onInit(modelNode?: any, plane?: PlaneRenderer, inputTexture?: any) {\r\n    if (!this.context) {\r\n      this.context = {\r\n        root: modelNode\r\n      } as ComponentContext;\r\n    }\r\n    this.inputs.texture = inputTexture;\r\n    const root = this.context.root;\r\n    const THREE = this.context.three;\r\n\r\n    this.planeRenderer = plane;\r\n    this.planeRenderer.outputs.objectRoot.translateZ(0.05);\r\n    this.planeRenderer.outputs.objectRoot.translateY(0.4);\r\n    this.planeRenderer.outputs.objectRoot.scale.set(0.5, 0.5, 0.5);\r\n    // planeRenderer.inputs.localPosition.z = 0.05;\r\n    // planeRenderer.inputs.localPosition.y = 0.4;\r\n    // planeRenderer.inputs.localScale = {x: 0.5, y: 0.5, z: 0.5};\r\n\r\n    this.outputs.painter = this;\r\n\r\n    this.mixer = new AnimationMixer(this.planeRenderer.outputs.objectRoot);\r\n\r\n    const tm = 0.2;\r\n    const positionTrack = new VectorKeyframeTrack('.scale', [0, tm], [\r\n      0, 0, 0,\r\n      0.5, 0.5, 0.5\r\n    ], InterpolateSmooth);\r\n    this.onEnterClip = new AnimationClip(null, tm, [positionTrack]);\r\n  }\r\n\r\n  override onInputsUpdated() {\r\n    if (this.inputs.loadingState === 'Loaded') {\r\n      const lines: LineSegments[] = [];\r\n\r\n      //@ts-ignore\r\n      this.context.root.obj3D.traverse((obj: Object3D) => {\r\n        // we dont want line segments, track them and remove them.\r\n        if (obj.type === 'LineSegments') {\r\n          lines.push(obj as LineSegments);\r\n        } else if (obj.type === 'Mesh') {\r\n          this.mesh = obj as Mesh;\r\n\r\n          const materials = this.mesh.material as MeshLambertMaterial;\r\n          materials.forEach((m, idx) => {\r\n            if (m && m.map.source.data.outerHTML.indexOf('_5b76dbe388862300126c1e14') !== -1) {\r\n              const newMaterial = new MeshBasicMaterial({map: this.inputs.texture});\r\n              this.mesh.material[idx] = newMaterial;\r\n            }\r\n          })\r\n\r\n        }\r\n      });\r\n\r\n      // remove the line segments.\r\n      lines.forEach((line: LineSegments) => {\r\n        line.parent.remove(line);\r\n      });\r\n    }\r\n  }\r\n\r\n  override onEvent(eventType: string, eventData: unknown): void {\r\n    if (eventType === HoverEvent) {\r\n      const data: any = eventData;\r\n      if (data.hover) {\r\n        this.outputs.visible = true;\r\n        const onEnterAction: AnimationAction = this.mixer.clipAction(this.onEnterClip);\r\n        onEnterAction.stop();\r\n        onEnterAction.loop = LoopOnce;\r\n        onEnterAction.clampWhenFinished = true;\r\n        onEnterAction.play();\r\n      } else {\r\n        this.outputs.visible = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  paint(context2d: CanvasRenderingContext2D, size: Size): void {\r\n    const x = 490;\r\n    const y = 490;\r\n\r\n    context2d.fillStyle = 'black';\r\n    context2d.beginPath();\r\n    context2d.arc(x, y, 400, 0, Math.PI * 2);\r\n    context2d.fill();\r\n\r\n    context2d.fillStyle = '#CF5300';\r\n    context2d.beginPath();\r\n    context2d.arc(x, y, 300, 0, Math.PI * 2);\r\n    context2d.fill();\r\n\r\n    context2d.beginPath();\r\n    context2d.strokeStyle = 'orange';\r\n    context2d.arc(x, y, 240, 0.75 * Math.PI, 0.25 * Math.PI);\r\n    context2d.lineCap = 'butt';\r\n    context2d.lineWidth = 80;\r\n    context2d.stroke();\r\n\r\n    context2d.fillStyle = 'white';\r\n    context2d.font = '220px Arial';\r\n    context2d.fillText(`${this.temperature}`, x - 115, y + 75);\r\n    this.outputs.visible = true;\r\n  }\r\n\r\n  override onTick(delta: number) {\r\n    this.currentTime += delta;\r\n\r\n    if (this.mixer) {\r\n      this.mixer.update(delta / 1000);\r\n    }\r\n\r\n    if (this.currentTime > this.nextUpdate) {\r\n      this.nextUpdate += this.inputs.updateInterval;\r\n\r\n      this.temperature += (Math.random() * this.tempChangeRange);\r\n      this.temperature = Math.trunc(this.temperature);\r\n\r\n      if (this.temperature > 99) {\r\n        this.temperature = 99;\r\n        this.tempChangeRange = -this.tempChangeRange;\r\n      }\r\n      if (this.temperature < 10) {\r\n        this.temperature = 10;\r\n        this.tempChangeRange = -this.tempChangeRange;\r\n      }\r\n\r\n      this.component.notify(RepaintEvent);\r\n      this.cv.repaint()\r\n    }\r\n  }\r\n\r\n  setComponent(component: SceneComponent, plane: PlaneRenderer, cv: CanvasRenderer) {\r\n    component.onTick = this.onTick.bind(this);\r\n    // plane.onTick = this.onTick.bind(this);\r\n    this.cv = cv;\r\n    this.component = component;\r\n    this.context = component.context;\r\n  }\r\n\r\n  setRootScene(rootScene: Object3D) {\r\n    this.rootScene = rootScene;\r\n  }\r\n}\r\n\r\nexport const nestThermostatType = 'mp.nestThermostat';\r\nexport const makeNestThermostat = function () {\r\n  return new NestThermostat();\r\n}\r\n","import {SceneComponent, ComponentInteractionType, ComponentContext,} from '../scene-component/SceneComponent';\r\nimport {\r\n  Texture,\r\n  Mesh,\r\n  MeshBasicMaterial,\r\n  Object3D,\r\n  Group,\r\n  PlaneBufferGeometry\r\n} from 'three';\r\n\r\nexport type Size = { w: number; h: number; };\r\n\r\ntype Inputs = {\r\n  texture: Texture | null;\r\n  aspect: number;\r\n  transparent: boolean;\r\n  visible: boolean;\r\n  opacity: number;\r\n  polygonOffset: boolean;\r\n  polygonOffsetFactor: number;\r\n  polygonOffsetUnits: number;\r\n  localScale: { x: number; y: number; z: number; };\r\n  localPosition: { x: number; y: number; z: number; };\r\n}\r\n\r\nexport class PlaneRenderer extends SceneComponent implements IPlaneRenderer {\r\n  private rootScene: Object3D | null = null;\r\n  private mesh: Mesh;\r\n  private pivotNode: Object3D;\r\n\r\n  override inputs: Inputs = {\r\n    texture: null,\r\n    aspect: 1,\r\n    transparent: true,\r\n    visible: true,\r\n    opacity: 1,\r\n    polygonOffset: false,\r\n    polygonOffsetFactor: 0,\r\n    polygonOffsetUnits: 0,\r\n    localScale: {x: 1, y: 1, z: 1},\r\n    localPosition: {x: 0, y: 0, z: 0},\r\n  }\r\n\r\n  override events = {\r\n    [ComponentInteractionType.CLICK]: true,\r\n  };\r\n\r\n  override onInit(modelNode?: any, inputTexture?: any) {\r\n    this.inputs.texture = inputTexture;\r\n    if (!this.context) {\r\n      this.context = {\r\n        root: modelNode\r\n      } as ComponentContext;\r\n    }\r\n\r\n    this.pivotNode = new Group();\r\n\r\n    this.mesh = new Mesh(\r\n      new PlaneBufferGeometry(1.0, 1.0),\r\n      new MeshBasicMaterial({\r\n        transparent: this.inputs.transparent,\r\n        map: this.inputs.texture,\r\n        opacity: this.inputs.opacity,\r\n        polygonOffset: this.inputs.polygonOffset,\r\n        polygonOffsetFactor: this.inputs.polygonOffsetFactor,\r\n        polygonOffsetUnits: this.inputs.polygonOffsetUnits,\r\n      }));\r\n    this.mesh.scale.set(this.inputs.localScale.x, this.inputs.localScale.y / this.inputs.aspect, this.inputs.localScale.z);\r\n    this.mesh.position.set(this.inputs.localPosition.x, this.inputs.localPosition.y, this.inputs.localPosition.z);\r\n    this.mesh.updateMatrixWorld();\r\n    this.pivotNode.add(this.mesh);\r\n\r\n    this.outputs.objectRoot = this.pivotNode;\r\n    this.outputs.collider = this.pivotNode;\r\n    this.mesh.visible = this.inputs.visible;\r\n  }\r\n\r\n  override onEvent(eventType: string, eventData: unknown) {\r\n    this.notify(eventType, eventData);\r\n  }\r\n\r\n  override onInputsUpdated(oldInputs: Inputs) {\r\n    if (oldInputs.transparent !== this.inputs.transparent) {\r\n      (this.mesh.material as MeshBasicMaterial).transparent = this.inputs.transparent;\r\n    }\r\n\r\n    if (oldInputs.texture !== this.inputs.texture) {\r\n      const material = this.mesh.material as MeshBasicMaterial;\r\n      material.map = this.inputs.texture;\r\n      material.needsUpdate = true;\r\n    }\r\n\r\n    if (oldInputs.visible !== this.inputs.visible) {\r\n      this.mesh.visible = this.inputs.visible;\r\n    }\r\n\r\n    if (oldInputs.polygonOffset !== this.inputs.polygonOffset) {\r\n      const material = this.mesh.material as MeshBasicMaterial;\r\n      material.polygonOffset = this.inputs.polygonOffset;\r\n      material.polygonOffsetFactor = this.inputs.polygonOffsetFactor;\r\n      material.polygonOffsetUnits = this.inputs.polygonOffsetUnits;\r\n    }\r\n\r\n    this.mesh.scale.set(this.inputs.localScale.x, this.inputs.localScale.y / this.inputs.aspect, this.inputs.localScale.z);\r\n    this.mesh.position.set(this.inputs.localPosition.x, this.inputs.localPosition.y, this.inputs.localPosition.z);\r\n  }\r\n\r\n  override onDestroy() {\r\n    this.outputs.collider = null;\r\n    this.outputs.objectRoot = null;\r\n\r\n    (this.mesh.material as MeshBasicMaterial).dispose();\r\n    this.mesh.geometry.dispose();\r\n  }\r\n\r\n  setRootScene(rootScene: Object3D) {\r\n    this.rootScene = rootScene;\r\n  }\r\n\r\n}\r\n\r\nexport interface IPlaneRenderer extends SceneComponent {\r\n  inputs: Inputs;\r\n}\r\n\r\nexport const planeRendererType = 'mp.planeRenderer';\r\n\r\nexport function makePlaneRenderer() {\r\n  return new PlaneRenderer();\r\n}\r\n","import { SceneComponent, ComponentOutput } from '../scene-component/SceneComponent';\r\nimport type { Texture } from 'three';\r\nimport { CanvasTexture } from 'three';\r\nimport { Size } from './PlaneRenderer';\r\nimport { CanvasImage } from './CanvasImage';\r\n\r\nexport interface IPainter2d {\r\n  paint(context2d: CanvasRenderingContext2D, size: Size): void;\r\n}\r\n\r\ntype Inputs = {\r\n  painter: IPainter2d | null;\r\n  textureRes: Size;\r\n}\r\n\r\ntype Outputs = {\r\n  texture: Texture | null;\r\n} & ComponentOutput;\r\n\r\ntype Events = {\r\n  repaint: boolean;\r\n};\r\n\r\nexport class CanvasRenderer extends SceneComponent {\r\n  private canvas: HTMLCanvasElement;\r\n  private renderContext2D: CanvasRenderingContext2D;\r\n\r\n  override inputs: Inputs = {\r\n    painter: null,\r\n    textureRes: { w: 1024, h: 1024 }, // dim for thermostat\r\n  }\r\n\r\n  override outputs = {\r\n    texture: null,\r\n  } as Outputs;\r\n\r\n  override events = {\r\n    repaint: true,\r\n  } as Events;\r\n\r\n  override onInit() {\r\n\r\n    // set up canvas 2d context\r\n    this.canvas = document.createElement('canvas');\r\n    this.renderContext2D = this.canvas.getContext('2d');\r\n    this.outputs.texture = new CanvasTexture(this.canvas);\r\n\r\n    this.resize(this.inputs.textureRes);\r\n    this.repaint();\r\n  }\r\n\r\n  setCanvasNestThermostatPainter(sc){\r\n    this.inputs.painter = sc;\r\n  }\r\n\r\n  override onInputsUpdated(oldInputs: Inputs) {\r\n    if (oldInputs.textureRes.w !== this.inputs.textureRes.w ||\r\n        oldInputs.textureRes.h !== this.inputs.textureRes.h) {\r\n      this.resize(this.inputs.textureRes);\r\n    }\r\n\r\n    if (oldInputs.painter !== this.inputs.painter) {\r\n      this.repaint();\r\n    }\r\n  }\r\n\r\n  override onEvent(eventType: string, _eventData: unknown) {\r\n    if (eventType === 'repaint') {\r\n      this.repaint();\r\n    }\r\n  }\r\n\r\n  override onDestroy() {\r\n    this.outputs.texture.dispose();\r\n    this.outputs.texture = null;\r\n  }\r\n\r\n  private resize(size: Size) {\r\n    this.canvas.width = size.w;\r\n    this.canvas.height = size.h;\r\n  }\r\n\r\n  public repaint() {\r\n    if (this.inputs.painter) {\r\n      this.inputs.painter.paint(this.renderContext2D, this.inputs.textureRes);\r\n      this.outputs.texture.needsUpdate = true;\r\n    }\r\n  }\r\n\r\n}\r\n\r\nexport interface ICanvasRenderer extends SceneComponent{\r\n  inputs: Inputs;\r\n  outputs: Outputs;\r\n}\r\n\r\nexport const canvasRendererType = 'mp.canvasRenderer';\r\nexport function makeCanvasRenderer() {\r\n  return new CanvasRenderer();\r\n}\r\n","import {SceneComponent, ComponentContext} from '../scene-component/SceneComponent';\r\nimport {\r\n  Object3D,\r\n  Mesh,\r\n  Texture,\r\n  MeshBasicMaterial,\r\n  LineSegments,\r\n  LinearFilter,\r\n} from 'three';\r\n\r\nconst HoverEvent = 'hover';\r\nconst UnhoverEvent = 'unhover';\r\n\r\ntype Inputs = {\r\n  loadingState: string;\r\n  texture: Texture | null;\r\n  updateInterval: number;\r\n}\r\n\r\n\r\nexport class TvPlayer extends SceneComponent {\r\n  private rootScene: Object3D | null = null;\r\n  private mesh: Mesh | null = null;\r\n  private component: SceneComponent;\r\n\r\n\r\n  override inputs: Inputs = {\r\n    loadingState: 'Idle',\r\n    texture: null,\r\n    updateInterval: 1000,\r\n  }\r\n\r\n\r\n  override events = {\r\n    [HoverEvent]: true,\r\n    [UnhoverEvent]: true,\r\n  };\r\n  private intervalVideoTexture: NodeJS.Timeout;\r\n\r\n  override onInit(modelNode?: any) {\r\n    if (!this.context) {\r\n      this.context = {\r\n        root: modelNode\r\n      } as ComponentContext;\r\n    }\r\n    const root = this.context.root;\r\n    const THREE = this.context.three;\r\n  }\r\n\r\n  override onDestroy() {\r\n    super.onDestroy();\r\n    clearInterval(this.intervalVideoTexture);\r\n  }\r\n\r\n  override onInputsUpdated() {\r\n    if (this.inputs.loadingState === 'Loaded') {\r\n      const lines: LineSegments[] = [];\r\n\r\n      //@ts-ignore\r\n      this.context.root.obj3D.traverse((obj: Object3D) => {\r\n        // we dont want line segments, track them and remove them.\r\n        if (obj.type === 'LineSegments') {\r\n          lines.push(obj as LineSegments);\r\n        } else if (obj.type === 'Mesh') {\r\n          this.mesh = obj as Mesh;\r\n\r\n          let video, videoImage, videoImageContext, videoTexture;\r\n          // create the video element\r\n          video = document.createElement('video');\r\n          // video.src = \"./../assets/video/video_samsic.mp4\";\r\n          video.src = \"./../assets/video/121222-04.mp4\";\r\n          video.load(); // must call after setting/changing source\r\n          video.loop = true;\r\n          video.play();\r\n\r\n          videoImage = document.createElement('canvas');\r\n          // videoImage.width = 640;\r\n          videoImage.width = 1280;\r\n          // videoImage.height = 360;\r\n          videoImage.height = 720;\r\n\r\n          videoImageContext = videoImage.getContext('2d');\r\n          // background color if no video present\r\n          videoImageContext.fillStyle = '#000000';\r\n          videoImageContext.fillRect(0, 0, videoImage.width, videoImage.height);\r\n\r\n          videoTexture = new Texture(videoImage)\r\n          videoTexture.minFilter = LinearFilter;\r\n          videoTexture.magFilter = LinearFilter;\r\n          const movieMaterial = new MeshBasicMaterial({map: videoTexture})\r\n          this.mesh.material = movieMaterial;\r\n\r\n          const render = () => {\r\n            if (video.readyState === video.HAVE_ENOUGH_DATA) {\r\n              videoImageContext.drawImage(video, 0, 0);\r\n              if (videoTexture)\r\n                videoTexture.needsUpdate = true;\r\n            }\r\n            const camera = (this.context.scene.children.find(u => u.constructor.name === 'CameraRig')).camera;\r\n            this.context.renderer.render(this.context.scene, camera);\r\n          }\r\n          this.intervalVideoTexture = setInterval(() => {\r\n            render();\r\n          }, 180);\r\n\r\n        }\r\n      });\r\n\r\n      // remove the line segments.\r\n      lines.forEach((line: LineSegments) => {\r\n        line.parent.remove(line);\r\n      });\r\n    }\r\n  }\r\n\r\n  setComponent(component: SceneComponent) {\r\n    this.component = component;\r\n    this.context = component.context;\r\n  }\r\n\r\n  setRootScene(rootScene: Object3D) {\r\n    this.rootScene = rootScene;\r\n  }\r\n}\r\n\r\nexport const TvPlayerType = 'mp.TvPlayer';\r\nexport const makeTvPlayer = function () {\r\n  return new TvPlayer();\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class BaseVisibilityService {\r\n  detailShowing = new Subject<boolean>();\r\n\r\n  isChangePositionVisible = new Subject<boolean>();\r\n\r\n  constructor() {}\r\n}\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_object3d?: 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        icon_room_available?: string;\r\n        icon_room_unavailable?: string;\r\n        icon_room_chosen?: string;\r\n        icon_room_viewed?: string;\r\n    };\r\n\r\n    constructor() { }\r\n}\r\n","import { Inject, Injectable, NgZone, isDevMode } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Subject } from 'rxjs';\r\n//import * as serialijse from \"serialijse\";\r\nimport {\r\n  getDistanceBetweenTwoPoints,\r\n  poiTypeToString,\r\n  wait,\r\n} from '../helpers.service';\r\nimport { MattertagData } from '../mattertagData';\r\nimport {\r\n  DbObjectType,\r\n  FeatureType,\r\n  IObject3D,\r\n  MattertagActionMode,\r\n  POI,\r\n  PoiType,\r\n  SpModule,\r\n  TagAction,\r\n  ViewerInteractions,\r\n} from '../types.service';\r\nimport { Object3D } from 'three';\r\nimport { BaseTagService } from './tag.service';\r\nimport { BaseVisibilityService } from './baseVisibility.service';\r\nimport { Config } from '../config';\r\nimport { CameraMode } from '../types.service';\r\nimport { ISceneNode, ComponentOutput } from \"../matterport-extensions/scene-component/SceneComponent\";\r\nimport { SecurityCamera } from '../matterport-extensions/security-camera/SecurityCamera';\r\nimport { NestThermostat } from '../matterport-extensions/nest-thermostat/NestThermostat';\r\nimport { PlaneRenderer } from '../matterport-extensions/nest-thermostat/PlaneRenderer';\r\nimport { CanvasRenderer } from \"../matterport-extensions/nest-thermostat/CanvasRenderer\";\r\nimport { VideoRenderer } from \"../matterport-extensions/video-renderer/VideoRenderer\";\r\nimport { HlsLoader } from \"../matterport-extensions/hsl-loader/HlsLoader\";\r\nimport { TvPlayer } from \"../matterport-extensions/tv-player/TvPlayer\";\r\n\r\n// import {CanvasImage} from \"../matterport-extensions/nest-thermostat/CanvasImage\";\r\n\r\n/**\r\n * Custom Threejs Object 3D interface\r\n */\r\ninterface ThreeJSObject3D {\r\n  id: string;\r\n  uuid?: string;\r\n  position?: { x: number, y: number, z: number }\r\n  rotation?: { x: number, y: number, z: number }\r\n  scale?: { x: number, y: number, z: number }\r\n}\r\n\r\ndeclare global {\r\n  interface Window {\r\n    MP_SDK: { connect: Function };\r\n  }\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class MatterportService {\r\n\r\n  private slots: any[] = [];//SlotNode[] = [];\r\n\r\n  private nodes: ISceneNode[] = [];\r\n\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  public lastCameraPosition: any = { x: 0.0, y: 0.0, z: 0.0 };\r\n\r\n  private azimuthalCrown: any;\r\n  // Pointer trick\r\n  private pointerButton: any;\r\n\r\n  // Display and get current position of cursor (for Admins only)\r\n  private getCursorPositionButton: any;\r\n  private cursorPositionButtonDisplayed = false;\r\n  private intervalCursorPointerPosition: any;\r\n  private textDisplayCursorPositionPanel: any;\r\n\r\n  private oldPoseMatterportPosition: any;\r\n  // Measure mode\r\n  private isMeasureModeOn = false;\r\n\r\n  private interactionMode: number = ViewerInteractions.DEFAULT;\r\n\r\n  // List of created Mattertag IDs in the current viewer session\r\n  private mattertagIDs: Array<string> = [];\r\n\r\n  // Dictionnary of MattertagID and its data (mattertagData)\r\n  private dictionnaryTags: Map<string, MattertagData> = new Map();\r\n\r\n  private dictionnaryObjects3D: Map<string, any> = new Map();\r\n\r\n  private dictionnarySceneObjects3D: Map<string, any> = new Map();\r\n\r\n  public threeJSScene: any; // global root scene (not used now!)\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  public tagsAttachments: Object = {};\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  //camera position with rotation\r\n  public currentCameraPose: Subject<any> = 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  private lastObject3D: any; // Three JS object\r\n\r\n  private currentFloor;\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  private noLightForObjects = true;\r\n\r\n  public currentCameraMode: CameraMode = CameraMode.OUTSIDE;\r\n\r\n  public onCameraModeChanged = new Subject<CameraMode>();\r\n\r\n  public onGoToTag = new Subject<string>();\r\n\r\n  tagMessengerOn = false;\r\n\r\n  SPModule: SpModule;\r\n\r\n  public objectControl: any;\r\n\r\n  private securityCameraAnimator: any;\r\n\r\n  /**\r\n   * Actions on left click when positioning mattertag in visit\r\n   */\r\n  pointerLeftClickHandler = () => {\r\n    if (this.mattertagToFollow) {\r\n      const mattertagData = this.dictionnaryTags.get(this.mattertagToFollow);\r\n      mattertagData.setPosition({ ...this.poseMatterport.position }); // copy!! not the reference\r\n      mattertagData.setNormal({ ...this.poseMatterport.normal }); // copy!! not the reference\r\n      this.dictionnaryTags.set(this.mattertagToFollow, mattertagData);\r\n      this.updateMatterTagContentForTagID(this.mattertagToFollow);\r\n    }\r\n    this.onValidatedMattertag();\r\n  };\r\n\r\n  pointerRightClickHandler = (e) => {\r\n    e.preventDefault();\r\n    this.cancelFollowingCursor();\r\n    alert('action cancelled');\r\n  };\r\n\r\n  pointerMiddleClickHandler = (e) => {\r\n    this.textDisplayCursorPositionPanel.innerHTML = `position:\r\n       ${this.pointToString(this.poseMatterport.position)}\\n\r\n       normal:\r\n       ${this.pointToString(this.poseMatterport.normal)}\\n\r\n       floorId:\r\n       ${this.poseMatterport.floorId}`;\r\n    // this.textDisplayCursorPositionPanel.style.display = 'visible';\r\n    this.getCursorPositionButton.style.display = 'none';\r\n  }\r\n\r\n  constructor(\r\n    @Inject('config') config: Config,\r\n    private router: Router,\r\n    private activeRoute: ActivatedRoute,\r\n    private visibilityService: BaseVisibilityService,\r\n    private ngZone: NgZone\r\n  ) {\r\n    this.config = config;\r\n\r\n    // TODO: only for dev!\r\n    if (!!this.getCursorPositionButton &&\r\n      (document.location.href.indexOf('dev') !== -1 || document.location.href.indexOf('localhost') !== -1)) {\r\n      this.intervalCursorPointerPosition = setInterval(() => {\r\n        if (!this.poseMatterport) {\r\n          return;\r\n        }\r\n\r\n        const nextShow = this.poseMatterport.time + 1000;\r\n        if (new Date().getTime() > nextShow) {\r\n          if (this.cursorPositionButtonDisplayed) {\r\n            return;\r\n          }\r\n\r\n          const size = {\r\n            w: this.container.clientWidth,\r\n            h: this.container.clientHeight,\r\n          };\r\n          const coord = this.sdk.Conversion.worldToScreen(this.poseMatterport.position, this.poseCamera, size);\r\n          this.getCursorPositionButton.style.left = `${coord.x - 25}px`;\r\n          this.getCursorPositionButton.style.top = `${coord.y - 22}px`;\r\n          this.getCursorPositionButton.style.display = 'block';\r\n          // this.textDisplayCursorPositionPanel.style.display = 'none';\r\n          this.cursorPositionButtonDisplayed = true;\r\n        }\r\n      }, 500);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Initializes Matterport and all listeners/data\r\n   * @param tagService BaseTagService (to inject html)\r\n   * @param module SpModule (Museum, Immo) to subscribe only to needed functionnnalities\r\n   * @returns boolean\r\n   */\r\n  async initSdk(\r\n    tagService: BaseTagService,\r\n    module: SpModule = SpModule.IMMO\r\n  ): Promise<boolean> {\r\n    if (this.sdk) {\r\n      // clean if sdk is running already\r\n      await this.action_delete_all_mattertags();\r\n    }\r\n    this.tagService = tagService;\r\n    this.SPModule = module;\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('#viewer-module') 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          this.pointerLeftClickHandler\r\n        );\r\n        // cancel on right click\r\n        this.pointerButton.addEventListener(\r\n          'contextmenu',\r\n          this.pointerRightClickHandler\r\n        );\r\n      }\r\n      // Retrieve DOM elements\r\n      this.getCursorPositionButton = document.querySelector(\r\n        '#button'\r\n      ) as HTMLElement;\r\n      this.textDisplayCursorPositionPanel = document.querySelector(\r\n        '#text'\r\n      ) as HTMLElement;\r\n      if (this.getCursorPositionButton) {\r\n        // get position on Matterport \"model\" on middle click\r\n        this.getCursorPositionButton.addEventListener(\r\n          'click',\r\n          this.pointerMiddleClickHandler\r\n        );\r\n      }\r\n\r\n      // Load SDK\r\n      console.log('Loading Matterport SDK');\r\n      const showcaseWindow = iframe.contentWindow;\r\n      iframe.addEventListener(\r\n        'load',\r\n        async function () {\r\n          try {\r\n            this.sdk = await showcaseWindow.MP_SDK.connect(\r\n              showcaseWindow,\r\n              'qn9wsasuy5h2fzrbrn1nzr0id',\r\n              '3.5'\r\n            );\r\n          } catch (e) {\r\n            console.error(e);\r\n            return;\r\n          }\r\n\r\n          // Load Mattertag icons and custom subscriptions\r\n          switch (module) {\r\n            case SpModule.IMMO:\r\n              this.sdk.Asset.registerTexture(\r\n                'icon-ticket',\r\n                this.config.my_config.icon_ticket\r\n              );\r\n              this.sdk.Asset.registerTexture(\r\n                'icon-equipment',\r\n                this.config.my_config.icon_equipment\r\n              );\r\n              this.sdk.Asset.registerTexture(\r\n                'icon-measure',\r\n                this.config.my_config.icon_measure\r\n              );\r\n              this.sdk.Asset.registerTexture(\r\n                'icon-data',\r\n                this.config.my_config.icon_data\r\n              );\r\n              this.sdk.Asset.registerTexture(\r\n                'icon-object3d',\r\n                this.config.my_config.icon_object3d\r\n              );\r\n\r\n              this.sdk.Measurements.data.subscribe({\r\n                onAdded: function (\r\n                  index: any,\r\n                  item: { points: any },\r\n                  collection: any\r\n                ) {\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              break;\r\n            case SpModule.MUSEUM:\r\n              this.sdk.Asset.registerTexture(\r\n                'icon-data',\r\n                this.config.my_config.icon_data\r\n              );\r\n              break;\r\n            case SpModule.HOTEL:\r\n              this.sdk.Asset.registerTexture(\r\n                'icon_room_available',\r\n                this.config.my_config.icon_room_available\r\n              );\r\n              this.sdk.Asset.registerTexture(\r\n                'icon_room_unavailable',\r\n                this.config.my_config.icon_room_unavailable\r\n              );\r\n              this.sdk.Asset.registerTexture(\r\n                'icon_room_chosen',\r\n                this.config.my_config.icon_room_chosen\r\n              );\r\n              this.sdk.Asset.registerTexture(\r\n                'icon_room_viewed',\r\n                this.config.my_config.icon_room_viewed\r\n              );\r\n              break;\r\n            default:\r\n              break;\r\n          }\r\n\r\n          this.sdk.Asset.registerTexture(\r\n            'icon-position',\r\n            this.config.my_config.icon_position\r\n          );\r\n\r\n          // Current Room (used for getting bounding box and eventually lazy load mattertag or object3D inside current Room)\r\n          this.sdk.Room.current.subscribe((currentRoom) => {\r\n            console.log(`hello current Room ${JSON.stringify(currentRoom)}`);\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              this.poseMatterport.time = new Date().getTime();\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 !== 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              if (!!this.getCursorPositionButton && !!this.getCursorPositionButton.style &&\r\n                (document.URL.indexOf('https://dev.smarterplan.io') !== -1 || document.location.href.indexOf('localhost') !== -1)) {\r\n                this.getCursorPositionButton.style.display = 'none';\r\n                this.cursorPositionButtonDisplayed = false;\r\n              }\r\n            }.bind(this)\r\n          );\r\n\r\n          //Camera mode\r\n          this.sdk.Mode.current.subscribe((mode) => {\r\n            this.inTransitionSweep = false;\r\n            switch (mode) {\r\n              case 'mode.dollhouse':\r\n                this.currentCameraMode = CameraMode.DOLLHOUSE;\r\n                break;\r\n              case 'mode.floorplan':\r\n                this.currentCameraMode = CameraMode.FLOORPLAN;\r\n                break;\r\n              case 'mode.inside':\r\n                this.currentCameraMode = CameraMode.INSIDE;\r\n                break;\r\n              case 'mode.transitioning':\r\n                this.currentCameraMode = CameraMode.TRANSITIONING;\r\n                break;\r\n              default:\r\n                this.currentCameraMode = CameraMode.OUTSIDE;\r\n            }\r\n            this.onCameraModeChanged.next(this.currentCameraMode);\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\r\n              this.currentCameraPose.next(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(\"Sweep collection updated\");\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          // Handler générique pour les sélections de tags\r\n          const handleTagSelection = async (sid: string, source: string, evt?: any) => {\r\n            if (isDevMode()) {\r\n              console.log(`[MatterportService] handleTagSelection from ${source} for sid: ${sid}`, { evt });\r\n            }\r\n\r\n            // Exécution de l'action personnalisée (ouverture du panneau de détail via navigation)\r\n            try {\r\n              const mattertagData = this.dictionnaryTags.get(sid);\r\n              if (!mattertagData) {\r\n                if (isDevMode()) {\r\n                  console.log('no mattertagData to display', sid);\r\n                }\r\n                return;\r\n              }\r\n              const url = tagService.getUrlForSeeDetails(\r\n                mattertagData.getObject(),\r\n                mattertagData.getType()\r\n              );\r\n              if (url !== '') {\r\n                if (isDevMode()) {\r\n                  console.log(`[MatterportService] Navigating to detail URL: ${url}`);\r\n                }\r\n                this.visibilityService.detailShowing.next(true);\r\n                this.ngZone.run(() => {\r\n                  this.router.navigate([url]);\r\n                });\r\n              }\r\n            } catch (error) {\r\n              if (isDevMode()) {\r\n                console.log('Cannot show details for tag', error);\r\n              }\r\n            }\r\n          };\r\n\r\n          // Fonction pour désactiver les actions natives sur un tag (SDK v3)\r\n          const disableNativeActions = (sid: string) => {\r\n            if (!this.sdk) return;\r\n            try {\r\n              if (this.sdk.Tag && this.sdk.Tag.allowAction) {\r\n                // opening: false désactive le billboard natif\r\n                // navigating: false désactive le déplacement de la caméra vers le tag\r\n                this.sdk.Tag.allowAction(sid, { opening: false, navigating: true, docking: false });\r\n                /*if (isDevMode()) {\r\n                  console.log(`[MatterportService] Disabled native actions for tag ${sid}`);\r\n                }*/\r\n              } else if (this.sdk.Mattertag && this.sdk.Mattertag.preventAction) {\r\n                // Fallback ancienne API\r\n                this.sdk.Mattertag.preventAction(sid, { opening: true, navigating: true });\r\n                if (isDevMode()) {\r\n                  console.log(`[MatterportService] Prevented native actions (legacy) for tag ${sid}`);\r\n                }\r\n              }\r\n            } catch (e) {\r\n              if (isDevMode()) {\r\n                console.warn(`[MatterportService] Error disabling actions for ${sid}`, e);\r\n              }\r\n            }\r\n          };\r\n\r\n          // Attendre que l'application soit en phase PLAYING\r\n          if (this.sdk.App && this.sdk.App.state) {\r\n            if (isDevMode()) {\r\n              console.log('[MatterportService] Waiting for App.Phase.PLAYING...');\r\n            }\r\n            this.sdk.App.state.waitUntil((s: any) => s.phase === this.sdk.App.Phase.PLAYING).then(() => {\r\n              if (isDevMode()) {\r\n                console.log('[MatterportService] App is PLAYING.');\r\n              }\r\n\r\n              // 1. Désactiver les actions natives pour tous les tags existants et futurs\r\n              if (this.sdk.Tag && this.sdk.Tag.data) {\r\n                this.sdk.Tag.data.subscribe({\r\n                  onAdded: (sid: string) => {\r\n                    disableNativeActions(sid);\r\n                  },\r\n                  onUpdated: (sid: string) => {\r\n                    disableNativeActions(sid);\r\n                  },\r\n                  onCollectionUpdated: (collection: any) => {\r\n                    Object.keys(collection).forEach(sid => disableNativeActions(sid));\r\n                  }\r\n                });\r\n              }\r\n\r\n              // 2. Écouter les sélections via l'observable openTags (Méthode moderne)\r\n              if (this.sdk.Tag && this.sdk.Tag.openTags) {\r\n                this.sdk.Tag.openTags.subscribe({\r\n                  onChanged: (newState: any) => {\r\n                    if (newState.selected && newState.selected.size > 0) {\r\n                      const sid = Array.from(newState.selected)[0] as string;\r\n                      handleTagSelection(sid, 'Tag.openTags.selected');\r\n                    }\r\n                  }\r\n                });\r\n              }\r\n            });\r\n          }\r\n\r\n          // Fallback pour l'événement global tag.click\r\n          this.sdk.on('tag.click', (sid: string) => {\r\n            if (isDevMode()) {\r\n              console.log(`[MatterportService] sdk.on('tag.click') received for sid: ${sid}`);\r\n            }\r\n            handleTagSelection(sid, 'global.tag.click');\r\n            // On s'assure qu'il est bien désactivé même si on a raté l'évènement d'ajout\r\n            disableNativeActions(sid);\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           * Transitions\r\n           */\r\n          this.sdk.on(\r\n            'viewmode.changestart',\r\n            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\r\n          this.sdk.on(\r\n            'viewmode.changeend',\r\n            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\r\n          this.sdk.on(\r\n            this.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              this.displayAzimutalCrown();\r\n            }.bind(this)\r\n          );\r\n          this.sdk.on(\r\n            this.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\r\n          // TODO: get scene with getter instead!\r\n          const [sceneObject] = await this.sdk.Scene.createObjects(1);\r\n          const node = sceneObject.addNode();\r\n          node.start();\r\n          this.threeJSScene = node.obj3D.parent;\r\n\r\n          // await this.sdk.Scene.configure((renderer: any, three: any) => {\r\n          //   renderer.physicallyCorrectLights = true;\r\n          //   renderer.outputEncoding = three.sRGBEncoding;\r\n          //   renderer.shadowMap.enabled = true;\r\n          //   renderer.shadowMap.bias = 0.0001;\r\n          //   renderer.shadowMap.type = three.PCFSoftShadowMap;\r\n          // });\r\n\r\n\r\n          // TODO: wait for MP ticket resolution before decomment these!\r\n          // Wait until Showcase is actually playing....\r\n          // this.sdk.Tag.data.subscribe({\r\n          //   onAdded: async function (index, item, collection) {\r\n          //\r\n          //     let thisOpacity = 0.2;\r\n          //     this.sdk.Tag.editOpacity(index, thisOpacity);\r\n          //\r\n          //     let source = null;\r\n          //     try {\r\n          //       source = await Promise.all([\r\n          //         this.sdk.Sensor.createSource(this.sdk.Sensor.SourceType.SPHERE, {\r\n          //           origin: item.anchorPosition,\r\n          //           radius: Number(3),\r\n          //           userData: {\r\n          //             id: index + '-sphere-source',\r\n          //           },\r\n          //         })\r\n          //       ]);\r\n          //     } catch (e) {\r\n          //       console.log('could not create Sphere sensor')\r\n          //       console.error(e);\r\n          //     }\r\n          //     if (!source) {\r\n          //       return;\r\n          //     }\r\n          //\r\n          //     let sensor = null;\r\n          //     try {\r\n          //       sensor = await this.sdk.Sensor.createSensor(this.sdk.Sensor.SensorType.CAMERA);\r\n          //     } catch (e) {\r\n          //       console.log('could not create Camera sensor')\r\n          //       console.error(e);\r\n          //     }\r\n          //     if (!sensor) {\r\n          //       return;\r\n          //     }\r\n          //\r\n          //     sensor.addSource(...source);\r\n          //     sensor.readings.subscribe({\r\n          //       onUpdated(source, reading) {\r\n          //         console.log(thisOpacity);\r\n          //         let oldOpacity = thisOpacity;\r\n          //         if (reading.inRange) {\r\n          //           thisOpacity = 1;\r\n          //           console.log(index + ' is inRange');\r\n          //         } else if (reading.inView) {\r\n          //           console.log(index + ' is inView but not inRange');\r\n          //           thisOpacity = 0.5;\r\n          //         } else {\r\n          //           thisOpacity = 0.2;\r\n          //           console.log(index + ' is not inView or inRange');\r\n          //         }\r\n          //\r\n          //         this.sdk.Tag.editOpacity(index, thisOpacity);\r\n          //         /*\r\n          //                   let inc = 0.01;\r\n          //                   if (oldOpacity > thisOpacity) {\r\n          //                     inc = -0.01;\r\n          //                   }\r\n          //\r\n          //                   for(var i = oldOpacity; i != thisOpacity; i=i+inc) {\r\n          //                       setTimeout(function() {\r\n          //                          mpSdk.Tag.editOpacity(index, i);\r\n          //                       console.log('Delay', i);\r\n          //                       },10);\r\n          //                   }\r\n          //         */\r\n          //       }\r\n          //     });\r\n          //     //sensor.showDebug(true);\r\n          //   }.bind(this),\r\n          //   onCollectionUpdated: function (collection) {\r\n          //     console.log('Collection received. There are ', Object.keys(collection).length, ' Tags in the collection', collection);\r\n          //   }\r\n          // });\r\n\r\n          resolve(true);\r\n        }.bind(this)\r\n      );\r\n    });\r\n  }\r\n\r\n\r\n  setLightingOff() {\r\n    this.noLightForObjects = true;\r\n  }\r\n\r\n  pointToString(point: { x: number, y: number, z: number }): string {\r\n    var x = point.x.toFixed(3);\r\n    var y = point.y.toFixed(3);\r\n    var z = point.z.toFixed(3);\r\n\r\n    return `{ x: ${x}, y: ${y}, z: ${z} }`;\r\n  }\r\n\r\n  //\r\n  // ---------- Measurements related ----------\r\n  //\r\n  /**\r\n   * Callback after measurement is performed\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.router.navigate([`visit/${this.currentSpaceID}/add_measurement`]);\r\n      });\r\n    }\r\n  }\r\n\r\n  getLastDistances() {\r\n    return this.distancesLastMeasure;\r\n  }\r\n\r\n  /**\r\n   * Takes screenshot and saves base64 in lastScreenshotUri\r\n   * @returns Promise\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  //\r\n  // ---------- Utils ----------\r\n  //\r\n  /**\r\n   * Styling of pointer\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 = `${coords.x * Math.sign(coords.x) - 25\r\n        }px`;\r\n      this.pointerButton.style.top = `${coords.y * Math.sign(coords.x) - 25}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  /**\r\n   * Realtime mattertag following the cursor\r\n   * @param mattertag string\r\n   */\r\n  enable_following_tag(mattertag: string) {\r\n    this.sdk.Tag.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  /**\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  //\r\n  // ---------- Mattertag related ----------\r\n  //\r\n  /**\r\n   * Creates the Mattertag that will follow the cursor\r\n   * @param mattertagData MattertagData\r\n   */\r\n  async addCursorMattertag(mattertagData: MattertagData) {\r\n    if (!this.poseMatterport) return;\r\n    this.mattertagToFollow = await this.addMattertagToViewer(mattertagData);\r\n    console.log('following the tag', this.mattertagToFollow);\r\n    this.sdk.Tag.editIcon(this.mattertagToFollow, 'icon-position');\r\n    this.sdk.Tag.editOpacity(this.mattertagToFollow, 1);\r\n  }\r\n\r\n  /**\r\n   * Adds Mattertag to viewer for an existing object with coordinates (in mattertagData.poi)\r\n   * (position, injected html, set icon)\r\n   * @param mattertagData\r\n   * returns mattertagID\r\n   */\r\n  async addMattertagToViewer(\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.Tag.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.mattertagIDs.push(mattertagID);\r\n      this.dictionnaryTags.set(mattertagID, mattertagData);\r\n      return mattertagID;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Actions when position of mattertag is validated by left click\r\n   */\r\n  onValidatedMattertag() {\r\n    this.setInteractionMode(ViewerInteractions.DEFAULT);\r\n    const lastTag = this.getLastTag();\r\n    if (lastTag) {\r\n      const callbackMode = this.dictionnaryTags\r\n        .get(lastTag)\r\n        .getCallbackActionMode();\r\n      this.callbackAfterMattertagValidation(callbackMode);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Registers new icon (path to image) and set its for Mattertag\r\n   * @param mattertagID string\r\n   * @param iconPath string\r\n   */\r\n  async addNewIconAndSetForTag(mattertagID: string, iconPath: string) {\r\n    await this.sdk.Asset.registerTexture(`icon_${mattertagID}`, iconPath);\r\n    this.sdk.Tag.editIcon(mattertagID, `icon_${mattertagID}`);\r\n  }\r\n\r\n  /**\r\n   * Changes icon of Mattertag (the iconName should be registered = one of default ones)\r\n   * @param mattertagID string\r\n   * @param iconName string\r\n   */\r\n  async setRegistredIconForTag(mattertagID: string, iconName: string) {\r\n    try {\r\n      this.sdk.Tag.editIcon(mattertagID, iconName);\r\n    } catch (e) {\r\n      console.log(\r\n        'could not edit Icon with name ',\r\n        iconName,\r\n        '. Is it registered?'\r\n      );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets default icon for a tag (registered in initSdk) OR uses tagIcon from POI (available from MattertagData)\r\n   * @param mattertagID string\r\n   * @param mattertagData MattertagData\r\n   * @returns\r\n   */\r\n  async setTagIconAndOpacity(\r\n    mattertagID: string,\r\n    mattertagData: MattertagData\r\n  ) {\r\n    if (this.SPModule === SpModule.HOTEL) {\r\n      const room = mattertagData.getObject();\r\n      let iconName = `icon_room`;\r\n      if (room.available) {\r\n        iconName = `${iconName}_available`;\r\n      } else {\r\n        iconName = `${iconName}_unavailable`;\r\n      }\r\n      this.sdk.Tag.editIcon(mattertagID, iconName);\r\n      return;\r\n    }\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      if (mattertagData.getType() === PoiType.DATA) {\r\n        const feature = mattertagData.getObject();\r\n        if (feature.type === FeatureType.INDICATOR_TEMP) {\r\n          tagIcon.src = this.tagService.getIconTagImageForFeature(feature, poi);\r\n        }\r\n      }\r\n      if (tagIcon.src) {\r\n        const pathSigned = await this.tagService.getSignedTagIconSource(\r\n          tagIcon.src\r\n        );\r\n        if (pathSigned) {\r\n          try {\r\n            iconName = `icon-${stringTagType}-${mattertagID}-${mattertagData.customIconIndex}`;\r\n            await this.sdk.Asset.registerTexture(iconName, pathSigned);\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.Tag.editIcon(mattertagID, iconName);\r\n      this.sdk.Tag.editOpacity(mattertagID, opacity);\r\n    } catch (error) {\r\n      console.log('Error editIcon or opacity', error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Moves viewer to last tag created\r\n   */\r\n  goToLastTag() {\r\n    setTimeout(() => {\r\n      const lastTag = this.getLastTag();\r\n      this.goToTag(lastTag);\r\n    }, 2000);\r\n  }\r\n\r\n  /**\r\n   * Moves viewer to Mattertag with ID provided\r\n   * @param mattertagID string\r\n   * @returns\r\n   */\r\n  async goToTag(mattertagID: string) {\r\n    if (mattertagID === '') return;\r\n    try {\r\n      this.onGoToTag.next(mattertagID);\r\n      await this.sdk.Sweep.current.waitUntil(\r\n        (currentSweep) => currentSweep !== ''\r\n      );\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  /**\r\n   * Updates content of Mattertag with mattertagID (billboard, injected html, tag icon)\r\n   * @param mattertagID string\r\n   * @param object Ticket, Equipment, Feature, etc\r\n   * @param tagType PoiType\r\n   */\r\n  async updateMatterTagContentForTagID(\r\n    mattertagID: string,\r\n    object: DbObjectType = null,\r\n    tagType: PoiType = null\r\n  ) {\r\n    this.sdk.Tag.editBillboard(\r\n      mattertagID,\r\n      this.dictionnaryTags.get(mattertagID).getData()\r\n    );\r\n    if (object && tagType) {\r\n      await this.injectHtmlInTag(tagType, object, mattertagID);\r\n    }\r\n    await this.setTagIconAndOpacity(\r\n      mattertagID,\r\n      this.dictionnaryTags.get(mattertagID)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Updates injected html for Mattertag\r\n   * @param mattertagID string\r\n   * @param object Ticket, Equipment, Feature, etc\r\n   * @param tagType PoiType\r\n   */\r\n  async updateInjectedHtmlForTagID(\r\n    mattertagID: string,\r\n    object: any,\r\n    tagType: PoiType\r\n  ) {\r\n    await this.injectHtmlInTag(tagType, object, mattertagID);\r\n  }\r\n\r\n  /**\r\n   * Deletes Mattertag from Viewer by its ID\r\n   * @param mattertagID string\r\n   */\r\n  deleteMattertagFromId(mattertagID: string) {\r\n    this.sdk.Tag.remove(mattertagID);\r\n    this.dictionnaryTags.delete(mattertagID);\r\n  }\r\n\r\n  /**\r\n   * Deletes latest created mattertag\r\n   */\r\n  deleteLastMattertag() {\r\n    const mattertagID = this.mattertagIDs.pop();\r\n    if (mattertagID) {\r\n      this.deleteMattertagFromId(mattertagID);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Legacy: used to be called action_add_mattertag_from_POI\r\n   * Adds and configures Mattertag for an object (Ticket, Equipment, Feature, etc) that corresponds to POI (coordinates, tagIcon)\r\n   * @param tagType PoiType\r\n   * @param object Ticket, Equipment, Feature...\r\n   * @param poi POI\r\n   * @returns\r\n   */\r\n  async createMattertagFromPOI(\r\n    tagType: PoiType,\r\n    object: DbObjectType,\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    mattertagData.setObject(object, tagType);\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 createdTagID = await this.addMattertagToViewer(mattertagData);\r\n    if (createdTagID && this.sdk) {\r\n      await this.setTagIconAndOpacity(createdTagID, mattertagData);\r\n      await this.injectHtmlInTag(tagType, object, createdTagID);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Inject custom HTML as Mattertag content\r\n   * @param tagType PoiType\r\n   * @param object Ticket, Equipment, Feature etc\r\n   * @param tagID string\r\n   */\r\n  async injectHtmlInTag(tagType: PoiType, object: DbObjectType, tagID: string) {\r\n    let html = await this.tagService.getHtmlToInject(tagType, object);\r\n    if (html !== '' && this.sdk) {\r\n      const scriptTag = this.tagService.getScriptForTag(object, tagType);\r\n      html += `${scriptTag}`;\r\n      // create and register the sandbox\r\n      const [sandboxId, messenger] = await this.sdk.Tag.registerSandbox(html);\r\n\r\n      // detach previous sandbox from a tag\r\n      let attachmentID = this.tagsAttachments[tagID];\r\n      if (attachmentID) {\r\n        this.sdk.Tag.detach(tagID, attachmentID);\r\n      }\r\n      this.tagsAttachments[tagID] = sandboxId;\r\n\r\n      // attach the sandbox to a tag\r\n      this.sdk.Tag.attach(tagID, sandboxId);\r\n      // receive data from the sandbox\r\n      // tagMessengerOn allows to go here only once\r\n      if (!this.tagMessengerOn) {\r\n        this.tagMessengerOn = true;\r\n        const imageClick = (featureID: string) => {\r\n          // console.log(\"image click handler\", featureID);\r\n          this.tagService.onActionImageClick(featureID);\r\n        };\r\n\r\n        const audioClick = (audioCommentID: string) => {\r\n          // console.log(\"audio click handler\", audioCommentID);\r\n          this.tagService.onActionAudioClick(audioCommentID);\r\n        };\r\n        const videoClick = (url: string) => {\r\n          this.tagService.onActionVideoClick(url);\r\n        };\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(TagAction.AUDIO_CLICK, audioClick);\r\n        messenger.on(TagAction.IMAGE_CLICK, imageClick);\r\n        messenger.on(TagAction.VIDEO_CLICK, videoClick);\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    } else {\r\n      // if html is empty (case of EMBED content), we edit billboard for Feature and attach new content\r\n      const { comment, tagDescription } =\r\n        this.tagService.getBillboardMediaToEmbed(object);\r\n      if (comment) {\r\n        // register the media\r\n        const [attachmentID] = await this.sdk.Tag.registerAttachment(\r\n          comment.externalLink\r\n        );\r\n        // attach\r\n        this.sdk.Tag.attach(tagID, attachmentID);\r\n        this.sdk.Tag.editBillboard(tagID, {\r\n          label: object.title,\r\n          description: tagDescription,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  async action_delete_all_mattertags() {\r\n    await this.sdk.Tag.remove(...this.mattertagIDs);\r\n    this.mattertagIDs = [];\r\n    this.dictionnaryTags.clear();\r\n  }\r\n\r\n  /**\r\n   * Deletes Mattertag from visit associated with object ID (ticketID, etc)\r\n   * @param elementID string\r\n   */\r\n  async deleteMattertagForObject(elementID: string) {\r\n    const matterTagID = this.getTagFromElementId(elementID).tag;\r\n    if (matterTagID) {\r\n      try {\r\n        await this.sdk.Tag.remove(matterTagID);\r\n        this.dictionnaryTags.delete(matterTagID);\r\n        const index = this.mattertagIDs.indexOf(matterTagID);\r\n        this.mattertagIDs.splice(index, 1);\r\n      } catch (error) {\r\n        console.log('Cannot delete tag', matterTagID, error);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * uuid from threejs\r\n   * @param uuid\r\n   */\r\n  async deleteObject3D(uuid: string): Promise<void> {\r\n    this.dictionnaryObjects3D.get(uuid).obj3D.visible = false;\r\n  }\r\n\r\n  getObject3DModelNodeFromDictionnary(uuid: string): any {\r\n    let obj = this.dictionnaryObjects3D.get(uuid);\r\n    if (!obj) {\r\n      console.log(\"weird thing again\");\r\n      return null;\r\n    }\r\n    //might break things or fix everything ..?\r\n    if (obj.obj3D.uuid != uuid) {\r\n      console.log(\"we have THE problem\");\r\n      obj.obj3D.uuid = uuid; //not enugh to fix the pb\r\n    }\r\n\r\n    return obj;\r\n  }\r\n\r\n  /**\r\n   * Creates  MattertagData and start repositioning (creates temporary mattertag that follows the cursor)\r\n   * @param poiType PoiType\r\n   * @param element Ticket, Equipment, Feature, etc\r\n   */\r\n  async addMattertagWhenRepositioning(poiType: PoiType, element: DbObjectType) {\r\n    const mattertagData = new MattertagData(poiType);\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 tagIcon and opacity\r\n    }\r\n    mattertagData.setSweepID(this.poseCamera.sweep);\r\n    mattertagData.setRotation(this.poseCamera.rotation);\r\n    mattertagData.setObject(element, poiType);\r\n    this.mattertagToFollow = await this.addMattertagToViewer(mattertagData);\r\n    this.setInteractionMode(ViewerInteractions.POSITIONING);\r\n    await this.addCursorMattertag(mattertagData);\r\n  }\r\n\r\n  /**\r\n   * Creates MattertagData and mattertag that follows the cursor when choosing position for a new object\r\n   * @param poiType\r\n   */\r\n  async addMattertagWhenAdding(poiType: PoiType) {\r\n    const mattertagData = new MattertagData(poiType);\r\n    mattertagData.setSweepID(this.poseCamera.sweep);\r\n    mattertagData.setRotation(this.poseCamera.rotation);\r\n    this.setInteractionMode(ViewerInteractions.ADDING);\r\n    await this.addCursorMattertag(mattertagData);\r\n  }\r\n\r\n  /**\r\n   * Cancels following of cursor (meaning deleting last Mattertag)\r\n   */\r\n  cancelFollowingCursor() {\r\n    this.deleteLastMattertag();\r\n    this.setInteractionMode(ViewerInteractions.DEFAULT);\r\n  }\r\n\r\n  setLastObject3D(lastObject3D: ThreeJSObject3D) {\r\n    this.lastObject3D = lastObject3D;\r\n  }\r\n\r\n  getLastObject3D(): ThreeJSObject3D {\r\n    return this.lastObject3D;\r\n  }\r\n\r\n  /**\r\n   * Performs callback after mattertag position was validated (creation of object or repositioning)\r\n   * @param mode MattertagActionMode\r\n   */\r\n  callbackAfterMattertagValidation(mode: MattertagActionMode) {\r\n    this.visibilityService.detailShowing.next(true);\r\n    const lastTag = this.getLastTag();\r\n    switch (mode) {\r\n      case MattertagActionMode.ADD_EQUIPMENT:\r\n        this.goToLastTag();\r\n        this.router.navigate([`visit/${this.currentSpaceID}/add_equip`]);\r\n        break;\r\n      case MattertagActionMode.ADD_TICKET:\r\n        this.goToLastTag();\r\n        this.router.navigate([`visit/${this.currentSpaceID}/add_ticket`]);\r\n        break;\r\n      case MattertagActionMode.ADD_OBJECT3D:\r\n        this.goToLastTag();\r\n        this.router.navigate([`visit/${this.currentSpaceID}/add_object3d`]);\r\n        break;\r\n      case MattertagActionMode.ADD_DATA:\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.router.navigate([`${url}/add_feature`]);\r\n        break;\r\n      case MattertagActionMode.ADD_DESK:\r\n        this.goToLastTag();\r\n        this.router.navigate([`visit/${this.currentSpaceID}/add_feature`], {\r\n          queryParams: { isDesk: true },\r\n        });\r\n        break;\r\n      case MattertagActionMode.ADD_ROOM:\r\n        this.goToLastTag();\r\n        this.router.navigate([`visit/${this.currentSpaceID}/add_room`]);\r\n        break;\r\n      case MattertagActionMode.POSITION_OBJECT3D:\r\n        if (lastTag) {\r\n          // DO Nothing (routing), just\r\n          this.router.navigate(\r\n            [`visit/${this.currentSpaceID}/object3d/${this.lastObject3D.id}`],\r\n            { queryParams: { positioning: true } }\r\n          );\r\n        }\r\n        break;\r\n      case MattertagActionMode.POSITION_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            ],\r\n            { queryParams: { positioning: true } }\r\n          );\r\n        }\r\n        break;\r\n      case MattertagActionMode.POSITION_EQUIPMENT:\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            ],\r\n            { queryParams: { positioning: true } }\r\n          );\r\n        }\r\n        break;\r\n      case MattertagActionMode.POSITION_DATA:\r\n        if (lastTag) {\r\n          this.router.navigate([], {\r\n            relativeTo: this.activeRoute,\r\n            queryParams: { positioning: true }, queryParamsHandling: \"merge\"\r\n          });\r\n        }\r\n        break;\r\n      case MattertagActionMode.POSITION_ROOM:\r\n        if (lastTag) {\r\n          this.router.navigate([], {\r\n            relativeTo: this.activeRoute,\r\n            queryParams: { positioning: true }, queryParamsHandling: \"merge\"\r\n          });\r\n        }\r\n        break;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Fully updates existing Mattertag content with data of object (Ticket, Equipment, Desk)\r\n   * @param mattertagID string\r\n   * @param object Ticket, Equipment, Feature, Desk\r\n   * @param poiType PoiType\r\n   * @param poi POI\r\n   */\r\n  async setObjectAndPoiInTag(\r\n    mattertagID: string,\r\n    object: DbObjectType,\r\n    poiType: PoiType,\r\n    poi: POI | null = null\r\n  ): Promise<void> {\r\n    this.dictionnaryTags.get(mattertagID).setObject(object, poiType);\r\n    if (poi) {\r\n      this.dictionnaryTags.get(mattertagID).setPoi(poi);\r\n    }\r\n    this.dictionnaryTags.get(mattertagID).elementID = object.id;\r\n    try {\r\n      await this.updateMatterTagContentForTagID(mattertagID, object, poiType);\r\n      // TODO: fix this\r\n      await this.updateMatterTagPosInSdkViewer(\r\n        mattertagID,\r\n        object,\r\n        poiType,\r\n        poi\r\n      );\r\n    } catch (e) {\r\n      console.log(`error in setObjectAndPoiInTag: ${e}`);\r\n    }\r\n  }\r\n\r\n  async updateMatterTagPosInSdkViewer(\r\n    mattertagID: string,\r\n    object: DbObjectType,\r\n    poiType: PoiType,\r\n    poi: POI | null = null\r\n  ): Promise<void> {\r\n    const IndexToUpdate = object.pois.items.findIndex((u) => u.id === poi.id);\r\n    object.pois.items[IndexToUpdate] = poi;\r\n    const { x, y, z } = JSON.parse(poi.coordinate);\r\n    const newPosition = {\r\n      anchorPosition: {\r\n        x: x,\r\n        y: y,\r\n        z: z,\r\n      },\r\n      stemVector: {\r\n        // make the Tag stick straight up and make it 0.30 meters (~1 foot) tall\r\n        x: 0,\r\n        y: 0.3,\r\n        z: 0,\r\n      },\r\n    };\r\n    this.sdk.Mattertag.editPosition(mattertagID, newPosition);\r\n    this.sdk.Tag.editPosition(mattertagID, newPosition);\r\n    this.dictionnaryTags\r\n      .get(mattertagID)\r\n      .setPosition(newPosition.anchorPosition);\r\n\r\n    for (let tagId of this.mattertagIDs) {\r\n      const currentTag = this.dictionnaryTags.get(tagId);\r\n      if (!currentTag) {\r\n        continue;\r\n      }\r\n      if (currentTag.elementID === object.id && tagId !== mattertagID) {\r\n        this.dictionnaryTags.delete(tagId);\r\n        this.sdk.Tag.remove(tagId);\r\n        this.sdk.Mattertag.remove(tagId);\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets matterTagID and its sweep for an object ID (ticket ID, etc)\r\n   * @param elementID string\r\n   * @returns {tag: string | null, sweep: string | null}\r\n   */\r\n  public getTagFromElementId(elementID: string): {\r\n    tag: string | null;\r\n    sweep: string | null;\r\n  } {\r\n    let tagID = null;\r\n    let sweepID = null;\r\n    for (let [mattertagID, mattertagData] of this.dictionnaryTags) {\r\n      if (mattertagData.elementID === elementID) {\r\n        tagID = mattertagID;\r\n        const sweep = mattertagData.getSweepID();\r\n        if (sweep && this.sweeps && this.sweeps.includes(sweep)) {\r\n          sweepID = sweep;\r\n        }\r\n      }\r\n    }\r\n    return { tag: tagID, sweep: sweepID };\r\n  }\r\n\r\n  /**\r\n   * Gets latest tag created in the visit (when following the cursor to position)\r\n   * @returns string mattertagID\r\n   */\r\n  getLastTag(): string | null {\r\n    if (this.mattertagToFollow) {\r\n      return this.mattertagToFollow;\r\n    } else {\r\n      return this.mattertagIDs.length === 0\r\n        ? null\r\n        : this.mattertagIDs[this.mattertagIDs.length - 1];\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets MattertagData for Mattertag (replaces getTagDataFromId)\r\n   * @param mattertagID\r\n   * @returns MattertagData\r\n   */\r\n  getMatterTagDataForMattertag(mattertagID: string): MattertagData | null {\r\n    try {\r\n      return this.dictionnaryTags.get(mattertagID);\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  //\r\n  // ---------- Viewer related (switch views, go to) ----------\r\n  //\r\n  async action_toolbox_floorplan() {\r\n    if (this.inTransitionMode || this.inTransitionSweep) {\r\n      console.log('viewer is in transition, cannot go floorplan');\r\n      return;\r\n    }\r\n    try {\r\n      await this.sdk.Mode.moveTo('mode.floorplan');\r\n    } catch (e) {\r\n      console.log('cannot go to floorplan', e);\r\n    }\r\n  }\r\n\r\n  action_toolbox_inside_view() {\r\n    this.sdk.Mode.moveTo('mode.inside');\r\n  }\r\n\r\n  actionShowAllFloors() {\r\n    try {\r\n      this.sdk.Floor.showAll();\r\n    } catch (e) {\r\n      console.log('cannot show all floors', e);\r\n    }\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  async action_go_to_floor(\r\n    floorName: string,\r\n    matterportFloorSequence: number = null\r\n  ) {\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(\r\n            floorMatterport.sequence\r\n          );\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.instant',\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  setInteractionMode(interactionMode: number) {\r\n    this.interactionMode = interactionMode;\r\n  }\r\n\r\n  getInteractionMode() {\r\n    return this.interactionMode;\r\n  }\r\n\r\n  /**\r\n   * Clear all variables, deletes all tags (when viewer is remover or model changed=reload needed)\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    this.tagMessengerOn = false;\r\n    // cancel subscriptions\r\n    this.pointerButton.removeEventListener(\r\n      'click',\r\n      this.pointerLeftClickHandler\r\n    );\r\n    this.pointerButton.removeEventListener(\r\n      'contextmenu',\r\n      this.pointerRightClickHandler\r\n    );\r\n\r\n    // TODO: only For Admins\r\n    if (this.getCursorPositionButton) {\r\n      this.getCursorPositionButton.removeEventListener(\r\n        'auxclick',\r\n        this.pointerMiddleClickHandler\r\n      );\r\n    }\r\n    // TODO: only for dev!\r\n    if (!!this.getCursorPositionButton &&\r\n      (document.location.href.indexOf('dev') !== -1 || document.location.href.indexOf('localhost') !== -1)) {\r\n      clearInterval(this.intervalCursorPointerPosition);\r\n    }\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  //\r\n  // ---------- 3D objects (SDK Bundle only) ----------\r\n  //\r\n  async init3DObjectViewer(): Promise<void> {\r\n    return new Promise(async (resolve) => {\r\n      var [sceneObject] = await this.sdk.Scene.createObjects(1);\r\n\r\n      var node = sceneObject.addNode();\r\n\r\n      // TODO change this 🤮\r\n      node.addComponent('mp.lights');\r\n      //node.addComponent('mp.lights');\r\n      /*node.addComponent('mp.lights');\r\n      node.addComponent('mp.lights');*/\r\n      node.start();\r\n\r\n      const nodeControl = sceneObject.addNode();\r\n      this.objectControl = nodeControl.addComponent('mp.transformControls');\r\n      nodeControl.start();\r\n\r\n      //this.add3DObject({},null);\r\n\r\n      resolve();\r\n    });\r\n  }\r\n\r\n  async add3DObject(\r\n    obj: IObject3D,\r\n    mode?: 'translate' | 'rotate'\r\n  ): Promise<any> {\r\n    return new Promise(async (resolve) => {\r\n      const [sceneObject] = await this.sdk.Scene.createObjects(1);\r\n\r\n      // TODO: improvment, regroup all of these in Dynamical Objects Lib\r\n      // SecurityCamera\r\n      // NestThermostat\r\n      // Video\r\n      let isAnimatedSecurityCamera = false;\r\n      let isNestThermostat = false;\r\n      let isSmarterplanPromotionalVideo = false;\r\n      let isAzimuthalCrown = false;\r\n\r\n      /**\r\n       * TODO: refacto with an enum or switch/case\r\n       */\r\n      if (obj.object === \"security_camera\") {\r\n        isAnimatedSecurityCamera = true;\r\n      }\r\n      if (obj.object === \"nest_thermostat\") {\r\n        isNestThermostat = true;\r\n      }\r\n      if (obj.object === 'video') {\r\n        isSmarterplanPromotionalVideo = true;\r\n      }\r\n      if (obj.object === 'azimuth') {\r\n        isAzimuthalCrown = true;\r\n      }\r\n\r\n      const modelNode = sceneObject.addNode();\r\n      let component = null;\r\n      const initial = {\r\n        url: `/assets/3Dobjects/objects/${obj.object}${obj.format.indexOf('.') === -1 ? '.' + obj.format : obj.format\r\n          }`,\r\n        // TODO/ store localPosition && localRotation in BDD too (in order to have pertfect initial placement)\r\n        localRotation: { \"x\": 0, \"y\": 0, \"z\": 0 },\r\n        // TODO/ store localPosition && localRotation in BDD too (in order to have pertfect initial placement)\r\n        localPosition: { \"x\": 0, \"y\": 0, \"z\": 0 },\r\n        visible: true,\r\n        colliderEnabled: true\r\n      };\r\n\r\n\r\n      switch (obj.format) {\r\n        case '.obj':\r\n        case 'obj':\r\n          component = modelNode.addComponent('mp.objLoader', initial);\r\n          break;\r\n        case '.fbx':\r\n        case 'fbx':\r\n          component = modelNode.addComponent('mp.fbxLoader', initial);\r\n          break;\r\n        case '.gltf':\r\n        case 'gltf':\r\n          component = modelNode.addComponent('mp.gltfLoader', initial);\r\n          break;\r\n        case '.glb':\r\n        case 'glb':\r\n          component = modelNode.addComponent('mp.gltfLoader', initial);\r\n          break;\r\n        case '.dae':\r\n        case 'dae':\r\n          component = modelNode.addComponent('mp.daeLoader', initial);\r\n          break;\r\n\r\n        default:\r\n          console.log('Format not supported');\r\n          break;\r\n      }\r\n\r\n      //cache system (i'll try to make it work later ...)\r\n      /*let objContentsJSON = JSON.stringify(modelNode);\r\n      console.log(modelNode);\r\n      console.log(objContentsJSON);\r\n      console.log(JSON.stringify(modelNode));\r\n      localStorage.setItem(`testObj_${obj.object}`, objContentsJSON);\r\n      console.log(\"stored ?!\");\r\n      console.log(typeof modelNode);*/\r\n      //let dataS = serialijse.serialize(modelNode);\r\n      //console.log(dataS);\r\n\r\n      // Use 3 ?! Ambient lightings\r\n      if (this.noLightForObjects) {\r\n        const lightsNode = sceneObject.addNode();\r\n        lightsNode.addComponent('mp.ambientLight', {\r\n          intensity: 1,\r\n          color: { r: 1.0, g: 1.0, b: 1.0 },\r\n        });\r\n        this.noLightForObjects = false;\r\n      }\r\n\r\n      modelNode.obj3D.position.set(\r\n        obj.position.x,\r\n        obj.position.y,\r\n        obj.position.z\r\n      );\r\n\r\n      modelNode.obj3D.rotation.set(\r\n        obj.rotation.x,\r\n        obj.rotation.y,\r\n        obj.rotation.z\r\n      );\r\n      modelNode.obj3D.scale.set(obj.scale.x, obj.scale.y, obj.scale.z);\r\n      if (isAzimuthalCrown) {\r\n        /*if(modelNode.obj3D.scale.x >= 1.0){\r\n          modelNode.obj3D.scale.set(obj.scale.x/5000, obj.scale.y/5000, obj.scale.z/5000);\r\n        }*/\r\n        this.azimuthalCrown = modelNode;\r\n        this.displayAzimutalCrown();\r\n      }\r\n\r\n      // By defaut, during creation, object has translation gizmo\r\n      // => User has to click on lateral panel, and save its position after playing with it!\r\n      if (mode && !isNestThermostat) {\r\n        this.attachGizmoControlTo3DObject(\r\n          modelNode,\r\n          sceneObject,\r\n          mode,\r\n          true,\r\n          true\r\n        ).catch((e) => console.log(e));\r\n      }\r\n\r\n      if (this.lastObject3D && typeof this.lastObject3D.id === 'string') {\r\n        // prompt ThreeJS UUID to match our last generated object if new (not from Db)\r\n        modelNode.obj3D.uuid = this.lastObject3D.id;\r\n      } else if (obj.id) {\r\n        modelNode.obj3D.uuid = obj.id;\r\n      }\r\n      this.lastObject3D = modelNode.obj3D;\r\n\r\n      // Store this in memory Map dictionnary\r\n      //console.log(\"Adding object: \");\r\n      //console.log(modelNode);\r\n      this.dictionnaryObjects3D.set(modelNode.obj3D.uuid, modelNode);\r\n      this.dictionnarySceneObjects3D.set(modelNode.obj3D.uuid, sceneObject);\r\n\r\n      /*this.sdk.Camera.pose.subscribe(\r\n        function (pose: any) {\r\n          //console.log(\"in callback\")\r\n          //console.log(this.lastCameraPosition)\r\n          //console.log(pose.position)\r\n          if((pose.position.x == this.lastCameraPosition.x && pose.position.y == this.lastCameraPosition.y && pose.position.z == this.lastCameraPosition.z) || this.inTransitionMode || this.inTransitionSweep){\r\n            //console.log(\"returning\")\r\n            return;\r\n          }\r\n          console.log(\"camera pos:\",pose.position);\r\n          this.lastCameraPosition = {...pose.position};\r\n          if(this.lastObject3D){\r\n            this.lastObject3D.position.set(pose.position.x+.5,pose.position.y+.5,pose.position.z+.5);\r\n          }\r\n        }.bind(this));*/\r\n\r\n      if (isAnimatedSecurityCamera) {\r\n\r\n        const animator = modelNode.addComponent('mp.securityCamera',\r\n          {\r\n            \"nearPlane\": 0.1,\r\n            \"farPlane\": 10,\r\n            \"horizontalFOV\": 52,\r\n            \"aspect\": 1.7777777777777777,\r\n            \"localPosition\": {\r\n              \"x\": 0.3,\r\n              \"y\": 0.18,\r\n              \"z\": 0\r\n            },\r\n            \"localRotation\": {\r\n              \"x\": -15,\r\n              \"y\": -90,\r\n              \"z\": 0\r\n            },\r\n            \"color\": 65280,\r\n            \"panPeriod\": 5,\r\n            \"panAngle\": -45\r\n          });\r\n        const modelOutput = sceneObject.addPath({\r\n          id: 'animated-model',\r\n          type: this.sdk.Scene.PathType.OUTPUT,\r\n          node: modelNode,\r\n          component: animator,\r\n          property: 'objectRoot'\r\n        });\r\n\r\n        this.securityCameraAnimator = animator;\r\n        if (!obj.viewFrustum) {\r\n          setTimeout(() => {\r\n            animator.toggleViewFrustum();\r\n          }, 1000);\r\n        }\r\n      }\r\n\r\n      if (isNestThermostat) {\r\n        // TODO: use bindPath instead using MP sdk classes (see Security Camera example)\r\n        // for TV uses CanvasImage below!\r\n        // const ci = new CanvasImage();\r\n        // ci.onInit();\r\n        const cv = new CanvasRenderer();\r\n        cv.onInit();\r\n        const plane = new PlaneRenderer();\r\n        plane.outputs = {\r\n          objectRoot: new Object3D(),\r\n          collider: new Object3D()\r\n        };\r\n        const inputTexture = cv.outputs.texture;\r\n        plane.setRootScene(this.threeJSScene);\r\n        plane.onInit(modelNode, inputTexture);\r\n        const sc = new NestThermostat();\r\n        sc.setComponent(component, plane, cv);\r\n        sc.setRootScene(this.threeJSScene);\r\n        sc.onInit(modelNode, plane, inputTexture);\r\n        cv.setCanvasNestThermostatPainter(sc);\r\n        setTimeout(() => {\r\n          sc.inputs.loadingState = \"Loaded\";\r\n          sc.onInputsUpdated();\r\n        }, 5000);\r\n      }\r\n\r\n      if (isSmarterplanPromotionalVideo) {\r\n        // TODO: use bindPath instead using MP sdk classes (see Security Camera example)\r\n        const sc = new TvPlayer();\r\n        sc.setComponent(component);\r\n        sc.onInit(modelNode);\r\n        setTimeout(() => {\r\n          sc.inputs.loadingState = \"Loaded\";\r\n          sc.onInputsUpdated();\r\n        }, 5000);\r\n      }\r\n\r\n      sceneObject.start();\r\n      resolve(this.lastObject3D);\r\n    });\r\n  }\r\n\r\n  toggleObjectVisibility(objectId: any) {\r\n    let obj = this.dictionnaryObjects3D.get(objectId);\r\n    obj.obj3D.visible = !obj.obj3D.visible;\r\n  }\r\n\r\n  isObjectVisible(objectId: any): boolean {\r\n    let obj = this.dictionnaryObjects3D.get(objectId);\r\n    return obj.obj3D.visible;\r\n  }\r\n\r\n  async pointCameraTo3DObject(objectId: any) {\r\n    let obj = this.dictionnaryObjects3D.get(objectId);\r\n\r\n    //We create a temporary Tag\r\n    const poiObject = {\r\n      coordinate: JSON.stringify(obj.obj3D.position),\r\n      type: PoiType.OBJECT3D,\r\n      elementID: objectId, //todo: be careful with this\r\n    } as POI;\r\n    const objectDb = { id: objectId } as DbObjectType;\r\n\r\n    try {\r\n      await this.createMattertagFromPOI(PoiType.OBJECT3D, objectDb, poiObject);\r\n    } catch (err: any) { }\r\n\r\n    //Not really necessary anymore since the tag will disappear quick\r\n    //this.sdk.Tag.editOpacity(mattertagID, 0.0);//opacity);\r\n    //this.sdk.Tag.allowAction(mattertagID, {}); //disables every action\r\n\r\n    let result = this.getTagFromElementId(objectId);\r\n\r\n    await this.goToTag(result.tag);\r\n    this.deleteLastMattertag();\r\n  }\r\n\r\n  getSceneNodeFromObject3DId(uuid: string): any {\r\n    return this.dictionnarySceneObjects3D.get(uuid);\r\n  }\r\n\r\n  async displayAzimutalCrown() {\r\n    if (this.azimuthalCrown) {\r\n      this.azimuthalCrown.obj3D.position.set(this.poseCamera.position.x, this.poseCamera.position.y, this.poseCamera.position.z)\r\n    }\r\n  }\r\n\r\n  async attachGizmoControlTo3DObject(\r\n    modelNode: any,\r\n    sceneObject: any,\r\n    mode: 'translate' | 'rotate' | 'scale',\r\n    visible: boolean,\r\n    isNewObject: boolean\r\n  ): Promise<any> {\r\n    // Create a scene node with a transform control component.\r\n    let node = null;\r\n    node = sceneObject.addNode();\r\n    if (!node) {\r\n      const [sceneObject] = await this.sdk.Scene.createObjects(1);\r\n      node = sceneObject.addNode();\r\n    }\r\n\r\n    const myControl = node.addComponent('mp.transformControls');\r\n    node.start();\r\n    //\r\n    // // Make the transform control visible so that the user can manipulate the control selection.\r\n    myControl.transformControls.visible = visible;\r\n    //\r\n    // // Attach the model to the transform control\r\n    myControl.inputs.selection = modelNode;\r\n    //\r\n    // // set 'translate' mode to position the selection.\r\n    myControl.inputs.mode = mode;\r\n    modelNode.obj3D.controls = myControl; // store gizmoCtrl inside object\r\n    if (isNewObject) { //i keep the current solution for new objects\r\n      if (!this.lastObject3D || !this.lastObject3D.controls) {\r\n        try {\r\n          modelNode.obj3D.uuid = this.lastObject3D.uuid || this.lastObject3D.id;\r\n        } catch (e) {\r\n          console.log(`id obj in Scene was not assigned to id from DB since`);\r\n        }\r\n        this.lastObject3D = modelNode.obj3D;\r\n      }\r\n    } else {//objects already in place have to become the \"lastObject\" (i think?)\r\n      console.log(\"in my solution !\");\r\n      console.log(modelNode);\r\n      console.log(modelNode.obj3D.uuid);\r\n      this.lastObject3D = modelNode.obj3D;\r\n    }\r\n\r\n    return modelNode;\r\n  }\r\n\r\n  removeGizmoFromLastObject(): void {\r\n    this.lastObject3D.controls.transformControls.visible = false;\r\n    this.lastObject3D.controls.transformControls.dispose();\r\n    this.lastObject3D.controls = null;\r\n  }\r\n\r\n  toggleViewFrustum(): void {\r\n    this.securityCameraAnimator.toggleViewFrustum();\r\n  }\r\n\r\n  /*public set3DObjectMode(modelNode: any, mode?: string) {\r\n    if (mode) {\r\n      this.objectControl.inputs.selection = modelNode;\r\n      this.objectControl.inputs.visible = true;\r\n      this.objectControl.inputs.mode = mode;\r\n \r\n      setInterval(() => {\r\n        console.log(modelNode);\r\n      }, 5000);\r\n \r\n    } else {\r\n      this.objectControl.inputs.visible = true;\r\n    }\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 {\r\n  DbObjectType,\r\n  POI,\r\n  ViewerInteractions,\r\n  PoiType,\r\n  Comment,\r\n  Equipment,\r\n  Ticket,\r\n  Feature,\r\n  SpModule,\r\n} from '../types.service';\r\nimport { PoiService } from './models/poi.service';\r\nimport { makeSecurityCamera, securityCameraType } from \"../matterport-extensions/security-camera/SecurityCamera\";\r\nimport { ViewFrustumMeshType, makeViewFrustumMesh } from \"../matterport-extensions/view-frustum-mesh/ViewFrustumMesh\";\r\nimport { NavigatorService } from './navigator.service';\r\n\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 goToTriggered: Subject<void> = new Subject();\r\n\r\n  public toolboxStates = {\r\n    dollhouse: {\r\n      stat: false,\r\n      iconId: 'ui-dollhouse',\r\n      show() {\r\n      },\r\n      hide() {\r\n      },\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      },\r\n      hide() {\r\n      },\r\n    },\r\n    filter: {\r\n      stat: false,\r\n    },\r\n  };\r\n  private isObjectLoaded: boolean = false;\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  /*-----------------------------------------------------------------------------------------------------------------\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(\r\n    model3d: string,\r\n    showIconPlan: boolean = true,\r\n    showIconDollhouse: boolean = true,\r\n    showIconFloors: boolean = true,\r\n    enableQuickStart: boolean = true\r\n  ) {\r\n    // this.tourUrl = `https://my.matterport.com/show/?m=${model3d}&play=1&hr=0&gt=0&title=0&log=0&brand=0&search=0&applicationKey=qn9wsasuy5h2fzrbrn1nzr0id&mds=0&newtags=1`;\r\n    this.tourUrl = `/assets/bundle/showcase.html?m=${model3d}&play=1&hr=0&gt=0&title=0&log=0&brand=0&search=0&applicationKey=qn9wsasuy5h2fzrbrn1nzr0id&mds=0&newtags=1`;\r\n\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    if (enableQuickStart) {\r\n      this.tourUrl += '&qs=1';\r\n    }\r\n  }\r\n\r\n  async 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      await 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 = 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  /**\r\n   * Adds Mattertags to Viewer\r\n   * @param objects List of objects (tickets, equipments) etc to be added as Mattertags\r\n   */\r\n  async addObjectTagsToViewer(objects: DbObjectType[]) {\r\n    await Promise.all(\r\n      objects.map(async (object) => {\r\n        const poi = await this.poiService.getPoiByElementId(object.id!);\r\n        if (poi && poi.coordinate) {\r\n          await this.actionAddObjectFromPOI(object, poi);\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  async actionAddObjectFromPOI(object: DbObjectType, poi: POI) {\r\n    if (this.checkMode('Matterport')) {\r\n      return this.matterportService.createMattertagFromPOI(\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  async action_delete_element(element: DbObjectType) {\r\n    // Matterport\r\n    if (this.checkMode('Matterport')) {\r\n      await this.matterportService.deleteMattertagForObject(element.id);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Enable tag placement menu to add a new element depending on its type (TICKET, DATA, EQUIPMENT etc)\r\n   */\r\n  async actionAddNewElementToViewer(poiType: PoiType) {\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() === ViewerInteractions.DEFAULT\r\n    ) {\r\n      await this.matterportService.addMattertagWhenAdding(poiType);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Launches the repositioning of an existing Mattertag related to parameter object\r\n   * @param element object (TICKET, EQUIPMENT, FEATURE, etc)\r\n   * @param poiType type of object\r\n   */\r\n  async actionRepositionElementInViewer(\r\n    element: DbObjectType,\r\n    poiType: PoiType\r\n  ) {\r\n    if (\r\n      this.checkMode('Matterport') &&\r\n      this.matterportService.getInteractionMode() === ViewerInteractions.DEFAULT\r\n    ) {\r\n      await this.matterportService.addMattertagWhenRepositioning(poiType, element);\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.cancelFollowingCursor();\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  actionShowAllFloors() {\r\n    // Matterport\r\n    if (this.checkMode('Matterport')) {\r\n      this.matterportService.actionShowAllFloors();\r\n    }\r\n  }\r\n\r\n  action_toolbox_dollhouse() {\r\n    if (\r\n      this.matterportService.getInteractionMode() !== 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  async action_floorplan() {\r\n    if (\r\n      this.matterportService.getInteractionMode() !== ViewerInteractions.DEFAULT\r\n    ) {\r\n      this.action_canceled();\r\n    }\r\n    // Matterport\r\n    if (this.checkMode('Matterport')) {\r\n      await this.matterportService.action_toolbox_floorplan();\r\n    }\r\n  }\r\n\r\n  action_toolbox_mesure() {\r\n    if (\r\n      this.matterportService.getInteractionMode() !== 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 = this.matterportService.getMatterTagDataForMattertag(lastTag);\r\n        if (!tagData) {\r\n          return Promise.resolve(poi);\r\n        }\r\n\r\n        const poiMetadata = (!!poi && poi.metadata) ? JSON.parse(poi.metadata) : {};\r\n        poiMetadata.normal = tagData.getNormal();\r\n        if (!poi) {\r\n          return Promise.resolve({});\r\n        }\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(poiInput);\r\n        tagData.setPoi(updatedPoi);\r\n        await this.matterportService.setObjectAndPoiInTag(lastTag, element, PoiType.DESK, updatedPoi);\r\n        await this.matterportService.injectHtmlInTag(\r\n          poi.type!,\r\n          element,\r\n          lastTag\r\n        );\r\n        await this.matterportService.setTagIconAndOpacity(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  editOnlyTagStyleForPoi(poi: POI, object: DbObjectType) {\r\n    if (this.checkMode('Matterport')) {\r\n      const tagData = this.matterportService.getTagFromElementId(poi.elementID);\r\n      if (tagData.tag) {\r\n        const mattertagData = this.matterportService.getMatterTagDataForMattertag(\r\n          tagData.tag\r\n        );\r\n        mattertagData.setObject(object, PoiType.ROOM);\r\n        this.matterportService.setTagIconAndOpacity(tagData.tag, mattertagData);\r\n      }\r\n    }\r\n  }\r\n\r\n  addIconAndSetForPoi(poi: POI, iconPath: string) {\r\n    if (this.checkMode('Matterport')) {\r\n      const tagData = this.matterportService.getTagFromElementId(poi.elementID);\r\n      if (tagData.tag) {\r\n        this.matterportService.addNewIconAndSetForTag(tagData.tag, iconPath);\r\n      }\r\n    }\r\n  }\r\n\r\n  changeToRegistredIconForPoi(poi: POI, iconName: string) {\r\n    if (this.checkMode('Matterport')) {\r\n      const tagData = this.matterportService.getTagFromElementId(poi.elementID);\r\n      if (tagData.tag) {\r\n        this.matterportService.setRegistredIconForTag(tagData.tag, iconName);\r\n      }\r\n    }\r\n  }\r\n\r\n  async updateHtmlTagForPoiWithObject(poi: POI, object: DbObjectType) {\r\n    if (this.checkMode('Matterport')) {\r\n      const tagData = this.matterportService.getTagFromElementId(poi.elementID);\r\n      if (tagData.tag) {\r\n        await this.matterportService.updateInjectedHtmlForTagID(\r\n          tagData.tag,\r\n          object,\r\n          poi.type\r\n        );\r\n      }\r\n    }\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(\r\n    spaceID: string,\r\n    model3D: string,\r\n    tagService: BaseTagService,\r\n    module: SpModule = SpModule.IMMO\r\n  ): Promise<void> {\r\n    this.isLoaded = false;\r\n    this.matterportService.currentSpaceID = spaceID;\r\n    if (this.matterportService.sdk) {\r\n      await this.clearAll();\r\n    }\r\n    return this.matterportService\r\n      .initSdk(tagService, module)\r\n      .then(async (result) => {\r\n        if (result) {\r\n          const { sdk } = this.matterportService;\r\n\r\n          // TODO: add condition whether we want to enable it or not\r\n          // Additionnal extensions for Matterport\r\n          // 1. Security Camera with Frustum (FOV)\r\n          // 2. TODO register all new Matterport extensions here (nestSensor, lods, slots, ...)\r\n          await Promise.all([\r\n            sdk.Scene.register(securityCameraType, makeSecurityCamera.bind(sdk.Scene)),\r\n            sdk.Scene.register(ViewFrustumMeshType, makeViewFrustumMesh.bind(sdk.Scene))\r\n          ]);\r\n\r\n          sdk.App.state.subscribe(\r\n            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          );\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  setObject3DLoadedInPosition(objectLoaded: boolean): void {\r\n    this.isObjectLoaded = objectLoaded;\r\n  }\r\n\r\n  isObject3DLoadedInPosition(): boolean {\r\n    return this.isObjectLoaded;\r\n  }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ViewerService } from '../../services/viewer.service';\r\n\r\n@Component({\r\n    selector: 'lib-modal-switch-visit',\r\n    templateUrl: './modal-switch-visit.component.html',\r\n    styleUrls: ['./modal-switch-visit.component.scss']\r\n})\r\nexport class ModalSwitchVisitComponent implements OnInit {\r\n    @Input() content: string;\r\n    @Input() model3D: string;\r\n    @Input() spaceID: string;\r\n    @Input() dataToMove: { sweepToMove: string, rotation: any; };\r\n    constructor(public activeModal: NgbActiveModal, private router: Router, private viewerService: ViewerService,\r\n        // private objectSubService: ObjectSubscriptionService\r\n    ) { }\r\n\r\n    ngOnInit(): void { }\r\n\r\n    switchVisit() {\r\n        this.activeModal.close();\r\n        if (this.dataToMove) {\r\n            this.viewerService.setSweepToMove(this.dataToMove.sweepToMove);\r\n            this.viewerService.setRotationToMove(this.dataToMove.rotation);\r\n        }\r\n        // this.objectSubService.forceRemove = true; // we reset the tags when changing visit\r\n        this.router.navigate([\"visit\", this.spaceID], {\r\n            queryParams: { model3D: this.model3D },\r\n        });\r\n    }\r\n\r\n}\r\n","<div class=\"modal-container\">\r\n    <p>{{content}}</p>\r\n    <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"switchVisit()\">{{'Yes, switch visit' | translate }}</button>\r\n    <button class=\"btn btn-outline-primary rounded-pill\"(click)=\"activeModal.close()\">{{'No, stay here' | translate }}</button>\r\n</div>\r\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};\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 uploadBase64ImageWithRetry = async (\r\n    uri: string,\r\n    objectId: string | null,\r\n    path: string,\r\n    friendlyFileName: string,\r\n    retry : number\r\n): Promise<string> => {\r\n\r\n    return new Promise<string>(async (resolve, reject) => {\r\n        while(retry > 0) {\r\n            try{\r\n                const r = await uploadBase64Image(uri, objectId, path, friendlyFileName);\r\n                resolve(r);\r\n                return;\r\n            }catch(e){\r\n                retry -- ;\r\n                console.error(`Upload error, retry n° ${retry} : `, e);\r\n            }\r\n        };\r\n\r\n        reject(\"Max retry exceeded\");\r\n    });\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\", pageSize: 'ALL' })\r\n        .then((res) => {\r\n            return res.results;\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\nexport 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\nexport 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\nexport function arraysContainSameElements(\r\n    array1: string[],\r\n    array2: string[],\r\n): boolean {\r\n    array1.sort();\r\n    array2.sort();\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\nexport 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\nimport * as FileSaver from \"file-saver\";\r\n\r\nexport function downloadFile(fileUrl: string, fileName: string) {\r\n    FileSaver.saveAs(fileUrl + fileName, fileName);\r\n}\r\n\r\nexport function openDocument(fileUrl: string, fileName: string, id: number) {\r\n    window.open(`${fileUrl + fileName}#doc=${id}`, \"_blank\", \"\");\r\n}\r\n\r\nexport 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\nexport 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\nexport 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\nexport 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\nexport 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\nexport 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\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(\r\n    @Inject('currentAPIService') apiInjected: any,\r\n    private userService: BaseUserService\r\n  ) {\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  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        // the whole building is authorized\r\n        return this.getZonesBySpace(spaceID);\r\n      }\r\n      list.push(allowedZone);\r\n      // allow all children zones of an allowed parent\r\n      const children = (await this.API.__proto__.ZonesByZone(allowedZone.id))\r\n        .items;\r\n      if (children.length > 0) {\r\n        for (const child of children) {\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      // allow the parent Floor of the allowed zone\r\n      if (\r\n        allowedZone.parent.layer &&\r\n        allowedZone.parent.layer.name === 'FLOOR'\r\n      ) {\r\n        list.push(allowedZone.parent);\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) => zoneIDs.has(zone.id));\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(object: DbObjectType): 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  /**\r\n   * Gets the Zone (layer FLOOR) for a matterport sweep ID in a given Space\r\n   * @param sweepID\r\n   * @param spaceID\r\n   * @returns Zone\r\n   */\r\n  async getFloorZoneForSweepInSpace(\r\n    sweepID: string,\r\n    spaceID: string\r\n  ): Promise<Zone> {\r\n    const zones = await this.getZonesForSweepForSpace(sweepID, spaceID);\r\n    const floors = zones.filter(\r\n      (zone) => zone.layer && zone.layer.name.includes('FLOOR')\r\n    );\r\n    return floors.length > 0 ? floors[0] : null;\r\n  }\r\n\r\n  /**\r\n   * Get zones with audio track for entire space\r\n   * @param spaceID\r\n   * @returns  Promise<Zone[]>\r\n   */\r\n  async getAudioZonesForSpace(spaceID: string): Promise<Zone[]> {\r\n    const allZones = await this.getZonesBySpace(spaceID);\r\n    return allZones.filter((zone) => zone.audioID);\r\n  }\r\n\r\n  /**\r\n   * Get audio zones for user (within allowed zones)\r\n   * @param spaceID\r\n   * @returns  Promise<Zone[]>\r\n   */\r\n  async getAudioZonesForUserForSpace(spaceID: string): Promise<Zone[]> {\r\n    const userZones = await this.getZonesBySpaceForUser(spaceID);\r\n    return userZones.filter((zone) => zone.audioID);\r\n  }\r\n\r\n  /**\r\n   * Get Zones by Parent Zone ID\r\n   * @param parentZoneID string\r\n   * @returns Promise<Zone[]>\r\n   */\r\n  async getZonesByParentZone(parentZoneID: string): Promise<Zone[]> {\r\n    return this.API.__proto__\r\n      .ZonesByZone(parentZoneID)\r\n      .then((res) => res.items);\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 {\r\n    Zone,\r\n    Equipment,\r\n    LevelStatus,\r\n    Measurement,\r\n    Mission,\r\n    Organisation,\r\n    PoiType,\r\n    ProfileEntity,\r\n    RoleStatus,\r\n    Space,\r\n    Ticket,\r\n    DbObjectType,\r\n    Feature,\r\n    Comment,\r\n    VisitTemplate, Object3D\r\n} 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 filterObjectsForCurrentUserInSpace(\r\n        objects: Object3D[],\r\n        spaceID: string,\r\n    ): Promise<Object3D[]> {\r\n        const finalObject3Ds: Object3D[] = [];\r\n        let domFiltered: Object3D[] = objects;\r\n        let levelFiltered: Object3D[] = objects;\r\n        let zoneFiltered: Object3D[] = objects;\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                for (const obj of levelFiltered) {\r\n                    if (\r\n                        domFiltered.includes(obj) &&\r\n                        zoneFiltered.includes(obj)\r\n                    ) {\r\n                        finalObject3Ds.push(obj);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return finalObject3Ds;\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        const isInvalidDate = (d: Date) => d instanceof Date && isNaN(d.getTime());\r\n\r\n        if (dateRange.every(d => d instanceof Date && isInvalidDate(d))) {\r\n            return measurements;\r\n        }\r\n\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[], // TODO: remove any here..\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\r\n    // Not implemented yet!\r\n    // filterObjects3DByDomainList(\r\n    //   objects3D: Object3D[],\r\n    //   domainIDList: string[],\r\n    // ): Object3D[] {\r\n    //   let filtered = [];\r\n    //   const filteredByDomain = objects3D.filter((equip) =>\r\n    //     domainIDList.includes(equip.domainID),\r\n    //   );\r\n    //   filtered = [...filtered, ...filteredByDomain];\r\n    //   const filteredByParentDomain = objects3D.filter(\r\n    //     (obj) =>\r\n    //       obj.domain &&\r\n    //       obj.domain.parentID &&\r\n    //       domainIDList.includes(obj.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\r\n                        let allDomainsFiltered = [];\r\n\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        const limit = 200;\r\n        let navigationsTokenDict = { navigations: [], nextToken: null };\r\n        do {\r\n            navigationsTokenDict =\r\n                await this.mergeAPIResponseWithNextTokenWithLimit(\r\n                    nodeID,\r\n                    limit,\r\n                    navigationsTokenDict,\r\n                );\r\n        } while (navigationsTokenDict.nextToken);\r\n        return navigationsTokenDict.navigations;\r\n    }\r\n\r\n    async mergeAPIResponseWithNextTokenWithLimit(\r\n        nodeID: string,\r\n        limit: number,\r\n        navigationsTokenDict: { navigations: Navigation[]; nextToken: string | null; },\r\n    ): Promise<{ navigations: Navigation[]; nextToken: string | null; }> {\r\n        return this.API.__proto__.NavigationsByNode(\r\n            nodeID,\r\n            null,\r\n            null,\r\n            limit,\r\n            navigationsTokenDict.nextToken, // nextToken\r\n        ).then((response) => {\r\n            const navigations = response.items;\r\n            const navObject = {\r\n                navigations: [...navigationsTokenDict.navigations, ...navigations],\r\n                nextToken: response.nextToken,\r\n            };\r\n            return navObject;\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 { ZoneChangeService } from './zoneChange.service';\r\nimport { BaseUserService } from './user.service';\r\nimport { ViewerService } from './viewer.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class NavigatorService {\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 }> = new Map();\r\n\r\n  floorToGo: Zone | null;\r\n\r\n  locationIDChange: Subject<string | 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  audioZonesChange: Subject<Zone[]> = new Subject();\r\n\r\n  zonesForUserForSpace: Zone[] | null;\r\n\r\n  currentAudioZones: Zone[];\r\n\r\n  audioZonesForUserForSpace: Zone[];\r\n\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    private zoneChangeService: ZoneChangeService,\r\n    private router: Router,\r\n    private route: ActivatedRoute,\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>(1500)) //  delays values emitted and return only the latest\r\n      .subscribe((sweep: string) => {\r\n        if (sweep === this.currentSweep) {\r\n          return;\r\n        }\r\n        this.currentSweep = sweep;\r\n        if (this.zonesForUserForSpace) {\r\n          this.setZonesForCurrentSweep();\r\n        }\r\n      });\r\n    this.viewerService.viewerIsOn.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.audioZonesForUserForSpace = null;\r\n          this.currentZone = null;\r\n          this.zoneChangeService.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              /**Override sweep/rotation if exist */\r\n              sweep: this.targetSweep ?? lastPose.sweep,\r\n              rotation: this.targetRotation ?? lastPose.rotation,\r\n            });\r\n          }\r\n          this.currentModel3D = data.model3D;\r\n        } else {\r\n          this.currentModel3D = data.model3D;\r\n          /**Override sweep/rotation if exist. Target is reset after (null)*/\r\n          this.targetSweep = this.targetSweep ?? data.sweep;\r\n          this.targetRotation = this.targetRotation ?? data.rotation;\r\n          this.onViewerLoaded().catch((e) => console.log(e));\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    this.route.queryParams.subscribe(params => {\r\n      const deepParamsBase64 = params['deepParams'];\r\n      if(deepParamsBase64){\r\n        const deepParams : any = JSON.parse(atob(deepParamsBase64));\r\n        this.targetSweep = deepParams.sweepID;\r\n        this.targetRotation = deepParams.rotation;\r\n                \r\n        /**Clear this query params */\r\n        this.router.navigate([], {\r\n          queryParams: { deepParams: null }, queryParamsHandling : \"merge\"\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  \r\n  getDeepLink() : string{\r\n    let data = null;\r\n\r\n    if(this.currentSweep){ /**Todo check matterport mod and adapt */\r\n      data = {\r\n        sweepID : this.currentSweep,\r\n        rotation : this.matterportService.getCurrentCameraPosition().rotation\r\n      };\r\n\r\n      data = btoa(JSON.stringify(data));\r\n    }\r\n    \r\n    const model3D = this.currentModel3D;\r\n\r\n    const url = this.router.createUrlTree([], {\r\n      relativeTo: this.route,\r\n      queryParams: { deepParams: data, model3D },\r\n      queryParamsHandling: \"merge\"\r\n    });\r\n\r\n    return `${location.origin}${url.toString()}`;\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  async 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    await this.matterportService.action_go_to_floor(\r\n      floor.name,\r\n      matterportFloorSequence\r\n    );\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        /**Reset / Consume target */\r\n        this.targetRotation = null;\r\n        this.targetSweep = null;\r\n    } else {\r\n      const lastPostion = this.getLastPositionForModel(this.currentModel3D!);\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 = await this.zoneService.getZonesBySpaceForUser(\r\n      this.currentSpaceID\r\n    );\r\n    this.audioZonesForUserForSpace = this.zonesForUserForSpace.filter(\r\n      (zone) => zone.audioID\r\n    );\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    let zonesForSweep = this.zonesForUserForSpace?.filter(\r\n      (zone) => zone.sweepIDs && zone.sweepIDs.includes(this.currentSweep)\r\n    );\r\n    const audioZones = this.audioZonesForUserForSpace?.filter(\r\n      (zone) => zone.sweepIDs && zone.sweepIDs.includes(this.currentSweep)\r\n    );\r\n    this.audioZonesChange.next(audioZones);\r\n    this.currentAudioZones = audioZones;\r\n\r\n    // filter out audio zone (not to show to user it's name)\r\n    zonesForSweep = zonesForSweep.filter((zone) => !zone.audio);\r\n    // LINE BELOW IS COMMENTED SINCE CREATES INFINITE SPINNER FOR ZONES WITHOUT AUDIO...\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.zoneChangeService.zonesForUserChange.next(\r\n        this.zonesSortedForCurrentSweep\r\n      );\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.zoneChangeService.zoneChange.next(this.currentZone);\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, takeUntil} from 'rxjs';\r\nimport {openModalForVisitSwitch, waitUntil} from '../../helpers.service';\r\nimport {MattertagData} from '../../mattertagData';\r\nimport {\r\n  Event,\r\n  Ticket,\r\n  TicketType,\r\n  TicketPriority,\r\n  TicketStatus,\r\n  EventStatus,\r\n  EventType,\r\n  Affectation,\r\n  POI,\r\n  PoiType,\r\n  IUpdate,\r\n  Zone,\r\n} 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\nimport {ZoneChangeService} from \"../zoneChange.service\";\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  awsKinesisAnalytics: any; //AWS\r\n\r\n  isMuseumUser = false;\r\n\r\n  navSubscription: Subscription;\r\n\r\n  filetrSubscription: Subscription;\r\n\r\n  floorsPerSpace: Zone[] = null;\r\n\r\n  selectedFloor: Zone = null;\r\n\r\n  private destroy$ = new Subject();\r\n\r\n  constructor(\r\n    @Inject('currentAwsKinesisAnalyticsService')\r\n      awsKinesisAnalyticsInjected: any,\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 zoneChangeService: ZoneChangeService,\r\n    private modalService: NgbModal\r\n  ) {\r\n    super(poiService, navigationService);\r\n    this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;\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    this.zoneChangeService.floorHasChanged.subscribe((floor) => {\r\n      if (floor) {\r\n        this.selectedFloor = floor;\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((tickets) => {\r\n        if (tickets) {\r\n          ticketsFiltered = tickets;\r\n        }\r\n      });\r\n      ticketsFiltered =\r\n        await this.filterService.filterTicketsForCurrentUserInSpace(\r\n          ticketsFiltered,\r\n          this.currentSpaceID\r\n        );\r\n      // @ts-ignore\r\n      if (this.dateFilter && this.dateFilter[0] != \"Invalid Date\" && this.dateFilter[1] != \"Invalid Date\") {\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\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.ticketTags.next(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 = await this.interventionService.getPrestataireForTicket(\r\n      ticket\r\n    );\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      if (!!this.awsKinesisAnalytics && !!this.awsKinesisAnalytics.record && this.awsKinesisAnalytics.record()) {\r\n        this.awsKinesisAnalytics.getInstance().record(\r\n          // @ts-ignore\r\n          {\r\n            data: {\r\n              eventType: 'Ticket Change',\r\n              ticketId: event.ticketID,\r\n              ticket: ticket,\r\n              status: event.status,\r\n              event: event,\r\n              user: this.userService.cu,\r\n              locationId: this.currentSpaceID,\r\n              timestamp: new Date(),\r\n              zoneId: this.zoneIDFilter,\r\n              floorId: this.selectedFloor?.id,\r\n            },\r\n            streamName: 'smarterplanKinesis-analytics',\r\n            // partitionKey: \"\",\r\n          },\r\n          'AWSKinesis'\r\n        );\r\n      }\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(assignee.id);\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  /** 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    if (!!this.awsKinesisAnalytics && !!this.awsKinesisAnalytics.record && this.awsKinesisAnalytics.record()) {\r\n      this.awsKinesisAnalytics.getInstance().record(\r\n        // @ts-ignore\r\n        {\r\n          data: {\r\n            eventType: 'Object Creation',\r\n            objectType: 'ticket',\r\n            //zoneId: input.spaceID, // TODO: check if spaceId == zoneId\r\n            domain: input.domain,\r\n            user: this.userService.cu,\r\n            locationId: this.currentSpaceID,\r\n            timestamp: new Date(),\r\n            zoneId: this.zoneIDFilter,\r\n            floorId: this.selectedFloor?.id,\r\n          },\r\n          streamName: 'smarterplanKinesis-analytics',\r\n          // partitionKey: \"\",\r\n        },\r\n        'AWSKinesis'\r\n      );\r\n    }\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__\r\n      .TicketsBySpace(spaceID)\r\n      .then((tickets) => tickets.items);\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       // 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 = ticket.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(ticket, poi);\r\n           await this.viewerService.action_move_to_tag(ticket.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           ticket.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(`${url}?model3D=${result.model3D}&sweep=true`, '_blank');\r\n    }\r\n  }\r\n\r\n  initSubscriptions() {\r\n    if (!this.isMuseumUser) {\r\n      this.navSubscription = this.zoneChangeService.zoneChange.subscribe(\r\n        (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().catch((e) => console.log(e.message));\r\n          }\r\n        }\r\n      );\r\n      this.filetrSubscription = this.filterService.subscribeToDataFilterUpdate(\r\n        (dateRange) => {\r\n          this.dateFilter = dateRange;\r\n          this.initTickets().catch((e) => console.log(e.message));\r\n        }\r\n      );\r\n      this.dateFilter = this.filterService.currentDateFilter;\r\n      this.updateDone.subscribe(() => {\r\n        if (this.currentSpaceID) {\r\n          this.initTickets().catch((e) => console.log(e.message));\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}\r\n","import {Injectable, Inject} from '@angular/core';\r\nimport {NgbModal} from '@ng-bootstrap/ng-bootstrap';\r\nimport {Subject, takeUntil} from 'rxjs';\r\nimport {\r\n  openModalForVisitSwitch,\r\n  removeNullKeysFromObject,\r\n  waitUntil,\r\n} from '../../helpers.service';\r\nimport {MattertagData} from '../../mattertagData';\r\nimport {\r\n  Note,\r\n  Zone,\r\n  Equipment,\r\n  EquipmentDocument,\r\n  Ticket,\r\n  TypeNote,\r\n  Mission,\r\n  EventStatus,\r\n  EventType,\r\n  Operation,\r\n  POI,\r\n  PoiType,\r\n  RoleStatus,\r\n} from '../../types.service';\r\nimport {FilterService} from '../filter.service';\r\nimport {NavigatorService} from '../navigator.service';\r\nimport {\r\n  deleteFromS3,\r\n  getSignedFile,\r\n  getSignedImageUrlForEquipment,\r\n  uploadFileToS3,\r\n} 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 {ZoneChangeService} from \"../zoneChange.service\";\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  floorsPerSpace: Zone[] = null;\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  selectedFloor: Zone = null;\r\n\r\n  API: any; //AWS\r\n  awsKinesisAnalytics: any; //AWS\r\n\r\n  isMuseumUser = false;\r\n\r\n  private destroy$ = new Subject();\r\n\r\n  constructor(\r\n    @Inject('currentAPIService') apiInjected: any,\r\n    @Inject('currentAwsKinesisAnalyticsService')\r\n      awsKinesisAnalyticsInjected: 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    private zoneChangeService: ZoneChangeService\r\n  ) {\r\n    super(poiService, navigationService);\r\n\r\n    this.API = apiInjected;\r\n    this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;\r\n\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    this.zoneChangeService.floorHasChanged.subscribe((floor)=>{\r\n      if (floor){\r\n        this.selectedFloor = floor;\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    if (!!this.awsKinesisAnalytics && !!this.awsKinesisAnalytics.record && this.awsKinesisAnalytics.record()) {\r\n      this.awsKinesisAnalytics.getInstance().record(\r\n        // @ts-ignore\r\n        {\r\n          data: {\r\n            eventType: 'Object Creation',\r\n            objectType: 'equipment',\r\n            poi: equip,\r\n            user: this.userService.cu,\r\n            locationId: this.currentSpaceID,\r\n            timestamp: new Date(),\r\n            zoneId: this.currentZone.id,\r\n            floorId: this.selectedFloor?.id,\r\n          },\r\n          streamName: 'smarterplanKinesis-analytics',\r\n          // partitionKey: \"\",\r\n        },\r\n        'AWSKinesis'\r\n      );\r\n    }\r\n    return this.API.CreateEquipment(equip).then(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(equipment, documentFile, TypeNote.TECHNICAL);\r\n        }\r\n        if (imageFile) {\r\n          await this.uploadImage(equipment, imageFile);\r\n        }\r\n      }\r\n      return equipment;\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          equipment.documentationImageUrlSigned =\r\n            await getSignedImageUrlForEquipment(equipment);\r\n          if (note.attachment) {\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 operations = ticket.operations.items;\r\n    if (operations.length > 0) {\r\n      operations.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      await Promise.all(\r\n        operations.map(async (operation) => {\r\n          operation.equipment = await this.readEquipment(operation.equipmentID);\r\n        })\r\n      );\r\n    }\r\n    // to keep the sorting by createdAt\r\n    return operations.map((o) => o.equipment);\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 = 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__\r\n      .EquipmentsBySpace(\r\n        spaceID,\r\n        null,\r\n        'DESC',\r\n        null,\r\n        limit,\r\n        equipsToken.nextToken // nextToken\r\n      )\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 ? currentMission.id : 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(equipment: Equipment, imageFile: File): Promise<Note> {\r\n    return uploadFileToS3(this.prefix.image, imageFile, equipment.id).then(\r\n      async (url) => {\r\n        if (url) {\r\n          const currentMission = this.userService.currentMission(\r\n            equipment.spaceID\r\n          );\r\n          const note = await this.API.__proto__.CreateNote({\r\n            attachment: url,\r\n            type: TypeNote.IMAGE,\r\n            equipmentID: equipment.id,\r\n            ownerMissionID: currentMission ? currentMission.id : null,\r\n          });\r\n          await this.API.__proto__.UpdateEquipment({\r\n            id: equipment.id,\r\n            photo: url,\r\n          });\r\n          return note;\r\n        }\r\n        return null;\r\n      }\r\n    );\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    return this.API.__proto__\r\n      .UpdateEquipment(equip)\r\n      .then(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                await this.uploadImage(equipment, file);\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  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\r\n      .deleteOperation(operationToDelete.id)\r\n      .then((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  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 =\r\n            await getSignedImageUrlForEquipment(equip);\r\n        })\r\n      );\r\n      if (this.equipmentDomainFilter) {\r\n        filteredEquips = 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(this.zoneIDFilter, filteredEquips);\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(equipment, poi);\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(`${url}?model3D=${result.model3D}&sweep=true`, '_blank');\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(this.zoneIDFilter);\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 = 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      this.zoneChangeService.zoneChange\r\n        .pipe(takeUntil(this.destroy$))\r\n        .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 (this.currentSpaceID === this.navigatorService.currentSpaceID) {\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 = 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\r\n        .pipe(takeUntil(this.destroy$))\r\n        .subscribe((equipment) => {\r\n          if (this.currentSpaceID) {\r\n            this.updateDueToDelete(equipment);\r\n          }\r\n        });\r\n\r\n      this.createObservable\r\n        .pipe(takeUntil(this.destroy$))\r\n        .subscribe((equipment) => {\r\n          if (this.currentSpaceID) {\r\n            this.updateDueToCreate(equipment);\r\n          }\r\n        });\r\n\r\n      this.updateObservable\r\n        .pipe(takeUntil(this.destroy$))\r\n        .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}\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\">\r\n    <div class=\"row depend\">\r\n        <div class=\"col-md-5\">\r\n            <input id=\"searchbar\" type=\"text\" class=\"form-control\" placeholder=\"keyword\" />\r\n        </div>\r\n        <div class=\"col-md-5\">\r\n            <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onSubmit()\">{{ 'Search' |\r\n                translate}}</button>\r\n        </div>\r\n    </div>\r\n</div>","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\n\r\n@Pipe({\r\n  name: 'durationToString'\r\n})\r\nexport class DurationToStringPipe implements PipeTransform {\r\n    durationToString(\r\n        duration: number\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 = this.translate.instant(\"day(s)\");\r\n        const hoursString = this.translate.instant(\"hour(s)\");\r\n        const oneHourString = this.translate.instant(\"hour\");\r\n        const minutesString = this.translate.instant(\"minute(s)\");\r\n        const secondsString = this.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\r\n    constructor(private translate: TranslateService) { }\r\n\r\n    transform(duration: number): Observable<string> {\r\n        let subscript: Subscription;\r\n\r\n        const dateObserver: Observable<string> = new Observable((observer) => {\r\n            subscript = this.translate.onLangChange.subscribe((event) => {\r\n                observer.next(this.durationToString(duration));\r\n            });\r\n            observer.next(this.durationToString(duration));\r\n\r\n            return {\r\n                unsubscribe() {\r\n                    subscript.unsubscribe();\r\n                },\r\n            };\r\n        });\r\n        return dateObserver;\r\n    }\r\n\r\n}\r\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';\r\nimport { HashtagService } from '../services/models/hashtag.service';\r\n\r\n@Pipe({\r\n  name: 'hashtagFromID'\r\n})\r\nexport class HashtagFromIdPipe implements PipeTransform {\r\n\r\n  constructor(\r\n      private hashtagService: HashtagService\r\n    ) {}\r\n\r\n    async transform(hashtagID: string): Promise<string> {\r\n        if (this.hashtagService.currentHashtags.length === 0) {\r\n            return this.hashtagService.getHashtag(hashtagID).then((hashtag) => {\r\n                return hashtag.name;\r\n            });\r\n        }\r\n        const hashtag = this.hashtagService.currentHashtags.find(\r\n            (_hashtag) => _hashtag.id === hashtagID,\r\n        );\r\n        return hashtag ? hashtag.name : \"\";\r\n    }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n  name: 'safeUrl'\r\n})\r\nexport class SafeUrlPipe implements PipeTransform {\r\n    constructor(private sanitizer: DomSanitizer) { }\r\n\r\n    transform(url: any) {\r\n        return this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n    }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { Observable } from 'rxjs/internal/Observable';\r\n\r\n@Pipe({\r\n  name: 'timeDateString'\r\n})\r\nexport class TimeDateToLocalStringPipe implements PipeTransform {\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    dateTimeToLocalString(\r\n        date: number | string | Date,\r\n        mode?: string,\r\n    ): string {\r\n        let lang = \"en-EN\";\r\n        if (this.translate) {\r\n            /** Get current language */\r\n            lang = this.translate.getCurrentLang()\r\n                ? this.translate.getCurrentLang()\r\n                : this.translate.getFallbackLang();\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 \"time_zone\":\r\n                options = { hour: \"numeric\", minute: \"numeric\", timeZoneName: \"shortOffset\"};\r\n                break;\r\n            case \"day_time_zone_weekday\":\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            case \"date_time_zone\":\r\n                options = {\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    constructor(private translate: TranslateService) { }\r\n\r\n    transform(date: number | string | Date, mode?: any): Observable<string> {\r\n        let subscript: Subscription;\r\n\r\n        const dateObserver: Observable<string> = new Observable((observer) => {\r\n            subscript = this.translate.onLangChange.subscribe((event) => {\r\n                observer.next(\r\n                    this.dateTimeToLocalString(date, mode),\r\n                );\r\n            });\r\n            observer.next(this.dateTimeToLocalString(date, mode));\r\n\r\n            return {\r\n                unsubscribe() {\r\n                    subscript.unsubscribe();\r\n                },\r\n            };\r\n        });\r\n        return dateObserver;\r\n    }\r\n\r\n}\r\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 { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport function noEmptyValidator(): ValidatorFn {\r\n    return (control: AbstractControl): ValidationErrors | null => {\r\n      if(control.value && control.value !== ''){\r\n\r\n        const data = control.value.replace(/ /g, '');\r\n        return data === '' ? {isEmpty: control.value} : null;\r\n      }else{\r\n        return null;\r\n      }\r\n    };\r\n  }","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport function emailValidator(): ValidatorFn {\r\n    return (control: AbstractControl): ValidationErrors | null => {\r\n      const regex = /^(([^\\s\"(),.:;<>@[\\\\\\]]+(\\.[^\\s\"(),.:;<>@[\\\\\\]]+)*)|(\".+\"))@((\\[(?:\\d{1,3}\\.){3}\\d{1,3}])|(([\\dA-Za-z\\-]+\\.)+[A-Za-z]{2,}))$/;\r\n      return !regex.test(control.value) ? {email: control.value} : null;\r\n    };\r\n  }","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport function textValidator(): ValidatorFn {\r\n  return (control: AbstractControl): ValidationErrors | null => {\r\n    const regex = /[a-zA-Z1-9]/;\r\n    if (control.value && control.value !== '') {\r\n      return !regex.test(control.value) ? { text: control.value } : null;\r\n    } else {\r\n      return null;\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 { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ValidatorsService {\r\n\r\n  constructor() { }\r\n\r\n  /**\r\n   * return if control as error\r\n   * @param control \r\n   * @returns \r\n   */\r\n  public isControlError(control) {\r\n    return (control && control.invalid && control.touched);\r\n  }\r\n\r\n  /**\r\n   * return error of control\r\n   * @param control \r\n   * @returns \r\n   */\r\n  public getError(control) {\r\n    if (control.errors) {\r\n      if (control.errors.required) {\r\n        return 'errorForm.required';\r\n      }\r\n      if (control.errors.isEmpty) {\r\n        return 'errorForm.isEmpty';\r\n      }\r\n      if (control.errors.text) {\r\n        return 'errorForm.text';\r\n      }\r\n      if (control.errors.email) {\r\n        return 'errorForm.email';\r\n      }\r\n      if (control.errors.maxlength) {\r\n        return 'errorForm.maxLength';\r\n      }\r\n      if (control.errors.number) {\r\n        return 'errorForm.number';\r\n      }\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n\r\n}\r\n","import { Component, Input, 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    @Input() useLogo: boolean = true;\r\n\r\n    @Input() color: string = \"#53B6BB\";\r\n    constructor() { }\r\n\r\n    ngOnInit(): void {\r\n        document.documentElement.style.setProperty('--color', this.color);\r\n    }\r\n\r\n}\r\n","<div class=\"sk-fading-circle\">\r\n    <img *ngIf=\"useLogo\" 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 { UntypedFormBuilder, UntypedFormGroup, 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\nimport { noEmptyValidator } from '../../validators/no-empty.directive';\r\nimport { ValidatorsService } from '../../services/validators.service';\r\nimport { emailValidator } from '../../validators/email.directive';\r\nimport { textValidator } from '../../validators/text.directive';\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: UntypedFormGroup;\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: UntypedFormBuilder,\r\n    private userService: BaseUserService,\r\n    public validatorsService: ValidatorsService\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      title: ['', [Validators.required, Validators.maxLength(255), noEmptyValidator(), textValidator()]],\r\n      email: [(this.currentUser ? this.currentUser.email : ''), [Validators.required, emailValidator(), Validators.maxLength(255), textValidator()]],\r\n      description: ['', [Validators.required, noEmptyValidator(), textValidator()]],\r\n    });\r\n    this.loading = false;\r\n  }\r\n\r\n  async onSubmit() {\r\n    if (this.supportForm.valid) {\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\r\n}","<div class=\"modal-header\">\r\n    <h5 class=\"modal-title\" translate=\"Help\"></h5>\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                    [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['title'])}\"\r\n                    maxlength=\"255\">\r\n            </div>\r\n            <div class=\"invalid-feedback\">\r\n                <span data-testid=\"new-support-title-invalid\" [translate]=\"validatorsService.getError(supportForm.controls['title'])\"\r\n                    *ngIf=\" validatorsService.isControlError(supportForm.controls['title'])\"></span>\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                    [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['email'])}\"\r\n                    maxlength=\"255\">\r\n            </div>\r\n            <div class=\"invalid-feedback\">\r\n                <span data-testid=\"new-support-email-invalid\" [translate]=\"validatorsService.getError(supportForm.controls['email'])\"\r\n                    *ngIf=\" validatorsService.isControlError(supportForm.controls['email'])\"></span>\r\n            </div>\r\n        </div>\r\n        <div>\r\n            <label>{{'Description' | translate}} *</label>\r\n            <div>\r\n                <textarea formControlName=\"description\" class=\"form-control\"\r\n                    data-testid=\"new-support-description\"\r\n                    [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['description'])}\"></textarea>\r\n            </div>\r\n            <div class=\"invalid-feedback\" >\r\n                <span data-testid=\"new-support-description-invalid\" [translate]=\" validatorsService.getError(supportForm.controls['description'])\"\r\n                *ngIf=\"validatorsService.isControlError(supportForm.controls['description'])\"></span>\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\"\r\n        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.getCurrentLang()\r\n            ? this.translate.getCurrentLang()\r\n            : this.translate.getFallbackLang();\r\n        return lang.slice(1);\r\n    }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Cache } from \"aws-amplify\";\r\n\r\nexport enum CacheKeys {\r\n    INSTRUCTIONS_SHOWN = \"instructions_shown\",\r\n}\r\n@Injectable({\r\n    providedIn: \"root\",\r\n})\r\nexport class AmplifyCacheService {\r\n    constructor() {\r\n        const config = {\r\n            itemMaxSize: 3000, // 3000 bytes\r\n            defaultTTL: 36000000, // one hour\r\n        };\r\n        Cache.configure(config);\r\n        // this.getAllKeys();\r\n    }\r\n\r\n    /**\r\n     * Puts item in cache under a key\r\n     * @param key : string. Key for lookup.\r\n     * @param value : Iem to put (number, string, boolean, array or object)\r\n     * @param expires : number. Time in future in milliseconds Date.getTime()\r\n     * @param priority : number from 0 to 5. the cached item with the higher number will be expired first.\r\n     */\r\n    putInCache(\r\n        key: string,\r\n        value: any,\r\n        expires: number = null,\r\n        priority: number = 5,\r\n    ) {\r\n        const options = {\r\n            priority,\r\n            expires,\r\n        };\r\n        if (!expires) {\r\n            delete options.expires;\r\n        }\r\n        Cache.setItem(key, value, options);\r\n    }\r\n\r\n    /**\r\n     * Retrieves an item from the cache. It will return null if the item doesn’t exist or it has expired.\r\n     * @param key string. Lookup key.\r\n     * @returns any or null if nothing found.\r\n     */\r\n    getFromCache(key: string): any {\r\n        return Cache.getItem(key);\r\n    }\r\n\r\n    /**\r\n     * Removes item from cache.\r\n     * @param key string. Key to remove.\r\n     */\r\n    removeFromCache(key: string) {\r\n        Cache.removeItem(key);\r\n    }\r\n\r\n    /**\r\n     * Removes all of the items in the cache.\r\n     */\r\n    clearCache() {\r\n        Cache.clear();\r\n    }\r\n\r\n    /**\r\n     * Returns all of the keys available in the cache.\r\n     * @returns string[]\r\n     */\r\n    getAllKeys(): string[] | Promise<string[]> {\r\n        return Cache.getAllKeys();\r\n    }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { ProfileService } from '../../../services/models/profile.service';\r\nimport { uploadFileToS3, getSignedImageUrlForProfile } from '../../../services/s3.service';\r\nimport { BaseUserService } from '../../../services/user.service';\r\nimport { ProfileEntity } from '../../../types.service';\r\nimport * as CryptoJS from 'crypto-js';\r\nimport { Subscription } from 'rxjs';\r\n\r\nconst cache = {};\r\n@Component({\r\n    selector: 'lib-avatar',\r\n    template: `<img [src]=\"avatar\" />`,\r\n    styleUrls: [\"./avatar.component.scss\"],\r\n})\r\nexport class AvatarComponent implements OnInit {\r\n\r\n    @Input() size: number = 45;\r\n\r\n    @Input() userID: string;\r\n\r\n    currentUser: ProfileEntity;\r\n\r\n    avatar;\r\n\r\n    userSub: Subscription;\r\n\r\n    constructor(\r\n        private userService: BaseUserService,\r\n        private profileService: ProfileService,\r\n    ) {\r\n        this.userSub = this.userService.isChanged.subscribe((connected) => {\r\n            if (connected) {\r\n                this.currentUser = this.userService.cu;\r\n                this.setAvatar(this.currentUser);\r\n            }\r\n        });\r\n    }\r\n\r\n    async ngOnInit(): Promise<void> {\r\n        if (this.userID) {\r\n            const profile = await this.profileService.getProfile(this.userID);\r\n            if (profile) {\r\n                const user = new ProfileEntity(profile);\r\n                this.setAvatar(user);\r\n            }\r\n        } else {\r\n            this.currentUser = this.userService.cu;\r\n            this.setAvatar(this.currentUser);\r\n        }\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        if (this.userSub) {\r\n            this.userSub.unsubscribe();\r\n        }\r\n    }\r\n\r\n    async setAvatar(user: ProfileEntity) {\r\n        const { id, avatar, email } = user;\r\n\r\n        // If avatar is not cached, check first if we have an avatar URL to fetch\r\n        // from S3. If not, retrieve it from libravatar.\r\n        // TODO use in a Service to be able to change/upload freely.\r\n        if (!cache.hasOwnProperty(id)) {\r\n            if (!avatar && email) {\r\n                const md5hash = CryptoJS.MD5(email.trim().toLowerCase()).toString();\r\n                const avatar = `https://seccdn.libravatar.org/avatar/${md5hash}?s=${this.size}&default=identicon`;\r\n                const url = await fetch(avatar)\r\n                    .then((res) => res.blob())\r\n                    .then((blob) => {\r\n                        const file = new File([blob], \"avatar.jpeg\", {\r\n                            type: \"image/jpeg\",\r\n                        });\r\n                        return uploadFileToS3(\"avatars/\", file, id);\r\n                    });\r\n                await this.profileService.updateProfile({ id, avatar: url });\r\n                user.avatar = url;\r\n                cache[id] = avatar;\r\n            }\r\n            if (avatar) {\r\n                // TODO generating signed urls for avatar makes NO SENSE ($$$)\r\n                // Sorry got to copypaste that, but really need to get rid of\r\n                cache[id] = await getSignedImageUrlForProfile(user);\r\n            }\r\n        }\r\n        this.avatar = cache[id];\r\n    }\r\n}\r\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","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__.CommentsBySpace(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","/* 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 videojs from \"video.js\";\r\nimport { Subject } from 'rxjs';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n    CommentType,\r\n    FeatureType,\r\n    Plan,\r\n    PoiType,\r\n    Zone,\r\n} 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\nimport { ContentService } from '../content.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    planDivContent: HTMLElement;\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    lastRotation: number = 0;\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        // tagService: BaseTagService,\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        private contentService: ContentService\r\n    ) {\r\n        this.API = apiInjected;\r\n        this.matterportService.currentCameraPose.subscribe((pose) => {\r\n            this.updateRotation(pose.rotation.y);\r\n        });\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__\r\n            .PlansBySpace(spaceID)\r\n            .then((response) => response.items);\r\n    }\r\n\r\n    async getPlansForZone(zoneID: string): Promise<Plan[]> {\r\n        return this.API.__proto__\r\n            .PlansByZone(zoneID)\r\n            .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] = 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((plan) => plan.zone && plan.calibration);\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(plan: Plan, file: File): 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({\r\n            zoneID: { eq: zoneID },\r\n        });\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        divContentId: string = 'planDivPaneContent'\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.planDivContent = document.querySelector(\r\n            `#${divContentId}`\r\n        ) as HTMLElement;\r\n\r\n        this.planDiv.addEventListener('touchstart', this.handleTouch.bind(this));\r\n        this.planDiv.addEventListener('dblclick', this.onDblClickPlan.bind(this));\r\n\r\n        if (!currentPlan.annexe.includes('pdf')) {\r\n            this.imgPlan = await getMetaForImage(currentPlan.filepath);\r\n            //Rect use offsetWidth : height, not actual boundingClientRect because will be modified by the zoom.\r\n            const rect = {\r\n                width: this.planDivContent.offsetWidth,\r\n                height: this.planDivContent.offsetHeight,\r\n            };\r\n            const { coeffX, coeffY } = getCoefficientsForImage(this.imgPlan, rect);\r\n            this.coeffPlanX = coeffX;\r\n            this.coeffPlanY = coeffY;\r\n\r\n            this.planDivContent.style.backgroundImage = `url(${currentPlan.filepath})`;\r\n        } else {\r\n            await this.drawPdf(currentPlan);\r\n        }\r\n        this.planDivContent.style.backgroundSize = 'contain';\r\n        this.planDivContent.style.backgroundRepeat = 'no-repeat';\r\n\r\n        this.panzoom = panzoom(this.planDiv, {\r\n            bounds: true,\r\n            boundsPadding: 0,\r\n            maxZoom: 4,\r\n            zoomDoubleClickSpeed: 1, //disables double click zoom\r\n            //initialZoom: 4\r\n        });\r\n        this.panzoom.zoomAbs(0, 0, 4);\r\n        setTimeout(() => {\r\n            this.updateRotation(this.lastRotation);\r\n        }, 200);\r\n        return true;\r\n    }\r\n\r\n    clearPlanImage() {\r\n        if (this.planDivContent) {\r\n            this.planDivContent.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('canvas') as HTMLCanvasElement;\r\n\r\n            const context = canvas.getContext('2d') as CanvasRenderingContext2D;\r\n            GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/4.4.168/pdf.worker.min.mjs`;\r\n            const pdf = await getDocument(currentPlan.filepath).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 = {\r\n                    width: this.planDivContent.offsetWidth,\r\n                    height: this.planDivContent.offsetHeight,\r\n                };\r\n                const { coeffX, coeffY } = getCoefficientsForImage(this.imgPlan, rect);\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(\r\n        element: any,\r\n        tagType: PoiType,\r\n        currentPlan: Plan,\r\n        tagService: BaseTagService,\r\n        config: Config,\r\n        sizeButton: number = 10\r\n    ) {\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(element, tagType);\r\n                let tagIconImage: string;\r\n                switch (tagType) {\r\n                    case PoiType.TICKET: {\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                        break;\r\n                    }\r\n                    case PoiType.MEASURE:\r\n                        tagIconImage = config.my_config.icon_measure;\r\n                        break;\r\n                    case PoiType.OBJECT3D:\r\n                        tagIconImage = config.my_config.icon_object3d;\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 (\r\n                        tagType === PoiType.DATA &&\r\n                        element.type === FeatureType.INDICATOR_TEMP\r\n                    ) {\r\n                        tagIcon.src = tagService.getIconTagImageForFeature(element, poi);\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, sizeButton);\r\n                button.id = element.id;\r\n                this.planDivContent.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 + position.x * this.calibrationPlan.x;\r\n                    y =\r\n                        this.calibrationPlan.offsetY + 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 = await tagService.getHtmlToInject(tagType, element);\r\n                if (html != '') {\r\n                    this.htmlContentToInject.push({\r\n                        elementID: element.id,\r\n                        title: '',\r\n                        content: html,\r\n                        y,\r\n                        x,\r\n                        tagIcon: tagIconImage,\r\n                        url,\r\n                    });\r\n                } else {\r\n                    // when we don't have html => case of EMBED Comment type\r\n                    const commentEmbed = element.comments?.items.find(\r\n                        (com) => com.type === CommentType.EMBED && com.shownInTag\r\n                    );\r\n                    if (commentEmbed) {\r\n                        this.htmlContentToInject.push({\r\n                            elementID: element.id,\r\n                            title: element.title,\r\n                            content: `<iframe src=${commentEmbed.externalLink} height=\"200px\" width=\"100%\"></iframe>`,\r\n                            y,\r\n                            x,\r\n                            tagIcon: tagIconImage,\r\n                            url,\r\n                        });\r\n                    }\r\n                }\r\n\r\n                this.addListenersToButton(button, url, tagService, element);\r\n                this.updateRotation(this.lastRotation);\r\n            }\r\n        }\r\n    }\r\n\r\n    async drawUserPosition(currentSweep = this.currentSweep, sizeButton: number = 10) {\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.planDivContent.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                        sizeButton\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                this.moveOnPoint({ x: x + 5, y: y + 5 });\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Center the view of the plan on coordinates\r\n     * @param coordinate Coordinate on the plan\r\n     */\r\n    moveOnPoint(coordinate) {\r\n        if (this.planDiv) {\r\n            const scale = this.panzoom.getTransform().scale;\r\n            const moveX = this.planDiv.clientWidth / 2 - coordinate.x * scale;\r\n            const moveY = this.planDiv.clientHeight / 2 - coordinate.y * scale;\r\n            this.panzoom.moveTo(moveX, moveY);\r\n            this.planDivContent.style.transformOrigin = `${coordinate.x}px ${coordinate.y}px`;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Apply a rotation to the plan\r\n     * Buttons will remain in the correct rotation\r\n     * @param rotation\r\n     */\r\n    updateRotation(rotation) {\r\n        this.lastRotation = rotation;\r\n        if (this.planDivContent) {\r\n            this.planDivContent.style.transform = `rotate(${rotation}deg)`;\r\n            const buttons = this.planDivContent.querySelectorAll('button');\r\n            let rotationRegex = /(rotate\\(-?\\d*\\.?\\d+deg\\))/g;\r\n            // eslint-disable-next-line unicorn/no-array-for-each\r\n            buttons.forEach((button) => {\r\n                button.style.transform = button.style.transform.replace(rotationRegex, \"\") + ` rotate(${-rotation}deg)`;\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, sizeButton: number = 10) {\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        button.style.transform = `scale(${sizeButton/10})`\r\n  }\r\n\r\n    addListenersToButton(\r\n        button: HTMLButtonElement,\r\n        url: string,\r\n        tagService: BaseTagService = null,\r\n        element: any = null\r\n    ) {\r\n        let videoJsPlayer;\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(`#htmlTagDiv`) as HTMLElement;\r\n            this.detailTagDiv.style.top = `${event.clientY + 10}px`;\r\n            this.detailTagDiv.style.left = `${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\r\n            // handle image carousel fullscreen button\r\n            const imageFullscreenBtn = content.querySelector('#image-footer');\r\n            if (imageFullscreenBtn) {\r\n                imageFullscreenBtn.addEventListener('click', function () {\r\n                    if (tagService) {\r\n                        tagService.onActionImageClick(contentForButton.elementID);\r\n                    }\r\n                });\r\n            }\r\n\r\n            // handle booking fullscreen button\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            // handle document pdf fullscreen button\r\n            const docFullscreenBtn = content.querySelector('#doc-footer');\r\n            if (docFullscreenBtn && element) {\r\n                const documentUrl = tagService.getAnnexeForCommentTypeInFeature(\r\n                    element,\r\n                    CommentType.DOCUMENT\r\n                );\r\n                docFullscreenBtn.addEventListener('click', function () {\r\n                    if (tagService) {\r\n                        tagService.onActionDocClick(documentUrl);\r\n                    }\r\n                });\r\n            }\r\n\r\n            // handle video fullscreen button\r\n            const videoFullscreenBtn = content.querySelector('#btn-video-fullscreen');\r\n            if (videoFullscreenBtn && element) {\r\n                const videoUrl = tagService.getAnnexeForCommentTypeInFeature(\r\n                    element,\r\n                    CommentType.VIDEO\r\n                );\r\n                videoFullscreenBtn.addEventListener('click', function () {\r\n                    if (tagService) {\r\n                        tagService.onActionVideoClick(videoUrl);\r\n                    }\r\n                });\r\n            }\r\n\r\n            // handle Youtube video fullscreen button\r\n            const youtubeFullScreen = content.querySelector(\r\n                '#btn-video-fullscreen-youtube'\r\n            );\r\n            if (youtubeFullScreen && element) {\r\n                const youtubeUrl = tagService.getAnnexeForCommentTypeInFeature(\r\n                    element,\r\n                    CommentType.YOUTUBE\r\n                );\r\n                youtubeFullScreen.addEventListener('click', function () {\r\n                    if (tagService) {\r\n                        tagService.onActionYoutubeClick(youtubeUrl);\r\n                    }\r\n                });\r\n            }\r\n\r\n            // handle mute video button\r\n            const btnMute = document.getElementById('btn-mute');\r\n            const imgOn = document.getElementById('sound-on');\r\n            const imgOff = document.getElementById('sound-off');\r\n            const playerElement = document.getElementById(\"mus-video-tag\");\r\n\r\n            if (playerElement) {\r\n                videoJsPlayer = videojs(\"mus-video-tag\");\r\n                if (btnMute && videoJsPlayer) {\r\n                    btnMute.addEventListener('click', function () {\r\n                        if (videoJsPlayer.muted()) {\r\n                            videoJsPlayer.muted(false);\r\n                            if (imgOn && imgOff) {\r\n                                imgOn.style.display = 'inline-block';\r\n                                imgOff.style.display = 'none';\r\n                            }\r\n                        } else {\r\n                            videoJsPlayer.muted(true);\r\n                            if (imgOn && imgOff) {\r\n                                imgOn.style.display = 'none';\r\n                                imgOff.style.display = 'inline-block';\r\n                            }\r\n                        }\r\n                    });\r\n                }\r\n            }\r\n\r\n\r\n            // handle audio player buttons\r\n            const playerButton = document.querySelector('.audio-play-button');\r\n            const audio = document.getElementById('audio-tag') as HTMLMediaElement;\r\n            const timeline = document.querySelector(\r\n                '.timeline-tag'\r\n            ) as HTMLInputElement;\r\n            // const timelineValue = document.querySelector('.timeline-tag').value;\r\n            const soundButton = document.querySelector('.audio-sound-btn');\r\n            const playAudio = document.getElementById('play');\r\n            const pauseAudio = document.getElementById('pause');\r\n            const imgSoundOn = document.getElementById('audio-sound-on');\r\n            const imgSoundOff = document.getElementById('audio-sound-off');\r\n            const audioModal = document.getElementById('btn-audio-modal');\r\n            if (audio && playerButton && timeline) {\r\n                playerButton.addEventListener('click', function () {\r\n                    if (audio.paused) {\r\n                        audio.play();\r\n                        pauseAudio.style.display = 'inline-block';\r\n                        playAudio.style.display = 'none';\r\n                    } else {\r\n                        audio.pause();\r\n                        pauseAudio.style.display = 'none';\r\n                        playAudio.style.display = 'inline-block';\r\n                    }\r\n                });\r\n                soundButton.addEventListener('click', function () {\r\n                    if (audio.muted) {\r\n                        audio.muted = false;\r\n                        imgSoundOn.style.display = 'inline-block';\r\n                        imgSoundOff.style.display = 'none';\r\n                    } else {\r\n                        audio.muted = true;\r\n                        imgSoundOn.style.display = 'none';\r\n                        imgSoundOff.style.display = 'inline-block';\r\n                    }\r\n                });\r\n                function changeTimelinePosition() {\r\n                    if (audio.duration) {\r\n                        const percentagePosition =\r\n                            (100 * audio.currentTime) / audio.duration;\r\n                        const percentagePositionString = percentagePosition + '%';\r\n                        timeline.style.backgroundSize = percentagePositionString + ' 100%';\r\n                        timeline.value = percentagePosition.toString();\r\n                    }\r\n                }\r\n                audio.ontimeupdate = changeTimelinePosition;\r\n                function changeSeek() {\r\n                    const time = (parseInt(timeline.value) * audio.duration) / 100;\r\n                    audio.currentTime = time;\r\n                }\r\n                timeline.addEventListener('change', changeSeek);\r\n                timeline.addEventListener('input', changeSeek);\r\n                // handle audio click\r\n                if (audioModal && element) {\r\n                    const audioComment = element.comments?.items.find(\r\n                        (com) => com.type === CommentType.AUDIO && com.shownInTag\r\n                    );\r\n                    const audioCommentID = audioComment ? audioComment.id : '';\r\n                    audioModal.addEventListener('click', function () {\r\n                        if (tagService) {\r\n                            tagService.onActionAudioClick(audioCommentID);\r\n                        }\r\n                    });\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                    if (videoJsPlayer) {\r\n                        videoJsPlayer.dispose();\r\n                    }\r\n                }\r\n            }, 100);\r\n        });\r\n        button.addEventListener('click', async () => {\r\n            this.detailTagDiv.style.display = 'none';\r\n            if (videoJsPlayer) {\r\n                videoJsPlayer.dispose();\r\n            }\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.getElementById(id);\r\n            if (button) {\r\n                button.remove();\r\n            }\r\n        }\r\n    }\r\n\r\n    clearAllButtons() {\r\n        if (this.planDivContent) {\r\n            const buttons = this.planDivContent.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    updateAllButtonsStyle(properties: Array<string>, values: Array<string>) {\r\n        if (this.planDivContent) {\r\n            const buttons = this.planDivContent.querySelectorAll('button');\r\n            // eslint-disable-next-line unicorn/no-array-for-each\r\n            buttons.forEach(function (currentValue) {\r\n                properties.forEach((property, i) => {\r\n                    if (property === \"transform\") {\r\n                        //For saving the rotation and adding scale\r\n                        let rotationRegex = /(rotate\\(-?\\d*\\.?\\d+deg\\))/g;\r\n                        let rotationMatch = currentValue.style[property].match(rotationRegex);\r\n                        if (rotationMatch.length > 0) {\r\n                            currentValue.style[property] = `${values[i]} ${rotationMatch[0]}`;\r\n                        }\r\n                    } else {\r\n                        currentValue.style[property] = values[i];\r\n                    }\r\n\r\n                });\r\n            });\r\n        }\r\n    }\r\n\r\n    onPlanRemove() {\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        console.log('in resizePlan');\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: 4,\r\n            });\r\n            setTimeout(() => {\r\n                const rect = {\r\n                    width: this.planDivContent.offsetWidth,\r\n                    height: this.planDivContent.offsetHeight,\r\n                };\r\n                const { coeffX, coeffY } = getCoefficientsForImage(this.imgPlan, rect);\r\n                this.coeffPlanX = coeffX;\r\n                this.coeffPlanY = coeffY;\r\n                this.panzoom.zoomAbs(0, 0, 4);\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(position);\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(Math.pow(distX, 2) + Math.pow(distY, 2));\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(sizeButton: number = 10) {\r\n        // console.log(\"uploading tags from cache\");\r\n\r\n        for (const cached of this.cache.htmlContent) {\r\n            const button = document.createElement('button');\r\n            this.styleButton(button, cached.tagIcon, sizeButton);\r\n            button.id = cached.elementID;\r\n            this.planDivContent.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 + positionX * this.calibrationPlan.scaleX;\r\n        let y =\r\n            this.calibrationPlan.offsetY + positionY * this.calibrationPlan.scaleY;\r\n        const newCoeffX =\r\n            this.coeffPlanX / (this.imgPlan.width / this.calibrationPlan.imgWidth);\r\n        // console.log(\"newCoeffX\", newCoeffX);\r\n        const newCoeffY =\r\n            this.coeffPlanY / (this.imgPlan.height / this.calibrationPlan.imgHeight);\r\n        x = (x - this.calibrationPlan.offsetXPlan) / this.calibrationPlan.scalePlan;\r\n\r\n        y = (y - this.calibrationPlan.offsetYPlan) / this.calibrationPlan.scalePlan;\r\n        // console.log(x, y);\r\n\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 nmbImages = files.length;\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                nmbImagesImported: nmbImages,\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<Visit> {\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        // we cannot delete the images, because the folder of the visit can be used by another location\r\n        // removeAllFilesFromFolderS3(`visits/${visit.model3d}/sweeps`); \r\n        return visit;\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                            files.map(async (file) => {\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 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\nimport {ZoneChangeService} from \"../zoneChange.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        private zoneChangeService: ZoneChangeService,\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.zoneChangeService.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.setEmbeds(feature);\r\n        this.setIframes(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            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\r\n            this.featureTags.next(filteredFeatures); // for this zone\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            return;\r\n        }\r\n        if (feature.comments.items.some((com) => com.type === CommentType.YOUTUBE)) {\r\n            const youtubeComment = feature.comments.items.find((com) => com.type === CommentType.YOUTUBE);\r\n            // we can use the preview image of youtube\r\n            feature.coverImageUrl = `https://img.youtube.com/vi/${youtubeComment.externalLink}/0.jpg`;\r\n            return;\r\n        }\r\n        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\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    setEmbeds(feature: Feature) {\r\n        const embedComments = feature.comments.items\r\n            .filter((com) => com.type === CommentType.EMBED)\r\n            .sort((a, b) => a.index - b.index);\r\n        const embeds = [];\r\n        for (const embed of embedComments) {\r\n            embeds.push({\r\n                path: embed.externalLink,\r\n                title: embed.title,\r\n                description: embed.description,\r\n                showInTag: embed.shownInTag,\r\n            });\r\n        }\r\n        feature.embeds = embeds;\r\n    }\r\n\r\n    setIframes(feature: Feature) {\r\n        const iframeComments = feature.comments.items\r\n            .filter((com) => com.type === CommentType.IFRAME)\r\n            .sort((a, b) => a.index - b.index);\r\n        const iframes = [];\r\n        for (const iframe of iframeComments) {\r\n            iframes.push({\r\n                path: iframe.externalLink,\r\n                title: iframe.title,\r\n                description: iframe.description,\r\n                showInTag: iframe.shownInTag,\r\n            });\r\n        }\r\n        feature.iframes = iframes;\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 { Subject, takeUntil } from 'rxjs';\r\nimport { waitUntil } from '../../helpers.service';\r\nimport { Measurement, PoiType, Comment, POI, Zone } 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\nimport { ZoneChangeService } from \"../zoneChange.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  awsKinesisAnalytics: any; //AWS\r\n\r\n  floorsPerSpace: Zone[] = null;\r\n\r\n  selectedFloor: Zone = null;\r\n\r\n  private destroy$ = new Subject();\r\n\r\n  constructor(\r\n    @Inject('currentAwsKinesisAnalyticsService')\r\n    awsKinesisAnalyticsInjected: any,\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 zoneChangeService: ZoneChangeService,\r\n    private navigationService: NavigationService\r\n  ) {\r\n    this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;\r\n    const isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n    if (!isMuseumUser) {\r\n      this.zoneChangeService.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\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    this.zoneChangeService.floorHasChanged.subscribe((floor) => {\r\n      if (floor) {\r\n        this.selectedFloor = floor;\r\n      }\r\n    });\r\n  }\r\n  async initMeasurements() {\r\n    if (this.currentSpaceID) {\r\n      this.updating.next(true);\r\n      let measurements = await this.getMeasurementsForSpaceForUser(\r\n        this.currentSpaceID\r\n      );\r\n      if (measurements.length > 0) {\r\n        if (this.dateFilter) {\r\n          measurements = 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\r\n        if (this.zoneIDFilter) {\r\n          const commentsZone = 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\r\n        this.measurementsTags.next(measurements.map((m) => m.comment));\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\r\n    if (!!this.awsKinesisAnalytics\r\n      && !!this.awsKinesisAnalytics.record\r\n      && this.awsKinesisAnalytics.record()) {\r\n      this.awsKinesisAnalytics.getInstance().record(\r\n        // @ts-ignore\r\n        {\r\n          data: {\r\n            eventType: 'Object Creation',\r\n            objectType: 'measurement',\r\n            measurement: measurement,\r\n            //zoneId: spaceID,\r\n            user: this.userService.cu,\r\n            locationId: this.currentSpaceID,\r\n            timestamp: new Date(),\r\n            zoneId: this.zoneIDFilter,\r\n            floorId: this.selectedFloor?.id,\r\n          },\r\n          streamName: 'smarterplanKinesis-analytics',\r\n          // partitionKey: \"\",\r\n        },\r\n        'AWSKinesis'\r\n      );\r\n    }\r\n\r\n    // Check if a date filter is currently applied\r\n    if (this.dateFilter && this.dateFilter.length === 2) {\r\n      // Update the end date of the filter to the current date to ensure the newly created measurement is included\r\n      const newEndDate = new Date();\r\n      const newFilter = [this.dateFilter[0], newEndDate];\r\n      this.filterService.dateFilterUpdated(newFilter);\r\n    }\r\n\r\n    return measurement;\r\n  }\r\n\r\n  async getModel3DForMeasurement(measurement: Measurement): Promise<string> {\r\n    const poi = await this.poiService.getPoiByElementId(measurement.comment.id);\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  async getMeasurementsForSpaceForUser(\r\n    spaceID: string\r\n  ): Promise<Measurement[]> {\r\n    let comments = await this.commentService.getCommentsBySpaceID(spaceID);\r\n    comments = await this.filterService.filterMeasurementsForCurrentUserInSpace(\r\n      spaceID,\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(comment.id);\r\n          measurements.push(measurement);\r\n        })\r\n      );\r\n    }\r\n    return measurements;\r\n  }\r\n\r\n  unsubscribe() {\r\n    this.destroy$.next(true);\r\n    this.destroy$.complete();\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 { EquipmentService } from \"./equipment.service\";\r\nimport { FeatureService } from \"./feature.service\";\r\nimport { MeasurementService } from \"./measurement.service\";\r\nimport { MissionService } from \"./mission.service\";\r\nimport { PropertyService } from \"./property.service\";\r\nimport { TicketsService } from \"./ticket.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        private ticketService: TicketsService,\r\n        private equipService: EquipmentService,\r\n        private featureService: FeatureService,\r\n        private measurementService: MeasurementService,\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.ticketService.getTicketsBySpace(spaceID);\r\n        await Promise.all(\r\n            tickets.map(async (ticket) => {\r\n                await this.ticketService.deleteTicket(ticket);\r\n            }),\r\n        );\r\n        const equips = await this.equipService.getEquipmentsForSpace(spaceID);\r\n        await Promise.all(\r\n            equips.map(async (eq) => {\r\n                await this.equipService.deleteEquipment(eq);\r\n            }),\r\n        );\r\n        const features = await this.featureService.getFeaturesForSpace(spaceID);\r\n        await Promise.all(\r\n            features.map(async (feature) => {\r\n                await this.featureService.deleteFeature(feature);\r\n            }),\r\n        );\r\n\r\n        // measurements\r\n        const measures = await this.measurementService.getMeasurementsForSpaceForUser(spaceID);\r\n        await Promise.all(\r\n            measures.map(async (measure) => {\r\n                await this.measurementService.deleteMeasurement(measure);\r\n            }),\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, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { Observable, Subject, takeUntil } from 'rxjs';\r\nimport { waitUntil } from '../../../helpers.service';\r\nimport { SpaceService } from '../../../services/models/space.service';\r\nimport { VisitService } from '../../../services/models/visit.service';\r\nimport { ZoneService } from '../../../services/models/zone.service';\r\nimport { NavigatorService } from '../../../services/navigator.service';\r\nimport { ViewerService } from '../../../services/viewer.service';\r\nimport { Space, Visit, Zone } from '../../../types.service';\r\nimport { BaseUserService } from '../../../services/user.service';\r\nimport { ZoneChangeService } from \"../../../services/zoneChange.service\";\r\nimport { BaseVisibilityService } from '../../../services/baseVisibility.service';\r\n\r\n@Component({\r\n  selector: 'lib-navigation-bar',\r\n  templateUrl: './navigation-bar.component.html',\r\n  styleUrls: ['./navigation-bar.component.scss'],\r\n})\r\nexport class NavigationBarComponent implements OnInit {\r\n  awsKinesisAnalytics: any; //AWS\r\n\r\n  @ViewChild('navbarSelectMenu') navbarSelectMenu!: any;\r\n\r\n  locations: Space[];\r\n\r\n  currentLocationID: string;\r\n\r\n  currentModel3d: string;\r\n\r\n  selectedLocation: Space = null;\r\n\r\n  selectedModel3d: string;\r\n\r\n  selectedFloor: Zone = null;\r\n\r\n  selectedZone: Zone = null;\r\n\r\n  selectedChildZone: Zone = null;\r\n\r\n  visitsPerSpace: Visit[] = null;\r\n\r\n  floorsPerSpace: Zone[] = null;\r\n\r\n  zonesPerSpace: Zone[] = null;\r\n\r\n  zonesPerFloor: Zone[] = null;\r\n\r\n  childrenZones: Zone[] = null;\r\n\r\n  sweepToGo: string;\r\n\r\n  floorToGo: Zone;\r\n\r\n  destroy$ = new Subject();\r\n\r\n  navEvents: Observable<NavigationEnd>;\r\n\r\n  constructor(\r\n    @Inject('currentAwsKinesisAnalyticsService')\r\n    awsKinesisAnalyticsInjected: any,\r\n    private router: Router,\r\n    private spaceService: SpaceService,\r\n    private userService: BaseUserService,\r\n    private zoneService: ZoneService,\r\n    private visitService: VisitService,\r\n    private viewerService: ViewerService,\r\n    private navigatorService: NavigatorService,\r\n    private zoneChangeService: ZoneChangeService,\r\n    private baseVisibilityService: BaseVisibilityService\r\n  ) {\r\n    this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;\r\n    this.spaceService.locationUpdated\r\n      .pipe(takeUntil(this.destroy$))\r\n      .subscribe((locs) => {\r\n        this.locations = locs;\r\n        if (this.selectedLocation) {\r\n          this.selectedLocation = this.findLocationByID(\r\n            this.selectedLocation.id\r\n          ); // Update Object (object address will change);\r\n        }\r\n      });\r\n    this.viewerService.viewerIsOn\r\n      .pipe(takeUntil(this.destroy$))\r\n      .subscribe(\r\n        (data: { spaceID: string; model3D: string; sweep: string | null }) => {\r\n          // console.log('menu navigation received update', data);\r\n          this.currentLocationID = data.spaceID;\r\n          this.currentModel3d = data.model3D;\r\n          if (!data.spaceID) {\r\n            this.selectedLocation = null;\r\n            localStorage.removeItem('locationId');\r\n            this.sendUpdateLocationEvent();\r\n            return;\r\n          }\r\n          if (\r\n            (!this.selectedLocation ||\r\n              this.selectedLocation.id !== data.spaceID) &&\r\n            this.locations\r\n          ) {\r\n            this.selectedLocation = this.findLocationByID(data.spaceID);\r\n            this.sendUpdateLocationEvent();\r\n          }\r\n        }\r\n      );\r\n\r\n    /**\r\n     * We listen for Location change event\r\n     */\r\n    this.navigatorService.locationIDChange\r\n      .pipe(takeUntil(this.destroy$))\r\n      .subscribe((id: string) => {\r\n        this.clearData();\r\n        this.currentLocationID = id;\r\n        this.selectedLocation = this.findLocationByID(id);\r\n        this.navigatorService.currentNavBarLocationID = id;\r\n        this.onSelectedLocationChanged().catch((e) => console.log(e.message));\r\n      });\r\n\r\n    this.zoneChangeService.zonesForUserChange\r\n      .pipe(takeUntil(this.destroy$))\r\n      .subscribe(async (zones) => {\r\n        if (zones) {\r\n          await waitUntil(() => this.floorsPerSpace !== null);\r\n          const floorZone = zones.find(\r\n            (zone) => zone.layer && zone.layer.name === 'FLOOR'\r\n          );\r\n          if (floorZone) {\r\n            this.selectedFloor = this.floorsPerSpace.find(\r\n              (f) => f.id === floorZone.id\r\n            );\r\n            // Emit event to dispatch value of  this.selectedFloor in all poi/ticket/equipment/measure services\r\n            this.zoneChangeService.floorHasChanged.emit(this.selectedFloor);\r\n            this.onFloorClick(false).catch((e) => console.log(e.message));\r\n          }\r\n        }\r\n      });\r\n  }\r\n\r\n  async ngOnInit() {\r\n    await this.initLocations();\r\n    this.handleStartUrl();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.destroy$.next(true);\r\n    this.destroy$.complete();\r\n  }\r\n\r\n  // Capture the \"id\" in localisation/:id routes\r\n  handleStartUrl() {\r\n    if (this.router.url.includes('localisation/')) {\r\n      const paths = this.router.url.split('/'); // /dashboard/localisation/fc0aadb7-3c89-4349-ad1f-bfe9b44916c0\r\n      // eslint-disable-next-line prefer-destructuring\r\n      const locID = paths[3];\r\n      if (this.currentLocationID !== locID) {\r\n        this.clearData();\r\n        this.currentLocationID = locID;\r\n        this.selectedLocation = this.findLocationByID(locID);\r\n        this.navigatorService.currentNavBarLocationID = locID;\r\n        this.onSelectedLocationChanged().catch((e) => console.log(e.message));\r\n      }\r\n    }\r\n  }\r\n\r\n  async initLocations() {\r\n    this.locations = this.spaceService.locationsForUser;\r\n    if (this.locations.length === 0) {\r\n      this.locations = await this.spaceService.getLocationsForCurrentUser();\r\n    }\r\n    if (this.currentLocationID && this.locations.length > 0) {\r\n      this.selectedLocation = this.findLocationByID(this.currentLocationID);\r\n      if (this.selectedLocation) {\r\n        this.sendUpdateLocationEvent();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Find a location with a given ID\r\n   * @param id ID for the location\r\n   * @returns The location or null if no location were found\r\n   */\r\n  findLocationByID(id: string): Space {\r\n    const space = this.locations.find((loc) => loc.id === id);\r\n    return space || null; /** Convert to null if undefined */\r\n  }\r\n\r\n  clearData(clearVisits: boolean = true) {\r\n    this.floorsPerSpace = null;\r\n    this.selectedFloor = null;\r\n    this.zonesPerFloor = null;\r\n    this.childrenZones = null;\r\n    this.selectedModel3d = null;\r\n    this.sweepToGo = null;\r\n    this.floorToGo = null;\r\n    this.selectedZone = null;\r\n    this.selectedChildZone = null;\r\n    if (clearVisits) {\r\n      this.visitsPerSpace = null;\r\n      this.zonesPerSpace = null;\r\n    }\r\n    localStorage.removeItem('locationId');\r\n    localStorage.removeItem('floorId');\r\n    localStorage.removeItem('zoneId');\r\n    localStorage.removeItem('childZoneId');\r\n  }\r\n\r\n  /**\r\n   * When the selectedLocation changes\r\n   * Send a event to locationIDChange from NavigatorService\r\n   * The event will be catch by this component and the filter bar will be update\r\n   */\r\n  sendUpdateLocationEvent() {\r\n    const locationID = this.selectedLocation ? this.selectedLocation.id : null;\r\n    this.navigatorService.locationIDChange.next(locationID);\r\n    if (this.selectedLocation) {\r\n      localStorage.setItem('locationId', this.selectedLocation.id);\r\n    } else {\r\n      localStorage.removeItem('locationId');\r\n    }\r\n  }\r\n\r\n  async onSelectedLocationChanged() {\r\n    if (!this.selectedLocation) {\r\n      return;\r\n    }\r\n    try {\r\n      this.visitsPerSpace = await this.visitService.getVisitsForSpaceForUser(\r\n        this.selectedLocation.id\r\n      );\r\n      this.zonesPerSpace = await this.zoneService.getZonesBySpaceForUser(\r\n        this.selectedLocation.id\r\n      );\r\n      if (this.visitsPerSpace.length === 1) {\r\n        this.selectedModel3d = this.visitsPerSpace[0].model3d;\r\n        this.floorsPerSpace = this.zonesPerSpace.filter(\r\n          (zone) => zone.layer && zone.layer.name.includes('FLOOR')\r\n        );\r\n        // sort from highest floor to lowest\r\n        this.floorsPerSpace.sort((a, b) => {\r\n          if (a.metadata && b.metadata) {\r\n            const metadataA = JSON.parse(a.metadata);\r\n            const metadataB = JSON.parse(b.metadata);\r\n            return (\r\n              metadataB.matterportFloorSequence -\r\n              metadataA.matterportFloorSequence\r\n            );\r\n          }\r\n          return a.name.localeCompare(b.name);\r\n        });\r\n        const multiFloorZones = this.zonesPerSpace.filter(\r\n          (zone) => zone.isMultipleFloorZone\r\n        );\r\n        // sort alphabetically\r\n        multiFloorZones.sort((a, b) => a.name.localeCompare(b.name));\r\n        // merge multiFloor and Floors\r\n        this.floorsPerSpace = [...this.floorsPerSpace, ...multiFloorZones];\r\n        if (this.floorsPerSpace.length === 1) {\r\n          [this.selectedFloor] = this.floorsPerSpace;\r\n          this.onFloorClick(false).catch((e) => console.log(e.message));\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.log('error onChosenLocation', error);\r\n    }\r\n  }\r\n\r\n  onLocationClick() {\r\n    this.clearData();\r\n    this.sendUpdateLocationEvent();\r\n  }\r\n\r\n  async onFloorClick(emitEvent = true) {\r\n    if (this.selectedFloor) {\r\n      localStorage.setItem('floorId', this.selectedFloor.id);\r\n    } else {\r\n      localStorage.removeItem('floorId');\r\n    }\r\n    if (this.selectedFloor && this.selectedFloor.isMultipleFloorZone) {\r\n      this.selectedZone = this.selectedFloor;\r\n      this.onZoneClick().catch((e) => console.log(e.message));\r\n      return;\r\n    } else {\r\n      this.onZoneClick().catch((e) => console.log(e.message));\r\n    }\r\n    this.sweepToGo = null;\r\n    this.selectedZone = null;\r\n    this.selectedChildZone = null;\r\n    localStorage.removeItem('zoneId');\r\n    localStorage.removeItem('childZoneId');\r\n    if (this.selectedFloor === null) {\r\n      this.navigatorService.navBarZoneIDChange.next(null);\r\n      this.navigatorService.currentNavBarZoneID = null;\r\n      return;\r\n    }\r\n    if (emitEvent) {\r\n      this.navigatorService.navBarZoneIDChange.next(this.selectedFloor.id);\r\n    }\r\n\r\n    this.navigatorService.currentNavBarZoneID = this.selectedFloor.id;\r\n    await waitUntil(\r\n      () => this.zonesPerSpace !== null && this.zonesPerSpace !== undefined\r\n    );\r\n    this.zonesPerFloor = this.zonesPerSpace.filter(\r\n      (zone) =>\r\n        // zone.id === this.selectedFloor.id ||\r\n        zone.parentID === this.selectedFloor.id\r\n    );\r\n    this.zonesPerFloor.sort((a, b) => {\r\n      const Collator = new Intl.Collator(undefined, {\r\n        numeric: true,\r\n        sensitivity: 'accent',\r\n      });\r\n      return (\r\n        Collator.compare(a.code_ref, b.code_ref) ||\r\n        Collator.compare(a.name, b.name)\r\n      );\r\n    });\r\n  }\r\n\r\n  async onZoneClick() {\r\n    this.selectedChildZone = null;\r\n    localStorage.removeItem('childZoneId');\r\n    if (this.selectedZone) {\r\n      localStorage.setItem('zoneId', this.selectedZone.id);\r\n    } else {\r\n      localStorage.removeItem('zoneId');\r\n    }\r\n    if (this.selectedZone === null) {\r\n      if (this.selectedFloor === null) {\r\n        this.navigatorService.navBarZoneIDChange.next(null);\r\n        this.navigatorService.currentNavBarZoneID = null;\r\n      } else {\r\n        this.navigatorService.navBarZoneIDChange.next(this.selectedFloor.id);\r\n        this.navigatorService.currentNavBarZoneID = this.selectedFloor.id;\r\n      }\r\n      this.sendKinesisAnalyticsEventForZone(\r\n        this.selectedZone?.id,\r\n        this.selectedZone?.name\r\n      ).catch((e) => console.log(e.message));\r\n      return;\r\n    }\r\n    this.childrenZones = this.zonesPerSpace.filter(\r\n      (zone) => zone.parentID === this.selectedZone.id\r\n    );\r\n    this.navigatorService.navBarZoneIDChange.next(this.selectedZone.id);\r\n    this.navigatorService.currentNavBarZoneID = this.selectedZone.id;\r\n    this.sendKinesisAnalyticsEventForZone(\r\n      this.selectedZone?.id,\r\n      this.selectedZone?.name\r\n    ).catch((e) => console.log(e.message));\r\n  }\r\n\r\n  onChildZoneClick() {\r\n    if (this.selectedChildZone) {\r\n      localStorage.setItem('childZoneId', this.selectedChildZone?.id);\r\n    } else {\r\n      localStorage.removeItem('childZoneId');\r\n    }\r\n  }\r\n\r\n  async sendKinesisAnalyticsEventForZone(\r\n    zoneId: string,\r\n    zoneName: string\r\n  ): Promise<void> {\r\n    if (!!this.awsKinesisAnalytics && !!this.awsKinesisAnalytics.record && this.awsKinesisAnalytics.record()) {\r\n      this.awsKinesisAnalytics.getInstance().record(\r\n        // @ts-ignore\r\n        {\r\n          data: {\r\n            eventType: 'Zone Change',\r\n            zoneId: zoneId,\r\n            zoneName: zoneName,\r\n            locationId: this.selectedLocation?.id,\r\n            locationName: this.selectedLocation?.name,\r\n            user: this.userService?.cu,\r\n            timestamp: new Date(),\r\n            floorId: this.selectedFloor?.id,\r\n            childZoneId: this.selectedChildZone?.id,\r\n          },\r\n          streamName: 'smarterplanKinesis-analytics',\r\n          // partitionKey: \"\",\r\n        },\r\n        'AWSKinesis'\r\n      );\r\n    }\r\n  }\r\n\r\n  async onVisitClick(event) {\r\n    this.clearData(false);\r\n    const index = event.target.value;\r\n    const visit = this.visitsPerSpace[index];\r\n    this.selectedModel3d = visit.model3d;\r\n    const parentZoneForVisit = await this.visitService.getDefaultZoneForVisit(\r\n      visit\r\n    );\r\n    this.floorsPerSpace = this.zonesPerSpace.filter(\r\n      (zone) =>\r\n        zone.layer &&\r\n        zone.layer.name.includes('FLOOR') &&\r\n        zone.parentID === parentZoneForVisit.id\r\n    );\r\n  }\r\n\r\n  async goTo() {\r\n    this.viewerService.goToTriggered.next();\r\n    if (this.selectedZone && !this.selectedZone.virtual) {\r\n      this.sweepToGo = this.selectedZone.startSweepID\r\n        ? this.selectedZone.startSweepID\r\n        : this.selectedZone.sweepIDs[0];\r\n    }\r\n    if (this.selectedFloor && !this.selectedZone) {\r\n      this.floorToGo = this.selectedFloor;\r\n    }\r\n    if (this.isWithinSameVisit()) {\r\n      this.goToSweepOrFloor();\r\n    } else {\r\n      if (this.sweepToGo) {\r\n        this.viewerService.setSweepToMove(this.sweepToGo);\r\n      }\r\n      if (this.floorToGo && this.floorsPerSpace.length !== 1) {\r\n        this.navigatorService.floorToGo = this.floorToGo;\r\n      }\r\n      this.router\r\n        .navigate(['visit', this.selectedLocation.id], {\r\n          queryParams: { model3D: this.selectedModel3d },\r\n        })\r\n        .catch((e) => console.log(e.message));\r\n    }\r\n  }\r\n\r\n  isWithinSameVisit(): boolean {\r\n    return (\r\n      this.currentLocationID === this.selectedLocation.id &&\r\n      this.selectedModel3d === this.currentModel3d\r\n    );\r\n  }\r\n\r\n  goToSweepOrFloor() {\r\n    if (this.sweepToGo) {\r\n      this.navigatorService.goToSweepWithRotation(this.sweepToGo);\r\n    }\r\n    if (this.floorToGo) {\r\n      this.navigatorService.goToFloor(this.floorToGo);\r\n    }\r\n  }\r\n\r\n  // hasHistory(): boolean {\r\n  //     return this.navigatorService.modelHasHistory(this.selectedModel3d);\r\n  // }\r\n\r\n  canGo(): boolean {\r\n    const viewerIsReady =\r\n      this.viewerService.isLoaded && this.viewerService.showingViewer;\r\n    const noViewer = !this.viewerService.showingViewer;\r\n    return viewerIsReady || noViewer;\r\n  }\r\n\r\n  showLocation(): string {\r\n    if (\r\n      window.innerWidth < 750 &&\r\n      this.navbarSelectMenu &&\r\n      this.navbarSelectMenu.nativeElement.className.search('show') === -1 &&\r\n      this.selectedLocation\r\n    ) {\r\n      return this.selectedLocation.name;\r\n    }\r\n    return '';\r\n  }\r\n\r\n  onHideClick() {\r\n    this.baseVisibilityService.isChangePositionVisible.next(false);\r\n  }\r\n}\r\n","<nav class=\"navbar navbar-expand-md navbar-dark navbar-inverse second-nav\">\r\n    <div class=\"d-flex w-100\">\r\n        <div #navbarSelectMenu class=\"w-100\" id=\"nav-item-container-blue\">\r\n            <div class=\"d-flex flex-column flex-md-row p-1 mt-2\">\r\n                <select class=\"form-control flex-fill location select-menu\" [(ngModel)]=\"selectedLocation\"\r\n                    (ngModelChange)=\"onLocationClick()\">\r\n                    <option [ngValue]=\"null\" selected>{{ 'Location' | translate }}</option>\r\n                    <option *ngFor=\"let loc of locations; index as index\" [ngValue]=\"loc\"> {{ loc.name }}</option>\r\n                </select>\r\n                <select class=\"form-control flex-fill select-menu\" (change)=\"onVisitClick($event)\"\r\n                    *ngIf=\"visitsPerSpace && visitsPerSpace.length > 1\">\r\n                    <option value=\"default\" selected disabled hidden>{{'Visit' | translate}}</option>\r\n                    <option *ngFor=\"let visit of visitsPerSpace; index as index\" value=\"{{index}}\">{{ visit.name}}\r\n                    </option>\r\n                </select>\r\n                <select class=\"form-control flex-fill floor select-menu\" [(ngModel)]=\"selectedFloor\"\r\n                    (ngModelChange)=\"onFloorClick()\">\r\n                    <option [ngValue]=\"null\" selected>{{'Floor' | translate}}</option>\r\n                    <option *ngFor=\"let floor of floorsPerSpace\" [ngValue]=\"floor\">{{ floor.name}}</option>\r\n                </select>\r\n                <select class=\"form-control flex-fill select-menu zone\" [(ngModel)]=\"selectedZone\"\r\n                    (ngModelChange)=\"onZoneClick()\">\r\n                    <option [ngValue]=\"null\" selected>{{'Zone' | translate}}</option>\r\n                    <option *ngFor=\"let zone of zonesPerFloor\" [ngValue]=\"zone\"><span\r\n                            *ngIf=\"zone.code_ref\">{{zone.code_ref}}_</span>{{zone.name}}</option>\r\n                </select>\r\n                <select class=\"form-control flex-fill select-menu\" [(ngModel)]=\"selectedChildZone\"\r\n                    *ngIf=\"childrenZones && childrenZones.length>0\" (ngModelChange)=\"onChildZoneClick()\">\r\n                    <option [ngValue]=\"null\" selected disabled>{{'Zone' | translate}}</option>\r\n                    <option *ngFor=\"let zone of childrenZones\" [ngValue]=\"zone\">{{ zone.name}}</option>\r\n                </select>\r\n                <!-- <select class=\"form-control flex-fill\">\r\n                    <option i18n>{{'Favorites' | translate}}</option>\r\n                </select> -->\r\n            </div>\r\n            <div class=\"row align-items-center justify-content-center ml-0 p-1\" *ngIf=\"showLocation()\">\r\n                <p class=\"fw-bold lh-base align-middle text-center\">\r\n                    {{ showLocation() }}\r\n                </p>\r\n            </div>\r\n            <div class=\"row align-items-center justify-content-center ml-0 p-1\">\r\n                <button (click)=\"goTo()\"\r\n                    class=\"btn btn-outline-primary rounded-pill w-25 mx-2 w-md-fit-content h-md-fit-content align-self-md-center btn-3d\"\r\n                    [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\">\r\n                    <i class=\"icon-go-to-3d d-inline-block\"></i> {{'3D visit' | translate}}\r\n                </button>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</nav>","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { NgbDate, NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Pipe({\r\n  name: 'formatDateNumberToDigits'\r\n})\r\nexport class FormatDateNumberToDigitsPipe implements PipeTransform {\r\n\r\n  constructor(\r\n    public formatter: NgbDateParserFormatter,\r\n    ){}\r\n\r\n  transform(date: any): any {\r\n    let [day, month, year] = this.formatter.format(date).split(\"/\")\r\n    if (day) {\r\n      const nDate = new Date(parseInt(year), parseInt(month)-1, parseInt(day))\r\n      const result = nDate.toLocaleDateString(undefined, {\r\n        year: \"numeric\",\r\n        month: \"2-digit\",\r\n        day: \"2-digit\",\r\n      })\r\n      return result;\r\n    }\r\n    return this.formatter.format(date) \r\n  }\r\n}\r\n","import { Component, OnInit, Input } 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\nimport { BaseVisibilityService } from '../../services/baseVisibility.service';\r\nimport {\r\n  NgbDate,\r\n  NgbCalendar,\r\n  NgbDateParserFormatter,\r\n} from '@ng-bootstrap/ng-bootstrap';\r\nimport { AmplifyCacheService } from '../../services/amplify-cache.service';\r\nimport { FilterService } from '../../services/filter.service';\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  user: ProfileEntity;\r\n\r\n  mission: Mission;\r\n\r\n  public isCollapsed = true;\r\n\r\n  isVisitor = true;\r\n\r\n  isVisible = false;\r\n\r\n  isChangePositionVisible: boolean = false;\r\n\r\n  isManager: boolean;\r\n\r\n  userSubscription: Subscription;\r\n\r\n  navSubscription: Subscription;\r\n\r\n  hoveredDate: NgbDate | null = null;\r\n\r\n  fromDate: NgbDate | null;\r\n\r\n  toDate: NgbDate | null;\r\n\r\n  @Input() cacheName: string | null;\r\n\r\n  cache: { from: number; to: number } | null;\r\n\r\n  isDateFilterApplied: boolean = false;\r\n\r\n  dateChanged: boolean = false;\r\n\r\n  changePositionSubscription?: Subscription;\r\n\r\n  private searchInput?: HTMLInputElement;\r\n\r\n  filterSubscription\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    private baseVisibilityService: BaseVisibilityService,\r\n    public calendar: NgbCalendar,\r\n    public formatter: NgbDateParserFormatter,\r\n    private filterService: FilterService,\r\n    private cacheService: AmplifyCacheService\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    this.changePositionSubscription = this.baseVisibilityService.isChangePositionVisible.subscribe((data) => {\r\n      this.isChangePositionVisible = data;\r\n    });\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.update();\r\n\r\n    if (this.cacheName) {\r\n      this.cache = this.cacheService.getFromCache(this.cacheName);\r\n    }\r\n\r\n    if (this.cache) {\r\n      this.isDateFilterApplied = true;\r\n      let { from, to } = this.cache;\r\n      this.toDate = this.getNgbDate(to);\r\n      this.fromDate = this.getNgbDate(from);\r\n\r\n      localStorage.setItem('startDate', from.toString());\r\n      localStorage.setItem('endDate', to.toString());\r\n      this.filterService.dateFilterUpdated([new Date(from), new Date(to)]);\r\n    } else {\r\n      this.fromDate = null;\r\n      this.toDate = null;\r\n      localStorage.removeItem('startDate');\r\n      localStorage.removeItem('endDate');\r\n\r\n      this.filterService.dateFilterUpdated(null);\r\n    }\r\n\r\n    // This allows updating the inputs when measurement.service changes the date programmatically\r\n    this.filterSubscription = this.filterService.subscribeToDataFilterUpdate((dateRange: Date[] | null) => {\r\n      if (dateRange && dateRange.length === 2) {\r\n        // 1. Convert JS Date objects to NgbDate for display\r\n        const from = dateRange[0].getTime();\r\n        const to = dateRange[1].getTime();\r\n\r\n        this.fromDate = this.getNgbDate(from);\r\n        this.toDate = this.getNgbDate(to);\r\n\r\n        // 2. Update local cache reference to prevent the \"Apply\" button from activating\r\n        this.cache = { from, to };\r\n\r\n        // 3. Update visual state\r\n        this.isDateFilterApplied = true;\r\n        this.dateChanged = false; // We consider it synchronized\r\n      } else {\r\n        // If the filter is cleared externally\r\n        this.fromDate = null;\r\n        this.toDate = null;\r\n        this.isDateFilterApplied = false;\r\n        this.cache = null;\r\n      }\r\n    });\r\n  }\r\n\r\n  private onSearchKeydown = (event: KeyboardEvent) => {\r\n    if (event.key === 'Enter') this.onSubmit();\r\n  };\r\n\r\n  ngAfterViewInit() {\r\n    this.searchInput = document.querySelector('#mainSearchBar') as HTMLInputElement;\r\n    this.searchInput?.addEventListener('keydown', this.onSearchKeydown);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.searchInput?.removeEventListener('keydown', this.onSearchKeydown);\r\n    this.userSubscription?.unsubscribe();\r\n    this.navSubscription?.unsubscribe();\r\n    this.changePositionSubscription?.unsubscribe();\r\n    this.filterSubscription?.unsubscribe();\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('#mainSearchBar') as HTMLInputElement;\r\n    const searchValue = input.value.toLowerCase();\r\n    if (searchValue !== '') {\r\n      const baseUrl = location.origin;\r\n      window.open(`${baseUrl}/dashboard/search?term=${searchValue}`, '_blank');\r\n    }\r\n  }\r\n\r\n  onToggleVisible() {\r\n    this.isVisible = !this.isVisible;\r\n  }\r\n\r\n  openSupportForm() {\r\n    this.supportService.openSupportForm(SupportModalComponent);\r\n  }\r\n\r\n  onChangePositionClick() {\r\n    this.baseVisibilityService.isChangePositionVisible.next(\r\n      !this.isChangePositionVisible\r\n    );\r\n  }\r\n\r\n  getNgbDate(date: number): NgbDate {\r\n    let dt = new Date(date);\r\n    dt.setMinutes(dt.getMinutes() - dt.getTimezoneOffset()); // convert to UTC\r\n    return new NgbDate(\r\n      dt.getUTCFullYear(),\r\n      dt.getUTCMonth() + 1,\r\n      dt.getUTCDate()\r\n    );\r\n  }\r\n\r\n  onDateSelection(date: NgbDate) {\r\n    if (!this.fromDate && !this.toDate) {\r\n      this.fromDate = date;\r\n    } else if (\r\n      this.fromDate &&\r\n      !this.toDate &&\r\n      date &&\r\n      date.after(this.fromDate)\r\n    ) {\r\n      this.toDate = date;\r\n    } else {\r\n      this.toDate = null;\r\n      this.fromDate = date;\r\n    }\r\n    this.isDateChanged();\r\n  }\r\n\r\n  isDateChanged() {\r\n    if (this.fromDate && this.toDate) {\r\n      if (this.cache) {\r\n        this.dateChanged =\r\n          !this.fromDate.equals(this.getNgbDate(this.cache.from)) ||\r\n          !this.toDate.equals(this.getNgbDate(this.cache.to));\r\n      }\r\n    }\r\n  }\r\n\r\n  isHovered(date: NgbDate) {\r\n    return (\r\n      this.fromDate &&\r\n      !this.toDate &&\r\n      this.hoveredDate &&\r\n      date.after(this.fromDate) &&\r\n      date.before(this.hoveredDate)\r\n    );\r\n  }\r\n\r\n  isInside(date: NgbDate) {\r\n    return this.toDate && date.after(this.fromDate) && date.before(this.toDate);\r\n  }\r\n\r\n  isRange(date: NgbDate) {\r\n    return (\r\n      date.equals(this.fromDate) ||\r\n      (this.toDate && date.equals(this.toDate)) ||\r\n      this.isInside(date) ||\r\n      this.isHovered(date)\r\n    );\r\n  }\r\n\r\n  validateInput(currentValue: NgbDate | null, input: string): NgbDate | null {\r\n    const parsed = this.formatter.parse(input);\r\n    return parsed && this.calendar.isValid(NgbDate.from(parsed))\r\n      ? NgbDate.from(parsed)\r\n      : currentValue;\r\n  }\r\n\r\n  emitRange() {\r\n    if (this.fromDate && this.toDate) {\r\n      const from = new Date(\r\n        this.fromDate.year,\r\n        this.fromDate.month - 1,\r\n        this.fromDate.day\r\n      );\r\n      const to = new Date(\r\n        this.toDate.year,\r\n        this.toDate.month - 1,\r\n        this.toDate.day,\r\n        23,\r\n        59\r\n      );\r\n      this.cacheService.putInCache(this.cacheName, {\r\n        from: from.getTime(),\r\n        to: to.getTime(),\r\n      });\r\n      this.cache = { from: from.getTime(), to: to.getTime() };\r\n      this.filterService.dateFilterUpdated([from, to]);\r\n      this.isDateFilterApplied = true;\r\n      this.dateChanged = false;\r\n    }\r\n  }\r\n\r\n  onClearDates() {\r\n    this.fromDate = null;\r\n    this.toDate = null;\r\n    this.isDateFilterApplied = false;\r\n    this.cache = null;\r\n    this.cacheService.removeFromCache(this.cacheName);\r\n    this.filterService.dateFilterUpdated(null);\r\n  }\r\n\r\n  onApply() {\r\n    if (this.fromDate && this.toDate) {\r\n      this.emitRange();\r\n    }\r\n\r\n    //transform ngbDate to date objet then put dates in timestamp in localStorage to share it with Retool\r\n    if (this.fromDate) {\r\n      const startDate = new Date(\r\n        this.fromDate.year,\r\n        this.fromDate.month - 1,\r\n        this.fromDate.day\r\n      );\r\n      localStorage.setItem('startDate', startDate.getTime().toString());\r\n    }\r\n    if (this.toDate) {\r\n      const endDate = new Date(\r\n        this.toDate.year,\r\n        this.toDate.month - 1,\r\n        this.toDate.day\r\n      );\r\n      localStorage.setItem('endDate', endDate.getTime().toString());\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 order-md-0\" [routerLink]=\"['/dashboard']\">\r\n          <img alt=\"SmarterPlan\" src=\"../assets/images/logos/logo-immo.png\">\r\n        </div>\r\n        <div class=\"ms-auto nav-item dropdown profile_pic-container order-md-2\">\r\n          <div class=\"profile_pic dropdown-toggle\" data-testid=\"dropdown-menu-button\" 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\" data-testid=\"user-management-btn\" 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 data-testid=\"logout-auth-btn\" class=\"dropdown-item\" (click)=\"signOut()\">{{\"Logout\" |\r\n              translate}}</button>\r\n          </div>\r\n        </div>\r\n        <button class=\"navbar-toggler order-md-1\" (click)=\"navbarCollapse.toggle()\" type=\"button\"\r\n          [attr.aria-expanded]=\"!isCollapsed\" aria-controls=\"navbar-collapse\">\r\n          <span class=\"navbar-toggler-icon\"></span>\r\n        </button>\r\n        <div class=\"navbar-collapse order-md-1\" #navbarCollapse=\"ngbCollapse\" [(ngbCollapse)]=\"isCollapsed\"\r\n          [animation]=\"false\">\r\n          <form\r\n            class=\"form-inline m-0 mt-2 form-container d-flex justify-content-start align-items-start align-items-md-center flex-column flex-md-row flex-nowrap filters-menu-block\">\r\n            <div class=\"input-group search-button-container d-flex flex-row flex-nowrap p-0 m-0\">\r\n              <input class=\"form-control search-button m-1\" placeholder=\"keyword\" id=\"mainSearchBar\" type=\"text\">\r\n              <button class=\"btn btn-outline-primary rounded-pill m-1 w-fit-content h-fit-content align-self-md-center\"\r\n                (click)=\"onSubmit()\">{{'Search' |\r\n                translate}}</button>\r\n            </div>\r\n            <div class=\"input-group search-button-container d-flex flex-row flex-nowrap p-0 m-0\">\r\n              <div class=\"input-group date-selector m-1\">\r\n                <input #dpFromDate class=\"form-control\" placeholder=\"dd/MM/yyyy\" name=\"dpFromDate\"\r\n                  [value]=\"fromDate | formatDateNumberToDigits\"\r\n                  (input)=\"fromDate = validateInput(fromDate, dpFromDate.value)\">\r\n                <div class=\"input-group-append\">\r\n                  <button class=\"btn btn-outline-secondary calendar\" (click)=\"datepicker.toggle()\"\r\n                    type=\"button\"></button>\r\n                </div>\r\n              </div>\r\n              <input name=\"datepicker\" class=\"form-control visually-hidden\" ngbDatepicker #datepicker=\"ngbDatepicker\"\r\n                [autoClose]=\"'outside'\" (dateSelect)=\"onDateSelection($event)\" [displayMonths]=\"2\" [dayTemplate]=\"t\"\r\n                outsideDays=\"hidden\" [startDate]=\"fromDate || calendar.getToday()\" [container]=\"'body'\" tabindex=\"-1\">\r\n              <ng-template #t let-date let-focused=\"focused\">\r\n                <span class=\"custom-day\" [class.focused]=\"focused\" [class.range]=\"isRange(date)\"\r\n                  [class.faded]=\"isHovered(date) || isInside(date)\" (mouseenter)=\"hoveredDate = date\"\r\n                  (mouseleave)=\"hoveredDate = null\">\r\n                  {{ date.day }}\r\n                </span>\r\n              </ng-template>\r\n              <span class=\"ms-1 p-2\">{{'to' | translate}}</span>\r\n              <div class=\"input-group date-selector m-1\">\r\n                <input #dpToDate class=\"form-control\" placeholder=\"dd/MM/yyyy\" name=\"dpToDate\"\r\n                  [value]=\"toDate | formatDateNumberToDigits\" (input)=\"toDate = validateInput(toDate, dpToDate.value)\">\r\n                <div class=\"input-group-append\">\r\n                  <button class=\"btn btn-outline-secondary calendar\" (click)=\"datepicker.toggle()\"\r\n                    type=\"button\"></button>\r\n                </div>\r\n              </div>\r\n            </div>\r\n            <div class=\"input-group search-button-container d-flex flex-row flex-nowrap p-0 m-1 justify-content-evenly\">\r\n              <button\r\n                class=\"btn btn-primary rounded-pill ms-1 w-25 w-md-fit-content h-md-fit-content align-self-md-center\"\r\n                type=\"button\" (click)=\"onApply()\" *ngIf=\"!isDateFilterApplied || dateChanged\">\r\n                {{'Apply' | translate}}\r\n              </button>\r\n              <span\r\n                class=\"appliedText ms-1 py-2 align-self-md-center pb-md-0 mx-2 w-md-fit-content h-md-fit-content align-self-md-center\"\r\n                *ngIf=\"isDateFilterApplied && !dateChanged\">\r\n                <span class=\"iconify\" data-icon=\"ion:checkmark\" data-width=\"15\" data-height=\"15\"></span>\r\n                {{\"Applied\" | translate}}\r\n              </span>\r\n              <button\r\n                class=\"btn btn-outline-primary rounded-pill w-25 mx-2 w-md-fit-content h-md-fit-content align-self-md-center\"\r\n                type=\"button\" (click)=\"onClearDates()\">{{'Clear'\r\n                |\r\n                translate}}</button>\r\n              <div\r\n                class=\"change-position-button align-self-end pb-2 align-self-md-center mx-2 pb-md-0 flex-nowrap w-25 w-md-fit-content h-md-fit-content\">\r\n                <input type=\"checkbox\" class=\"btn-check\" id=\"btn-check-outlined\" autocomplete=\"off\">\r\n                <label class=\"link-primary cursor-pointer text-decoration-underline\" (click)=\"onChangePositionClick()\"\r\n                  for=\"btn-check-outlined\">{{\r\n                  (isChangePositionVisible ? \"Close\" : \"Move to\") | translate }}</label>\r\n              </div>\r\n            </div>\r\n          </form>\r\n        </div>\r\n      </div>\r\n    </nav>\r\n    <lib-navigation-bar *ngIf=\"isVisible && isChangePositionVisible\"></lib-navigation-bar>\r\n  </div>\r\n  <div *ngIf=\"isVisitor && isVisible\">\r\n    <div class=\"visitor-div\">\r\n      <div class=\"logo-container\" data-testid=\"dropdown-menu-button\">\r\n        <img class=\"img-logo\" alt=\"SmarterPlanLogo\" src=\"../assets/images/logos/logo-reserve.png\">\r\n      </div>\r\n      <div class=\"avatar-container-menu\">\r\n        <div class=\"profile_pic dropdown-toggle cursor-pointer\" data-bs-toggle=\"dropdown\">\r\n          <lib-avatar></lib-avatar>\r\n        </div>\r\n        <div class=\"dropdown-menu dropdown-menu-right\">\r\n          <button class=\"dropdown-item\" (click)=\"localeService.modal()\">{{'Language' | translate}}</button>\r\n          <button class=\"dropdown-item\" (click)=\"openSupportForm()\">{{\"Help\" | translate}}</button>\r\n          <button data-testid=\"logout-auth-btn\" class=\"dropdown-item\" (click)=\"signOut()\">{{\"Logout\" |\r\n            translate}}</button>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>","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 { 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\nimport { FormatDateNumberToDigitsPipe } from './pipes/format-date-number-to-digits.pipe';\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    LoaderComponent,\r\n    SupportModalComponent,\r\n    FormatDateNumberToDigitsPipe\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    AvatarComponent,\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 {\r\n  Comment,\r\n  DbObjectType,\r\n  Equipment,\r\n  Feature,\r\n  POI,\r\n  PoiType,\r\n  TagAction,\r\n  Ticket,\r\n  CommentType,\r\n} from '../types.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root', \r\n})\r\n\r\nexport class BaseTagService {\r\n  constructor() {}\r\n\r\n  async getHtmlToInject(\r\n    tagType: PoiType,\r\n    object: DbObjectType\r\n  ): Promise<string> {\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(object: DbObjectType, tagType: PoiType): 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(equip: Equipment): Promise<string> {\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(ticket: Ticket): Promise<string> {\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(feature: Feature): Promise<string> {\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(measure: Comment): Promise<string> {\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(feature: Feature): Promise<string> {\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(feature: Feature): Promise<string> {\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(\r\n      `getSignedTagIconSource is not implemented in the base class.`\r\n    );\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    throw new Error(`getIconTagImageForFeature is not implemented in the base class. \r\n                         Please override this method in your extended class.`);\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  getAnnexeForCommentTypeInFeature(\r\n    feature: Feature,\r\n    commentType: CommentType\r\n  ): string {\r\n    throw new Error(`getAnnexeForCommentTypeInFeature is not implemented in the base class. \r\n        Please override this method in your extended class.`);\r\n  }\r\n\r\n  getBillboardMediaToEmbed(object: DbObjectType): {\r\n    comment: Comment;\r\n    tagDescription: string;\r\n  } {\r\n    throw new Error(`getBillboardMediaToEmbed 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 { 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 {catchError, Subject} from 'rxjs';\r\nimport {removeNullKeysFromObject, wait, waitUntil} from '../helpers.service';\r\nimport {\r\n  LevelStatus,\r\n  Layer,\r\n  Node,\r\n  Zone,\r\n  Navigation,\r\n  Plan,\r\n} 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 {\r\n  uploadJsonToS3,\r\n  uploadBase64Image,\r\n  removeAllFilesFromFolderS3,\r\n  uploadBase64ImageWithRetry,\r\n  listFilesInFolder,\r\n} from './s3.service';\r\nimport {BaseUserService} from './user.service';\r\nimport {ViewerService} from './viewer.service';\r\n\r\ndeclare global {\r\n  interface Window {\r\n    MP_SDK: { connect: Function };\r\n  }\r\n}\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 sweepProcessedCount: Subject<number> = new Subject<number>();\r\n\r\n  public totalSweepsCount: Subject<number> = new Subject<number>();\r\n\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\r\n  async initSdkForModel(modelID: string): Promise<boolean> {\r\n    this.stop = false;\r\n\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      throw 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    const showcaseWindow = iframe.contentWindow;\r\n    return new Promise((res, rej) => {\r\n      iframe.addEventListener(\r\n        'load',\r\n        async () => {\r\n          try {\r\n            this.sdk = await showcaseWindow.MP_SDK.connect(\r\n              iframe,\r\n              'qn9wsasuy5h2fzrbrn1nzr0id',\r\n              '3.11'\r\n            );\r\n            // Subscribe 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              }.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('the entire up-to-date collection', collection);\r\n                this.sweeps = collection;\r\n              }.bind(this),\r\n            });\r\n            // remove labels\r\n            await this.sdk.Settings.update('labels', false);\r\n            let timeoutExpired = false;\r\n            // start timeout\r\n            setTimeout(() => (timeoutExpired = true), 7000);\r\n            await waitUntil(\r\n              () =>\r\n                (this.sweeps !== undefined && this.floors !== undefined) ||\r\n                timeoutExpired === true\r\n            );\r\n            if (timeoutExpired) {\r\n              // we are likely in matterport error case (that we cannot catch!)\r\n              console.log('timeout intitialising Matterport');\r\n              return rej(new Error('error init Matterport'));\r\n            }\r\n            console.log('init done');\r\n            return res(true);\r\n          } catch (e) {\r\n            console.error(e);\r\n            rej(new Error('error init Matterport'));\r\n          }\r\n        });\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    overrideExisting = true\r\n  ): Promise<boolean> {\r\n    if (!this.sweeps) {\r\n      return Promise.reject(new Error('no sweeps initialized'));\r\n    }\r\n    let appIsLoaded = false;\r\n    \r\n\r\n    this.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 === 'appphase.playing') {\r\n        console.log('The app is playing');\r\n        appIsLoaded = true;\r\n      }\r\n    });\r\n\r\n    await waitUntil(() => appIsLoaded === true);\r\n\r\n    if (reloading) {\r\n      // perform only 360 import since we are reloading\r\n      await this.import360images(overrideExisting);\r\n      return Promise.resolve(true);\r\n    }\r\n\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 (!mainZone) {\r\n      return Promise.reject(new Error('missing data (no main Building Zone)'));\r\n    }\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    // 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(createdDefaultZone.id, node);\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('could create navigation', navigationInput.id);\r\n        }\r\n      })\r\n    );\r\n    await this.import360images(overrideExisting);\r\n    return Promise.resolve(true);\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(overrideExisting = true): 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      const nmbScans = Object.keys(scans).length;\r\n      \r\n      this.totalSweepsCount.next(nmbScans);\r\n\r\n      const start = overrideExisting ? 0 : await this.getUploadedImageCount(this.modelID);\r\n    \r\n      for (let index = start; index < nmbScans; index += 1) {\r\n\r\n        if (!this.stop) {\r\n\r\n          await this.sdk.Sweep.moveTo(scans[index].uuid, {rotation : {x: 0, y: 0}, transition : this.sdk.Sweep.Transition.INSTANT, transitionTime: 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\r\n          /**Upload on S3 are asynchronous, in order to no slow down the process*/\r\n          uploadBase64ImageWithRetry(\r\n            img,\r\n            scans[index].uuid,\r\n            `visits/${this.modelID}/sweeps/`,\r\n            'sweep',\r\n            5\r\n          ).then((r) =>{\r\n            this.sweepProcessedCount.next(index);\r\n            if(index === nmbScans - 1){\r\n              console.log('Import 360 done');\r\n              resolve(true);\r\n              this.removeFrame();\r\n              this.stop = true;\r\n            }\r\n          }).catch((e)=>{\r\n            console.log(\"Error uploading scan : \", e);\r\n          });\r\n\r\n\r\n        } else {\r\n          console.log('Abandoning import because it was cancelled');\r\n          resolve(false);\r\n          this.removeFrame();\r\n          break;\r\n        }\r\n      }\r\n\r\n      resolve(true);\r\n      this.removeFrame();\r\n      \r\n    });\r\n  }\r\n\r\n  async getUploadedImageCount(modelID){\r\n    try{\r\n      const images = await listFilesInFolder(`visits/${modelID}/sweeps/`);\r\n      return images.length;\r\n    }catch(e){\r\n      return 0;\r\n    }\r\n  }\r\n\r\n  async moveToFloor(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    // look up for sequence number (the safest method)\r\n    let floorMatterport = Object.values(this.floors).find(\r\n      (floor) => floor.sequence === matterportFloorSequence\r\n    );\r\n    if (!floorMatterport) {\r\n      floorMatterport = Object.values(this.floors).find(\r\n        (floor) => floorName.includes(floor.name) && floor.name != ''\r\n      );\r\n    }\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      let retry = true;\r\n      while (retry) {\r\n        try {\r\n          const floorIndex = await this.sdk.Floor.moveTo(\r\n            floorMatterport.sequence\r\n          );\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  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    console.log('current floor', this.currentFloor);\r\n    console.log('sweeps for floor', sweepsForFloor.length);\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,\r\n      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.stop = true;\r\n      this.removeFrame();\r\n    }, 500);\r\n  }\r\n\r\n  removeFrame() {\r\n    if (this.currentFrame) {\r\n      this.currentFrame.remove();\r\n    }\r\n  }\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 {Event, IUpdate, Object3D, Zone} from \"../../types.service\";\r\nimport {Subject} from \"rxjs\";\r\nimport {BaseUserService} from \"../user.service\";\r\nimport {NavigatorService} from \"../navigator.service\";\r\nimport {FilterService} from \"../filter.service\";\r\nimport {ZoneChangeService} from \"../zoneChange.service\";\r\n\r\n@Injectable({\r\n  providedIn: \"root\",\r\n})\r\nexport class Object3DService {\r\n  API: any; //AWS APIService\r\n\r\n  objects3DUpdated: Subject<{\r\n    space: Object3D[];\r\n    zone: Object3D[];\r\n  }> = new Subject();\r\n\r\n  currentObjects3D: {\r\n    space: Object3D[];\r\n    zone: Object3D[]\r\n  }\r\n    = {\r\n    space: [],\r\n    zone: []\r\n  };\r\n\r\n  // bad name!\r\n  // currentObjects3D: {\r\n  //   space: Object3D[];\r\n  //   zonesMap: Map<string, Object3D[]>;\r\n  // } = {\r\n  //   space: [],\r\n  //   zonesMap: new Map(),\r\n  // };\r\n\r\n  updateDone: Subject<boolean> = 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 object3D */\r\n  object3DDomainFilter: string[] = null;\r\n\r\n  updating: Subject<boolean> = new Subject();\r\n\r\n  currentlyUpdating = false;\r\n\r\n  deleteObservable: Subject<Object3D> = new Subject();\r\n\r\n  createObservable: Subject<Object3D> = new Subject();\r\n\r\n  updateObservable: Subject<Object3D> = new Subject();\r\n\r\n  isMuseumUser = false;\r\n\r\n  isUpdating = false;\r\n\r\n  private destroy$ = new Subject();\r\n\r\n  private selectedObject3D: any; // selected from sprite carrousel viewer (lib of objects3D)\r\n\r\n  constructor(@Inject('currentAPIService') apiInjected: any,\r\n              private userService: BaseUserService,\r\n              private navigatorService: NavigatorService,\r\n              private zoneChangeService: ZoneChangeService,\r\n              private filterService: FilterService) {\r\n    this.API = apiInjected;\r\n    // this.isMuseumUser = this.userService.hasOnlyMuseumRole(); // Not used yet!\r\n\r\n    this.objects3DUpdated.subscribe((list) => {\r\n      this.currentObjects3D = list;\r\n    });\r\n\r\n    this.zoneChangeService.zoneChange.subscribe((zone) => {\r\n      this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n      if (!this.currentSpaceID) {\r\n        this.objects3DUpdated.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.initObjects3D();\r\n      }\r\n    });\r\n\r\n    this.updateDone.subscribe(() => {\r\n      if (this.currentSpaceID) {\r\n          this.initObjects3D().catch(e => console.log(e));\r\n      }\r\n    });\r\n  }\r\n\r\n  async getObjects3DBySpace(spaceID: string): Promise<Array<Object3D>> {\r\n    const list: Object3D[] = [];\r\n    if (this.API.__proto__.hasOwnProperty('Objects3DBySpace')) {\r\n      const objects = await this.API.__proto__.Objects3DBySpace(spaceID);\r\n      if (objects) {\r\n        for (const object of objects.items) {\r\n          const zoneObject = {...object} as Object3D;\r\n          list.push(zoneObject);\r\n        }\r\n      }\r\n      return list;\r\n    } else {\r\n      throw new Error('objects3DBySpace not implemented');\r\n    }\r\n\r\n  }\r\n\r\n  async initObjects3D() {\r\n    if (!this.currentSpaceID) {\r\n      return;\r\n    }\r\n    this.updating.next(true);\r\n    this.isUpdating = true;\r\n    const object3DList = await this.getObjects3DBySpace(this.currentSpaceID);\r\n\r\n    if (object3DList.length > 0) {\r\n      let filteredObjects3D = [...object3DList];\r\n      this.currentObjects3D.zone = filteredObjects3D; // not sorted!\r\n\r\n      filteredObjects3D =\r\n        await this.filterService.filterObjectsForCurrentUserInSpace(\r\n          filteredObjects3D,\r\n          this.currentSpaceID\r\n        );\r\n      this.currentObjects3D.space = filteredObjects3D;\r\n      if (this.zoneIDFilter) {\r\n        filteredObjects3D = await this.filterService.filterObjectsForZone(\r\n          filteredObjects3D,\r\n          this.zoneIDFilter\r\n        );\r\n      }\r\n      this.currentObjects3D.zone = filteredObjects3D;\r\n      this.objects3DUpdated.next(this.currentObjects3D);\r\n    } else {\r\n      this.objects3DUpdated.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  getSelectedObject3D(): any {\r\n    return this.selectedObject3D;\r\n  }\r\n\r\n  setSelectedObject3D(selected: any): void {\r\n    this.selectedObject3D = selected;\r\n  }\r\n\r\n\r\n  // THE FOLLOWING LOGIC IS EQUIP. SPECIFIC\r\n  // initSubscriptions() {\r\n  //   if (!this.isMuseumUser) {\r\n  //     this.navigatorService.zoneChange\r\n  //       .pipe(takeUntil(this.destroy$))\r\n  //       .subscribe((zone) => {\r\n  //         if (!zone || !this.navigatorService.currentSpaceID) {\r\n  //           this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n  //           this.objects3DUpdated.next({space: [], zone: null});\r\n  //           this.zoneIDFilter = null;\r\n  //           this.currentObjects3D = {\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 (this.currentSpaceID === this.navigatorService.currentSpaceID) {\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.updateObjects3DForZone();\r\n  //           } else {\r\n  //             this.currentSpaceID = 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.initObjects3D().catch(e => console.log(e));\r\n  //           }\r\n  //         }\r\n  //       });\r\n  //\r\n  //     this.deleteObservable\r\n  //       .pipe(takeUntil(this.destroy$))\r\n  //       .subscribe((object3D) => {\r\n  //         if (this.currentSpaceID) {\r\n  //           this.updateDueToDelete(object3D);\r\n  //         }\r\n  //       });\r\n  //\r\n  //     this.createObservable\r\n  //       .pipe(takeUntil(this.destroy$))\r\n  //       .subscribe((object3D) => {\r\n  //         if (this.currentSpaceID) {\r\n  //           this.updateDueToCreate(object3D);\r\n  //         }\r\n  //       });\r\n  //\r\n  //     this.updateObservable\r\n  //       .pipe(takeUntil(this.destroy$))\r\n  //       .subscribe((object3D) => {\r\n  //         if (this.currentSpaceID) {\r\n  //           this.updateDueToObject3DUpdated(object3D);\r\n  //         }\r\n  //       });\r\n  //   }\r\n  // }\r\n\r\n  updateDueToDelete(deletedObject3D: Object3D) {\r\n    // console.log(\"update due to delete\", deletedObject3D);\r\n    const obj = this.currentObjects3D.space.find(\r\n      (_equip) => _equip.id === deletedObject3D.id\r\n    );\r\n    if (obj) {\r\n      const index = this.currentObjects3D.space.indexOf(obj);\r\n      this.currentObjects3D.space.splice(index, 1);\r\n    }\r\n    // THE FOLLOWING LOGIC IS EQUIP. SPECIFIC\r\n    // for (const zone of this.currentObjects3D.zonesMap.keys()) {\r\n    //   const equipToDelete = this.currentObjects3D.zonesMap\r\n    //     .get(zone)\r\n    //     .find((_equip) => _equip.id === deletedObject3D.id);\r\n    //   if (equipToDelete) {\r\n    //     const index = this.currentObjects3D.zonesMap\r\n    //       .get(zone)\r\n    //       .indexOf(equipToDelete);\r\n    //     this.currentObjects3D.zonesMap.get(zone).splice(index, 1);\r\n    //   }\r\n    // }\r\n    this.objects3DUpdated.next({\r\n      space: this.currentObjects3D.space,\r\n      zone: this.currentObjects3D.zone,\r\n      // THE FOLLOWING LOGIC IS EQUIP. SPECIFIC\r\n      // zone: this.currentObjects3D.zonesMap.get(this.zoneIDFilter),\r\n    }); // for lateral menu\r\n  }\r\n\r\n  updateDueToCreate(createdObj3D: Object3D) {\r\n    this.currentObjects3D.space.unshift(createdObj3D);\r\n    this.currentObjects3D.zone.unshift(createdObj3D);\r\n\r\n    // this.currentObjects3D.zonesMap\r\n    //   .get(this.zoneIDFilter)\r\n    //   .unshift(createdEquip);\r\n    this.objects3DUpdated.next({\r\n      space: this.currentObjects3D.space,\r\n      zone: this.currentObjects3D.zone,\r\n      // THE FOLLOWING LOGIC IS EQUIP. SPECIFIC\r\n      // zone: this.currentObjects3D.zonesMap.get(this.zoneIDFilter),\r\n    }); // for lateral menu\r\n  }\r\n\r\n  // THE FOLLOWING LOGIC IS EQUIP. SPECIFIC\r\n  // Not implemented since not used yet!\r\n  // updateDueToObject3DUpdated(updatedObject3D: Object3D) {\r\n  //   const obj = this.currentObjects3D.space.find(\r\n  //     (_equip) => _equip.id === updatedObject3D.id\r\n  //   );\r\n  //   if (obj) {\r\n  //     const index = this.currentObjects3D.space.indexOf(obj);\r\n  //     // Not used yet!\r\n  //     // if (this.isArchived(obj)) {\r\n  //     //   // we remove archived equipment\r\n  //     //   this.currentObjects3D.space.splice(index, 1);\r\n  //     // } else {\r\n  //     this.currentObjects3D.space.splice(index, 1, updatedObject3D);\r\n  //     // }\r\n  //   }\r\n  //   for (const zone of this.currentObjects3D.zonesMap.keys()) {\r\n  //     const equipToUpd = this.currentObjects3D.zonesMap\r\n  //       .get(zone)\r\n  //       .find((_equip) => _equip.id === updatedObject3D.id);\r\n  //     if (equipToUpd) {\r\n  //       const index = this.currentObjects3D.zonesMap\r\n  //         .get(zone)\r\n  //         .indexOf(equipToUpd);\r\n  //       // Not used yet!\r\n  //       // if (this.isArchived(obj)) {\r\n  //       //   this.currentObjects3D.zonesMap.get(zone).splice(index, 1);\r\n  //       // } else {\r\n  //       this.currentObjects3D.zonesMap\r\n  //         .get(zone)\r\n  //         .splice(index, 1, updatedObject3D);\r\n  //       // }\r\n  //     }\r\n  //   }\r\n  //   this.objects3DUpdated.next({\r\n  //     space: this.currentObjects3D.space,\r\n  //     zone: this.currentObjects3D.zonesMap.get(this.zoneIDFilter),\r\n  //   }); // for lateral menu\r\n  // }\r\n\r\n  // THE FOLLOWING LOGIC IS EQUIP. SPECIFIC\r\n  // Not implemented since not used yet!\r\n  // async updateObjects3DForZone() {\r\n  //   this.updating.next(true);\r\n  //   let filteredObjects3D: Object3D[] = [];\r\n  //   if (this.currentObjects3D.space.length > 0) {\r\n  //     if (\r\n  //       this.zoneIDFilter &&\r\n  //       this.currentObjects3D.zonesMap.has(this.zoneIDFilter)\r\n  //     ) {\r\n  //       filteredObjects3D = this.currentObjects3D.zonesMap.get(this.zoneIDFilter);\r\n  //     } else {\r\n  //       filteredObjects3D = (await this.filterService.filterObjectsForZone(\r\n  //         this.currentObjects3D.space,\r\n  //         this.zoneIDFilter,\r\n  //         this.currentZone\r\n  //       )) as Object3D[];\r\n  //\r\n  //       this.currentObjects3D.zonesMap.set(this.zoneIDFilter, [\r\n  //         ...filteredObjects3D,\r\n  //       ]);\r\n  //     }\r\n  //     // Not implemented yet!\r\n  //     // if (this.object3DDomainFilter) {\r\n  //     //   filteredObjects3D = this.filterService.filterObjects3DByDomainList(\r\n  //     //     filteredObjects3D,\r\n  //     //     this.object3DDomainFilter\r\n  //     //   );\r\n  //     // }\r\n  //     // Not used for objects now!\r\n  //     // this.objects3DTags.next(filteredObjects3D); // adding tags only for the current zone\r\n  //     this.objects3DUpdated.next({\r\n  //       space: this.currentObjects3D.space,\r\n  //       zone: filteredObjects3D,\r\n  //     }); // for lateral menu\r\n  //   } else {\r\n  //     this.objects3DUpdated.next({space: [], zone: []}); // for lateral menu\r\n  //   }\r\n  //   this.updating.next(false);\r\n  // }\r\n\r\n\r\n  /**\r\n   * Not implemented yet! May be usefull for the future (filter 3D objects for a given authorized user: example libs of objects)\r\n   * @param objectId\r\n   */\r\n  // async getObjects3DBySpaceForUser(spaceID: string): Promise<Object3D[]> {\r\n  //   const missionForLocation = this.userService.currentMission(spaceID);\r\n  //   const list = [];\r\n  //   if (missionForLocation && missionForLocation.objectId) {\r\n  //     const allowedObject3D = await this.getObject3D(missionForLocation.objectId);\r\n  //     allowedObject3D.virtual = this.zoneIsVirtual(allowedObject3D);\r\n  //     if (!allowedObject3D.parent) {\r\n  //       // the whole building is authorized\r\n  //       return this.getObjects3DBySpace(spaceID);\r\n  //     }\r\n  //     list.push(allowedObject3D);\r\n  //     // allow all children zones of an allowed parent\r\n  //     const children = (await this.API.__proto__.objects3DByObject3D(allowedObject3D.id)).items;\r\n  //     if (children.length > 0) {\r\n  //       for (const child of children) {\r\n  //         const childObject3D = { ...child } as Object3D;\r\n  //         childObject3D.virtual = this.zoneIsVirtual(child);\r\n  //         list.push(childObject3D);\r\n  //       }\r\n  //     }\r\n  //     // allow the parent Floor of the allowed zone\r\n  //     if (allowedObject3D.parent.layer && allowedObject3D.parent.layer.name === \"FLOOR\") {\r\n  //       list.push(allowedObject3D.parent);\r\n  //     }\r\n  //   } else {\r\n  //     return this.getObjects3DBySpace(spaceID);\r\n  //   }\r\n  //   return list;\r\n  // }\r\n\r\n  async deleteObject3D(objectId: string): Promise<Object3D> {\r\n    return this.API.__proto__.DeleteObject3D({id: objectId});\r\n  }\r\n\r\n  async create(input: Object3D): Promise<Object3D> {\r\n    return this.API.__proto__.CreateObject3D(input);\r\n  }\r\n\r\n  async updateObject3D(input: any): Promise<Object3D> {\r\n    return this.API.__proto__.UpdateObject3D(input);\r\n  }\r\n\r\n  /** Basic CRUD operations */\r\n  async readObject3D(id: string) {\r\n    return this.API.__proto__.GetObject3D(id);\r\n  }\r\n\r\n  async adaptObject3D(object3D: Object3D): Promise<Object3D> {\r\n    // Not required here!\r\n    return object3D;\r\n  }\r\n\r\n  async updateObject3DWithEvent(\r\n    object3D: IUpdate & Partial<Object3D>,\r\n    event?: Event,\r\n  ): Promise<Object3D> {\r\n    const receivedObject3D = await this.updateObject3D(object3D);\r\n    if (receivedObject3D) {\r\n      console.log(\"Updated object3D :\");\r\n      console.log(receivedObject3D);\r\n      // Not sent currently: ask if needed...\r\n      // if (event) {\r\n      //   await this.addEventToObject3D(receivedObject3D, event);\r\n      // }\r\n      this.updateDone.next(true);\r\n    }\r\n    return receivedObject3D;\r\n  }\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__.ListProperties({\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        // TODO: Change this (UUID can change depending on DB)\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 { 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}","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport function floatValidator(): ValidatorFn {\r\n  return (control: AbstractControl): ValidationErrors | null => {\r\n    const regex = /^[+-]?([0-9]*[.])?[0-9]+$/;\r\n    if (control.value && control.value !== '') {\r\n      return !regex.test(control.value) ? { number: control.value } : null;\r\n    } else {\r\n      return null;\r\n    }\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/services/zoneChange.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\nexport * from './lib/mattertagData';\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/object3D.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/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\nexport * from './lib/services/validators.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\nexport * from './lib/components/menu-bar/avatar/avatar.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\r\n// Directives\r\nexport * from './lib/validators/email.directive';\r\nexport * from './lib/validators/no-empty.directive';\r\nexport * from './lib/validators/text.directive';\r\nexport * from './lib/validators/number.directive';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["updateHighlightUniforms","vertexShader","fragmentShader","i1.BaseUserService","i2.ZoneChangeService","HoverEvent","UnhoverEvent","i1","i2.BaseVisibilityService","i1.PoiService","i2.MatterportService","i2","i3.ViewerService","i4","i2.ZoneService","i3.PoiService","i2.NavigationService","i1.MatterportService","i2.ViewerService","i3.ZoneService","i4.BaseUserService","i5.ZoneChangeService","i6","i1.EventService","i2.MissionService","i1.OperationService","i2.EventService","i3.AffectationService","i4.PoiService","i5.BaseUserService","i6.NavigatorService","i7.FilterService","i8.InterventionService","i9.NavigationService","i10.ViewerService","i11.ZoneChangeService","i12","i3.OperationService","i4.TicketsService","i5.NavigatorService","i6.FilterService","i7.BaseUserService","i8.ViewerService","i9","i10.ZoneChangeService","i1.FilterService","i2.EquipmentService","i1.SearchService","i1.HashtagService","Observable","i1.SupportService","i5.ValidatorsService","i7","i8.LoaderComponent","i2.ProfileService","i3.CommentService","i1.ZoneService","i5.MatterportService","i6.BaseVisibilityService","i7.ContentService","i1.CaptureService","i2.NodeService","i3.NavigationService","i4.ZoneService","i5.PlanService","i6.BaseUserService","i1.NavigatorService","i2.FilterService","i4.CommentService","i6.NavigationService","i7.HashtagService","i8.ZoneChangeService","i6.ZoneChangeService","i7.NavigationService","i2.SpaceService","i3.BaseUserService","i5.VisitService","i6.ViewerService","i7.NavigatorService","i9.BaseVisibilityService","i10","i2.LocaleService","i4.NavigatorService","i5.SupportService","i8.FilterService","i9.AmplifyCacheService","i12.AvatarComponent","i13.NavigationBarComponent","i14","i15.FormatDateNumberToDigitsPipe","i1.NavigationService","i4.LayerService","i6.PlanService","i2.NavigatorService","i3.ZoneChangeService","i4.FilterService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAKa,yBAAyB,CAAA;AAEpC,IAAA,WAAA,GAAA,EAAgB;wGAFL,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCGY,kBAAkB,CAAA;;IAGlB,OAAO,GAAa,EAAE;;IAGtB,SAAS,GAAe,SAAS;;IAGjC,OAAO,GAAG,SAAS;;IAGnB,KAAK,GAAW,MAAM;;IAGtB,WAAW,GAAW,QAAQ;;IAGvC,SAAS,GAAW,GAAG;AAEvB,IAAA,MAAM,eAAe,GAAA;AACjB,QAAA,IAAI,IAAI,GAAe,IAAI,CAAC,SAAS;QACrC,IAAI,CAAC,IAAI,EAAE;YACP,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAChD;AACA,QAAA,MAAM,IAAI,GAAG,CAAA,4BAAA,EAA+B,IAAI,CAAC,OAAO,CAAC,IAAI,CACzD,IAAI,CAAC,SAAS,CACjB,KAAK;AACD,aAAA,GAAG,CAAC,CAAC,GAAG;;QAEL;AACK,aAAA,GAAG,CAAC,CAAC,KAAK,KACP;AACK,aAAA,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG;AAC3B,aAAA,OAAO,CAAC,IAAI,EAAE,GAAG;AACjB,aAAA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAE1B,aAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAE5B,aAAA,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE;;QAGjB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAA,EAAG,IAAI,CAAC,KAAK,CAAA,IAAA,CAAM,CAAC;AAClD,QAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,MAAM,EAAE;IACjB;wGAhDS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,8KCP/B,mOAIA,EAAA,MAAA,EAAA,CAAA,mDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FDGa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,gBAAgB,EAAA,QAAA,EAAA,mOAAA,EAAA,MAAA,EAAA,CAAA,mDAAA,CAAA,EAAA;8BAOf,OAAO,EAAA,CAAA;sBAAf;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,WAAW,EAAA,CAAA;sBAAnB;;;IEtBO;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,gBAA4B;AAC5B,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,gBAA4B;AAC5B,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,aAAsB;AACtB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,cAAwB;AACxB,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,oBAAoC;AACtC,CAAC,EANW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;IAQV;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,iBAAA,CAAA,GAAA,oBAAsC;AACtC,IAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,mBAAA,CAAA,mBAAA,CAAA,GAAA,sBAA0C;AAC1C,IAAA,mBAAA,CAAA,oBAAA,CAAA,GAAA,mBAAwC;AACxC,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,WAA2B;AAC3B,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,qBAAqC;AACrC,IAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,aAAwB;AACxB,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,qBAAqC;AACrC,IAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,kBAAkC;AAClC,IAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACvB,CAAC,EAbW,mBAAmB,KAAnB,mBAAmB,GAAA,EAAA,CAAA,CAAA;IAenB;AAAZ,CAAA,UAAY,OAAO,EAAA;AACjB,IAAA,OAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,OAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,OAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,OAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,OAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,OAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,OAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,OAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,OAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAVW,OAAO,KAAP,OAAO,GAAA,EAAA,CAAA,CAAA;IAYP;AAAZ,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,cAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EANW,cAAc,KAAd,cAAc,GAAA,EAAA,CAAA,CAAA;IAQd;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,SAAoB;AACpB,IAAA,SAAA,CAAA,aAAA,CAAA,GAAA,YAA0B;AAC1B,IAAA,SAAA,CAAA,aAAA,CAAA,GAAA,YAA0B;AAC1B,IAAA,SAAA,CAAA,aAAA,CAAA,GAAA,YAA0B;AAC1B,IAAA,SAAA,CAAA,WAAA,CAAA,GAAA,UAAsB;AACtB,IAAA,SAAA,CAAA,aAAA,CAAA,GAAA,YAA0B;AAC1B,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,WAAwB;AACxB,IAAA,SAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,SAAA,CAAA,cAAA,CAAA,GAAA,aAA4B;AAC5B,IAAA,SAAA,CAAA,eAAA,CAAA,GAAA,cAA8B;AAChC,CAAC,EAXW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;IAaT;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,YAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,YAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACjD,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EAhBW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;IAkBZ;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EARW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;IAUV;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EATW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;IAWV;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACjD,IAAA,aAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACjD,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EANW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;IAQb;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EANW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;IAQX;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,YAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EALW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;IAOZ;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACzB,CAAC,EAJW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;IAMX;AAAZ,CAAA,UAAY,MAAM,EAAA;AAChB,IAAA,MAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,MAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACX,CAAC,EAHW,MAAM,KAAN,MAAM,GAAA,EAAA,CAAA,CAAA;IAKN;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC3C,IAAA,WAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,WAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD;AACnD,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD;AACrD,CAAC,EATW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;IAWX;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACnC,CAAC,EAJW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;IAMb;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,eAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD;AACrD,IAAA,eAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,eAAA,CAAA,4BAAA,CAAA,GAAA,4BAAyD;AAC3D,CAAC,EARW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;IAUf;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,QAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,QAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,QAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAPW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;IASR;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,WAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACvB,CAAC,EANW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;IAQX;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,UAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD;AACrD,IAAA,UAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD;AACnD,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC7B,CAAC,EAPW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;IASV;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,SAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD;AACrD,IAAA,SAAA,CAAA,8BAAA,CAAA,GAAA,8BAA6D;AAC7D,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,SAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,SAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD;AACrD,IAAA,SAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD;AACnD,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,SAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC7C,CAAC,EAfW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;IAiBT;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,WAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACjD,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC3C,IAAA,WAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD;AACnD,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,WAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD;AACnD,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,WAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,WAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;AACzC,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACvC,CAAC,EAhCW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;IAkCX;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EALW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;IAOb;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAZW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;IAcX;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,eAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,eAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;AACzC,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACnC,CAAC,EAVW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;IAyLf;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,kBAAA,CAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,kBAAA,CAAA,kBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW;AACb,CAAC,EAJW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;MAoHjB,aAAa,CAAA;AACxB,IAAA,EAAE;AAEF,IAAA,MAAM;AAEN,IAAA,MAAM;AAEN,IAAA,KAAK;AAEL,IAAA,cAAc;AAEd,IAAA,MAAM;AAEN,IAAA,SAAS;AAET,IAAA,SAAS;AAET,IAAA,SAAS;AAET,IAAA,QAAQ;AAER,IAAA,KAAK;AAEL,IAAA,KAAK;AAEL,IAAA,MAAM;AAEN,IAAA,WAAA,CAAY,IAAuB,EAAA;AACjC,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;IAC/B;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,SAAA,CAAC;IACJ;IAEA,IAAI,QAAQ,CAAC,CAAS,EAAA;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,EAAE;AACL,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;AAC5B,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;AAC1B,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;QACtB;IACF;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO,IAAI,CAAC,MAAM;QACpB;QACA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,OAAO,CAAA,EAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAA,CAAE;QAC7C;QACA,OAAO,IAAI,CAAC,KAAK;IACnB;AACD;IAySW;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAJW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;;AC74BpB;;;;AAIG;AACH,MAAe,qBAAqB,CAAA;AAqDnC;AAEK,MAAgB,cAAe,SAAQ,qBAAqB,CAAA;AAChE;;;;AAIG;AACH,IAAA,MAAM;AAkCN;;;AAGG;AACH,IAAA,KAAK;AAMN;AAsDD;;AAEG;AACH,IAAY,wBAqBX;AArBD,CAAA,UAAY,wBAAwB,EAAA;;AAElC,IAAA,wBAAA,CAAA,OAAA,CAAA,GAAA,mBAA2B;;AAE3B,IAAA,wBAAA,CAAA,OAAA,CAAA,GAAA,mBAA2B;;AAE3B,IAAA,wBAAA,CAAA,MAAA,CAAA,GAAA,kBAAyB;AACzB,IAAA,wBAAA,CAAA,YAAA,CAAA,GAAA,wBAAqC;AACrC,IAAA,wBAAA,CAAA,UAAA,CAAA,GAAA,sBAAiC;AACjC,IAAA,wBAAA,CAAA,cAAA,CAAA,GAAA,0BAAyC;AACzC,IAAA,wBAAA,CAAA,gBAAA,CAAA,GAAA,4BAA6C;AAC7C,IAAA,wBAAA,CAAA,QAAA,CAAA,GAAA,oBAA6B;AAC7B,IAAA,wBAAA,CAAA,KAAA,CAAA,GAAA,iBAAuB;AACvB,IAAA,wBAAA,CAAA,kBAAA,CAAA,GAAA,8BAAiD;AACjD,IAAA,wBAAA,CAAA,gBAAA,CAAA,GAAA,4BAA6C;AAC7C,IAAA,wBAAA,CAAA,aAAA,CAAA,GAAA,yBAAuC;AACvC,IAAA,wBAAA,CAAA,iBAAA,CAAA,GAAA,6BAA+C;AAC/C,IAAA,wBAAA,CAAA,OAAA,CAAA,GAAA,mBAA2B;AAC3B,IAAA,wBAAA,CAAA,WAAA,CAAA,GAAA,uBAAmC;AACnC,IAAA,wBAAA,CAAA,QAAA,CAAA,GAAA,oBAA6B;AAC7B,IAAA,wBAAA,CAAA,YAAA,CAAA,GAAA,wBAAqC;AACvC,CAAC,EArBW,wBAAwB,KAAxB,wBAAwB,GAAA,EAAA,CAAA,CAAA;AAuBpC,MAAe,uBAAuB,CAAA;AAGrC;AAID,MAAM,YAAa,SAAQ,uBAAuB,CAAA;AAAI;AAuDtD,IAAY,aAOX;AAPD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACT,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACP,CAAC,EAPW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AASzB,IAAY,iBAQX;AARD,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAoC;AACpC,IAAA,iBAAA,CAAA,iBAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAwC;AACxC,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAkC;AAClC,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAA8B;AAC9B,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAoC;AACpC,IAAA,iBAAA,CAAA,iBAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAoC;AACtC,CAAC,EARW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;AAU7B,IAAY,aAKX;AALD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EALW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AA4DzB,IAAY,QAIX;AAJD,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAE;AACJ,CAAC,EAJW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;AAMpB,IAAY,IAsDX;AAtDD,CAAA,UAAY,IAAI,EAAA;AACd,IAAA,IAAA,CAAA,IAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW;AACX,IAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAS;AACT,IAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAQ;AACR,IAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAQ;AACR,IAAA,IAAA,CAAA,IAAA,CAAA,OAAA,CAAA,GAAA,EAAA,CAAA,GAAA,OAAU;AACV,IAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAS;AACT,IAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAS;AACT,IAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAQ;AACR,IAAA,IAAA,CAAA,IAAA,CAAA,OAAA,CAAA,GAAA,EAAA,CAAA,GAAA,OAAU;AACV,IAAA,IAAA,CAAA,IAAA,CAAA,OAAA,CAAA,GAAA,EAAA,CAAA,GAAA,OAAU;AACV,IAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAS;AACT,IAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAc;AACd,IAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAY;AACZ,IAAA,IAAA,CAAA,IAAA,CAAA,YAAA,CAAA,GAAA,EAAA,CAAA,GAAA,YAAe;AACf,IAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAc;AACd,IAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO;AACP,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,GAAA,GAAM;AACN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"}