@smarterplan/ngx-smarterplan-core 1.1.14 → 1.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/services/matterport.service.mjs +2 -2
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +1 -1
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smarterplan-ngx-smarterplan-core.mjs","sources":["../../../projects/ngx-smarterplan-core/src/lib/ngx-smarterplan-core.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/csv-export/csv-export.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/csv-export/csv-export.component.html","../../../projects/ngx-smarterplan-core/src/lib/types.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/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/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/pipes/format-date-number-to-digits.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/range-date-picker/range-date-picker.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/range-date-picker/range-date-picker.component.html","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/avatar/avatar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/capture.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/node.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/zone-drawer.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/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/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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxSmarterplanCoreService {\n\n constructor() { }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-csv-export',\n templateUrl: './csv-export.component.html',\n styleUrls: ['./csv-export.component.scss']\n})\nexport class CsvExportComponent {\n \n /** Header of the CSV, titles for each columns */\n @Input() headers: string[] = [];\n\n /** Array of each rows (array of array of string), if it's not set, then the function getRows() will be used */\n @Input() rowsInput: string[][] = undefined;\n\n /** Function used to get rows if rowsInput is not set, call each time the user click on the button to generate the CSV file */\n @Input() getRows = undefined;\n\n /** Title of the file to download */\n @Input() title: string = \"file\";\n\n /** Label for the button to click */\n @Input() buttonLabel: string = \"Export\";\n\n /** Delimiter for the CSV */\n delimeter: string = \";\";\n\n async onClickDownload() {\n let rows: string[][] = this.rowsInput;\n if (!rows) {\n rows = await Promise.resolve(this.getRows());\n }\n const data = `data:text/csv;charset=utf-8,${this.headers.join(\n this.delimeter,\n )}\\n${rows\n .map((row) =>\n /** Clean each rows/cells */\n row\n .map((value) =>\n value\n .replace(this.delimeter, \" \")\n .replace(\"\\n\", \" \")\n .replace(\"\\r\", \" \"),\n )\n .join(this.delimeter),\n )\n .join(\"\\n\")}`;\n\n /** Create a link to download the file */\n const link = document.createElement(\"a\");\n link.setAttribute(\"href\", encodeURI(data));\n link.setAttribute(\"download\", `${this.title}.csv`);\n document.body.append(link);\n link.click();\n link.remove();\n }\n}\n","<span [style.cursor]=\"'pointer'\" (click)=\"onClickDownload()\" class=\"download-csv d-flex\">\n <span class=\"iconify\" data-icon=\"mdi:file-download-outline\"></span>\n {{ buttonLabel | translate}}\n</span>\n","export enum CameraMode {\n DOLLHOUSE = 'mode.dollhouse',\n FLOORPLAN = 'mode.floorplan',\n INSIDE = 'mode.inside',\n OUTSIDE = 'mode.outside',\n TRANSITIONING = 'mode.transitioning',\n}\n\nexport enum MattertagActionMode {\n POSITION_TICKET = 'positioning_ticket',\n ADD_TICKET = 'add_ticket',\n ADD_OBJECT3D = 'add_object3D',\n POSITION_OBJECT3D = 'positioning_object3D',\n POSITION_EQUIPMENT = 'positioning_equip',\n ADD_EQUIPMENT = 'add_equip',\n POSITION_DATA = 'positioning_feature',\n ADD_DATA = 'add_feature',\n POSITION_DESK = 'positioning_feature',\n ADD_DESK = 'add_desk',\n POSITION_ROOM = 'positioning_room',\n ADD_ROOM = 'add_room',\n}\n\nexport enum PoiType {\n EQUIPMENT = 'EQUIPMENT',\n INFORMATION = 'INFORMATION',\n TICKET = 'TICKET',\n OBJECT3D = 'OBJECT3D',\n MEASURE = 'MEASURE',\n DATA = 'DATA',\n PEOPLE = 'PEOPLE',\n DESK = 'DESK',\n ROOM = 'ROOM',\n}\n\nexport enum TicketPriority {\n MINIMUM = 'MINIMUM',\n LOW = 'LOW',\n MEDIUM = 'MEDIUM',\n HIGH = 'HIGH',\n MAXIMUM = 'MAXIMUM',\n}\n\nexport enum TagAction {\n HOVER_ON = 'hoverOn',\n AUDIO_CLICK = 'audioClick',\n VIDEO_CLICK = 'videoClick',\n IMAGE_CLICK = 'imageClick',\n DOC_CLICK = 'docClick',\n CLOSE_MODAL = 'closeModal',\n NEXT_SLIDE = 'nextSlide',\n DETAIL_CLICK = 'detailsClick',\n TICKET_CLICK = 'ticketClick',\n YOUTUBE_CLICK = 'youtubeClick',\n}\n\nexport enum TicketStatus {\n TO_BE_PROCESSED = 'TO_BE_PROCESSED',\n PLANNED = 'PLANNED',\n IN_PROGRESS = 'IN_PROGRESS',\n WAITING_FOR_VALIDATION = 'WAITING_FOR_VALIDATION',\n VALIDATED = 'VALIDATED',\n REJECTED = 'REJECTED',\n RESOLVED = 'RESOLVED',\n ARCHIVED = 'ARCHIVED',\n LATE = 'LATE',\n BLOCKED = 'BLOCKED',\n COMPLETED = 'COMPLETED',\n DELAYED = 'DELAYED',\n CANCELLED = 'CANCELLED',\n TO_REDO = 'TO_REDO',\n CREATED = 'CREATED',\n}\n\nexport enum DomainType {\n EQUIPMENT = 'EQUIPMENT',\n MISSION = 'MISSION',\n TICKET = 'TICKET',\n OBJECT3D = 'OBJECT3D',\n POI = 'POI',\n FEATURE = 'FEATURE',\n BOOKING = 'BOOKING',\n}\n\nexport enum RoleStatus {\n VISITOR = 'VISITOR',\n VISITOR_MUSEUM = 'VISITOR_MUSEUM',\n GUIDE_MUSEUM = 'GUIDE_MUSEUM',\n OCCUPANT = 'OCCUPANT',\n SERVICE = 'SERVICE',\n MANAGER = 'MANAGER',\n OWNER = 'OWNER',\n ADMIN = 'ADMIN',\n}\n\nexport enum ProfileStatus {\n WAITING_FOR_VALIDATION = 'WAITING_FOR_VALIDATION',\n WAITING_FOR_ACTIVATION = 'WAITING_FOR_ACTIVATION',\n ACTIVE = 'ACTIVE',\n INACTIVE = 'INACTIVE',\n BLOCKED = 'BLOCKED',\n}\n\nexport enum LevelStatus {\n MINIMUM = 'MINIMUM',\n LOW = 'LOW',\n MEDIUM = 'MEDIUM',\n HIGH = 'HIGH',\n MAXIMUM = 'MAXIMUM',\n}\n\nexport enum PropertyType {\n PROPERTY = 'PROPERTY',\n VISIT = 'VISIT',\n OCCUPANT = 'OCCUPANT',\n SHARED = 'SHARED',\n}\n\nexport enum SpaceStatus {\n DPE_TO_VALIDATE = 'DPE_TO_VALIDATE',\n DPE_VALIDATED = 'DPE_VALIDATED',\n DPE_FETCH = 'DPE_FETCH',\n}\n\nexport enum Locale {\n FR = 'FR',\n EN = 'EN',\n}\n\nexport enum EmailStatus {\n CREATION_TO_DELIVER = 'CREATION_TO_DELIVER',\n UPDATE_TO_DELIVER = 'UPDATE_TO_DELIVER',\n CANCELLATION_TO_DELIVER = 'CANCELLATION_TO_DELIVER',\n SENT = 'SENT',\n SOFT_BOUNCE = 'SOFT_BOUNCE',\n HARD_BOUNCE = 'HARD_BOUNCE',\n REJECTED = 'REJECTED',\n SATISFACTION_TO_DELIVER = 'SATISFACTION_TO_DELIVER',\n}\n\nexport enum CaptureViewer {\n CUPIX = 'CUPIX',\n MATTERPORT = 'MATTERPORT',\n SMARTERPLAN_V1 = 'SMARTERPLAN_V1',\n}\n\nexport enum InventoryStatus {\n SUCCESS = 'SUCCESS',\n ERROR = 'ERROR',\n TO_RUN = 'TO_RUN',\n TO_RUN_ONE_IMAGE = 'TO_RUN_ONE_IMAGE',\n ERROR_FILE_OBJ_NOT_EXIST = 'ERROR_FILE_OBJ_NOT_EXIST',\n ERROR_FILE_JSON_NOT_EXIST = 'ERROR_FILE_JSON_NOT_EXIST',\n ERROR_FILE_MODEL_NOT_EXIST = 'ERROR_FILE_MODEL_NOT_EXIST',\n}\n\nexport enum TypeNote {\n CONTRACTUAL = 'CONTRACTUAL',\n INFORMATION = 'INFORMATION',\n TECHNICAL = 'TECHNICAL',\n FINANCIAL = 'FINANCIAL',\n OTHER = 'OTHER',\n IMAGE = 'IMAGE',\n}\n\nexport enum FeatureType {\n DESK = 'DESK',\n INDICATOR_TEMP = 'INDICATOR_TEMP',\n INFORMATION = 'INFORMATION',\n INDICATOR_CO2 = 'INDICATOR_CO2',\n PURCHASE = 'PURCHASE',\n}\n\nexport enum TicketType {\n REPORTING = 'REPORTING',\n REQUEST_FOR_INTERVENTION = 'REQUEST_FOR_INTERVENTION',\n REQUEST_FOR_MAINTENANCE = 'REQUEST_FOR_MAINTENANCE',\n WORK_ORDER = 'WORK_ORDER',\n INCIDENT = 'INCIDENT',\n INFORMATION = 'INFORMATION',\n}\n\nexport enum EventType {\n EQUIPMENT = 'EQUIPMENT',\n COMMENT = 'COMMENT',\n CONTRACTUAL_INTERVENTION = 'CONTRACTUAL_INTERVENTION',\n NON_CONTRACTUAL_INTERVENTION = 'NON_CONTRACTUAL_INTERVENTION',\n TICKET = 'TICKET',\n OBJECT3D = 'OBJECT3D',\n REPORTING = 'REPORTING',\n REQUEST_FOR_INTERVENTION = 'REQUEST_FOR_INTERVENTION',\n REQUEST_FOR_MAINTENANCE = 'REQUEST_FOR_MAINTENANCE',\n WORK_ORDER = 'WORK_ORDER',\n INCIDENT = 'INCIDENT',\n MEASURE = 'MEASURE',\n BOOKING = 'BOOKING',\n BOOKING_SUBCRIPTION = 'BOOKING_SUBCRIPTION',\n}\n\nexport enum EventStatus {\n TO_BE_PROCESSED = 'TO_BE_PROCESSED',\n PLANNED = 'PLANNED',\n IN_PROGRESS = 'IN_PROGRESS',\n WAITING_FOR_VALIDATION = 'WAITING_FOR_VALIDATION',\n VALIDATED = 'VALIDATED',\n REJECTED = 'REJECTED',\n RESOLVED = 'RESOLVED',\n ARCHIVED = 'ARCHIVED',\n LATE = 'LATE',\n BLOCKED = 'BLOCKED',\n COMPLETED = 'COMPLETED',\n DELAYED = 'DELAYED',\n CANCELLED = 'CANCELLED',\n TO_REDO = 'TO_REDO',\n CREATED = 'CREATED',\n LINKED_TO_EQUIPMENT = 'LINKED_TO_EQUIPMENT',\n UNLINKED_FROM_EQUIPMENT = 'UNLINKED_FROM_EQUIPMENT',\n EDITED = 'EDITED',\n LINKED_TO_A_PARENT_TICKET = 'LINKED_TO_A_PARENT_TICKET',\n WAITING_FOR_ACCEPTATION = 'WAITING_FOR_ACCEPTATION',\n ACCEPTED = 'ACCEPTED',\n REFUSED = 'REFUSED',\n DOMAIN_UPDATED = 'DOMAIN_UPDATED',\n DATES_UPDATED = 'DATES_UPDATED',\n TICKET_CHILD_REMOVED = 'TICKET_CHILD_REMOVED',\n TYPE_UPDATED = 'TYPE_UPDATED',\n DATE_END_UPDATED = 'DATE_END_UPDATED',\n DATE_START_UPDATED = 'DATE_START_UPDATED',\n POSITION_SET = 'POSITION_SET',\n POSITION_UPDATED = 'POSITION_UPDATED',\n POSITION_REMOVED = 'POSITION_REMOVED',\n}\n\nexport enum PaymentStatus {\n UNPAID = 'UNPAID',\n PAID = 'PAID',\n PENDING = 'PENDING',\n ERROR = 'ERROR',\n}\n\nexport enum CommentType {\n MEASURE = 'MEASURE',\n VIDEO = 'VIDEO',\n DOCUMENT = 'DOCUMENT',\n IMAGE = 'IMAGE',\n TEXT = 'TEXT',\n AUDIO = 'AUDIO',\n URL = 'URL',\n YOUTUBE = 'YOUTUBE',\n URL_SHOP = 'URL_SHOP',\n EMBED = 'EMBED',\n}\n\nexport enum StatusEquipment {\n TO_SETUP = 'TO_SETUP',\n BROKEN = 'BROKEN',\n UNINSTALLED = 'UNINSTALLED',\n INCIDENT = 'INCIDENT',\n IN_OPERATION = 'IN_OPERATION',\n WAITING_FOR_REPAIR = 'WAITING_FOR_REPAIR',\n DELETED = 'DELETED',\n OUT_OF_ORDER = 'OUT_OF_ORDER',\n TO_BE_REPLACED = 'TO_BE_REPLACED',\n}\n\n/** Interface for Update (only id is required) */\nexport interface IUpdate {\n id: string;\n}\n\nexport type AWSType = {\n __typename?: string | null;\n id?: string | null;\n createdAt?: string;\n updatedAt?: string;\n};\n\nexport type DbObjectType = {\n spaceID?: string | null;\n description?: string | null;\n pois?: {\n __typename?: 'ModelPOIConnection';\n items?: Array<POI> | null;\n nextToken?: string | null;\n } | null;\n space?: Space | null;\n domainID?: string | null;\n name?: string | null;\n title?: string | null;\n} & AWSType;\n\nexport type Ticket = {\n spaceID: string;\n title: string;\n status?: TicketStatus | null;\n priority?: TicketPriority | null;\n ownerMissionID?: string | null;\n ownerMission?: Mission | null;\n type?: TicketType | null;\n parentID?: string | null;\n level?: LevelStatus | null;\n friendlyLabel?: string | null;\n domain: Domain | null;\n domainID: string | null;\n events?: {\n __typename?: 'ModelEventConnection';\n items?: Array<Event> | null;\n nextToken?: string | null;\n } | null;\n assignees?: {\n __typename?: 'ModelAffectationConnection';\n items?: Array<Affectation> | null;\n nextToken?: string | null;\n } | null;\n equipments?: Array<Equipment> | null;\n operations?: {\n __typename?: 'ModelOperationConnection';\n items?: Array<Operation | null> | null;\n nextToken?: string | null;\n };\n comments?: {\n __typename?: 'ModelCommentConnection';\n items?: Array<Comment | null> | null;\n nextToken?: string | null;\n };\n prestataire?: Prestataire | null;\n children?: {\n __typename?: 'ModelTicketConnection';\n items?: Array<Ticket | null> | null;\n nextToken?: string | null;\n };\n archivedForMissionID?: string[] | null;\n} & DbObjectType;\n\nexport type Operation = {\n id?: string | null;\n ticketID?: string | null;\n equipmentID?: string | null;\n deletedAt?: number | null;\n ticket?: Ticket | null;\n equipment?: Equipment | null;\n} & AWSType;\n\nexport type Equipment = {\n name: string;\n notes?: {\n __typename?: 'ModelNoteConnection';\n items?: Array<Note | null> | null;\n nextToken?: string | null;\n };\n documents?: Array<EquipmentDocument> | null;\n documentationImageUrlSigned?: string | null;\n subEquipments?: Array<Equipment | null> | null;\n subequipmentsIDs?: Array<string | null> | null;\n serialNumber?: string | null;\n domain?: Domain | null;\n childDomain?: Domain | null;\n parentDomain?: Domain | null;\n photo?: string | null;\n zone?: Zone | null;\n tickets?: Ticket[] | null;\n domainID?: string | null;\n spaceID: string;\n archivedForMissionID?: string[] | null;\n annotation?: string | null;\n status?: StatusEquipment | null;\n family?: Array<string | null> | null;\n manufacturer?: string | null;\n sku?: string | null;\n installDate?: number | null;\n warrantyEndDate?: number | null;\n isCreatedByAI?: boolean | null;\n operations?: {\n __typename?: 'ModelOperationConnection';\n items?: Array<Operation | null> | null;\n nextToken?: string | null;\n };\n} & DbObjectType;\n\nexport type EquipmentSelected = {\n selected?: boolean;\n} & Equipment;\n\n// not in db\nexport type EquipmentDocument = {\n filename: string;\n url: string;\n urlSigned: string;\n noteID: string;\n};\n\n// not in db\nexport type Prestataire = {\n organisation: Organisation;\n mission: Mission;\n profile: Profile;\n name: string;\n};\n\nexport type Note = {\n id?: string | null;\n attachment?: string | null;\n signDate?: number | null;\n expirationDate?: number | null;\n type?: TypeNote | null;\n ownerMissionID?: string | null;\n equipmentID?: string | null;\n} & AWSType;\n\nexport type Domain = {\n name: string;\n slug?: string | null;\n abbreviation?: string | null;\n description?: string | null;\n organisationID?: string | null;\n parentID?: string | null;\n type?: DomainType | null;\n parent?: Domain | null;\n children?: {\n __typename?: 'ModelDomainConnection';\n items?: Array<Domain | null> | null;\n nextToken?: string | null;\n };\n} & AWSType;\n\nexport type POI = {\n id?: string | null;\n coordinate?: string | null;\n tagIcon?: string | null;\n tagDescription?: string | null;\n tagImageID?: string | null;\n metadata?: string | null;\n matterportSweepID?: string | null;\n type?: PoiType | null;\n elementID?: string | null;\n virtual?: boolean | null;\n};\n\nexport enum ViewerInteractions {\n DEFAULT = 0,\n ADDING,\n POSITIONING,\n}\n\nexport type Mission = {\n userID: string;\n role?: RoleStatus | null;\n organisationID: string;\n spaceID?: string | null;\n level?: LevelStatus | null;\n orderedOrganisationID?: string | null;\n zoneID?: string | null;\n groups?: Array<string | null> | null;\n emailStatus?: EmailStatus | null;\n description?: string | null;\n metadata?: string | null;\n deletedAt?: number | null;\n assignments?: {\n __typename?: 'ModelAffectationConnection';\n items?: Array<Affectation | null> | null;\n nextToken?: string | null;\n };\n organisation?: Organisation | null;\n orderedOrganisation?: Organisation | null;\n user?: Profile | null;\n domains?: string[] | null;\n // domainObjects?: Domain[] | null;\n space?: Space | null;\n zone?: Zone | null;\n startDateTime?: string | null;\n endDateTime?: string | null;\n hashtags?: Array<string | null> | null;\n templateMissionID?: string | null;\n templateMission?: VisitTemplate | null;\n locale?: Locale | null;\n isInWaitingRoom?: boolean | null;\n blockedInChat?: boolean | null;\n connectedToLiveAt?: string[] | null;\n disconnectedFromLiveAt?: string[] | null;\n} & AWSType;\n\nexport type Affectation = {\n mission?: Mission | null;\n group: string;\n metadata?: string | null;\n deletedAt?: number | null;\n missionID: string;\n ticketID: string;\n} & AWSType;\n\nexport type MediaContent = {\n path: string;\n title: string;\n description: string;\n showInTag?: boolean;\n type?: CommentType;\n};\n\nexport type Comment = {\n title: string;\n ticket?: Ticket | null;\n ownerID?: string | null;\n owner?: Mission | null;\n annexe?: string | null;\n ticketID?: string | null;\n type?: CommentType | null;\n dimensions?: Array<number | null> | null;\n featureID?: string | null;\n isCoverImage?: boolean | null;\n index?: number | null;\n shownInTag?: boolean | null;\n externalLink?: string | null;\n} & AWSType &\n DbObjectType;\n\nexport type Zone = {\n sweepIDs?: string[] | null;\n layerID?: string | null;\n code_ref?: string | null;\n layer?: Layer | null;\n parent?: Zone | null;\n virtual?: boolean | null;\n name: string;\n tags?: Array<string | null> | null;\n parentID?: string | null;\n spaceID?: string | null;\n space?: Space | null;\n isMuseumVisitZone?: boolean | null;\n nodeIDs?: Array<string | null> | null;\n surface?: number | null;\n metadata?: string | null;\n isMultipleFloorZone?: boolean | null;\n audioID?: string | null;\n audio?: Comment | null;\n startSweepID?: string | null;\n} & AWSType;\n\nexport type Layer = {\n name: string;\n} & AWSType;\n\nexport type Profile = {\n id?: string | null;\n userID: string;\n avatar?: string | null;\n token?: string | null;\n tokenExpiredAt?: number | null;\n status?: ProfileStatus | null;\n metadata?: string | null;\n lastConnectedAt?: number | null;\n pseudo?: string | null;\n deletedAt?: number | null;\n} & AWSType;\n\nexport class ProfileEntity implements Profile {\n id?: string | null;\n\n userID: string;\n\n avatar?: string | null;\n\n token?: string | null;\n\n tokenExpiredAt?: number | null;\n\n status?: ProfileStatus | null;\n\n createdAt?: string;\n\n updatedAt?: string;\n\n firstName: string;\n\n lastName: string;\n\n email: string;\n\n phone: string;\n\n pseudo: string;\n\n constructor(init?: Partial<Profile>) {\n Object.assign(this, init);\n this.metadata = init.metadata;\n }\n\n get metadata(): string {\n return JSON.stringify({\n firstName: this.firstName,\n lastName: this.lastName,\n email: this.email,\n phone: this.phone,\n });\n }\n\n set metadata(m: string) {\n const d = JSON.parse(m);\n if (d) {\n this.firstName = d.firstName;\n this.lastName = d.lastName;\n this.email = d.email;\n this.phone = d.phone;\n }\n }\n\n get displayName(): string {\n if (this.pseudo) {\n return this.pseudo;\n }\n if (this.lastName.length > 0) {\n return `${this.firstName} ${this.lastName}`;\n }\n return this.email;\n }\n}\n\nexport type Organisation = {\n name: string;\n siret?: string | null;\n address?: string | null;\n city?: string | null;\n postal?: number | null;\n logoUrl?: string | null;\n originDate?: number | null;\n deletedAt?: number | null;\n shareToken?: string | null;\n tokenExpiresAt?: number | null;\n connectedAccountStripeID?: string | null;\n stripeOnBoardingCompleted?: boolean | null;\n stripeToken?: string | null;\n stripeChargesEnabled?: boolean | null;\n contactDetails?: string | null;\n ticketOrganisationsId?: string | null;\n // properties?: {\n // __typename?: \"ModelPropertyConnection\";\n // items?: Array<Property | null> | null;\n // nextToken?: string | null;\n // } | null;\n} & AWSType;\n\nexport type Property = {\n type: PropertyType;\n deletedAt?: number | null;\n organisationID: string;\n spaceID: string;\n zoneID?: string | null;\n space?: Space | null;\n organisation?: Organisation | null;\n // zone?: Zone | null;\n} & AWSType;\n\nexport type Space = {\n name: string;\n addresses?: string | null;\n annexes?: string | null;\n tags?: Array<string | null> | null;\n latitude?: number | null;\n longitude?: number | null;\n metadata?: string | null;\n level?: LevelStatus | null;\n deletedAt?: number | null;\n constructionYear?: string | null;\n classEnergyConsumption?: string | null;\n classGes?: string | null;\n status?: SpaceStatus | null;\n guestLink?: string | null;\n signedImageUrl?: string | null;\n zones?: {\n __typename?: 'ModelZoneConnection';\n items?: Array<Zone | null> | null;\n nextToken?: string | null;\n };\n properties?: {\n __typename?: 'ModelPropertyConnection';\n items?: Array<Property | null> | null;\n nextToken?: string | null;\n };\n visits?: Visit[] | null;\n organisationID?: string | null;\n organisation?: Organisation | null;\n description?: string | null;\n attachments?: Comment[] | null;\n} & AWSType;\n\n// not in DB\nexport type Visit = {\n captureID: string;\n model3d: string;\n takenAt: number;\n spaceID: string;\n viewer: CaptureViewer;\n surface: number;\n node: Node;\n name?: string | null;\n nmbImagesImported: number;\n};\n\nexport type Hashtag = {\n name?: string | null;\n organisationID?: string | null;\n spaceID?: string | null;\n organization?: Organisation | null;\n space?: Space | null;\n} & AWSType;\n\nexport type Capture = {\n // clientRef?: string | null;\n // originCoordinate?: string | null;\n // originAngle?: string | null;\n // originZoom?: string | null;\n takenAt?: number | null;\n viewer?: CaptureViewer | null;\n publishedAt?: number | null;\n surface?: number | null;\n metadata?: string | null;\n spaceID?: string | null;\n nodes?: {\n __typename?: 'ModelNodeConnection';\n items?: Array<Node | null> | null;\n nextToken?: string | null;\n };\n} & AWSType;\n\nexport type Node = {\n model3D?: string | null;\n coordinate?: string | null;\n size?: string | null;\n scale?: string | null;\n version?: number | null;\n active?: number | null;\n order?: number | null;\n // quality?: NodeQuality | null;\n metadata?: string | null;\n captureID?: string | null;\n inventoryStatus?: InventoryStatus | null;\n navigationForInventory?: string | null;\n capture?: Capture | null;\n} & AWSType;\n\nexport type Plan = {\n name?: string | null;\n annexe?: string | null;\n calibration?: string | null;\n zoneID?: string | null;\n isCurrentForZone?: boolean | null;\n spaceID?: string | null;\n isModified?: boolean | null;\n isImportedMatterport?: boolean | null;\n filepath?: string;\n model3d?: string | null;\n floor?: string | null;\n visitName?: string | null;\n zone?: Zone | null;\n extension?: string | null;\n navigationIDs?: string[] | null;\n} & AWSType;\n\nexport type Navigation = {\n matterportSweepID?: string | null;\n position?: string | null;\n rotation?: string | null;\n radius?: number | null;\n url?: string | null;\n tags?: Array<string | null> | null;\n level?: LevelStatus | null;\n nodeID?: string | null;\n spaceID?: string | null;\n positionOnPlan?: Array<string | null> | null;\n navigationSiblingsId?: string | null;\n pois?: {\n __typename?: 'ModelPOIConnection';\n items?: Array<POI | null> | null;\n nextToken?: string | null;\n };\n node?: Node | null;\n} & AWSType;\n\nexport type MenuItem = { label: string; url?: string; back?: any };\n\n// not in db\nexport type Measurement = {\n id: string;\n poi: POI;\n comment: Comment;\n singedUrlPhoto?: string | null;\n values: Array<number> | null;\n numberPoints: number;\n};\n\nexport type Feature = {\n title?: string | null;\n shortDescription?: string | null;\n ownerMissionID?: string | null;\n level?: LevelStatus | null;\n index?: number | null;\n type?: FeatureType | null;\n archivedForMissionID?: Array<string | null> | null;\n stripeProductID?: string | null;\n stripePriceID?: string | null;\n bookingPriceMetadata?: string | null;\n locale?: Locale | null;\n hashtags?: Array<string | null> | null;\n coverImageUrl?: string | null;\n images?: Array<MediaContent> | null;\n videos?: Array<MediaContent> | null;\n audios?: Array<MediaContent> | null;\n externalLinks?: Array<MediaContent> | null;\n documents?: Array<{\n path: string;\n title: string;\n description: string;\n }> | null;\n embeds?: Array<MediaContent> | null;\n comments?: {\n __typename?: 'ModelCommentConnection';\n items?: Array<Comment | null> | null;\n nextToken?: string | null;\n };\n domain?: Domain | null;\n isBookingPlace?: boolean | null;\n events?: {\n __typename?: 'ModelEventConnection';\n items?: Array<Event | null> | null;\n nextToken?: string | null;\n };\n spaceID: string;\n} & DbObjectType;\n\nexport type Event = {\n title: string;\n type?: EventType | null;\n estimateStartDate?: number | null;\n estimateDuration?: number | null;\n estimateEndDate?: number | null;\n realStartDate?: number | null;\n timeSpent?: number | null;\n realEndDate?: number | null;\n status?: EventStatus | null;\n description?: string | null;\n group?: string | null;\n metadata?: string | null;\n ownerID?: string | null;\n ticketID?: string | null;\n createdAt?: string | null;\n translationPath?: string | null;\n featureID?: string | null;\n archivedByOwner?: boolean | null;\n paymentStatus?: PaymentStatus | null;\n stripeSessionID?: string | null;\n notificationStatus?: EmailStatus | null;\n refusalReason?: string | null;\n agoStr?: boolean | string | null;\n owner?: Mission | null;\n author?: ProfileEntity | null;\n feature?: Feature | null;\n} & AWSType;\n\n//not in DB (variation of Event)\nexport type RequestIntervention = {\n estimateStartDate?: number | null;\n estimateDuration?: number | null;\n estimateEndDate?: number | null;\n realStartDate?: number | null;\n realDuration?: number | null;\n realEndDate?: number | null;\n type: EventType.REQUEST_FOR_INTERVENTION;\n status: EventStatus;\n intervention?: Event | null;\n report?: Event | null;\n ticketID: string;\n} & AWSType;\n\n//not in DB (variation of Event)\nexport type Intervention = {\n estimateStartDate?: number | null;\n estimateDuration?: number | null;\n estimateEndDate?: number | null;\n realStartDate?: number | null;\n realDuration?: number | null;\n realEndDate?: number | null;\n type: EventType;\n status: EventStatus;\n} & AWSType;\n\nexport type VisitTemplate = {\n id?: string | null;\n title?: string | null;\n level?: LevelStatus | null;\n description?: string | null;\n metadata?: string | null;\n deletedAt?: number | null;\n startDateTime?: string | null;\n endDateTime?: string | null;\n hashtags?: Array<string | null> | null;\n organisationID: string;\n spaceID?: string | null;\n zoneID?: string | null;\n locale?: Locale | null;\n realStartedAt?: number | null;\n realEndedAt?: number | null;\n space?: Space | null;\n zone?: Zone | null;\n organisation?: Organisation | null;\n userMissions?: {\n __typename: 'ModelMissionConnection';\n items: Array<Mission | null>;\n nextToken?: string | null;\n } | null;\n} & AWSType;\n\nexport enum SpModule {\n MUSEUM = 'MUSEUM',\n HOTEL = 'HOTEL',\n IMMO = 'IMMO',\n}\n\n/**\n * ThreeJS object3D\n */\nexport type IObject3D = {\n id?: string; // used to replace threeJS uuid\n object: string;\n format: string;\n mode: string;\n position: { x: number; y: number; z: number; };\n rotation: { x: number; y: number; z: number; };\n scale: { x: number; y: number; z: number; };\n}\n\n\n\n/**\n * DynamoDb object3D\n */\nexport type Object3D = {\n id: string;\n path: string;\n description: string;\n name: string;\n s3Bucket: boolean;\n position: number[];\n rotation: number[];\n scale: number[];\n spaceID: string;\n // Not used yet\n // domain: Domain | null;\n // domainID: string | null;\n} & AWSType;\n","import { Inject } from \"@angular/core\";\nimport { Injectable } from \"@angular/core\";\nimport { AWSType, Profile } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class ProfileService {\n API: any;\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async createProfile(profile: Profile): Promise<Profile> {\n return this.API.__proto__.CreateProfile(profile);\n }\n\n async getProfile(id: string): Promise<Profile> {\n return this.API.__proto__.GetProfile(id);\n }\n\n async listCurrentProfiles(): Promise<Profile[]> {\n const profiles = (await this.API.__proto__.ListProfiles()).items;\n return profiles.filter((p) => !p.deletedAt);\n }\n\n async updateProfile(profile: any): Promise<Profile> {\n if (profile.id === undefined) {\n console.log(`an ID is required for update Profile`);\n return null;\n }\n return this.API.__proto__.UpdateProfile(profile);\n }\n\n async deleteProfile(id: string): Promise<Profile> {\n return this.API.__proto__.DeleteProfile({ id: id });\n }\n\n async getProfileFromAWSID(userID: string): Promise<Profile> {\n return this.API.__proto__.ProfilesByUserID(userID).then((results) => {\n if (results.items.length === 0) {\n return null;\n }\n return results.items[0];\n });\n }\n\n async getUsersForMail(mail: string): Promise<Profile[]> {\n return this.API.__proto__.ListProfiles({ metadata: { contains: mail } }).then(\n (results) => {\n return results.items.filter((profile) => !profile.deletedAt);\n },\n );\n }\n\n async getProfilesForStatus(status: string): Promise<Profile[]> {\n return (\n await this.API.__proto__.ListProfiles({\n status: { eq: status },\n })\n ).items;\n }\n}","/* eslint-disable class-methods-use-this */\nimport { Inject, Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { dateHasExpired } from \"../../helpers.service\";\nimport { Mission, Organisation, Profile, ProfileStatus, RoleStatus, VisitTemplate } from \"../../types.service\";\nimport { DateTime } from \"luxon\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class MissionService {\n currentMissionsUpdated = new Subject<boolean>();\n\n lastExpiredMission: Mission;\n\n nextMissionToStart: Mission;\n\n currentUserID: string;\n\n API: any; //AWS\n\n constructor(\n // private affectationService: AffectationService,\n @Inject('currentAPIService') apiInjected: any\n ) {\n this.API = apiInjected;\n }\n\n async getMissionsFromUserID(userID: string): Promise<Mission[]> {\n return this.API.__proto__.MissionsByUser(userID).then((missions) => {\n return missions.items.filter((mis) => !mis.deletedAt);\n });\n }\n\n async getMissionsByOrderedOrganisation(\n orderedOrgID: string,\n ): Promise<Mission[]> {\n return this.API.__proto__.MissionsByOrderedOrganisation(orderedOrgID).then(\n (response) => response.items,\n );\n }\n\n async getMissionsByOrganisation(orgID: string): Promise<Mission[]> {\n return this.API.__proto__.MissionsByOrganisation(orgID).then(\n (response) => response.items,\n );\n }\n\n async create(mission: Mission): Promise<Mission> {\n const updMission = await this.API.__proto__.CreateMission(mission);\n console.log(\"Mission created\", updMission);\n await this.checkIfCurrentUserMissionChanged(updMission);\n return updMission;\n }\n\n async update(mission: any): Promise<Mission> {\n const updMission = await this.API.__proto__.UpdateMission(mission);\n console.log(\"Mission updated\", updMission);\n await this.checkIfCurrentUserMissionChanged(updMission);\n return updMission;\n }\n\n async assertRoleForUserInOrg(\n user: Profile,\n org: Organisation,\n role: RoleStatus,\n ): Promise<boolean> {\n return this.getMissionsFromUserID(user.id).then((missions) => {\n if (missions) {\n const misOrg = missions.filter((mis) => {\n return mis.organisationID === org.id && mis.role === role;\n });\n return misOrg.length > 0;\n }\n return false;\n });\n }\n\n async getMissionsByOrderedOrganisationBySpace(\n ordOrgID: string,\n spaceID: string,\n ): Promise<Mission[]> {\n return this.API.__proto__.MissionsByOrderedOrganisationBySpace(ordOrgID, {\n eq: spaceID,\n }).then((mis) => mis.items);\n }\n\n async softDeleteMission(missionID: string): Promise<Mission> {\n // const hardDelete = await this.canHardDeteleMission(mission.id);\n // if (hardDelete) {\n // return this.hardDeleteMission(mission.id);\n // }\n console.log(\"Soft Deleting mission\");\n const missionUpd = await this.update({\n id: missionID,\n deletedAt: Date.now(),\n });\n await this.checkIfCurrentUserMissionChanged(missionUpd);\n return missionUpd;\n }\n\n async list(): Promise<Mission[]> {\n const mis = await this.API.__proto__.ListMissions();\n return mis.items.filter((m) => !m.deletedAt);\n }\n\n // async canHardDeteleMission(missionID: string): Promise<boolean> {\n // const events = (\n // await this.API.ListEvents({ ownerID: { eq: missionID } })\n // ).items;\n // if (events.length > 0) {\n // return false;\n // }\n // const comments = (\n // await this.API.ListComments({ ownerID: { eq: missionID } })\n // ).items;\n // if (comments.length > 0) {\n // return false;\n // }\n // const affectations =\n // await this.affectationService.getAffectationsFromMissionID(\n // missionID,\n // );\n // if (affectations.length > 0) {\n // return false;\n // }\n // return true;\n // }\n\n async hardDeleteMission(missionID: string): Promise<Mission> {\n return this.API.__proto__.DeleteMission({ id: missionID });\n }\n\n getActivatedMissions(missions: Mission[]): Mission[] {\n const activated = [];\n missions.map(async (mission) => {\n const isActivated =\n mission.groups && mission.groups.includes(ProfileStatus.ACTIVE);\n if (isActivated) {\n activated.push(mission);\n }\n });\n return activated;\n }\n\n async getMissionsForZone(zoneID: string): Promise<Mission[]> {\n return (await this.API.__proto__.MissionsByZone(zoneID)).items.filter(\n (mis) => !mis.deletedAt,\n );\n }\n\n async getMissionsForSpace(spaceID: string): Promise<Mission[]> {\n return this.API.__proto__.MissionsBySpace(spaceID).then((missions) => missions.items);\n }\n\n activateMission(mis: Mission) {\n if (\n mis &&\n (!mis.groups || !mis.groups.includes(ProfileStatus.ACTIVE))\n ) {\n const groups = mis.groups ? mis.groups : [];\n groups.push(ProfileStatus.ACTIVE);\n this.update({ id: mis.id, groups });\n }\n }\n\n async getMissionsByTemplate(templateID: string): Promise<Mission[]> {\n return (await this.API.__proto__.MissionsByTemplate(templateID)).items.filter(\n (mis) => !mis.deletedAt,\n );\n }\n\n async getMission(missionID: string): Promise<Mission> {\n return this.API.__proto__.GetMission(missionID);\n }\n\n async getMissionsByZoneByRole(\n zoneID: string,\n role: RoleStatus,\n ): Promise<Mission[]> {\n return (\n await this.API.__proto__.MissionsByZoneByRole(\n zoneID,\n { eq: role },\n null,\n { deletedAt: { attributeExists: false } },\n 200,\n )\n ).items;\n }\n\n async checkIfCurrentUserMissionChanged(changedMission: Mission) {\n if (this.currentUserID === changedMission.userID) {\n this.currentMissionsUpdated.next(true);\n }\n }\n\n async instantMissionsOfCurrent(\n currentUserID: string,\n ): Promise<Mission[] | null> {\n this.currentUserID = currentUserID;\n let missions = await this.getMissionsFromUserID(currentUserID);\n\n /** Filter to keep only available missions */\n missions = missions.filter((mission) => {\n const hasExpired = dateHasExpired(mission.endDateTime);\n\n /** Update this.lastExpiredMission */\n if (hasExpired) {\n const lastExpiredDate = this.lastExpiredMission\n ? new Date(this.lastExpiredMission.endDateTime)\n : null;\n const dateExpired = new Date(mission.endDateTime);\n if (!lastExpiredDate || dateExpired > lastExpiredDate) {\n this.lastExpiredMission = mission;\n }\n }\n return !hasExpired;\n });\n\n if (missions.some((mis) => mis.role === RoleStatus.VISITOR_MUSEUM) && missions.length > 0) {\n // workflow for VISITOR_MUSEUM\n return missions;\n }\n /** Keep only started missions */\n let nextMissionDate = null;\n missions = missions.filter((mission) => {\n const started = mission.startDateTime\n ? dateHasExpired(mission.startDateTime)\n : true;\n /** Update next mission to start */\n if (!started) {\n const missionDate = new Date(mission.startDateTime);\n if (!nextMissionDate || missionDate < nextMissionDate) {\n this.nextMissionToStart = mission;\n nextMissionDate = missionDate;\n }\n }\n return started;\n });\n return missions.length > 0 ? missions : null;\n }\n\n /**\n * Filters the missions that assisted to live of the visit (by comparing the realStartTime of VisitTemplate and connectedAt time)\n * @param template VisitTemplate \n * @param missions Mission[] missions for this visit\n * @returns Mission[] filtered missions\n */\n filterMissionsAssitedToLiveForTemplate(template: VisitTemplate, missions: Mission[]): Mission[] {\n const visitStartTimestamp = template.realStartedAt;\n return missions.filter((mis) => {\n if (!mis.connectedToLiveAt) {\n return false;\n }\n if (mis.connectedToLiveAt.length === 0) {\n return false;\n }\n const lastConnectedAt = mis.connectedToLiveAt[mis.connectedToLiveAt.length - 1];\n const lastConnectedAtTimestamp = DateTime.fromISO(lastConnectedAt).toMillis();\n return lastConnectedAtTimestamp > visitStartTimestamp;\n });\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Property } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class PropertyService {\n API: any;\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async createProperty(property: Property): Promise<Property> {\n return this.API.__proto__.CreateProperty(property);\n }\n\n async deleteProperty(propertyID: string): Promise<Property> {\n return this.API.__proto__.DeleteProperty({ id: propertyID });\n }\n\n async getPropertiesForOrganisation(orgID: string): Promise<Property[]> {\n return this.API.__proto__.PropertiesByOrganisation(orgID).then(\n (props) => props.items,\n );\n }\n\n async listProperties(): Promise<Property[]> {\n try {\n return this.API.__proto__.ListProperties().then((props) => props.items);\n } catch {\n return this.API.__proto__.ListPropertys().then((props) => props.items);\n }\n }\n\n async listPropertiesForSpace(spaceID: string): Promise<Property[]> {\n try {\n return this.API.__proto__.ListProperties({ spaceID: { eq: spaceID } }).then((props) => props.items);\n } catch {\n return this.API.__proto__.ListPropertys({ spaceID: { eq: spaceID } }).then((props) => props.items);\n }\n\n }\n}","import { Inject, Injectable, NgZone } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { Router } from \"@angular/router\";\nimport { Location } from \"@angular/common\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { LevelStatus, Mission, Organisation, Profile, ProfileEntity, ProfileStatus, PropertyType, RoleStatus, SpModule } from \"../types.service\";\nimport { enumToArray, filterUniqueArrayByID, getHighestLevelForMissions, getHighestRoleForMissions, getLevelsBelow, getRolesBelowForManager } from \"../helpers.service\";\nimport { ProfileService } from \"./models/profile.service\";\nimport { MissionService } from \"./models/mission.service\";\nimport { PropertyService } from \"./models/property.service\";\nimport { DateTime } from \"luxon\";\nimport { Auth } from \"aws-amplify\";\n\ninterface CreateUser {\n email: string;\n phone?: string;\n lastName: string;\n firstName: string;\n password?: string;\n}\n\n/**\n * UserService handles user's lifecycle, from creation to deletion\n */\n@Injectable({\n providedIn: \"root\",\n})\nexport class BaseUserService {\n\n isChanged: Subject<boolean> = new Subject<boolean>();\n\n updating = false;\n\n managers = [\n RoleStatus.ADMIN,\n RoleStatus.MANAGER,\n RoleStatus.OWNER,\n RoleStatus.GUIDE_MUSEUM,\n ];\n\n currentMissions: Mission[];\n\n lastExpiredMission: Mission;\n\n nextMissionToStart: Mission;\n\n cu: ProfileEntity = null;\n\n spModule: SpModule;\n\n constructor(\n private profileService: ProfileService,\n private missionService: MissionService,\n private propertyService: PropertyService,\n private router: Router,\n private location: Location,\n private ngZone: NgZone,\n private translate: TranslateService,\n @Inject('SPModule') spModuleInjected: SpModule,\n ) {\n // this.checkConnectedAWSUser();\n this.missionService.currentMissionsUpdated.subscribe(async (data) => {\n this.currentMissions =\n await this.missionService.instantMissionsOfCurrent(this.cu.id);\n this.isChanged.next(true);\n });\n this.spModule = spModuleInjected;\n }\n\n /**\n * Checks if AWS user is connected and assigng it to current user (this.cu)\n **/\n async checkConnectedAWSUser() {\n if (!this.cu) {\n // console.log(\"check AWS user\");\n let cau = null;\n let user = null;\n try {\n if (!this.updating) {\n cau = await Auth.currentAuthenticatedUser();\n // console.log(\"connected\", cau);\n user = await this.current(cau);\n // console.log(\"current of userService\", user);\n }\n } catch { }\n if (!user && !this.updating) {\n // console.log(\"no user in check connected aws user\");\n this.router.navigate([\"auth\"]);\n }\n }\n }\n\n /**\n * createUser spawns a new User, along with:\n * - a proper AWSCognito signup\n * - a Profile entry holding the AWSCognito ID\n * - a Mission entry holding the Organisation ID\n *\n * @see 174\n * @see https://docs.amplify.aws/lib/auth/emailpassword/q/platform/js#sign-up\n * @todo wonder if we can mash together Profile, Mission and User entries\n * @param u User to be created\n */\n async createUserAWSandProfile(\n u: {\n email: string;\n phone: string;\n lastName: string;\n firstName: string;\n password?: string;\n },\n prevalidated: boolean = false,\n ): Promise<Profile> {\n const attributes = {\n email: u.email.trim(),\n given_name: u.firstName,\n family_name: u.lastName,\n zoneinfo: \"fr\", // @todo deal with zoneinfo and locale\n locale: \"fr\",\n \"custom:prevalidated\": \"false\",\n };\n if (prevalidated) {\n attributes[\"custom:prevalidated\"] = \"true\";\n }\n // AWSCognito\n const password = u.password ? u.password : \"temporaryp\";\n let error;\n try {\n const { userSub } = await Auth.signUp({\n username: u.email, // username should be an email they say\n password,\n attributes,\n clientMetadata: {\n phone: u.phone,\n },\n });\n if (userSub) {\n return this.createProfile(userSub, u);\n }\n } catch (error_: any) {\n switch (error_.code) {\n case \"InvalidPasswordException\":\n error = \"auth.error.wrong_password\";\n break;\n case \"UserNotConfirmedException\":\n error = \"auth.error.user_not_confirmed\";\n break;\n case \"InvalidParameterException\":\n error = \"auth.error.invalid_parameter\";\n break;\n default:\n error = error_.message;\n }\n console.log(`AWS Sign UP error : ${error}`);\n }\n return Promise.reject(error);\n }\n\n /**\n * - Creates AWS user in Cognito for Hotel User Pool Schema (only email is required)\n * - Creates Profile in DynamoDB\n *\n * @param u User to be created\n */\n async createHotelUserAWSandProfile(\n user: {\n email: string;\n lastName: string;\n firstName: string;\n },\n ): Promise<Profile> {\n const attributes = {\n email: user.email.trim()\n };\n // AWSCognito\n const password = \"temporaryp\";\n let error;\n try {\n const { userSub } = await Auth.signUp({\n username: user.email.trim(),\n password,\n attributes,\n });\n if (userSub) {\n return this.createProfile(userSub, user);\n }\n } catch (error_: any) {\n switch (error_.code) {\n case \"InvalidPasswordException\":\n error = \"auth.error.wrong_password\";\n break;\n case \"UserNotConfirmedException\":\n error = \"auth.error.user_not_confirmed\";\n break;\n case \"InvalidParameterException\":\n error = \"auth.error.invalid_parameter\";\n break;\n default:\n error = error_.message;\n }\n console.log(`AWS Sign UP error : ${error}`);\n }\n return Promise.reject(error);\n }\n\n async createProfile(\n awsUserID: string,\n u: CreateUser,\n ): Promise<Profile> {\n const profile = await this.profileService.createProfile({\n userID: awsUserID,\n metadata: JSON.stringify({\n email: u.email,\n phone: u.phone,\n lastName: u.lastName,\n firstName: u.firstName,\n }),\n status: ProfileStatus.WAITING_FOR_ACTIVATION,\n });\n return profile;\n }\n\n currentOrganisation(spaceID: string = null): Organisation {\n if (this.cu) {\n if (!spaceID) {\n return this.currentMissions[0].organisation;\n }\n return this.currentMission(spaceID).organisation;\n }\n return null;\n }\n\n async current(\n user,\n fastConnect: boolean = false,\n ): Promise<ProfileEntity | null> {\n if (!this.cu && !this.updating) {\n this.updating = true;\n this.cu = await this.userFromAWSID(user.username);\n if (!this.cu && user.attributes.email) {\n console.log(\n `No profile for userID 🔪 ${user.attributes.email}`,\n );\n // There's no profiles, profiles.items.length === 0\n // It's maybe the 🤮 case where the profile has been saved with an email\n // instead of an hashed id\n // If found, we need to replace the id in both the Profile\n const emailProfile = await this.userFromAWSID(\n user.attributes.email,\n );\n if (emailProfile) {\n console.log(\n `👏 doing the spacehip reversal email on ${user.attributes.email}`,\n );\n this.cu = await this.userFromAWSID(user.username);\n }\n }\n if (!this.cu) {\n this.updating = false;\n await Auth.signOut();\n return null;\n }\n const missions = await this.missionService.instantMissionsOfCurrent(\n this.cu.id\n );\n this.currentMissions = missions;\n let okToLogin = true;\n if (!fastConnect && !this.hasManagerRoleInAnyMission()) {\n // check access token if not Fast connect (fast connect is for the guest connection via link(/redirect?user=))\n // checks visitors(museum or not), occupants, service\n okToLogin = await this.checkAccessToken(\n user.signInUserSession.accessToken.jwtToken,\n );\n }\n if (!okToLogin) {\n this.cu = null;\n this.currentMissions = [];\n this.updating = false;\n await Auth.signOut();\n return null;\n }\n await this.profileService.updateProfile({\n id: this.cu.id,\n lastConnectedAt: Date.now(),\n });\n if (!missions && this.location.path() !== \"/no-mission\") {\n this.ngZone.run(() => {\n this.router.navigate([\"/no-mission\"]);\n });\n }\n // console.log(\"user is changed emitting\");\n this.isChanged.next(true);\n this.updating = false;\n }\n return this.cu;\n }\n\n async userFromAWSID(userId: string): Promise<ProfileEntity | null> {\n const profile = await this.profileService.getProfileFromAWSID(userId);\n if (profile) {\n return new ProfileEntity(profile);\n }\n return null;\n }\n\n async userFromUserID(userID: string): Promise<ProfileEntity | null> {\n const profile = await this.profileService.getProfile(userID);\n return new ProfileEntity(profile);\n }\n\n currentMission(spaceID: string): Mission {\n const mission = this.getMissionForSpace(spaceID);\n return mission;\n }\n\n isManager(spaceID: string): boolean {\n const mission = this.getMissionForSpace(spaceID);\n if (mission) {\n return this.managers.includes(mission.role);\n }\n return false;\n }\n\n isService(spaceID: string): boolean {\n const mission = this.getMissionForSpace(spaceID);\n if (mission) {\n return mission.role === RoleStatus.SERVICE;\n }\n return false;\n }\n\n isAdmin(spaceID: string): boolean {\n const mission = this.getMissionForSpace(spaceID);\n if (mission) {\n return mission.role === RoleStatus.ADMIN;\n }\n return false;\n }\n\n isSmarterPlan(): boolean {\n if (!this.currentMissions) {\n return false;\n }\n const spMissions = this.currentMissions.filter(\n (m) =>\n m.organisationID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" &&\n this.managers.includes(m.role),\n ); // ID of SmarterPlan\n return spMissions.length > 0;\n }\n\n isSPAdmin(): boolean {\n if (!this.currentMissions) {\n return false;\n }\n const spMissions = this.currentMissions.filter(\n (m) =>\n m.organisationID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" &&\n m.role === RoleStatus.ADMIN,\n ); // ID of SmarterPlan\n return spMissions.length > 0;\n }\n\n getMissionForSpace(spaceID: string): Mission {\n if (!this.currentMissions) {\n return null;\n }\n return this.currentMissions.find((m) => m.spaceID === spaceID);\n }\n\n hasManagerRoleInAnyMission(): boolean {\n if (!this.currentMissions) {\n return false;\n }\n return this.currentMissions.some((mis) =>\n this.managers.includes(mis.role),\n );\n }\n\n hasServiceRoleInAnyMission(): boolean {\n if (!this.currentMissions) {\n return false;\n }\n return this.currentMissions.some(\n (mis) => mis.role === RoleStatus.SERVICE,\n );\n }\n\n hasAdminRoleInAnyMission(): boolean {\n if (!this.currentMissions) {\n return false;\n }\n return this.currentMissions.some(\n (mis) => mis.role === RoleStatus.ADMIN,\n );\n }\n\n async createOrUpdateMissionForOrgWithProperty(\n missionInput: Mission,\n orgID: string,\n create: boolean = true,\n ): Promise<Mission> {\n const mission = await (create\n ? this.missionService.create(missionInput)\n : this.missionService.update(missionInput));\n\n if (this.managers.includes(mission.role) && mission.spaceID) {\n const properties =\n await this.propertyService.getPropertiesForOrganisation(orgID);\n const propertySpaceIDs = properties.map(\n (property_) => property_.spaceID,\n );\n if (propertySpaceIDs.includes(mission.spaceID)) {\n return mission;\n }\n // we delegate the rights of the space\n await this.propertyService.createProperty({\n spaceID: mission.spaceID,\n organisationID: orgID,\n type: PropertyType.SHARED,\n });\n }\n return mission;\n }\n\n async softDeleteUser(userID: string) {\n const missions = await this.missionService.getMissionsFromUserID(userID);\n if (missions.length === 0) {\n await this.profileService.updateProfile({ id: userID, deletedAt: Date.now() });\n console.log(\"Profile soft deleted\");\n }\n }\n /**\n * Checks if the Profile (by id) can be removed completely from the DB (no missions in the DB)\n * @param profileID\n * @returns boolean\n */\n async canHardDeleteUser(profileID: string): Promise<boolean> {\n const missions = (await this.missionService.getMissionsFromUserID(profileID));\n return missions.length === 0;\n }\n\n async hardDeleteUser(userID: string) {\n const deleted = await this.profileService.deleteProfile(userID);\n console.log(\"Profile hard deleted\");\n return deleted;\n }\n\n getManagerMissions(): Mission[] {\n if (!this.currentMissions) {\n return [];\n }\n return this.currentMissions.filter((mis) =>\n this.managers.includes(mis.role),\n );\n }\n\n getAvalableLevelsForCurrentUser(): LevelStatus[] {\n if (!this.currentMissions) {\n return [LevelStatus.MINIMUM];\n }\n const levels = enumToArray(LevelStatus);\n const highestLevel = getHighestLevelForMissions(this.currentMissions);\n\n return levels.filter((level) =>\n getLevelsBelow(highestLevel).includes(level),\n );\n }\n\n getAvailableRolesForCurrentUser(): RoleStatus[] {\n if (!this.currentMissions) {\n return [RoleStatus.VISITOR];\n }\n const roles = enumToArray(RoleStatus);\n const highestRole = getHighestRoleForMissions(this.currentMissions);\n return roles.filter((role) =>\n getRolesBelowForManager(highestRole).includes(role),\n );\n }\n\n /** Test if the user have the role given in parameter : \"roleStatus\" */\n isRole(roleStatus: RoleStatus): boolean {\n if (!this.currentMissions) {\n return false;\n }\n return this.currentMissions.some((m) => m.role === roleStatus);\n }\n\n isGuide(spaceID: string = null): boolean {\n if (spaceID) {\n const mission = this.getMissionForSpace(spaceID);\n if (mission) {\n return mission.role === RoleStatus.GUIDE_MUSEUM;\n }\n }\n return this.isRole(RoleStatus.GUIDE_MUSEUM);\n }\n\n isMuseumVisitor(spaceID: string = null): boolean {\n if (spaceID) {\n const mission = this.getMissionForSpace(spaceID);\n if (mission) {\n return mission.role === RoleStatus.VISITOR_MUSEUM;\n }\n }\n return this.isRole(RoleStatus.VISITOR_MUSEUM);\n }\n\n isOccupant(): boolean {\n return this.isRole(RoleStatus.OCCUPANT);\n }\n\n isVisitor(spaceID: string = null): boolean {\n if (spaceID) {\n const mission = this.getMissionForSpace(spaceID);\n if (mission) {\n return mission.role === RoleStatus.VISITOR;\n }\n }\n return this.isRole(RoleStatus.VISITOR);\n }\n\n isMuseumUser(spaceID: string = null): boolean {\n return this.isGuide(spaceID) || this.isMuseumVisitor(spaceID);\n }\n\n hasOnlyMuseumRole(): boolean {\n if (this.currentMissions) {\n return this.currentMissions.every(\n (m) =>\n m.role === RoleStatus.GUIDE_MUSEUM ||\n m.role === RoleStatus.VISITOR_MUSEUM,\n );\n }\n return false;\n }\n\n async profileForMail(mail: string): Promise<Profile> {\n const usersWithMail = await this.profileService.getUsersForMail(mail);\n return usersWithMail.length > 0 ? usersWithMail[0] : null;\n }\n\n currentOrderedOrgList(): Organisation[] {\n if (!this.currentMissions) {\n return [];\n }\n const orderedOrgList = this.currentMissions.map(\n (mis) => mis.orderedOrganisation,\n );\n return filterUniqueArrayByID(orderedOrgList);\n }\n\n userHasAccessToAllZonesInSpace(spaceID: string): boolean {\n const missionsForSpace = this.currentMissions.filter(\n (mis) => mis.spaceID === spaceID,\n );\n return missionsForSpace.some(\n (mission) =>\n !mission.zoneID || (mission.zone && !mission.zone.parentID),\n );\n }\n\n async logoutCurrentAndSignOutAuth() {\n await this.profileService.updateProfile({\n id: this.cu.id,\n token: null,\n });\n this.cu = null;\n this.currentMissions = null;\n this.isChanged.next(false);\n await Auth.signOut();\n }\n\n async logoutCurrentWihtoutAuth() {\n await this.profileService.updateProfile({\n id: this.cu.id,\n token: null,\n });\n this.cu = null;\n this.currentMissions = null;\n this.isChanged.next(false);\n }\n\n async checkAccessToken(jwtToken: string): Promise<boolean> {\n const now = DateTime.local();\n if (this.cu.token && this.cu.tokenExpiredAt > now.toMillis()) {\n // check token\n if (this.cu.token === jwtToken) {\n // console.log(\"same aws token\");\n return true;\n }\n alert(this.translate.instant(\"auth.error.activeToken\"));\n return false;\n }\n await this.profileService.updateProfile({\n id: this.cu.id,\n tokenExpiredAt: now.plus({ minutes: 5 }).toMillis(),\n token: jwtToken,\n status: ProfileStatus.ACTIVE,\n });\n return true;\n }\n\n async clearUserToken(id) {\n await this.profileService.updateProfile({\n id: id,\n token: null,\n });\n }\n\n updateCurrentUser(profile: Profile) {\n this.cu = new ProfileEntity(profile);\n this.isChanged.next(true);\n }\n\n getSpModule(): SpModule {\n return this.spModule;\n }\n}\n","import {EventEmitter, Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {Zone} from '../types.service';\n\n/**\n * Atomic zone change service to break cyclic dependencies issue\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ZoneChangeService {\n\n zoneChange: Subject<Zone | null> = new Subject();\n zonesForUserChange: Subject<Zone[] | null> = new Subject();\n\n private currentZone: Zone;\n private currentZones: Zone[];\n\n public floorHasChanged: EventEmitter<Zone> = new EventEmitter<Zone>();\n\n constructor() {\n this.zoneChange.subscribe((zone) => {\n // console.log(`new zone ${JSON.stringify(zone)}`);\n this.currentZone = zone;\n });\n\n this.zonesForUserChange.subscribe((zones) => {\n // console.log(`new zones ${JSON.stringify(zones)}`);\n this.currentZones = zones;\n });\n }\n\n}\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 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 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 */\nimport { DbObjectType, MattertagActionMode, POI, PoiType } from \"./types.service\";\n\nexport class MattertagData {\n\n private object: DbObjectType;\n\n private type: PoiType = PoiType.TICKET;\n\n public elementID: string;\n\n private position: any = { x: 0, y: 0, z: 0 };\n\n private normal: any = { x: 0, y: 1, z: 0 };\n\n private mediaSrc: string;\n\n private sweepID: string;\n\n public customIconIndex = 0;\n\n private rotation: { x: number; y: number; };\n\n private poi: POI;\n\n constructor(type: PoiType) {\n this.setType(type);\n }\n\n /*-----------------------------------------------------------------------------\n Setters\n ------------------------------------------------------------------------------*/\n\n setType(type: PoiType) {\n this.type = type;\n }\n\n setObject(object: DbObjectType, tagType: PoiType) {\n this.object = object;\n this.setElementID(object.id);\n this.setType(tagType);\n }\n\n setElementID(ticketID: string) {\n this.elementID = ticketID;\n }\n\n setPosition(position: { x: number; y:number; z:number; }) {\n this.position = position;\n }\n\n setNormal(normal: { x: number; y:number; z:number; }) {\n this.normal = normal;\n }\n\n setMediaSource(source: string) {\n this.mediaSrc = source;\n }\n\n setSweepID(sweepID: string) {\n this.sweepID = sweepID;\n }\n\n setRotation(rotation: { x: number; y: number; }) {\n this.rotation = rotation;\n }\n\n setPoi(poi: POI) {\n this.poi = poi;\n }\n\n /*-----------------------------------------------------------------------------\n Getters\n ------------------------------------------------------------------------------*/\n\n // MattertagData\n getData() {\n let label = \"New Tag\";\n switch (this.type) {\n case PoiType.TICKET:\n label = this.object ? \"\" : \"New Tag\"; // if the object exists we inject title in html\n break;\n case PoiType.EQUIPMENT:\n label = this.object ? \"\" : \"New Tag\";\n break;\n case PoiType.MEASURE:\n label = this.object ? \"\" : \"New Tag\";\n break;\n case PoiType.DATA:\n label = this.object ? \"\" : \"New Tag\";\n break;\n case PoiType.DESK:\n label = this.object ? \"\" : \"New Tag\";\n break;\n case PoiType.OBJECT3D:\n label = this.object ? \"\" : \"Click on blinking icon to load a 3D object here\";\n break;\n case PoiType.ROOM:\n label = \"\";\n break;\n default:\n label = \"New Tag\";\n break;\n }\n const data = {\n label,\n description: \"\",\n anchorPosition: {\n x: this.position.x * 1,\n y: this.position.y * 1,\n z: this.position.z * 1,\n },\n stemVector: {\n x: this.normal.x * 0.3,\n y: this.normal.y * 0.3,\n z: this.normal.z * 0.3,\n },\n color: {\n // blue disc\n r: 0,\n g: 0,\n b: 1,\n },\n media: {\n type: \"mattertag.media.none\",\n src: \"\"\n },\n };\n return data;\n }\n\n getType() {\n return this.type;\n }\n\n getNormal() {\n return this.normal;\n }\n\n getCallbackActionMode(): MattertagActionMode {\n switch (this.type) {\n case PoiType.TICKET:\n return this.object ? MattertagActionMode.POSITION_TICKET : MattertagActionMode.ADD_TICKET;\n case PoiType.OBJECT3D:\n return MattertagActionMode.POSITION_OBJECT3D;\n // return this.object ? MattertagActionMode.POSITION_OBJECT3D : MattertagActionMode.ADD_OBJECT3D;\n case PoiType.EQUIPMENT:\n return this.object ? MattertagActionMode.POSITION_EQUIPMENT : MattertagActionMode.ADD_EQUIPMENT;\n case PoiType.DATA:\n return this.object ? MattertagActionMode.POSITION_DATA : MattertagActionMode.ADD_DATA;\n case PoiType.DESK:\n return this.object ? MattertagActionMode.POSITION_DATA : MattertagActionMode.ADD_DESK;\n case PoiType.ROOM:\n return this.object ? MattertagActionMode.POSITION_ROOM : MattertagActionMode.ADD_ROOM;\n default:\n return MattertagActionMode.ADD_TICKET;\n }\n }\n\n getIcon() {\n switch (this.type) {\n case PoiType.TICKET:\n return \"icon_ticket.png\";\n case PoiType.EQUIPMENT:\n return \"icon_equipment.png\";\n case PoiType.OBJECT3D:\n return \"icon_object3d.png\";\n }\n return \"\";\n }\n\n getCoordinateString() {\n return JSON.stringify({\n x: this.position.x,\n y: this.position.y,\n z: this.position.z,\n xRotation: this.rotation ? this.rotation.x : null,\n yRotation: this.rotation ? this.rotation.y : null,\n });\n }\n\n getMetadataString() {\n return JSON.stringify({\n icon: this.getIcon(),\n normal: this.getNormal(),\n });\n }\n\n getSweepID() {\n return this.sweepID;\n }\n\n getObject(): any {\n return this.object;\n }\n\n\n getRotation(): { x: number; y: number; } {\n return this.rotation;\n }\n\n getPoi(): POI {\n return this.poi;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class BaseVisibilityService {\n detailShowing = new Subject<boolean>();\n\n constructor() { }\n}","\nexport class Config {\n my_config: {\n icon_ticket?: string;\n icon_equipment?: string;\n icon_measure?: string;\n icon_data?: string;\n icon_object3d?: string;\n icon_position: string;\n MAX_CHARACTER_DESCRIPTION_TAG: number;\n DEFAULT_HEIGHT_HTML_TAG: number;\n DEFAULT_OPACITY_TAG: number;\n COLD_LIMIT?: number;\n HOT_LIMIT?: number;\n DEFAULT_WIDTH_HTML_TAG: number;\n MAX_IMAGE_HEIGHT_HTML_TAG: number;\n icon_room_available?: string;\n icon_room_unavailable?: string;\n icon_room_chosen?: string;\n icon_room_viewed?: string;\n };\n\n constructor() { }\n}\n","import {Inject, Injectable, NgZone} from '@angular/core';\r\nimport {Router} from '@angular/router';\r\nimport {Subject} from 'rxjs';\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 {BaseTagService} from './tag.service';\r\nimport {BaseVisibilityService} from './baseVisibility.service';\r\nimport {Config} from '../config';\r\nimport {CameraMode} from '../types.service';\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 public sdk: any;\r\n\r\n private container: any;\r\n\r\n // Position camera\r\n private poseMatterport: any;\r\n\r\n public poseCamera: { rotation: any; position: any; sweep: any };\r\n\r\n // Pointer trick\r\n private pointerButton: any;\r\n\r\n // 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 private 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 /**\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 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 (document.location.href.indexOf('-dev') !== -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 // 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 (document.URL.indexOf('https://dev.smarterplan.io') !== -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 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 // on tag click open details page\r\n this.sdk.on('tag.click', (sid: string) => {\r\n // get object of this tag\r\n try {\r\n const mattertagData = this.dictionnaryTags.get(sid);\r\n const url = tagService.getUrlForSeeDetails(\r\n mattertagData.getObject(),\r\n mattertagData.getType()\r\n );\r\n if (url !== '') {\r\n this.visibilityService.detailShowing.next(true);\r\n this.ngZone.run(() => {\r\n this.router.navigate([url]);\r\n });\r\n }\r\n } catch {\r\n console.log('Cannot show details for tag');\r\n }\r\n });\r\n\r\n // Pointer trick\r\n // Create a div that will appear when the cursor is still\r\n // It will intercept the click of the mouse before it trigerring the Matterport's tour navigation\r\n this.timerPointer = setInterval(\r\n this.updatePointerTrick.bind(this),\r\n 50\r\n );\r\n\r\n /**\r\n * 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 }.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 resolve(true);\r\n }.bind(this)\r\n );\r\n });\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 = `${\r\n 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 return this.dictionnaryObjects3D.get(uuid);\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/${\r\n 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/${\r\n 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([`${this.router.url}`], {\r\n queryParams: {positioning: true},\r\n });\r\n }\r\n break;\r\n case MattertagActionMode.POSITION_ROOM:\r\n if (lastTag) {\r\n this.router.navigate([`${this.router.url}`], {\r\n queryParams: {positioning: true},\r\n });\r\n }\r\n break;\r\n default:\r\n this.router.navigate([`${this.router.url}`]);\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 (document.location.href.indexOf('-dev') !== -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 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 const modelNode = sceneObject.addNode();\r\n const initial = {\r\n url: `/assets/3Dobjects/objects/${obj.object}${\r\n obj.format.indexOf('.') === -1 ? '.' + obj.format : obj.format\r\n }`,\r\n visible: true,\r\n colliderEnabled: true\r\n };\r\n\r\n switch (obj.format) {\r\n case '.obj':\r\n case 'obj':\r\n modelNode.addComponent('mp.objLoader', initial);\r\n break;\r\n case '.fbx':\r\n case 'fbx':\r\n modelNode.addComponent('mp.fbxLoader', initial);\r\n break;\r\n case '.gltf':\r\n case 'gltf':\r\n modelNode.addComponent('mp.gltfLoader', initial);\r\n break;\r\n case '.glb':\r\n case 'glb':\r\n modelNode.addComponent('mp.gltfLoader', initial);\r\n break;\r\n case '.dae':\r\n case 'dae':\r\n 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 // 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 // if (obj.mode) {\r\n // this.set3DObjectMode(node, obj.mode);\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\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) {\r\n this.attachGizmoControlTo3DObject(\r\n modelNode,\r\n sceneObject,\r\n mode,\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 this.dictionnaryObjects3D.set(modelNode.obj3D.uuid, modelNode);\r\n this.dictionnarySceneObjects3D.set(modelNode.obj3D.uuid, sceneObject);\r\n\r\n sceneObject.start();\r\n resolve(this.lastObject3D);\r\n });\r\n }\r\n\r\n getSceneNodeFromObject3DId(uuid: string): any {\r\n return this.dictionnarySceneObjects3D.get(uuid);\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 ): 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.inputs.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\r\n if (!this.lastObject3D || !this.lastObject3D.controls) {\r\n try {\r\n modelNode.obj3D.id = 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\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 // 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\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 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 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>=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>=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 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';\nimport { Router } from '@angular/router';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { ViewerService } from '../../services/viewer.service';\n\n@Component({\n selector: 'lib-modal-switch-visit',\n templateUrl: './modal-switch-visit.component.html',\n styleUrls: ['./modal-switch-visit.component.scss']\n})\nexport class ModalSwitchVisitComponent implements OnInit {\n @Input() content: string;\n @Input() model3D: string;\n @Input() spaceID: string;\n @Input() dataToMove: { sweepToMove: string, rotation: any; };\n constructor(public activeModal: NgbActiveModal, private router: Router, private viewerService: ViewerService,\n // private objectSubService: ObjectSubscriptionService\n ) { }\n\n ngOnInit(): void { }\n\n switchVisit() {\n this.activeModal.close();\n if (this.dataToMove) {\n this.viewerService.setSweepToMove(this.dataToMove.sweepToMove);\n this.viewerService.setRotationToMove(this.dataToMove.rotation);\n }\n // this.objectSubService.forceRemove = true; // we reset the tags when changing visit\n this.router.navigate([\"visit\", this.spaceID], {\n queryParams: { model3D: this.model3D },\n });\n }\n\n}\n","<div class=\"modal-container\">\n <p>{{content}}</p>\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"switchVisit()\">{{'Yes, switch visit' | translate }}</button>\n <button class=\"btn btn-outline-primary rounded-pill\"(click)=\"activeModal.close()\">{{'No, stay here' | translate }}</button>\n</div>\n","import { Storage } from \"aws-amplify\";\nimport { Equipment } from \"../types.service\";\n\nexport const deleteFromS3 = async (path) => {\n await Storage.remove(path, { level: \"public\" })\n .then((result) => console.log(\"Successfully deleted =>\", result))\n .catch((error) => console.log(\"Deleting from S3 error:\", error));\n};\n\nexport const uploadFileToS3 = async (\n path: string,\n file: File,\n objectId: string | null,\n): Promise<string> => {\n const prefix = objectId ? `${objectId.slice(0, 8)}_` : \"\";\n return Storage.put(path + prefix + file.name, file, {\n progressCallback(progress) {\n // console.log('Uploaded : ', progress);\n },\n contentType: file.type,\n })\n .then((result: any) => {\n console.log(\"Success =>\", result);\n return result.key;\n })\n .catch((error) => {\n console.log(\"error =>\", error);\n return null;\n });\n};\n\nexport const getSignedImageUrlForEquipment = async (\n equip: Equipment,\n): Promise<string | null> => {\n if (!equip.photo) {\n return Promise.resolve(null);\n }\n return Storage.get(equip.photo, { level: \"public\" })\n .then((result) => {\n return result as string;\n })\n .catch((error) => {\n console.log(\"error fetching file from s3 =>\", error);\n return null;\n });\n\n};\n\nexport const getSignedImageUrlForProfile = async (\n profile,\n): Promise<string | void> => {\n return Storage.get(profile.avatar, { level: \"public\" })\n .then((result) => {\n return result as string;\n })\n .catch((error) => {\n console.log(\"error fetching file from s3 =>\", error);\n });\n};\n\nexport const getSignedImageUrlForSpace = async (\n space,\n): Promise<string | void> => {\n return Storage.get(space.annexes, { level: \"public\" })\n .then((result) => {\n return result as string;\n })\n .catch((error) => {\n console.log(\"error fetching file from s3 =>\", error);\n });\n};\n\nexport const uploadBase64Image = async (\n uri: string,\n objectId: string | null,\n path: string,\n friendlyFileName: string,\n): Promise<string> => {\n return fetch(uri)\n .then((res) => res.blob())\n .then((blob) => {\n const file = new File([blob], `${friendlyFileName}.jpeg`, {\n type: \"image/jpeg\",\n });\n return uploadFileToS3(path, file, objectId);\n });\n};\n\nexport const removeAllFilesFromFolderS3 = async (\n folderPath: string,\n): Promise<any> => {\n const arrayOfPromises = [];\n Storage.list(folderPath, { level: \"public\" })\n .then((res) => {\n Object.keys(res).map(async (key) => {\n const file = res[key];\n arrayOfPromises.push(deleteFromS3(file.key));\n });\n })\n .catch((error) => console.error(\"List failure\", error));\n return Promise.all(arrayOfPromises);\n};\n\nexport const listFilesInFolder = async (folderPath: string): Promise<any> => {\n return Storage.list(folderPath, { level: \"public\", pageSize: 'ALL' })\n .then((res) => {\n return res.results;\n })\n .catch((error) => console.error(\"List failure\", error));\n};\n\nexport const getSignedFile = async (path): Promise<string | null> => {\n return Storage.get(path, { level: \"public\" })\n .then((result) => {\n return result as string;\n })\n .catch((error) => {\n console.log(\"error fetching file from s3 =>\", error);\n return null;\n });\n\n};\n\nexport const downloadFileAsObject = async (path): Promise<Object | void> => {\n return Storage.get(path, { download: true, level: \"public\" })\n .then((result) => {\n return result as Object;\n })\n .catch((error) => {\n console.log(\"error fetching file from s3 =>\", error);\n });\n};\n\nexport const getBufferForFileFromS3 = async (path): Promise<ArrayBuffer> => {\n const object = await downloadFileAsObject(path);\n if (object) {\n // @ts-ignore\n return new ArrayBuffer(object.Body, \"binary\");\n }\n return null;\n};\n\nexport const uploadJsonToS3 = async (\n path: string,\n json: string,\n filename: string,\n): Promise<string> => {\n return Storage.put(path + filename, json, {\n contentType: \"application/json\",\n })\n .then((result: any) => {\n console.log(\"Success =>\", result);\n return result.key;\n })\n .catch((error) => {\n console.log(\"error =>\", error);\n return null;\n });\n};","import { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { ModalSwitchVisitComponent } from \"./components/modal-switch-visit/modal-switch-visit.component\";\nimport { downloadFileAsObject } from \"./services/s3.service\";\nimport { EquipmentDocument, LevelStatus, Locale, Mission, PoiType, RoleStatus } from \"./types.service\";\n\nexport function getDistanceBetweenTwoPoints(startPoint, endPoint) {\n const dx = endPoint.x - startPoint.x;\n const dy = endPoint.y - startPoint.y;\n const dz = endPoint.z - startPoint.z;\n const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);\n return Math.round(distance * 100) / 100;\n}\n\nexport function poiTypeToString(type: PoiType): string {\n switch (type) {\n case PoiType.EQUIPMENT:\n return \"equipment\";\n case PoiType.TICKET:\n return \"ticket\";\n case PoiType.DATA:\n return \"data\";\n case PoiType.DESK:\n return \"data\";\n case PoiType.INFORMATION:\n return \"information\";\n case PoiType.MEASURE:\n return \"measure\";\n case PoiType.PEOPLE:\n return \"people\";\n default:\n return \"ticket\";\n }\n}\n\nexport function wait(timeout: number): Promise<void> {\n return new Promise((resolve) => {\n timeout = timeout || 2000;\n setTimeout(() => {\n resolve();\n }, timeout);\n });\n}\n\nexport const waitUntil = (condition: () => boolean) => {\n return new Promise<void>((resolve, reject) => {\n const intervalId = setInterval(() => {\n if (condition()) {\n clearInterval(intervalId);\n resolve();\n }\n }, 30);\n });\n};\n\nexport function enumToArray(enumerable: any) {\n return Object.keys(enumerable)\n .filter((value) => isNaN(Number(value)) === true)\n .map((key) => enumerable[key]);\n}\n\nexport function getLevelsBelow(level: LevelStatus): LevelStatus[] {\n const all = [\n LevelStatus.MINIMUM,\n LevelStatus.LOW,\n LevelStatus.MEDIUM,\n LevelStatus.HIGH,\n LevelStatus.MAXIMUM,\n ];\n switch (level) {\n case LevelStatus.MAXIMUM:\n return all;\n case LevelStatus.HIGH:\n all.splice(4, 1);\n return all;\n case LevelStatus.MEDIUM:\n all.splice(3, 2);\n return all;\n case LevelStatus.LOW:\n return [LevelStatus.MINIMUM, LevelStatus.LOW];\n case LevelStatus.MINIMUM:\n return [LevelStatus.MINIMUM];\n default:\n return [LevelStatus.MINIMUM];\n }\n}\n\nexport function getHighestLevelForMissions(missions: Mission[]): LevelStatus {\n let latestVisibleLevels = [LevelStatus.MINIMUM];\n for (const m of missions) {\n const visibleLevels = getLevelsBelow(m.level);\n if (visibleLevels.length > latestVisibleLevels.length) {\n latestVisibleLevels = visibleLevels;\n }\n }\n switch (latestVisibleLevels.length) {\n case 1:\n return LevelStatus.MINIMUM;\n case 2:\n return LevelStatus.LOW;\n case 3:\n return LevelStatus.MEDIUM;\n case 4:\n return LevelStatus.HIGH;\n case 5:\n return LevelStatus.MAXIMUM;\n default:\n return LevelStatus.MINIMUM;\n }\n}\n\nexport function getHighestRoleForMissions(missions: Mission[]): RoleStatus {\n let highestRole = RoleStatus.VISITOR;\n for (const m of missions) {\n if (m.role === RoleStatus.ADMIN) {\n return RoleStatus.ADMIN;\n }\n if (highestRole === RoleStatus.OWNER) {\n continue;\n }\n if (m.role === RoleStatus.OWNER) {\n highestRole = RoleStatus.OWNER;\n }\n if (m.role === RoleStatus.MANAGER) {\n highestRole = RoleStatus.MANAGER;\n }\n if (\n m.role === RoleStatus.SERVICE &&\n highestRole !== RoleStatus.MANAGER\n ) {\n highestRole = RoleStatus.SERVICE;\n }\n if (\n m.role === RoleStatus.OCCUPANT &&\n highestRole === RoleStatus.VISITOR\n ) {\n highestRole = RoleStatus.OCCUPANT;\n }\n if (m.role === RoleStatus.GUIDE_MUSEUM) {\n highestRole = RoleStatus.GUIDE_MUSEUM;\n }\n if (m.role === RoleStatus.VISITOR_MUSEUM) {\n highestRole = RoleStatus.VISITOR_MUSEUM;\n }\n }\n return highestRole;\n}\n\nexport function getRolesBelowForManager(role: RoleStatus): RoleStatus[] {\n const all = [\n RoleStatus.VISITOR,\n RoleStatus.OCCUPANT,\n RoleStatus.SERVICE,\n RoleStatus.MANAGER,\n RoleStatus.OWNER,\n RoleStatus.ADMIN,\n ];\n const museum = [RoleStatus.VISITOR_MUSEUM, RoleStatus.GUIDE_MUSEUM];\n switch (role) {\n case RoleStatus.ADMIN:\n return [...all, ...museum];\n case RoleStatus.OWNER:\n all.splice(5, 1);\n return all;\n case RoleStatus.MANAGER:\n all.splice(4, 2);\n return all;\n case RoleStatus.GUIDE_MUSEUM:\n return museum;\n default:\n return all.splice(4, 2);\n }\n}\n\nexport function filterUniqueArrayByID(arrayOfObjects: any[]): any[] {\n return arrayOfObjects.filter(\n (v, index, a) => a.findIndex((t) => t.id === v.id) === index,\n );\n}\n\nexport function removeNullKeysFromObject(object: Object) {\n for (const key of Object.keys(object)) {\n if (object[key] === null) {\n delete object[key];\n }\n }\n}\n\n/**\n * Test if a date has expired\n * @param date\n * @returns true if the date has expired, false otherwise\n */\nexport function dateHasExpired(\n date: string | Date | number | null | undefined,\n): boolean {\n if (date) {\n return new Date(date) <= new Date();\n }\n return false;\n}\n\nexport function stringLocaleToEnum(locale: string): Locale {\n switch (locale) {\n case \"en\":\n return Locale.EN;\n case \"fr\":\n return Locale.FR;\n default:\n return Locale.EN;\n }\n}\n\n\nexport function getMetaForImage(url): Promise<any> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n\n img.addEventListener(\"load\", () => {\n resolve(img);\n });\n img.addEventListener(\"error\", () => reject());\n img.src = url;\n });\n}\n\nexport function sortAlphabeticallyOnName(array: { name: string; }[]): any[] {\n return array.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function validEmail(email: string) {\n const re =\n /^(([^\\s\"(),.:;<>@[\\\\\\]]+(\\.[^\\s\"(),.:;<>@[\\\\\\]]+)*)|(\".+\"))@((\\[(?:\\d{1,3}\\.){3}\\d{1,3}])|(([\\dA-Za-z\\-]+\\.)+[A-Za-z]{2,}))$/;\n return re.test(email);\n}\n\nexport function downloadBlob(blob, filename) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename || \"download\";\n const clickHandler = () => {\n setTimeout(() => {\n URL.revokeObjectURL(url);\n a.removeEventListener(\"click\", clickHandler);\n }, 150);\n };\n a.addEventListener(\"click\", clickHandler, false);\n a.click();\n return a;\n}\n\n/*\n Open modal if one has to switch virtual visit\n*/\nexport function openModalForVisitSwitch(\n modalService: NgbModal,\n model3D: string,\n spaceID: string,\n dataToMove: { sweepToMove: string, rotation: any; } | null = null\n) {\n const modalReference = modalService.open(ModalSwitchVisitComponent);\n modalReference.componentInstance.content =\n \"This object belongs to another 3D visit. Are you sure you want to switch the visit?\";\n modalReference.componentInstance.model3D = model3D;\n modalReference.componentInstance.spaceID = spaceID;\n if (dataToMove) {\n modalReference.componentInstance.dataToMove = dataToMove;\n }\n\n}\n\n/**\n * Return a string of a given date time in local format.\n * The format is determined by the current language.\n */\nexport function dateTimeToLocalString(\n date: number | string | Date,\n translate?: TranslateService,\n mode?,\n): string {\n let lang = \"en-EN\";\n if (translate) {\n /** Get current language */\n lang = translate.currentLang\n ? translate.currentLang\n : translate.defaultLang;\n /** Transforme '_fr' to 'fr' */\n if (lang) {\n lang = lang.slice(1);\n }\n\n }\n\n let options: {\n month?;\n year?;\n day?;\n hour?;\n minute?;\n second?;\n dateStyle?;\n timeStyle?;\n weekday?;\n timeZone?;\n timeZoneName?;\n };\n switch (mode) {\n case \"day_numeric\":\n options = { day: \"numeric\" };\n break;\n case \"day\":\n options = { weekday: \"long\" };\n break;\n case \"date\":\n options = { dateStyle: \"long\" };\n break;\n case \"short_date_time\":\n options = {\n year: \"2-digit\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n break;\n case \"time\":\n options = { hour: \"numeric\", minute: \"numeric\" };\n break;\n case \"day_time_zone\":\n options = {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZoneName: \"shortOffset\",\n };\n break;\n default:\n options = {\n dateStyle: \"long\",\n timeStyle: \"short\",\n };\n }\n return new Date(date).toLocaleString(lang, options);\n}\n\n/**\n * Compares two string arrays\n * @param array1\n * @param array2\n * @returns\n */\nexport function arraysContainSameElements(\n array1: string[],\n array2: string[],\n): boolean {\n array1.sort();\n array2.sort();\n return JSON.stringify(array1) === JSON.stringify(array2);\n}\n\n\nexport function getVisitUrl(currentUrl: string): string {\n const path = currentUrl.split(\"/\");\n path.splice(3, path.length - 2);\n return path.join(\"/\");\n}\n\n/**\n * Extract spaceID from url when in visit 3D\n */\nexport function getSpaceIDFromUrl(url: string): string {\n const visitUrl = getVisitUrl(url);\n return visitUrl.split(\"/\")[2];\n}\n\n/**\n * Download related\n */\nimport FileSaver from \"file-saver\";\n\nexport function downloadFile(fileUrl: string, fileName: string) {\n FileSaver.saveAs(fileUrl + fileName, fileName);\n}\n\nexport function openDocument(fileUrl: string, fileName: string, id: number) {\n window.open(`${fileUrl + fileName}#doc=${id}`, \"_blank\", \"\");\n}\n\nexport const downloadEquipmentDocument = async (\n document_: EquipmentDocument,\n): Promise<Object | void> => {\n const signedFile = await downloadFileAsObject(document_.url);\n if (signedFile) {\n // @ts-ignore\n downloadBlob(signedFile.Body, document_.filename);\n }\n};\n\nexport async function checkElementById(selector) {\n let querySelector = null;\n while (querySelector === null) {\n await rafAsync();\n querySelector = document.getElementById(selector);\n }\n return querySelector;\n}\n\nfunction rafAsync() {\n return new Promise((resolve) => {\n requestAnimationFrame(resolve); // faster than set time out\n });\n}\n\n/* @param {Array} numbers An array of numbers.\n * @return {Number} The calculated average (or mean) value from the specified\n * numbers.\n */\nexport function mean(numbers: number[]) {\n let total = 0;\n for (const number of numbers) {\n total += number;\n }\n return total / numbers.length;\n}\n\nexport function convertTimestampToLocalZone(timestamp: number): number {\n const selectedDate = new Date(timestamp);\n const localOffset = -1 * selectedDate.getTimezoneOffset() * 60000;\n const stamp = timestamp + localOffset;\n return stamp;\n}\n\n/**\n * Return string for period of time. Parameters are DateTime objects of luxon library.\n */\nexport function translateDatePeriod(\n translateService: any,\n dateStartPeriod: any,\n dateEndPeriod: any,\n): string {\n const locale = getLocaleLong(translateService);\n return `${dateStartPeriod.toLocaleString({\n locale,\n month: \"long\",\n day: \"2-digit\",\n })} - ${dateEndPeriod.toLocaleString({\n locale,\n month: \"long\",\n day: \"2-digit\",\n })} `;\n}\n\n\n/**\n* Return local in the canonical form: \"en-GB\", \"fr-FR\"\n*/\nexport function getLocaleLong(translate: TranslateService): string {\n let lang = translate.currentLang\n ? translate.currentLang\n : translate.defaultLang;\n\n /** Transform '_fr' to 'fr' */\n lang = lang.slice(1);\n if (lang === \"en\") {\n return \"en-GB\";\n }\n return `${lang}-${lang.toUpperCase()}`;\n}\n\n/**\n * Return local in the short form: \"en\", \"fr\"\n */\nexport function getLocaleShort(translate: TranslateService): string {\n let lang = translate.currentLang\n ? translate.currentLang\n : translate.defaultLang;\n\n /** Transform '_fr' to 'fr' */\n lang = lang.slice(1);\n return lang;\n}\n\n/**\n * Format string to lowercase, no spaces\n */\nexport function stringToLowercaseNoSpaces(input: string): string {\n const words = input.toLowerCase().split(/\\s+/);\n return words.join(\"\");\n}\n\n/**\n * Test if the object === {}\n * @param obj object {key:value}\n * @returns boolean\n */\nexport function isEmptyObject(object): boolean {\n for (const x in object) {\n return false;\n }\n return true;\n}\n\nexport function shuffleArray(array: any[]) {\n const newArray = [...array];\n for (let index = array.length - 1; index > 0; index--) {\n const indexNew = Math.floor(Math.random() * (index + 1));\n // eslint-disable-next-line no-param-reassign\n [newArray[index], newArray[indexNew]] = [\n newArray[indexNew],\n newArray[index],\n ];\n }\n return newArray;\n}\n\nexport function numberToDateString(timestamp: number): string {\n const jsDate = new Date(timestamp);\n return jsDate.toLocaleString(\"fr-FR\");\n}\n\nexport function durationToString(\n duration: number,\n translate: TranslateService,\n): string {\n const days = Math.floor(duration / 3600 / 24);\n const hours = Math.floor((duration - days * 24 * 3600) / 3600);\n const minutes = Math.floor((duration % 3600) / 60);\n const seconds = Math.floor(duration % 60);\n\n const daysString = translate.instant(\"day(s)\");\n const hoursString = translate.instant(\"hour(s)\");\n const oneHourString = translate.instant(\"hour\");\n const minutesString = translate.instant(\"minute(s)\");\n const secondsString = translate.instant(\"second(s)\");\n\n if (duration > 3600 * 24 * 7) {\n return `${days} ${daysString}`;\n }\n if (duration > 3600 * 24) {\n return `${days} ${daysString} ${hours} ${hoursString}`;\n }\n if (duration === 3600) {\n return `${hours} ${oneHourString}`;\n }\n if (duration > 3600) {\n if (minutes === 0) {\n return `${hours} ${hoursString}`;\n }\n return `${hours} ${hoursString} ${minutes} ${minutesString}`;\n }\n if (duration >= 60) {\n if (seconds === 0) {\n return `${minutes} ${minutesString}`;\n }\n return `${minutes} ${minutesString} ${seconds} ${secondsString}`;\n }\n return `${seconds} ${secondsString}`;\n}\n\n\n","/* eslint-disable class-methods-use-this */\nimport { Inject, Injectable } from '@angular/core';\nimport { DbObjectType, Zone } from '../../types.service';\nimport { BaseUserService } from '../user.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZoneService {\n API: any; //AWS APIService\n\n constructor(\n @Inject('currentAPIService') apiInjected: any,\n private userService: BaseUserService\n ) {\n this.API = apiInjected;\n }\n\n async getZonesBySpace(spaceID: string): Promise<Array<Zone>> {\n const list: Zone[] = [];\n if (this.API.__proto__.hasOwnProperty('ZonesBySpace')) {\n const zones = await this.API.__proto__.ZonesBySpace(spaceID);\n if (zones) {\n for (const zone of zones.items) {\n const zoneObject = { ...zone } as Zone;\n zoneObject.virtual = this.zoneIsVirtual(zone);\n list.push(zoneObject);\n }\n }\n return list;\n } else {\n throw new Error('ZonesBySpace not implemented');\n }\n }\n\n async getZonesBySpaceForUser(spaceID: string): Promise<Zone[]> {\n const missionForLocation = this.userService.currentMission(spaceID);\n const list = [];\n if (missionForLocation && missionForLocation.zoneID) {\n const allowedZone = await this.getZone(missionForLocation.zoneID);\n allowedZone.virtual = this.zoneIsVirtual(allowedZone);\n if (!allowedZone.parent) {\n // the whole building is authorized\n return this.getZonesBySpace(spaceID);\n }\n list.push(allowedZone);\n // allow all children zones of an allowed parent\n const children = (await this.API.__proto__.ZonesByZone(allowedZone.id))\n .items;\n if (children.length > 0) {\n for (const child of children) {\n const childZone = { ...child } as Zone;\n childZone.virtual = this.zoneIsVirtual(child);\n list.push(childZone);\n }\n }\n // allow the parent Floor of the allowed zone\n if (\n allowedZone.parent.layer &&\n allowedZone.parent.layer.name === 'FLOOR'\n ) {\n list.push(allowedZone.parent);\n }\n } else {\n return this.getZonesBySpace(spaceID);\n }\n return list;\n }\n\n async filterZonesIDsForUser(zones: Zone[]): Promise<Zone[]> {\n const { spaceID } = zones[0];\n const zoneIDs = new Set(zones.map((zone) => zone.id));\n const allowedZones = await this.getZonesBySpaceForUser(spaceID);\n const filteredZones = allowedZones.filter((zone) => zoneIDs.has(zone.id));\n return filteredZones;\n }\n\n async deleteZone(zoneID: string): Promise<Zone> {\n return this.API.__proto__.DeleteZone({ id: zoneID });\n }\n\n async getZonesForSweepForSpace(\n sweepID: string,\n spaceID: string\n ): Promise<Zone[]> {\n const zonesSpace = (await this.API.__proto__.ZonesBySpace(spaceID)).items;\n return zonesSpace.filter(\n (zone) => zone.sweepIDs && zone.sweepIDs.includes(sweepID)\n );\n }\n\n // // eslint-disable-next-line class-methods-use-this\n sortZonesFromChildToParent(zonesToSort: Zone[]) {\n // get default\n const defaultZone = zonesToSort.find((z) => !z.parentID);\n if (defaultZone) {\n const indexOf = zonesToSort.indexOf(defaultZone);\n zonesToSort.splice(indexOf, 1);\n }\n const zones = zonesToSort.sort((a, b) => {\n if (a.parentID === b.id) {\n return -1;\n }\n return 0;\n });\n // so far by number of navigation points in them\n // const zones = zonesToSort.sort(\n // (a, b) => a.navigations.items.length - b.navigations.items.length,\n // );\n if (defaultZone) {\n zones.push(defaultZone);\n }\n return zones;\n }\n\n async getZonesForObject(object: DbObjectType): Promise<Zone[]> {\n if (object.pois.items && object.pois.items.length > 0) {\n const [poi] = object.pois.items;\n if (poi.matterportSweepID) {\n const zones = await this.getZonesForSweepForSpace(\n poi.matterportSweepID,\n object.spaceID\n );\n return zones;\n }\n }\n return null;\n }\n\n async createVirtualZone(zoneInput: Zone): Promise<Zone> {\n zoneInput.sweepIDs = [];\n const zone = await this.API.__proto__.CreateZone(zoneInput);\n console.log('virtual zone created', zone);\n return zone;\n }\n\n zoneIsVirtual(zone: Zone): boolean {\n if (!zone.sweepIDs) {\n return true;\n }\n if (\n (zone.tags && zone.tags.includes('virtual')) ||\n zone.sweepIDs.length === 0\n ) {\n return true;\n }\n return false;\n }\n\n async getModel3DForZone(zoneID: string): Promise<string> {\n const zone = await this.API.__proto__.GetZone(zoneID);\n if (zone.nodeIDs) {\n const node = await this.API.__proto__.GetNode(zone.nodeIDs[0]);\n return node.model3D;\n }\n return null;\n }\n\n async getZone(zoneID: string): Promise<Zone> {\n return this.API.__proto__.GetZone(zoneID);\n }\n\n async getDefaultZoneForSpace(spaceID: string): Promise<Zone> {\n return this.getZonesBySpace(spaceID).then(async (zones) => {\n const zonesBuilding = zones.filter(\n (zone) => zone.layer && zone.layer.name === 'BUILDING'\n );\n if (zonesBuilding.length === 1) {\n return zonesBuilding[0];\n }\n const parentZone = zones.find((zone) => !zone.parentID);\n return parentZone;\n });\n }\n\n async create(input: Zone): Promise<Zone> {\n return this.API.__proto__.CreateZone(input);\n }\n\n // async getSortedZonesForSweepForUser(\n // sweep: string,\n // spaceID: string,\n // ): Promise<Zone[]> {\n // if (!spaceID) {\n // return [];\n // }\n // const zones = await this.getZonesForSweepForSpace(sweep, spaceID);\n // if (zones.length === 0) {\n // return [];\n // }\n // const filteredZones = await this.filterZonesIDsForUser(zones);\n // if (filteredZones.length > 0) {\n // let zonesSorted = this.sortZonesFromChildToParent(filteredZones);\n // zonesSorted = zonesSorted.filter((zone) => zone !== undefined);\n // return zonesSorted;\n // }\n // return [];\n // }\n\n async updateZone(input: any): Promise<Zone> {\n return this.API.__proto__.UpdateZone(input);\n }\n\n async getZonesForNodeForSpace(\n nodeID: string,\n spaceID: string\n ): Promise<Zone[]> {\n return this.API.__proto__.ZonesBySpace(spaceID).then(async (zones) => {\n const filteredZones = zones.items.filter(\n (zone) => zone.nodeIDs && zone.nodeIDs.includes(nodeID)\n );\n return filteredZones;\n });\n }\n\n /**\n * Gets the Zone (layer FLOOR) for a matterport sweep ID in a given Space\n * @param sweepID\n * @param spaceID\n * @returns Zone\n */\n async getFloorZoneForSweepInSpace(\n sweepID: string,\n spaceID: string\n ): Promise<Zone> {\n const zones = await this.getZonesForSweepForSpace(sweepID, spaceID);\n const floors = zones.filter(\n (zone) => zone.layer && zone.layer.name.includes('FLOOR')\n );\n return floors.length > 0 ? floors[0] : null;\n }\n\n /**\n * Get zones with audio track for entire space\n * @param spaceID\n * @returns Promise<Zone[]>\n */\n async getAudioZonesForSpace(spaceID: string): Promise<Zone[]> {\n const allZones = await this.getZonesBySpace(spaceID);\n return allZones.filter((zone) => zone.audioID);\n }\n\n /**\n * Get audio zones for user (within allowed zones)\n * @param spaceID\n * @returns Promise<Zone[]>\n */\n async getAudioZonesForUserForSpace(spaceID: string): Promise<Zone[]> {\n const userZones = await this.getZonesBySpaceForUser(spaceID);\n return userZones.filter((zone) => zone.audioID);\n }\n\n /**\n * Get Zones by Parent Zone ID\n * @param parentZoneID string\n * @returns Promise<Zone[]>\n */\n async getZonesByParentZone(parentZoneID: string): Promise<Zone[]> {\n return this.API.__proto__\n .ZonesByZone(parentZoneID)\n .then((res) => res.items);\n }\n}\n","/* eslint-disable no-case-declarations */\n/* eslint-disable no-await-in-loop */\n/* eslint-disable guard-for-in */\n/* eslint-disable class-methods-use-this */\nimport { Injectable } from \"@angular/core\";\nimport { Subject, Subscription } from \"rxjs\";\nimport { getLevelsBelow, getHighestLevelForMissions, getHighestRoleForMissions, filterUniqueArrayByID } from \"../helpers.service\";\nimport {\n Zone,\n Equipment,\n LevelStatus,\n Measurement,\n Mission,\n Organisation,\n PoiType,\n ProfileEntity,\n RoleStatus,\n Space,\n Ticket,\n DbObjectType,\n Feature,\n Comment,\n VisitTemplate, Object3D\n} from \"../types.service\";\nimport { PoiService } from \"./models/poi.service\";\nimport { ZoneService } from \"./models/zone.service\";\nimport { BaseUserService } from \"./user.service\";\nenum FilterType {\n DOMAIN = \"DOMAIN\",\n LEVEL = \"LEVEL\",\n ROLE = \"ROLE\",\n ZONE = \"ZONE\",\n SPACE = \"SPACE\",\n HASHTAG = \"HASHTAG\",\n}\nimport levenshtein from 'js-levenshtein';\n@Injectable({\n providedIn: \"root\",\n})\nexport class FilterService {\n private updateDateFilter: Subject<Date[]> = new Subject();\n\n public currentDateFilter: Date[];\n\n constructor(\n private userService: BaseUserService,\n private zoneService: ZoneService,\n private poiService: PoiService,\n ) {}\n\n filterTicketsByDomain(ticketsToFilter: Ticket[], domain: string) {\n return ticketsToFilter.filter((tic) => tic.domainID === domain);\n }\n\n filterObjectsByLevel(objectsToFilter: any[], level: LevelStatus): any[] {\n const visibleLevels = getLevelsBelow(level);\n const filtered = objectsToFilter.filter((tic) =>\n visibleLevels.includes(tic.level),\n );\n return filtered;\n }\n\n filterTicketsForMission(\n ticketsToFilter: Ticket[],\n mission: Mission,\n ): Ticket[] {\n const managerRoles: RoleStatus[] = [\n RoleStatus.MANAGER,\n RoleStatus.ADMIN,\n RoleStatus.OWNER,\n ];\n if (!managerRoles.includes(mission.role)) {\n if (mission.role === RoleStatus.SERVICE) {\n // SERVICE can see tickets to which he is assigned\n const ticketsAssigned = [];\n for (const t of ticketsToFilter) {\n if (t.assignees.items.length > 0) {\n for (const assignment of t.assignees.items) {\n if (assignment.missionID === mission.id) {\n ticketsAssigned.push(t);\n }\n }\n }\n }\n return ticketsAssigned;\n }\n // OCCUPANT and VISITOR can see only tickets that they created\n return ticketsToFilter.filter((ticket) => {\n return ticket.ownerMissionID === mission.id;\n });\n }\n return ticketsToFilter;\n }\n\n getFiltersForRole(role: RoleStatus): FilterType[] {\n switch (role) {\n case RoleStatus.ADMIN:\n return [FilterType.LEVEL];\n case RoleStatus.MANAGER:\n return [FilterType.ZONE, FilterType.LEVEL];\n case RoleStatus.OWNER:\n return [FilterType.ZONE, FilterType.LEVEL];\n case RoleStatus.SERVICE:\n return [\n FilterType.ZONE,\n FilterType.LEVEL,\n FilterType.DOMAIN,\n FilterType.ROLE, // that is the most severe filter\n ];\n case RoleStatus.OCCUPANT:\n return [\n FilterType.ZONE,\n FilterType.DOMAIN,\n FilterType.ROLE,\n FilterType.LEVEL,\n FilterType.HASHTAG,\n ];\n case RoleStatus.VISITOR:\n return [\n FilterType.ZONE,\n FilterType.LEVEL,\n FilterType.DOMAIN,\n FilterType.ROLE,\n FilterType.HASHTAG,\n ];\n case RoleStatus.VISITOR_MUSEUM:\n return [FilterType.ZONE, FilterType.LEVEL, FilterType.HASHTAG];\n case RoleStatus.GUIDE_MUSEUM:\n return [FilterType.LEVEL];\n default:\n return [FilterType.LEVEL];\n }\n }\n\n async filterTicketsForCurrentUserInSpace(\n tickets: Ticket[],\n spaceID: string,\n ): Promise<Ticket[]> {\n const finalTickets: Ticket[] = [];\n let domFiltered: Ticket[] = tickets;\n let roleFiltered: Ticket[] = tickets;\n let levelFiltered: Ticket[] = tickets;\n let zoneFiltered: Ticket[] = tickets;\n const missions = this.userService.currentMissions;\n if (missions) {\n const currentSpaceMissions = missions.filter(\n (m) => m.spaceID === spaceID,\n );\n if (currentSpaceMissions.length > 0) {\n const highestLelel =\n getHighestLevelForMissions(currentSpaceMissions);\n const highestRole =\n getHighestRoleForMissions(currentSpaceMissions);\n // console.log(\"Highest level: \", highestLelel, \", Highest Role: \", highestRole)\n\n const filters = this.getFiltersForRole(highestRole);\n for (const filter of filters) {\n if (filter === FilterType.DOMAIN) {\n let domains: string[] = [];\n for (const m of currentSpaceMissions) {\n if (m.domains) {\n domains = [...domains, ...m.domains];\n }\n }\n let allDomainsFiltered = [];\n for (const d of domains) {\n const currentDomFiltered =\n this.filterTicketsByDomain(tickets, d);\n allDomainsFiltered = [\n ...allDomainsFiltered,\n ...currentDomFiltered,\n ];\n }\n domFiltered = allDomainsFiltered;\n }\n if (filter === FilterType.ROLE) {\n const highestRoleMission = currentSpaceMissions.find(\n (m) => m.role === highestRole,\n );\n roleFiltered = this.filterTicketsForMission(\n tickets,\n highestRoleMission,\n );\n }\n\n if (filter === FilterType.LEVEL) {\n levelFiltered = this.filterObjectsByLevel(\n tickets,\n highestLelel,\n );\n }\n\n if (filter === FilterType.ZONE) {\n zoneFiltered = await this.applyZoneFilterForMissions(\n currentSpaceMissions,\n tickets,\n );\n }\n }\n // keep only tickets present in all filtered arrays\n // console.log(domFiltered);\n // console.log(roleFiltered);\n // console.log(levelFiltered);\n // console.log(zoneFiltered);\n for (const tic of levelFiltered) {\n if (\n domFiltered.includes(tic) &&\n roleFiltered.includes(tic) &&\n zoneFiltered.includes(tic)\n ) {\n finalTickets.push(tic);\n }\n }\n }\n }\n // console.log(finalTickets);\n return finalTickets;\n }\n\n subscribeToDataFilterUpdate(\n next?: (value: any) => void,\n error?: (error: any) => void,\n complete?: () => void,\n ): Subscription {\n const s = this.updateDateFilter.subscribe(next, error, complete);\n return s;\n }\n\n dateFilterUpdated(dateRange: Date[] | null) {\n this.currentDateFilter = dateRange;\n this.updateDateFilter.next(dateRange);\n }\n\n filterObjectsForDateRange(objects: any[], dateRange: Date[]): any[] {\n return objects.filter((object) => {\n const createdAtDate = new Date(object.createdAt);\n return (\n createdAtDate >= dateRange[0] && createdAtDate <= dateRange[1]\n );\n });\n }\n\n filterMeasurementsForDateRange(\n measurements: Measurement[],\n dateRange: Date[],\n ): Measurement[] {\n return measurements.filter((measure) => {\n const createdAtDate = new Date(measure.comment.createdAt);\n return (\n createdAtDate >= dateRange[0] && createdAtDate <= dateRange[1]\n );\n });\n }\n\n async filterObjectsForZone(\n objects: any[],\n zoneID: string = null,\n zone: Zone = null,\n ): Promise<any[]> {\n const filteredObjects = [];\n await Promise.all(\n objects.map(async (object) => {\n const [poi] = object.pois.items;\n if (poi && zone) {\n if (zone.sweepIDs && zone.sweepIDs.includes(poi.matterportSweepID)) {\n if (this.poiService.poiIsVirtual(poi) && zone.layer && zone.layer.name === \"FLOOR\" ) {\n // we include in Floor zone only\n filteredObjects.push(object);\n }\n if (!this.poiService.poiIsVirtual(poi)) {\n filteredObjects.push(object);\n }\n }\n }\n if (poi && !zone && zoneID) {\n const zones = await this.zoneService.getZonesForObject(\n object,\n );\n if (\n zones &&\n zones.some(\n (zone_) =>\n zone_.id === zoneID ||\n zone_.parentID === zoneID,\n )\n ) {\n filteredObjects.push(object);\n }\n }\n }),\n );\n return filteredObjects;\n }\n\n filterEquipmentsByDomainList(\n equipments: Equipment[],\n domainIDList: string[],\n ): Equipment[] {\n let filtered = [];\n const filteredByDomain = equipments.filter((equip) =>\n domainIDList.includes(equip.domainID),\n );\n filtered = [...filtered, ...filteredByDomain];\n const filteredByParentDomain = equipments.filter(\n (equip) =>\n equip.domain &&\n equip.domain.parentID &&\n domainIDList.includes(equip.domain.parentID),\n );\n filtered = [...filtered, ...filteredByParentDomain];\n return filterUniqueArrayByID(filtered);\n }\n\n\n // Not implemented yet!\n // filterObjects3DByDomainList(\n // objects3D: Object3D[],\n // domainIDList: string[],\n // ): Object3D[] {\n // let filtered = [];\n // const filteredByDomain = objects3D.filter((equip) =>\n // domainIDList.includes(equip.domainID),\n // );\n // filtered = [...filtered, ...filteredByDomain];\n // const filteredByParentDomain = objects3D.filter(\n // (obj) =>\n // obj.domain &&\n // obj.domain.parentID &&\n // domainIDList.includes(obj.domain.parentID),\n // );\n // filtered = [...filtered, ...filteredByParentDomain];\n // return filterUniqueArrayByID(filtered);\n // }\n\n filterEquipmentsForTerm(equips: Equipment[], term: string): Equipment[] {\n // filter domains\n let byDomain = equips.filter((eq) => {\n if (eq.domain && eq.domain.name) {\n const normalizedDomain = eq.domain.name.toLowerCase();\n const lev = levenshtein(normalizedDomain, term);\n return lev <= 2 || normalizedDomain.includes(term);\n }\n return false;\n });\n const byParentDomain = equips.filter((eq) => {\n if (eq.domain && eq.domain.parentID) {\n const normalizedParent = eq.domain.parent.name.toLowerCase();\n const lev = levenshtein(normalizedParent, term);\n return lev <= 2 || normalizedParent.includes(term);\n }\n return false;\n });\n byDomain = [...byDomain, ...byParentDomain];\n // filter name\n let byName = [];\n const terms = term.split(\" \").filter((token) => token.length > 2);\n for (const eq of equips) {\n const words = eq.name\n .toLowerCase()\n .split(\" \")\n .filter((token) => token.length > 2);\n const matched = [];\n for (const token of terms) {\n for (const word of words) {\n if (levenshtein(token, word) <= 1) {\n matched.push(true);\n break;\n }\n }\n }\n if (matched.length === terms.length) {\n byName.push(eq);\n }\n }\n\n const byNameSimple = equips.filter((eq) =>\n eq.name.toLowerCase().includes(term),\n );\n byName = [...byName, ...byNameSimple];\n // by serial number\n const bySerialNumber = equips.filter(\n (eq) => eq.serialNumber && eq.serialNumber.toLowerCase() === term,\n );\n const result = [...byDomain, ...byName, ...bySerialNumber];\n return filterUniqueArrayByID(result);\n }\n\n filterTicketsForTerm(tickets: Ticket[], term: string): Ticket[] {\n // filter term in title and description\n const byTitle = this.filterObjectsForTerm(tickets, term);\n // by equipment\n const byEquipment = tickets.filter(\n (ticket) =>\n ticket.equipments &&\n this.filterEquipmentsForTerm(ticket.equipments, term).length >\n 0,\n );\n return filterUniqueArrayByID([...byTitle, ...byEquipment]);\n }\n\n filterLocationsForTerm(locations: Space[], term: string): Space[] {\n // by name\n const byName = locations.filter((loc) =>\n loc.name.toLowerCase().includes(term),\n );\n // by address\n const byAddress = locations.filter((loc) =>\n loc.addresses.toLowerCase().includes(term),\n );\n return filterUniqueArrayByID([...byName, ...byAddress]);\n }\n\n filterOrganisationsForTerm(\n orgs: Organisation[],\n term: string,\n ): Organisation[] {\n const byName = orgs.filter((org) => {\n const words = org.name.toLowerCase().split(\" \");\n return (\n words.some(\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\n ) || org.name.toLowerCase().includes(term)\n );\n });\n return byName;\n }\n\n filterUsersForTerm(users: ProfileEntity[], term: string) {\n const byName = users.filter((user) => {\n const words = user.displayName.toLowerCase().split(\" \");\n return (\n words.some(\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\n ) || user.displayName.toLowerCase().includes(term)\n );\n });\n return byName;\n }\n\n async filterFeaturesForCurrentUserInSpace(\n features: Feature[],\n spaceID: string,\n ): Promise<Feature[]> {\n const finalFeatures: Feature[] = [];\n let levelFiltered: Feature[] = features;\n let zoneFiltered: Feature[] = features;\n let hashtagFiltered: Feature[] = features;\n const missions = this.userService.currentMissions;\n if (missions) {\n const currentSpaceMissions = missions.filter(\n (m) => m.spaceID === spaceID,\n );\n if (currentSpaceMissions.length > 0) {\n const highestLelel =\n getHighestLevelForMissions(currentSpaceMissions);\n const highestRole =\n getHighestRoleForMissions(currentSpaceMissions);\n\n const filters = this.getFiltersForRole(highestRole);\n for (const filter of filters) {\n if (filter === FilterType.LEVEL) {\n levelFiltered = this.filterObjectsByLevel(\n features,\n highestLelel,\n );\n }\n if (filter === FilterType.ZONE) {\n zoneFiltered = await this.applyZoneFilterForMissions(\n currentSpaceMissions,\n features,\n );\n }\n if (filter === FilterType.HASHTAG) {\n hashtagFiltered =\n this.filterFeaturesByHashtagsAndLocale(\n currentSpaceMissions,\n features,\n );\n }\n }\n for (const feature of levelFiltered) {\n if (\n hashtagFiltered.includes(feature) &&\n zoneFiltered.includes(feature)\n ) {\n finalFeatures.push(feature);\n }\n }\n }\n }\n return finalFeatures;\n }\n\n filterFeaturesForTerm(features: Feature[], term: string): Feature[] {\n // filter term in title\n const byTitle = this.filterObjectsForTerm(features, term);\n // by comments\n const byComment = features.filter(\n (feature) =>\n this.filterObjectsForTerm(feature.comments.items, term).length >\n 0,\n );\n return filterUniqueArrayByID([...byTitle, ...byComment]);\n }\n\n /**\n *\n * @param objects Array of Comments, Tickets, Features. Obligatory proporties: title, description\n * @param term string\n */\n filterObjectsForTerm(objects: any[], term: string): any[] {\n // filter term in title\n const byTitle = objects.filter((feature) => {\n const words = feature.title.toLowerCase().split(\" \");\n return (\n words.some(\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\n ) || feature.title.toLowerCase().includes(term)\n );\n });\n // term present in description\n const byDescription = objects.filter(\n (feature) =>\n feature.description &&\n feature.description.toLowerCase().includes(term),\n );\n return filterUniqueArrayByID([...byTitle, ...byDescription]);\n }\n\n filterMissionByStartTimeDateForDateRange(\n missions: any[],\n dateRange: Date[],\n ): any[] {\n return missions.filter((mission) => {\n const startDateTime = new Date(mission.startDateTime);\n return (\n startDateTime >= dateRange[0] && startDateTime <= dateRange[1]\n );\n });\n }\n\n async applyZoneFilterForMissions(\n currentSpaceMissions: Mission[],\n objects: any[],\n ): Promise<any[]> {\n const allowedZones = [];\n for (const mission of currentSpaceMissions) {\n if (mission.zoneID) {\n allowedZones.push(mission.zoneID);\n }\n }\n if (allowedZones.length === currentSpaceMissions.length) {\n let allZoneFiltered = [];\n await Promise.all(\n allowedZones.map(async (zoneID) => {\n const currentZoneFiltered = await this.filterObjectsForZone(\n objects,\n zoneID,\n );\n allZoneFiltered = [\n ...allZoneFiltered,\n ...currentZoneFiltered,\n ];\n }),\n );\n return filterUniqueArrayByID(allZoneFiltered);\n }\n return objects;\n }\n\n async filterEquipmentsForCurrentUserInSpace(\n spaceID: string,\n equips: Equipment[],\n ): Promise<Equipment[]> {\n const finalEquips: Equipment[] = [];\n let domFiltered: Equipment[] = equips;\n const roleFiltered: Equipment[] = equips;\n const levelFiltered: Equipment[] = equips;\n let zoneFiltered: Equipment[] = equips;\n const missions = this.userService.currentMissions;\n if (missions) {\n const currentSpaceMissions = missions.filter(\n (m) => m.spaceID === spaceID,\n );\n if (currentSpaceMissions.length > 0) {\n const highestLelel =\n getHighestLevelForMissions(currentSpaceMissions);\n const highestRole =\n getHighestRoleForMissions(currentSpaceMissions);\n // console.log(\"Highest level: \", highestLelel, \", Highest Role: \", highestRole)\n\n const filters = this.getFiltersForRole(highestRole);\n for (const filter of filters) {\n if (filter === FilterType.DOMAIN) {\n let domains: string[] = [];\n for (const m of currentSpaceMissions) {\n if (m.domains) {\n domains = [...domains, ...m.domains];\n }\n }\n\n let allDomainsFiltered = [];\n\n const currentDomFiltered =\n this.filterEquipmentsByDomainList(equips, domains);\n allDomainsFiltered = [\n ...allDomainsFiltered,\n ...currentDomFiltered,\n ];\n domFiltered = allDomainsFiltered;\n }\n if (filter === FilterType.ROLE) {\n // const highestRoleMission = currentSpaceMissions.find(\n // (m) => m.role === highestRole,\n // );\n // TODO\n }\n\n if (filter === FilterType.LEVEL) {\n // TODO, equipment does not have level\n }\n\n if (filter === FilterType.ZONE) {\n zoneFiltered = await this.applyZoneFilterForMissions(\n currentSpaceMissions,\n equips,\n );\n }\n }\n for (const tic of levelFiltered) {\n if (\n domFiltered.includes(tic) &&\n roleFiltered.includes(tic) &&\n zoneFiltered.includes(tic)\n ) {\n finalEquips.push(tic);\n }\n }\n }\n }\n return finalEquips;\n }\n\n async filterMeasurementsForCurrentUserInSpace(\n spaceID: string,\n comments: Comment[],\n ): Promise<Comment[]> {\n let finalMeasurements: Comment[] = [];\n let zoneFiltered: Comment[] = comments;\n const missions = this.userService.currentMissions;\n if (missions) {\n const currentSpaceMissions = missions.filter(\n (m) => m.spaceID === spaceID,\n );\n if (currentSpaceMissions.length > 0) {\n const highestRole =\n getHighestRoleForMissions(currentSpaceMissions);\n\n const filters = this.getFiltersForRole(highestRole);\n for (const filter of filters) {\n if (filter === FilterType.ZONE) {\n zoneFiltered = await this.applyZoneFilterForMissions(\n currentSpaceMissions,\n comments,\n );\n }\n }\n finalMeasurements = zoneFiltered;\n }\n }\n return finalMeasurements;\n }\n\n async isObjectAllowedForUserInSpace(\n object: Object,\n spaceID: string,\n ): Promise<boolean> {\n const mission = this.userService.currentMission(spaceID);\n const filters = this.getFiltersForRole(mission.role);\n for (const filter of filters) {\n if (\n filter === FilterType.LEVEL &&\n Object.prototype.hasOwnProperty.call(object, \"level\")\n ) {\n const levelFiltered = this.filterObjectsByLevel(\n [object],\n mission.level,\n );\n if (levelFiltered.length === 0) {\n return false;\n }\n }\n if (filter === FilterType.ZONE) {\n const zoneFiltered = await this.applyZoneFilterForMissions(\n [mission],\n [object],\n );\n if (zoneFiltered.length === 0) {\n return false;\n }\n }\n }\n return true;\n }\n\n filterTemplatesForTerm(missions: Mission[], term: string): Mission[] {\n // term present in description\n const byDescription = missions.filter(\n (mis) =>\n mis.description && mis.description.toLowerCase().includes(term),\n );\n // by user lastName which is the name of the visit:\n // metadata: \"{\\\"firstName\\\":\\\"\\\",\\\"lastName\\\":\\\"Visite du 5 Juillet\\\"}\"\n const userProfiles = missions.map((mis) => new ProfileEntity(mis.user));\n const byUserLastname = this.filterUsersForTerm(userProfiles, term);\n const userIds = new Set(byUserLastname.map((user) => user.id));\n const missionsByUser = missions.filter((mis) =>\n userIds.has(mis.userID),\n );\n return filterUniqueArrayByID([...byDescription, ...missionsByUser]);\n }\n\n async filterObjectsForSweep(\n objects: any[],\n objectType: PoiType,\n sweep: string,\n ): Promise<any[]> {\n let filtered = [];\n switch (objectType) {\n case PoiType.EQUIPMENT:\n const pois =\n await this.poiService.getPoisByMatterportSweepByType(\n sweep,\n objectType,\n );\n const equipIDs = new Set(pois.map((poi) => poi.elementID));\n filtered = objects.filter((object) => equipIDs.has(object.id));\n break;\n default:\n break;\n }\n return filtered;\n }\n\n filterFeaturesByHashtagsAndLocale(\n currentSpaceMissions: Mission[],\n features: Feature[],\n ): Feature[] {\n const [currentMission] = currentSpaceMissions;\n // filter by locale\n let filteredLocale = [...features];\n if (currentMission.locale) {\n filteredLocale = features.filter(\n (feature) =>\n feature.locale && feature.locale === currentMission.locale,\n );\n }\n // filter by hashtags\n if (currentMission.hashtags && currentMission.hashtags.length > 0) {\n const filteredByHashtags = [];\n for (const feature of filteredLocale) {\n if (!feature.hashtags || feature.hashtags.length === 0) {\n // Feature without hashtag is available for everybody\n filteredByHashtags.push(feature);\n } else if (\n currentMission.hashtags.every((hashtag) =>\n feature.hashtags.includes(hashtag),\n )\n ) {\n filteredByHashtags.push(feature);\n }\n }\n return filteredByHashtags;\n }\n return filteredLocale;\n }\n\n filterFeaturesForMissionWithoutZone(\n features: Feature[],\n mission: Mission,\n ): Feature[] {\n const finalFeatures: Feature[] = [];\n let levelFiltered: Feature[] = features;\n let zoneFiltered: Feature[] = features;\n let hashtagFiltered: Feature[] = features;\n\n const filters = this.getFiltersForRole(mission.role);\n for (const filter of filters) {\n if (filter === FilterType.LEVEL) {\n levelFiltered = this.filterObjectsByLevel(\n features,\n mission.level,\n );\n }\n // if (filter === FilterType.ZONE) {\n // zoneFiltered = await this.applyZoneFilterForMissions(\n // currentSpaceMissions,\n // features,\n // );\n // }\n if (filter === FilterType.HASHTAG) {\n hashtagFiltered =\n this.filterFeaturesByHashtagsAndLocale(\n [mission],\n features,\n );\n }\n }\n for (const feature of levelFiltered) {\n if (\n hashtagFiltered.includes(feature) &&\n zoneFiltered.includes(feature)\n ) {\n finalFeatures.push(feature);\n }\n }\n return finalFeatures;\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Navigation, Zone } from \"../../types.service\";\nimport { BaseUserService } from \"../user.service\";\nimport { ZoneService } from \"./zone.service\";\n\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class NavigationService {\n\n API: any;\n\n constructor(@Inject('currentAPIService') apiInjected: any,\n private userService: BaseUserService,\n private zoneService: ZoneService) {\n this.API = apiInjected;\n }\n\n async createNavigation(navInput: Navigation): Promise<Navigation> {\n return this.API.__proto__.CreateNavigation(navInput);\n }\n\n async deleteNavigation(id: string): Promise<Navigation> {\n return this.API.__proto__.DeleteNavigation({ id });\n }\n\n async getNavigationsForNode(nodeID: string): Promise<Navigation[]> {\n const limit = 200;\n let navigationsTokenDict = { navigations: [], nextToken: null };\n do {\n navigationsTokenDict =\n await this.mergeAPIResponseWithNextTokenWithLimit(\n nodeID,\n limit,\n navigationsTokenDict,\n );\n } while (navigationsTokenDict.nextToken);\n return navigationsTokenDict.navigations;\n }\n\n async mergeAPIResponseWithNextTokenWithLimit(\n nodeID: string,\n limit: number,\n navigationsTokenDict: { navigations: Navigation[]; nextToken: string | null; },\n ): Promise<{ navigations: Navigation[]; nextToken: string | null; }> {\n return this.API.__proto__.NavigationsByNode(\n nodeID,\n null,\n null,\n limit,\n navigationsTokenDict.nextToken, // nextToken\n ).then((response) => {\n const navigations = response.items;\n const navObject = {\n navigations: [...navigationsTokenDict.navigations, ...navigations],\n nextToken: response.nextToken,\n };\n return navObject;\n });\n }\n\n async getNavigation(id: string): Promise<Navigation> {\n return this.API.__proto__.GetNavigation(id);\n }\n\n async getSweepsIDsForSpace(spaceID: string): Promise<string[]> {\n const zones = await this.zoneService.getZonesBySpace(spaceID);\n const zonesWithSweeps = zones.filter((zone) => zone.sweepIDs && zone.sweepIDs.length > 0);\n const allSweeps = zonesWithSweeps.flatMap((zone) => zone.sweepIDs);\n return [...new Set(allSweeps)];\n }\n\n async getAllowedSweepsIDsForUserInSpace(\n spaceID: string,\n ): Promise<string[]> {\n const missionsForSpace = this.userService.currentMissions.filter(\n (mis) => mis.spaceID === spaceID,\n );\n let navIDs = [];\n if (this.userService.userHasAccessToAllZonesInSpace(spaceID)) {\n return this.getSweepsIDsForSpace(spaceID);\n }\n await Promise.all(\n missionsForSpace.map(async (mission) => {\n navIDs = [...navIDs, ...mission.zone.sweepIDs];\n }),\n );\n return navIDs;\n }\n\n async getForbiddenNavigationIDsForUserInSpace(\n spaceID: string,\n ): Promise<string[]> {\n const allowed = await this.getAllowedSweepsIDsForUserInSpace(spaceID);\n const allNavs = await this.getSweepsIDsForSpace(spaceID);\n const difference = allNavs.filter((x) => !allowed.includes(x));\n return difference.length > 0 ? difference : null;\n }\n\n async getNavigationsForMatterportIDForSpace(\n matterportID: string,\n spaceID: string,\n ): Promise<Navigation[]> {\n return this.API.__proto__.NavigationsByMatterportIDBySpace(matterportID, {\n eq: spaceID,\n }).then((navs) => navs.items);\n }\n\n async getNavigationsForZone(zone: Zone): Promise<Navigation[]> {\n const responseNavs = [];\n await Promise.all(\n zone.sweepIDs.map(async (sweepID) => {\n const navs = await this.getNavigationsForMatterportIDForSpace(\n sweepID,\n zone.spaceID,\n );\n if (navs.length > 0) {\n responseNavs.push(navs[0]);\n }\n }),\n );\n return responseNavs;\n }\n\n async updateNavigation(\n navInput: any,\n ): Promise<Navigation> {\n return this.API.__proto__.UpdateNavigation(navInput);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Equipment, Feature, POI, Ticket } from \"../../types.service\";\nimport { NavigationService } from \"./navigation.service\";\nimport { PoiService } from \"./poi.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class BaseObjectService {\n constructor(\n protected poiService: PoiService,\n private navigationService: NavigationService,\n ) {}\n\n async getModel3dAndSweep(object: Feature | Ticket | Equipment): Promise<{\n model3D: string;\n sweep: string;\n rotation: { x: number; y: number };\n } | void> {\n return this.poiService\n .getPoiByElementId(object.id)\n .then(async (poi) => {\n if (poi && poi.matterportSweepID) {\n const navigations =\n await this.navigationService.getNavigationsForMatterportIDForSpace(\n poi.matterportSweepID,\n object.spaceID,\n );\n const [poiNavigation] = navigations;\n if (this.poiService.poiIsVirtual(poi)) {\n return {\n model3D: poiNavigation.node.model3D,\n sweep: null,\n rotation: null,\n };\n }\n const coordinate = JSON.parse(poi.coordinate);\n let rotation = null;\n if (coordinate.xRotation) {\n rotation = {\n x: Number(coordinate.xRotation),\n y: Number(coordinate.yRotation),\n };\n }\n return {\n model3D: poiNavigation.node.model3D,\n sweep: poi.matterportSweepID,\n rotation,\n };\n }\n return null;\n })\n .catch((error) => {\n return null;\n })\n }\n\n async updateIconForAllObjects(\n objects: Ticket[] | Feature[] | Equipment[],\n tagIcon: string,\n ): Promise<POI[]> {\n const IDs = [];\n for (const object of objects) {\n IDs.push(object.id);\n }\n const pois = [];\n await Promise.all(\n IDs.map(async (id) => {\n const poi = await this.poiService.getPoiByElementId(id);\n const updated = await this.poiService.updatePoi({\n id: poi.id,\n tagIcon,\n });\n pois.push(updated);\n }),\n );\n console.log(\"updated\", pois.length, \"pois with new icons\");\n return pois;\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Operation, Ticket } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class OperationService {\n API: any; //AWS\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async getOperationsByTicketID(id: string): Promise<Operation[]> {\n return this.API.__proto__.OperationsByTicket(id).then((res) => res.items);\n }\n\n async getOperationsByEquipmentID(id: string): Promise<Operation[]> {\n return this.API.__proto__.OperationsByEquipment(id).then((res) => res.items);\n }\n\n async getTicketsByEquipmentID(id: string): Promise<Ticket[]> {\n const operations = await this.getOperationsByEquipmentID(id);\n const tickets = operations.map((operation) => operation.ticket);\n return tickets;\n }\n\n async deleteOperationsForEquipment(equipID: string): Promise<Operation[]> {\n const deleted = [];\n await this.getOperationsByEquipmentID(equipID)\n .then(async (operations) => {\n if (operations.length > 0) {\n await Promise.all(\n operations.map(async (op) => {\n const deletedOp = await this.API.__proto__.DeleteOperation({ id: op.id });\n deleted.push(deletedOp)\n }),\n );\n }\n });\n return deleted;\n }\n\n async deleteOperationsForTicket(ticketID: string) {\n await this.getOperationsByTicketID(ticketID)\n .then(async (operations) => {\n if (operations.length > 0) {\n await Promise.all(\n operations.map(async (op) => {\n await this.API.__proto__.DeleteOperation({ id: op.id });\n }),\n );\n }\n });\n }\n\n async deleteOperation(operationID: string): Promise<Operation> {\n return this.API.__proto__.DeleteOperation({ id: operationID });\n }\n\n async createOperation(operation: Operation): Promise<Operation> {\n return this.API.__proto__.CreateOperation(operation);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Inject } from \"@angular/core\";\nimport { dateTimeToLocalString } from \"../../helpers.service\";\nimport { ProfileEntity } from \"../../types.service\";\nimport { BaseUserService } from \"../user.service\";\nimport { Event } from \"../../types.service\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class EventService {\n \n translationEventSubcriptions = {};\n\n API: any;\n\n constructor(\n @Inject('currentAPIService') apiInjected: any, \n private userService: BaseUserService,\n private translate: TranslateService ) {\n this.API = apiInjected;\n }\n\n /**\n * CRUD \n * */\n async createEvent(input: Event): Promise<Event> {\n return this.API.__proto__.CreateEvent(input);\n }\n\n async updateEvent(input: any): Promise<Event> {\n return this.API.__proto__.UpdateEvent(input);\n }\n\n async deleteEvent(eventID: string): Promise<Event> {\n return this.API.__proto__.DeleteEvent({id: eventID});\n }\n\n async getEvent(eventID: string): Promise<Event>{\n return this.API.__proto__.GetEvent(eventID);\n }\n\n /** \n * Custom get by GSI \n * */\n async getEventsByTicketID(ticketID: string): Promise<Event[]> {\n return this.API.__proto__.EventsByTicket(ticketID).then((events)=> events.items);\n }\n\n async getEventsByTicketIDSortedByDateDesc(ticketID: string): Promise<Event[]> {\n return this.API.__proto__.EventsByTicketByDate(\n ticketID,\n null,\n \"DESC\",\n ).then((events) => events.items);\n }\n\n async getEventsByGroup(group: string): Promise<Event[]> {\n return (await this.API.__proto__.EventsByGroup(group)).items;\n }\n\n /**\n * \n * SORTING\n */\n\n sortEventsByCreatedAtDateDesc(events: Event[]): Event[] {\n events.sort((event1, event2) => {\n // @ts-ignore\n return new Date(event2.createdAt) - new Date(event1.createdAt);\n });\n return events;\n }\n\n sortEventsByCreatedAtDateAsc(events: Event[]): Event[] {\n events.sort((event1, event2) => {\n // @ts-ignore\n return new Date(event1.createdAt) - new Date(event2.createdAt);\n });\n return events;\n }\n\n /**\n * TRANSLATIONS \n * */\n /** Apply a translation to a ticket event, with the current language */\n async applyTicketEventTranslate(event: Event) {\n const meta = await this.getTranslatedMetaEvent(event);\n const path = event.translationPath;\n if (path) {\n const titlePath = `${path}.title`;\n const descriptionPath = `${path}.description`;\n const value = this.translate.instant(\n [titlePath, descriptionPath],\n meta,\n );\n event.title = value[titlePath];\n event.description = value[descriptionPath];\n }\n }\n\n /** Unsubscribe a ticket event for his translation */\n ticketEventSubscribeTranslation(event: Event) {\n if (event.id in this.translationEventSubcriptions) {\n this.ticketEventUnsubscribeTranslation(event.id);\n }\n this.translationEventSubcriptions[event.id] =\n this.translate.onLangChange.subscribe((change) => {\n this.applyTicketEventTranslate(event);\n });\n this.applyTicketEventTranslate(event);\n }\n\n /** Unsubscribe a ticket event for his translation */\n ticketEventUnsubscribeTranslation(id: string) {\n if (id in this.translationEventSubcriptions) {\n this.translationEventSubcriptions[id].unsubscribe();\n delete this.translationEventSubcriptions[id];\n }\n }\n\n /** Generate the translated metadata of an event, according to the current language */\n async getTranslatedMetaEvent(event: Event): Promise<any> {\n let meta: any = {};\n\n const owner: ProfileEntity = await this.userService.userFromUserID(\n event.owner.userID,\n );\n\n try {\n if (event.metadata) meta = JSON.parse(event.metadata);\n } catch {}\n meta.firstName = owner.firstName;\n meta.lastName = owner.lastName;\n\n if (event.estimateStartDate) {\n meta.fromDate = dateTimeToLocalString(\n event.estimateStartDate,\n this.translate,\n );\n }\n if (event.estimateEndDate)\n meta.toDate = dateTimeToLocalString(\n event.estimateEndDate,\n this.translate,\n );\n\n if (meta.oldStatus)\n meta.oldStatus = this.translate.instant(meta.oldStatus);\n if (meta.newStatus)\n meta.newStatus = this.translate.instant(meta.newStatus);\n if (meta.type) meta.type = this.translate.instant(meta.type);\n return meta;\n }\n \n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Affectation } from \"../../types.service\";\n\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class AffectationService {\n API: any;\n\n constructor(\n @Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async getAffectationsFromTicketID(\n ticketID: string,\n ): Promise<Affectation[] | void> {\n return this.API.__proto__.ListAffectations({\n ticketID: {\n eq: ticketID,\n } ,\n })\n .then((results) => {\n return results.items;\n })\n .catch((error) => {\n console.log(\n ` Error while retrieving affectations for ${ticketID} : ${JSON.stringify(error)}`,\n );\n });\n }\n\n async getAffectationsFromMissionID(\n missionID: string,\n ): Promise<Affectation[] | void> {\n return this.API.__proto__.AffectationsByMission(missionID).then((resposne) => resposne.items);\n }\n\n async softDeleteAffectationByMissionByTicket(\n ticketID: string,\n missionID: string,\n ): Promise<Affectation[]> {\n const affectations: Affectation[] =\n await this.getAffecationsForTicketForMission(missionID, ticketID);\n await Promise.all(\n affectations.map(async (affectation) => {\n const deleted = await this.API.__proto__.UpdateAffectation({\n id: affectation.id,\n deletedAt: Date.now(),\n });\n console.log(\"soft deleted affectation\", deleted);\n }),\n );\n return affectations;\n }\n\n async getAffecationsForTicketForMission(\n ticketID: string,\n missionID: string,\n ): Promise<Affectation[]> {\n return this.API.__proto__.AffectationsByMissionByTicket(missionID, {\n eq: ticketID,\n }).then((resposne) => resposne.items);\n }\n\n async softDeleteAffectationByID(\n affectationID: string,\n ): Promise<Affectation> {\n return this.API.__proto__.UpdateAffectation({\n id: affectationID,\n deletedAt: Date.now(),\n });\n }\n\n async createAffectation(input: Affectation): Promise<Affectation> {\n return this.API.__proto__.CreateAffectation(input);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, first } from 'rxjs/operators';\nimport { Zone } from '../types.service';\nimport { MatterportService } from './matterport.service';\nimport { ZoneService } from './models/zone.service';\nimport { ZoneChangeService } from './zoneChange.service';\nimport { BaseUserService } from './user.service';\nimport { ViewerService } from './viewer.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NavigatorService {\n currentSweep: string | null;\n\n targetSweep: string | null;\n\n targetRotation: { x: number; y: number } | null;\n\n currentModel3D: string | null;\n\n currentSpaceID: string | null;\n\n currentZone: Zone | null;\n\n visitLastPosition: Map<string, { sweep: string; rotation: any }> = new Map();\n\n floorToGo: Zone | null;\n\n locationIDChange: Subject<string | null> = new Subject();\n\n navBarZoneIDChange: Subject<string | null> = new Subject();\n\n isVisibleChanged = new Subject<boolean>();\n\n currentNavBarLocationID: string;\n\n currentNavBarZoneID: string;\n\n zonesSortedForCurrentSweep: Zone[] | null;\n\n audioZonesChange: Subject<Zone[]> = new Subject();\n\n zonesForUserForSpace: Zone[] | null;\n\n currentAudioZones: Zone[];\n\n audioZonesForUserForSpace: Zone[];\n\n constructor(\n private matterportService: MatterportService,\n private viewerService: ViewerService,\n private zoneService: ZoneService,\n private userService: BaseUserService,\n private zoneChangeService: ZoneChangeService\n ) {\n this.matterportService.currentSweep\n .pipe(first()) // take first in order not to wait 2 sec an first load\n .subscribe((sweep: string) => {\n this.currentSweep = sweep;\n if (this.zonesForUserForSpace) {\n this.setZonesForCurrentSweep();\n }\n });\n this.matterportService.currentSweep\n .pipe(debounceTime<string>(1500)) // delays values emitted and return only the latest\n .subscribe((sweep: string) => {\n if (sweep === this.currentSweep) {\n return;\n }\n this.currentSweep = sweep;\n if (this.zonesForUserForSpace) {\n this.setZonesForCurrentSweep();\n }\n });\n this.viewerService.viewerIsOn.subscribe(\n (data: {\n spaceID: string | null;\n model3D: string | null;\n sweep: string | null;\n rotation: { x: number; y: number } | null;\n }) => {\n if (this.currentSpaceID !== data.spaceID) {\n this.currentSpaceID = data.spaceID;\n }\n if (!data.spaceID) {\n this.zonesForUserForSpace = null;\n this.zonesSortedForCurrentSweep = null;\n this.audioZonesForUserForSpace = null;\n this.currentZone = null;\n this.zoneChangeService.zoneChange.next(null);\n this.currentSweep = null;\n // save last position\n const lastPose = this.matterportService.poseCamera;\n if (lastPose && this.currentModel3D && this.userService.cu) {\n this.visitLastPosition.set(this.currentModel3D, {\n sweep: lastPose.sweep,\n rotation: lastPose.rotation,\n });\n }\n this.currentModel3D = data.model3D;\n } else {\n this.currentModel3D = data.model3D;\n this.targetSweep = data.sweep;\n this.targetRotation = data.rotation;\n this.onViewerLoaded().catch((e) => console.log(e));\n }\n }\n );\n this.userService.isChanged.subscribe((isConnected) => {\n if (!isConnected) {\n // user disconnected, clean Map\n this.visitLastPosition = new Map();\n }\n });\n }\n\n getLastPositionForModel(model3D: string) {\n return this.visitLastPosition.get(model3D);\n }\n\n goToSweepWithRotation(\n sweep: string,\n rotation: { x: number; y: number } | null = null\n ) {\n this.matterportService.action_go_to_sweep(sweep, rotation);\n }\n\n async goToFloor(floor: Zone) {\n let matterportFloorSequence = null;\n if (floor.metadata) {\n const metadata = JSON.parse(floor.metadata);\n if (metadata.matterportFloorSequence !== undefined) {\n matterportFloorSequence = metadata.matterportFloorSequence;\n }\n }\n await this.matterportService.action_go_to_floor(\n floor.name,\n matterportFloorSequence\n );\n }\n\n async onViewerLoaded() {\n let sweepToGo: string | null = null;\n let rotation: { x: number; y: number } | null = null;\n if (this.targetSweep) {\n sweepToGo = this.targetSweep;\n rotation = this.targetRotation\n ? this.targetRotation\n : this.checkRotationForSweep(this.targetSweep);\n } else {\n const lastPostion = this.getLastPositionForModel(this.currentModel3D!);\n if (lastPostion) {\n sweepToGo = lastPostion.sweep;\n rotation = lastPostion.rotation;\n }\n }\n if (this.targetRotation) {\n rotation = this.targetRotation;\n }\n if (sweepToGo && !this.floorToGo) {\n // console.log(\"go to sweep\", sweepToGo);\n this.goToSweepWithRotation(sweepToGo, rotation);\n }\n if (this.floorToGo) {\n this.goToFloor(this.floorToGo);\n this.floorToGo = null;\n }\n // if first load and zones are not set\n this.zonesForUserForSpace = await this.zoneService.getZonesBySpaceForUser(\n this.currentSpaceID\n );\n this.audioZonesForUserForSpace = this.zonesForUserForSpace.filter(\n (zone) => zone.audioID\n );\n this.setZonesForCurrentSweep();\n }\n\n checkRotationForSweep(sweep: string): { x: number; y: number } | null {\n const lastPosition = this.visitLastPosition.get(this.currentModel3D!);\n if (lastPosition && lastPosition.sweep === sweep) {\n return lastPosition.rotation;\n }\n return null;\n }\n\n setZonesForCurrentSweep() {\n if (!this.currentSweep) {\n return;\n }\n let zonesForSweep = this.zonesForUserForSpace?.filter(\n (zone) => zone.sweepIDs && zone.sweepIDs.includes(this.currentSweep)\n );\n const audioZones = this.audioZonesForUserForSpace?.filter(\n (zone) => zone.sweepIDs && zone.sweepIDs.includes(this.currentSweep)\n );\n this.audioZonesChange.next(audioZones);\n this.currentAudioZones = audioZones;\n\n // filter out audio zone (not to show to user it's name)\n zonesForSweep = zonesForSweep.filter((zone) => !zone.audio);\n if (zonesForSweep && zonesForSweep.length > 0) {\n this.zonesSortedForCurrentSweep = zonesForSweep.sort((a, b) => {\n if (a.sweepIDs!.length === b.sweepIDs!.length) {\n // if the same amount of sweeps: floor == the whole space\n if (a.layer && b.layer) {\n // put type BUILDING at the end\n return a.layer.name !== 'BUILDING'\n ? -1\n : b.layer.name !== 'BUILDING'\n ? 1\n : 0;\n }\n return a.parent?.sweepIDs ? -1 : b.parent?.sweepIDs ? 1 : 0;\n }\n return a.sweepIDs!.length - b.sweepIDs!.length;\n });\n this.zoneChangeService.zonesForUserChange.next(\n this.zonesSortedForCurrentSweep\n );\n\n if (\n this.zonesSortedForCurrentSweep.length > 0 &&\n this.currentZone !== this.zonesSortedForCurrentSweep[0]\n ) {\n [this.currentZone] = this.zonesSortedForCurrentSweep;\n this.zoneChangeService.zoneChange.next(this.currentZone);\n }\n }\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport { Injectable } from \"@angular/core\";\nimport { Event, EventStatus, EventType, Prestataire, ProfileEntity, RequestIntervention, Ticket } from \"../types.service\";\nimport { EventService } from \"./models/event.service\";\nimport { MissionService } from \"./models/mission.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class InterventionService {\n interventionEventTypes = [\n EventType.NON_CONTRACTUAL_INTERVENTION,\n EventType.CONTRACTUAL_INTERVENTION,\n EventType.REPORTING,\n EventType.REQUEST_FOR_INTERVENTION,\n ];\n\n constructor(\n private eventService: EventService,\n private missionService: MissionService,\n ) {}\n\n async getRequestInterventionFromTicket(\n ticket: Ticket,\n ): Promise<RequestIntervention> {\n const events =\n await this.eventService.getEventsByTicketIDSortedByDateDesc(\n ticket.id,\n );\n const relatedEvents = events.filter((event_) =>\n this.interventionEventTypes.includes(event_.type),\n );\n const allRequests = relatedEvents.filter(\n (event_) => event_.type === EventType.REQUEST_FOR_INTERVENTION,\n );\n if (allRequests.length > 0) {\n const mostRecent = allRequests[0];\n\n const composedRequest =\n this.eventToRequestIntervention(mostRecent);\n\n if (composedRequest.status === EventStatus.CANCELLED) {\n return composedRequest;\n }\n\n let eventsForMostRecentRequest = relatedEvents.filter(\n (event) => event.group === composedRequest.id,\n );\n let intervention;\n if (eventsForMostRecentRequest.length === 0) {\n // back compatibility\n eventsForMostRecentRequest = relatedEvents;\n // get intervention\n intervention = this.composeInterventionForRequest(\n relatedEvents,\n null,\n );\n // set duration\n composedRequest.realDuration =\n this.getDurationForRequest(\n relatedEvents,\n null,\n );\n } else {\n intervention = this.composeInterventionForRequest(\n eventsForMostRecentRequest,\n composedRequest.id,\n );\n composedRequest.realDuration =\n this.getDurationForRequest(\n eventsForMostRecentRequest,\n composedRequest.id,\n );\n }\n\n if (!composedRequest.estimateStartDate) {\n composedRequest.estimateStartDate =\n this.getMostRecentEstimateStartDate(\n eventsForMostRecentRequest,\n );\n }\n composedRequest.realStartDate =\n this.getEarliestRealStartDateForRequest(\n relatedEvents,\n composedRequest.id,\n );\n if (!composedRequest.estimateEndDate) {\n composedRequest.estimateEndDate =\n this.getMostRecentEstimateEndDate(\n eventsForMostRecentRequest,\n );\n }\n composedRequest.realEndDate =\n this.getLatestRealEndDateForRequest(\n relatedEvents,\n composedRequest.id,\n );\n\n composedRequest.intervention = intervention;\n return composedRequest;\n }\n return null;\n }\n\n composeInterventionForRequest(\n relatedEvents: Event[],\n requestID: string,\n ): Event {\n const interventions = requestID\n ? relatedEvents.filter(\n (event_) =>\n (event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\n event_.type === EventType.CONTRACTUAL_INTERVENTION) &&\n event_.group === requestID,\n )\n : relatedEvents.filter(\n (event_) =>\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\n event_.type === EventType.CONTRACTUAL_INTERVENTION,\n );\n\n if (interventions.length > 0) {\n const lastIntervention = interventions[0];\n return lastIntervention;\n }\n return null;\n }\n\n async getPrestataireForTicket(ticket: Ticket): Promise<Prestataire> {\n if (ticket.assignees.items.length > 0) {\n const sortedAffectations = ticket.assignees.items.sort(\n (a, b) =>\n // @ts-ignore\n // eslint-disable-next-line prettier/prettier\n new Date(b.createdAt) - new Date(a.createdAt),\n );\n const missionIDpresta = sortedAffectations[0].missionID;\n const prestaMission = await this.missionService.getMission(\n missionIDpresta,\n );\n const userPrestataire = new ProfileEntity(prestaMission.user);\n const prestataire = {\n organisation: prestaMission.organisation,\n mission: prestaMission,\n profile: userPrestataire,\n name: userPrestataire.displayName,\n };\n return prestataire;\n }\n return null;\n }\n\n getEarliestRealStartDateForRequest(\n events: Event[],\n requestID: string,\n ): number | null {\n let date = null;\n const interventions = events.filter(\n (event_) =>\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION) &&\n event_.group === requestID,\n );\n const sortedInterventions =\n this.eventService.sortEventsByCreatedAtDateAsc(interventions);\n if (sortedInterventions.length > 0) {\n for (const event of sortedInterventions) {\n if (event.realStartDate) {\n date = event.realStartDate;\n break;\n }\n }\n }\n return date;\n }\n\n getLatestRealEndDateForRequest(\n events: Event[],\n requestID: string,\n ): number | null {\n let date = null;\n const interventions = events.filter(\n (event_) =>\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION) &&\n event_.group === requestID,\n );\n const sortedInterventions =\n this.eventService.sortEventsByCreatedAtDateDesc(interventions);\n if (sortedInterventions.length > 0) {\n for (const event of sortedInterventions) {\n if (event.realEndDate) {\n date = event.realEndDate;\n break;\n }\n }\n }\n return date;\n }\n\n getDurationForRequest(events: Event[], requestID: string): number {\n let duration = 0; // in miliseconds\n const interventions = requestID\n ? events.filter(\n (event_) =>\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\n event_.type ===\n EventType.NON_CONTRACTUAL_INTERVENTION) &&\n event_.group === requestID,\n )\n : events.filter(\n (event_) =>\n event_.type === EventType.CONTRACTUAL_INTERVENTION ||\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION,\n );\n for (const event of interventions) {\n if (event.timeSpent) {\n duration += event.timeSpent;\n }\n }\n return duration;\n }\n\n getIntervention(events): Event | null {\n const interventions = events.filter(\n (event_) =>\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\n event_.type === EventType.CONTRACTUAL_INTERVENTION,\n );\n if (interventions.length > 0) {\n const lastIntervention = interventions[0];\n return lastIntervention;\n }\n return null;\n }\n\n eventToRequestIntervention(event: Event): RequestIntervention {\n const request = {\n id: event.group === \"default\" ? event.id : event.group,\n realEndDate: event.realEndDate,\n realStartDate: event.realStartDate,\n estimateStartDate: event.estimateStartDate,\n estimateEndDate: event.estimateEndDate,\n realDuration: event.timeSpent,\n type: event.type,\n status: event.status,\n createdAt: event.createdAt,\n updatedAt: event.updatedAt,\n ticketID: event.ticketID,\n } as RequestIntervention;\n return request;\n }\n\n getMostRecentTimeSpent(events: Event[]): number | null {\n let timeSpent = null;\n const sortedEvents = this.getAllEventsAfterLastCreated(events);\n for (const event_ of sortedEvents) {\n if (event_.timeSpent) {\n timeSpent = event_.timeSpent;\n break;\n }\n }\n return timeSpent;\n }\n\n getAllEventsAfterLastCreated(events: Event[]): Event[] {\n const eventsAfter: Event[] = [];\n const currentIntervention = this.getCurrentIntevention(events);\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\n if (sortedEvents.length > 0 && currentIntervention) {\n for (const event_ of sortedEvents) {\n eventsAfter.push(event_);\n if (event_.id === currentIntervention.id) {\n break;\n }\n }\n }\n return eventsAfter;\n }\n\n getCurrentIntevention(events: Event[]): Event {\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\n let currentIntervention;\n for (const event_ of sortedEvents) {\n if (event_.status === EventStatus.CREATED) {\n currentIntervention = event_;\n }\n if (event_.status !== EventStatus.CREATED && currentIntervention) {\n break;\n }\n }\n return currentIntervention;\n }\n\n getMostRecentEstimateStartDate(events: Event[]): number | null {\n let estimateStartDate = null;\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\n for (const event_ of sortedEvents) {\n if (event_.estimateStartDate) {\n estimateStartDate = event_.estimateStartDate;\n break;\n }\n }\n return estimateStartDate;\n }\n\n getMostRecentEstimateEndDate(events: Event[]): number | null {\n let date = null;\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\n for (const event_ of sortedEvents) {\n if (event_.estimateEndDate) {\n date = event_.estimateEndDate;\n break;\n }\n }\n return date;\n }\n\n // getMostRecentRealStartDate(events: Event[]): number | null {\n // let date = null;\n // // const sortedEvents = this.sortEventsByCreatedAtDateDesc(events);\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\n // for (const event_ of sortedEvents) {\n // if (event_.realStartDate) {\n // date = event_.realStartDate;\n // break;\n // }\n // }\n // return date;\n // }\n\n // getMostRecentRealStartDateGlobal(events: Event[]): number | null {\n // let date = null;\n // // const sortedEvents = this.sortEventsByCreatedAtDateDesc(events);\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\n // if (sortedEvents.length > 0) {\n // for (const event_ of sortedEvents) {\n // if (event_.realStartDate) {\n // date = event_.realStartDate;\n // break;\n // }\n // }\n // }\n // return date;\n // }\n}\n","/* eslint-disable class-methods-use-this */\n/* eslint-disable consistent-return */\nimport { Inject, Injectable } from '@angular/core';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { Subject, Subscription, takeUntil } from 'rxjs';\nimport { openModalForVisitSwitch, waitUntil } from '../../helpers.service';\nimport { MattertagData } from '../../mattertagData';\nimport {\n Event,\n Ticket,\n TicketType,\n TicketPriority,\n TicketStatus,\n EventStatus,\n EventType,\n Affectation,\n POI,\n PoiType,\n IUpdate,\n Zone,\n} from '../../types.service';\nimport { FilterService } from '../filter.service';\nimport { NavigatorService } from '../navigator.service';\nimport { BaseUserService } from '../user.service';\nimport { ViewerService } from '../viewer.service';\nimport { BaseObjectService } from './base-object.service';\nimport { NavigationService } from './navigation.service';\nimport { OperationService } from './operation.service';\nimport { PoiService } from './poi.service';\nimport InformationIcon from '@iconify-icons/mdi/information-outline';\nimport AccidentIcon from '@iconify-icons/mdi/alert';\nimport WordOrderIcon from '@iconify-icons/mdi/account-hard-hat';\nimport ReportingIcon from '@iconify-icons/mdi/file-document-outline';\nimport MaintenanceIcon from '@iconify-icons/mdi/tools';\nimport { EventService } from './event.service';\nimport { InterventionService } from '../intervention.service';\nimport { AffectationService } from './affectation.service';\nimport {ZoneChangeService} from \"../zoneChange.service\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TicketsService extends BaseObjectService {\n currentTickets: { zone: Ticket[]; space: Ticket[] } = {\n zone: [],\n space: [],\n };\n\n ticketTags: Subject<Ticket[]> = new Subject();\n\n ticketsFiltered: Ticket[] = [];\n\n ticketsUpdated: Subject<{\n zone: Ticket[];\n space: Ticket[];\n }> = new Subject();\n\n currentSpaceID: string;\n\n zoneIDFilter: string;\n\n dateFilter: Date[];\n\n ticketTypeFilter: TicketType[];\n\n reportingIcon = ReportingIcon;\n\n maintenanceIcon = MaintenanceIcon;\n\n workorderIcon = WordOrderIcon;\n\n informationIcon = InformationIcon;\n\n accidentIcon = AccidentIcon;\n\n updateDone: Subject<boolean> = new Subject();\n\n updating: Subject<boolean> = new Subject();\n\n API: any;\n awsKinesisAnalytics: any; //AWS\n\n isMuseumUser = false;\n\n navSubscription: Subscription;\n\n filetrSubscription: Subscription;\n\n floorsPerSpace: Zone[] = null;\n\n selectedFloor: Zone = null;\n\n private destroy$ = new Subject();\n\n constructor(\n @Inject('currentAwsKinesisAnalyticsService')\n awsKinesisAnalyticsInjected: any,\n @Inject('currentAPIService') apiInjected: any,\n private operationService: OperationService,\n private eventService: EventService,\n private affectationService: AffectationService,\n poiService: PoiService,\n private userService: BaseUserService,\n private navigatorService: NavigatorService,\n private filterService: FilterService,\n private interventionService: InterventionService,\n navigationService: NavigationService,\n private viewerService: ViewerService,\n private zoneChangeService: ZoneChangeService,\n private modalService: NgbModal\n ) {\n super(poiService, navigationService);\n this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;\n this.API = apiInjected;\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\n this.initSubscriptions();\n this.userService.isChanged.subscribe((isConnected) => {\n if (isConnected) {\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\n this.initSubscriptions();\n } else {\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n this.filetrSubscription.unsubscribe();\n }\n }\n });\n\n this.zoneChangeService.floorHasChanged.subscribe((floor)=>{\n if (floor){\n this.selectedFloor = floor;\n }\n });\n }\n\n async initTickets() {\n let ticketsFiltered = [];\n if (this.currentSpaceID) {\n this.updating.next(true);\n await this.getTicketsBySpace(this.currentSpaceID).then((tickets) => {\n if (tickets) {\n ticketsFiltered = tickets;\n }\n });\n ticketsFiltered =\n await this.filterService.filterTicketsForCurrentUserInSpace(\n ticketsFiltered,\n this.currentSpaceID\n );\n if (this.dateFilter) {\n ticketsFiltered = this.filterService.filterObjectsForDateRange(\n ticketsFiltered,\n this.dateFilter\n );\n }\n if (this.ticketTypeFilter) {\n ticketsFiltered = ticketsFiltered.filter((ticket) =>\n this.ticketTypeFilter.includes(ticket.type)\n );\n }\n this.currentTickets.space = ticketsFiltered;\n this.ticketTags.next(ticketsFiltered); // tags without zone filter\n\n if (this.zoneIDFilter) {\n ticketsFiltered = await this.filterService.filterObjectsForZone(\n ticketsFiltered,\n this.zoneIDFilter\n );\n }\n this.currentTickets.zone = ticketsFiltered;\n this.ticketsUpdated.next(this.currentTickets);\n this.updating.next(false);\n } else {\n this.ticketTags.next(null);\n }\n }\n\n async adaptTicket(ticket: Ticket): Promise<Ticket> {\n if (ticket.comments.items.length > 0) {\n ticket.comments.items.sort((a, b) => {\n // @ts-ignore\n return new Date(b.createdAt) - new Date(a.createdAt);\n });\n }\n\n if (ticket.events.items.length > 0) {\n // Sort events by date\n ticket.events.items.sort((event1, event2) => {\n // @ts-ignore\n return new Date(event2.createdAt) - new Date(event1.createdAt);\n });\n }\n ticket.prestataire = await this.interventionService.getPrestataireForTicket(\n ticket\n );\n return ticket;\n }\n\n getPriorityColor(ticket: Ticket): string {\n switch (ticket.priority) {\n case TicketPriority.MAXIMUM:\n return 'crimson';\n case TicketPriority.HIGH:\n return 'red';\n case TicketPriority.MEDIUM:\n return 'orange';\n case TicketPriority.LOW:\n return 'green';\n case TicketPriority.MINIMUM:\n return 'blue';\n default:\n return 'blue';\n }\n }\n\n getStatusColor(ticket: Ticket): string {\n switch (ticket.status) {\n case TicketStatus.TO_BE_PROCESSED:\n return '#B0B0B1';\n case TicketStatus.PLANNED:\n return '#EBDF27';\n case TicketStatus.IN_PROGRESS:\n return '#EBDF27';\n case TicketStatus.WAITING_FOR_VALIDATION:\n return '#EBDF27';\n case TicketStatus.VALIDATED:\n return '#BCE2E5';\n case TicketStatus.REJECTED:\n return '#e84c35';\n case TicketStatus.RESOLVED:\n return '#BCE2E5';\n case TicketStatus.ARCHIVED:\n return '#B0B0B1';\n case TicketStatus.LATE:\n return '#e84c35';\n case TicketStatus.BLOCKED:\n return '#e84c35';\n case TicketStatus.COMPLETED:\n return '#388659';\n case TicketStatus.DELAYED:\n return '#DB7543';\n case TicketStatus.CANCELLED:\n return '#e84c35';\n case TicketStatus.TO_REDO:\n return '#DB7543';\n case TicketStatus.CREATED:\n return '#B0B0B1';\n default:\n return '#BCE2E5';\n }\n }\n\n getTicketPriorityNumber(t): number {\n return t.priority === TicketPriority.MINIMUM\n ? -1\n : t.priority === TicketPriority.LOW\n ? 0\n : t.priority === TicketPriority.MEDIUM\n ? 1\n : t.priority === TicketPriority.HIGH\n ? 2\n : t.priority === TicketPriority.MAXIMUM\n ? 3\n : -1;\n }\n\n getTicketIcon(type: TicketType): any {\n // const typeIcon : TicketType = ticket.type;\n switch (type) {\n case TicketType.REPORTING:\n return this.reportingIcon;\n case TicketType.REQUEST_FOR_INTERVENTION:\n return this.maintenanceIcon;\n case TicketType.REQUEST_FOR_MAINTENANCE:\n return this.maintenanceIcon;\n case TicketType.WORK_ORDER:\n return this.workorderIcon;\n case TicketType.INCIDENT:\n return this.accidentIcon;\n case TicketType.INFORMATION:\n return this.informationIcon;\n default:\n return this.maintenanceIcon;\n }\n }\n\n async addEventToTicket(ticket: Ticket, event: Event): Promise<Event> {\n const currentMission = this.userService.currentMission(ticket.spaceID);\n event.group = event.group ? event.group : 'default';\n event.ticketID = event.ticketID ? event.ticketID : ticket.id;\n event.status = event.status ? event.status : EventStatus.CREATED;\n event.type = event.type ? event.type : EventType.TICKET;\n event.ownerID = event.ownerID ? event.ownerID : currentMission.id;\n try {\n const receivedEvent = await this.eventService.createEvent(event);\n this.awsKinesisAnalytics.getInstance().record(\n // @ts-ignore\n {\n data: {\n eventType: 'Ticket Change',\n ticketId: event.ticketID,\n ticket: ticket,\n status: event.status,\n event: event,\n user: this.userService.cu,\n locationId: this.currentSpaceID,\n timestamp: new Date(),\n zoneId: this.zoneIDFilter,\n floorId: this.selectedFloor?.id,\n },\n streamName: 'smarterplanKinesis-analytics',\n // partitionKey: \"\",\n },\n 'AWSKinesis'\n );\n // console.log('Event successfully created !');\n return receivedEvent;\n } catch (error) {\n return null;\n }\n }\n\n async addTicket(ticket: Ticket): Promise<Ticket | void> {\n ticket.status = TicketStatus.CREATED;\n if (!ticket.ownerMissionID) {\n ticket.ownerMissionID = this.userService.currentMission(\n ticket.spaceID\n ).id;\n }\n // TODO!!! filter missions by space of ticket\n try {\n const receivedTicket = await this.createTicket(ticket);\n // console.log('!!! Response from creating ticket :');\n // console.log(receivedTicket);\n this.addEventToTicket(receivedTicket, {\n title: 'Création du ticket',\n description: `Ticket créé par -`,\n translationPath: 'ticketEvent.ticket.created',\n });\n this.updateDone.next(true);\n return receivedTicket; // instead of true\n } catch (error) {\n console.log('Ticket creation FAILED');\n console.log(JSON.stringify(error));\n }\n }\n\n async updateTicketWithEvent(\n ticket: IUpdate & Partial<Ticket>,\n event?: Event\n ): Promise<Ticket> {\n const receivedTicket = await this.updateTicket(ticket);\n if (receivedTicket) {\n console.log('Updated ticket :');\n console.log(receivedTicket);\n if (event) {\n await this.addEventToTicket(receivedTicket, event);\n }\n this.updateDone.next(true);\n }\n return receivedTicket;\n }\n\n async removeAssigneeFromTicket(\n ticket: Ticket,\n assignee: Affectation\n ): Promise<Ticket> {\n try {\n const affectation =\n await this.affectationService.softDeleteAffectationByID(assignee.id);\n if (!affectation) {\n console.warn(\n `removeAssigneeFromTicket(${ticket.id}, ${assignee.id}) failed`\n );\n }\n } catch (error) {\n console.error(error);\n }\n return ticket;\n }\n\n async updateTicketLocation(\n ticket: Ticket,\n tagData: MattertagData\n ): Promise<POI> {\n const poiInput = {\n coordinate: tagData.getCoordinateString(),\n type: PoiType.TICKET,\n elementID: ticket.id,\n metadata: tagData.getMetadataString(),\n matterportSweepID: tagData.getSweepID(),\n } as POI;\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\n await this.addEventToTicket(ticket, {\n title: 'Changement position du ticket',\n description: \"Le point d'intérêt du ticket a été modifié\",\n status: EventStatus.POSITION_SET,\n translationPath: 'ticketEvent.position.set',\n });\n return poi;\n }\n\n async updateStatusOfTicket(\n ticket: Ticket,\n status: TicketStatus\n ): Promise<any> {\n const currentStatus = ticket.status;\n const oldTicketStatus = ticket.status;\n ticket.status = status;\n if (currentStatus === status) {\n return ticket;\n }\n console.log('Updating status');\n return this.updateTicket({\n id: ticket.id,\n status,\n });\n }\n\n async updateTypeOfTicket(ticket: Ticket, type: TicketType): Promise<any> {\n const previousType = ticket.type;\n ticket.type = type;\n await this.updateTicketWithEvent(\n { id: ticket.id, type: ticket.type },\n {\n title: 'Type changé',\n description: `Changement de ${previousType} vers ${ticket.type}`,\n metadata: JSON.stringify({ type: ticket.type }),\n translationPath: 'ticketEvent.ticket.type',\n }\n );\n return ticket;\n }\n\n async getTicketsForUserForSpace(spaceID: string): Promise<Ticket[]> {\n const ticketsSpace = await this.getTicketsBySpace(spaceID);\n return this.filterService.filterTicketsForCurrentUserInSpace(\n ticketsSpace,\n spaceID\n );\n }\n\n /** Basic CRUD operations */\n async readTicket(id: string) {\n return this.API.__proto__.GetTicket(id);\n }\n\n async createTicket(input: Ticket): Promise<Ticket> {\n this.awsKinesisAnalytics.getInstance().record(\n // @ts-ignore\n {\n data: {\n eventType: 'Object Creation',\n objectType: 'ticket',\n //zoneId: input.spaceID, // TODO: check if spaceId == zoneId\n domain: input.domain,\n user: this.userService.cu,\n locationId: this.currentSpaceID,\n timestamp: new Date(),\n zoneId: this.zoneIDFilter,\n floorId: this.selectedFloor?.id,\n },\n streamName: 'smarterplanKinesis-analytics',\n // partitionKey: \"\",\n },\n 'AWSKinesis'\n );\n return this.API.__proto__.CreateTicket(input);\n }\n\n async updateTicket(input: IUpdate & Partial<Ticket>): Promise<Ticket> {\n return this.API.__proto__.UpdateTicket(input);\n }\n\n async deleteTicket(ticket: Ticket): Promise<Ticket> {\n const deleted = await this.API.__proto__.DeleteTicket({ id: ticket.id });\n\n // delete POI\n const poi = await this.poiService.getPoiByElementId(ticket.id);\n if (poi) {\n this.poiService.deletePoi(poi.id);\n }\n\n // clean parentID\n if (ticket.children.items.length > 0) {\n ticket.children.items.map(async (childTicket) => {\n try {\n await this.API.__proto__.UpdateTicket({\n id: childTicket.id,\n parentID: null,\n });\n } catch {\n console.warn('Could not update ticket', childTicket.id);\n }\n\n await this.API.__proto__.CreateEvent({\n title: 'Ticket parent supprimé',\n ticketID: childTicket.id,\n description: `Ticket \\\"$ticket.title}\\\" a été supprimé`,\n });\n });\n }\n // delete events\n await Promise.all(\n ticket.events.items.map(async (event_) => {\n await this.API.__proto__.DeleteEvent({ id: event_.id });\n })\n );\n // delete affectationns\n if (ticket.assignees.items.length > 0) {\n for (const element of ticket.assignees.items) {\n this.API.__proto__.DeleteAffectation({ id: element.id });\n }\n }\n // delete comments\n await Promise.all(\n ticket.comments.items.map(async (comment) => {\n await this.API.__proto__.DeleteComment({ id: comment.id });\n })\n );\n await this.operationService.deleteOperationsForTicket(ticket.id);\n return deleted;\n }\n\n /** Custom requests */\n async getTicketsBySpace(spaceID: string): Promise<Ticket[]> {\n return this.API.__proto__\n .TicketsBySpace(spaceID)\n .then((tickets) => tickets.items);\n }\n\n async updateIconForAllTicketsInSpace(\n tagIcon: string,\n spaceID: string\n ): Promise<{ tickets: Ticket[]; pois: POI[] }> {\n const tickets = await this.getTicketsBySpace(spaceID);\n const pois = await this.updateIconForAllObjects(tickets, tagIcon);\n return { tickets, pois };\n }\n\n /** Archive related */\n /** Return true if the current user has archived this ticket */\n isArchived(ticket: Ticket): boolean {\n return ticket.archivedForMissionID\n ? ticket.archivedForMissionID.includes(\n this.userService.currentMission(ticket.spaceID).id\n )\n : false;\n }\n\n setArchived(ticket: Ticket, archived: boolean) {\n let archivedList = ticket.archivedForMissionID\n ? ticket.archivedForMissionID\n : [];\n const missionID = this.userService.currentMission(ticket.spaceID).id;\n\n archivedList = archivedList.filter((m) => m !== missionID);\n\n if (archived) {\n archivedList.push(missionID);\n }\n\n return this.updateTicketWithEvent({\n id: ticket.id,\n archivedForMissionID: archivedList,\n });\n }\n\n async navigateToTicketIn3D(\n ticket: Ticket,\n forceSwitchVisit: boolean = false\n ) {\n let url = `visit/${ticket.spaceID}`;\n if (forceSwitchVisit) {\n url += `/detail/${ticket.id}`;\n }\n const canGoToTag = await this.viewerService.action_move_to_tag(\n `${ticket.id}`\n );\n if (canGoToTag) {\n return;\n }\n const result = await this.getModel3dAndSweep(ticket);\n if (!result || !result.model3D) {\n alert('Error while getting virtual visit model');\n return;\n }\n if (!forceSwitchVisit) {\n /** Si on ne force pas la visite, on demande si on veut etre switch */\n openModalForVisitSwitch(\n this.modalService,\n result.model3D,\n ticket.spaceID,\n { sweepToMove: result.sweep, rotation: result.rotation }\n );\n } else {\n /** Si on force le switch de la visit */\n window.open(`${url}?model3D=${result.model3D}&sweep=true`, '_blank');\n }\n }\n\n initSubscriptions() {\n if (!this.isMuseumUser) {\n this.navSubscription = this.zoneChangeService.zoneChange.subscribe(\n (zone) => {\n this.currentSpaceID = this.navigatorService.currentSpaceID;\n if (!this.currentSpaceID) {\n this.ticketTags.next(null);\n this.ticketsUpdated.next({ space: [], zone: null });\n this.ticketTypeFilter = null;\n this.zoneIDFilter = null;\n } else if (zone.id !== this.zoneIDFilter) {\n this.zoneIDFilter = zone.id;\n // console.log(\"going to init tickets from zone\");\n this.initTickets().catch((e) => console.log(e.message));\n }\n }\n );\n this.filetrSubscription = this.filterService.subscribeToDataFilterUpdate(\n (dateRange) => {\n this.dateFilter = dateRange;\n this.initTickets().catch((e) => console.log(e.message));\n }\n );\n this.dateFilter = this.filterService.currentDateFilter;\n this.updateDone.subscribe(() => {\n if (this.currentSpaceID) {\n this.initTickets().catch((e) => console.log(e.message));\n }\n });\n }\n }\n unsubscribe() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import {Injectable, Inject} from '@angular/core';\nimport {NgbModal} from '@ng-bootstrap/ng-bootstrap';\nimport {Subject, takeUntil} from 'rxjs';\nimport {\n openModalForVisitSwitch,\n removeNullKeysFromObject,\n waitUntil,\n} from '../../helpers.service';\nimport {MattertagData} from '../../mattertagData';\nimport {\n Note,\n Zone,\n Equipment,\n EquipmentDocument,\n Ticket,\n TypeNote,\n Mission,\n EventStatus,\n EventType,\n Operation,\n POI,\n PoiType,\n RoleStatus,\n} from '../../types.service';\nimport {FilterService} from '../filter.service';\nimport {NavigatorService} from '../navigator.service';\nimport {\n deleteFromS3,\n getSignedFile,\n getSignedImageUrlForEquipment,\n uploadFileToS3,\n} from '../s3.service';\nimport {BaseUserService} from '../user.service';\nimport {ViewerService} from '../viewer.service';\nimport {BaseObjectService} from './base-object.service';\nimport {NavigationService} from './navigation.service';\nimport {OperationService} from './operation.service';\nimport {PoiService} from './poi.service';\nimport {TicketsService} from './ticket.service';\nimport {ZoneChangeService} from \"../zoneChange.service\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EquipmentService extends BaseObjectService {\n private prefix = {\n technical: 'equipments/note/technical/',\n image: 'equipments/note/image/',\n financial: 'equipments/note/financial/',\n information: 'equipments/note/information/',\n other: 'equipments/note/other/',\n contractual: 'equipments/note/contractual/',\n };\n\n equipmentsUpdated: Subject<{\n space: Equipment[];\n zone: Equipment[];\n }> = new Subject();\n\n currentEquipments: {\n space: Equipment[];\n zonesMap: Map<string, Equipment[]>;\n } = {\n space: [],\n zonesMap: new Map(),\n };\n\n equipmentsTags: Subject<Equipment[]> = new Subject();\n\n zoneIDFilter: string;\n\n currentZone: Zone;\n\n currentSpaceID: string;\n\n floorsPerSpace: Zone[] = null;\n\n /** Null means we do not apply a filter, empty array ([]), means we that we hide all equipment */\n equipmentDomainFilter: string[] = null;\n\n updating: Subject<boolean> = new Subject();\n\n currentlyUpdating = false;\n\n currentSweep: string;\n\n deleteObservable: Subject<Equipment> = new Subject();\n\n createObservable: Subject<Equipment> = new Subject();\n\n updateObservable: Subject<Equipment> = new Subject();\n\n selectedFloor: Zone = null;\n\n API: any; //AWS\n awsKinesisAnalytics: any; //AWS\n\n isMuseumUser = false;\n\n private destroy$ = new Subject();\n\n constructor(\n @Inject('currentAPIService') apiInjected: any,\n @Inject('currentAwsKinesisAnalyticsService')\n awsKinesisAnalyticsInjected: any,\n poiService: PoiService,\n navigationService: NavigationService,\n private operationService: OperationService,\n private ticketsService: TicketsService,\n private navigatorService: NavigatorService,\n private filterService: FilterService,\n private userService: BaseUserService,\n private viewerService: ViewerService,\n private modalService: NgbModal,\n private zoneChangeService: ZoneChangeService\n ) {\n super(poiService, navigationService);\n\n this.API = apiInjected;\n this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;\n\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\n this.initSubscriptions();\n this.userService.isChanged.subscribe((isConnected) => {\n if (isConnected) {\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\n this.initSubscriptions();\n } else {\n this.unsubscribe();\n }\n });\n\n this.zoneChangeService.floorHasChanged.subscribe((floor)=>{\n if (floor){\n this.selectedFloor = floor;\n }\n });\n }\n\n async readEquipment(id: string): Promise<Equipment> {\n return this.API.__proto__.GetEquipment(id).then(async (receivedEquip) => {\n let equip: Equipment;\n if (receivedEquip) {\n equip = receivedEquip;\n equip = await this.getSignedUrlsForEquipment(receivedEquip);\n if (equip.domain) {\n if (equip.domain.parentID) {\n equip.childDomain = equip.domain;\n equip.parentDomain = equip.domain.parent;\n } else {\n equip.parentDomain = equip.domain;\n }\n }\n if (equip.subequipmentsIDs) {\n const subEquips = [];\n await Promise.all(\n equip.subequipmentsIDs.map(async (subId) => {\n const subEquip = await this.API.GetEquipment(subId);\n subEquips.push(subEquip);\n })\n );\n equip.subEquipments = subEquips;\n }\n }\n return equip;\n });\n }\n\n async createEquipment(\n equip: Equipment,\n imageFile: File,\n documentFile: File\n ): Promise<Equipment | void> {\n removeNullKeysFromObject(equip);\n this.awsKinesisAnalytics.getInstance().record(\n // @ts-ignore\n {\n data: {\n eventType: 'Object Creation',\n objectType: 'equipment',\n poi: equip,\n user: this.userService.cu,\n locationId: this.currentSpaceID,\n timestamp: new Date(),\n zoneId: this.currentZone.id,\n floorId: this.selectedFloor?.id,\n },\n streamName: 'smarterplanKinesis-analytics',\n // partitionKey: \"\",\n },\n 'AWSKinesis'\n );\n return this.API.CreateEquipment(equip).then(async (receivedEquipment) => {\n let equipment = receivedEquipment as Equipment;\n if (equipment) {\n console.log('equipment created:', equipment);\n if (documentFile) {\n await this.uploadDoc(equipment, documentFile, TypeNote.TECHNICAL);\n }\n if (imageFile) {\n await this.uploadImage(equipment, imageFile);\n }\n }\n return equipment;\n });\n }\n\n async getSignedUrlsForEquipment(equip: Equipment): Promise<Equipment> {\n const equipment = {...equip};\n if (equipment.notes.items.length > 0) {\n const docs = [];\n await Promise.all(\n equipment.notes.items.map(async (note) => {\n equipment.documentationImageUrlSigned =\n await getSignedImageUrlForEquipment(equipment);\n if (note.attachment) {\n const {length} = note.attachment.split('/');\n const filename = note.attachment.split('/')[length - 1];\n const attachment = await getSignedFile(note.attachment);\n if (attachment) {\n docs.push({\n filename,\n url: note.attachment,\n urlSigned: attachment,\n noteID: note.id,\n } as EquipmentDocument);\n }\n }\n })\n );\n equipment.documents = docs;\n return equipment;\n }\n return equipment;\n }\n\n async getEquipmentsForTicket(ticket: Ticket): Promise<Equipment[]> {\n const operations = ticket.operations.items;\n if (operations.length > 0) {\n operations.sort(\n (a, b) =>\n // @ts-ignore\n // eslint-disable-next-line prettier/prettier\n new Date(b.createdAt) - new Date(a.createdAt)\n );\n await Promise.all(\n operations.map(async (operation) => {\n operation.equipment = await this.readEquipment(operation.equipmentID);\n })\n );\n }\n // to keep the sorting by createdAt\n return operations.map((o) => o.equipment);\n }\n\n async getEquipmentsForSpace(spaceID: string): Promise<Equipment[]> {\n // split by 100\n const limit = 100;\n let equipsToken = {equips: [], nextToken: null};\n do {\n equipsToken = await this.mergeEquipmentsForSpaceWithNextTokenWithLimit(\n spaceID,\n limit,\n equipsToken\n );\n } while (equipsToken.nextToken);\n return equipsToken.equips;\n }\n\n async mergeEquipmentsForSpaceWithNextTokenWithLimit(\n spaceID: string,\n limit: number,\n equipsToken: { equips: Equipment[]; nextToken: string | null }\n ): Promise<{ equips: Equipment[]; nextToken: string | null }> {\n return this.API.__proto__\n .EquipmentsBySpace(\n spaceID,\n null,\n 'DESC',\n null,\n limit,\n equipsToken.nextToken // nextToken\n )\n .then((response) => {\n const equipsLimit = response.items;\n const equipsObject = {\n equips: [...equipsToken.equips, ...equipsLimit],\n nextToken: response.nextToken,\n };\n return equipsObject;\n });\n }\n\n async uploadImageForAllEquipments(\n equipments: Equipment[],\n imageFile: File\n ): Promise<Equipment[]> {\n if (equipments.length === 0) {\n return [];\n }\n\n return uploadFileToS3(this.prefix.image, imageFile, 'BATCH').then(\n async (url) => {\n if (url) {\n const equips = [];\n for (const equip of equipments) {\n const currentMission = this.userService.currentMission(\n equip.spaceID\n );\n await this.API.__proto__.CreateNote({\n attachment: url,\n type: TypeNote.IMAGE,\n equipmentID: equip.id,\n ownerMissionID: currentMission ? currentMission.id : null,\n });\n const update = await this.API.__proto__.UpdateEquipment({\n id: equip.id,\n photo: url,\n });\n equips.push(update);\n }\n return equips;\n }\n return [];\n }\n );\n }\n\n async uploadImage(equipment: Equipment, imageFile: File): Promise<Note> {\n return uploadFileToS3(this.prefix.image, imageFile, equipment.id).then(\n async (url) => {\n if (url) {\n const currentMission = this.userService.currentMission(\n equipment.spaceID\n );\n const note = await this.API.__proto__.CreateNote({\n attachment: url,\n type: TypeNote.IMAGE,\n equipmentID: equipment.id,\n ownerMissionID: currentMission ? currentMission.id : null,\n });\n await this.API.__proto__.UpdateEquipment({\n id: equipment.id,\n photo: url,\n });\n return note;\n }\n return null;\n }\n );\n }\n\n async updateEquipment(\n equip: any,\n file: File = null,\n noteType: TypeNote = null\n ): Promise<Equipment> {\n return this.API.__proto__\n .UpdateEquipment(equip)\n .then(async (receivedEquipment) => {\n let equipment = receivedEquipment as Equipment;\n if (equipment) {\n console.log('equipment updated:', equipment);\n if (noteType) {\n switch (noteType) {\n case TypeNote.IMAGE:\n await this.uploadImage(equipment, file);\n break;\n default:\n await this.uploadDoc(equipment, file, noteType);\n break;\n }\n }\n }\n return equipment;\n });\n }\n\n getPrefixDoc(type: TypeNote) {\n let prefix;\n switch (type) {\n case TypeNote.INFORMATION:\n prefix = this.prefix.information;\n break;\n case TypeNote.FINANCIAL:\n prefix = this.prefix.financial;\n break;\n case TypeNote.CONTRACTUAL:\n prefix = this.prefix.contractual;\n break;\n case TypeNote.OTHER:\n prefix = this.prefix.other;\n break;\n case TypeNote.IMAGE:\n prefix = this.prefix.image;\n break;\n default:\n prefix = this.prefix.technical;\n break;\n }\n return prefix;\n }\n\n async uploadDocForAllEquipments(\n equipments: Equipment[],\n documentFile: File,\n type: TypeNote\n ) {\n if (equipments.length === 0) {\n return [];\n }\n const prefix = this.getPrefixDoc(type);\n const url = await uploadFileToS3(prefix, documentFile, 'BATCH');\n if (url) {\n const updateList = [];\n for (const equip of equipments) {\n const mission = this.userService.currentMission(equip.spaceID);\n const newEquip = await this.API.__proto__.CreateNote({\n attachment: url,\n type,\n equipmentID: equip.id,\n ownerMissionID: mission ? mission.id : null,\n });\n updateList.push(newEquip);\n }\n return updateList;\n }\n return [];\n }\n\n async uploadDoc(\n equipment: Equipment,\n documentFile: File,\n type: TypeNote\n ): Promise<Note> {\n const prefix = this.getPrefixDoc(type);\n const mission = this.userService.currentMission(equipment.spaceID);\n return uploadFileToS3(prefix, documentFile, equipment.id).then(\n async (url) => {\n if (url) {\n return this.API.__proto__.CreateNote({\n attachment: url,\n type,\n equipmentID: equipment.id,\n ownerMissionID: mission ? mission.id : null,\n });\n }\n return null;\n }\n );\n }\n\n async deleteEquipment(equip: Equipment): Promise<Equipment> {\n const deleted = await this.API.__proto__.DeleteEquipment({id: equip.id});\n console.log('Deleted equipment', deleted);\n\n // delete POI\n const [poi] = equip.pois.items;\n if (poi) {\n await this.poiService.deletePoi(poi.id);\n }\n // delete notes related\n if (equip.notes.items.length > 0) {\n await Promise.all(\n equip.notes.items.map(async (note: Note) => {\n // delete files from S3\n /** Not shared with other equipment */\n if (\n note.attachment &&\n !note.attachment.split('/').pop().startsWith('BATCH_')\n ) {\n await deleteFromS3(note.attachment);\n }\n await this.API.__proto__.DeleteNote({id: note.id});\n })\n );\n }\n // delete operations (remove from linked tickets)\n await this.operationService.deleteOperationsForEquipment(equip.id);\n return deleted;\n }\n\n async updateEquipmentLocation(\n equip: Equipment,\n tagData: MattertagData\n ): Promise<POI> {\n const poiInput = {\n coordinate: tagData.getCoordinateString(),\n type: PoiType.EQUIPMENT,\n elementID: equip.id,\n metadata: tagData.getMetadataString(),\n matterportSweepID: tagData.getSweepID(),\n } as POI;\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\n return poi;\n }\n\n async removeTicketFromEquipment(\n ticket: Ticket,\n equip: Equipment\n ): Promise<Operation> {\n const operationEquip =\n await this.operationService.getOperationsByEquipmentID(equip.id);\n const operationToDelete = operationEquip.find(\n (op) => op.ticketID === ticket.id\n );\n return this.operationService\n .deleteOperation(operationToDelete.id)\n .then((res) => {\n this.ticketsService.addEventToTicket(ticket as Ticket, {\n title: 'Equipement retiré du ticket',\n description: `Equipement ${equip.name} a été retiré du ticket`,\n status: EventStatus.UNLINKED_FROM_EQUIPMENT,\n type: EventType.TICKET,\n translationPath: 'ticketEvent.ticket.unlinkedFromEquipment',\n metadata: JSON.stringify({equipment: equip.name}),\n });\n return res;\n });\n }\n\n async initEquips() {\n if (!this.currentSpaceID) {\n return;\n }\n this.updating.next(true);\n this.currentlyUpdating = true;\n\n let eqList = await this.getEquipmentsForSpace(this.currentSpaceID);\n eqList = await this.filterService.filterEquipmentsForCurrentUserInSpace(\n this.currentSpaceID,\n eqList\n );\n // console.log(eqList);\n if (eqList.length > 0) {\n let filteredEquips = eqList.filter(\n (equipment) => !this.isArchived(equipment)\n );\n\n await Promise.all(\n filteredEquips.map(async (equip) => {\n equip.documentationImageUrlSigned =\n await getSignedImageUrlForEquipment(equip);\n })\n );\n if (this.equipmentDomainFilter) {\n filteredEquips = this.filterService.filterEquipmentsByDomainList(\n filteredEquips,\n this.equipmentDomainFilter\n );\n }\n this.currentEquipments.space = filteredEquips;\n if (this.zoneIDFilter) {\n filteredEquips = (await this.filterService.filterObjectsForZone(\n filteredEquips,\n this.zoneIDFilter,\n this.currentZone\n )) as Equipment[];\n }\n this.currentEquipments.zonesMap.set(this.zoneIDFilter, filteredEquips);\n this.equipmentsTags.next(filteredEquips); // adding tags only for the current zone\n this.equipmentsUpdated.next({\n space: this.currentEquipments.space,\n zone: filteredEquips,\n }); // for lateral menu\n } else {\n if (this.zoneIDFilter) {\n this.currentEquipments.zonesMap.set(this.zoneIDFilter, []);\n }\n this.equipmentsUpdated.next({space: [], zone: []}); // for lateral menu\n }\n // console.log(this.currentEquipments);\n this.updating.next(false);\n this.currentlyUpdating = false;\n }\n\n async getEquipmentsForCurrentUserForSpace(\n spaceID,\n missions: Mission[]\n ): Promise<Equipment[]> {\n let results = [];\n\n const spaceMissions = missions.filter((m) => m.spaceID === spaceID);\n if (spaceMissions.length === 0) {\n return results;\n }\n const canSeeEquips = spaceMissions.some(\n (m) =>\n this.userService.managers.includes(m.role) ||\n m.role === RoleStatus.SERVICE\n );\n if (!canSeeEquips) {\n return results;\n }\n let domains = [];\n for (const m of spaceMissions) {\n domains = [...domains, m.domains];\n }\n if (domains.length === 0) {\n return results;\n }\n results = await this.getEquipmentsForSpace(spaceID);\n // results = this.filterService.filterEquipmentsByDomainList(\n // results,\n // domains,\n // );\n return results;\n }\n\n async updateIconForAllEquipmentsInSpace(\n tagIcon: string,\n spaceID: string,\n domainID: string = null\n ): Promise<{ equips: Equipment[]; pois: POI[] }> {\n let equips = await this.getEquipmentsForSpace(spaceID);\n if (domainID) {\n equips = equips.filter((equip) => equip.domainID === domainID);\n }\n const pois = await this.updateIconForAllObjects(equips, tagIcon);\n return {equips, pois};\n }\n\n /** Return true if the current user has archived this equipment */\n isArchived(equipment: Equipment): boolean {\n return equipment.archivedForMissionID\n ? equipment.archivedForMissionID.includes(\n this.userService.currentMission(equipment.spaceID).id\n )\n : false;\n }\n\n setArchived(equipment: Equipment, archived: boolean) {\n let archivedList = equipment.archivedForMissionID\n ? equipment.archivedForMissionID\n : [];\n const missionID = this.userService.currentMission(equipment.spaceID).id;\n\n archivedList = archivedList.filter((m) => m !== missionID);\n\n if (archived) {\n archivedList.push(missionID);\n }\n\n return this.updateEquipment({\n id: equipment.id,\n archivedForMissionID: archivedList,\n });\n }\n\n async deleteFile(document_: EquipmentDocument) {\n await deleteFromS3(document_.url);\n await this.API.DeleteNote({id: document_.noteID});\n }\n\n async navigateToEquipmentIn3D(\n equipment: Equipment,\n forceSwitchVisit: boolean = false\n ) {\n let url = `visit/${equipment.spaceID}`;\n if (forceSwitchVisit) {\n url += `/equip/${equipment.id}`;\n }\n const canGoToTag = await this.viewerService.action_move_to_tag(\n `${equipment.id}`\n );\n if (canGoToTag) {\n return;\n }\n const result = await this.getModel3dAndSweep(equipment);\n\n if (!result || !result.model3D) {\n alert('Error while getting virtual visit model');\n return;\n }\n if (!forceSwitchVisit) {\n // check if we are moving within the same 3D model\n const currentModel = localStorage.getItem('model3D');\n if (currentModel && currentModel === result.model3D) {\n // we add tag to the visit\n const poi = equipment.pois.items[0];\n if (poi.coordinate) {\n // we force add because we might be in an another zone\n await this.viewerService.actionAddObjectFromPOI(equipment, poi);\n await this.viewerService.action_move_to_tag(equipment.id);\n }\n } else {\n /** Si on ne force pas la visite, on demande si on veut etre switch */\n openModalForVisitSwitch(\n this.modalService,\n result.model3D,\n equipment.spaceID,\n {sweepToMove: result.sweep, rotation: result.rotation}\n );\n }\n } else {\n /** Si on force le switch de la visit */\n window.open(`${url}?model3D=${result.model3D}&sweep=true`, '_blank');\n }\n }\n\n async updateEquipsForZone() {\n this.updating.next(true);\n let filteredEquips = [];\n if (this.currentEquipments.space.length > 0) {\n if (\n this.zoneIDFilter &&\n this.currentEquipments.zonesMap.has(this.zoneIDFilter)\n ) {\n filteredEquips = this.currentEquipments.zonesMap.get(this.zoneIDFilter);\n // console.log(\"i have equips for this zone\", filteredEquips);\n } else {\n filteredEquips = (await this.filterService.filterObjectsForZone(\n this.currentEquipments.space,\n this.zoneIDFilter,\n this.currentZone\n )) as Equipment[];\n\n this.currentEquipments.zonesMap.set(this.zoneIDFilter, [\n ...filteredEquips,\n ]);\n }\n if (this.equipmentDomainFilter) {\n filteredEquips = this.filterService.filterEquipmentsByDomainList(\n filteredEquips,\n this.equipmentDomainFilter\n );\n }\n this.equipmentsTags.next(filteredEquips); // adding tags only for the current zone\n this.equipmentsUpdated.next({\n space: this.currentEquipments.space,\n zone: filteredEquips,\n }); // for lateral menu\n } else {\n this.equipmentsUpdated.next({space: [], zone: []}); // for lateral menu\n }\n this.updating.next(false);\n }\n\n updateDueToDelete(deletedEquipment: Equipment) {\n // console.log(\"update due to delete\", deletedEquipment);\n const equip = this.currentEquipments.space.find(\n (_equip) => _equip.id === deletedEquipment.id\n );\n if (equip) {\n const index = this.currentEquipments.space.indexOf(equip);\n this.currentEquipments.space.splice(index, 1);\n }\n for (const zone of this.currentEquipments.zonesMap.keys()) {\n const equipToDelete = this.currentEquipments.zonesMap\n .get(zone)\n .find((_equip) => _equip.id === deletedEquipment.id);\n if (equipToDelete) {\n const index = this.currentEquipments.zonesMap\n .get(zone)\n .indexOf(equipToDelete);\n this.currentEquipments.zonesMap.get(zone).splice(index, 1);\n }\n }\n this.equipmentsUpdated.next({\n space: this.currentEquipments.space,\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\n }); // for lateral menu\n }\n\n updateDueToCreate(createdEquip: Equipment) {\n this.currentEquipments.space.unshift(createdEquip);\n this.currentEquipments.zonesMap\n .get(this.zoneIDFilter)\n .unshift(createdEquip);\n this.equipmentsUpdated.next({\n space: this.currentEquipments.space,\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\n }); // for lateral menu\n }\n\n updateDueToEquipUpdated(updatedEquip: Equipment) {\n const equip = this.currentEquipments.space.find(\n (_equip) => _equip.id === updatedEquip.id\n );\n if (equip) {\n const index = this.currentEquipments.space.indexOf(equip);\n if (this.isArchived(equip)) {\n // we remove archived equipment\n this.currentEquipments.space.splice(index, 1);\n } else {\n this.currentEquipments.space.splice(index, 1, updatedEquip);\n }\n }\n for (const zone of this.currentEquipments.zonesMap.keys()) {\n const equipToUpd = this.currentEquipments.zonesMap\n .get(zone)\n .find((_equip) => _equip.id === updatedEquip.id);\n if (equipToUpd) {\n const index = this.currentEquipments.zonesMap\n .get(zone)\n .indexOf(equipToUpd);\n if (this.isArchived(equip)) {\n this.currentEquipments.zonesMap.get(zone).splice(index, 1);\n } else {\n this.currentEquipments.zonesMap\n .get(zone)\n .splice(index, 1, updatedEquip);\n }\n }\n }\n this.equipmentsUpdated.next({\n space: this.currentEquipments.space,\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\n }); // for lateral menu\n }\n\n initSubscriptions() {\n if (!this.isMuseumUser) {\n this.zoneChangeService.zoneChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((zone) => {\n if (!zone || !this.navigatorService.currentSpaceID) {\n this.currentSpaceID = this.navigatorService.currentSpaceID;\n this.equipmentsTags.next(null);\n this.equipmentsUpdated.next({space: [], zone: null});\n this.zoneIDFilter = null;\n this.currentEquipments = {\n space: [],\n zonesMap: new Map(),\n };\n return;\n }\n if (zone.id !== this.zoneIDFilter) {\n this.zoneIDFilter = zone.id;\n this.currentZone = zone;\n if (this.currentSpaceID === this.navigatorService.currentSpaceID) {\n // same space, only zone update\n // console.log(\n // \"going to update equips for zone (same space)\",\n // zone,\n // );\n\n this.updateEquipsForZone();\n } else {\n this.currentSpaceID = this.navigatorService.currentSpaceID;\n // console.log(\n // \"going to init equips for zone for new space\",\n // this.currentSpaceID,\n // );\n this.initEquips();\n }\n }\n });\n\n this.deleteObservable\n .pipe(takeUntil(this.destroy$))\n .subscribe((equipment) => {\n if (this.currentSpaceID) {\n this.updateDueToDelete(equipment);\n }\n });\n\n this.createObservable\n .pipe(takeUntil(this.destroy$))\n .subscribe((equipment) => {\n if (this.currentSpaceID) {\n this.updateDueToCreate(equipment);\n }\n });\n\n this.updateObservable\n .pipe(takeUntil(this.destroy$))\n .subscribe((equipment) => {\n if (this.currentSpaceID) {\n this.updateDueToEquipUpdated(equipment);\n }\n });\n }\n }\n\n unsubscribe() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","/* eslint-disable no-case-declarations */\n/* eslint-disable no-param-reassign */\n/* eslint-disable no-await-in-loop */\nimport { Injectable } from \"@angular/core\";\nimport { Mission } from \"../types.service\";\nimport { FilterService } from \"./filter.service\";\nimport { EquipmentService } from \"./models/equipment.service\";\n\nexport enum SearchObjectType {\n USER = \"USER\",\n EQUIPMENT = \"EQUIPMENT\",\n TICKET = \"TICKET\",\n LOCATION = \"LOCATION\",\n FEATURE = \"FEATURE\",\n TEMPLATE = \"TEMPLATE\",\n}\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class SearchService {\n constructor(\n private filterService: FilterService,\n private equipmentService: EquipmentService,\n ) { }\n\n async searchForTermForTypeInMap(\n term: string,\n objectType: SearchObjectType,\n searchable: any,\n ): Promise<any> {\n let results;\n switch (objectType) {\n case SearchObjectType.EQUIPMENT:\n results = new Map();\n for (const [space, equips] of searchable.entries()) {\n const filteredEquips =\n this.filterService.filterEquipmentsForTerm(\n equips,\n term,\n );\n results.set(space, filteredEquips);\n }\n break;\n case SearchObjectType.TICKET:\n results = new Map();\n for (const [space, tickets] of searchable.entries()) {\n await Promise.all(\n tickets.map(async (ticket) => {\n const equips =\n await this.equipmentService.getEquipmentsForTicket(\n ticket,\n );\n if (equips.length > 0) {\n ticket.equipments = equips;\n }\n }),\n );\n const filteredTickets =\n this.filterService.filterTicketsForTerm(\n tickets,\n term,\n );\n results.set(space, filteredTickets);\n }\n break;\n case SearchObjectType.LOCATION:\n results = this.filterService.filterLocationsForTerm(\n searchable,\n term,\n );\n break;\n case SearchObjectType.USER:\n results = [];\n for (const orgObject of searchable) {\n const orgResults =\n this.filterService.filterOrganisationsForTerm(\n [orgObject.org],\n term,\n );\n if (orgResults.length === 0) {\n const profiles = orgObject.users.map(\n (object) => object.user,\n );\n const userResults =\n this.filterService.filterUsersForTerm(\n profiles,\n term,\n );\n const filteredUserMissions = orgObject.users.filter(\n (object) => userResults.includes(object.user),\n );\n if (userResults.length > 0) {\n results.push({\n org: orgObject.org,\n users: filteredUserMissions,\n });\n }\n } else {\n results.push(orgObject);\n }\n }\n break;\n case SearchObjectType.FEATURE:\n results = new Map();\n for (const [space, features] of searchable.entries()) {\n const filteredFeatures =\n await this.filterService.filterFeaturesForTerm(\n features,\n term,\n );\n results.set(space, filteredFeatures);\n }\n break;\n case SearchObjectType.TEMPLATE:\n results = new Map();\n for (const [zone, templates] of searchable) {\n const templateResults =\n this.filterService.filterTemplatesForTerm(\n templates as Mission[],\n term,\n );\n if (templateResults.length > 0) {\n results.set(zone, templateResults);\n }\n }\n break;\n default:\n break;\n }\n return results;\n }\n\n async searchForTermForTypeInList(\n term: string,\n objectType: SearchObjectType,\n searchable: any[],\n ): Promise<any[]> {\n let results;\n switch (objectType) {\n case SearchObjectType.EQUIPMENT:\n results = this.filterService.filterEquipmentsForTerm(\n searchable,\n term,\n );\n break;\n case SearchObjectType.TICKET:\n await Promise.all(\n searchable.map(async (ticket) => {\n const equips =\n await this.equipmentService.getEquipmentsForTicket(\n ticket,\n );\n if (equips.length > 0) {\n ticket.equipements = equips;\n }\n }),\n );\n results = this.filterService.filterTicketsForTerm(\n searchable,\n term,\n );\n break;\n case SearchObjectType.LOCATION:\n results = this.filterService.filterLocationsForTerm(\n searchable,\n term,\n );\n break;\n case SearchObjectType.FEATURE:\n results = this.filterService.filterFeaturesForTerm(\n searchable,\n term,\n );\n break;\n default:\n break;\n }\n return results;\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { SearchObjectType, SearchService } from '../../services/search.service';\n\n@Component({\n selector: 'lib-search-bar',\n templateUrl: './search-bar.component.html',\n styleUrls: ['./search-bar.component.scss']\n})\nexport class SearchBarComponent implements OnInit {\n\n @Input() searchable: any;\n\n @Input() objectType: SearchObjectType;\n\n @Output() searchEvent = new EventEmitter();\n\n public model: any;\n\n // formatter = (result: string) => result.toUpperCase();\n\n // search: OperatorFunction<string, readonly string[]> = (\n // text$: Observable<string>,\n // ) =>\n // text$.pipe(\n // debounceTime(200),\n // distinctUntilChanged(),\n // map((term) =>\n // term === \"\"\n // ? []\n // : this.searchable\n // .filter((v) =>\n // v.toLowerCase().includes(term.toLowerCase()),\n // )\n // .slice(0, 10),\n // ),\n // );\n\n // filter = (input: string[]) => string[];\n\n constructor(private searchService: SearchService) { }\n\n ngOnInit(): void {\n const input = document.querySelector(\"#searchbar\") as HTMLInputElement;\n input.addEventListener(\"keydown\", ({ key }) => {\n if (key === \"Enter\") {\n this.onSubmit();\n }\n });\n }\n\n onSubmit() {\n const input = document.querySelector(\"#searchbar\") as HTMLInputElement;\n const searchValue = input.value.toLowerCase();\n if (searchValue !== \"\") {\n this.filter(searchValue);\n } else {\n this.searchEvent.emit(null);\n }\n }\n\n async filter(term: string) {\n const results = await this.searchService.searchForTermForTypeInMap(\n term,\n this.objectType,\n this.searchable,\n );\n this.searchEvent.emit(results);\n }\n}\n","<div class=\"col-md-8 searchbar\">\n <div class=\"row depend\">\n <div class=\"col-md-5\">\n <input id=\"searchbar\" type=\"text\" class=\"form-control\" placeholder=\"keyword\" />\n </div>\n <div class=\"col-md-5\">\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onSubmit()\">{{ 'Search' |\n translate}}</button>\n </div>\n </div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, Subscription } from 'rxjs';\n\n@Pipe({\n name: 'durationToString'\n})\nexport class DurationToStringPipe implements PipeTransform {\n durationToString(\n duration: number\n ): string {\n const days = Math.floor(duration / 3600 / 24);\n const hours = Math.floor((duration - days * 24 * 3600) / 3600);\n const minutes = Math.floor((duration % 3600) / 60);\n const seconds = Math.floor(duration % 60);\n \n const daysString = this.translate.instant(\"day(s)\");\n const hoursString = this.translate.instant(\"hour(s)\");\n const oneHourString = this.translate.instant(\"hour\");\n const minutesString = this.translate.instant(\"minute(s)\");\n const secondsString = this.translate.instant(\"second(s)\");\n \n if (duration > 3600 * 24 * 7) {\n return `${days} ${daysString}`;\n }\n if (duration > 3600 * 24) {\n return `${days} ${daysString} ${hours} ${hoursString}`;\n }\n if (duration === 3600) {\n return `${hours} ${oneHourString}`;\n }\n if (duration > 3600) {\n if (minutes === 0) {\n return `${hours} ${hoursString}`;\n }\n return `${hours} ${hoursString} ${minutes} ${minutesString}`;\n }\n if (duration >= 60) {\n if (seconds === 0) {\n return `${minutes} ${minutesString}`;\n }\n return `${minutes} ${minutesString} ${seconds} ${secondsString}`;\n }\n return `${seconds} ${secondsString}`;\n }\n\n constructor(private translate: TranslateService) { }\n\n transform(duration: number): Observable<string> {\n let subscript: Subscription;\n\n const dateObserver: Observable<string> = new Observable((observer) => {\n subscript = this.translate.onLangChange.subscribe((event) => {\n observer.next(this.durationToString(duration));\n });\n observer.next(this.durationToString(duration));\n\n return {\n unsubscribe() {\n subscript.unsubscribe();\n },\n };\n });\n return dateObserver;\n }\n\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Hashtag, Node } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class HashtagService {\n currentSpaceID: string;\n\n currentHashtags: Hashtag[] = [];\n\n API: any;\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async getHashtag(hashtagID: string): Promise<Hashtag> {\n return this.API.__proto__.GetHashtag(hashtagID);\n }\n\n async createHashtag(hashtag: Hashtag): Promise<Hashtag> {\n const hashtagCreated = await this.API.__proto__.CreateHashtag(hashtag);\n this.currentHashtags.push(hashtagCreated);\n return hashtagCreated;\n }\n\n async getHashtagsForSpace(spaceID: string = null): Promise<Hashtag[]> {\n if (!spaceID) {\n if (this.currentHashtags.length === 0 && this.currentSpaceID) {\n return this.API.__proto__.HashtagsBySpace(this.currentSpaceID).then(\n (response) => response.items,\n );\n }\n return this.currentHashtags;\n }\n this.currentSpaceID = spaceID;\n return this.API.__proto__.HashtagsBySpace(spaceID).then(\n (response) => response.items,\n );\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { HashtagService } from '../services/models/hashtag.service';\n\n@Pipe({\n name: 'hashtagFromID'\n})\nexport class HashtagFromIdPipe implements PipeTransform {\n\n constructor(\n private hashtagService: HashtagService\n ) {}\n\n async transform(hashtagID: string): Promise<string> {\n if (this.hashtagService.currentHashtags.length === 0) {\n return this.hashtagService.getHashtag(hashtagID).then((hashtag) => {\n return hashtag.name;\n });\n }\n const hashtag = this.hashtagService.currentHashtags.find(\n (_hashtag) => _hashtag.id === hashtagID,\n );\n return hashtag ? hashtag.name : \"\";\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeUrl'\n})\nexport class SafeUrlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) { }\n\n transform(url: any) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { Observable } from 'rxjs/internal/Observable';\n\n@Pipe({\n name: 'timeDateString'\n})\nexport class TimeDateToLocalStringPipe implements PipeTransform {\n /**\n * Return a string of a given date time in local format.\n * The format is determined by the current language.\n */\n dateTimeToLocalString(\n date: number | string | Date,\n mode?: string,\n ): string {\n let lang = \"en-EN\";\n if (this.translate) {\n /** Get current language */\n lang = this.translate.currentLang\n ? this.translate.currentLang\n : this.translate.defaultLang;\n /** Transforme '_fr' to 'fr' */\n if (lang) {\n lang = lang.slice(1);\n }\n \n }\n \n let options: {\n month?;\n year?;\n day?;\n hour?;\n minute?;\n second?;\n dateStyle?;\n timeStyle?;\n weekday?;\n timeZone?;\n timeZoneName?;\n };\n switch (mode) {\n case \"day_numeric\":\n options = { day: \"numeric\" };\n break;\n case \"day\":\n options = { weekday: \"long\" };\n break;\n case \"date\":\n options = { dateStyle: \"long\" };\n break;\n case \"short_date_time\":\n options = {\n year: \"2-digit\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n break;\n case \"time\":\n options = { hour: \"numeric\", minute: \"numeric\" };\n break;\n case \"time_zone\":\n options = { hour: \"numeric\", minute: \"numeric\", timeZoneName: \"shortOffset\"};\n break;\n case \"day_time_zone_weekday\":\n options = {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZoneName: \"shortOffset\",\n };\n break;\n case \"date_time_zone\":\n options = {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZoneName: \"shortOffset\",\n };\n break;\n default:\n options = {\n dateStyle: \"long\",\n timeStyle: \"short\",\n };\n }\n return new Date(date).toLocaleString(lang, options);\n }\n\n constructor(private translate: TranslateService) { }\n\n transform(date: number | string | Date, mode?: any): Observable<string> {\n let subscript: Subscription;\n\n const dateObserver: Observable<string> = new Observable((observer) => {\n subscript = this.translate.onLangChange.subscribe((event) => {\n observer.next(\n this.dateTimeToLocalString(date, mode),\n );\n });\n observer.next(this.dateTimeToLocalString(date, mode));\n\n return {\n unsubscribe() {\n subscript.unsubscribe();\n },\n };\n });\n return dateObserver;\n }\n\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { BaseUserService } from \"../services/user.service\";\n\n@Pipe({\n name: \"usernameFromId\",\n})\nexport class UsernameFromIdPipe implements PipeTransform {\n static cache = {};\n\n constructor(private userService: BaseUserService) {}\n\n async transform(userId: string): Promise<string> {\n if (UsernameFromIdPipe.cache[userId] !== undefined) {\n return new Promise<string>((resolve) => {\n resolve(UsernameFromIdPipe.cache[userId]);\n });\n }\n const user = await this.userService.userFromUserID(userId);\n // @ts-ignore\n UsernameFromIdPipe.cache[userId] = `${user.displayName}`;\n return UsernameFromIdPipe.cache[userId];\n }\n}\n","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\n\nexport function noEmptyValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if(control.value && control.value !== ''){\n\n const data = control.value.replace(/ /g, '');\n return data === '' ? {isEmpty: control.value} : null;\n }else{\n return null;\n }\n };\n }","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\n\nexport function emailValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const regex = /^(([^\\s\"(),.:;<>@[\\\\\\]]+(\\.[^\\s\"(),.:;<>@[\\\\\\]]+)*)|(\".+\"))@((\\[(?:\\d{1,3}\\.){3}\\d{1,3}])|(([\\dA-Za-z\\-]+\\.)+[A-Za-z]{2,}))$/;\n return !regex.test(control.value) ? {email: control.value} : null;\n };\n }","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\n\nexport function textValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const regex = /[a-zA-Z1-9]/;\n if (control.value && control.value !== '') {\n return !regex.test(control.value) ? { text: control.value } : null;\n } else {\n return null;\n }\n };\n}","import { Injectable } from '@angular/core';\nimport { API } from \"aws-amplify\";\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SupportService {\n modalReference;\n\n constructor(public modalService: NgbModal) { }\n\n /**\n * Open the support form\n */\n openSupportForm(formComponent) {\n this.modalReference = this.modalService.open(formComponent, {\n modalDialogClass: 'modal-padding',\n });\n }\n\n /**\n * Send support request to jira\n */\n async sendSupport(data:any):Promise<string>{\n return new Promise(async (resolve)=>{\n const response = await API.post(\"helpEmail\", \"/jira-email/new\", {\n body : data,\n });\n if(response.err){\n resolve('error')\n }else{\n resolve('send')\n }\n })\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ValidatorsService {\n\n constructor() { }\n\n /**\n * return if control as error\n * @param control \n * @returns \n */\n public isControlError(control) {\n return (control && control.invalid && control.touched);\n }\n\n /**\n * return error of control\n * @param control \n * @returns \n */\n public getError(control) {\n if (control.errors) {\n if (control.errors.required) {\n return 'errorForm.required';\n }\n if (control.errors.isEmpty) {\n return 'errorForm.isEmpty';\n }\n if (control.errors.text) {\n return 'errorForm.text';\n }\n if (control.errors.email) {\n return 'errorForm.email';\n }\n if (control.errors.maxlength) {\n return 'errorForm.maxLength';\n }\n if (control.errors.number) {\n return 'errorForm.number';\n }\n }\n\n return '';\n }\n\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-loader',\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent implements OnInit {\n @Input() useLogo: boolean = true;\n\n @Input() color: string = \"#53B6BB\";\n constructor() { }\n\n ngOnInit(): void {\n document.documentElement.style.setProperty('--color', this.color);\n }\n\n}\n","<div class=\"sk-fading-circle\">\n <img *ngIf=\"useLogo\" src=\"../../../../assets/icons/smarterplan.svg\">\n <div class=\"sk-circle1 sk-circle\"></div>\n <div class=\"sk-circle2 sk-circle\"></div>\n <div class=\"sk-circle3 sk-circle\"></div>\n <div class=\"sk-circle4 sk-circle\"></div>\n <div class=\"sk-circle5 sk-circle\"></div>\n <div class=\"sk-circle6 sk-circle\"></div>\n <div class=\"sk-circle7 sk-circle\"></div>\n <div class=\"sk-circle8 sk-circle\"></div>\n <div class=\"sk-circle9 sk-circle\"></div>\n <div class=\"sk-circle10 sk-circle\"></div>\n <div class=\"sk-circle11 sk-circle\"></div>\n <div class=\"sk-circle12 sk-circle\"></div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { BaseUserService } from '../../services/user.service';\nimport { Auth } from \"aws-amplify\";\nimport { SupportService } from '../../services/support.service';\nimport { noEmptyValidator } from '../../validators/no-empty.directive';\nimport { ValidatorsService } from '../../services/validators.service';\nimport { emailValidator } from '../../validators/email.directive';\nimport { textValidator } from '../../validators/text.directive';\n\n@Component({\n selector: 'app-support-modal',\n templateUrl: './support-modal.component.html',\n styleUrls: ['./support-modal.component.scss']\n})\nexport class SupportModalComponent implements OnInit {\n status = 'new';\n\n supportForm: FormGroup;\n\n currentUser: any;\n\n loading: boolean = true;\n\n constructor(\n private supportService: SupportService,\n public activeModal: NgbActiveModal,\n private formBuilder: FormBuilder,\n private userService: BaseUserService,\n public validatorsService : ValidatorsService\n ) { }\n\n ngOnInit(): void {\n this.iniForm();\n }\n\n onClose() {\n this.activeModal.close();\n }\n\n async getCurrentUser(): Promise<any> {\n return new Promise(async (resolve) => {\n try {\n const cau = await Auth.currentAuthenticatedUser();\n resolve(await this.userService.current(cau));\n } catch (error) {\n resolve(undefined);\n }\n })\n }\n\n async iniForm() {\n this.currentUser = await this.getCurrentUser();\n this.supportForm = this.formBuilder.group({\n title: ['', [Validators.required , Validators.maxLength(255), noEmptyValidator(), textValidator()]],\n email: [(this.currentUser ? this.currentUser.email : ''), [Validators.required, emailValidator(), Validators.maxLength(255), textValidator()]],\n description: ['', [Validators.required, noEmptyValidator(), textValidator()]],\n });\n this.loading = false;\n }\n \n async onSubmit() {\n if(this.supportForm.valid){\n this.loading = true;\n this.status = await this.supportService.sendSupport(this.supportForm.value);\n this.loading = false;\n }\n }\n\n}","<div class=\"modal-header\">\n <h5 class=\"modal-title\" translate=\"Help\"></h5>\n</div>\n<div class=\"modal-body\">\n <div class=\"support-loader-container\">\n <lib-loader *ngIf=\"loading\"></lib-loader>\n </div>\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"supportForm\" style=\"margin-top:1rem;\" *ngIf=\"!loading && status==='new'\">\n <div>\n <label>{{'Title' | translate}} *</label>\n <div>\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" data-testid=\"new-support-title\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['title'])}\"\n maxlength=\"255\">\n </div>\n <div class=\"invalid-feedback\">\n <span data-testid=\"new-support-title-invalid\" [translate]=\"validatorsService.getError(supportForm.controls['title'])\"\n *ngIf=\" validatorsService.isControlError(supportForm.controls['title'])\"></span>\n </div>\n </div>\n <div *ngIf=\"!currentUser\">\n <label>{{'Email' | translate}} *</label>\n <div>\n <input type=\"email\" class=\"form-control\" formControlName=\"email\" data-testid=\"new-support-email\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['email'])}\"\n maxlength=\"255\">\n </div>\n <div class=\"invalid-feedback\">\n <span data-testid=\"new-support-email-invalid\" [translate]=\"validatorsService.getError(supportForm.controls['email'])\"\n *ngIf=\" validatorsService.isControlError(supportForm.controls['email'])\"></span>\n </div>\n </div>\n <div>\n <label>{{'Description' | translate}} *</label>\n <div>\n <textarea formControlName=\"description\" class=\"form-control\"\n data-testid=\"new-support-description\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['description'])}\"></textarea>\n </div>\n <div class=\"invalid-feedback\" >\n <span data-testid=\"new-support-description-invalid\" [translate]=\" validatorsService.getError(supportForm.controls['description'])\"\n *ngIf=\"validatorsService.isControlError(supportForm.controls['description'])\"></span>\n </div>\n </div>\n </form>\n\n <div *ngIf=\"status ==='send'\" translate=\"Your request has been registered\" data-testid=\"new-support-send-info\">\n </div>\n <div *ngIf=\"status ==='error'\" translate=\"An error has occurred, please renew your request\"\n data-testid=\"new-support-error-info\">\n\n </div>\n</div>\n<div class=\"modal-footer\">\n <button type=\"button\" class=\"btn rounded-pill btn-museum\" data-dismiss=\"modal\" translate=\"Close\" (click)=\"onClose()\"\n data-testid=\"new-support-close-btn\"></button>\n <button *ngIf=\"!loading && status==='new'\" type=\"button\" class=\"btn rounded-pill btn-museum\" translate=\"Submit\"\n (click)=\"onSubmit()\" [disabled]=\"!supportForm.valid\" data-testid=\"new-support-submit-btn\"></button>\n</div>","import { Injectable } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { Subject } from \"rxjs\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class LocaleService {\n currentLocale = \"en\";\n\n // Observable string sources\n private showModalSource = new Subject();\n\n showModal$ = this.showModalSource.asObservable();\n\n constructor(public translate: TranslateService) {}\n\n modal() {\n this.showModalSource.next(true);\n }\n\n /**\n * Reload the app to another language.\n *\n * Navigation is required because of the way angular localizes: locales are\n * completely different compilation bundles, in separate directories, hence\n * you need to reload.\n *\n * @param lang\n */\n change(lang: string): void {\n console.log(\"Switching to\", lang);\n this.currentLocale = lang;\n this.translate.use(`_${lang}`); // because files are \"_en.json\"\n }\n\n getLocale(): string {\n const lang = this.translate.currentLang\n ? this.translate.currentLang\n : this.translate.defaultLang;\n return lang.slice(1);\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport { Injectable } from \"@angular/core\";\nimport { Cache } from \"aws-amplify\";\n\nexport enum CacheKeys {\n INSTRUCTIONS_SHOWN = \"instructions_shown\",\n}\n@Injectable({\n providedIn: \"root\",\n})\nexport class AmplifyCacheService {\n constructor() {\n const config = {\n itemMaxSize: 3000, // 3000 bytes\n defaultTTL: 36000000, // one hour\n };\n Cache.configure(config);\n // this.getAllKeys();\n }\n\n /**\n * Puts item in cache under a key\n * @param key : string. Key for lookup.\n * @param value : Iem to put (number, string, boolean, array or object)\n * @param expires : number. Time in future in milliseconds Date.getTime()\n * @param priority : number from 0 to 5. the cached item with the higher number will be expired first.\n */\n putInCache(\n key: string,\n value: any,\n expires: number = null,\n priority: number = 5,\n ) {\n const options = {\n priority,\n expires,\n };\n if (!expires) {\n delete options.expires;\n }\n Cache.setItem(key, value, options);\n }\n\n /**\n * Retrieves an item from the cache. It will return null if the item doesn’t exist or it has expired.\n * @param key string. Lookup key.\n * @returns any or null if nothing found.\n */\n getFromCache(key: string): any {\n return Cache.getItem(key);\n }\n\n /**\n * Removes item from cache.\n * @param key string. Key to remove.\n */\n removeFromCache(key: string) {\n Cache.removeItem(key);\n }\n\n /**\n * Removes all of the items in the cache.\n */\n clearCache() {\n Cache.clear();\n }\n\n /**\n * Returns all of the keys available in the cache.\n * @returns string[]\n */\n getAllKeys(): string[] | Promise<string[]> {\n return Cache.getAllKeys();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { NgbDate, NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';\n\n@Pipe({\n name: 'formatDateNumberToDigits'\n})\nexport class FormatDateNumberToDigitsPipe implements PipeTransform {\n\n constructor(\n public formatter: NgbDateParserFormatter,\n ){}\n\n transform(date: any): any {\n let [day, month, year] = this.formatter.format(date).split(\"/\")\n if (day) {\n const nDate = new Date(parseInt(year), parseInt(month)-1, parseInt(day))\n const result = nDate.toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n })\n return result;\n }\n return this.formatter.format(date) \n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport {\n NgbDate,\n NgbCalendar,\n NgbDateParserFormatter,\n} from '@ng-bootstrap/ng-bootstrap';\nimport { AmplifyCacheService } from '../../../services/amplify-cache.service';\nimport { FilterService } from '../../../services/filter.service';\n\n@Component({\n selector: 'lib-range-date-picker',\n templateUrl: './range-date-picker.component.html',\n styleUrls: ['./range-date-picker.component.scss'],\n})\nexport class RangeDatePickerComponent implements OnInit {\n hoveredDate: NgbDate | null = null;\n\n fromDate: NgbDate | null;\n\n toDate: NgbDate | null;\n\n @Input() cacheName: string | null;\n\n cache: { from: number; to: number } | null;\n\n isDateFilterApplied: boolean = false;\n\n dateChanged: boolean = false;\n\n constructor(\n private calendar: NgbCalendar,\n public formatter: NgbDateParserFormatter,\n private filterService: FilterService,\n private cacheService: AmplifyCacheService\n ) {\n // this.fromDate = calendar.getPrev(calendar.getToday(), \"d\", 30);\n // this.toDate = calendar.getToday();\n }\n\n ngOnInit(): void {\n if (this.cacheName) {\n this.cache = this.cacheService.getFromCache(this.cacheName);\n }\n if (this.cache) {\n this.isDateFilterApplied = true;\n let { from, to } = this.cache;\n this.toDate = this.getNgbDate(to);\n this.fromDate = this.getNgbDate(from);\n\n localStorage.setItem('startDate', from.toString());\n localStorage.setItem('endDate', to.toString());\n this.filterService.dateFilterUpdated([new Date(from), new Date(to)]);\n } else {\n const currentDate = new Date().getTime(); //get current timestamp\n const thirtyDaysAgoDate = currentDate - 30 * 24 * 60 * 60 * 1000; //substract 30 days in miliseconds from the current timestamp\n\n // add dates to localstorage for retool urlsParams\n localStorage.setItem('startDate', thirtyDaysAgoDate.toString());\n localStorage.setItem('endDate', currentDate.toString());\n\n // updates date range dates to last 30 days ranges from today\n this.fromDate = this.getNgbDate(thirtyDaysAgoDate);\n this.toDate = this.getNgbDate(currentDate);\n\n this.filterService.dateFilterUpdated([\n new Date(thirtyDaysAgoDate.toString()),\n new Date(currentDate.toString()),\n ]);\n }\n }\n\n getNgbDate(date: number): NgbDate {\n let dt = new Date(date);\n dt.setMinutes(dt.getMinutes() - dt.getTimezoneOffset()); // convert to UTC\n return new NgbDate(\n dt.getUTCFullYear(),\n dt.getUTCMonth() + 1,\n dt.getUTCDate()\n );\n }\n\n onDateSelection(date: NgbDate) {\n if (!this.fromDate && !this.toDate) {\n this.fromDate = date;\n } else if (\n this.fromDate &&\n !this.toDate &&\n date &&\n date.after(this.fromDate)\n ) {\n this.toDate = date;\n } else {\n this.toDate = null;\n this.fromDate = date;\n }\n this.isDateChanged();\n }\n\n isDateChanged() {\n if (this.fromDate && this.toDate) {\n if (this.cache) {\n this.dateChanged =\n !this.fromDate.equals(this.getNgbDate(this.cache.from)) ||\n !this.toDate.equals(this.getNgbDate(this.cache.to));\n }\n }\n }\n\n isHovered(date: NgbDate) {\n return (\n this.fromDate &&\n !this.toDate &&\n this.hoveredDate &&\n date.after(this.fromDate) &&\n date.before(this.hoveredDate)\n );\n }\n\n isInside(date: NgbDate) {\n return this.toDate && date.after(this.fromDate) && date.before(this.toDate);\n }\n\n isRange(date: NgbDate) {\n return (\n date.equals(this.fromDate) ||\n (this.toDate && date.equals(this.toDate)) ||\n this.isInside(date) ||\n this.isHovered(date)\n );\n }\n\n validateInput(currentValue: NgbDate | null, input: string): NgbDate | null {\n const parsed = this.formatter.parse(input);\n return parsed && this.calendar.isValid(NgbDate.from(parsed))\n ? NgbDate.from(parsed)\n : currentValue;\n }\n\n emitRange() {\n if (this.fromDate && this.toDate) {\n const from = new Date(\n this.fromDate.year,\n this.fromDate.month - 1,\n this.fromDate.day\n );\n const to = new Date(\n this.toDate.year,\n this.toDate.month - 1,\n this.toDate.day,\n 23,\n 59\n );\n this.cacheService.putInCache(this.cacheName, {\n from: from.getTime(),\n to: to.getTime(),\n });\n this.filterService.dateFilterUpdated([from, to]);\n this.isDateFilterApplied = true;\n this.dateChanged = false;\n }\n }\n\n onClearDates() {\n this.fromDate = null;\n this.toDate = null;\n this.isDateFilterApplied = false;\n this.cacheService.removeFromCache(this.cacheName);\n this.filterService.dateFilterUpdated(null);\n }\n\n onApply() {\n if (this.fromDate && this.toDate) {\n this.emitRange();\n }\n\n //transform ngbDate to date objet then put dates in timestamp in localStorage to share it with Retool\n if (this.fromDate) {\n const startDate = new Date(\n this.fromDate.year,\n this.fromDate.month - 1,\n this.fromDate.day\n );\n localStorage.setItem('startDate', startDate.getTime().toString());\n console.log('test setItem from : ' + startDate.getTime().toString());\n }\n if (this.toDate) {\n const endDate = new Date(\n this.toDate.year,\n this.toDate.month - 1,\n this.toDate.day\n );\n localStorage.setItem('endDate', endDate.getTime().toString());\n }\n }\n}\n","<form class=\"form-inline\">\r\n <div class=\"mb-3 hidden\">\r\n <div class=\"input-group\">\r\n <input name=\"datepicker\" class=\"form-control\" ngbDatepicker #datepicker=\"ngbDatepicker\"\r\n [autoClose]=\"'outside'\" (dateSelect)=\"onDateSelection($event)\" [displayMonths]=\"2\" [dayTemplate]=\"t\"\r\n outsideDays=\"hidden\" [startDate]=\"fromDate!\" 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 </div>\r\n </div>\r\n <div>\r\n <div class=\"input-group\">\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()\" type=\"button\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mb-3 ms-2\">\r\n <div class=\"input-group\">\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()\" type=\"button\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-outline-primary rounded-pill ms-3\" (click)=\"onApply()\"\r\n *ngIf=\"!isDateFilterApplied || dateChanged\">\r\n {{'Apply' | translate}}\r\n </button>\r\n <span class=\"appliedText ms-3\" *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 class=\"btn btn-outline-primary rounded-pill ms-3\" (click)=\"onClearDates()\">{{'Clear' |\r\n translate}}</button>\r\n</form>","import { Component, Input, OnInit } from '@angular/core';\nimport { ProfileService } from '../../../services/models/profile.service';\nimport { uploadFileToS3, getSignedImageUrlForProfile } from '../../../services/s3.service';\nimport { BaseUserService } from '../../../services/user.service';\nimport { ProfileEntity } from '../../../types.service';\nimport { Md5 } from \"ts-md5/dist/md5\";\nimport { Subscription } from 'rxjs';\n\nconst cache = {};\n@Component({\n selector: 'lib-avatar',\n template: `<img [src]=\"avatar\" />`,\n styleUrls: [\"./avatar.component.scss\"],\n})\nexport class AvatarComponent implements OnInit {\n\n @Input() size: number = 45;\n\n @Input() userID: string;\n\n currentUser: ProfileEntity;\n\n avatar;\n\n userSub: Subscription;\n\n constructor(\n private userService: BaseUserService,\n private profileService: ProfileService,\n ) {\n this.userSub = this.userService.isChanged.subscribe((connected) => {\n if (connected) {\n this.currentUser = this.userService.cu;\n this.setAvatar(this.currentUser);\n }\n });\n }\n\n async ngOnInit(): Promise<void> {\n if (this.userID) {\n const profile = await this.profileService.getProfile(this.userID);\n if (profile) {\n const user = new ProfileEntity(profile);\n this.setAvatar(user);\n }\n } else {\n this.currentUser = this.userService.cu;\n this.setAvatar(this.currentUser);\n }\n }\n\n ngOnDestroy() {\n if (this.userSub) {\n this.userSub.unsubscribe();\n }\n }\n\n async setAvatar(user: ProfileEntity) {\n const { id, avatar, email } = user;\n\n // If avatar is not cached, check first if we have an avatar URL to fetch\n // from S3. If not, retrieve it from libravatar.\n // TODO use in a Service to be able to change/upload freely.\n if (!cache.hasOwnProperty(id)) {\n if (!avatar && email) {\n const md5 = new Md5();\n const md5hash = md5.appendStr(email).end();\n const avatar = `https://seccdn.libravatar.org/avatar/${md5hash}?s=${this.size}&default=identicon`;\n const url = await fetch(avatar)\n .then((res) => res.blob())\n .then((blob) => {\n const file = new File([blob], \"avatar.jpeg\", {\n type: \"image/jpeg\",\n });\n return uploadFileToS3(\"avatars/\", file, id);\n });\n await this.profileService.updateProfile({ id, avatar: url });\n user.avatar = url;\n cache[id] = avatar;\n }\n if (avatar) {\n // TODO generating signed urls for avatar makes NO SENSE ($$$)\n // Sorry got to copypaste that, but really need to get rid of\n cache[id] = await getSignedImageUrlForProfile(user);\n }\n }\n this.avatar = cache[id];\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Capture } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class CaptureService {\n API: any; //AWS\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected\n }\n\n async getCapturesBySpace(spaceID: string): Promise<Capture[]> {\n return this.API.CapturesBySpace(spaceID).then((cap) => cap.items);\n }\n\n async getCapture(captureID: string): Promise<Capture> {\n return this.API.__proto__.GetCapture(captureID);\n }\n\n async deleteCapture(captureID: string): Promise<Capture> {\n return this.API.__proto__.DeleteCapture({id: captureID});\n }\n\n async updateCapture(capture: any): Promise<Capture> {\n return this.API.__proto__.UpdateCapture(capture);\n }\n\n async createCapture(capture: Capture): Promise<Capture> {\n return this.API.__proto__.CreateCapture(capture);\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Node } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class NodeService {\n API: any;\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async updateNode(input: any): Promise<Node> {\n return this.API.__proto__.UpdateNode(input);\n }\n\n async deleteNode(id: string): Promise<Node> {\n return this.API.__proto__.DeleteNode({ id });\n }\n\n async getNode(id: string): Promise<Node> {\n return this.API.__proto__.GetNode(id);\n }\n\n async createNode(input: Node): Promise<Node> {\n return this.API.__proto__.CreateNode(input);\n }\n}\n","import { getMetaForImage, wait } from \"../helpers.service\";\nimport { Navigation, Plan } from \"../types.service\";\n\nexport function getCoefficientsForImage(\n img: HTMLImageElement,\n rectangle: any,\n): { coeffX: number; coeffY: number } {\n let coeffY;\n let coeffX;\n const imgRatio = img.width / img.height;\n const rectRatio = rectangle.width / rectangle.height;\n // console.log(\"image\", img.width, img.height);\n // console.log(\"rectangle\", rectangle.width, rectangle.height);\n // console.log(imgRatio, rectRatio);\n if (imgRatio > rectRatio) {\n // img is fitted in rectangle by width\n coeffX = img.width / rectangle.width;\n const effectiveImageHeight = rectangle.width / imgRatio;\n coeffY = img.height / effectiveImageHeight;\n } else {\n coeffY = img.height / rectangle.height;\n const effectiveImageWidth = rectangle.height * imgRatio;\n coeffX = img.width / effectiveImageWidth;\n }\n // console.log(coeffX, coeffY);\n return { coeffX, coeffY };\n}\n\nexport function styleButton(button: HTMLButtonElement) {\n button.style.backgroundImage = `url(\"https://api.iconify.design/mdi:adjust.svg?color=green&height=17&width=17\")`;\n button.style.backgroundColor = \"transparent\";\n button.style.position = \"absolute\";\n button.style.border = \"none\";\n button.style.width = \"17px\";\n button.style.height = \"17px\";\n button.disabled = true;\n}\n\nexport const showScanPointsOnPlanInDiv = async (\n plan: Plan,\n divPlan: HTMLElement,\n navigations: Navigation[],\n): Promise<HTMLButtonElement[]> => {\n if (!divPlan || !plan.filepath) {\n return [];\n }\n const calibrage = JSON.parse(plan.calibration);\n\n const img = await getMetaForImage(plan.filepath);\n divPlan.style.backgroundImage = `url(${plan.filepath})`;\n divPlan.style.backgroundSize = \"contain\";\n divPlan.style.backgroundRepeat = \"no-repeat\";\n await wait(1500); // while image is loaded to div\n divPlan.innerHTML = \"\"; // remove all previous buttons if exist\n const rect = divPlan.getBoundingClientRect();\n const { coeffX, coeffY } = getCoefficientsForImage(img, rect);\n const buttons = [];\n await Promise.all(\n navigations.map(async (navigation) => {\n const element = document.createElement(\"button\");\n styleButton(element);\n element.id = navigation.matterportSweepID;\n if (calibrage.new) {\n // new procedure of calibrage\n // find position for a given plan\n const positionsOnPlan = navigation.positionOnPlan.map((entry) =>\n JSON.parse(entry),\n );\n const positionOnPlan = positionsOnPlan.find(\n (data) => data.planID === plan.id,\n );\n if (positionOnPlan) {\n const realWidth = img.width / coeffX;\n const realHeight = img.height / coeffY;\n element.style.top = `${\n (positionOnPlan.y * realHeight) / calibrage.imgHeight -\n 10\n }px`;\n element.style.left = `${\n (positionOnPlan.x * realWidth) / calibrage.imgWidth - 10\n }px`;\n }\n } else {\n const position = JSON.parse(navigation.position);\n const x = calibrage.offsetX + position.x * calibrage.x;\n const y = calibrage.offsetY + position.z * calibrage.y;\n element.style.top = `${y / coeffY - 10}px`;\n element.style.left = `${x / coeffX - 10}px`;\n }\n divPlan.append(element);\n buttons.push(element);\n }),\n );\n return buttons;\n};\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Measurement, Feature, Comment, IUpdate, CommentType } from \"../../types.service\";\nimport { uploadFileToS3 } from \"../s3.service\";\nimport { PoiService } from \"./poi.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class CommentService {\n\n API: any; // AWS\n constructor(@Inject('currentAPIService') apiInjected: any,\n private poiService: PoiService) {\n this.API = apiInjected;\n }\n\n getCommentsFromTicketID(ticketID: string): Promise<Comment[]> {\n return this.API.__proto__.CommentsByTicket(ticketID).then((res) => res.items);\n }\n\n async getCommentsBySpaceID(spaceID: string): Promise<Comment[]> {\n return this.API.__proto__.CommentsBySpace(spaceID).then(\n (comments) => comments.items,\n );\n }\n\n async readCommentAsMeasurement(commentID: string): Promise<Measurement> {\n const comment = await this.getComment(commentID);\n if (comment.ticketID && !comment.ticket) {\n comment.ticket = await this.API.__proto__.GetTicket(comment.ticketID);\n }\n const values = comment.dimensions;\n const numberPoints = values.length + 1;\n const poi = await this.poiService.getPoiByElementId(commentID);\n const measure = {\n id: comment.id,\n comment,\n poi,\n numberPoints,\n values,\n } as Measurement;\n return measure;\n }\n\n /**\n * CRUD\n *\n */\n async getComment(commentID: string): Promise<Comment> {\n return this.API.__proto__.GetComment(commentID);\n }\n\n async deleteComment(commentID: string): Promise<Comment> {\n return this.API.__proto__.DeleteComment({ id: commentID });\n }\n\n async createComment(comment: Comment): Promise<Comment> {\n return this.API.__proto__.CreateComment(comment);\n }\n\n async updateComment(input: any): Promise<Comment> {\n return this.API.__proto__.UpdateComment(input);\n }\n\n async uploadFileForComment(file: File, id: string = null): Promise<string> {\n return uploadFileToS3(\"comments/\", file, id);\n }\n\n /** Create a new comment with an existing Annexe */\n async createCommentWithFileURL(\n comment: Comment,\n url: string,\n ): Promise<Comment> {\n const newComment = comment;\n newComment.annexe = url;\n return this.createComment(newComment);\n }\n\n async createCommentWithFile(\n comment: Comment,\n file: File,\n ): Promise<Comment> {\n let createdComment = await this.createComment(comment);\n if (file) {\n const url = await this.uploadFileForComment(\n file,\n createdComment.id,\n );\n createdComment = await this.updateComment({\n id: createdComment.id,\n annexe: url,\n });\n }\n return createdComment;\n }\n\n\n\n async setCommentAsCoverForFeature(\n commentID: string,\n feature: Feature,\n ): Promise<Comment> {\n const updatedComment = await this.updateComment({\n id: commentID,\n isCoverImage: true,\n });\n await Promise.all(\n feature.comments.items.map(async (image) => {\n if (\n image.type === CommentType.IMAGE &&\n image.id !== commentID\n ) {\n await this.updateComment({\n id: image.id,\n isCoverImage: false,\n });\n }\n }),\n );\n return updatedComment;\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport { Injectable, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\nimport { Subject } from \"rxjs\";\nimport { MediaContent } from \"../types.service\";\nimport { CommentService } from \"./models/comment.service\";\nimport { FeatureService } from \"./models/feature.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class ContentService {\n modalReference;\n\n currentAudio: HTMLAudioElement;\n\n closeModal = new Subject<boolean>();\n\n nextSlide = new Subject<string>();\n\n constructor(public modalService: NgbModal, private router: Router, private commentService: CommentService) {}\n\n presentVideoModal(video: MediaContent, videoComponent: any, modalDialogClass: string) {\n this.modalReference = this.modalService.open(videoComponent, {\n modalDialogClass: modalDialogClass,\n });\n this.modalReference.componentInstance.video = video;\n this.modalReference.dismissed.subscribe(() => {\n this.emitCloseModal();\n });\n this.modalReference.closed.subscribe(() => {\n this.emitCloseModal();\n });\n }\n\n async presentAudioModal(audioCommentID: string, audioComponent: any, modalDialogClass: string) {\n const audioComment = await this.commentService.getComment(audioCommentID);\n const audioMediaContent = {\n path: audioComment.annexe,\n title: audioComment.title,\n description: audioComment.description,\n } as MediaContent;\n this.modalReference = this.modalService.open(audioComponent, {\n modalDialogClass: modalDialogClass,\n });\n this.modalReference.componentInstance.audio = audioMediaContent;\n this.modalReference.dismissed.subscribe(() => {\n this.emitCloseModal(); \n });\n this.modalReference.closed.subscribe(() => {\n this.emitCloseModal();\n });\n }\n\n presentImageCarouselModal(featureID: string, carouselComponent: any, modalDialogClass: string, \n fromTag = true, selectedImageIndex='0') {\n this.modalReference = this.modalService.open(\n carouselComponent,\n {\n modalDialogClass: modalDialogClass,\n },\n );\n this.modalReference.componentInstance.featureID = featureID;\n this.modalReference.componentInstance.fromTag = fromTag;\n this.modalReference.componentInstance.selectedImageIndex = selectedImageIndex;\n this.modalReference.dismissed.subscribe(() => {\n this.emitCloseModal();\n });\n this.modalReference.closed.subscribe(() => {\n this.emitCloseModal();\n });\n this.modalReference.componentInstance.slideChanged.subscribe(\n (slide) => {\n this.nextSlide.next(slide.current);\n },\n );\n }\n\n presentPdfModal(url: string, pdfComponent: any, modalDialogClass: string,) {\n this.modalReference = this.modalService.open(pdfComponent, {\n modalDialogClass: modalDialogClass,\n });\n this.modalReference.componentInstance.url = url;\n this.modalReference.dismissed.subscribe(() => {\n this.emitCloseModal();\n });\n this.modalReference.closed.subscribe(() => {\n this.emitCloseModal();\n });\n }\n\n presentMuseumImageCarouselModal(\n carouselComponent: any,\n modalDialogClass: string,\n fromTag = true,\n selectedImageIndex = \"0\",\n images: any[] = null,\n commentImageID: string = null,\n ) {\n this.modalReference = this.modalService.open(carouselComponent, {\n modalDialogClass,\n });\n this.modalReference.componentInstance.fromTag = fromTag;\n this.modalReference.componentInstance.selectedImageIndex =\n selectedImageIndex;\n this.modalReference.componentInstance.images = images;\n this.modalReference.componentInstance.commentID = commentImageID;\n this.modalReference.dismissed.subscribe(() => {\n this.emitCloseModal();\n });\n this.modalReference.closed.subscribe(() => {\n this.emitCloseModal();\n });\n this.modalReference.componentInstance.slideChanged.subscribe(\n (slide) => {\n this.nextSlide.next(slide.current);\n },\n );\n }\n\n toogleAudioElement(url: string) {\n if (!this.currentAudio || this.currentAudio.src !== url) {\n this.currentAudio = new Audio(url);\n }\n if (this.currentAudio.duration > 0 && !this.currentAudio.paused) {\n // it is playing, we stop it\n this.currentAudio.pause();\n } else {\n this.currentAudio.play();\n }\n }\n\n showFullscreenCarouselForFeature(featureID: string, fromTag = false) {\n const url = this.router.serializeUrl(\n this.router.createUrlTree([`/fullscreen/${featureID}`], {\n queryParams: { fromTag },\n }),\n );\n window.open(url, \"_blank\");\n }\n\n emitCloseModal() {\n this.modalReference = null;\n this.closeModal.next(true);\n }\n\n forceCloseCurrentModal() {\n if (this.modalReference) {\n this.modalReference.dismiss(\"forced\");\n }\n }\n\n moveToSlide(slide: string) {\n if (this.modalReference) {\n this.modalReference.componentInstance.navigateToSlide(slide);\n }\n }\n}\n","/* eslint-disable func-names */\n/* eslint-disable class-methods-use-this */\nimport { Inject, Injectable } from '@angular/core';\nimport { getDocument, GlobalWorkerOptions } from 'pdfjs-dist';\nimport panzoom from 'panzoom';\nimport videojs from \"video.js\";\nimport { Subject } from 'rxjs';\nimport { Router } from '@angular/router';\nimport {\n CommentType,\n FeatureType,\n Plan,\n PoiType,\n Zone,\n} from '../../types.service';\nimport { BaseVisibilityService } from '../baseVisibility.service';\nimport { MatterportService } from '../matterport.service';\nimport { ViewerService } from '../viewer.service';\nimport { ZoneService } from './zone.service';\nimport { NavigationService } from './navigation.service';\nimport { getSignedFile, uploadFileToS3 } from '../s3.service';\nimport { BaseTagService } from '../tag.service';\nimport { Config } from '../../config';\nimport { getCoefficientsForImage } from '../zone-drawer.service';\nimport { getMetaForImage } from '../../helpers.service';\nimport { ContentService } from '../content.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PlanService {\n chosenPlan: Plan;\n\n currentPlan: Plan;\n\n currentSweep: string;\n\n planFileCache: File;\n\n planCanvas: any;\n\n planDiv: HTMLElement | SVGElement;\n planDivContent: HTMLElement;\n\n panzoom: any;\n\n isReady: boolean = false;\n\n userPositionBtn: HTMLButtonElement;\n\n coeffPlanX: number;\n\n coeffPlanY: number;\n\n calibrationPlan: any;\n\n detailTagDiv: HTMLElement;\n\n detailTagDivIsHover = false;\n\n btnTagIsHover = false;\n\n resizePlanSubscription = new Subject<boolean>();\n\n imgPlan: HTMLImageElement;\n\n lastTouchTime = 0;\n\n delayDblTouch = 500;\n\n lastRotation: number = 0;\n\n htmlContentToInject: {\n title: string;\n content: string;\n elementID: string;\n y: number;\n x: number;\n tagIcon: string;\n url: string;\n }[] = [];\n\n cache: {\n equipIDs: string[];\n ticketIDs: string[];\n measurementsIDs: string[];\n featureIDs: string[];\n zoneID: string;\n plan: Plan;\n htmlContent: {\n title: string;\n content: string;\n elementID: string;\n y: number;\n x: number;\n tagIcon: string;\n url: string;\n }[];\n };\n\n focusMouseTagDiv: boolean = false;\n\n API: any; //AWS\n\n constructor(\n @Inject('currentAPIService') apiInjected: any,\n private zoneService: ZoneService,\n private navigationService: NavigationService,\n // tagService: BaseTagService,\n private viewerService: ViewerService,\n private router: Router,\n private matterportService: MatterportService,\n // private config: AppConfig,\n private visibilityService: BaseVisibilityService,\n private contentService: ContentService\n ) {\n this.API = apiInjected;\n this.matterportService.currentCameraPose.subscribe((pose) => {\n this.updateRotation(pose.rotation.y);\n });\n }\n\n async createPlan(planInput: Plan): Promise<Plan> {\n return this.API.__proto__.CreatePlan(planInput);\n }\n\n async deletePlan(plan: Plan): Promise<Plan> {\n // await deleteFromS3(plan.annexe);\n return this.API.__proto__.DeletePlan({ id: plan.id });\n }\n\n async getPlansForSpace(spaceID: string): Promise<Plan[]> {\n return this.API.__proto__\n .PlansBySpace(spaceID)\n .then((response) => response.items);\n }\n\n async getPlansForZone(zoneID: string): Promise<Plan[]> {\n return this.API.__proto__\n .PlansByZone(zoneID)\n .then((response) => response.items);\n }\n\n async getSingedPlansForSpace(spaceID: string): Promise<Plan[]> {\n const plansFromDB = await this.getPlansForSpace(spaceID);\n // console.log(plansFromDB);\n const plans = [];\n if (plansFromDB.length > 0) {\n await Promise.all(\n plansFromDB.map(async (plan) => {\n const planObject = { ...plan } as Plan;\n // annexe looks like visits/modelID/plans/file.extension\n const signed = await getSignedFile(plan.annexe);\n if (signed) {\n planObject.filepath = signed;\n }\n if (plan.annexe) {\n const [, modelID, , filenameWithExtension] = plan.annexe.split('/');\n const [, extention] = filenameWithExtension.split('.');\n planObject.model3d = modelID;\n planObject.extension = extention;\n plans.push(planObject);\n } else {\n console.log(`Error plan have not annexe => `);\n console.log(plan.id);\n }\n })\n );\n }\n return plans;\n }\n\n async getPlansWithZonesForSpace(spaceID: string): Promise<Plan[]> {\n const plans = await this.getPlansForSpace(spaceID);\n const plansZones = plans.filter((plan) => plan.zone && plan.calibration);\n return plansZones;\n }\n\n setChosenPlan(chosenPlan: Plan) {\n this.chosenPlan = chosenPlan;\n }\n\n getChosenPlan(): Plan {\n return this.chosenPlan;\n }\n\n setPlanFileCache(planFileCache: File): Promise<void> {\n this.planFileCache = planFileCache;\n return Promise.resolve();\n }\n\n getPlanFileCache(): File {\n return this.planFileCache;\n }\n\n async createPlanWithAnnexe(plan: Plan, file: File): Promise<Plan> {\n const createdPlan = await this.createPlan(plan);\n const model3D = await this.zoneService.getModel3DForZone(plan.zoneID);\n const url = await uploadFileToS3(\n `visits/${model3D}/plans/`,\n file,\n createdPlan.id\n );\n if (url) {\n return this.API.__proto__.UpdatePlan({ id: createdPlan.id, annexe: url });\n }\n return createdPlan;\n }\n\n async updatePlan(plan: any): Promise<Plan> {\n return this.API.__proto__.UpdatePlan(plan);\n }\n\n async updatePlanFile(): Promise<string> {\n if (this.chosenPlan && this.planFileCache) {\n const model3D = await this.zoneService.getModel3DForZone(\n this.chosenPlan.zoneID\n );\n return uploadFileToS3(\n `visits/${model3D}/plans/`,\n this.planFileCache,\n this.chosenPlan.id\n );\n }\n return Promise.reject();\n }\n\n async setAllPlansForZoneNotCurrent(zoneID: string, currentPlanID: string) {\n const plans = await this.API.__proto__.ListPlans({\n zoneID: { eq: zoneID },\n });\n await Promise.all(\n plans.items.map(async (plan) => {\n if (plan.isCurrentForZone && plan.id !== currentPlanID) {\n await this.updatePlan({\n id: plan.id,\n isCurrentForZone: false,\n });\n }\n })\n );\n }\n\n async configurePlan(\n currentPlan: Plan,\n divId: string = 'planDivPane',\n divContentId: string = 'planDivPaneContent'\n ): Promise<boolean> {\n this.isReady = false;\n if (!this.detailTagDiv) {\n this.detailTagDiv = document.querySelector(\n `#detailTagDiv`\n ) as HTMLElement;\n }\n this.detailTagDiv.addEventListener('mouseenter', () => {\n this.focusMouseTagDiv = true;\n });\n this.detailTagDiv.addEventListener('mouseleave', () => {\n this.btnTagIsHover = false;\n this.detailTagDiv.style.display = 'none';\n this.focusMouseTagDiv = false;\n });\n\n this.calibrationPlan = JSON.parse(currentPlan.calibration);\n this.currentPlan = currentPlan;\n this.planDiv = document.querySelector(`#${divId}`) as HTMLElement;\n this.planDivContent = document.querySelector(\n `#${divContentId}`\n ) as HTMLElement;\n\n this.planDiv.addEventListener('touchstart', this.handleTouch.bind(this));\n this.planDiv.addEventListener('dblclick', this.onDblClickPlan.bind(this));\n\n if (!currentPlan.annexe.includes('pdf')) {\n this.imgPlan = await getMetaForImage(currentPlan.filepath);\n //Rect use offsetWidth : height, not actual boundingClientRect because will be modified by the zoom.\n const rect = {\n width: this.planDivContent.offsetWidth,\n height: this.planDivContent.offsetHeight,\n };\n const { coeffX, coeffY } = getCoefficientsForImage(this.imgPlan, rect);\n this.coeffPlanX = coeffX;\n this.coeffPlanY = coeffY;\n\n this.planDivContent.style.backgroundImage = `url(${currentPlan.filepath})`;\n } else {\n await this.drawPdf(currentPlan);\n }\n this.planDivContent.style.backgroundSize = 'contain';\n this.planDivContent.style.backgroundRepeat = 'no-repeat';\n\n this.panzoom = panzoom(this.planDiv, {\n bounds: true,\n boundsPadding: 0,\n maxZoom: 4,\n zoomDoubleClickSpeed: 1, //disables double click zoom\n //initialZoom: 4\n });\n this.panzoom.zoomAbs(0, 0, 4);\n setTimeout(() => {\n this.updateRotation(this.lastRotation);\n }, 200);\n return true;\n }\n\n clearPlanImage() {\n if (this.planDivContent) {\n this.planDivContent.style.backgroundImage = null;\n }\n }\n\n async drawPdf(currentPlan: Plan): Promise<void> {\n return new Promise(async (resolve) => {\n const canvas = document.createElement('canvas') as HTMLCanvasElement;\n\n const context = canvas.getContext('2d') as CanvasRenderingContext2D;\n const pdfjsWorker = await import('pdfjs-dist/build/pdf.worker.entry');\n\n GlobalWorkerOptions.workerSrc = pdfjsWorker;\n const pdf = await getDocument(currentPlan.filepath).promise;\n const page = await pdf.getPage(1);\n\n const viewPortParameters = { scale: 1.5 };\n const viewport = page.getViewport(viewPortParameters);\n\n canvas.height = viewport.height;\n canvas.width = viewport.width;\n const renderContext = {\n canvasContext: context,\n viewport,\n };\n const renderTask = page.render(renderContext).promise;\n renderTask.then(async () => {\n const imgUrl = canvas.toDataURL('image/png');\n this.imgPlan = await getMetaForImage(imgUrl);\n const rect = {\n width: this.planDivContent.offsetWidth,\n height: this.planDivContent.offsetHeight,\n };\n const { coeffX, coeffY } = getCoefficientsForImage(this.imgPlan, rect);\n this.coeffPlanX = coeffX;\n this.coeffPlanY = coeffY;\n this.planDiv.style.backgroundImage = `url(${imgUrl})`;\n resolve();\n });\n });\n }\n\n async drawElement(\n element: any,\n tagType: PoiType,\n currentPlan: Plan,\n tagService: BaseTagService,\n config: Config,\n sizeButton: number = 10\n ) {\n const [poi] = element.pois.items;\n if (poi && poi.coordinate && currentPlan) {\n const { zone } = currentPlan;\n if (zone) {\n const position = JSON.parse(poi.coordinate);\n const button = document.createElement('button');\n let elementTitle: string;\n const url = tagService.getUrlForSeeDetails(element, tagType);\n let tagIconImage: string;\n switch (tagType) {\n case PoiType.TICKET: {\n tagIconImage = config.my_config.icon_ticket;\n break;\n }\n case PoiType.EQUIPMENT: {\n tagIconImage = config.my_config.icon_equipment;\n break;\n }\n case PoiType.MEASURE:\n tagIconImage = config.my_config.icon_measure;\n break;\n case PoiType.OBJECT3D:\n tagIconImage = config.my_config.icon_object3d;\n break;\n case PoiType.DATA:\n tagIconImage = config.my_config.icon_data;\n break;\n case PoiType.DESK:\n tagIconImage = config.my_config.icon_data;\n break;\n default:\n return;\n }\n if (poi.tagIcon) {\n const tagIcon = JSON.parse(poi.tagIcon);\n if (\n tagType === PoiType.DATA &&\n element.type === FeatureType.INDICATOR_TEMP\n ) {\n tagIcon.src = tagService.getIconTagImageForFeature(element, poi);\n }\n // poi.tagIcon = tagIcon;\n\n if (tagIcon.src) {\n const source = await getSignedFile(tagIcon.src);\n if (source) {\n tagIconImage = source;\n }\n }\n }\n this.styleButton(button, tagIconImage, sizeButton);\n button.id = element.id;\n this.planDivContent.append(button);\n let x: number;\n let y: number;\n if (this.calibrationPlan.new) {\n // alert(\"new calibration plan: positioning not ready yet\");\n const position2D =\n this.transformPosition3DForNewCalibration(position);\n x = position2D.x;\n y = position2D.y;\n button.style.top = `${y / position2D.coeffY - 5}px`;\n button.style.left = `${x / position2D.coeffX - 5}px`;\n } else {\n // to remove when all calibrations are new\n x =\n this.calibrationPlan.offsetX + position.x * this.calibrationPlan.x;\n y =\n this.calibrationPlan.offsetY + position.z * this.calibrationPlan.y;\n button.style.top = `${y / this.coeffPlanY - 5}px`;\n button.style.left = `${x / this.coeffPlanX - 5}px`;\n }\n\n const html = await tagService.getHtmlToInject(tagType, element);\n if (html != '') {\n this.htmlContentToInject.push({\n elementID: element.id,\n title: '',\n content: html,\n y,\n x,\n tagIcon: tagIconImage,\n url,\n });\n } else {\n // when we don't have html => case of EMBED Comment type\n const commentEmbed = element.comments?.items.find(\n (com) => com.type === CommentType.EMBED && com.shownInTag\n );\n if (commentEmbed) {\n this.htmlContentToInject.push({\n elementID: element.id,\n title: element.title,\n content: `<iframe src=${commentEmbed.externalLink} height=\"200px\" width=\"100%\"></iframe>`,\n y,\n x,\n tagIcon: tagIconImage,\n url,\n });\n }\n }\n\n this.addListenersToButton(button, url, tagService, element);\n this.updateRotation(this.lastRotation);\n }\n }\n }\n\n async drawUserPosition(currentSweep = this.currentSweep, sizeButton: number = 10) {\n this.currentSweep = currentSweep;\n if (this.calibrationPlan && currentSweep) {\n const position =\n this.matterportService.getCurrentCameraPosition()?.position;\n if (position) {\n if (!this.userPositionBtn) {\n this.userPositionBtn = document.createElement('button');\n this.userPositionBtn.id = 'currentPosition';\n this.planDivContent.append(this.userPositionBtn);\n this.userPositionBtn.title = 'You are here';\n this.styleButton(\n this.userPositionBtn,\n 'https://api.iconify.design/bx:bxs-user-circle.svg?color=green&height=17&width=17',\n sizeButton\n );\n }\n let x: number;\n let y: number;\n if (this.calibrationPlan.new) {\n const position2D =\n this.transformPosition3DForNewCalibration(position);\n x = position2D.x / position2D.coeffX - 5;\n y = position2D.y / position2D.coeffY - 5;\n } else {\n x =\n (this.calibrationPlan.offsetX +\n position.x * this.calibrationPlan.x) /\n this.coeffPlanX;\n y =\n (this.calibrationPlan.offsetY +\n position.z * this.calibrationPlan.y) /\n this.coeffPlanY;\n }\n this.userPositionBtn.style.top = `${y}px`;\n this.userPositionBtn.style.left = `${x}px`;\n this.moveOnPoint({ x: x + 5, y: y + 5 });\n }\n }\n }\n\n /**\n * Center the view of the plan on coordinates\n * @param coordinate Coordinate on the plan\n */\n moveOnPoint(coordinate) {\n if (this.planDiv) {\n const scale = this.panzoom.getTransform().scale;\n const moveX = this.planDiv.clientWidth / 2 - coordinate.x * scale;\n const moveY = this.planDiv.clientHeight / 2 - coordinate.y * scale;\n this.panzoom.moveTo(moveX, moveY);\n this.planDivContent.style.transformOrigin = `${coordinate.x}px ${coordinate.y}px`;\n }\n }\n\n /**\n * Apply a rotation to the plan\n * Buttons will remain in the correct rotation\n * @param rotation\n */\n updateRotation(rotation) {\n this.lastRotation = rotation;\n if (this.planDivContent) {\n this.planDivContent.style.transform = `rotate(${rotation}deg)`;\n const buttons = this.planDivContent.querySelectorAll('button');\n let rotationRegex = /(rotate\\(-?\\d*\\.?\\d+deg\\))/g;\n // eslint-disable-next-line unicorn/no-array-for-each\n buttons.forEach((button) => {\n button.style.transform = button.style.transform.replace(rotationRegex, \"\") + ` rotate(${-rotation}deg)`;\n });\n }\n }\n\n removeCurrentPosition() {\n const button = document.querySelector('#currentPosition');\n if (button) {\n button.remove();\n this.userPositionBtn = null;\n }\n }\n\n styleButton(button: HTMLButtonElement, url: string, sizeButton: number = 10) {\n button.style.backgroundImage = `url(${url})`;\n button.style.backgroundColor = 'transparent';\n button.style.position = 'absolute';\n button.style.border = 'none';\n button.style.width = `10px`;\n button.style.height = `10px`;\n button.disabled = false;\n button.style.backgroundSize = 'contain';\n button.style.backgroundRepeat = 'no-repeat';\n button.style.transform = `scale(${sizeButton/10})`\n }\n\n addListenersToButton(\n button: HTMLButtonElement,\n url: string,\n tagService: BaseTagService = null,\n element: any = null\n ) {\n let videoJsPlayer;\n button.addEventListener('mouseenter', async (event) => {\n const contentForButton = this.htmlContentToInject.find(\n (object) => object.elementID === button.id\n );\n this.btnTagIsHover = true;\n const title = document.querySelector(`#titleTagDiv`) as HTMLElement;\n if (contentForButton.title) {\n title.style.display = 'inline';\n title.innerHTML = contentForButton.title;\n } else {\n title.style.display = 'none';\n }\n\n const content = document.querySelector(`#htmlTagDiv`) as HTMLElement;\n this.detailTagDiv.style.top = `${event.clientY + 10}px`;\n this.detailTagDiv.style.left = `${event.clientX < 120 ? 0 : event.clientX - 120\n }px`;\n this.detailTagDiv.style.display = 'block';\n // console.log(contentForButton.content);\n content.innerHTML = contentForButton.content;\n const detailButton = content.querySelector('#detailBtn');\n if (detailButton) {\n detailButton.addEventListener('click', () => {\n this.visibilityService.detailShowing.next(true);\n this.router.navigate([url]);\n });\n }\n\n // handle image carousel fullscreen button\n const imageFullscreenBtn = content.querySelector('#image-footer');\n if (imageFullscreenBtn) {\n imageFullscreenBtn.addEventListener('click', function () {\n if (tagService) {\n tagService.onActionImageClick(contentForButton.elementID);\n }\n });\n }\n\n // handle booking fullscreen button\n const bookingButton = content.querySelector('#bookingBtn');\n if (bookingButton) {\n bookingButton.addEventListener('click', () => {\n this.visibilityService.detailShowing.next(true);\n this.router.navigate([url]);\n });\n }\n\n // handle document pdf fullscreen button\n const docFullscreenBtn = content.querySelector('#doc-footer');\n if (docFullscreenBtn && element) {\n const documentUrl = tagService.getAnnexeForCommentTypeInFeature(\n element,\n CommentType.DOCUMENT\n );\n docFullscreenBtn.addEventListener('click', function () {\n if (tagService) {\n tagService.onActionDocClick(documentUrl);\n }\n });\n }\n\n // handle video fullscreen button\n const videoFullscreenBtn = content.querySelector('#btn-video-fullscreen');\n if (videoFullscreenBtn && element) {\n const videoUrl = tagService.getAnnexeForCommentTypeInFeature(\n element,\n CommentType.VIDEO\n );\n videoFullscreenBtn.addEventListener('click', function () {\n if (tagService) {\n tagService.onActionVideoClick(videoUrl);\n }\n });\n }\n\n // handle Youtube video fullscreen button\n const youtubeFullScreen = content.querySelector(\n '#btn-video-fullscreen-youtube'\n );\n if (youtubeFullScreen && element) {\n const youtubeUrl = tagService.getAnnexeForCommentTypeInFeature(\n element,\n CommentType.YOUTUBE\n );\n youtubeFullScreen.addEventListener('click', function () {\n if (tagService) {\n tagService.onActionYoutubeClick(youtubeUrl);\n }\n });\n }\n\n // handle mute video button\n const btnMute = document.getElementById('btn-mute');\n const imgOn = document.getElementById('sound-on');\n const imgOff = document.getElementById('sound-off');\n const playerElement = document.getElementById(\"mus-video-tag\");\n\n if (playerElement) {\n videoJsPlayer = videojs(\"mus-video-tag\");\n if (btnMute && videoJsPlayer) {\n btnMute.addEventListener('click', function () {\n if (videoJsPlayer.muted()) {\n videoJsPlayer.muted(false);\n if (imgOn && imgOff) {\n imgOn.style.display = 'inline-block';\n imgOff.style.display = 'none';\n }\n } else {\n videoJsPlayer.muted(true);\n if (imgOn && imgOff) {\n imgOn.style.display = 'none';\n imgOff.style.display = 'inline-block';\n }\n }\n });\n }\n }\n\n\n // handle audio player buttons\n const playerButton = document.querySelector('.audio-play-button');\n const audio = document.getElementById('audio-tag') as HTMLMediaElement;\n const timeline = document.querySelector(\n '.timeline-tag'\n ) as HTMLInputElement;\n // const timelineValue = document.querySelector('.timeline-tag').value;\n const soundButton = document.querySelector('.audio-sound-btn');\n const playAudio = document.getElementById('play');\n const pauseAudio = document.getElementById('pause');\n const imgSoundOn = document.getElementById('audio-sound-on');\n const imgSoundOff = document.getElementById('audio-sound-off');\n const audioModal = document.getElementById('btn-audio-modal');\n if (audio && playerButton && timeline) {\n playerButton.addEventListener('click', function () {\n if (audio.paused) {\n audio.play();\n pauseAudio.style.display = 'inline-block';\n playAudio.style.display = 'none';\n } else {\n audio.pause();\n pauseAudio.style.display = 'none';\n playAudio.style.display = 'inline-block';\n }\n });\n soundButton.addEventListener('click', function () {\n if (audio.muted) {\n audio.muted = false;\n imgSoundOn.style.display = 'inline-block';\n imgSoundOff.style.display = 'none';\n } else {\n audio.muted = true;\n imgSoundOn.style.display = 'none';\n imgSoundOff.style.display = 'inline-block';\n }\n });\n function changeTimelinePosition() {\n if (audio.duration) {\n const percentagePosition =\n (100 * audio.currentTime) / audio.duration;\n const percentagePositionString = percentagePosition + '%';\n timeline.style.backgroundSize = percentagePositionString + ' 100%';\n timeline.value = percentagePosition.toString();\n }\n }\n audio.ontimeupdate = changeTimelinePosition;\n function changeSeek() {\n const time = (parseInt(timeline.value) * audio.duration) / 100;\n audio.currentTime = time;\n }\n timeline.addEventListener('change', changeSeek);\n timeline.addEventListener('input', changeSeek);\n // handle audio click\n if (audioModal && element) {\n const audioComment = element.comments?.items.find(\n (com) => com.type === CommentType.AUDIO && com.shownInTag\n );\n const audioCommentID = audioComment ? audioComment.id : '';\n audioModal.addEventListener('click', function () {\n if (tagService) {\n tagService.onActionAudioClick(audioCommentID);\n }\n });\n }\n }\n });\n\n button.addEventListener('mouseleave', async () => {\n // we wait if user hovers on to div of the tag (changes this.focusMouseTagDiv)\n this.btnTagIsHover = false;\n setTimeout(() => {\n if (!this.focusMouseTagDiv && !this.btnTagIsHover) {\n this.detailTagDiv.style.display = 'none';\n if (videoJsPlayer) {\n videoJsPlayer.dispose();\n }\n }\n }, 100);\n });\n button.addEventListener('click', async () => {\n this.detailTagDiv.style.display = 'none';\n if (videoJsPlayer) {\n videoJsPlayer.dispose();\n }\n await this.viewerService.action_move_to_tag(button.id);\n this.visibilityService.detailShowing.next(true);\n this.router.navigate([url]);\n });\n }\n\n clearBtn(idList: any[]) {\n for (const id of idList) {\n const button = document.getElementById(id);\n if (button) {\n button.remove();\n }\n }\n }\n\n clearAllButtons() {\n if (this.planDivContent) {\n const buttons = this.planDivContent.querySelectorAll('button');\n // eslint-disable-next-line unicorn/no-array-for-each\n buttons.forEach(function (currentValue) {\n currentValue.remove();\n });\n this.userPositionBtn = null;\n }\n }\n\n updateAllButtonsStyle(properties: Array<string>, values: Array<string>) {\n if (this.planDivContent) {\n const buttons = this.planDivContent.querySelectorAll('button');\n // eslint-disable-next-line unicorn/no-array-for-each\n buttons.forEach(function (currentValue) {\n properties.forEach((property, i) => {\n if (property === \"transform\") {\n //For saving the rotation and adding scale\n let rotationRegex = /(rotate\\(-?\\d*\\.?\\d+deg\\))/g;\n let rotationMatch = currentValue.style[property].match(rotationRegex);\n if (rotationMatch.length > 0) {\n currentValue.style[property] = `${values[i]} ${rotationMatch[0]}`;\n }\n } else {\n currentValue.style[property] = values[i];\n }\n\n });\n });\n }\n }\n\n onPlanRemove() {\n this.userPositionBtn = null;\n this.calibrationPlan = null;\n this.currentSweep = null;\n this.detailTagDiv = null;\n }\n\n async resizePlan(isRemoving: boolean) {\n this.resizePlanSubscription.next(false);\n if (isRemoving) {\n return;\n }\n console.log('in resizePlan');\n if (this.planDiv && this.currentSweep) {\n this.panzoom = panzoom(this.planDiv, {\n bounds: true,\n boundsPadding: 0,\n maxZoom: 4,\n });\n setTimeout(() => {\n const rect = {\n width: this.planDivContent.offsetWidth,\n height: this.planDivContent.offsetHeight,\n };\n const { coeffX, coeffY } = getCoefficientsForImage(this.imgPlan, rect);\n this.coeffPlanX = coeffX;\n this.coeffPlanY = coeffY;\n this.panzoom.zoomAbs(0, 0, 4);\n this.resizePlanSubscription.next(true);\n }, 200);\n }\n }\n\n handleTouch(event) {\n const now = Date.now();\n if (now - this.lastTouchTime < this.delayDblTouch) {\n this.lastTouchTime = 0;\n // this.onDblClickPlan(event);\n /** Simulate a dblclick for phone (we don't get offsetX/Y on touchevent) */\n const newEvent = document.createEvent('MouseEvents');\n const touch = event.changedTouches[0];\n newEvent.initMouseEvent(\n 'dblclick',\n true,\n true,\n event.target.ownerDocument.defaultView,\n 0,\n touch.screenX,\n touch.screenY,\n touch.clientX,\n touch.clientY,\n event.ctrlKey,\n event.altKey,\n event.shirtKey,\n event.metaKey,\n 0,\n null\n );\n event.target.dispatchEvent(newEvent);\n } else {\n this.lastTouchTime = now;\n }\n }\n\n async onDblClickPlan(event) {\n event.preventDefault();\n const clickX = event.offsetX;\n const clickY = event.offsetY;\n const zonePlan = this.currentPlan.zone;\n if (zonePlan) {\n const navigations: any =\n await this.navigationService.getNavigationsForZone(zonePlan);\n if (navigations.length > 0) {\n await Promise.all(\n navigations.map(async (nav) => {\n const position = JSON.parse(nav.position);\n let x: number;\n let y: number;\n if (this.calibrationPlan.new) {\n const position2D =\n this.transformPosition3DForNewCalibration(position);\n x = position2D.x / position2D.coeffX;\n y = position2D.y / position2D.coeffY;\n } else {\n x =\n (this.calibrationPlan.offsetX +\n position.x * this.calibrationPlan.x) /\n this.coeffPlanX;\n y =\n (this.calibrationPlan.offsetY +\n position.z * this.calibrationPlan.y) /\n this.coeffPlanY;\n }\n\n const distX = Math.abs(clickX - x);\n const distY = Math.abs(clickY - y);\n nav.dist = Math.sqrt(Math.pow(distX, 2) + Math.pow(distY, 2));\n })\n );\n navigations.sort((a, b) => {\n return a.dist - b.dist;\n });\n this.matterportService.action_go_to_sweep(\n navigations[0].matterportSweepID\n );\n }\n }\n }\n\n /**\n * Configures plan from cache (previous plan).\n */\n async uploadPlanFromCache(): Promise<void> {\n this.htmlContentToInject = this.cache.htmlContent;\n await this.configurePlan(this.cache.plan);\n return Promise.resolve();\n }\n\n /**\n * Puts buttons (tags) from cache according to passed element IDs (for filter if any)\n * @param elementIDs elements (tickets, equipments, etc) to be shown on plan\n */\n uploadTagsFromCache(sizeButton: number = 10) {\n // console.log(\"uploading tags from cache\");\n\n for (const cached of this.cache.htmlContent) {\n const button = document.createElement('button');\n this.styleButton(button, cached.tagIcon, sizeButton);\n button.id = cached.elementID;\n this.planDivContent.append(button);\n if (this.calibrationPlan.new) {\n const newCoeffX =\n this.coeffPlanX /\n (this.imgPlan.width / this.calibrationPlan.imgWidth);\n const newCoeffY =\n this.coeffPlanY /\n (this.imgPlan.height / this.calibrationPlan.imgHeight);\n button.style.top = `${cached.y / newCoeffY - 5}px`;\n button.style.left = `${cached.x / newCoeffX - 5}px`;\n } else {\n button.style.top = `${cached.y / this.coeffPlanY - 5}px`;\n button.style.left = `${cached.x / this.coeffPlanX - 5}px`;\n }\n\n this.addListenersToButton(button, cached.url);\n }\n }\n\n async getCalibratedPlanForZone(zone: Zone): Promise<Plan> {\n let plans = (await this.API.PlansByZone(zone.id)).items;\n let parentZone = null;\n if (plans.length === 0) {\n // try to find parent zone\n parentZone = await this.API.GetZone(zone.parentID);\n plans = (await this.API.PlansByZone(zone.parentID)).items;\n }\n const calibratedPlan = plans.find(\n (plan) => plan.calibration && plan.isCurrentForZone\n ) as Plan;\n if (calibratedPlan) {\n const signed = await getSignedFile(calibratedPlan.annexe);\n if (signed) {\n calibratedPlan.filepath = signed;\n }\n calibratedPlan.navigationIDs = parentZone\n ? parentZone.sweepIDs\n : zone.sweepIDs;\n }\n return calibratedPlan || null;\n }\n\n transformPosition3DForNewCalibration(position: {\n x: number;\n y: number;\n z: number;\n }): { x: number; y: number; coeffX: number; coeffY: number; } {\n const positionX =\n this.calibrationPlan.nameXAxis === 'x' ? position.x : position.z;\n const positionY =\n this.calibrationPlan.nameYAxis === 'x' ? position.x : position.z;\n let x =\n this.calibrationPlan.offsetX + positionX * this.calibrationPlan.scaleX;\n let y =\n this.calibrationPlan.offsetY + positionY * this.calibrationPlan.scaleY;\n const newCoeffX =\n this.coeffPlanX / (this.imgPlan.width / this.calibrationPlan.imgWidth);\n // console.log(\"newCoeffX\", newCoeffX);\n const newCoeffY =\n this.coeffPlanY / (this.imgPlan.height / this.calibrationPlan.imgHeight);\n x = (x - this.calibrationPlan.offsetXPlan) / this.calibrationPlan.scalePlan;\n\n y = (y - this.calibrationPlan.offsetYPlan) / this.calibrationPlan.scalePlan;\n // console.log(x, y);\n\n return { x, y, coeffX: newCoeffX, coeffY: newCoeffY };\n }\n}\n","/* eslint-disable class-methods-use-this */\n/* eslint-disable no-restricted-syntax */\nimport { Injectable } from \"@angular/core\";\nimport { Plan, Space, Visit, Zone } from \"../../types.service\";\nimport { getSignedFile, listFilesInFolder } from \"../s3.service\";\nimport { BaseUserService } from \"../user.service\";\nimport { CaptureService } from \"./capture.service\";\nimport { NavigationService } from \"./navigation.service\";\nimport { NodeService } from \"./node.service\";\nimport { PlanService } from \"./plan.service\";\nimport { ZoneService } from \"./zone.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class VisitService {\n choosenPlan: Plan;\n\n constructor(\n private captureService: CaptureService,\n private nodeService: NodeService,\n private navigationService: NavigationService,\n private zoneService: ZoneService,\n private planService: PlanService,\n private userService: BaseUserService,\n ) { }\n\n async getVisitsForSpaceForUser(spaceID: string): Promise<Visit[]> {\n const visits = [];\n const missionsForSpace = this.userService.currentMissions.filter(\n (mis) => mis.spaceID === spaceID,\n );\n const allAllowed =\n this.userService.userHasAccessToAllZonesInSpace(spaceID);\n const captures = await this.captureService.getCapturesBySpace(spaceID);\n const nodes = captures.flatMap((cap) => cap.nodes.items);\n let allAllowedNodes = nodes;\n let allowedNodeIDs = [];\n if (!allAllowed) {\n const allowedZones = missionsForSpace.map((mis) => mis.zone);\n for (const zone of allowedZones) {\n allowedNodeIDs = [...allowedNodeIDs, ...zone.nodeIDs];\n }\n allowedNodeIDs = [...new Set(allowedNodeIDs)]; // to make unique\n allAllowedNodes = allAllowedNodes.filter((node) =>\n allowedNodeIDs.includes(node.id),\n );\n }\n for (const node of allAllowedNodes) {\n // console.log(node)\n const folder = `visits/${node.model3D}/sweeps/`;\n const files = await listFilesInFolder(folder);\n const nmbImages = files.length;\n const capture = captures.find((cap) =>\n cap.nodes.items.includes(node),\n );\n const visit = {\n captureID: node.captureID,\n model3d: node.model3D,\n takenAt: capture.takenAt,\n spaceID,\n viewer: capture.viewer,\n surface: capture.surface,\n node,\n name: node.metadata,\n nmbImagesImported: nmbImages,\n } as Visit;\n visits.push(visit);\n }\n return visits;\n }\n\n async deleteVisit(visit: Visit, spaceID: string): Promise<Visit> {\n await this.nodeService.deleteNode(visit.node.id);\n const capture = await this.captureService.getCapture(visit.captureID);\n if (capture.nodes.items.length === 0) {\n await this.captureService.deleteCapture(visit.captureID);\n }\n const navigations = await this.navigationService.getNavigationsForNode(\n visit.node.id,\n );\n const zonesToDelete = await this.zoneService.getZonesForNodeForSpace(\n visit.node.id,\n spaceID,\n );\n await Promise.all(\n navigations.map(async (navig) => {\n await this.navigationService.deleteNavigation(navig.id);\n }),\n );\n if (zonesToDelete.length > 0) {\n await Promise.all(\n zonesToDelete.map(async (zone) => {\n const plans = await this.planService.getPlansForZone(\n zone.id,\n );\n if (plans.length > 0) {\n await Promise.all(\n plans.map(async (plan) => {\n await this.planService.deletePlan(plan);\n }),\n );\n }\n await this.zoneService.deleteZone(zone.id);\n }),\n );\n }\n // we cannot delete the images, because the folder of the visit can be used by another location\n // removeAllFilesFromFolderS3(`visits/${visit.model3d}/sweeps`); \n return visit;\n }\n\n async loadImagesForSpace(space: Space): Promise<any> {\n const list = [];\n return this.getVisitsForSpaceForUser(space.id).then(async (visits) => {\n if (visits) {\n space.visits = visits;\n await Promise.all(\n visits.map(async (visit) => {\n const folder = `visits/${visit.model3d}/sweeps/`;\n const files = await listFilesInFolder(folder);\n await Promise.all(\n files.map(async (file) => {\n const signed = await getSignedFile(file.key);\n const filename = file.key.split(\"/\")[3];\n list.push({\n path: signed,\n filename,\n visit,\n });\n }),\n );\n }),\n );\n return list;\n }\n return list;\n });\n }\n\n\n async getDefaultZoneForVisit(visit: Visit): Promise<Zone> {\n return this.zoneService\n .getZonesBySpace(visit.spaceID)\n .then(async (zones) => {\n const zonesWithVisitName = zones.filter(\n (zone) =>\n zone.name === visit.name &&\n zone.layer &&\n zone.layer.name === \"BUILDING\",\n );\n if (zonesWithVisitName.length === 1) {\n return zonesWithVisitName[0];\n }\n const parentZone = zones.find((zone) => !zone.parentID);\n return parentZone;\n });\n }\n}\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable class-methods-use-this */\nimport { Inject, Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { MattertagData } from \"../../mattertagData\";\nimport { Feature, Hashtag, FeatureType, CommentType, POI, PoiType, Event, LevelStatus } from \"../../types.service\";\nimport { FilterService } from \"../filter.service\";\nimport { NavigatorService } from \"../navigator.service\";\nimport { BaseUserService } from \"../user.service\";\nimport { BaseObjectService } from \"./base-object.service\";\nimport { CommentService } from \"./comment.service\";\nimport { HashtagService } from \"./hashtag.service\";\nimport { NavigationService } from \"./navigation.service\";\nimport { PoiService } from \"./poi.service\";\nimport {ZoneChangeService} from \"../zoneChange.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class FeatureService extends BaseObjectService {\n API: any; //AWS\n\n featureUpdated: Subject<{\n space: Feature[];\n zone: Feature[];\n }> = new Subject();\n\n currentFeatures: { space: Feature[]; zone: Feature[]; } = {\n space: [],\n zone: [],\n };\n\n featureTags: Subject<Feature[]> = new Subject();\n\n featureFiltered: Feature[] = [];\n\n updateDone: Subject<boolean> = new Subject();\n\n zoneIDFilter: string;\n\n currentSpaceID: string;\n\n updating: Subject<boolean> = new Subject();\n\n isUpdating = false;\n\n featureDomainFilter: string[] = null;\n\n deskDomainFilter: string[] = null;\n\n deskBookingsUpdated: Subject<Event[]> = new Subject();\n\n public currentHashtags: Hashtag[] = [];\n\n createObservable: Subject<Feature> = new Subject();\n\n deleteObservable: Subject<Feature> = new Subject();\n\n constructor(\n @Inject('currentAPIService') apiInjected: any,\n private navigatorService: NavigatorService,\n private filterService: FilterService,\n poiService: PoiService,\n private commentService: CommentService,\n private userService: BaseUserService,\n navigationService: NavigationService,\n private hashtagService: HashtagService,\n private zoneChangeService: ZoneChangeService,\n ) {\n super(poiService, navigationService);\n this.API = apiInjected;\n this.featureUpdated.subscribe((list) => {\n this.currentFeatures = list;\n });\n this.zoneChangeService.zoneChange.subscribe((zone) => {\n this.currentSpaceID = this.navigatorService.currentSpaceID;\n if (!this.currentSpaceID) {\n this.featureTags.next(null);\n this.featureUpdated.next({ space: [], zone: null });\n this.zoneIDFilter = null;\n } else if (zone.id !== this.zoneIDFilter && !this.userService.isMuseumUser(this.currentSpaceID)) {\n this.zoneIDFilter = zone.id;\n this.initFeatures();\n }\n });\n this.updateDone.subscribe(() => {\n if (this.currentSpaceID) {\n this.initFeatures();\n }\n });\n\n this.deleteObservable.subscribe((feature) => {\n if (this.currentSpaceID) {\n this.updateDueToDelete(feature);\n }\n });\n\n this.createObservable.subscribe((feature) => {\n if (this.currentSpaceID) {\n this.updateDueToCreate(feature);\n }\n });\n }\n\n /*\n * CRUD\n */\n async createFeature(feature: Feature): Promise<Feature> {\n return this.API.__proto__.CreateFeature(feature);\n }\n\n async deleteFeature(feature: Feature): Promise<Feature> {\n const deleted = await this.API.__proto__.DeleteFeature({ id: feature.id });\n if (deleted) {\n const poi = await this.poiService.getPoiByElementId(feature.id);\n if (poi) {\n await this.poiService.deletePoi(poi.id);\n }\n // delete comments\n for (const comment of deleted.comments.items) {\n await this.commentService.deleteComment(comment.id);\n }\n }\n return deleted;\n }\n\n async updateFeature(feature: any): Promise<Feature> {\n return this.API.__proto__.UpdateFeature(feature);\n }\n\n async getFeature(id: string): Promise<Feature> {\n const feature = (await this.API.__proto__.GetFeature(id)) as Feature;\n feature.events?.items.sort((a, b) => b.realStartDate - a.realStartDate);\n this.setCoverImage(feature);\n this.setImages(feature);\n this.setVideos(feature);\n this.setDocuments(feature);\n this.setAudio(feature);\n this.setExternalLinks(feature);\n this.setEmbeds(feature);\n this.isBookingPlace(feature);\n return feature;\n }\n\n\n async initFeatures() {\n if (!this.currentSpaceID) {\n return;\n }\n this.updating.next(true);\n this.isUpdating = true;\n const featureList = await this.getFeaturesForSpace(this.currentSpaceID);\n this.currentHashtags = await this.hashtagService.getHashtagsForSpace(\n this.currentSpaceID,\n );\n // console.log(this.currentHashtags);\n if (featureList.length > 0) {\n let filteredFeatures = [...featureList];\n let filteredPointInterest = filteredFeatures.filter(\n (feature) => feature.type !== FeatureType.DESK,\n );\n let filteredDesks = filteredFeatures.filter(\n (feature) => feature.type === FeatureType.DESK,\n );\n if (this.featureDomainFilter) {\n filteredPointInterest = filteredPointInterest.filter(\n (feature) =>\n this.featureDomainFilter.find(\n (domain) =>\n feature.domain && domain === feature.domain.id,\n ),\n );\n }\n if (this.deskDomainFilter) {\n filteredDesks = filteredDesks.filter((feature) =>\n this.deskDomainFilter.find(\n (domain) =>\n feature.domain && domain === feature.domain.id,\n ),\n );\n }\n filteredFeatures = [...filteredPointInterest, ...filteredDesks];\n this.currentFeatures.space = filteredFeatures.sort(\n (a, b) => a.index - b.index,\n );\n // emit on tags should be after setting current.space !!\n this.featureTags.next(filteredFeatures); // for tags update without zone filtering\n if (this.zoneIDFilter) {\n filteredFeatures =\n (await this.filterService.filterObjectsForZone(\n filteredFeatures,\n this.zoneIDFilter,\n )) as Feature[];\n }\n this.currentFeatures.zone = filteredFeatures.sort(\n (a, b) => a.index - b.index,\n );\n // console.log(this.currentFeatures);\n this.featureUpdated.next(this.currentFeatures); // for lateral menu\n } else {\n this.featureUpdated.next({ space: [], zone: [] }); // for lateral menu\n }\n this.updating.next(false);\n this.isUpdating = false;\n }\n\n async getFeaturesForSpace(\n spaceID: string,\n keepArchived: boolean = false,\n ): Promise<Feature[]> {\n const features = await this.API.__proto__.FeaturesBySpace(spaceID).then(\n (response) => response.items,\n );\n let featuresForUser =\n await this.filterService.filterFeaturesForCurrentUserInSpace(\n features,\n spaceID,\n );\n if (!keepArchived) {\n featuresForUser = featuresForUser.filter(\n (feature) => !this.isArchived(feature),\n );\n }\n for (const feature of featuresForUser) {\n this.setCoverImage(feature);\n this.isBookingPlace(feature);\n }\n return featuresForUser;\n }\n\n async getFeaturesBySpaceWithoutFiltering(spaceID: string): Promise<Feature[]> {\n let features = await this.API.__proto__.FeaturesBySpace(spaceID).then(\n (response) => response.items,\n );\n features = features.filter(\n (feature) => !this.isArchived(feature),\n );\n for (const feature of features) {\n this.setCoverImage(feature);\n this.isBookingPlace(feature);\n }\n return features;\n }\n\n isBookingPlace(feature: Feature) {\n feature.isBookingPlace = feature.type === FeatureType.DESK;\n }\n\n\n setCoverImage(feature: Feature) {\n const coverImage = feature.comments.items.find(\n (com) => com.isCoverImage,\n );\n if (coverImage) {\n feature.coverImageUrl = coverImage.annexe;\n return;\n }\n if (feature.comments.items.some((com) => com.type === CommentType.YOUTUBE)) {\n const youtubeComment = feature.comments.items.find((com) => com.type === CommentType.YOUTUBE);\n // we can use the preview image of youtube\n feature.coverImageUrl = `https://img.youtube.com/vi/${youtubeComment.externalLink}/0.jpg`;\n return;\n }\n if (\n feature.comments.items.some((com) => com.type === CommentType.IMAGE)\n ) {\n const imageComment = feature.comments.items.find(\n (com) => com.type === CommentType.IMAGE,\n );\n feature.coverImageUrl = imageComment.annexe;\n }\n\n }\n\n async updateFeatureLocation(\n feature: Feature,\n tagData: MattertagData,\n spaceID: string,\n ): Promise<POI> {\n const poiInput = {\n coordinate: tagData.getCoordinateString(),\n type: feature.isBookingPlace ? PoiType.DESK : PoiType.DATA,\n elementID: feature.id,\n metadata: tagData.getMetadataString(),\n matterportSweepID: tagData.getSweepID(),\n } as POI;\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\n return poi;\n }\n\n setImages(feature: Feature) {\n const imagesComments = feature.comments.items\n .filter((com) => com.type === CommentType.IMAGE)\n .sort((a, b) => a.index - b.index);\n const images = [];\n for (const image of imagesComments) {\n images.push({\n path: image.annexe,\n title: image.title,\n description: image.description,\n showInTag: image.shownInTag,\n });\n }\n feature.images = images;\n }\n\n setVideos(feature: Feature) {\n const videosComments = feature.comments.items\n .filter((com) => com.type === CommentType.VIDEO || com.type === CommentType.YOUTUBE)\n .sort((a, b) => a.index - b.index);\n const videos = [];\n for (const video of videosComments) {\n videos.push({\n path: video.type === CommentType.YOUTUBE ? 'https://www.youtube.com/embed/' + video.externalLink : video.annexe,\n title: video.title,\n description: video.description,\n type: video.type,\n });\n }\n feature.videos = videos;\n }\n\n setDocuments(feature: Feature) {\n const documentComments = feature.comments.items\n .filter((com) => com.type === CommentType.DOCUMENT)\n .sort((a, b) => a.index - b.index);\n const docs = [];\n for (const document of documentComments) {\n docs.push({\n path: document.annexe,\n title: document.title,\n description: document.description,\n });\n }\n feature.documents = docs;\n }\n\n setAudio(feature: Feature) {\n const audioComments = feature.comments.items\n .filter((com) => com.type === CommentType.AUDIO)\n .sort((a, b) => a.index - b.index);\n const audios = [];\n for (const audio of audioComments) {\n audios.push({\n path: audio.annexe,\n title: audio.title,\n description: audio.description,\n });\n }\n feature.audios = audios;\n }\n\n setExternalLinks(feature: Feature) {\n const linksComments = feature.comments.items\n .filter((com) => com.type === CommentType.URL)\n .sort((a, b) => a.index - b.index);\n const externalLinks = [];\n for (const link of linksComments) {\n externalLinks.push({\n path: link.externalLink,\n title: link.title,\n description: link.description,\n showInTag: link.shownInTag,\n });\n }\n feature.externalLinks = externalLinks;\n }\n\n setEmbeds(feature: Feature) {\n const embedComments = feature.comments.items\n .filter((com) => com.type === CommentType.EMBED)\n .sort((a, b) => a.index - b.index);\n const embeds = [];\n for (const embed of embedComments) {\n embeds.push({\n path: embed.externalLink,\n title: embed.title,\n description: embed.description,\n showInTag: embed.shownInTag,\n });\n }\n feature.embeds = embeds;\n }\n\n\n async getFirstFeatureForSpace(spaceID: string): Promise<Feature> {\n const features = await this.getFeaturesForSpace(spaceID);\n const first = features.find((feat) => feat.index === 1);\n return first;\n }\n\n async updateIconForAllFeaturesInSpace(\n tagIcon: string,\n spaceID: string,\n categoryID: string = null,\n ): Promise<{ features: Feature[]; pois: POI[]; }> {\n let features = await this.getFeaturesForSpace(spaceID);\n if (categoryID) {\n features = features.filter(\n (feature) => feature.domainID === categoryID,\n );\n }\n const pois = await this.updateIconForAllObjects(features, tagIcon);\n return { features, pois };\n }\n\n async getCreatedIndicesForFeaturesInSpace(\n spaceID: string,\n ): Promise<number[]> {\n let features = (await this.API.__proto__.FeaturesBySpace(spaceID)).items;\n features = features.filter((feat) => feat.index);\n return features.map((feat) => feat.index);\n }\n\n async getDesksForSpace(spaceID: string): Promise<Feature[]> {\n const features = await this.getFeaturesForSpace(spaceID);\n return features.filter((feat) => feat.isBookingPlace);\n }\n\n /** Return true if the current user has archived this feature */\n isArchived(feature: Feature): boolean {\n return feature.archivedForMissionID\n ? feature.archivedForMissionID.includes(\n this.userService.currentMission(feature.spaceID).id,\n )\n : false;\n }\n\n setArchived(feature: Feature, archived: boolean) {\n let archivedList = feature.archivedForMissionID\n ? feature.archivedForMissionID\n : [];\n const missionID = this.userService.currentMission(feature.spaceID).id;\n\n archivedList = archivedList.filter((m) => m !== missionID);\n\n if (archived) {\n archivedList.push(missionID);\n }\n\n return this.updateFeature({\n id: feature.id,\n archivedForMissionID: archivedList,\n });\n }\n\n\n async updateDueToCreate(feature: Feature) {\n this.currentFeatures.space.unshift(feature);\n this.currentFeatures.zone.unshift(feature);\n this.featureUpdated.next({\n space: this.currentFeatures.space,\n zone: this.currentFeatures.zone,\n }); // for lateral menu\n }\n\n async updateDueToDelete(deletedFeature: Feature) {\n const feature = this.currentFeatures.space.find(\n (_feature) => _feature.id === deletedFeature.id,\n );\n if (feature) {\n const index = this.currentFeatures.space.indexOf(feature);\n this.currentFeatures.space.splice(index, 1);\n }\n const zoneFeature = this.currentFeatures.zone.find(\n (_feature) => _feature.id === deletedFeature.id,\n );\n if (zoneFeature) {\n const index = this.currentFeatures.zone.indexOf(zoneFeature);\n this.currentFeatures.zone.splice(index, 1);\n }\n this.featureUpdated.next({\n space: this.currentFeatures.space,\n zone: this.currentFeatures.zone,\n }); // for lateral menu\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Subject, takeUntil } from 'rxjs';\nimport { waitUntil } from '../../helpers.service';\nimport { Measurement, PoiType, Comment, POI, Zone } from '../../types.service';\nimport { FilterService } from '../filter.service';\nimport { NavigatorService } from '../navigator.service';\nimport { deleteFromS3, uploadFileToS3 } from '../s3.service';\nimport { BaseUserService } from '../user.service';\nimport { CommentService } from './comment.service';\nimport { NavigationService } from './navigation.service';\nimport { PoiService } from './poi.service';\nimport {ZoneChangeService} from \"../zoneChange.service\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MeasurementService {\n path = 'measurements/';\n\n currentMeasurements: {\n space: Measurement[];\n zone: Measurement[];\n } = { space: [], zone: [] };\n\n measurementsTags: Subject<Comment[]> = new Subject();\n\n measurementsUpdated: Subject<{\n space: Measurement[];\n zone: Measurement[];\n }> = new Subject();\n\n currentSpaceID: string;\n\n zoneIDFilter: string;\n\n dateFilter: Date[];\n\n measurementFilter: boolean = false; // if false means no filtering, everything is allowed\n\n updateDone: Subject<boolean> = new Subject();\n\n updating: Subject<boolean> = new Subject();\n\n awsKinesisAnalytics: any; //AWS\n\n floorsPerSpace: Zone[] = null;\n\n selectedFloor: Zone = null;\n\n private destroy$ = new Subject();\n\n constructor(\n @Inject('currentAwsKinesisAnalyticsService')\n awsKinesisAnalyticsInjected: any,\n private navigatorService: NavigatorService,\n private filterService: FilterService,\n private commentService: CommentService,\n private poiService: PoiService,\n private userService: BaseUserService,\n private zoneChangeService: ZoneChangeService,\n private navigationService: NavigationService\n ) {\n this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;\n\n const isMuseumUser = this.userService.hasOnlyMuseumRole();\n if (!isMuseumUser) {\n this.zoneChangeService.zoneChange.subscribe((zone) => {\n this.currentSpaceID = this.navigatorService.currentSpaceID;\n if (!this.currentSpaceID) {\n this.measurementsTags.next(null);\n this.measurementsUpdated.next({ space: [], zone: null });\n this.measurementFilter = null;\n this.zoneIDFilter = null;\n } else if (zone.id !== this.zoneIDFilter) {\n this.zoneIDFilter = zone.id;\n // console.log(\"going to init measurements from zone\");\n this.initMeasurements();\n }\n });\n this.filterService.subscribeToDataFilterUpdate((dateRange) => {\n this.dateFilter = dateRange;\n this.initMeasurements();\n });\n this.dateFilter = this.filterService.currentDateFilter;\n this.updateDone.subscribe(() => this.initMeasurements());\n }\n\n this.zoneChangeService.floorHasChanged.subscribe((floor)=>{\n if (floor){\n this.selectedFloor = floor;\n }\n });\n }\n async initMeasurements() {\n if (this.currentSpaceID) {\n this.updating.next(true);\n let measurements = await this.getMeasurementsForSpaceForUser(\n this.currentSpaceID\n );\n if (measurements.length > 0) {\n if (this.dateFilter) {\n measurements = this.filterService.filterMeasurementsForDateRange(\n measurements,\n this.dateFilter\n );\n }\n if (this.measurementFilter) {\n measurements = [];\n }\n this.currentMeasurements.space = measurements;\n // emit on tags should be after setting current.space !!\n this.measurementsTags.next(measurements.map((m) => m.comment));\n\n if (this.zoneIDFilter) {\n const commentsZone = await this.filterService.filterObjectsForZone(\n measurements.map((measure) => measure.comment),\n this.zoneIDFilter\n );\n measurements = measurements.filter((measure) =>\n commentsZone.includes(measure.comment)\n );\n }\n measurements.sort((a, b) => {\n return (\n // @ts-ignore\n new Date(b.comment.createdAt) -\n // @ts-ignore\n new Date(a.comment.createdAt)\n );\n });\n this.currentMeasurements.zone = measurements;\n this.measurementsUpdated.next(this.currentMeasurements);\n } else {\n this.currentMeasurements.space = [];\n this.currentMeasurements.zone = [];\n this.measurementsUpdated.next({ space: [], zone: [] }); // for lateral menu\n }\n } else {\n this.measurementsTags.next(null);\n }\n this.updating.next(false);\n }\n\n async deleteMeasurement(measurement: Measurement): Promise<Comment> {\n const deletedComment = await this.commentService.deleteComment(\n measurement.comment.id\n );\n if (deletedComment) {\n await this.poiService.deletePoi(measurement.poi.id);\n const prefix = `${measurement.comment.id.slice(0, 8)}_`;\n const path = `${this.path + prefix}mesure.jpeg`;\n await deleteFromS3(path);\n }\n return deletedComment;\n }\n\n async createMeasurementForSpace(\n commentInput: Comment,\n dataMeasurements: { measure: any[]; sweep: string },\n screenshot: any,\n spaceID: string\n ): Promise<Measurement> {\n const lastMeasure = dataMeasurements.measure;\n const sweepID = dataMeasurements.sweep;\n const lastPoint = lastMeasure[lastMeasure.length - 1];\n let comment = await this.commentService.createComment(commentInput);\n const poiInput = {\n coordinate: JSON.stringify({\n x: lastPoint.x,\n y: lastPoint.y,\n z: lastPoint.z,\n }),\n type: PoiType.MEASURE,\n elementID: comment.id,\n matterportSweepID: sweepID,\n } as POI;\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\n const screen = await fetch(screenshot);\n const blob = await screen.blob();\n const file = new File([blob], 'mesure.jpeg', { type: 'image/jpeg' });\n const url = await uploadFileToS3(this.path, file, comment.id);\n if (url) {\n comment = await this.commentService.updateComment({\n id: comment.id,\n annexe: url,\n });\n }\n const measurement = {\n comment,\n poi,\n } as Measurement;\n\n this.awsKinesisAnalytics.getInstance().record(\n // @ts-ignore\n {\n data: {\n eventType: 'Object Creation',\n objectType: 'measurement',\n measurement: measurement,\n //zoneId: spaceID,\n user: this.userService.cu,\n locationId: this.currentSpaceID,\n timestamp: new Date(),\n zoneId: this.zoneIDFilter,\n floorId: this.selectedFloor?.id,\n },\n streamName: 'smarterplanKinesis-analytics',\n // partitionKey: \"\",\n },\n 'AWSKinesis'\n );\n\n return measurement;\n }\n\n async getModel3DForMeasurement(measurement: Measurement): Promise<string> {\n const poi = await this.poiService.getPoiByElementId(measurement.comment.id);\n if (poi && poi.matterportSweepID) {\n const navigations =\n await this.navigationService.getNavigationsForMatterportIDForSpace(\n poi.matterportSweepID,\n measurement.comment.spaceID\n );\n const [poiNavigation] = navigations;\n return poiNavigation.node.model3D;\n }\n return null;\n }\n\n async getMeasurementsForSpaceForUser(\n spaceID: string\n ): Promise<Measurement[]> {\n let comments = await this.commentService.getCommentsBySpaceID(spaceID);\n comments = await this.filterService.filterMeasurementsForCurrentUserInSpace(\n spaceID,\n comments\n );\n let measurements = [];\n if (comments.length > 0) {\n await Promise.all(\n comments.map(async (comment) => {\n const measurement =\n await this.commentService.readCommentAsMeasurement(comment.id);\n measurements.push(measurement);\n })\n );\n }\n return measurements;\n }\n\n unsubscribe() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport { Inject, Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { filterUniqueArrayByID, sortAlphabeticallyOnName } from \"../../helpers.service\";\nimport { Space, Layer, PropertyType } from \"../../types.service\";\nimport { getSignedImageUrlForSpace } from \"../s3.service\";\nimport { BaseUserService } from \"../user.service\";\nimport { CaptureService } from \"./capture.service\";\nimport { EquipmentService } from \"./equipment.service\";\nimport { FeatureService } from \"./feature.service\";\nimport { MeasurementService } from \"./measurement.service\";\nimport { MissionService } from \"./mission.service\";\nimport { PropertyService } from \"./property.service\";\nimport { TicketsService } from \"./ticket.service\";\nimport { VisitService } from \"./visit.service\";\n\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class SpaceService {\n\n locationsForUser: Space[] = [];\n\n locationUpdated: Subject<Space[]> = new Subject<Space[]>();\n\n API: any; //AWS\n\n constructor(\n private visitService: VisitService,\n private userService: BaseUserService,\n private propertyService: PropertyService,\n private captureService: CaptureService,\n private missionService: MissionService,\n private ticketService: TicketsService,\n private equipService: EquipmentService,\n private featureService: FeatureService,\n private measurementService: MeasurementService,\n @Inject('currentAPIService') apiInjected: any\n ) {\n this.API = apiInjected;\n }\n\n async listSpaces(): Promise<Space[]> {\n return this.API.__proto__.ListSpaces().then((spaces) =>\n spaces.items.filter((sp) => !sp.deletedAt),\n );\n }\n\n async getLocationsForCurrentUser(): Promise<Space[]> {\n const missions = this.userService.currentMissions;\n if (!missions) return [];\n let locations = [];\n await Promise.all(\n missions.map(async (mission) => {\n if (mission.space && !mission.space.deletedAt) {\n const space = await this.getSpace(mission.space.id);\n await this.signUrlForSpace(space);\n await this.visitService\n .getVisitsForSpaceForUser(space.id)\n .then((visits) => {\n if (visits) {\n space.visits = visits;\n }\n });\n locations.push(space);\n }\n }),\n );\n if (locations.length > 0) {\n locations = sortAlphabeticallyOnName(\n filterUniqueArrayByID(locations),\n );\n }\n this.locationsForUser = locations;\n this.locationUpdated.next(locations);\n return locations;\n }\n\n async signUrlForSpace(loc: Space) {\n if (loc.annexes) {\n getSignedImageUrlForSpace(loc).then((url) => {\n if (url) {\n loc.annexes = url;\n }\n });\n }\n }\n\n async getAllowedSpacesForOrg(\n orgID: string,\n userOrgID: string,\n ): Promise<Space[]> {\n if (\n userOrgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" ||\n orgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\"\n ) {\n return this.listSpaces();\n }\n return this.getSpacesForOrg(userOrgID);\n }\n\n async getSpacesForOrg(orgID: string): Promise<Space[]> {\n const properties =\n await this.propertyService.getPropertiesForOrganisation(orgID);\n if (properties.length > 0) {\n const spaces = [];\n for (const property of properties) {\n if (property.space && !property.space.deletedAt) {\n spaces.push(property.space);\n }\n }\n return spaces;\n }\n return null;\n }\n\n async createSpace(values: Space, layer?: Layer): Promise<any> {\n const loc = await this.API.__proto__.CreateSpace(values);\n const zoneInput = {\n name: values.name,\n spaceID: loc.id,\n surface: 0,\n layerID: layer ? layer.id : null,\n };\n await this.API.__proto__.CreateZone(zoneInput);\n return loc;\n }\n\n async updateSpace(input: any): Promise<Space> {\n return this.API.__proto__.UpdateSpace(input);\n }\n\n async getSpace(id: string): Promise<Space> {\n return this.API.__proto__.GetSpace(id);\n }\n\n async getModel3DForSpace(spaceID: string): Promise<string> {\n const captures = await this.captureService.getCapturesBySpace(spaceID);\n if (captures.length > 0 && captures[0].nodes.items.length > 0) {\n return captures[0].nodes.items[0].model3D;\n }\n return null;\n }\n\n async getAllowedModel3DForSpace(spaceID: string): Promise<string> {\n const visits = await this.visitService.getVisitsForSpaceForUser(\n spaceID,\n );\n if (visits.length > 0) {\n return visits[0].model3d;\n }\n return null;\n }\n\n async softDeleteSpace(spaceID: string) {\n await this.updateSpace({\n id: spaceID,\n deletedAt: Date.now(),\n });\n const missions = await this.missionService.getMissionsForSpace(spaceID);\n const properties = await this.propertyService.listPropertiesForSpace(spaceID);\n if (this.userService.isSPAdmin()) {\n // delete all properties\n await Promise.all(\n properties.map(async (property) => {\n await this.propertyService.deleteProperty(property.id);\n }),\n );\n // delete all missions\n await Promise.all(\n missions.map(async (mission) => {\n await this.missionService.update({\n id: mission.id,\n deletedAt: Date.now(),\n });\n }),\n );\n } else {\n // delete property for current Org\n const currentOrg = this.userService.currentOrganisation(spaceID);\n const propertyToDelete = properties.find(\n (property) => property.organisationID === currentOrg.id,\n );\n if (propertyToDelete) {\n await this.propertyService.deleteProperty(propertyToDelete.id);\n }\n const missionsToDelete = missions.filter(\n (mission) =>\n mission.organisationID === currentOrg.id ||\n mission.orderedOrganisationID === currentOrg.id,\n );\n await Promise.all(\n missionsToDelete.map(async (mission) => {\n await this.missionService.update({\n id: mission.id,\n deletedAt: Date.now(),\n });\n }),\n );\n }\n const tickets = await this.ticketService.getTicketsBySpace(spaceID);\n await Promise.all(\n tickets.map(async (ticket) => {\n await this.ticketService.deleteTicket(ticket);\n }),\n );\n const equips = await this.equipService.getEquipmentsForSpace(spaceID);\n await Promise.all(\n equips.map(async (eq) => {\n await this.equipService.deleteEquipment(eq);\n }),\n );\n const features = await this.featureService.getFeaturesForSpace(spaceID);\n await Promise.all(\n features.map(async (feature) => {\n await this.featureService.deleteFeature(feature);\n }),\n );\n\n // measurements\n const measures = await this.measurementService.getMeasurementsForSpaceForUser(spaceID);\n await Promise.all(\n measures.map(async (measure) => {\n await this.measurementService.deleteMeasurement(measure);\n }),\n );\n // remove from list\n this.locationsForUser = this.locationsForUser.filter((space) => space.id !== spaceID);\n this.locationUpdated.next(this.locationsForUser);\n }\n\n /**\n * If current user can archive a space (only if his organisation is owning the property (PropertyType.PROPERTY))\n * @param spaceID\n * @returns\n */\n async canArchiveSpace(spaceID: string): Promise<boolean> {\n const currentOrg = this.userService.currentOrganisation(spaceID);\n const orgProperties =\n await this.propertyService.getPropertiesForOrganisation(\n currentOrg.id,\n );\n const property = orgProperties.find(\n (property_) => property_.spaceID === spaceID,\n );\n if (property.type === PropertyType.PROPERTY) {\n return true;\n }\n return false;\n }\n}\n","import { Component, Inject, OnInit, ViewChild } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { waitUntil } from '../../../helpers.service';\nimport { SpaceService } from '../../../services/models/space.service';\nimport { VisitService } from '../../../services/models/visit.service';\nimport { ZoneService } from '../../../services/models/zone.service';\nimport { NavigatorService } from '../../../services/navigator.service';\nimport { ViewerService } from '../../../services/viewer.service';\nimport { Space, Visit, Zone } from '../../../types.service';\nimport { BaseUserService } from '../../../services/user.service';\nimport {ZoneChangeService} from \"../../../services/zoneChange.service\";\n\n@Component({\n selector: 'lib-navigation-bar',\n templateUrl: './navigation-bar.component.html',\n styleUrls: ['./navigation-bar.component.scss'],\n})\nexport class NavigationBarComponent implements OnInit {\n awsKinesisAnalytics: any; //AWS\n\n @ViewChild('navbarSelectMenu') navbarSelectMenu!: any;\n\n locations: Space[];\n\n currentLocationID: string;\n\n currentModel3d: string;\n\n selectedLocation: Space = null;\n\n selectedModel3d: string;\n\n selectedFloor: Zone = null;\n\n selectedZone: Zone = null;\n\n selectedChildZone: Zone = null;\n\n visitsPerSpace: Visit[] = null;\n\n floorsPerSpace: Zone[] = null;\n\n zonesPerSpace: Zone[] = null;\n\n zonesPerFloor: Zone[] = null;\n\n childrenZones: Zone[] = null;\n\n sweepToGo: string;\n\n floorToGo: Zone;\n\n destroy$ = new Subject();\n\n navEvents: Observable<NavigationEnd>;\n\n constructor(\n @Inject('currentAwsKinesisAnalyticsService')\n awsKinesisAnalyticsInjected: any,\n private router: Router,\n private spaceService: SpaceService,\n private userService: BaseUserService,\n private zoneService: ZoneService,\n private visitService: VisitService,\n private viewerService: ViewerService,\n private navigatorService: NavigatorService,\n private zoneChangeService: ZoneChangeService\n ) {\n this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;\n this.spaceService.locationUpdated\n .pipe(takeUntil(this.destroy$))\n .subscribe((locs) => {\n this.locations = locs;\n if (this.selectedLocation) {\n this.selectedLocation = this.findLocationByID(\n this.selectedLocation.id\n ); // Update Object (object address will change);\n }\n });\n this.viewerService.viewerIsOn\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (data: { spaceID: string; model3D: string; sweep: string | null }) => {\n // console.log('menu navigation received update', data);\n this.currentLocationID = data.spaceID;\n this.currentModel3d = data.model3D;\n if (!data.spaceID) {\n this.selectedLocation = null;\n localStorage.removeItem('locationId');\n this.sendUpdateLocationEvent();\n return;\n }\n if (\n (!this.selectedLocation ||\n this.selectedLocation.id !== data.spaceID) &&\n this.locations\n ) {\n this.selectedLocation = this.findLocationByID(data.spaceID);\n this.sendUpdateLocationEvent();\n }\n }\n );\n\n /**\n * We listen for Location change event\n */\n this.navigatorService.locationIDChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((id: string) => {\n this.clearData();\n this.currentLocationID = id;\n this.selectedLocation = this.findLocationByID(id);\n this.navigatorService.currentNavBarLocationID = id;\n this.onSelectedLocationChanged().catch((e) => console.log(e.message));\n });\n\n this.zoneChangeService.zonesForUserChange\n .pipe(takeUntil(this.destroy$))\n .subscribe(async (zones) => {\n if (zones) {\n await waitUntil(() => this.floorsPerSpace !== null);\n const floorZone = zones.find(\n (zone) => zone.layer && zone.layer.name === 'FLOOR'\n );\n if (floorZone) {\n this.selectedFloor = this.floorsPerSpace.find(\n (f) => f.id === floorZone.id\n );\n // Emit event to dispatch value of this.selectedFloor in all poi/ticket/equipment/measure services\n this.zoneChangeService.floorHasChanged.emit(this.selectedFloor);\n this.onFloorClick(false).catch((e) => console.log(e.message));\n }\n }\n });\n }\n\n async ngOnInit() {\n await this.initLocations();\n this.handleStartUrl();\n }\n\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n // Capture the \"id\" in localisation/:id routes\n handleStartUrl() {\n if (this.router.url.includes('localisation/')) {\n const paths = this.router.url.split('/'); // /dashboard/localisation/fc0aadb7-3c89-4349-ad1f-bfe9b44916c0\n // eslint-disable-next-line prefer-destructuring\n const locID = paths[3];\n if (this.currentLocationID !== locID) {\n this.clearData();\n this.currentLocationID = locID;\n this.selectedLocation = this.findLocationByID(locID);\n this.navigatorService.currentNavBarLocationID = locID;\n this.onSelectedLocationChanged().catch((e) => console.log(e.message));\n }\n }\n }\n\n async initLocations() {\n this.locations = this.spaceService.locationsForUser;\n if (this.locations.length === 0) {\n this.locations = await this.spaceService.getLocationsForCurrentUser();\n }\n if (this.currentLocationID && this.locations.length > 0) {\n this.selectedLocation = this.findLocationByID(this.currentLocationID);\n if (this.selectedLocation) {\n this.sendUpdateLocationEvent();\n }\n }\n }\n\n /**\n * Find a location with a given ID\n * @param id ID for the location\n * @returns The location or null if no location were found\n */\n findLocationByID(id: string): Space {\n const space = this.locations.find((loc) => loc.id === id);\n return space || null; /** Convert to null if undefined */\n }\n\n clearData(clearVisits: boolean = true) {\n this.floorsPerSpace = null;\n this.selectedFloor = null;\n this.zonesPerFloor = null;\n this.childrenZones = null;\n this.selectedModel3d = null;\n this.sweepToGo = null;\n this.floorToGo = null;\n this.selectedZone = null;\n this.selectedChildZone = null;\n if (clearVisits) {\n this.visitsPerSpace = null;\n this.zonesPerSpace = null;\n }\n localStorage.removeItem('locationId');\n localStorage.removeItem('floorId');\n localStorage.removeItem('zoneId');\n localStorage.removeItem('childZoneId');\n }\n\n /**\n * When the selectedLocation changes\n * Send a event to locationIDChange from NavigatorService\n * The event will be catch by this component and the filter bar will be update\n */\n sendUpdateLocationEvent() {\n const locationID = this.selectedLocation ? this.selectedLocation.id : null;\n this.navigatorService.locationIDChange.next(locationID);\n if (this.selectedLocation) {\n localStorage.setItem('locationId', this.selectedLocation.id);\n } else {\n localStorage.removeItem('locationId');\n }\n }\n\n async onSelectedLocationChanged() {\n if (!this.selectedLocation) {\n return;\n }\n try {\n this.visitsPerSpace = await this.visitService.getVisitsForSpaceForUser(\n this.selectedLocation.id\n );\n this.zonesPerSpace = await this.zoneService.getZonesBySpaceForUser(\n this.selectedLocation.id\n );\n if (this.visitsPerSpace.length === 1) {\n this.selectedModel3d = this.visitsPerSpace[0].model3d;\n this.floorsPerSpace = this.zonesPerSpace.filter(\n (zone) => zone.layer && zone.layer.name.includes('FLOOR')\n );\n // sort from highest floor to lowest\n this.floorsPerSpace.sort((a, b) => {\n if (a.metadata && b.metadata) {\n const metadataA = JSON.parse(a.metadata);\n const metadataB = JSON.parse(b.metadata);\n return (\n metadataB.matterportFloorSequence -\n metadataA.matterportFloorSequence\n );\n }\n return a.name.localeCompare(b.name);\n });\n const multiFloorZones = this.zonesPerSpace.filter(\n (zone) => zone.isMultipleFloorZone\n );\n // sort alphabetically\n multiFloorZones.sort((a, b) => a.name.localeCompare(b.name));\n // merge multiFloor and Floors\n this.floorsPerSpace = [...this.floorsPerSpace, ...multiFloorZones];\n if (this.floorsPerSpace.length === 1) {\n [this.selectedFloor] = this.floorsPerSpace;\n this.onFloorClick(false).catch((e) => console.log(e.message));\n }\n }\n } catch (error) {\n console.log('error onChosenLocation', error);\n }\n }\n\n onLocationClick() {\n this.clearData();\n this.sendUpdateLocationEvent();\n }\n\n async onFloorClick(emitEvent = true) {\n if (this.selectedFloor) {\n localStorage.setItem('floorId', this.selectedFloor.id);\n } else {\n localStorage.removeItem('floorId');\n }\n if (this.selectedFloor && this.selectedFloor.isMultipleFloorZone) {\n this.selectedZone = this.selectedFloor;\n this.onZoneClick().catch((e) => console.log(e.message));\n return;\n } else {\n this.onZoneClick().catch((e) => console.log(e.message));\n }\n this.sweepToGo = null;\n this.selectedZone = null;\n this.selectedChildZone = null;\n localStorage.removeItem('zoneId');\n localStorage.removeItem('childZoneId');\n if (this.selectedFloor === null) {\n this.navigatorService.navBarZoneIDChange.next(null);\n this.navigatorService.currentNavBarZoneID = null;\n return;\n }\n if (emitEvent) {\n this.navigatorService.navBarZoneIDChange.next(this.selectedFloor.id);\n }\n\n this.navigatorService.currentNavBarZoneID = this.selectedFloor.id;\n await waitUntil(\n () => this.zonesPerSpace !== null && this.zonesPerSpace !== undefined\n );\n this.zonesPerFloor = this.zonesPerSpace.filter(\n (zone) =>\n // zone.id === this.selectedFloor.id ||\n zone.parentID === this.selectedFloor.id\n );\n this.zonesPerFloor.sort((a, b) => {\n const Collator = new Intl.Collator(undefined, {\n numeric: true,\n sensitivity: 'accent',\n });\n return (\n Collator.compare(a.code_ref, b.code_ref) ||\n Collator.compare(a.name, b.name)\n );\n });\n }\n\n async onZoneClick() {\n this.selectedChildZone = null;\n localStorage.removeItem('childZoneId');\n if (this.selectedZone) {\n localStorage.setItem('zoneId', this.selectedZone.id);\n } else {\n localStorage.removeItem('zoneId');\n }\n if (this.selectedZone === null) {\n if (this.selectedFloor === null) {\n this.navigatorService.navBarZoneIDChange.next(null);\n this.navigatorService.currentNavBarZoneID = null;\n } else {\n this.navigatorService.navBarZoneIDChange.next(this.selectedFloor.id);\n this.navigatorService.currentNavBarZoneID = this.selectedFloor.id;\n }\n this.sendKinesisAnalyticsEventForZone(\n this.selectedZone?.id,\n this.selectedZone?.name\n ).catch((e) => console.log(e.message));\n return;\n }\n this.childrenZones = this.zonesPerSpace.filter(\n (zone) => zone.parentID === this.selectedZone.id\n );\n this.navigatorService.navBarZoneIDChange.next(this.selectedZone.id);\n this.navigatorService.currentNavBarZoneID = this.selectedZone.id;\n this.sendKinesisAnalyticsEventForZone(\n this.selectedZone?.id,\n this.selectedZone?.name\n ).catch((e) => console.log(e.message));\n }\n\n onChildZoneClick() {\n if (this.selectedChildZone) {\n localStorage.setItem('childZoneId', this.selectedChildZone?.id);\n } else {\n localStorage.removeItem('childZoneId');\n }\n }\n\n async sendKinesisAnalyticsEventForZone(\n zoneId: string,\n zoneName: string\n ): Promise<void> {\n this.awsKinesisAnalytics.getInstance().record(\n // @ts-ignore\n {\n data: {\n eventType: 'Zone Change',\n zoneId: zoneId,\n zoneName: zoneName,\n locationId: this.selectedLocation?.id,\n locationName: this.selectedLocation?.name,\n user: this.userService?.cu,\n timestamp: new Date(),\n floorId: this.selectedFloor?.id,\n childZoneId: this.selectedChildZone?.id,\n },\n streamName: 'smarterplanKinesis-analytics',\n // partitionKey: \"\",\n },\n 'AWSKinesis'\n );\n }\n\n async onVisitClick(event) {\n this.clearData(false);\n const index = event.target.value;\n const visit = this.visitsPerSpace[index];\n this.selectedModel3d = visit.model3d;\n const parentZoneForVisit = await this.visitService.getDefaultZoneForVisit(\n visit\n );\n this.floorsPerSpace = this.zonesPerSpace.filter(\n (zone) =>\n zone.layer &&\n zone.layer.name.includes('FLOOR') &&\n zone.parentID === parentZoneForVisit.id\n );\n }\n\n async goTo() {\n if (this.selectedZone && !this.selectedZone.virtual) {\n this.sweepToGo = this.selectedZone.startSweepID\n ? this.selectedZone.startSweepID\n : this.selectedZone.sweepIDs[0];\n }\n if (this.selectedFloor && !this.selectedZone) {\n this.floorToGo = this.selectedFloor;\n }\n if (this.isWithinSameVisit()) {\n this.goToSweepOrFloor();\n } else {\n if (this.sweepToGo) {\n this.viewerService.setSweepToMove(this.sweepToGo);\n }\n if (this.floorToGo && this.floorsPerSpace.length !== 1) {\n this.navigatorService.floorToGo = this.floorToGo;\n }\n this.router\n .navigate(['visit', this.selectedLocation.id], {\n queryParams: { model3D: this.selectedModel3d },\n })\n .catch((e) => console.log(e.message));\n }\n }\n\n isWithinSameVisit(): boolean {\n return (\n this.currentLocationID === this.selectedLocation.id &&\n this.selectedModel3d === this.currentModel3d\n );\n }\n\n goToSweepOrFloor() {\n if (this.sweepToGo) {\n this.navigatorService.goToSweepWithRotation(this.sweepToGo);\n }\n if (this.floorToGo) {\n this.navigatorService.goToFloor(this.floorToGo);\n }\n }\n\n // hasHistory(): boolean {\n // return this.navigatorService.modelHasHistory(this.selectedModel3d);\n // }\n\n canGo(): boolean {\n const viewerIsReady =\n this.viewerService.isLoaded && this.viewerService.showingViewer;\n const noViewer = !this.viewerService.showingViewer;\n return viewerIsReady || noViewer;\n }\n\n showLocation(): string {\n if (\n window.innerWidth < 750 &&\n this.navbarSelectMenu &&\n this.navbarSelectMenu.nativeElement.className.search('show') === -1 &&\n this.selectedLocation\n ) {\n return this.selectedLocation.name;\n }\n return '';\n }\n}\n","<nav class=\"navbar navbar-expand-md navbar-dark navbar-inverse second-nav\">\n <div class=\"d-flex col-12\">\n <div #navbarSelectMenu class=\"collapse navbar-collapse\" id=\"nav-item-container-blue\">\n <div class=\"d-flex flex-column flex-md-row \">\n <select class=\"form-control flex-fill location select-menu\" [(ngModel)]=\"selectedLocation\"\n (ngModelChange)=\"onLocationClick()\">\n <option [ngValue]=\"null\" selected>{{ 'Location' | translate }}</option>\n <option *ngFor=\"let loc of locations; index as index\" [ngValue]=\"loc\"> {{ loc.name }}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" (change)=\"onVisitClick($event)\"\n *ngIf=\"visitsPerSpace && visitsPerSpace.length > 1\">\n <option value=\"default\" selected disabled hidden>{{'Visit' | translate}}</option>\n <option *ngFor=\"let visit of visitsPerSpace; index as index\" value=\"{{index}}\">{{ visit.name}}\n </option>\n </select>\n <select class=\"form-control flex-fill floor select-menu\" [(ngModel)]=\"selectedFloor\"\n (ngModelChange)=\"onFloorClick()\">\n <option [ngValue]=\"null\" selected>{{'Floor' | translate}}</option>\n <option *ngFor=\"let floor of floorsPerSpace\" [ngValue]=\"floor\">{{ floor.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu zone\" [(ngModel)]=\"selectedZone\"\n (ngModelChange)=\"onZoneClick()\">\n <option [ngValue]=\"null\" selected>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of zonesPerFloor\" [ngValue]=\"zone\"><span\n *ngIf=\"zone.code_ref\">{{zone.code_ref}}_</span>{{zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" [(ngModel)]=\"selectedChildZone\"\n *ngIf=\"childrenZones && childrenZones.length>0\" (ngModelChange)=\"onChildZoneClick()\">\n <option [ngValue]=\"null\" selected disabled>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of childrenZones\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <!-- <select class=\"form-control flex-fill\">\n <option i18n>{{'Favorites' | translate}}</option>\n </select> -->\n </div>\n <div class=\"row\" style=\"margin-left: 0;\">\n <div class=\"outer_circle\">\n <button id='btn-icon' [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\"\n (click)=\"goTo()\"></button>\n </div>\n <button (click)=\"goTo()\" class=\"btn rounded-pill btn-3d\"\n [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\">{{'3D visit' | translate}}</button>\n </div>\n </div>\n\n <h4 style=\"line-height: 29px;margin: 0;\" *ngIf=\"showLocation()\">\n {{ showLocation() }}\n </h4>\n </div>\n</nav>","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { LocaleService } from '../../services/locale.service';\nimport { NavigatorService } from '../../services/navigator.service';\nimport { SupportService } from '../../services/support.service';\nimport { BaseUserService } from '../../services/user.service';\nimport { ProfileEntity, Mission } from '../../types.service';\nimport { SupportModalComponent } from '../support-modal/support-modal.component';\n\n@Component({\n selector: 'lib-menu-bar',\n templateUrl: './menu-bar.component.html',\n styleUrls: ['./menu-bar.component.scss']\n})\nexport class MenuBarComponent implements OnInit {\n\n user: ProfileEntity;\n\n mission: Mission;\n\n isVisitor = true;\n\n isVisible = false;\n\n isManager: boolean;\n\n userSubscription: Subscription;\n\n navSubscription: Subscription;\n\n constructor(\n private router: Router,\n public localeService: LocaleService,\n private userService: BaseUserService,\n private navigatorService: NavigatorService,\n private supportService: SupportService,\n ) {\n this.userSubscription = this.userService.isChanged.subscribe(\n (isChanged) => {\n if (isChanged) {\n this.update();\n }\n },\n );\n this.navSubscription = this.navigatorService.isVisibleChanged.subscribe(\n (data) => {\n this.isVisible = data;\n },\n );\n }\n\n ngOnInit() {\n this.update();\n }\n\n ngAfterViewInit() {\n const input = document.querySelector(\n \"#mainSearchBar\",\n ) as HTMLInputElement;\n if (input) {\n input.addEventListener(\"keydown\", ({ key }) => {\n if (key === \"Enter\") {\n this.onSubmit();\n }\n });\n }\n }\n\n ngOnDestroy() {\n if (this.userSubscription) {\n this.userSubscription.unsubscribe();\n }\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n }\n }\n\n async signOut() {\n await this.userService.logoutCurrentAndSignOutAuth();\n this.router.navigate([\"auth\"]);\n }\n\n async update() {\n this.user = this.userService.cu;\n this.mission = this.userService.currentMissions[0];\n this.isManager = this.userService.hasManagerRoleInAnyMission();\n this.isVisitor = this.userService.isVisitor();\n if (!this.isVisitor) {\n this.isVisible = true;\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n onSubmit() {\n const input = document.querySelector(\n \"#mainSearchBar\",\n ) as HTMLInputElement;\n const searchValue = input.value.toLowerCase();\n if (searchValue !== \"\") {\n const baseUrl = location.origin;\n window.open(\n `${baseUrl}/dashboard/search?term=${searchValue}`,\n \"_blank\",\n );\n }\n }\n\n onToggleVisible() {\n this.isVisible = !this.isVisible;\n }\n\n openSupportForm() {\n this.supportService.openSupportForm(SupportModalComponent);\n }\n\n}\n","<div id=\"menu-bar\">\n <div *ngIf=\"!isVisitor\">\n <nav class=\"navbar navbar-expand-md navbar-light p-0\">\n <div class=\"container-fluid\" *ngIf=\"isVisible\">\n <div class=\"navbar-brand\" [routerLink]=\"['/dashboard']\">\n <img alt=\"\" src=\"../assets/images/logos/logo-rvb-straight.png\">\n </div>\n <!-- <button class=\"navbar-toggler\" data-bs-target=\".navbar-collapse\" data-bs-toggle=\"collapse\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button> -->\n <div class=\"collapse navbar-collapse\">\n <form class=\"form-inline ms-3\">\n <input class=\"form-control search-button\" placeholder=\"keyword\" id=\"mainSearchBar\" type=\"text\">\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSubmit()\">{{'Search' |\n translate}}</button>\n <lib-range-date-picker cacheName=\"mainDate\"></lib-range-date-picker>\n </form>\n <div class=\"ms-auto nav-item dropdown\">\n <div class=\"profile_pic dropdown-toggle\" data-testid=\"dropdown-menu-button\" data-bs-toggle=\"dropdown\">\n <lib-avatar></lib-avatar>\n </div>\n <div class=\"dropdown-menu dropdown-menu-right\">\n <p *ngIf=\"user && mission\" class=\"p-2\">\n <span class=\"username\">{{ user.displayName }}</span><br />\n <span class=\"user-role\">{{ mission.role }}</span><br />\n <span class=\"org\">{{ mission.organisation ? mission.organisation.name : \"No organisation\" |\n translate}}</span>\n </p>\n <div class=\"dropdown-divider\"></div>\n <!-- <a class=\"dropdown-item\" routerLink=\"/debug\" *ngIf=\"isManager\">Debug</a> -->\n <a class=\"dropdown-item\" (click)=\"localeService.modal()\">{{'Language' | translate}}</a>\n <a class=\"dropdown-item\" routerLink=\"/dashboard\">{{'Data management' | translate}}</a>\n <a class=\"dropdown-item\" data-testid=\"user-management-btn\" routerLink=\"/admin\" *ngIf=\"isManager\">\n {{'Users management' | translate}}</a>\n <a class=\"dropdown-item\" routerLink=\"/profile\">\n {{'Profile' | translate}}</a>\n <div class=\"dropdown-divider\"></div>\n <button class=\"dropdown-item\" (click)=\"openSupportForm()\">{{\"Help\" | translate}}</button>\n <button data-testid=\"logout-auth-btn\" class=\"dropdown-item\" (click)=\"signOut()\">{{\"Logout\" |\n translate}}</button>\n </div>\n </div>\n </div>\n </div>\n </nav>\n <lib-navigation-bar *ngIf=\"isVisible\"></lib-navigation-bar>\n </div>\n <div *ngIf=\"isVisitor && isVisible\">\n <div class=\"visitor-div\">\n <div class=\"logo-container\" data-testid=\"dropdown-menu-button\">\n <img class=\"img-logo\" alt=\"SmarterPlanLogo\" src=\"../assets/images/logos/logo-reserve.png\">\n </div>\n <div class=\"avatar-container-menu\">\n <div class=\"profile_pic dropdown-toggle\" data-bs-toggle=\"dropdown\">\n <lib-avatar></lib-avatar>\n </div>\n <div class=\"dropdown-menu dropdown-menu-right\">\n <button class=\"dropdown-item\" (click)=\"localeService.modal()\">{{'Language' | translate}}</button>\n <button class=\"dropdown-item\" (click)=\"openSupportForm()\">{{\"Help\" | translate}}</button>\n <button data-testid=\"logout-auth-btn\" class=\"dropdown-item\" (click)=\"signOut()\">{{\"Logout\" |\n translate}}</button>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CsvExportComponent } from './components/csv-export/csv-export.component';\nimport { SearchBarComponent } from './components/search-bar/search-bar.component';\nimport { Config } from './config';\nimport { DurationToStringPipe } from './pipes/duration-to-string.pipe';\nimport { HashtagFromIdPipe } from './pipes/hashtag-from-id.pipe';\nimport { SafeUrlPipe } from './pipes/safe-url.pipe';\nimport { TimeDateToLocalStringPipe } from './pipes/time-date-to-local-string.pipe';\nimport { ModalSwitchVisitComponent } from './components/modal-switch-visit/modal-switch-visit.component';\nimport { UsernameFromIdPipe } from './pipes/username-from-id.pipe';\nimport { MenuBarComponent } from './components/menu-bar/menu-bar.component';\nimport { AvatarComponent } from './components/menu-bar/avatar/avatar.component';\nimport { NavigationBarComponent } from './components/menu-bar/navigation-bar/navigation-bar.component';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { RangeDatePickerComponent } from './components/menu-bar/range-date-picker/range-date-picker.component';\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\nimport { LoaderComponent } from './components/loader/loader.component';\nimport { SupportModalComponent } from './components/support-modal/support-modal.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FormatDateNumberToDigitsPipe } from './pipes/format-date-number-to-digits.pipe';\n@NgModule({\n declarations: [\n TimeDateToLocalStringPipe,\n SafeUrlPipe,\n HashtagFromIdPipe,\n DurationToStringPipe,\n CsvExportComponent,\n SearchBarComponent,\n UsernameFromIdPipe,\n ModalSwitchVisitComponent,\n MenuBarComponent,\n AvatarComponent,\n NavigationBarComponent,\n RangeDatePickerComponent,\n LoaderComponent,\n SupportModalComponent,\n FormatDateNumberToDigitsPipe\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n RouterModule,\n NgbModule,\n TranslateModule.forChild({\n extend: true\n })\n ],\n exports: [\n CsvExportComponent,\n SearchBarComponent,\n TimeDateToLocalStringPipe,\n SafeUrlPipe,\n HashtagFromIdPipe,\n DurationToStringPipe,\n UsernameFromIdPipe,\n MenuBarComponent,\n LoaderComponent,\n SupportModalComponent,\n AvatarComponent,\n ]\n})\nexport class NgxSmarterplanCoreModule {\n public static forRoot(config: Config): ModuleWithProviders<NgxSmarterplanCoreModule> {\n return {\n ngModule: NgxSmarterplanCoreModule,\n providers: [\n {\n provide: 'config',\n useValue: config\n }\n ]\n };\n }\n}\n","/* eslint-disable no-case-declarations */\n/* eslint-disable class-methods-use-this */\nimport { Injectable } from '@angular/core';\nimport {\n Comment,\n DbObjectType,\n Equipment,\n Feature,\n POI,\n PoiType,\n TagAction,\n Ticket,\n CommentType,\n} from '../types.service';\n\n@Injectable({\n providedIn: 'root', \n})\n\nexport class BaseTagService {\n constructor() {}\n\n async getHtmlToInject(\n tagType: PoiType,\n object: DbObjectType\n ): Promise<string> {\n throw new Error(`getHtmlToInject is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n getUrlForSeeDetails(object: DbObjectType, tagType: PoiType): string {\n switch (tagType) {\n case PoiType.TICKET: {\n return `visit/${object.spaceID}/detail/${object.id}`;\n }\n case PoiType.EQUIPMENT: {\n return `visit/${object.spaceID}/equip/${object.id}`;\n }\n case PoiType.MEASURE: {\n return `visit/${object.spaceID}/measurement/${object.id}`;\n }\n case PoiType.DATA: {\n return `visit/${object.spaceID}/feature/${object.id}`;\n }\n case PoiType.DESK: {\n return `visit/${object.spaceID}/add_booking/${object.id}`;\n }\n default:\n return '';\n }\n }\n\n async prepareEquipmentHtml(equip: Equipment): Promise<string> {\n throw new Error(`prepareEquipmentHtml is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n async prepareTicketHtml(ticket: Ticket): Promise<string> {\n throw new Error(`prepareTicketHtml is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n async prepareFeatureHtml(feature: Feature): Promise<string> {\n throw new Error(`prepareFeatureHtml is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n async prepareMeasurementHtml(measure: Comment): Promise<string> {\n throw new Error(`prepareMeasurementHtml is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n async prepareDeskHtml(feature: Feature): Promise<string> {\n throw new Error(`prepareDeskHtml is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n async prepareIndicatorHtml(feature: Feature): Promise<string> {\n throw new Error(`prepareDeskHtml is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n async getSignedTagIconSource(tagIconSrc: string): Promise<string | null> {\n throw new Error(\n `getSignedTagIconSource is not implemented in the base class.`\n );\n }\n\n getIconTagImageForFeature(feature: DbObjectType, poi: POI): string {\n // const tagIcon = JSON.parse(poi.tagIcon);\n // return tagIcon.src;\n throw new Error(`getIconTagImageForFeature is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n getScriptForTag(object, tagType: PoiType): string {\n throw new Error(`getScriptForTag is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n getAnnexeForCommentTypeInFeature(\n feature: Feature,\n commentType: CommentType\n ): string {\n throw new Error(`getAnnexeForCommentTypeInFeature is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n getBillboardMediaToEmbed(object: DbObjectType): {\n comment: Comment;\n tagDescription: string;\n } {\n throw new Error(`getBillboardMediaToEmbed is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n onActionDetailClick(url: string) {\n throw new Error(`onActionDetailClick is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n onActionAudioClick(audioCommentID: string) {\n throw new Error(`onActionDetailClick is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n onActionVideoClick(url: string) {\n throw new Error(`onActionVideoClick is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n onActionImageClick(imageCommentID: string) {\n throw new Error(`onActionImageClick is not implemented in the base class.\n Please override this method in your extended class.`);\n }\n\n onActionDocClick(url: string) {\n throw new Error(`onActionDocClick is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n onActionYoutubeClick(url: string) {\n throw new Error(`onActionYoutubeClick is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n}\n","import { Injectable } from \"@angular/core\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class BaseLateralTabService {\n activeTab = \"tickets\";\n\n firstLoad = true;\n\n constructor() { }\n\n storeTabHistory(tab: string) {\n this.activeTab = tab;\n }\n\n getTabHistory(): string {\n // throw new Error(\"Method 'getTabHistory' not implemented.\");\n return this.activeTab;\n }\n}\n","import { Injectable, Inject } from \"@angular/core\";\nimport { Layer } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class LayerService {\n API: any; //AWS\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async getLayerForOrganisation(orgID: string): Promise<Layer[]> {\n return this.API.__proto__.LayersByOrganisation(orgID).then((list) => list.items);\n }\n\n async createLayerForOrganisation(\n layerName: string,\n orgID: string,\n ): Promise<Layer> {\n return this.API.__proto__.CreateLayer({\n name: layerName.toUpperCase(),\n organisationID: orgID,\n });\n }\n\n async getLayerByNameForOrganisation(layerName: string, orgID: string) {\n return this.API.__proto__.LayersByOrganisation(orgID, null, {\n name: { eq: layerName.toUpperCase() },\n }).then((list) => list.items);\n }\n}","import { Injectable } from '@angular/core';\nimport { catchError, Subject } from 'rxjs';\nimport { removeNullKeysFromObject, wait, waitUntil } from '../helpers.service';\nimport {\n LevelStatus,\n Layer,\n Node,\n Zone,\n Navigation,\n Plan,\n} from '../types.service';\nimport { LayerService } from './models/layer.service';\nimport { NavigationService } from './models/navigation.service';\nimport { PlanService } from './models/plan.service';\nimport { ZoneService } from './models/zone.service';\nimport {\n uploadJsonToS3,\n uploadBase64Image,\n removeAllFilesFromFolderS3,\n} from './s3.service';\nimport { BaseUserService } from './user.service';\nimport { ViewerService } from './viewer.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MatterportImportService {\n private currentFrame;\n\n public sdk: any;\n\n private sweeps: Object;\n\n public floors: Object;\n\n private currentFloor;\n\n private _modelID: string;\n\n private _spaceID: string;\n\n public get spaceID(): string {\n return this._spaceID;\n }\n\n public set spaceID(value: string) {\n this._spaceID = value;\n }\n\n public get modelID(): string {\n return this._modelID;\n }\n\n public set modelID(value: string) {\n this._modelID = value;\n }\n\n public stop = false;\n\n public importingImages: Subject<boolean> = new Subject<boolean>();\n\n public sweepProcessedCount: Subject<number> = new Subject<number>();\n\n public totalSweepsCount: Subject<number> = new Subject<number>();\n\n private MAX_SCANS_RELOAD = 100;\n\n constructor(\n private navigationService: NavigationService,\n private zoneService: ZoneService,\n private viewerService: ViewerService,\n private layerService: LayerService,\n private userService: BaseUserService,\n private planService: PlanService\n ) {}\n\n async initSdkForModel(modelID: string): Promise<boolean> {\n this.stop = false;\n\n // Load SDK\n console.log('Loading Matterport SDK');\n this.modelID = modelID;\n const iframe = document.createElement('iframe');\n if (!iframe) {\n throw new Error('Cannot create iframe');\n }\n this.viewerService.setTourUrl(modelID);\n const url = this.viewerService.getTourUrl();\n iframe.setAttribute('src', url);\n iframe.allow = 'xr-spatial-tracking';\n iframe.height = '100%';\n iframe.width = '100%';\n iframe.id = 'viewer-module';\n const element = document.querySelector('#viewer-frame');\n element.append(iframe);\n this.currentFrame = iframe;\n try {\n // @ts-ignore\n this.sdk = await window.MP_SDK.connect(\n iframe,\n 'qn9wsasuy5h2fzrbrn1nzr0id',\n '3.11'\n );\n // Subscribe to Floor data\n this.sdk.Floor.data.subscribe({\n onCollectionUpdated: function upd(collection: any) {\n // console.log(\"Floors\", collection);\n this.floors = collection;\n }.bind(this),\n });\n // Subscribe to current Floor\n this.sdk.Floor.current.subscribe(\n function upd(currentFloor) {\n this.currentFloor = currentFloor;\n }.bind(this)\n );\n\n // Subscribe to Sweep data\n this.sdk.Sweep.data.subscribe({\n onCollectionUpdated: function upd(collection) {\n console.log('the entire up-to-date collection', collection);\n this.sweeps = collection;\n }.bind(this),\n });\n // remove labels\n await this.sdk.Settings.update('labels', false);\n let timeoutExpired = false;\n // start timeout\n setTimeout(() => (timeoutExpired = true), 7000);\n await waitUntil(\n () =>\n (this.sweeps !== undefined && this.floors !== undefined) ||\n timeoutExpired === true\n );\n if (timeoutExpired) {\n // we are likely in matterport error case (that we cannot catch!)\n console.log('timeout intitialising Matterport');\n throw new Error('error init Matterport');\n }\n console.log('init done');\n return true;\n } catch (e) {\n console.error(e);\n throw new Error('error init Matterport');\n }\n }\n\n async importData(\n spaceID: string,\n surface: number,\n reloading: boolean = false,\n node: Node = null\n ): Promise<boolean> {\n if (!this.sweeps) {\n return Promise.reject(new Error('no sweeps initialized'));\n }\n let appIsLoaded = false;\n this.sdk.App.state.subscribe(function (appState) {\n // app state has changed\n console.log('The current phase: ', appState.phase);\n if (appState.phase === 'appphase.playing') {\n console.log('The app is playing');\n appIsLoaded = true;\n }\n });\n await waitUntil(() => appIsLoaded === true);\n if (reloading) {\n // perform only 360 import since we are reloading\n await this.import360images();\n return Promise.resolve(true);\n }\n this.cleanLocalStorage(); // we are importing new visit\n this.spaceID = spaceID;\n let floorZones: Zone[] = [];\n const zones = await this.zoneService.getZonesBySpace(spaceID);\n const mainZone = zones.find((z) => !z.parentID);\n if (!mainZone) {\n return Promise.reject(new Error('missing data (no main Building Zone)'));\n }\n console.log('importing data from matterport');\n // save sweeps data as json\n const json = JSON.stringify(Object.values(this.sweeps));\n await uploadJsonToS3(\n `visits/${this.modelID}/inventory/`,\n json,\n 'data.json'\n );\n // check layer of building type\n const layerBuilding = await this.getLayerByName('BUILDING');\n const createdDefaultZone = await this.createZone(\n node.metadata,\n layerBuilding.id,\n surface,\n mainZone.id,\n Object.keys(this.sweeps),\n node\n );\n if (!createdDefaultZone) {\n return Promise.resolve(false);\n }\n if (this.floors) {\n floorZones = await this.importFloorData(createdDefaultZone.id, node);\n }\n // console.log(floorZones);\n await Promise.all(\n Object.keys(this.sweeps).map(async (key) => {\n const sweepInfo = this.sweeps[key];\n const navigationInput = {\n matterportSweepID: sweepInfo.uuid,\n position: JSON.stringify(sweepInfo.position),\n rotation: JSON.stringify(sweepInfo.rotation),\n level: LevelStatus.LOW,\n nodeID: node.id,\n spaceID,\n } as Navigation;\n const nav = await this.navigationService.createNavigation(\n navigationInput\n );\n if (!nav) {\n console.log('could create navigation', navigationInput.id);\n }\n })\n );\n await this.import360images();\n return Promise.resolve(true);\n }\n\n async createZone(\n name: string,\n layerID: string,\n surface: number = null,\n parentID: string = null,\n sweeps: string[] = [],\n node: Node = null,\n metadata: string = null\n ): Promise<Zone> {\n const zoneInput = {\n name,\n spaceID: this.spaceID,\n layerID,\n sweepIDs: sweeps,\n nodeIDs: node ? [node.id] : null,\n } as Zone;\n removeNullKeysFromObject(zoneInput);\n if (surface) {\n zoneInput.surface = surface;\n }\n if (parentID) {\n zoneInput.parentID = parentID;\n }\n if (metadata) {\n zoneInput.metadata = metadata;\n }\n const newLocal = await this.zoneService.create(zoneInput);\n return newLocal;\n }\n\n async import360images(): Promise<boolean> {\n console.log('Importing 360 images');\n this.importingImages.next(true);\n return new Promise(async (resolve) => {\n const scans = Object.values(this.sweeps);\n let maxScan;\n let indexScan;\n const nmbScans = Object.keys(scans).length;\n console.log('Total number of scan points :', nmbScans);\n this.totalSweepsCount.next(nmbScans);\n // check if we started to load images already\n if (localStorage.getItem('indexScanLoad')) {\n console.log(\n 'retaking import from scan',\n localStorage.getItem('indexScanLoad')\n );\n indexScan = +localStorage.getItem('indexScanLoad');\n nmbScans < indexScan + this.MAX_SCANS_RELOAD\n ? (maxScan = nmbScans)\n : (maxScan = indexScan + this.MAX_SCANS_RELOAD);\n } else {\n indexScan = 0;\n nmbScans < this.MAX_SCANS_RELOAD\n ? (maxScan = nmbScans)\n : (maxScan = this.MAX_SCANS_RELOAD);\n maxScan;\n }\n\n for (let index = indexScan; index < maxScan; index += 1) {\n if (!this.stop) {\n await this.sdk.Sweep.moveTo(scans[index].uuid);\n await this.sdk.Camera.setRotation({\n x: 0,\n y: 0,\n });\n const img = await this.sdk.Renderer.takeEquirectangular(\n { width: 2048, height: 1024 },\n { mattertags: false, sweeps: true }\n );\n await uploadBase64Image(\n img,\n scans[index].uuid,\n `visits/${this.modelID}/sweeps/`,\n 'sweep'\n );\n this.sweepProcessedCount.next(index);\n localStorage.setItem('indexScanLoad', index.toString());\n } else {\n console.log('Abandoning import because it was cancelled');\n resolve(false);\n break;\n }\n }\n if (maxScan === nmbScans) {\n console.log('Import 360 done');\n this.cleanLocalStorage();\n this.removeFrame();\n this.stop = true;\n resolve(true);\n } else if (!this.stop) {\n // to restart the procedure from where we left of\n localStorage.setItem('indexScanLoad', maxScan.toString());\n localStorage.setItem('visitInImport', this.modelID);\n this.removeFrame();\n window.location.reload();\n }\n });\n }\n\n async moveToFloor(floorName: string, matterportFloorSequence: number = null) {\n if (!this.floors) {\n console.log('Floor are not loaded yet');\n return;\n }\n // look up for sequence number (the safest method)\n let floorMatterport = Object.values(this.floors).find(\n (floor) => floor.sequence === matterportFloorSequence\n );\n if (!floorMatterport) {\n floorMatterport = Object.values(this.floors).find(\n (floor) => floorName.includes(floor.name) && floor.name != ''\n );\n }\n if (!floorMatterport) {\n floorMatterport = Object.values(this.floors).find((floor) =>\n floorName.includes(floor.id)\n );\n }\n // console.log(floorMatterport)\n if (floorMatterport) {\n let retry = true;\n while (retry) {\n try {\n const floorIndex = await this.sdk.Floor.moveTo(\n floorMatterport.sequence\n );\n // console.log(\"moved to floorIndex\", floorIndex);\n retry = false;\n } catch (error) {\n console.log('Cannot move to Floor', error);\n await wait(100);\n }\n }\n } else {\n console.warn('No matterport floor found to move to');\n }\n }\n\n public async importFloorData(\n defautZoneID: string,\n node: Node\n ): Promise<Zone[]> {\n const zones = [];\n await this.sdk.Mode.moveTo(this.sdk.Mode.Mode.FLOORPLAN);\n const nmbFloors = Object.keys(this.floors).length;\n console.log('Total number of floors', nmbFloors);\n for (let index = 0; index < nmbFloors; index += 1) {\n // eslint-disable-next-line no-await-in-loop\n console.log('Importing floor', index);\n await this.sdk.Floor.moveTo(index).then(async () => {\n await wait(700);\n // console.log(\"about to save the floor\", index);\n const zone = await this.saveFloor(defautZoneID, node);\n // console.log(\"received floor zone\", zone);\n zones.push(zone);\n });\n }\n return Promise.resolve(zones);\n }\n\n private async saveFloor(defautZoneID: string, node: Node): Promise<Zone> {\n let name = this.currentFloor.id;\n if (this.currentFloor.name !== '') {\n name = this.currentFloor.name;\n }\n const layerFloor = await this.getLayerByName('FLOOR');\n const sweepsInfo = Object.values(this.sweeps);\n const sweepsForFloor = sweepsInfo.filter(\n (sweepInfo) => sweepInfo.floorInfo.id === this.currentFloor.id\n );\n console.log('current floor', this.currentFloor);\n console.log('sweeps for floor', sweepsForFloor.length);\n const sweepIDs: string[] = sweepsForFloor.map((sweep) => sweep.uuid);\n const zone = await this.createZone(\n `Étage ${name} - ${node.metadata}`,\n layerFloor.id,\n null,\n defautZoneID,\n sweepIDs,\n node,\n JSON.stringify({ matterportFloorSequence: this.currentFloor.sequence })\n );\n // TODO link to scans\n const base64 = await this.sdk.Renderer.takeScreenShot({\n width: 4096,\n height: 2048,\n });\n const spaceIDshort = this.spaceID.slice(0, 8);\n await uploadBase64Image(\n base64,\n null,\n `visits/${this.modelID}/plans/`,\n `plan_floor_${this.currentFloor.id}_${spaceIDshort}`\n );\n // create Plan object\n const plan = {\n name: `plan_floor_${this.currentFloor.id}`,\n annexe: `visits/${this.modelID}/plans/plan_floor_${this.currentFloor.id}_${spaceIDshort}.jpeg`,\n zoneID: zone.id,\n spaceID: this.spaceID,\n isCurrentForZone: true,\n isModified: false,\n isImportedMatterport: true,\n } as Plan;\n await this.planService.createPlan(plan);\n // console.log(\"floor saved\");\n return Promise.resolve(zone);\n }\n\n abandon() {\n setTimeout(() => {\n console.log('abandonning import');\n localStorage.removeItem('visitInImport');\n this.stop = true;\n this.removeFrame();\n }, 500);\n }\n\n removeFrame() {\n if (this.currentFrame) {\n this.currentFrame.remove();\n }\n }\n\n cleanLocalStorage() {\n localStorage.removeItem('indexScanLoad');\n localStorage.removeItem('visitInImport');\n }\n\n async getLayerByName(name: string): Promise<Layer> {\n const mission = this.userService.currentMission(this.spaceID);\n const currentOrgId = mission.organisationID;\n const layers = await this.layerService.getLayerByNameForOrganisation(\n name,\n currentOrgId\n );\n if (layers.length > 0) {\n return layers[0];\n }\n // create then\n return this.layerService.createLayerForOrganisation(name, currentOrgId);\n }\n}\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 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}\r\n","/* eslint-disable class-methods-use-this */\nimport { Inject, Injectable } from \"@angular/core\";\nimport { Organisation, Property } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class OrganisationService {\n smarterPlanID = \"6e28201f-4679-4c29-9d2d-8a325f57cee9\";\n API: any; //AWS APIService\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async getPropertiesForOrganisation(\n orgID: string,\n ): Promise<Array<Property>> {\n const org = await this.API.__proto__.GetOrganisation({ id: orgID });\n if (org) {\n return org.properties.items;\n }\n return [];\n }\n\n async getOrganisationByToken(token: string): Promise<Organisation> {\n const orgs = await this.API.__proto__.OrganisationsByToken(token);\n if (orgs.items.length > 0) {\n const org = orgs.items[0];\n return this.tokenIsExpiredForOrg(org) ? null : org;\n }\n return null;\n }\n\n tokenIsExpiredForOrg(org: Organisation): boolean {\n const expirationDate = new Date(org.tokenExpiresAt);\n const diffTime = expirationDate.getTime() - Date.now();\n return diffTime < 0;\n }\n\n async softDeteleOrg(orgID: string): Promise<Organisation> {\n return this.API.__proto__.UpdateOrganisation({\n id: orgID,\n deletedAt: Date.now(),\n });\n }\n\n async updateOrganisation(input: any): Promise<Organisation> {\n return this.API.__proto__.UpdateOrganisation(input);\n }\n\n async deleteOrganisation(orgID: string): Promise<Organisation> {\n return this.API.__proto__.DeleteOrganisation({ id: orgID });\n }\n\n async createOrganisation(input: Organisation): Promise<Organisation> {\n return this.API.__proto__.CreateOrganisation(input);\n }\n\n async getOrganisation(orgID: string): Promise<Organisation> {\n return this.API.__proto__.GetOrganisation({ id: orgID });\n }\n\n async listOrganisations(): Promise<Organisation[]> {\n return this.API.__proto__.ListOrganisations().then((orgs) => orgs.items);\n }\n\n async getOrganisationForSpace(spaceID: string): Promise<Organisation> {\n const properties = await this.API.__proto__.ListProperties({\n spaceID: { eq: spaceID },\n });\n let orgs = properties.items.map((property) => property.organisation);\n if (orgs.length === 1) {\n return orgs[0];\n }\n orgs = orgs.filter((org) => org.id !== this.smarterPlanID);\n return orgs.length > 0 ? orgs[0] : null;\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { filterUniqueArrayByID } from \"../../helpers.service\";\nimport { Domain, DomainType } from \"../../types.service\";\n@Injectable({\n providedIn: \"root\",\n})\nexport class DomainService {\n API: any; //AWS\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async getGenericDomainsAndForOrganisation(\n organisationID: string,\n ): Promise<any | void> {\n return this.API.__proto__.ListDomains().then((domains) => {\n return domains.items.filter((dom) => {\n return (\n dom.organisationID === organisationID || !dom.organisationID\n );\n });\n });\n }\n\n async getGenericDomainsAndForOrgAndOrderedOrg(\n orgID: string,\n orderedOrgID: string = null,\n ): Promise<Domain[]> {\n // TODO: Change this (UUID can change depending on DB)\n if (orgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\") {\n // I am SmarterPlan, i can see all\n return this.API.__proto__.ListDomains().then((response) => response.items);\n }\n const currentOrgDomains =\n await this.getGenericDomainsAndForOrganisation(orgID);\n if (!orderedOrgID || orgID === orderedOrgID) {\n return currentOrgDomains;\n }\n const orderedOrgDomains =\n await this.getGenericDomainsAndForOrganisation(orderedOrgID);\n const merged = [...currentOrgDomains, ...orderedOrgDomains];\n return filterUniqueArrayByID(merged);\n }\n\n async getDomainsForOrgExcludingTypes(\n types: DomainType[],\n organisationID: string,\n ): Promise<Domain[]> {\n return this.getGenericDomainsAndForOrganisation(organisationID).then(\n (domains) => {\n return domains.filter((dom) => !types.includes(dom.type));\n },\n );\n }\n\n async getDomain(id: string): Promise<Domain> {\n return this.API.__proto__.GetDomain(id);\n }\n\n async updateDomain(input: any): Promise<Domain> {\n return this.API.__proto__.UpdateDomain(input);\n }\n\n async deleteDomain(id: string): Promise<Domain> {\n return this.API.__proto__.DeleteDomain({ id });\n }\n\n async getRootDomains(orgID: string): Promise<Domain[]> {\n const allDomains = await this.getGenericDomainsAndForOrganisation(\n orgID,\n );\n const root = allDomains.filter((dom) => !dom.parentID);\n return root.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n async createDomain(input: Domain): Promise<Domain> {\n return this.API.__proto__.CreateDomain(input);\n }\n\n async getDomainsForOrgForType(\n type: DomainType,\n organisationID: string,\n orderedOrg: string = null,\n ): Promise<Domain[]> {\n return this.getGenericDomainsAndForOrgAndOrderedOrg(\n organisationID,\n orderedOrg,\n ).then((domains) => {\n return domains.filter((dom) => dom.type === type);\n });\n }\n\n async getParentDomainsForOrgAndOrderedOrgForType(\n type: DomainType,\n organisationID: string,\n orderedOrg: string = null,\n ): Promise<Domain[]> {\n return this.getGenericDomainsAndForOrgAndOrderedOrg(\n organisationID,\n orderedOrg,\n ).then((domains) => {\n return domains.filter((dom) => dom.type === type && !dom.parentID);\n });\n }\n\n async getDomainsForMissionsForOrg(orgID: string): Promise<Domain[]> {\n const domains = await this.getDomainsForOrgExcludingTypes(\n [DomainType.BOOKING, DomainType.FEATURE, DomainType.MISSION],\n orgID,\n );\n return domains.filter((dom) => !dom.parentID);\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { VisitTemplate } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class TemplateService {\n API: any; //AWS\n\n constructor(\n @Inject('currentAPIService') apiInjected: any\n ) {\n this.API = apiInjected;\n }\n\n // --CRUD---\n async create(template: VisitTemplate): Promise<VisitTemplate> {\n return this.API.__proto__.CreateVisitTemplate(template);\n }\n\n async update(template: any): Promise<VisitTemplate> {\n return this.API.__proto__.UpdateVisitTemplate(template);\n }\n\n async detele(templateID: string): Promise<VisitTemplate> {\n return this.API.__proto__.DeleteVisitTemplate({id:templateID});\n }\n\n async softDelete(templateID: string): Promise<VisitTemplate> {\n return this.update({id: templateID, deletedAt: Date.now()});\n }\n\n async get(templateID: string): Promise<VisitTemplate> {\n return this.API.__proto__.GetVisitTemplate(templateID);\n }\n\n async getTemplatesBySpace(spaceID: string): Promise<VisitTemplate[]> {\n return this.API.__proto__.TemplatesBySpace(spaceID).then((response) => response.items);\n }\n\n async getTemplatesByZone(zoneID: string): Promise<VisitTemplate[]> {\n return this.API.__proto__.TemplatesByZone(zoneID).then((response) => response.items);\n }\n}","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\n\nexport function floatValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const regex = /^[+-]?([0-9]*[.])?[0-9]+$/;\n if (control.value && control.value !== '') {\n return !regex.test(control.value) ? { number: control.value } : null;\n } else {\n return null;\n }\n };\n}","/*\n * Public API Surface of ngx-smarterplan-core\n */\n\nexport * from './lib/ngx-smarterplan-core.service';\nexport * from './lib/ngx-smarterplan-core.module';\nexport * from './lib/types.service';\nexport * from './lib/services/matterport.service';\nexport * from './lib/services/tag.service';\nexport * from './lib/services/baseVisibility.service';\nexport * from './lib/services/content.service';\nexport * from './lib/services/viewer.service';\nexport * from './lib/services/navigator.service';\nexport * from './lib/services/zoneChange.service';\nexport * from './lib/config';\nexport * from './lib/services/base-tab.service';\nexport * from './lib/services/user.service';\nexport * from './lib/helpers.service';\nexport * from './lib/services/locale.service';\nexport * from './lib/services/s3.service';\nexport * from './lib/services/filter.service';\nexport * from './lib/services/search.service';\nexport * from './lib/services/zone-drawer.service';\nexport * from './lib/services/matterport-import.service';\nexport * from './lib/mattertagData';\n\n// DynamoDB (model) services\nexport * from './lib/services/models/profile.service';\nexport * from './lib/services/models/zone.service';\nexport * from './lib/services/models/mission.service';\nexport * from './lib/services/models/object3D.service';\nexport * from './lib/services/models/poi.service';\nexport * from './lib/services/models/property.service';\nexport * from './lib/services/models/organisation.service';\nexport * from './lib/services/models/domain.service';\nexport * from './lib/services/models/space.service';\nexport * from './lib/services/models/capture.service';\nexport * from './lib/services/models/visit.service';\nexport * from './lib/services/models/plan.service';\nexport * from './lib/services/models/hashtag.service';\nexport * from './lib/services/models/navigation.service';\nexport * from './lib/services/models/node.service';\nexport * from './lib/services/models/equipment.service';\nexport * from './lib/services/models/layer.service';\nexport * from './lib/services/models/ticket.service';\nexport * from './lib/services/models/operation.service';\nexport * from './lib/services/intervention.service';\nexport * from './lib/services/models/event.service';\nexport * from './lib/services/models/affectation.service';\nexport * from './lib/services/models/measurement.service';\nexport * from './lib/services/models/comment.service';\nexport * from './lib/services/models/feature.service';\nexport * from './lib/services/models/template.service';\nexport * from './lib/services/support.service';\nexport * from './lib/services/validators.service';\n\n\n// Components\nexport * from './lib/components/csv-export/csv-export.component';\nexport * from './lib/components/search-bar/search-bar.component';\nexport * from './lib/components/menu-bar/menu-bar.component';\nexport * from './lib/components/loader/loader.component';\nexport * from './lib/components/support-modal/support-modal.component';\nexport * from './lib/components/menu-bar/avatar/avatar.component';\n\n// Pipes\nexport * from './lib/pipes/duration-to-string.pipe';\nexport * from './lib/pipes/hashtag-from-id.pipe';\nexport * from './lib/pipes/safe-url.pipe';\nexport * from './lib/pipes/time-date-to-local-string.pipe';\nexport * from './lib/pipes/username-from-id.pipe';\n\n// Directives\nexport * from './lib/validators/email.directive';\nexport * from './lib/validators/no-empty.directive';\nexport * from './lib/validators/text.directive';\nexport * from './lib/validators/number.directive';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.BaseUserService","i2.ZoneChangeService","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","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","i6.LoaderComponent","i7","i8","i2.FilterService","i3.AmplifyCacheService","i6.FormatDateNumberToDigitsPipe","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","i4.CommentService","i6.NavigationService","i7.HashtagService","i8.ZoneChangeService","i6.ZoneChangeService","i7.NavigationService","i2.SpaceService","i3.BaseUserService","i5.VisitService","i6.ViewerService","i7.NavigatorService","i10","i11","i2.LocaleService","i4.NavigatorService","i5.SupportService","i6.RangeDatePickerComponent","i7.AvatarComponent","i8.NavigationBarComponent","i1.NavigationService","i4.LayerService","i6.PlanService","i2.NavigatorService","i3.ZoneChangeService","i4.FilterService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"smarterplan-ngx-smarterplan-core.mjs","sources":["../../../projects/ngx-smarterplan-core/src/lib/ngx-smarterplan-core.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/csv-export/csv-export.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/csv-export/csv-export.component.html","../../../projects/ngx-smarterplan-core/src/lib/types.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/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/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/pipes/format-date-number-to-digits.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/range-date-picker/range-date-picker.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/range-date-picker/range-date-picker.component.html","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/avatar/avatar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/capture.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/node.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/zone-drawer.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/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/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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxSmarterplanCoreService {\n\n constructor() { }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-csv-export',\n templateUrl: './csv-export.component.html',\n styleUrls: ['./csv-export.component.scss']\n})\nexport class CsvExportComponent {\n \n /** Header of the CSV, titles for each columns */\n @Input() headers: string[] = [];\n\n /** Array of each rows (array of array of string), if it's not set, then the function getRows() will be used */\n @Input() rowsInput: string[][] = undefined;\n\n /** Function used to get rows if rowsInput is not set, call each time the user click on the button to generate the CSV file */\n @Input() getRows = undefined;\n\n /** Title of the file to download */\n @Input() title: string = \"file\";\n\n /** Label for the button to click */\n @Input() buttonLabel: string = \"Export\";\n\n /** Delimiter for the CSV */\n delimeter: string = \";\";\n\n async onClickDownload() {\n let rows: string[][] = this.rowsInput;\n if (!rows) {\n rows = await Promise.resolve(this.getRows());\n }\n const data = `data:text/csv;charset=utf-8,${this.headers.join(\n this.delimeter,\n )}\\n${rows\n .map((row) =>\n /** Clean each rows/cells */\n row\n .map((value) =>\n value\n .replace(this.delimeter, \" \")\n .replace(\"\\n\", \" \")\n .replace(\"\\r\", \" \"),\n )\n .join(this.delimeter),\n )\n .join(\"\\n\")}`;\n\n /** Create a link to download the file */\n const link = document.createElement(\"a\");\n link.setAttribute(\"href\", encodeURI(data));\n link.setAttribute(\"download\", `${this.title}.csv`);\n document.body.append(link);\n link.click();\n link.remove();\n }\n}\n","<span [style.cursor]=\"'pointer'\" (click)=\"onClickDownload()\" class=\"download-csv d-flex\">\n <span class=\"iconify\" data-icon=\"mdi:file-download-outline\"></span>\n {{ buttonLabel | translate}}\n</span>\n","export enum CameraMode {\n DOLLHOUSE = 'mode.dollhouse',\n FLOORPLAN = 'mode.floorplan',\n INSIDE = 'mode.inside',\n OUTSIDE = 'mode.outside',\n TRANSITIONING = 'mode.transitioning',\n}\n\nexport enum MattertagActionMode {\n POSITION_TICKET = 'positioning_ticket',\n ADD_TICKET = 'add_ticket',\n ADD_OBJECT3D = 'add_object3D',\n POSITION_OBJECT3D = 'positioning_object3D',\n POSITION_EQUIPMENT = 'positioning_equip',\n ADD_EQUIPMENT = 'add_equip',\n POSITION_DATA = 'positioning_feature',\n ADD_DATA = 'add_feature',\n POSITION_DESK = 'positioning_feature',\n ADD_DESK = 'add_desk',\n POSITION_ROOM = 'positioning_room',\n ADD_ROOM = 'add_room',\n}\n\nexport enum PoiType {\n EQUIPMENT = 'EQUIPMENT',\n INFORMATION = 'INFORMATION',\n TICKET = 'TICKET',\n OBJECT3D = 'OBJECT3D',\n MEASURE = 'MEASURE',\n DATA = 'DATA',\n PEOPLE = 'PEOPLE',\n DESK = 'DESK',\n ROOM = 'ROOM',\n}\n\nexport enum TicketPriority {\n MINIMUM = 'MINIMUM',\n LOW = 'LOW',\n MEDIUM = 'MEDIUM',\n HIGH = 'HIGH',\n MAXIMUM = 'MAXIMUM',\n}\n\nexport enum TagAction {\n HOVER_ON = 'hoverOn',\n AUDIO_CLICK = 'audioClick',\n VIDEO_CLICK = 'videoClick',\n IMAGE_CLICK = 'imageClick',\n DOC_CLICK = 'docClick',\n CLOSE_MODAL = 'closeModal',\n NEXT_SLIDE = 'nextSlide',\n DETAIL_CLICK = 'detailsClick',\n TICKET_CLICK = 'ticketClick',\n YOUTUBE_CLICK = 'youtubeClick',\n}\n\nexport enum TicketStatus {\n TO_BE_PROCESSED = 'TO_BE_PROCESSED',\n PLANNED = 'PLANNED',\n IN_PROGRESS = 'IN_PROGRESS',\n WAITING_FOR_VALIDATION = 'WAITING_FOR_VALIDATION',\n VALIDATED = 'VALIDATED',\n REJECTED = 'REJECTED',\n RESOLVED = 'RESOLVED',\n ARCHIVED = 'ARCHIVED',\n LATE = 'LATE',\n BLOCKED = 'BLOCKED',\n COMPLETED = 'COMPLETED',\n DELAYED = 'DELAYED',\n CANCELLED = 'CANCELLED',\n TO_REDO = 'TO_REDO',\n CREATED = 'CREATED',\n}\n\nexport enum DomainType {\n EQUIPMENT = 'EQUIPMENT',\n MISSION = 'MISSION',\n TICKET = 'TICKET',\n OBJECT3D = 'OBJECT3D',\n POI = 'POI',\n FEATURE = 'FEATURE',\n BOOKING = 'BOOKING',\n}\n\nexport enum RoleStatus {\n VISITOR = 'VISITOR',\n VISITOR_MUSEUM = 'VISITOR_MUSEUM',\n GUIDE_MUSEUM = 'GUIDE_MUSEUM',\n OCCUPANT = 'OCCUPANT',\n SERVICE = 'SERVICE',\n MANAGER = 'MANAGER',\n OWNER = 'OWNER',\n ADMIN = 'ADMIN',\n}\n\nexport enum ProfileStatus {\n WAITING_FOR_VALIDATION = 'WAITING_FOR_VALIDATION',\n WAITING_FOR_ACTIVATION = 'WAITING_FOR_ACTIVATION',\n ACTIVE = 'ACTIVE',\n INACTIVE = 'INACTIVE',\n BLOCKED = 'BLOCKED',\n}\n\nexport enum LevelStatus {\n MINIMUM = 'MINIMUM',\n LOW = 'LOW',\n MEDIUM = 'MEDIUM',\n HIGH = 'HIGH',\n MAXIMUM = 'MAXIMUM',\n}\n\nexport enum PropertyType {\n PROPERTY = 'PROPERTY',\n VISIT = 'VISIT',\n OCCUPANT = 'OCCUPANT',\n SHARED = 'SHARED',\n}\n\nexport enum SpaceStatus {\n DPE_TO_VALIDATE = 'DPE_TO_VALIDATE',\n DPE_VALIDATED = 'DPE_VALIDATED',\n DPE_FETCH = 'DPE_FETCH',\n}\n\nexport enum Locale {\n FR = 'FR',\n EN = 'EN',\n}\n\nexport enum EmailStatus {\n CREATION_TO_DELIVER = 'CREATION_TO_DELIVER',\n UPDATE_TO_DELIVER = 'UPDATE_TO_DELIVER',\n CANCELLATION_TO_DELIVER = 'CANCELLATION_TO_DELIVER',\n SENT = 'SENT',\n SOFT_BOUNCE = 'SOFT_BOUNCE',\n HARD_BOUNCE = 'HARD_BOUNCE',\n REJECTED = 'REJECTED',\n SATISFACTION_TO_DELIVER = 'SATISFACTION_TO_DELIVER',\n}\n\nexport enum CaptureViewer {\n CUPIX = 'CUPIX',\n MATTERPORT = 'MATTERPORT',\n SMARTERPLAN_V1 = 'SMARTERPLAN_V1',\n}\n\nexport enum InventoryStatus {\n SUCCESS = 'SUCCESS',\n ERROR = 'ERROR',\n TO_RUN = 'TO_RUN',\n TO_RUN_ONE_IMAGE = 'TO_RUN_ONE_IMAGE',\n ERROR_FILE_OBJ_NOT_EXIST = 'ERROR_FILE_OBJ_NOT_EXIST',\n ERROR_FILE_JSON_NOT_EXIST = 'ERROR_FILE_JSON_NOT_EXIST',\n ERROR_FILE_MODEL_NOT_EXIST = 'ERROR_FILE_MODEL_NOT_EXIST',\n}\n\nexport enum TypeNote {\n CONTRACTUAL = 'CONTRACTUAL',\n INFORMATION = 'INFORMATION',\n TECHNICAL = 'TECHNICAL',\n FINANCIAL = 'FINANCIAL',\n OTHER = 'OTHER',\n IMAGE = 'IMAGE',\n}\n\nexport enum FeatureType {\n DESK = 'DESK',\n INDICATOR_TEMP = 'INDICATOR_TEMP',\n INFORMATION = 'INFORMATION',\n INDICATOR_CO2 = 'INDICATOR_CO2',\n PURCHASE = 'PURCHASE',\n}\n\nexport enum TicketType {\n REPORTING = 'REPORTING',\n REQUEST_FOR_INTERVENTION = 'REQUEST_FOR_INTERVENTION',\n REQUEST_FOR_MAINTENANCE = 'REQUEST_FOR_MAINTENANCE',\n WORK_ORDER = 'WORK_ORDER',\n INCIDENT = 'INCIDENT',\n INFORMATION = 'INFORMATION',\n}\n\nexport enum EventType {\n EQUIPMENT = 'EQUIPMENT',\n COMMENT = 'COMMENT',\n CONTRACTUAL_INTERVENTION = 'CONTRACTUAL_INTERVENTION',\n NON_CONTRACTUAL_INTERVENTION = 'NON_CONTRACTUAL_INTERVENTION',\n TICKET = 'TICKET',\n OBJECT3D = 'OBJECT3D',\n REPORTING = 'REPORTING',\n REQUEST_FOR_INTERVENTION = 'REQUEST_FOR_INTERVENTION',\n REQUEST_FOR_MAINTENANCE = 'REQUEST_FOR_MAINTENANCE',\n WORK_ORDER = 'WORK_ORDER',\n INCIDENT = 'INCIDENT',\n MEASURE = 'MEASURE',\n BOOKING = 'BOOKING',\n BOOKING_SUBCRIPTION = 'BOOKING_SUBCRIPTION',\n}\n\nexport enum EventStatus {\n TO_BE_PROCESSED = 'TO_BE_PROCESSED',\n PLANNED = 'PLANNED',\n IN_PROGRESS = 'IN_PROGRESS',\n WAITING_FOR_VALIDATION = 'WAITING_FOR_VALIDATION',\n VALIDATED = 'VALIDATED',\n REJECTED = 'REJECTED',\n RESOLVED = 'RESOLVED',\n ARCHIVED = 'ARCHIVED',\n LATE = 'LATE',\n BLOCKED = 'BLOCKED',\n COMPLETED = 'COMPLETED',\n DELAYED = 'DELAYED',\n CANCELLED = 'CANCELLED',\n TO_REDO = 'TO_REDO',\n CREATED = 'CREATED',\n LINKED_TO_EQUIPMENT = 'LINKED_TO_EQUIPMENT',\n UNLINKED_FROM_EQUIPMENT = 'UNLINKED_FROM_EQUIPMENT',\n EDITED = 'EDITED',\n LINKED_TO_A_PARENT_TICKET = 'LINKED_TO_A_PARENT_TICKET',\n WAITING_FOR_ACCEPTATION = 'WAITING_FOR_ACCEPTATION',\n ACCEPTED = 'ACCEPTED',\n REFUSED = 'REFUSED',\n DOMAIN_UPDATED = 'DOMAIN_UPDATED',\n DATES_UPDATED = 'DATES_UPDATED',\n TICKET_CHILD_REMOVED = 'TICKET_CHILD_REMOVED',\n TYPE_UPDATED = 'TYPE_UPDATED',\n DATE_END_UPDATED = 'DATE_END_UPDATED',\n DATE_START_UPDATED = 'DATE_START_UPDATED',\n POSITION_SET = 'POSITION_SET',\n POSITION_UPDATED = 'POSITION_UPDATED',\n POSITION_REMOVED = 'POSITION_REMOVED',\n}\n\nexport enum PaymentStatus {\n UNPAID = 'UNPAID',\n PAID = 'PAID',\n PENDING = 'PENDING',\n ERROR = 'ERROR',\n}\n\nexport enum CommentType {\n MEASURE = 'MEASURE',\n VIDEO = 'VIDEO',\n DOCUMENT = 'DOCUMENT',\n IMAGE = 'IMAGE',\n TEXT = 'TEXT',\n AUDIO = 'AUDIO',\n URL = 'URL',\n YOUTUBE = 'YOUTUBE',\n URL_SHOP = 'URL_SHOP',\n EMBED = 'EMBED',\n}\n\nexport enum StatusEquipment {\n TO_SETUP = 'TO_SETUP',\n BROKEN = 'BROKEN',\n UNINSTALLED = 'UNINSTALLED',\n INCIDENT = 'INCIDENT',\n IN_OPERATION = 'IN_OPERATION',\n WAITING_FOR_REPAIR = 'WAITING_FOR_REPAIR',\n DELETED = 'DELETED',\n OUT_OF_ORDER = 'OUT_OF_ORDER',\n TO_BE_REPLACED = 'TO_BE_REPLACED',\n}\n\n/** Interface for Update (only id is required) */\nexport interface IUpdate {\n id: string;\n}\n\nexport type AWSType = {\n __typename?: string | null;\n id?: string | null;\n createdAt?: string;\n updatedAt?: string;\n};\n\nexport type DbObjectType = {\n spaceID?: string | null;\n description?: string | null;\n pois?: {\n __typename?: 'ModelPOIConnection';\n items?: Array<POI> | null;\n nextToken?: string | null;\n } | null;\n space?: Space | null;\n domainID?: string | null;\n name?: string | null;\n title?: string | null;\n} & AWSType;\n\nexport type Ticket = {\n spaceID: string;\n title: string;\n status?: TicketStatus | null;\n priority?: TicketPriority | null;\n ownerMissionID?: string | null;\n ownerMission?: Mission | null;\n type?: TicketType | null;\n parentID?: string | null;\n level?: LevelStatus | null;\n friendlyLabel?: string | null;\n domain: Domain | null;\n domainID: string | null;\n events?: {\n __typename?: 'ModelEventConnection';\n items?: Array<Event> | null;\n nextToken?: string | null;\n } | null;\n assignees?: {\n __typename?: 'ModelAffectationConnection';\n items?: Array<Affectation> | null;\n nextToken?: string | null;\n } | null;\n equipments?: Array<Equipment> | null;\n operations?: {\n __typename?: 'ModelOperationConnection';\n items?: Array<Operation | null> | null;\n nextToken?: string | null;\n };\n comments?: {\n __typename?: 'ModelCommentConnection';\n items?: Array<Comment | null> | null;\n nextToken?: string | null;\n };\n prestataire?: Prestataire | null;\n children?: {\n __typename?: 'ModelTicketConnection';\n items?: Array<Ticket | null> | null;\n nextToken?: string | null;\n };\n archivedForMissionID?: string[] | null;\n} & DbObjectType;\n\nexport type Operation = {\n id?: string | null;\n ticketID?: string | null;\n equipmentID?: string | null;\n deletedAt?: number | null;\n ticket?: Ticket | null;\n equipment?: Equipment | null;\n} & AWSType;\n\nexport type Equipment = {\n name: string;\n notes?: {\n __typename?: 'ModelNoteConnection';\n items?: Array<Note | null> | null;\n nextToken?: string | null;\n };\n documents?: Array<EquipmentDocument> | null;\n documentationImageUrlSigned?: string | null;\n subEquipments?: Array<Equipment | null> | null;\n subequipmentsIDs?: Array<string | null> | null;\n serialNumber?: string | null;\n domain?: Domain | null;\n childDomain?: Domain | null;\n parentDomain?: Domain | null;\n photo?: string | null;\n zone?: Zone | null;\n tickets?: Ticket[] | null;\n domainID?: string | null;\n spaceID: string;\n archivedForMissionID?: string[] | null;\n annotation?: string | null;\n status?: StatusEquipment | null;\n family?: Array<string | null> | null;\n manufacturer?: string | null;\n sku?: string | null;\n installDate?: number | null;\n warrantyEndDate?: number | null;\n isCreatedByAI?: boolean | null;\n operations?: {\n __typename?: 'ModelOperationConnection';\n items?: Array<Operation | null> | null;\n nextToken?: string | null;\n };\n} & DbObjectType;\n\nexport type EquipmentSelected = {\n selected?: boolean;\n} & Equipment;\n\n// not in db\nexport type EquipmentDocument = {\n filename: string;\n url: string;\n urlSigned: string;\n noteID: string;\n};\n\n// not in db\nexport type Prestataire = {\n organisation: Organisation;\n mission: Mission;\n profile: Profile;\n name: string;\n};\n\nexport type Note = {\n id?: string | null;\n attachment?: string | null;\n signDate?: number | null;\n expirationDate?: number | null;\n type?: TypeNote | null;\n ownerMissionID?: string | null;\n equipmentID?: string | null;\n} & AWSType;\n\nexport type Domain = {\n name: string;\n slug?: string | null;\n abbreviation?: string | null;\n description?: string | null;\n organisationID?: string | null;\n parentID?: string | null;\n type?: DomainType | null;\n parent?: Domain | null;\n children?: {\n __typename?: 'ModelDomainConnection';\n items?: Array<Domain | null> | null;\n nextToken?: string | null;\n };\n} & AWSType;\n\nexport type POI = {\n id?: string | null;\n coordinate?: string | null;\n tagIcon?: string | null;\n tagDescription?: string | null;\n tagImageID?: string | null;\n metadata?: string | null;\n matterportSweepID?: string | null;\n type?: PoiType | null;\n elementID?: string | null;\n virtual?: boolean | null;\n};\n\nexport enum ViewerInteractions {\n DEFAULT = 0,\n ADDING,\n POSITIONING,\n}\n\nexport type Mission = {\n userID: string;\n role?: RoleStatus | null;\n organisationID: string;\n spaceID?: string | null;\n level?: LevelStatus | null;\n orderedOrganisationID?: string | null;\n zoneID?: string | null;\n groups?: Array<string | null> | null;\n emailStatus?: EmailStatus | null;\n description?: string | null;\n metadata?: string | null;\n deletedAt?: number | null;\n assignments?: {\n __typename?: 'ModelAffectationConnection';\n items?: Array<Affectation | null> | null;\n nextToken?: string | null;\n };\n organisation?: Organisation | null;\n orderedOrganisation?: Organisation | null;\n user?: Profile | null;\n domains?: string[] | null;\n // domainObjects?: Domain[] | null;\n space?: Space | null;\n zone?: Zone | null;\n startDateTime?: string | null;\n endDateTime?: string | null;\n hashtags?: Array<string | null> | null;\n templateMissionID?: string | null;\n templateMission?: VisitTemplate | null;\n locale?: Locale | null;\n isInWaitingRoom?: boolean | null;\n blockedInChat?: boolean | null;\n connectedToLiveAt?: string[] | null;\n disconnectedFromLiveAt?: string[] | null;\n} & AWSType;\n\nexport type Affectation = {\n mission?: Mission | null;\n group: string;\n metadata?: string | null;\n deletedAt?: number | null;\n missionID: string;\n ticketID: string;\n} & AWSType;\n\nexport type MediaContent = {\n path: string;\n title: string;\n description: string;\n showInTag?: boolean;\n type?: CommentType;\n};\n\nexport type Comment = {\n title: string;\n ticket?: Ticket | null;\n ownerID?: string | null;\n owner?: Mission | null;\n annexe?: string | null;\n ticketID?: string | null;\n type?: CommentType | null;\n dimensions?: Array<number | null> | null;\n featureID?: string | null;\n isCoverImage?: boolean | null;\n index?: number | null;\n shownInTag?: boolean | null;\n externalLink?: string | null;\n} & AWSType &\n DbObjectType;\n\nexport type Zone = {\n sweepIDs?: string[] | null;\n layerID?: string | null;\n code_ref?: string | null;\n layer?: Layer | null;\n parent?: Zone | null;\n virtual?: boolean | null;\n name: string;\n tags?: Array<string | null> | null;\n parentID?: string | null;\n spaceID?: string | null;\n space?: Space | null;\n isMuseumVisitZone?: boolean | null;\n nodeIDs?: Array<string | null> | null;\n surface?: number | null;\n metadata?: string | null;\n isMultipleFloorZone?: boolean | null;\n audioID?: string | null;\n audio?: Comment | null;\n startSweepID?: string | null;\n} & AWSType;\n\nexport type Layer = {\n name: string;\n} & AWSType;\n\nexport type Profile = {\n id?: string | null;\n userID: string;\n avatar?: string | null;\n token?: string | null;\n tokenExpiredAt?: number | null;\n status?: ProfileStatus | null;\n metadata?: string | null;\n lastConnectedAt?: number | null;\n pseudo?: string | null;\n deletedAt?: number | null;\n} & AWSType;\n\nexport class ProfileEntity implements Profile {\n id?: string | null;\n\n userID: string;\n\n avatar?: string | null;\n\n token?: string | null;\n\n tokenExpiredAt?: number | null;\n\n status?: ProfileStatus | null;\n\n createdAt?: string;\n\n updatedAt?: string;\n\n firstName: string;\n\n lastName: string;\n\n email: string;\n\n phone: string;\n\n pseudo: string;\n\n constructor(init?: Partial<Profile>) {\n Object.assign(this, init);\n this.metadata = init.metadata;\n }\n\n get metadata(): string {\n return JSON.stringify({\n firstName: this.firstName,\n lastName: this.lastName,\n email: this.email,\n phone: this.phone,\n });\n }\n\n set metadata(m: string) {\n const d = JSON.parse(m);\n if (d) {\n this.firstName = d.firstName;\n this.lastName = d.lastName;\n this.email = d.email;\n this.phone = d.phone;\n }\n }\n\n get displayName(): string {\n if (this.pseudo) {\n return this.pseudo;\n }\n if (this.lastName.length > 0) {\n return `${this.firstName} ${this.lastName}`;\n }\n return this.email;\n }\n}\n\nexport type Organisation = {\n name: string;\n siret?: string | null;\n address?: string | null;\n city?: string | null;\n postal?: number | null;\n logoUrl?: string | null;\n originDate?: number | null;\n deletedAt?: number | null;\n shareToken?: string | null;\n tokenExpiresAt?: number | null;\n connectedAccountStripeID?: string | null;\n stripeOnBoardingCompleted?: boolean | null;\n stripeToken?: string | null;\n stripeChargesEnabled?: boolean | null;\n contactDetails?: string | null;\n ticketOrganisationsId?: string | null;\n // properties?: {\n // __typename?: \"ModelPropertyConnection\";\n // items?: Array<Property | null> | null;\n // nextToken?: string | null;\n // } | null;\n} & AWSType;\n\nexport type Property = {\n type: PropertyType;\n deletedAt?: number | null;\n organisationID: string;\n spaceID: string;\n zoneID?: string | null;\n space?: Space | null;\n organisation?: Organisation | null;\n // zone?: Zone | null;\n} & AWSType;\n\nexport type Space = {\n name: string;\n addresses?: string | null;\n annexes?: string | null;\n tags?: Array<string | null> | null;\n latitude?: number | null;\n longitude?: number | null;\n metadata?: string | null;\n level?: LevelStatus | null;\n deletedAt?: number | null;\n constructionYear?: string | null;\n classEnergyConsumption?: string | null;\n classGes?: string | null;\n status?: SpaceStatus | null;\n guestLink?: string | null;\n signedImageUrl?: string | null;\n zones?: {\n __typename?: 'ModelZoneConnection';\n items?: Array<Zone | null> | null;\n nextToken?: string | null;\n };\n properties?: {\n __typename?: 'ModelPropertyConnection';\n items?: Array<Property | null> | null;\n nextToken?: string | null;\n };\n visits?: Visit[] | null;\n organisationID?: string | null;\n organisation?: Organisation | null;\n description?: string | null;\n attachments?: Comment[] | null;\n} & AWSType;\n\n// not in DB\nexport type Visit = {\n captureID: string;\n model3d: string;\n takenAt: number;\n spaceID: string;\n viewer: CaptureViewer;\n surface: number;\n node: Node;\n name?: string | null;\n nmbImagesImported: number;\n};\n\nexport type Hashtag = {\n name?: string | null;\n organisationID?: string | null;\n spaceID?: string | null;\n organization?: Organisation | null;\n space?: Space | null;\n} & AWSType;\n\nexport type Capture = {\n // clientRef?: string | null;\n // originCoordinate?: string | null;\n // originAngle?: string | null;\n // originZoom?: string | null;\n takenAt?: number | null;\n viewer?: CaptureViewer | null;\n publishedAt?: number | null;\n surface?: number | null;\n metadata?: string | null;\n spaceID?: string | null;\n nodes?: {\n __typename?: 'ModelNodeConnection';\n items?: Array<Node | null> | null;\n nextToken?: string | null;\n };\n} & AWSType;\n\nexport type Node = {\n model3D?: string | null;\n coordinate?: string | null;\n size?: string | null;\n scale?: string | null;\n version?: number | null;\n active?: number | null;\n order?: number | null;\n // quality?: NodeQuality | null;\n metadata?: string | null;\n captureID?: string | null;\n inventoryStatus?: InventoryStatus | null;\n navigationForInventory?: string | null;\n capture?: Capture | null;\n} & AWSType;\n\nexport type Plan = {\n name?: string | null;\n annexe?: string | null;\n calibration?: string | null;\n zoneID?: string | null;\n isCurrentForZone?: boolean | null;\n spaceID?: string | null;\n isModified?: boolean | null;\n isImportedMatterport?: boolean | null;\n filepath?: string;\n model3d?: string | null;\n floor?: string | null;\n visitName?: string | null;\n zone?: Zone | null;\n extension?: string | null;\n navigationIDs?: string[] | null;\n} & AWSType;\n\nexport type Navigation = {\n matterportSweepID?: string | null;\n position?: string | null;\n rotation?: string | null;\n radius?: number | null;\n url?: string | null;\n tags?: Array<string | null> | null;\n level?: LevelStatus | null;\n nodeID?: string | null;\n spaceID?: string | null;\n positionOnPlan?: Array<string | null> | null;\n navigationSiblingsId?: string | null;\n pois?: {\n __typename?: 'ModelPOIConnection';\n items?: Array<POI | null> | null;\n nextToken?: string | null;\n };\n node?: Node | null;\n} & AWSType;\n\nexport type MenuItem = { label: string; url?: string; back?: any };\n\n// not in db\nexport type Measurement = {\n id: string;\n poi: POI;\n comment: Comment;\n singedUrlPhoto?: string | null;\n values: Array<number> | null;\n numberPoints: number;\n};\n\nexport type Feature = {\n title?: string | null;\n shortDescription?: string | null;\n ownerMissionID?: string | null;\n level?: LevelStatus | null;\n index?: number | null;\n type?: FeatureType | null;\n archivedForMissionID?: Array<string | null> | null;\n stripeProductID?: string | null;\n stripePriceID?: string | null;\n bookingPriceMetadata?: string | null;\n locale?: Locale | null;\n hashtags?: Array<string | null> | null;\n coverImageUrl?: string | null;\n images?: Array<MediaContent> | null;\n videos?: Array<MediaContent> | null;\n audios?: Array<MediaContent> | null;\n externalLinks?: Array<MediaContent> | null;\n documents?: Array<{\n path: string;\n title: string;\n description: string;\n }> | null;\n embeds?: Array<MediaContent> | null;\n comments?: {\n __typename?: 'ModelCommentConnection';\n items?: Array<Comment | null> | null;\n nextToken?: string | null;\n };\n domain?: Domain | null;\n isBookingPlace?: boolean | null;\n events?: {\n __typename?: 'ModelEventConnection';\n items?: Array<Event | null> | null;\n nextToken?: string | null;\n };\n spaceID: string;\n} & DbObjectType;\n\nexport type Event = {\n title: string;\n type?: EventType | null;\n estimateStartDate?: number | null;\n estimateDuration?: number | null;\n estimateEndDate?: number | null;\n realStartDate?: number | null;\n timeSpent?: number | null;\n realEndDate?: number | null;\n status?: EventStatus | null;\n description?: string | null;\n group?: string | null;\n metadata?: string | null;\n ownerID?: string | null;\n ticketID?: string | null;\n createdAt?: string | null;\n translationPath?: string | null;\n featureID?: string | null;\n archivedByOwner?: boolean | null;\n paymentStatus?: PaymentStatus | null;\n stripeSessionID?: string | null;\n notificationStatus?: EmailStatus | null;\n refusalReason?: string | null;\n agoStr?: boolean | string | null;\n owner?: Mission | null;\n author?: ProfileEntity | null;\n feature?: Feature | null;\n} & AWSType;\n\n//not in DB (variation of Event)\nexport type RequestIntervention = {\n estimateStartDate?: number | null;\n estimateDuration?: number | null;\n estimateEndDate?: number | null;\n realStartDate?: number | null;\n realDuration?: number | null;\n realEndDate?: number | null;\n type: EventType.REQUEST_FOR_INTERVENTION;\n status: EventStatus;\n intervention?: Event | null;\n report?: Event | null;\n ticketID: string;\n} & AWSType;\n\n//not in DB (variation of Event)\nexport type Intervention = {\n estimateStartDate?: number | null;\n estimateDuration?: number | null;\n estimateEndDate?: number | null;\n realStartDate?: number | null;\n realDuration?: number | null;\n realEndDate?: number | null;\n type: EventType;\n status: EventStatus;\n} & AWSType;\n\nexport type VisitTemplate = {\n id?: string | null;\n title?: string | null;\n level?: LevelStatus | null;\n description?: string | null;\n metadata?: string | null;\n deletedAt?: number | null;\n startDateTime?: string | null;\n endDateTime?: string | null;\n hashtags?: Array<string | null> | null;\n organisationID: string;\n spaceID?: string | null;\n zoneID?: string | null;\n locale?: Locale | null;\n realStartedAt?: number | null;\n realEndedAt?: number | null;\n space?: Space | null;\n zone?: Zone | null;\n organisation?: Organisation | null;\n userMissions?: {\n __typename: 'ModelMissionConnection';\n items: Array<Mission | null>;\n nextToken?: string | null;\n } | null;\n} & AWSType;\n\nexport enum SpModule {\n MUSEUM = 'MUSEUM',\n HOTEL = 'HOTEL',\n IMMO = 'IMMO',\n}\n\n/**\n * ThreeJS object3D\n */\nexport type IObject3D = {\n id?: string; // used to replace threeJS uuid\n object: string;\n format: string;\n mode: string;\n position: { x: number; y: number; z: number; };\n rotation: { x: number; y: number; z: number; };\n scale: { x: number; y: number; z: number; };\n}\n\n\n\n/**\n * DynamoDb object3D\n */\nexport type Object3D = {\n id: string;\n path: string;\n description: string;\n name: string;\n s3Bucket: boolean;\n position: number[];\n rotation: number[];\n scale: number[];\n spaceID: string;\n // Not used yet\n // domain: Domain | null;\n // domainID: string | null;\n} & AWSType;\n","import { Inject } from \"@angular/core\";\nimport { Injectable } from \"@angular/core\";\nimport { AWSType, Profile } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class ProfileService {\n API: any;\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async createProfile(profile: Profile): Promise<Profile> {\n return this.API.__proto__.CreateProfile(profile);\n }\n\n async getProfile(id: string): Promise<Profile> {\n return this.API.__proto__.GetProfile(id);\n }\n\n async listCurrentProfiles(): Promise<Profile[]> {\n const profiles = (await this.API.__proto__.ListProfiles()).items;\n return profiles.filter((p) => !p.deletedAt);\n }\n\n async updateProfile(profile: any): Promise<Profile> {\n if (profile.id === undefined) {\n console.log(`an ID is required for update Profile`);\n return null;\n }\n return this.API.__proto__.UpdateProfile(profile);\n }\n\n async deleteProfile(id: string): Promise<Profile> {\n return this.API.__proto__.DeleteProfile({ id: id });\n }\n\n async getProfileFromAWSID(userID: string): Promise<Profile> {\n return this.API.__proto__.ProfilesByUserID(userID).then((results) => {\n if (results.items.length === 0) {\n return null;\n }\n return results.items[0];\n });\n }\n\n async getUsersForMail(mail: string): Promise<Profile[]> {\n return this.API.__proto__.ListProfiles({ metadata: { contains: mail } }).then(\n (results) => {\n return results.items.filter((profile) => !profile.deletedAt);\n },\n );\n }\n\n async getProfilesForStatus(status: string): Promise<Profile[]> {\n return (\n await this.API.__proto__.ListProfiles({\n status: { eq: status },\n })\n ).items;\n }\n}","/* eslint-disable class-methods-use-this */\nimport { Inject, Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { dateHasExpired } from \"../../helpers.service\";\nimport { Mission, Organisation, Profile, ProfileStatus, RoleStatus, VisitTemplate } from \"../../types.service\";\nimport { DateTime } from \"luxon\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class MissionService {\n currentMissionsUpdated = new Subject<boolean>();\n\n lastExpiredMission: Mission;\n\n nextMissionToStart: Mission;\n\n currentUserID: string;\n\n API: any; //AWS\n\n constructor(\n // private affectationService: AffectationService,\n @Inject('currentAPIService') apiInjected: any\n ) {\n this.API = apiInjected;\n }\n\n async getMissionsFromUserID(userID: string): Promise<Mission[]> {\n return this.API.__proto__.MissionsByUser(userID).then((missions) => {\n return missions.items.filter((mis) => !mis.deletedAt);\n });\n }\n\n async getMissionsByOrderedOrganisation(\n orderedOrgID: string,\n ): Promise<Mission[]> {\n return this.API.__proto__.MissionsByOrderedOrganisation(orderedOrgID).then(\n (response) => response.items,\n );\n }\n\n async getMissionsByOrganisation(orgID: string): Promise<Mission[]> {\n return this.API.__proto__.MissionsByOrganisation(orgID).then(\n (response) => response.items,\n );\n }\n\n async create(mission: Mission): Promise<Mission> {\n const updMission = await this.API.__proto__.CreateMission(mission);\n console.log(\"Mission created\", updMission);\n await this.checkIfCurrentUserMissionChanged(updMission);\n return updMission;\n }\n\n async update(mission: any): Promise<Mission> {\n const updMission = await this.API.__proto__.UpdateMission(mission);\n console.log(\"Mission updated\", updMission);\n await this.checkIfCurrentUserMissionChanged(updMission);\n return updMission;\n }\n\n async assertRoleForUserInOrg(\n user: Profile,\n org: Organisation,\n role: RoleStatus,\n ): Promise<boolean> {\n return this.getMissionsFromUserID(user.id).then((missions) => {\n if (missions) {\n const misOrg = missions.filter((mis) => {\n return mis.organisationID === org.id && mis.role === role;\n });\n return misOrg.length > 0;\n }\n return false;\n });\n }\n\n async getMissionsByOrderedOrganisationBySpace(\n ordOrgID: string,\n spaceID: string,\n ): Promise<Mission[]> {\n return this.API.__proto__.MissionsByOrderedOrganisationBySpace(ordOrgID, {\n eq: spaceID,\n }).then((mis) => mis.items);\n }\n\n async softDeleteMission(missionID: string): Promise<Mission> {\n // const hardDelete = await this.canHardDeteleMission(mission.id);\n // if (hardDelete) {\n // return this.hardDeleteMission(mission.id);\n // }\n console.log(\"Soft Deleting mission\");\n const missionUpd = await this.update({\n id: missionID,\n deletedAt: Date.now(),\n });\n await this.checkIfCurrentUserMissionChanged(missionUpd);\n return missionUpd;\n }\n\n async list(): Promise<Mission[]> {\n const mis = await this.API.__proto__.ListMissions();\n return mis.items.filter((m) => !m.deletedAt);\n }\n\n // async canHardDeteleMission(missionID: string): Promise<boolean> {\n // const events = (\n // await this.API.ListEvents({ ownerID: { eq: missionID } })\n // ).items;\n // if (events.length > 0) {\n // return false;\n // }\n // const comments = (\n // await this.API.ListComments({ ownerID: { eq: missionID } })\n // ).items;\n // if (comments.length > 0) {\n // return false;\n // }\n // const affectations =\n // await this.affectationService.getAffectationsFromMissionID(\n // missionID,\n // );\n // if (affectations.length > 0) {\n // return false;\n // }\n // return true;\n // }\n\n async hardDeleteMission(missionID: string): Promise<Mission> {\n return this.API.__proto__.DeleteMission({ id: missionID });\n }\n\n getActivatedMissions(missions: Mission[]): Mission[] {\n const activated = [];\n missions.map(async (mission) => {\n const isActivated =\n mission.groups && mission.groups.includes(ProfileStatus.ACTIVE);\n if (isActivated) {\n activated.push(mission);\n }\n });\n return activated;\n }\n\n async getMissionsForZone(zoneID: string): Promise<Mission[]> {\n return (await this.API.__proto__.MissionsByZone(zoneID)).items.filter(\n (mis) => !mis.deletedAt,\n );\n }\n\n async getMissionsForSpace(spaceID: string): Promise<Mission[]> {\n return this.API.__proto__.MissionsBySpace(spaceID).then((missions) => missions.items);\n }\n\n activateMission(mis: Mission) {\n if (\n mis &&\n (!mis.groups || !mis.groups.includes(ProfileStatus.ACTIVE))\n ) {\n const groups = mis.groups ? mis.groups : [];\n groups.push(ProfileStatus.ACTIVE);\n this.update({ id: mis.id, groups });\n }\n }\n\n async getMissionsByTemplate(templateID: string): Promise<Mission[]> {\n return (await this.API.__proto__.MissionsByTemplate(templateID)).items.filter(\n (mis) => !mis.deletedAt,\n );\n }\n\n async getMission(missionID: string): Promise<Mission> {\n return this.API.__proto__.GetMission(missionID);\n }\n\n async getMissionsByZoneByRole(\n zoneID: string,\n role: RoleStatus,\n ): Promise<Mission[]> {\n return (\n await this.API.__proto__.MissionsByZoneByRole(\n zoneID,\n { eq: role },\n null,\n { deletedAt: { attributeExists: false } },\n 200,\n )\n ).items;\n }\n\n async checkIfCurrentUserMissionChanged(changedMission: Mission) {\n if (this.currentUserID === changedMission.userID) {\n this.currentMissionsUpdated.next(true);\n }\n }\n\n async instantMissionsOfCurrent(\n currentUserID: string,\n ): Promise<Mission[] | null> {\n this.currentUserID = currentUserID;\n let missions = await this.getMissionsFromUserID(currentUserID);\n\n /** Filter to keep only available missions */\n missions = missions.filter((mission) => {\n const hasExpired = dateHasExpired(mission.endDateTime);\n\n /** Update this.lastExpiredMission */\n if (hasExpired) {\n const lastExpiredDate = this.lastExpiredMission\n ? new Date(this.lastExpiredMission.endDateTime)\n : null;\n const dateExpired = new Date(mission.endDateTime);\n if (!lastExpiredDate || dateExpired > lastExpiredDate) {\n this.lastExpiredMission = mission;\n }\n }\n return !hasExpired;\n });\n\n if (missions.some((mis) => mis.role === RoleStatus.VISITOR_MUSEUM) && missions.length > 0) {\n // workflow for VISITOR_MUSEUM\n return missions;\n }\n /** Keep only started missions */\n let nextMissionDate = null;\n missions = missions.filter((mission) => {\n const started = mission.startDateTime\n ? dateHasExpired(mission.startDateTime)\n : true;\n /** Update next mission to start */\n if (!started) {\n const missionDate = new Date(mission.startDateTime);\n if (!nextMissionDate || missionDate < nextMissionDate) {\n this.nextMissionToStart = mission;\n nextMissionDate = missionDate;\n }\n }\n return started;\n });\n return missions.length > 0 ? missions : null;\n }\n\n /**\n * Filters the missions that assisted to live of the visit (by comparing the realStartTime of VisitTemplate and connectedAt time)\n * @param template VisitTemplate \n * @param missions Mission[] missions for this visit\n * @returns Mission[] filtered missions\n */\n filterMissionsAssitedToLiveForTemplate(template: VisitTemplate, missions: Mission[]): Mission[] {\n const visitStartTimestamp = template.realStartedAt;\n return missions.filter((mis) => {\n if (!mis.connectedToLiveAt) {\n return false;\n }\n if (mis.connectedToLiveAt.length === 0) {\n return false;\n }\n const lastConnectedAt = mis.connectedToLiveAt[mis.connectedToLiveAt.length - 1];\n const lastConnectedAtTimestamp = DateTime.fromISO(lastConnectedAt).toMillis();\n return lastConnectedAtTimestamp > visitStartTimestamp;\n });\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Property } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class PropertyService {\n API: any;\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async createProperty(property: Property): Promise<Property> {\n return this.API.__proto__.CreateProperty(property);\n }\n\n async deleteProperty(propertyID: string): Promise<Property> {\n return this.API.__proto__.DeleteProperty({ id: propertyID });\n }\n\n async getPropertiesForOrganisation(orgID: string): Promise<Property[]> {\n return this.API.__proto__.PropertiesByOrganisation(orgID).then(\n (props) => props.items,\n );\n }\n\n async listProperties(): Promise<Property[]> {\n try {\n return this.API.__proto__.ListProperties().then((props) => props.items);\n } catch {\n return this.API.__proto__.ListPropertys().then((props) => props.items);\n }\n }\n\n async listPropertiesForSpace(spaceID: string): Promise<Property[]> {\n try {\n return this.API.__proto__.ListProperties({ spaceID: { eq: spaceID } }).then((props) => props.items);\n } catch {\n return this.API.__proto__.ListPropertys({ spaceID: { eq: spaceID } }).then((props) => props.items);\n }\n\n }\n}","import { Inject, Injectable, NgZone } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { Router } from \"@angular/router\";\nimport { Location } from \"@angular/common\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { LevelStatus, Mission, Organisation, Profile, ProfileEntity, ProfileStatus, PropertyType, RoleStatus, SpModule } from \"../types.service\";\nimport { enumToArray, filterUniqueArrayByID, getHighestLevelForMissions, getHighestRoleForMissions, getLevelsBelow, getRolesBelowForManager } from \"../helpers.service\";\nimport { ProfileService } from \"./models/profile.service\";\nimport { MissionService } from \"./models/mission.service\";\nimport { PropertyService } from \"./models/property.service\";\nimport { DateTime } from \"luxon\";\nimport { Auth } from \"aws-amplify\";\n\ninterface CreateUser {\n email: string;\n phone?: string;\n lastName: string;\n firstName: string;\n password?: string;\n}\n\n/**\n * UserService handles user's lifecycle, from creation to deletion\n */\n@Injectable({\n providedIn: \"root\",\n})\nexport class BaseUserService {\n\n isChanged: Subject<boolean> = new Subject<boolean>();\n\n updating = false;\n\n managers = [\n RoleStatus.ADMIN,\n RoleStatus.MANAGER,\n RoleStatus.OWNER,\n RoleStatus.GUIDE_MUSEUM,\n ];\n\n currentMissions: Mission[];\n\n lastExpiredMission: Mission;\n\n nextMissionToStart: Mission;\n\n cu: ProfileEntity = null;\n\n spModule: SpModule;\n\n constructor(\n private profileService: ProfileService,\n private missionService: MissionService,\n private propertyService: PropertyService,\n private router: Router,\n private location: Location,\n private ngZone: NgZone,\n private translate: TranslateService,\n @Inject('SPModule') spModuleInjected: SpModule,\n ) {\n // this.checkConnectedAWSUser();\n this.missionService.currentMissionsUpdated.subscribe(async (data) => {\n this.currentMissions =\n await this.missionService.instantMissionsOfCurrent(this.cu.id);\n this.isChanged.next(true);\n });\n this.spModule = spModuleInjected;\n }\n\n /**\n * Checks if AWS user is connected and assigng it to current user (this.cu)\n **/\n async checkConnectedAWSUser() {\n if (!this.cu) {\n // console.log(\"check AWS user\");\n let cau = null;\n let user = null;\n try {\n if (!this.updating) {\n cau = await Auth.currentAuthenticatedUser();\n // console.log(\"connected\", cau);\n user = await this.current(cau);\n // console.log(\"current of userService\", user);\n }\n } catch { }\n if (!user && !this.updating) {\n // console.log(\"no user in check connected aws user\");\n this.router.navigate([\"auth\"]);\n }\n }\n }\n\n /**\n * createUser spawns a new User, along with:\n * - a proper AWSCognito signup\n * - a Profile entry holding the AWSCognito ID\n * - a Mission entry holding the Organisation ID\n *\n * @see 174\n * @see https://docs.amplify.aws/lib/auth/emailpassword/q/platform/js#sign-up\n * @todo wonder if we can mash together Profile, Mission and User entries\n * @param u User to be created\n */\n async createUserAWSandProfile(\n u: {\n email: string;\n phone: string;\n lastName: string;\n firstName: string;\n password?: string;\n },\n prevalidated: boolean = false,\n ): Promise<Profile> {\n const attributes = {\n email: u.email.trim(),\n given_name: u.firstName,\n family_name: u.lastName,\n zoneinfo: \"fr\", // @todo deal with zoneinfo and locale\n locale: \"fr\",\n \"custom:prevalidated\": \"false\",\n };\n if (prevalidated) {\n attributes[\"custom:prevalidated\"] = \"true\";\n }\n // AWSCognito\n const password = u.password ? u.password : \"temporaryp\";\n let error;\n try {\n const { userSub } = await Auth.signUp({\n username: u.email, // username should be an email they say\n password,\n attributes,\n clientMetadata: {\n phone: u.phone,\n },\n });\n if (userSub) {\n return this.createProfile(userSub, u);\n }\n } catch (error_: any) {\n switch (error_.code) {\n case \"InvalidPasswordException\":\n error = \"auth.error.wrong_password\";\n break;\n case \"UserNotConfirmedException\":\n error = \"auth.error.user_not_confirmed\";\n break;\n case \"InvalidParameterException\":\n error = \"auth.error.invalid_parameter\";\n break;\n default:\n error = error_.message;\n }\n console.log(`AWS Sign UP error : ${error}`);\n }\n return Promise.reject(error);\n }\n\n /**\n * - Creates AWS user in Cognito for Hotel User Pool Schema (only email is required)\n * - Creates Profile in DynamoDB\n *\n * @param u User to be created\n */\n async createHotelUserAWSandProfile(\n user: {\n email: string;\n lastName: string;\n firstName: string;\n },\n ): Promise<Profile> {\n const attributes = {\n email: user.email.trim()\n };\n // AWSCognito\n const password = \"temporaryp\";\n let error;\n try {\n const { userSub } = await Auth.signUp({\n username: user.email.trim(),\n password,\n attributes,\n });\n if (userSub) {\n return this.createProfile(userSub, user);\n }\n } catch (error_: any) {\n switch (error_.code) {\n case \"InvalidPasswordException\":\n error = \"auth.error.wrong_password\";\n break;\n case \"UserNotConfirmedException\":\n error = \"auth.error.user_not_confirmed\";\n break;\n case \"InvalidParameterException\":\n error = \"auth.error.invalid_parameter\";\n break;\n default:\n error = error_.message;\n }\n console.log(`AWS Sign UP error : ${error}`);\n }\n return Promise.reject(error);\n }\n\n async createProfile(\n awsUserID: string,\n u: CreateUser,\n ): Promise<Profile> {\n const profile = await this.profileService.createProfile({\n userID: awsUserID,\n metadata: JSON.stringify({\n email: u.email,\n phone: u.phone,\n lastName: u.lastName,\n firstName: u.firstName,\n }),\n status: ProfileStatus.WAITING_FOR_ACTIVATION,\n });\n return profile;\n }\n\n currentOrganisation(spaceID: string = null): Organisation {\n if (this.cu) {\n if (!spaceID) {\n return this.currentMissions[0].organisation;\n }\n return this.currentMission(spaceID).organisation;\n }\n return null;\n }\n\n async current(\n user,\n fastConnect: boolean = false,\n ): Promise<ProfileEntity | null> {\n if (!this.cu && !this.updating) {\n this.updating = true;\n this.cu = await this.userFromAWSID(user.username);\n if (!this.cu && user.attributes.email) {\n console.log(\n `No profile for userID 🔪 ${user.attributes.email}`,\n );\n // There's no profiles, profiles.items.length === 0\n // It's maybe the 🤮 case where the profile has been saved with an email\n // instead of an hashed id\n // If found, we need to replace the id in both the Profile\n const emailProfile = await this.userFromAWSID(\n user.attributes.email,\n );\n if (emailProfile) {\n console.log(\n `👏 doing the spacehip reversal email on ${user.attributes.email}`,\n );\n this.cu = await this.userFromAWSID(user.username);\n }\n }\n if (!this.cu) {\n this.updating = false;\n await Auth.signOut();\n return null;\n }\n const missions = await this.missionService.instantMissionsOfCurrent(\n this.cu.id\n );\n this.currentMissions = missions;\n let okToLogin = true;\n if (!fastConnect && !this.hasManagerRoleInAnyMission()) {\n // check access token if not Fast connect (fast connect is for the guest connection via link(/redirect?user=))\n // checks visitors(museum or not), occupants, service\n okToLogin = await this.checkAccessToken(\n user.signInUserSession.accessToken.jwtToken,\n );\n }\n if (!okToLogin) {\n this.cu = null;\n this.currentMissions = [];\n this.updating = false;\n await Auth.signOut();\n return null;\n }\n await this.profileService.updateProfile({\n id: this.cu.id,\n lastConnectedAt: Date.now(),\n });\n if (!missions && this.location.path() !== \"/no-mission\") {\n this.ngZone.run(() => {\n this.router.navigate([\"/no-mission\"]);\n });\n }\n // console.log(\"user is changed emitting\");\n this.isChanged.next(true);\n this.updating = false;\n }\n return this.cu;\n }\n\n async userFromAWSID(userId: string): Promise<ProfileEntity | null> {\n const profile = await this.profileService.getProfileFromAWSID(userId);\n if (profile) {\n return new ProfileEntity(profile);\n }\n return null;\n }\n\n async userFromUserID(userID: string): Promise<ProfileEntity | null> {\n const profile = await this.profileService.getProfile(userID);\n return new ProfileEntity(profile);\n }\n\n currentMission(spaceID: string): Mission {\n const mission = this.getMissionForSpace(spaceID);\n return mission;\n }\n\n isManager(spaceID: string): boolean {\n const mission = this.getMissionForSpace(spaceID);\n if (mission) {\n return this.managers.includes(mission.role);\n }\n return false;\n }\n\n isService(spaceID: string): boolean {\n const mission = this.getMissionForSpace(spaceID);\n if (mission) {\n return mission.role === RoleStatus.SERVICE;\n }\n return false;\n }\n\n isAdmin(spaceID: string): boolean {\n const mission = this.getMissionForSpace(spaceID);\n if (mission) {\n return mission.role === RoleStatus.ADMIN;\n }\n return false;\n }\n\n isSmarterPlan(): boolean {\n if (!this.currentMissions) {\n return false;\n }\n const spMissions = this.currentMissions.filter(\n (m) =>\n m.organisationID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" &&\n this.managers.includes(m.role),\n ); // ID of SmarterPlan\n return spMissions.length > 0;\n }\n\n isSPAdmin(): boolean {\n if (!this.currentMissions) {\n return false;\n }\n const spMissions = this.currentMissions.filter(\n (m) =>\n m.organisationID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" &&\n m.role === RoleStatus.ADMIN,\n ); // ID of SmarterPlan\n return spMissions.length > 0;\n }\n\n getMissionForSpace(spaceID: string): Mission {\n if (!this.currentMissions) {\n return null;\n }\n return this.currentMissions.find((m) => m.spaceID === spaceID);\n }\n\n hasManagerRoleInAnyMission(): boolean {\n if (!this.currentMissions) {\n return false;\n }\n return this.currentMissions.some((mis) =>\n this.managers.includes(mis.role),\n );\n }\n\n hasServiceRoleInAnyMission(): boolean {\n if (!this.currentMissions) {\n return false;\n }\n return this.currentMissions.some(\n (mis) => mis.role === RoleStatus.SERVICE,\n );\n }\n\n hasAdminRoleInAnyMission(): boolean {\n if (!this.currentMissions) {\n return false;\n }\n return this.currentMissions.some(\n (mis) => mis.role === RoleStatus.ADMIN,\n );\n }\n\n async createOrUpdateMissionForOrgWithProperty(\n missionInput: Mission,\n orgID: string,\n create: boolean = true,\n ): Promise<Mission> {\n const mission = await (create\n ? this.missionService.create(missionInput)\n : this.missionService.update(missionInput));\n\n if (this.managers.includes(mission.role) && mission.spaceID) {\n const properties =\n await this.propertyService.getPropertiesForOrganisation(orgID);\n const propertySpaceIDs = properties.map(\n (property_) => property_.spaceID,\n );\n if (propertySpaceIDs.includes(mission.spaceID)) {\n return mission;\n }\n // we delegate the rights of the space\n await this.propertyService.createProperty({\n spaceID: mission.spaceID,\n organisationID: orgID,\n type: PropertyType.SHARED,\n });\n }\n return mission;\n }\n\n async softDeleteUser(userID: string) {\n const missions = await this.missionService.getMissionsFromUserID(userID);\n if (missions.length === 0) {\n await this.profileService.updateProfile({ id: userID, deletedAt: Date.now() });\n console.log(\"Profile soft deleted\");\n }\n }\n /**\n * Checks if the Profile (by id) can be removed completely from the DB (no missions in the DB)\n * @param profileID\n * @returns boolean\n */\n async canHardDeleteUser(profileID: string): Promise<boolean> {\n const missions = (await this.missionService.getMissionsFromUserID(profileID));\n return missions.length === 0;\n }\n\n async hardDeleteUser(userID: string) {\n const deleted = await this.profileService.deleteProfile(userID);\n console.log(\"Profile hard deleted\");\n return deleted;\n }\n\n getManagerMissions(): Mission[] {\n if (!this.currentMissions) {\n return [];\n }\n return this.currentMissions.filter((mis) =>\n this.managers.includes(mis.role),\n );\n }\n\n getAvalableLevelsForCurrentUser(): LevelStatus[] {\n if (!this.currentMissions) {\n return [LevelStatus.MINIMUM];\n }\n const levels = enumToArray(LevelStatus);\n const highestLevel = getHighestLevelForMissions(this.currentMissions);\n\n return levels.filter((level) =>\n getLevelsBelow(highestLevel).includes(level),\n );\n }\n\n getAvailableRolesForCurrentUser(): RoleStatus[] {\n if (!this.currentMissions) {\n return [RoleStatus.VISITOR];\n }\n const roles = enumToArray(RoleStatus);\n const highestRole = getHighestRoleForMissions(this.currentMissions);\n return roles.filter((role) =>\n getRolesBelowForManager(highestRole).includes(role),\n );\n }\n\n /** Test if the user have the role given in parameter : \"roleStatus\" */\n isRole(roleStatus: RoleStatus): boolean {\n if (!this.currentMissions) {\n return false;\n }\n return this.currentMissions.some((m) => m.role === roleStatus);\n }\n\n isGuide(spaceID: string = null): boolean {\n if (spaceID) {\n const mission = this.getMissionForSpace(spaceID);\n if (mission) {\n return mission.role === RoleStatus.GUIDE_MUSEUM;\n }\n }\n return this.isRole(RoleStatus.GUIDE_MUSEUM);\n }\n\n isMuseumVisitor(spaceID: string = null): boolean {\n if (spaceID) {\n const mission = this.getMissionForSpace(spaceID);\n if (mission) {\n return mission.role === RoleStatus.VISITOR_MUSEUM;\n }\n }\n return this.isRole(RoleStatus.VISITOR_MUSEUM);\n }\n\n isOccupant(): boolean {\n return this.isRole(RoleStatus.OCCUPANT);\n }\n\n isVisitor(spaceID: string = null): boolean {\n if (spaceID) {\n const mission = this.getMissionForSpace(spaceID);\n if (mission) {\n return mission.role === RoleStatus.VISITOR;\n }\n }\n return this.isRole(RoleStatus.VISITOR);\n }\n\n isMuseumUser(spaceID: string = null): boolean {\n return this.isGuide(spaceID) || this.isMuseumVisitor(spaceID);\n }\n\n hasOnlyMuseumRole(): boolean {\n if (this.currentMissions) {\n return this.currentMissions.every(\n (m) =>\n m.role === RoleStatus.GUIDE_MUSEUM ||\n m.role === RoleStatus.VISITOR_MUSEUM,\n );\n }\n return false;\n }\n\n async profileForMail(mail: string): Promise<Profile> {\n const usersWithMail = await this.profileService.getUsersForMail(mail);\n return usersWithMail.length > 0 ? usersWithMail[0] : null;\n }\n\n currentOrderedOrgList(): Organisation[] {\n if (!this.currentMissions) {\n return [];\n }\n const orderedOrgList = this.currentMissions.map(\n (mis) => mis.orderedOrganisation,\n );\n return filterUniqueArrayByID(orderedOrgList);\n }\n\n userHasAccessToAllZonesInSpace(spaceID: string): boolean {\n const missionsForSpace = this.currentMissions.filter(\n (mis) => mis.spaceID === spaceID,\n );\n return missionsForSpace.some(\n (mission) =>\n !mission.zoneID || (mission.zone && !mission.zone.parentID),\n );\n }\n\n async logoutCurrentAndSignOutAuth() {\n await this.profileService.updateProfile({\n id: this.cu.id,\n token: null,\n });\n this.cu = null;\n this.currentMissions = null;\n this.isChanged.next(false);\n await Auth.signOut();\n }\n\n async logoutCurrentWihtoutAuth() {\n await this.profileService.updateProfile({\n id: this.cu.id,\n token: null,\n });\n this.cu = null;\n this.currentMissions = null;\n this.isChanged.next(false);\n }\n\n async checkAccessToken(jwtToken: string): Promise<boolean> {\n const now = DateTime.local();\n if (this.cu.token && this.cu.tokenExpiredAt > now.toMillis()) {\n // check token\n if (this.cu.token === jwtToken) {\n // console.log(\"same aws token\");\n return true;\n }\n alert(this.translate.instant(\"auth.error.activeToken\"));\n return false;\n }\n await this.profileService.updateProfile({\n id: this.cu.id,\n tokenExpiredAt: now.plus({ minutes: 5 }).toMillis(),\n token: jwtToken,\n status: ProfileStatus.ACTIVE,\n });\n return true;\n }\n\n async clearUserToken(id) {\n await this.profileService.updateProfile({\n id: id,\n token: null,\n });\n }\n\n updateCurrentUser(profile: Profile) {\n this.cu = new ProfileEntity(profile);\n this.isChanged.next(true);\n }\n\n getSpModule(): SpModule {\n return this.spModule;\n }\n}\n","import {EventEmitter, Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {Zone} from '../types.service';\n\n/**\n * Atomic zone change service to break cyclic dependencies issue\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ZoneChangeService {\n\n zoneChange: Subject<Zone | null> = new Subject();\n zonesForUserChange: Subject<Zone[] | null> = new Subject();\n\n private currentZone: Zone;\n private currentZones: Zone[];\n\n public floorHasChanged: EventEmitter<Zone> = new EventEmitter<Zone>();\n\n constructor() {\n this.zoneChange.subscribe((zone) => {\n // console.log(`new zone ${JSON.stringify(zone)}`);\n this.currentZone = zone;\n });\n\n this.zonesForUserChange.subscribe((zones) => {\n // console.log(`new zones ${JSON.stringify(zones)}`);\n this.currentZones = zones;\n });\n }\n\n}\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 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 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 */\nimport { DbObjectType, MattertagActionMode, POI, PoiType } from \"./types.service\";\n\nexport class MattertagData {\n\n private object: DbObjectType;\n\n private type: PoiType = PoiType.TICKET;\n\n public elementID: string;\n\n private position: any = { x: 0, y: 0, z: 0 };\n\n private normal: any = { x: 0, y: 1, z: 0 };\n\n private mediaSrc: string;\n\n private sweepID: string;\n\n public customIconIndex = 0;\n\n private rotation: { x: number; y: number; };\n\n private poi: POI;\n\n constructor(type: PoiType) {\n this.setType(type);\n }\n\n /*-----------------------------------------------------------------------------\n Setters\n ------------------------------------------------------------------------------*/\n\n setType(type: PoiType) {\n this.type = type;\n }\n\n setObject(object: DbObjectType, tagType: PoiType) {\n this.object = object;\n this.setElementID(object.id);\n this.setType(tagType);\n }\n\n setElementID(ticketID: string) {\n this.elementID = ticketID;\n }\n\n setPosition(position: { x: number; y:number; z:number; }) {\n this.position = position;\n }\n\n setNormal(normal: { x: number; y:number; z:number; }) {\n this.normal = normal;\n }\n\n setMediaSource(source: string) {\n this.mediaSrc = source;\n }\n\n setSweepID(sweepID: string) {\n this.sweepID = sweepID;\n }\n\n setRotation(rotation: { x: number; y: number; }) {\n this.rotation = rotation;\n }\n\n setPoi(poi: POI) {\n this.poi = poi;\n }\n\n /*-----------------------------------------------------------------------------\n Getters\n ------------------------------------------------------------------------------*/\n\n // MattertagData\n getData() {\n let label = \"New Tag\";\n switch (this.type) {\n case PoiType.TICKET:\n label = this.object ? \"\" : \"New Tag\"; // if the object exists we inject title in html\n break;\n case PoiType.EQUIPMENT:\n label = this.object ? \"\" : \"New Tag\";\n break;\n case PoiType.MEASURE:\n label = this.object ? \"\" : \"New Tag\";\n break;\n case PoiType.DATA:\n label = this.object ? \"\" : \"New Tag\";\n break;\n case PoiType.DESK:\n label = this.object ? \"\" : \"New Tag\";\n break;\n case PoiType.OBJECT3D:\n label = this.object ? \"\" : \"Click on blinking icon to load a 3D object here\";\n break;\n case PoiType.ROOM:\n label = \"\";\n break;\n default:\n label = \"New Tag\";\n break;\n }\n const data = {\n label,\n description: \"\",\n anchorPosition: {\n x: this.position.x * 1,\n y: this.position.y * 1,\n z: this.position.z * 1,\n },\n stemVector: {\n x: this.normal.x * 0.3,\n y: this.normal.y * 0.3,\n z: this.normal.z * 0.3,\n },\n color: {\n // blue disc\n r: 0,\n g: 0,\n b: 1,\n },\n media: {\n type: \"mattertag.media.none\",\n src: \"\"\n },\n };\n return data;\n }\n\n getType() {\n return this.type;\n }\n\n getNormal() {\n return this.normal;\n }\n\n getCallbackActionMode(): MattertagActionMode {\n switch (this.type) {\n case PoiType.TICKET:\n return this.object ? MattertagActionMode.POSITION_TICKET : MattertagActionMode.ADD_TICKET;\n case PoiType.OBJECT3D:\n return MattertagActionMode.POSITION_OBJECT3D;\n // return this.object ? MattertagActionMode.POSITION_OBJECT3D : MattertagActionMode.ADD_OBJECT3D;\n case PoiType.EQUIPMENT:\n return this.object ? MattertagActionMode.POSITION_EQUIPMENT : MattertagActionMode.ADD_EQUIPMENT;\n case PoiType.DATA:\n return this.object ? MattertagActionMode.POSITION_DATA : MattertagActionMode.ADD_DATA;\n case PoiType.DESK:\n return this.object ? MattertagActionMode.POSITION_DATA : MattertagActionMode.ADD_DESK;\n case PoiType.ROOM:\n return this.object ? MattertagActionMode.POSITION_ROOM : MattertagActionMode.ADD_ROOM;\n default:\n return MattertagActionMode.ADD_TICKET;\n }\n }\n\n getIcon() {\n switch (this.type) {\n case PoiType.TICKET:\n return \"icon_ticket.png\";\n case PoiType.EQUIPMENT:\n return \"icon_equipment.png\";\n case PoiType.OBJECT3D:\n return \"icon_object3d.png\";\n }\n return \"\";\n }\n\n getCoordinateString() {\n return JSON.stringify({\n x: this.position.x,\n y: this.position.y,\n z: this.position.z,\n xRotation: this.rotation ? this.rotation.x : null,\n yRotation: this.rotation ? this.rotation.y : null,\n });\n }\n\n getMetadataString() {\n return JSON.stringify({\n icon: this.getIcon(),\n normal: this.getNormal(),\n });\n }\n\n getSweepID() {\n return this.sweepID;\n }\n\n getObject(): any {\n return this.object;\n }\n\n\n getRotation(): { x: number; y: number; } {\n return this.rotation;\n }\n\n getPoi(): POI {\n return this.poi;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class BaseVisibilityService {\n detailShowing = new Subject<boolean>();\n\n constructor() { }\n}","\nexport class Config {\n my_config: {\n icon_ticket?: string;\n icon_equipment?: string;\n icon_measure?: string;\n icon_data?: string;\n icon_object3d?: string;\n icon_position: string;\n MAX_CHARACTER_DESCRIPTION_TAG: number;\n DEFAULT_HEIGHT_HTML_TAG: number;\n DEFAULT_OPACITY_TAG: number;\n COLD_LIMIT?: number;\n HOT_LIMIT?: number;\n DEFAULT_WIDTH_HTML_TAG: number;\n MAX_IMAGE_HEIGHT_HTML_TAG: number;\n icon_room_available?: string;\n icon_room_unavailable?: string;\n icon_room_chosen?: string;\n icon_room_viewed?: string;\n };\n\n constructor() { }\n}\n","import {Inject, Injectable, NgZone} from '@angular/core';\r\nimport {Router} from '@angular/router';\r\nimport {Subject} from 'rxjs';\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 {BaseTagService} from './tag.service';\r\nimport {BaseVisibilityService} from './baseVisibility.service';\r\nimport {Config} from '../config';\r\nimport {CameraMode} from '../types.service';\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 public sdk: any;\r\n\r\n private container: any;\r\n\r\n // Position camera\r\n private poseMatterport: any;\r\n\r\n public poseCamera: { rotation: any; position: any; sweep: any };\r\n\r\n // Pointer trick\r\n private pointerButton: any;\r\n\r\n // 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 private 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 /**\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 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 (document.location.href.indexOf('-dev') !== -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 // 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 (document.URL.indexOf('https://dev.smarterplan.io') !== -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 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 // on tag click open details page\r\n this.sdk.on('tag.click', (sid: string) => {\r\n // get object of this tag\r\n try {\r\n const mattertagData = this.dictionnaryTags.get(sid);\r\n const url = tagService.getUrlForSeeDetails(\r\n mattertagData.getObject(),\r\n mattertagData.getType()\r\n );\r\n if (url !== '') {\r\n this.visibilityService.detailShowing.next(true);\r\n this.ngZone.run(() => {\r\n this.router.navigate([url]);\r\n });\r\n }\r\n } catch {\r\n console.log('Cannot show details for tag');\r\n }\r\n });\r\n\r\n // Pointer trick\r\n // Create a div that will appear when the cursor is still\r\n // It will intercept the click of the mouse before it trigerring the Matterport's tour navigation\r\n this.timerPointer = setInterval(\r\n this.updatePointerTrick.bind(this),\r\n 50\r\n );\r\n\r\n /**\r\n * 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 }.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 resolve(true);\r\n }.bind(this)\r\n );\r\n });\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 = `${\r\n 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 return this.dictionnaryObjects3D.get(uuid);\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/${\r\n 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/${\r\n 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([`${this.router.url}`], {\r\n queryParams: {positioning: true},\r\n });\r\n }\r\n break;\r\n case MattertagActionMode.POSITION_ROOM:\r\n if (lastTag) {\r\n this.router.navigate([`${this.router.url}`], {\r\n queryParams: {positioning: true},\r\n });\r\n }\r\n break;\r\n default:\r\n this.router.navigate([`${this.router.url}`]);\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 (document.location.href.indexOf('-dev') !== -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 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 const modelNode = sceneObject.addNode();\r\n const initial = {\r\n url: `/assets/3Dobjects/objects/${obj.object}${\r\n obj.format.indexOf('.') === -1 ? '.' + obj.format : obj.format\r\n }`,\r\n visible: true,\r\n colliderEnabled: true\r\n };\r\n\r\n switch (obj.format) {\r\n case '.obj':\r\n case 'obj':\r\n modelNode.addComponent('mp.objLoader', initial);\r\n break;\r\n case '.fbx':\r\n case 'fbx':\r\n modelNode.addComponent('mp.fbxLoader', initial);\r\n break;\r\n case '.gltf':\r\n case 'gltf':\r\n modelNode.addComponent('mp.gltfLoader', initial);\r\n break;\r\n case '.glb':\r\n case 'glb':\r\n modelNode.addComponent('mp.gltfLoader', initial);\r\n break;\r\n case '.dae':\r\n case 'dae':\r\n 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 // 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 // if (obj.mode) {\r\n // this.set3DObjectMode(node, obj.mode);\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\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) {\r\n this.attachGizmoControlTo3DObject(\r\n modelNode,\r\n sceneObject,\r\n mode,\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 this.dictionnaryObjects3D.set(modelNode.obj3D.uuid, modelNode);\r\n this.dictionnarySceneObjects3D.set(modelNode.obj3D.uuid, sceneObject);\r\n\r\n sceneObject.start();\r\n resolve(this.lastObject3D);\r\n });\r\n }\r\n\r\n getSceneNodeFromObject3DId(uuid: string): any {\r\n return this.dictionnarySceneObjects3D.get(uuid);\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 ): 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.inputs.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\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\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 // 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\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 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 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>=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>=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 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';\nimport { Router } from '@angular/router';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { ViewerService } from '../../services/viewer.service';\n\n@Component({\n selector: 'lib-modal-switch-visit',\n templateUrl: './modal-switch-visit.component.html',\n styleUrls: ['./modal-switch-visit.component.scss']\n})\nexport class ModalSwitchVisitComponent implements OnInit {\n @Input() content: string;\n @Input() model3D: string;\n @Input() spaceID: string;\n @Input() dataToMove: { sweepToMove: string, rotation: any; };\n constructor(public activeModal: NgbActiveModal, private router: Router, private viewerService: ViewerService,\n // private objectSubService: ObjectSubscriptionService\n ) { }\n\n ngOnInit(): void { }\n\n switchVisit() {\n this.activeModal.close();\n if (this.dataToMove) {\n this.viewerService.setSweepToMove(this.dataToMove.sweepToMove);\n this.viewerService.setRotationToMove(this.dataToMove.rotation);\n }\n // this.objectSubService.forceRemove = true; // we reset the tags when changing visit\n this.router.navigate([\"visit\", this.spaceID], {\n queryParams: { model3D: this.model3D },\n });\n }\n\n}\n","<div class=\"modal-container\">\n <p>{{content}}</p>\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"switchVisit()\">{{'Yes, switch visit' | translate }}</button>\n <button class=\"btn btn-outline-primary rounded-pill\"(click)=\"activeModal.close()\">{{'No, stay here' | translate }}</button>\n</div>\n","import { Storage } from \"aws-amplify\";\nimport { Equipment } from \"../types.service\";\n\nexport const deleteFromS3 = async (path) => {\n await Storage.remove(path, { level: \"public\" })\n .then((result) => console.log(\"Successfully deleted =>\", result))\n .catch((error) => console.log(\"Deleting from S3 error:\", error));\n};\n\nexport const uploadFileToS3 = async (\n path: string,\n file: File,\n objectId: string | null,\n): Promise<string> => {\n const prefix = objectId ? `${objectId.slice(0, 8)}_` : \"\";\n return Storage.put(path + prefix + file.name, file, {\n progressCallback(progress) {\n // console.log('Uploaded : ', progress);\n },\n contentType: file.type,\n })\n .then((result: any) => {\n console.log(\"Success =>\", result);\n return result.key;\n })\n .catch((error) => {\n console.log(\"error =>\", error);\n return null;\n });\n};\n\nexport const getSignedImageUrlForEquipment = async (\n equip: Equipment,\n): Promise<string | null> => {\n if (!equip.photo) {\n return Promise.resolve(null);\n }\n return Storage.get(equip.photo, { level: \"public\" })\n .then((result) => {\n return result as string;\n })\n .catch((error) => {\n console.log(\"error fetching file from s3 =>\", error);\n return null;\n });\n\n};\n\nexport const getSignedImageUrlForProfile = async (\n profile,\n): Promise<string | void> => {\n return Storage.get(profile.avatar, { level: \"public\" })\n .then((result) => {\n return result as string;\n })\n .catch((error) => {\n console.log(\"error fetching file from s3 =>\", error);\n });\n};\n\nexport const getSignedImageUrlForSpace = async (\n space,\n): Promise<string | void> => {\n return Storage.get(space.annexes, { level: \"public\" })\n .then((result) => {\n return result as string;\n })\n .catch((error) => {\n console.log(\"error fetching file from s3 =>\", error);\n });\n};\n\nexport const uploadBase64Image = async (\n uri: string,\n objectId: string | null,\n path: string,\n friendlyFileName: string,\n): Promise<string> => {\n return fetch(uri)\n .then((res) => res.blob())\n .then((blob) => {\n const file = new File([blob], `${friendlyFileName}.jpeg`, {\n type: \"image/jpeg\",\n });\n return uploadFileToS3(path, file, objectId);\n });\n};\n\nexport const removeAllFilesFromFolderS3 = async (\n folderPath: string,\n): Promise<any> => {\n const arrayOfPromises = [];\n Storage.list(folderPath, { level: \"public\" })\n .then((res) => {\n Object.keys(res).map(async (key) => {\n const file = res[key];\n arrayOfPromises.push(deleteFromS3(file.key));\n });\n })\n .catch((error) => console.error(\"List failure\", error));\n return Promise.all(arrayOfPromises);\n};\n\nexport const listFilesInFolder = async (folderPath: string): Promise<any> => {\n return Storage.list(folderPath, { level: \"public\", pageSize: 'ALL' })\n .then((res) => {\n return res.results;\n })\n .catch((error) => console.error(\"List failure\", error));\n};\n\nexport const getSignedFile = async (path): Promise<string | null> => {\n return Storage.get(path, { level: \"public\" })\n .then((result) => {\n return result as string;\n })\n .catch((error) => {\n console.log(\"error fetching file from s3 =>\", error);\n return null;\n });\n\n};\n\nexport const downloadFileAsObject = async (path): Promise<Object | void> => {\n return Storage.get(path, { download: true, level: \"public\" })\n .then((result) => {\n return result as Object;\n })\n .catch((error) => {\n console.log(\"error fetching file from s3 =>\", error);\n });\n};\n\nexport const getBufferForFileFromS3 = async (path): Promise<ArrayBuffer> => {\n const object = await downloadFileAsObject(path);\n if (object) {\n // @ts-ignore\n return new ArrayBuffer(object.Body, \"binary\");\n }\n return null;\n};\n\nexport const uploadJsonToS3 = async (\n path: string,\n json: string,\n filename: string,\n): Promise<string> => {\n return Storage.put(path + filename, json, {\n contentType: \"application/json\",\n })\n .then((result: any) => {\n console.log(\"Success =>\", result);\n return result.key;\n })\n .catch((error) => {\n console.log(\"error =>\", error);\n return null;\n });\n};","import { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { ModalSwitchVisitComponent } from \"./components/modal-switch-visit/modal-switch-visit.component\";\nimport { downloadFileAsObject } from \"./services/s3.service\";\nimport { EquipmentDocument, LevelStatus, Locale, Mission, PoiType, RoleStatus } from \"./types.service\";\n\nexport function getDistanceBetweenTwoPoints(startPoint, endPoint) {\n const dx = endPoint.x - startPoint.x;\n const dy = endPoint.y - startPoint.y;\n const dz = endPoint.z - startPoint.z;\n const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);\n return Math.round(distance * 100) / 100;\n}\n\nexport function poiTypeToString(type: PoiType): string {\n switch (type) {\n case PoiType.EQUIPMENT:\n return \"equipment\";\n case PoiType.TICKET:\n return \"ticket\";\n case PoiType.DATA:\n return \"data\";\n case PoiType.DESK:\n return \"data\";\n case PoiType.INFORMATION:\n return \"information\";\n case PoiType.MEASURE:\n return \"measure\";\n case PoiType.PEOPLE:\n return \"people\";\n default:\n return \"ticket\";\n }\n}\n\nexport function wait(timeout: number): Promise<void> {\n return new Promise((resolve) => {\n timeout = timeout || 2000;\n setTimeout(() => {\n resolve();\n }, timeout);\n });\n}\n\nexport const waitUntil = (condition: () => boolean) => {\n return new Promise<void>((resolve, reject) => {\n const intervalId = setInterval(() => {\n if (condition()) {\n clearInterval(intervalId);\n resolve();\n }\n }, 30);\n });\n};\n\nexport function enumToArray(enumerable: any) {\n return Object.keys(enumerable)\n .filter((value) => isNaN(Number(value)) === true)\n .map((key) => enumerable[key]);\n}\n\nexport function getLevelsBelow(level: LevelStatus): LevelStatus[] {\n const all = [\n LevelStatus.MINIMUM,\n LevelStatus.LOW,\n LevelStatus.MEDIUM,\n LevelStatus.HIGH,\n LevelStatus.MAXIMUM,\n ];\n switch (level) {\n case LevelStatus.MAXIMUM:\n return all;\n case LevelStatus.HIGH:\n all.splice(4, 1);\n return all;\n case LevelStatus.MEDIUM:\n all.splice(3, 2);\n return all;\n case LevelStatus.LOW:\n return [LevelStatus.MINIMUM, LevelStatus.LOW];\n case LevelStatus.MINIMUM:\n return [LevelStatus.MINIMUM];\n default:\n return [LevelStatus.MINIMUM];\n }\n}\n\nexport function getHighestLevelForMissions(missions: Mission[]): LevelStatus {\n let latestVisibleLevels = [LevelStatus.MINIMUM];\n for (const m of missions) {\n const visibleLevels = getLevelsBelow(m.level);\n if (visibleLevels.length > latestVisibleLevels.length) {\n latestVisibleLevels = visibleLevels;\n }\n }\n switch (latestVisibleLevels.length) {\n case 1:\n return LevelStatus.MINIMUM;\n case 2:\n return LevelStatus.LOW;\n case 3:\n return LevelStatus.MEDIUM;\n case 4:\n return LevelStatus.HIGH;\n case 5:\n return LevelStatus.MAXIMUM;\n default:\n return LevelStatus.MINIMUM;\n }\n}\n\nexport function getHighestRoleForMissions(missions: Mission[]): RoleStatus {\n let highestRole = RoleStatus.VISITOR;\n for (const m of missions) {\n if (m.role === RoleStatus.ADMIN) {\n return RoleStatus.ADMIN;\n }\n if (highestRole === RoleStatus.OWNER) {\n continue;\n }\n if (m.role === RoleStatus.OWNER) {\n highestRole = RoleStatus.OWNER;\n }\n if (m.role === RoleStatus.MANAGER) {\n highestRole = RoleStatus.MANAGER;\n }\n if (\n m.role === RoleStatus.SERVICE &&\n highestRole !== RoleStatus.MANAGER\n ) {\n highestRole = RoleStatus.SERVICE;\n }\n if (\n m.role === RoleStatus.OCCUPANT &&\n highestRole === RoleStatus.VISITOR\n ) {\n highestRole = RoleStatus.OCCUPANT;\n }\n if (m.role === RoleStatus.GUIDE_MUSEUM) {\n highestRole = RoleStatus.GUIDE_MUSEUM;\n }\n if (m.role === RoleStatus.VISITOR_MUSEUM) {\n highestRole = RoleStatus.VISITOR_MUSEUM;\n }\n }\n return highestRole;\n}\n\nexport function getRolesBelowForManager(role: RoleStatus): RoleStatus[] {\n const all = [\n RoleStatus.VISITOR,\n RoleStatus.OCCUPANT,\n RoleStatus.SERVICE,\n RoleStatus.MANAGER,\n RoleStatus.OWNER,\n RoleStatus.ADMIN,\n ];\n const museum = [RoleStatus.VISITOR_MUSEUM, RoleStatus.GUIDE_MUSEUM];\n switch (role) {\n case RoleStatus.ADMIN:\n return [...all, ...museum];\n case RoleStatus.OWNER:\n all.splice(5, 1);\n return all;\n case RoleStatus.MANAGER:\n all.splice(4, 2);\n return all;\n case RoleStatus.GUIDE_MUSEUM:\n return museum;\n default:\n return all.splice(4, 2);\n }\n}\n\nexport function filterUniqueArrayByID(arrayOfObjects: any[]): any[] {\n return arrayOfObjects.filter(\n (v, index, a) => a.findIndex((t) => t.id === v.id) === index,\n );\n}\n\nexport function removeNullKeysFromObject(object: Object) {\n for (const key of Object.keys(object)) {\n if (object[key] === null) {\n delete object[key];\n }\n }\n}\n\n/**\n * Test if a date has expired\n * @param date\n * @returns true if the date has expired, false otherwise\n */\nexport function dateHasExpired(\n date: string | Date | number | null | undefined,\n): boolean {\n if (date) {\n return new Date(date) <= new Date();\n }\n return false;\n}\n\nexport function stringLocaleToEnum(locale: string): Locale {\n switch (locale) {\n case \"en\":\n return Locale.EN;\n case \"fr\":\n return Locale.FR;\n default:\n return Locale.EN;\n }\n}\n\n\nexport function getMetaForImage(url): Promise<any> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n\n img.addEventListener(\"load\", () => {\n resolve(img);\n });\n img.addEventListener(\"error\", () => reject());\n img.src = url;\n });\n}\n\nexport function sortAlphabeticallyOnName(array: { name: string; }[]): any[] {\n return array.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function validEmail(email: string) {\n const re =\n /^(([^\\s\"(),.:;<>@[\\\\\\]]+(\\.[^\\s\"(),.:;<>@[\\\\\\]]+)*)|(\".+\"))@((\\[(?:\\d{1,3}\\.){3}\\d{1,3}])|(([\\dA-Za-z\\-]+\\.)+[A-Za-z]{2,}))$/;\n return re.test(email);\n}\n\nexport function downloadBlob(blob, filename) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename || \"download\";\n const clickHandler = () => {\n setTimeout(() => {\n URL.revokeObjectURL(url);\n a.removeEventListener(\"click\", clickHandler);\n }, 150);\n };\n a.addEventListener(\"click\", clickHandler, false);\n a.click();\n return a;\n}\n\n/*\n Open modal if one has to switch virtual visit\n*/\nexport function openModalForVisitSwitch(\n modalService: NgbModal,\n model3D: string,\n spaceID: string,\n dataToMove: { sweepToMove: string, rotation: any; } | null = null\n) {\n const modalReference = modalService.open(ModalSwitchVisitComponent);\n modalReference.componentInstance.content =\n \"This object belongs to another 3D visit. Are you sure you want to switch the visit?\";\n modalReference.componentInstance.model3D = model3D;\n modalReference.componentInstance.spaceID = spaceID;\n if (dataToMove) {\n modalReference.componentInstance.dataToMove = dataToMove;\n }\n\n}\n\n/**\n * Return a string of a given date time in local format.\n * The format is determined by the current language.\n */\nexport function dateTimeToLocalString(\n date: number | string | Date,\n translate?: TranslateService,\n mode?,\n): string {\n let lang = \"en-EN\";\n if (translate) {\n /** Get current language */\n lang = translate.currentLang\n ? translate.currentLang\n : translate.defaultLang;\n /** Transforme '_fr' to 'fr' */\n if (lang) {\n lang = lang.slice(1);\n }\n\n }\n\n let options: {\n month?;\n year?;\n day?;\n hour?;\n minute?;\n second?;\n dateStyle?;\n timeStyle?;\n weekday?;\n timeZone?;\n timeZoneName?;\n };\n switch (mode) {\n case \"day_numeric\":\n options = { day: \"numeric\" };\n break;\n case \"day\":\n options = { weekday: \"long\" };\n break;\n case \"date\":\n options = { dateStyle: \"long\" };\n break;\n case \"short_date_time\":\n options = {\n year: \"2-digit\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n break;\n case \"time\":\n options = { hour: \"numeric\", minute: \"numeric\" };\n break;\n case \"day_time_zone\":\n options = {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZoneName: \"shortOffset\",\n };\n break;\n default:\n options = {\n dateStyle: \"long\",\n timeStyle: \"short\",\n };\n }\n return new Date(date).toLocaleString(lang, options);\n}\n\n/**\n * Compares two string arrays\n * @param array1\n * @param array2\n * @returns\n */\nexport function arraysContainSameElements(\n array1: string[],\n array2: string[],\n): boolean {\n array1.sort();\n array2.sort();\n return JSON.stringify(array1) === JSON.stringify(array2);\n}\n\n\nexport function getVisitUrl(currentUrl: string): string {\n const path = currentUrl.split(\"/\");\n path.splice(3, path.length - 2);\n return path.join(\"/\");\n}\n\n/**\n * Extract spaceID from url when in visit 3D\n */\nexport function getSpaceIDFromUrl(url: string): string {\n const visitUrl = getVisitUrl(url);\n return visitUrl.split(\"/\")[2];\n}\n\n/**\n * Download related\n */\nimport FileSaver from \"file-saver\";\n\nexport function downloadFile(fileUrl: string, fileName: string) {\n FileSaver.saveAs(fileUrl + fileName, fileName);\n}\n\nexport function openDocument(fileUrl: string, fileName: string, id: number) {\n window.open(`${fileUrl + fileName}#doc=${id}`, \"_blank\", \"\");\n}\n\nexport const downloadEquipmentDocument = async (\n document_: EquipmentDocument,\n): Promise<Object | void> => {\n const signedFile = await downloadFileAsObject(document_.url);\n if (signedFile) {\n // @ts-ignore\n downloadBlob(signedFile.Body, document_.filename);\n }\n};\n\nexport async function checkElementById(selector) {\n let querySelector = null;\n while (querySelector === null) {\n await rafAsync();\n querySelector = document.getElementById(selector);\n }\n return querySelector;\n}\n\nfunction rafAsync() {\n return new Promise((resolve) => {\n requestAnimationFrame(resolve); // faster than set time out\n });\n}\n\n/* @param {Array} numbers An array of numbers.\n * @return {Number} The calculated average (or mean) value from the specified\n * numbers.\n */\nexport function mean(numbers: number[]) {\n let total = 0;\n for (const number of numbers) {\n total += number;\n }\n return total / numbers.length;\n}\n\nexport function convertTimestampToLocalZone(timestamp: number): number {\n const selectedDate = new Date(timestamp);\n const localOffset = -1 * selectedDate.getTimezoneOffset() * 60000;\n const stamp = timestamp + localOffset;\n return stamp;\n}\n\n/**\n * Return string for period of time. Parameters are DateTime objects of luxon library.\n */\nexport function translateDatePeriod(\n translateService: any,\n dateStartPeriod: any,\n dateEndPeriod: any,\n): string {\n const locale = getLocaleLong(translateService);\n return `${dateStartPeriod.toLocaleString({\n locale,\n month: \"long\",\n day: \"2-digit\",\n })} - ${dateEndPeriod.toLocaleString({\n locale,\n month: \"long\",\n day: \"2-digit\",\n })} `;\n}\n\n\n/**\n* Return local in the canonical form: \"en-GB\", \"fr-FR\"\n*/\nexport function getLocaleLong(translate: TranslateService): string {\n let lang = translate.currentLang\n ? translate.currentLang\n : translate.defaultLang;\n\n /** Transform '_fr' to 'fr' */\n lang = lang.slice(1);\n if (lang === \"en\") {\n return \"en-GB\";\n }\n return `${lang}-${lang.toUpperCase()}`;\n}\n\n/**\n * Return local in the short form: \"en\", \"fr\"\n */\nexport function getLocaleShort(translate: TranslateService): string {\n let lang = translate.currentLang\n ? translate.currentLang\n : translate.defaultLang;\n\n /** Transform '_fr' to 'fr' */\n lang = lang.slice(1);\n return lang;\n}\n\n/**\n * Format string to lowercase, no spaces\n */\nexport function stringToLowercaseNoSpaces(input: string): string {\n const words = input.toLowerCase().split(/\\s+/);\n return words.join(\"\");\n}\n\n/**\n * Test if the object === {}\n * @param obj object {key:value}\n * @returns boolean\n */\nexport function isEmptyObject(object): boolean {\n for (const x in object) {\n return false;\n }\n return true;\n}\n\nexport function shuffleArray(array: any[]) {\n const newArray = [...array];\n for (let index = array.length - 1; index > 0; index--) {\n const indexNew = Math.floor(Math.random() * (index + 1));\n // eslint-disable-next-line no-param-reassign\n [newArray[index], newArray[indexNew]] = [\n newArray[indexNew],\n newArray[index],\n ];\n }\n return newArray;\n}\n\nexport function numberToDateString(timestamp: number): string {\n const jsDate = new Date(timestamp);\n return jsDate.toLocaleString(\"fr-FR\");\n}\n\nexport function durationToString(\n duration: number,\n translate: TranslateService,\n): string {\n const days = Math.floor(duration / 3600 / 24);\n const hours = Math.floor((duration - days * 24 * 3600) / 3600);\n const minutes = Math.floor((duration % 3600) / 60);\n const seconds = Math.floor(duration % 60);\n\n const daysString = translate.instant(\"day(s)\");\n const hoursString = translate.instant(\"hour(s)\");\n const oneHourString = translate.instant(\"hour\");\n const minutesString = translate.instant(\"minute(s)\");\n const secondsString = translate.instant(\"second(s)\");\n\n if (duration > 3600 * 24 * 7) {\n return `${days} ${daysString}`;\n }\n if (duration > 3600 * 24) {\n return `${days} ${daysString} ${hours} ${hoursString}`;\n }\n if (duration === 3600) {\n return `${hours} ${oneHourString}`;\n }\n if (duration > 3600) {\n if (minutes === 0) {\n return `${hours} ${hoursString}`;\n }\n return `${hours} ${hoursString} ${minutes} ${minutesString}`;\n }\n if (duration >= 60) {\n if (seconds === 0) {\n return `${minutes} ${minutesString}`;\n }\n return `${minutes} ${minutesString} ${seconds} ${secondsString}`;\n }\n return `${seconds} ${secondsString}`;\n}\n\n\n","/* eslint-disable class-methods-use-this */\nimport { Inject, Injectable } from '@angular/core';\nimport { DbObjectType, Zone } from '../../types.service';\nimport { BaseUserService } from '../user.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZoneService {\n API: any; //AWS APIService\n\n constructor(\n @Inject('currentAPIService') apiInjected: any,\n private userService: BaseUserService\n ) {\n this.API = apiInjected;\n }\n\n async getZonesBySpace(spaceID: string): Promise<Array<Zone>> {\n const list: Zone[] = [];\n if (this.API.__proto__.hasOwnProperty('ZonesBySpace')) {\n const zones = await this.API.__proto__.ZonesBySpace(spaceID);\n if (zones) {\n for (const zone of zones.items) {\n const zoneObject = { ...zone } as Zone;\n zoneObject.virtual = this.zoneIsVirtual(zone);\n list.push(zoneObject);\n }\n }\n return list;\n } else {\n throw new Error('ZonesBySpace not implemented');\n }\n }\n\n async getZonesBySpaceForUser(spaceID: string): Promise<Zone[]> {\n const missionForLocation = this.userService.currentMission(spaceID);\n const list = [];\n if (missionForLocation && missionForLocation.zoneID) {\n const allowedZone = await this.getZone(missionForLocation.zoneID);\n allowedZone.virtual = this.zoneIsVirtual(allowedZone);\n if (!allowedZone.parent) {\n // the whole building is authorized\n return this.getZonesBySpace(spaceID);\n }\n list.push(allowedZone);\n // allow all children zones of an allowed parent\n const children = (await this.API.__proto__.ZonesByZone(allowedZone.id))\n .items;\n if (children.length > 0) {\n for (const child of children) {\n const childZone = { ...child } as Zone;\n childZone.virtual = this.zoneIsVirtual(child);\n list.push(childZone);\n }\n }\n // allow the parent Floor of the allowed zone\n if (\n allowedZone.parent.layer &&\n allowedZone.parent.layer.name === 'FLOOR'\n ) {\n list.push(allowedZone.parent);\n }\n } else {\n return this.getZonesBySpace(spaceID);\n }\n return list;\n }\n\n async filterZonesIDsForUser(zones: Zone[]): Promise<Zone[]> {\n const { spaceID } = zones[0];\n const zoneIDs = new Set(zones.map((zone) => zone.id));\n const allowedZones = await this.getZonesBySpaceForUser(spaceID);\n const filteredZones = allowedZones.filter((zone) => zoneIDs.has(zone.id));\n return filteredZones;\n }\n\n async deleteZone(zoneID: string): Promise<Zone> {\n return this.API.__proto__.DeleteZone({ id: zoneID });\n }\n\n async getZonesForSweepForSpace(\n sweepID: string,\n spaceID: string\n ): Promise<Zone[]> {\n const zonesSpace = (await this.API.__proto__.ZonesBySpace(spaceID)).items;\n return zonesSpace.filter(\n (zone) => zone.sweepIDs && zone.sweepIDs.includes(sweepID)\n );\n }\n\n // // eslint-disable-next-line class-methods-use-this\n sortZonesFromChildToParent(zonesToSort: Zone[]) {\n // get default\n const defaultZone = zonesToSort.find((z) => !z.parentID);\n if (defaultZone) {\n const indexOf = zonesToSort.indexOf(defaultZone);\n zonesToSort.splice(indexOf, 1);\n }\n const zones = zonesToSort.sort((a, b) => {\n if (a.parentID === b.id) {\n return -1;\n }\n return 0;\n });\n // so far by number of navigation points in them\n // const zones = zonesToSort.sort(\n // (a, b) => a.navigations.items.length - b.navigations.items.length,\n // );\n if (defaultZone) {\n zones.push(defaultZone);\n }\n return zones;\n }\n\n async getZonesForObject(object: DbObjectType): Promise<Zone[]> {\n if (object.pois.items && object.pois.items.length > 0) {\n const [poi] = object.pois.items;\n if (poi.matterportSweepID) {\n const zones = await this.getZonesForSweepForSpace(\n poi.matterportSweepID,\n object.spaceID\n );\n return zones;\n }\n }\n return null;\n }\n\n async createVirtualZone(zoneInput: Zone): Promise<Zone> {\n zoneInput.sweepIDs = [];\n const zone = await this.API.__proto__.CreateZone(zoneInput);\n console.log('virtual zone created', zone);\n return zone;\n }\n\n zoneIsVirtual(zone: Zone): boolean {\n if (!zone.sweepIDs) {\n return true;\n }\n if (\n (zone.tags && zone.tags.includes('virtual')) ||\n zone.sweepIDs.length === 0\n ) {\n return true;\n }\n return false;\n }\n\n async getModel3DForZone(zoneID: string): Promise<string> {\n const zone = await this.API.__proto__.GetZone(zoneID);\n if (zone.nodeIDs) {\n const node = await this.API.__proto__.GetNode(zone.nodeIDs[0]);\n return node.model3D;\n }\n return null;\n }\n\n async getZone(zoneID: string): Promise<Zone> {\n return this.API.__proto__.GetZone(zoneID);\n }\n\n async getDefaultZoneForSpace(spaceID: string): Promise<Zone> {\n return this.getZonesBySpace(spaceID).then(async (zones) => {\n const zonesBuilding = zones.filter(\n (zone) => zone.layer && zone.layer.name === 'BUILDING'\n );\n if (zonesBuilding.length === 1) {\n return zonesBuilding[0];\n }\n const parentZone = zones.find((zone) => !zone.parentID);\n return parentZone;\n });\n }\n\n async create(input: Zone): Promise<Zone> {\n return this.API.__proto__.CreateZone(input);\n }\n\n // async getSortedZonesForSweepForUser(\n // sweep: string,\n // spaceID: string,\n // ): Promise<Zone[]> {\n // if (!spaceID) {\n // return [];\n // }\n // const zones = await this.getZonesForSweepForSpace(sweep, spaceID);\n // if (zones.length === 0) {\n // return [];\n // }\n // const filteredZones = await this.filterZonesIDsForUser(zones);\n // if (filteredZones.length > 0) {\n // let zonesSorted = this.sortZonesFromChildToParent(filteredZones);\n // zonesSorted = zonesSorted.filter((zone) => zone !== undefined);\n // return zonesSorted;\n // }\n // return [];\n // }\n\n async updateZone(input: any): Promise<Zone> {\n return this.API.__proto__.UpdateZone(input);\n }\n\n async getZonesForNodeForSpace(\n nodeID: string,\n spaceID: string\n ): Promise<Zone[]> {\n return this.API.__proto__.ZonesBySpace(spaceID).then(async (zones) => {\n const filteredZones = zones.items.filter(\n (zone) => zone.nodeIDs && zone.nodeIDs.includes(nodeID)\n );\n return filteredZones;\n });\n }\n\n /**\n * Gets the Zone (layer FLOOR) for a matterport sweep ID in a given Space\n * @param sweepID\n * @param spaceID\n * @returns Zone\n */\n async getFloorZoneForSweepInSpace(\n sweepID: string,\n spaceID: string\n ): Promise<Zone> {\n const zones = await this.getZonesForSweepForSpace(sweepID, spaceID);\n const floors = zones.filter(\n (zone) => zone.layer && zone.layer.name.includes('FLOOR')\n );\n return floors.length > 0 ? floors[0] : null;\n }\n\n /**\n * Get zones with audio track for entire space\n * @param spaceID\n * @returns Promise<Zone[]>\n */\n async getAudioZonesForSpace(spaceID: string): Promise<Zone[]> {\n const allZones = await this.getZonesBySpace(spaceID);\n return allZones.filter((zone) => zone.audioID);\n }\n\n /**\n * Get audio zones for user (within allowed zones)\n * @param spaceID\n * @returns Promise<Zone[]>\n */\n async getAudioZonesForUserForSpace(spaceID: string): Promise<Zone[]> {\n const userZones = await this.getZonesBySpaceForUser(spaceID);\n return userZones.filter((zone) => zone.audioID);\n }\n\n /**\n * Get Zones by Parent Zone ID\n * @param parentZoneID string\n * @returns Promise<Zone[]>\n */\n async getZonesByParentZone(parentZoneID: string): Promise<Zone[]> {\n return this.API.__proto__\n .ZonesByZone(parentZoneID)\n .then((res) => res.items);\n }\n}\n","/* eslint-disable no-case-declarations */\n/* eslint-disable no-await-in-loop */\n/* eslint-disable guard-for-in */\n/* eslint-disable class-methods-use-this */\nimport { Injectable } from \"@angular/core\";\nimport { Subject, Subscription } from \"rxjs\";\nimport { getLevelsBelow, getHighestLevelForMissions, getHighestRoleForMissions, filterUniqueArrayByID } from \"../helpers.service\";\nimport {\n Zone,\n Equipment,\n LevelStatus,\n Measurement,\n Mission,\n Organisation,\n PoiType,\n ProfileEntity,\n RoleStatus,\n Space,\n Ticket,\n DbObjectType,\n Feature,\n Comment,\n VisitTemplate, Object3D\n} from \"../types.service\";\nimport { PoiService } from \"./models/poi.service\";\nimport { ZoneService } from \"./models/zone.service\";\nimport { BaseUserService } from \"./user.service\";\nenum FilterType {\n DOMAIN = \"DOMAIN\",\n LEVEL = \"LEVEL\",\n ROLE = \"ROLE\",\n ZONE = \"ZONE\",\n SPACE = \"SPACE\",\n HASHTAG = \"HASHTAG\",\n}\nimport levenshtein from 'js-levenshtein';\n@Injectable({\n providedIn: \"root\",\n})\nexport class FilterService {\n private updateDateFilter: Subject<Date[]> = new Subject();\n\n public currentDateFilter: Date[];\n\n constructor(\n private userService: BaseUserService,\n private zoneService: ZoneService,\n private poiService: PoiService,\n ) {}\n\n filterTicketsByDomain(ticketsToFilter: Ticket[], domain: string) {\n return ticketsToFilter.filter((tic) => tic.domainID === domain);\n }\n\n filterObjectsByLevel(objectsToFilter: any[], level: LevelStatus): any[] {\n const visibleLevels = getLevelsBelow(level);\n const filtered = objectsToFilter.filter((tic) =>\n visibleLevels.includes(tic.level),\n );\n return filtered;\n }\n\n filterTicketsForMission(\n ticketsToFilter: Ticket[],\n mission: Mission,\n ): Ticket[] {\n const managerRoles: RoleStatus[] = [\n RoleStatus.MANAGER,\n RoleStatus.ADMIN,\n RoleStatus.OWNER,\n ];\n if (!managerRoles.includes(mission.role)) {\n if (mission.role === RoleStatus.SERVICE) {\n // SERVICE can see tickets to which he is assigned\n const ticketsAssigned = [];\n for (const t of ticketsToFilter) {\n if (t.assignees.items.length > 0) {\n for (const assignment of t.assignees.items) {\n if (assignment.missionID === mission.id) {\n ticketsAssigned.push(t);\n }\n }\n }\n }\n return ticketsAssigned;\n }\n // OCCUPANT and VISITOR can see only tickets that they created\n return ticketsToFilter.filter((ticket) => {\n return ticket.ownerMissionID === mission.id;\n });\n }\n return ticketsToFilter;\n }\n\n getFiltersForRole(role: RoleStatus): FilterType[] {\n switch (role) {\n case RoleStatus.ADMIN:\n return [FilterType.LEVEL];\n case RoleStatus.MANAGER:\n return [FilterType.ZONE, FilterType.LEVEL];\n case RoleStatus.OWNER:\n return [FilterType.ZONE, FilterType.LEVEL];\n case RoleStatus.SERVICE:\n return [\n FilterType.ZONE,\n FilterType.LEVEL,\n FilterType.DOMAIN,\n FilterType.ROLE, // that is the most severe filter\n ];\n case RoleStatus.OCCUPANT:\n return [\n FilterType.ZONE,\n FilterType.DOMAIN,\n FilterType.ROLE,\n FilterType.LEVEL,\n FilterType.HASHTAG,\n ];\n case RoleStatus.VISITOR:\n return [\n FilterType.ZONE,\n FilterType.LEVEL,\n FilterType.DOMAIN,\n FilterType.ROLE,\n FilterType.HASHTAG,\n ];\n case RoleStatus.VISITOR_MUSEUM:\n return [FilterType.ZONE, FilterType.LEVEL, FilterType.HASHTAG];\n case RoleStatus.GUIDE_MUSEUM:\n return [FilterType.LEVEL];\n default:\n return [FilterType.LEVEL];\n }\n }\n\n async filterTicketsForCurrentUserInSpace(\n tickets: Ticket[],\n spaceID: string,\n ): Promise<Ticket[]> {\n const finalTickets: Ticket[] = [];\n let domFiltered: Ticket[] = tickets;\n let roleFiltered: Ticket[] = tickets;\n let levelFiltered: Ticket[] = tickets;\n let zoneFiltered: Ticket[] = tickets;\n const missions = this.userService.currentMissions;\n if (missions) {\n const currentSpaceMissions = missions.filter(\n (m) => m.spaceID === spaceID,\n );\n if (currentSpaceMissions.length > 0) {\n const highestLelel =\n getHighestLevelForMissions(currentSpaceMissions);\n const highestRole =\n getHighestRoleForMissions(currentSpaceMissions);\n // console.log(\"Highest level: \", highestLelel, \", Highest Role: \", highestRole)\n\n const filters = this.getFiltersForRole(highestRole);\n for (const filter of filters) {\n if (filter === FilterType.DOMAIN) {\n let domains: string[] = [];\n for (const m of currentSpaceMissions) {\n if (m.domains) {\n domains = [...domains, ...m.domains];\n }\n }\n let allDomainsFiltered = [];\n for (const d of domains) {\n const currentDomFiltered =\n this.filterTicketsByDomain(tickets, d);\n allDomainsFiltered = [\n ...allDomainsFiltered,\n ...currentDomFiltered,\n ];\n }\n domFiltered = allDomainsFiltered;\n }\n if (filter === FilterType.ROLE) {\n const highestRoleMission = currentSpaceMissions.find(\n (m) => m.role === highestRole,\n );\n roleFiltered = this.filterTicketsForMission(\n tickets,\n highestRoleMission,\n );\n }\n\n if (filter === FilterType.LEVEL) {\n levelFiltered = this.filterObjectsByLevel(\n tickets,\n highestLelel,\n );\n }\n\n if (filter === FilterType.ZONE) {\n zoneFiltered = await this.applyZoneFilterForMissions(\n currentSpaceMissions,\n tickets,\n );\n }\n }\n // keep only tickets present in all filtered arrays\n // console.log(domFiltered);\n // console.log(roleFiltered);\n // console.log(levelFiltered);\n // console.log(zoneFiltered);\n for (const tic of levelFiltered) {\n if (\n domFiltered.includes(tic) &&\n roleFiltered.includes(tic) &&\n zoneFiltered.includes(tic)\n ) {\n finalTickets.push(tic);\n }\n }\n }\n }\n // console.log(finalTickets);\n return finalTickets;\n }\n\n subscribeToDataFilterUpdate(\n next?: (value: any) => void,\n error?: (error: any) => void,\n complete?: () => void,\n ): Subscription {\n const s = this.updateDateFilter.subscribe(next, error, complete);\n return s;\n }\n\n dateFilterUpdated(dateRange: Date[] | null) {\n this.currentDateFilter = dateRange;\n this.updateDateFilter.next(dateRange);\n }\n\n filterObjectsForDateRange(objects: any[], dateRange: Date[]): any[] {\n return objects.filter((object) => {\n const createdAtDate = new Date(object.createdAt);\n return (\n createdAtDate >= dateRange[0] && createdAtDate <= dateRange[1]\n );\n });\n }\n\n filterMeasurementsForDateRange(\n measurements: Measurement[],\n dateRange: Date[],\n ): Measurement[] {\n return measurements.filter((measure) => {\n const createdAtDate = new Date(measure.comment.createdAt);\n return (\n createdAtDate >= dateRange[0] && createdAtDate <= dateRange[1]\n );\n });\n }\n\n async filterObjectsForZone(\n objects: any[],\n zoneID: string = null,\n zone: Zone = null,\n ): Promise<any[]> {\n const filteredObjects = [];\n await Promise.all(\n objects.map(async (object) => {\n const [poi] = object.pois.items;\n if (poi && zone) {\n if (zone.sweepIDs && zone.sweepIDs.includes(poi.matterportSweepID)) {\n if (this.poiService.poiIsVirtual(poi) && zone.layer && zone.layer.name === \"FLOOR\" ) {\n // we include in Floor zone only\n filteredObjects.push(object);\n }\n if (!this.poiService.poiIsVirtual(poi)) {\n filteredObjects.push(object);\n }\n }\n }\n if (poi && !zone && zoneID) {\n const zones = await this.zoneService.getZonesForObject(\n object,\n );\n if (\n zones &&\n zones.some(\n (zone_) =>\n zone_.id === zoneID ||\n zone_.parentID === zoneID,\n )\n ) {\n filteredObjects.push(object);\n }\n }\n }),\n );\n return filteredObjects;\n }\n\n filterEquipmentsByDomainList(\n equipments: Equipment[],\n domainIDList: string[],\n ): Equipment[] {\n let filtered = [];\n const filteredByDomain = equipments.filter((equip) =>\n domainIDList.includes(equip.domainID),\n );\n filtered = [...filtered, ...filteredByDomain];\n const filteredByParentDomain = equipments.filter(\n (equip) =>\n equip.domain &&\n equip.domain.parentID &&\n domainIDList.includes(equip.domain.parentID),\n );\n filtered = [...filtered, ...filteredByParentDomain];\n return filterUniqueArrayByID(filtered);\n }\n\n\n // Not implemented yet!\n // filterObjects3DByDomainList(\n // objects3D: Object3D[],\n // domainIDList: string[],\n // ): Object3D[] {\n // let filtered = [];\n // const filteredByDomain = objects3D.filter((equip) =>\n // domainIDList.includes(equip.domainID),\n // );\n // filtered = [...filtered, ...filteredByDomain];\n // const filteredByParentDomain = objects3D.filter(\n // (obj) =>\n // obj.domain &&\n // obj.domain.parentID &&\n // domainIDList.includes(obj.domain.parentID),\n // );\n // filtered = [...filtered, ...filteredByParentDomain];\n // return filterUniqueArrayByID(filtered);\n // }\n\n filterEquipmentsForTerm(equips: Equipment[], term: string): Equipment[] {\n // filter domains\n let byDomain = equips.filter((eq) => {\n if (eq.domain && eq.domain.name) {\n const normalizedDomain = eq.domain.name.toLowerCase();\n const lev = levenshtein(normalizedDomain, term);\n return lev <= 2 || normalizedDomain.includes(term);\n }\n return false;\n });\n const byParentDomain = equips.filter((eq) => {\n if (eq.domain && eq.domain.parentID) {\n const normalizedParent = eq.domain.parent.name.toLowerCase();\n const lev = levenshtein(normalizedParent, term);\n return lev <= 2 || normalizedParent.includes(term);\n }\n return false;\n });\n byDomain = [...byDomain, ...byParentDomain];\n // filter name\n let byName = [];\n const terms = term.split(\" \").filter((token) => token.length > 2);\n for (const eq of equips) {\n const words = eq.name\n .toLowerCase()\n .split(\" \")\n .filter((token) => token.length > 2);\n const matched = [];\n for (const token of terms) {\n for (const word of words) {\n if (levenshtein(token, word) <= 1) {\n matched.push(true);\n break;\n }\n }\n }\n if (matched.length === terms.length) {\n byName.push(eq);\n }\n }\n\n const byNameSimple = equips.filter((eq) =>\n eq.name.toLowerCase().includes(term),\n );\n byName = [...byName, ...byNameSimple];\n // by serial number\n const bySerialNumber = equips.filter(\n (eq) => eq.serialNumber && eq.serialNumber.toLowerCase() === term,\n );\n const result = [...byDomain, ...byName, ...bySerialNumber];\n return filterUniqueArrayByID(result);\n }\n\n filterTicketsForTerm(tickets: Ticket[], term: string): Ticket[] {\n // filter term in title and description\n const byTitle = this.filterObjectsForTerm(tickets, term);\n // by equipment\n const byEquipment = tickets.filter(\n (ticket) =>\n ticket.equipments &&\n this.filterEquipmentsForTerm(ticket.equipments, term).length >\n 0,\n );\n return filterUniqueArrayByID([...byTitle, ...byEquipment]);\n }\n\n filterLocationsForTerm(locations: Space[], term: string): Space[] {\n // by name\n const byName = locations.filter((loc) =>\n loc.name.toLowerCase().includes(term),\n );\n // by address\n const byAddress = locations.filter((loc) =>\n loc.addresses.toLowerCase().includes(term),\n );\n return filterUniqueArrayByID([...byName, ...byAddress]);\n }\n\n filterOrganisationsForTerm(\n orgs: Organisation[],\n term: string,\n ): Organisation[] {\n const byName = orgs.filter((org) => {\n const words = org.name.toLowerCase().split(\" \");\n return (\n words.some(\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\n ) || org.name.toLowerCase().includes(term)\n );\n });\n return byName;\n }\n\n filterUsersForTerm(users: ProfileEntity[], term: string) {\n const byName = users.filter((user) => {\n const words = user.displayName.toLowerCase().split(\" \");\n return (\n words.some(\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\n ) || user.displayName.toLowerCase().includes(term)\n );\n });\n return byName;\n }\n\n async filterFeaturesForCurrentUserInSpace(\n features: Feature[],\n spaceID: string,\n ): Promise<Feature[]> {\n const finalFeatures: Feature[] = [];\n let levelFiltered: Feature[] = features;\n let zoneFiltered: Feature[] = features;\n let hashtagFiltered: Feature[] = features;\n const missions = this.userService.currentMissions;\n if (missions) {\n const currentSpaceMissions = missions.filter(\n (m) => m.spaceID === spaceID,\n );\n if (currentSpaceMissions.length > 0) {\n const highestLelel =\n getHighestLevelForMissions(currentSpaceMissions);\n const highestRole =\n getHighestRoleForMissions(currentSpaceMissions);\n\n const filters = this.getFiltersForRole(highestRole);\n for (const filter of filters) {\n if (filter === FilterType.LEVEL) {\n levelFiltered = this.filterObjectsByLevel(\n features,\n highestLelel,\n );\n }\n if (filter === FilterType.ZONE) {\n zoneFiltered = await this.applyZoneFilterForMissions(\n currentSpaceMissions,\n features,\n );\n }\n if (filter === FilterType.HASHTAG) {\n hashtagFiltered =\n this.filterFeaturesByHashtagsAndLocale(\n currentSpaceMissions,\n features,\n );\n }\n }\n for (const feature of levelFiltered) {\n if (\n hashtagFiltered.includes(feature) &&\n zoneFiltered.includes(feature)\n ) {\n finalFeatures.push(feature);\n }\n }\n }\n }\n return finalFeatures;\n }\n\n filterFeaturesForTerm(features: Feature[], term: string): Feature[] {\n // filter term in title\n const byTitle = this.filterObjectsForTerm(features, term);\n // by comments\n const byComment = features.filter(\n (feature) =>\n this.filterObjectsForTerm(feature.comments.items, term).length >\n 0,\n );\n return filterUniqueArrayByID([...byTitle, ...byComment]);\n }\n\n /**\n *\n * @param objects Array of Comments, Tickets, Features. Obligatory proporties: title, description\n * @param term string\n */\n filterObjectsForTerm(objects: any[], term: string): any[] {\n // filter term in title\n const byTitle = objects.filter((feature) => {\n const words = feature.title.toLowerCase().split(\" \");\n return (\n words.some(\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\n ) || feature.title.toLowerCase().includes(term)\n );\n });\n // term present in description\n const byDescription = objects.filter(\n (feature) =>\n feature.description &&\n feature.description.toLowerCase().includes(term),\n );\n return filterUniqueArrayByID([...byTitle, ...byDescription]);\n }\n\n filterMissionByStartTimeDateForDateRange(\n missions: any[],\n dateRange: Date[],\n ): any[] {\n return missions.filter((mission) => {\n const startDateTime = new Date(mission.startDateTime);\n return (\n startDateTime >= dateRange[0] && startDateTime <= dateRange[1]\n );\n });\n }\n\n async applyZoneFilterForMissions(\n currentSpaceMissions: Mission[],\n objects: any[],\n ): Promise<any[]> {\n const allowedZones = [];\n for (const mission of currentSpaceMissions) {\n if (mission.zoneID) {\n allowedZones.push(mission.zoneID);\n }\n }\n if (allowedZones.length === currentSpaceMissions.length) {\n let allZoneFiltered = [];\n await Promise.all(\n allowedZones.map(async (zoneID) => {\n const currentZoneFiltered = await this.filterObjectsForZone(\n objects,\n zoneID,\n );\n allZoneFiltered = [\n ...allZoneFiltered,\n ...currentZoneFiltered,\n ];\n }),\n );\n return filterUniqueArrayByID(allZoneFiltered);\n }\n return objects;\n }\n\n async filterEquipmentsForCurrentUserInSpace(\n spaceID: string,\n equips: Equipment[],\n ): Promise<Equipment[]> {\n const finalEquips: Equipment[] = [];\n let domFiltered: Equipment[] = equips;\n const roleFiltered: Equipment[] = equips;\n const levelFiltered: Equipment[] = equips;\n let zoneFiltered: Equipment[] = equips;\n const missions = this.userService.currentMissions;\n if (missions) {\n const currentSpaceMissions = missions.filter(\n (m) => m.spaceID === spaceID,\n );\n if (currentSpaceMissions.length > 0) {\n const highestLelel =\n getHighestLevelForMissions(currentSpaceMissions);\n const highestRole =\n getHighestRoleForMissions(currentSpaceMissions);\n // console.log(\"Highest level: \", highestLelel, \", Highest Role: \", highestRole)\n\n const filters = this.getFiltersForRole(highestRole);\n for (const filter of filters) {\n if (filter === FilterType.DOMAIN) {\n let domains: string[] = [];\n for (const m of currentSpaceMissions) {\n if (m.domains) {\n domains = [...domains, ...m.domains];\n }\n }\n\n let allDomainsFiltered = [];\n\n const currentDomFiltered =\n this.filterEquipmentsByDomainList(equips, domains);\n allDomainsFiltered = [\n ...allDomainsFiltered,\n ...currentDomFiltered,\n ];\n domFiltered = allDomainsFiltered;\n }\n if (filter === FilterType.ROLE) {\n // const highestRoleMission = currentSpaceMissions.find(\n // (m) => m.role === highestRole,\n // );\n // TODO\n }\n\n if (filter === FilterType.LEVEL) {\n // TODO, equipment does not have level\n }\n\n if (filter === FilterType.ZONE) {\n zoneFiltered = await this.applyZoneFilterForMissions(\n currentSpaceMissions,\n equips,\n );\n }\n }\n for (const tic of levelFiltered) {\n if (\n domFiltered.includes(tic) &&\n roleFiltered.includes(tic) &&\n zoneFiltered.includes(tic)\n ) {\n finalEquips.push(tic);\n }\n }\n }\n }\n return finalEquips;\n }\n\n async filterMeasurementsForCurrentUserInSpace(\n spaceID: string,\n comments: Comment[],\n ): Promise<Comment[]> {\n let finalMeasurements: Comment[] = [];\n let zoneFiltered: Comment[] = comments;\n const missions = this.userService.currentMissions;\n if (missions) {\n const currentSpaceMissions = missions.filter(\n (m) => m.spaceID === spaceID,\n );\n if (currentSpaceMissions.length > 0) {\n const highestRole =\n getHighestRoleForMissions(currentSpaceMissions);\n\n const filters = this.getFiltersForRole(highestRole);\n for (const filter of filters) {\n if (filter === FilterType.ZONE) {\n zoneFiltered = await this.applyZoneFilterForMissions(\n currentSpaceMissions,\n comments,\n );\n }\n }\n finalMeasurements = zoneFiltered;\n }\n }\n return finalMeasurements;\n }\n\n async isObjectAllowedForUserInSpace(\n object: Object,\n spaceID: string,\n ): Promise<boolean> {\n const mission = this.userService.currentMission(spaceID);\n const filters = this.getFiltersForRole(mission.role);\n for (const filter of filters) {\n if (\n filter === FilterType.LEVEL &&\n Object.prototype.hasOwnProperty.call(object, \"level\")\n ) {\n const levelFiltered = this.filterObjectsByLevel(\n [object],\n mission.level,\n );\n if (levelFiltered.length === 0) {\n return false;\n }\n }\n if (filter === FilterType.ZONE) {\n const zoneFiltered = await this.applyZoneFilterForMissions(\n [mission],\n [object],\n );\n if (zoneFiltered.length === 0) {\n return false;\n }\n }\n }\n return true;\n }\n\n filterTemplatesForTerm(missions: Mission[], term: string): Mission[] {\n // term present in description\n const byDescription = missions.filter(\n (mis) =>\n mis.description && mis.description.toLowerCase().includes(term),\n );\n // by user lastName which is the name of the visit:\n // metadata: \"{\\\"firstName\\\":\\\"\\\",\\\"lastName\\\":\\\"Visite du 5 Juillet\\\"}\"\n const userProfiles = missions.map((mis) => new ProfileEntity(mis.user));\n const byUserLastname = this.filterUsersForTerm(userProfiles, term);\n const userIds = new Set(byUserLastname.map((user) => user.id));\n const missionsByUser = missions.filter((mis) =>\n userIds.has(mis.userID),\n );\n return filterUniqueArrayByID([...byDescription, ...missionsByUser]);\n }\n\n async filterObjectsForSweep(\n objects: any[],\n objectType: PoiType,\n sweep: string,\n ): Promise<any[]> {\n let filtered = [];\n switch (objectType) {\n case PoiType.EQUIPMENT:\n const pois =\n await this.poiService.getPoisByMatterportSweepByType(\n sweep,\n objectType,\n );\n const equipIDs = new Set(pois.map((poi) => poi.elementID));\n filtered = objects.filter((object) => equipIDs.has(object.id));\n break;\n default:\n break;\n }\n return filtered;\n }\n\n filterFeaturesByHashtagsAndLocale(\n currentSpaceMissions: Mission[],\n features: Feature[],\n ): Feature[] {\n const [currentMission] = currentSpaceMissions;\n // filter by locale\n let filteredLocale = [...features];\n if (currentMission.locale) {\n filteredLocale = features.filter(\n (feature) =>\n feature.locale && feature.locale === currentMission.locale,\n );\n }\n // filter by hashtags\n if (currentMission.hashtags && currentMission.hashtags.length > 0) {\n const filteredByHashtags = [];\n for (const feature of filteredLocale) {\n if (!feature.hashtags || feature.hashtags.length === 0) {\n // Feature without hashtag is available for everybody\n filteredByHashtags.push(feature);\n } else if (\n currentMission.hashtags.every((hashtag) =>\n feature.hashtags.includes(hashtag),\n )\n ) {\n filteredByHashtags.push(feature);\n }\n }\n return filteredByHashtags;\n }\n return filteredLocale;\n }\n\n filterFeaturesForMissionWithoutZone(\n features: Feature[],\n mission: Mission,\n ): Feature[] {\n const finalFeatures: Feature[] = [];\n let levelFiltered: Feature[] = features;\n let zoneFiltered: Feature[] = features;\n let hashtagFiltered: Feature[] = features;\n\n const filters = this.getFiltersForRole(mission.role);\n for (const filter of filters) {\n if (filter === FilterType.LEVEL) {\n levelFiltered = this.filterObjectsByLevel(\n features,\n mission.level,\n );\n }\n // if (filter === FilterType.ZONE) {\n // zoneFiltered = await this.applyZoneFilterForMissions(\n // currentSpaceMissions,\n // features,\n // );\n // }\n if (filter === FilterType.HASHTAG) {\n hashtagFiltered =\n this.filterFeaturesByHashtagsAndLocale(\n [mission],\n features,\n );\n }\n }\n for (const feature of levelFiltered) {\n if (\n hashtagFiltered.includes(feature) &&\n zoneFiltered.includes(feature)\n ) {\n finalFeatures.push(feature);\n }\n }\n return finalFeatures;\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Navigation, Zone } from \"../../types.service\";\nimport { BaseUserService } from \"../user.service\";\nimport { ZoneService } from \"./zone.service\";\n\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class NavigationService {\n\n API: any;\n\n constructor(@Inject('currentAPIService') apiInjected: any,\n private userService: BaseUserService,\n private zoneService: ZoneService) {\n this.API = apiInjected;\n }\n\n async createNavigation(navInput: Navigation): Promise<Navigation> {\n return this.API.__proto__.CreateNavigation(navInput);\n }\n\n async deleteNavigation(id: string): Promise<Navigation> {\n return this.API.__proto__.DeleteNavigation({ id });\n }\n\n async getNavigationsForNode(nodeID: string): Promise<Navigation[]> {\n const limit = 200;\n let navigationsTokenDict = { navigations: [], nextToken: null };\n do {\n navigationsTokenDict =\n await this.mergeAPIResponseWithNextTokenWithLimit(\n nodeID,\n limit,\n navigationsTokenDict,\n );\n } while (navigationsTokenDict.nextToken);\n return navigationsTokenDict.navigations;\n }\n\n async mergeAPIResponseWithNextTokenWithLimit(\n nodeID: string,\n limit: number,\n navigationsTokenDict: { navigations: Navigation[]; nextToken: string | null; },\n ): Promise<{ navigations: Navigation[]; nextToken: string | null; }> {\n return this.API.__proto__.NavigationsByNode(\n nodeID,\n null,\n null,\n limit,\n navigationsTokenDict.nextToken, // nextToken\n ).then((response) => {\n const navigations = response.items;\n const navObject = {\n navigations: [...navigationsTokenDict.navigations, ...navigations],\n nextToken: response.nextToken,\n };\n return navObject;\n });\n }\n\n async getNavigation(id: string): Promise<Navigation> {\n return this.API.__proto__.GetNavigation(id);\n }\n\n async getSweepsIDsForSpace(spaceID: string): Promise<string[]> {\n const zones = await this.zoneService.getZonesBySpace(spaceID);\n const zonesWithSweeps = zones.filter((zone) => zone.sweepIDs && zone.sweepIDs.length > 0);\n const allSweeps = zonesWithSweeps.flatMap((zone) => zone.sweepIDs);\n return [...new Set(allSweeps)];\n }\n\n async getAllowedSweepsIDsForUserInSpace(\n spaceID: string,\n ): Promise<string[]> {\n const missionsForSpace = this.userService.currentMissions.filter(\n (mis) => mis.spaceID === spaceID,\n );\n let navIDs = [];\n if (this.userService.userHasAccessToAllZonesInSpace(spaceID)) {\n return this.getSweepsIDsForSpace(spaceID);\n }\n await Promise.all(\n missionsForSpace.map(async (mission) => {\n navIDs = [...navIDs, ...mission.zone.sweepIDs];\n }),\n );\n return navIDs;\n }\n\n async getForbiddenNavigationIDsForUserInSpace(\n spaceID: string,\n ): Promise<string[]> {\n const allowed = await this.getAllowedSweepsIDsForUserInSpace(spaceID);\n const allNavs = await this.getSweepsIDsForSpace(spaceID);\n const difference = allNavs.filter((x) => !allowed.includes(x));\n return difference.length > 0 ? difference : null;\n }\n\n async getNavigationsForMatterportIDForSpace(\n matterportID: string,\n spaceID: string,\n ): Promise<Navigation[]> {\n return this.API.__proto__.NavigationsByMatterportIDBySpace(matterportID, {\n eq: spaceID,\n }).then((navs) => navs.items);\n }\n\n async getNavigationsForZone(zone: Zone): Promise<Navigation[]> {\n const responseNavs = [];\n await Promise.all(\n zone.sweepIDs.map(async (sweepID) => {\n const navs = await this.getNavigationsForMatterportIDForSpace(\n sweepID,\n zone.spaceID,\n );\n if (navs.length > 0) {\n responseNavs.push(navs[0]);\n }\n }),\n );\n return responseNavs;\n }\n\n async updateNavigation(\n navInput: any,\n ): Promise<Navigation> {\n return this.API.__proto__.UpdateNavigation(navInput);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Equipment, Feature, POI, Ticket } from \"../../types.service\";\nimport { NavigationService } from \"./navigation.service\";\nimport { PoiService } from \"./poi.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class BaseObjectService {\n constructor(\n protected poiService: PoiService,\n private navigationService: NavigationService,\n ) {}\n\n async getModel3dAndSweep(object: Feature | Ticket | Equipment): Promise<{\n model3D: string;\n sweep: string;\n rotation: { x: number; y: number };\n } | void> {\n return this.poiService\n .getPoiByElementId(object.id)\n .then(async (poi) => {\n if (poi && poi.matterportSweepID) {\n const navigations =\n await this.navigationService.getNavigationsForMatterportIDForSpace(\n poi.matterportSweepID,\n object.spaceID,\n );\n const [poiNavigation] = navigations;\n if (this.poiService.poiIsVirtual(poi)) {\n return {\n model3D: poiNavigation.node.model3D,\n sweep: null,\n rotation: null,\n };\n }\n const coordinate = JSON.parse(poi.coordinate);\n let rotation = null;\n if (coordinate.xRotation) {\n rotation = {\n x: Number(coordinate.xRotation),\n y: Number(coordinate.yRotation),\n };\n }\n return {\n model3D: poiNavigation.node.model3D,\n sweep: poi.matterportSweepID,\n rotation,\n };\n }\n return null;\n })\n .catch((error) => {\n return null;\n })\n }\n\n async updateIconForAllObjects(\n objects: Ticket[] | Feature[] | Equipment[],\n tagIcon: string,\n ): Promise<POI[]> {\n const IDs = [];\n for (const object of objects) {\n IDs.push(object.id);\n }\n const pois = [];\n await Promise.all(\n IDs.map(async (id) => {\n const poi = await this.poiService.getPoiByElementId(id);\n const updated = await this.poiService.updatePoi({\n id: poi.id,\n tagIcon,\n });\n pois.push(updated);\n }),\n );\n console.log(\"updated\", pois.length, \"pois with new icons\");\n return pois;\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Operation, Ticket } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class OperationService {\n API: any; //AWS\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async getOperationsByTicketID(id: string): Promise<Operation[]> {\n return this.API.__proto__.OperationsByTicket(id).then((res) => res.items);\n }\n\n async getOperationsByEquipmentID(id: string): Promise<Operation[]> {\n return this.API.__proto__.OperationsByEquipment(id).then((res) => res.items);\n }\n\n async getTicketsByEquipmentID(id: string): Promise<Ticket[]> {\n const operations = await this.getOperationsByEquipmentID(id);\n const tickets = operations.map((operation) => operation.ticket);\n return tickets;\n }\n\n async deleteOperationsForEquipment(equipID: string): Promise<Operation[]> {\n const deleted = [];\n await this.getOperationsByEquipmentID(equipID)\n .then(async (operations) => {\n if (operations.length > 0) {\n await Promise.all(\n operations.map(async (op) => {\n const deletedOp = await this.API.__proto__.DeleteOperation({ id: op.id });\n deleted.push(deletedOp)\n }),\n );\n }\n });\n return deleted;\n }\n\n async deleteOperationsForTicket(ticketID: string) {\n await this.getOperationsByTicketID(ticketID)\n .then(async (operations) => {\n if (operations.length > 0) {\n await Promise.all(\n operations.map(async (op) => {\n await this.API.__proto__.DeleteOperation({ id: op.id });\n }),\n );\n }\n });\n }\n\n async deleteOperation(operationID: string): Promise<Operation> {\n return this.API.__proto__.DeleteOperation({ id: operationID });\n }\n\n async createOperation(operation: Operation): Promise<Operation> {\n return this.API.__proto__.CreateOperation(operation);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Inject } from \"@angular/core\";\nimport { dateTimeToLocalString } from \"../../helpers.service\";\nimport { ProfileEntity } from \"../../types.service\";\nimport { BaseUserService } from \"../user.service\";\nimport { Event } from \"../../types.service\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class EventService {\n \n translationEventSubcriptions = {};\n\n API: any;\n\n constructor(\n @Inject('currentAPIService') apiInjected: any, \n private userService: BaseUserService,\n private translate: TranslateService ) {\n this.API = apiInjected;\n }\n\n /**\n * CRUD \n * */\n async createEvent(input: Event): Promise<Event> {\n return this.API.__proto__.CreateEvent(input);\n }\n\n async updateEvent(input: any): Promise<Event> {\n return this.API.__proto__.UpdateEvent(input);\n }\n\n async deleteEvent(eventID: string): Promise<Event> {\n return this.API.__proto__.DeleteEvent({id: eventID});\n }\n\n async getEvent(eventID: string): Promise<Event>{\n return this.API.__proto__.GetEvent(eventID);\n }\n\n /** \n * Custom get by GSI \n * */\n async getEventsByTicketID(ticketID: string): Promise<Event[]> {\n return this.API.__proto__.EventsByTicket(ticketID).then((events)=> events.items);\n }\n\n async getEventsByTicketIDSortedByDateDesc(ticketID: string): Promise<Event[]> {\n return this.API.__proto__.EventsByTicketByDate(\n ticketID,\n null,\n \"DESC\",\n ).then((events) => events.items);\n }\n\n async getEventsByGroup(group: string): Promise<Event[]> {\n return (await this.API.__proto__.EventsByGroup(group)).items;\n }\n\n /**\n * \n * SORTING\n */\n\n sortEventsByCreatedAtDateDesc(events: Event[]): Event[] {\n events.sort((event1, event2) => {\n // @ts-ignore\n return new Date(event2.createdAt) - new Date(event1.createdAt);\n });\n return events;\n }\n\n sortEventsByCreatedAtDateAsc(events: Event[]): Event[] {\n events.sort((event1, event2) => {\n // @ts-ignore\n return new Date(event1.createdAt) - new Date(event2.createdAt);\n });\n return events;\n }\n\n /**\n * TRANSLATIONS \n * */\n /** Apply a translation to a ticket event, with the current language */\n async applyTicketEventTranslate(event: Event) {\n const meta = await this.getTranslatedMetaEvent(event);\n const path = event.translationPath;\n if (path) {\n const titlePath = `${path}.title`;\n const descriptionPath = `${path}.description`;\n const value = this.translate.instant(\n [titlePath, descriptionPath],\n meta,\n );\n event.title = value[titlePath];\n event.description = value[descriptionPath];\n }\n }\n\n /** Unsubscribe a ticket event for his translation */\n ticketEventSubscribeTranslation(event: Event) {\n if (event.id in this.translationEventSubcriptions) {\n this.ticketEventUnsubscribeTranslation(event.id);\n }\n this.translationEventSubcriptions[event.id] =\n this.translate.onLangChange.subscribe((change) => {\n this.applyTicketEventTranslate(event);\n });\n this.applyTicketEventTranslate(event);\n }\n\n /** Unsubscribe a ticket event for his translation */\n ticketEventUnsubscribeTranslation(id: string) {\n if (id in this.translationEventSubcriptions) {\n this.translationEventSubcriptions[id].unsubscribe();\n delete this.translationEventSubcriptions[id];\n }\n }\n\n /** Generate the translated metadata of an event, according to the current language */\n async getTranslatedMetaEvent(event: Event): Promise<any> {\n let meta: any = {};\n\n const owner: ProfileEntity = await this.userService.userFromUserID(\n event.owner.userID,\n );\n\n try {\n if (event.metadata) meta = JSON.parse(event.metadata);\n } catch {}\n meta.firstName = owner.firstName;\n meta.lastName = owner.lastName;\n\n if (event.estimateStartDate) {\n meta.fromDate = dateTimeToLocalString(\n event.estimateStartDate,\n this.translate,\n );\n }\n if (event.estimateEndDate)\n meta.toDate = dateTimeToLocalString(\n event.estimateEndDate,\n this.translate,\n );\n\n if (meta.oldStatus)\n meta.oldStatus = this.translate.instant(meta.oldStatus);\n if (meta.newStatus)\n meta.newStatus = this.translate.instant(meta.newStatus);\n if (meta.type) meta.type = this.translate.instant(meta.type);\n return meta;\n }\n \n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Affectation } from \"../../types.service\";\n\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class AffectationService {\n API: any;\n\n constructor(\n @Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async getAffectationsFromTicketID(\n ticketID: string,\n ): Promise<Affectation[] | void> {\n return this.API.__proto__.ListAffectations({\n ticketID: {\n eq: ticketID,\n } ,\n })\n .then((results) => {\n return results.items;\n })\n .catch((error) => {\n console.log(\n ` Error while retrieving affectations for ${ticketID} : ${JSON.stringify(error)}`,\n );\n });\n }\n\n async getAffectationsFromMissionID(\n missionID: string,\n ): Promise<Affectation[] | void> {\n return this.API.__proto__.AffectationsByMission(missionID).then((resposne) => resposne.items);\n }\n\n async softDeleteAffectationByMissionByTicket(\n ticketID: string,\n missionID: string,\n ): Promise<Affectation[]> {\n const affectations: Affectation[] =\n await this.getAffecationsForTicketForMission(missionID, ticketID);\n await Promise.all(\n affectations.map(async (affectation) => {\n const deleted = await this.API.__proto__.UpdateAffectation({\n id: affectation.id,\n deletedAt: Date.now(),\n });\n console.log(\"soft deleted affectation\", deleted);\n }),\n );\n return affectations;\n }\n\n async getAffecationsForTicketForMission(\n ticketID: string,\n missionID: string,\n ): Promise<Affectation[]> {\n return this.API.__proto__.AffectationsByMissionByTicket(missionID, {\n eq: ticketID,\n }).then((resposne) => resposne.items);\n }\n\n async softDeleteAffectationByID(\n affectationID: string,\n ): Promise<Affectation> {\n return this.API.__proto__.UpdateAffectation({\n id: affectationID,\n deletedAt: Date.now(),\n });\n }\n\n async createAffectation(input: Affectation): Promise<Affectation> {\n return this.API.__proto__.CreateAffectation(input);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, first } from 'rxjs/operators';\nimport { Zone } from '../types.service';\nimport { MatterportService } from './matterport.service';\nimport { ZoneService } from './models/zone.service';\nimport { ZoneChangeService } from './zoneChange.service';\nimport { BaseUserService } from './user.service';\nimport { ViewerService } from './viewer.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NavigatorService {\n currentSweep: string | null;\n\n targetSweep: string | null;\n\n targetRotation: { x: number; y: number } | null;\n\n currentModel3D: string | null;\n\n currentSpaceID: string | null;\n\n currentZone: Zone | null;\n\n visitLastPosition: Map<string, { sweep: string; rotation: any }> = new Map();\n\n floorToGo: Zone | null;\n\n locationIDChange: Subject<string | null> = new Subject();\n\n navBarZoneIDChange: Subject<string | null> = new Subject();\n\n isVisibleChanged = new Subject<boolean>();\n\n currentNavBarLocationID: string;\n\n currentNavBarZoneID: string;\n\n zonesSortedForCurrentSweep: Zone[] | null;\n\n audioZonesChange: Subject<Zone[]> = new Subject();\n\n zonesForUserForSpace: Zone[] | null;\n\n currentAudioZones: Zone[];\n\n audioZonesForUserForSpace: Zone[];\n\n constructor(\n private matterportService: MatterportService,\n private viewerService: ViewerService,\n private zoneService: ZoneService,\n private userService: BaseUserService,\n private zoneChangeService: ZoneChangeService\n ) {\n this.matterportService.currentSweep\n .pipe(first()) // take first in order not to wait 2 sec an first load\n .subscribe((sweep: string) => {\n this.currentSweep = sweep;\n if (this.zonesForUserForSpace) {\n this.setZonesForCurrentSweep();\n }\n });\n this.matterportService.currentSweep\n .pipe(debounceTime<string>(1500)) // delays values emitted and return only the latest\n .subscribe((sweep: string) => {\n if (sweep === this.currentSweep) {\n return;\n }\n this.currentSweep = sweep;\n if (this.zonesForUserForSpace) {\n this.setZonesForCurrentSweep();\n }\n });\n this.viewerService.viewerIsOn.subscribe(\n (data: {\n spaceID: string | null;\n model3D: string | null;\n sweep: string | null;\n rotation: { x: number; y: number } | null;\n }) => {\n if (this.currentSpaceID !== data.spaceID) {\n this.currentSpaceID = data.spaceID;\n }\n if (!data.spaceID) {\n this.zonesForUserForSpace = null;\n this.zonesSortedForCurrentSweep = null;\n this.audioZonesForUserForSpace = null;\n this.currentZone = null;\n this.zoneChangeService.zoneChange.next(null);\n this.currentSweep = null;\n // save last position\n const lastPose = this.matterportService.poseCamera;\n if (lastPose && this.currentModel3D && this.userService.cu) {\n this.visitLastPosition.set(this.currentModel3D, {\n sweep: lastPose.sweep,\n rotation: lastPose.rotation,\n });\n }\n this.currentModel3D = data.model3D;\n } else {\n this.currentModel3D = data.model3D;\n this.targetSweep = data.sweep;\n this.targetRotation = data.rotation;\n this.onViewerLoaded().catch((e) => console.log(e));\n }\n }\n );\n this.userService.isChanged.subscribe((isConnected) => {\n if (!isConnected) {\n // user disconnected, clean Map\n this.visitLastPosition = new Map();\n }\n });\n }\n\n getLastPositionForModel(model3D: string) {\n return this.visitLastPosition.get(model3D);\n }\n\n goToSweepWithRotation(\n sweep: string,\n rotation: { x: number; y: number } | null = null\n ) {\n this.matterportService.action_go_to_sweep(sweep, rotation);\n }\n\n async goToFloor(floor: Zone) {\n let matterportFloorSequence = null;\n if (floor.metadata) {\n const metadata = JSON.parse(floor.metadata);\n if (metadata.matterportFloorSequence !== undefined) {\n matterportFloorSequence = metadata.matterportFloorSequence;\n }\n }\n await this.matterportService.action_go_to_floor(\n floor.name,\n matterportFloorSequence\n );\n }\n\n async onViewerLoaded() {\n let sweepToGo: string | null = null;\n let rotation: { x: number; y: number } | null = null;\n if (this.targetSweep) {\n sweepToGo = this.targetSweep;\n rotation = this.targetRotation\n ? this.targetRotation\n : this.checkRotationForSweep(this.targetSweep);\n } else {\n const lastPostion = this.getLastPositionForModel(this.currentModel3D!);\n if (lastPostion) {\n sweepToGo = lastPostion.sweep;\n rotation = lastPostion.rotation;\n }\n }\n if (this.targetRotation) {\n rotation = this.targetRotation;\n }\n if (sweepToGo && !this.floorToGo) {\n // console.log(\"go to sweep\", sweepToGo);\n this.goToSweepWithRotation(sweepToGo, rotation);\n }\n if (this.floorToGo) {\n this.goToFloor(this.floorToGo);\n this.floorToGo = null;\n }\n // if first load and zones are not set\n this.zonesForUserForSpace = await this.zoneService.getZonesBySpaceForUser(\n this.currentSpaceID\n );\n this.audioZonesForUserForSpace = this.zonesForUserForSpace.filter(\n (zone) => zone.audioID\n );\n this.setZonesForCurrentSweep();\n }\n\n checkRotationForSweep(sweep: string): { x: number; y: number } | null {\n const lastPosition = this.visitLastPosition.get(this.currentModel3D!);\n if (lastPosition && lastPosition.sweep === sweep) {\n return lastPosition.rotation;\n }\n return null;\n }\n\n setZonesForCurrentSweep() {\n if (!this.currentSweep) {\n return;\n }\n let zonesForSweep = this.zonesForUserForSpace?.filter(\n (zone) => zone.sweepIDs && zone.sweepIDs.includes(this.currentSweep)\n );\n const audioZones = this.audioZonesForUserForSpace?.filter(\n (zone) => zone.sweepIDs && zone.sweepIDs.includes(this.currentSweep)\n );\n this.audioZonesChange.next(audioZones);\n this.currentAudioZones = audioZones;\n\n // filter out audio zone (not to show to user it's name)\n zonesForSweep = zonesForSweep.filter((zone) => !zone.audio);\n if (zonesForSweep && zonesForSweep.length > 0) {\n this.zonesSortedForCurrentSweep = zonesForSweep.sort((a, b) => {\n if (a.sweepIDs!.length === b.sweepIDs!.length) {\n // if the same amount of sweeps: floor == the whole space\n if (a.layer && b.layer) {\n // put type BUILDING at the end\n return a.layer.name !== 'BUILDING'\n ? -1\n : b.layer.name !== 'BUILDING'\n ? 1\n : 0;\n }\n return a.parent?.sweepIDs ? -1 : b.parent?.sweepIDs ? 1 : 0;\n }\n return a.sweepIDs!.length - b.sweepIDs!.length;\n });\n this.zoneChangeService.zonesForUserChange.next(\n this.zonesSortedForCurrentSweep\n );\n\n if (\n this.zonesSortedForCurrentSweep.length > 0 &&\n this.currentZone !== this.zonesSortedForCurrentSweep[0]\n ) {\n [this.currentZone] = this.zonesSortedForCurrentSweep;\n this.zoneChangeService.zoneChange.next(this.currentZone);\n }\n }\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport { Injectable } from \"@angular/core\";\nimport { Event, EventStatus, EventType, Prestataire, ProfileEntity, RequestIntervention, Ticket } from \"../types.service\";\nimport { EventService } from \"./models/event.service\";\nimport { MissionService } from \"./models/mission.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class InterventionService {\n interventionEventTypes = [\n EventType.NON_CONTRACTUAL_INTERVENTION,\n EventType.CONTRACTUAL_INTERVENTION,\n EventType.REPORTING,\n EventType.REQUEST_FOR_INTERVENTION,\n ];\n\n constructor(\n private eventService: EventService,\n private missionService: MissionService,\n ) {}\n\n async getRequestInterventionFromTicket(\n ticket: Ticket,\n ): Promise<RequestIntervention> {\n const events =\n await this.eventService.getEventsByTicketIDSortedByDateDesc(\n ticket.id,\n );\n const relatedEvents = events.filter((event_) =>\n this.interventionEventTypes.includes(event_.type),\n );\n const allRequests = relatedEvents.filter(\n (event_) => event_.type === EventType.REQUEST_FOR_INTERVENTION,\n );\n if (allRequests.length > 0) {\n const mostRecent = allRequests[0];\n\n const composedRequest =\n this.eventToRequestIntervention(mostRecent);\n\n if (composedRequest.status === EventStatus.CANCELLED) {\n return composedRequest;\n }\n\n let eventsForMostRecentRequest = relatedEvents.filter(\n (event) => event.group === composedRequest.id,\n );\n let intervention;\n if (eventsForMostRecentRequest.length === 0) {\n // back compatibility\n eventsForMostRecentRequest = relatedEvents;\n // get intervention\n intervention = this.composeInterventionForRequest(\n relatedEvents,\n null,\n );\n // set duration\n composedRequest.realDuration =\n this.getDurationForRequest(\n relatedEvents,\n null,\n );\n } else {\n intervention = this.composeInterventionForRequest(\n eventsForMostRecentRequest,\n composedRequest.id,\n );\n composedRequest.realDuration =\n this.getDurationForRequest(\n eventsForMostRecentRequest,\n composedRequest.id,\n );\n }\n\n if (!composedRequest.estimateStartDate) {\n composedRequest.estimateStartDate =\n this.getMostRecentEstimateStartDate(\n eventsForMostRecentRequest,\n );\n }\n composedRequest.realStartDate =\n this.getEarliestRealStartDateForRequest(\n relatedEvents,\n composedRequest.id,\n );\n if (!composedRequest.estimateEndDate) {\n composedRequest.estimateEndDate =\n this.getMostRecentEstimateEndDate(\n eventsForMostRecentRequest,\n );\n }\n composedRequest.realEndDate =\n this.getLatestRealEndDateForRequest(\n relatedEvents,\n composedRequest.id,\n );\n\n composedRequest.intervention = intervention;\n return composedRequest;\n }\n return null;\n }\n\n composeInterventionForRequest(\n relatedEvents: Event[],\n requestID: string,\n ): Event {\n const interventions = requestID\n ? relatedEvents.filter(\n (event_) =>\n (event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\n event_.type === EventType.CONTRACTUAL_INTERVENTION) &&\n event_.group === requestID,\n )\n : relatedEvents.filter(\n (event_) =>\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\n event_.type === EventType.CONTRACTUAL_INTERVENTION,\n );\n\n if (interventions.length > 0) {\n const lastIntervention = interventions[0];\n return lastIntervention;\n }\n return null;\n }\n\n async getPrestataireForTicket(ticket: Ticket): Promise<Prestataire> {\n if (ticket.assignees.items.length > 0) {\n const sortedAffectations = ticket.assignees.items.sort(\n (a, b) =>\n // @ts-ignore\n // eslint-disable-next-line prettier/prettier\n new Date(b.createdAt) - new Date(a.createdAt),\n );\n const missionIDpresta = sortedAffectations[0].missionID;\n const prestaMission = await this.missionService.getMission(\n missionIDpresta,\n );\n const userPrestataire = new ProfileEntity(prestaMission.user);\n const prestataire = {\n organisation: prestaMission.organisation,\n mission: prestaMission,\n profile: userPrestataire,\n name: userPrestataire.displayName,\n };\n return prestataire;\n }\n return null;\n }\n\n getEarliestRealStartDateForRequest(\n events: Event[],\n requestID: string,\n ): number | null {\n let date = null;\n const interventions = events.filter(\n (event_) =>\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION) &&\n event_.group === requestID,\n );\n const sortedInterventions =\n this.eventService.sortEventsByCreatedAtDateAsc(interventions);\n if (sortedInterventions.length > 0) {\n for (const event of sortedInterventions) {\n if (event.realStartDate) {\n date = event.realStartDate;\n break;\n }\n }\n }\n return date;\n }\n\n getLatestRealEndDateForRequest(\n events: Event[],\n requestID: string,\n ): number | null {\n let date = null;\n const interventions = events.filter(\n (event_) =>\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION) &&\n event_.group === requestID,\n );\n const sortedInterventions =\n this.eventService.sortEventsByCreatedAtDateDesc(interventions);\n if (sortedInterventions.length > 0) {\n for (const event of sortedInterventions) {\n if (event.realEndDate) {\n date = event.realEndDate;\n break;\n }\n }\n }\n return date;\n }\n\n getDurationForRequest(events: Event[], requestID: string): number {\n let duration = 0; // in miliseconds\n const interventions = requestID\n ? events.filter(\n (event_) =>\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\n event_.type ===\n EventType.NON_CONTRACTUAL_INTERVENTION) &&\n event_.group === requestID,\n )\n : events.filter(\n (event_) =>\n event_.type === EventType.CONTRACTUAL_INTERVENTION ||\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION,\n );\n for (const event of interventions) {\n if (event.timeSpent) {\n duration += event.timeSpent;\n }\n }\n return duration;\n }\n\n getIntervention(events): Event | null {\n const interventions = events.filter(\n (event_) =>\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\n event_.type === EventType.CONTRACTUAL_INTERVENTION,\n );\n if (interventions.length > 0) {\n const lastIntervention = interventions[0];\n return lastIntervention;\n }\n return null;\n }\n\n eventToRequestIntervention(event: Event): RequestIntervention {\n const request = {\n id: event.group === \"default\" ? event.id : event.group,\n realEndDate: event.realEndDate,\n realStartDate: event.realStartDate,\n estimateStartDate: event.estimateStartDate,\n estimateEndDate: event.estimateEndDate,\n realDuration: event.timeSpent,\n type: event.type,\n status: event.status,\n createdAt: event.createdAt,\n updatedAt: event.updatedAt,\n ticketID: event.ticketID,\n } as RequestIntervention;\n return request;\n }\n\n getMostRecentTimeSpent(events: Event[]): number | null {\n let timeSpent = null;\n const sortedEvents = this.getAllEventsAfterLastCreated(events);\n for (const event_ of sortedEvents) {\n if (event_.timeSpent) {\n timeSpent = event_.timeSpent;\n break;\n }\n }\n return timeSpent;\n }\n\n getAllEventsAfterLastCreated(events: Event[]): Event[] {\n const eventsAfter: Event[] = [];\n const currentIntervention = this.getCurrentIntevention(events);\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\n if (sortedEvents.length > 0 && currentIntervention) {\n for (const event_ of sortedEvents) {\n eventsAfter.push(event_);\n if (event_.id === currentIntervention.id) {\n break;\n }\n }\n }\n return eventsAfter;\n }\n\n getCurrentIntevention(events: Event[]): Event {\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\n let currentIntervention;\n for (const event_ of sortedEvents) {\n if (event_.status === EventStatus.CREATED) {\n currentIntervention = event_;\n }\n if (event_.status !== EventStatus.CREATED && currentIntervention) {\n break;\n }\n }\n return currentIntervention;\n }\n\n getMostRecentEstimateStartDate(events: Event[]): number | null {\n let estimateStartDate = null;\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\n for (const event_ of sortedEvents) {\n if (event_.estimateStartDate) {\n estimateStartDate = event_.estimateStartDate;\n break;\n }\n }\n return estimateStartDate;\n }\n\n getMostRecentEstimateEndDate(events: Event[]): number | null {\n let date = null;\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\n for (const event_ of sortedEvents) {\n if (event_.estimateEndDate) {\n date = event_.estimateEndDate;\n break;\n }\n }\n return date;\n }\n\n // getMostRecentRealStartDate(events: Event[]): number | null {\n // let date = null;\n // // const sortedEvents = this.sortEventsByCreatedAtDateDesc(events);\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\n // for (const event_ of sortedEvents) {\n // if (event_.realStartDate) {\n // date = event_.realStartDate;\n // break;\n // }\n // }\n // return date;\n // }\n\n // getMostRecentRealStartDateGlobal(events: Event[]): number | null {\n // let date = null;\n // // const sortedEvents = this.sortEventsByCreatedAtDateDesc(events);\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\n // if (sortedEvents.length > 0) {\n // for (const event_ of sortedEvents) {\n // if (event_.realStartDate) {\n // date = event_.realStartDate;\n // break;\n // }\n // }\n // }\n // return date;\n // }\n}\n","/* eslint-disable class-methods-use-this */\n/* eslint-disable consistent-return */\nimport { Inject, Injectable } from '@angular/core';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { Subject, Subscription, takeUntil } from 'rxjs';\nimport { openModalForVisitSwitch, waitUntil } from '../../helpers.service';\nimport { MattertagData } from '../../mattertagData';\nimport {\n Event,\n Ticket,\n TicketType,\n TicketPriority,\n TicketStatus,\n EventStatus,\n EventType,\n Affectation,\n POI,\n PoiType,\n IUpdate,\n Zone,\n} from '../../types.service';\nimport { FilterService } from '../filter.service';\nimport { NavigatorService } from '../navigator.service';\nimport { BaseUserService } from '../user.service';\nimport { ViewerService } from '../viewer.service';\nimport { BaseObjectService } from './base-object.service';\nimport { NavigationService } from './navigation.service';\nimport { OperationService } from './operation.service';\nimport { PoiService } from './poi.service';\nimport InformationIcon from '@iconify-icons/mdi/information-outline';\nimport AccidentIcon from '@iconify-icons/mdi/alert';\nimport WordOrderIcon from '@iconify-icons/mdi/account-hard-hat';\nimport ReportingIcon from '@iconify-icons/mdi/file-document-outline';\nimport MaintenanceIcon from '@iconify-icons/mdi/tools';\nimport { EventService } from './event.service';\nimport { InterventionService } from '../intervention.service';\nimport { AffectationService } from './affectation.service';\nimport {ZoneChangeService} from \"../zoneChange.service\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TicketsService extends BaseObjectService {\n currentTickets: { zone: Ticket[]; space: Ticket[] } = {\n zone: [],\n space: [],\n };\n\n ticketTags: Subject<Ticket[]> = new Subject();\n\n ticketsFiltered: Ticket[] = [];\n\n ticketsUpdated: Subject<{\n zone: Ticket[];\n space: Ticket[];\n }> = new Subject();\n\n currentSpaceID: string;\n\n zoneIDFilter: string;\n\n dateFilter: Date[];\n\n ticketTypeFilter: TicketType[];\n\n reportingIcon = ReportingIcon;\n\n maintenanceIcon = MaintenanceIcon;\n\n workorderIcon = WordOrderIcon;\n\n informationIcon = InformationIcon;\n\n accidentIcon = AccidentIcon;\n\n updateDone: Subject<boolean> = new Subject();\n\n updating: Subject<boolean> = new Subject();\n\n API: any;\n awsKinesisAnalytics: any; //AWS\n\n isMuseumUser = false;\n\n navSubscription: Subscription;\n\n filetrSubscription: Subscription;\n\n floorsPerSpace: Zone[] = null;\n\n selectedFloor: Zone = null;\n\n private destroy$ = new Subject();\n\n constructor(\n @Inject('currentAwsKinesisAnalyticsService')\n awsKinesisAnalyticsInjected: any,\n @Inject('currentAPIService') apiInjected: any,\n private operationService: OperationService,\n private eventService: EventService,\n private affectationService: AffectationService,\n poiService: PoiService,\n private userService: BaseUserService,\n private navigatorService: NavigatorService,\n private filterService: FilterService,\n private interventionService: InterventionService,\n navigationService: NavigationService,\n private viewerService: ViewerService,\n private zoneChangeService: ZoneChangeService,\n private modalService: NgbModal\n ) {\n super(poiService, navigationService);\n this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;\n this.API = apiInjected;\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\n this.initSubscriptions();\n this.userService.isChanged.subscribe((isConnected) => {\n if (isConnected) {\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\n this.initSubscriptions();\n } else {\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n this.filetrSubscription.unsubscribe();\n }\n }\n });\n\n this.zoneChangeService.floorHasChanged.subscribe((floor)=>{\n if (floor){\n this.selectedFloor = floor;\n }\n });\n }\n\n async initTickets() {\n let ticketsFiltered = [];\n if (this.currentSpaceID) {\n this.updating.next(true);\n await this.getTicketsBySpace(this.currentSpaceID).then((tickets) => {\n if (tickets) {\n ticketsFiltered = tickets;\n }\n });\n ticketsFiltered =\n await this.filterService.filterTicketsForCurrentUserInSpace(\n ticketsFiltered,\n this.currentSpaceID\n );\n if (this.dateFilter) {\n ticketsFiltered = this.filterService.filterObjectsForDateRange(\n ticketsFiltered,\n this.dateFilter\n );\n }\n if (this.ticketTypeFilter) {\n ticketsFiltered = ticketsFiltered.filter((ticket) =>\n this.ticketTypeFilter.includes(ticket.type)\n );\n }\n this.currentTickets.space = ticketsFiltered;\n this.ticketTags.next(ticketsFiltered); // tags without zone filter\n\n if (this.zoneIDFilter) {\n ticketsFiltered = await this.filterService.filterObjectsForZone(\n ticketsFiltered,\n this.zoneIDFilter\n );\n }\n this.currentTickets.zone = ticketsFiltered;\n this.ticketsUpdated.next(this.currentTickets);\n this.updating.next(false);\n } else {\n this.ticketTags.next(null);\n }\n }\n\n async adaptTicket(ticket: Ticket): Promise<Ticket> {\n if (ticket.comments.items.length > 0) {\n ticket.comments.items.sort((a, b) => {\n // @ts-ignore\n return new Date(b.createdAt) - new Date(a.createdAt);\n });\n }\n\n if (ticket.events.items.length > 0) {\n // Sort events by date\n ticket.events.items.sort((event1, event2) => {\n // @ts-ignore\n return new Date(event2.createdAt) - new Date(event1.createdAt);\n });\n }\n ticket.prestataire = await this.interventionService.getPrestataireForTicket(\n ticket\n );\n return ticket;\n }\n\n getPriorityColor(ticket: Ticket): string {\n switch (ticket.priority) {\n case TicketPriority.MAXIMUM:\n return 'crimson';\n case TicketPriority.HIGH:\n return 'red';\n case TicketPriority.MEDIUM:\n return 'orange';\n case TicketPriority.LOW:\n return 'green';\n case TicketPriority.MINIMUM:\n return 'blue';\n default:\n return 'blue';\n }\n }\n\n getStatusColor(ticket: Ticket): string {\n switch (ticket.status) {\n case TicketStatus.TO_BE_PROCESSED:\n return '#B0B0B1';\n case TicketStatus.PLANNED:\n return '#EBDF27';\n case TicketStatus.IN_PROGRESS:\n return '#EBDF27';\n case TicketStatus.WAITING_FOR_VALIDATION:\n return '#EBDF27';\n case TicketStatus.VALIDATED:\n return '#BCE2E5';\n case TicketStatus.REJECTED:\n return '#e84c35';\n case TicketStatus.RESOLVED:\n return '#BCE2E5';\n case TicketStatus.ARCHIVED:\n return '#B0B0B1';\n case TicketStatus.LATE:\n return '#e84c35';\n case TicketStatus.BLOCKED:\n return '#e84c35';\n case TicketStatus.COMPLETED:\n return '#388659';\n case TicketStatus.DELAYED:\n return '#DB7543';\n case TicketStatus.CANCELLED:\n return '#e84c35';\n case TicketStatus.TO_REDO:\n return '#DB7543';\n case TicketStatus.CREATED:\n return '#B0B0B1';\n default:\n return '#BCE2E5';\n }\n }\n\n getTicketPriorityNumber(t): number {\n return t.priority === TicketPriority.MINIMUM\n ? -1\n : t.priority === TicketPriority.LOW\n ? 0\n : t.priority === TicketPriority.MEDIUM\n ? 1\n : t.priority === TicketPriority.HIGH\n ? 2\n : t.priority === TicketPriority.MAXIMUM\n ? 3\n : -1;\n }\n\n getTicketIcon(type: TicketType): any {\n // const typeIcon : TicketType = ticket.type;\n switch (type) {\n case TicketType.REPORTING:\n return this.reportingIcon;\n case TicketType.REQUEST_FOR_INTERVENTION:\n return this.maintenanceIcon;\n case TicketType.REQUEST_FOR_MAINTENANCE:\n return this.maintenanceIcon;\n case TicketType.WORK_ORDER:\n return this.workorderIcon;\n case TicketType.INCIDENT:\n return this.accidentIcon;\n case TicketType.INFORMATION:\n return this.informationIcon;\n default:\n return this.maintenanceIcon;\n }\n }\n\n async addEventToTicket(ticket: Ticket, event: Event): Promise<Event> {\n const currentMission = this.userService.currentMission(ticket.spaceID);\n event.group = event.group ? event.group : 'default';\n event.ticketID = event.ticketID ? event.ticketID : ticket.id;\n event.status = event.status ? event.status : EventStatus.CREATED;\n event.type = event.type ? event.type : EventType.TICKET;\n event.ownerID = event.ownerID ? event.ownerID : currentMission.id;\n try {\n const receivedEvent = await this.eventService.createEvent(event);\n this.awsKinesisAnalytics.getInstance().record(\n // @ts-ignore\n {\n data: {\n eventType: 'Ticket Change',\n ticketId: event.ticketID,\n ticket: ticket,\n status: event.status,\n event: event,\n user: this.userService.cu,\n locationId: this.currentSpaceID,\n timestamp: new Date(),\n zoneId: this.zoneIDFilter,\n floorId: this.selectedFloor?.id,\n },\n streamName: 'smarterplanKinesis-analytics',\n // partitionKey: \"\",\n },\n 'AWSKinesis'\n );\n // console.log('Event successfully created !');\n return receivedEvent;\n } catch (error) {\n return null;\n }\n }\n\n async addTicket(ticket: Ticket): Promise<Ticket | void> {\n ticket.status = TicketStatus.CREATED;\n if (!ticket.ownerMissionID) {\n ticket.ownerMissionID = this.userService.currentMission(\n ticket.spaceID\n ).id;\n }\n // TODO!!! filter missions by space of ticket\n try {\n const receivedTicket = await this.createTicket(ticket);\n // console.log('!!! Response from creating ticket :');\n // console.log(receivedTicket);\n this.addEventToTicket(receivedTicket, {\n title: 'Création du ticket',\n description: `Ticket créé par -`,\n translationPath: 'ticketEvent.ticket.created',\n });\n this.updateDone.next(true);\n return receivedTicket; // instead of true\n } catch (error) {\n console.log('Ticket creation FAILED');\n console.log(JSON.stringify(error));\n }\n }\n\n async updateTicketWithEvent(\n ticket: IUpdate & Partial<Ticket>,\n event?: Event\n ): Promise<Ticket> {\n const receivedTicket = await this.updateTicket(ticket);\n if (receivedTicket) {\n console.log('Updated ticket :');\n console.log(receivedTicket);\n if (event) {\n await this.addEventToTicket(receivedTicket, event);\n }\n this.updateDone.next(true);\n }\n return receivedTicket;\n }\n\n async removeAssigneeFromTicket(\n ticket: Ticket,\n assignee: Affectation\n ): Promise<Ticket> {\n try {\n const affectation =\n await this.affectationService.softDeleteAffectationByID(assignee.id);\n if (!affectation) {\n console.warn(\n `removeAssigneeFromTicket(${ticket.id}, ${assignee.id}) failed`\n );\n }\n } catch (error) {\n console.error(error);\n }\n return ticket;\n }\n\n async updateTicketLocation(\n ticket: Ticket,\n tagData: MattertagData\n ): Promise<POI> {\n const poiInput = {\n coordinate: tagData.getCoordinateString(),\n type: PoiType.TICKET,\n elementID: ticket.id,\n metadata: tagData.getMetadataString(),\n matterportSweepID: tagData.getSweepID(),\n } as POI;\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\n await this.addEventToTicket(ticket, {\n title: 'Changement position du ticket',\n description: \"Le point d'intérêt du ticket a été modifié\",\n status: EventStatus.POSITION_SET,\n translationPath: 'ticketEvent.position.set',\n });\n return poi;\n }\n\n async updateStatusOfTicket(\n ticket: Ticket,\n status: TicketStatus\n ): Promise<any> {\n const currentStatus = ticket.status;\n const oldTicketStatus = ticket.status;\n ticket.status = status;\n if (currentStatus === status) {\n return ticket;\n }\n console.log('Updating status');\n return this.updateTicket({\n id: ticket.id,\n status,\n });\n }\n\n async updateTypeOfTicket(ticket: Ticket, type: TicketType): Promise<any> {\n const previousType = ticket.type;\n ticket.type = type;\n await this.updateTicketWithEvent(\n { id: ticket.id, type: ticket.type },\n {\n title: 'Type changé',\n description: `Changement de ${previousType} vers ${ticket.type}`,\n metadata: JSON.stringify({ type: ticket.type }),\n translationPath: 'ticketEvent.ticket.type',\n }\n );\n return ticket;\n }\n\n async getTicketsForUserForSpace(spaceID: string): Promise<Ticket[]> {\n const ticketsSpace = await this.getTicketsBySpace(spaceID);\n return this.filterService.filterTicketsForCurrentUserInSpace(\n ticketsSpace,\n spaceID\n );\n }\n\n /** Basic CRUD operations */\n async readTicket(id: string) {\n return this.API.__proto__.GetTicket(id);\n }\n\n async createTicket(input: Ticket): Promise<Ticket> {\n this.awsKinesisAnalytics.getInstance().record(\n // @ts-ignore\n {\n data: {\n eventType: 'Object Creation',\n objectType: 'ticket',\n //zoneId: input.spaceID, // TODO: check if spaceId == zoneId\n domain: input.domain,\n user: this.userService.cu,\n locationId: this.currentSpaceID,\n timestamp: new Date(),\n zoneId: this.zoneIDFilter,\n floorId: this.selectedFloor?.id,\n },\n streamName: 'smarterplanKinesis-analytics',\n // partitionKey: \"\",\n },\n 'AWSKinesis'\n );\n return this.API.__proto__.CreateTicket(input);\n }\n\n async updateTicket(input: IUpdate & Partial<Ticket>): Promise<Ticket> {\n return this.API.__proto__.UpdateTicket(input);\n }\n\n async deleteTicket(ticket: Ticket): Promise<Ticket> {\n const deleted = await this.API.__proto__.DeleteTicket({ id: ticket.id });\n\n // delete POI\n const poi = await this.poiService.getPoiByElementId(ticket.id);\n if (poi) {\n this.poiService.deletePoi(poi.id);\n }\n\n // clean parentID\n if (ticket.children.items.length > 0) {\n ticket.children.items.map(async (childTicket) => {\n try {\n await this.API.__proto__.UpdateTicket({\n id: childTicket.id,\n parentID: null,\n });\n } catch {\n console.warn('Could not update ticket', childTicket.id);\n }\n\n await this.API.__proto__.CreateEvent({\n title: 'Ticket parent supprimé',\n ticketID: childTicket.id,\n description: `Ticket \\\"$ticket.title}\\\" a été supprimé`,\n });\n });\n }\n // delete events\n await Promise.all(\n ticket.events.items.map(async (event_) => {\n await this.API.__proto__.DeleteEvent({ id: event_.id });\n })\n );\n // delete affectationns\n if (ticket.assignees.items.length > 0) {\n for (const element of ticket.assignees.items) {\n this.API.__proto__.DeleteAffectation({ id: element.id });\n }\n }\n // delete comments\n await Promise.all(\n ticket.comments.items.map(async (comment) => {\n await this.API.__proto__.DeleteComment({ id: comment.id });\n })\n );\n await this.operationService.deleteOperationsForTicket(ticket.id);\n return deleted;\n }\n\n /** Custom requests */\n async getTicketsBySpace(spaceID: string): Promise<Ticket[]> {\n return this.API.__proto__\n .TicketsBySpace(spaceID)\n .then((tickets) => tickets.items);\n }\n\n async updateIconForAllTicketsInSpace(\n tagIcon: string,\n spaceID: string\n ): Promise<{ tickets: Ticket[]; pois: POI[] }> {\n const tickets = await this.getTicketsBySpace(spaceID);\n const pois = await this.updateIconForAllObjects(tickets, tagIcon);\n return { tickets, pois };\n }\n\n /** Archive related */\n /** Return true if the current user has archived this ticket */\n isArchived(ticket: Ticket): boolean {\n return ticket.archivedForMissionID\n ? ticket.archivedForMissionID.includes(\n this.userService.currentMission(ticket.spaceID).id\n )\n : false;\n }\n\n setArchived(ticket: Ticket, archived: boolean) {\n let archivedList = ticket.archivedForMissionID\n ? ticket.archivedForMissionID\n : [];\n const missionID = this.userService.currentMission(ticket.spaceID).id;\n\n archivedList = archivedList.filter((m) => m !== missionID);\n\n if (archived) {\n archivedList.push(missionID);\n }\n\n return this.updateTicketWithEvent({\n id: ticket.id,\n archivedForMissionID: archivedList,\n });\n }\n\n async navigateToTicketIn3D(\n ticket: Ticket,\n forceSwitchVisit: boolean = false\n ) {\n let url = `visit/${ticket.spaceID}`;\n if (forceSwitchVisit) {\n url += `/detail/${ticket.id}`;\n }\n const canGoToTag = await this.viewerService.action_move_to_tag(\n `${ticket.id}`\n );\n if (canGoToTag) {\n return;\n }\n const result = await this.getModel3dAndSweep(ticket);\n if (!result || !result.model3D) {\n alert('Error while getting virtual visit model');\n return;\n }\n if (!forceSwitchVisit) {\n /** Si on ne force pas la visite, on demande si on veut etre switch */\n openModalForVisitSwitch(\n this.modalService,\n result.model3D,\n ticket.spaceID,\n { sweepToMove: result.sweep, rotation: result.rotation }\n );\n } else {\n /** Si on force le switch de la visit */\n window.open(`${url}?model3D=${result.model3D}&sweep=true`, '_blank');\n }\n }\n\n initSubscriptions() {\n if (!this.isMuseumUser) {\n this.navSubscription = this.zoneChangeService.zoneChange.subscribe(\n (zone) => {\n this.currentSpaceID = this.navigatorService.currentSpaceID;\n if (!this.currentSpaceID) {\n this.ticketTags.next(null);\n this.ticketsUpdated.next({ space: [], zone: null });\n this.ticketTypeFilter = null;\n this.zoneIDFilter = null;\n } else if (zone.id !== this.zoneIDFilter) {\n this.zoneIDFilter = zone.id;\n // console.log(\"going to init tickets from zone\");\n this.initTickets().catch((e) => console.log(e.message));\n }\n }\n );\n this.filetrSubscription = this.filterService.subscribeToDataFilterUpdate(\n (dateRange) => {\n this.dateFilter = dateRange;\n this.initTickets().catch((e) => console.log(e.message));\n }\n );\n this.dateFilter = this.filterService.currentDateFilter;\n this.updateDone.subscribe(() => {\n if (this.currentSpaceID) {\n this.initTickets().catch((e) => console.log(e.message));\n }\n });\n }\n }\n unsubscribe() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import {Injectable, Inject} from '@angular/core';\nimport {NgbModal} from '@ng-bootstrap/ng-bootstrap';\nimport {Subject, takeUntil} from 'rxjs';\nimport {\n openModalForVisitSwitch,\n removeNullKeysFromObject,\n waitUntil,\n} from '../../helpers.service';\nimport {MattertagData} from '../../mattertagData';\nimport {\n Note,\n Zone,\n Equipment,\n EquipmentDocument,\n Ticket,\n TypeNote,\n Mission,\n EventStatus,\n EventType,\n Operation,\n POI,\n PoiType,\n RoleStatus,\n} from '../../types.service';\nimport {FilterService} from '../filter.service';\nimport {NavigatorService} from '../navigator.service';\nimport {\n deleteFromS3,\n getSignedFile,\n getSignedImageUrlForEquipment,\n uploadFileToS3,\n} from '../s3.service';\nimport {BaseUserService} from '../user.service';\nimport {ViewerService} from '../viewer.service';\nimport {BaseObjectService} from './base-object.service';\nimport {NavigationService} from './navigation.service';\nimport {OperationService} from './operation.service';\nimport {PoiService} from './poi.service';\nimport {TicketsService} from './ticket.service';\nimport {ZoneChangeService} from \"../zoneChange.service\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EquipmentService extends BaseObjectService {\n private prefix = {\n technical: 'equipments/note/technical/',\n image: 'equipments/note/image/',\n financial: 'equipments/note/financial/',\n information: 'equipments/note/information/',\n other: 'equipments/note/other/',\n contractual: 'equipments/note/contractual/',\n };\n\n equipmentsUpdated: Subject<{\n space: Equipment[];\n zone: Equipment[];\n }> = new Subject();\n\n currentEquipments: {\n space: Equipment[];\n zonesMap: Map<string, Equipment[]>;\n } = {\n space: [],\n zonesMap: new Map(),\n };\n\n equipmentsTags: Subject<Equipment[]> = new Subject();\n\n zoneIDFilter: string;\n\n currentZone: Zone;\n\n currentSpaceID: string;\n\n floorsPerSpace: Zone[] = null;\n\n /** Null means we do not apply a filter, empty array ([]), means we that we hide all equipment */\n equipmentDomainFilter: string[] = null;\n\n updating: Subject<boolean> = new Subject();\n\n currentlyUpdating = false;\n\n currentSweep: string;\n\n deleteObservable: Subject<Equipment> = new Subject();\n\n createObservable: Subject<Equipment> = new Subject();\n\n updateObservable: Subject<Equipment> = new Subject();\n\n selectedFloor: Zone = null;\n\n API: any; //AWS\n awsKinesisAnalytics: any; //AWS\n\n isMuseumUser = false;\n\n private destroy$ = new Subject();\n\n constructor(\n @Inject('currentAPIService') apiInjected: any,\n @Inject('currentAwsKinesisAnalyticsService')\n awsKinesisAnalyticsInjected: any,\n poiService: PoiService,\n navigationService: NavigationService,\n private operationService: OperationService,\n private ticketsService: TicketsService,\n private navigatorService: NavigatorService,\n private filterService: FilterService,\n private userService: BaseUserService,\n private viewerService: ViewerService,\n private modalService: NgbModal,\n private zoneChangeService: ZoneChangeService\n ) {\n super(poiService, navigationService);\n\n this.API = apiInjected;\n this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;\n\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\n this.initSubscriptions();\n this.userService.isChanged.subscribe((isConnected) => {\n if (isConnected) {\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\n this.initSubscriptions();\n } else {\n this.unsubscribe();\n }\n });\n\n this.zoneChangeService.floorHasChanged.subscribe((floor)=>{\n if (floor){\n this.selectedFloor = floor;\n }\n });\n }\n\n async readEquipment(id: string): Promise<Equipment> {\n return this.API.__proto__.GetEquipment(id).then(async (receivedEquip) => {\n let equip: Equipment;\n if (receivedEquip) {\n equip = receivedEquip;\n equip = await this.getSignedUrlsForEquipment(receivedEquip);\n if (equip.domain) {\n if (equip.domain.parentID) {\n equip.childDomain = equip.domain;\n equip.parentDomain = equip.domain.parent;\n } else {\n equip.parentDomain = equip.domain;\n }\n }\n if (equip.subequipmentsIDs) {\n const subEquips = [];\n await Promise.all(\n equip.subequipmentsIDs.map(async (subId) => {\n const subEquip = await this.API.GetEquipment(subId);\n subEquips.push(subEquip);\n })\n );\n equip.subEquipments = subEquips;\n }\n }\n return equip;\n });\n }\n\n async createEquipment(\n equip: Equipment,\n imageFile: File,\n documentFile: File\n ): Promise<Equipment | void> {\n removeNullKeysFromObject(equip);\n this.awsKinesisAnalytics.getInstance().record(\n // @ts-ignore\n {\n data: {\n eventType: 'Object Creation',\n objectType: 'equipment',\n poi: equip,\n user: this.userService.cu,\n locationId: this.currentSpaceID,\n timestamp: new Date(),\n zoneId: this.currentZone.id,\n floorId: this.selectedFloor?.id,\n },\n streamName: 'smarterplanKinesis-analytics',\n // partitionKey: \"\",\n },\n 'AWSKinesis'\n );\n return this.API.CreateEquipment(equip).then(async (receivedEquipment) => {\n let equipment = receivedEquipment as Equipment;\n if (equipment) {\n console.log('equipment created:', equipment);\n if (documentFile) {\n await this.uploadDoc(equipment, documentFile, TypeNote.TECHNICAL);\n }\n if (imageFile) {\n await this.uploadImage(equipment, imageFile);\n }\n }\n return equipment;\n });\n }\n\n async getSignedUrlsForEquipment(equip: Equipment): Promise<Equipment> {\n const equipment = {...equip};\n if (equipment.notes.items.length > 0) {\n const docs = [];\n await Promise.all(\n equipment.notes.items.map(async (note) => {\n equipment.documentationImageUrlSigned =\n await getSignedImageUrlForEquipment(equipment);\n if (note.attachment) {\n const {length} = note.attachment.split('/');\n const filename = note.attachment.split('/')[length - 1];\n const attachment = await getSignedFile(note.attachment);\n if (attachment) {\n docs.push({\n filename,\n url: note.attachment,\n urlSigned: attachment,\n noteID: note.id,\n } as EquipmentDocument);\n }\n }\n })\n );\n equipment.documents = docs;\n return equipment;\n }\n return equipment;\n }\n\n async getEquipmentsForTicket(ticket: Ticket): Promise<Equipment[]> {\n const operations = ticket.operations.items;\n if (operations.length > 0) {\n operations.sort(\n (a, b) =>\n // @ts-ignore\n // eslint-disable-next-line prettier/prettier\n new Date(b.createdAt) - new Date(a.createdAt)\n );\n await Promise.all(\n operations.map(async (operation) => {\n operation.equipment = await this.readEquipment(operation.equipmentID);\n })\n );\n }\n // to keep the sorting by createdAt\n return operations.map((o) => o.equipment);\n }\n\n async getEquipmentsForSpace(spaceID: string): Promise<Equipment[]> {\n // split by 100\n const limit = 100;\n let equipsToken = {equips: [], nextToken: null};\n do {\n equipsToken = await this.mergeEquipmentsForSpaceWithNextTokenWithLimit(\n spaceID,\n limit,\n equipsToken\n );\n } while (equipsToken.nextToken);\n return equipsToken.equips;\n }\n\n async mergeEquipmentsForSpaceWithNextTokenWithLimit(\n spaceID: string,\n limit: number,\n equipsToken: { equips: Equipment[]; nextToken: string | null }\n ): Promise<{ equips: Equipment[]; nextToken: string | null }> {\n return this.API.__proto__\n .EquipmentsBySpace(\n spaceID,\n null,\n 'DESC',\n null,\n limit,\n equipsToken.nextToken // nextToken\n )\n .then((response) => {\n const equipsLimit = response.items;\n const equipsObject = {\n equips: [...equipsToken.equips, ...equipsLimit],\n nextToken: response.nextToken,\n };\n return equipsObject;\n });\n }\n\n async uploadImageForAllEquipments(\n equipments: Equipment[],\n imageFile: File\n ): Promise<Equipment[]> {\n if (equipments.length === 0) {\n return [];\n }\n\n return uploadFileToS3(this.prefix.image, imageFile, 'BATCH').then(\n async (url) => {\n if (url) {\n const equips = [];\n for (const equip of equipments) {\n const currentMission = this.userService.currentMission(\n equip.spaceID\n );\n await this.API.__proto__.CreateNote({\n attachment: url,\n type: TypeNote.IMAGE,\n equipmentID: equip.id,\n ownerMissionID: currentMission ? currentMission.id : null,\n });\n const update = await this.API.__proto__.UpdateEquipment({\n id: equip.id,\n photo: url,\n });\n equips.push(update);\n }\n return equips;\n }\n return [];\n }\n );\n }\n\n async uploadImage(equipment: Equipment, imageFile: File): Promise<Note> {\n return uploadFileToS3(this.prefix.image, imageFile, equipment.id).then(\n async (url) => {\n if (url) {\n const currentMission = this.userService.currentMission(\n equipment.spaceID\n );\n const note = await this.API.__proto__.CreateNote({\n attachment: url,\n type: TypeNote.IMAGE,\n equipmentID: equipment.id,\n ownerMissionID: currentMission ? currentMission.id : null,\n });\n await this.API.__proto__.UpdateEquipment({\n id: equipment.id,\n photo: url,\n });\n return note;\n }\n return null;\n }\n );\n }\n\n async updateEquipment(\n equip: any,\n file: File = null,\n noteType: TypeNote = null\n ): Promise<Equipment> {\n return this.API.__proto__\n .UpdateEquipment(equip)\n .then(async (receivedEquipment) => {\n let equipment = receivedEquipment as Equipment;\n if (equipment) {\n console.log('equipment updated:', equipment);\n if (noteType) {\n switch (noteType) {\n case TypeNote.IMAGE:\n await this.uploadImage(equipment, file);\n break;\n default:\n await this.uploadDoc(equipment, file, noteType);\n break;\n }\n }\n }\n return equipment;\n });\n }\n\n getPrefixDoc(type: TypeNote) {\n let prefix;\n switch (type) {\n case TypeNote.INFORMATION:\n prefix = this.prefix.information;\n break;\n case TypeNote.FINANCIAL:\n prefix = this.prefix.financial;\n break;\n case TypeNote.CONTRACTUAL:\n prefix = this.prefix.contractual;\n break;\n case TypeNote.OTHER:\n prefix = this.prefix.other;\n break;\n case TypeNote.IMAGE:\n prefix = this.prefix.image;\n break;\n default:\n prefix = this.prefix.technical;\n break;\n }\n return prefix;\n }\n\n async uploadDocForAllEquipments(\n equipments: Equipment[],\n documentFile: File,\n type: TypeNote\n ) {\n if (equipments.length === 0) {\n return [];\n }\n const prefix = this.getPrefixDoc(type);\n const url = await uploadFileToS3(prefix, documentFile, 'BATCH');\n if (url) {\n const updateList = [];\n for (const equip of equipments) {\n const mission = this.userService.currentMission(equip.spaceID);\n const newEquip = await this.API.__proto__.CreateNote({\n attachment: url,\n type,\n equipmentID: equip.id,\n ownerMissionID: mission ? mission.id : null,\n });\n updateList.push(newEquip);\n }\n return updateList;\n }\n return [];\n }\n\n async uploadDoc(\n equipment: Equipment,\n documentFile: File,\n type: TypeNote\n ): Promise<Note> {\n const prefix = this.getPrefixDoc(type);\n const mission = this.userService.currentMission(equipment.spaceID);\n return uploadFileToS3(prefix, documentFile, equipment.id).then(\n async (url) => {\n if (url) {\n return this.API.__proto__.CreateNote({\n attachment: url,\n type,\n equipmentID: equipment.id,\n ownerMissionID: mission ? mission.id : null,\n });\n }\n return null;\n }\n );\n }\n\n async deleteEquipment(equip: Equipment): Promise<Equipment> {\n const deleted = await this.API.__proto__.DeleteEquipment({id: equip.id});\n console.log('Deleted equipment', deleted);\n\n // delete POI\n const [poi] = equip.pois.items;\n if (poi) {\n await this.poiService.deletePoi(poi.id);\n }\n // delete notes related\n if (equip.notes.items.length > 0) {\n await Promise.all(\n equip.notes.items.map(async (note: Note) => {\n // delete files from S3\n /** Not shared with other equipment */\n if (\n note.attachment &&\n !note.attachment.split('/').pop().startsWith('BATCH_')\n ) {\n await deleteFromS3(note.attachment);\n }\n await this.API.__proto__.DeleteNote({id: note.id});\n })\n );\n }\n // delete operations (remove from linked tickets)\n await this.operationService.deleteOperationsForEquipment(equip.id);\n return deleted;\n }\n\n async updateEquipmentLocation(\n equip: Equipment,\n tagData: MattertagData\n ): Promise<POI> {\n const poiInput = {\n coordinate: tagData.getCoordinateString(),\n type: PoiType.EQUIPMENT,\n elementID: equip.id,\n metadata: tagData.getMetadataString(),\n matterportSweepID: tagData.getSweepID(),\n } as POI;\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\n return poi;\n }\n\n async removeTicketFromEquipment(\n ticket: Ticket,\n equip: Equipment\n ): Promise<Operation> {\n const operationEquip =\n await this.operationService.getOperationsByEquipmentID(equip.id);\n const operationToDelete = operationEquip.find(\n (op) => op.ticketID === ticket.id\n );\n return this.operationService\n .deleteOperation(operationToDelete.id)\n .then((res) => {\n this.ticketsService.addEventToTicket(ticket as Ticket, {\n title: 'Equipement retiré du ticket',\n description: `Equipement ${equip.name} a été retiré du ticket`,\n status: EventStatus.UNLINKED_FROM_EQUIPMENT,\n type: EventType.TICKET,\n translationPath: 'ticketEvent.ticket.unlinkedFromEquipment',\n metadata: JSON.stringify({equipment: equip.name}),\n });\n return res;\n });\n }\n\n async initEquips() {\n if (!this.currentSpaceID) {\n return;\n }\n this.updating.next(true);\n this.currentlyUpdating = true;\n\n let eqList = await this.getEquipmentsForSpace(this.currentSpaceID);\n eqList = await this.filterService.filterEquipmentsForCurrentUserInSpace(\n this.currentSpaceID,\n eqList\n );\n // console.log(eqList);\n if (eqList.length > 0) {\n let filteredEquips = eqList.filter(\n (equipment) => !this.isArchived(equipment)\n );\n\n await Promise.all(\n filteredEquips.map(async (equip) => {\n equip.documentationImageUrlSigned =\n await getSignedImageUrlForEquipment(equip);\n })\n );\n if (this.equipmentDomainFilter) {\n filteredEquips = this.filterService.filterEquipmentsByDomainList(\n filteredEquips,\n this.equipmentDomainFilter\n );\n }\n this.currentEquipments.space = filteredEquips;\n if (this.zoneIDFilter) {\n filteredEquips = (await this.filterService.filterObjectsForZone(\n filteredEquips,\n this.zoneIDFilter,\n this.currentZone\n )) as Equipment[];\n }\n this.currentEquipments.zonesMap.set(this.zoneIDFilter, filteredEquips);\n this.equipmentsTags.next(filteredEquips); // adding tags only for the current zone\n this.equipmentsUpdated.next({\n space: this.currentEquipments.space,\n zone: filteredEquips,\n }); // for lateral menu\n } else {\n if (this.zoneIDFilter) {\n this.currentEquipments.zonesMap.set(this.zoneIDFilter, []);\n }\n this.equipmentsUpdated.next({space: [], zone: []}); // for lateral menu\n }\n // console.log(this.currentEquipments);\n this.updating.next(false);\n this.currentlyUpdating = false;\n }\n\n async getEquipmentsForCurrentUserForSpace(\n spaceID,\n missions: Mission[]\n ): Promise<Equipment[]> {\n let results = [];\n\n const spaceMissions = missions.filter((m) => m.spaceID === spaceID);\n if (spaceMissions.length === 0) {\n return results;\n }\n const canSeeEquips = spaceMissions.some(\n (m) =>\n this.userService.managers.includes(m.role) ||\n m.role === RoleStatus.SERVICE\n );\n if (!canSeeEquips) {\n return results;\n }\n let domains = [];\n for (const m of spaceMissions) {\n domains = [...domains, m.domains];\n }\n if (domains.length === 0) {\n return results;\n }\n results = await this.getEquipmentsForSpace(spaceID);\n // results = this.filterService.filterEquipmentsByDomainList(\n // results,\n // domains,\n // );\n return results;\n }\n\n async updateIconForAllEquipmentsInSpace(\n tagIcon: string,\n spaceID: string,\n domainID: string = null\n ): Promise<{ equips: Equipment[]; pois: POI[] }> {\n let equips = await this.getEquipmentsForSpace(spaceID);\n if (domainID) {\n equips = equips.filter((equip) => equip.domainID === domainID);\n }\n const pois = await this.updateIconForAllObjects(equips, tagIcon);\n return {equips, pois};\n }\n\n /** Return true if the current user has archived this equipment */\n isArchived(equipment: Equipment): boolean {\n return equipment.archivedForMissionID\n ? equipment.archivedForMissionID.includes(\n this.userService.currentMission(equipment.spaceID).id\n )\n : false;\n }\n\n setArchived(equipment: Equipment, archived: boolean) {\n let archivedList = equipment.archivedForMissionID\n ? equipment.archivedForMissionID\n : [];\n const missionID = this.userService.currentMission(equipment.spaceID).id;\n\n archivedList = archivedList.filter((m) => m !== missionID);\n\n if (archived) {\n archivedList.push(missionID);\n }\n\n return this.updateEquipment({\n id: equipment.id,\n archivedForMissionID: archivedList,\n });\n }\n\n async deleteFile(document_: EquipmentDocument) {\n await deleteFromS3(document_.url);\n await this.API.DeleteNote({id: document_.noteID});\n }\n\n async navigateToEquipmentIn3D(\n equipment: Equipment,\n forceSwitchVisit: boolean = false\n ) {\n let url = `visit/${equipment.spaceID}`;\n if (forceSwitchVisit) {\n url += `/equip/${equipment.id}`;\n }\n const canGoToTag = await this.viewerService.action_move_to_tag(\n `${equipment.id}`\n );\n if (canGoToTag) {\n return;\n }\n const result = await this.getModel3dAndSweep(equipment);\n\n if (!result || !result.model3D) {\n alert('Error while getting virtual visit model');\n return;\n }\n if (!forceSwitchVisit) {\n // check if we are moving within the same 3D model\n const currentModel = localStorage.getItem('model3D');\n if (currentModel && currentModel === result.model3D) {\n // we add tag to the visit\n const poi = equipment.pois.items[0];\n if (poi.coordinate) {\n // we force add because we might be in an another zone\n await this.viewerService.actionAddObjectFromPOI(equipment, poi);\n await this.viewerService.action_move_to_tag(equipment.id);\n }\n } else {\n /** Si on ne force pas la visite, on demande si on veut etre switch */\n openModalForVisitSwitch(\n this.modalService,\n result.model3D,\n equipment.spaceID,\n {sweepToMove: result.sweep, rotation: result.rotation}\n );\n }\n } else {\n /** Si on force le switch de la visit */\n window.open(`${url}?model3D=${result.model3D}&sweep=true`, '_blank');\n }\n }\n\n async updateEquipsForZone() {\n this.updating.next(true);\n let filteredEquips = [];\n if (this.currentEquipments.space.length > 0) {\n if (\n this.zoneIDFilter &&\n this.currentEquipments.zonesMap.has(this.zoneIDFilter)\n ) {\n filteredEquips = this.currentEquipments.zonesMap.get(this.zoneIDFilter);\n // console.log(\"i have equips for this zone\", filteredEquips);\n } else {\n filteredEquips = (await this.filterService.filterObjectsForZone(\n this.currentEquipments.space,\n this.zoneIDFilter,\n this.currentZone\n )) as Equipment[];\n\n this.currentEquipments.zonesMap.set(this.zoneIDFilter, [\n ...filteredEquips,\n ]);\n }\n if (this.equipmentDomainFilter) {\n filteredEquips = this.filterService.filterEquipmentsByDomainList(\n filteredEquips,\n this.equipmentDomainFilter\n );\n }\n this.equipmentsTags.next(filteredEquips); // adding tags only for the current zone\n this.equipmentsUpdated.next({\n space: this.currentEquipments.space,\n zone: filteredEquips,\n }); // for lateral menu\n } else {\n this.equipmentsUpdated.next({space: [], zone: []}); // for lateral menu\n }\n this.updating.next(false);\n }\n\n updateDueToDelete(deletedEquipment: Equipment) {\n // console.log(\"update due to delete\", deletedEquipment);\n const equip = this.currentEquipments.space.find(\n (_equip) => _equip.id === deletedEquipment.id\n );\n if (equip) {\n const index = this.currentEquipments.space.indexOf(equip);\n this.currentEquipments.space.splice(index, 1);\n }\n for (const zone of this.currentEquipments.zonesMap.keys()) {\n const equipToDelete = this.currentEquipments.zonesMap\n .get(zone)\n .find((_equip) => _equip.id === deletedEquipment.id);\n if (equipToDelete) {\n const index = this.currentEquipments.zonesMap\n .get(zone)\n .indexOf(equipToDelete);\n this.currentEquipments.zonesMap.get(zone).splice(index, 1);\n }\n }\n this.equipmentsUpdated.next({\n space: this.currentEquipments.space,\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\n }); // for lateral menu\n }\n\n updateDueToCreate(createdEquip: Equipment) {\n this.currentEquipments.space.unshift(createdEquip);\n this.currentEquipments.zonesMap\n .get(this.zoneIDFilter)\n .unshift(createdEquip);\n this.equipmentsUpdated.next({\n space: this.currentEquipments.space,\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\n }); // for lateral menu\n }\n\n updateDueToEquipUpdated(updatedEquip: Equipment) {\n const equip = this.currentEquipments.space.find(\n (_equip) => _equip.id === updatedEquip.id\n );\n if (equip) {\n const index = this.currentEquipments.space.indexOf(equip);\n if (this.isArchived(equip)) {\n // we remove archived equipment\n this.currentEquipments.space.splice(index, 1);\n } else {\n this.currentEquipments.space.splice(index, 1, updatedEquip);\n }\n }\n for (const zone of this.currentEquipments.zonesMap.keys()) {\n const equipToUpd = this.currentEquipments.zonesMap\n .get(zone)\n .find((_equip) => _equip.id === updatedEquip.id);\n if (equipToUpd) {\n const index = this.currentEquipments.zonesMap\n .get(zone)\n .indexOf(equipToUpd);\n if (this.isArchived(equip)) {\n this.currentEquipments.zonesMap.get(zone).splice(index, 1);\n } else {\n this.currentEquipments.zonesMap\n .get(zone)\n .splice(index, 1, updatedEquip);\n }\n }\n }\n this.equipmentsUpdated.next({\n space: this.currentEquipments.space,\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\n }); // for lateral menu\n }\n\n initSubscriptions() {\n if (!this.isMuseumUser) {\n this.zoneChangeService.zoneChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((zone) => {\n if (!zone || !this.navigatorService.currentSpaceID) {\n this.currentSpaceID = this.navigatorService.currentSpaceID;\n this.equipmentsTags.next(null);\n this.equipmentsUpdated.next({space: [], zone: null});\n this.zoneIDFilter = null;\n this.currentEquipments = {\n space: [],\n zonesMap: new Map(),\n };\n return;\n }\n if (zone.id !== this.zoneIDFilter) {\n this.zoneIDFilter = zone.id;\n this.currentZone = zone;\n if (this.currentSpaceID === this.navigatorService.currentSpaceID) {\n // same space, only zone update\n // console.log(\n // \"going to update equips for zone (same space)\",\n // zone,\n // );\n\n this.updateEquipsForZone();\n } else {\n this.currentSpaceID = this.navigatorService.currentSpaceID;\n // console.log(\n // \"going to init equips for zone for new space\",\n // this.currentSpaceID,\n // );\n this.initEquips();\n }\n }\n });\n\n this.deleteObservable\n .pipe(takeUntil(this.destroy$))\n .subscribe((equipment) => {\n if (this.currentSpaceID) {\n this.updateDueToDelete(equipment);\n }\n });\n\n this.createObservable\n .pipe(takeUntil(this.destroy$))\n .subscribe((equipment) => {\n if (this.currentSpaceID) {\n this.updateDueToCreate(equipment);\n }\n });\n\n this.updateObservable\n .pipe(takeUntil(this.destroy$))\n .subscribe((equipment) => {\n if (this.currentSpaceID) {\n this.updateDueToEquipUpdated(equipment);\n }\n });\n }\n }\n\n unsubscribe() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","/* eslint-disable no-case-declarations */\n/* eslint-disable no-param-reassign */\n/* eslint-disable no-await-in-loop */\nimport { Injectable } from \"@angular/core\";\nimport { Mission } from \"../types.service\";\nimport { FilterService } from \"./filter.service\";\nimport { EquipmentService } from \"./models/equipment.service\";\n\nexport enum SearchObjectType {\n USER = \"USER\",\n EQUIPMENT = \"EQUIPMENT\",\n TICKET = \"TICKET\",\n LOCATION = \"LOCATION\",\n FEATURE = \"FEATURE\",\n TEMPLATE = \"TEMPLATE\",\n}\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class SearchService {\n constructor(\n private filterService: FilterService,\n private equipmentService: EquipmentService,\n ) { }\n\n async searchForTermForTypeInMap(\n term: string,\n objectType: SearchObjectType,\n searchable: any,\n ): Promise<any> {\n let results;\n switch (objectType) {\n case SearchObjectType.EQUIPMENT:\n results = new Map();\n for (const [space, equips] of searchable.entries()) {\n const filteredEquips =\n this.filterService.filterEquipmentsForTerm(\n equips,\n term,\n );\n results.set(space, filteredEquips);\n }\n break;\n case SearchObjectType.TICKET:\n results = new Map();\n for (const [space, tickets] of searchable.entries()) {\n await Promise.all(\n tickets.map(async (ticket) => {\n const equips =\n await this.equipmentService.getEquipmentsForTicket(\n ticket,\n );\n if (equips.length > 0) {\n ticket.equipments = equips;\n }\n }),\n );\n const filteredTickets =\n this.filterService.filterTicketsForTerm(\n tickets,\n term,\n );\n results.set(space, filteredTickets);\n }\n break;\n case SearchObjectType.LOCATION:\n results = this.filterService.filterLocationsForTerm(\n searchable,\n term,\n );\n break;\n case SearchObjectType.USER:\n results = [];\n for (const orgObject of searchable) {\n const orgResults =\n this.filterService.filterOrganisationsForTerm(\n [orgObject.org],\n term,\n );\n if (orgResults.length === 0) {\n const profiles = orgObject.users.map(\n (object) => object.user,\n );\n const userResults =\n this.filterService.filterUsersForTerm(\n profiles,\n term,\n );\n const filteredUserMissions = orgObject.users.filter(\n (object) => userResults.includes(object.user),\n );\n if (userResults.length > 0) {\n results.push({\n org: orgObject.org,\n users: filteredUserMissions,\n });\n }\n } else {\n results.push(orgObject);\n }\n }\n break;\n case SearchObjectType.FEATURE:\n results = new Map();\n for (const [space, features] of searchable.entries()) {\n const filteredFeatures =\n await this.filterService.filterFeaturesForTerm(\n features,\n term,\n );\n results.set(space, filteredFeatures);\n }\n break;\n case SearchObjectType.TEMPLATE:\n results = new Map();\n for (const [zone, templates] of searchable) {\n const templateResults =\n this.filterService.filterTemplatesForTerm(\n templates as Mission[],\n term,\n );\n if (templateResults.length > 0) {\n results.set(zone, templateResults);\n }\n }\n break;\n default:\n break;\n }\n return results;\n }\n\n async searchForTermForTypeInList(\n term: string,\n objectType: SearchObjectType,\n searchable: any[],\n ): Promise<any[]> {\n let results;\n switch (objectType) {\n case SearchObjectType.EQUIPMENT:\n results = this.filterService.filterEquipmentsForTerm(\n searchable,\n term,\n );\n break;\n case SearchObjectType.TICKET:\n await Promise.all(\n searchable.map(async (ticket) => {\n const equips =\n await this.equipmentService.getEquipmentsForTicket(\n ticket,\n );\n if (equips.length > 0) {\n ticket.equipements = equips;\n }\n }),\n );\n results = this.filterService.filterTicketsForTerm(\n searchable,\n term,\n );\n break;\n case SearchObjectType.LOCATION:\n results = this.filterService.filterLocationsForTerm(\n searchable,\n term,\n );\n break;\n case SearchObjectType.FEATURE:\n results = this.filterService.filterFeaturesForTerm(\n searchable,\n term,\n );\n break;\n default:\n break;\n }\n return results;\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { SearchObjectType, SearchService } from '../../services/search.service';\n\n@Component({\n selector: 'lib-search-bar',\n templateUrl: './search-bar.component.html',\n styleUrls: ['./search-bar.component.scss']\n})\nexport class SearchBarComponent implements OnInit {\n\n @Input() searchable: any;\n\n @Input() objectType: SearchObjectType;\n\n @Output() searchEvent = new EventEmitter();\n\n public model: any;\n\n // formatter = (result: string) => result.toUpperCase();\n\n // search: OperatorFunction<string, readonly string[]> = (\n // text$: Observable<string>,\n // ) =>\n // text$.pipe(\n // debounceTime(200),\n // distinctUntilChanged(),\n // map((term) =>\n // term === \"\"\n // ? []\n // : this.searchable\n // .filter((v) =>\n // v.toLowerCase().includes(term.toLowerCase()),\n // )\n // .slice(0, 10),\n // ),\n // );\n\n // filter = (input: string[]) => string[];\n\n constructor(private searchService: SearchService) { }\n\n ngOnInit(): void {\n const input = document.querySelector(\"#searchbar\") as HTMLInputElement;\n input.addEventListener(\"keydown\", ({ key }) => {\n if (key === \"Enter\") {\n this.onSubmit();\n }\n });\n }\n\n onSubmit() {\n const input = document.querySelector(\"#searchbar\") as HTMLInputElement;\n const searchValue = input.value.toLowerCase();\n if (searchValue !== \"\") {\n this.filter(searchValue);\n } else {\n this.searchEvent.emit(null);\n }\n }\n\n async filter(term: string) {\n const results = await this.searchService.searchForTermForTypeInMap(\n term,\n this.objectType,\n this.searchable,\n );\n this.searchEvent.emit(results);\n }\n}\n","<div class=\"col-md-8 searchbar\">\n <div class=\"row depend\">\n <div class=\"col-md-5\">\n <input id=\"searchbar\" type=\"text\" class=\"form-control\" placeholder=\"keyword\" />\n </div>\n <div class=\"col-md-5\">\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onSubmit()\">{{ 'Search' |\n translate}}</button>\n </div>\n </div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, Subscription } from 'rxjs';\n\n@Pipe({\n name: 'durationToString'\n})\nexport class DurationToStringPipe implements PipeTransform {\n durationToString(\n duration: number\n ): string {\n const days = Math.floor(duration / 3600 / 24);\n const hours = Math.floor((duration - days * 24 * 3600) / 3600);\n const minutes = Math.floor((duration % 3600) / 60);\n const seconds = Math.floor(duration % 60);\n \n const daysString = this.translate.instant(\"day(s)\");\n const hoursString = this.translate.instant(\"hour(s)\");\n const oneHourString = this.translate.instant(\"hour\");\n const minutesString = this.translate.instant(\"minute(s)\");\n const secondsString = this.translate.instant(\"second(s)\");\n \n if (duration > 3600 * 24 * 7) {\n return `${days} ${daysString}`;\n }\n if (duration > 3600 * 24) {\n return `${days} ${daysString} ${hours} ${hoursString}`;\n }\n if (duration === 3600) {\n return `${hours} ${oneHourString}`;\n }\n if (duration > 3600) {\n if (minutes === 0) {\n return `${hours} ${hoursString}`;\n }\n return `${hours} ${hoursString} ${minutes} ${minutesString}`;\n }\n if (duration >= 60) {\n if (seconds === 0) {\n return `${minutes} ${minutesString}`;\n }\n return `${minutes} ${minutesString} ${seconds} ${secondsString}`;\n }\n return `${seconds} ${secondsString}`;\n }\n\n constructor(private translate: TranslateService) { }\n\n transform(duration: number): Observable<string> {\n let subscript: Subscription;\n\n const dateObserver: Observable<string> = new Observable((observer) => {\n subscript = this.translate.onLangChange.subscribe((event) => {\n observer.next(this.durationToString(duration));\n });\n observer.next(this.durationToString(duration));\n\n return {\n unsubscribe() {\n subscript.unsubscribe();\n },\n };\n });\n return dateObserver;\n }\n\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Hashtag, Node } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class HashtagService {\n currentSpaceID: string;\n\n currentHashtags: Hashtag[] = [];\n\n API: any;\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async getHashtag(hashtagID: string): Promise<Hashtag> {\n return this.API.__proto__.GetHashtag(hashtagID);\n }\n\n async createHashtag(hashtag: Hashtag): Promise<Hashtag> {\n const hashtagCreated = await this.API.__proto__.CreateHashtag(hashtag);\n this.currentHashtags.push(hashtagCreated);\n return hashtagCreated;\n }\n\n async getHashtagsForSpace(spaceID: string = null): Promise<Hashtag[]> {\n if (!spaceID) {\n if (this.currentHashtags.length === 0 && this.currentSpaceID) {\n return this.API.__proto__.HashtagsBySpace(this.currentSpaceID).then(\n (response) => response.items,\n );\n }\n return this.currentHashtags;\n }\n this.currentSpaceID = spaceID;\n return this.API.__proto__.HashtagsBySpace(spaceID).then(\n (response) => response.items,\n );\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { HashtagService } from '../services/models/hashtag.service';\n\n@Pipe({\n name: 'hashtagFromID'\n})\nexport class HashtagFromIdPipe implements PipeTransform {\n\n constructor(\n private hashtagService: HashtagService\n ) {}\n\n async transform(hashtagID: string): Promise<string> {\n if (this.hashtagService.currentHashtags.length === 0) {\n return this.hashtagService.getHashtag(hashtagID).then((hashtag) => {\n return hashtag.name;\n });\n }\n const hashtag = this.hashtagService.currentHashtags.find(\n (_hashtag) => _hashtag.id === hashtagID,\n );\n return hashtag ? hashtag.name : \"\";\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeUrl'\n})\nexport class SafeUrlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) { }\n\n transform(url: any) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { Observable } from 'rxjs/internal/Observable';\n\n@Pipe({\n name: 'timeDateString'\n})\nexport class TimeDateToLocalStringPipe implements PipeTransform {\n /**\n * Return a string of a given date time in local format.\n * The format is determined by the current language.\n */\n dateTimeToLocalString(\n date: number | string | Date,\n mode?: string,\n ): string {\n let lang = \"en-EN\";\n if (this.translate) {\n /** Get current language */\n lang = this.translate.currentLang\n ? this.translate.currentLang\n : this.translate.defaultLang;\n /** Transforme '_fr' to 'fr' */\n if (lang) {\n lang = lang.slice(1);\n }\n \n }\n \n let options: {\n month?;\n year?;\n day?;\n hour?;\n minute?;\n second?;\n dateStyle?;\n timeStyle?;\n weekday?;\n timeZone?;\n timeZoneName?;\n };\n switch (mode) {\n case \"day_numeric\":\n options = { day: \"numeric\" };\n break;\n case \"day\":\n options = { weekday: \"long\" };\n break;\n case \"date\":\n options = { dateStyle: \"long\" };\n break;\n case \"short_date_time\":\n options = {\n year: \"2-digit\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n break;\n case \"time\":\n options = { hour: \"numeric\", minute: \"numeric\" };\n break;\n case \"time_zone\":\n options = { hour: \"numeric\", minute: \"numeric\", timeZoneName: \"shortOffset\"};\n break;\n case \"day_time_zone_weekday\":\n options = {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZoneName: \"shortOffset\",\n };\n break;\n case \"date_time_zone\":\n options = {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZoneName: \"shortOffset\",\n };\n break;\n default:\n options = {\n dateStyle: \"long\",\n timeStyle: \"short\",\n };\n }\n return new Date(date).toLocaleString(lang, options);\n }\n\n constructor(private translate: TranslateService) { }\n\n transform(date: number | string | Date, mode?: any): Observable<string> {\n let subscript: Subscription;\n\n const dateObserver: Observable<string> = new Observable((observer) => {\n subscript = this.translate.onLangChange.subscribe((event) => {\n observer.next(\n this.dateTimeToLocalString(date, mode),\n );\n });\n observer.next(this.dateTimeToLocalString(date, mode));\n\n return {\n unsubscribe() {\n subscript.unsubscribe();\n },\n };\n });\n return dateObserver;\n }\n\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { BaseUserService } from \"../services/user.service\";\n\n@Pipe({\n name: \"usernameFromId\",\n})\nexport class UsernameFromIdPipe implements PipeTransform {\n static cache = {};\n\n constructor(private userService: BaseUserService) {}\n\n async transform(userId: string): Promise<string> {\n if (UsernameFromIdPipe.cache[userId] !== undefined) {\n return new Promise<string>((resolve) => {\n resolve(UsernameFromIdPipe.cache[userId]);\n });\n }\n const user = await this.userService.userFromUserID(userId);\n // @ts-ignore\n UsernameFromIdPipe.cache[userId] = `${user.displayName}`;\n return UsernameFromIdPipe.cache[userId];\n }\n}\n","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\n\nexport function noEmptyValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if(control.value && control.value !== ''){\n\n const data = control.value.replace(/ /g, '');\n return data === '' ? {isEmpty: control.value} : null;\n }else{\n return null;\n }\n };\n }","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\n\nexport function emailValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const regex = /^(([^\\s\"(),.:;<>@[\\\\\\]]+(\\.[^\\s\"(),.:;<>@[\\\\\\]]+)*)|(\".+\"))@((\\[(?:\\d{1,3}\\.){3}\\d{1,3}])|(([\\dA-Za-z\\-]+\\.)+[A-Za-z]{2,}))$/;\n return !regex.test(control.value) ? {email: control.value} : null;\n };\n }","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\n\nexport function textValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const regex = /[a-zA-Z1-9]/;\n if (control.value && control.value !== '') {\n return !regex.test(control.value) ? { text: control.value } : null;\n } else {\n return null;\n }\n };\n}","import { Injectable } from '@angular/core';\nimport { API } from \"aws-amplify\";\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SupportService {\n modalReference;\n\n constructor(public modalService: NgbModal) { }\n\n /**\n * Open the support form\n */\n openSupportForm(formComponent) {\n this.modalReference = this.modalService.open(formComponent, {\n modalDialogClass: 'modal-padding',\n });\n }\n\n /**\n * Send support request to jira\n */\n async sendSupport(data:any):Promise<string>{\n return new Promise(async (resolve)=>{\n const response = await API.post(\"helpEmail\", \"/jira-email/new\", {\n body : data,\n });\n if(response.err){\n resolve('error')\n }else{\n resolve('send')\n }\n })\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ValidatorsService {\n\n constructor() { }\n\n /**\n * return if control as error\n * @param control \n * @returns \n */\n public isControlError(control) {\n return (control && control.invalid && control.touched);\n }\n\n /**\n * return error of control\n * @param control \n * @returns \n */\n public getError(control) {\n if (control.errors) {\n if (control.errors.required) {\n return 'errorForm.required';\n }\n if (control.errors.isEmpty) {\n return 'errorForm.isEmpty';\n }\n if (control.errors.text) {\n return 'errorForm.text';\n }\n if (control.errors.email) {\n return 'errorForm.email';\n }\n if (control.errors.maxlength) {\n return 'errorForm.maxLength';\n }\n if (control.errors.number) {\n return 'errorForm.number';\n }\n }\n\n return '';\n }\n\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-loader',\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent implements OnInit {\n @Input() useLogo: boolean = true;\n\n @Input() color: string = \"#53B6BB\";\n constructor() { }\n\n ngOnInit(): void {\n document.documentElement.style.setProperty('--color', this.color);\n }\n\n}\n","<div class=\"sk-fading-circle\">\n <img *ngIf=\"useLogo\" src=\"../../../../assets/icons/smarterplan.svg\">\n <div class=\"sk-circle1 sk-circle\"></div>\n <div class=\"sk-circle2 sk-circle\"></div>\n <div class=\"sk-circle3 sk-circle\"></div>\n <div class=\"sk-circle4 sk-circle\"></div>\n <div class=\"sk-circle5 sk-circle\"></div>\n <div class=\"sk-circle6 sk-circle\"></div>\n <div class=\"sk-circle7 sk-circle\"></div>\n <div class=\"sk-circle8 sk-circle\"></div>\n <div class=\"sk-circle9 sk-circle\"></div>\n <div class=\"sk-circle10 sk-circle\"></div>\n <div class=\"sk-circle11 sk-circle\"></div>\n <div class=\"sk-circle12 sk-circle\"></div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { BaseUserService } from '../../services/user.service';\nimport { Auth } from \"aws-amplify\";\nimport { SupportService } from '../../services/support.service';\nimport { noEmptyValidator } from '../../validators/no-empty.directive';\nimport { ValidatorsService } from '../../services/validators.service';\nimport { emailValidator } from '../../validators/email.directive';\nimport { textValidator } from '../../validators/text.directive';\n\n@Component({\n selector: 'app-support-modal',\n templateUrl: './support-modal.component.html',\n styleUrls: ['./support-modal.component.scss']\n})\nexport class SupportModalComponent implements OnInit {\n status = 'new';\n\n supportForm: FormGroup;\n\n currentUser: any;\n\n loading: boolean = true;\n\n constructor(\n private supportService: SupportService,\n public activeModal: NgbActiveModal,\n private formBuilder: FormBuilder,\n private userService: BaseUserService,\n public validatorsService : ValidatorsService\n ) { }\n\n ngOnInit(): void {\n this.iniForm();\n }\n\n onClose() {\n this.activeModal.close();\n }\n\n async getCurrentUser(): Promise<any> {\n return new Promise(async (resolve) => {\n try {\n const cau = await Auth.currentAuthenticatedUser();\n resolve(await this.userService.current(cau));\n } catch (error) {\n resolve(undefined);\n }\n })\n }\n\n async iniForm() {\n this.currentUser = await this.getCurrentUser();\n this.supportForm = this.formBuilder.group({\n title: ['', [Validators.required , Validators.maxLength(255), noEmptyValidator(), textValidator()]],\n email: [(this.currentUser ? this.currentUser.email : ''), [Validators.required, emailValidator(), Validators.maxLength(255), textValidator()]],\n description: ['', [Validators.required, noEmptyValidator(), textValidator()]],\n });\n this.loading = false;\n }\n \n async onSubmit() {\n if(this.supportForm.valid){\n this.loading = true;\n this.status = await this.supportService.sendSupport(this.supportForm.value);\n this.loading = false;\n }\n }\n\n}","<div class=\"modal-header\">\n <h5 class=\"modal-title\" translate=\"Help\"></h5>\n</div>\n<div class=\"modal-body\">\n <div class=\"support-loader-container\">\n <lib-loader *ngIf=\"loading\"></lib-loader>\n </div>\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"supportForm\" style=\"margin-top:1rem;\" *ngIf=\"!loading && status==='new'\">\n <div>\n <label>{{'Title' | translate}} *</label>\n <div>\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" data-testid=\"new-support-title\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['title'])}\"\n maxlength=\"255\">\n </div>\n <div class=\"invalid-feedback\">\n <span data-testid=\"new-support-title-invalid\" [translate]=\"validatorsService.getError(supportForm.controls['title'])\"\n *ngIf=\" validatorsService.isControlError(supportForm.controls['title'])\"></span>\n </div>\n </div>\n <div *ngIf=\"!currentUser\">\n <label>{{'Email' | translate}} *</label>\n <div>\n <input type=\"email\" class=\"form-control\" formControlName=\"email\" data-testid=\"new-support-email\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['email'])}\"\n maxlength=\"255\">\n </div>\n <div class=\"invalid-feedback\">\n <span data-testid=\"new-support-email-invalid\" [translate]=\"validatorsService.getError(supportForm.controls['email'])\"\n *ngIf=\" validatorsService.isControlError(supportForm.controls['email'])\"></span>\n </div>\n </div>\n <div>\n <label>{{'Description' | translate}} *</label>\n <div>\n <textarea formControlName=\"description\" class=\"form-control\"\n data-testid=\"new-support-description\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['description'])}\"></textarea>\n </div>\n <div class=\"invalid-feedback\" >\n <span data-testid=\"new-support-description-invalid\" [translate]=\" validatorsService.getError(supportForm.controls['description'])\"\n *ngIf=\"validatorsService.isControlError(supportForm.controls['description'])\"></span>\n </div>\n </div>\n </form>\n\n <div *ngIf=\"status ==='send'\" translate=\"Your request has been registered\" data-testid=\"new-support-send-info\">\n </div>\n <div *ngIf=\"status ==='error'\" translate=\"An error has occurred, please renew your request\"\n data-testid=\"new-support-error-info\">\n\n </div>\n</div>\n<div class=\"modal-footer\">\n <button type=\"button\" class=\"btn rounded-pill btn-museum\" data-dismiss=\"modal\" translate=\"Close\" (click)=\"onClose()\"\n data-testid=\"new-support-close-btn\"></button>\n <button *ngIf=\"!loading && status==='new'\" type=\"button\" class=\"btn rounded-pill btn-museum\" translate=\"Submit\"\n (click)=\"onSubmit()\" [disabled]=\"!supportForm.valid\" data-testid=\"new-support-submit-btn\"></button>\n</div>","import { Injectable } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { Subject } from \"rxjs\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class LocaleService {\n currentLocale = \"en\";\n\n // Observable string sources\n private showModalSource = new Subject();\n\n showModal$ = this.showModalSource.asObservable();\n\n constructor(public translate: TranslateService) {}\n\n modal() {\n this.showModalSource.next(true);\n }\n\n /**\n * Reload the app to another language.\n *\n * Navigation is required because of the way angular localizes: locales are\n * completely different compilation bundles, in separate directories, hence\n * you need to reload.\n *\n * @param lang\n */\n change(lang: string): void {\n console.log(\"Switching to\", lang);\n this.currentLocale = lang;\n this.translate.use(`_${lang}`); // because files are \"_en.json\"\n }\n\n getLocale(): string {\n const lang = this.translate.currentLang\n ? this.translate.currentLang\n : this.translate.defaultLang;\n return lang.slice(1);\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport { Injectable } from \"@angular/core\";\nimport { Cache } from \"aws-amplify\";\n\nexport enum CacheKeys {\n INSTRUCTIONS_SHOWN = \"instructions_shown\",\n}\n@Injectable({\n providedIn: \"root\",\n})\nexport class AmplifyCacheService {\n constructor() {\n const config = {\n itemMaxSize: 3000, // 3000 bytes\n defaultTTL: 36000000, // one hour\n };\n Cache.configure(config);\n // this.getAllKeys();\n }\n\n /**\n * Puts item in cache under a key\n * @param key : string. Key for lookup.\n * @param value : Iem to put (number, string, boolean, array or object)\n * @param expires : number. Time in future in milliseconds Date.getTime()\n * @param priority : number from 0 to 5. the cached item with the higher number will be expired first.\n */\n putInCache(\n key: string,\n value: any,\n expires: number = null,\n priority: number = 5,\n ) {\n const options = {\n priority,\n expires,\n };\n if (!expires) {\n delete options.expires;\n }\n Cache.setItem(key, value, options);\n }\n\n /**\n * Retrieves an item from the cache. It will return null if the item doesn’t exist or it has expired.\n * @param key string. Lookup key.\n * @returns any or null if nothing found.\n */\n getFromCache(key: string): any {\n return Cache.getItem(key);\n }\n\n /**\n * Removes item from cache.\n * @param key string. Key to remove.\n */\n removeFromCache(key: string) {\n Cache.removeItem(key);\n }\n\n /**\n * Removes all of the items in the cache.\n */\n clearCache() {\n Cache.clear();\n }\n\n /**\n * Returns all of the keys available in the cache.\n * @returns string[]\n */\n getAllKeys(): string[] | Promise<string[]> {\n return Cache.getAllKeys();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { NgbDate, NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';\n\n@Pipe({\n name: 'formatDateNumberToDigits'\n})\nexport class FormatDateNumberToDigitsPipe implements PipeTransform {\n\n constructor(\n public formatter: NgbDateParserFormatter,\n ){}\n\n transform(date: any): any {\n let [day, month, year] = this.formatter.format(date).split(\"/\")\n if (day) {\n const nDate = new Date(parseInt(year), parseInt(month)-1, parseInt(day))\n const result = nDate.toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n })\n return result;\n }\n return this.formatter.format(date) \n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport {\n NgbDate,\n NgbCalendar,\n NgbDateParserFormatter,\n} from '@ng-bootstrap/ng-bootstrap';\nimport { AmplifyCacheService } from '../../../services/amplify-cache.service';\nimport { FilterService } from '../../../services/filter.service';\n\n@Component({\n selector: 'lib-range-date-picker',\n templateUrl: './range-date-picker.component.html',\n styleUrls: ['./range-date-picker.component.scss'],\n})\nexport class RangeDatePickerComponent implements OnInit {\n hoveredDate: NgbDate | null = null;\n\n fromDate: NgbDate | null;\n\n toDate: NgbDate | null;\n\n @Input() cacheName: string | null;\n\n cache: { from: number; to: number } | null;\n\n isDateFilterApplied: boolean = false;\n\n dateChanged: boolean = false;\n\n constructor(\n private calendar: NgbCalendar,\n public formatter: NgbDateParserFormatter,\n private filterService: FilterService,\n private cacheService: AmplifyCacheService\n ) {\n // this.fromDate = calendar.getPrev(calendar.getToday(), \"d\", 30);\n // this.toDate = calendar.getToday();\n }\n\n ngOnInit(): void {\n if (this.cacheName) {\n this.cache = this.cacheService.getFromCache(this.cacheName);\n }\n if (this.cache) {\n this.isDateFilterApplied = true;\n let { from, to } = this.cache;\n this.toDate = this.getNgbDate(to);\n this.fromDate = this.getNgbDate(from);\n\n localStorage.setItem('startDate', from.toString());\n localStorage.setItem('endDate', to.toString());\n this.filterService.dateFilterUpdated([new Date(from), new Date(to)]);\n } else {\n const currentDate = new Date().getTime(); //get current timestamp\n const thirtyDaysAgoDate = currentDate - 30 * 24 * 60 * 60 * 1000; //substract 30 days in miliseconds from the current timestamp\n\n // add dates to localstorage for retool urlsParams\n localStorage.setItem('startDate', thirtyDaysAgoDate.toString());\n localStorage.setItem('endDate', currentDate.toString());\n\n // updates date range dates to last 30 days ranges from today\n this.fromDate = this.getNgbDate(thirtyDaysAgoDate);\n this.toDate = this.getNgbDate(currentDate);\n\n this.filterService.dateFilterUpdated([\n new Date(thirtyDaysAgoDate.toString()),\n new Date(currentDate.toString()),\n ]);\n }\n }\n\n getNgbDate(date: number): NgbDate {\n let dt = new Date(date);\n dt.setMinutes(dt.getMinutes() - dt.getTimezoneOffset()); // convert to UTC\n return new NgbDate(\n dt.getUTCFullYear(),\n dt.getUTCMonth() + 1,\n dt.getUTCDate()\n );\n }\n\n onDateSelection(date: NgbDate) {\n if (!this.fromDate && !this.toDate) {\n this.fromDate = date;\n } else if (\n this.fromDate &&\n !this.toDate &&\n date &&\n date.after(this.fromDate)\n ) {\n this.toDate = date;\n } else {\n this.toDate = null;\n this.fromDate = date;\n }\n this.isDateChanged();\n }\n\n isDateChanged() {\n if (this.fromDate && this.toDate) {\n if (this.cache) {\n this.dateChanged =\n !this.fromDate.equals(this.getNgbDate(this.cache.from)) ||\n !this.toDate.equals(this.getNgbDate(this.cache.to));\n }\n }\n }\n\n isHovered(date: NgbDate) {\n return (\n this.fromDate &&\n !this.toDate &&\n this.hoveredDate &&\n date.after(this.fromDate) &&\n date.before(this.hoveredDate)\n );\n }\n\n isInside(date: NgbDate) {\n return this.toDate && date.after(this.fromDate) && date.before(this.toDate);\n }\n\n isRange(date: NgbDate) {\n return (\n date.equals(this.fromDate) ||\n (this.toDate && date.equals(this.toDate)) ||\n this.isInside(date) ||\n this.isHovered(date)\n );\n }\n\n validateInput(currentValue: NgbDate | null, input: string): NgbDate | null {\n const parsed = this.formatter.parse(input);\n return parsed && this.calendar.isValid(NgbDate.from(parsed))\n ? NgbDate.from(parsed)\n : currentValue;\n }\n\n emitRange() {\n if (this.fromDate && this.toDate) {\n const from = new Date(\n this.fromDate.year,\n this.fromDate.month - 1,\n this.fromDate.day\n );\n const to = new Date(\n this.toDate.year,\n this.toDate.month - 1,\n this.toDate.day,\n 23,\n 59\n );\n this.cacheService.putInCache(this.cacheName, {\n from: from.getTime(),\n to: to.getTime(),\n });\n this.filterService.dateFilterUpdated([from, to]);\n this.isDateFilterApplied = true;\n this.dateChanged = false;\n }\n }\n\n onClearDates() {\n this.fromDate = null;\n this.toDate = null;\n this.isDateFilterApplied = false;\n this.cacheService.removeFromCache(this.cacheName);\n this.filterService.dateFilterUpdated(null);\n }\n\n onApply() {\n if (this.fromDate && this.toDate) {\n this.emitRange();\n }\n\n //transform ngbDate to date objet then put dates in timestamp in localStorage to share it with Retool\n if (this.fromDate) {\n const startDate = new Date(\n this.fromDate.year,\n this.fromDate.month - 1,\n this.fromDate.day\n );\n localStorage.setItem('startDate', startDate.getTime().toString());\n console.log('test setItem from : ' + startDate.getTime().toString());\n }\n if (this.toDate) {\n const endDate = new Date(\n this.toDate.year,\n this.toDate.month - 1,\n this.toDate.day\n );\n localStorage.setItem('endDate', endDate.getTime().toString());\n }\n }\n}\n","<form class=\"form-inline\">\r\n <div class=\"mb-3 hidden\">\r\n <div class=\"input-group\">\r\n <input name=\"datepicker\" class=\"form-control\" ngbDatepicker #datepicker=\"ngbDatepicker\"\r\n [autoClose]=\"'outside'\" (dateSelect)=\"onDateSelection($event)\" [displayMonths]=\"2\" [dayTemplate]=\"t\"\r\n outsideDays=\"hidden\" [startDate]=\"fromDate!\" 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 </div>\r\n </div>\r\n <div>\r\n <div class=\"input-group\">\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()\" type=\"button\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mb-3 ms-2\">\r\n <div class=\"input-group\">\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()\" type=\"button\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-outline-primary rounded-pill ms-3\" (click)=\"onApply()\"\r\n *ngIf=\"!isDateFilterApplied || dateChanged\">\r\n {{'Apply' | translate}}\r\n </button>\r\n <span class=\"appliedText ms-3\" *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 class=\"btn btn-outline-primary rounded-pill ms-3\" (click)=\"onClearDates()\">{{'Clear' |\r\n translate}}</button>\r\n</form>","import { Component, Input, OnInit } from '@angular/core';\nimport { ProfileService } from '../../../services/models/profile.service';\nimport { uploadFileToS3, getSignedImageUrlForProfile } from '../../../services/s3.service';\nimport { BaseUserService } from '../../../services/user.service';\nimport { ProfileEntity } from '../../../types.service';\nimport { Md5 } from \"ts-md5/dist/md5\";\nimport { Subscription } from 'rxjs';\n\nconst cache = {};\n@Component({\n selector: 'lib-avatar',\n template: `<img [src]=\"avatar\" />`,\n styleUrls: [\"./avatar.component.scss\"],\n})\nexport class AvatarComponent implements OnInit {\n\n @Input() size: number = 45;\n\n @Input() userID: string;\n\n currentUser: ProfileEntity;\n\n avatar;\n\n userSub: Subscription;\n\n constructor(\n private userService: BaseUserService,\n private profileService: ProfileService,\n ) {\n this.userSub = this.userService.isChanged.subscribe((connected) => {\n if (connected) {\n this.currentUser = this.userService.cu;\n this.setAvatar(this.currentUser);\n }\n });\n }\n\n async ngOnInit(): Promise<void> {\n if (this.userID) {\n const profile = await this.profileService.getProfile(this.userID);\n if (profile) {\n const user = new ProfileEntity(profile);\n this.setAvatar(user);\n }\n } else {\n this.currentUser = this.userService.cu;\n this.setAvatar(this.currentUser);\n }\n }\n\n ngOnDestroy() {\n if (this.userSub) {\n this.userSub.unsubscribe();\n }\n }\n\n async setAvatar(user: ProfileEntity) {\n const { id, avatar, email } = user;\n\n // If avatar is not cached, check first if we have an avatar URL to fetch\n // from S3. If not, retrieve it from libravatar.\n // TODO use in a Service to be able to change/upload freely.\n if (!cache.hasOwnProperty(id)) {\n if (!avatar && email) {\n const md5 = new Md5();\n const md5hash = md5.appendStr(email).end();\n const avatar = `https://seccdn.libravatar.org/avatar/${md5hash}?s=${this.size}&default=identicon`;\n const url = await fetch(avatar)\n .then((res) => res.blob())\n .then((blob) => {\n const file = new File([blob], \"avatar.jpeg\", {\n type: \"image/jpeg\",\n });\n return uploadFileToS3(\"avatars/\", file, id);\n });\n await this.profileService.updateProfile({ id, avatar: url });\n user.avatar = url;\n cache[id] = avatar;\n }\n if (avatar) {\n // TODO generating signed urls for avatar makes NO SENSE ($$$)\n // Sorry got to copypaste that, but really need to get rid of\n cache[id] = await getSignedImageUrlForProfile(user);\n }\n }\n this.avatar = cache[id];\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Capture } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class CaptureService {\n API: any; //AWS\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected\n }\n\n async getCapturesBySpace(spaceID: string): Promise<Capture[]> {\n return this.API.CapturesBySpace(spaceID).then((cap) => cap.items);\n }\n\n async getCapture(captureID: string): Promise<Capture> {\n return this.API.__proto__.GetCapture(captureID);\n }\n\n async deleteCapture(captureID: string): Promise<Capture> {\n return this.API.__proto__.DeleteCapture({id: captureID});\n }\n\n async updateCapture(capture: any): Promise<Capture> {\n return this.API.__proto__.UpdateCapture(capture);\n }\n\n async createCapture(capture: Capture): Promise<Capture> {\n return this.API.__proto__.CreateCapture(capture);\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Node } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class NodeService {\n API: any;\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async updateNode(input: any): Promise<Node> {\n return this.API.__proto__.UpdateNode(input);\n }\n\n async deleteNode(id: string): Promise<Node> {\n return this.API.__proto__.DeleteNode({ id });\n }\n\n async getNode(id: string): Promise<Node> {\n return this.API.__proto__.GetNode(id);\n }\n\n async createNode(input: Node): Promise<Node> {\n return this.API.__proto__.CreateNode(input);\n }\n}\n","import { getMetaForImage, wait } from \"../helpers.service\";\nimport { Navigation, Plan } from \"../types.service\";\n\nexport function getCoefficientsForImage(\n img: HTMLImageElement,\n rectangle: any,\n): { coeffX: number; coeffY: number } {\n let coeffY;\n let coeffX;\n const imgRatio = img.width / img.height;\n const rectRatio = rectangle.width / rectangle.height;\n // console.log(\"image\", img.width, img.height);\n // console.log(\"rectangle\", rectangle.width, rectangle.height);\n // console.log(imgRatio, rectRatio);\n if (imgRatio > rectRatio) {\n // img is fitted in rectangle by width\n coeffX = img.width / rectangle.width;\n const effectiveImageHeight = rectangle.width / imgRatio;\n coeffY = img.height / effectiveImageHeight;\n } else {\n coeffY = img.height / rectangle.height;\n const effectiveImageWidth = rectangle.height * imgRatio;\n coeffX = img.width / effectiveImageWidth;\n }\n // console.log(coeffX, coeffY);\n return { coeffX, coeffY };\n}\n\nexport function styleButton(button: HTMLButtonElement) {\n button.style.backgroundImage = `url(\"https://api.iconify.design/mdi:adjust.svg?color=green&height=17&width=17\")`;\n button.style.backgroundColor = \"transparent\";\n button.style.position = \"absolute\";\n button.style.border = \"none\";\n button.style.width = \"17px\";\n button.style.height = \"17px\";\n button.disabled = true;\n}\n\nexport const showScanPointsOnPlanInDiv = async (\n plan: Plan,\n divPlan: HTMLElement,\n navigations: Navigation[],\n): Promise<HTMLButtonElement[]> => {\n if (!divPlan || !plan.filepath) {\n return [];\n }\n const calibrage = JSON.parse(plan.calibration);\n\n const img = await getMetaForImage(plan.filepath);\n divPlan.style.backgroundImage = `url(${plan.filepath})`;\n divPlan.style.backgroundSize = \"contain\";\n divPlan.style.backgroundRepeat = \"no-repeat\";\n await wait(1500); // while image is loaded to div\n divPlan.innerHTML = \"\"; // remove all previous buttons if exist\n const rect = divPlan.getBoundingClientRect();\n const { coeffX, coeffY } = getCoefficientsForImage(img, rect);\n const buttons = [];\n await Promise.all(\n navigations.map(async (navigation) => {\n const element = document.createElement(\"button\");\n styleButton(element);\n element.id = navigation.matterportSweepID;\n if (calibrage.new) {\n // new procedure of calibrage\n // find position for a given plan\n const positionsOnPlan = navigation.positionOnPlan.map((entry) =>\n JSON.parse(entry),\n );\n const positionOnPlan = positionsOnPlan.find(\n (data) => data.planID === plan.id,\n );\n if (positionOnPlan) {\n const realWidth = img.width / coeffX;\n const realHeight = img.height / coeffY;\n element.style.top = `${\n (positionOnPlan.y * realHeight) / calibrage.imgHeight -\n 10\n }px`;\n element.style.left = `${\n (positionOnPlan.x * realWidth) / calibrage.imgWidth - 10\n }px`;\n }\n } else {\n const position = JSON.parse(navigation.position);\n const x = calibrage.offsetX + position.x * calibrage.x;\n const y = calibrage.offsetY + position.z * calibrage.y;\n element.style.top = `${y / coeffY - 10}px`;\n element.style.left = `${x / coeffX - 10}px`;\n }\n divPlan.append(element);\n buttons.push(element);\n }),\n );\n return buttons;\n};\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Measurement, Feature, Comment, IUpdate, CommentType } from \"../../types.service\";\nimport { uploadFileToS3 } from \"../s3.service\";\nimport { PoiService } from \"./poi.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class CommentService {\n\n API: any; // AWS\n constructor(@Inject('currentAPIService') apiInjected: any,\n private poiService: PoiService) {\n this.API = apiInjected;\n }\n\n getCommentsFromTicketID(ticketID: string): Promise<Comment[]> {\n return this.API.__proto__.CommentsByTicket(ticketID).then((res) => res.items);\n }\n\n async getCommentsBySpaceID(spaceID: string): Promise<Comment[]> {\n return this.API.__proto__.CommentsBySpace(spaceID).then(\n (comments) => comments.items,\n );\n }\n\n async readCommentAsMeasurement(commentID: string): Promise<Measurement> {\n const comment = await this.getComment(commentID);\n if (comment.ticketID && !comment.ticket) {\n comment.ticket = await this.API.__proto__.GetTicket(comment.ticketID);\n }\n const values = comment.dimensions;\n const numberPoints = values.length + 1;\n const poi = await this.poiService.getPoiByElementId(commentID);\n const measure = {\n id: comment.id,\n comment,\n poi,\n numberPoints,\n values,\n } as Measurement;\n return measure;\n }\n\n /**\n * CRUD\n *\n */\n async getComment(commentID: string): Promise<Comment> {\n return this.API.__proto__.GetComment(commentID);\n }\n\n async deleteComment(commentID: string): Promise<Comment> {\n return this.API.__proto__.DeleteComment({ id: commentID });\n }\n\n async createComment(comment: Comment): Promise<Comment> {\n return this.API.__proto__.CreateComment(comment);\n }\n\n async updateComment(input: any): Promise<Comment> {\n return this.API.__proto__.UpdateComment(input);\n }\n\n async uploadFileForComment(file: File, id: string = null): Promise<string> {\n return uploadFileToS3(\"comments/\", file, id);\n }\n\n /** Create a new comment with an existing Annexe */\n async createCommentWithFileURL(\n comment: Comment,\n url: string,\n ): Promise<Comment> {\n const newComment = comment;\n newComment.annexe = url;\n return this.createComment(newComment);\n }\n\n async createCommentWithFile(\n comment: Comment,\n file: File,\n ): Promise<Comment> {\n let createdComment = await this.createComment(comment);\n if (file) {\n const url = await this.uploadFileForComment(\n file,\n createdComment.id,\n );\n createdComment = await this.updateComment({\n id: createdComment.id,\n annexe: url,\n });\n }\n return createdComment;\n }\n\n\n\n async setCommentAsCoverForFeature(\n commentID: string,\n feature: Feature,\n ): Promise<Comment> {\n const updatedComment = await this.updateComment({\n id: commentID,\n isCoverImage: true,\n });\n await Promise.all(\n feature.comments.items.map(async (image) => {\n if (\n image.type === CommentType.IMAGE &&\n image.id !== commentID\n ) {\n await this.updateComment({\n id: image.id,\n isCoverImage: false,\n });\n }\n }),\n );\n return updatedComment;\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport { Injectable, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\nimport { Subject } from \"rxjs\";\nimport { MediaContent } from \"../types.service\";\nimport { CommentService } from \"./models/comment.service\";\nimport { FeatureService } from \"./models/feature.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class ContentService {\n modalReference;\n\n currentAudio: HTMLAudioElement;\n\n closeModal = new Subject<boolean>();\n\n nextSlide = new Subject<string>();\n\n constructor(public modalService: NgbModal, private router: Router, private commentService: CommentService) {}\n\n presentVideoModal(video: MediaContent, videoComponent: any, modalDialogClass: string) {\n this.modalReference = this.modalService.open(videoComponent, {\n modalDialogClass: modalDialogClass,\n });\n this.modalReference.componentInstance.video = video;\n this.modalReference.dismissed.subscribe(() => {\n this.emitCloseModal();\n });\n this.modalReference.closed.subscribe(() => {\n this.emitCloseModal();\n });\n }\n\n async presentAudioModal(audioCommentID: string, audioComponent: any, modalDialogClass: string) {\n const audioComment = await this.commentService.getComment(audioCommentID);\n const audioMediaContent = {\n path: audioComment.annexe,\n title: audioComment.title,\n description: audioComment.description,\n } as MediaContent;\n this.modalReference = this.modalService.open(audioComponent, {\n modalDialogClass: modalDialogClass,\n });\n this.modalReference.componentInstance.audio = audioMediaContent;\n this.modalReference.dismissed.subscribe(() => {\n this.emitCloseModal(); \n });\n this.modalReference.closed.subscribe(() => {\n this.emitCloseModal();\n });\n }\n\n presentImageCarouselModal(featureID: string, carouselComponent: any, modalDialogClass: string, \n fromTag = true, selectedImageIndex='0') {\n this.modalReference = this.modalService.open(\n carouselComponent,\n {\n modalDialogClass: modalDialogClass,\n },\n );\n this.modalReference.componentInstance.featureID = featureID;\n this.modalReference.componentInstance.fromTag = fromTag;\n this.modalReference.componentInstance.selectedImageIndex = selectedImageIndex;\n this.modalReference.dismissed.subscribe(() => {\n this.emitCloseModal();\n });\n this.modalReference.closed.subscribe(() => {\n this.emitCloseModal();\n });\n this.modalReference.componentInstance.slideChanged.subscribe(\n (slide) => {\n this.nextSlide.next(slide.current);\n },\n );\n }\n\n presentPdfModal(url: string, pdfComponent: any, modalDialogClass: string,) {\n this.modalReference = this.modalService.open(pdfComponent, {\n modalDialogClass: modalDialogClass,\n });\n this.modalReference.componentInstance.url = url;\n this.modalReference.dismissed.subscribe(() => {\n this.emitCloseModal();\n });\n this.modalReference.closed.subscribe(() => {\n this.emitCloseModal();\n });\n }\n\n presentMuseumImageCarouselModal(\n carouselComponent: any,\n modalDialogClass: string,\n fromTag = true,\n selectedImageIndex = \"0\",\n images: any[] = null,\n commentImageID: string = null,\n ) {\n this.modalReference = this.modalService.open(carouselComponent, {\n modalDialogClass,\n });\n this.modalReference.componentInstance.fromTag = fromTag;\n this.modalReference.componentInstance.selectedImageIndex =\n selectedImageIndex;\n this.modalReference.componentInstance.images = images;\n this.modalReference.componentInstance.commentID = commentImageID;\n this.modalReference.dismissed.subscribe(() => {\n this.emitCloseModal();\n });\n this.modalReference.closed.subscribe(() => {\n this.emitCloseModal();\n });\n this.modalReference.componentInstance.slideChanged.subscribe(\n (slide) => {\n this.nextSlide.next(slide.current);\n },\n );\n }\n\n toogleAudioElement(url: string) {\n if (!this.currentAudio || this.currentAudio.src !== url) {\n this.currentAudio = new Audio(url);\n }\n if (this.currentAudio.duration > 0 && !this.currentAudio.paused) {\n // it is playing, we stop it\n this.currentAudio.pause();\n } else {\n this.currentAudio.play();\n }\n }\n\n showFullscreenCarouselForFeature(featureID: string, fromTag = false) {\n const url = this.router.serializeUrl(\n this.router.createUrlTree([`/fullscreen/${featureID}`], {\n queryParams: { fromTag },\n }),\n );\n window.open(url, \"_blank\");\n }\n\n emitCloseModal() {\n this.modalReference = null;\n this.closeModal.next(true);\n }\n\n forceCloseCurrentModal() {\n if (this.modalReference) {\n this.modalReference.dismiss(\"forced\");\n }\n }\n\n moveToSlide(slide: string) {\n if (this.modalReference) {\n this.modalReference.componentInstance.navigateToSlide(slide);\n }\n }\n}\n","/* eslint-disable func-names */\n/* eslint-disable class-methods-use-this */\nimport { Inject, Injectable } from '@angular/core';\nimport { getDocument, GlobalWorkerOptions } from 'pdfjs-dist';\nimport panzoom from 'panzoom';\nimport videojs from \"video.js\";\nimport { Subject } from 'rxjs';\nimport { Router } from '@angular/router';\nimport {\n CommentType,\n FeatureType,\n Plan,\n PoiType,\n Zone,\n} from '../../types.service';\nimport { BaseVisibilityService } from '../baseVisibility.service';\nimport { MatterportService } from '../matterport.service';\nimport { ViewerService } from '../viewer.service';\nimport { ZoneService } from './zone.service';\nimport { NavigationService } from './navigation.service';\nimport { getSignedFile, uploadFileToS3 } from '../s3.service';\nimport { BaseTagService } from '../tag.service';\nimport { Config } from '../../config';\nimport { getCoefficientsForImage } from '../zone-drawer.service';\nimport { getMetaForImage } from '../../helpers.service';\nimport { ContentService } from '../content.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PlanService {\n chosenPlan: Plan;\n\n currentPlan: Plan;\n\n currentSweep: string;\n\n planFileCache: File;\n\n planCanvas: any;\n\n planDiv: HTMLElement | SVGElement;\n planDivContent: HTMLElement;\n\n panzoom: any;\n\n isReady: boolean = false;\n\n userPositionBtn: HTMLButtonElement;\n\n coeffPlanX: number;\n\n coeffPlanY: number;\n\n calibrationPlan: any;\n\n detailTagDiv: HTMLElement;\n\n detailTagDivIsHover = false;\n\n btnTagIsHover = false;\n\n resizePlanSubscription = new Subject<boolean>();\n\n imgPlan: HTMLImageElement;\n\n lastTouchTime = 0;\n\n delayDblTouch = 500;\n\n lastRotation: number = 0;\n\n htmlContentToInject: {\n title: string;\n content: string;\n elementID: string;\n y: number;\n x: number;\n tagIcon: string;\n url: string;\n }[] = [];\n\n cache: {\n equipIDs: string[];\n ticketIDs: string[];\n measurementsIDs: string[];\n featureIDs: string[];\n zoneID: string;\n plan: Plan;\n htmlContent: {\n title: string;\n content: string;\n elementID: string;\n y: number;\n x: number;\n tagIcon: string;\n url: string;\n }[];\n };\n\n focusMouseTagDiv: boolean = false;\n\n API: any; //AWS\n\n constructor(\n @Inject('currentAPIService') apiInjected: any,\n private zoneService: ZoneService,\n private navigationService: NavigationService,\n // tagService: BaseTagService,\n private viewerService: ViewerService,\n private router: Router,\n private matterportService: MatterportService,\n // private config: AppConfig,\n private visibilityService: BaseVisibilityService,\n private contentService: ContentService\n ) {\n this.API = apiInjected;\n this.matterportService.currentCameraPose.subscribe((pose) => {\n this.updateRotation(pose.rotation.y);\n });\n }\n\n async createPlan(planInput: Plan): Promise<Plan> {\n return this.API.__proto__.CreatePlan(planInput);\n }\n\n async deletePlan(plan: Plan): Promise<Plan> {\n // await deleteFromS3(plan.annexe);\n return this.API.__proto__.DeletePlan({ id: plan.id });\n }\n\n async getPlansForSpace(spaceID: string): Promise<Plan[]> {\n return this.API.__proto__\n .PlansBySpace(spaceID)\n .then((response) => response.items);\n }\n\n async getPlansForZone(zoneID: string): Promise<Plan[]> {\n return this.API.__proto__\n .PlansByZone(zoneID)\n .then((response) => response.items);\n }\n\n async getSingedPlansForSpace(spaceID: string): Promise<Plan[]> {\n const plansFromDB = await this.getPlansForSpace(spaceID);\n // console.log(plansFromDB);\n const plans = [];\n if (plansFromDB.length > 0) {\n await Promise.all(\n plansFromDB.map(async (plan) => {\n const planObject = { ...plan } as Plan;\n // annexe looks like visits/modelID/plans/file.extension\n const signed = await getSignedFile(plan.annexe);\n if (signed) {\n planObject.filepath = signed;\n }\n if (plan.annexe) {\n const [, modelID, , filenameWithExtension] = plan.annexe.split('/');\n const [, extention] = filenameWithExtension.split('.');\n planObject.model3d = modelID;\n planObject.extension = extention;\n plans.push(planObject);\n } else {\n console.log(`Error plan have not annexe => `);\n console.log(plan.id);\n }\n })\n );\n }\n return plans;\n }\n\n async getPlansWithZonesForSpace(spaceID: string): Promise<Plan[]> {\n const plans = await this.getPlansForSpace(spaceID);\n const plansZones = plans.filter((plan) => plan.zone && plan.calibration);\n return plansZones;\n }\n\n setChosenPlan(chosenPlan: Plan) {\n this.chosenPlan = chosenPlan;\n }\n\n getChosenPlan(): Plan {\n return this.chosenPlan;\n }\n\n setPlanFileCache(planFileCache: File): Promise<void> {\n this.planFileCache = planFileCache;\n return Promise.resolve();\n }\n\n getPlanFileCache(): File {\n return this.planFileCache;\n }\n\n async createPlanWithAnnexe(plan: Plan, file: File): Promise<Plan> {\n const createdPlan = await this.createPlan(plan);\n const model3D = await this.zoneService.getModel3DForZone(plan.zoneID);\n const url = await uploadFileToS3(\n `visits/${model3D}/plans/`,\n file,\n createdPlan.id\n );\n if (url) {\n return this.API.__proto__.UpdatePlan({ id: createdPlan.id, annexe: url });\n }\n return createdPlan;\n }\n\n async updatePlan(plan: any): Promise<Plan> {\n return this.API.__proto__.UpdatePlan(plan);\n }\n\n async updatePlanFile(): Promise<string> {\n if (this.chosenPlan && this.planFileCache) {\n const model3D = await this.zoneService.getModel3DForZone(\n this.chosenPlan.zoneID\n );\n return uploadFileToS3(\n `visits/${model3D}/plans/`,\n this.planFileCache,\n this.chosenPlan.id\n );\n }\n return Promise.reject();\n }\n\n async setAllPlansForZoneNotCurrent(zoneID: string, currentPlanID: string) {\n const plans = await this.API.__proto__.ListPlans({\n zoneID: { eq: zoneID },\n });\n await Promise.all(\n plans.items.map(async (plan) => {\n if (plan.isCurrentForZone && plan.id !== currentPlanID) {\n await this.updatePlan({\n id: plan.id,\n isCurrentForZone: false,\n });\n }\n })\n );\n }\n\n async configurePlan(\n currentPlan: Plan,\n divId: string = 'planDivPane',\n divContentId: string = 'planDivPaneContent'\n ): Promise<boolean> {\n this.isReady = false;\n if (!this.detailTagDiv) {\n this.detailTagDiv = document.querySelector(\n `#detailTagDiv`\n ) as HTMLElement;\n }\n this.detailTagDiv.addEventListener('mouseenter', () => {\n this.focusMouseTagDiv = true;\n });\n this.detailTagDiv.addEventListener('mouseleave', () => {\n this.btnTagIsHover = false;\n this.detailTagDiv.style.display = 'none';\n this.focusMouseTagDiv = false;\n });\n\n this.calibrationPlan = JSON.parse(currentPlan.calibration);\n this.currentPlan = currentPlan;\n this.planDiv = document.querySelector(`#${divId}`) as HTMLElement;\n this.planDivContent = document.querySelector(\n `#${divContentId}`\n ) as HTMLElement;\n\n this.planDiv.addEventListener('touchstart', this.handleTouch.bind(this));\n this.planDiv.addEventListener('dblclick', this.onDblClickPlan.bind(this));\n\n if (!currentPlan.annexe.includes('pdf')) {\n this.imgPlan = await getMetaForImage(currentPlan.filepath);\n //Rect use offsetWidth : height, not actual boundingClientRect because will be modified by the zoom.\n const rect = {\n width: this.planDivContent.offsetWidth,\n height: this.planDivContent.offsetHeight,\n };\n const { coeffX, coeffY } = getCoefficientsForImage(this.imgPlan, rect);\n this.coeffPlanX = coeffX;\n this.coeffPlanY = coeffY;\n\n this.planDivContent.style.backgroundImage = `url(${currentPlan.filepath})`;\n } else {\n await this.drawPdf(currentPlan);\n }\n this.planDivContent.style.backgroundSize = 'contain';\n this.planDivContent.style.backgroundRepeat = 'no-repeat';\n\n this.panzoom = panzoom(this.planDiv, {\n bounds: true,\n boundsPadding: 0,\n maxZoom: 4,\n zoomDoubleClickSpeed: 1, //disables double click zoom\n //initialZoom: 4\n });\n this.panzoom.zoomAbs(0, 0, 4);\n setTimeout(() => {\n this.updateRotation(this.lastRotation);\n }, 200);\n return true;\n }\n\n clearPlanImage() {\n if (this.planDivContent) {\n this.planDivContent.style.backgroundImage = null;\n }\n }\n\n async drawPdf(currentPlan: Plan): Promise<void> {\n return new Promise(async (resolve) => {\n const canvas = document.createElement('canvas') as HTMLCanvasElement;\n\n const context = canvas.getContext('2d') as CanvasRenderingContext2D;\n const pdfjsWorker = await import('pdfjs-dist/build/pdf.worker.entry');\n\n GlobalWorkerOptions.workerSrc = pdfjsWorker;\n const pdf = await getDocument(currentPlan.filepath).promise;\n const page = await pdf.getPage(1);\n\n const viewPortParameters = { scale: 1.5 };\n const viewport = page.getViewport(viewPortParameters);\n\n canvas.height = viewport.height;\n canvas.width = viewport.width;\n const renderContext = {\n canvasContext: context,\n viewport,\n };\n const renderTask = page.render(renderContext).promise;\n renderTask.then(async () => {\n const imgUrl = canvas.toDataURL('image/png');\n this.imgPlan = await getMetaForImage(imgUrl);\n const rect = {\n width: this.planDivContent.offsetWidth,\n height: this.planDivContent.offsetHeight,\n };\n const { coeffX, coeffY } = getCoefficientsForImage(this.imgPlan, rect);\n this.coeffPlanX = coeffX;\n this.coeffPlanY = coeffY;\n this.planDiv.style.backgroundImage = `url(${imgUrl})`;\n resolve();\n });\n });\n }\n\n async drawElement(\n element: any,\n tagType: PoiType,\n currentPlan: Plan,\n tagService: BaseTagService,\n config: Config,\n sizeButton: number = 10\n ) {\n const [poi] = element.pois.items;\n if (poi && poi.coordinate && currentPlan) {\n const { zone } = currentPlan;\n if (zone) {\n const position = JSON.parse(poi.coordinate);\n const button = document.createElement('button');\n let elementTitle: string;\n const url = tagService.getUrlForSeeDetails(element, tagType);\n let tagIconImage: string;\n switch (tagType) {\n case PoiType.TICKET: {\n tagIconImage = config.my_config.icon_ticket;\n break;\n }\n case PoiType.EQUIPMENT: {\n tagIconImage = config.my_config.icon_equipment;\n break;\n }\n case PoiType.MEASURE:\n tagIconImage = config.my_config.icon_measure;\n break;\n case PoiType.OBJECT3D:\n tagIconImage = config.my_config.icon_object3d;\n break;\n case PoiType.DATA:\n tagIconImage = config.my_config.icon_data;\n break;\n case PoiType.DESK:\n tagIconImage = config.my_config.icon_data;\n break;\n default:\n return;\n }\n if (poi.tagIcon) {\n const tagIcon = JSON.parse(poi.tagIcon);\n if (\n tagType === PoiType.DATA &&\n element.type === FeatureType.INDICATOR_TEMP\n ) {\n tagIcon.src = tagService.getIconTagImageForFeature(element, poi);\n }\n // poi.tagIcon = tagIcon;\n\n if (tagIcon.src) {\n const source = await getSignedFile(tagIcon.src);\n if (source) {\n tagIconImage = source;\n }\n }\n }\n this.styleButton(button, tagIconImage, sizeButton);\n button.id = element.id;\n this.planDivContent.append(button);\n let x: number;\n let y: number;\n if (this.calibrationPlan.new) {\n // alert(\"new calibration plan: positioning not ready yet\");\n const position2D =\n this.transformPosition3DForNewCalibration(position);\n x = position2D.x;\n y = position2D.y;\n button.style.top = `${y / position2D.coeffY - 5}px`;\n button.style.left = `${x / position2D.coeffX - 5}px`;\n } else {\n // to remove when all calibrations are new\n x =\n this.calibrationPlan.offsetX + position.x * this.calibrationPlan.x;\n y =\n this.calibrationPlan.offsetY + position.z * this.calibrationPlan.y;\n button.style.top = `${y / this.coeffPlanY - 5}px`;\n button.style.left = `${x / this.coeffPlanX - 5}px`;\n }\n\n const html = await tagService.getHtmlToInject(tagType, element);\n if (html != '') {\n this.htmlContentToInject.push({\n elementID: element.id,\n title: '',\n content: html,\n y,\n x,\n tagIcon: tagIconImage,\n url,\n });\n } else {\n // when we don't have html => case of EMBED Comment type\n const commentEmbed = element.comments?.items.find(\n (com) => com.type === CommentType.EMBED && com.shownInTag\n );\n if (commentEmbed) {\n this.htmlContentToInject.push({\n elementID: element.id,\n title: element.title,\n content: `<iframe src=${commentEmbed.externalLink} height=\"200px\" width=\"100%\"></iframe>`,\n y,\n x,\n tagIcon: tagIconImage,\n url,\n });\n }\n }\n\n this.addListenersToButton(button, url, tagService, element);\n this.updateRotation(this.lastRotation);\n }\n }\n }\n\n async drawUserPosition(currentSweep = this.currentSweep, sizeButton: number = 10) {\n this.currentSweep = currentSweep;\n if (this.calibrationPlan && currentSweep) {\n const position =\n this.matterportService.getCurrentCameraPosition()?.position;\n if (position) {\n if (!this.userPositionBtn) {\n this.userPositionBtn = document.createElement('button');\n this.userPositionBtn.id = 'currentPosition';\n this.planDivContent.append(this.userPositionBtn);\n this.userPositionBtn.title = 'You are here';\n this.styleButton(\n this.userPositionBtn,\n 'https://api.iconify.design/bx:bxs-user-circle.svg?color=green&height=17&width=17',\n sizeButton\n );\n }\n let x: number;\n let y: number;\n if (this.calibrationPlan.new) {\n const position2D =\n this.transformPosition3DForNewCalibration(position);\n x = position2D.x / position2D.coeffX - 5;\n y = position2D.y / position2D.coeffY - 5;\n } else {\n x =\n (this.calibrationPlan.offsetX +\n position.x * this.calibrationPlan.x) /\n this.coeffPlanX;\n y =\n (this.calibrationPlan.offsetY +\n position.z * this.calibrationPlan.y) /\n this.coeffPlanY;\n }\n this.userPositionBtn.style.top = `${y}px`;\n this.userPositionBtn.style.left = `${x}px`;\n this.moveOnPoint({ x: x + 5, y: y + 5 });\n }\n }\n }\n\n /**\n * Center the view of the plan on coordinates\n * @param coordinate Coordinate on the plan\n */\n moveOnPoint(coordinate) {\n if (this.planDiv) {\n const scale = this.panzoom.getTransform().scale;\n const moveX = this.planDiv.clientWidth / 2 - coordinate.x * scale;\n const moveY = this.planDiv.clientHeight / 2 - coordinate.y * scale;\n this.panzoom.moveTo(moveX, moveY);\n this.planDivContent.style.transformOrigin = `${coordinate.x}px ${coordinate.y}px`;\n }\n }\n\n /**\n * Apply a rotation to the plan\n * Buttons will remain in the correct rotation\n * @param rotation\n */\n updateRotation(rotation) {\n this.lastRotation = rotation;\n if (this.planDivContent) {\n this.planDivContent.style.transform = `rotate(${rotation}deg)`;\n const buttons = this.planDivContent.querySelectorAll('button');\n let rotationRegex = /(rotate\\(-?\\d*\\.?\\d+deg\\))/g;\n // eslint-disable-next-line unicorn/no-array-for-each\n buttons.forEach((button) => {\n button.style.transform = button.style.transform.replace(rotationRegex, \"\") + ` rotate(${-rotation}deg)`;\n });\n }\n }\n\n removeCurrentPosition() {\n const button = document.querySelector('#currentPosition');\n if (button) {\n button.remove();\n this.userPositionBtn = null;\n }\n }\n\n styleButton(button: HTMLButtonElement, url: string, sizeButton: number = 10) {\n button.style.backgroundImage = `url(${url})`;\n button.style.backgroundColor = 'transparent';\n button.style.position = 'absolute';\n button.style.border = 'none';\n button.style.width = `10px`;\n button.style.height = `10px`;\n button.disabled = false;\n button.style.backgroundSize = 'contain';\n button.style.backgroundRepeat = 'no-repeat';\n button.style.transform = `scale(${sizeButton/10})`\n }\n\n addListenersToButton(\n button: HTMLButtonElement,\n url: string,\n tagService: BaseTagService = null,\n element: any = null\n ) {\n let videoJsPlayer;\n button.addEventListener('mouseenter', async (event) => {\n const contentForButton = this.htmlContentToInject.find(\n (object) => object.elementID === button.id\n );\n this.btnTagIsHover = true;\n const title = document.querySelector(`#titleTagDiv`) as HTMLElement;\n if (contentForButton.title) {\n title.style.display = 'inline';\n title.innerHTML = contentForButton.title;\n } else {\n title.style.display = 'none';\n }\n\n const content = document.querySelector(`#htmlTagDiv`) as HTMLElement;\n this.detailTagDiv.style.top = `${event.clientY + 10}px`;\n this.detailTagDiv.style.left = `${event.clientX < 120 ? 0 : event.clientX - 120\n }px`;\n this.detailTagDiv.style.display = 'block';\n // console.log(contentForButton.content);\n content.innerHTML = contentForButton.content;\n const detailButton = content.querySelector('#detailBtn');\n if (detailButton) {\n detailButton.addEventListener('click', () => {\n this.visibilityService.detailShowing.next(true);\n this.router.navigate([url]);\n });\n }\n\n // handle image carousel fullscreen button\n const imageFullscreenBtn = content.querySelector('#image-footer');\n if (imageFullscreenBtn) {\n imageFullscreenBtn.addEventListener('click', function () {\n if (tagService) {\n tagService.onActionImageClick(contentForButton.elementID);\n }\n });\n }\n\n // handle booking fullscreen button\n const bookingButton = content.querySelector('#bookingBtn');\n if (bookingButton) {\n bookingButton.addEventListener('click', () => {\n this.visibilityService.detailShowing.next(true);\n this.router.navigate([url]);\n });\n }\n\n // handle document pdf fullscreen button\n const docFullscreenBtn = content.querySelector('#doc-footer');\n if (docFullscreenBtn && element) {\n const documentUrl = tagService.getAnnexeForCommentTypeInFeature(\n element,\n CommentType.DOCUMENT\n );\n docFullscreenBtn.addEventListener('click', function () {\n if (tagService) {\n tagService.onActionDocClick(documentUrl);\n }\n });\n }\n\n // handle video fullscreen button\n const videoFullscreenBtn = content.querySelector('#btn-video-fullscreen');\n if (videoFullscreenBtn && element) {\n const videoUrl = tagService.getAnnexeForCommentTypeInFeature(\n element,\n CommentType.VIDEO\n );\n videoFullscreenBtn.addEventListener('click', function () {\n if (tagService) {\n tagService.onActionVideoClick(videoUrl);\n }\n });\n }\n\n // handle Youtube video fullscreen button\n const youtubeFullScreen = content.querySelector(\n '#btn-video-fullscreen-youtube'\n );\n if (youtubeFullScreen && element) {\n const youtubeUrl = tagService.getAnnexeForCommentTypeInFeature(\n element,\n CommentType.YOUTUBE\n );\n youtubeFullScreen.addEventListener('click', function () {\n if (tagService) {\n tagService.onActionYoutubeClick(youtubeUrl);\n }\n });\n }\n\n // handle mute video button\n const btnMute = document.getElementById('btn-mute');\n const imgOn = document.getElementById('sound-on');\n const imgOff = document.getElementById('sound-off');\n const playerElement = document.getElementById(\"mus-video-tag\");\n\n if (playerElement) {\n videoJsPlayer = videojs(\"mus-video-tag\");\n if (btnMute && videoJsPlayer) {\n btnMute.addEventListener('click', function () {\n if (videoJsPlayer.muted()) {\n videoJsPlayer.muted(false);\n if (imgOn && imgOff) {\n imgOn.style.display = 'inline-block';\n imgOff.style.display = 'none';\n }\n } else {\n videoJsPlayer.muted(true);\n if (imgOn && imgOff) {\n imgOn.style.display = 'none';\n imgOff.style.display = 'inline-block';\n }\n }\n });\n }\n }\n\n\n // handle audio player buttons\n const playerButton = document.querySelector('.audio-play-button');\n const audio = document.getElementById('audio-tag') as HTMLMediaElement;\n const timeline = document.querySelector(\n '.timeline-tag'\n ) as HTMLInputElement;\n // const timelineValue = document.querySelector('.timeline-tag').value;\n const soundButton = document.querySelector('.audio-sound-btn');\n const playAudio = document.getElementById('play');\n const pauseAudio = document.getElementById('pause');\n const imgSoundOn = document.getElementById('audio-sound-on');\n const imgSoundOff = document.getElementById('audio-sound-off');\n const audioModal = document.getElementById('btn-audio-modal');\n if (audio && playerButton && timeline) {\n playerButton.addEventListener('click', function () {\n if (audio.paused) {\n audio.play();\n pauseAudio.style.display = 'inline-block';\n playAudio.style.display = 'none';\n } else {\n audio.pause();\n pauseAudio.style.display = 'none';\n playAudio.style.display = 'inline-block';\n }\n });\n soundButton.addEventListener('click', function () {\n if (audio.muted) {\n audio.muted = false;\n imgSoundOn.style.display = 'inline-block';\n imgSoundOff.style.display = 'none';\n } else {\n audio.muted = true;\n imgSoundOn.style.display = 'none';\n imgSoundOff.style.display = 'inline-block';\n }\n });\n function changeTimelinePosition() {\n if (audio.duration) {\n const percentagePosition =\n (100 * audio.currentTime) / audio.duration;\n const percentagePositionString = percentagePosition + '%';\n timeline.style.backgroundSize = percentagePositionString + ' 100%';\n timeline.value = percentagePosition.toString();\n }\n }\n audio.ontimeupdate = changeTimelinePosition;\n function changeSeek() {\n const time = (parseInt(timeline.value) * audio.duration) / 100;\n audio.currentTime = time;\n }\n timeline.addEventListener('change', changeSeek);\n timeline.addEventListener('input', changeSeek);\n // handle audio click\n if (audioModal && element) {\n const audioComment = element.comments?.items.find(\n (com) => com.type === CommentType.AUDIO && com.shownInTag\n );\n const audioCommentID = audioComment ? audioComment.id : '';\n audioModal.addEventListener('click', function () {\n if (tagService) {\n tagService.onActionAudioClick(audioCommentID);\n }\n });\n }\n }\n });\n\n button.addEventListener('mouseleave', async () => {\n // we wait if user hovers on to div of the tag (changes this.focusMouseTagDiv)\n this.btnTagIsHover = false;\n setTimeout(() => {\n if (!this.focusMouseTagDiv && !this.btnTagIsHover) {\n this.detailTagDiv.style.display = 'none';\n if (videoJsPlayer) {\n videoJsPlayer.dispose();\n }\n }\n }, 100);\n });\n button.addEventListener('click', async () => {\n this.detailTagDiv.style.display = 'none';\n if (videoJsPlayer) {\n videoJsPlayer.dispose();\n }\n await this.viewerService.action_move_to_tag(button.id);\n this.visibilityService.detailShowing.next(true);\n this.router.navigate([url]);\n });\n }\n\n clearBtn(idList: any[]) {\n for (const id of idList) {\n const button = document.getElementById(id);\n if (button) {\n button.remove();\n }\n }\n }\n\n clearAllButtons() {\n if (this.planDivContent) {\n const buttons = this.planDivContent.querySelectorAll('button');\n // eslint-disable-next-line unicorn/no-array-for-each\n buttons.forEach(function (currentValue) {\n currentValue.remove();\n });\n this.userPositionBtn = null;\n }\n }\n\n updateAllButtonsStyle(properties: Array<string>, values: Array<string>) {\n if (this.planDivContent) {\n const buttons = this.planDivContent.querySelectorAll('button');\n // eslint-disable-next-line unicorn/no-array-for-each\n buttons.forEach(function (currentValue) {\n properties.forEach((property, i) => {\n if (property === \"transform\") {\n //For saving the rotation and adding scale\n let rotationRegex = /(rotate\\(-?\\d*\\.?\\d+deg\\))/g;\n let rotationMatch = currentValue.style[property].match(rotationRegex);\n if (rotationMatch.length > 0) {\n currentValue.style[property] = `${values[i]} ${rotationMatch[0]}`;\n }\n } else {\n currentValue.style[property] = values[i];\n }\n\n });\n });\n }\n }\n\n onPlanRemove() {\n this.userPositionBtn = null;\n this.calibrationPlan = null;\n this.currentSweep = null;\n this.detailTagDiv = null;\n }\n\n async resizePlan(isRemoving: boolean) {\n this.resizePlanSubscription.next(false);\n if (isRemoving) {\n return;\n }\n console.log('in resizePlan');\n if (this.planDiv && this.currentSweep) {\n this.panzoom = panzoom(this.planDiv, {\n bounds: true,\n boundsPadding: 0,\n maxZoom: 4,\n });\n setTimeout(() => {\n const rect = {\n width: this.planDivContent.offsetWidth,\n height: this.planDivContent.offsetHeight,\n };\n const { coeffX, coeffY } = getCoefficientsForImage(this.imgPlan, rect);\n this.coeffPlanX = coeffX;\n this.coeffPlanY = coeffY;\n this.panzoom.zoomAbs(0, 0, 4);\n this.resizePlanSubscription.next(true);\n }, 200);\n }\n }\n\n handleTouch(event) {\n const now = Date.now();\n if (now - this.lastTouchTime < this.delayDblTouch) {\n this.lastTouchTime = 0;\n // this.onDblClickPlan(event);\n /** Simulate a dblclick for phone (we don't get offsetX/Y on touchevent) */\n const newEvent = document.createEvent('MouseEvents');\n const touch = event.changedTouches[0];\n newEvent.initMouseEvent(\n 'dblclick',\n true,\n true,\n event.target.ownerDocument.defaultView,\n 0,\n touch.screenX,\n touch.screenY,\n touch.clientX,\n touch.clientY,\n event.ctrlKey,\n event.altKey,\n event.shirtKey,\n event.metaKey,\n 0,\n null\n );\n event.target.dispatchEvent(newEvent);\n } else {\n this.lastTouchTime = now;\n }\n }\n\n async onDblClickPlan(event) {\n event.preventDefault();\n const clickX = event.offsetX;\n const clickY = event.offsetY;\n const zonePlan = this.currentPlan.zone;\n if (zonePlan) {\n const navigations: any =\n await this.navigationService.getNavigationsForZone(zonePlan);\n if (navigations.length > 0) {\n await Promise.all(\n navigations.map(async (nav) => {\n const position = JSON.parse(nav.position);\n let x: number;\n let y: number;\n if (this.calibrationPlan.new) {\n const position2D =\n this.transformPosition3DForNewCalibration(position);\n x = position2D.x / position2D.coeffX;\n y = position2D.y / position2D.coeffY;\n } else {\n x =\n (this.calibrationPlan.offsetX +\n position.x * this.calibrationPlan.x) /\n this.coeffPlanX;\n y =\n (this.calibrationPlan.offsetY +\n position.z * this.calibrationPlan.y) /\n this.coeffPlanY;\n }\n\n const distX = Math.abs(clickX - x);\n const distY = Math.abs(clickY - y);\n nav.dist = Math.sqrt(Math.pow(distX, 2) + Math.pow(distY, 2));\n })\n );\n navigations.sort((a, b) => {\n return a.dist - b.dist;\n });\n this.matterportService.action_go_to_sweep(\n navigations[0].matterportSweepID\n );\n }\n }\n }\n\n /**\n * Configures plan from cache (previous plan).\n */\n async uploadPlanFromCache(): Promise<void> {\n this.htmlContentToInject = this.cache.htmlContent;\n await this.configurePlan(this.cache.plan);\n return Promise.resolve();\n }\n\n /**\n * Puts buttons (tags) from cache according to passed element IDs (for filter if any)\n * @param elementIDs elements (tickets, equipments, etc) to be shown on plan\n */\n uploadTagsFromCache(sizeButton: number = 10) {\n // console.log(\"uploading tags from cache\");\n\n for (const cached of this.cache.htmlContent) {\n const button = document.createElement('button');\n this.styleButton(button, cached.tagIcon, sizeButton);\n button.id = cached.elementID;\n this.planDivContent.append(button);\n if (this.calibrationPlan.new) {\n const newCoeffX =\n this.coeffPlanX /\n (this.imgPlan.width / this.calibrationPlan.imgWidth);\n const newCoeffY =\n this.coeffPlanY /\n (this.imgPlan.height / this.calibrationPlan.imgHeight);\n button.style.top = `${cached.y / newCoeffY - 5}px`;\n button.style.left = `${cached.x / newCoeffX - 5}px`;\n } else {\n button.style.top = `${cached.y / this.coeffPlanY - 5}px`;\n button.style.left = `${cached.x / this.coeffPlanX - 5}px`;\n }\n\n this.addListenersToButton(button, cached.url);\n }\n }\n\n async getCalibratedPlanForZone(zone: Zone): Promise<Plan> {\n let plans = (await this.API.PlansByZone(zone.id)).items;\n let parentZone = null;\n if (plans.length === 0) {\n // try to find parent zone\n parentZone = await this.API.GetZone(zone.parentID);\n plans = (await this.API.PlansByZone(zone.parentID)).items;\n }\n const calibratedPlan = plans.find(\n (plan) => plan.calibration && plan.isCurrentForZone\n ) as Plan;\n if (calibratedPlan) {\n const signed = await getSignedFile(calibratedPlan.annexe);\n if (signed) {\n calibratedPlan.filepath = signed;\n }\n calibratedPlan.navigationIDs = parentZone\n ? parentZone.sweepIDs\n : zone.sweepIDs;\n }\n return calibratedPlan || null;\n }\n\n transformPosition3DForNewCalibration(position: {\n x: number;\n y: number;\n z: number;\n }): { x: number; y: number; coeffX: number; coeffY: number; } {\n const positionX =\n this.calibrationPlan.nameXAxis === 'x' ? position.x : position.z;\n const positionY =\n this.calibrationPlan.nameYAxis === 'x' ? position.x : position.z;\n let x =\n this.calibrationPlan.offsetX + positionX * this.calibrationPlan.scaleX;\n let y =\n this.calibrationPlan.offsetY + positionY * this.calibrationPlan.scaleY;\n const newCoeffX =\n this.coeffPlanX / (this.imgPlan.width / this.calibrationPlan.imgWidth);\n // console.log(\"newCoeffX\", newCoeffX);\n const newCoeffY =\n this.coeffPlanY / (this.imgPlan.height / this.calibrationPlan.imgHeight);\n x = (x - this.calibrationPlan.offsetXPlan) / this.calibrationPlan.scalePlan;\n\n y = (y - this.calibrationPlan.offsetYPlan) / this.calibrationPlan.scalePlan;\n // console.log(x, y);\n\n return { x, y, coeffX: newCoeffX, coeffY: newCoeffY };\n }\n}\n","/* eslint-disable class-methods-use-this */\n/* eslint-disable no-restricted-syntax */\nimport { Injectable } from \"@angular/core\";\nimport { Plan, Space, Visit, Zone } from \"../../types.service\";\nimport { getSignedFile, listFilesInFolder } from \"../s3.service\";\nimport { BaseUserService } from \"../user.service\";\nimport { CaptureService } from \"./capture.service\";\nimport { NavigationService } from \"./navigation.service\";\nimport { NodeService } from \"./node.service\";\nimport { PlanService } from \"./plan.service\";\nimport { ZoneService } from \"./zone.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class VisitService {\n choosenPlan: Plan;\n\n constructor(\n private captureService: CaptureService,\n private nodeService: NodeService,\n private navigationService: NavigationService,\n private zoneService: ZoneService,\n private planService: PlanService,\n private userService: BaseUserService,\n ) { }\n\n async getVisitsForSpaceForUser(spaceID: string): Promise<Visit[]> {\n const visits = [];\n const missionsForSpace = this.userService.currentMissions.filter(\n (mis) => mis.spaceID === spaceID,\n );\n const allAllowed =\n this.userService.userHasAccessToAllZonesInSpace(spaceID);\n const captures = await this.captureService.getCapturesBySpace(spaceID);\n const nodes = captures.flatMap((cap) => cap.nodes.items);\n let allAllowedNodes = nodes;\n let allowedNodeIDs = [];\n if (!allAllowed) {\n const allowedZones = missionsForSpace.map((mis) => mis.zone);\n for (const zone of allowedZones) {\n allowedNodeIDs = [...allowedNodeIDs, ...zone.nodeIDs];\n }\n allowedNodeIDs = [...new Set(allowedNodeIDs)]; // to make unique\n allAllowedNodes = allAllowedNodes.filter((node) =>\n allowedNodeIDs.includes(node.id),\n );\n }\n for (const node of allAllowedNodes) {\n // console.log(node)\n const folder = `visits/${node.model3D}/sweeps/`;\n const files = await listFilesInFolder(folder);\n const nmbImages = files.length;\n const capture = captures.find((cap) =>\n cap.nodes.items.includes(node),\n );\n const visit = {\n captureID: node.captureID,\n model3d: node.model3D,\n takenAt: capture.takenAt,\n spaceID,\n viewer: capture.viewer,\n surface: capture.surface,\n node,\n name: node.metadata,\n nmbImagesImported: nmbImages,\n } as Visit;\n visits.push(visit);\n }\n return visits;\n }\n\n async deleteVisit(visit: Visit, spaceID: string): Promise<Visit> {\n await this.nodeService.deleteNode(visit.node.id);\n const capture = await this.captureService.getCapture(visit.captureID);\n if (capture.nodes.items.length === 0) {\n await this.captureService.deleteCapture(visit.captureID);\n }\n const navigations = await this.navigationService.getNavigationsForNode(\n visit.node.id,\n );\n const zonesToDelete = await this.zoneService.getZonesForNodeForSpace(\n visit.node.id,\n spaceID,\n );\n await Promise.all(\n navigations.map(async (navig) => {\n await this.navigationService.deleteNavigation(navig.id);\n }),\n );\n if (zonesToDelete.length > 0) {\n await Promise.all(\n zonesToDelete.map(async (zone) => {\n const plans = await this.planService.getPlansForZone(\n zone.id,\n );\n if (plans.length > 0) {\n await Promise.all(\n plans.map(async (plan) => {\n await this.planService.deletePlan(plan);\n }),\n );\n }\n await this.zoneService.deleteZone(zone.id);\n }),\n );\n }\n // we cannot delete the images, because the folder of the visit can be used by another location\n // removeAllFilesFromFolderS3(`visits/${visit.model3d}/sweeps`); \n return visit;\n }\n\n async loadImagesForSpace(space: Space): Promise<any> {\n const list = [];\n return this.getVisitsForSpaceForUser(space.id).then(async (visits) => {\n if (visits) {\n space.visits = visits;\n await Promise.all(\n visits.map(async (visit) => {\n const folder = `visits/${visit.model3d}/sweeps/`;\n const files = await listFilesInFolder(folder);\n await Promise.all(\n files.map(async (file) => {\n const signed = await getSignedFile(file.key);\n const filename = file.key.split(\"/\")[3];\n list.push({\n path: signed,\n filename,\n visit,\n });\n }),\n );\n }),\n );\n return list;\n }\n return list;\n });\n }\n\n\n async getDefaultZoneForVisit(visit: Visit): Promise<Zone> {\n return this.zoneService\n .getZonesBySpace(visit.spaceID)\n .then(async (zones) => {\n const zonesWithVisitName = zones.filter(\n (zone) =>\n zone.name === visit.name &&\n zone.layer &&\n zone.layer.name === \"BUILDING\",\n );\n if (zonesWithVisitName.length === 1) {\n return zonesWithVisitName[0];\n }\n const parentZone = zones.find((zone) => !zone.parentID);\n return parentZone;\n });\n }\n}\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable class-methods-use-this */\nimport { Inject, Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { MattertagData } from \"../../mattertagData\";\nimport { Feature, Hashtag, FeatureType, CommentType, POI, PoiType, Event, LevelStatus } from \"../../types.service\";\nimport { FilterService } from \"../filter.service\";\nimport { NavigatorService } from \"../navigator.service\";\nimport { BaseUserService } from \"../user.service\";\nimport { BaseObjectService } from \"./base-object.service\";\nimport { CommentService } from \"./comment.service\";\nimport { HashtagService } from \"./hashtag.service\";\nimport { NavigationService } from \"./navigation.service\";\nimport { PoiService } from \"./poi.service\";\nimport {ZoneChangeService} from \"../zoneChange.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class FeatureService extends BaseObjectService {\n API: any; //AWS\n\n featureUpdated: Subject<{\n space: Feature[];\n zone: Feature[];\n }> = new Subject();\n\n currentFeatures: { space: Feature[]; zone: Feature[]; } = {\n space: [],\n zone: [],\n };\n\n featureTags: Subject<Feature[]> = new Subject();\n\n featureFiltered: Feature[] = [];\n\n updateDone: Subject<boolean> = new Subject();\n\n zoneIDFilter: string;\n\n currentSpaceID: string;\n\n updating: Subject<boolean> = new Subject();\n\n isUpdating = false;\n\n featureDomainFilter: string[] = null;\n\n deskDomainFilter: string[] = null;\n\n deskBookingsUpdated: Subject<Event[]> = new Subject();\n\n public currentHashtags: Hashtag[] = [];\n\n createObservable: Subject<Feature> = new Subject();\n\n deleteObservable: Subject<Feature> = new Subject();\n\n constructor(\n @Inject('currentAPIService') apiInjected: any,\n private navigatorService: NavigatorService,\n private filterService: FilterService,\n poiService: PoiService,\n private commentService: CommentService,\n private userService: BaseUserService,\n navigationService: NavigationService,\n private hashtagService: HashtagService,\n private zoneChangeService: ZoneChangeService,\n ) {\n super(poiService, navigationService);\n this.API = apiInjected;\n this.featureUpdated.subscribe((list) => {\n this.currentFeatures = list;\n });\n this.zoneChangeService.zoneChange.subscribe((zone) => {\n this.currentSpaceID = this.navigatorService.currentSpaceID;\n if (!this.currentSpaceID) {\n this.featureTags.next(null);\n this.featureUpdated.next({ space: [], zone: null });\n this.zoneIDFilter = null;\n } else if (zone.id !== this.zoneIDFilter && !this.userService.isMuseumUser(this.currentSpaceID)) {\n this.zoneIDFilter = zone.id;\n this.initFeatures();\n }\n });\n this.updateDone.subscribe(() => {\n if (this.currentSpaceID) {\n this.initFeatures();\n }\n });\n\n this.deleteObservable.subscribe((feature) => {\n if (this.currentSpaceID) {\n this.updateDueToDelete(feature);\n }\n });\n\n this.createObservable.subscribe((feature) => {\n if (this.currentSpaceID) {\n this.updateDueToCreate(feature);\n }\n });\n }\n\n /*\n * CRUD\n */\n async createFeature(feature: Feature): Promise<Feature> {\n return this.API.__proto__.CreateFeature(feature);\n }\n\n async deleteFeature(feature: Feature): Promise<Feature> {\n const deleted = await this.API.__proto__.DeleteFeature({ id: feature.id });\n if (deleted) {\n const poi = await this.poiService.getPoiByElementId(feature.id);\n if (poi) {\n await this.poiService.deletePoi(poi.id);\n }\n // delete comments\n for (const comment of deleted.comments.items) {\n await this.commentService.deleteComment(comment.id);\n }\n }\n return deleted;\n }\n\n async updateFeature(feature: any): Promise<Feature> {\n return this.API.__proto__.UpdateFeature(feature);\n }\n\n async getFeature(id: string): Promise<Feature> {\n const feature = (await this.API.__proto__.GetFeature(id)) as Feature;\n feature.events?.items.sort((a, b) => b.realStartDate - a.realStartDate);\n this.setCoverImage(feature);\n this.setImages(feature);\n this.setVideos(feature);\n this.setDocuments(feature);\n this.setAudio(feature);\n this.setExternalLinks(feature);\n this.setEmbeds(feature);\n this.isBookingPlace(feature);\n return feature;\n }\n\n\n async initFeatures() {\n if (!this.currentSpaceID) {\n return;\n }\n this.updating.next(true);\n this.isUpdating = true;\n const featureList = await this.getFeaturesForSpace(this.currentSpaceID);\n this.currentHashtags = await this.hashtagService.getHashtagsForSpace(\n this.currentSpaceID,\n );\n // console.log(this.currentHashtags);\n if (featureList.length > 0) {\n let filteredFeatures = [...featureList];\n let filteredPointInterest = filteredFeatures.filter(\n (feature) => feature.type !== FeatureType.DESK,\n );\n let filteredDesks = filteredFeatures.filter(\n (feature) => feature.type === FeatureType.DESK,\n );\n if (this.featureDomainFilter) {\n filteredPointInterest = filteredPointInterest.filter(\n (feature) =>\n this.featureDomainFilter.find(\n (domain) =>\n feature.domain && domain === feature.domain.id,\n ),\n );\n }\n if (this.deskDomainFilter) {\n filteredDesks = filteredDesks.filter((feature) =>\n this.deskDomainFilter.find(\n (domain) =>\n feature.domain && domain === feature.domain.id,\n ),\n );\n }\n filteredFeatures = [...filteredPointInterest, ...filteredDesks];\n this.currentFeatures.space = filteredFeatures.sort(\n (a, b) => a.index - b.index,\n );\n // emit on tags should be after setting current.space !!\n this.featureTags.next(filteredFeatures); // for tags update without zone filtering\n if (this.zoneIDFilter) {\n filteredFeatures =\n (await this.filterService.filterObjectsForZone(\n filteredFeatures,\n this.zoneIDFilter,\n )) as Feature[];\n }\n this.currentFeatures.zone = filteredFeatures.sort(\n (a, b) => a.index - b.index,\n );\n // console.log(this.currentFeatures);\n this.featureUpdated.next(this.currentFeatures); // for lateral menu\n } else {\n this.featureUpdated.next({ space: [], zone: [] }); // for lateral menu\n }\n this.updating.next(false);\n this.isUpdating = false;\n }\n\n async getFeaturesForSpace(\n spaceID: string,\n keepArchived: boolean = false,\n ): Promise<Feature[]> {\n const features = await this.API.__proto__.FeaturesBySpace(spaceID).then(\n (response) => response.items,\n );\n let featuresForUser =\n await this.filterService.filterFeaturesForCurrentUserInSpace(\n features,\n spaceID,\n );\n if (!keepArchived) {\n featuresForUser = featuresForUser.filter(\n (feature) => !this.isArchived(feature),\n );\n }\n for (const feature of featuresForUser) {\n this.setCoverImage(feature);\n this.isBookingPlace(feature);\n }\n return featuresForUser;\n }\n\n async getFeaturesBySpaceWithoutFiltering(spaceID: string): Promise<Feature[]> {\n let features = await this.API.__proto__.FeaturesBySpace(spaceID).then(\n (response) => response.items,\n );\n features = features.filter(\n (feature) => !this.isArchived(feature),\n );\n for (const feature of features) {\n this.setCoverImage(feature);\n this.isBookingPlace(feature);\n }\n return features;\n }\n\n isBookingPlace(feature: Feature) {\n feature.isBookingPlace = feature.type === FeatureType.DESK;\n }\n\n\n setCoverImage(feature: Feature) {\n const coverImage = feature.comments.items.find(\n (com) => com.isCoverImage,\n );\n if (coverImage) {\n feature.coverImageUrl = coverImage.annexe;\n return;\n }\n if (feature.comments.items.some((com) => com.type === CommentType.YOUTUBE)) {\n const youtubeComment = feature.comments.items.find((com) => com.type === CommentType.YOUTUBE);\n // we can use the preview image of youtube\n feature.coverImageUrl = `https://img.youtube.com/vi/${youtubeComment.externalLink}/0.jpg`;\n return;\n }\n if (\n feature.comments.items.some((com) => com.type === CommentType.IMAGE)\n ) {\n const imageComment = feature.comments.items.find(\n (com) => com.type === CommentType.IMAGE,\n );\n feature.coverImageUrl = imageComment.annexe;\n }\n\n }\n\n async updateFeatureLocation(\n feature: Feature,\n tagData: MattertagData,\n spaceID: string,\n ): Promise<POI> {\n const poiInput = {\n coordinate: tagData.getCoordinateString(),\n type: feature.isBookingPlace ? PoiType.DESK : PoiType.DATA,\n elementID: feature.id,\n metadata: tagData.getMetadataString(),\n matterportSweepID: tagData.getSweepID(),\n } as POI;\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\n return poi;\n }\n\n setImages(feature: Feature) {\n const imagesComments = feature.comments.items\n .filter((com) => com.type === CommentType.IMAGE)\n .sort((a, b) => a.index - b.index);\n const images = [];\n for (const image of imagesComments) {\n images.push({\n path: image.annexe,\n title: image.title,\n description: image.description,\n showInTag: image.shownInTag,\n });\n }\n feature.images = images;\n }\n\n setVideos(feature: Feature) {\n const videosComments = feature.comments.items\n .filter((com) => com.type === CommentType.VIDEO || com.type === CommentType.YOUTUBE)\n .sort((a, b) => a.index - b.index);\n const videos = [];\n for (const video of videosComments) {\n videos.push({\n path: video.type === CommentType.YOUTUBE ? 'https://www.youtube.com/embed/' + video.externalLink : video.annexe,\n title: video.title,\n description: video.description,\n type: video.type,\n });\n }\n feature.videos = videos;\n }\n\n setDocuments(feature: Feature) {\n const documentComments = feature.comments.items\n .filter((com) => com.type === CommentType.DOCUMENT)\n .sort((a, b) => a.index - b.index);\n const docs = [];\n for (const document of documentComments) {\n docs.push({\n path: document.annexe,\n title: document.title,\n description: document.description,\n });\n }\n feature.documents = docs;\n }\n\n setAudio(feature: Feature) {\n const audioComments = feature.comments.items\n .filter((com) => com.type === CommentType.AUDIO)\n .sort((a, b) => a.index - b.index);\n const audios = [];\n for (const audio of audioComments) {\n audios.push({\n path: audio.annexe,\n title: audio.title,\n description: audio.description,\n });\n }\n feature.audios = audios;\n }\n\n setExternalLinks(feature: Feature) {\n const linksComments = feature.comments.items\n .filter((com) => com.type === CommentType.URL)\n .sort((a, b) => a.index - b.index);\n const externalLinks = [];\n for (const link of linksComments) {\n externalLinks.push({\n path: link.externalLink,\n title: link.title,\n description: link.description,\n showInTag: link.shownInTag,\n });\n }\n feature.externalLinks = externalLinks;\n }\n\n setEmbeds(feature: Feature) {\n const embedComments = feature.comments.items\n .filter((com) => com.type === CommentType.EMBED)\n .sort((a, b) => a.index - b.index);\n const embeds = [];\n for (const embed of embedComments) {\n embeds.push({\n path: embed.externalLink,\n title: embed.title,\n description: embed.description,\n showInTag: embed.shownInTag,\n });\n }\n feature.embeds = embeds;\n }\n\n\n async getFirstFeatureForSpace(spaceID: string): Promise<Feature> {\n const features = await this.getFeaturesForSpace(spaceID);\n const first = features.find((feat) => feat.index === 1);\n return first;\n }\n\n async updateIconForAllFeaturesInSpace(\n tagIcon: string,\n spaceID: string,\n categoryID: string = null,\n ): Promise<{ features: Feature[]; pois: POI[]; }> {\n let features = await this.getFeaturesForSpace(spaceID);\n if (categoryID) {\n features = features.filter(\n (feature) => feature.domainID === categoryID,\n );\n }\n const pois = await this.updateIconForAllObjects(features, tagIcon);\n return { features, pois };\n }\n\n async getCreatedIndicesForFeaturesInSpace(\n spaceID: string,\n ): Promise<number[]> {\n let features = (await this.API.__proto__.FeaturesBySpace(spaceID)).items;\n features = features.filter((feat) => feat.index);\n return features.map((feat) => feat.index);\n }\n\n async getDesksForSpace(spaceID: string): Promise<Feature[]> {\n const features = await this.getFeaturesForSpace(spaceID);\n return features.filter((feat) => feat.isBookingPlace);\n }\n\n /** Return true if the current user has archived this feature */\n isArchived(feature: Feature): boolean {\n return feature.archivedForMissionID\n ? feature.archivedForMissionID.includes(\n this.userService.currentMission(feature.spaceID).id,\n )\n : false;\n }\n\n setArchived(feature: Feature, archived: boolean) {\n let archivedList = feature.archivedForMissionID\n ? feature.archivedForMissionID\n : [];\n const missionID = this.userService.currentMission(feature.spaceID).id;\n\n archivedList = archivedList.filter((m) => m !== missionID);\n\n if (archived) {\n archivedList.push(missionID);\n }\n\n return this.updateFeature({\n id: feature.id,\n archivedForMissionID: archivedList,\n });\n }\n\n\n async updateDueToCreate(feature: Feature) {\n this.currentFeatures.space.unshift(feature);\n this.currentFeatures.zone.unshift(feature);\n this.featureUpdated.next({\n space: this.currentFeatures.space,\n zone: this.currentFeatures.zone,\n }); // for lateral menu\n }\n\n async updateDueToDelete(deletedFeature: Feature) {\n const feature = this.currentFeatures.space.find(\n (_feature) => _feature.id === deletedFeature.id,\n );\n if (feature) {\n const index = this.currentFeatures.space.indexOf(feature);\n this.currentFeatures.space.splice(index, 1);\n }\n const zoneFeature = this.currentFeatures.zone.find(\n (_feature) => _feature.id === deletedFeature.id,\n );\n if (zoneFeature) {\n const index = this.currentFeatures.zone.indexOf(zoneFeature);\n this.currentFeatures.zone.splice(index, 1);\n }\n this.featureUpdated.next({\n space: this.currentFeatures.space,\n zone: this.currentFeatures.zone,\n }); // for lateral menu\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Subject, takeUntil } from 'rxjs';\nimport { waitUntil } from '../../helpers.service';\nimport { Measurement, PoiType, Comment, POI, Zone } from '../../types.service';\nimport { FilterService } from '../filter.service';\nimport { NavigatorService } from '../navigator.service';\nimport { deleteFromS3, uploadFileToS3 } from '../s3.service';\nimport { BaseUserService } from '../user.service';\nimport { CommentService } from './comment.service';\nimport { NavigationService } from './navigation.service';\nimport { PoiService } from './poi.service';\nimport {ZoneChangeService} from \"../zoneChange.service\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MeasurementService {\n path = 'measurements/';\n\n currentMeasurements: {\n space: Measurement[];\n zone: Measurement[];\n } = { space: [], zone: [] };\n\n measurementsTags: Subject<Comment[]> = new Subject();\n\n measurementsUpdated: Subject<{\n space: Measurement[];\n zone: Measurement[];\n }> = new Subject();\n\n currentSpaceID: string;\n\n zoneIDFilter: string;\n\n dateFilter: Date[];\n\n measurementFilter: boolean = false; // if false means no filtering, everything is allowed\n\n updateDone: Subject<boolean> = new Subject();\n\n updating: Subject<boolean> = new Subject();\n\n awsKinesisAnalytics: any; //AWS\n\n floorsPerSpace: Zone[] = null;\n\n selectedFloor: Zone = null;\n\n private destroy$ = new Subject();\n\n constructor(\n @Inject('currentAwsKinesisAnalyticsService')\n awsKinesisAnalyticsInjected: any,\n private navigatorService: NavigatorService,\n private filterService: FilterService,\n private commentService: CommentService,\n private poiService: PoiService,\n private userService: BaseUserService,\n private zoneChangeService: ZoneChangeService,\n private navigationService: NavigationService\n ) {\n this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;\n\n const isMuseumUser = this.userService.hasOnlyMuseumRole();\n if (!isMuseumUser) {\n this.zoneChangeService.zoneChange.subscribe((zone) => {\n this.currentSpaceID = this.navigatorService.currentSpaceID;\n if (!this.currentSpaceID) {\n this.measurementsTags.next(null);\n this.measurementsUpdated.next({ space: [], zone: null });\n this.measurementFilter = null;\n this.zoneIDFilter = null;\n } else if (zone.id !== this.zoneIDFilter) {\n this.zoneIDFilter = zone.id;\n // console.log(\"going to init measurements from zone\");\n this.initMeasurements();\n }\n });\n this.filterService.subscribeToDataFilterUpdate((dateRange) => {\n this.dateFilter = dateRange;\n this.initMeasurements();\n });\n this.dateFilter = this.filterService.currentDateFilter;\n this.updateDone.subscribe(() => this.initMeasurements());\n }\n\n this.zoneChangeService.floorHasChanged.subscribe((floor)=>{\n if (floor){\n this.selectedFloor = floor;\n }\n });\n }\n async initMeasurements() {\n if (this.currentSpaceID) {\n this.updating.next(true);\n let measurements = await this.getMeasurementsForSpaceForUser(\n this.currentSpaceID\n );\n if (measurements.length > 0) {\n if (this.dateFilter) {\n measurements = this.filterService.filterMeasurementsForDateRange(\n measurements,\n this.dateFilter\n );\n }\n if (this.measurementFilter) {\n measurements = [];\n }\n this.currentMeasurements.space = measurements;\n // emit on tags should be after setting current.space !!\n this.measurementsTags.next(measurements.map((m) => m.comment));\n\n if (this.zoneIDFilter) {\n const commentsZone = await this.filterService.filterObjectsForZone(\n measurements.map((measure) => measure.comment),\n this.zoneIDFilter\n );\n measurements = measurements.filter((measure) =>\n commentsZone.includes(measure.comment)\n );\n }\n measurements.sort((a, b) => {\n return (\n // @ts-ignore\n new Date(b.comment.createdAt) -\n // @ts-ignore\n new Date(a.comment.createdAt)\n );\n });\n this.currentMeasurements.zone = measurements;\n this.measurementsUpdated.next(this.currentMeasurements);\n } else {\n this.currentMeasurements.space = [];\n this.currentMeasurements.zone = [];\n this.measurementsUpdated.next({ space: [], zone: [] }); // for lateral menu\n }\n } else {\n this.measurementsTags.next(null);\n }\n this.updating.next(false);\n }\n\n async deleteMeasurement(measurement: Measurement): Promise<Comment> {\n const deletedComment = await this.commentService.deleteComment(\n measurement.comment.id\n );\n if (deletedComment) {\n await this.poiService.deletePoi(measurement.poi.id);\n const prefix = `${measurement.comment.id.slice(0, 8)}_`;\n const path = `${this.path + prefix}mesure.jpeg`;\n await deleteFromS3(path);\n }\n return deletedComment;\n }\n\n async createMeasurementForSpace(\n commentInput: Comment,\n dataMeasurements: { measure: any[]; sweep: string },\n screenshot: any,\n spaceID: string\n ): Promise<Measurement> {\n const lastMeasure = dataMeasurements.measure;\n const sweepID = dataMeasurements.sweep;\n const lastPoint = lastMeasure[lastMeasure.length - 1];\n let comment = await this.commentService.createComment(commentInput);\n const poiInput = {\n coordinate: JSON.stringify({\n x: lastPoint.x,\n y: lastPoint.y,\n z: lastPoint.z,\n }),\n type: PoiType.MEASURE,\n elementID: comment.id,\n matterportSweepID: sweepID,\n } as POI;\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\n const screen = await fetch(screenshot);\n const blob = await screen.blob();\n const file = new File([blob], 'mesure.jpeg', { type: 'image/jpeg' });\n const url = await uploadFileToS3(this.path, file, comment.id);\n if (url) {\n comment = await this.commentService.updateComment({\n id: comment.id,\n annexe: url,\n });\n }\n const measurement = {\n comment,\n poi,\n } as Measurement;\n\n this.awsKinesisAnalytics.getInstance().record(\n // @ts-ignore\n {\n data: {\n eventType: 'Object Creation',\n objectType: 'measurement',\n measurement: measurement,\n //zoneId: spaceID,\n user: this.userService.cu,\n locationId: this.currentSpaceID,\n timestamp: new Date(),\n zoneId: this.zoneIDFilter,\n floorId: this.selectedFloor?.id,\n },\n streamName: 'smarterplanKinesis-analytics',\n // partitionKey: \"\",\n },\n 'AWSKinesis'\n );\n\n return measurement;\n }\n\n async getModel3DForMeasurement(measurement: Measurement): Promise<string> {\n const poi = await this.poiService.getPoiByElementId(measurement.comment.id);\n if (poi && poi.matterportSweepID) {\n const navigations =\n await this.navigationService.getNavigationsForMatterportIDForSpace(\n poi.matterportSweepID,\n measurement.comment.spaceID\n );\n const [poiNavigation] = navigations;\n return poiNavigation.node.model3D;\n }\n return null;\n }\n\n async getMeasurementsForSpaceForUser(\n spaceID: string\n ): Promise<Measurement[]> {\n let comments = await this.commentService.getCommentsBySpaceID(spaceID);\n comments = await this.filterService.filterMeasurementsForCurrentUserInSpace(\n spaceID,\n comments\n );\n let measurements = [];\n if (comments.length > 0) {\n await Promise.all(\n comments.map(async (comment) => {\n const measurement =\n await this.commentService.readCommentAsMeasurement(comment.id);\n measurements.push(measurement);\n })\n );\n }\n return measurements;\n }\n\n unsubscribe() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport { Inject, Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { filterUniqueArrayByID, sortAlphabeticallyOnName } from \"../../helpers.service\";\nimport { Space, Layer, PropertyType } from \"../../types.service\";\nimport { getSignedImageUrlForSpace } from \"../s3.service\";\nimport { BaseUserService } from \"../user.service\";\nimport { CaptureService } from \"./capture.service\";\nimport { EquipmentService } from \"./equipment.service\";\nimport { FeatureService } from \"./feature.service\";\nimport { MeasurementService } from \"./measurement.service\";\nimport { MissionService } from \"./mission.service\";\nimport { PropertyService } from \"./property.service\";\nimport { TicketsService } from \"./ticket.service\";\nimport { VisitService } from \"./visit.service\";\n\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class SpaceService {\n\n locationsForUser: Space[] = [];\n\n locationUpdated: Subject<Space[]> = new Subject<Space[]>();\n\n API: any; //AWS\n\n constructor(\n private visitService: VisitService,\n private userService: BaseUserService,\n private propertyService: PropertyService,\n private captureService: CaptureService,\n private missionService: MissionService,\n private ticketService: TicketsService,\n private equipService: EquipmentService,\n private featureService: FeatureService,\n private measurementService: MeasurementService,\n @Inject('currentAPIService') apiInjected: any\n ) {\n this.API = apiInjected;\n }\n\n async listSpaces(): Promise<Space[]> {\n return this.API.__proto__.ListSpaces().then((spaces) =>\n spaces.items.filter((sp) => !sp.deletedAt),\n );\n }\n\n async getLocationsForCurrentUser(): Promise<Space[]> {\n const missions = this.userService.currentMissions;\n if (!missions) return [];\n let locations = [];\n await Promise.all(\n missions.map(async (mission) => {\n if (mission.space && !mission.space.deletedAt) {\n const space = await this.getSpace(mission.space.id);\n await this.signUrlForSpace(space);\n await this.visitService\n .getVisitsForSpaceForUser(space.id)\n .then((visits) => {\n if (visits) {\n space.visits = visits;\n }\n });\n locations.push(space);\n }\n }),\n );\n if (locations.length > 0) {\n locations = sortAlphabeticallyOnName(\n filterUniqueArrayByID(locations),\n );\n }\n this.locationsForUser = locations;\n this.locationUpdated.next(locations);\n return locations;\n }\n\n async signUrlForSpace(loc: Space) {\n if (loc.annexes) {\n getSignedImageUrlForSpace(loc).then((url) => {\n if (url) {\n loc.annexes = url;\n }\n });\n }\n }\n\n async getAllowedSpacesForOrg(\n orgID: string,\n userOrgID: string,\n ): Promise<Space[]> {\n if (\n userOrgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" ||\n orgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\"\n ) {\n return this.listSpaces();\n }\n return this.getSpacesForOrg(userOrgID);\n }\n\n async getSpacesForOrg(orgID: string): Promise<Space[]> {\n const properties =\n await this.propertyService.getPropertiesForOrganisation(orgID);\n if (properties.length > 0) {\n const spaces = [];\n for (const property of properties) {\n if (property.space && !property.space.deletedAt) {\n spaces.push(property.space);\n }\n }\n return spaces;\n }\n return null;\n }\n\n async createSpace(values: Space, layer?: Layer): Promise<any> {\n const loc = await this.API.__proto__.CreateSpace(values);\n const zoneInput = {\n name: values.name,\n spaceID: loc.id,\n surface: 0,\n layerID: layer ? layer.id : null,\n };\n await this.API.__proto__.CreateZone(zoneInput);\n return loc;\n }\n\n async updateSpace(input: any): Promise<Space> {\n return this.API.__proto__.UpdateSpace(input);\n }\n\n async getSpace(id: string): Promise<Space> {\n return this.API.__proto__.GetSpace(id);\n }\n\n async getModel3DForSpace(spaceID: string): Promise<string> {\n const captures = await this.captureService.getCapturesBySpace(spaceID);\n if (captures.length > 0 && captures[0].nodes.items.length > 0) {\n return captures[0].nodes.items[0].model3D;\n }\n return null;\n }\n\n async getAllowedModel3DForSpace(spaceID: string): Promise<string> {\n const visits = await this.visitService.getVisitsForSpaceForUser(\n spaceID,\n );\n if (visits.length > 0) {\n return visits[0].model3d;\n }\n return null;\n }\n\n async softDeleteSpace(spaceID: string) {\n await this.updateSpace({\n id: spaceID,\n deletedAt: Date.now(),\n });\n const missions = await this.missionService.getMissionsForSpace(spaceID);\n const properties = await this.propertyService.listPropertiesForSpace(spaceID);\n if (this.userService.isSPAdmin()) {\n // delete all properties\n await Promise.all(\n properties.map(async (property) => {\n await this.propertyService.deleteProperty(property.id);\n }),\n );\n // delete all missions\n await Promise.all(\n missions.map(async (mission) => {\n await this.missionService.update({\n id: mission.id,\n deletedAt: Date.now(),\n });\n }),\n );\n } else {\n // delete property for current Org\n const currentOrg = this.userService.currentOrganisation(spaceID);\n const propertyToDelete = properties.find(\n (property) => property.organisationID === currentOrg.id,\n );\n if (propertyToDelete) {\n await this.propertyService.deleteProperty(propertyToDelete.id);\n }\n const missionsToDelete = missions.filter(\n (mission) =>\n mission.organisationID === currentOrg.id ||\n mission.orderedOrganisationID === currentOrg.id,\n );\n await Promise.all(\n missionsToDelete.map(async (mission) => {\n await this.missionService.update({\n id: mission.id,\n deletedAt: Date.now(),\n });\n }),\n );\n }\n const tickets = await this.ticketService.getTicketsBySpace(spaceID);\n await Promise.all(\n tickets.map(async (ticket) => {\n await this.ticketService.deleteTicket(ticket);\n }),\n );\n const equips = await this.equipService.getEquipmentsForSpace(spaceID);\n await Promise.all(\n equips.map(async (eq) => {\n await this.equipService.deleteEquipment(eq);\n }),\n );\n const features = await this.featureService.getFeaturesForSpace(spaceID);\n await Promise.all(\n features.map(async (feature) => {\n await this.featureService.deleteFeature(feature);\n }),\n );\n\n // measurements\n const measures = await this.measurementService.getMeasurementsForSpaceForUser(spaceID);\n await Promise.all(\n measures.map(async (measure) => {\n await this.measurementService.deleteMeasurement(measure);\n }),\n );\n // remove from list\n this.locationsForUser = this.locationsForUser.filter((space) => space.id !== spaceID);\n this.locationUpdated.next(this.locationsForUser);\n }\n\n /**\n * If current user can archive a space (only if his organisation is owning the property (PropertyType.PROPERTY))\n * @param spaceID\n * @returns\n */\n async canArchiveSpace(spaceID: string): Promise<boolean> {\n const currentOrg = this.userService.currentOrganisation(spaceID);\n const orgProperties =\n await this.propertyService.getPropertiesForOrganisation(\n currentOrg.id,\n );\n const property = orgProperties.find(\n (property_) => property_.spaceID === spaceID,\n );\n if (property.type === PropertyType.PROPERTY) {\n return true;\n }\n return false;\n }\n}\n","import { Component, Inject, OnInit, ViewChild } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { waitUntil } from '../../../helpers.service';\nimport { SpaceService } from '../../../services/models/space.service';\nimport { VisitService } from '../../../services/models/visit.service';\nimport { ZoneService } from '../../../services/models/zone.service';\nimport { NavigatorService } from '../../../services/navigator.service';\nimport { ViewerService } from '../../../services/viewer.service';\nimport { Space, Visit, Zone } from '../../../types.service';\nimport { BaseUserService } from '../../../services/user.service';\nimport {ZoneChangeService} from \"../../../services/zoneChange.service\";\n\n@Component({\n selector: 'lib-navigation-bar',\n templateUrl: './navigation-bar.component.html',\n styleUrls: ['./navigation-bar.component.scss'],\n})\nexport class NavigationBarComponent implements OnInit {\n awsKinesisAnalytics: any; //AWS\n\n @ViewChild('navbarSelectMenu') navbarSelectMenu!: any;\n\n locations: Space[];\n\n currentLocationID: string;\n\n currentModel3d: string;\n\n selectedLocation: Space = null;\n\n selectedModel3d: string;\n\n selectedFloor: Zone = null;\n\n selectedZone: Zone = null;\n\n selectedChildZone: Zone = null;\n\n visitsPerSpace: Visit[] = null;\n\n floorsPerSpace: Zone[] = null;\n\n zonesPerSpace: Zone[] = null;\n\n zonesPerFloor: Zone[] = null;\n\n childrenZones: Zone[] = null;\n\n sweepToGo: string;\n\n floorToGo: Zone;\n\n destroy$ = new Subject();\n\n navEvents: Observable<NavigationEnd>;\n\n constructor(\n @Inject('currentAwsKinesisAnalyticsService')\n awsKinesisAnalyticsInjected: any,\n private router: Router,\n private spaceService: SpaceService,\n private userService: BaseUserService,\n private zoneService: ZoneService,\n private visitService: VisitService,\n private viewerService: ViewerService,\n private navigatorService: NavigatorService,\n private zoneChangeService: ZoneChangeService\n ) {\n this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;\n this.spaceService.locationUpdated\n .pipe(takeUntil(this.destroy$))\n .subscribe((locs) => {\n this.locations = locs;\n if (this.selectedLocation) {\n this.selectedLocation = this.findLocationByID(\n this.selectedLocation.id\n ); // Update Object (object address will change);\n }\n });\n this.viewerService.viewerIsOn\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (data: { spaceID: string; model3D: string; sweep: string | null }) => {\n // console.log('menu navigation received update', data);\n this.currentLocationID = data.spaceID;\n this.currentModel3d = data.model3D;\n if (!data.spaceID) {\n this.selectedLocation = null;\n localStorage.removeItem('locationId');\n this.sendUpdateLocationEvent();\n return;\n }\n if (\n (!this.selectedLocation ||\n this.selectedLocation.id !== data.spaceID) &&\n this.locations\n ) {\n this.selectedLocation = this.findLocationByID(data.spaceID);\n this.sendUpdateLocationEvent();\n }\n }\n );\n\n /**\n * We listen for Location change event\n */\n this.navigatorService.locationIDChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((id: string) => {\n this.clearData();\n this.currentLocationID = id;\n this.selectedLocation = this.findLocationByID(id);\n this.navigatorService.currentNavBarLocationID = id;\n this.onSelectedLocationChanged().catch((e) => console.log(e.message));\n });\n\n this.zoneChangeService.zonesForUserChange\n .pipe(takeUntil(this.destroy$))\n .subscribe(async (zones) => {\n if (zones) {\n await waitUntil(() => this.floorsPerSpace !== null);\n const floorZone = zones.find(\n (zone) => zone.layer && zone.layer.name === 'FLOOR'\n );\n if (floorZone) {\n this.selectedFloor = this.floorsPerSpace.find(\n (f) => f.id === floorZone.id\n );\n // Emit event to dispatch value of this.selectedFloor in all poi/ticket/equipment/measure services\n this.zoneChangeService.floorHasChanged.emit(this.selectedFloor);\n this.onFloorClick(false).catch((e) => console.log(e.message));\n }\n }\n });\n }\n\n async ngOnInit() {\n await this.initLocations();\n this.handleStartUrl();\n }\n\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n // Capture the \"id\" in localisation/:id routes\n handleStartUrl() {\n if (this.router.url.includes('localisation/')) {\n const paths = this.router.url.split('/'); // /dashboard/localisation/fc0aadb7-3c89-4349-ad1f-bfe9b44916c0\n // eslint-disable-next-line prefer-destructuring\n const locID = paths[3];\n if (this.currentLocationID !== locID) {\n this.clearData();\n this.currentLocationID = locID;\n this.selectedLocation = this.findLocationByID(locID);\n this.navigatorService.currentNavBarLocationID = locID;\n this.onSelectedLocationChanged().catch((e) => console.log(e.message));\n }\n }\n }\n\n async initLocations() {\n this.locations = this.spaceService.locationsForUser;\n if (this.locations.length === 0) {\n this.locations = await this.spaceService.getLocationsForCurrentUser();\n }\n if (this.currentLocationID && this.locations.length > 0) {\n this.selectedLocation = this.findLocationByID(this.currentLocationID);\n if (this.selectedLocation) {\n this.sendUpdateLocationEvent();\n }\n }\n }\n\n /**\n * Find a location with a given ID\n * @param id ID for the location\n * @returns The location or null if no location were found\n */\n findLocationByID(id: string): Space {\n const space = this.locations.find((loc) => loc.id === id);\n return space || null; /** Convert to null if undefined */\n }\n\n clearData(clearVisits: boolean = true) {\n this.floorsPerSpace = null;\n this.selectedFloor = null;\n this.zonesPerFloor = null;\n this.childrenZones = null;\n this.selectedModel3d = null;\n this.sweepToGo = null;\n this.floorToGo = null;\n this.selectedZone = null;\n this.selectedChildZone = null;\n if (clearVisits) {\n this.visitsPerSpace = null;\n this.zonesPerSpace = null;\n }\n localStorage.removeItem('locationId');\n localStorage.removeItem('floorId');\n localStorage.removeItem('zoneId');\n localStorage.removeItem('childZoneId');\n }\n\n /**\n * When the selectedLocation changes\n * Send a event to locationIDChange from NavigatorService\n * The event will be catch by this component and the filter bar will be update\n */\n sendUpdateLocationEvent() {\n const locationID = this.selectedLocation ? this.selectedLocation.id : null;\n this.navigatorService.locationIDChange.next(locationID);\n if (this.selectedLocation) {\n localStorage.setItem('locationId', this.selectedLocation.id);\n } else {\n localStorage.removeItem('locationId');\n }\n }\n\n async onSelectedLocationChanged() {\n if (!this.selectedLocation) {\n return;\n }\n try {\n this.visitsPerSpace = await this.visitService.getVisitsForSpaceForUser(\n this.selectedLocation.id\n );\n this.zonesPerSpace = await this.zoneService.getZonesBySpaceForUser(\n this.selectedLocation.id\n );\n if (this.visitsPerSpace.length === 1) {\n this.selectedModel3d = this.visitsPerSpace[0].model3d;\n this.floorsPerSpace = this.zonesPerSpace.filter(\n (zone) => zone.layer && zone.layer.name.includes('FLOOR')\n );\n // sort from highest floor to lowest\n this.floorsPerSpace.sort((a, b) => {\n if (a.metadata && b.metadata) {\n const metadataA = JSON.parse(a.metadata);\n const metadataB = JSON.parse(b.metadata);\n return (\n metadataB.matterportFloorSequence -\n metadataA.matterportFloorSequence\n );\n }\n return a.name.localeCompare(b.name);\n });\n const multiFloorZones = this.zonesPerSpace.filter(\n (zone) => zone.isMultipleFloorZone\n );\n // sort alphabetically\n multiFloorZones.sort((a, b) => a.name.localeCompare(b.name));\n // merge multiFloor and Floors\n this.floorsPerSpace = [...this.floorsPerSpace, ...multiFloorZones];\n if (this.floorsPerSpace.length === 1) {\n [this.selectedFloor] = this.floorsPerSpace;\n this.onFloorClick(false).catch((e) => console.log(e.message));\n }\n }\n } catch (error) {\n console.log('error onChosenLocation', error);\n }\n }\n\n onLocationClick() {\n this.clearData();\n this.sendUpdateLocationEvent();\n }\n\n async onFloorClick(emitEvent = true) {\n if (this.selectedFloor) {\n localStorage.setItem('floorId', this.selectedFloor.id);\n } else {\n localStorage.removeItem('floorId');\n }\n if (this.selectedFloor && this.selectedFloor.isMultipleFloorZone) {\n this.selectedZone = this.selectedFloor;\n this.onZoneClick().catch((e) => console.log(e.message));\n return;\n } else {\n this.onZoneClick().catch((e) => console.log(e.message));\n }\n this.sweepToGo = null;\n this.selectedZone = null;\n this.selectedChildZone = null;\n localStorage.removeItem('zoneId');\n localStorage.removeItem('childZoneId');\n if (this.selectedFloor === null) {\n this.navigatorService.navBarZoneIDChange.next(null);\n this.navigatorService.currentNavBarZoneID = null;\n return;\n }\n if (emitEvent) {\n this.navigatorService.navBarZoneIDChange.next(this.selectedFloor.id);\n }\n\n this.navigatorService.currentNavBarZoneID = this.selectedFloor.id;\n await waitUntil(\n () => this.zonesPerSpace !== null && this.zonesPerSpace !== undefined\n );\n this.zonesPerFloor = this.zonesPerSpace.filter(\n (zone) =>\n // zone.id === this.selectedFloor.id ||\n zone.parentID === this.selectedFloor.id\n );\n this.zonesPerFloor.sort((a, b) => {\n const Collator = new Intl.Collator(undefined, {\n numeric: true,\n sensitivity: 'accent',\n });\n return (\n Collator.compare(a.code_ref, b.code_ref) ||\n Collator.compare(a.name, b.name)\n );\n });\n }\n\n async onZoneClick() {\n this.selectedChildZone = null;\n localStorage.removeItem('childZoneId');\n if (this.selectedZone) {\n localStorage.setItem('zoneId', this.selectedZone.id);\n } else {\n localStorage.removeItem('zoneId');\n }\n if (this.selectedZone === null) {\n if (this.selectedFloor === null) {\n this.navigatorService.navBarZoneIDChange.next(null);\n this.navigatorService.currentNavBarZoneID = null;\n } else {\n this.navigatorService.navBarZoneIDChange.next(this.selectedFloor.id);\n this.navigatorService.currentNavBarZoneID = this.selectedFloor.id;\n }\n this.sendKinesisAnalyticsEventForZone(\n this.selectedZone?.id,\n this.selectedZone?.name\n ).catch((e) => console.log(e.message));\n return;\n }\n this.childrenZones = this.zonesPerSpace.filter(\n (zone) => zone.parentID === this.selectedZone.id\n );\n this.navigatorService.navBarZoneIDChange.next(this.selectedZone.id);\n this.navigatorService.currentNavBarZoneID = this.selectedZone.id;\n this.sendKinesisAnalyticsEventForZone(\n this.selectedZone?.id,\n this.selectedZone?.name\n ).catch((e) => console.log(e.message));\n }\n\n onChildZoneClick() {\n if (this.selectedChildZone) {\n localStorage.setItem('childZoneId', this.selectedChildZone?.id);\n } else {\n localStorage.removeItem('childZoneId');\n }\n }\n\n async sendKinesisAnalyticsEventForZone(\n zoneId: string,\n zoneName: string\n ): Promise<void> {\n this.awsKinesisAnalytics.getInstance().record(\n // @ts-ignore\n {\n data: {\n eventType: 'Zone Change',\n zoneId: zoneId,\n zoneName: zoneName,\n locationId: this.selectedLocation?.id,\n locationName: this.selectedLocation?.name,\n user: this.userService?.cu,\n timestamp: new Date(),\n floorId: this.selectedFloor?.id,\n childZoneId: this.selectedChildZone?.id,\n },\n streamName: 'smarterplanKinesis-analytics',\n // partitionKey: \"\",\n },\n 'AWSKinesis'\n );\n }\n\n async onVisitClick(event) {\n this.clearData(false);\n const index = event.target.value;\n const visit = this.visitsPerSpace[index];\n this.selectedModel3d = visit.model3d;\n const parentZoneForVisit = await this.visitService.getDefaultZoneForVisit(\n visit\n );\n this.floorsPerSpace = this.zonesPerSpace.filter(\n (zone) =>\n zone.layer &&\n zone.layer.name.includes('FLOOR') &&\n zone.parentID === parentZoneForVisit.id\n );\n }\n\n async goTo() {\n if (this.selectedZone && !this.selectedZone.virtual) {\n this.sweepToGo = this.selectedZone.startSweepID\n ? this.selectedZone.startSweepID\n : this.selectedZone.sweepIDs[0];\n }\n if (this.selectedFloor && !this.selectedZone) {\n this.floorToGo = this.selectedFloor;\n }\n if (this.isWithinSameVisit()) {\n this.goToSweepOrFloor();\n } else {\n if (this.sweepToGo) {\n this.viewerService.setSweepToMove(this.sweepToGo);\n }\n if (this.floorToGo && this.floorsPerSpace.length !== 1) {\n this.navigatorService.floorToGo = this.floorToGo;\n }\n this.router\n .navigate(['visit', this.selectedLocation.id], {\n queryParams: { model3D: this.selectedModel3d },\n })\n .catch((e) => console.log(e.message));\n }\n }\n\n isWithinSameVisit(): boolean {\n return (\n this.currentLocationID === this.selectedLocation.id &&\n this.selectedModel3d === this.currentModel3d\n );\n }\n\n goToSweepOrFloor() {\n if (this.sweepToGo) {\n this.navigatorService.goToSweepWithRotation(this.sweepToGo);\n }\n if (this.floorToGo) {\n this.navigatorService.goToFloor(this.floorToGo);\n }\n }\n\n // hasHistory(): boolean {\n // return this.navigatorService.modelHasHistory(this.selectedModel3d);\n // }\n\n canGo(): boolean {\n const viewerIsReady =\n this.viewerService.isLoaded && this.viewerService.showingViewer;\n const noViewer = !this.viewerService.showingViewer;\n return viewerIsReady || noViewer;\n }\n\n showLocation(): string {\n if (\n window.innerWidth < 750 &&\n this.navbarSelectMenu &&\n this.navbarSelectMenu.nativeElement.className.search('show') === -1 &&\n this.selectedLocation\n ) {\n return this.selectedLocation.name;\n }\n return '';\n }\n}\n","<nav class=\"navbar navbar-expand-md navbar-dark navbar-inverse second-nav\">\n <div class=\"d-flex col-12\">\n <div #navbarSelectMenu class=\"collapse navbar-collapse\" id=\"nav-item-container-blue\">\n <div class=\"d-flex flex-column flex-md-row \">\n <select class=\"form-control flex-fill location select-menu\" [(ngModel)]=\"selectedLocation\"\n (ngModelChange)=\"onLocationClick()\">\n <option [ngValue]=\"null\" selected>{{ 'Location' | translate }}</option>\n <option *ngFor=\"let loc of locations; index as index\" [ngValue]=\"loc\"> {{ loc.name }}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" (change)=\"onVisitClick($event)\"\n *ngIf=\"visitsPerSpace && visitsPerSpace.length > 1\">\n <option value=\"default\" selected disabled hidden>{{'Visit' | translate}}</option>\n <option *ngFor=\"let visit of visitsPerSpace; index as index\" value=\"{{index}}\">{{ visit.name}}\n </option>\n </select>\n <select class=\"form-control flex-fill floor select-menu\" [(ngModel)]=\"selectedFloor\"\n (ngModelChange)=\"onFloorClick()\">\n <option [ngValue]=\"null\" selected>{{'Floor' | translate}}</option>\n <option *ngFor=\"let floor of floorsPerSpace\" [ngValue]=\"floor\">{{ floor.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu zone\" [(ngModel)]=\"selectedZone\"\n (ngModelChange)=\"onZoneClick()\">\n <option [ngValue]=\"null\" selected>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of zonesPerFloor\" [ngValue]=\"zone\"><span\n *ngIf=\"zone.code_ref\">{{zone.code_ref}}_</span>{{zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" [(ngModel)]=\"selectedChildZone\"\n *ngIf=\"childrenZones && childrenZones.length>0\" (ngModelChange)=\"onChildZoneClick()\">\n <option [ngValue]=\"null\" selected disabled>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of childrenZones\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <!-- <select class=\"form-control flex-fill\">\n <option i18n>{{'Favorites' | translate}}</option>\n </select> -->\n </div>\n <div class=\"row\" style=\"margin-left: 0;\">\n <div class=\"outer_circle\">\n <button id='btn-icon' [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\"\n (click)=\"goTo()\"></button>\n </div>\n <button (click)=\"goTo()\" class=\"btn rounded-pill btn-3d\"\n [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\">{{'3D visit' | translate}}</button>\n </div>\n </div>\n\n <h4 style=\"line-height: 29px;margin: 0;\" *ngIf=\"showLocation()\">\n {{ showLocation() }}\n </h4>\n </div>\n</nav>","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { LocaleService } from '../../services/locale.service';\nimport { NavigatorService } from '../../services/navigator.service';\nimport { SupportService } from '../../services/support.service';\nimport { BaseUserService } from '../../services/user.service';\nimport { ProfileEntity, Mission } from '../../types.service';\nimport { SupportModalComponent } from '../support-modal/support-modal.component';\n\n@Component({\n selector: 'lib-menu-bar',\n templateUrl: './menu-bar.component.html',\n styleUrls: ['./menu-bar.component.scss']\n})\nexport class MenuBarComponent implements OnInit {\n\n user: ProfileEntity;\n\n mission: Mission;\n\n isVisitor = true;\n\n isVisible = false;\n\n isManager: boolean;\n\n userSubscription: Subscription;\n\n navSubscription: Subscription;\n\n constructor(\n private router: Router,\n public localeService: LocaleService,\n private userService: BaseUserService,\n private navigatorService: NavigatorService,\n private supportService: SupportService,\n ) {\n this.userSubscription = this.userService.isChanged.subscribe(\n (isChanged) => {\n if (isChanged) {\n this.update();\n }\n },\n );\n this.navSubscription = this.navigatorService.isVisibleChanged.subscribe(\n (data) => {\n this.isVisible = data;\n },\n );\n }\n\n ngOnInit() {\n this.update();\n }\n\n ngAfterViewInit() {\n const input = document.querySelector(\n \"#mainSearchBar\",\n ) as HTMLInputElement;\n if (input) {\n input.addEventListener(\"keydown\", ({ key }) => {\n if (key === \"Enter\") {\n this.onSubmit();\n }\n });\n }\n }\n\n ngOnDestroy() {\n if (this.userSubscription) {\n this.userSubscription.unsubscribe();\n }\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n }\n }\n\n async signOut() {\n await this.userService.logoutCurrentAndSignOutAuth();\n this.router.navigate([\"auth\"]);\n }\n\n async update() {\n this.user = this.userService.cu;\n this.mission = this.userService.currentMissions[0];\n this.isManager = this.userService.hasManagerRoleInAnyMission();\n this.isVisitor = this.userService.isVisitor();\n if (!this.isVisitor) {\n this.isVisible = true;\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n onSubmit() {\n const input = document.querySelector(\n \"#mainSearchBar\",\n ) as HTMLInputElement;\n const searchValue = input.value.toLowerCase();\n if (searchValue !== \"\") {\n const baseUrl = location.origin;\n window.open(\n `${baseUrl}/dashboard/search?term=${searchValue}`,\n \"_blank\",\n );\n }\n }\n\n onToggleVisible() {\n this.isVisible = !this.isVisible;\n }\n\n openSupportForm() {\n this.supportService.openSupportForm(SupportModalComponent);\n }\n\n}\n","<div id=\"menu-bar\">\n <div *ngIf=\"!isVisitor\">\n <nav class=\"navbar navbar-expand-md navbar-light p-0\">\n <div class=\"container-fluid\" *ngIf=\"isVisible\">\n <div class=\"navbar-brand\" [routerLink]=\"['/dashboard']\">\n <img alt=\"\" src=\"../assets/images/logos/logo-rvb-straight.png\">\n </div>\n <!-- <button class=\"navbar-toggler\" data-bs-target=\".navbar-collapse\" data-bs-toggle=\"collapse\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button> -->\n <div class=\"collapse navbar-collapse\">\n <form class=\"form-inline ms-3\">\n <input class=\"form-control search-button\" placeholder=\"keyword\" id=\"mainSearchBar\" type=\"text\">\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSubmit()\">{{'Search' |\n translate}}</button>\n <lib-range-date-picker cacheName=\"mainDate\"></lib-range-date-picker>\n </form>\n <div class=\"ms-auto nav-item dropdown\">\n <div class=\"profile_pic dropdown-toggle\" data-testid=\"dropdown-menu-button\" data-bs-toggle=\"dropdown\">\n <lib-avatar></lib-avatar>\n </div>\n <div class=\"dropdown-menu dropdown-menu-right\">\n <p *ngIf=\"user && mission\" class=\"p-2\">\n <span class=\"username\">{{ user.displayName }}</span><br />\n <span class=\"user-role\">{{ mission.role }}</span><br />\n <span class=\"org\">{{ mission.organisation ? mission.organisation.name : \"No organisation\" |\n translate}}</span>\n </p>\n <div class=\"dropdown-divider\"></div>\n <!-- <a class=\"dropdown-item\" routerLink=\"/debug\" *ngIf=\"isManager\">Debug</a> -->\n <a class=\"dropdown-item\" (click)=\"localeService.modal()\">{{'Language' | translate}}</a>\n <a class=\"dropdown-item\" routerLink=\"/dashboard\">{{'Data management' | translate}}</a>\n <a class=\"dropdown-item\" data-testid=\"user-management-btn\" routerLink=\"/admin\" *ngIf=\"isManager\">\n {{'Users management' | translate}}</a>\n <a class=\"dropdown-item\" routerLink=\"/profile\">\n {{'Profile' | translate}}</a>\n <div class=\"dropdown-divider\"></div>\n <button class=\"dropdown-item\" (click)=\"openSupportForm()\">{{\"Help\" | translate}}</button>\n <button data-testid=\"logout-auth-btn\" class=\"dropdown-item\" (click)=\"signOut()\">{{\"Logout\" |\n translate}}</button>\n </div>\n </div>\n </div>\n </div>\n </nav>\n <lib-navigation-bar *ngIf=\"isVisible\"></lib-navigation-bar>\n </div>\n <div *ngIf=\"isVisitor && isVisible\">\n <div class=\"visitor-div\">\n <div class=\"logo-container\" data-testid=\"dropdown-menu-button\">\n <img class=\"img-logo\" alt=\"SmarterPlanLogo\" src=\"../assets/images/logos/logo-reserve.png\">\n </div>\n <div class=\"avatar-container-menu\">\n <div class=\"profile_pic dropdown-toggle\" data-bs-toggle=\"dropdown\">\n <lib-avatar></lib-avatar>\n </div>\n <div class=\"dropdown-menu dropdown-menu-right\">\n <button class=\"dropdown-item\" (click)=\"localeService.modal()\">{{'Language' | translate}}</button>\n <button class=\"dropdown-item\" (click)=\"openSupportForm()\">{{\"Help\" | translate}}</button>\n <button data-testid=\"logout-auth-btn\" class=\"dropdown-item\" (click)=\"signOut()\">{{\"Logout\" |\n translate}}</button>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CsvExportComponent } from './components/csv-export/csv-export.component';\nimport { SearchBarComponent } from './components/search-bar/search-bar.component';\nimport { Config } from './config';\nimport { DurationToStringPipe } from './pipes/duration-to-string.pipe';\nimport { HashtagFromIdPipe } from './pipes/hashtag-from-id.pipe';\nimport { SafeUrlPipe } from './pipes/safe-url.pipe';\nimport { TimeDateToLocalStringPipe } from './pipes/time-date-to-local-string.pipe';\nimport { ModalSwitchVisitComponent } from './components/modal-switch-visit/modal-switch-visit.component';\nimport { UsernameFromIdPipe } from './pipes/username-from-id.pipe';\nimport { MenuBarComponent } from './components/menu-bar/menu-bar.component';\nimport { AvatarComponent } from './components/menu-bar/avatar/avatar.component';\nimport { NavigationBarComponent } from './components/menu-bar/navigation-bar/navigation-bar.component';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { RangeDatePickerComponent } from './components/menu-bar/range-date-picker/range-date-picker.component';\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\nimport { LoaderComponent } from './components/loader/loader.component';\nimport { SupportModalComponent } from './components/support-modal/support-modal.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FormatDateNumberToDigitsPipe } from './pipes/format-date-number-to-digits.pipe';\n@NgModule({\n declarations: [\n TimeDateToLocalStringPipe,\n SafeUrlPipe,\n HashtagFromIdPipe,\n DurationToStringPipe,\n CsvExportComponent,\n SearchBarComponent,\n UsernameFromIdPipe,\n ModalSwitchVisitComponent,\n MenuBarComponent,\n AvatarComponent,\n NavigationBarComponent,\n RangeDatePickerComponent,\n LoaderComponent,\n SupportModalComponent,\n FormatDateNumberToDigitsPipe\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n RouterModule,\n NgbModule,\n TranslateModule.forChild({\n extend: true\n })\n ],\n exports: [\n CsvExportComponent,\n SearchBarComponent,\n TimeDateToLocalStringPipe,\n SafeUrlPipe,\n HashtagFromIdPipe,\n DurationToStringPipe,\n UsernameFromIdPipe,\n MenuBarComponent,\n LoaderComponent,\n SupportModalComponent,\n AvatarComponent,\n ]\n})\nexport class NgxSmarterplanCoreModule {\n public static forRoot(config: Config): ModuleWithProviders<NgxSmarterplanCoreModule> {\n return {\n ngModule: NgxSmarterplanCoreModule,\n providers: [\n {\n provide: 'config',\n useValue: config\n }\n ]\n };\n }\n}\n","/* eslint-disable no-case-declarations */\n/* eslint-disable class-methods-use-this */\nimport { Injectable } from '@angular/core';\nimport {\n Comment,\n DbObjectType,\n Equipment,\n Feature,\n POI,\n PoiType,\n TagAction,\n Ticket,\n CommentType,\n} from '../types.service';\n\n@Injectable({\n providedIn: 'root', \n})\n\nexport class BaseTagService {\n constructor() {}\n\n async getHtmlToInject(\n tagType: PoiType,\n object: DbObjectType\n ): Promise<string> {\n throw new Error(`getHtmlToInject is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n getUrlForSeeDetails(object: DbObjectType, tagType: PoiType): string {\n switch (tagType) {\n case PoiType.TICKET: {\n return `visit/${object.spaceID}/detail/${object.id}`;\n }\n case PoiType.EQUIPMENT: {\n return `visit/${object.spaceID}/equip/${object.id}`;\n }\n case PoiType.MEASURE: {\n return `visit/${object.spaceID}/measurement/${object.id}`;\n }\n case PoiType.DATA: {\n return `visit/${object.spaceID}/feature/${object.id}`;\n }\n case PoiType.DESK: {\n return `visit/${object.spaceID}/add_booking/${object.id}`;\n }\n default:\n return '';\n }\n }\n\n async prepareEquipmentHtml(equip: Equipment): Promise<string> {\n throw new Error(`prepareEquipmentHtml is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n async prepareTicketHtml(ticket: Ticket): Promise<string> {\n throw new Error(`prepareTicketHtml is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n async prepareFeatureHtml(feature: Feature): Promise<string> {\n throw new Error(`prepareFeatureHtml is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n async prepareMeasurementHtml(measure: Comment): Promise<string> {\n throw new Error(`prepareMeasurementHtml is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n async prepareDeskHtml(feature: Feature): Promise<string> {\n throw new Error(`prepareDeskHtml is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n async prepareIndicatorHtml(feature: Feature): Promise<string> {\n throw new Error(`prepareDeskHtml is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n async getSignedTagIconSource(tagIconSrc: string): Promise<string | null> {\n throw new Error(\n `getSignedTagIconSource is not implemented in the base class.`\n );\n }\n\n getIconTagImageForFeature(feature: DbObjectType, poi: POI): string {\n // const tagIcon = JSON.parse(poi.tagIcon);\n // return tagIcon.src;\n throw new Error(`getIconTagImageForFeature is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n getScriptForTag(object, tagType: PoiType): string {\n throw new Error(`getScriptForTag is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n getAnnexeForCommentTypeInFeature(\n feature: Feature,\n commentType: CommentType\n ): string {\n throw new Error(`getAnnexeForCommentTypeInFeature is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n getBillboardMediaToEmbed(object: DbObjectType): {\n comment: Comment;\n tagDescription: string;\n } {\n throw new Error(`getBillboardMediaToEmbed is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n onActionDetailClick(url: string) {\n throw new Error(`onActionDetailClick is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n onActionAudioClick(audioCommentID: string) {\n throw new Error(`onActionDetailClick is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n onActionVideoClick(url: string) {\n throw new Error(`onActionVideoClick is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n onActionImageClick(imageCommentID: string) {\n throw new Error(`onActionImageClick is not implemented in the base class.\n Please override this method in your extended class.`);\n }\n\n onActionDocClick(url: string) {\n throw new Error(`onActionDocClick is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n\n onActionYoutubeClick(url: string) {\n throw new Error(`onActionYoutubeClick is not implemented in the base class. \n Please override this method in your extended class.`);\n }\n}\n","import { Injectable } from \"@angular/core\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class BaseLateralTabService {\n activeTab = \"tickets\";\n\n firstLoad = true;\n\n constructor() { }\n\n storeTabHistory(tab: string) {\n this.activeTab = tab;\n }\n\n getTabHistory(): string {\n // throw new Error(\"Method 'getTabHistory' not implemented.\");\n return this.activeTab;\n }\n}\n","import { Injectable, Inject } from \"@angular/core\";\nimport { Layer } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class LayerService {\n API: any; //AWS\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async getLayerForOrganisation(orgID: string): Promise<Layer[]> {\n return this.API.__proto__.LayersByOrganisation(orgID).then((list) => list.items);\n }\n\n async createLayerForOrganisation(\n layerName: string,\n orgID: string,\n ): Promise<Layer> {\n return this.API.__proto__.CreateLayer({\n name: layerName.toUpperCase(),\n organisationID: orgID,\n });\n }\n\n async getLayerByNameForOrganisation(layerName: string, orgID: string) {\n return this.API.__proto__.LayersByOrganisation(orgID, null, {\n name: { eq: layerName.toUpperCase() },\n }).then((list) => list.items);\n }\n}","import { Injectable } from '@angular/core';\nimport { catchError, Subject } from 'rxjs';\nimport { removeNullKeysFromObject, wait, waitUntil } from '../helpers.service';\nimport {\n LevelStatus,\n Layer,\n Node,\n Zone,\n Navigation,\n Plan,\n} from '../types.service';\nimport { LayerService } from './models/layer.service';\nimport { NavigationService } from './models/navigation.service';\nimport { PlanService } from './models/plan.service';\nimport { ZoneService } from './models/zone.service';\nimport {\n uploadJsonToS3,\n uploadBase64Image,\n removeAllFilesFromFolderS3,\n} from './s3.service';\nimport { BaseUserService } from './user.service';\nimport { ViewerService } from './viewer.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MatterportImportService {\n private currentFrame;\n\n public sdk: any;\n\n private sweeps: Object;\n\n public floors: Object;\n\n private currentFloor;\n\n private _modelID: string;\n\n private _spaceID: string;\n\n public get spaceID(): string {\n return this._spaceID;\n }\n\n public set spaceID(value: string) {\n this._spaceID = value;\n }\n\n public get modelID(): string {\n return this._modelID;\n }\n\n public set modelID(value: string) {\n this._modelID = value;\n }\n\n public stop = false;\n\n public importingImages: Subject<boolean> = new Subject<boolean>();\n\n public sweepProcessedCount: Subject<number> = new Subject<number>();\n\n public totalSweepsCount: Subject<number> = new Subject<number>();\n\n private MAX_SCANS_RELOAD = 100;\n\n constructor(\n private navigationService: NavigationService,\n private zoneService: ZoneService,\n private viewerService: ViewerService,\n private layerService: LayerService,\n private userService: BaseUserService,\n private planService: PlanService\n ) {}\n\n async initSdkForModel(modelID: string): Promise<boolean> {\n this.stop = false;\n\n // Load SDK\n console.log('Loading Matterport SDK');\n this.modelID = modelID;\n const iframe = document.createElement('iframe');\n if (!iframe) {\n throw new Error('Cannot create iframe');\n }\n this.viewerService.setTourUrl(modelID);\n const url = this.viewerService.getTourUrl();\n iframe.setAttribute('src', url);\n iframe.allow = 'xr-spatial-tracking';\n iframe.height = '100%';\n iframe.width = '100%';\n iframe.id = 'viewer-module';\n const element = document.querySelector('#viewer-frame');\n element.append(iframe);\n this.currentFrame = iframe;\n try {\n // @ts-ignore\n this.sdk = await window.MP_SDK.connect(\n iframe,\n 'qn9wsasuy5h2fzrbrn1nzr0id',\n '3.11'\n );\n // Subscribe to Floor data\n this.sdk.Floor.data.subscribe({\n onCollectionUpdated: function upd(collection: any) {\n // console.log(\"Floors\", collection);\n this.floors = collection;\n }.bind(this),\n });\n // Subscribe to current Floor\n this.sdk.Floor.current.subscribe(\n function upd(currentFloor) {\n this.currentFloor = currentFloor;\n }.bind(this)\n );\n\n // Subscribe to Sweep data\n this.sdk.Sweep.data.subscribe({\n onCollectionUpdated: function upd(collection) {\n console.log('the entire up-to-date collection', collection);\n this.sweeps = collection;\n }.bind(this),\n });\n // remove labels\n await this.sdk.Settings.update('labels', false);\n let timeoutExpired = false;\n // start timeout\n setTimeout(() => (timeoutExpired = true), 7000);\n await waitUntil(\n () =>\n (this.sweeps !== undefined && this.floors !== undefined) ||\n timeoutExpired === true\n );\n if (timeoutExpired) {\n // we are likely in matterport error case (that we cannot catch!)\n console.log('timeout intitialising Matterport');\n throw new Error('error init Matterport');\n }\n console.log('init done');\n return true;\n } catch (e) {\n console.error(e);\n throw new Error('error init Matterport');\n }\n }\n\n async importData(\n spaceID: string,\n surface: number,\n reloading: boolean = false,\n node: Node = null\n ): Promise<boolean> {\n if (!this.sweeps) {\n return Promise.reject(new Error('no sweeps initialized'));\n }\n let appIsLoaded = false;\n this.sdk.App.state.subscribe(function (appState) {\n // app state has changed\n console.log('The current phase: ', appState.phase);\n if (appState.phase === 'appphase.playing') {\n console.log('The app is playing');\n appIsLoaded = true;\n }\n });\n await waitUntil(() => appIsLoaded === true);\n if (reloading) {\n // perform only 360 import since we are reloading\n await this.import360images();\n return Promise.resolve(true);\n }\n this.cleanLocalStorage(); // we are importing new visit\n this.spaceID = spaceID;\n let floorZones: Zone[] = [];\n const zones = await this.zoneService.getZonesBySpace(spaceID);\n const mainZone = zones.find((z) => !z.parentID);\n if (!mainZone) {\n return Promise.reject(new Error('missing data (no main Building Zone)'));\n }\n console.log('importing data from matterport');\n // save sweeps data as json\n const json = JSON.stringify(Object.values(this.sweeps));\n await uploadJsonToS3(\n `visits/${this.modelID}/inventory/`,\n json,\n 'data.json'\n );\n // check layer of building type\n const layerBuilding = await this.getLayerByName('BUILDING');\n const createdDefaultZone = await this.createZone(\n node.metadata,\n layerBuilding.id,\n surface,\n mainZone.id,\n Object.keys(this.sweeps),\n node\n );\n if (!createdDefaultZone) {\n return Promise.resolve(false);\n }\n if (this.floors) {\n floorZones = await this.importFloorData(createdDefaultZone.id, node);\n }\n // console.log(floorZones);\n await Promise.all(\n Object.keys(this.sweeps).map(async (key) => {\n const sweepInfo = this.sweeps[key];\n const navigationInput = {\n matterportSweepID: sweepInfo.uuid,\n position: JSON.stringify(sweepInfo.position),\n rotation: JSON.stringify(sweepInfo.rotation),\n level: LevelStatus.LOW,\n nodeID: node.id,\n spaceID,\n } as Navigation;\n const nav = await this.navigationService.createNavigation(\n navigationInput\n );\n if (!nav) {\n console.log('could create navigation', navigationInput.id);\n }\n })\n );\n await this.import360images();\n return Promise.resolve(true);\n }\n\n async createZone(\n name: string,\n layerID: string,\n surface: number = null,\n parentID: string = null,\n sweeps: string[] = [],\n node: Node = null,\n metadata: string = null\n ): Promise<Zone> {\n const zoneInput = {\n name,\n spaceID: this.spaceID,\n layerID,\n sweepIDs: sweeps,\n nodeIDs: node ? [node.id] : null,\n } as Zone;\n removeNullKeysFromObject(zoneInput);\n if (surface) {\n zoneInput.surface = surface;\n }\n if (parentID) {\n zoneInput.parentID = parentID;\n }\n if (metadata) {\n zoneInput.metadata = metadata;\n }\n const newLocal = await this.zoneService.create(zoneInput);\n return newLocal;\n }\n\n async import360images(): Promise<boolean> {\n console.log('Importing 360 images');\n this.importingImages.next(true);\n return new Promise(async (resolve) => {\n const scans = Object.values(this.sweeps);\n let maxScan;\n let indexScan;\n const nmbScans = Object.keys(scans).length;\n console.log('Total number of scan points :', nmbScans);\n this.totalSweepsCount.next(nmbScans);\n // check if we started to load images already\n if (localStorage.getItem('indexScanLoad')) {\n console.log(\n 'retaking import from scan',\n localStorage.getItem('indexScanLoad')\n );\n indexScan = +localStorage.getItem('indexScanLoad');\n nmbScans < indexScan + this.MAX_SCANS_RELOAD\n ? (maxScan = nmbScans)\n : (maxScan = indexScan + this.MAX_SCANS_RELOAD);\n } else {\n indexScan = 0;\n nmbScans < this.MAX_SCANS_RELOAD\n ? (maxScan = nmbScans)\n : (maxScan = this.MAX_SCANS_RELOAD);\n maxScan;\n }\n\n for (let index = indexScan; index < maxScan; index += 1) {\n if (!this.stop) {\n await this.sdk.Sweep.moveTo(scans[index].uuid);\n await this.sdk.Camera.setRotation({\n x: 0,\n y: 0,\n });\n const img = await this.sdk.Renderer.takeEquirectangular(\n { width: 2048, height: 1024 },\n { mattertags: false, sweeps: true }\n );\n await uploadBase64Image(\n img,\n scans[index].uuid,\n `visits/${this.modelID}/sweeps/`,\n 'sweep'\n );\n this.sweepProcessedCount.next(index);\n localStorage.setItem('indexScanLoad', index.toString());\n } else {\n console.log('Abandoning import because it was cancelled');\n resolve(false);\n break;\n }\n }\n if (maxScan === nmbScans) {\n console.log('Import 360 done');\n this.cleanLocalStorage();\n this.removeFrame();\n this.stop = true;\n resolve(true);\n } else if (!this.stop) {\n // to restart the procedure from where we left of\n localStorage.setItem('indexScanLoad', maxScan.toString());\n localStorage.setItem('visitInImport', this.modelID);\n this.removeFrame();\n window.location.reload();\n }\n });\n }\n\n async moveToFloor(floorName: string, matterportFloorSequence: number = null) {\n if (!this.floors) {\n console.log('Floor are not loaded yet');\n return;\n }\n // look up for sequence number (the safest method)\n let floorMatterport = Object.values(this.floors).find(\n (floor) => floor.sequence === matterportFloorSequence\n );\n if (!floorMatterport) {\n floorMatterport = Object.values(this.floors).find(\n (floor) => floorName.includes(floor.name) && floor.name != ''\n );\n }\n if (!floorMatterport) {\n floorMatterport = Object.values(this.floors).find((floor) =>\n floorName.includes(floor.id)\n );\n }\n // console.log(floorMatterport)\n if (floorMatterport) {\n let retry = true;\n while (retry) {\n try {\n const floorIndex = await this.sdk.Floor.moveTo(\n floorMatterport.sequence\n );\n // console.log(\"moved to floorIndex\", floorIndex);\n retry = false;\n } catch (error) {\n console.log('Cannot move to Floor', error);\n await wait(100);\n }\n }\n } else {\n console.warn('No matterport floor found to move to');\n }\n }\n\n public async importFloorData(\n defautZoneID: string,\n node: Node\n ): Promise<Zone[]> {\n const zones = [];\n await this.sdk.Mode.moveTo(this.sdk.Mode.Mode.FLOORPLAN);\n const nmbFloors = Object.keys(this.floors).length;\n console.log('Total number of floors', nmbFloors);\n for (let index = 0; index < nmbFloors; index += 1) {\n // eslint-disable-next-line no-await-in-loop\n console.log('Importing floor', index);\n await this.sdk.Floor.moveTo(index).then(async () => {\n await wait(700);\n // console.log(\"about to save the floor\", index);\n const zone = await this.saveFloor(defautZoneID, node);\n // console.log(\"received floor zone\", zone);\n zones.push(zone);\n });\n }\n return Promise.resolve(zones);\n }\n\n private async saveFloor(defautZoneID: string, node: Node): Promise<Zone> {\n let name = this.currentFloor.id;\n if (this.currentFloor.name !== '') {\n name = this.currentFloor.name;\n }\n const layerFloor = await this.getLayerByName('FLOOR');\n const sweepsInfo = Object.values(this.sweeps);\n const sweepsForFloor = sweepsInfo.filter(\n (sweepInfo) => sweepInfo.floorInfo.id === this.currentFloor.id\n );\n console.log('current floor', this.currentFloor);\n console.log('sweeps for floor', sweepsForFloor.length);\n const sweepIDs: string[] = sweepsForFloor.map((sweep) => sweep.uuid);\n const zone = await this.createZone(\n `Étage ${name} - ${node.metadata}`,\n layerFloor.id,\n null,\n defautZoneID,\n sweepIDs,\n node,\n JSON.stringify({ matterportFloorSequence: this.currentFloor.sequence })\n );\n // TODO link to scans\n const base64 = await this.sdk.Renderer.takeScreenShot({\n width: 4096,\n height: 2048,\n });\n const spaceIDshort = this.spaceID.slice(0, 8);\n await uploadBase64Image(\n base64,\n null,\n `visits/${this.modelID}/plans/`,\n `plan_floor_${this.currentFloor.id}_${spaceIDshort}`\n );\n // create Plan object\n const plan = {\n name: `plan_floor_${this.currentFloor.id}`,\n annexe: `visits/${this.modelID}/plans/plan_floor_${this.currentFloor.id}_${spaceIDshort}.jpeg`,\n zoneID: zone.id,\n spaceID: this.spaceID,\n isCurrentForZone: true,\n isModified: false,\n isImportedMatterport: true,\n } as Plan;\n await this.planService.createPlan(plan);\n // console.log(\"floor saved\");\n return Promise.resolve(zone);\n }\n\n abandon() {\n setTimeout(() => {\n console.log('abandonning import');\n localStorage.removeItem('visitInImport');\n this.stop = true;\n this.removeFrame();\n }, 500);\n }\n\n removeFrame() {\n if (this.currentFrame) {\n this.currentFrame.remove();\n }\n }\n\n cleanLocalStorage() {\n localStorage.removeItem('indexScanLoad');\n localStorage.removeItem('visitInImport');\n }\n\n async getLayerByName(name: string): Promise<Layer> {\n const mission = this.userService.currentMission(this.spaceID);\n const currentOrgId = mission.organisationID;\n const layers = await this.layerService.getLayerByNameForOrganisation(\n name,\n currentOrgId\n );\n if (layers.length > 0) {\n return layers[0];\n }\n // create then\n return this.layerService.createLayerForOrganisation(name, currentOrgId);\n }\n}\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 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}\r\n","/* eslint-disable class-methods-use-this */\nimport { Inject, Injectable } from \"@angular/core\";\nimport { Organisation, Property } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class OrganisationService {\n smarterPlanID = \"6e28201f-4679-4c29-9d2d-8a325f57cee9\";\n API: any; //AWS APIService\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async getPropertiesForOrganisation(\n orgID: string,\n ): Promise<Array<Property>> {\n const org = await this.API.__proto__.GetOrganisation({ id: orgID });\n if (org) {\n return org.properties.items;\n }\n return [];\n }\n\n async getOrganisationByToken(token: string): Promise<Organisation> {\n const orgs = await this.API.__proto__.OrganisationsByToken(token);\n if (orgs.items.length > 0) {\n const org = orgs.items[0];\n return this.tokenIsExpiredForOrg(org) ? null : org;\n }\n return null;\n }\n\n tokenIsExpiredForOrg(org: Organisation): boolean {\n const expirationDate = new Date(org.tokenExpiresAt);\n const diffTime = expirationDate.getTime() - Date.now();\n return diffTime < 0;\n }\n\n async softDeteleOrg(orgID: string): Promise<Organisation> {\n return this.API.__proto__.UpdateOrganisation({\n id: orgID,\n deletedAt: Date.now(),\n });\n }\n\n async updateOrganisation(input: any): Promise<Organisation> {\n return this.API.__proto__.UpdateOrganisation(input);\n }\n\n async deleteOrganisation(orgID: string): Promise<Organisation> {\n return this.API.__proto__.DeleteOrganisation({ id: orgID });\n }\n\n async createOrganisation(input: Organisation): Promise<Organisation> {\n return this.API.__proto__.CreateOrganisation(input);\n }\n\n async getOrganisation(orgID: string): Promise<Organisation> {\n return this.API.__proto__.GetOrganisation({ id: orgID });\n }\n\n async listOrganisations(): Promise<Organisation[]> {\n return this.API.__proto__.ListOrganisations().then((orgs) => orgs.items);\n }\n\n async getOrganisationForSpace(spaceID: string): Promise<Organisation> {\n const properties = await this.API.__proto__.ListProperties({\n spaceID: { eq: spaceID },\n });\n let orgs = properties.items.map((property) => property.organisation);\n if (orgs.length === 1) {\n return orgs[0];\n }\n orgs = orgs.filter((org) => org.id !== this.smarterPlanID);\n return orgs.length > 0 ? orgs[0] : null;\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { filterUniqueArrayByID } from \"../../helpers.service\";\nimport { Domain, DomainType } from \"../../types.service\";\n@Injectable({\n providedIn: \"root\",\n})\nexport class DomainService {\n API: any; //AWS\n\n constructor(@Inject('currentAPIService') apiInjected: any) {\n this.API = apiInjected;\n }\n\n async getGenericDomainsAndForOrganisation(\n organisationID: string,\n ): Promise<any | void> {\n return this.API.__proto__.ListDomains().then((domains) => {\n return domains.items.filter((dom) => {\n return (\n dom.organisationID === organisationID || !dom.organisationID\n );\n });\n });\n }\n\n async getGenericDomainsAndForOrgAndOrderedOrg(\n orgID: string,\n orderedOrgID: string = null,\n ): Promise<Domain[]> {\n // TODO: Change this (UUID can change depending on DB)\n if (orgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\") {\n // I am SmarterPlan, i can see all\n return this.API.__proto__.ListDomains().then((response) => response.items);\n }\n const currentOrgDomains =\n await this.getGenericDomainsAndForOrganisation(orgID);\n if (!orderedOrgID || orgID === orderedOrgID) {\n return currentOrgDomains;\n }\n const orderedOrgDomains =\n await this.getGenericDomainsAndForOrganisation(orderedOrgID);\n const merged = [...currentOrgDomains, ...orderedOrgDomains];\n return filterUniqueArrayByID(merged);\n }\n\n async getDomainsForOrgExcludingTypes(\n types: DomainType[],\n organisationID: string,\n ): Promise<Domain[]> {\n return this.getGenericDomainsAndForOrganisation(organisationID).then(\n (domains) => {\n return domains.filter((dom) => !types.includes(dom.type));\n },\n );\n }\n\n async getDomain(id: string): Promise<Domain> {\n return this.API.__proto__.GetDomain(id);\n }\n\n async updateDomain(input: any): Promise<Domain> {\n return this.API.__proto__.UpdateDomain(input);\n }\n\n async deleteDomain(id: string): Promise<Domain> {\n return this.API.__proto__.DeleteDomain({ id });\n }\n\n async getRootDomains(orgID: string): Promise<Domain[]> {\n const allDomains = await this.getGenericDomainsAndForOrganisation(\n orgID,\n );\n const root = allDomains.filter((dom) => !dom.parentID);\n return root.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n async createDomain(input: Domain): Promise<Domain> {\n return this.API.__proto__.CreateDomain(input);\n }\n\n async getDomainsForOrgForType(\n type: DomainType,\n organisationID: string,\n orderedOrg: string = null,\n ): Promise<Domain[]> {\n return this.getGenericDomainsAndForOrgAndOrderedOrg(\n organisationID,\n orderedOrg,\n ).then((domains) => {\n return domains.filter((dom) => dom.type === type);\n });\n }\n\n async getParentDomainsForOrgAndOrderedOrgForType(\n type: DomainType,\n organisationID: string,\n orderedOrg: string = null,\n ): Promise<Domain[]> {\n return this.getGenericDomainsAndForOrgAndOrderedOrg(\n organisationID,\n orderedOrg,\n ).then((domains) => {\n return domains.filter((dom) => dom.type === type && !dom.parentID);\n });\n }\n\n async getDomainsForMissionsForOrg(orgID: string): Promise<Domain[]> {\n const domains = await this.getDomainsForOrgExcludingTypes(\n [DomainType.BOOKING, DomainType.FEATURE, DomainType.MISSION],\n orgID,\n );\n return domains.filter((dom) => !dom.parentID);\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { VisitTemplate } from \"../../types.service\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class TemplateService {\n API: any; //AWS\n\n constructor(\n @Inject('currentAPIService') apiInjected: any\n ) {\n this.API = apiInjected;\n }\n\n // --CRUD---\n async create(template: VisitTemplate): Promise<VisitTemplate> {\n return this.API.__proto__.CreateVisitTemplate(template);\n }\n\n async update(template: any): Promise<VisitTemplate> {\n return this.API.__proto__.UpdateVisitTemplate(template);\n }\n\n async detele(templateID: string): Promise<VisitTemplate> {\n return this.API.__proto__.DeleteVisitTemplate({id:templateID});\n }\n\n async softDelete(templateID: string): Promise<VisitTemplate> {\n return this.update({id: templateID, deletedAt: Date.now()});\n }\n\n async get(templateID: string): Promise<VisitTemplate> {\n return this.API.__proto__.GetVisitTemplate(templateID);\n }\n\n async getTemplatesBySpace(spaceID: string): Promise<VisitTemplate[]> {\n return this.API.__proto__.TemplatesBySpace(spaceID).then((response) => response.items);\n }\n\n async getTemplatesByZone(zoneID: string): Promise<VisitTemplate[]> {\n return this.API.__proto__.TemplatesByZone(zoneID).then((response) => response.items);\n }\n}","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\n\nexport function floatValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const regex = /^[+-]?([0-9]*[.])?[0-9]+$/;\n if (control.value && control.value !== '') {\n return !regex.test(control.value) ? { number: control.value } : null;\n } else {\n return null;\n }\n };\n}","/*\n * Public API Surface of ngx-smarterplan-core\n */\n\nexport * from './lib/ngx-smarterplan-core.service';\nexport * from './lib/ngx-smarterplan-core.module';\nexport * from './lib/types.service';\nexport * from './lib/services/matterport.service';\nexport * from './lib/services/tag.service';\nexport * from './lib/services/baseVisibility.service';\nexport * from './lib/services/content.service';\nexport * from './lib/services/viewer.service';\nexport * from './lib/services/navigator.service';\nexport * from './lib/services/zoneChange.service';\nexport * from './lib/config';\nexport * from './lib/services/base-tab.service';\nexport * from './lib/services/user.service';\nexport * from './lib/helpers.service';\nexport * from './lib/services/locale.service';\nexport * from './lib/services/s3.service';\nexport * from './lib/services/filter.service';\nexport * from './lib/services/search.service';\nexport * from './lib/services/zone-drawer.service';\nexport * from './lib/services/matterport-import.service';\nexport * from './lib/mattertagData';\n\n// DynamoDB (model) services\nexport * from './lib/services/models/profile.service';\nexport * from './lib/services/models/zone.service';\nexport * from './lib/services/models/mission.service';\nexport * from './lib/services/models/object3D.service';\nexport * from './lib/services/models/poi.service';\nexport * from './lib/services/models/property.service';\nexport * from './lib/services/models/organisation.service';\nexport * from './lib/services/models/domain.service';\nexport * from './lib/services/models/space.service';\nexport * from './lib/services/models/capture.service';\nexport * from './lib/services/models/visit.service';\nexport * from './lib/services/models/plan.service';\nexport * from './lib/services/models/hashtag.service';\nexport * from './lib/services/models/navigation.service';\nexport * from './lib/services/models/node.service';\nexport * from './lib/services/models/equipment.service';\nexport * from './lib/services/models/layer.service';\nexport * from './lib/services/models/ticket.service';\nexport * from './lib/services/models/operation.service';\nexport * from './lib/services/intervention.service';\nexport * from './lib/services/models/event.service';\nexport * from './lib/services/models/affectation.service';\nexport * from './lib/services/models/measurement.service';\nexport * from './lib/services/models/comment.service';\nexport * from './lib/services/models/feature.service';\nexport * from './lib/services/models/template.service';\nexport * from './lib/services/support.service';\nexport * from './lib/services/validators.service';\n\n\n// Components\nexport * from './lib/components/csv-export/csv-export.component';\nexport * from './lib/components/search-bar/search-bar.component';\nexport * from './lib/components/menu-bar/menu-bar.component';\nexport * from './lib/components/loader/loader.component';\nexport * from './lib/components/support-modal/support-modal.component';\nexport * from './lib/components/menu-bar/avatar/avatar.component';\n\n// Pipes\nexport * from './lib/pipes/duration-to-string.pipe';\nexport * from './lib/pipes/hashtag-from-id.pipe';\nexport * from './lib/pipes/safe-url.pipe';\nexport * from './lib/pipes/time-date-to-local-string.pipe';\nexport * from './lib/pipes/username-from-id.pipe';\n\n// Directives\nexport * from './lib/validators/email.directive';\nexport * from './lib/validators/no-empty.directive';\nexport * from './lib/validators/text.directive';\nexport * from './lib/validators/number.directive';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.BaseUserService","i2.ZoneChangeService","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","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","i6.LoaderComponent","i7","i8","i2.FilterService","i3.AmplifyCacheService","i6.FormatDateNumberToDigitsPipe","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","i4.CommentService","i6.NavigationService","i7.HashtagService","i8.ZoneChangeService","i6.ZoneChangeService","i7.NavigationService","i2.SpaceService","i3.BaseUserService","i5.VisitService","i6.ViewerService","i7.NavigatorService","i10","i11","i2.LocaleService","i4.NavigatorService","i5.SupportService","i6.RangeDatePickerComponent","i7.AvatarComponent","i8.NavigationBarComponent","i1.NavigationService","i4.LayerService","i6.PlanService","i2.NavigatorService","i3.ZoneChangeService","i4.FilterService"],"mappings":"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"}
|