@smarterplan/ngx-smarterplan-core 0.4.21 → 0.4.22
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 +5 -2
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +4 -1
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +4 -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/poi.service.ts","../../../projects/ngx-smarterplan-core/src/lib/mattertagData.ts","../../../projects/ngx-smarterplan-core/src/lib/services/baseVisibility.service.ts","../../../projects/ngx-smarterplan-core/src/lib/config.ts","../../../projects/ngx-smarterplan-core/src/lib/services/matterport.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/viewer.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/modal-switch-visit/modal-switch-visit.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/modal-switch-visit/modal-switch-visit.component.html","../../../projects/ngx-smarterplan-core/src/lib/services/s3.service.ts","../../../projects/ngx-smarterplan-core/src/lib/helpers.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/profile.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/mission.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/property.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/user.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/zone.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/filter.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/navigation.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/base-object.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/operation.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/event.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/affectation.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/navigator.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/intervention.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/ticket.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/equipment.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/search.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/search-bar/search-bar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/search-bar/search-bar.component.html","../../../projects/ngx-smarterplan-core/src/lib/pipes/duration-to-string.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/hashtag.service.ts","../../../projects/ngx-smarterplan-core/src/lib/pipes/hashtag-from-id.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/pipes/safe-url.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/pipes/time-date-to-local-string.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/pipes/username-from-id.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/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/components/menu-bar/range-date-picker/range-date-picker.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/range-date-picker/range-date-picker.component.html","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/avatar/avatar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/capture.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/node.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/zone-drawer.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/plan.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/visit.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/space.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/navigation-bar/navigation-bar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/navigation-bar/navigation-bar.component.html","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/menu-bar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/menu-bar.component.html","../../../projects/ngx-smarterplan-core/src/lib/ngx-smarterplan-core.module.ts","../../../projects/ngx-smarterplan-core/src/lib/services/tag.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/comment.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/content.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/base-tab.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/layer.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/matterport-import.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/organisation.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/domain.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/booking.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/measurement.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/feature.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/template.service.ts","../../../projects/ngx-smarterplan-core/src/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","\r\nexport enum PoiType {\r\n EQUIPMENT = \"EQUIPMENT\",\r\n INFORMATION = \"INFORMATION\",\r\n TICKET = \"TICKET\",\r\n MEASURE = \"MEASURE\",\r\n DATA = \"DATA\",\r\n PEOPLE = \"PEOPLE\",\r\n DESK = \"DESK\",\r\n ROOM = \"ROOM\"\r\n}\r\n\r\nexport enum TicketPriority {\r\n MINIMUM = \"MINIMUM\",\r\n LOW = \"LOW\",\r\n MEDIUM = \"MEDIUM\",\r\n HIGH = \"HIGH\",\r\n MAXIMUM = \"MAXIMUM\"\r\n}\r\n\r\nexport enum TagAction {\r\n HOVER_ON = \"hoverOn\",\r\n AUDIO_CLICK = \"audioClick\",\r\n VIDEO_CLICK = \"videoClick\",\r\n IMAGE_CLICK = \"imageClick\",\r\n DOC_CLICK = \"docClick\",\r\n CLOSE_MODAL = \"closeModal\",\r\n NEXT_SLIDE = \"nextSlide\",\r\n DETAIL_CLICK = \"detailsClick\",\r\n TICKET_CLICK = \"ticketClick\",\r\n YOUTUBE_CLICK = \"youtubeClick\",\r\n}\r\n\r\nexport enum TicketStatus {\r\n TO_BE_PROCESSED = \"TO_BE_PROCESSED\",\r\n PLANNED = \"PLANNED\",\r\n IN_PROGRESS = \"IN_PROGRESS\",\r\n WAITING_FOR_VALIDATION = \"WAITING_FOR_VALIDATION\",\r\n VALIDATED = \"VALIDATED\",\r\n REJECTED = \"REJECTED\",\r\n RESOLVED = \"RESOLVED\",\r\n ARCHIVED = \"ARCHIVED\",\r\n LATE = \"LATE\",\r\n BLOCKED = \"BLOCKED\",\r\n COMPLETED = \"COMPLETED\",\r\n DELAYED = \"DELAYED\",\r\n CANCELLED = \"CANCELLED\",\r\n TO_REDO = \"TO_REDO\",\r\n CREATED = \"CREATED\"\r\n}\r\n\r\nexport enum DomainType {\r\n EQUIPMENT = \"EQUIPMENT\",\r\n MISSION = \"MISSION\",\r\n TICKET = \"TICKET\",\r\n POI = \"POI\",\r\n FEATURE = \"FEATURE\",\r\n BOOKING = \"BOOKING\"\r\n}\r\n\r\nexport enum RoleStatus {\r\n VISITOR = \"VISITOR\",\r\n VISITOR_MUSEUM = \"VISITOR_MUSEUM\",\r\n GUIDE_MUSEUM = \"GUIDE_MUSEUM\",\r\n OCCUPANT = \"OCCUPANT\",\r\n SERVICE = \"SERVICE\",\r\n MANAGER = \"MANAGER\",\r\n OWNER = \"OWNER\",\r\n ADMIN = \"ADMIN\"\r\n}\r\n\r\nexport enum ProfileStatus {\r\n WAITING_FOR_VALIDATION = \"WAITING_FOR_VALIDATION\",\r\n WAITING_FOR_ACTIVATION = \"WAITING_FOR_ACTIVATION\",\r\n ACTIVE = \"ACTIVE\",\r\n INACTIVE = \"INACTIVE\",\r\n BLOCKED = \"BLOCKED\"\r\n}\r\n\r\nexport enum LevelStatus {\r\n MINIMUM = \"MINIMUM\",\r\n LOW = \"LOW\",\r\n MEDIUM = \"MEDIUM\",\r\n HIGH = \"HIGH\",\r\n MAXIMUM = \"MAXIMUM\"\r\n}\r\n\r\nexport enum PropertyType {\r\n PROPERTY = \"PROPERTY\",\r\n VISIT = \"VISIT\",\r\n OCCUPANT = \"OCCUPANT\",\r\n SHARED = \"SHARED\"\r\n}\r\n\r\nexport enum SpaceStatus {\r\n DPE_TO_VALIDATE = \"DPE_TO_VALIDATE\",\r\n DPE_VALIDATED = \"DPE_VALIDATED\",\r\n DPE_FETCH = \"DPE_FETCH\"\r\n}\r\n\r\nexport enum Locale {\r\n FR = \"FR\",\r\n EN = \"EN\"\r\n}\r\n\r\nexport enum EmailStatus {\r\n CREATION_TO_DELIVER = \"CREATION_TO_DELIVER\",\r\n UPDATE_TO_DELIVER = \"UPDATE_TO_DELIVER\",\r\n CANCELLATION_TO_DELIVER = \"CANCELLATION_TO_DELIVER\",\r\n SENT = \"SENT\",\r\n SOFT_BOUNCE = \"SOFT_BOUNCE\",\r\n HARD_BOUNCE = \"HARD_BOUNCE\",\r\n REJECTED = \"REJECTED\"\r\n}\r\n\r\nexport enum CaptureViewer {\r\n CUPIX = \"CUPIX\",\r\n MATTERPORT = \"MATTERPORT\",\r\n SMARTERPLAN_V1 = \"SMARTERPLAN_V1\"\r\n}\r\n\r\nexport enum InventoryStatus {\r\n SUCCESS = \"SUCCESS\",\r\n ERROR = \"ERROR\",\r\n TO_RUN = \"TO_RUN\",\r\n TO_RUN_ONE_IMAGE = \"TO_RUN_ONE_IMAGE\",\r\n ERROR_FILE_OBJ_NOT_EXIST = \"ERROR_FILE_OBJ_NOT_EXIST\",\r\n ERROR_FILE_JSON_NOT_EXIST = \"ERROR_FILE_JSON_NOT_EXIST\",\r\n ERROR_FILE_MODEL_NOT_EXIST = \"ERROR_FILE_MODEL_NOT_EXIST\"\r\n}\r\n\r\nexport enum TypeNote {\r\n CONTRACTUAL = \"CONTRACTUAL\",\r\n INFORMATION = \"INFORMATION\",\r\n TECHNICAL = \"TECHNICAL\",\r\n FINANCIAL = \"FINANCIAL\",\r\n OTHER = \"OTHER\",\r\n IMAGE = \"IMAGE\"\r\n}\r\n\r\nexport enum FeatureType {\r\n DESK = \"DESK\",\r\n INDICATOR_TEMP = \"INDICATOR_TEMP\",\r\n INFORMATION = \"INFORMATION\",\r\n INDICATOR_CO2 = \"INDICATOR_CO2\",\r\n PURCHASE = \"PURCHASE\"\r\n}\r\n\r\nexport enum TicketType {\r\n REPORTING = \"REPORTING\",\r\n REQUEST_FOR_INTERVENTION = \"REQUEST_FOR_INTERVENTION\",\r\n REQUEST_FOR_MAINTENANCE = \"REQUEST_FOR_MAINTENANCE\",\r\n WORK_ORDER = \"WORK_ORDER\",\r\n INCIDENT = \"INCIDENT\",\r\n INFORMATION = \"INFORMATION\"\r\n}\r\n\r\nexport enum EventType {\r\n EQUIPMENT = \"EQUIPMENT\",\r\n COMMENT = \"COMMENT\",\r\n CONTRACTUAL_INTERVENTION = \"CONTRACTUAL_INTERVENTION\",\r\n NON_CONTRACTUAL_INTERVENTION = \"NON_CONTRACTUAL_INTERVENTION\",\r\n TICKET = \"TICKET\",\r\n REPORTING = \"REPORTING\",\r\n REQUEST_FOR_INTERVENTION = \"REQUEST_FOR_INTERVENTION\",\r\n REQUEST_FOR_MAINTENANCE = \"REQUEST_FOR_MAINTENANCE\",\r\n WORK_ORDER = \"WORK_ORDER\",\r\n INCIDENT = \"INCIDENT\",\r\n MEASURE = \"MEASURE\",\r\n BOOKING = \"BOOKING\",\r\n BOOKING_SUBCRIPTION = \"BOOKING_SUBCRIPTION\"\r\n}\r\n\r\nexport enum EventStatus {\r\n TO_BE_PROCESSED = \"TO_BE_PROCESSED\",\r\n PLANNED = \"PLANNED\",\r\n IN_PROGRESS = \"IN_PROGRESS\",\r\n WAITING_FOR_VALIDATION = \"WAITING_FOR_VALIDATION\",\r\n VALIDATED = \"VALIDATED\",\r\n REJECTED = \"REJECTED\",\r\n RESOLVED = \"RESOLVED\",\r\n ARCHIVED = \"ARCHIVED\",\r\n LATE = \"LATE\",\r\n BLOCKED = \"BLOCKED\",\r\n COMPLETED = \"COMPLETED\",\r\n DELAYED = \"DELAYED\",\r\n CANCELLED = \"CANCELLED\",\r\n TO_REDO = \"TO_REDO\",\r\n CREATED = \"CREATED\",\r\n LINKED_TO_EQUIPMENT = \"LINKED_TO_EQUIPMENT\",\r\n UNLINKED_FROM_EQUIPMENT = \"UNLINKED_FROM_EQUIPMENT\",\r\n EDITED = \"EDITED\",\r\n LINKED_TO_A_PARENT_TICKET = \"LINKED_TO_A_PARENT_TICKET\",\r\n WAITING_FOR_ACCEPTATION = \"WAITING_FOR_ACCEPTATION\",\r\n ACCEPTED = \"ACCEPTED\",\r\n REFUSED = \"REFUSED\",\r\n DOMAIN_UPDATED = \"DOMAIN_UPDATED\",\r\n DATES_UPDATED = \"DATES_UPDATED\",\r\n TICKET_CHILD_REMOVED = \"TICKET_CHILD_REMOVED\",\r\n TYPE_UPDATED = \"TYPE_UPDATED\",\r\n DATE_END_UPDATED = \"DATE_END_UPDATED\",\r\n DATE_START_UPDATED = \"DATE_START_UPDATED\",\r\n POSITION_SET = \"POSITION_SET\",\r\n POSITION_UPDATED = \"POSITION_UPDATED\",\r\n POSITION_REMOVED = \"POSITION_REMOVED\"\r\n}\r\n\r\nexport enum PaymentStatus {\r\n UNPAID = \"UNPAID\",\r\n PAID = \"PAID\",\r\n PENDING = \"PENDING\",\r\n ERROR = \"ERROR\"\r\n}\r\n\r\nexport enum CommentType {\r\n MEASURE = \"MEASURE\",\r\n VIDEO = \"VIDEO\",\r\n DOCUMENT = \"DOCUMENT\",\r\n IMAGE = \"IMAGE\",\r\n TEXT = \"TEXT\",\r\n AUDIO = \"AUDIO\",\r\n URL = \"URL\",\r\n YOUTUBE = \"YOUTUBE\",\r\n URL_SHOP = \"URL_SHOP\",\r\n SCRIPT_EMBED = \"SCRIPT_EMBED\"\r\n}\r\n\r\nexport enum StatusEquipment {\r\n TO_SETUP = \"TO_SETUP\",\r\n BROKEN = \"BROKEN\",\r\n UNINSTALLED = \"UNINSTALLED\",\r\n INCIDENT = \"INCIDENT\",\r\n IN_OPERATION = \"IN_OPERATION\",\r\n WAITING_FOR_REPAIR = \"WAITING_FOR_REPAIR\",\r\n DELETED = \"DELETED\",\r\n OUT_OF_ORDER = \"OUT_OF_ORDER\",\r\n TO_BE_REPLACED = \"TO_BE_REPLACED\"\r\n}\r\n\r\n/** Interface for Update (only id is required) */\r\nexport interface IUpdate {\r\n id: string;\r\n}\r\n\r\nexport type AWSType = {\r\n __typename?: string | null;\r\n id?: string | null;\r\n createdAt?: string;\r\n updatedAt?: string;\r\n};\r\n\r\nexport type DbObjectType = {\r\n spaceID?: string | null;\r\n description?: string | null;\r\n pois?: {\r\n __typename?: \"ModelPOIConnection\";\r\n items?: Array<POI> | null;\r\n nextToken?: string | null;\r\n } | null;\r\n space?: Space | null;\r\n domainID?: string | null;\r\n name?: string | null;\r\n title?: string | null;\r\n} & AWSType;\r\n\r\nexport type Ticket = {\r\n spaceID: string;\r\n title: string;\r\n status?: TicketStatus | null;\r\n priority?: TicketPriority | null;\r\n ownerMissionID?: string | null;\r\n ownerMission?: Mission | null;\r\n type?: TicketType | null;\r\n parentID?: string | null;\r\n level?: LevelStatus | null;\r\n friendlyLabel?: string | null;\r\n domain: Domain | null;\r\n domainID: string | null;\r\n events?: {\r\n __typename?: \"ModelEventConnection\";\r\n items?: Array<Event> | null;\r\n nextToken?: string | null;\r\n } | null;\r\n assignees?: {\r\n __typename?: \"ModelAffectationConnection\";\r\n items?: Array<Affectation> | null;\r\n nextToken?: string | null;\r\n } | null;\r\n equipments?: Array<Equipment> | null;\r\n operations?: {\r\n __typename?: \"ModelOperationConnection\";\r\n items?: Array<Operation | null> | null;\r\n nextToken?: string | null;\r\n };\r\n comments?: {\r\n __typename?: \"ModelCommentConnection\";\r\n items?: Array<Comment | null> | null;\r\n nextToken?: string | null;\r\n };\r\n prestataire?: Prestataire | null;\r\n children?: {\r\n __typename?: \"ModelTicketConnection\";\r\n items?: Array<Ticket | null> | null;\r\n nextToken?: string | null;\r\n };\r\n archivedForMissionID?: string[] | null;\r\n} & DbObjectType;\r\n\r\nexport type Operation = {\r\n id?: string | null;\r\n ticketID?: string | null;\r\n equipmentID?: string | null;\r\n deletedAt?: number | null;\r\n ticket?: Ticket | null;\r\n equipment?: Equipment | null;\r\n} & AWSType;\r\n\r\nexport type Equipment = {\r\n name: string;\r\n notes?: {\r\n __typename?: \"ModelNoteConnection\";\r\n items?: Array<Note | null> | null;\r\n nextToken?: string | null;\r\n };\r\n documents?: Array<EquipmentDocument> | null;\r\n documentationImageUrlSigned?: string | null;\r\n subEquipments?: Array<Equipment | null> | null;\r\n subequipmentsIDs?: Array<string | null> | null;\r\n serialNumber?: string | null;\r\n domain?: Domain | null;\r\n childDomain?: Domain | null;\r\n parentDomain?: Domain | null;\r\n photo?: string | null;\r\n zone?: Zone | null;\r\n tickets?: Ticket[] | null;\r\n domainID?: string | null;\r\n spaceID: string;\r\n archivedForMissionID?: string[] | null;\r\n annotation?: string | null;\r\n status?: StatusEquipment | null;\r\n family?: Array<string | null> | null;\r\n manufacturer?: string | null;\r\n sku?: string | null;\r\n installDate?: number | null;\r\n warrantyEndDate?: number | null;\r\n operations?: {\r\n __typename?: \"ModelOperationConnection\";\r\n items?: Array<Operation | null> | null;\r\n nextToken?: string | null;\r\n };\r\n} & DbObjectType;\r\n\r\nexport type EquipmentSelected = {\r\n selected?: boolean;\r\n} & Equipment;\r\n\r\n// not in db\r\nexport type EquipmentDocument = {\r\n filename: string;\r\n url: string;\r\n urlSigned: string;\r\n noteID: string;\r\n};\r\n\r\n// not in db\r\nexport type Prestataire = {\r\n organisation: Organisation;\r\n mission: Mission;\r\n profile: Profile;\r\n name: string;\r\n};\r\n\r\nexport type Note = {\r\n id?: string | null;\r\n attachment?: string | null;\r\n signDate?: number | null;\r\n expirationDate?: number | null;\r\n type?: TypeNote | null;\r\n ownerMissionID?: string | null;\r\n equipmentID?: string | null;\r\n} & AWSType;\r\n\r\nexport type Domain = {\r\n name: string;\r\n slug?: string | null;\r\n abbreviation?: string | null;\r\n description?: string | null;\r\n organisationID?: string | null;\r\n parentID?: string | null;\r\n type?: DomainType | null;\r\n parent?: Domain | null;\r\n children?: {\r\n __typename?: \"ModelDomainConnection\";\r\n items?: Array<Domain | null> | null;\r\n nextToken?: string | null;\r\n };\r\n} & AWSType;\r\n\r\nexport type POI = {\r\n id?: string | null;\r\n coordinate?: string | null;\r\n tagIcon?: string | null;\r\n tagDescription?: string | null;\r\n tagImageID?: string | null;\r\n metadata?: string | null;\r\n matterportSweepID?: string | null;\r\n type?: PoiType | null;\r\n elementID?: string | null;\r\n virtual?: boolean | null;\r\n};\r\n\r\nexport enum ViewerInteractions {\r\n DEFAULT = 0,\r\n ADDING_TICKET,\r\n POSITIONING,\r\n ADDING_EQUIPMENT,\r\n ADDING_MEASURE,\r\n ADDING_FEATURE,\r\n ADDING_ROOM,\r\n}\r\n\r\nexport type Mission = {\r\n userID: string;\r\n role?: RoleStatus | null;\r\n organisationID: string;\r\n spaceID?: string | null;\r\n level?: LevelStatus | null;\r\n orderedOrganisationID?: string | null;\r\n zoneID?: string | null;\r\n groups?: Array<string | null> | null;\r\n emailStatus?: EmailStatus | null;\r\n description?: string | null;\r\n metadata?: string | null;\r\n deletedAt?: number | null;\r\n assignments?: {\r\n __typename?: \"ModelAffectationConnection\";\r\n items?: Array<Affectation | null> | null;\r\n nextToken?: string | null;\r\n };\r\n organisation?: Organisation | null;\r\n orderedOrganisation?: Organisation | null;\r\n user?: Profile | null;\r\n domains?: string[] | null;\r\n // domainObjects?: Domain[] | null;\r\n space?: Space | null;\r\n zone?: Zone | null;\r\n startDateTime?: string | null;\r\n endDateTime?: string | null;\r\n hashtags?: Array<string | null> | null;\r\n templateMissionID?: string | null;\r\n templateMission?: VisitTemplate | null;\r\n locale?: Locale | null;\r\n isInWaitingRoom?: boolean | null;\r\n blockedInChat?: boolean | null;\r\n} & AWSType;\r\n\r\nexport type Affectation = {\r\n mission?: Mission | null;\r\n group: string;\r\n metadata?: string | null;\r\n deletedAt?: number | null;\r\n missionID: string;\r\n ticketID: string;\r\n} & AWSType;\r\n\r\nexport type MediaContent = {\r\n path: string;\r\n title: string;\r\n description: string;\r\n showInTag?: boolean;\r\n type?: CommentType;\r\n};\r\n\r\nexport type Comment = {\r\n title: string;\r\n ticket?: Ticket | null;\r\n ownerID?: string | null;\r\n owner?: Mission | null;\r\n annexe?: string | null;\r\n ticketID?: string | null;\r\n type?: CommentType | null;\r\n dimensions?: Array<number | null> | null;\r\n featureID?: string | null;\r\n isCoverImage?: boolean | null;\r\n index?: number | null;\r\n shownInTag?: boolean | null;\r\n externalLink?: string | null;\r\n} & AWSType & DbObjectType;\r\n\r\n\r\nexport type Zone = {\r\n sweepIDs?: string[] | null;\r\n layer?: Layer | null;\r\n parent?: Zone | null;\r\n virtual?: boolean | null;\r\n name: string;\r\n tags?: Array<string | null> | null;\r\n parentID?: string | null;\r\n spaceID?: string | null;\r\n space?: Space | null;\r\n isMuseumVisitZone?: boolean | null;\r\n nodeIDs?: Array<string | null> | null;\r\n surface?: number | null;\r\n metadata?: string | null;\r\n isMultipleFloorZone?: boolean | null;\r\n} & AWSType;\r\n\r\n\r\nexport type Layer = {\r\n name: string;\r\n} & AWSType;\r\n\r\nexport type Profile = {\r\n id?: string | null;\r\n userID: string;\r\n avatar?: string | null;\r\n token?: string | null;\r\n tokenExpiredAt?: number | null;\r\n status?: ProfileStatus | null;\r\n metadata?: string | null;\r\n lastConnectedAt?: number | null;\r\n pseudo?: string | null;\r\n} & AWSType;\r\n\r\nexport class ProfileEntity implements Profile {\r\n id?: string | null;\r\n\r\n userID: string;\r\n\r\n avatar?: string | null;\r\n\r\n token?: string | null;\r\n\r\n tokenExpiredAt?: number | null;\r\n\r\n status?: ProfileStatus | null;\r\n\r\n createdAt?: string;\r\n\r\n updatedAt?: string;\r\n\r\n firstName: string;\r\n\r\n lastName: string;\r\n\r\n email: string;\r\n\r\n phone: string;\r\n\r\n pseudo: string;\r\n\r\n constructor(init?: Partial<Profile>) {\r\n Object.assign(this, init);\r\n this.metadata = init.metadata;\r\n }\r\n\r\n get metadata(): string {\r\n return JSON.stringify({\r\n firstName: this.firstName,\r\n lastName: this.lastName,\r\n email: this.email,\r\n phone: this.phone,\r\n });\r\n }\r\n\r\n set metadata(m: string) {\r\n const d = JSON.parse(m);\r\n if (d) {\r\n this.firstName = d.firstName;\r\n this.lastName = d.lastName;\r\n this.email = d.email;\r\n this.phone = d.phone;\r\n }\r\n }\r\n\r\n get displayName(): string {\r\n if (this.pseudo) {\r\n return this.pseudo;\r\n }\r\n if (this.lastName.length > 0) {\r\n return `${this.firstName} ${this.lastName}`;\r\n }\r\n return this.email;\r\n }\r\n}\r\n\r\nexport type Organisation = {\r\n name: string;\r\n siret?: string | null;\r\n address?: string | null;\r\n city?: string | null;\r\n postal?: number | null;\r\n logoUrl?: string | null;\r\n originDate?: number | null;\r\n deletedAt?: number | null;\r\n shareToken?: string | null;\r\n tokenExpiresAt?: number | null;\r\n connectedAccountStripeID?: string | null;\r\n stripeOnBoardingCompleted?: boolean | null;\r\n stripeToken?: string | null;\r\n stripeChargesEnabled?: boolean | null;\r\n contactDetails?: string | null;\r\n ticketOrganisationsId?: string | null;\r\n // properties?: {\r\n // __typename?: \"ModelPropertyConnection\";\r\n // items?: Array<Property | null> | null;\r\n // nextToken?: string | null;\r\n // } | null;\r\n} & AWSType;\r\n\r\nexport type Property = {\r\n type: PropertyType;\r\n deletedAt?: number | null;\r\n organisationID: string;\r\n spaceID: string;\r\n zoneID?: string | null;\r\n space?: Space | null;\r\n organisation?: Organisation | null;\r\n // zone?: Zone | null;\r\n} & AWSType;\r\n\r\nexport type Space = {\r\n name: string;\r\n addresses?: string | null;\r\n annexes?: string | null;\r\n tags?: Array<string | null> | null;\r\n latitude?: number | null;\r\n longitude?: number | null;\r\n metadata?: string | null;\r\n level?: LevelStatus | null;\r\n deletedAt?: number | null;\r\n constructionYear?: string | null;\r\n classEnergyConsumption?: string | null;\r\n classGes?: string | null;\r\n status?: SpaceStatus | null;\r\n guestLink?: string | null;\r\n signedImageUrl?: string | null;\r\n zones?: {\r\n __typename?: \"ModelZoneConnection\";\r\n items?: Array<Zone | null> | null;\r\n nextToken?: string | null;\r\n };\r\n properties?: {\r\n __typename?: \"ModelPropertyConnection\";\r\n items?: Array<Property | null> | null;\r\n nextToken?: string | null;\r\n };\r\n visits?: Visit[] | null;\r\n organisationID?: string | null;\r\n organisation?: Organisation | null;\r\n description?: string | null;\r\n} & AWSType;\r\n\r\n// not in DB\r\nexport type Visit = {\r\n captureID: string;\r\n model3d: string;\r\n takenAt: number;\r\n spaceID: string;\r\n viewer: CaptureViewer;\r\n surface: number;\r\n node: Node;\r\n name?: string | null;\r\n imagesImported: boolean;\r\n};\r\n\r\n\r\nexport type Hashtag = {\r\n name?: string | null;\r\n organisationID?: string | null;\r\n spaceID?: string | null;\r\n organization?: Organisation | null;\r\n space?: Space | null;\r\n} & AWSType;\r\n\r\nexport type Capture = {\r\n // clientRef?: string | null;\r\n // originCoordinate?: string | null;\r\n // originAngle?: string | null;\r\n // originZoom?: string | null;\r\n takenAt?: number | null;\r\n viewer?: CaptureViewer | null;\r\n publishedAt?: number | null;\r\n surface?: number | null;\r\n metadata?: string | null;\r\n spaceID?: string | null;\r\n nodes?: {\r\n __typename?: \"ModelNodeConnection\";\r\n items?: Array<Node | null> | null;\r\n nextToken?: string | null;\r\n };\r\n} & AWSType;\r\n\r\nexport type Node = {\r\n model3D?: string | null;\r\n coordinate?: string | null;\r\n size?: string | null;\r\n scale?: string | null;\r\n version?: number | null;\r\n active?: number | null;\r\n order?: number | null;\r\n // quality?: NodeQuality | null;\r\n metadata?: string | null;\r\n captureID?: string | null;\r\n inventoryStatus?: InventoryStatus | null;\r\n navigationForInventory?: string | null;\r\n capture?: Capture | null;\r\n} & AWSType;\r\n\r\nexport type Plan = {\r\n name?: string | null;\r\n annexe?: string | null;\r\n calibration?: string | null;\r\n zoneID?: string | null;\r\n isCurrentForZone?: boolean | null;\r\n spaceID?: string | null;\r\n isModified?: boolean | null;\r\n isImportedMatterport?: boolean | null;\r\n filepath?: string;\r\n model3d?: string | null;\r\n floor?: string | null;\r\n visitName?: string | null;\r\n zone?: Zone | null;\r\n extension?: string | null;\r\n navigationIDs?: string[] | null;\r\n} & AWSType;\r\n\r\nexport type Navigation = {\r\n matterportSweepID?: string | null;\r\n position?: string | null;\r\n rotation?: string | null;\r\n radius?: number | null;\r\n url?: string | null;\r\n tags?: Array<string | null> | null;\r\n level?: LevelStatus | null;\r\n nodeID?: string | null;\r\n spaceID?: string | null;\r\n positionOnPlan?: Array<string | null> | null;\r\n navigationSiblingsId?: string | null;\r\n pois?: {\r\n __typename?: \"ModelPOIConnection\";\r\n items?: Array<POI | null> | null;\r\n nextToken?: string | null;\r\n };\r\n node?: Node | null;\r\n} & AWSType;\r\n\r\nexport type MenuItem = { label: string; url?: string; back?: any; };\r\n\r\n// not in db\r\nexport type Measurement = {\r\n id: string;\r\n poi: POI;\r\n comment: Comment;\r\n singedUrlPhoto?: string | null;\r\n values: Array<number> | null;\r\n numberPoints: number;\r\n};\r\n\r\nexport type Feature = {\r\n title?: string | null;\r\n shortDescription?: string | null;\r\n ownerMissionID?: string | null;\r\n level?: LevelStatus | null;\r\n index?: number | null;\r\n type?: FeatureType | null;\r\n archivedForMissionID?: Array<string | null> | null;\r\n stripeProductID?: string | null;\r\n stripePriceID?: string | null;\r\n bookingPriceMetadata?: string | null;\r\n locale?: Locale | null;\r\n hashtags?: Array<string | null> | null;\r\n coverImageUrl?: string | null;\r\n images?: Array<MediaContent> | null;\r\n videos?: Array<MediaContent> | null;\r\n audios?: Array<MediaContent> | null;\r\n externalLinks?: Array<MediaContent> | null;\r\n documents?: Array<{\r\n path: string;\r\n title: string;\r\n description: string;\r\n }> | null;\r\n comments?: {\r\n __typename?: \"ModelCommentConnection\";\r\n items?: Array<Comment | null> | null;\r\n nextToken?: string | null;\r\n };\r\n domain?: Domain | null;\r\n isBookingPlace?: boolean | null;\r\n events?: {\r\n __typename?: \"ModelEventConnection\";\r\n items?: Array<Event | null> | null;\r\n nextToken?: string | null;\r\n };\r\n spaceID: string;\r\n} & DbObjectType;\r\n\r\nexport type Event = {\r\n title: string;\r\n type?: EventType | null;\r\n estimateStartDate?: number | null;\r\n estimateDuration?: number | null;\r\n estimateEndDate?: number | null;\r\n realStartDate?: number | null;\r\n timeSpent?: number | null;\r\n realEndDate?: number | null;\r\n status?: EventStatus | null;\r\n description?: string | null;\r\n group?: string | null;\r\n metadata?: string | null;\r\n ownerID?: string | null;\r\n ticketID?: string | null;\r\n createdAt?: string | null;\r\n translationPath?: string | null;\r\n featureID?: string | null;\r\n archivedByOwner?: boolean | null;\r\n paymentStatus?: PaymentStatus | null;\r\n stripeSessionID?: string | null;\r\n notificationStatus?: EmailStatus | null;\r\n refusalReason?: string | null;\r\n agoStr?: boolean | string | null;\r\n owner?: Mission | null;\r\n author?: ProfileEntity | null;\r\n feature?: Feature | null;\r\n} & AWSType;\r\n\r\n//not in DB (variation of Event)\r\nexport type RequestIntervention = {\r\n estimateStartDate?: number | null;\r\n estimateDuration?: number | null;\r\n estimateEndDate?: number | null;\r\n realStartDate?: number | null;\r\n realDuration?: number | null;\r\n realEndDate?: number | null;\r\n type: EventType.REQUEST_FOR_INTERVENTION;\r\n status: EventStatus;\r\n intervention?: Event | null;\r\n report?: Event | null;\r\n ticketID: string;\r\n} & AWSType;\r\n\r\n//not in DB (variation of Event)\r\nexport type Intervention = {\r\n estimateStartDate?: number | null;\r\n estimateDuration?: number | null;\r\n estimateEndDate?: number | null;\r\n realStartDate?: number | null;\r\n realDuration?: number | null;\r\n realEndDate?: number | null;\r\n type: EventType;\r\n status: EventStatus;\r\n} & AWSType;\r\n\r\nexport type VisitTemplate = {\r\n id?: string | null;\r\n title?: string | null;\r\n level?: LevelStatus | null;\r\n description?: string | null;\r\n metadata?: string | null;\r\n deletedAt?: number | null;\r\n startDateTime?: string | null;\r\n endDateTime?: string | null;\r\n hashtags?: Array<string | null> | null;\r\n organisationID: string;\r\n spaceID?: string | null;\r\n zoneID?: string | null;\r\n locale?: Locale | null;\r\n realStartedAt?: number | null;\r\n realEndedAt?: number | null;\r\n space?: Space | null;\r\n zone?: Zone | null;\r\n organisation?: Organisation | null;\r\n userMissions?: {\r\n __typename: \"ModelMissionConnection\";\r\n items: Array<Mission | null>;\r\n nextToken?: string | null;\r\n } | null;\r\n} & AWSType;\r\n\r\nexport enum SpModule {\r\n MUSEUM = \"MUSEUM\",\r\n HOTEL = \"HOTEL\",\r\n IMMO = \"IMMO\"\r\n}","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { removeNullKeysFromObject } from \"../../helpers.service\";\r\nimport { POI, PoiType } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class PoiService {\r\n API: any; //AWS APIService\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getPoiByElementId(elementId: string): Promise<POI | null> {\r\n const pois = await this.API.__proto__.PoisByElement(elementId);\r\n if (pois && pois.items.length > 0) {\r\n return pois.items[0];\r\n }\r\n return null;\r\n }\r\n\r\n async getPoisByType(type: PoiType): Promise<[POI] | any> {\r\n return this.API.__proto__.PoisByType(type).then((pois) => pois.items);\r\n }\r\n\r\n async createPOIForSpaceID(\r\n poi: POI\r\n ): Promise<POI> {\r\n removeNullKeysFromObject(poi);\r\n return this.API.__proto__.CreatePOI(poi);\r\n }\r\n\r\n poiIsVirtual(poi: POI): boolean {\r\n const { coordinate } = poi;\r\n return !coordinate;\r\n }\r\n\r\n async updatePoi(poi: {}): Promise<POI> {\r\n return this.API.__proto__.UpdatePOI(poi);\r\n }\r\n\r\n async deletePoi(poiID: string): Promise<POI> {\r\n return this.API.__proto__.DeletePOI({ id: poiID });\r\n }\r\n\r\n async getPoisByMatterportSweepByType(\r\n sweep: string,\r\n type: PoiType,\r\n ): Promise<POI[]> {\r\n return this.API.__proto__.ListPOIs(\r\n { matterportSweepID: { eq: sweep } },\r\n 300,\r\n ).then((response) => response.items.filter((poi) => poi.type === type));\r\n }\r\n}\r\n","/* eslint-disable unicorn/filename-case */\r\n\r\nimport { Comment, DbObjectType, Equipment, Feature, POI, PoiType, Ticket } from \"./types.service\";\r\n\r\n\r\nexport class MattertagData {\r\n // private ticket: Ticket;\r\n\r\n // private equipment: Equipment;\r\n\r\n // private comment: Comment;\r\n\r\n // private feature: Feature;\r\n\r\n private object: DbObjectType;\r\n\r\n private type: PoiType = PoiType.TICKET;\r\n\r\n public elementID: string;\r\n\r\n private position: any = { x: 0, y: 0, z: 0 };\r\n\r\n private normal: any = { x: 0, y: 1, z: 0 };\r\n\r\n private mediaSrc: string;\r\n\r\n private sweepID: string;\r\n\r\n public customIconIndex = 0;\r\n\r\n private rotation: { x: number; y: number; };\r\n\r\n private poi: POI;\r\n\r\n constructor(type: PoiType) {\r\n this.setType(type);\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Setters\r\n ------------------------------------------------------------------------------*/\r\n\r\n setType(type: PoiType) {\r\n this.type = type;\r\n }\r\n\r\n // setTicket(ticket: Ticket) {\r\n // this.ticket = ticket;\r\n // this.setElementID(ticket.id);\r\n // this.setType(PoiType.TICKET);\r\n // }\r\n\r\n // setEquipment(equip: Equipment) {\r\n // this.equipment = equip;\r\n // this.setElementID(equip.id);\r\n // this.setType(PoiType.EQUIPMENT);\r\n // }\r\n\r\n // setComment(comment: Comment) {\r\n // this.comment = comment;\r\n // this.setElementID(comment.id);\r\n // this.setType(PoiType.MEASURE);\r\n // }\r\n\r\n // setFeature(feature: Feature) {\r\n // this.feature = feature;\r\n // this.setElementID(feature.id);\r\n // this.setType(PoiType.DATA);\r\n // }\r\n\r\n // setDesk(feature: Feature) {\r\n // this.feature = feature;\r\n // this.setElementID(feature.id);\r\n // this.setType(PoiType.DESK);\r\n // }\r\n\r\n setObject(object: DbObjectType, tagType: PoiType) {\r\n this.object = object;\r\n this.setElementID(object.id);\r\n this.setType(tagType);\r\n }\r\n\r\n setElementID(ticketID: any) {\r\n this.elementID = ticketID;\r\n }\r\n\r\n setPosition(position: any) {\r\n this.position = position;\r\n }\r\n\r\n setNormal(normal: any) {\r\n this.normal = normal;\r\n }\r\n\r\n setMediaSource(source: string) {\r\n this.mediaSrc = source;\r\n }\r\n\r\n setSweepID(sweepID: string) {\r\n this.sweepID = sweepID;\r\n }\r\n\r\n setRotation(rotation: { x: number; y: number; }) {\r\n this.rotation = rotation;\r\n }\r\n\r\n setPoi(poi: POI) {\r\n this.poi = poi;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Getters\r\n ------------------------------------------------------------------------------*/\r\n\r\n // MattertagData\r\n getData() {\r\n let label = \"New Tag\";\r\n switch (this.type) {\r\n case PoiType.TICKET:\r\n label = this.object ? this.object.title! : \"New Tag\";\r\n break;\r\n case PoiType.EQUIPMENT:\r\n label =this.object ? this.object.name! : \"New Tag\";\r\n break;\r\n case PoiType.MEASURE:\r\n label = this.object ? this.object.title! : \"New Tag\";\r\n break;\r\n case PoiType.DATA:\r\n label = \"\";\r\n break;\r\n case PoiType.ROOM:\r\n label = \"\";\r\n break;\r\n default:\r\n label = \"New Tag\";\r\n break;\r\n }\r\n const data = {\r\n label,\r\n description: \"\",\r\n anchorPosition: {\r\n x: this.position.x * 1,\r\n y: this.position.y * 1,\r\n z: this.position.z * 1,\r\n },\r\n stemVector: {\r\n x: this.normal.x * 0.3,\r\n y: this.normal.y * 0.3,\r\n z: this.normal.z * 0.3,\r\n },\r\n color: {\r\n // blue disc\r\n r: 0,\r\n g: 0,\r\n b: 1,\r\n },\r\n };\r\n return data;\r\n }\r\n\r\n getType() {\r\n return this.type;\r\n }\r\n\r\n getNormal() {\r\n return this.normal;\r\n }\r\n\r\n getMenuToOpen(): string {\r\n switch (this.type) {\r\n case PoiType.TICKET:\r\n return this.object ? \"positioning_ticket\" : \"add_ticket\";\r\n case PoiType.EQUIPMENT:\r\n return this.object ? \"positioning_equip\" : \"add_equip\";\r\n case PoiType.DATA:\r\n return this.object ? \"positioning_feature\" : \"add_feature\";\r\n case PoiType.DESK:\r\n return this.object ? \"positioning_feature\" : \"add_desk\";\r\n case PoiType.ROOM:\r\n return this.object ? \"positioning_room\" : \"add_room\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n getIcon() {\r\n switch (this.type) {\r\n case PoiType.TICKET:\r\n return \"icon_ticket.png\";\r\n case PoiType.EQUIPMENT:\r\n return \"icon_equipment.png\";\r\n }\r\n return \"\";\r\n }\r\n\r\n getCoordinateString() {\r\n return JSON.stringify({\r\n x: this.position.x,\r\n y: this.position.y,\r\n z: this.position.z,\r\n xRotation: this.rotation ? this.rotation.x : null,\r\n yRotation: this.rotation ? this.rotation.y : null,\r\n });\r\n }\r\n\r\n getMetadataString() {\r\n return JSON.stringify({\r\n icon: this.getIcon(),\r\n normal: this.getNormal(),\r\n });\r\n }\r\n\r\n getSweepID() {\r\n return this.sweepID;\r\n }\r\n\r\n getObject(): any {\r\n return this.object;\r\n }\r\n\r\n\r\n getRotation(): { x: number; y: number; } {\r\n return this.rotation;\r\n }\r\n\r\n getPoi(): POI {\r\n return this.poi;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseVisibilityService {\r\n detailShowing = new Subject<boolean>();\r\n\r\n constructor() { }\r\n}","\r\nexport class Config {\r\n my_config: {\r\n icon_ticket?: string;\r\n icon_equipment?: string;\r\n icon_measure?: string;\r\n icon_data?: string;\r\n icon_position: string;\r\n MAX_CHARACTER_DESCRIPTION_TAG: number;\r\n DEFAULT_HEIGHT_HTML_TAG: number;\r\n DEFAULT_OPACITY_TAG: number;\r\n COLD_LIMIT?: number;\r\n HOT_LIMIT?: number;\r\n DEFAULT_WIDTH_HTML_TAG: number;\r\n MAX_IMAGE_HEIGHT_HTML_TAG: number;\r\n icon_room_available?: string;\r\n icon_room_unavailable?: string;\r\n };\r\n\r\n constructor() { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Subject } from 'rxjs';\r\nimport { getDistanceBetweenTwoPoints, poiTypeToString, wait } from '../helpers.service';\r\nimport { MattertagData } from '../mattertagData';\r\nimport { DbObjectType, FeatureType, POI, PoiType, SpModule, TagAction, ViewerInteractions } from '../types.service';\r\nimport { BaseTagService } from './tag.service';\r\nimport { BaseVisibilityService } from './baseVisibility.service';\r\nimport { Config } from '../config';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MatterportService {\r\n public sdk: any;\r\n\r\n private container: any;\r\n\r\n // Position camera\r\n private poseMatterport: any;\r\n\r\n public poseCamera: { rotation: any; position: any; sweep: any; };\r\n\r\n // Pointer trick\r\n private pointerButton: any;\r\n\r\n private oldPoseMatterportPosition: any;\r\n\r\n // Measure mode\r\n private isMeasureModeOn = false;\r\n\r\n // Timers\r\n private lastActionTime = -1;\r\n\r\n private interactionMode: number = ViewerInteractions.DEFAULT;\r\n\r\n private mattertags: Array<string> = [];\r\n\r\n private dictionnaryTags: Map<string, { mattertagData: MattertagData; elementID: string; }> = new Map;\r\n\r\n private lastMeasure = [];\r\n\r\n private distancesLastMeasure: number[] = [];\r\n\r\n private resolution = {\r\n width: 500,\r\n height: 600,\r\n };\r\n\r\n private visibility = {\r\n mattertags: false,\r\n sweeps: true,\r\n };\r\n\r\n private lastScreenshotUri: any;\r\n\r\n public sweeps: Array<string> | null;\r\n\r\n public currentSweep: Subject<string> = new Subject();\r\n\r\n //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 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 tagMessengerOn = false;\r\n\r\n SPModule: SpModule;\r\n\r\n pointerLeftClickHandler = () => {\r\n this.addMattertag();\r\n this.updatePositionInTagData();\r\n };\r\n\r\n pointerRightClickHandler = (e) => {\r\n console.log(\"cancel on right click\");\r\n e.preventDefault();\r\n this.action_canceled();\r\n alert(\"action cancelled\");\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 ) {\r\n this.config = config;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Utils async\r\n ------------------------------------------------------------------------------*/\r\n\r\n async initSdk(tagService: BaseTagService, module: SpModule = SpModule.IMMO): Promise<boolean> {\r\n if (this.sdk) {\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(\r\n \"#viewer-module\",\r\n ) as HTMLElement;\r\n const iframe = document.querySelector(\r\n \"#viewer-module\",\r\n ) as HTMLIFrameElement;\r\n if (!iframe) {\r\n return;\r\n }\r\n\r\n // Add listeners\r\n if (this.pointerButton) {\r\n this.pointerButton.addEventListener(\r\n \"click\",\r\n 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\r\n // Load SDK\r\n console.log(\"Loading Matterport SDK\");\r\n // @ts-ignore\r\n window.MP_SDK.connect(\r\n iframe,\r\n \"qn9wsasuy5h2fzrbrn1nzr0id\",\r\n \"3.11\",\r\n ).then(async (sdk: any) => {\r\n // Instanciate sdk\r\n this.sdk = sdk;\r\n switch (module) {\r\n case SpModule.IMMO:\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-ticket\",\r\n this.config.my_config.icon_ticket,\r\n );\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-equipment\",\r\n this.config.my_config.icon_equipment,\r\n );\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-measure\",\r\n this.config.my_config.icon_measure,\r\n );\r\n\r\n this.sdk.Measurements.data.subscribe({\r\n onAdded: function (index: any, item: { points: any; }, collection: any) {\r\n // console.log(\r\n // \"item added to the collection\",\r\n // index,\r\n // item,\r\n // );\r\n // this.measurements[index] = item;\r\n this.lastMeasure = item.points;\r\n }.bind(this),\r\n onCollectionUpdated: function (collection: any) {\r\n // console.log('the entire up-to-date collection', collection);\r\n this.getDistanceForLastMeasurement();\r\n }.bind(this),\r\n });\r\n this.sdk.Measurements.mode.subscribe(\r\n function (measurementModeState: { active: any; }) {\r\n // measurement mode state has changed\r\n this.isMeasureModeOn = measurementModeState.active;\r\n // console.log('Is measurement mode currently active? ', measurementModeState.active);\r\n }.bind(this),\r\n );\r\n break;\r\n case SpModule.HOTEL:\r\n // @TODO: hm...\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon_room_available\",\r\n this.config.my_config.icon_room_available,\r\n );\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon_room_unavailable\",\r\n this.config.my_config.icon_room_unavailable,\r\n );\r\n break;\r\n default:\r\n break;\r\n }\r\n // Load Mattertag icons\r\n\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-data\",\r\n this.config.my_config.icon_data,\r\n );\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-position\",\r\n this.config.my_config.icon_position,\r\n );\r\n // 3D position's pointer\r\n this.sdk.Pointer.intersection.subscribe(\r\n function (intersection: any) {\r\n this.poseMatterport = intersection;\r\n\r\n if (!this.oldPoseMatterportPosition) {\r\n this.oldPoseMatterportPosition = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n };\r\n }\r\n\r\n if (\r\n this.interactionMode !==\r\n ViewerInteractions.DEFAULT &&\r\n this.mattertagToFollow\r\n ) {\r\n // follow the pointer and changes the position of the last tag\r\n // (we are about to validate, but it exists in sdk already)\r\n this.enable_following_tag(this.mattertagToFollow);\r\n }\r\n }.bind(this),\r\n );\r\n\r\n // 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(collection);\r\n this.sweeps = Object.keys(collection);\r\n }.bind(this),\r\n });\r\n\r\n // subscribe to current sweep\r\n this.sdk.Sweep.current.subscribe(\r\n function subscr(currentSweep: { sid: string; }) {\r\n // Change to the current sweep has occurred.\r\n if (currentSweep.sid === \"\") {\r\n // console.log('Not currently stationed at a sweep position');\r\n } else {\r\n // console.log(\"emmiting sweep\", currentSweep.sid);\r\n this.currentSweep.next(currentSweep.sid);\r\n }\r\n }.bind(this),\r\n );\r\n\r\n // Subscribe to Floor data\r\n this.sdk.Floor.data.subscribe({\r\n onCollectionUpdated: function upd(this: any, collection: any) {\r\n this.floors = Object.values(collection);\r\n }.bind(this),\r\n });\r\n\r\n // on tag click open details page\r\n this.sdk.on(\"tag.click\", (sid: string) => {\r\n // get object of this tag\r\n try {\r\n const mattertagData = this.dictionnaryTags.get(sid)?.mattertagData!;\r\n const url = tagService.getUrlForSeeDetails(\r\n mattertagData.getObject(),\r\n mattertagData.getType(),\r\n );\r\n if (url !== \"\") {\r\n this.visibilityService.detailShowing.next(true);\r\n this.router.navigate([url]);\r\n }\r\n } catch {\r\n console.log(\"Cannot show details for tag\");\r\n }\r\n });\r\n\r\n // Pointer trick\r\n // Create a div that will appear when the cursor is still\r\n // It will intercept the click of the mouse before it trigerring the Matterport's tour navigation\r\n this.timerPointer = setInterval(\r\n this.updatePointerTrick.bind(this),\r\n 50,\r\n );\r\n\r\n\r\n /**\r\n * Transitions\r\n */\r\n this.sdk.on(\"viewmode.changestart\", function (to, from) {\r\n // console.log('Starting to move to ' + to + ' from ' + from);\r\n this.inTransitionMode = true;\r\n }.bind(this));\r\n\r\n this.sdk.on(\"viewmode.changeend\", function (oldMode, newMode) {\r\n // console.log('Ended to move to ' + newMode + ' from ' + oldMode);\r\n if (newMode !== \"mode.transitioning\") {\r\n this.inTransitionMode = false;\r\n }\r\n }.bind(this));\r\n\r\n this.sdk.on(sdk.Sweep.Event.ENTER,\r\n function (oldSweep, newSweep) {\r\n // console.log('Leaving sweep ' + oldSweep);\r\n // console.log('Entering sweep ' + newSweep);\r\n this.inTransitionSweep = false;\r\n }.bind(this)\r\n );\r\n this.sdk.on(sdk.Sweep.Event.EXIT,\r\n function (fromSweep, toSweep) {\r\n // console.log('Leaving sweep ' + fromSweep);\r\n // console.log('Transitioning to sweep ' + toSweep);\r\n this.inTransitionSweep = true;\r\n }.bind(this)\r\n );\r\n resolve(true);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Add Mattertag to the dictionnary of the current tags\r\n * @param mattertagID\r\n * @param mattertagData\r\n * @param tagType\r\n * @param ticketID\r\n */\r\n addMattertagToObject(mattertagID: string, mattertagData: MattertagData) {\r\n if (this.sdk) {\r\n this.mattertags.push(mattertagID);\r\n this.dictionnaryTags.set(mattertagID, {\r\n mattertagData,\r\n elementID: mattertagData.elementID,\r\n });\r\n this.editTagStyle(mattertagID, mattertagData);\r\n }\r\n }\r\n\r\n getDistanceForLastMeasurement() {\r\n if (this.lastMeasure.length > 0) {\r\n const numberPoints = this.lastMeasure.length;\r\n this.distancesLastMeasure = [];\r\n for (let index = 1; index < numberPoints; index += 1) {\r\n const distance = getDistanceBetweenTwoPoints(\r\n this.lastMeasure[index - 1],\r\n this.lastMeasure[index],\r\n );\r\n this.distancesLastMeasure.push(distance);\r\n }\r\n this.takeScreenShot().then((res) => {\r\n this.goToMenu(`visit/${this.currentSpaceID}/add_measurement`);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Init the Mattertag that will follow the cursor\r\n * @param tagType\r\n */\r\n async add_cursor_mattertag(\r\n tagType: PoiType,\r\n element?: any,\r\n positioning: boolean = false,\r\n ) {\r\n if (!this.poseMatterport) return;\r\n const mattertagData = new MattertagData(tagType);\r\n if (positioning) {\r\n // set the coordinates of the existing tag\r\n const [poi] = element.pois.items;\r\n if (poi && poi.coordinate) {\r\n mattertagData.setPosition(JSON.parse(poi.coordinate));\r\n mattertagData.setPoi(poi); // to keep custom tagIon and opacity\r\n }\r\n }\r\n mattertagData.setSweepID(this.poseCamera.sweep);\r\n mattertagData.setRotation(this.poseCamera.rotation);\r\n if (element) {\r\n mattertagData.setObject(element, tagType);\r\n }\r\n this.mattertagToFollow = await this.add_mattertag_to_viewer(\r\n mattertagData,\r\n );\r\n if (positioning) {\r\n this.sdk.Mattertag.editIcon(\r\n this.mattertagToFollow,\r\n \"icon-position\",\r\n );\r\n this.sdk.Mattertag.editOpacity(this.mattertagToFollow, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Add Mattertag from its data\r\n * @param tagID\r\n * @param tagType\r\n * @param mattertagData\r\n */\r\n async add_mattertag_to_viewer(\r\n mattertagData: MattertagData,\r\n ): Promise<string | null> {\r\n let sidList;\r\n if (!this.sdk) {\r\n return null;\r\n }\r\n try {\r\n sidList = await this.sdk.Mattertag.add(mattertagData.getData());\r\n } catch (error) {\r\n console.log(\r\n \"Tag does not belong to the visit\",\r\n error,\r\n mattertagData.getData(),\r\n );\r\n }\r\n if (sidList) {\r\n const mattertagID = sidList[0];\r\n // console.log(\"added tag\", mattertagData.getType(), mattertagID);\r\n this.addMattertagToObject(mattertagID, mattertagData);\r\n return mattertagID;\r\n }\r\n return null;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Utils - Mattertag\r\n ------------------------------------------------------------------------------*/\r\n\r\n addMattertag() {\r\n this.setInteractionMode(ViewerInteractions.DEFAULT);\r\n this.action_open_menu(this.getMenuToOpenForLastTag());\r\n this.resetActionTime();\r\n }\r\n\r\n updatePointerTrick() {\r\n if (\r\n this.interactionMode !== ViewerInteractions.DEFAULT &&\r\n this.mattertagToFollow &&\r\n this.poseMatterport &&\r\n this.getDistPosition(\r\n this.poseMatterport.position,\r\n this.oldPoseMatterportPosition,\r\n ) > 25\r\n ) {\r\n this.pointerButton.style.display = \"none\";\r\n\r\n const size = {\r\n w: this.container.clientWidth,\r\n h: this.container.clientHeight,\r\n };\r\n const coords = this.sdk.Conversion.worldToScreen(\r\n this.poseMatterport.position,\r\n this.poseCamera,\r\n size,\r\n );\r\n this.pointerButton.style.left = `${coords.x * Math.sign(coords.x) - 25\r\n }px`;\r\n this.pointerButton.style.top = `${coords.y * Math.sign(coords.x) - 25\r\n }px`;\r\n this.oldPoseMatterportPosition = {\r\n ...this.poseMatterport.position,\r\n };\r\n } else {\r\n this.pointerButton.style.display = \"block\";\r\n }\r\n }\r\n\r\n async editTagStyle(mattertagID: string, mattertagData: MattertagData) {\r\n 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.Mattertag.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 // TODO for indicators\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(\r\n feature,\r\n poi,\r\n );\r\n poi.tagIcon = tagIcon;\r\n }\r\n }\r\n if (tagIcon.src) {\r\n const pathSigned = await this.tagService.getSignedTagIconSource(tagIcon.src);\r\n if (pathSigned) {\r\n try {\r\n iconName = `icon-${stringTagType}-${mattertagID}-${mattertagData.customIconIndex}`;\r\n await this.sdk.Mattertag.registerIcon(\r\n iconName,\r\n pathSigned,\r\n );\r\n mattertagData.customIconIndex += 1;\r\n } catch {\r\n console.log(\"error registerIcon\");\r\n }\r\n }\r\n }\r\n if (tagIcon.opacity) {\r\n opacity = tagIcon.opacity;\r\n }\r\n }\r\n try {\r\n this.sdk.Mattertag.editIcon(mattertagID, iconName);\r\n this.sdk.Mattertag.editOpacity(mattertagID, opacity);\r\n } catch (error) {\r\n console.log(\"Error editIcon or opacity\", error);\r\n }\r\n }\r\n\r\n\r\n enable_following_tag(mattertag: any) {\r\n this.sdk.Mattertag.editPosition(mattertag, {\r\n anchorPosition: {\r\n x: this.poseMatterport.position.x * 1,\r\n y: this.poseMatterport.position.y * 1,\r\n z: this.poseMatterport.position.z * 1,\r\n },\r\n stemVector: {\r\n x: this.poseMatterport.normal.x * 0.3,\r\n y: this.poseMatterport.normal.y * 0.3,\r\n z: this.poseMatterport.normal.z * 0.3,\r\n },\r\n });\r\n }\r\n\r\n resetActionTime() {\r\n this.lastActionTime = -1;\r\n }\r\n\r\n goToLastTag() {\r\n setTimeout(() => {\r\n const lastTag = this.getLastTag();\r\n this.goToTag(lastTag);\r\n }, 2000);\r\n }\r\n\r\n async goToTag(mattertagID: string) {\r\n if (mattertagID === \"\") return;\r\n try {\r\n await this.sdk.Mattertag.navigateToTag(\r\n mattertagID,\r\n this.sdk.Mattertag.Transition.FLY,\r\n );\r\n } catch (error) {\r\n console.log(\"cannot navigate to tag\", error);\r\n }\r\n }\r\n\r\n goToMenu(menuUrl: any) {\r\n this.router.navigate([menuUrl]);\r\n }\r\n\r\n /**\r\n * Get the distance betwween two 3D positions\r\n * Used in order to see how much the cursor has moved from the previous position\r\n * @param pos1\r\n * @param pos2\r\n */\r\n getDistPosition(pos1: any, pos2: any) {\r\n const size = {\r\n w: this.container.clientWidth,\r\n h: this.container.clientHeight,\r\n };\r\n const coords1 = this.sdk.Conversion.worldToScreen(\r\n pos1,\r\n this.poseCamera,\r\n size,\r\n );\r\n const coords2 = this.sdk.Conversion.worldToScreen(\r\n pos2,\r\n this.poseCamera,\r\n size,\r\n );\r\n return Math.sqrt(\r\n (coords1.x - coords2.x) ** 2 + (coords1.y - coords2.y) ** 2,\r\n );\r\n }\r\n\r\n updatePositionInTagData() {\r\n const lastTag = this.getLastTag();\r\n if (lastTag) {\r\n this.dictionnaryTags.get(lastTag)!.mattertagData.setPosition(\r\n this.poseMatterport.position,\r\n );\r\n this.dictionnaryTags.get(lastTag)!.mattertagData.setNormal(\r\n this.poseMatterport.normal,\r\n );\r\n this.updateMatterTagFromId(lastTag);\r\n }\r\n }\r\n\r\n async updateMatterTagFromId(\r\n mattertagID: string,\r\n object: any = null,\r\n tagType: PoiType | null = null,\r\n ) {\r\n this.sdk.Mattertag.editBillboard(\r\n mattertagID,\r\n this.dictionnaryTags.get(mattertagID)!.mattertagData.getData(),\r\n );\r\n if (object && tagType) {\r\n this.injectHtmlInTag(tagType, object, mattertagID);\r\n }\r\n this.editTagStyle(\r\n mattertagID,\r\n this.dictionnaryTags.get(mattertagID)!.mattertagData,\r\n );\r\n }\r\n\r\n deleteMattertagFromId(mattertagID: string) {\r\n this.sdk.Mattertag.remove(mattertagID);\r\n this.dictionnaryTags.delete(mattertagID);\r\n }\r\n\r\n deleteLastMattertag() {\r\n const mattertagID = this.mattertags.pop();\r\n if (mattertagID) {\r\n this.deleteMattertagFromId(mattertagID);\r\n }\r\n\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Utils - Toolbar\r\n ------------------------------------------------------------------------------*/\r\n\r\n action_toolbox_floorplan() {\r\n this.sdk.Mode.moveTo(\"mode.floorplan\");\r\n }\r\n\r\n action_toolbox_inside_view() {\r\n this.sdk.Mode.moveTo(\"mode.inside\");\r\n }\r\n\r\n async action_toolbox_dollhouse() {\r\n setTimeout(async () => {\r\n console.log(\"mode: \", this.inTransitionMode, \" sweep: \", this.inTransitionSweep);\r\n if (this.inTransitionMode || this.inTransitionSweep) {\r\n console.log(\"viewer is in transition, cannot go dollhouse\");\r\n return;\r\n }\r\n try {\r\n await this.sdk.Mode.moveTo(\"mode.dollhouse\");\r\n } catch (e) {\r\n console.log(\"cannot go to dollhouse\", e);\r\n }\r\n }, 1200);\r\n }\r\n\r\n action_toolbox_mesure() {\r\n const newState = !this.isMeasureModeOn;\r\n this.sdk.Measurements.toggleMode(newState).then(() => {\r\n console.log(\r\n `Measurement mode is now ${newState ? \"enabled\" : \"disabled\"}`,\r\n );\r\n });\r\n }\r\n\r\n action_toolbox_cancel_mesure() {\r\n if (this.isMeasureModeOn) {\r\n this.action_toolbox_mesure();\r\n }\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Actions\r\n ------------------------------------------------------------------------------*/\r\n\r\n async action_add_mattertag_from_POI(\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 createdTag = await this.add_mattertag_to_viewer(mattertagData);\r\n if (createdTag && this.sdk) {\r\n await this.injectHtmlInTag(tagType, object, createdTag);\r\n }\r\n }\r\n\r\n async injectHtmlInTag(\r\n tagType: PoiType,\r\n object: DbObjectType,\r\n tagID: string,\r\n ) {\r\n let { html, height } = await this.tagService.getHtmlToInject(\r\n tagType,\r\n object,\r\n this.config.my_config.DEFAULT_HEIGHT_HTML_TAG\r\n );\r\n if (html !== \"\" && this.sdk) {\r\n const scriptTag = this.tagService.getScriptForTag(object, tagType);\r\n html += `${scriptTag}`;\r\n this.sdk.Mattertag.injectHTML(tagID, html, {\r\n size: {\r\n w: this.config.my_config.DEFAULT_WIDTH_HTML_TAG,\r\n h: height,\r\n },\r\n })\r\n .then((messenger) => {\r\n if (this.tagMessengerOn) {\r\n return;\r\n }\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.onActionAudioClick(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(\r\n TagAction.AUDIO_CLICK, audioClick\r\n );\r\n messenger.on(\r\n TagAction.IMAGE_CLICK, imageClick\r\n );\r\n messenger.on(\r\n TagAction.VIDEO_CLICK, videoClick\r\n );\r\n messenger.on(\r\n TagAction.DOC_CLICK,\r\n this.tagService.onActionDocClick.bind(this.tagService)\r\n );\r\n messenger.on(\r\n TagAction.YOUTUBE_CLICK,\r\n this.tagService.onActionYoutubeClick.bind(this.tagService)\r\n );\r\n })\r\n .catch((error: any) =>\r\n console.log(\"Cannot inject html for tag\", tagID, error),\r\n );\r\n }\r\n }\r\n\r\n async action_delete_all_mattertags() {\r\n // await Promise.all(\r\n this.mattertags.map(async (tag) => {\r\n await this.sdk.Mattertag.remove(tag);\r\n });\r\n // );\r\n this.mattertags = [];\r\n this.dictionnaryTags.clear();\r\n }\r\n\r\n async action_delete_element(\r\n element: DbObjectType,\r\n ) {\r\n const sidTag = this.getTagFromElementId(element.id!).tag;\r\n if (sidTag) {\r\n let resp;\r\n try {\r\n resp = await this.sdk.Mattertag.remove(sidTag);\r\n } catch (error) {\r\n console.log(\"Cannot delete tag\", sidTag, error);\r\n }\r\n if (resp) {\r\n this.dictionnaryTags.delete(sidTag);\r\n const index = this.mattertags.indexOf(sidTag);\r\n this.mattertags.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n async action_position_element(\r\n poiType: PoiType,\r\n element: DbObjectType,\r\n ) {\r\n await this.add_cursor_mattertag(poiType, element, true);\r\n this.setInteractionMode(ViewerInteractions.POSITIONING);\r\n }\r\n\r\n async addElementAsMattertag(poiType: PoiType) {\r\n await this.add_cursor_mattertag(poiType);\r\n switch (poiType) {\r\n case PoiType.DATA:\r\n this.setInteractionMode(ViewerInteractions.ADDING_FEATURE);\r\n break;\r\n case PoiType.DESK:\r\n this.setInteractionMode(ViewerInteractions.ADDING_FEATURE);\r\n break;\r\n case PoiType.TICKET:\r\n this.setInteractionMode(ViewerInteractions.ADDING_TICKET);\r\n break;\r\n case PoiType.EQUIPMENT:\r\n this.setInteractionMode(ViewerInteractions.ADDING_EQUIPMENT);\r\n break;\r\n case PoiType.MEASURE:\r\n this.setInteractionMode(ViewerInteractions.ADDING_MEASURE);\r\n break;\r\n case PoiType.ROOM:\r\n this.setInteractionMode(ViewerInteractions.ADDING_ROOM);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n }\r\n\r\n action_completed() {\r\n return (\r\n Date.now() - this.lastActionTime > 2000 &&\r\n this.lastActionTime !== -1\r\n );\r\n }\r\n\r\n action_canceled() {\r\n this.setInteractionMode(ViewerInteractions.DEFAULT);\r\n this.deleteLastMattertag();\r\n }\r\n\r\n action_open_menu(menu: string) {\r\n this.visibilityService.detailShowing.next(true);\r\n const lastTag = this.getLastTag();\r\n switch (menu) {\r\n case \"add_equip\":\r\n this.goToLastTag();\r\n this.goToMenu(`visit/${this.currentSpaceID}/add_equip`);\r\n break;\r\n case \"add_ticket\":\r\n this.goToLastTag();\r\n this.goToMenu(`visit/${this.currentSpaceID}/add_ticket`);\r\n break;\r\n case \"add_feature\":\r\n this.goToLastTag();\r\n let url: string;\r\n if (this.router.url.includes(\"?\")) {\r\n url = this.router.url.substring(0, this.router.url.indexOf(\"?\"));\r\n } else {\r\n url = this.router.url;\r\n }\r\n console.log(url);\r\n this.goToMenu(`${url}/add_feature`);\r\n break;\r\n case \"add_desk\":\r\n this.goToLastTag();\r\n this.router.navigate(\r\n [`visit/${this.currentSpaceID}/add_feature`],\r\n { queryParams: { isDesk: true } },\r\n );\r\n break;\r\n\r\n case \"add_room\":\r\n this.goToLastTag();\r\n this.router.navigate(\r\n [`visit/${this.currentSpaceID}/add_room`]\r\n );\r\n break;\r\n case \"positioning_ticket\":\r\n console.log(\"positioning_ticket\");\r\n if (lastTag) {\r\n this.router.navigate(\r\n [\r\n `visit/${this.currentSpaceID}/detail/${this.dictionnaryTags.get(lastTag).elementID}`,\r\n ],\r\n { queryParams: { positioning: true } },\r\n );\r\n }\r\n break;\r\n case \"positioning_equip\":\r\n if (lastTag) {\r\n this.router.navigate(\r\n [\r\n `visit/${this.currentSpaceID}/equip/${this.dictionnaryTags.get(lastTag).elementID}`,\r\n ],\r\n { queryParams: { positioning: true } },\r\n );\r\n }\r\n break;\r\n case \"positioning_feature\":\r\n if (lastTag) {\r\n this.router.navigate([`${this.router.url}`], {\r\n queryParams: { positioning: true },\r\n });\r\n }\r\n break;\r\n case \"positioning_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 async action_go_to_floor(floorName: string, matterportFloorSequence: number = null) {\r\n if (!this.floors) {\r\n console.log(\"Floor are not loaded yet\");\r\n return;\r\n }\r\n // console.log(this.floors);\r\n // look up for sequence number (the safest method)\r\n let floorMatterport = this.floors.find(\r\n (floor) => floor.sequence === matterportFloorSequence,\r\n );\r\n if (!floorMatterport) {\r\n floorMatterport = this.floors.find(\r\n (floor) => floorName.includes(floor.name) && floor.name != \"\",\r\n );\r\n }\r\n if (!floorMatterport) {\r\n floorMatterport = this.floors.find((floor) =>\r\n floorName.includes(floor.id),\r\n );\r\n }\r\n // console.log(floorMatterport)\r\n if (floorMatterport) {\r\n let retry = true;\r\n while (retry) {\r\n try {\r\n const floorIndex = await this.sdk.Floor.moveTo(floorMatterport.sequence);\r\n // console.log(\"moved to floorIndex\", floorIndex);\r\n retry = false;\r\n } catch (error) {\r\n console.log(\"Cannot move to Floor\", error);\r\n await wait(100);\r\n }\r\n }\r\n } else {\r\n console.warn(\"No matterport floor found to move to\");\r\n }\r\n }\r\n\r\n async action_go_to_sweep(\r\n sweep: string,\r\n rotation: { x: number; y: number; } = null,\r\n ) {\r\n if (this.forbiddenSweeps.includes(sweep)) {\r\n console.log(\"user is not allowed to go to this sweep\");\r\n return;\r\n }\r\n // console.log(\"going to sweep\", sweep, \"with rotation:\", rotation);\r\n setTimeout(async () => {\r\n if (this.inTransitionMode || this.inTransitionSweep) {\r\n console.log(\"Cannot go to sweep, in transition\");\r\n return;\r\n }\r\n try {\r\n this.inTransitionSweep = true;\r\n await this.sdk.Sweep.moveTo(sweep, {\r\n transition: \"transition.fly\",\r\n transitionTime: 1500,\r\n });\r\n } catch (error) {\r\n this.inTransitionSweep = false;\r\n console.log(\"Cannot move to sweep\", error);\r\n }\r\n if (rotation) {\r\n await this.sdk.Camera.setRotation(rotation, { speed: 100 }); // speed is degrees per second\r\n }\r\n }, 1000);\r\n }\r\n\r\n getCurrentSweep(): string | null {\r\n if (this.poseCamera) {\r\n return this.poseCamera.sweep;\r\n }\r\n return null;\r\n }\r\n\r\n getCurrentCameraPosition(): {\r\n rotation: any;\r\n position: any;\r\n sweep: any;\r\n } | null {\r\n if (this.poseCamera) {\r\n return this.poseCamera;\r\n }\r\n return null;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Setters\r\n ------------------------------------------------------------------------------*/\r\n\r\n setInteractionMode(interactionMode: number) {\r\n this.interactionMode = interactionMode;\r\n }\r\n\r\n setObjectAndPoiInTag(mattertagID: string, object: DbObjectType, poiType: PoiType, poi: POI | null = null) {\r\n this.dictionnaryTags.get(mattertagID).mattertagData.setObject(object, poiType);\r\n if (poi) {\r\n this.dictionnaryTags.get(mattertagID).mattertagData.setPoi(poi);\r\n }\r\n this.dictionnaryTags.get(mattertagID).elementID = object.id;\r\n this.updateMatterTagFromId(mattertagID, object, poiType);\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Getters\r\n ------------------------------------------------------------------------------*/\r\n\r\n getInteractionMode() {\r\n return this.interactionMode;\r\n }\r\n\r\n public getTagFromElementId(elementID: string): {\r\n tag: string | null;\r\n sweep: string | null;\r\n } {\r\n for (let index = 0; index < this.mattertags.length; index += 1) {\r\n if (\r\n this.dictionnaryTags.get(this.mattertags[index]).elementID ===\r\n elementID\r\n ) {\r\n const { mattertagData } =\r\n this.dictionnaryTags.get(this.mattertags[index]);\r\n const sweep = mattertagData.getSweepID();\r\n if (!sweep) {\r\n return { tag: this.mattertags[index], sweep: null };\r\n }\r\n if (this.sweeps && this.sweeps.includes(sweep)) {\r\n return { tag: this.mattertags[index], sweep };\r\n }\r\n return { tag: null, sweep };\r\n }\r\n }\r\n return { tag: null, sweep: null };\r\n }\r\n\r\n getTags() {\r\n return this.mattertags;\r\n }\r\n\r\n getLastTag(): string | null {\r\n if (this.mattertagToFollow) {\r\n return this.mattertagToFollow;\r\n } else {\r\n return this.mattertags.length === 0\r\n ? null\r\n : this.mattertags[this.mattertags.length - 1];\r\n }\r\n }\r\n\r\n getMenuToOpenForLastTag() {\r\n const lastTag = this.getLastTag();\r\n if (lastTag) {\r\n return this.dictionnaryTags.get(lastTag).mattertagData.getMenuToOpen();\r\n }\r\n return null;\r\n }\r\n\r\n getTagDataFromId(mattertagID: string): MattertagData | null {\r\n try {\r\n return this.dictionnaryTags.get(mattertagID)!.mattertagData;\r\n } catch {\r\n console.log(\"cannot retrieve mattertagData for tag\", mattertagID);\r\n }\r\n return null;\r\n }\r\n\r\n getLastDistances() {\r\n return this.distancesLastMeasure;\r\n }\r\n\r\n takeScreenShot(): Promise<any> {\r\n return this.sdk.Renderer.takeScreenShot(\r\n this.resolution,\r\n this.visibility,\r\n ).then(\r\n function (screenShotUri: any) {\r\n // base64 string\r\n this.lastScreenshotUri = screenShotUri;\r\n return Promise.resolve();\r\n }.bind(this),\r\n );\r\n }\r\n\r\n getScreenShotUri() {\r\n return this.lastScreenshotUri;\r\n }\r\n\r\n getLastMeasurement(): Object {\r\n const data = {\r\n measure: this.lastMeasure,\r\n sweep: this.poseCamera.sweep,\r\n };\r\n return data;\r\n }\r\n\r\n async clearAll() {\r\n console.log(\"removing viewer\");\r\n this.action_delete_all_mattertags();\r\n this.floors = null;\r\n this.sweeps = null;\r\n this.sdk = null;\r\n clearInterval(this.timerPointer);\r\n this.forbiddenSweeps = [];\r\n this.tagMessengerOn = false;\r\n // cancel subscriptions\r\n this.pointerButton.removeEventListener(\"click\", this.pointerLeftClickHandler);\r\n this.pointerButton.removeEventListener(\"contextmenu\", this.pointerRightClickHandler);\r\n }\r\n\r\n async removeForbiddenSweeps(forbiddenSweeps: string[]) {\r\n this.forbiddenSweeps = [...forbiddenSweeps];\r\n let removed = 0;\r\n await Promise.all(\r\n forbiddenSweeps.map(async (sweep) => {\r\n try {\r\n await this.sdk.Sweep.disable(sweep);\r\n removed += 1;\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }),\r\n );\r\n console.log(\"removed sweeps:\", removed);\r\n }\r\n}\r\n","/* eslint-disable no-await-in-loop */\r\n/* eslint-disable camelcase */\r\n/* eslint-disable no-underscore-dangle */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { MatterportService } from \"./matterport.service\";\r\nimport { BaseTagService } from \"./tag.service\";\r\nimport { DbObjectType, POI, ViewerInteractions, PoiType, Comment, Equipment, Ticket, Feature, SpModule } from \"../types.service\";\r\nimport { PoiService } from \"./models/poi.service\";\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ViewerService {\r\n private viewerMode: string = \"Matterport\";\r\n\r\n public currentModel3D: string;\r\n\r\n private tourUrl: string;\r\n\r\n public viewerIsOn: Subject<{\r\n spaceID: string | null;\r\n model3D: string | null;\r\n sweep: string | null;\r\n rotation: { x: number; y: number; } | null;\r\n }> = new Subject();\r\n\r\n public dataIsLoaded: Subject<boolean> = new Subject();\r\n\r\n public isLoaded = false;\r\n\r\n public showingViewer = false;\r\n\r\n public sweepToMove: string | null;\r\n\r\n public rotationToMove: { x: number; y: number; } | null;\r\n\r\n public toolboxStates = {\r\n dollhouse: {\r\n stat: false,\r\n iconId: \"ui-dollhouse\",\r\n show() { },\r\n hide() { },\r\n },\r\n floorplan: {\r\n stat: false,\r\n },\r\n mesure: {\r\n stat: false,\r\n iconId: \"ui-mesure\",\r\n show() { },\r\n hide() { },\r\n },\r\n filter: {\r\n stat: false,\r\n },\r\n };\r\n\r\n constructor(\r\n private poiService: PoiService,\r\n private matterportService: MatterportService,\r\n ) {\r\n this.setMode(\"Matterport\");\r\n }\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Utils\r\n -----------------------------------------------------------------------------------------------------------------*/\r\n\r\n checkMode(indexMode: string) {\r\n return this.viewerMode === indexMode;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Setters\r\n -----------------------------------------------------------------------------------------------------------------*/\r\n\r\n setMode(indexMode: string) {\r\n this.viewerMode = indexMode;\r\n }\r\n\r\n setTourUrl(model3d: string, showIconPlan: boolean = true, showIconDollhouse: boolean = true, showIconFloors: boolean = true) {\r\n // this.tourUrl = this.checkMode(\"Matterport\")\r\n // ? `https://my.matterport.com/show/?m=${model3d}&play=1&qs=1&hr=0>=0&title=0&log=0&brand=0&applicationKey=qn9wsasuy5h2fzrbrn1nzr0id&mds=0`\r\n // : \"http://cupixweework.s3-website.eu-west-3.amazonaws.com/\";\r\n this.tourUrl = `https://my.matterport.com/show/?m=${model3d}&play=1&hr=0&qs=1>=0&title=0&log=0&brand=0&search=0&applicationKey=qn9wsasuy5h2fzrbrn1nzr0id&mds=0`;\r\n if (!showIconPlan) {\r\n this.tourUrl += \"&fp=0\";\r\n }\r\n if (!showIconDollhouse) {\r\n this.tourUrl += \"&dh=0\";\r\n }\r\n if (!showIconFloors) {\r\n this.tourUrl += \"&f=0\";\r\n }\r\n }\r\n\r\n clearAll() {\r\n this.sweepToMove = null;\r\n this.rotationToMove = null;\r\n if (this.checkMode(\"Matterport\")) {\r\n this.showingViewer = false;\r\n this.isLoaded = false;\r\n this.matterportService.clearAll();\r\n this.viewerIsOn.next({\r\n spaceID: null,\r\n model3D: null,\r\n sweep: null,\r\n rotation: null,\r\n });\r\n }\r\n }\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Getters\r\n -----------------------------------------------------------------------------------------------------------------*/\r\n\r\n getMode() {\r\n return this.viewerMode;\r\n }\r\n\r\n getViewerSelectedService() {\r\n // Matterport\r\n // if (this.checkMode(\"Matterport\")) {\r\n // return this.getMatterportService();\r\n // }\r\n return this.getMatterportService();\r\n }\r\n\r\n getTourUrl() {\r\n return this.tourUrl;\r\n }\r\n\r\n getMatterportService() {\r\n return this.matterportService;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Generic Main action functions\r\n -----------------------------------------------------------------------------------------------------------------*/\r\n setSweepToMove(sweep: string) {\r\n this.sweepToMove = sweep;\r\n }\r\n\r\n setRotationToMove(rotation: { x: number; y: number; }) {\r\n this.rotationToMove = rotation;\r\n }\r\n\r\n async action_move_to_tag(elementId: string): Promise<boolean> {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n const result =\r\n this.matterportService.getTagFromElementId(elementId);\r\n if (result.tag) {\r\n await this.matterportService.goToTag(result.tag);\r\n return true;\r\n }\r\n if (result.sweep) {\r\n this.sweepToMove = result.sweep;\r\n }\r\n return false;\r\n }\r\n return false;\r\n }\r\n\r\n /**\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 this.actionAddObjectFromPOI(object, poi);\r\n }\r\n }),\r\n );\r\n }\r\n\r\n async actionAddObjectFromPOI(\r\n object: DbObjectType,\r\n poi: POI\r\n ) {\r\n if (this.checkMode(\"Matterport\")) {\r\n return this.matterportService.action_add_mattertag_from_POI(\r\n poi.type!,\r\n object,\r\n poi,\r\n );\r\n }\r\n // Cupix\r\n // TODO\r\n return Promise.resolve();\r\n }\r\n\r\n\r\n async action_delete_element(\r\n element: DbObjectType,\r\n ) {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n await this.matterportService.action_delete_element(element);\r\n }\r\n }\r\n\r\n /**\r\n * Enable 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 (this.checkMode(\"Matterport\") && this.matterportService.getInteractionMode() ===\r\n ViewerInteractions.DEFAULT) {\r\n await this.matterportService.addElementAsMattertag(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(element: DbObjectType, poiType: PoiType) {\r\n if (\r\n this.checkMode(\"Matterport\") &&\r\n this.matterportService.getInteractionMode() ===\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n await this.matterportService.action_position_element(\r\n poiType,\r\n element,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Enable ticket placement menu to add a new ticket\r\n */\r\n action_canceled() {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_canceled();\r\n }\r\n }\r\n\r\n action_toolbox_inside_view() {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_toolbox_inside_view();\r\n }\r\n }\r\n\r\n action_toolbox_dollhouse() {\r\n if (\r\n this.matterportService.getInteractionMode() !==\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n this.action_canceled();\r\n }\r\n\r\n this.action_toolbox_cancel_mesure();\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_toolbox_dollhouse();\r\n }\r\n }\r\n\r\n action_toolbox_mesure() {\r\n if (\r\n this.matterportService.getInteractionMode() !==\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n this.action_canceled();\r\n }\r\n\r\n this.action_toolbox_inside_view();\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_toolbox_mesure();\r\n }\r\n }\r\n\r\n action_toolbox_cancel_mesure() {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_toolbox_cancel_mesure();\r\n }\r\n }\r\n\r\n async action_update_poi(\r\n poi: POI,\r\n isValid: boolean,\r\n element: DbObjectType,\r\n ): Promise<POI> {\r\n if (this.checkMode(\"Matterport\")) {\r\n if (isValid) {\r\n const lastTag = this.matterportService.mattertagToFollow\r\n ? this.matterportService.mattertagToFollow\r\n : this.matterportService.getLastTag();\r\n if (!lastTag) {\r\n return Promise.resolve(poi);\r\n }\r\n const tagData =\r\n this.matterportService.getTagDataFromId(lastTag);\r\n if (!tagData) {\r\n return Promise.resolve(poi);\r\n }\r\n\r\n const poiMetadata = poi.metadata\r\n ? JSON.parse(poi.metadata)\r\n : {};\r\n poiMetadata.normal = tagData.getNormal();\r\n const poiInput = {\r\n id: poi.id,\r\n coordinate: tagData.getCoordinateString(),\r\n matterportSweepID: tagData.getSweepID(),\r\n metadata: JSON.stringify(poiMetadata),\r\n };\r\n const updatedPoi: POI = await this.poiService.updatePoi(\r\n poiInput,\r\n );\r\n tagData.setPoi(updatedPoi);\r\n await this.matterportService.injectHtmlInTag(\r\n poi.type!,\r\n element,\r\n lastTag\r\n );\r\n await this.matterportService.editTagStyle(lastTag, tagData);\r\n this.matterportService.goToTag(lastTag);\r\n\r\n return Promise.resolve(updatedPoi);\r\n }\r\n this.matterportService.deleteLastMattertag();\r\n return Promise.resolve(poi);\r\n }\r\n return Promise.resolve(poi);\r\n }\r\n\r\n 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 =\r\n this.matterportService.getTagDataFromId(tagData.tag);\r\n mattertagData.setObject(object, PoiType.ROOM);\r\n this.matterportService.editTagStyle(tagData.tag, mattertagData);\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(spaceID: string, model3D: string, tagService: BaseTagService, module: SpModule = SpModule.IMMO): Promise<void> {\r\n this.isLoaded = false;\r\n this.matterportService.currentSpaceID = spaceID;\r\n return this.matterportService.initSdk(tagService, module).then(async (result) => {\r\n if (result) {\r\n const { sdk } = this.matterportService;\r\n sdk.App.state.subscribe(function (appState) {\r\n // app state has changed\r\n // console.log('The current phase: ', appState.phase);\r\n if (appState.phase === sdk.App.Phase.PLAYING) {\r\n // console.log('The app is playing');\r\n this.showingViewer = true;\r\n this.viewerIsOn.next({\r\n spaceID,\r\n model3D,\r\n sweep: this.sweepToMove,\r\n rotation: this.rotationToMove,\r\n });\r\n this.dataIsLoaded.next(true);\r\n this.isLoaded = true;\r\n this.sweepToMove = null;\r\n this.rotationToMove = null;\r\n }\r\n }.bind(this));\r\n return Promise.resolve();\r\n }\r\n return Promise.reject();\r\n });\r\n }\r\n\r\n removeForbiddenSweeps(forbiddenSweeps: string[]) {\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.removeForbiddenSweeps(forbiddenSweeps);\r\n }\r\n }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { ViewerService } from '../../services/viewer.service';\n\n@Component({\n selector: 'lib-modal-switch-visit',\n templateUrl: './modal-switch-visit.component.html',\n styleUrls: ['./modal-switch-visit.component.scss']\n})\nexport class ModalSwitchVisitComponent implements OnInit {\n @Input() content: string;\n @Input() model3D: string;\n @Input() spaceID: string;\n @Input() dataToMove: {sweepToMove:string, rotation:any};\n constructor(public activeModal: NgbActiveModal, private router: Router, private viewerService: ViewerService, \n // private objectSubService: ObjectSubscriptionService\n ) {}\n\n ngOnInit(): void {}\n\n switchVisit() {\n this.activeModal.close();\n if (this.dataToMove) {\n this.viewerService.setSweepToMove(this.dataToMove.sweepToMove);\n this.viewerService.setRotationToMove(this.dataToMove.rotation);\n }\n // this.objectSubService.forceRemove = true; // we reset the tags when changing visit\n this.router.navigate([\"visit\", this.spaceID], {\n queryParams: { model3D: this.model3D, sweep: true },\n });\n }\n\n}\n","<p>modal-switch-visit works!</p>\n","import { Storage } from \"aws-amplify\";\r\nimport { Equipment } from \"../types.service\";\r\n\r\nexport const deleteFromS3 = async (path) => {\r\n await Storage.remove(path, { level: \"public\" })\r\n .then((result) => console.log(\"Successfully deleted =>\", result))\r\n .catch((error) => console.log(\"Deleting from S3 error:\", error));\r\n};\r\n\r\nexport const uploadFileToS3 = async (\r\n path: string,\r\n file: File,\r\n objectId: string | null,\r\n): Promise<string> => {\r\n const prefix = objectId ? `${objectId.slice(0, 8)}_` : \"\";\r\n return Storage.put(path + prefix + file.name, file, {\r\n progressCallback(progress) {\r\n // console.log('Uploaded : ', progress);\r\n },\r\n contentType: file.type,\r\n })\r\n .then((result: any) => {\r\n console.log(\"Success =>\", result);\r\n return result.key;\r\n })\r\n .catch((error) => {\r\n console.log(\"error =>\", error);\r\n return null;\r\n });\r\n};\r\n\r\nexport const getSignedImageUrlForEquipment = async (\r\n equip: Equipment,\r\n): Promise<string | null> => {\r\n if (!equip.photo) {\r\n return Promise.resolve(null);\r\n }\r\n return Storage.get(equip.photo, { level: \"public\" })\r\n .then((result) => {\r\n return result as string;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n return null;\r\n });\r\n \r\n};\r\n\r\nexport const getSignedImageUrlForProfile = async (\r\n profile,\r\n): Promise<string | void> => {\r\n return Storage.get(profile.avatar, { level: \"public\" })\r\n .then((result) => {\r\n return result as string;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n });\r\n};\r\n\r\nexport const getSignedImageUrlForSpace = async (\r\n space,\r\n): Promise<string | void> => {\r\n return Storage.get(space.annexes, { level: \"public\" })\r\n .then((result) => {\r\n return result as string;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n });\r\n};\r\n\r\nexport const uploadBase64Image = async (\r\n uri: string,\r\n objectId: string | null,\r\n path: string,\r\n friendlyFileName: string,\r\n): Promise<string> => {\r\n return fetch(uri)\r\n .then((res) => res.blob())\r\n .then((blob) => {\r\n const file = new File([blob], `${friendlyFileName}.jpeg`, {\r\n type: \"image/jpeg\",\r\n });\r\n return uploadFileToS3(path, file, objectId);\r\n });\r\n};\r\n\r\nexport const removeAllFilesFromFolderS3 = async (\r\n folderPath: string,\r\n): Promise<any> => {\r\n const arrayOfPromises = [];\r\n Storage.list(folderPath, { level: \"public\" })\r\n .then((res) => {\r\n Object.keys(res).map(async (key) => {\r\n const file = res[key];\r\n arrayOfPromises.push(deleteFromS3(file.key));\r\n });\r\n })\r\n .catch((error) => console.error(\"List failure\", error));\r\n return Promise.all(arrayOfPromises);\r\n};\r\n\r\nexport const listFilesInFolder = async (folderPath: string): Promise<any> => {\r\n return Storage.list(folderPath, { level: \"public\" })\r\n .then((res) => {\r\n return res;\r\n })\r\n .catch((error) => console.error(\"List failure\", error));\r\n};\r\n\r\nexport const getSignedFile = async (path): Promise<string | null> => {\r\n return Storage.get(path, { level: \"public\" })\r\n .then((result) => {\r\n return result as string;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n return null;\r\n });\r\n\r\n};\r\n\r\nexport const downloadFileAsObject = async (path): Promise<Object | void> => {\r\n return Storage.get(path, { download: true, level: \"public\" })\r\n .then((result) => {\r\n return result as Object;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n });\r\n};\r\n\r\nexport const getBufferForFileFromS3 = async (path): Promise<ArrayBuffer> => {\r\n const object = await downloadFileAsObject(path);\r\n if (object) {\r\n // @ts-ignore\r\n return new ArrayBuffer(object.Body, \"binary\");\r\n }\r\n return null;\r\n};\r\n\r\nexport const uploadJsonToS3 = async (\r\n path: string,\r\n json: string,\r\n filename: string,\r\n): Promise<string> => {\r\n return Storage.put(path + filename, json, {\r\n contentType: \"application/json\",\r\n })\r\n .then((result: any) => {\r\n console.log(\"Success =>\", result);\r\n return result.key;\r\n })\r\n .catch((error) => {\r\n console.log(\"error =>\", error);\r\n return null;\r\n });\r\n};","import { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\nimport { ModalSwitchVisitComponent } from \"./components/modal-switch-visit/modal-switch-visit.component\";\r\nimport { downloadFileAsObject } from \"./services/s3.service\";\r\nimport { EquipmentDocument, LevelStatus, Locale, Mission, PoiType, RoleStatus } from \"./types.service\";\r\n\r\nexport function getDistanceBetweenTwoPoints(startPoint, endPoint) {\r\n const dx = endPoint.x - startPoint.x;\r\n const dy = endPoint.y - startPoint.y;\r\n const dz = endPoint.z - startPoint.z;\r\n const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);\r\n return Math.round(distance * 100) / 100;\r\n}\r\n\r\nexport function poiTypeToString(type: PoiType): string {\r\n switch (type) {\r\n case PoiType.EQUIPMENT:\r\n return \"equipment\";\r\n case PoiType.TICKET:\r\n return \"ticket\";\r\n case PoiType.DATA:\r\n return \"data\";\r\n case PoiType.DESK:\r\n return \"data\";\r\n case PoiType.INFORMATION:\r\n return \"information\";\r\n case PoiType.MEASURE:\r\n return \"measure\";\r\n case PoiType.PEOPLE:\r\n return \"people\";\r\n default:\r\n return \"ticket\";\r\n }\r\n}\r\n\r\nexport function wait(timeout: number): Promise<void> {\r\n return new Promise((resolve) => {\r\n timeout = timeout || 2000;\r\n setTimeout(() => {\r\n resolve();\r\n }, timeout);\r\n });\r\n}\r\n\r\nexport const waitUntil = (condition: () => boolean) => {\r\n return new Promise<void>((resolve, reject) => {\r\n const intervalId = setInterval(() => {\r\n if (condition()) {\r\n clearInterval(intervalId);\r\n resolve();\r\n }\r\n }, 30);\r\n });\r\n};\r\n\r\nexport function enumToArray(enumerable: any) {\r\n return Object.keys(enumerable)\r\n .filter((value) => isNaN(Number(value)) === true)\r\n .map((key) => enumerable[key]);\r\n}\r\n\r\nexport function getLevelsBelow(level: LevelStatus): LevelStatus[] {\r\n const all = [\r\n LevelStatus.MINIMUM,\r\n LevelStatus.LOW,\r\n LevelStatus.MEDIUM,\r\n LevelStatus.HIGH,\r\n LevelStatus.MAXIMUM,\r\n ];\r\n switch (level) {\r\n case LevelStatus.MAXIMUM:\r\n return all;\r\n case LevelStatus.HIGH:\r\n all.splice(4, 1);\r\n return all;\r\n case LevelStatus.MEDIUM:\r\n all.splice(3, 2);\r\n return all;\r\n case LevelStatus.LOW:\r\n return [LevelStatus.MINIMUM, LevelStatus.LOW];\r\n case LevelStatus.MINIMUM:\r\n return [LevelStatus.MINIMUM];\r\n default:\r\n return [LevelStatus.MINIMUM];\r\n }\r\n}\r\n\r\nexport function getHighestLevelForMissions(missions: Mission[]): LevelStatus {\r\n let latestVisibleLevels = [LevelStatus.MINIMUM];\r\n for (const m of missions) {\r\n const visibleLevels = getLevelsBelow(m.level);\r\n if (visibleLevels.length > latestVisibleLevels.length) {\r\n latestVisibleLevels = visibleLevels;\r\n }\r\n }\r\n switch (latestVisibleLevels.length) {\r\n case 1:\r\n return LevelStatus.MINIMUM;\r\n case 2:\r\n return LevelStatus.LOW;\r\n case 3:\r\n return LevelStatus.MEDIUM;\r\n case 4:\r\n return LevelStatus.HIGH;\r\n case 5:\r\n return LevelStatus.MAXIMUM;\r\n default:\r\n return LevelStatus.MINIMUM;\r\n }\r\n}\r\n\r\nexport function getHighestRoleForMissions(missions: Mission[]): RoleStatus {\r\n let highestRole = RoleStatus.VISITOR;\r\n for (const m of missions) {\r\n if (m.role === RoleStatus.ADMIN) {\r\n return RoleStatus.ADMIN;\r\n }\r\n if (highestRole === RoleStatus.OWNER) {\r\n continue;\r\n }\r\n if (m.role === RoleStatus.OWNER) {\r\n highestRole = RoleStatus.OWNER;\r\n }\r\n if (m.role === RoleStatus.MANAGER) {\r\n highestRole = RoleStatus.MANAGER;\r\n }\r\n if (\r\n m.role === RoleStatus.SERVICE &&\r\n highestRole !== RoleStatus.MANAGER\r\n ) {\r\n highestRole = RoleStatus.SERVICE;\r\n }\r\n if (\r\n m.role === RoleStatus.OCCUPANT &&\r\n highestRole === RoleStatus.VISITOR\r\n ) {\r\n highestRole = RoleStatus.OCCUPANT;\r\n }\r\n if (m.role === RoleStatus.GUIDE_MUSEUM) {\r\n highestRole = RoleStatus.GUIDE_MUSEUM;\r\n }\r\n if (m.role === RoleStatus.VISITOR_MUSEUM) {\r\n highestRole = RoleStatus.VISITOR_MUSEUM;\r\n }\r\n }\r\n return highestRole;\r\n}\r\n\r\nexport function getRolesBelowForManager(role: RoleStatus): RoleStatus[] {\r\n const all = [\r\n RoleStatus.VISITOR,\r\n RoleStatus.OCCUPANT,\r\n RoleStatus.SERVICE,\r\n RoleStatus.MANAGER,\r\n RoleStatus.OWNER,\r\n RoleStatus.ADMIN,\r\n ];\r\n const museum = [RoleStatus.VISITOR_MUSEUM, RoleStatus.GUIDE_MUSEUM];\r\n switch (role) {\r\n case RoleStatus.ADMIN:\r\n return [...all, ...museum];\r\n case RoleStatus.OWNER:\r\n all.splice(5, 1);\r\n return all;\r\n case RoleStatus.MANAGER:\r\n all.splice(4, 2);\r\n return all;\r\n case RoleStatus.GUIDE_MUSEUM:\r\n return museum;\r\n default:\r\n return all.splice(4, 2);\r\n }\r\n}\r\n\r\nexport function filterUniqueArrayByID(arrayOfObjects: any[]): any[] {\r\n return arrayOfObjects.filter(\r\n (v, index, a) => a.findIndex((t) => t.id === v.id) === index,\r\n );\r\n}\r\n\r\nexport function removeNullKeysFromObject(object: Object) {\r\n for (const key of Object.keys(object)) {\r\n if (object[key] === null) {\r\n delete object[key];\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Test if a date has expired\r\n * @param date\r\n * @returns true if the date has expired, false otherwise\r\n */\r\n export function dateHasExpired(\r\n date: string | Date | number | null | undefined,\r\n): boolean {\r\n if (date) {\r\n return new Date(date) <= new Date();\r\n }\r\n return false;\r\n}\r\n\r\nexport function stringLocaleToEnum(locale: string): Locale {\r\n switch (locale) {\r\n case \"en\":\r\n return Locale.EN;\r\n case \"fr\":\r\n return Locale.FR;\r\n default:\r\n return Locale.EN;\r\n }\r\n}\r\n\r\n\r\nexport function getMetaForImage(url): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n\r\n img.addEventListener(\"load\", () => {\r\n resolve(img);\r\n });\r\n img.addEventListener(\"error\", () => reject());\r\n img.src = url;\r\n });\r\n}\r\n\r\nexport function sortAlphabeticallyOnName(array: { name: string }[]): any[] {\r\n return array.sort((a, b) => a.name.localeCompare(b.name));\r\n}\r\n\r\nexport function validEmail(email: string) {\r\n const re =\r\n /^(([^\\s\"(),.:;<>@[\\\\\\]]+(\\.[^\\s\"(),.:;<>@[\\\\\\]]+)*)|(\".+\"))@((\\[(?:\\d{1,3}\\.){3}\\d{1,3}])|(([\\dA-Za-z\\-]+\\.)+[A-Za-z]{2,}))$/;\r\n return re.test(email);\r\n}\r\n\r\nexport function downloadBlob(blob, filename) {\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = filename || \"download\";\r\n const clickHandler = () => {\r\n setTimeout(() => {\r\n URL.revokeObjectURL(url);\r\n a.removeEventListener(\"click\", clickHandler);\r\n }, 150);\r\n };\r\n a.addEventListener(\"click\", clickHandler, false);\r\n a.click();\r\n return a;\r\n}\r\n\r\n/*\r\n Open modal if one has to switch virtual visit\r\n*/\r\nexport function openModalForVisitSwitch(\r\n modalService: NgbModal,\r\n model3D: string,\r\n spaceID: string,\r\n dataToMove: {sweepToMove:string, rotation:any} | null = null\r\n) {\r\n const modalReference = modalService.open(ModalSwitchVisitComponent);\r\n modalReference.componentInstance.content =\r\n \"This object belongs to another 3D visit. Are you sure you want to switch the visit?\";\r\n modalReference.componentInstance.model3D = model3D;\r\n modalReference.componentInstance.spaceID = spaceID;\r\n if (dataToMove) {\r\n modalReference.componentInstance.dataToMove = dataToMove;\r\n }\r\n \r\n}\r\n\r\n/**\r\n * Return a string of a given date time in local format.\r\n * The format is determined by the current language.\r\n */\r\n export function dateTimeToLocalString(\r\n date: number | string | Date,\r\n translate?: TranslateService,\r\n mode?,\r\n): string {\r\n let lang = \"en-EN\";\r\n if (translate) {\r\n /** Get current language */\r\n lang = translate.currentLang\r\n ? translate.currentLang\r\n : translate.defaultLang;\r\n /** Transforme '_fr' to 'fr' */\r\n if (lang) {\r\n lang = lang.slice(1);\r\n }\r\n \r\n }\r\n\r\n let options: {\r\n month?;\r\n year?;\r\n day?;\r\n hour?;\r\n minute?;\r\n second?;\r\n dateStyle?;\r\n timeStyle?;\r\n weekday?;\r\n timeZone?;\r\n timeZoneName?;\r\n };\r\n switch (mode) {\r\n case \"day_numeric\":\r\n options = { day: \"numeric\" };\r\n break;\r\n case \"day\":\r\n options = { weekday: \"long\" };\r\n break;\r\n case \"date\":\r\n options = { dateStyle: \"long\" };\r\n break;\r\n case \"short_date_time\":\r\n options = {\r\n year: \"2-digit\",\r\n month: \"2-digit\",\r\n day: \"2-digit\",\r\n hour: \"2-digit\",\r\n minute: \"2-digit\",\r\n };\r\n break;\r\n case \"time\":\r\n options = { hour: \"numeric\", minute: \"numeric\" };\r\n break;\r\n case \"day_time_zone\":\r\n options = {\r\n weekday: \"long\",\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n timeZoneName: \"shortOffset\",\r\n };\r\n break;\r\n default:\r\n options = {\r\n dateStyle: \"long\",\r\n timeStyle: \"short\",\r\n };\r\n }\r\n return new Date(date).toLocaleString(lang, options);\r\n}\r\n\r\n/**\r\n * Compares two string arrays\r\n * @param array1\r\n * @param array2\r\n * @returns\r\n */\r\n export function arraysContainSameElements(\r\n array1: string[],\r\n array2: string[],\r\n): boolean {\r\n return JSON.stringify(array1) === JSON.stringify(array2);\r\n}\r\n\r\n\r\nexport function getVisitUrl(currentUrl: string): string {\r\n const path = currentUrl.split(\"/\");\r\n path.splice(3, path.length - 2);\r\n return path.join(\"/\");\r\n}\r\n\r\n/**\r\n * Extract spaceID from url when in visit 3D\r\n */\r\n export function getSpaceIDFromUrl(url: string): string {\r\n const visitUrl = getVisitUrl(url);\r\n return visitUrl.split(\"/\")[2];\r\n}\r\n\r\n/**\r\n * Download related\r\n */\r\n import FileSaver from \"file-saver\";\r\n\r\n export function downloadFile(fileUrl: string, fileName: string) {\r\n FileSaver.saveAs(fileUrl + fileName, fileName);\r\n }\r\n \r\n export function openDocument(fileUrl: string, fileName: string, id: number) {\r\n window.open(`${fileUrl + fileName}#doc=${id}`, \"_blank\", \"\");\r\n }\r\n \r\n export const downloadEquipmentDocument = async (\r\n document_: EquipmentDocument,\r\n ): Promise<Object | void> => {\r\n const signedFile = await downloadFileAsObject(document_.url);\r\n if (signedFile) {\r\n // @ts-ignore\r\n downloadBlob(signedFile.Body, document_.filename);\r\n }\r\n };\r\n\r\n export async function checkElementById(selector) {\r\n let querySelector = null;\r\n while (querySelector === null) {\r\n await rafAsync();\r\n querySelector = document.getElementById(selector);\r\n }\r\n return querySelector;\r\n}\r\n\r\nfunction rafAsync() {\r\n return new Promise((resolve) => {\r\n requestAnimationFrame(resolve); // faster than set time out\r\n });\r\n}\r\n\r\n/* @param {Array} numbers An array of numbers.\r\n * @return {Number} The calculated average (or mean) value from the specified\r\n * numbers.\r\n */\r\nexport function mean(numbers: number[]) {\r\n let total = 0;\r\n for (const number of numbers) {\r\n total += number;\r\n }\r\n return total / numbers.length;\r\n}\r\n\r\nexport function convertTimestampToLocalZone(timestamp: number): number {\r\n const selectedDate = new Date(timestamp);\r\n const localOffset = -1 * selectedDate.getTimezoneOffset() * 60000;\r\n const stamp = timestamp + localOffset;\r\n return stamp;\r\n}\r\n\r\n/**\r\n * Return string for period of time. Parameters are DateTime objects of luxon library.\r\n */\r\n export function translateDatePeriod(\r\n translateService: any,\r\n dateStartPeriod: any,\r\n dateEndPeriod: any,\r\n): string {\r\n const locale = getLocaleLong(translateService);\r\n return `${dateStartPeriod.toLocaleString({\r\n locale,\r\n month: \"long\",\r\n day: \"2-digit\",\r\n })} - ${dateEndPeriod.toLocaleString({\r\n locale,\r\n month: \"long\",\r\n day: \"2-digit\",\r\n })} `;\r\n}\r\n\r\n\r\n/**\r\n* Return local in the canonical form: \"en-GB\", \"fr-FR\"\r\n*/\r\nexport function getLocaleLong(translate: TranslateService): string {\r\n let lang = translate.currentLang\r\n ? translate.currentLang\r\n : translate.defaultLang;\r\n\r\n /** Transform '_fr' to 'fr' */\r\n lang = lang.slice(1);\r\n if (lang === \"en\") {\r\n return \"en-GB\";\r\n }\r\n return `${lang}-${lang.toUpperCase()}`;\r\n}\r\n\r\n/**\r\n * Return local in the short form: \"en\", \"fr\"\r\n */\r\n export function getLocaleShort(translate: TranslateService): string {\r\n let lang = translate.currentLang\r\n ? translate.currentLang\r\n : translate.defaultLang;\r\n\r\n /** Transform '_fr' to 'fr' */\r\n lang = lang.slice(1);\r\n return lang;\r\n}\r\n\r\n/**\r\n * Format string to lowercase, no spaces\r\n */\r\n export function stringToLowercaseNoSpaces(input: string): string {\r\n const words = input.toLowerCase().split(/\\s+/);\r\n return words.join(\"\");\r\n}\r\n\r\n/**\r\n * Test if the object === {}\r\n * @param obj object {key:value}\r\n * @returns boolean\r\n */\r\n export function isEmptyObject(object): boolean {\r\n for (const x in object) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function shuffleArray(array: any[]) {\r\n const newArray = [...array];\r\n for (let index = array.length - 1; index > 0; index--) {\r\n const indexNew = Math.floor(Math.random() * (index + 1));\r\n // eslint-disable-next-line no-param-reassign\r\n [newArray[index], newArray[indexNew]] = [\r\n newArray[indexNew],\r\n newArray[index],\r\n ];\r\n }\r\n return newArray;\r\n}\r\n\r\nexport function numberToDateString(timestamp: number): string {\r\n const jsDate = new Date(timestamp);\r\n return jsDate.toLocaleString(\"fr-FR\");\r\n}\r\n\r\nexport function durationToString(\r\n duration: number,\r\n translate: TranslateService,\r\n): string {\r\n const days = Math.floor(duration / 3600 / 24);\r\n const hours = Math.floor((duration - days * 24 * 3600) / 3600);\r\n const minutes = Math.floor((duration % 3600) / 60);\r\n const seconds = Math.floor(duration % 60);\r\n\r\n const daysString = translate.instant(\"day(s)\");\r\n const hoursString = translate.instant(\"hour(s)\");\r\n const oneHourString = translate.instant(\"hour\");\r\n const minutesString = translate.instant(\"minute(s)\");\r\n const secondsString = translate.instant(\"second(s)\");\r\n\r\n if (duration > 3600 * 24 * 7) {\r\n return `${days} ${daysString}`;\r\n }\r\n if (duration > 3600 * 24) {\r\n return `${days} ${daysString} ${hours} ${hoursString}`;\r\n }\r\n if (duration === 3600) {\r\n return `${hours} ${oneHourString}`;\r\n }\r\n if (duration > 3600) {\r\n if (minutes === 0) {\r\n return `${hours} ${hoursString}`;\r\n }\r\n return `${hours} ${hoursString} ${minutes} ${minutesString}`;\r\n }\r\n if (duration >= 60) {\r\n if (seconds === 0) {\r\n return `${minutes} ${minutesString}`;\r\n }\r\n return `${minutes} ${minutesString} ${seconds} ${secondsString}`;\r\n }\r\n return `${seconds} ${secondsString}`;\r\n}\r\n","import { Inject } from \"@angular/core\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { AWSType, Profile } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ProfileService {\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async createProfile(profile: Profile): Promise<Profile> {\r\n return this.API.__proto__.CreateProfile(profile);\r\n }\r\n\r\n async getProfile(id: string): Promise<Profile> {\r\n return this.API.__proto__.GetProfile(id);\r\n }\r\n\r\n async updateProfile(profile: any): Promise<Profile> {\r\n if (profile.id === undefined) {\r\n console.log(`an ID is required for update Profile`);\r\n return null;\r\n }\r\n return this.API.__proto__.UpdateProfile(profile);\r\n }\r\n\r\n async deleteProfile(id: string): Promise<Profile> {\t\r\n return this.API.__proto__.DeleteProfile({id:id});\r\n }\r\n\r\n async getProfileFromAWSID(userID: string): Promise<Profile> {\r\n return this.API.__proto__.ProfilesByUserID(userID).then((results) => {\r\n if (results.items.length === 0) {\r\n return null;\r\n }\r\n return results.items[0];\r\n });\r\n }\r\n\r\n async getUsersForMail(mail: string): Promise<Profile[]> {\r\n return this.API.__proto__.ListProfiles({ metadata: { contains: mail } }).then(\r\n (results) => {\r\n return results.items.filter((profile) => !profile.deletedAt);\r\n },\r\n );\r\n }\r\n\r\n async getProfilesForStatus(status: string): Promise<Profile[]> {\r\n return (\r\n await this.API.__proto__.ListProfiles({\r\n status: { eq: status },\r\n })\r\n ).items;\r\n }\r\n}","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { dateHasExpired } from \"../../helpers.service\";\r\nimport { Mission, Organisation, Profile, ProfileStatus, RoleStatus } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class MissionService {\r\n currentMissionsUpdated = new Subject<boolean>();\r\n\r\n lastExpiredMission: Mission;\r\n\r\n nextMissionToStart: Mission;\r\n\r\n currentUserID: string;\r\n\r\n API: any; //AWS\r\n\r\n constructor(\r\n // private affectationService: AffectationService,\r\n @Inject('currentAPIService') apiInjected: any\r\n ) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getMissionsFromUserID(userID: string): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsByUser(userID).then((missions) => {\r\n return missions.items.filter((mis) => !mis.deletedAt);\r\n });\r\n }\r\n\r\n async getMissionsByOrderedOrganisation(\r\n orderedOrgID: string,\r\n ): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsByOrderedOrganisation(orderedOrgID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n\r\n async getMissionsByOrganisation(orgID: string): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsByOrganisation(orgID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n\r\n async create(mission: Mission): Promise<Mission> {\r\n const updMission = await this.API.__proto__.CreateMission(mission);\r\n console.log(\"Mission created\", updMission);\r\n await this.checkIfCurrentUserMissionChanged(updMission);\r\n return updMission;\r\n }\r\n\r\n async update(mission: any): Promise<Mission> {\r\n const updMission = await this.API.__proto__.UpdateMission(mission);\r\n console.log(\"Mission updated\", updMission);\r\n await this.checkIfCurrentUserMissionChanged(updMission);\r\n return updMission;\r\n }\r\n\r\n async assertRoleForUserInOrg(\r\n user: Profile,\r\n org: Organisation,\r\n role: RoleStatus,\r\n ): Promise<boolean> {\r\n return this.getMissionsFromUserID(user.id).then((missions) => {\r\n if (missions) {\r\n const misOrg = missions.filter((mis) => {\r\n return mis.organisationID === org.id && mis.role === role;\r\n });\r\n return misOrg.length > 0;\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n async getMissionsByOrderedOrganisationBySpace(\r\n ordOrgID: string,\r\n spaceID: string,\r\n ): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsByOrderedOrganisationBySpace(ordOrgID, {\r\n eq: spaceID,\r\n }).then((mis) => mis.items);\r\n }\r\n\r\n async softDeleteMission(missionID: string): Promise<Mission> {\r\n // const hardDelete = await this.canHardDeteleMission(mission.id);\r\n // if (hardDelete) {\r\n // return this.hardDeleteMission(mission.id);\r\n // }\r\n console.log(\"Soft Deleting mission\");\r\n const missionUpd = await this.update({\r\n id: missionID,\r\n deletedAt: Date.now(),\r\n });\r\n await this.checkIfCurrentUserMissionChanged(missionUpd);\r\n return missionUpd;\r\n }\r\n\r\n async list(): Promise<Mission[]> {\r\n const mis = await this.API.__proto__.ListMissions();\r\n return mis.items.filter((m) => !m.deletedAt);\r\n }\r\n\r\n // async canHardDeteleMission(missionID: string): Promise<boolean> {\r\n // const events = (\r\n // await this.API.ListEvents({ ownerID: { eq: missionID } })\r\n // ).items;\r\n // if (events.length > 0) {\r\n // return false;\r\n // }\r\n // const comments = (\r\n // await this.API.ListComments({ ownerID: { eq: missionID } })\r\n // ).items;\r\n // if (comments.length > 0) {\r\n // return false;\r\n // }\r\n // const affectations =\r\n // await this.affectationService.getAffectationsFromMissionID(\r\n // missionID,\r\n // );\r\n // if (affectations.length > 0) {\r\n // return false;\r\n // }\r\n // return true;\r\n // }\r\n\r\n async hardDeleteMission(missionID: string): Promise<Mission> {\r\n return this.API.__proto__.DeleteMission({ id: missionID });\r\n }\r\n\r\n getActivatedMissions(missions: Mission[]): Mission[] {\r\n const activated = [];\r\n missions.map(async (mission) => {\r\n const isActivated =\r\n mission.groups && mission.groups.includes(ProfileStatus.ACTIVE);\r\n if (isActivated) {\r\n activated.push(mission);\r\n }\r\n });\r\n return activated;\r\n }\r\n\r\n async getMissionsForZone(zoneID: string): Promise<Mission[]> {\r\n return (await this.API.__proto__.MissionsByZone(zoneID)).items.filter(\r\n (mis) => !mis.deletedAt,\r\n );\r\n }\r\n\r\n async getMissionsForSpace(spaceID: string): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsBySpace(spaceID).then((missions) => missions.items)\r\n }\r\n\r\n activateMission(mis: Mission) {\r\n if (\r\n mis &&\r\n (!mis.groups || !mis.groups.includes(ProfileStatus.ACTIVE))\r\n ) {\r\n const groups = mis.groups ? mis.groups : [];\r\n groups.push(ProfileStatus.ACTIVE);\r\n this.update({ id: mis.id, groups });\r\n }\r\n }\r\n\r\n async getMissionsByTemplate(templateID: string): Promise<Mission[]> {\r\n return (await this.API.__proto__.MissionsByTemplate(templateID)).items.filter(\r\n (mis) => !mis.deletedAt,\r\n );\r\n }\r\n\r\n async getMission(missionID: string): Promise<Mission> {\r\n return this.API.__proto__.GetMission(missionID);\r\n }\r\n\r\n async getMissionsByZoneByRole(\r\n zoneID: string,\r\n role: RoleStatus,\r\n ): Promise<Mission[]> {\r\n return (\r\n await this.API.__proto__.MissionsByZoneByRole(\r\n zoneID,\r\n { eq: role },\r\n null,\r\n {deletedAt: {attributeExists: false}},\r\n 200,\r\n )\r\n ).items;\r\n }\r\n\r\n async checkIfCurrentUserMissionChanged(changedMission: Mission) {\r\n if (this.currentUserID === changedMission.userID) {\r\n this.currentMissionsUpdated.next(true);\r\n }\r\n }\r\n\r\n async instantMissionsOfCurrent(\r\n currentUserID: string,\r\n ): Promise<Mission[] | null> {\r\n this.currentUserID = currentUserID;\r\n let missions = await this.getMissionsFromUserID(currentUserID);\r\n \r\n /** Filter to keep only available missions */\r\n missions = missions.filter((mission) => {\r\n const hasExpired = dateHasExpired(mission.endDateTime);\r\n\r\n /** Update this.lastExpiredMission */\r\n if (hasExpired) {\r\n const lastExpiredDate = this.lastExpiredMission\r\n ? new Date(this.lastExpiredMission.endDateTime)\r\n : null;\r\n const dateExpired = new Date(mission.endDateTime);\r\n if (!lastExpiredDate || dateExpired > lastExpiredDate) {\r\n this.lastExpiredMission = mission;\r\n }\r\n }\r\n return !hasExpired;\r\n });\r\n\r\n if (missions.some((mis)=>mis.role === RoleStatus.VISITOR_MUSEUM) && missions.length > 0) {\r\n // workflow for VISITOR_MUSEUM\r\n return missions;\r\n }\r\n /** Keep only started missions */\r\n let nextMissionDate = null;\r\n missions = missions.filter((mission) => {\r\n const started = mission.startDateTime\r\n ? dateHasExpired(mission.startDateTime)\r\n : true;\r\n /** Update next mission to start */\r\n if (!started) {\r\n const missionDate = new Date(mission.startDateTime);\r\n if (!nextMissionDate || missionDate < nextMissionDate) {\r\n this.nextMissionToStart = mission;\r\n nextMissionDate = missionDate;\r\n }\r\n }\r\n return started;\r\n });\r\n return missions.length > 0 ? missions : null;\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Property } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class PropertyService{\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async createProperty(property: Property): Promise<Property> {\r\n return this.API.__proto__.CreateProperty(property);\r\n }\r\n\r\n async deleteProperty(propertyID: string): Promise<Property> {\r\n return this.API.__proto__.DeleteProperty({id: propertyID});\r\n }\r\n \r\n async getPropertiesForOrganisation(orgID: string): Promise<Property[]> {\r\n return this.API.__proto__.PropertiesByOrganisation(orgID).then(\r\n (props) => props.items,\r\n );\r\n }\r\n\r\n async listProperties(): Promise<Property[]> {\r\n return this.API.__proto__.ListPropertys().then((props) => props.items);\r\n }\r\n\r\n async listPropertiesForSpace(spaceID: string): Promise<Property[]> {\r\n return this.API.__proto__.ListPropertys({ spaceID: { eq: spaceID } }).then((props) => props.items);\r\n }\r\n}","import { Injectable, NgZone } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { Router } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\nimport { LevelStatus, Mission, Organisation, Profile, ProfileEntity, ProfileStatus, PropertyType, RoleStatus } from \"../types.service\";\r\nimport { enumToArray, filterUniqueArrayByID, getHighestLevelForMissions, getHighestRoleForMissions, getLevelsBelow, getRolesBelowForManager } from \"../helpers.service\";\r\nimport { ProfileService } from \"./models/profile.service\";\r\nimport { MissionService } from \"./models/mission.service\";\r\nimport { PropertyService } from \"./models/property.service\";\r\nimport { DateTime } from \"luxon\";\r\nimport { Auth } from \"aws-amplify\";\r\n\r\ninterface CreateUser {\r\n email: string;\r\n phone: string;\r\n lastName: string;\r\n firstName: string;\r\n password?: string;\r\n}\r\n\r\n/**\r\n * UserService handles user's lifecycle, from creation to deletion\r\n */\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseUserService {\r\n\r\n isChanged: Subject<boolean> = new Subject<boolean>();\r\n\r\n updating = false;\r\n\r\n managers = [\r\n RoleStatus.ADMIN,\r\n RoleStatus.MANAGER,\r\n RoleStatus.OWNER,\r\n RoleStatus.GUIDE_MUSEUM,\r\n ];\r\n\r\n currentMissions: Mission[];\r\n\r\n lastExpiredMission: Mission;\r\n\r\n nextMissionToStart: Mission;\r\n\r\n cu: ProfileEntity = null;\r\n\r\n constructor(\r\n private profileService: ProfileService,\r\n private missionService: MissionService,\r\n private propertyService: PropertyService,\r\n private router: Router,\r\n private location: Location,\r\n private ngZone: NgZone,\r\n private translate: TranslateService,\r\n ) {\r\n // this.checkConnectedAWSUser();\r\n this.missionService.currentMissionsUpdated.subscribe(async (data) => {\r\n console.log(\"current missions updated\");\r\n this.currentMissions =\r\n await this.missionService.instantMissionsOfCurrent(this.cu.id);\r\n console.log(\"user is changed emitting\");\r\n this.isChanged.next(true);\r\n });\r\n }\r\n\r\n /**\r\n * Checks if AWS user is connected and assigng it to current user (this.cu)\r\n **/\r\n async checkConnectedAWSUser() {\r\n if (!this.cu) {\r\n console.log(\"check AWS user\");\r\n let cau = null;\r\n let user = null;\r\n try {\r\n if (!this.updating) {\r\n cau = await Auth.currentAuthenticatedUser();\r\n console.log(\"connected\", cau);\r\n user = await this.current(cau);\r\n console.log(\"current of userService\", user);\r\n }\r\n } catch { }\r\n if (!user && !this.updating) {\r\n console.log(\"no user in check connected aws user\");\r\n this.router.navigate([\"auth\"]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * createUser spawns a new User, along with:\r\n * - a proper AWSCognito signup\r\n * - a Profile entry holding the AWSCognito ID\r\n * - a Mission entry holding the Organisation ID\r\n *\r\n * @see 174\r\n * @see https://docs.amplify.aws/lib/auth/emailpassword/q/platform/js#sign-up\r\n * @todo wonder if we can mash together Profile, Mission and User entries\r\n * @param u User to be created\r\n */\r\n async createUserAWSandProfile(\r\n u: {\r\n email: string;\r\n phone: string;\r\n lastName: string;\r\n firstName: string;\r\n password?: string;\r\n },\r\n prevalidated: boolean = false,\r\n ): Promise<Profile> {\r\n const attributes = {\r\n email: u.email.trim(),\r\n given_name: u.firstName,\r\n family_name: u.lastName,\r\n zoneinfo: \"fr\", // @todo deal with zoneinfo and locale\r\n locale: \"fr\",\r\n \"custom:prevalidated\": \"false\",\r\n };\r\n if (prevalidated) {\r\n attributes[\"custom:prevalidated\"] = \"true\";\r\n }\r\n // AWSCognito\r\n const password = u.password ? u.password : \"temporaryp\";\r\n let error;\r\n try {\r\n const { userSub } = await Auth.signUp({\r\n username: u.email, // username should be an email they say\r\n password,\r\n attributes,\r\n clientMetadata: {\r\n phone: u.phone,\r\n },\r\n });\r\n if (userSub) {\r\n return this.createProfile(userSub, u);\r\n }\r\n } catch (error_: any) {\r\n switch (error_.code) {\r\n case \"InvalidPasswordException\":\r\n error = \"auth.error.wrong_password\";\r\n break;\r\n case \"UserNotConfirmedException\":\r\n error = \"auth.error.user_not_confirmed\";\r\n break;\r\n case \"InvalidParameterException\":\r\n error = \"auth.error.invalid_parameter\";\r\n break;\r\n default:\r\n error = error_.message;\r\n }\r\n console.log(`AWS Sign UP error : ${error}`);\r\n }\r\n return Promise.reject(error);\r\n }\r\n\r\n async createProfile(\r\n awsUserID: string,\r\n u: CreateUser,\r\n ): Promise<Profile> {\r\n const profile = await this.profileService.createProfile({\r\n userID: awsUserID,\r\n metadata: JSON.stringify({\r\n email: u.email,\r\n phone: u.phone,\r\n lastName: u.lastName,\r\n firstName: u.firstName,\r\n }),\r\n status: ProfileStatus.WAITING_FOR_ACTIVATION,\r\n });\r\n return profile;\r\n }\r\n\r\n currentOrganisation(spaceID: string = null): Organisation {\r\n if (this.cu) {\r\n if (!spaceID) {\r\n return this.currentMissions[0].organisation;\r\n }\r\n return this.currentMission(spaceID).organisation;\r\n }\r\n return null;\r\n }\r\n\r\n async current(\r\n user,\r\n fastConnect: boolean = false,\r\n ): Promise<ProfileEntity | null> {\r\n if (!this.cu && !this.updating) {\r\n this.updating = true;\r\n this.cu = await this.userFromAWSID(user.username);\r\n if (!this.cu && user.attributes.email) {\r\n console.log(\r\n `No profile for userID 🔪 ${user.attributes.email}`,\r\n );\r\n // There's no profiles, profiles.items.length === 0\r\n // It's maybe the 🤮 case where the profile has been saved with an email\r\n // instead of an hashed id\r\n // If found, we need to replace the id in both the Profile\r\n const emailProfile = await this.userFromAWSID(\r\n user.attributes.email,\r\n );\r\n if (emailProfile) {\r\n console.log(\r\n `👏 doing the spacehip reversal email on ${user.attributes.email}`,\r\n );\r\n this.cu = await this.userFromAWSID(user.username);\r\n }\r\n }\r\n if (!this.cu) {\r\n this.updating = false;\r\n await Auth.signOut();\r\n return null;\r\n }\r\n const missions = await this.missionService.instantMissionsOfCurrent(\r\n this.cu.id\r\n );\r\n this.currentMissions = missions;\r\n let okToLogin = true;\r\n if (!fastConnect && !this.isSPAdmin()) {\r\n // check access token if not Fast connect (fast connect is for the guest connection via link(/redirect?user=))\r\n // and not SmarterPlan Admin\r\n okToLogin = await this.checkAccessToken(\r\n user.signInUserSession.accessToken.jwtToken,\r\n );\r\n }\r\n if (!okToLogin) {\r\n this.cu = null;\r\n this.currentMissions = [];\r\n this.updating = false;\r\n await Auth.signOut();\r\n return null;\r\n }\r\n await this.profileService.updateProfile({\r\n id: this.cu.id,\r\n lastConnectedAt: Date.now(),\r\n });\r\n if (!missions && this.location.path() !== \"/no-mission\") {\r\n this.ngZone.run(() => {\r\n this.router.navigate([\"/no-mission\"]);\r\n });\r\n }\r\n console.log(\"user is changed emitting\");\r\n this.isChanged.next(true);\r\n this.updating = false;\r\n }\r\n return this.cu;\r\n }\r\n\r\n async userFromAWSID(userId: string): Promise<ProfileEntity | null> {\r\n const profile = await this.profileService.getProfileFromAWSID(userId);\r\n if (profile) {\r\n return new ProfileEntity(profile);\r\n }\r\n return null;\r\n }\r\n\r\n async userFromUserID(userID: string): Promise<ProfileEntity | null> {\r\n const profile = await this.profileService.getProfile(userID);\r\n return new ProfileEntity(profile);\r\n }\r\n\r\n currentMission(spaceID: string): Mission {\r\n const mission = this.getMissionForSpace(spaceID);\r\n return mission;\r\n }\r\n\r\n isManager(spaceID: string): boolean {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return this.managers.includes(mission.role);\r\n }\r\n return false;\r\n }\r\n\r\n isService(spaceID: string): boolean {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.SERVICE;\r\n }\r\n return false;\r\n }\r\n\r\n isAdmin(spaceID: string): boolean {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.ADMIN;\r\n }\r\n return false;\r\n }\r\n\r\n isSmarterPlan(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n const spMissions = this.currentMissions.filter(\r\n (m) =>\r\n m.organisationID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" &&\r\n this.managers.includes(m.role),\r\n ); // ID of SmarterPlan\r\n return spMissions.length > 0;\r\n }\r\n\r\n isSPAdmin(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n const spMissions = this.currentMissions.filter(\r\n (m) =>\r\n m.organisationID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" &&\r\n m.role === RoleStatus.ADMIN,\r\n ); // ID of SmarterPlan\r\n return spMissions.length > 0;\r\n }\r\n\r\n getMissionForSpace(spaceID: string): Mission {\r\n if (!this.currentMissions) {\r\n return null;\r\n }\r\n return this.currentMissions.find((m) => m.spaceID === spaceID);\r\n }\r\n\r\n hasManagerRoleInAnyMission(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n return this.currentMissions.some((mis) =>\r\n this.managers.includes(mis.role),\r\n );\r\n }\r\n\r\n hasServiceRoleInAnyMission(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n return this.currentMissions.some(\r\n (mis) => mis.role === RoleStatus.SERVICE,\r\n );\r\n }\r\n\r\n hasAdminRoleInAnyMission(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n return this.currentMissions.some(\r\n (mis) => mis.role === RoleStatus.ADMIN,\r\n );\r\n }\r\n\r\n async createOrUpdateMissionForOrgWithProperty(\r\n missionInput: Mission,\r\n orgID: string,\r\n create: boolean = true,\r\n ): Promise<Mission> {\r\n const mission = await (create\r\n ? this.missionService.create(missionInput)\r\n : this.missionService.update(missionInput));\r\n\r\n if (this.managers.includes(mission.role) && mission.spaceID) {\r\n const properties =\r\n await this.propertyService.getPropertiesForOrganisation(orgID);\r\n const propertySpaceIDs = properties.map(\r\n (property_) => property_.spaceID,\r\n );\r\n if (propertySpaceIDs.includes(mission.spaceID)) {\r\n return mission;\r\n }\r\n // we delegate the rights of the space\r\n await this.propertyService.createProperty({\r\n spaceID: mission.spaceID,\r\n organisationID: orgID,\r\n type: PropertyType.SHARED,\r\n });\r\n }\r\n return mission;\r\n }\r\n\r\n async softDeleteUser(userID: string) {\r\n const missions = await this.missionService.getMissionsFromUserID(userID);\r\n if (missions.length === 0) {\r\n await this.profileService.updateProfile({ id: userID, deletedAt: Date.now() });\r\n console.log(\"Profile soft deleted\");\r\n }\r\n }\r\n /**\r\n * Checks if the Profile (by id) can be removed completely from the DB (no missions in the DB)\r\n * @param profileID\r\n * @returns boolean\r\n */\r\n async canHardDeleteUser(profileID: string): Promise<boolean> {\r\n const missions = (await this.missionService.getMissionsFromUserID(profileID));\r\n return missions.length === 0;\r\n }\r\n\r\n async hardDeleteUser(userID: string) {\r\n const deleted = await this.profileService.deleteProfile(userID);\r\n console.log(\"Profile hard deleted\");\r\n return deleted;\r\n }\r\n\r\n getManagerMissions(): Mission[] {\r\n if (!this.currentMissions) {\r\n return [];\r\n }\r\n return this.currentMissions.filter((mis) =>\r\n this.managers.includes(mis.role),\r\n );\r\n }\r\n\r\n getAvalableLevelsForCurrentUser(): LevelStatus[] {\r\n if (!this.currentMissions) {\r\n return [LevelStatus.MINIMUM];\r\n }\r\n const levels = enumToArray(LevelStatus);\r\n const highestLevel = getHighestLevelForMissions(this.currentMissions);\r\n\r\n return levels.filter((level) =>\r\n getLevelsBelow(highestLevel).includes(level),\r\n );\r\n }\r\n\r\n getAvailableRolesForCurrentUser(): RoleStatus[] {\r\n if (!this.currentMissions) {\r\n return [RoleStatus.VISITOR];\r\n }\r\n const roles = enumToArray(RoleStatus);\r\n const highestRole = getHighestRoleForMissions(this.currentMissions);\r\n return roles.filter((role) =>\r\n getRolesBelowForManager(highestRole).includes(role),\r\n );\r\n }\r\n\r\n /** Test if the user have the role given in parameter : \"roleStatus\" */\r\n isRole(roleStatus: RoleStatus): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n return this.currentMissions.some((m) => m.role === roleStatus);\r\n }\r\n\r\n isGuide(spaceID: string = null): boolean {\r\n if (spaceID) {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.GUIDE_MUSEUM;\r\n }\r\n }\r\n return this.isRole(RoleStatus.GUIDE_MUSEUM);\r\n }\r\n\r\n isMuseumVisitor(spaceID: string = null): boolean {\r\n if (spaceID) {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.VISITOR_MUSEUM;\r\n }\r\n }\r\n return this.isRole(RoleStatus.VISITOR_MUSEUM);\r\n }\r\n\r\n isOccupant(): boolean {\r\n return this.isRole(RoleStatus.OCCUPANT);\r\n }\r\n\r\n isVisitor(spaceID: string = null): boolean {\r\n if (spaceID) {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.VISITOR;\r\n }\r\n }\r\n return this.isRole(RoleStatus.VISITOR);\r\n }\r\n\r\n isMuseumUser(spaceID: string = null): boolean {\r\n return this.isGuide(spaceID) || this.isMuseumVisitor(spaceID);\r\n }\r\n\r\n hasOnlyMuseumRole(): boolean {\r\n if (this.currentMissions) {\r\n return this.currentMissions.every(\r\n (m) =>\r\n m.role === RoleStatus.GUIDE_MUSEUM ||\r\n m.role === RoleStatus.VISITOR_MUSEUM,\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n async profileForMail(mail: string): Promise<Profile> {\r\n const usersWithMail = await this.profileService.getUsersForMail(mail);\r\n return usersWithMail.length > 0 ? usersWithMail[0] : null;\r\n }\r\n\r\n currentOrderedOrgList(): Organisation[] {\r\n if (!this.currentMissions) {\r\n return [];\r\n }\r\n const orderedOrgList = this.currentMissions.map(\r\n (mis) => mis.orderedOrganisation,\r\n );\r\n return filterUniqueArrayByID(orderedOrgList);\r\n }\r\n\r\n userHasAccessToAllZonesInSpace(spaceID: string): boolean {\r\n const missionsForSpace = this.currentMissions.filter(\r\n (mis) => mis.spaceID === spaceID,\r\n );\r\n return missionsForSpace.some(\r\n (mission) =>\r\n !mission.zoneID || (mission.zone && !mission.zone.parentID),\r\n );\r\n }\r\n\r\n async logoutCurrentAndSignOutAuth() {\r\n await this.profileService.updateProfile({\r\n id: this.cu.id,\r\n token: null,\r\n });\r\n this.cu = null;\r\n this.currentMissions = null;\r\n this.isChanged.next(false);\r\n await Auth.signOut();\r\n }\r\n\r\n async logoutCurrentWihtoutAuth() {\r\n await this.profileService.updateProfile({\r\n id: this.cu.id,\r\n token: null,\r\n });\r\n this.cu = null;\r\n this.currentMissions = null;\r\n this.isChanged.next(false);\r\n }\r\n\r\n async checkAccessToken(jwtToken: string): Promise<boolean> {\r\n const now = DateTime.local();\r\n // console.log(\"now\", now);\r\n // console.log(\"in one hour\", now.plus({ hours: 1 }).toMillis());\r\n if (this.cu.token && this.cu.tokenExpiredAt > now.toMillis()) {\r\n // check token\r\n if (this.cu.token === jwtToken) {\r\n console.log(\"same aws token\");\r\n return true;\r\n }\r\n alert(this.translate.instant(\"auth.error.activeToken\"));\r\n return false;\r\n }\r\n await this.profileService.updateProfile({\r\n id: this.cu.id,\r\n tokenExpiredAt: now.plus({ minutes: 5 }).toMillis(),\r\n token: jwtToken,\r\n status: ProfileStatus.ACTIVE,\r\n });\r\n return true;\r\n }\r\n\r\n async clearUserToken(id) {\r\n await this.profileService.updateProfile({\r\n id: id,\r\n token: null,\r\n });\r\n }\r\n\r\n updateCurrentUser(profile: Profile) {\r\n this.cu = new ProfileEntity(profile);\r\n this.isChanged.next(true);\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { DbObjectType, Zone } from \"../../types.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ZoneService {\r\n API: any; //AWS APIService\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any, private userService: BaseUserService) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getZonesBySpace(spaceID: string): Promise<Array<Zone>> {\r\n const list: Zone[] = [];\r\n if (this.API.__proto__.hasOwnProperty('ZonesBySpace')) {\r\n const zones = await this.API.__proto__.ZonesBySpace(spaceID);\r\n if (zones) {\r\n for (const zone of zones.items) {\r\n const zoneObject = { ...zone } as Zone;\r\n zoneObject.virtual = this.zoneIsVirtual(zone);\r\n list.push(zoneObject);\r\n }\r\n }\r\n return list;\r\n } else {\r\n throw new Error('ZonesBySpace not implemented');\r\n }\r\n \r\n }\r\n\r\n async getZonesBySpaceForUser(spaceID: string): Promise<Zone[]> {\r\n const missionForLocation = this.userService.currentMission(spaceID);\r\n const list = [];\r\n if (missionForLocation && missionForLocation.zoneID) {\r\n const allowedZone = await this.getZone(missionForLocation.zoneID);\r\n allowedZone.virtual = this.zoneIsVirtual(allowedZone);\r\n if (allowedZone.parent) {\r\n // list.push(allowedZone.parent);\r\n } else {\r\n // the whole building is authorized\r\n return this.getZonesBySpace(spaceID);\r\n }\r\n list.push(allowedZone);\r\n const children = await this.API.ListZones({\r\n parentID: { eq: allowedZone.id },\r\n });\r\n if (children.items.length > 0) {\r\n for (const child of children.items) {\r\n const childZone = { ...child } as Zone;\r\n childZone.virtual = this.zoneIsVirtual(child);\r\n list.push(childZone);\r\n }\r\n }\r\n } else {\r\n return this.getZonesBySpace(spaceID);\r\n }\r\n return list;\r\n }\r\n\r\n async filterZonesIDsForUser(zones: Zone[]): Promise<Zone[]> {\r\n const { spaceID } = zones[0];\r\n const zoneIDs = new Set(zones.map((zone) => zone.id));\r\n const allowedZones = await this.getZonesBySpaceForUser(spaceID);\r\n const filteredZones = allowedZones.filter((zone) =>\r\n zoneIDs.has(zone.id),\r\n );\r\n return filteredZones;\r\n }\r\n\r\n async deleteZone(zoneID: string): Promise<Zone> {\r\n return this.API.__proto__.DeleteZone({ id: zoneID });\r\n }\r\n\r\n async getZonesForSweepForSpace(\r\n sweepID: string,\r\n spaceID: string,\r\n ): Promise<Zone[]> {\r\n const zonesSpace = (await this.API.__proto__.ZonesBySpace(spaceID)).items;\r\n return zonesSpace.filter(\r\n (zone) => zone.sweepIDs && zone.sweepIDs.includes(sweepID),\r\n );\r\n }\r\n\r\n // // eslint-disable-next-line class-methods-use-this\r\n sortZonesFromChildToParent(zonesToSort: Zone[]) {\r\n // get default\r\n const defaultZone = zonesToSort.find((z) => !z.parentID);\r\n if (defaultZone) {\r\n const indexOf = zonesToSort.indexOf(defaultZone);\r\n zonesToSort.splice(indexOf, 1);\r\n }\r\n const zones = zonesToSort.sort((a, b) => {\r\n if (a.parentID === b.id) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n // so far by number of navigation points in them\r\n // const zones = zonesToSort.sort(\r\n // (a, b) => a.navigations.items.length - b.navigations.items.length,\r\n // );\r\n if (defaultZone) {\r\n zones.push(defaultZone);\r\n }\r\n return zones;\r\n }\r\n\r\n async getZonesForObject(\r\n object: DbObjectType,\r\n ): Promise<Zone[]> {\r\n if (object.pois.items && object.pois.items.length > 0) {\r\n const [poi] = object.pois.items;\r\n if (poi.matterportSweepID) {\r\n const zones = await this.getZonesForSweepForSpace(\r\n poi.matterportSweepID,\r\n object.spaceID,\r\n );\r\n return zones;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async createVirtualZone(zoneInput: Zone): Promise<Zone> {\r\n zoneInput.sweepIDs = [];\r\n const zone = await this.API.__proto__.CreateZone(zoneInput);\r\n console.log(\"virtual zone created\", zone);\r\n return zone;\r\n }\r\n\r\n zoneIsVirtual(zone: Zone): boolean {\r\n if (!zone.sweepIDs) {\r\n return true;\r\n }\r\n if (\r\n (zone.tags && zone.tags.includes(\"virtual\")) ||\r\n zone.sweepIDs.length === 0\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n async getModel3DForZone(zoneID: string): Promise<string> {\r\n const zone = await this.API.__proto__.GetZone(zoneID);\r\n if (zone.nodeIDs) {\r\n const node = await this.API.__proto__.GetNode(zone.nodeIDs[0]);\r\n return node.model3D;\r\n }\r\n return null;\r\n }\r\n\r\n async getZone(zoneID: string): Promise<Zone> {\r\n return this.API.__proto__.GetZone(zoneID);\r\n }\r\n\r\n async getDefaultZoneForSpace(spaceID: string): Promise<Zone> {\r\n return this.getZonesBySpace(spaceID).then(async (zones) => {\r\n const zonesBuilding = zones.filter(\r\n (zone) => zone.layer && zone.layer.name === \"BUILDING\",\r\n );\r\n if (zonesBuilding.length === 1) {\r\n return zonesBuilding[0];\r\n }\r\n const parentZone = zones.find((zone) => !zone.parentID);\r\n return parentZone;\r\n });\r\n }\r\n\r\n async create(input: Zone): Promise<Zone> {\r\n return this.API.__proto__.CreateZone(input);\r\n }\r\n\r\n // async getSortedZonesForSweepForUser(\r\n // sweep: string,\r\n // spaceID: string,\r\n // ): Promise<Zone[]> {\r\n // if (!spaceID) {\r\n // return [];\r\n // }\r\n // const zones = await this.getZonesForSweepForSpace(sweep, spaceID);\r\n // if (zones.length === 0) {\r\n // return [];\r\n // }\r\n // const filteredZones = await this.filterZonesIDsForUser(zones);\r\n // if (filteredZones.length > 0) {\r\n // let zonesSorted = this.sortZonesFromChildToParent(filteredZones);\r\n // zonesSorted = zonesSorted.filter((zone) => zone !== undefined);\r\n // return zonesSorted;\r\n // }\r\n // return [];\r\n // }\r\n\r\n async updateZone(input: any): Promise<Zone> {\r\n return this.API.__proto__.UpdateZone(input);\r\n }\r\n\r\n async getZonesForNodeForSpace(\r\n nodeID: string,\r\n spaceID: string,\r\n ): Promise<Zone[]> {\r\n return this.API.__proto__.ZonesBySpace(spaceID).then(async (zones) => {\r\n const filteredZones = zones.items.filter(\r\n (zone) => zone.nodeIDs && zone.nodeIDs.includes(nodeID),\r\n );\r\n return filteredZones;\r\n });\r\n }\r\n}\r\n","/* eslint-disable no-case-declarations */\r\n/* eslint-disable no-await-in-loop */\r\n/* eslint-disable guard-for-in */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Subject, Subscription } from \"rxjs\";\r\nimport { getLevelsBelow, getHighestLevelForMissions, getHighestRoleForMissions, filterUniqueArrayByID } from \"../helpers.service\";\r\nimport { Zone, Equipment, LevelStatus, Measurement, Mission, Organisation, PoiType, ProfileEntity, RoleStatus, Space, Ticket, DbObjectType, Feature, Comment, VisitTemplate } from \"../types.service\";\r\nimport { PoiService } from \"./models/poi.service\";\r\nimport { ZoneService } from \"./models/zone.service\";\r\nimport { BaseUserService } from \"./user.service\";\r\nenum FilterType {\r\n DOMAIN = \"DOMAIN\",\r\n LEVEL = \"LEVEL\",\r\n ROLE = \"ROLE\",\r\n ZONE = \"ZONE\",\r\n SPACE = \"SPACE\",\r\n HASHTAG = \"HASHTAG\",\r\n}\r\nimport levenshtein from 'js-levenshtein';\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class FilterService {\r\n private updateDateFilter: Subject<Date[]> = new Subject();\r\n\r\n public currentDateFilter: Date[];\r\n\r\n constructor(\r\n private userService: BaseUserService,\r\n private zoneService: ZoneService,\r\n private poiService: PoiService,\r\n ) {}\r\n\r\n filterTicketsByDomain(ticketsToFilter: Ticket[], domain: string) {\r\n return ticketsToFilter.filter((tic) => tic.domainID === domain);\r\n }\r\n\r\n filterObjectsByLevel(objectsToFilter: any[], level: LevelStatus): any[] {\r\n const visibleLevels = getLevelsBelow(level);\r\n const filtered = objectsToFilter.filter((tic) =>\r\n visibleLevels.includes(tic.level),\r\n );\r\n return filtered;\r\n }\r\n\r\n filterTicketsForMission(\r\n ticketsToFilter: Ticket[],\r\n mission: Mission,\r\n ): Ticket[] {\r\n const managerRoles: RoleStatus[] = [\r\n RoleStatus.MANAGER,\r\n RoleStatus.ADMIN,\r\n RoleStatus.OWNER,\r\n ];\r\n if (!managerRoles.includes(mission.role)) {\r\n if (mission.role === RoleStatus.SERVICE) {\r\n // SERVICE can see tickets to which he is assigned\r\n const ticketsAssigned = [];\r\n for (const t of ticketsToFilter) {\r\n if (t.assignees.items.length > 0) {\r\n for (const assignment of t.assignees.items) {\r\n if (assignment.missionID === mission.id) {\r\n ticketsAssigned.push(t);\r\n }\r\n }\r\n }\r\n }\r\n return ticketsAssigned;\r\n }\r\n // OCCUPANT and VISITOR can see only tickets that they created\r\n return ticketsToFilter.filter((ticket) => {\r\n return ticket.ownerMissionID === mission.id;\r\n });\r\n }\r\n return ticketsToFilter;\r\n }\r\n\r\n getFiltersForRole(role: RoleStatus): FilterType[] {\r\n switch (role) {\r\n case RoleStatus.ADMIN:\r\n return [FilterType.LEVEL];\r\n case RoleStatus.MANAGER:\r\n return [FilterType.ZONE, FilterType.LEVEL];\r\n case RoleStatus.OWNER:\r\n return [FilterType.ZONE, FilterType.LEVEL];\r\n case RoleStatus.SERVICE:\r\n return [\r\n // FilterType.ZONE,\r\n // FilterType.LEVEL,\r\n // FilterType.DOMAIN,\r\n FilterType.ROLE, // that is the most severe filter\r\n ];\r\n case RoleStatus.OCCUPANT:\r\n return [\r\n FilterType.ZONE,\r\n FilterType.DOMAIN,\r\n FilterType.ROLE,\r\n FilterType.LEVEL,\r\n FilterType.HASHTAG,\r\n ];\r\n case RoleStatus.VISITOR:\r\n return [\r\n FilterType.ZONE,\r\n FilterType.LEVEL,\r\n FilterType.DOMAIN,\r\n FilterType.ROLE,\r\n FilterType.HASHTAG,\r\n ];\r\n case RoleStatus.VISITOR_MUSEUM:\r\n return [FilterType.ZONE, FilterType.LEVEL, FilterType.HASHTAG];\r\n case RoleStatus.GUIDE_MUSEUM:\r\n return [FilterType.LEVEL];\r\n default:\r\n return [FilterType.LEVEL];\r\n }\r\n }\r\n\r\n async filterTicketsForCurrentUserInSpace(\r\n tickets: Ticket[],\r\n spaceID: string,\r\n ): Promise<Ticket[]> {\r\n const finalTickets: Ticket[] = [];\r\n let domFiltered: Ticket[] = tickets;\r\n let roleFiltered: Ticket[] = tickets;\r\n let levelFiltered: Ticket[] = tickets;\r\n let zoneFiltered: Ticket[] = tickets;\r\n const missions = this.userService.currentMissions;\r\n if (missions) {\r\n const currentSpaceMissions = missions.filter(\r\n (m) => m.spaceID === spaceID,\r\n );\r\n if (currentSpaceMissions.length > 0) {\r\n const highestLelel =\r\n getHighestLevelForMissions(currentSpaceMissions);\r\n const highestRole =\r\n getHighestRoleForMissions(currentSpaceMissions);\r\n // console.log(\"Highest level: \", highestLelel, \", Highest Role: \", highestRole)\r\n\r\n const filters = this.getFiltersForRole(highestRole);\r\n for (const filter of filters) {\r\n if (filter === FilterType.DOMAIN) {\r\n let domains: string[] = [];\r\n for (const m of currentSpaceMissions) {\r\n if (m.domains) {\r\n domains = [...domains, ...m.domains];\r\n }\r\n }\r\n let allDomainsFiltered = [];\r\n for (const d of domains) {\r\n const currentDomFiltered =\r\n this.filterTicketsByDomain(tickets, d);\r\n allDomainsFiltered = [\r\n ...allDomainsFiltered,\r\n ...currentDomFiltered,\r\n ];\r\n }\r\n domFiltered = allDomainsFiltered;\r\n }\r\n if (filter === FilterType.ROLE) {\r\n const highestRoleMission = currentSpaceMissions.find(\r\n (m) => m.role === highestRole,\r\n );\r\n roleFiltered = this.filterTicketsForMission(\r\n tickets,\r\n highestRoleMission,\r\n );\r\n }\r\n\r\n if (filter === FilterType.LEVEL) {\r\n levelFiltered = this.filterObjectsByLevel(\r\n tickets,\r\n highestLelel,\r\n );\r\n }\r\n\r\n if (filter === FilterType.ZONE) {\r\n zoneFiltered = await this.applyZoneFilterForMissions(\r\n currentSpaceMissions,\r\n tickets,\r\n );\r\n }\r\n }\r\n // keep only tickets present in all filtered arrays\r\n // console.log(domFiltered);\r\n // console.log(roleFiltered);\r\n // console.log(levelFiltered);\r\n // console.log(zoneFiltered);\r\n for (const tic of levelFiltered) {\r\n if (\r\n domFiltered.includes(tic) &&\r\n roleFiltered.includes(tic) &&\r\n zoneFiltered.includes(tic)\r\n ) {\r\n finalTickets.push(tic);\r\n }\r\n }\r\n }\r\n }\r\n // console.log(finalTickets);\r\n return finalTickets;\r\n }\r\n\r\n subscribeToDataFilterUpdate(\r\n next?: (value: any) => void,\r\n error?: (error: any) => void,\r\n complete?: () => void,\r\n ): Subscription {\r\n const s = this.updateDateFilter.subscribe(next, error, complete);\r\n return s;\r\n }\r\n\r\n dateFilterUpdated(dateRange: Date[] | null) {\r\n this.currentDateFilter = dateRange;\r\n this.updateDateFilter.next(dateRange);\r\n }\r\n\r\n filterObjectsForDateRange(objects: any[], dateRange: Date[]): any[] {\r\n return objects.filter((object) => {\r\n const createdAtDate = new Date(object.createdAt);\r\n return (\r\n createdAtDate >= dateRange[0] && createdAtDate <= dateRange[1]\r\n );\r\n });\r\n }\r\n\r\n filterMeasurementsForDateRange(\r\n measurements: Measurement[],\r\n dateRange: Date[],\r\n ): Measurement[] {\r\n return measurements.filter((measure) => {\r\n const createdAtDate = new Date(measure.comment.createdAt);\r\n return (\r\n createdAtDate >= dateRange[0] && createdAtDate <= dateRange[1]\r\n );\r\n });\r\n }\r\n\r\n async filterObjectsForZone(\r\n objects: any[],\r\n zoneID: string = null,\r\n zone: Zone = null,\r\n ): Promise<any[]> {\r\n const filteredObjects = [];\r\n await Promise.all(\r\n objects.map(async (object) => {\r\n const [poi] = object.pois.items;\r\n if (poi && zone) {\r\n if (zone.sweepIDs && zone.sweepIDs.includes(poi.matterportSweepID)) {\r\n if (this.poiService.poiIsVirtual(poi) && zone.layer && zone.layer.name === \"FLOOR\" ) {\r\n // we include in Floor zone only\r\n filteredObjects.push(object);\r\n }\r\n if (!this.poiService.poiIsVirtual(poi)) {\r\n filteredObjects.push(object);\r\n }\r\n }\r\n }\r\n if (poi && !zone && zoneID) {\r\n const zones = await this.zoneService.getZonesForObject(\r\n object,\r\n );\r\n if (\r\n zones &&\r\n zones.some(\r\n (zone_) =>\r\n zone_.id === zoneID ||\r\n zone_.parentID === zoneID,\r\n )\r\n ) {\r\n filteredObjects.push(object);\r\n }\r\n }\r\n }),\r\n );\r\n return filteredObjects;\r\n }\r\n\r\n filterEquipmentsByDomainList(\r\n equipments: Equipment[],\r\n domainIDList: string[],\r\n ): Equipment[] {\r\n let filtered = [];\r\n const filteredByDomain = equipments.filter((equip) =>\r\n domainIDList.includes(equip.domainID),\r\n );\r\n filtered = [...filtered, ...filteredByDomain];\r\n const filteredByParentDomain = equipments.filter(\r\n (equip) =>\r\n equip.domain &&\r\n equip.domain.parentID &&\r\n domainIDList.includes(equip.domain.parentID),\r\n );\r\n filtered = [...filtered, ...filteredByParentDomain];\r\n return filterUniqueArrayByID(filtered);\r\n }\r\n\r\n filterEquipmentsForTerm(equips: Equipment[], term: string): Equipment[] {\r\n // filter domains\r\n let byDomain = equips.filter((eq) => {\r\n if (eq.domain && eq.domain.name) {\r\n const normalizedDomain = eq.domain.name.toLowerCase();\r\n const lev = levenshtein(normalizedDomain, term);\r\n return lev <= 2 || normalizedDomain.includes(term);\r\n }\r\n return false;\r\n });\r\n const byParentDomain = equips.filter((eq) => {\r\n if (eq.domain && eq.domain.parentID) {\r\n const normalizedParent = eq.domain.parent.name.toLowerCase();\r\n const lev = levenshtein(normalizedParent, term);\r\n return lev <= 2 || normalizedParent.includes(term);\r\n }\r\n return false;\r\n });\r\n byDomain = [...byDomain, ...byParentDomain];\r\n // filter name\r\n let byName = [];\r\n const terms = term.split(\" \").filter((token) => token.length > 2);\r\n for (const eq of equips) {\r\n const words = eq.name\r\n .toLowerCase()\r\n .split(\" \")\r\n .filter((token) => token.length > 2);\r\n const matched = [];\r\n for (const token of terms) {\r\n for (const word of words) {\r\n if (levenshtein(token, word) <= 1) {\r\n matched.push(true);\r\n break;\r\n }\r\n }\r\n }\r\n if (matched.length === terms.length) {\r\n byName.push(eq);\r\n }\r\n }\r\n\r\n const byNameSimple = equips.filter((eq) =>\r\n eq.name.toLowerCase().includes(term),\r\n );\r\n byName = [...byName, ...byNameSimple];\r\n // by serial number\r\n const bySerialNumber = equips.filter(\r\n (eq) => eq.serialNumber && eq.serialNumber.toLowerCase() === term,\r\n );\r\n const result = [...byDomain, ...byName, ...bySerialNumber];\r\n return filterUniqueArrayByID(result);\r\n }\r\n\r\n filterTicketsForTerm(tickets: Ticket[], term: string): Ticket[] {\r\n // filter term in title and description\r\n const byTitle = this.filterObjectsForTerm(tickets, term);\r\n // by equipment\r\n const byEquipment = tickets.filter(\r\n (ticket) =>\r\n ticket.equipments &&\r\n this.filterEquipmentsForTerm(ticket.equipments, term).length >\r\n 0,\r\n );\r\n return filterUniqueArrayByID([...byTitle, ...byEquipment]);\r\n }\r\n\r\n filterLocationsForTerm(locations: Space[], term: string): Space[] {\r\n // by name\r\n const byName = locations.filter((loc) =>\r\n loc.name.toLowerCase().includes(term),\r\n );\r\n // by address\r\n const byAddress = locations.filter((loc) =>\r\n loc.addresses.toLowerCase().includes(term),\r\n );\r\n return filterUniqueArrayByID([...byName, ...byAddress]);\r\n }\r\n\r\n filterOrganisationsForTerm(\r\n orgs: Organisation[],\r\n term: string,\r\n ): Organisation[] {\r\n const byName = orgs.filter((org) => {\r\n const words = org.name.toLowerCase().split(\" \");\r\n return (\r\n words.some(\r\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\r\n ) || org.name.toLowerCase().includes(term)\r\n );\r\n });\r\n return byName;\r\n }\r\n\r\n filterUsersForTerm(users: ProfileEntity[], term: string) {\r\n const byName = users.filter((user) => {\r\n const words = user.displayName.toLowerCase().split(\" \");\r\n return (\r\n words.some(\r\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\r\n ) || user.displayName.toLowerCase().includes(term)\r\n );\r\n });\r\n return byName;\r\n }\r\n\r\n async filterFeaturesForCurrentUserInSpace(\r\n features: Feature[],\r\n spaceID: string,\r\n ): Promise<Feature[]> {\r\n const finalFeatures: Feature[] = [];\r\n let levelFiltered: Feature[] = features;\r\n let zoneFiltered: Feature[] = features;\r\n let hashtagFiltered: Feature[] = features;\r\n const missions = this.userService.currentMissions;\r\n if (missions) {\r\n const currentSpaceMissions = missions.filter(\r\n (m) => m.spaceID === spaceID,\r\n );\r\n if (currentSpaceMissions.length > 0) {\r\n const highestLelel =\r\n getHighestLevelForMissions(currentSpaceMissions);\r\n const highestRole =\r\n getHighestRoleForMissions(currentSpaceMissions);\r\n\r\n const filters = this.getFiltersForRole(highestRole);\r\n for (const filter of filters) {\r\n if (filter === FilterType.LEVEL) {\r\n levelFiltered = this.filterObjectsByLevel(\r\n features,\r\n highestLelel,\r\n );\r\n }\r\n if (filter === FilterType.ZONE) {\r\n zoneFiltered = await this.applyZoneFilterForMissions(\r\n currentSpaceMissions,\r\n features,\r\n );\r\n }\r\n if (filter === FilterType.HASHTAG) {\r\n hashtagFiltered =\r\n this.filterFeaturesByHashtagsAndLocale(\r\n currentSpaceMissions,\r\n features,\r\n );\r\n }\r\n }\r\n for (const feature of levelFiltered) {\r\n if (\r\n hashtagFiltered.includes(feature) &&\r\n zoneFiltered.includes(feature)\r\n ) {\r\n finalFeatures.push(feature);\r\n }\r\n }\r\n }\r\n }\r\n return finalFeatures;\r\n }\r\n\r\n filterFeaturesForTerm(features: Feature[], term: string): Feature[] {\r\n // filter term in title\r\n const byTitle = this.filterObjectsForTerm(features, term);\r\n // by comments\r\n const byComment = features.filter(\r\n (feature) =>\r\n this.filterObjectsForTerm(feature.comments.items, term).length >\r\n 0,\r\n );\r\n return filterUniqueArrayByID([...byTitle, ...byComment]);\r\n }\r\n\r\n /**\r\n *\r\n * @param objects Array of Comments, Tickets, Features. Obligatory proporties: title, description\r\n * @param term string\r\n */\r\n filterObjectsForTerm(objects: any[], term: string): any[] {\r\n // filter term in title\r\n const byTitle = objects.filter((feature) => {\r\n const words = feature.title.toLowerCase().split(\" \");\r\n return (\r\n words.some(\r\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\r\n ) || feature.title.toLowerCase().includes(term)\r\n );\r\n });\r\n // term present in description\r\n const byDescription = objects.filter(\r\n (feature) =>\r\n feature.description &&\r\n feature.description.toLowerCase().includes(term),\r\n );\r\n return filterUniqueArrayByID([...byTitle, ...byDescription]);\r\n }\r\n\r\n filterMissionByStartTimeDateForDateRange(\r\n missions: any[],\r\n dateRange: Date[],\r\n ): any[] {\r\n return missions.filter((mission) => {\r\n const startDateTime = new Date(mission.startDateTime);\r\n return (\r\n startDateTime >= dateRange[0] && startDateTime <= dateRange[1]\r\n );\r\n });\r\n }\r\n\r\n async applyZoneFilterForMissions(\r\n currentSpaceMissions: Mission[],\r\n objects: any[],\r\n ): Promise<any[]> {\r\n const allowedZones = [];\r\n for (const mission of currentSpaceMissions) {\r\n if (mission.zoneID) {\r\n allowedZones.push(mission.zoneID);\r\n }\r\n }\r\n if (allowedZones.length === currentSpaceMissions.length) {\r\n let allZoneFiltered = [];\r\n await Promise.all(\r\n allowedZones.map(async (zoneID) => {\r\n const currentZoneFiltered = await this.filterObjectsForZone(\r\n objects,\r\n zoneID,\r\n );\r\n allZoneFiltered = [\r\n ...allZoneFiltered,\r\n ...currentZoneFiltered,\r\n ];\r\n }),\r\n );\r\n return filterUniqueArrayByID(allZoneFiltered);\r\n }\r\n return objects;\r\n }\r\n\r\n async filterEquipmentsForCurrentUserInSpace(\r\n spaceID: string,\r\n equips: Equipment[],\r\n ): Promise<Equipment[]> {\r\n const finalEquips: Equipment[] = [];\r\n let domFiltered: Equipment[] = equips;\r\n const roleFiltered: Equipment[] = equips;\r\n const levelFiltered: Equipment[] = equips;\r\n let zoneFiltered: Equipment[] = equips;\r\n const missions = this.userService.currentMissions;\r\n if (missions) {\r\n const currentSpaceMissions = missions.filter(\r\n (m) => m.spaceID === spaceID,\r\n );\r\n if (currentSpaceMissions.length > 0) {\r\n const highestLelel =\r\n getHighestLevelForMissions(currentSpaceMissions);\r\n const highestRole =\r\n getHighestRoleForMissions(currentSpaceMissions);\r\n // console.log(\"Highest level: \", highestLelel, \", Highest Role: \", highestRole)\r\n\r\n const filters = this.getFiltersForRole(highestRole);\r\n for (const filter of filters) {\r\n if (filter === FilterType.DOMAIN) {\r\n let domains: string[] = [];\r\n for (const m of currentSpaceMissions) {\r\n if (m.domains) {\r\n domains = [...domains, ...m.domains];\r\n }\r\n }\r\n let allDomainsFiltered = [];\r\n const currentDomFiltered =\r\n this.filterEquipmentsByDomainList(equips, domains);\r\n allDomainsFiltered = [\r\n ...allDomainsFiltered,\r\n ...currentDomFiltered,\r\n ];\r\n domFiltered = allDomainsFiltered;\r\n }\r\n if (filter === FilterType.ROLE) {\r\n // const highestRoleMission = currentSpaceMissions.find(\r\n // (m) => m.role === highestRole,\r\n // );\r\n // TODO\r\n }\r\n\r\n if (filter === FilterType.LEVEL) {\r\n // TODO, equipment does not have level\r\n }\r\n\r\n if (filter === FilterType.ZONE) {\r\n zoneFiltered = await this.applyZoneFilterForMissions(\r\n currentSpaceMissions,\r\n equips,\r\n );\r\n }\r\n }\r\n for (const tic of levelFiltered) {\r\n if (\r\n domFiltered.includes(tic) &&\r\n roleFiltered.includes(tic) &&\r\n zoneFiltered.includes(tic)\r\n ) {\r\n finalEquips.push(tic);\r\n }\r\n }\r\n }\r\n }\r\n return finalEquips;\r\n }\r\n\r\n async filterMeasurementsForCurrentUserInSpace(\r\n spaceID: string,\r\n comments: Comment[],\r\n ): Promise<Comment[]> {\r\n let finalMeasurements: Comment[] = [];\r\n let zoneFiltered: Comment[] = comments;\r\n const missions = this.userService.currentMissions;\r\n if (missions) {\r\n const currentSpaceMissions = missions.filter(\r\n (m) => m.spaceID === spaceID,\r\n );\r\n if (currentSpaceMissions.length > 0) {\r\n const highestRole =\r\n getHighestRoleForMissions(currentSpaceMissions);\r\n\r\n const filters = this.getFiltersForRole(highestRole);\r\n for (const filter of filters) {\r\n if (filter === FilterType.ZONE) {\r\n zoneFiltered = await this.applyZoneFilterForMissions(\r\n currentSpaceMissions,\r\n comments,\r\n );\r\n }\r\n }\r\n finalMeasurements = zoneFiltered;\r\n }\r\n }\r\n return finalMeasurements;\r\n }\r\n\r\n async isObjectAllowedForUserInSpace(\r\n object: Object,\r\n spaceID: string,\r\n ): Promise<boolean> {\r\n const mission = this.userService.currentMission(spaceID);\r\n const filters = this.getFiltersForRole(mission.role);\r\n for (const filter of filters) {\r\n if (\r\n filter === FilterType.LEVEL &&\r\n Object.prototype.hasOwnProperty.call(object, \"level\")\r\n ) {\r\n const levelFiltered = this.filterObjectsByLevel(\r\n [object],\r\n mission.level,\r\n );\r\n if (levelFiltered.length === 0) {\r\n return false;\r\n }\r\n }\r\n if (filter === FilterType.ZONE) {\r\n const zoneFiltered = await this.applyZoneFilterForMissions(\r\n [mission],\r\n [object],\r\n );\r\n if (zoneFiltered.length === 0) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n filterTemplatesForTerm(missions: Mission[], term: string): Mission[] {\r\n // term present in description\r\n const byDescription = missions.filter(\r\n (mis) =>\r\n mis.description && mis.description.toLowerCase().includes(term),\r\n );\r\n // by user lastName which is the name of the visit:\r\n // metadata: \"{\\\"firstName\\\":\\\"\\\",\\\"lastName\\\":\\\"Visite du 5 Juillet\\\"}\"\r\n const userProfiles = missions.map((mis) => new ProfileEntity(mis.user));\r\n const byUserLastname = this.filterUsersForTerm(userProfiles, term);\r\n const userIds = new Set(byUserLastname.map((user) => user.id));\r\n const missionsByUser = missions.filter((mis) =>\r\n userIds.has(mis.userID),\r\n );\r\n return filterUniqueArrayByID([...byDescription, ...missionsByUser]);\r\n }\r\n\r\n async filterObjectsForSweep(\r\n objects: any[],\r\n objectType: PoiType,\r\n sweep: string,\r\n ): Promise<any[]> {\r\n let filtered = [];\r\n switch (objectType) {\r\n case PoiType.EQUIPMENT:\r\n const pois =\r\n await this.poiService.getPoisByMatterportSweepByType(\r\n sweep,\r\n objectType,\r\n );\r\n const equipIDs = new Set(pois.map((poi) => poi.elementID));\r\n filtered = objects.filter((object) => equipIDs.has(object.id));\r\n break;\r\n default:\r\n break;\r\n }\r\n return filtered;\r\n }\r\n\r\n filterFeaturesByHashtagsAndLocale(\r\n currentSpaceMissions: Mission[],\r\n features: Feature[],\r\n ): Feature[] {\r\n const [currentMission] = currentSpaceMissions;\r\n // filter by locale\r\n let filteredLocale = [...features];\r\n if (currentMission.locale) {\r\n filteredLocale = features.filter(\r\n (feature) =>\r\n feature.locale && feature.locale === currentMission.locale,\r\n );\r\n }\r\n // filter by hashtags\r\n if (currentMission.hashtags && currentMission.hashtags.length > 0) {\r\n const filteredByHashtags = [];\r\n for (const feature of filteredLocale) {\r\n if (!feature.hashtags || feature.hashtags.length === 0) {\r\n // Feature without hashtag is available for everybody\r\n filteredByHashtags.push(feature);\r\n } else if (\r\n currentMission.hashtags.every((hashtag) =>\r\n feature.hashtags.includes(hashtag),\r\n )\r\n ) {\r\n filteredByHashtags.push(feature);\r\n }\r\n }\r\n return filteredByHashtags;\r\n }\r\n return filteredLocale;\r\n }\r\n\r\n filterFeaturesForMissionWithoutZone(\r\n features: Feature[],\r\n mission: Mission,\r\n ): Feature[] {\r\n const finalFeatures: Feature[] = [];\r\n let levelFiltered: Feature[] = features;\r\n let zoneFiltered: Feature[] = features;\r\n let hashtagFiltered: Feature[] = features;\r\n\r\n const filters = this.getFiltersForRole(mission.role);\r\n for (const filter of filters) {\r\n if (filter === FilterType.LEVEL) {\r\n levelFiltered = this.filterObjectsByLevel(\r\n features,\r\n mission.level,\r\n );\r\n }\r\n // if (filter === FilterType.ZONE) {\r\n // zoneFiltered = await this.applyZoneFilterForMissions(\r\n // currentSpaceMissions,\r\n // features,\r\n // );\r\n // }\r\n if (filter === FilterType.HASHTAG) {\r\n hashtagFiltered =\r\n this.filterFeaturesByHashtagsAndLocale(\r\n [mission],\r\n features,\r\n );\r\n }\r\n }\r\n for (const feature of levelFiltered) {\r\n if (\r\n hashtagFiltered.includes(feature) &&\r\n zoneFiltered.includes(feature)\r\n ) {\r\n finalFeatures.push(feature);\r\n }\r\n }\r\n return finalFeatures;\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Navigation, Zone } from \"../../types.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { ZoneService } from \"./zone.service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class NavigationService {\r\n\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any,\r\n private userService: BaseUserService,\r\n private zoneService: ZoneService) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async createNavigation(navInput: Navigation): Promise<Navigation> {\r\n return this.API.__proto__.CreateNavigation(navInput);\r\n }\r\n\r\n async deleteNavigation(id: string): Promise<Navigation> {\r\n return this.API.__proto__.DeleteNavigation({ id });\r\n }\r\n\r\n async getNavigationsForNode(nodeID: string): Promise<Navigation[]> {\r\n return this.API.__proto__.NavigationsByNode(nodeID, null, null, 500).then(\r\n (navs) => navs.items,\r\n );\r\n }\r\n\r\n async getNavigation(id: string): Promise<Navigation> {\r\n return this.API.__proto__.GetNavigation(id);\r\n }\r\n\r\n async getSweepsIDsForSpace(spaceID: string): Promise<string[]> {\r\n const zones = await this.zoneService.getZonesBySpace(spaceID);\r\n const zonesWithSweeps = zones.filter((zone) => zone.sweepIDs && zone.sweepIDs.length > 0);\r\n const allSweeps = zonesWithSweeps.flatMap((zone) => zone.sweepIDs);\r\n return [...new Set(allSweeps)];\r\n }\r\n\r\n async getAllowedSweepsIDsForUserInSpace(\r\n spaceID: string,\r\n ): Promise<string[]> {\r\n const missionsForSpace = this.userService.currentMissions.filter(\r\n (mis) => mis.spaceID === spaceID,\r\n );\r\n let navIDs = [];\r\n if (this.userService.userHasAccessToAllZonesInSpace(spaceID)) {\r\n return this.getSweepsIDsForSpace(spaceID);\r\n }\r\n await Promise.all(\r\n missionsForSpace.map(async (mission) => {\r\n navIDs = [...navIDs, ...mission.zone.sweepIDs];\r\n }),\r\n );\r\n return navIDs;\r\n }\r\n\r\n async getForbiddenNavigationIDsForUserInSpace(\r\n spaceID: string,\r\n ): Promise<string[]> {\r\n const allowed = await this.getAllowedSweepsIDsForUserInSpace(spaceID);\r\n const allNavs = await this.getSweepsIDsForSpace(spaceID);\r\n const difference = allNavs.filter((x) => !allowed.includes(x));\r\n return difference.length > 0 ? difference : null;\r\n }\r\n\r\n async getNavigationsForMatterportIDForSpace(\r\n matterportID: string,\r\n spaceID: string,\r\n ): Promise<Navigation[]> {\r\n return this.API.__proto__.NavigationsByMatterportIDBySpace(matterportID, {\r\n eq: spaceID,\r\n }).then((navs) => navs.items);\r\n }\r\n\r\n async getNavigationsForZone(zone: Zone): Promise<Navigation[]> {\r\n const responseNavs = [];\r\n await Promise.all(\r\n zone.sweepIDs.map(async (sweepID) => {\r\n const navs = await this.getNavigationsForMatterportIDForSpace(\r\n sweepID,\r\n zone.spaceID,\r\n );\r\n if (navs.length > 0) {\r\n responseNavs.push(navs[0]);\r\n }\r\n }),\r\n );\r\n return responseNavs;\r\n }\r\n\r\n async updateNavigation(\r\n navInput: any,\r\n ): Promise<Navigation> {\r\n return this.API.__proto__.UpdateNavigation(navInput);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Equipment, Feature, POI, Ticket } from \"../../types.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseObjectService {\r\n constructor(\r\n protected poiService: PoiService,\r\n private navigationService: NavigationService,\r\n ) {}\r\n\r\n async getModel3dAndSweep(object: Feature | Ticket | Equipment): Promise<{\r\n model3D: string;\r\n sweep: string;\r\n rotation: { x: number; y: number };\r\n } | void> {\r\n return this.poiService\r\n .getPoiByElementId(object.id)\r\n .then(async (poi) => {\r\n if (poi && poi.matterportSweepID) {\r\n const navigations =\r\n await this.navigationService.getNavigationsForMatterportIDForSpace(\r\n poi.matterportSweepID,\r\n object.spaceID,\r\n );\r\n const [poiNavigation] = navigations;\r\n if (this.poiService.poiIsVirtual(poi)) {\r\n return {\r\n model3D: poiNavigation.node.model3D,\r\n sweep: null,\r\n rotation: null,\r\n };\r\n }\r\n const coordinate = JSON.parse(poi.coordinate);\r\n let rotation = null;\r\n if (coordinate.xRotation) {\r\n rotation = {\r\n x: Number(coordinate.xRotation),\r\n y: Number(coordinate.yRotation),\r\n };\r\n }\r\n return {\r\n model3D: poiNavigation.node.model3D,\r\n sweep: poi.matterportSweepID,\r\n rotation,\r\n };\r\n }\r\n return null;\r\n })\r\n .catch((error) => {\r\n return null;\r\n })\r\n }\r\n\r\n async updateIconForAllObjects(\r\n objects: Ticket[] | Feature[] | Equipment[],\r\n tagIcon: string,\r\n ): Promise<POI[]> {\r\n const IDs = [];\r\n for (const object of objects) {\r\n IDs.push(object.id);\r\n }\r\n const pois = [];\r\n await Promise.all(\r\n IDs.map(async (id) => {\r\n const poi = await this.poiService.getPoiByElementId(id);\r\n const updated = await this.poiService.updatePoi({\r\n id: poi.id,\r\n tagIcon,\r\n });\r\n pois.push(updated);\r\n }),\r\n );\r\n console.log(\"updated\", pois.length, \"pois with new icons\");\r\n return pois;\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Operation, Ticket } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class OperationService {\r\n API: any; //AWS\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getOperationsByTicketID(id: string): Promise<Operation[]> {\r\n return this.API.__proto__.OperationsByTicket(id).then((res) => res.items);\r\n }\r\n\r\n async getOperationsByEquipmentID(id: string): Promise<Operation[]> {\r\n return this.API.__proto__.OperationsByEquipment(id).then((res) => res.items);\r\n }\r\n\r\n async getTicketsByEquipmentID(id: string): Promise<Ticket[]> {\r\n const operations = await this.getOperationsByEquipmentID(id);\r\n const tickets = operations.map((operation) => operation.ticket);\r\n return tickets;\r\n }\r\n\r\n async deleteOperationsForEquipment(equipID: string): Promise<Operation[]> {\r\n const deleted = [];\r\n await this.getOperationsByEquipmentID(equipID)\r\n .then(async (operations) => {\r\n if (operations.length > 0) {\r\n await Promise.all(\r\n operations.map(async (op) => {\r\n const deletedOp = await this.API.__proto__.DeleteOperation({ id: op.id });\r\n deleted.push(deletedOp)\r\n }),\r\n );\r\n }\r\n });\r\n return deleted;\r\n }\r\n\r\n async deleteOperationsForTicket(ticketID: string) {\r\n await this.getOperationsByTicketID(ticketID)\r\n .then(async (operations) => {\r\n if (operations.length > 0) {\r\n await Promise.all(\r\n operations.map(async (op) => {\r\n await this.API.__proto__.DeleteOperation({ id: op.id });\r\n }),\r\n );\r\n }\r\n });\r\n }\r\n\r\n async deleteOperation(operationID: string): Promise<Operation> {\r\n return this.API.__proto__.DeleteOperation({ id: operationID });\r\n }\r\n\r\n async createOperation(operation: Operation): Promise<Operation> {\r\n return this.API.__proto__.CreateOperation(operation);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Inject } from \"@angular/core\";\r\nimport { dateTimeToLocalString } from \"../../helpers.service\";\r\nimport { ProfileEntity } from \"../../types.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { Event } from \"../../types.service\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class EventService {\r\n \r\n translationEventSubcriptions = {};\r\n\r\n API: any;\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any, \r\n private userService: BaseUserService,\r\n private translate: TranslateService ) {\r\n this.API = apiInjected;\r\n }\r\n\r\n /**\r\n * CRUD \r\n * */\r\n async createEvent(input: Event): Promise<Event> {\r\n return this.API.__proto__.CreateEvent(input);\r\n }\r\n\r\n async updateEvent(input: any): Promise<Event> {\r\n return this.API.__proto__.UpdateEvent(input);\r\n }\r\n\r\n async deleteEvent(eventID: string): Promise<Event> {\r\n return this.API.__proto__.DeleteEvent({id: eventID});\r\n }\r\n\r\n async getEvent(eventID: string): Promise<Event>{\r\n return this.API.__proto__.GetEvent(eventID);\r\n }\r\n\r\n /** \r\n * Custom get by GSI \r\n * */\r\n async getEventsByTicketID(ticketID: string): Promise<Event[]> {\r\n return this.API.__proto__.EventsByTicket(ticketID).then((events)=> events.items);\r\n }\r\n\r\n async getEventsByTicketIDSortedByDateDesc(ticketID: string): Promise<Event[]> {\r\n return this.API.__proto__.EventsByTicketByDate(\r\n ticketID,\r\n null,\r\n \"DESC\",\r\n ).then((events) => events.items);\r\n }\r\n\r\n async getEventsByGroup(group: string): Promise<Event[]> {\r\n return (await this.API.__proto__.EventsByGroup(group)).items;\r\n }\r\n\r\n /**\r\n * \r\n * SORTING\r\n */\r\n\r\n sortEventsByCreatedAtDateDesc(events: Event[]): Event[] {\r\n events.sort((event1, event2) => {\r\n // @ts-ignore\r\n return new Date(event2.createdAt) - new Date(event1.createdAt);\r\n });\r\n return events;\r\n }\r\n\r\n sortEventsByCreatedAtDateAsc(events: Event[]): Event[] {\r\n events.sort((event1, event2) => {\r\n // @ts-ignore\r\n return new Date(event1.createdAt) - new Date(event2.createdAt);\r\n });\r\n return events;\r\n }\r\n\r\n /**\r\n * TRANSLATIONS \r\n * */\r\n /** Apply a translation to a ticket event, with the current language */\r\n async applyTicketEventTranslate(event: Event) {\r\n const meta = await this.getTranslatedMetaEvent(event);\r\n const path = event.translationPath;\r\n if (path) {\r\n const titlePath = `${path}.title`;\r\n const descriptionPath = `${path}.description`;\r\n const value = this.translate.instant(\r\n [titlePath, descriptionPath],\r\n meta,\r\n );\r\n event.title = value[titlePath];\r\n event.description = value[descriptionPath];\r\n }\r\n }\r\n\r\n /** Unsubscribe a ticket event for his translation */\r\n ticketEventSubscribeTranslation(event: Event) {\r\n if (event.id in this.translationEventSubcriptions) {\r\n this.ticketEventUnsubscribeTranslation(event.id);\r\n }\r\n this.translationEventSubcriptions[event.id] =\r\n this.translate.onLangChange.subscribe((change) => {\r\n this.applyTicketEventTranslate(event);\r\n });\r\n this.applyTicketEventTranslate(event);\r\n }\r\n\r\n /** Unsubscribe a ticket event for his translation */\r\n ticketEventUnsubscribeTranslation(id: string) {\r\n if (id in this.translationEventSubcriptions) {\r\n this.translationEventSubcriptions[id].unsubscribe();\r\n delete this.translationEventSubcriptions[id];\r\n }\r\n }\r\n\r\n /** Generate the translated metadata of an event, according to the current language */\r\n async getTranslatedMetaEvent(event: Event): Promise<any> {\r\n let meta: any = {};\r\n\r\n const owner: ProfileEntity = await this.userService.userFromUserID(\r\n event.owner.userID,\r\n );\r\n\r\n try {\r\n if (event.metadata) meta = JSON.parse(event.metadata);\r\n } catch {}\r\n meta.firstName = owner.firstName;\r\n meta.lastName = owner.lastName;\r\n\r\n if (event.estimateStartDate) {\r\n meta.fromDate = dateTimeToLocalString(\r\n event.estimateStartDate,\r\n this.translate,\r\n );\r\n }\r\n if (event.estimateEndDate)\r\n meta.toDate = dateTimeToLocalString(\r\n event.estimateEndDate,\r\n this.translate,\r\n );\r\n\r\n if (meta.oldStatus)\r\n meta.oldStatus = this.translate.instant(meta.oldStatus);\r\n if (meta.newStatus)\r\n meta.newStatus = this.translate.instant(meta.newStatus);\r\n if (meta.type) meta.type = this.translate.instant(meta.type);\r\n return meta;\r\n }\r\n \r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Affectation } from \"../../types.service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class AffectationService {\r\n API: any;\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getAffectationsFromTicketID(\r\n ticketID: string,\r\n ): Promise<Affectation[] | void> {\r\n return this.API.__proto__.ListAffectations({\r\n ticketID: {\r\n eq: ticketID,\r\n } ,\r\n })\r\n .then((results) => {\r\n return results.items;\r\n })\r\n .catch((error) => {\r\n console.log(\r\n ` Error while retrieving affectations for ${ticketID} : ${JSON.stringify(error)}`,\r\n );\r\n });\r\n }\r\n\r\n async getAffectationsFromMissionID(\r\n missionID: string,\r\n ): Promise<Affectation[] | void> {\r\n return this.API.__proto__.AffectationsByMission(missionID).then((resposne) => resposne.items);\r\n }\r\n\r\n async softDeleteAffectationByMissionByTicket(\r\n ticketID: string,\r\n missionID: string,\r\n ): Promise<Affectation[]> {\r\n const affectations: Affectation[] =\r\n await this.getAffecationsForTicketForMission(missionID, ticketID);\r\n await Promise.all(\r\n affectations.map(async (affectation) => {\r\n const deleted = await this.API.__proto__.UpdateAffectation({\r\n id: affectation.id,\r\n deletedAt: Date.now(),\r\n });\r\n console.log(\"soft deleted affectation\", deleted);\r\n }),\r\n );\r\n return affectations;\r\n }\r\n\r\n async getAffecationsForTicketForMission(\r\n ticketID: string,\r\n missionID: string,\r\n ): Promise<Affectation[]> {\r\n return this.API.__proto__.AffectationsByMissionByTicket(missionID, {\r\n eq: ticketID,\r\n }).then((resposne) => resposne.items);\r\n }\r\n\r\n async softDeleteAffectationByID(\r\n affectationID: string,\r\n ): Promise<Affectation> {\r\n return this.API.__proto__.UpdateAffectation({\r\n id: affectationID,\r\n deletedAt: Date.now(),\r\n });\r\n }\r\n\r\n async createAffectation(input: Affectation): Promise<Affectation> {\r\n return this.API.__proto__.CreateAffectation(input);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { debounceTime, first } from \"rxjs/operators\";\r\nimport { Zone } from \"../types.service\"\r\nimport { MatterportService } from \"./matterport.service\";\r\nimport { ZoneService } from \"./models/zone.service\";\r\nimport { BaseUserService } from \"./user.service\";\r\nimport { ViewerService } from \"./viewer.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class NavigatorService {\r\n\r\n currentSweep: string | null;\r\n\r\n targetSweep: string | null;\r\n\r\n targetRotation: { x: number; y: number } | null;\r\n\r\n currentModel3D: string | null;\r\n\r\n currentSpaceID: string | null;\r\n\r\n currentZone: Zone | null;\r\n\r\n visitLastPosition: Map<string, { sweep: string; rotation: any }> =\r\n new Map();\r\n\r\n floorToGo: Zone | null;\r\n\r\n locationIDChange: Subject<string | null> = new Subject();\r\n\r\n zoneChange: Subject<Zone | null> = new Subject();\r\n\r\n navBarZoneIDChange: Subject<string | null> = new Subject();\r\n\r\n isVisibleChanged = new Subject<boolean>();\r\n\r\n currentNavBarLocationID: string;\r\n\r\n currentNavBarZoneID: string;\r\n\r\n zonesSortedForCurrentSweep: Zone[] | null;\r\n\r\n zonesForUserChange: Subject<Zone[] | null> = new Subject();\r\n\r\n zonesForUserForSpace: Zone[] | null;\r\n\r\n queueSweeps: string[] = [];\r\n\r\n constructor(\r\n private matterportService: MatterportService,\r\n private viewerService: ViewerService,\r\n private zoneService: ZoneService,\r\n private userService: BaseUserService,\r\n ) {\r\n this.matterportService.currentSweep\r\n .pipe(first()) // take first in order not to wait 2 sec an first load\r\n .subscribe((sweep: string) => {\r\n this.currentSweep = sweep;\r\n if (this.zonesForUserForSpace) {\r\n this.setZonesForCurrentSweep();\r\n }\r\n });\r\n this.matterportService.currentSweep\r\n .pipe(debounceTime<string>(2000)) // delays values emitted and return only the latest\r\n .subscribe((sweep: string) => {\r\n this.currentSweep = sweep;\r\n if (this.zonesForUserForSpace) {\r\n this.setZonesForCurrentSweep();\r\n }\r\n });\r\n this.viewerService.viewerIsOn.pipe().subscribe(\r\n (data: {\r\n spaceID: string | null;\r\n model3D: string | null;\r\n sweep: string | null;\r\n rotation: { x: number; y: number } | null;\r\n }) => {\r\n if (this.currentSpaceID !== data.spaceID) {\r\n this.currentSpaceID = data.spaceID;\r\n }\r\n if (!data.spaceID) {\r\n this.zonesForUserForSpace = null;\r\n this.zonesSortedForCurrentSweep = null;\r\n this.currentZone = null;\r\n this.zoneChange.next(null);\r\n this.currentSweep = null;\r\n // save last position\r\n const lastPose = this.matterportService.poseCamera;\r\n if (lastPose && this.currentModel3D && this.userService.cu) {\r\n this.visitLastPosition.set(this.currentModel3D, {\r\n sweep: lastPose.sweep,\r\n rotation: lastPose.rotation,\r\n });\r\n }\r\n this.currentModel3D = data.model3D;\r\n } else {\r\n this.currentModel3D = data.model3D;\r\n this.targetSweep = data.sweep;\r\n this.targetRotation = data.rotation;\r\n this.onViewerLoaded();\r\n }\r\n },\r\n );\r\n this.userService.isChanged.subscribe((isConnected) => {\r\n if (!isConnected) {\r\n // user disconnected, clean Map\r\n this.visitLastPosition = new Map();\r\n }\r\n })\r\n }\r\n\r\n getLastPositionForModel(model3D: string) {\r\n return this.visitLastPosition.get(model3D);\r\n }\r\n\r\n goToSweepWithRotation(\r\n sweep: string,\r\n rotation: { x: number; y: number } | null = null,\r\n ) {\r\n this.matterportService.action_go_to_sweep(sweep, rotation);\r\n }\r\n\r\n goToFloor(floor: Zone) {\r\n let matterportFloorSequence = null;\r\n if (floor.metadata) {\r\n const metadata = JSON.parse(floor.metadata);\r\n if (metadata.matterportFloorSequence !== undefined) {\r\n matterportFloorSequence = metadata.matterportFloorSequence;\r\n }\r\n }\r\n this.matterportService.action_go_to_floor(floor.name, matterportFloorSequence);\r\n }\r\n\r\n async onViewerLoaded() {\r\n let sweepToGo: string | null = null\r\n let rotation: { x: number; y: number } | null = null;\r\n if (this.targetSweep) {\r\n sweepToGo = this.targetSweep;\r\n rotation = this.targetRotation\r\n ? this.targetRotation\r\n : this.checkRotationForSweep(this.targetSweep);\r\n } else {\r\n const lastPostion = this.getLastPositionForModel(\r\n this.currentModel3D!,\r\n );\r\n if (lastPostion) {\r\n sweepToGo = lastPostion.sweep;\r\n rotation = lastPostion.rotation;\r\n }\r\n }\r\n if (this.targetRotation) {\r\n rotation = this.targetRotation;\r\n }\r\n if (sweepToGo && !this.floorToGo) {\r\n // console.log(\"go to sweep\", sweepToGo);\r\n this.goToSweepWithRotation(sweepToGo, rotation);\r\n }\r\n if (this.floorToGo) {\r\n this.goToFloor(this.floorToGo);\r\n this.floorToGo = null;\r\n }\r\n // if first load and zones are not set\r\n this.zonesForUserForSpace =\r\n await this.zoneService.getZonesBySpaceForUser(this.currentSpaceID!);\r\n this.setZonesForCurrentSweep();\r\n }\r\n\r\n checkRotationForSweep(sweep: string): { x: number; y: number } | null {\r\n const lastPosition = this.visitLastPosition.get(this.currentModel3D!);\r\n if (lastPosition && lastPosition.sweep === sweep) {\r\n return lastPosition.rotation;\r\n }\r\n return null;\r\n }\r\n\r\n setZonesForCurrentSweep() {\r\n if (!this.currentSweep) {\r\n return\r\n }\r\n const zonesForSweep = this.zonesForUserForSpace?.filter(\r\n (zone) =>\r\n zone.sweepIDs && zone.sweepIDs.includes(this.currentSweep!)\r\n );\r\n if (zonesForSweep && zonesForSweep.length > 0) { \r\n this.zonesSortedForCurrentSweep = zonesForSweep.sort((a, b) => {\r\n if (a.sweepIDs!.length === b.sweepIDs!.length) {\r\n // if the same amount of sweeps: floor == the whole space\r\n if (a.layer && b.layer) {\r\n // put type BUILDING at the end\r\n return a.layer.name !== \"BUILDING\"\r\n ? -1\r\n : b.layer.name !== \"BUILDING\"\r\n ? 1\r\n : 0;\r\n }\r\n return a.parent?.sweepIDs ? -1 : b.parent?.sweepIDs ? 1 : 0;\r\n }\r\n return a.sweepIDs!.length - b.sweepIDs!.length;\r\n });\r\n this.zonesForUserChange.next(this.zonesSortedForCurrentSweep);\r\n\r\n if (\r\n this.zonesSortedForCurrentSweep.length > 0 &&\r\n this.currentZone !== this.zonesSortedForCurrentSweep[0]\r\n ) {\r\n [this.currentZone] = this.zonesSortedForCurrentSweep;\r\n this.zoneChange.next(this.currentZone);\r\n }\r\n }\r\n \r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Event, EventStatus, EventType, Prestataire, ProfileEntity, RequestIntervention, Ticket } from \"../types.service\";\r\nimport { EventService } from \"./models/event.service\";\r\nimport { MissionService } from \"./models/mission.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class InterventionService {\r\n interventionEventTypes = [\r\n EventType.NON_CONTRACTUAL_INTERVENTION,\r\n EventType.CONTRACTUAL_INTERVENTION,\r\n EventType.REPORTING,\r\n EventType.REQUEST_FOR_INTERVENTION,\r\n ];\r\n\r\n constructor(\r\n private eventService: EventService,\r\n private missionService: MissionService,\r\n ) {}\r\n\r\n async getRequestInterventionFromTicket(\r\n ticket: Ticket,\r\n ): Promise<RequestIntervention> {\r\n const events =\r\n await this.eventService.getEventsByTicketIDSortedByDateDesc(\r\n ticket.id,\r\n );\r\n const relatedEvents = events.filter((event_) =>\r\n this.interventionEventTypes.includes(event_.type),\r\n );\r\n const allRequests = relatedEvents.filter(\r\n (event_) => event_.type === EventType.REQUEST_FOR_INTERVENTION,\r\n );\r\n if (allRequests.length > 0) {\r\n const mostRecent = allRequests[0];\r\n\r\n const composedRequest =\r\n this.eventToRequestIntervention(mostRecent);\r\n\r\n if (composedRequest.status === EventStatus.CANCELLED) {\r\n return composedRequest;\r\n }\r\n\r\n let eventsForMostRecentRequest = relatedEvents.filter(\r\n (event) => event.group === composedRequest.id,\r\n );\r\n let intervention;\r\n if (eventsForMostRecentRequest.length === 0) {\r\n // back compatibility\r\n eventsForMostRecentRequest = relatedEvents;\r\n // get intervention\r\n intervention = this.composeInterventionForRequest(\r\n relatedEvents,\r\n null,\r\n );\r\n // set duration\r\n composedRequest.realDuration =\r\n this.getDurationForRequest(\r\n relatedEvents,\r\n null,\r\n );\r\n } else {\r\n intervention = this.composeInterventionForRequest(\r\n eventsForMostRecentRequest,\r\n composedRequest.id,\r\n );\r\n composedRequest.realDuration =\r\n this.getDurationForRequest(\r\n eventsForMostRecentRequest,\r\n composedRequest.id,\r\n );\r\n }\r\n\r\n if (!composedRequest.estimateStartDate) {\r\n composedRequest.estimateStartDate =\r\n this.getMostRecentEstimateStartDate(\r\n eventsForMostRecentRequest,\r\n );\r\n }\r\n composedRequest.realStartDate =\r\n this.getEarliestRealStartDateForRequest(\r\n relatedEvents,\r\n composedRequest.id,\r\n );\r\n if (!composedRequest.estimateEndDate) {\r\n composedRequest.estimateEndDate =\r\n this.getMostRecentEstimateEndDate(\r\n eventsForMostRecentRequest,\r\n );\r\n }\r\n composedRequest.realEndDate =\r\n this.getLatestRealEndDateForRequest(\r\n relatedEvents,\r\n composedRequest.id,\r\n );\r\n\r\n composedRequest.intervention = intervention;\r\n return composedRequest;\r\n }\r\n return null;\r\n }\r\n\r\n composeInterventionForRequest(\r\n relatedEvents: Event[],\r\n requestID: string,\r\n ): Event {\r\n const interventions = requestID\r\n ? relatedEvents.filter(\r\n (event_) =>\r\n (event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.CONTRACTUAL_INTERVENTION) &&\r\n event_.group === requestID,\r\n )\r\n : relatedEvents.filter(\r\n (event_) =>\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.CONTRACTUAL_INTERVENTION,\r\n );\r\n\r\n if (interventions.length > 0) {\r\n const lastIntervention = interventions[0];\r\n return lastIntervention;\r\n }\r\n return null;\r\n }\r\n\r\n async getPrestataireForTicket(ticket: Ticket): Promise<Prestataire> {\r\n if (ticket.assignees.items.length > 0) {\r\n const sortedAffectations = ticket.assignees.items.sort(\r\n (a, b) =>\r\n // @ts-ignore\r\n // eslint-disable-next-line prettier/prettier\r\n new Date(b.createdAt) - new Date(a.createdAt),\r\n );\r\n const missionIDpresta = sortedAffectations[0].missionID;\r\n const prestaMission = await this.missionService.getMission(\r\n missionIDpresta,\r\n );\r\n const userPrestataire = new ProfileEntity(prestaMission.user);\r\n const prestataire = {\r\n organisation: prestaMission.organisation,\r\n mission: prestaMission,\r\n profile: userPrestataire,\r\n name: userPrestataire.displayName,\r\n };\r\n return prestataire;\r\n }\r\n return null;\r\n }\r\n\r\n getEarliestRealStartDateForRequest(\r\n events: Event[],\r\n requestID: string,\r\n ): number | null {\r\n let date = null;\r\n const interventions = events.filter(\r\n (event_) =>\r\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION) &&\r\n event_.group === requestID,\r\n );\r\n const sortedInterventions =\r\n this.eventService.sortEventsByCreatedAtDateAsc(interventions);\r\n if (sortedInterventions.length > 0) {\r\n for (const event of sortedInterventions) {\r\n if (event.realStartDate) {\r\n date = event.realStartDate;\r\n break;\r\n }\r\n }\r\n }\r\n return date;\r\n }\r\n\r\n getLatestRealEndDateForRequest(\r\n events: Event[],\r\n requestID: string,\r\n ): number | null {\r\n let date = null;\r\n const interventions = events.filter(\r\n (event_) =>\r\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION) &&\r\n event_.group === requestID,\r\n );\r\n const sortedInterventions =\r\n this.eventService.sortEventsByCreatedAtDateDesc(interventions);\r\n if (sortedInterventions.length > 0) {\r\n for (const event of sortedInterventions) {\r\n if (event.realEndDate) {\r\n date = event.realEndDate;\r\n break;\r\n }\r\n }\r\n }\r\n return date;\r\n }\r\n\r\n getDurationForRequest(events: Event[], requestID: string): number {\r\n let duration = 0; // in miliseconds\r\n const interventions = requestID\r\n ? events.filter(\r\n (event_) =>\r\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\r\n event_.type ===\r\n EventType.NON_CONTRACTUAL_INTERVENTION) &&\r\n event_.group === requestID,\r\n )\r\n : events.filter(\r\n (event_) =>\r\n event_.type === EventType.CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION,\r\n );\r\n for (const event of interventions) {\r\n if (event.timeSpent) {\r\n duration += event.timeSpent;\r\n }\r\n }\r\n return duration;\r\n }\r\n\r\n getIntervention(events): Event | null {\r\n const interventions = events.filter(\r\n (event_) =>\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.CONTRACTUAL_INTERVENTION,\r\n );\r\n if (interventions.length > 0) {\r\n const lastIntervention = interventions[0];\r\n return lastIntervention;\r\n }\r\n return null;\r\n }\r\n\r\n eventToRequestIntervention(event: Event): RequestIntervention {\r\n const request = {\r\n id: event.group === \"default\" ? event.id : event.group,\r\n realEndDate: event.realEndDate,\r\n realStartDate: event.realStartDate,\r\n estimateStartDate: event.estimateStartDate,\r\n estimateEndDate: event.estimateEndDate,\r\n realDuration: event.timeSpent,\r\n type: event.type,\r\n status: event.status,\r\n createdAt: event.createdAt,\r\n updatedAt: event.updatedAt,\r\n ticketID: event.ticketID,\r\n } as RequestIntervention;\r\n return request;\r\n }\r\n\r\n getMostRecentTimeSpent(events: Event[]): number | null {\r\n let timeSpent = null;\r\n const sortedEvents = this.getAllEventsAfterLastCreated(events);\r\n for (const event_ of sortedEvents) {\r\n if (event_.timeSpent) {\r\n timeSpent = event_.timeSpent;\r\n break;\r\n }\r\n }\r\n return timeSpent;\r\n }\r\n\r\n getAllEventsAfterLastCreated(events: Event[]): Event[] {\r\n const eventsAfter: Event[] = [];\r\n const currentIntervention = this.getCurrentIntevention(events);\r\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\r\n if (sortedEvents.length > 0 && currentIntervention) {\r\n for (const event_ of sortedEvents) {\r\n eventsAfter.push(event_);\r\n if (event_.id === currentIntervention.id) {\r\n break;\r\n }\r\n }\r\n }\r\n return eventsAfter;\r\n }\r\n\r\n getCurrentIntevention(events: Event[]): Event {\r\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\r\n let currentIntervention;\r\n for (const event_ of sortedEvents) {\r\n if (event_.status === EventStatus.CREATED) {\r\n currentIntervention = event_;\r\n }\r\n if (event_.status !== EventStatus.CREATED && currentIntervention) {\r\n break;\r\n }\r\n }\r\n return currentIntervention;\r\n }\r\n\r\n getMostRecentEstimateStartDate(events: Event[]): number | null {\r\n let estimateStartDate = null;\r\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\r\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\r\n for (const event_ of sortedEvents) {\r\n if (event_.estimateStartDate) {\r\n estimateStartDate = event_.estimateStartDate;\r\n break;\r\n }\r\n }\r\n return estimateStartDate;\r\n }\r\n\r\n getMostRecentEstimateEndDate(events: Event[]): number | null {\r\n let date = null;\r\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\r\n for (const event_ of sortedEvents) {\r\n if (event_.estimateEndDate) {\r\n date = event_.estimateEndDate;\r\n break;\r\n }\r\n }\r\n return date;\r\n }\r\n\r\n // getMostRecentRealStartDate(events: Event[]): number | null {\r\n // let date = null;\r\n // // const sortedEvents = this.sortEventsByCreatedAtDateDesc(events);\r\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\r\n // for (const event_ of sortedEvents) {\r\n // if (event_.realStartDate) {\r\n // date = event_.realStartDate;\r\n // break;\r\n // }\r\n // }\r\n // return date;\r\n // }\r\n\r\n // getMostRecentRealStartDateGlobal(events: Event[]): number | null {\r\n // let date = null;\r\n // // const sortedEvents = this.sortEventsByCreatedAtDateDesc(events);\r\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\r\n // if (sortedEvents.length > 0) {\r\n // for (const event_ of sortedEvents) {\r\n // if (event_.realStartDate) {\r\n // date = event_.realStartDate;\r\n // break;\r\n // }\r\n // }\r\n // }\r\n // return date;\r\n // }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\n/* eslint-disable consistent-return */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { Subject, Subscription } from \"rxjs\";\r\nimport { openModalForVisitSwitch } from \"../../helpers.service\";\r\nimport { MattertagData } from \"../../mattertagData\";\r\nimport { Event, Ticket, TicketType, TicketPriority, TicketStatus, EventStatus, EventType, Affectation, POI, PoiType, IUpdate } from \"../../types.service\";\r\nimport { FilterService } from \"../filter.service\";\r\nimport { NavigatorService } from \"../navigator.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { ViewerService } from \"../viewer.service\";\r\nimport { BaseObjectService } from \"./base-object.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { OperationService } from \"./operation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\nimport InformationIcon from \"@iconify-icons/mdi/information-outline\";\r\nimport AccidentIcon from \"@iconify-icons/mdi/alert\";\r\nimport WordOrderIcon from \"@iconify-icons/mdi/account-hard-hat\";\r\nimport ReportingIcon from \"@iconify-icons/mdi/file-document-outline\";\r\nimport MaintenanceIcon from \"@iconify-icons/mdi/tools\";\r\nimport { EventService } from \"./event.service\";\r\nimport { InterventionService } from \"../intervention.service\";\r\nimport { AffectationService } from \"./affectation.service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class TicketsService extends BaseObjectService {\r\n currentTickets: { zone: Ticket[]; space: Ticket[] } = {\r\n zone: [],\r\n space: [],\r\n };\r\n\r\n ticketTags: Subject<Ticket[]> = new Subject();\r\n\r\n ticketsFiltered: Ticket[] = [];\r\n\r\n ticketsUpdated: Subject<{\r\n zone: Ticket[];\r\n space: Ticket[];\r\n }> = new Subject();\r\n\r\n currentSpaceID: string;\r\n\r\n zoneIDFilter: string;\r\n\r\n dateFilter: Date[];\r\n\r\n ticketTypeFilter: TicketType[];\r\n\r\n reportingIcon = ReportingIcon;\r\n\r\n maintenanceIcon = MaintenanceIcon;\r\n\r\n workorderIcon = WordOrderIcon;\r\n\r\n informationIcon = InformationIcon;\r\n\r\n accidentIcon = AccidentIcon;\r\n\r\n updateDone: Subject<boolean> = new Subject();\r\n\r\n updating: Subject<boolean> = new Subject();\r\n\r\n API: any;\r\n\r\n isMuseumUser = false;\r\n\r\n navSubscription: Subscription;\r\n\r\n filetrSubscription: Subscription;\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any,\r\n private operationService: OperationService,\r\n private eventService: EventService,\r\n private affectationService: AffectationService,\r\n poiService: PoiService,\r\n private userService: BaseUserService,\r\n private navigatorService: NavigatorService,\r\n private filterService: FilterService,\r\n private interventionService: InterventionService,\r\n navigationService: NavigationService,\r\n private viewerService: ViewerService,\r\n private modalService: NgbModal,\r\n ) {\r\n super(poiService, navigationService);\r\n this.API = apiInjected;\r\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n this.initSubscriptions();\r\n this.userService.isChanged.subscribe((isConnected) => {\r\n if (isConnected) {\r\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n this.initSubscriptions();\r\n } else {\r\n if (this.navSubscription) {\r\n this.navSubscription.unsubscribe();\r\n this.filetrSubscription.unsubscribe();\r\n }\r\n }\r\n });\r\n }\r\n\r\n async initTickets() {\r\n let ticketsFiltered = [];\r\n if (this.currentSpaceID) {\r\n this.updating.next(true);\r\n await this.getTicketsBySpace(this.currentSpaceID).then(\r\n (tickets) => {\r\n if (tickets) {\r\n ticketsFiltered = tickets;\r\n }\r\n },\r\n );\r\n ticketsFiltered =\r\n await this.filterService.filterTicketsForCurrentUserInSpace(\r\n ticketsFiltered,\r\n this.currentSpaceID,\r\n );\r\n if (this.dateFilter) {\r\n ticketsFiltered = this.filterService.filterObjectsForDateRange(\r\n ticketsFiltered,\r\n this.dateFilter,\r\n );\r\n }\r\n if (this.ticketTypeFilter) {\r\n ticketsFiltered = ticketsFiltered.filter((ticket) =>\r\n this.ticketTypeFilter.includes(ticket.type),\r\n );\r\n }\r\n this.currentTickets.space = ticketsFiltered;\r\n this.ticketTags.next(ticketsFiltered); // tags without zone filter\r\n\r\n if (this.zoneIDFilter) {\r\n ticketsFiltered = await this.filterService.filterObjectsForZone(\r\n ticketsFiltered,\r\n this.zoneIDFilter,\r\n );\r\n }\r\n this.currentTickets.zone = ticketsFiltered;\r\n this.ticketsUpdated.next(this.currentTickets);\r\n this.updating.next(false);\r\n } else {\r\n this.ticketTags.next(null);\r\n }\r\n }\r\n\r\n async adaptTicket(ticket: Ticket): Promise<Ticket> {\r\n if (ticket.comments.items.length > 0) {\r\n ticket.comments.items.sort((a, b) => {\r\n // @ts-ignore\r\n return new Date(b.createdAt) - new Date(a.createdAt);\r\n });\r\n }\r\n\r\n if (ticket.events.items.length > 0) {\r\n // Sort events by date\r\n ticket.events.items.sort((event1, event2) => {\r\n // @ts-ignore\r\n return new Date(event2.createdAt) - new Date(event1.createdAt);\r\n });\r\n }\r\n ticket.prestataire =\r\n await this.interventionService.getPrestataireForTicket(ticket);\r\n return ticket;\r\n }\r\n\r\n getPriorityColor(ticket: Ticket): string {\r\n switch (ticket.priority) {\r\n case TicketPriority.MAXIMUM:\r\n return \"crimson\";\r\n case TicketPriority.HIGH:\r\n return \"red\";\r\n case TicketPriority.MEDIUM:\r\n return \"orange\";\r\n case TicketPriority.LOW:\r\n return \"green\";\r\n case TicketPriority.MINIMUM:\r\n return \"blue\";\r\n default:\r\n return \"blue\";\r\n }\r\n }\r\n\r\n getStatusColor(ticket: Ticket): string {\r\n switch (ticket.status) {\r\n case TicketStatus.TO_BE_PROCESSED:\r\n return \"#B0B0B1\";\r\n case TicketStatus.PLANNED:\r\n return \"#EBDF27\";\r\n case TicketStatus.IN_PROGRESS:\r\n return \"#EBDF27\";\r\n case TicketStatus.WAITING_FOR_VALIDATION:\r\n return \"#EBDF27\";\r\n case TicketStatus.VALIDATED:\r\n return \"#BCE2E5\";\r\n case TicketStatus.REJECTED:\r\n return \"#e84c35\";\r\n case TicketStatus.RESOLVED:\r\n return \"#BCE2E5\";\r\n case TicketStatus.ARCHIVED:\r\n return \"#B0B0B1\";\r\n case TicketStatus.LATE:\r\n return \"#e84c35\";\r\n case TicketStatus.BLOCKED:\r\n return \"#e84c35\";\r\n case TicketStatus.COMPLETED:\r\n return \"#388659\";\r\n case TicketStatus.DELAYED:\r\n return \"#DB7543\";\r\n case TicketStatus.CANCELLED:\r\n return \"#e84c35\";\r\n case TicketStatus.TO_REDO:\r\n return \"#DB7543\";\r\n case TicketStatus.CREATED:\r\n return \"#B0B0B1\";\r\n default:\r\n return \"#BCE2E5\";\r\n }\r\n }\r\n\r\n getTicketPriorityNumber(t): number {\r\n return t.priority === TicketPriority.MINIMUM\r\n ? -1\r\n : t.priority === TicketPriority.LOW\r\n ? 0\r\n : t.priority === TicketPriority.MEDIUM\r\n ? 1\r\n : t.priority === TicketPriority.HIGH\r\n ? 2\r\n : t.priority === TicketPriority.MAXIMUM\r\n ? 3\r\n : -1;\r\n }\r\n\r\n getTicketIcon(type: TicketType): any {\r\n // const typeIcon : TicketType = ticket.type;\r\n switch (type) {\r\n case TicketType.REPORTING:\r\n return this.reportingIcon;\r\n case TicketType.REQUEST_FOR_INTERVENTION:\r\n return this.maintenanceIcon;\r\n case TicketType.REQUEST_FOR_MAINTENANCE:\r\n return this.maintenanceIcon;\r\n case TicketType.WORK_ORDER:\r\n return this.workorderIcon;\r\n case TicketType.INCIDENT:\r\n return this.accidentIcon;\r\n case TicketType.INFORMATION:\r\n return this.informationIcon;\r\n default:\r\n return this.maintenanceIcon;\r\n }\r\n }\r\n\r\n async addEventToTicket(ticket: Ticket, event: Event): Promise<Event> {\r\n const currentMission = this.userService.currentMission(ticket.spaceID);\r\n event.group = event.group ? event.group : \"default\";\r\n event.ticketID = event.ticketID ? event.ticketID : ticket.id;\r\n event.status = event.status ? event.status : EventStatus.CREATED;\r\n event.type = event.type ? event.type : EventType.TICKET;\r\n event.ownerID = event.ownerID ? event.ownerID : currentMission.id;\r\n try {\r\n const receivedEvent = await this.eventService.createEvent(event);\r\n // console.log('Event successfully created !');\r\n return receivedEvent;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n async addTicket(ticket: Ticket): Promise<Ticket | void> {\r\n ticket.status = TicketStatus.CREATED;\r\n if (!ticket.ownerMissionID) {\r\n ticket.ownerMissionID = this.userService.currentMission(\r\n ticket.spaceID,\r\n ).id;\r\n }\r\n // TODO!!! filter missions by space of ticket\r\n try {\r\n const receivedTicket = await this.createTicket(ticket);\r\n // console.log('!!! Response from creating ticket :');\r\n // console.log(receivedTicket);\r\n this.addEventToTicket(receivedTicket, {\r\n title: \"Création du ticket\",\r\n description: `Ticket créé par -`,\r\n translationPath: \"ticketEvent.ticket.created\",\r\n });\r\n this.updateDone.next(true);\r\n return receivedTicket; // instead of true\r\n } catch (error) {\r\n console.log(\"Ticket creation FAILED\");\r\n console.log(JSON.stringify(error));\r\n }\r\n }\r\n\r\n async updateTicketWithEvent(\r\n ticket: IUpdate & Partial<Ticket>,\r\n event?: Event,\r\n ): Promise<Ticket> {\r\n const receivedTicket = await this.updateTicket(ticket);\r\n if (receivedTicket) {\r\n console.log(\"Updated ticket :\");\r\n console.log(receivedTicket);\r\n if (event) {\r\n await this.addEventToTicket(receivedTicket, event);\r\n }\r\n this.updateDone.next(true);\r\n }\r\n return receivedTicket;\r\n }\r\n\r\n async removeAssigneeFromTicket(\r\n ticket: Ticket,\r\n assignee: Affectation,\r\n ): Promise<Ticket> {\r\n try {\r\n const affectation =\r\n await this.affectationService.softDeleteAffectationByID(\r\n assignee.id,\r\n );\r\n if (!affectation) {\r\n console.warn(\r\n `removeAssigneeFromTicket(${ticket.id}, ${assignee.id}) failed`,\r\n );\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n return ticket;\r\n }\r\n\r\n async updateTicketLocation(\r\n ticket: Ticket,\r\n tagData: MattertagData\r\n ): Promise<POI> {\r\n const poiInput = {\r\n coordinate: tagData.getCoordinateString(),\r\n type: PoiType.TICKET,\r\n elementID: ticket.id,\r\n metadata: tagData.getMetadataString(),\r\n matterportSweepID: tagData.getSweepID(),\r\n } as POI;\r\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\r\n await this.addEventToTicket(ticket, {\r\n title: \"Changement position du ticket\",\r\n description: \"Le point d'intérêt du ticket a été modifié\",\r\n status: EventStatus.POSITION_SET,\r\n translationPath: \"ticketEvent.position.set\",\r\n });\r\n return poi;\r\n }\r\n\r\n async updateStatusOfTicket(\r\n ticket: Ticket,\r\n status: TicketStatus,\r\n ): Promise<any> {\r\n const currentStatus = ticket.status;\r\n const oldTicketStatus = ticket.status;\r\n ticket.status = status;\r\n if (currentStatus === status) {\r\n return ticket;\r\n }\r\n console.log(\"Updating status\");\r\n return this.updateTicket({\r\n id: ticket.id,\r\n status,\r\n });\r\n }\r\n\r\n async updateTypeOfTicket(ticket: Ticket, type: TicketType): Promise<any> {\r\n const previousType = ticket.type;\r\n ticket.type = type;\r\n await this.updateTicketWithEvent(\r\n { id: ticket.id, type: ticket.type },\r\n {\r\n title: \"Type changé\",\r\n description: `Changement de ${previousType} vers ${ticket.type}`,\r\n metadata: JSON.stringify({ type: ticket.type }),\r\n translationPath: \"ticketEvent.ticket.type\",\r\n },\r\n );\r\n return ticket;\r\n }\r\n\r\n async getTicketsForUserForSpace(spaceID: string): Promise<Ticket[]> {\r\n const ticketsSpace = await this.getTicketsBySpace(spaceID);\r\n return this.filterService.filterTicketsForCurrentUserInSpace(\r\n ticketsSpace,\r\n spaceID,\r\n );\r\n }\r\n\r\n\r\n /** Basic CRUD operations */\r\n async readTicket(id: string) {\r\n return this.API.__proto__.GetTicket(id);\r\n }\r\n\r\n async createTicket(input: Ticket): Promise<Ticket> {\r\n return this.API.__proto__.CreateTicket(input);\r\n }\r\n\r\n async updateTicket(input: IUpdate & Partial<Ticket>): Promise<Ticket> {\r\n return this.API.__proto__.UpdateTicket(input);\r\n }\r\n\r\n async deleteTicket(ticket: Ticket): Promise<Ticket> {\r\n const deleted = await this.API.__proto__.DeleteTicket({ id: ticket.id });\r\n\r\n // delete POI\r\n const poi = await this.poiService.getPoiByElementId(ticket.id);\r\n if (poi) {\r\n this.poiService.deletePoi(poi.id);\r\n }\r\n\r\n // clean parentID\r\n if (ticket.children.items.length > 0) {\r\n ticket.children.items.map(async (childTicket) => {\r\n try {\r\n await this.API.__proto__.UpdateTicket({\r\n id: childTicket.id,\r\n parentID: null,\r\n });\r\n } catch {\r\n console.warn(\"Could not update ticket\", childTicket.id);\r\n }\r\n\r\n await this.API.__proto__.CreateEvent({\r\n title: \"Ticket parent supprimé\",\r\n ticketID: childTicket.id,\r\n description: `Ticket \\\"$ticket.title}\\\" a été supprimé`,\r\n });\r\n });\r\n }\r\n // delete events\r\n await Promise.all(\r\n ticket.events.items.map(async (event_) => {\r\n await this.API.__proto__.DeleteEvent({ id: event_.id });\r\n }),\r\n );\r\n // delete affectationns\r\n if (ticket.assignees.items.length > 0) {\r\n for (const element of ticket.assignees.items) {\r\n this.API.__proto__.DeleteAffectation({ id: element.id });\r\n }\r\n }\r\n // delete comments\r\n await Promise.all(\r\n ticket.comments.items.map(async (comment) => {\r\n await this.API.__proto__.DeleteComment({ id: comment.id });\r\n }),\r\n );\r\n await this.operationService.deleteOperationsForTicket(ticket.id);\r\n return deleted;\r\n }\r\n\r\n /** Custom requests */\r\n async getTicketsBySpace(spaceID: string): Promise<Ticket[]> {\r\n return this.API.__proto__.TicketsBySpace(spaceID).then(\r\n (tickets) => tickets.items,\r\n );\r\n }\r\n\r\n async updateIconForAllTicketsInSpace(\r\n tagIcon: string,\r\n spaceID: string,\r\n ): Promise<{ tickets: Ticket[]; pois: POI[] }> {\r\n const tickets = await this.getTicketsBySpace(spaceID);\r\n const pois = await this.updateIconForAllObjects(tickets, tagIcon);\r\n return { tickets, pois };\r\n }\r\n\r\n /** Archive related */\r\n /** Return true if the current user has archived this ticket */\r\n isArchived(ticket: Ticket): boolean {\r\n return ticket.archivedForMissionID\r\n ? ticket.archivedForMissionID.includes(\r\n this.userService.currentMission(ticket.spaceID).id,\r\n )\r\n : false;\r\n }\r\n\r\n setArchived(ticket: Ticket, archived: boolean) {\r\n let archivedList = ticket.archivedForMissionID\r\n ? ticket.archivedForMissionID\r\n : [];\r\n const missionID = this.userService.currentMission(ticket.spaceID).id;\r\n\r\n archivedList = archivedList.filter((m) => m !== missionID);\r\n\r\n if (archived) {\r\n archivedList.push(missionID);\r\n }\r\n\r\n return this.updateTicketWithEvent({\r\n id: ticket.id,\r\n archivedForMissionID: archivedList,\r\n });\r\n }\r\n\r\n async navigateToTicketIn3D(\r\n ticket: Ticket,\r\n forceSwitchVisit: boolean = false,\r\n ) {\r\n let url = `visit/${ticket.spaceID}`;\r\n if (forceSwitchVisit) {\r\n url += `/detail/${ticket.id}`;\r\n }\r\n const canGoToTag = await this.viewerService.action_move_to_tag(\r\n `${ticket.id}`,\r\n );\r\n if (canGoToTag) {\r\n return;\r\n }\r\n const result = await this.getModel3dAndSweep(ticket);\r\n if (!result || !result.model3D) {\r\n alert(\"Error while getting virtual visit model\");\r\n return;\r\n }\r\n if (!forceSwitchVisit) {\r\n /** Si on ne force pas la visite, on demande si on veut etre switch */\r\n openModalForVisitSwitch(\r\n this.modalService,\r\n result.model3D,\r\n ticket.spaceID,\r\n { sweepToMove: result.sweep, rotation: result.rotation },\r\n );\r\n } else {\r\n /** Si on force le switch de la visit */\r\n window.open(\r\n `${url}?model3D=${result.model3D}&sweep=true`,\r\n \"_blank\",\r\n );\r\n }\r\n }\r\n\r\n initSubscriptions() {\r\n if (!this.isMuseumUser) {\r\n this.navSubscription = this.navigatorService.zoneChange.subscribe((zone) => {\r\n this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n if (!this.currentSpaceID) {\r\n this.ticketTags.next(null);\r\n this.ticketsUpdated.next({ space: [], zone: null });\r\n this.ticketTypeFilter = null;\r\n this.zoneIDFilter = null;\r\n } else if (zone.id !== this.zoneIDFilter) {\r\n this.zoneIDFilter = zone.id;\r\n // console.log(\"going to init tickets from zone\");\r\n this.initTickets();\r\n }\r\n });\r\n this.filetrSubscription = this.filterService.subscribeToDataFilterUpdate((dateRange) => {\r\n this.dateFilter = dateRange;\r\n this.initTickets();\r\n });\r\n this.dateFilter = this.filterService.currentDateFilter;\r\n this.updateDone.subscribe(() => {\r\n if (this.currentSpaceID) {\r\n this.initTickets();\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable, Inject } from \"@angular/core\";\r\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { Subject } from \"rxjs\";\r\nimport { openModalForVisitSwitch, removeNullKeysFromObject } from \"../../helpers.service\";\r\nimport { MattertagData } from \"../../mattertagData\";\r\nimport { Note, Zone, Equipment, EquipmentDocument, Ticket, TypeNote, Mission, EventStatus, EventType, Operation, POI, PoiType, RoleStatus } from \"../../types.service\";\r\nimport { FilterService } from \"../filter.service\";\r\nimport { NavigatorService } from \"../navigator.service\";\r\nimport { deleteFromS3, getSignedFile, getSignedImageUrlForEquipment, uploadFileToS3 } from \"../s3.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { ViewerService } from \"../viewer.service\";\r\nimport { BaseObjectService } from \"./base-object.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { OperationService } from \"./operation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\nimport { TicketsService } from \"./ticket.service\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class EquipmentService extends BaseObjectService {\r\n private prefix = {\r\n technical: \"equipments/note/technical/\",\r\n image: \"equipments/note/image/\",\r\n financial: \"equipments/note/financial/\",\r\n information: \"equipments/note/information/\",\r\n other: \"equipments/note/other/\",\r\n contractual: \"equipments/note/contractual\",\r\n };\r\n\r\n equipmentsUpdated: Subject<{\r\n space: Equipment[];\r\n zone: Equipment[];\r\n }> = new Subject();\r\n\r\n currentEquipments: {\r\n space: Equipment[];\r\n zonesMap: Map<string, Equipment[]>;\r\n } = {\r\n space: [],\r\n zonesMap: new Map(),\r\n };\r\n\r\n equipmentsTags: Subject<Equipment[]> = new Subject();\r\n\r\n zoneIDFilter: string;\r\n\r\n currentZone: Zone;\r\n\r\n currentSpaceID: string;\r\n\r\n /** Null means we do not apply a filter, empty array ([]), means we that we hide all equipment */\r\n equipmentDomainFilter: string[] = null;\r\n\r\n updating: Subject<boolean> = new Subject();\r\n\r\n currentlyUpdating = false;\r\n\r\n currentSweep: string;\r\n\r\n deleteObservable: Subject<Equipment> = new Subject();\r\n\r\n createObservable: Subject<Equipment> = new Subject();\r\n\r\n updateObservable: Subject<Equipment> = new Subject();\r\n\r\n API: any; //AWS\r\n\r\n isMuseumUser = false;\r\n\r\n private destroy$ = new Subject();\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any,\r\n poiService: PoiService,\r\n navigationService: NavigationService,\r\n private operationService: OperationService,\r\n private ticketsService: TicketsService,\r\n private navigatorService: NavigatorService,\r\n private filterService: FilterService,\r\n private userService: BaseUserService,\r\n private viewerService: ViewerService,\r\n private modalService: NgbModal,) \r\n {\r\n super(poiService, navigationService);\r\n this.API = apiInjected;\r\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n this.initSubscriptions();\r\n this.userService.isChanged.subscribe((isConnected) => {\r\n if (isConnected) {\r\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n this.initSubscriptions();\r\n } else {\r\n this.unsubscribe();\r\n }\r\n });\r\n }\r\n\r\n async readEquipment(id: string): Promise<Equipment> {\r\n return this.API.__proto__.GetEquipment(id).then(async (receivedEquip) => {\r\n let equip: Equipment;\r\n if (receivedEquip) {\r\n equip = receivedEquip;\r\n equip = await this.getSignedUrlsForEquipment(receivedEquip);\r\n if (equip.domain) {\r\n if (equip.domain.parentID) {\r\n equip.childDomain = equip.domain;\r\n equip.parentDomain = equip.domain.parent;\r\n } else {\r\n equip.parentDomain = equip.domain;\r\n }\r\n }\r\n if (equip.subequipmentsIDs) {\r\n const subEquips = [];\r\n await Promise.all(\r\n equip.subequipmentsIDs.map(async (subId) => {\r\n const subEquip = await this.API.GetEquipment(subId);\r\n subEquips.push(subEquip);\r\n }),\r\n );\r\n equip.subEquipments = subEquips;\r\n }\r\n }\r\n return equip;\r\n });\r\n }\r\n\r\n async createEquipment(\r\n equip: Equipment,\r\n imageFile: File,\r\n documentFile: File,\r\n ): Promise<Equipment | void> {\r\n removeNullKeysFromObject(equip);\r\n return this.API.CreateEquipment(equip).then(\r\n async (receivedEquipment) => {\r\n let equipment = receivedEquipment as Equipment;\r\n if (equipment) {\r\n console.log(\"equipment created:\", equipment);\r\n if (documentFile) {\r\n await this.uploadDoc(\r\n equipment,\r\n documentFile,\r\n TypeNote.TECHNICAL,\r\n );\r\n }\r\n if (imageFile) {\r\n equipment = await this.uploadImage(\r\n equipment,\r\n imageFile,\r\n );\r\n }\r\n }\r\n return equipment;\r\n },\r\n );\r\n }\r\n\r\n async getSignedUrlsForEquipment(equip: Equipment): Promise<Equipment> {\r\n const equipment = { ...equip };\r\n if (equipment.notes.items.length > 0) {\r\n const docs = [];\r\n await Promise.all(\r\n equipment.notes.items.map(async (note) => {\r\n equipment.documentationImageUrlSigned = await getSignedImageUrlForEquipment(equipment);\r\n if (note.attachment && note.type !== TypeNote.IMAGE) {\r\n const { length } = note.attachment.split(\"/\");\r\n const filename = note.attachment.split(\"/\")[length - 1];\r\n const attachment = await getSignedFile(note.attachment);\r\n if (attachment) {\r\n docs.push({\r\n filename,\r\n url: note.attachment,\r\n urlSigned: attachment,\r\n noteID: note.id,\r\n } as EquipmentDocument);\r\n }\r\n }\r\n }),\r\n );\r\n equipment.documents = docs;\r\n return equipment;\r\n }\r\n return equipment;\r\n }\r\n\r\n async getEquipmentsForTicket(ticket: Ticket): Promise<Equipment[]> {\r\n const equips = [];\r\n if (ticket.operations.items.length > 0) {\r\n await Promise.all(\r\n ticket.operations.items.map(async (operation) => {\r\n const equipment = await this.readEquipment(\r\n operation.equipmentID,\r\n );\r\n equips.push(equipment);\r\n }),\r\n );\r\n }\r\n return equips;\r\n }\r\n\r\n async getEquipmentsForSpace(spaceID: string): Promise<Equipment[]> {\r\n // split by 100\r\n const limit = 100;\r\n let equipsToken = { equips: [], nextToken: null };\r\n do {\r\n equipsToken =\r\n await this.mergeEquipmentsForSpaceWithNextTokenWithLimit(\r\n spaceID,\r\n limit,\r\n equipsToken,\r\n );\r\n } while (equipsToken.nextToken);\r\n return equipsToken.equips;\r\n }\r\n\r\n async mergeEquipmentsForSpaceWithNextTokenWithLimit(\r\n spaceID: string,\r\n limit: number,\r\n equipsToken: { equips: Equipment[]; nextToken: string | null },\r\n ): Promise<{ equips: Equipment[]; nextToken: string | null }> {\r\n return this.API.__proto__.EquipmentsBySpace(\r\n spaceID,\r\n null,\r\n \"DESC\",\r\n null,\r\n limit,\r\n equipsToken.nextToken, // nextToken\r\n ).then((response) => {\r\n const equipsLimit = response.items;\r\n const equipsObject = {\r\n equips: [...equipsToken.equips, ...equipsLimit],\r\n nextToken: response.nextToken,\r\n };\r\n return equipsObject;\r\n });\r\n }\r\n\r\n async uploadImageForAllEquipments(\r\n equipments: Equipment[],\r\n imageFile: File,\r\n ): Promise<Equipment[]> {\r\n if (equipments.length === 0) {\r\n return [];\r\n }\r\n\r\n return uploadFileToS3(this.prefix.image, imageFile, \"BATCH\").then(\r\n async (url) => {\r\n if (url) {\r\n const equips = [];\r\n for (const equip of equipments) {\r\n const currentMission = this.userService.currentMission(\r\n equip.spaceID,\r\n );\r\n await this.API.__proto__.CreateNote({\r\n attachment: url,\r\n type: TypeNote.IMAGE,\r\n equipmentID: equip.id,\r\n ownerMissionID: currentMission\r\n ? currentMission.id\r\n : null,\r\n });\r\n const update = await this.API.__proto__.UpdateEquipment({\r\n id: equip.id,\r\n photo: url,\r\n });\r\n equips.push(update);\r\n }\r\n return equips;\r\n }\r\n return [];\r\n },\r\n );\r\n }\r\n\r\n async uploadImage(\r\n equipment: Equipment,\r\n imageFile: File,\r\n ): Promise<Equipment> {\r\n const equips = await this.uploadImageForAllEquipments(\r\n [equipment],\r\n imageFile,\r\n );\r\n if (equips.length === 0) {\r\n return null;\r\n }\r\n return equips[0];\r\n }\r\n\r\n async updateEquipment(\r\n equip: any,\r\n file: File = null,\r\n noteType: TypeNote = null,\r\n ): Promise<Equipment> {\r\n removeNullKeysFromObject(equip);\r\n return this.API.__proto__.UpdateEquipment(equip).then(\r\n async (receivedEquipment) => {\r\n let equipment = receivedEquipment as Equipment;\r\n if (equipment) {\r\n console.log(\"equipment updated:\", equipment);\r\n if (noteType) {\r\n switch (noteType) {\r\n case TypeNote.IMAGE:\r\n equipment = await this.uploadImage(\r\n equipment,\r\n file,\r\n );\r\n break;\r\n default:\r\n await this.uploadDoc(equipment, file, noteType);\r\n break;\r\n }\r\n }\r\n }\r\n return equipment;\r\n },\r\n );\r\n }\r\n\r\n getPrefixDoc(type: TypeNote) {\r\n let prefix;\r\n switch (type) {\r\n case TypeNote.INFORMATION:\r\n prefix = this.prefix.information;\r\n break;\r\n case TypeNote.FINANCIAL:\r\n prefix = this.prefix.financial;\r\n break;\r\n case TypeNote.CONTRACTUAL:\r\n prefix = this.prefix.contractual;\r\n break;\r\n case TypeNote.OTHER:\r\n prefix = this.prefix.other;\r\n break;\r\n case TypeNote.IMAGE:\r\n prefix = this.prefix.image;\r\n break;\r\n default:\r\n prefix = this.prefix.technical;\r\n break;\r\n }\r\n return prefix;\r\n }\r\n\r\n async uploadDocForAllEquipments(\r\n equipments: Equipment[],\r\n documentFile: File,\r\n type: TypeNote,\r\n ) {\r\n if (equipments.length === 0) {\r\n return [];\r\n }\r\n const prefix = this.getPrefixDoc(type);\r\n const url = await uploadFileToS3(prefix, documentFile, \"BATCH\");\r\n if (url) {\r\n const updateList = [];\r\n for (const equip of equipments) {\r\n const mission = this.userService.currentMission(equip.spaceID);\r\n const newEquip = await this.API.__proto__.CreateNote({\r\n attachment: url,\r\n type,\r\n equipmentID: equip.id,\r\n ownerMissionID: mission ? mission.id : null,\r\n });\r\n updateList.push(newEquip);\r\n }\r\n return updateList;\r\n }\r\n return [];\r\n }\r\n\r\n async uploadDoc(\r\n equipment: Equipment,\r\n documentFile: File,\r\n type: TypeNote,\r\n ): Promise<Note> {\r\n const prefix = this.getPrefixDoc(type);\r\n const mission = this.userService.currentMission(equipment.spaceID);\r\n return uploadFileToS3(prefix, documentFile, equipment.id).then(\r\n async (url) => {\r\n if (url) {\r\n return this.API.__proto__.CreateNote({\r\n attachment: url,\r\n type,\r\n equipmentID: equipment.id,\r\n ownerMissionID: mission ? mission.id : null,\r\n });\r\n }\r\n return null;\r\n },\r\n );\r\n }\r\n\r\n async deleteEquipment(equip: Equipment): Promise<Equipment> {\r\n const deleted = await this.API.__proto__.DeleteEquipment({ id: equip.id });\r\n console.log(\"Deleted equipment\", deleted);\r\n\r\n // delete POI\r\n const [poi] = equip.pois.items;\r\n if (poi) {\r\n await this.poiService.deletePoi(poi.id);\r\n }\r\n // delete notes related\r\n if (equip.notes.items.length > 0) {\r\n await Promise.all(\r\n equip.notes.items.map(async (note: Note) => {\r\n // delete files from S3\r\n /** Not shared with other equipment */\r\n if (\r\n note.attachment &&\r\n !note.attachment.split(\"/\").pop().startsWith(\"BATCH_\")\r\n ) {\r\n await deleteFromS3(note.attachment);\r\n }\r\n await this.API.__proto__.DeleteNote({ id: note.id });\r\n }),\r\n );\r\n }\r\n // delete operations (remove from linked tickets)\r\n await this.operationService.deleteOperationsForEquipment(equip.id)\r\n return deleted;\r\n }\r\n\r\n async updateEquipmentLocation(\r\n equip: Equipment,\r\n tagData: MattertagData,\r\n ): Promise<POI> {\r\n const poiInput = {\r\n coordinate: tagData.getCoordinateString(),\r\n type: PoiType.EQUIPMENT,\r\n elementID: equip.id,\r\n metadata: tagData.getMetadataString(),\r\n matterportSweepID: tagData.getSweepID(),\r\n } as POI;\r\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\r\n return poi;\r\n }\r\n\r\n async removeTicketFromEquipment(\r\n ticket: Ticket,\r\n equip: Equipment,\r\n ): Promise<Operation> {\r\n const operationEquip =\r\n await this.operationService.getOperationsByEquipmentID(equip.id);\r\n const operationToDelete = operationEquip.find(\r\n (op) => op.ticketID === ticket.id,\r\n );\r\n return this.operationService.deleteOperation(operationToDelete.id).then(\r\n (res) => {\r\n this.ticketsService.addEventToTicket(ticket as Ticket, {\r\n title: \"Equipement retiré du ticket\",\r\n description: `Equipement ${equip.name} a été retiré du ticket`,\r\n status: EventStatus.UNLINKED_FROM_EQUIPMENT,\r\n type: EventType.TICKET,\r\n translationPath: \"ticketEvent.ticket.unlinkedFromEquipment\",\r\n metadata: JSON.stringify({ equipment: equip.name }),\r\n });\r\n return res;\r\n },\r\n );\r\n }\r\n\r\n async initEquips() {\r\n if (!this.currentSpaceID) {\r\n return;\r\n }\r\n this.updating.next(true);\r\n this.currentlyUpdating = true;\r\n\r\n let eqList = await this.getEquipmentsForSpace(this.currentSpaceID);\r\n eqList = await this.filterService.filterEquipmentsForCurrentUserInSpace(\r\n this.currentSpaceID,\r\n eqList,\r\n );\r\n // console.log(eqList);\r\n if (eqList.length > 0) {\r\n let filteredEquips = eqList.filter(\r\n (equipment) => !this.isArchived(equipment),\r\n );\r\n\r\n await Promise.all(\r\n filteredEquips.map(async (equip) => {\r\n equip.documentationImageUrlSigned = await getSignedImageUrlForEquipment(equip);\r\n }),\r\n );\r\n if (this.equipmentDomainFilter) {\r\n filteredEquips =\r\n this.filterService.filterEquipmentsByDomainList(\r\n filteredEquips,\r\n this.equipmentDomainFilter,\r\n );\r\n }\r\n this.currentEquipments.space = filteredEquips;\r\n if (this.zoneIDFilter) {\r\n filteredEquips = (await this.filterService.filterObjectsForZone(\r\n filteredEquips,\r\n this.zoneIDFilter,\r\n this.currentZone,\r\n )) as Equipment[];\r\n }\r\n this.currentEquipments.zonesMap.set(\r\n this.zoneIDFilter,\r\n filteredEquips,\r\n );\r\n this.equipmentsTags.next(filteredEquips); // adding tags only for the current zone\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: filteredEquips,\r\n }); // for lateral menu\r\n } else {\r\n if (this.zoneIDFilter) {\r\n this.currentEquipments.zonesMap.set(this.zoneIDFilter, []);\r\n }\r\n this.equipmentsUpdated.next({ space: [], zone: [] }); // for lateral menu\r\n }\r\n // console.log(this.currentEquipments);\r\n this.updating.next(false);\r\n this.currentlyUpdating = false;\r\n }\r\n\r\n async getEquipmentsForCurrentUserForSpace(\r\n spaceID,\r\n missions: Mission[],\r\n ): Promise<Equipment[]> {\r\n let results = [];\r\n\r\n const spaceMissions = missions.filter((m) => m.spaceID === spaceID);\r\n if (spaceMissions.length === 0) {\r\n return results;\r\n }\r\n const canSeeEquips = spaceMissions.some(\r\n (m) =>\r\n this.userService.managers.includes(m.role) ||\r\n m.role === RoleStatus.SERVICE,\r\n );\r\n if (!canSeeEquips) {\r\n return results;\r\n }\r\n let domains = [];\r\n for (const m of spaceMissions) {\r\n domains = [...domains, m.domains];\r\n }\r\n if (domains.length === 0) {\r\n return results;\r\n }\r\n results = await this.getEquipmentsForSpace(spaceID);\r\n // results = this.filterService.filterEquipmentsByDomainList(\r\n // results,\r\n // domains,\r\n // );\r\n return results;\r\n }\r\n\r\n async updateIconForAllEquipmentsInSpace(\r\n tagIcon: string,\r\n spaceID: string,\r\n domainID: string = null,\r\n ): Promise<{ equips: Equipment[]; pois: POI[] }> {\r\n let equips = await this.getEquipmentsForSpace(spaceID);\r\n if (domainID) {\r\n equips = equips.filter((equip) => equip.domainID === domainID);\r\n }\r\n const pois = await this.updateIconForAllObjects(equips, tagIcon);\r\n return { equips, pois };\r\n }\r\n\r\n /** Return true if the current user has archived this equipment */\r\n isArchived(equipment: Equipment): boolean {\r\n return equipment.archivedForMissionID\r\n ? equipment.archivedForMissionID.includes(\r\n this.userService.currentMission(equipment.spaceID).id,\r\n )\r\n : false;\r\n }\r\n\r\n setArchived(equipment: Equipment, archived: boolean) {\r\n let archivedList = equipment.archivedForMissionID\r\n ? equipment.archivedForMissionID\r\n : [];\r\n const missionID = this.userService.currentMission(equipment.spaceID).id;\r\n\r\n archivedList = archivedList.filter((m) => m !== missionID);\r\n\r\n if (archived) {\r\n archivedList.push(missionID);\r\n }\r\n\r\n return this.updateEquipment({\r\n id: equipment.id,\r\n archivedForMissionID: archivedList,\r\n });\r\n }\r\n\r\n async deleteFile(document_: EquipmentDocument) {\r\n await deleteFromS3(document_.url);\r\n await this.API.DeleteNote({ id: document_.noteID });\r\n }\r\n\r\n async navigateToEquipmentIn3D(\r\n equipment: Equipment,\r\n forceSwitchVisit: boolean = false,\r\n ) {\r\n let url = `visit/${equipment.spaceID}`;\r\n if (forceSwitchVisit) {\r\n url += `/equip/${equipment.id}`;\r\n }\r\n const canGoToTag = await this.viewerService.action_move_to_tag(\r\n `${equipment.id}`,\r\n );\r\n if (canGoToTag) {\r\n return;\r\n }\r\n const result = await this.getModel3dAndSweep(equipment);\r\n\r\n if (!result || !result.model3D) {\r\n alert(\"Error while getting virtual visit model\");\r\n return;\r\n }\r\n if (!forceSwitchVisit) {\r\n // check if we are moving within the same 3D model\r\n const currentModel = localStorage.getItem(\"model3D\");\r\n if (currentModel && currentModel === result.model3D) {\r\n // we add tag to the visit\r\n const poi = equipment.pois.items[0];\r\n if (poi.coordinate) {\r\n // we force add because we might be in an another zone\r\n await this.viewerService.actionAddObjectFromPOI(\r\n equipment,\r\n poi,\r\n );\r\n await this.viewerService.action_move_to_tag(equipment.id);\r\n }\r\n } else {\r\n /** Si on ne force pas la visite, on demande si on veut etre switch */\r\n openModalForVisitSwitch(\r\n this.modalService,\r\n result.model3D,\r\n equipment.spaceID,\r\n { sweepToMove: result.sweep, rotation: result.rotation },\r\n );\r\n }\r\n } else {\r\n /** Si on force le switch de la visit */\r\n window.open(\r\n `${url}?model3D=${result.model3D}&sweep=true`,\r\n \"_blank\",\r\n );\r\n }\r\n }\r\n\r\n async updateEquipsForZone() {\r\n this.updating.next(true);\r\n let filteredEquips = [];\r\n if (this.currentEquipments.space.length > 0) {\r\n if (\r\n this.zoneIDFilter &&\r\n this.currentEquipments.zonesMap.has(this.zoneIDFilter)\r\n ) {\r\n filteredEquips = this.currentEquipments.zonesMap.get(\r\n this.zoneIDFilter,\r\n );\r\n // console.log(\"i have equips for this zone\", filteredEquips);\r\n } else {\r\n filteredEquips = (await this.filterService.filterObjectsForZone(\r\n this.currentEquipments.space,\r\n this.zoneIDFilter,\r\n this.currentZone,\r\n )) as Equipment[];\r\n\r\n this.currentEquipments.zonesMap.set(this.zoneIDFilter, [\r\n ...filteredEquips,\r\n ]);\r\n }\r\n if (this.equipmentDomainFilter) {\r\n filteredEquips =\r\n this.filterService.filterEquipmentsByDomainList(\r\n filteredEquips,\r\n this.equipmentDomainFilter,\r\n );\r\n }\r\n this.equipmentsTags.next(filteredEquips); // adding tags only for the current zone\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: filteredEquips,\r\n }); // for lateral menu\r\n } else {\r\n this.equipmentsUpdated.next({ space: [], zone: [] }); // for lateral menu\r\n }\r\n this.updating.next(false);\r\n }\r\n\r\n updateDueToDelete(deletedEquipment: Equipment) {\r\n // console.log(\"update due to delete\", deletedEquipment);\r\n const equip = this.currentEquipments.space.find(\r\n (_equip) => _equip.id === deletedEquipment.id,\r\n );\r\n if (equip) {\r\n const index = this.currentEquipments.space.indexOf(equip);\r\n this.currentEquipments.space.splice(index, 1);\r\n }\r\n for (const zone of this.currentEquipments.zonesMap.keys()) {\r\n const equipToDelete = this.currentEquipments.zonesMap\r\n .get(zone)\r\n .find((_equip) => _equip.id === deletedEquipment.id);\r\n if (equipToDelete) {\r\n const index = this.currentEquipments.zonesMap\r\n .get(zone)\r\n .indexOf(equipToDelete);\r\n this.currentEquipments.zonesMap.get(zone).splice(index, 1);\r\n }\r\n }\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\r\n }); // for lateral menu\r\n }\r\n\r\n updateDueToCreate(createdEquip: Equipment) {\r\n this.currentEquipments.space.unshift(createdEquip);\r\n this.currentEquipments.zonesMap\r\n .get(this.zoneIDFilter)\r\n .unshift(createdEquip);\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\r\n }); // for lateral menu\r\n }\r\n\r\n updateDueToEquipUpdated(updatedEquip: Equipment) {\r\n const equip = this.currentEquipments.space.find(\r\n (_equip) => _equip.id === updatedEquip.id,\r\n );\r\n if (equip) {\r\n const index = this.currentEquipments.space.indexOf(equip);\r\n if (this.isArchived(equip)) {\r\n // we remove archived equipment\r\n this.currentEquipments.space.splice(index, 1);\r\n } else {\r\n this.currentEquipments.space.splice(index, 1, updatedEquip);\r\n }\r\n }\r\n for (const zone of this.currentEquipments.zonesMap.keys()) {\r\n const equipToUpd = this.currentEquipments.zonesMap\r\n .get(zone)\r\n .find((_equip) => _equip.id === updatedEquip.id);\r\n if (equipToUpd) {\r\n const index = this.currentEquipments.zonesMap\r\n .get(zone)\r\n .indexOf(equipToUpd);\r\n if (this.isArchived(equip)) {\r\n this.currentEquipments.zonesMap.get(zone).splice(index, 1);\r\n } else {\r\n this.currentEquipments.zonesMap\r\n .get(zone)\r\n .splice(index, 1, updatedEquip);\r\n }\r\n }\r\n }\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\r\n }); // for lateral menu\r\n }\r\n\r\n initSubscriptions() {\r\n if (!this.isMuseumUser) {\r\n console.log(\"subscribe to equipments\");\r\n this.navigatorService.zoneChange.pipe(takeUntil(this.destroy$)).subscribe((zone) => {\r\n if (!zone || !this.navigatorService.currentSpaceID) {\r\n this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n this.equipmentsTags.next(null);\r\n this.equipmentsUpdated.next({ space: [], zone: null });\r\n this.zoneIDFilter = null;\r\n this.currentEquipments = {\r\n space: [],\r\n zonesMap: new Map(),\r\n };\r\n return;\r\n }\r\n if (zone.id !== this.zoneIDFilter) {\r\n this.zoneIDFilter = zone.id;\r\n this.currentZone = zone;\r\n if (\r\n this.currentSpaceID ===\r\n this.navigatorService.currentSpaceID\r\n ) {\r\n // same space, only zone update\r\n // console.log(\r\n // \"going to update equips for zone (same space)\",\r\n // zone,\r\n // );\r\n\r\n this.updateEquipsForZone();\r\n } else {\r\n this.currentSpaceID =\r\n this.navigatorService.currentSpaceID;\r\n // console.log(\r\n // \"going to init equips for zone for new space\",\r\n // this.currentSpaceID,\r\n // );\r\n this.initEquips();\r\n }\r\n }\r\n });\r\n\r\n this.deleteObservable.pipe(takeUntil(this.destroy$)).subscribe((equipment) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToDelete(equipment);\r\n }\r\n });\r\n\r\n this.createObservable.pipe(takeUntil(this.destroy$)).subscribe((equipment) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToCreate(equipment);\r\n }\r\n });\r\n\r\n this.updateObservable.pipe(takeUntil(this.destroy$)).subscribe((equipment) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToEquipUpdated(equipment);\r\n }\r\n });\r\n }\r\n }\r\n\r\n unsubscribe() {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n}","/* eslint-disable no-case-declarations */\r\n/* eslint-disable no-param-reassign */\r\n/* eslint-disable no-await-in-loop */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Mission } from \"../types.service\";\r\nimport { FilterService } from \"./filter.service\";\r\nimport { EquipmentService } from \"./models/equipment.service\";\r\n\r\nexport enum SearchObjectType {\r\n USER = \"USER\",\r\n EQUIPMENT = \"EQUIPMENT\",\r\n TICKET = \"TICKET\",\r\n LOCATION = \"LOCATION\",\r\n FEATURE = \"FEATURE\",\r\n TEMPLATE = \"TEMPLATE\",\r\n}\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class SearchService {\r\n constructor(\r\n private filterService: FilterService,\r\n private equipmentService: EquipmentService,\r\n ) { }\r\n\r\n async searchForTermForTypeInMap(\r\n term: string,\r\n objectType: SearchObjectType,\r\n searchable: any,\r\n ): Promise<any> {\r\n let results;\r\n switch (objectType) {\r\n case SearchObjectType.EQUIPMENT:\r\n results = new Map();\r\n for (const [space, equips] of searchable.entries()) {\r\n const filteredEquips =\r\n this.filterService.filterEquipmentsForTerm(\r\n equips,\r\n term,\r\n );\r\n results.set(space, filteredEquips);\r\n }\r\n break;\r\n case SearchObjectType.TICKET:\r\n results = new Map();\r\n for (const [space, tickets] of searchable.entries()) {\r\n await Promise.all(\r\n tickets.map(async (ticket) => {\r\n const equips =\r\n await this.equipmentService.getEquipmentsForTicket(\r\n ticket,\r\n );\r\n if (equips.length > 0) {\r\n ticket.equipments = equips;\r\n }\r\n }),\r\n );\r\n const filteredTickets =\r\n this.filterService.filterTicketsForTerm(\r\n tickets,\r\n term,\r\n );\r\n results.set(space, filteredTickets);\r\n }\r\n break;\r\n case SearchObjectType.LOCATION:\r\n results = this.filterService.filterLocationsForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n case SearchObjectType.USER:\r\n results = [];\r\n for (const orgObject of searchable) {\r\n const orgResults =\r\n this.filterService.filterOrganisationsForTerm(\r\n [orgObject.org],\r\n term,\r\n );\r\n if (orgResults.length === 0) {\r\n const profiles = orgObject.users.map(\r\n (object) => object.user,\r\n );\r\n const userResults =\r\n this.filterService.filterUsersForTerm(\r\n profiles,\r\n term,\r\n );\r\n const filteredUserMissions = orgObject.users.filter(\r\n (object) => userResults.includes(object.user),\r\n );\r\n if (userResults.length > 0) {\r\n results.push({\r\n org: orgObject.org,\r\n users: filteredUserMissions,\r\n });\r\n }\r\n } else {\r\n results.push(orgObject);\r\n }\r\n }\r\n break;\r\n case SearchObjectType.FEATURE:\r\n results = new Map();\r\n for (const [space, features] of searchable.entries()) {\r\n const filteredFeatures =\r\n await this.filterService.filterFeaturesForTerm(\r\n features,\r\n term,\r\n );\r\n results.set(space, filteredFeatures);\r\n }\r\n break;\r\n case SearchObjectType.TEMPLATE:\r\n results = new Map();\r\n for (const [zone, templates] of searchable) {\r\n const templateResults =\r\n this.filterService.filterTemplatesForTerm(\r\n templates as Mission[],\r\n term,\r\n );\r\n if (templateResults.length > 0) {\r\n results.set(zone, templateResults);\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return results;\r\n }\r\n\r\n async searchForTermForTypeInList(\r\n term: string,\r\n objectType: SearchObjectType,\r\n searchable: any[],\r\n ): Promise<any[]> {\r\n let results;\r\n switch (objectType) {\r\n case SearchObjectType.EQUIPMENT:\r\n results = this.filterService.filterEquipmentsForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n case SearchObjectType.TICKET:\r\n await Promise.all(\r\n searchable.map(async (ticket) => {\r\n const equips =\r\n await this.equipmentService.getEquipmentsForTicket(\r\n ticket,\r\n );\r\n if (equips.length > 0) {\r\n ticket.equipements = equips;\r\n }\r\n }),\r\n );\r\n results = this.filterService.filterTicketsForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n case SearchObjectType.LOCATION:\r\n results = this.filterService.filterLocationsForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n case SearchObjectType.FEATURE:\r\n results = this.filterService.filterFeaturesForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n default:\r\n break;\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { SearchObjectType, SearchService } from '../../services/search.service';\r\n\r\n@Component({\r\n selector: 'lib-search-bar',\r\n templateUrl: './search-bar.component.html',\r\n styleUrls: ['./search-bar.component.scss']\r\n})\r\nexport class SearchBarComponent implements OnInit {\r\n\r\n @Input() searchable: any;\r\n\r\n @Input() objectType: SearchObjectType;\r\n\r\n @Output() searchEvent = new EventEmitter();\r\n\r\n public model: any;\r\n\r\n // formatter = (result: string) => result.toUpperCase();\r\n\r\n // search: OperatorFunction<string, readonly string[]> = (\r\n // text$: Observable<string>,\r\n // ) =>\r\n // text$.pipe(\r\n // debounceTime(200),\r\n // distinctUntilChanged(),\r\n // map((term) =>\r\n // term === \"\"\r\n // ? []\r\n // : this.searchable\r\n // .filter((v) =>\r\n // v.toLowerCase().includes(term.toLowerCase()),\r\n // )\r\n // .slice(0, 10),\r\n // ),\r\n // );\r\n\r\n // filter = (input: string[]) => string[];\r\n\r\n constructor(private searchService: SearchService) { }\r\n\r\n ngOnInit(): void {\r\n const input = document.querySelector(\"#searchbar\") as HTMLInputElement;\r\n input.addEventListener(\"keydown\", ({ key }) => {\r\n if (key === \"Enter\") {\r\n this.onSubmit();\r\n }\r\n });\r\n }\r\n\r\n onSubmit() {\r\n const input = document.querySelector(\"#searchbar\") as HTMLInputElement;\r\n const searchValue = input.value.toLowerCase();\r\n if (searchValue !== \"\") {\r\n this.filter(searchValue);\r\n } else {\r\n this.searchEvent.emit(null);\r\n }\r\n }\r\n\r\n async filter(term: string) {\r\n const results = await this.searchService.searchForTermForTypeInMap(\r\n term,\r\n this.objectType,\r\n this.searchable,\r\n );\r\n this.searchEvent.emit(results);\r\n }\r\n}\r\n","<div class=\"col-md-8 searchbar\">\n <div class=\"row depend\">\n <div class=\"col-md-5\">\n <input id=\"searchbar\" type=\"text\" class=\"form-control\" placeholder=\"keyword\" />\n </div>\n <div class=\"col-md-5\">\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onSubmit()\">{{ 'Search' |\n translate}}</button>\n </div>\n </div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, Subscription } from 'rxjs';\n\n@Pipe({\n name: 'durationToString'\n})\nexport class DurationToStringPipe implements PipeTransform {\n durationToString(\n duration: number\n ): string {\n const days = Math.floor(duration / 3600 / 24);\n const hours = Math.floor((duration - days * 24 * 3600) / 3600);\n const minutes = Math.floor((duration % 3600) / 60);\n const seconds = Math.floor(duration % 60);\n \n const daysString = this.translate.instant(\"day(s)\");\n const hoursString = this.translate.instant(\"hour(s)\");\n const oneHourString = this.translate.instant(\"hour\");\n const minutesString = this.translate.instant(\"minute(s)\");\n const secondsString = this.translate.instant(\"second(s)\");\n \n if (duration > 3600 * 24 * 7) {\n return `${days} ${daysString}`;\n }\n if (duration > 3600 * 24) {\n return `${days} ${daysString} ${hours} ${hoursString}`;\n }\n if (duration === 3600) {\n return `${hours} ${oneHourString}`;\n }\n if (duration > 3600) {\n if (minutes === 0) {\n return `${hours} ${hoursString}`;\n }\n return `${hours} ${hoursString} ${minutes} ${minutesString}`;\n }\n if (duration >= 60) {\n if (seconds === 0) {\n return `${minutes} ${minutesString}`;\n }\n return `${minutes} ${minutesString} ${seconds} ${secondsString}`;\n }\n return `${seconds} ${secondsString}`;\n }\n\n constructor(private translate: TranslateService) { }\n\n transform(duration: number): Observable<string> {\n let subscript: Subscription;\n\n const dateObserver: Observable<string> = new Observable((observer) => {\n subscript = this.translate.onLangChange.subscribe((event) => {\n observer.next(this.durationToString(duration));\n });\n observer.next(this.durationToString(duration));\n\n return {\n unsubscribe() {\n subscript.unsubscribe();\n },\n };\n });\n return dateObserver;\n }\n\n}\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Hashtag, Node } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class HashtagService {\r\n currentSpaceID: string;\r\n\r\n currentHashtags: Hashtag[] = [];\r\n\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getHashtag(hashtagID: string): Promise<Hashtag> {\r\n return this.API.__proto__.GetHashtag(hashtagID);\r\n }\r\n\r\n async createHashtag(hashtag: Hashtag): Promise<Hashtag> {\r\n const hashtagCreated = await this.API.__proto__.CreateHashtag(hashtag);\r\n this.currentHashtags.push(hashtagCreated);\r\n return hashtagCreated;\r\n }\r\n\r\n async getHashtagsForSpace(spaceID: string = null): Promise<Hashtag[]> {\r\n if (!spaceID) {\r\n if (this.currentHashtags.length === 0 && this.currentSpaceID) {\r\n return this.API.__proto__.HashtagsBySpace(this.currentSpaceID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n return this.currentHashtags;\r\n }\r\n this.currentSpaceID = spaceID;\r\n return this.API.__proto__.HashtagsBySpace(spaceID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { HashtagService } from '../services/models/hashtag.service';\n\n@Pipe({\n name: 'hashtagFromID'\n})\nexport class HashtagFromIdPipe implements PipeTransform {\n\n constructor(\n private hashtagService: HashtagService\n ) {}\n\n async transform(hashtagID: string): Promise<string> {\n if (this.hashtagService.currentHashtags.length === 0) {\n return this.hashtagService.getHashtag(hashtagID).then((hashtag) => {\n return hashtag.name;\n });\n }\n const hashtag = this.hashtagService.currentHashtags.find(\n (_hashtag) => _hashtag.id === hashtagID,\n );\n return hashtag ? hashtag.name : \"\";\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeUrl'\n})\nexport class SafeUrlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) { }\n\n transform(url: any) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { Observable } from 'rxjs/internal/Observable';\n\n@Pipe({\n name: 'timeDateString'\n})\nexport class TimeDateToLocalStringPipe implements PipeTransform {\n /**\n * Return a string of a given date time in local format.\n * The format is determined by the current language.\n */\n dateTimeToLocalString(\n date: number | string | Date,\n mode?: string,\n ): string {\n let lang = \"en-EN\";\n if (this.translate) {\n /** Get current language */\n lang = this.translate.currentLang\n ? this.translate.currentLang\n : this.translate.defaultLang;\n /** Transforme '_fr' to 'fr' */\n if (lang) {\n lang = lang.slice(1);\n }\n \n }\n \n let options: {\n month?;\n year?;\n day?;\n hour?;\n minute?;\n second?;\n dateStyle?;\n timeStyle?;\n weekday?;\n timeZone?;\n timeZoneName?;\n };\n switch (mode) {\n case \"day_numeric\":\n options = { day: \"numeric\" };\n break;\n case \"day\":\n options = { weekday: \"long\" };\n break;\n case \"date\":\n options = { dateStyle: \"long\" };\n break;\n case \"short_date_time\":\n options = {\n year: \"2-digit\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n break;\n case \"time\":\n options = { hour: \"numeric\", minute: \"numeric\" };\n break;\n case \"time_zone\":\n options = { hour: \"numeric\", minute: \"numeric\", timeZoneName: \"shortOffset\"};\n break;\n case \"day_time_zone_weekday\":\n options = {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZoneName: \"shortOffset\",\n };\n break;\n case \"date_time_zone\":\n options = {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZoneName: \"shortOffset\",\n };\n break;\n default:\n options = {\n dateStyle: \"long\",\n timeStyle: \"short\",\n };\n }\n return new Date(date).toLocaleString(lang, options);\n }\n\n constructor(private translate: TranslateService) { }\n\n transform(date: number | string | Date, mode?: any): Observable<string> {\n let subscript: Subscription;\n\n const dateObserver: Observable<string> = new Observable((observer) => {\n subscript = this.translate.onLangChange.subscribe((event) => {\n observer.next(\n this.dateTimeToLocalString(date, mode),\n );\n });\n observer.next(this.dateTimeToLocalString(date, mode));\n\n return {\n unsubscribe() {\n subscript.unsubscribe();\n },\n };\n });\n return dateObserver;\n }\n\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { BaseUserService } from \"../services/user.service\";\r\n\r\n@Pipe({\r\n name: \"usernameFromId\",\r\n})\r\nexport class UsernameFromIdPipe implements PipeTransform {\r\n static cache = {};\r\n\r\n constructor(private userService: BaseUserService) {}\r\n\r\n async transform(userId: string): Promise<string> {\r\n if (UsernameFromIdPipe.cache[userId] !== undefined) {\r\n return new Promise<string>((resolve) => {\r\n resolve(UsernameFromIdPipe.cache[userId]);\r\n });\r\n }\r\n const user = await this.userService.userFromUserID(userId);\r\n // @ts-ignore\r\n UsernameFromIdPipe.cache[userId] = `${user.displayName}`;\r\n return UsernameFromIdPipe.cache[userId];\r\n }\r\n}\r\n","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport function noEmptyValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if(control.value && control.value !== ''){\r\n\r\n const data = control.value.replace(/ /g, '');\r\n return data === '' ? {isEmpty: control.value} : null;\r\n }else{\r\n return null;\r\n }\r\n };\r\n }","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport function emailValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const regex = /^(([^\\s\"(),.:;<>@[\\\\\\]]+(\\.[^\\s\"(),.:;<>@[\\\\\\]]+)*)|(\".+\"))@((\\[(?:\\d{1,3}\\.){3}\\d{1,3}])|(([\\dA-Za-z\\-]+\\.)+[A-Za-z]{2,}))$/;\r\n return !regex.test(control.value) ? {email: control.value} : null;\r\n };\r\n }","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport function textValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const regex = /[a-zA-Z1-9]/;\r\n if (control.value && control.value !== '') {\r\n return !regex.test(control.value) ? { text: control.value } : null;\r\n } else {\r\n return null;\r\n }\r\n };\r\n}","import { Injectable } from '@angular/core';\r\nimport { API } from \"aws-amplify\";\r\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportService {\r\n modalReference;\r\n\r\n constructor(public modalService: NgbModal) { }\r\n\r\n /**\r\n * Open the support form\r\n */\r\n openSupportForm(formComponent) {\r\n this.modalReference = this.modalService.open(formComponent, {\r\n modalDialogClass: 'modal-padding',\r\n });\r\n }\r\n\r\n /**\r\n * Send support request to jira\r\n */\r\n async sendSupport(data:any):Promise<string>{\r\n return new Promise(async (resolve)=>{\r\n const response = await API.post(\"helpEmail\", \"/jira-email/new\", {\r\n body : data,\r\n });\r\n if(response.err){\r\n resolve('error')\r\n }else{\r\n resolve('send')\r\n }\r\n })\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ValidatorsService {\r\n\r\n constructor() { }\r\n\r\n /**\r\n * return if control as error\r\n * @param control \r\n * @returns \r\n */\r\n public isControlError(control) {\r\n return (control && control.invalid && control.touched )\r\n }\r\n\r\n /**\r\n * return error of control\r\n * @param control \r\n * @returns \r\n */\r\n public getError(control){\r\n if(control.errors){\r\n if(control.errors.required){\r\n return 'errorForm.required'\r\n }\r\n if(control.errors.isEmpty){\r\n return 'errorForm.isEmpty'\r\n }\r\n if(control.errors.text){\r\n return 'errorForm.text'\r\n }\r\n if(control.errors.email){\r\n return 'errorForm.email'\r\n }\r\n if(control.errors.maxLength){\r\n return 'errorForm.maxLength'\r\n }\r\n if(control.errors.number){\r\n return 'errorForm.number'\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-loader',\r\n templateUrl: './loader.component.html',\r\n styleUrls: ['./loader.component.scss']\r\n})\r\nexport class LoaderComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","<div class=\"sk-fading-circle\">\r\n <img src=\"../../../../assets/icons/smarterplan.svg\">\r\n <div class=\"sk-circle1 sk-circle\"></div>\r\n <div class=\"sk-circle2 sk-circle\"></div>\r\n <div class=\"sk-circle3 sk-circle\"></div>\r\n <div class=\"sk-circle4 sk-circle\"></div>\r\n <div class=\"sk-circle5 sk-circle\"></div>\r\n <div class=\"sk-circle6 sk-circle\"></div>\r\n <div class=\"sk-circle7 sk-circle\"></div>\r\n <div class=\"sk-circle8 sk-circle\"></div>\r\n <div class=\"sk-circle9 sk-circle\"></div>\r\n <div class=\"sk-circle10 sk-circle\"></div>\r\n <div class=\"sk-circle11 sk-circle\"></div>\r\n <div class=\"sk-circle12 sk-circle\"></div>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\r\nimport { BaseUserService } from '../../services/user.service';\r\nimport { Auth } from \"aws-amplify\";\r\nimport { SupportService } from '../../services/support.service';\r\nimport { noEmptyValidator } from '../../validators/no-empty.directive';\r\nimport { ValidatorsService } from '../../services/validators.service';\r\nimport { emailValidator } from '../../validators/email.directive';\r\nimport { textValidator } from '../../validators/text.directive';\r\n\r\n@Component({\r\n selector: 'app-support-modal',\r\n templateUrl: './support-modal.component.html',\r\n styleUrls: ['./support-modal.component.scss']\r\n})\r\nexport class SupportModalComponent implements OnInit {\r\n status = 'new';\r\n\r\n supportForm: FormGroup;\r\n\r\n currentUser: any;\r\n\r\n loading: boolean = true;\r\n\r\n constructor(\r\n private supportService: SupportService,\r\n public activeModal: NgbActiveModal,\r\n private formBuilder: FormBuilder,\r\n private userService: BaseUserService,\r\n public validatorsService : ValidatorsService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.iniForm();\r\n }\r\n\r\n onClose() {\r\n this.activeModal.close();\r\n }\r\n\r\n async getCurrentUser(): Promise<any> {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const cau = await Auth.currentAuthenticatedUser();\r\n resolve(await this.userService.current(cau));\r\n } catch (error) {\r\n resolve(undefined);\r\n }\r\n })\r\n }\r\n\r\n async iniForm() {\r\n this.currentUser = await this.getCurrentUser();\r\n this.supportForm = this.formBuilder.group({\r\n title: ['', [Validators.required , Validators.maxLength(255), noEmptyValidator(), textValidator()]],\r\n email: [(this.currentUser ? this.currentUser.email : ''), [Validators.required, emailValidator(), Validators.maxLength(255), textValidator()]],\r\n description: ['', [Validators.required, noEmptyValidator(), textValidator()]],\r\n });\r\n this.loading = false;\r\n }\r\n \r\n async onSubmit() {\r\n if(this.supportForm.valid){\r\n this.loading = true;\r\n this.status = await this.supportService.sendSupport(this.supportForm.value);\r\n this.loading = false;\r\n }\r\n }\r\n\r\n}","<div class=\"modal-header\">\r\n <h5 class=\"modal-title\" translate=\"Help\"></h5>\r\n</div>\r\n<div class=\"modal-body\">\r\n <div class=\"support-loader-container\">\r\n <lib-loader *ngIf=\"loading\"></lib-loader>\r\n </div>\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"supportForm\" style=\"margin-top:1rem;\" *ngIf=\"!loading && status==='new'\">\r\n <div>\r\n <label>{{'Title' | translate}} *</label>\r\n <div>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" data-testid=\"new-support-title\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['title'])}\"\r\n maxlength=\"255\">\r\n </div>\r\n <div class=\"invalid-feedback\">\r\n <span data-testid=\"new-support-title-invalid\" [translate]=\"validatorsService.getError(supportForm.controls['title'])\"\r\n *ngIf=\" validatorsService.isControlError(supportForm.controls['title'])\"></span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!currentUser\">\r\n <label>{{'Email' | translate}} *</label>\r\n <div>\r\n <input type=\"email\" class=\"form-control\" formControlName=\"email\" data-testid=\"new-support-email\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['email'])}\"\r\n maxlength=\"255\">\r\n </div>\r\n <div class=\"invalid-feedback\">\r\n <span data-testid=\"new-support-email-invalid\" [translate]=\"validatorsService.getError(supportForm.controls['email'])\"\r\n *ngIf=\" validatorsService.isControlError(supportForm.controls['email'])\"></span>\r\n </div>\r\n </div>\r\n <div>\r\n <label>{{'Description' | translate}} *</label>\r\n <div>\r\n <textarea formControlName=\"description\" class=\"form-control\"\r\n data-testid=\"new-support-description\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['description'])}\"></textarea>\r\n </div>\r\n <div class=\"invalid-feedback\" >\r\n <span data-testid=\"new-support-description-invalid\" [translate]=\" validatorsService.getError(supportForm.controls['description'])\"\r\n *ngIf=\"validatorsService.isControlError(supportForm.controls['description'])\"></span>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n <div *ngIf=\"status ==='send'\" translate=\"Your request has been registered\" data-testid=\"new-support-send-info\">\r\n </div>\r\n <div *ngIf=\"status ==='error'\" translate=\"An error has occurred, please renew your request\"\r\n data-testid=\"new-support-error-info\">\r\n\r\n </div>\r\n</div>\r\n<div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn rounded-pill btn-museum\" data-dismiss=\"modal\" translate=\"Close\" (click)=\"onClose()\"\r\n data-testid=\"new-support-close-btn\"></button>\r\n <button *ngIf=\"!loading && status==='new'\" type=\"button\" class=\"btn rounded-pill btn-museum\" translate=\"Submit\"\r\n (click)=\"onSubmit()\" [disabled]=\"!supportForm.valid\" data-testid=\"new-support-submit-btn\"></button>\r\n</div>","import { Injectable } from \"@angular/core\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\nimport { Subject } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class LocaleService {\r\n currentLocale = \"en\";\r\n\r\n // Observable string sources\r\n private showModalSource = new Subject();\r\n\r\n showModal$ = this.showModalSource.asObservable();\r\n\r\n constructor(public translate: TranslateService) {}\r\n\r\n modal() {\r\n this.showModalSource.next(true);\r\n }\r\n\r\n /**\r\n * Reload the app to another language.\r\n *\r\n * Navigation is required because of the way angular localizes: locales are\r\n * completely different compilation bundles, in separate directories, hence\r\n * you need to reload.\r\n *\r\n * @param lang\r\n */\r\n change(lang: string): void {\r\n console.log(\"Switching to\", lang);\r\n this.currentLocale = lang;\r\n this.translate.use(`_${lang}`); // because files are \"_en.json\"\r\n }\r\n\r\n getLocale(): string {\r\n const lang = this.translate.currentLang\r\n ? this.translate.currentLang\r\n : this.translate.defaultLang;\r\n return lang.slice(1);\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\nimport { NgbDate, NgbCalendar, NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';\nimport { FilterService } from '../../../services/filter.service';\n\n@Component({\n selector: 'lib-range-date-picker',\n templateUrl: './range-date-picker.component.html',\n styleUrls: ['./range-date-picker.component.scss']\n})\nexport class RangeDatePickerComponent implements OnInit {\n hoveredDate: NgbDate | null = null;\n\n fromDate: NgbDate | null;\n\n toDate: NgbDate | null;\n\n constructor(\n private calendar: NgbCalendar,\n public formatter: NgbDateParserFormatter,\n private filterService: FilterService,\n ) {\n // this.fromDate = calendar.getPrev(calendar.getToday(), \"d\", 30);\n // this.toDate = calendar.getToday();\n }\n\n ngOnInit(): void {\n this.filterService.dateFilterUpdated(null);\n }\n\n onDateSelection(date: NgbDate) {\n if (!this.fromDate && !this.toDate) {\n this.fromDate = date;\n } else if (\n this.fromDate &&\n !this.toDate &&\n date &&\n date.after(this.fromDate)\n ) {\n this.toDate = date;\n } else {\n this.toDate = null;\n this.fromDate = date;\n }\n }\n\n isHovered(date: NgbDate) {\n return (\n this.fromDate &&\n !this.toDate &&\n this.hoveredDate &&\n date.after(this.fromDate) &&\n date.before(this.hoveredDate)\n );\n }\n\n isInside(date: NgbDate) {\n return (\n this.toDate && date.after(this.fromDate) && date.before(this.toDate)\n );\n }\n\n isRange(date: NgbDate) {\n return (\n date.equals(this.fromDate) ||\n (this.toDate && date.equals(this.toDate)) ||\n this.isInside(date) ||\n this.isHovered(date)\n );\n }\n\n validateInput(currentValue: NgbDate | null, input: string): NgbDate | null {\n const parsed = this.formatter.parse(input);\n return parsed && this.calendar.isValid(NgbDate.from(parsed))\n ? NgbDate.from(parsed)\n : currentValue;\n }\n\n emitRange() {\n if (this.fromDate && this.toDate) {\n const from = new Date(\n this.fromDate.year,\n this.fromDate.month - 1,\n this.fromDate.day,\n );\n const to = new Date(\n this.toDate.year,\n this.toDate.month - 1,\n this.toDate.day,\n 23,\n 59,\n );\n this.filterService.dateFilterUpdated([from, to]);\n }\n }\n\n onClearDates() {\n this.fromDate = null;\n this.toDate = null;\n this.filterService.dateFilterUpdated(null);\n }\n\n onApply() {\n if (this.fromDate && this.toDate) {\n this.emitRange();\n }\n }\n\n\n}\n","<form class=\"form-inline\">\n <div class=\"mb-3 hidden\">\n <div class=\"input-group\">\n <input name=\"datepicker\" class=\"form-control\" ngbDatepicker #datepicker=\"ngbDatepicker\"\n [autoClose]=\"'outside'\" (dateSelect)=\"onDateSelection($event)\" [displayMonths]=\"2\" [dayTemplate]=\"t\"\n outsideDays=\"hidden\" [startDate]=\"fromDate!\" tabindex=\"-1\">\n <ng-template #t let-date let-focused=\"focused\">\n <span class=\"custom-day\" [class.focused]=\"focused\" [class.range]=\"isRange(date)\"\n [class.faded]=\"isHovered(date) || isInside(date)\" (mouseenter)=\"hoveredDate = date\"\n (mouseleave)=\"hoveredDate = null\">\n {{ date.day }}\n </span>\n </ng-template>\n </div>\n </div>\n <div>\n <div class=\"input-group\">\n <input #dpFromDate class=\"form-control\" placeholder=\"dd/MM/yyyy\" name=\"dpFromDate\"\n [value]=\"formatter.format(fromDate)\" (input)=\"fromDate = validateInput(fromDate, dpFromDate.value)\">\n <div class=\"input-group-append\">\n <button class=\"btn btn-outline-secondary calendar\" (click)=\"datepicker.toggle()\" type=\"button\"></button>\n </div>\n </div>\n </div>\n <div class=\"mb-3 ms-2\">\n <div class=\"input-group\">\n <input #dpToDate class=\"form-control\" placeholder=\"dd/MM/yyyy\" name=\"dpToDate\"\n [value]=\"formatter.format(toDate)\" (input)=\"toDate = validateInput(toDate, dpToDate.value)\">\n <div class=\"input-group-append\">\n <button class=\"btn btn-outline-secondary calendar\" (click)=\"datepicker.toggle()\" type=\"button\"></button>\n </div>\n </div>\n </div>\n <button class=\"btn btn-outline-primary rounded-pill ms-3\" (click)=\"onApply()\" [disabled]=\"!toDate\">{{'Apply' |\n translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill ms-3\" (click)=\"onClearDates()\">{{'Clear' |\n translate}}</button>\n</form>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ProfileService } from '../../../services/models/profile.service';\nimport { uploadFileToS3, getSignedImageUrlForProfile } from '../../../services/s3.service';\nimport { BaseUserService } from '../../../services/user.service';\nimport { ProfileEntity } from '../../../types.service';\nimport { Md5 } from \"ts-md5/dist/md5\";\n\nconst cache = {};\n@Component({\n selector: 'lib-avatar',\n template: `<img [src]=\"avatar\" />`,\n styleUrls: [\"./avatar.component.scss\"],\n})\nexport class AvatarComponent implements OnInit {\n\n @Input() size: number = 45;\n\n @Input() userID: string;\n\n currentUser: ProfileEntity;\n\n avatar;\n\n constructor(\n private userService: BaseUserService,\n private profileService: ProfileService,\n ) {\n this.userService.isChanged.subscribe(() => {\n if (!this.currentUser) {\n this.currentUser = this.userService.cu;\n this.setAvatar(this.currentUser);\n }\n });\n }\n\n async ngOnInit(): Promise<void> {\n if (this.userID) {\n const profile = await this.profileService.getProfile(this.userID);\n if (profile) {\n const user = new ProfileEntity(profile);\n this.setAvatar(user);\n }\n } else {\n this.currentUser = this.userService.cu;\n this.setAvatar(this.currentUser);\n }\n }\n\n async setAvatar(user: ProfileEntity) {\n const { id, avatar, email } = user;\n\n // If avatar is not cached, check first if we have an avatar URL to fetch\n // from S3. If not, retrieve it from libravatar.\n // TODO use in a Service to be able to change/upload freely.\n if (!cache.hasOwnProperty(id)) {\n if (!avatar && email) {\n const md5 = new Md5();\n const md5hash = md5.appendStr(email).end();\n const avatar = `https://seccdn.libravatar.org/avatar/${md5hash}?s=${this.size}&default=identicon`;\n const url = await fetch(avatar)\n .then((res) => res.blob())\n .then((blob) => {\n const file = new File([blob], \"avatar.jpeg\", {\n type: \"image/jpeg\",\n });\n return uploadFileToS3(\"avatars/\", file, id);\n });\n await this.profileService.updateProfile({ id, avatar: url });\n user.avatar = url;\n cache[id] = avatar;\n }\n if (avatar) {\n // TODO generating signed urls for avatar makes NO SENSE ($$$)\n // Sorry got to copypaste that, but really need to get rid of\n cache[id] = await getSignedImageUrlForProfile(user);\n }\n }\n this.avatar = cache[id];\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Capture } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class CaptureService {\r\n API: any; //AWS\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected\r\n }\r\n\r\n async getCapturesBySpace(spaceID: string): Promise<Capture[]> {\r\n return this.API.CapturesBySpace(spaceID).then((cap) => cap.items);\r\n }\r\n\r\n async getCapture(captureID: string): Promise<Capture> {\r\n return this.API.__proto__.GetCapture(captureID);\r\n }\r\n\r\n async deleteCapture(captureID: string): Promise<Capture> {\r\n return this.API.__proto__.DeleteCapture({id: captureID});\r\n }\r\n\r\n async updateCapture(capture: any): Promise<Capture> {\r\n return this.API.__proto__.UpdateCapture(capture);\r\n }\r\n\r\n async createCapture(capture: Capture): Promise<Capture> {\r\n return this.API.__proto__.CreateCapture(capture);\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Node } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class NodeService {\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async updateNode(input: any): Promise<Node> {\r\n return this.API.__proto__.UpdateNode(input);\r\n }\r\n\r\n async deleteNode(id: string): Promise<Node> {\r\n return this.API.__proto__.DeleteNode({ id });\r\n }\r\n\r\n async getNode(id: string): Promise<Node> {\r\n return this.API.__proto__.GetNode(id);\r\n }\r\n\r\n async createNode(input: Node): Promise<Node> {\r\n return this.API.__proto__.CreateNode(input);\r\n }\r\n}\r\n","import { getMetaForImage, wait } from \"../helpers.service\";\r\nimport { Navigation, Plan } from \"../types.service\";\r\n\r\nexport function getCoefficientsForImage(\r\n img: HTMLImageElement,\r\n rectangle: any,\r\n): { coeffX: number; coeffY: number } {\r\n let coeffY;\r\n let coeffX;\r\n const imgRatio = img.width / img.height;\r\n const rectRatio = rectangle.width / rectangle.height;\r\n // console.log(\"image\", img.width, img.height);\r\n // console.log(\"rectangle\", rectangle.width, rectangle.height);\r\n // console.log(imgRatio, rectRatio);\r\n if (imgRatio > rectRatio) {\r\n // img is fitted in rectangle by width\r\n coeffX = img.width / rectangle.width;\r\n const effectiveImageHeight = rectangle.width / imgRatio;\r\n coeffY = img.height / effectiveImageHeight;\r\n } else {\r\n coeffY = img.height / rectangle.height;\r\n const effectiveImageWidth = rectangle.height * imgRatio;\r\n coeffX = img.width / effectiveImageWidth;\r\n }\r\n // console.log(coeffX, coeffY);\r\n return { coeffX, coeffY };\r\n}\r\n\r\nexport function styleButton(button: HTMLButtonElement) {\r\n button.style.backgroundImage = `url(\"https://api.iconify.design/mdi:adjust.svg?color=green&height=17&width=17\")`;\r\n button.style.backgroundColor = \"transparent\";\r\n button.style.position = \"absolute\";\r\n button.style.border = \"none\";\r\n button.style.width = \"17px\";\r\n button.style.height = \"17px\";\r\n button.disabled = true;\r\n}\r\n\r\nexport const showScanPointsOnPlanInDiv = async (\r\n plan: Plan,\r\n divPlan: HTMLElement,\r\n navigations: Navigation[],\r\n): Promise<HTMLButtonElement[]> => {\r\n if (!divPlan || !plan.filepath) {\r\n return [];\r\n }\r\n const calibrage = JSON.parse(plan.calibration);\r\n\r\n const img = await getMetaForImage(plan.filepath);\r\n divPlan.style.backgroundImage = `url(${plan.filepath})`;\r\n divPlan.style.backgroundSize = \"contain\";\r\n divPlan.style.backgroundRepeat = \"no-repeat\";\r\n await wait(1500); // while image is loaded to div\r\n divPlan.innerHTML = \"\"; // remove all previous buttons if exist\r\n const rect = divPlan.getBoundingClientRect();\r\n const { coeffX, coeffY } = getCoefficientsForImage(img, rect);\r\n const buttons = [];\r\n await Promise.all(\r\n navigations.map(async (navigation) => {\r\n const element = document.createElement(\"button\");\r\n styleButton(element);\r\n element.id = navigation.matterportSweepID;\r\n if (calibrage.new) {\r\n // new procedure of calibrage\r\n // find position for a given plan\r\n const positionsOnPlan = navigation.positionOnPlan.map((entry) =>\r\n JSON.parse(entry),\r\n );\r\n const positionOnPlan = positionsOnPlan.find(\r\n (data) => data.planID === plan.id,\r\n );\r\n if (positionOnPlan) {\r\n const realWidth = img.width / coeffX;\r\n const realHeight = img.height / coeffY;\r\n element.style.top = `${\r\n (positionOnPlan.y * realHeight) / calibrage.imgHeight -\r\n 10\r\n }px`;\r\n element.style.left = `${\r\n (positionOnPlan.x * realWidth) / calibrage.imgWidth - 10\r\n }px`;\r\n }\r\n } else {\r\n const position = JSON.parse(navigation.position);\r\n const x = calibrage.offsetX + position.x * calibrage.x;\r\n const y = calibrage.offsetY + position.z * calibrage.y;\r\n element.style.top = `${y / coeffY - 10}px`;\r\n element.style.left = `${x / coeffX - 10}px`;\r\n }\r\n divPlan.append(element);\r\n buttons.push(element);\r\n }),\r\n );\r\n return buttons;\r\n};\r\n","/* eslint-disable func-names */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { getDocument, GlobalWorkerOptions } from \"pdfjs-dist\";\r\nimport panzoom from \"panzoom\";\r\nimport { ReplaySubject, Subject, takeUntil } from \"rxjs\";\r\nimport { Router } from \"@angular/router\";\r\nimport { FeatureType, Plan, PoiType, Zone } from \"../../types.service\";\r\nimport { BaseVisibilityService } from \"../baseVisibility.service\";\r\nimport { MatterportService } from \"../matterport.service\";\r\nimport { ViewerService } from \"../viewer.service\";\r\nimport { ZoneService } from \"./zone.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { getSignedFile, uploadFileToS3 } from \"../s3.service\";\r\nimport { BaseTagService } from \"../tag.service\";\r\nimport { Config } from \"../../config\";\r\nimport { getCoefficientsForImage } from \"../zone-drawer.service\";\r\nimport { getMetaForImage } from \"../../helpers.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class PlanService {\r\n chosenPlan: Plan;\r\n\r\n currentPlan: Plan;\r\n\r\n currentSweep: string;\r\n\r\n planFileCache: File;\r\n\r\n planCanvas: any;\r\n\r\n planDiv: HTMLElement | SVGElement;\r\n planDivContent: HTMLElement;\r\n\r\n panzoom: any;\r\n\r\n isReady: boolean = false;\r\n\r\n userPositionBtn: HTMLButtonElement;\r\n\r\n coeffPlanX: number;\r\n\r\n coeffPlanY: number;\r\n\r\n calibrationPlan: any;\r\n\r\n detailTagDiv: HTMLElement;\r\n\r\n detailTagDivIsHover = false;\r\n\r\n btnTagIsHover = false;\r\n\r\n resizePlanSubscription = new Subject<boolean>();\r\n\r\n imgPlan: HTMLImageElement;\r\n\r\n lastTouchTime = 0;\r\n\r\n delayDblTouch = 500;\r\n\r\n lastRotation: number = 0;\r\n\r\n htmlContentToInject: {\r\n title: string;\r\n content: string;\r\n elementID: string;\r\n y: number;\r\n x: number;\r\n tagIcon: string;\r\n url: string;\r\n }[] = [];\r\n\r\n cache: {\r\n equipIDs: string[];\r\n ticketIDs: string[];\r\n measurementsIDs: string[];\r\n featureIDs: string[];\r\n zoneID: string;\r\n plan: Plan;\r\n htmlContent: {\r\n title: string;\r\n content: string;\r\n elementID: string;\r\n y: number;\r\n x: number;\r\n tagIcon: string;\r\n url: string;\r\n }[];\r\n };\r\n\r\n focusMouseTagDiv: boolean = false;\r\n\r\n API: any; //AWS\r\n\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any,\r\n private zoneService: ZoneService,\r\n private navigationService: NavigationService,\r\n // private tagService: TagService,\r\n private viewerService: ViewerService,\r\n private router: Router,\r\n private matterportService: MatterportService,\r\n // private config: AppConfig,\r\n private visibilityService: BaseVisibilityService,\r\n ) {\r\n this.API = apiInjected;\r\n this.matterportService.currentCameraPose.subscribe((pose) => {\r\n this.updateRotation(pose.rotation.y);\r\n });\r\n }\r\n\r\n async createPlan(planInput: Plan): Promise<Plan> {\r\n return this.API.__proto__.CreatePlan(planInput);\r\n }\r\n\r\n async deletePlan(plan: Plan): Promise<Plan> {\r\n // await deleteFromS3(plan.annexe);\r\n return this.API.__proto__.DeletePlan({ id: plan.id });\r\n }\r\n\r\n async getPlansForSpace(spaceID: string): Promise<Plan[]> {\r\n return this.API.__proto__.PlansBySpace(spaceID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n\r\n async getPlansForZone(zoneID: string): Promise<Plan[]> {\r\n return this.API.__proto__.PlansByZone(zoneID).then((response) => response.items);\r\n }\r\n\r\n async getSingedPlansForSpace(spaceID: string): Promise<Plan[]> {\r\n const plansFromDB = await this.getPlansForSpace(spaceID);\r\n // console.log(plansFromDB);\r\n const plans = [];\r\n if (plansFromDB.length > 0) {\r\n await Promise.all(\r\n plansFromDB.map(async (plan) => {\r\n const planObject = { ...plan } as Plan;\r\n // annexe looks like visits/modelID/plans/file.extension\r\n const signed = await getSignedFile(plan.annexe);\r\n if (signed) {\r\n planObject.filepath = signed;\r\n }\r\n if (plan.annexe) {\r\n const [, modelID, , filenameWithExtension] =\r\n plan.annexe.split(\"/\");\r\n const [, extention] = filenameWithExtension.split(\".\");\r\n planObject.model3d = modelID;\r\n planObject.extension = extention;\r\n plans.push(planObject);\r\n } else {\r\n console.log(`Error plan have not annexe => `);\r\n console.log(plan.id);\r\n }\r\n }),\r\n );\r\n }\r\n return plans;\r\n }\r\n\r\n async getPlansWithZonesForSpace(spaceID: string): Promise<Plan[]> {\r\n const plans = await this.getPlansForSpace(spaceID);\r\n const plansZones = plans.filter(\r\n (plan) => plan.zone && plan.calibration,\r\n );\r\n return plansZones;\r\n }\r\n\r\n setChosenPlan(chosenPlan: Plan) {\r\n this.chosenPlan = chosenPlan;\r\n }\r\n\r\n getChosenPlan(): Plan {\r\n return this.chosenPlan;\r\n }\r\n\r\n setPlanFileCache(planFileCache: File): Promise<void> {\r\n this.planFileCache = planFileCache;\r\n return Promise.resolve();\r\n }\r\n\r\n getPlanFileCache(): File {\r\n return this.planFileCache;\r\n }\r\n\r\n async createPlanWithAnnexe(\r\n plan: Plan,\r\n file: File,\r\n ): Promise<Plan> {\r\n const createdPlan = await this.createPlan(plan);\r\n const model3D = await this.zoneService.getModel3DForZone(plan.zoneID);\r\n const url = await uploadFileToS3(\r\n `visits/${model3D}/plans/`,\r\n file,\r\n createdPlan.id,\r\n );\r\n if (url) {\r\n return this.API.__proto__.UpdatePlan({ id: createdPlan.id, annexe: url });\r\n }\r\n return createdPlan;\r\n }\r\n\r\n async updatePlan(plan: any): Promise<Plan> {\r\n return this.API.__proto__.UpdatePlan(plan);\r\n }\r\n\r\n async updatePlanFile(): Promise<string> {\r\n if (this.chosenPlan && this.planFileCache) {\r\n const model3D = await this.zoneService.getModel3DForZone(\r\n this.chosenPlan.zoneID,\r\n );\r\n return uploadFileToS3(\r\n `visits/${model3D}/plans/`,\r\n this.planFileCache,\r\n this.chosenPlan.id,\r\n );\r\n }\r\n return Promise.reject();\r\n }\r\n\r\n async setAllPlansForZoneNotCurrent(zoneID: string, currentPlanID: string) {\r\n const plans = await this.API.__proto__.ListPlans({ zoneID: { eq: zoneID } });\r\n await Promise.all(\r\n plans.items.map(async (plan) => {\r\n if (plan.isCurrentForZone && plan.id !== currentPlanID) {\r\n await this.updatePlan({\r\n id: plan.id,\r\n isCurrentForZone: false,\r\n });\r\n }\r\n }),\r\n );\r\n }\r\n\r\n async configurePlan(\r\n currentPlan: Plan,\r\n divId: string = \"planDivPane\",\r\n divContentId: string = \"planDivPaneContent\"\r\n ): Promise<boolean> {\r\n console.log(\"<> COnfigure PLAN : \", currentPlan, divId, divContentId);\r\n this.isReady = false;\r\n if (!this.detailTagDiv) {\r\n this.detailTagDiv = document.querySelector(\r\n `#detailTagDiv`,\r\n ) as HTMLElement;\r\n }\r\n this.detailTagDiv.addEventListener(\"mouseenter\", () => {\r\n this.focusMouseTagDiv = true;\r\n });\r\n this.detailTagDiv.addEventListener(\"mouseleave\", () => {\r\n this.btnTagIsHover = false;\r\n this.detailTagDiv.style.display = \"none\";\r\n this.focusMouseTagDiv = false;\r\n });\r\n\r\n this.calibrationPlan = JSON.parse(currentPlan.calibration);\r\n this.currentPlan = currentPlan;\r\n this.planDiv = document.querySelector(`#${divId}`) as HTMLElement;\r\n this.planDivContent = document.querySelector(`#${divContentId}`) as HTMLElement;\r\n\r\n this.planDiv.addEventListener(\r\n \"touchstart\",\r\n this.handleTouch.bind(this),\r\n );\r\n this.planDiv.addEventListener(\r\n \"dblclick\",\r\n this.onDblClickPlan.bind(this),\r\n );\r\n\r\n if (!currentPlan.annexe.includes(\"pdf\")) {\r\n this.imgPlan = await getMetaForImage(currentPlan.filepath);\r\n //Rect use offsetWidth : height, not actual boundingClientRect because will be modified by the zoom.\r\n const rect = { width: this.planDivContent.offsetWidth, height: this.planDivContent.offsetHeight };\r\n const { coeffX, coeffY } = getCoefficientsForImage(\r\n this.imgPlan,\r\n rect,\r\n );\r\n this.coeffPlanX = coeffX;\r\n this.coeffPlanY = coeffY;\r\n\r\n this.planDivContent.style.backgroundImage = `url(${currentPlan.filepath})`;\r\n } else {\r\n await this.drawPdf(currentPlan);\r\n }\r\n this.planDivContent.style.backgroundSize = \"contain\";\r\n this.planDivContent.style.backgroundRepeat = \"no-repeat\";\r\n\r\n this.panzoom = panzoom(this.planDiv, {\r\n bounds: true,\r\n boundsPadding: 0,\r\n maxZoom: 4,\r\n zoomDoubleClickSpeed: 1, //disables double click zoom\r\n //initialZoom: 4\r\n });\r\n this.panzoom.zoomAbs(0, 0, 4);\r\n setTimeout(() => {\r\n this.updateRotation(this.lastRotation);\r\n }, 200);\r\n return true;\r\n }\r\n\r\n clearPlanImage() {\r\n if (this.planDivContent) {\r\n this.planDivContent.style.backgroundImage = null;\r\n }\r\n }\r\n\r\n async drawPdf(currentPlan: Plan): Promise<void> {\r\n return new Promise(async (resolve) => {\r\n const canvas = document.createElement(\r\n \"canvas\",\r\n ) as HTMLCanvasElement;\r\n\r\n const context = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\r\n const pdfjsWorker = await import(\r\n \"pdfjs-dist/build/pdf.worker.entry\"\r\n );\r\n\r\n GlobalWorkerOptions.workerSrc = pdfjsWorker;\r\n const pdf = await getDocument(\r\n currentPlan.filepath,\r\n ).promise;\r\n const page = await pdf.getPage(1);\r\n\r\n const viewPortParameters = { scale: 1.5 };\r\n const viewport = page.getViewport(viewPortParameters);\r\n\r\n canvas.height = viewport.height;\r\n canvas.width = viewport.width;\r\n const renderContext = {\r\n canvasContext: context,\r\n viewport,\r\n };\r\n const renderTask = page.render(renderContext).promise;\r\n renderTask.then(async () => {\r\n const imgUrl = canvas.toDataURL(\"image/png\");\r\n this.imgPlan = await getMetaForImage(imgUrl);\r\n const rect = { width: this.planDivContent.offsetWidth, height: this.planDivContent.offsetHeight };\r\n const { coeffX, coeffY } = getCoefficientsForImage(\r\n this.imgPlan,\r\n rect,\r\n );\r\n this.coeffPlanX = coeffX;\r\n this.coeffPlanY = coeffY;\r\n this.planDiv.style.backgroundImage = `url(${imgUrl})`;\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n async drawElement(element: any, tagType: PoiType, currentPlan: Plan, tagService: BaseTagService, config: Config) {\r\n const [poi] = element.pois.items;\r\n if (poi && poi.coordinate && currentPlan) {\r\n const { zone } = currentPlan;\r\n if (zone) {\r\n const position = JSON.parse(poi.coordinate);\r\n const button = document.createElement(\"button\");\r\n let elementTitle: string;\r\n const url = tagService.getUrlForSeeDetails(\r\n element,\r\n tagType,\r\n );\r\n let tagIconImage: string;\r\n switch (tagType) {\r\n case PoiType.TICKET: {\r\n elementTitle = element.title;\r\n tagIconImage = config.my_config.icon_ticket;\r\n break;\r\n }\r\n case PoiType.EQUIPMENT: {\r\n tagIconImage = config.my_config.icon_equipment;\r\n elementTitle = element.name;\r\n break;\r\n }\r\n case PoiType.MEASURE:\r\n elementTitle = element.title;\r\n tagIconImage = config.my_config.icon_measure;\r\n break;\r\n case PoiType.DATA:\r\n tagIconImage = config.my_config.icon_data;\r\n break;\r\n case PoiType.DESK:\r\n tagIconImage = config.my_config.icon_data;\r\n break;\r\n default:\r\n return;\r\n }\r\n if (poi.tagIcon) {\r\n const tagIcon = JSON.parse(poi.tagIcon);\r\n if (tagType === PoiType.DATA && element.type === FeatureType.INDICATOR_TEMP) {\r\n tagIcon.src = tagService.getIconTagImageForFeature(\r\n element,\r\n poi,\r\n );\r\n }\r\n // poi.tagIcon = tagIcon;\r\n\r\n if (tagIcon.src) {\r\n const source = await getSignedFile(tagIcon.src);\r\n if (source) {\r\n tagIconImage = source;\r\n }\r\n }\r\n }\r\n this.styleButton(button, tagIconImage);\r\n button.id = element.id;\r\n this.planDivContent.append(button);\r\n let x: number;\r\n let y: number;\r\n if (this.calibrationPlan.new) {\r\n // alert(\"new calibration plan: positioning not ready yet\");\r\n const position2D =\r\n this.transformPosition3DForNewCalibration(position);\r\n x = position2D.x;\r\n y = position2D.y;\r\n button.style.top = `${y / position2D.coeffY - 5}px`;\r\n button.style.left = `${x / position2D.coeffX - 5}px`;\r\n } else {\r\n // to remove when all calibrations are new\r\n x =\r\n this.calibrationPlan.offsetX +\r\n position.x * this.calibrationPlan.x;\r\n y =\r\n this.calibrationPlan.offsetY +\r\n position.z * this.calibrationPlan.y;\r\n button.style.top = `${y / this.coeffPlanY - 5}px`;\r\n button.style.left = `${x / this.coeffPlanX - 5}px`;\r\n }\r\n\r\n const { html, height } = await tagService.getHtmlToInject(\r\n tagType,\r\n element,\r\n 0\r\n );\r\n this.htmlContentToInject.push({\r\n elementID: element.id,\r\n title: elementTitle || \"\",\r\n content: html,\r\n y,\r\n x,\r\n tagIcon: tagIconImage,\r\n url,\r\n });\r\n this.addListenersToButton(button, url);\r\n this.updateRotation(this.lastRotation);\r\n }\r\n }\r\n }\r\n\r\n async drawUserPosition(currentSweep = this.currentSweep) {\r\n this.currentSweep = currentSweep;\r\n if (this.calibrationPlan && currentSweep) {\r\n const position =\r\n this.matterportService.getCurrentCameraPosition()?.position;\r\n if (position) {\r\n if (!this.userPositionBtn) {\r\n this.userPositionBtn = document.createElement(\"button\");\r\n this.userPositionBtn.id = \"currentPosition\";\r\n this.planDivContent.append(this.userPositionBtn);\r\n this.userPositionBtn.title = \"You are here\";\r\n this.styleButton(\r\n this.userPositionBtn,\r\n \"https://api.iconify.design/bx:bxs-user-circle.svg?color=green&height=17&width=17\",\r\n );\r\n }\r\n let x: number;\r\n let y: number;\r\n if (this.calibrationPlan.new) {\r\n const position2D =\r\n this.transformPosition3DForNewCalibration(position);\r\n x = position2D.x / position2D.coeffX - 5;\r\n y = position2D.y / position2D.coeffY - 5;\r\n } else {\r\n x =\r\n (this.calibrationPlan.offsetX +\r\n position.x * this.calibrationPlan.x) /\r\n this.coeffPlanX;\r\n y =\r\n (this.calibrationPlan.offsetY +\r\n position.z * this.calibrationPlan.y) /\r\n this.coeffPlanY;\r\n }\r\n this.userPositionBtn.style.top = `${y}px`;\r\n this.userPositionBtn.style.left = `${x}px`;\r\n this.moveOnPoint({ x: x + 5, y: y + 5 });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Center the view of the plan on coordinates\r\n * @param coordinate Coordinate on the plan\r\n */\r\n moveOnPoint(coordinate) {\r\n if (this.planDiv) {\r\n const scale = this.panzoom.getTransform().scale;\r\n const moveX = (this.planDiv.clientWidth / 2 - coordinate.x * scale);\r\n const moveY = (this.planDiv.clientHeight / 2 - coordinate.y * scale);\r\n this.panzoom.moveTo(moveX, moveY);\r\n this.planDivContent.style.transformOrigin = `${coordinate.x}px ${coordinate.y}px`;\r\n }\r\n }\r\n\r\n /**\r\n * Apply a rotation to the plan\r\n * Buttons will remain in the correct rotation\r\n * @param rotation \r\n */\r\n updateRotation(rotation) {\r\n this.lastRotation = rotation;\r\n if (this.planDivContent) {\r\n this.planDivContent.style.transform = `rotate(${rotation}deg)`;\r\n const buttons = this.planDivContent.querySelectorAll(\"button\");\r\n // eslint-disable-next-line unicorn/no-array-for-each\r\n buttons.forEach((button) => {\r\n button.style.transform = `rotate(${-rotation}deg)`;\r\n });\r\n }\r\n }\r\n\r\n\r\n removeCurrentPosition() {\r\n const button = document.querySelector(\"#currentPosition\");\r\n if (button) {\r\n button.remove();\r\n this.userPositionBtn = null;\r\n }\r\n }\r\n\r\n styleButton(button: HTMLButtonElement, url: string) {\r\n button.style.backgroundImage = `url(${url})`;\r\n button.style.backgroundColor = \"transparent\";\r\n button.style.position = \"absolute\";\r\n button.style.border = \"none\";\r\n button.style.width = \"10px\";\r\n button.style.height = \"10px\";\r\n button.disabled = false;\r\n button.style.backgroundSize = \"contain\";\r\n button.style.backgroundRepeat = \"no-repeat\";\r\n }\r\n\r\n addListenersToButton(button: HTMLButtonElement, url: string) {\r\n button.addEventListener(\"mouseenter\", async (event) => {\r\n const contentForButton = this.htmlContentToInject.find(\r\n (object) => object.elementID === button.id,\r\n );\r\n this.btnTagIsHover = true;\r\n const title = document.querySelector(`#titleTagDiv`) as HTMLElement;\r\n if (contentForButton.title) {\r\n title.style.display = \"inline\";\r\n title.innerHTML = contentForButton.title;\r\n } else {\r\n title.style.display = \"none\";\r\n }\r\n\r\n const content = document.querySelector(\r\n `#htmlTagDiv`,\r\n ) as HTMLElement;\r\n this.detailTagDiv.style.top = `${event.clientY + 10}px`;\r\n this.detailTagDiv.style.left = `${event.clientX < 120 ? 0 : event.clientX - 120\r\n }px`;\r\n this.detailTagDiv.style.display = \"block\";\r\n // console.log(contentForButton.content);\r\n content.innerHTML = contentForButton.content;\r\n const detailButton = content.querySelector(\"#detailBtn\");\r\n if (detailButton) {\r\n detailButton.addEventListener(\"click\", () => {\r\n this.visibilityService.detailShowing.next(true);\r\n this.router.navigate([url]);\r\n });\r\n }\r\n const bookingButton = content.querySelector(\"#bookingBtn\");\r\n if (bookingButton) {\r\n bookingButton.addEventListener(\"click\", () => {\r\n this.visibilityService.detailShowing.next(true);\r\n this.router.navigate([url]);\r\n });\r\n }\r\n });\r\n\r\n button.addEventListener(\"mouseleave\", async () => {\r\n // we wait if user hovers on to div of the tag (changes this.focusMouseTagDiv)\r\n this.btnTagIsHover = false;\r\n setTimeout(() => {\r\n if (!this.focusMouseTagDiv && !this.btnTagIsHover) {\r\n this.detailTagDiv.style.display = \"none\";\r\n }\r\n }, 100);\r\n });\r\n button.addEventListener(\"click\", async () => {\r\n this.detailTagDiv.style.display = \"none\";\r\n await this.viewerService.action_move_to_tag(button.id);\r\n this.visibilityService.detailShowing.next(true);\r\n this.router.navigate([url]);\r\n });\r\n }\r\n\r\n clearBtn(idList: any[]) {\r\n for (const id of idList) {\r\n const button = document.querySelector(`#\\\\${id}`);\r\n if (button) {\r\n button.remove();\r\n }\r\n }\r\n }\r\n\r\n clearAllButtons() {\r\n if (this.planDivContent) {\r\n const buttons = this.planDivContent.querySelectorAll(\"button\");\r\n // eslint-disable-next-line unicorn/no-array-for-each\r\n buttons.forEach(function (currentValue) {\r\n currentValue.remove();\r\n });\r\n this.userPositionBtn = null;\r\n }\r\n }\r\n\r\n onPlanRemove() {\r\n this.userPositionBtn = null;\r\n this.calibrationPlan = null;\r\n this.currentSweep = null;\r\n this.detailTagDiv = null;\r\n }\r\n\r\n async resizePlan(isRemoving: boolean) {\r\n\r\n this.resizePlanSubscription.next(false);\r\n if (isRemoving) {\r\n return;\r\n }\r\n if (this.planDiv && this.currentSweep) {\r\n this.panzoom = panzoom(this.planDiv, {\r\n bounds: true,\r\n boundsPadding: 0,\r\n maxZoom: 4,\r\n });\r\n setTimeout(() => {\r\n const rect = { width: this.planDivContent.offsetWidth, height: this.planDivContent.offsetHeight };\r\n const { coeffX, coeffY } = getCoefficientsForImage(\r\n this.imgPlan,\r\n rect,\r\n );\r\n this.coeffPlanX = coeffX;\r\n this.coeffPlanY = coeffY;\r\n this.panzoom.zoomAbs(0, 0, 4);\r\n this.resizePlanSubscription.next(true);\r\n }, 200);\r\n }\r\n }\r\n\r\n handleTouch(event) {\r\n const now = Date.now();\r\n if (now - this.lastTouchTime < this.delayDblTouch) {\r\n this.lastTouchTime = 0;\r\n // this.onDblClickPlan(event);\r\n /** Simulate a dblclick for phone (we don't get offsetX/Y on touchevent) */\r\n const newEvent = document.createEvent(\"MouseEvents\");\r\n const touch = event.changedTouches[0];\r\n newEvent.initMouseEvent(\r\n \"dblclick\",\r\n true,\r\n true,\r\n event.target.ownerDocument.defaultView,\r\n 0,\r\n touch.screenX,\r\n touch.screenY,\r\n touch.clientX,\r\n touch.clientY,\r\n event.ctrlKey,\r\n event.altKey,\r\n event.shirtKey,\r\n event.metaKey,\r\n 0,\r\n null,\r\n );\r\n event.target.dispatchEvent(newEvent);\r\n } else {\r\n this.lastTouchTime = now;\r\n }\r\n }\r\n\r\n async onDblClickPlan(event) {\r\n event.preventDefault();\r\n const clickX = event.offsetX;\r\n const clickY = event.offsetY;\r\n const zonePlan = this.currentPlan.zone;\r\n if (zonePlan) {\r\n const navigations: any =\r\n await this.navigationService.getNavigationsForZone(zonePlan);\r\n if (navigations.length > 0) {\r\n await Promise.all(\r\n navigations.map(async (nav) => {\r\n const position = JSON.parse(nav.position);\r\n let x: number;\r\n let y: number;\r\n if (this.calibrationPlan.new) {\r\n const position2D =\r\n this.transformPosition3DForNewCalibration(\r\n position,\r\n );\r\n x = position2D.x / position2D.coeffX;\r\n y = position2D.y / position2D.coeffY;\r\n } else {\r\n x =\r\n (this.calibrationPlan.offsetX +\r\n position.x * this.calibrationPlan.x) /\r\n this.coeffPlanX;\r\n y =\r\n (this.calibrationPlan.offsetY +\r\n position.z * this.calibrationPlan.y) /\r\n this.coeffPlanY;\r\n }\r\n\r\n const distX = Math.abs(clickX - x);\r\n const distY = Math.abs(clickY - y);\r\n nav.dist = Math.sqrt(\r\n Math.pow(distX, 2) + Math.pow(distY, 2),\r\n );\r\n }),\r\n );\r\n navigations.sort((a, b) => {\r\n return a.dist - b.dist;\r\n });\r\n this.matterportService.action_go_to_sweep(\r\n navigations[0].matterportSweepID,\r\n );\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Configures plan from cache (previous plan).\r\n */\r\n async uploadPlanFromCache(): Promise<void> {\r\n this.htmlContentToInject = this.cache.htmlContent;\r\n await this.configurePlan(this.cache.plan);\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * Puts buttons (tags) from cache according to passed element IDs (for filter if any)\r\n * @param elementIDs elements (tickets, equipments, etc) to be shown on plan\r\n */\r\n uploadTagsFromCache() {\r\n // console.log(\"uploading tags from cache\");\r\n\r\n for (const cached of this.cache.htmlContent) {\r\n const button = document.createElement(\"button\");\r\n this.styleButton(button, cached.tagIcon);\r\n button.id = cached.elementID;\r\n this.planDivContent.append(button);\r\n if (this.calibrationPlan.new) {\r\n const newCoeffX =\r\n this.coeffPlanX /\r\n (this.imgPlan.width / this.calibrationPlan.imgWidth);\r\n const newCoeffY =\r\n this.coeffPlanY /\r\n (this.imgPlan.height / this.calibrationPlan.imgHeight);\r\n button.style.top = `${cached.y / newCoeffY - 5}px`;\r\n button.style.left = `${cached.x / newCoeffX - 5}px`;\r\n } else {\r\n button.style.top = `${cached.y / this.coeffPlanY - 5}px`;\r\n button.style.left = `${cached.x / this.coeffPlanX - 5}px`;\r\n }\r\n\r\n this.addListenersToButton(button, cached.url);\r\n }\r\n }\r\n\r\n async getCalibratedPlanForZone(zone: Zone): Promise<Plan> {\r\n let plans = (await this.API.PlansByZone(zone.id)).items;\r\n let parentZone = null;\r\n if (plans.length === 0) {\r\n // try to find parent zone\r\n parentZone = await this.API.GetZone(zone.parentID);\r\n plans = (await this.API.PlansByZone(zone.parentID)).items;\r\n }\r\n const calibratedPlan = plans.find(\r\n (plan) => plan.calibration && plan.isCurrentForZone,\r\n ) as Plan;\r\n if (calibratedPlan) {\r\n const signed = await getSignedFile(calibratedPlan.annexe);\r\n if (signed) {\r\n calibratedPlan.filepath = signed;\r\n }\r\n calibratedPlan.navigationIDs = parentZone\r\n ? parentZone.sweepIDs\r\n : zone.sweepIDs;\r\n }\r\n return calibratedPlan || null;\r\n }\r\n\r\n transformPosition3DForNewCalibration(position: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n }): { x: number; y: number; coeffX: number; coeffY: number; } {\r\n const positionX =\r\n this.calibrationPlan.nameXAxis === \"x\" ? position.x : position.z;\r\n const positionY =\r\n this.calibrationPlan.nameYAxis === \"x\" ? position.x : position.z;\r\n let x =\r\n this.calibrationPlan.offsetX +\r\n positionX * this.calibrationPlan.scaleX;\r\n let y =\r\n this.calibrationPlan.offsetY +\r\n positionY * this.calibrationPlan.scaleY;\r\n const newCoeffX =\r\n this.coeffPlanX /\r\n (this.imgPlan.width / this.calibrationPlan.imgWidth);\r\n // console.log(\"newCoeffX\", newCoeffX);\r\n const newCoeffY =\r\n this.coeffPlanY /\r\n (this.imgPlan.height / this.calibrationPlan.imgHeight);\r\n x =\r\n (x - this.calibrationPlan.offsetXPlan) / this.calibrationPlan.scalePlan;\r\n\r\n y =\r\n (y - this.calibrationPlan.offsetYPlan) / this.calibrationPlan.scalePlan;\r\n // console.log(x, y);\r\n\r\n return { x, y, coeffX: newCoeffX, coeffY: newCoeffY };\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\n/* eslint-disable no-restricted-syntax */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Plan, Space, Visit, Zone } from \"../../types.service\";\r\nimport { getSignedFile, listFilesInFolder } from \"../s3.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { CaptureService } from \"./capture.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { NodeService } from \"./node.service\";\r\nimport { PlanService } from \"./plan.service\";\r\nimport { ZoneService } from \"./zone.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class VisitService {\r\n choosenPlan: Plan;\r\n\r\n constructor(\r\n private captureService: CaptureService,\r\n private nodeService: NodeService,\r\n private navigationService: NavigationService,\r\n private zoneService: ZoneService,\r\n private planService: PlanService,\r\n private userService: BaseUserService,\r\n ) {}\r\n\r\n async getVisitsForSpaceForUser(spaceID: string): Promise<Visit[]> {\r\n const visits = [];\r\n const missionsForSpace = this.userService.currentMissions.filter(\r\n (mis) => mis.spaceID === spaceID,\r\n );\r\n const allAllowed =\r\n this.userService.userHasAccessToAllZonesInSpace(spaceID);\r\n const captures = await this.captureService.getCapturesBySpace(spaceID);\r\n const nodes = captures.flatMap((cap) => cap.nodes.items);\r\n let allAllowedNodes = nodes;\r\n let allowedNodeIDs = [];\r\n if (!allAllowed) {\r\n const allowedZones = missionsForSpace.map((mis) => mis.zone);\r\n for (const zone of allowedZones) {\r\n allowedNodeIDs = [...allowedNodeIDs, ...zone.nodeIDs];\r\n }\r\n allowedNodeIDs = [...new Set(allowedNodeIDs)]; // to make unique\r\n allAllowedNodes = allAllowedNodes.filter((node) =>\r\n allowedNodeIDs.includes(node.id),\r\n );\r\n }\r\n for (const node of allAllowedNodes) {\r\n // console.log(node)\r\n const folder = `visits/${node.model3D}/sweeps/`;\r\n const files = await listFilesInFolder(folder);\r\n const isImported = Object.keys(files).length > 20; // TODO : at least 20 should be imported...\r\n const capture = captures.find((cap) =>\r\n cap.nodes.items.includes(node),\r\n );\r\n const visit = {\r\n captureID: node.captureID,\r\n model3d: node.model3D,\r\n takenAt: capture.takenAt,\r\n spaceID,\r\n viewer: capture.viewer,\r\n surface: capture.surface,\r\n node,\r\n name: node.metadata,\r\n imagesImported: isImported,\r\n } as Visit;\r\n visits.push(visit);\r\n }\r\n return visits;\r\n }\r\n\r\n async deleteVisit(visit: Visit, spaceID: string): Promise<any> {\r\n await this.nodeService.deleteNode(visit.node.id);\r\n const capture = await this.captureService.getCapture(visit.captureID);\r\n if (capture.nodes.items.length === 0) {\r\n await this.captureService.deleteCapture(visit.captureID);\r\n }\r\n const navigations = await this.navigationService.getNavigationsForNode(\r\n visit.node.id,\r\n );\r\n const zonesToDelete = await this.zoneService.getZonesForNodeForSpace(\r\n visit.node.id,\r\n spaceID,\r\n );\r\n await Promise.all(\r\n navigations.map(async (navig) => {\r\n await this.navigationService.deleteNavigation(navig.id);\r\n }),\r\n );\r\n if (zonesToDelete.length > 0) {\r\n await Promise.all(\r\n zonesToDelete.map(async (zone) => {\r\n const plans = await this.planService.getPlansForZone(\r\n zone.id,\r\n );\r\n if (plans.length > 0) {\r\n await Promise.all(\r\n plans.map(async (plan) => {\r\n await this.planService.deletePlan(plan);\r\n }),\r\n );\r\n }\r\n await this.zoneService.deleteZone(zone.id);\r\n }),\r\n );\r\n }\r\n // removeAllFilesFromFolderS3(`visits/${visit.model3d}/sweeps`);\r\n return Promise.resolve();\r\n }\r\n\r\n async loadImagesForSpace(space: Space): Promise<any> {\r\n const list = [];\r\n return this.getVisitsForSpaceForUser(space.id).then(async (visits) => {\r\n if (visits) {\r\n space.visits = visits;\r\n await Promise.all(\r\n visits.map(async (visit) => {\r\n const folder = `visits/${visit.model3d}/sweeps/`;\r\n const files = await listFilesInFolder(folder);\r\n await Promise.all(\r\n Object.keys(files).map(async (key) => {\r\n const file = files[key];\r\n const signed = await getSignedFile(file.key);\r\n const filename = file.key.split(\"/\")[3];\r\n list.push({\r\n path: signed,\r\n filename,\r\n visit,\r\n });\r\n }),\r\n );\r\n }),\r\n );\r\n return list;\r\n }\r\n return list;\r\n });\r\n }\r\n\r\n\r\n async getDefaultZoneForVisit(visit: Visit): Promise<Zone> {\r\n return this.zoneService\r\n .getZonesBySpace(visit.spaceID)\r\n .then(async (zones) => {\r\n const zonesWithVisitName = zones.filter(\r\n (zone) =>\r\n zone.name === visit.name &&\r\n zone.layer &&\r\n zone.layer.name === \"BUILDING\",\r\n );\r\n if (zonesWithVisitName.length === 1) {\r\n return zonesWithVisitName[0];\r\n }\r\n const parentZone = zones.find((zone) => !zone.parentID);\r\n return parentZone;\r\n });\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { filterUniqueArrayByID, sortAlphabeticallyOnName } from \"../../helpers.service\";\r\nimport { Space, Layer, PropertyType } from \"../../types.service\";\r\nimport { getSignedImageUrlForSpace } from \"../s3.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { CaptureService } from \"./capture.service\";\r\nimport { MissionService } from \"./mission.service\";\r\nimport { PropertyService } from \"./property.service\";\r\nimport { VisitService } from \"./visit.service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class SpaceService {\r\n\r\n locationsForUser: Space[] = [];\r\n\r\n locationUpdated: Subject<Space[]> = new Subject<Space[]>();\r\n\r\n API: any; //AWS\r\n\r\n constructor(\r\n private visitService: VisitService,\r\n private userService: BaseUserService,\r\n private propertyService: PropertyService,\r\n private captureService: CaptureService,\r\n private missionService: MissionService,\r\n @Inject('currentAPIService') apiInjected: any\r\n ) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async listSpaces(): Promise<Space[]> {\r\n return this.API.__proto__.ListSpaces().then((spaces) =>\r\n spaces.items.filter((sp) => !sp.deletedAt),\r\n );\r\n }\r\n\r\n async getLocationsForCurrentUser(): Promise<Space[]> {\r\n const missions = this.userService.currentMissions;\r\n if (!missions) return [];\r\n let locations = [];\r\n await Promise.all(\r\n missions.map(async (mission) => {\r\n if (mission.space && !mission.space.deletedAt) {\r\n const space = await this.getSpace(mission.space.id);\r\n await this.signUrlForSpace(space);\r\n await this.visitService\r\n .getVisitsForSpaceForUser(space.id)\r\n .then((visits) => {\r\n if (visits) {\r\n space.visits = visits;\r\n }\r\n });\r\n locations.push(space);\r\n }\r\n }),\r\n );\r\n if (locations.length > 0) {\r\n locations = sortAlphabeticallyOnName(\r\n filterUniqueArrayByID(locations),\r\n );\r\n }\r\n this.locationsForUser = locations;\r\n this.locationUpdated.next(locations);\r\n return locations;\r\n }\r\n\r\n async signUrlForSpace(loc: Space) {\r\n if (loc.annexes) {\r\n getSignedImageUrlForSpace(loc).then((url) => {\r\n if (url) {\r\n loc.annexes = url;\r\n }\r\n });\r\n }\r\n }\r\n\r\n async getAllowedSpacesForOrg(\r\n orgID: string,\r\n userOrgID: string,\r\n ): Promise<Space[]> {\r\n if (\r\n userOrgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" ||\r\n orgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\"\r\n ) {\r\n return this.listSpaces();\r\n }\r\n return this.getSpacesForOrg(userOrgID);\r\n }\r\n\r\n async getSpacesForOrg(orgID: string): Promise<Space[]> {\r\n const properties =\r\n await this.propertyService.getPropertiesForOrganisation(orgID);\r\n if (properties.length > 0) {\r\n const spaces = [];\r\n for (const property of properties) {\r\n if (property.space && !property.space.deletedAt) {\r\n spaces.push(property.space);\r\n }\r\n }\r\n return spaces;\r\n }\r\n return null;\r\n }\r\n\r\n async createSpace(values: Space, layer?: Layer): Promise<any> {\r\n const loc = await this.API.__proto__.CreateSpace(values);\r\n const zoneInput = {\r\n name: values.name,\r\n spaceID: loc.id,\r\n surface: 0,\r\n layerID: layer ? layer.id : null,\r\n };\r\n await this.API.__proto__.CreateZone(zoneInput);\r\n return loc;\r\n }\r\n\r\n async updateSpace(input: any): Promise<Space> {\r\n return this.API.__proto__.UpdateSpace(input);\r\n }\r\n\r\n async getSpace(id: string): Promise<Space> {\r\n return this.API.__proto__.GetSpace(id);\r\n }\r\n\r\n async getModel3DForSpace(spaceID: string): Promise<string> {\r\n const captures = await this.captureService.getCapturesBySpace(spaceID);\r\n if (captures.length > 0 && captures[0].nodes.items.length > 0) {\r\n return captures[0].nodes.items[0].model3D;\r\n }\r\n return null;\r\n }\r\n\r\n async getAllowedModel3DForSpace(spaceID: string): Promise<string> {\r\n const visits = await this.visitService.getVisitsForSpaceForUser(\r\n spaceID,\r\n );\r\n if (visits.length > 0) {\r\n return visits[0].model3d;\r\n }\r\n return null;\r\n }\r\n\r\n async softDeleteSpace(spaceID: string) {\r\n await this.updateSpace({\r\n id: spaceID,\r\n deletedAt: Date.now(),\r\n });\r\n const missions = await this.missionService.getMissionsForSpace(spaceID);\r\n const properties = await this.propertyService.listPropertiesForSpace(spaceID);\r\n if (this.userService.isSPAdmin()) {\r\n // delete all properties\r\n await Promise.all(\r\n properties.map(async (property) => {\r\n await this.propertyService.deleteProperty(property.id);\r\n }),\r\n );\r\n // delete all missions\r\n await Promise.all(\r\n missions.map(async (mission) => {\r\n await this.missionService.update({\r\n id: mission.id,\r\n deletedAt: Date.now(),\r\n });\r\n }),\r\n );\r\n } else {\r\n // delete property for current Org\r\n const currentOrg = this.userService.currentOrganisation(spaceID);\r\n const propertyToDelete = properties.find(\r\n (property) => property.organisationID === currentOrg.id,\r\n );\r\n if (propertyToDelete) {\r\n await this.propertyService.deleteProperty(propertyToDelete.id);\r\n }\r\n const missionsToDelete = missions.filter(\r\n (mission) =>\r\n mission.organisationID === currentOrg.id ||\r\n mission.orderedOrganisationID === currentOrg.id,\r\n );\r\n await Promise.all(\r\n missionsToDelete.map(async (mission) => {\r\n await this.missionService.update({\r\n id: mission.id,\r\n deletedAt: Date.now(),\r\n });\r\n }),\r\n );\r\n }\r\n const tickets = (await this.API.__proto__.TicketsBySpace(spaceID)).items;\r\n await Promise.all(\r\n tickets.map(async (ticket) => {\r\n await this.API.__proto__.DeleteTicket({id:ticket.id});\r\n }),\r\n );\r\n // TODO equipments, etc\r\n\r\n // remove from list\r\n this.locationsForUser = this.locationsForUser.filter((space)=>space.id !== spaceID);\r\n this.locationUpdated.next(this.locationsForUser);\r\n }\r\n\r\n /**\r\n * If current user can archive a space (only if his organisation is owning the property (PropertyType.PROPERTY))\r\n * @param spaceID\r\n * @returns\r\n */\r\n async canArchiveSpace(spaceID: string): Promise<boolean> {\r\n const currentOrg = this.userService.currentOrganisation(spaceID);\r\n const orgProperties =\r\n await this.propertyService.getPropertiesForOrganisation(\r\n currentOrg.id,\r\n );\r\n const property = orgProperties.find(\r\n (property_) => property_.spaceID === spaceID,\r\n );\r\n if (property.type === PropertyType.PROPERTY) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { SpaceService } from '../../../services/models/space.service';\nimport { VisitService } from '../../../services/models/visit.service';\nimport { ZoneService } from '../../../services/models/zone.service';\nimport { NavigatorService } from '../../../services/navigator.service';\nimport { ViewerService } from '../../../services/viewer.service';\nimport { Space, Visit, Zone } from '../../../types.service';\n\n@Component({\n selector: 'lib-navigation-bar',\n templateUrl: './navigation-bar.component.html',\n styleUrls: ['./navigation-bar.component.scss']\n})\nexport class NavigationBarComponent implements OnInit {\n @ViewChild(\"navbarSelectMenu\") navbarSelectMenu!: any;\n\n locations: Space[];\n\n spaceSubscription: Subscription;\n\n viewerSubscription: Subscription;\n\n locationIDSubscription: Subscription;\n\n currentLocationID: string;\n\n currentModel3d: string;\n\n selectedLocation: Space = null;\n\n selectedModel3d: string;\n\n selectedFloor: Zone = null;\n\n selectedZone: Zone = null;\n\n selectedChildZone: Zone = null;\n\n visitsPerSpace: Visit[] = null;\n\n floorsPerSpace: Zone[] = null;\n\n zonesPerSpace: Zone[] = null;\n\n zonesPerFloor: Zone[] = null;\n\n childrenZones: Zone[] = null;\n\n sweepToGo: string;\n\n floorToGo: Zone;\n\n constructor(\n private router: Router,\n private spaceService: SpaceService,\n private zoneService: ZoneService,\n private visitService: VisitService,\n private viewerService: ViewerService,\n private navigatorService: NavigatorService,\n ) {\n this.spaceSubscription = this.spaceService.locationUpdated.subscribe(\n (locs) => {\n this.locations = locs;\n if (this.selectedLocation) {\n this.selectedLocation = this.findLocationByID(\n this.selectedLocation.id,\n ); // Update Object (object address will change);\n }\n },\n );\n this.viewerSubscription = this.viewerService.viewerIsOn.subscribe(\n (data: {\n spaceID: string;\n model3D: string;\n sweep: string | null;\n }) => {\n console.log(\"menu navigation received update\", data);\n this.currentLocationID = data.spaceID;\n this.currentModel3d = data.model3D;\n if (!data.spaceID) {\n this.selectedLocation = null;\n this.sendUpdateLocationEvent();\n return;\n }\n if (\n (!this.selectedLocation ||\n this.selectedLocation.id !== data.spaceID) &&\n this.locations\n ) {\n this.selectedLocation = this.findLocationByID(data.spaceID);\n this.sendUpdateLocationEvent();\n }\n },\n );\n\n /**\n * We listen for Location change event\n */\n this.locationIDSubscription =\n this.navigatorService.locationIDChange.subscribe((id: string) => {\n this.clearData();\n this.selectedLocation = this.findLocationByID(id);\n this.navigatorService.currentNavBarLocationID = id;\n this.onSelectedLocationChanged();\n });\n }\n\n ngOnInit() {\n this.initLocations();\n }\n\n ngOnDestroy() {\n this.spaceSubscription.unsubscribe();\n this.viewerSubscription.unsubscribe();\n this.locationIDSubscription.unsubscribe();\n }\n\n async initLocations() {\n this.locations = this.spaceService.locationsForUser;\n if (this.locations.length === 0) {\n this.locations =\n await this.spaceService.getLocationsForCurrentUser();\n }\n if (this.currentLocationID && this.locations.length > 0) {\n this.selectedLocation = this.findLocationByID(\n this.currentLocationID,\n );\n if (this.selectedLocation) {\n this.sendUpdateLocationEvent();\n }\n }\n }\n\n /**\n * Find a location with a given ID\n * @param id ID for the location\n * @returns The location or null if no location were found\n */\n findLocationByID(id: string): Space {\n const space = this.locations.find((loc) => loc.id === id);\n return space || null; /** Convert to null if undefined */\n }\n\n clearData(clearVisits: boolean = true) {\n this.floorsPerSpace = null;\n this.selectedFloor = null;\n this.zonesPerFloor = null;\n this.childrenZones = null;\n this.selectedModel3d = null;\n this.sweepToGo = null;\n this.floorToGo = null;\n this.selectedZone = null;\n this.selectedChildZone = null;\n if (clearVisits) {\n this.visitsPerSpace = null;\n this.zonesPerSpace = null;\n }\n }\n\n /**\n * When the selectedLocation changes\n * Send a event to locationIDChange from NavigatorService\n * The event will be catch by this component and the filter bar will be update\n */\n sendUpdateLocationEvent() {\n const locationID = this.selectedLocation\n ? this.selectedLocation.id\n : null;\n this.navigatorService.locationIDChange.next(locationID);\n }\n\n async onSelectedLocationChanged() {\n if (!this.selectedLocation) {\n return;\n }\n try {\n this.visitsPerSpace =\n await this.visitService.getVisitsForSpaceForUser(\n this.selectedLocation.id,\n );\n this.zonesPerSpace = await this.zoneService.getZonesBySpaceForUser(\n this.selectedLocation.id,\n );\n if (this.visitsPerSpace.length === 1) {\n this.selectedModel3d = this.visitsPerSpace[0].model3d;\n this.floorsPerSpace = this.zonesPerSpace.filter(\n (zone) => zone.layer && zone.layer.name.includes(\"FLOOR\"),\n );\n if (this.floorsPerSpace.length === 1) {\n [this.selectedFloor] = this.floorsPerSpace;\n this.onFloorClick(false);\n }\n }\n } catch (error) {\n console.log(\"error onChosenLocation\", error);\n }\n }\n\n async onLocationClick() {\n this.clearData();\n await this.sendUpdateLocationEvent();\n }\n\n async onFloorClick(emitEvent = true) {\n this.sweepToGo = null;\n this.selectedZone = null;\n this.selectedChildZone = null;\n if (this.selectedFloor === null) {\n this.navigatorService.navBarZoneIDChange.next(null);\n this.navigatorService.currentNavBarZoneID = null;\n return;\n }\n if (emitEvent) {\n this.navigatorService.navBarZoneIDChange.next(\n this.selectedFloor.id,\n );\n }\n\n this.navigatorService.currentNavBarZoneID = this.selectedFloor.id;\n this.zonesPerFloor = this.zonesPerSpace.filter(\n (zone) =>\n // zone.id === this.selectedFloor.id ||\n zone.parentID === this.selectedFloor.id,\n );\n }\n\n async onZoneClick() {\n this.selectedChildZone = null;\n if (this.selectedZone === null) {\n if (this.selectedFloor === null) {\n this.navigatorService.navBarZoneIDChange.next(null);\n this.navigatorService.currentNavBarZoneID = null;\n } else {\n this.navigatorService.navBarZoneIDChange.next(\n this.selectedFloor.id,\n );\n this.navigatorService.currentNavBarZoneID =\n this.selectedFloor.id;\n }\n return;\n }\n this.childrenZones = this.zonesPerSpace.filter(\n (zone) => zone.parentID === this.selectedZone.id,\n );\n this.navigatorService.navBarZoneIDChange.next(this.selectedZone.id);\n this.navigatorService.currentNavBarZoneID = this.selectedZone.id;\n }\n\n async onVisitClick(event) {\n this.clearData(false);\n const index = event.target.value;\n const visit = this.visitsPerSpace[index];\n this.selectedModel3d = visit.model3d;\n const parentZoneForVisit =\n await this.visitService.getDefaultZoneForVisit(visit);\n this.floorsPerSpace = this.zonesPerSpace.filter(\n (zone) =>\n zone.layer &&\n zone.layer.name.includes(\"FLOOR\") &&\n zone.parentID === parentZoneForVisit.id,\n );\n }\n\n goTo() {\n if (this.selectedZone && !this.selectedZone.virtual) {\n this.sweepToGo = this.selectedChildZone\n ? this.selectedChildZone.sweepIDs[0]\n : this.selectedZone.sweepIDs[0];\n }\n if (this.selectedFloor && !this.selectedZone) {\n this.floorToGo = this.selectedFloor;\n }\n if (this.hasToChangeVisit()) {\n this.goToSweepOrFloor();\n } else {\n if (this.sweepToGo) {\n console.log(\"before set sweep\", this.sweepToGo);\n this.viewerService.setSweepToMove(this.sweepToGo);\n }\n if (this.floorToGo && this.floorsPerSpace.length !== 1) {\n this.navigatorService.floorToGo = this.floorToGo;\n }\n this.router.navigate([\"visit\", this.selectedLocation.id], {\n queryParams: { model3D: this.selectedModel3d },\n });\n }\n }\n\n hasToChangeVisit(): boolean {\n return (\n this.currentLocationID === this.selectedLocation.id &&\n this.selectedModel3d === this.currentModel3d\n );\n }\n\n goToSweepOrFloor() {\n if (this.sweepToGo) {\n this.navigatorService.goToSweepWithRotation(this.sweepToGo);\n }\n if (this.floorToGo) {\n this.navigatorService.goToFloor(this.floorToGo);\n }\n }\n\n // hasHistory(): boolean {\n // return this.navigatorService.modelHasHistory(this.selectedModel3d);\n // }\n\n canGo(): boolean {\n const viewerIsReady =\n this.viewerService.isLoaded && this.viewerService.showingViewer;\n const noViewer = !this.viewerService.showingViewer;\n return viewerIsReady || noViewer;\n }\n\n showLocation(): string {\n if (\n window.innerWidth < 750 &&\n this.navbarSelectMenu &&\n this.navbarSelectMenu.nativeElement.className.search(\"show\") ===\n -1 &&\n this.selectedLocation\n ) {\n return this.selectedLocation.name;\n }\n return \"\";\n }\n}\n","<nav class=\"navbar navbar-expand-md navbar-dark navbar-inverse second-nav\">\n <div class=\"d-flex col-12\">\n <div class=\"me-3\">\n <span class=\"iconify\" data-icon=\"mdi:map-marker-outline\" style=\"color: white;\" data-width=\"30\" data-height=\"30\"></span>\n </div>\n\n <div #navbarSelectMenu class=\"collapse navbar-collapse\" id=\"nav-item-container-blue\">\n <div class=\"d-flex flex-column flex-md-row \">\n <select class=\"form-control flex-fill location select-menu\" [(ngModel)]=\"selectedLocation\"\n (ngModelChange)=\"onLocationClick()\">\n <option [ngValue]=\"null\" selected>{{ 'Location' | translate }}</option>\n <option *ngFor=\"let loc of locations; index as index\" [ngValue]=\"loc\"> {{ loc.name }}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" (change)=\"onVisitClick($event)\"\n *ngIf=\"visitsPerSpace && visitsPerSpace.length > 1\">\n <option value=\"default\" selected disabled hidden>{{'Visit' | translate}}</option>\n <option *ngFor=\"let visit of visitsPerSpace; index as index\" value=\"{{index}}\">{{ visit.name}}\n </option>\n </select>\n <select class=\"form-control flex-fill floor select-menu\" [(ngModel)]=\"selectedFloor\"\n (ngModelChange)=\"onFloorClick()\">\n <option [ngValue]=\"null\" selected>{{'Floor' | translate}}</option>\n <option *ngFor=\"let zone of floorsPerSpace\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu zone\" [(ngModel)]=\"selectedZone\"\n (ngModelChange)=\"onZoneClick()\">\n <option [ngValue]=\"null\" selected>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of zonesPerFloor\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" [(ngModel)]=\"selectedChildZone\"\n *ngIf=\"childrenZones && childrenZones.length>0\">\n <option [ngValue]=\"null\" selected disabled>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of childrenZones\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <!-- <select class=\"form-control flex-fill\">\n <option i18n>{{'Favorites' | translate}}</option>\n </select> -->\n </div>\n <div class=\"row\" style=\"margin-left: 0;\">\n <div class=\"outer_circle\">\n <button id='btn-icon' [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\"\n (click)=\"goTo()\"></button>\n </div>\n <button (click)=\"goTo()\" class=\"btn rounded-pill btn-3d\"\n [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\">{{'3D visit' | translate}}</button>\n </div>\n </div>\n\n <h4 style=\"line-height: 29px;margin: 0;\" *ngIf=\"showLocation()\">\n {{ showLocation() }}\n </h4>\n </div>\n</nav>\n","import { Component, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { LocaleService } from '../../services/locale.service';\r\nimport { NavigatorService } from '../../services/navigator.service';\r\nimport { SupportService } from '../../services/support.service';\r\nimport { BaseUserService } from '../../services/user.service';\r\nimport { ProfileEntity, Mission } from '../../types.service';\r\nimport { SupportModalComponent } from '../support-modal/support-modal.component';\r\n\r\n@Component({\r\n selector: 'lib-menu-bar',\r\n templateUrl: './menu-bar.component.html',\r\n styleUrls: ['./menu-bar.component.scss']\r\n})\r\nexport class MenuBarComponent implements OnInit {\r\n\r\n user: ProfileEntity;\r\n\r\n mission: Mission;\r\n\r\n isVisitor = true;\r\n\r\n isVisible = false;\r\n\r\n isManager: boolean;\r\n\r\n userSubscription: Subscription;\r\n\r\n navSubscription: Subscription;\r\n\r\n constructor(\r\n private router: Router,\r\n public localeService: LocaleService,\r\n private userService: BaseUserService,\r\n private navigatorService: NavigatorService,\r\n private supportService: SupportService,\r\n ) {\r\n this.userSubscription = this.userService.isChanged.subscribe(\r\n (isChanged) => {\r\n if (isChanged) {\r\n this.update();\r\n }\r\n },\r\n );\r\n this.navSubscription = this.navigatorService.isVisibleChanged.subscribe(\r\n (data) => {\r\n this.isVisible = data;\r\n },\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n this.update();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const input = document.querySelector(\r\n \"#mainSearchBar\",\r\n ) as HTMLInputElement;\r\n if (input) {\r\n input.addEventListener(\"keydown\", ({ key }) => {\r\n if (key === \"Enter\") {\r\n this.onSubmit();\r\n }\r\n });\r\n }\r\n this.handleCloseNavbarForItems();\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.userSubscription) {\r\n this.userSubscription.unsubscribe();\r\n }\r\n if (this.navSubscription) {\r\n this.navSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n async signOut() {\r\n await this.userService.logoutCurrentAndSignOutAuth();\r\n this.router.navigate([\"auth\"]); \r\n }\r\n\r\n async update() {\r\n this.user = this.userService.cu;\r\n this.mission = this.userService.currentMissions[0];\r\n this.isManager = this.userService.hasManagerRoleInAnyMission();\r\n this.isVisitor = this.userService.isVisitor();\r\n if (!this.isVisitor) {\r\n this.isVisible = true;\r\n }\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n onSubmit() {\r\n const input = document.querySelector(\r\n \"#mainSearchBar\",\r\n ) as HTMLInputElement;\r\n const searchValue = input.value.toLowerCase();\r\n if (searchValue !== \"\") {\r\n const baseUrl = location.origin;\r\n window.open(\r\n `${baseUrl}/dashboard/search?term=${searchValue}`,\r\n \"_blank\",\r\n );\r\n }\r\n }\r\n\r\n onToggleVisible() {\r\n this.isVisible = !this.isVisible;\r\n }\r\n\r\n handleCloseNavbarForItems() {\r\n const navItems = document.querySelectorAll(\".nav-link\");\r\n const buttonNavToggler = document.querySelector(\".navbar-toggler\");\r\n const navbarItemContainer = document.querySelector(\r\n \"#nav-item-container\",\r\n ) as HTMLDivElement;\r\n const navbarItemContainerTwo = document.querySelector(\r\n \"#nav-item-container-blue\",\r\n ) as HTMLDivElement;\r\n // eslint-disable-next-line unicorn/no-array-for-each\r\n navItems.forEach((navItem) => {\r\n navItem.addEventListener(\"click\", () => {\r\n if (navbarItemContainer.classList.contains(\"show\")) {\r\n buttonNavToggler.setAttribute(\"aria-expanded\", \"false\");\r\n navbarItemContainer.classList.remove(\"show\");\r\n navbarItemContainer.classList.replace(\r\n \"collapse\",\r\n \"collapsing\",\r\n );\r\n navbarItemContainerTwo.classList.remove(\"show\");\r\n navbarItemContainerTwo.classList.replace(\r\n \"collapse\",\r\n \"collapsing\",\r\n );\r\n\r\n setTimeout(() => {\r\n navbarItemContainer.classList.replace(\r\n \"collapsing\",\r\n \"collapse\",\r\n );\r\n }, 500);\r\n setTimeout(() => {\r\n navbarItemContainerTwo.classList.replace(\r\n \"collapsing\",\r\n \"collapse\",\r\n );\r\n }, 500);\r\n }\r\n });\r\n });\r\n }\r\n\r\n openSupportForm() {\r\n this.supportService.openSupportForm(SupportModalComponent);\r\n }\r\n\r\n}\r\n","<div id=\"menu-bar\">\r\n <div *ngIf=\"!isVisitor\">\r\n <nav class=\"navbar navbar-expand-md navbar-light p-0\">\r\n <div class=\"container-fluid\" *ngIf=\"isVisible\">\r\n <div class=\"navbar-brand\" [routerLink]=\"['/dashboard']\">\r\n <img alt=\"\" src=\"../assets/images/logos/logo-rvb-straight.png\">\r\n </div>\r\n <button class=\"navbar-toggler\" data-bs-target=\".navbar-collapse\" data-bs-toggle=\"collapse\" type=\"button\">\r\n <span class=\"navbar-toggler-icon\"></span>\r\n </button>\r\n <div class=\"collapse navbar-collapse\">\r\n <form class=\"form-inline ms-3\">\r\n <input class=\"form-control search-button\" placeholder=\"keyword\" id=\"mainSearchBar\" type=\"text\">\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSubmit()\">{{'Search' |\r\n translate}}</button>\r\n <lib-range-date-picker></lib-range-date-picker>\r\n </form>\r\n\r\n <!-- <div class=\"d-md-none\">\r\n <app-dashboard-navigation></app-dashboard-navigation>\r\n </div> -->\r\n <div class=\"ms-auto nav-item dropdown\">\r\n <div class=\"profile_pic dropdown-toggle\" data-testid=\"dropdown-menu-button\" data-bs-toggle=\"dropdown\">\r\n <lib-avatar></lib-avatar>\r\n </div>\r\n <div class=\"dropdown-menu dropdown-menu-right\">\r\n <p *ngIf=\"user && mission\" class=\"p-2\">\r\n <span class=\"username\">{{ user.displayName }}</span><br />\r\n <span class=\"user-role\">{{ mission.role }}</span><br />\r\n <span class=\"org\">{{ mission.organisation ? mission.organisation.name : \"No organisation\" |\r\n translate}}</span>\r\n </p>\r\n <div class=\"dropdown-divider\"></div>\r\n <!-- <a class=\"dropdown-item\" routerLink=\"/debug\" *ngIf=\"isManager\">Debug</a> -->\r\n <a class=\"dropdown-item\" (click)=\"localeService.modal()\">{{'Language' | translate}}</a>\r\n <a class=\"dropdown-item\" routerLink=\"/dashboard\">{{'Data management' | translate}}</a>\r\n <a class=\"dropdown-item\" routerLink=\"/admin\" *ngIf=\"isManager\">\r\n {{'Users management' | translate}}</a>\r\n <a class=\"dropdown-item\" routerLink=\"/profile\">\r\n {{'Profile' | translate}}</a>\r\n <div class=\"dropdown-divider\"></div>\r\n <button class=\"dropdown-item\" (click)=\"openSupportForm()\">{{\"Help\" | translate}}</button>\r\n <button data-testid=\"logout-auth-btn\" class=\"dropdown-item\" (click)=\"signOut()\">{{\"Logout\" |\r\n translate}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </nav>\r\n <lib-navigation-bar *ngIf=\"isVisible\"></lib-navigation-bar>\r\n </div>\r\n <div *ngIf=\"isVisitor && isVisible\">\r\n <div class=\"visitor-div\">\r\n <div class=\"logo-container\" data-testid=\"dropdown-menu-button\">\r\n <img class=\"img-logo\" alt=\"SmarterPlanLogo\" src=\"../assets/images/logos/logo-reserve.png\">\r\n </div>\r\n <div class=\"avatar-container-menu\">\r\n <div class=\"profile_pic dropdown-toggle\" data-bs-toggle=\"dropdown\">\r\n <lib-avatar></lib-avatar>\r\n </div>\r\n <div class=\"dropdown-menu dropdown-menu-right\">\r\n <button class=\"dropdown-item\" (click)=\"localeService.modal()\">{{'Language' | translate}}</button>\r\n <button class=\"dropdown-item\" (click)=\"openSupportForm()\">{{\"Help\" | translate}}</button>\r\n <button data-testid=\"logout-auth-btn\" class=\"dropdown-item\" (click)=\"signOut()\">{{\"Logout\" |\r\n translate}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { CsvExportComponent } from './components/csv-export/csv-export.component';\r\nimport { SearchBarComponent } from './components/search-bar/search-bar.component';\r\nimport { Config } from './config';\r\nimport { DurationToStringPipe } from './pipes/duration-to-string.pipe';\r\nimport { HashtagFromIdPipe } from './pipes/hashtag-from-id.pipe';\r\nimport { SafeUrlPipe } from './pipes/safe-url.pipe';\r\nimport { TimeDateToLocalStringPipe } from './pipes/time-date-to-local-string.pipe';\r\nimport { ModalSwitchVisitComponent } from './components/modal-switch-visit/modal-switch-visit.component';\r\nimport { UsernameFromIdPipe } from './pipes/username-from-id.pipe';\r\nimport { MenuBarComponent } from './components/menu-bar/menu-bar.component';\r\nimport { AvatarComponent } from './components/menu-bar/avatar/avatar.component';\r\nimport { NavigationBarComponent } from './components/menu-bar/navigation-bar/navigation-bar.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { RangeDatePickerComponent } from './components/menu-bar/range-date-picker/range-date-picker.component';\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { LoaderComponent } from './components/loader/loader.component';\r\nimport { SupportModalComponent } from './components/support-modal/support-modal.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n@NgModule({\r\n declarations: [\r\n TimeDateToLocalStringPipe,\r\n SafeUrlPipe,\r\n HashtagFromIdPipe,\r\n DurationToStringPipe,\r\n CsvExportComponent,\r\n SearchBarComponent,\r\n UsernameFromIdPipe,\r\n ModalSwitchVisitComponent,\r\n MenuBarComponent,\r\n AvatarComponent,\r\n NavigationBarComponent,\r\n RangeDatePickerComponent,\r\n LoaderComponent,\r\n SupportModalComponent\r\n ],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CommonModule,\r\n RouterModule,\r\n NgbModule,\r\n TranslateModule.forChild({\r\n extend: true\r\n })\r\n ],\r\n exports: [\r\n CsvExportComponent,\r\n SearchBarComponent,\r\n TimeDateToLocalStringPipe,\r\n SafeUrlPipe,\r\n HashtagFromIdPipe,\r\n DurationToStringPipe,\r\n UsernameFromIdPipe,\r\n MenuBarComponent,\r\n LoaderComponent,\r\n SupportModalComponent\r\n ]\r\n})\r\nexport class NgxSmarterplanCoreModule {\r\n public static forRoot(config: Config): ModuleWithProviders<NgxSmarterplanCoreModule> {\r\n return {\r\n ngModule: NgxSmarterplanCoreModule,\r\n providers: [\r\n {\r\n provide: 'config',\r\n useValue: config\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","/* eslint-disable no-case-declarations */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Comment, DbObjectType, Equipment, Feature, POI, PoiType, TagAction, Ticket } from \"../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseTagService {\r\n\r\n constructor() {}\r\n\r\n async getHtmlToInject(\r\n tagType: PoiType,\r\n object: DbObjectType,\r\n maxHeightDiv: number\r\n ): Promise<{ html: string; height: number }> {\r\n throw new Error(`getHtmlToInject is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n getUrlForSeeDetails(\r\n object: DbObjectType,\r\n tagType: PoiType,\r\n ): string {\r\n switch (tagType) {\r\n case PoiType.TICKET: {\r\n return `visit/${object.spaceID}/detail/${object.id}`;\r\n }\r\n case PoiType.EQUIPMENT: {\r\n return `visit/${object.spaceID}/equip/${object.id}`;\r\n }\r\n case PoiType.MEASURE: {\r\n return `visit/${object.spaceID}/measurement/${object.id}`;\r\n }\r\n case PoiType.DATA: {\r\n return `visit/${object.spaceID}/feature/${object.id}`;\r\n }\r\n case PoiType.DESK: {\r\n return `visit/${object.spaceID}/add_booking/${object.id}`;\r\n }\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n async prepareEquipmentHtml(\r\n equip: Equipment,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareEquipmentHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareTicketHtml(\r\n ticket: Ticket,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareTicketHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareFeatureHtml(\r\n feature: Feature,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareFeatureHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareMeasurementHtml(\r\n measure: Comment,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareMeasurementHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareDeskHtml(\r\n feature: Feature,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareDeskHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareIndicatorHtml(\r\n feature: Feature,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareDeskHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async getSignedTagIconSource(tagIconSrc: string): Promise<string | null> {\r\n throw new Error(`getSignedTagIconSource is not implemented in the base class.`);\r\n }\r\n\r\n getIconTagImageForFeature(feature: DbObjectType, poi: POI): string {\r\n // const tagIcon = JSON.parse(poi.tagIcon);\r\n // return tagIcon.src;\r\n throw new Error(`getIconTagImageForFeature is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n\r\n getScriptForTag(object, tagType: PoiType): string {\r\n throw new Error(`getScriptForTag is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionDetailClick(url: string) {\r\n throw new Error(`onActionDetailClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionAudioClick(audioCommentID: string) {\r\n throw new Error(`onActionDetailClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionVideoClick(url: string) {\r\n throw new Error(`onActionVideoClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionImageClick(imageCommentID: string) {\r\n throw new Error(`onActionImageClick is not implemented in the base class.\r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionDocClick(url: string) {\r\n throw new Error(`onActionDocClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n \r\n onActionYoutubeClick(url: string) {\r\n throw new Error(`onActionYoutubeClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Measurement, Feature, Comment, IUpdate, CommentType } from \"../../types.service\";\r\nimport { uploadFileToS3 } from \"../s3.service\";\r\nimport { PoiService } from \"./poi.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class CommentService {\r\n\r\n API: any; // AWS\r\n constructor(@Inject('currentAPIService') apiInjected: any, \r\n private poiService: PoiService) {\r\n this.API = apiInjected;\r\n }\r\n\r\n getCommentsFromTicketID(ticketID: string): Promise<Comment[]> {\r\n return this.API.__proto__.CommentsByTicket(ticketID).then((res)=>res.items);\r\n }\r\n\r\n async getCommentsBySpaceID(spaceID: string): Promise<Comment[]> {\r\n return this.API.__proto__.ListComments({ spaceID: { eq: spaceID } }).then(\r\n (comments) => comments.items,\r\n );\r\n }\r\n\r\n async readCommentAsMeasurement(commentID: string): Promise<Measurement> {\r\n const comment = await this.getComment(commentID);\r\n if (comment.ticketID && !comment.ticket) {\r\n comment.ticket = await this.API.__proto__.GetTicket(comment.ticketID);\r\n }\r\n const values = comment.dimensions;\r\n const numberPoints = values.length + 1;\r\n const poi = await this.poiService.getPoiByElementId(commentID);\r\n const measure = {\r\n id: comment.id,\r\n comment,\r\n poi,\r\n numberPoints,\r\n values,\r\n } as Measurement;\r\n return measure;\r\n }\r\n\r\n /**\r\n * CRUD\r\n *\r\n */\r\n async getComment(commentID: string): Promise<Comment> {\r\n return this.API.__proto__.GetComment(commentID);\r\n }\r\n\r\n async deleteComment(commentID: string): Promise<Comment> {\r\n return this.API.__proto__.DeleteComment({ id: commentID });\r\n }\r\n\r\n async createComment(comment: Comment): Promise<Comment> {\r\n return this.API.__proto__.CreateComment(comment);\r\n }\r\n\r\n async updateComment(input: any): Promise<Comment> {\r\n return this.API.__proto__.UpdateComment(input);\r\n }\r\n\r\n async uploadFileForComment(file: File, id: string = null): Promise<string> {\r\n return uploadFileToS3(\"comments/\", file, id);\r\n }\r\n\r\n /** Create a new comment with an existing Annexe */\r\n async createCommentWithFileURL(\r\n comment: Comment,\r\n url: string,\r\n ): Promise<Comment> {\r\n const newComment = comment;\r\n newComment.annexe = url;\r\n return this.createComment(newComment);\r\n }\r\n\r\n async createCommentWithFile(\r\n comment: Comment,\r\n file: File,\r\n ): Promise<Comment> {\r\n let createdComment = await this.createComment(comment);\r\n if (file) {\r\n const url = await this.uploadFileForComment(\r\n file,\r\n createdComment.id,\r\n );\r\n createdComment = await this.updateComment({\r\n id: createdComment.id,\r\n annexe: url,\r\n });\r\n }\r\n return createdComment;\r\n }\r\n\r\n \r\n\r\n async setCommentAsCoverForFeature(\r\n commentID: string,\r\n feature: Feature,\r\n ): Promise<Comment> {\r\n const updatedComment = await this.updateComment({\r\n id: commentID,\r\n isCoverImage: true,\r\n });\r\n await Promise.all(\r\n feature.comments.items.map(async (image) => {\r\n if (\r\n image.type === CommentType.IMAGE &&\r\n image.id !== commentID\r\n ) {\r\n await this.updateComment({\r\n id: image.id,\r\n isCoverImage: false,\r\n });\r\n }\r\n }),\r\n );\r\n return updatedComment;\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Injectable, OnInit } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { Subject } from \"rxjs\";\r\nimport { MediaContent } from \"../types.service\";\r\nimport { CommentService } from \"./models/comment.service\";\r\nimport { FeatureService } from \"./models/feature.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ContentService {\r\n modalReference;\r\n\r\n currentAudio: HTMLAudioElement;\r\n\r\n closeModal = new Subject<boolean>();\r\n\r\n nextSlide = new Subject<string>();\r\n\r\n constructor(public modalService: NgbModal, private router: Router, private commentService: CommentService) {}\r\n\r\n presentVideoModal(video: MediaContent, videoComponent: any, modalDialogClass: string) {\r\n this.modalReference = this.modalService.open(videoComponent, {\r\n modalDialogClass: modalDialogClass,\r\n });\r\n this.modalReference.componentInstance.video = video;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n }\r\n\r\n async presentAudioModal(audioCommentID: string, audioComponent: any, modalDialogClass: string) {\r\n const audioComment = await this.commentService.getComment(audioCommentID);\r\n const audioMediaContent = {\r\n path: audioComment.annexe,\r\n title: audioComment.title,\r\n description: audioComment.description,\r\n } as MediaContent;\r\n this.modalReference = this.modalService.open(audioComponent, {\r\n modalDialogClass: modalDialogClass,\r\n });\r\n this.modalReference.componentInstance.audio = audioMediaContent;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal(); \r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n }\r\n\r\n presentImageCarouselModal(featureID: string, carouselComponent: any, modalDialogClass: string, \r\n fromTag = true, selectedImageIndex='0') {\r\n this.modalReference = this.modalService.open(\r\n carouselComponent,\r\n {\r\n modalDialogClass: modalDialogClass,\r\n },\r\n );\r\n this.modalReference.componentInstance.featureID = featureID;\r\n this.modalReference.componentInstance.fromTag = fromTag;\r\n this.modalReference.componentInstance.selectedImageIndex = selectedImageIndex;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.componentInstance.slideChanged.subscribe(\r\n (slide) => {\r\n this.nextSlide.next(slide.current);\r\n },\r\n );\r\n }\r\n\r\n presentPdfModal(url: string, pdfComponent: any, modalDialogClass: string,) {\r\n this.modalReference = this.modalService.open(pdfComponent, {\r\n modalDialogClass: modalDialogClass,\r\n });\r\n this.modalReference.componentInstance.url = url;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n }\r\n\r\n presentMuseumImageCarouselModal(\r\n carouselComponent: any,\r\n modalDialogClass: string,\r\n fromTag = true,\r\n selectedImageIndex = \"0\",\r\n images: any[] = null,\r\n commentImageID: string = null,\r\n ) {\r\n this.modalReference = this.modalService.open(carouselComponent, {\r\n modalDialogClass,\r\n });\r\n this.modalReference.componentInstance.fromTag = fromTag;\r\n this.modalReference.componentInstance.selectedImageIndex =\r\n selectedImageIndex;\r\n this.modalReference.componentInstance.images = images;\r\n this.modalReference.componentInstance.commentID = commentImageID;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.componentInstance.slideChanged.subscribe(\r\n (slide) => {\r\n this.nextSlide.next(slide.current);\r\n },\r\n );\r\n }\r\n\r\n toogleAudioElement(url: string) {\r\n if (!this.currentAudio || this.currentAudio.src !== url) {\r\n this.currentAudio = new Audio(url);\r\n }\r\n if (this.currentAudio.duration > 0 && !this.currentAudio.paused) {\r\n // it is playing, we stop it\r\n this.currentAudio.pause();\r\n } else {\r\n this.currentAudio.play();\r\n }\r\n }\r\n\r\n showFullscreenCarouselForFeature(featureID: string, fromTag = false) {\r\n const url = this.router.serializeUrl(\r\n this.router.createUrlTree([`/fullscreen/${featureID}`], {\r\n queryParams: { fromTag },\r\n }),\r\n );\r\n window.open(url, \"_blank\");\r\n }\r\n\r\n emitCloseModal() {\r\n this.modalReference = null;\r\n this.closeModal.next(true);\r\n }\r\n\r\n forceCloseCurrentModal() {\r\n if (this.modalReference) {\r\n this.modalReference.dismiss(\"forced\");\r\n }\r\n }\r\n\r\n moveToSlide(slide: string) {\r\n if (this.modalReference) {\r\n this.modalReference.componentInstance.navigateToSlide(slide);\r\n }\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseLateralTabService {\r\n activeTab = \"tickets\";\r\n\r\n firstLoad = true;\r\n\r\n constructor() { }\r\n\r\n storeTabHistory(tab: string) {\r\n this.activeTab = tab;\r\n }\r\n\r\n getTabHistory(): string {\r\n // throw new Error(\"Method 'getTabHistory' not implemented.\");\r\n return this.activeTab;\r\n }\r\n}\r\n","import { Injectable, Inject } from \"@angular/core\";\r\nimport { Layer } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class LayerService {\r\n API: any; //AWS\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getLayerForOrganisation(orgID: string): Promise<Layer[]> {\r\n return this.API.__proto__.LayersByOrganisation(orgID).then((list) => list.items);\r\n }\r\n\r\n async createLayerForOrganisation(\r\n layerName: string,\r\n orgID: string,\r\n ): Promise<Layer> {\r\n return this.API.__proto__.CreateLayer({\r\n name: layerName.toUpperCase(),\r\n organisationID: orgID,\r\n });\r\n }\r\n\r\n async getLayerByNameForOrganisation(layerName: string, orgID: string) {\r\n return this.API.__proto__.LayersByOrganisation(orgID, null, {\r\n name: { eq: layerName.toUpperCase() },\r\n }).then((list) => list.items);\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { removeNullKeysFromObject, wait } from \"../helpers.service\";\r\nimport { LevelStatus, Layer, Node, Zone, Navigation, Plan } from \"../types.service\";\r\nimport { LayerService } from \"./models/layer.service\";\r\nimport { NavigationService } from \"./models/navigation.service\";\r\nimport { PlanService } from \"./models/plan.service\";\r\nimport { ZoneService } from \"./models/zone.service\";\r\nimport { uploadJsonToS3, uploadBase64Image, removeAllFilesFromFolderS3 } from \"./s3.service\";\r\nimport { BaseUserService } from \"./user.service\";\r\nimport { ViewerService } from \"./viewer.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class MatterportImportService {\r\n private currentFrame;\r\n\r\n public sdk: any;\r\n\r\n private sweeps: Object;\r\n\r\n public floors: Object;\r\n\r\n private currentFloor;\r\n\r\n private _modelID: string;\r\n\r\n private _spaceID: string;\r\n\r\n public get spaceID(): string {\r\n return this._spaceID;\r\n }\r\n\r\n public set spaceID(value: string) {\r\n this._spaceID = value;\r\n }\r\n\r\n public get modelID(): string {\r\n return this._modelID;\r\n }\r\n\r\n public set modelID(value: string) {\r\n this._modelID = value;\r\n }\r\n\r\n public stop = false;\r\n\r\n public importingImages: Subject<boolean> = new Subject<boolean>();\r\n\r\n public intersection: Subject<any> = new Subject<any>();\r\n\r\n public sweepProcessedCount: Subject<number> = new Subject<number>();\r\n\r\n public totalSweepsCount: Subject<number> = new Subject<number>();\r\n\r\n constructor(\r\n private navigationService: NavigationService,\r\n private zoneService: ZoneService,\r\n private viewerService: ViewerService,\r\n private layerService: LayerService,\r\n private userService: BaseUserService,\r\n private planService: PlanService,\r\n ) {}\r\n\r\n async initSdkForModel(modelID: string): Promise<boolean> {\r\n this.stop = false;\r\n return new Promise((resolve, reject) => {\r\n // Load SDK\r\n console.log(\"Loading Matterport SDK\");\r\n this.modelID = modelID;\r\n const iframe = document.createElement(\"iframe\");\r\n if (!iframe) {\r\n reject(new Error(\"Cannot create iframe\"));\r\n }\r\n this.viewerService.setTourUrl(modelID);\r\n const url = this.viewerService.getTourUrl();\r\n iframe.setAttribute(\"src\", url);\r\n iframe.allow = \"xr-spatial-tracking\";\r\n iframe.height = \"100%\";\r\n iframe.width = \"100%\";\r\n iframe.id = \"viewer-module\";\r\n const element = document.querySelector(\"#viewer-frame\");\r\n element.append(iframe);\r\n this.currentFrame = iframe;\r\n\r\n // @ts-ignore\r\n window.MP_SDK.connect(iframe, \"qn9wsasuy5h2fzrbrn1nzr0id\", \"3.11\")\r\n .then(async (sdk) => {\r\n // Instanciate sdk\r\n this.sdk = sdk;\r\n\r\n // Sibscribe to Floor data\r\n this.sdk.Floor.data.subscribe({\r\n onCollectionUpdated: function upd(collection: any) {\r\n // console.log(\"Floors\", collection);\r\n this.floors = collection;\r\n }.bind(this),\r\n });\r\n // Subscribe to current Floor\r\n this.sdk.Floor.current.subscribe(\r\n function upd(currentFloor) {\r\n this.currentFloor = currentFloor;\r\n // Change to the current floor has occurred.\r\n // if (currentFloor.sequence === -1) {\r\n // console.log(\"Currently viewing all floors\");\r\n // } else if (currentFloor.sequence === undefined) {\r\n // if (currentFloor.id === undefined) {\r\n // console.log(\"Current viewing an unplaced unaligned sweep\");\r\n // } else {\r\n // // console.log('Currently transitioning between floors');\r\n // }\r\n // } else {\r\n // // console.log('Currently on floor', currentFloor.id);\r\n // // console.log('Current floor\\'s sequence index', currentFloor.sequence);\r\n // // console.log('Current floor\\'s name', currentFloor.name)\r\n // }\r\n }.bind(this),\r\n );\r\n\r\n // Subscribe to Sweep data\r\n this.sdk.Sweep.data.subscribe({\r\n onCollectionUpdated: function upd(collection) {\r\n // console.log(\r\n // \"the entire up-to-date collection\",\r\n // collection,\r\n // );\r\n this.sweeps = collection;\r\n }.bind(this),\r\n });\r\n\r\n // Subscribe to intersection\r\n this.sdk.Pointer.intersection.subscribe(\r\n function pointer(intersectionData) {\r\n this.intersection.next(intersectionData.position);\r\n }.bind(this),\r\n );\r\n // remove labels\r\n this.sdk.Settings.update(\"labels\", false)\r\n .then(function (data) {\r\n // Setting update complete.\r\n console.log(`Labels setting: ${data}`);\r\n })\r\n .catch(function (error) {\r\n // Setting update error.\r\n });\r\n\r\n setTimeout(async () => {\r\n console.log(\"init done\");\r\n resolve(true);\r\n }, 5000);\r\n })\r\n .catch((handleError) => console.error(handleError));\r\n });\r\n }\r\n\r\n async importData(\r\n spaceID: string,\r\n surface: number,\r\n reloading: boolean = false,\r\n node: Node = null,\r\n ): Promise<boolean> {\r\n this.spaceID = spaceID;\r\n let floorZones: Zone[] = [];\r\n const zones = await this.zoneService.getZonesBySpace(spaceID);\r\n const mainZone = zones.find((z) => !z.parentID);\r\n if (this.sweeps && mainZone) {\r\n console.log(\"importing data from matterport\");\r\n // save sweeps data as json\r\n const json = JSON.stringify(Object.values(this.sweeps));\r\n await uploadJsonToS3(\r\n `visits/${this.modelID}/inventory/`,\r\n json,\r\n \"data.json\",\r\n );\r\n if (reloading) {\r\n // perform only 360 import since we are reloading\r\n await this.import360images();\r\n console.log(\"after reloading\");\r\n return Promise.resolve(true);\r\n }\r\n // check layer of building type\r\n const layerBuilding = await this.getLayerByName(\"BUILDING\");\r\n const createdDefaultZone = await this.createZone(\r\n node.metadata,\r\n layerBuilding.id,\r\n surface,\r\n mainZone.id,\r\n Object.keys(this.sweeps),\r\n node,\r\n );\r\n if (!createdDefaultZone) {\r\n return Promise.resolve(false);\r\n }\r\n if (this.floors) {\r\n floorZones = await this.importFloorData(\r\n createdDefaultZone.id,\r\n node,\r\n );\r\n }\r\n // console.log(floorZones);\r\n await Promise.all(\r\n Object.keys(this.sweeps).map(async (key) => {\r\n const sweepInfo = this.sweeps[key];\r\n const navigationInput = {\r\n matterportSweepID: sweepInfo.uuid,\r\n position: JSON.stringify(sweepInfo.position),\r\n rotation: JSON.stringify(sweepInfo.rotation),\r\n level: LevelStatus.LOW,\r\n nodeID: node.id,\r\n spaceID,\r\n } as Navigation;\r\n const nav = await this.navigationService.createNavigation(\r\n navigationInput,\r\n );\r\n if (!nav) {\r\n console.log(\r\n \"could create navigation\",\r\n navigationInput.id,\r\n );\r\n }\r\n }),\r\n );\r\n await this.import360images();\r\n return Promise.resolve(true);\r\n }\r\n return Promise.resolve(false);\r\n }\r\n\r\n async createZone(\r\n name: string,\r\n layerID: string,\r\n surface: number = null,\r\n parentID: string = null,\r\n sweeps: string[] = [],\r\n node: Node = null,\r\n metadata: string = null,\r\n ): Promise<Zone> {\r\n const zoneInput = {\r\n name,\r\n spaceID: this.spaceID,\r\n layerID,\r\n sweepIDs: sweeps,\r\n nodeIDs: node ? [node.id] : null,\r\n } as Zone;\r\n removeNullKeysFromObject(zoneInput);\r\n if (surface) {\r\n zoneInput.surface = surface;\r\n }\r\n if (parentID) {\r\n zoneInput.parentID = parentID;\r\n }\r\n if (metadata) {\r\n zoneInput.metadata = metadata;\r\n }\r\n const newLocal = await this.zoneService.create(zoneInput);\r\n return newLocal;\r\n }\r\n\r\n async import360images(): Promise<boolean> {\r\n console.log(\"Importing 360 images\");\r\n this.importingImages.next(true);\r\n return new Promise(async (resolve) => {\r\n const scans = Object.values(this.sweeps);\r\n let maxScan;\r\n let indexScan;\r\n const nmbScans = Object.keys(scans).length;\r\n console.log(\"Total number of scan points :\", nmbScans);\r\n this.totalSweepsCount.next(nmbScans);\r\n // check if we started to load images already\r\n if (localStorage.getItem(\"indexScanLoad\")) {\r\n console.log(\r\n \"retaking import from scan\",\r\n localStorage.getItem(\"indexScanLoad\"),\r\n );\r\n indexScan = +localStorage.getItem(\"indexScanLoad\");\r\n nmbScans < indexScan + 50\r\n ? (maxScan = nmbScans)\r\n : (maxScan = indexScan + 50);\r\n } else {\r\n indexScan = 0;\r\n nmbScans < 50 ? (maxScan = nmbScans) : (maxScan = 50);\r\n maxScan;\r\n }\r\n\r\n for (let index = indexScan; index < maxScan; index += 1) {\r\n if (!this.stop) {\r\n await this.sdk.Sweep.moveTo(scans[index].uuid);\r\n await this.sdk.Camera.setRotation({\r\n x: 0,\r\n y: 0,\r\n });\r\n const img = await this.sdk.Renderer.takeEquirectangular(\r\n { width: 2048, height: 1024 },\r\n { mattertags: false, sweeps: true },\r\n );\r\n await uploadBase64Image(\r\n img,\r\n scans[index].uuid,\r\n `visits/${this.modelID}/sweeps/`,\r\n \"sweep\",\r\n );\r\n this.sweepProcessedCount.next(index);\r\n } else {\r\n localStorage.removeItem(\"indexScanLoad\");\r\n removeAllFilesFromFolderS3(`visits/${this.modelID}/sweeps`);\r\n console.log(\"Abandoning import beacuse it was cancelled\");\r\n resolve(false);\r\n break;\r\n }\r\n }\r\n if (maxScan === nmbScans) {\r\n console.log(\"Import 360 done\");\r\n localStorage.removeItem(\"indexScanLoad\");\r\n this.removeFrame();\r\n this.stop = true;\r\n resolve(true);\r\n } else if (!this.stop) {\r\n // to restart the procedure from where we left of\r\n localStorage.setItem(\"indexScanLoad\", maxScan.toString());\r\n this.removeFrame();\r\n await this.initSdkForModel(this.modelID);\r\n await this.importData(this.spaceID, 0, true);\r\n resolve(true);\r\n }\r\n });\r\n }\r\n\r\n async moveToFloor(floorName: string) {\r\n // by name\r\n // console.log(floorName);\r\n let floorMatterport = Object.values(this.floors).find(\r\n (floor) => floor.name !== \"\" && floorName.includes(floor.name),\r\n );\r\n // by id\r\n if (!floorMatterport) {\r\n floorMatterport = Object.values(this.floors).find((floor) =>\r\n floorName.includes(floor.id),\r\n );\r\n }\r\n // console.log(floorMatterport);\r\n if (floorMatterport) {\r\n try {\r\n await this.sdk.Floor.moveTo(floorMatterport.sequence);\r\n } catch (error) {\r\n console.log(\"Cannot move to Floor\", error);\r\n }\r\n }\r\n }\r\n\r\n public async importFloorData(\r\n defautZoneID: string,\r\n node: Node,\r\n ): Promise<Zone[]> {\r\n const zones = [];\r\n await this.sdk.Mode.moveTo(this.sdk.Mode.Mode.FLOORPLAN);\r\n const nmbFloors = Object.keys(this.floors).length;\r\n console.log(\"Total number of floors\", nmbFloors);\r\n for (let index = 0; index < nmbFloors; index += 1) {\r\n // eslint-disable-next-line no-await-in-loop\r\n console.log(\"Importing floor\", index);\r\n await this.sdk.Floor.moveTo(index).then(async () => {\r\n await wait(700);\r\n // console.log(\"about to save the floor\", index);\r\n const zone = await this.saveFloor(defautZoneID, node);\r\n // console.log(\"received floor zone\", zone);\r\n zones.push(zone);\r\n });\r\n }\r\n return Promise.resolve(zones);\r\n }\r\n\r\n private async saveFloor(defautZoneID: string, node: Node): Promise<Zone> {\r\n let name = this.currentFloor.id;\r\n if (this.currentFloor.name !== \"\") {\r\n name = this.currentFloor.name;\r\n }\r\n const layerFloor = await this.getLayerByName(\"FLOOR\");\r\n const sweepsInfo = Object.values(this.sweeps);\r\n const sweepsForFloor = sweepsInfo.filter(\r\n (sweepInfo) => sweepInfo.floorInfo.id === this.currentFloor.id,\r\n );\r\n const sweepIDs: string[] = sweepsForFloor.map((sweep) => sweep.uuid);\r\n const zone = await this.createZone(\r\n `Étage ${name} - ${node.metadata}`,\r\n layerFloor.id,\r\n null,\r\n defautZoneID,\r\n sweepIDs,\r\n node,\r\n JSON.stringify({matterportFloorSequence: this.currentFloor.sequence})\r\n );\r\n // TODO link to scans\r\n const base64 = await this.sdk.Renderer.takeScreenShot(\r\n { width: 4096, height: 2048 },\r\n );\r\n const spaceIDshort = this.spaceID.slice(0, 8);\r\n await uploadBase64Image(\r\n base64,\r\n null,\r\n `visits/${this.modelID}/plans/`,\r\n `plan_floor_${this.currentFloor.id}_${spaceIDshort}`,\r\n );\r\n // create Plan object\r\n const plan = {\r\n name: `plan_floor_${this.currentFloor.id}`,\r\n annexe: `visits/${this.modelID}/plans/plan_floor_${this.currentFloor.id}_${spaceIDshort}.jpeg`,\r\n zoneID: zone.id,\r\n spaceID: this.spaceID,\r\n isCurrentForZone: true,\r\n isModified: false,\r\n isImportedMatterport: true,\r\n } as Plan;\r\n await this.planService.createPlan(plan);\r\n // console.log(\"floor saved\");\r\n return Promise.resolve(zone);\r\n }\r\n\r\n abandon() {\r\n setTimeout(() => {\r\n console.log(\"abandonning import\");\r\n this.removeFrame();\r\n this.stop = true;\r\n }, 1500);\r\n }\r\n\r\n removeFrame() {\r\n this.currentFrame.remove();\r\n }\r\n\r\n async getLayerByName(name: string): Promise<Layer> {\r\n const mission = this.userService.currentMission(this.spaceID);\r\n const currentOrgId = mission.organisationID;\r\n const layers = await this.layerService.getLayerByNameForOrganisation(\r\n name,\r\n currentOrgId,\r\n );\r\n if (layers.length > 0) {\r\n return layers[0];\r\n }\r\n // create then\r\n return this.layerService.createLayerForOrganisation(name, currentOrgId);\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { Organisation, Property } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class OrganisationService { \r\n smarterPlanID = \"6e28201f-4679-4c29-9d2d-8a325f57cee9\";\r\n API: any; //AWS APIService\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getPropertiesForOrganisation(\r\n orgID: string,\r\n ): Promise<Array<Property>> {\r\n const org = await this.API.__proto__.GetOrganisation({ id: orgID });\r\n if (org) {\r\n return org.properties.items;\r\n }\r\n return [];\r\n }\r\n\r\n async getOrganisationByToken(token: string): Promise<Organisation> {\r\n const orgs = await this.API.__proto__.OrganisationsByToken(token);\r\n if (orgs.items.length > 0) {\r\n const org = orgs.items[0];\r\n return this.tokenIsExpiredForOrg(org) ? null : org;\r\n }\r\n return null;\r\n }\r\n\r\n tokenIsExpiredForOrg(org: Organisation): boolean {\r\n const expirationDate = new Date(org.tokenExpiresAt);\r\n const diffTime = expirationDate.getTime() - Date.now();\r\n return diffTime < 0;\r\n }\r\n\r\n async softDeteleOrg(orgID: string): Promise<Organisation> {\r\n return this.API.__proto__.UpdateOrganisation({\r\n id: orgID,\r\n deletedAt: Date.now(),\r\n });\r\n }\r\n\r\n async updateOrganisation(input: any): Promise<Organisation> {\r\n return this.API.__proto__.UpdateOrganisation(input);\r\n }\r\n\r\n async deleteOrganisation(orgID: string): Promise<Organisation> {\r\n return this.API.__proto__.DeleteOrganisation({ id: orgID });\r\n }\r\n\r\n async createOrganisation(input: Organisation): Promise<Organisation> {\r\n return this.API.__proto__.CreateOrganisation(input);\r\n }\r\n\r\n async getOrganisation(orgID: string): Promise<Organisation> {\r\n return this.API.__proto__.GetOrganisation({ id: orgID });\r\n }\r\n\r\n async listOrganisations(): Promise<Organisation[]> {\r\n return this.API.__proto__.ListOrganisations().then((orgs) => orgs.items);\r\n }\r\n\r\n async getOrganisationForSpace(spaceID: string): Promise<Organisation> {\r\n const properties = await this.API.__proto__.ListPropertys({\r\n spaceID: { eq: spaceID },\r\n });\r\n let orgs = properties.items.map((property) => property.organisation);\r\n if (orgs.length === 1) {\r\n return orgs[0];\r\n }\r\n orgs = orgs.filter((org) => org.id !== this.smarterPlanID);\r\n return orgs.length > 0 ? orgs[0] : null;\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { filterUniqueArrayByID } from \"../../helpers.service\";\r\nimport { Domain, DomainType } from \"../../types.service\";\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class DomainService {\r\n API: any; //AWS\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n \r\n async getGenericDomainsAndForOrganisation(\r\n organisationID: string,\r\n ): Promise<any | void> {\r\n return this.API.__proto__.ListDomains().then((domains) => {\r\n return domains.items.filter((dom) => {\r\n return (\r\n dom.organisationID === organisationID || !dom.organisationID\r\n );\r\n });\r\n });\r\n }\r\n\r\n async getGenericDomainsAndForOrgAndOrderedOrg(\r\n orgID: string,\r\n orderedOrgID: string = null,\r\n ): Promise<Domain[]> {\r\n if (orgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\") {\r\n // I am SmarterPlan, i can see all\r\n return this.API.__proto__.ListDomains().then((response) => response.items);\r\n }\r\n const currentOrgDomains =\r\n await this.getGenericDomainsAndForOrganisation(orgID);\r\n if (!orderedOrgID || orgID === orderedOrgID) {\r\n return currentOrgDomains;\r\n }\r\n const orderedOrgDomains =\r\n await this.getGenericDomainsAndForOrganisation(orderedOrgID);\r\n const merged = [...currentOrgDomains, ...orderedOrgDomains];\r\n return filterUniqueArrayByID(merged);\r\n }\r\n\r\n async getDomainsForOrgExcludingTypes(\r\n types: DomainType[],\r\n organisationID: string,\r\n ): Promise<Domain[]> {\r\n return this.getGenericDomainsAndForOrganisation(organisationID).then(\r\n (domains) => {\r\n return domains.filter((dom) => !types.includes(dom.type));\r\n },\r\n );\r\n }\r\n\r\n async getDomain(id: string): Promise<Domain> {\r\n return this.API.__proto__.GetDomain(id);\r\n }\r\n\r\n async updateDomain(input: any): Promise<Domain> {\r\n return this.API.__proto__.UpdateDomain(input);\r\n }\r\n\r\n async deleteDomain(id: string): Promise<Domain> {\r\n return this.API.__proto__.DeleteDomain({ id });\r\n }\r\n\r\n async getRootDomains(orgID: string): Promise<Domain[]> {\r\n const allDomains = await this.getGenericDomainsAndForOrganisation(\r\n orgID,\r\n );\r\n const root = allDomains.filter((dom) => !dom.parentID);\r\n return root.sort((a, b) => a.name.localeCompare(b.name));\r\n }\r\n\r\n async createDomain(input: Domain): Promise<Domain> {\r\n return this.API.__proto__.CreateDomain(input);\r\n }\r\n\r\n async getDomainsForOrgForType(\r\n type: DomainType,\r\n organisationID: string,\r\n orderedOrg: string = null,\r\n ): Promise<Domain[]> {\r\n return this.getGenericDomainsAndForOrgAndOrderedOrg(\r\n organisationID,\r\n orderedOrg,\r\n ).then((domains) => {\r\n return domains.filter((dom) => dom.type === type);\r\n });\r\n }\r\n\r\n async getParentDomainsForOrgAndOrderedOrgForType(\r\n type: DomainType,\r\n organisationID: string,\r\n orderedOrg: string = null,\r\n ): Promise<Domain[]> {\r\n return this.getGenericDomainsAndForOrgAndOrderedOrg(\r\n organisationID,\r\n orderedOrg,\r\n ).then((domains) => {\r\n return domains.filter((dom) => dom.type === type && !dom.parentID);\r\n });\r\n }\r\n\r\n async getDomainsForMissionsForOrg(orgID: string): Promise<Domain[]> {\r\n const domains = await this.getDomainsForOrgExcludingTypes(\r\n [DomainType.BOOKING, DomainType.FEATURE, DomainType.MISSION],\r\n orgID,\r\n );\r\n return domains.filter((dom) => !dom.parentID);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { dateHasExpired } from \"../helpers.service\";\r\nimport { EventType, EventStatus, EmailStatus, Event, ProfileEntity } from \"../types.service\";\r\nimport { EventService } from \"./models/event.service\";\r\nimport { MissionService } from \"./models/mission.service\";\r\nimport { BaseUserService } from \"./user.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BookingService {\r\n constructor(private eventService: EventService, private userService: BaseUserService,\r\n private missionService: MissionService,) { }\r\n\r\n getFutureOrCurrentEvents(events: Event[]): Event[] {\r\n const now = new Date();\r\n return events\r\n .filter((event) => event.realEndDate > now.getTime())\r\n .sort((a, b) => a.realStartDate - b.realStartDate);\r\n }\r\n\r\n getEventsWithRealStartDateBeforeToday(events: Event[]): Event[] {\r\n const now = new Date();\r\n now.setHours(0, 0, 0, 0);\r\n return events\r\n .filter((event) => event.realStartDate < now.getTime())\r\n .sort((a, b) => b.realStartDate - a.realStartDate);\r\n }\r\n\r\n async autoUpdateBookingEvent(\r\n eventProm: Event | Promise<Event>,\r\n ): Promise<Event> {\r\n const event = await eventProm;\r\n const startExpired = dateHasExpired(event.realStartDate);\r\n const endExpired = dateHasExpired(event.realEndDate);\r\n\r\n if (event.type === EventType.BOOKING && endExpired) {\r\n /** [BOOKING] VALIDATED => LATE */\r\n if (event.status === EventStatus.VALIDATED) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.LATE,\r\n });\r\n }\r\n /** [BOOKING] CREATED => REFUSED */\r\n if (event.status === EventStatus.CREATED) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.REFUSED,\r\n });\r\n }\r\n }\r\n if (event.type === EventType.BOOKING_SUBCRIPTION) {\r\n /** [SUB] CREATED => REFUSED */\r\n if (event.status === EventStatus.CREATED && endExpired) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.REFUSED,\r\n });\r\n }\r\n /** [SUB] IN_PROGRESS | VALIDATED => COMPLETED */\r\n if (\r\n endExpired &&\r\n (event.status === EventStatus.IN_PROGRESS ||\r\n event.status === EventStatus.VALIDATED)\r\n ) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.COMPLETED,\r\n });\r\n }\r\n /** [SUB] CREATED => IN_PROGRESS */\r\n if (startExpired && event.status === EventStatus.CREATED) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.IN_PROGRESS,\r\n });\r\n }\r\n }\r\n\r\n return event;\r\n }\r\n\r\n mergeEventsToSubscriptsionUnique(\r\n event: Event,\r\n uniqueList: Event[],\r\n ): Event[] {\r\n if (!event || event.type !== EventType.BOOKING_SUBCRIPTION)\r\n return uniqueList;\r\n\r\n const newUniqueList = [...uniqueList]; // deep copy\r\n const index = newUniqueList.findIndex(\r\n (event_) => event_.group === event.group,\r\n );\r\n\r\n /** If an event of the same group already exist, we merge date, to get the min and max date and update status */\r\n if (index >= 0) {\r\n const groupEvent = newUniqueList[index];\r\n if (groupEvent.realStartDate > event.realStartDate) {\r\n groupEvent.realStartDate = event.realStartDate;\r\n }\r\n if (groupEvent.realEndDate < event.realEndDate) {\r\n groupEvent.realEndDate = event.realEndDate;\r\n groupEvent.status = event.status;\r\n }\r\n groupEvent.author = event.author;\r\n } else {\r\n newUniqueList.push({ ...event });\r\n }\r\n\r\n return newUniqueList;\r\n }\r\n\r\n /** Merge a subscription event list to a unique event */\r\n mergeEventsToSubscriptions(allBokings: Event[]): Event[] {\r\n let uniqueList = [];\r\n for (const event of allBokings) {\r\n uniqueList = this.mergeEventsToSubscriptsionUnique(\r\n event,\r\n uniqueList,\r\n );\r\n }\r\n return uniqueList;\r\n }\r\n\r\n async updateStatusOfEventsInSubscriptionWithReason(\r\n subscriptionGroup: string,\r\n newStatus: EventStatus,\r\n reason: string = null,\r\n ): Promise<Event[]> {\r\n const eventsOfSubcription = await this.eventService.getEventsByGroup(\r\n subscriptionGroup,\r\n );\r\n const updatedEvents = [];\r\n await Promise.all(\r\n eventsOfSubcription.map(async (event) => {\r\n const updEvent = await this.eventService.updateEvent({\r\n id: event.id,\r\n status: newStatus,\r\n refusalReason: reason,\r\n notificationStatus: reason\r\n ? EmailStatus.UPDATE_TO_DELIVER\r\n : null,\r\n });\r\n updatedEvents.push(updEvent);\r\n }),\r\n );\r\n return updatedEvents;\r\n }\r\n\r\n getActiveFutureBookings(allBooking: Event[]): Event[] {\r\n let bookings = this.getFutureOrCurrentEvents(allBooking);\r\n bookings = bookings.filter(\r\n (event_) =>\r\n event_.status !== EventStatus.CANCELLED &&\r\n event_.status !== EventStatus.REFUSED &&\r\n event_.status !== EventStatus.ARCHIVED,\r\n );\r\n return bookings;\r\n }\r\n\r\n async archiveForOwnerEventsInSubscription(\r\n subscriptionGroup: string,\r\n ): Promise<Event[]> {\r\n const eventsOfSubcription = await this.eventService.getEventsByGroup(\r\n subscriptionGroup,\r\n );\r\n const updatedEvents = [];\r\n await Promise.all(\r\n eventsOfSubcription.map(async (event) => {\r\n const updEvent = await this.eventService.updateEvent({\r\n id: event.id,\r\n archivedByOwner: true,\r\n });\r\n updatedEvents.push(updEvent);\r\n }),\r\n );\r\n return updatedEvents;\r\n }\r\n\r\n getConflictBookingForDates(\r\n start: number,\r\n end: number,\r\n bookingsToFilter: Event[],\r\n ): Event | null {\r\n for (const booking of bookingsToFilter) {\r\n if (\r\n booking.status !== EventStatus.REFUSED &&\r\n booking.status !== EventStatus.CANCELLED &&\r\n booking.status !== EventStatus.ARCHIVED\r\n ) {\r\n if (\r\n start >= booking.realStartDate &&\r\n start + 1000 < booking.realEndDate\r\n ) {\r\n return booking;\r\n }\r\n if (\r\n end > booking.realStartDate + 1000 &&\r\n end <= booking.realEndDate\r\n ) {\r\n return booking;\r\n }\r\n if (\r\n start <= booking.realStartDate &&\r\n end >= booking.realEndDate\r\n ) {\r\n return booking;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async getAuthorOfEvent(event: Event): Promise<ProfileEntity> {\r\n const authorMission = await this.missionService.getMission(\r\n event.ownerID,\r\n );\r\n const author = await this.userService.userFromUserID(\r\n authorMission.userID,\r\n );\r\n return author;\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { Measurement, PoiType, Comment, POI } from \"../../types.service\";\r\nimport { FilterService } from \"../filter.service\";\r\nimport { NavigatorService } from \"../navigator.service\";\r\nimport { deleteFromS3, uploadFileToS3 } from \"../s3.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { CommentService } from \"./comment.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class MeasurementService {\r\n path = \"measurements/\";\r\n\r\n currentMeasurements: {\r\n space: Measurement[];\r\n zone: Measurement[];\r\n } = { space: [], zone: [] };\r\n\r\n measurementsTags: Subject<Comment[]> = new Subject();\r\n\r\n measurementsUpdated: Subject<{\r\n space: Measurement[];\r\n zone: Measurement[];\r\n }> = new Subject();\r\n\r\n currentSpaceID: string;\r\n\r\n zoneIDFilter: string;\r\n\r\n dateFilter: Date[];\r\n\r\n measurementFilter: boolean = false; // if false means no filtering, everything is allowed\r\n\r\n updateDone: Subject<boolean> = new Subject();\r\n\r\n updating: Subject<boolean> = new Subject();\r\n\r\n constructor(\r\n private navigatorService: NavigatorService,\r\n private filterService: FilterService,\r\n private commentService: CommentService,\r\n private poiService: PoiService,\r\n private userService: BaseUserService,\r\n private navigationService: NavigationService,\r\n ) {\r\n const isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n if (!isMuseumUser) {\r\n this.navigatorService.zoneChange.subscribe((zone) => {\r\n this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n if (!this.currentSpaceID) {\r\n this.measurementsTags.next(null);\r\n this.measurementsUpdated.next({ space: [], zone: null });\r\n this.measurementFilter = null;\r\n this.zoneIDFilter = null;\r\n } else if (zone.id !== this.zoneIDFilter) {\r\n this.zoneIDFilter = zone.id;\r\n // console.log(\"going to init measurements from zone\");\r\n this.initMeasurements();\r\n }\r\n });\r\n this.filterService.subscribeToDataFilterUpdate((dateRange) => {\r\n this.dateFilter = dateRange;\r\n this.initMeasurements();\r\n });\r\n this.dateFilter = this.filterService.currentDateFilter;\r\n this.updateDone.subscribe(() => this.initMeasurements());\r\n }\r\n }\r\n\r\n async initMeasurements() {\r\n if (this.currentSpaceID) {\r\n this.updating.next(true);\r\n let comments = await this.commentService.getCommentsBySpaceID(\r\n this.currentSpaceID,\r\n );\r\n comments =\r\n await this.filterService.filterMeasurementsForCurrentUserInSpace(\r\n this.currentSpaceID,\r\n comments,\r\n );\r\n let measurements = [];\r\n if (comments.length > 0) {\r\n await Promise.all(\r\n comments.map(async (comment) => {\r\n const measurement =\r\n await this.commentService.readCommentAsMeasurement(\r\n comment.id,\r\n );\r\n measurements.push(measurement);\r\n }),\r\n );\r\n if (this.dateFilter) {\r\n measurements =\r\n this.filterService.filterMeasurementsForDateRange(\r\n measurements,\r\n this.dateFilter,\r\n );\r\n }\r\n if (this.measurementFilter) {\r\n measurements = [];\r\n }\r\n this.currentMeasurements.space = measurements;\r\n // emit on tags should be after setting current.space !!\r\n this.measurementsTags.next(measurements.map((m) => m.comment));\r\n\r\n if (this.zoneIDFilter) {\r\n const commentsZone =\r\n await this.filterService.filterObjectsForZone(\r\n measurements.map((measure) => measure.comment),\r\n this.zoneIDFilter,\r\n );\r\n measurements = measurements.filter((measure) =>\r\n commentsZone.includes(measure.comment),\r\n );\r\n }\r\n measurements.sort((a, b) => {\r\n return (\r\n // @ts-ignore\r\n new Date(b.comment.createdAt) -\r\n // @ts-ignore\r\n new Date(a.comment.createdAt)\r\n );\r\n });\r\n this.currentMeasurements.zone = measurements;\r\n this.measurementsUpdated.next(this.currentMeasurements);\r\n } else {\r\n this.currentMeasurements.space = [];\r\n this.currentMeasurements.zone = [];\r\n this.measurementsUpdated.next({ space: [], zone: [] }); // for lateral menu\r\n }\r\n } else {\r\n this.measurementsTags.next(null);\r\n }\r\n this.updating.next(false);\r\n }\r\n\r\n async deleteMeasurement(measurement: Measurement): Promise<Comment> {\r\n const deletedComment = await this.commentService.deleteComment(\r\n measurement.comment.id,\r\n );\r\n if (deletedComment) {\r\n await this.poiService.deletePoi(measurement.poi.id);\r\n const prefix = `${measurement.comment.id.slice(0, 8)}_`;\r\n const path = `${this.path + prefix}mesure.jpeg`;\r\n await deleteFromS3(path);\r\n }\r\n return deletedComment;\r\n }\r\n\r\n async createMeasurementForSpace(\r\n commentInput: Comment,\r\n dataMeasurements: { measure: any[]; sweep: string },\r\n screenshot: any,\r\n spaceID: string,\r\n ): Promise<Measurement> {\r\n const lastMeasure = dataMeasurements.measure;\r\n const sweepID = dataMeasurements.sweep;\r\n const lastPoint = lastMeasure[lastMeasure.length - 1];\r\n let comment = await this.commentService.createComment(commentInput);\r\n const poiInput = {\r\n coordinate: JSON.stringify({\r\n x: lastPoint.x,\r\n y: lastPoint.y,\r\n z: lastPoint.z,\r\n }),\r\n type: PoiType.MEASURE,\r\n elementID: comment.id,\r\n matterportSweepID: sweepID,\r\n } as POI;\r\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\r\n const screen = await fetch(screenshot);\r\n const blob = await screen.blob();\r\n const file = new File([blob], \"mesure.jpeg\", { type: \"image/jpeg\" });\r\n const url = await uploadFileToS3(this.path, file, comment.id);\r\n if (url) {\r\n comment = await this.commentService.updateComment({\r\n id: comment.id,\r\n annexe: url,\r\n });\r\n }\r\n const measurement = {\r\n comment,\r\n poi,\r\n } as Measurement;\r\n return measurement;\r\n }\r\n\r\n async getModel3DForMeasurement(measurement: Measurement): Promise<string> {\r\n const poi = await this.poiService.getPoiByElementId(\r\n measurement.comment.id,\r\n );\r\n if (poi && poi.matterportSweepID) {\r\n const navigations =\r\n await this.navigationService.getNavigationsForMatterportIDForSpace(\r\n poi.matterportSweepID,\r\n measurement.comment.spaceID,\r\n );\r\n const [poiNavigation] = navigations;\r\n return poiNavigation.node.model3D;\r\n }\r\n return null;\r\n }\r\n}\r\n","/* eslint-disable no-await-in-loop */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { MattertagData } from \"../../mattertagData\";\r\nimport { Feature, Hashtag, FeatureType, CommentType, POI, PoiType, Event, LevelStatus } from \"../../types.service\";\r\nimport { FilterService } from \"../filter.service\";\r\nimport { NavigatorService } from \"../navigator.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { BaseObjectService } from \"./base-object.service\";\r\nimport { CommentService } from \"./comment.service\";\r\nimport { HashtagService } from \"./hashtag.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class FeatureService extends BaseObjectService {\r\n API: any; //AWS\r\n\r\n featureUpdated: Subject<{\r\n space: Feature[];\r\n zone: Feature[];\r\n }> = new Subject();\r\n\r\n currentFeatures: { space: Feature[]; zone: Feature[] } = {\r\n space: [],\r\n zone: [],\r\n };\r\n\r\n featureTags: Subject<Feature[]> = new Subject();\r\n\r\n featureFiltered: Feature[] = [];\r\n\r\n updateDone: Subject<boolean> = new Subject();\r\n\r\n zoneIDFilter: string;\r\n\r\n currentSpaceID: string;\r\n\r\n updating: Subject<boolean> = new Subject();\r\n\r\n isUpdating = false;\r\n\r\n featureDomainFilter: string[] = null;\r\n\r\n deskDomainFilter: string[] = null;\r\n\r\n deskBookingsUpdated: Subject<Event[]> = new Subject();\r\n\r\n public currentHashtags: Hashtag[] = [];\r\n\r\n createObservable: Subject<Feature> = new Subject();\r\n\r\n deleteObservable: Subject<Feature> = new Subject();\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any,\r\n private navigatorService: NavigatorService,\r\n private filterService: FilterService,\r\n poiService: PoiService,\r\n private commentService: CommentService,\r\n private userService: BaseUserService,\r\n navigationService: NavigationService,\r\n private hashtagService: HashtagService,\r\n ) {\r\n super(poiService, navigationService);\r\n this.API = apiInjected;\r\n this.featureUpdated.subscribe((list) => {\r\n this.currentFeatures = list;\r\n });\r\n this.navigatorService.zoneChange.subscribe((zone) => {\r\n this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n if (!this.currentSpaceID) {\r\n this.featureTags.next(null);\r\n this.featureUpdated.next({ space: [], zone: null });\r\n this.zoneIDFilter = null;\r\n } else if (zone.id !== this.zoneIDFilter && !this.userService.isMuseumUser(this.currentSpaceID)) {\r\n this.zoneIDFilter = zone.id;\r\n this.initFeatures();\r\n }\r\n });\r\n this.updateDone.subscribe(() => {\r\n if (this.currentSpaceID) {\r\n this.initFeatures();\r\n }\r\n });\r\n\r\n this.deleteObservable.subscribe((feature) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToDelete(feature);\r\n }\r\n });\r\n\r\n this.createObservable.subscribe((feature) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToCreate(feature);\r\n }\r\n });\r\n }\r\n\r\n /*\r\n * CRUD\r\n */\r\n async createFeature(feature: Feature): Promise<Feature> {\r\n return this.API.__proto__.CreateFeature(feature);\r\n }\r\n\r\n async deleteFeature(feature: Feature): Promise<Feature> {\r\n const deleted = await this.API.__proto__.DeleteFeature({ id: feature.id });\r\n if (deleted) {\r\n const poi = await this.poiService.getPoiByElementId(feature.id);\r\n if (poi) {\r\n await this.poiService.deletePoi(poi.id);\r\n }\r\n // delete comments\r\n for (const comment of deleted.comments.items) {\r\n await this.commentService.deleteComment(comment.id);\r\n }\r\n }\r\n return deleted;\r\n }\r\n\r\n async updateFeature(feature: any): Promise<Feature> {\r\n return this.API.__proto__.UpdateFeature(feature);\r\n }\r\n\r\n async getFeature(id: string): Promise<Feature> {\r\n const feature = (await this.API.__proto__.GetFeature(id)) as Feature;\r\n feature.events.items.sort((a, b) => b.realStartDate - a.realStartDate);\r\n this.setCoverImage(feature);\r\n this.setImages(feature);\r\n this.setVideos(feature);\r\n this.setDocuments(feature);\r\n this.setAudio(feature);\r\n this.setExternalLinks(feature);\r\n this.isBookingPlace(feature);\r\n return feature;\r\n }\r\n\r\n\r\n async initFeatures() {\r\n if (!this.currentSpaceID) {\r\n return;\r\n }\r\n this.updating.next(true);\r\n this.isUpdating = true;\r\n const featureList = await this.getFeaturesForSpace(this.currentSpaceID);\r\n this.currentHashtags = await this.hashtagService.getHashtagsForSpace(\r\n this.currentSpaceID,\r\n );\r\n // console.log(this.currentHashtags);\r\n if (featureList.length > 0) {\r\n let filteredFeatures = [...featureList];\r\n let filteredPointInterest = filteredFeatures.filter(\r\n (feature) => feature.type !== FeatureType.DESK,\r\n );\r\n let filteredDesks = filteredFeatures.filter(\r\n (feature) => feature.type === FeatureType.DESK,\r\n );\r\n if (this.featureDomainFilter) {\r\n filteredPointInterest = filteredPointInterest.filter(\r\n (feature) =>\r\n this.featureDomainFilter.find(\r\n (domain) =>\r\n feature.domain && domain === feature.domain.id,\r\n ),\r\n );\r\n }\r\n if (this.deskDomainFilter) {\r\n filteredDesks = filteredDesks.filter((feature) =>\r\n this.deskDomainFilter.find(\r\n (domain) =>\r\n feature.domain && domain === feature.domain.id,\r\n ),\r\n );\r\n }\r\n filteredFeatures = [...filteredPointInterest, ...filteredDesks];\r\n this.currentFeatures.space = filteredFeatures.sort(\r\n (a, b) => a.index - b.index,\r\n );\r\n // emit on tags should be after setting current.space !!\r\n this.featureTags.next(filteredFeatures); // for tags update without zone filtering\r\n if (this.zoneIDFilter) {\r\n filteredFeatures =\r\n (await this.filterService.filterObjectsForZone(\r\n filteredFeatures,\r\n this.zoneIDFilter,\r\n )) as Feature[];\r\n }\r\n this.currentFeatures.zone = filteredFeatures.sort(\r\n (a, b) => a.index - b.index,\r\n );\r\n // console.log(this.currentFeatures);\r\n this.featureUpdated.next(this.currentFeatures); // for lateral menu\r\n } else {\r\n this.featureUpdated.next({ space: [], zone: [] }); // for lateral menu\r\n }\r\n this.updating.next(false);\r\n this.isUpdating = false;\r\n }\r\n\r\n async getFeaturesForSpace(\r\n spaceID: string,\r\n keepArchived: boolean = false,\r\n ): Promise<Feature[]> {\r\n const features = await this.API.__proto__.FeaturesBySpace(spaceID).then(\r\n (response) => response.items,\r\n );\r\n let featuresForUser =\r\n await this.filterService.filterFeaturesForCurrentUserInSpace(\r\n features,\r\n spaceID,\r\n );\r\n if (!keepArchived) {\r\n featuresForUser = featuresForUser.filter(\r\n (feature) => !this.isArchived(feature),\r\n );\r\n }\r\n for (const feature of featuresForUser) {\r\n this.setCoverImage(feature);\r\n this.isBookingPlace(feature);\r\n }\r\n return featuresForUser;\r\n }\r\n\r\n async getFeaturesBySpaceWithoutFiltering(spaceID: string): Promise<Feature[]> {\r\n let features = await this.API.__proto__.FeaturesBySpace(spaceID).then(\r\n (response) => response.items,\r\n );\r\n features = features.filter(\r\n (feature) => !this.isArchived(feature),\r\n );\r\n for (const feature of features) {\r\n this.setCoverImage(feature);\r\n this.isBookingPlace(feature);\r\n }\r\n return features;\r\n }\r\n\r\n isBookingPlace(feature: Feature) {\r\n feature.isBookingPlace = feature.type === FeatureType.DESK;\r\n }\r\n\r\n \r\n setCoverImage(feature: Feature) {\r\n const coverImage = feature.comments.items.find(\r\n (com) => com.isCoverImage,\r\n );\r\n if (coverImage) {\r\n feature.coverImageUrl = coverImage.annexe;\r\n } else if (\r\n feature.comments.items.some((com) => com.type === CommentType.IMAGE)\r\n ) {\r\n const imageComment = feature.comments.items.find(\r\n (com) => com.type === CommentType.IMAGE,\r\n );\r\n feature.coverImageUrl = imageComment.annexe;\r\n }\r\n }\r\n\r\n async updateFeatureLocation(\r\n feature: Feature,\r\n tagData: MattertagData,\r\n spaceID: string,\r\n ): Promise<POI> {\r\n const poiInput = {\r\n coordinate: tagData.getCoordinateString(),\r\n type: feature.isBookingPlace ? PoiType.DESK : PoiType.DATA,\r\n elementID: feature.id,\r\n metadata: tagData.getMetadataString(),\r\n matterportSweepID: tagData.getSweepID(),\r\n } as POI;\r\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\r\n return poi;\r\n }\r\n\r\n setImages(feature: Feature) {\r\n const imagesComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.IMAGE)\r\n .sort((a, b) => a.index - b.index);\r\n const images = [];\r\n for (const image of imagesComments) {\r\n images.push({\r\n path: image.annexe,\r\n title: image.title,\r\n description: image.description,\r\n showInTag: image.shownInTag,\r\n });\r\n }\r\n feature.images = images;\r\n }\r\n\r\n setVideos(feature: Feature) {\r\n const videosComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.VIDEO || com.type === CommentType.YOUTUBE)\r\n .sort((a, b) => a.index - b.index);\r\n const videos = [];\r\n for (const video of videosComments) {\r\n videos.push({\r\n path: video.type === CommentType.YOUTUBE ? 'https://www.youtube.com/embed/' + video.externalLink : video.annexe,\r\n title: video.title,\r\n description: video.description,\r\n type: video.type,\r\n });\r\n }\r\n feature.videos = videos;\r\n }\r\n\r\n setDocuments(feature: Feature) {\r\n const documentComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.DOCUMENT)\r\n .sort((a, b) => a.index - b.index);\r\n const docs = [];\r\n for (const document of documentComments) {\r\n docs.push({\r\n path: document.annexe,\r\n title: document.title,\r\n description: document.description,\r\n });\r\n }\r\n feature.documents = docs;\r\n }\r\n\r\n setAudio(feature: Feature) {\r\n const audioComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.AUDIO)\r\n .sort((a, b) => a.index - b.index);\r\n const audios = [];\r\n for (const audio of audioComments) {\r\n audios.push({\r\n path: audio.annexe,\r\n title: audio.title,\r\n description: audio.description,\r\n });\r\n }\r\n feature.audios = audios;\r\n }\r\n\r\n setExternalLinks(feature: Feature) {\r\n const linksComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.URL)\r\n .sort((a, b) => a.index - b.index);\r\n const externalLinks = [];\r\n for (const link of linksComments) {\r\n externalLinks.push({\r\n path: link.externalLink,\r\n title: link.title,\r\n description: link.description,\r\n showInTag: link.shownInTag,\r\n });\r\n }\r\n feature.externalLinks = externalLinks;\r\n }\r\n\r\n \r\n\r\n \r\n\r\n async getFirstFeatureForSpace(spaceID: string): Promise<Feature> {\r\n const features = await this.getFeaturesForSpace(spaceID);\r\n const first = features.find((feat) => feat.index === 1);\r\n return first;\r\n }\r\n\r\n async updateIconForAllFeaturesInSpace(\r\n tagIcon: string,\r\n spaceID: string,\r\n categoryID: string = null,\r\n ): Promise<{ features: Feature[]; pois: POI[] }> {\r\n let features = await this.getFeaturesForSpace(spaceID);\r\n if (categoryID) {\r\n features = features.filter(\r\n (feature) => feature.domainID === categoryID,\r\n );\r\n }\r\n const pois = await this.updateIconForAllObjects(features, tagIcon);\r\n return { features, pois };\r\n }\r\n\r\n async getCreatedIndicesForFeaturesInSpace(\r\n spaceID: string,\r\n ): Promise<number[]> {\r\n let features = (await this.API.__proto__.FeaturesBySpace(spaceID)).items;\r\n features = features.filter((feat) => feat.index);\r\n return features.map((feat) => feat.index);\r\n }\r\n\r\n async getDesksForSpace(spaceID: string): Promise<Feature[]> {\r\n const features = await this.getFeaturesForSpace(spaceID);\r\n return features.filter((feat) => feat.isBookingPlace);\r\n }\r\n\r\n /** Return true if the current user has archived this feature */\r\n isArchived(feature: Feature): boolean {\r\n return feature.archivedForMissionID\r\n ? feature.archivedForMissionID.includes(\r\n this.userService.currentMission(feature.spaceID).id,\r\n )\r\n : false;\r\n }\r\n\r\n setArchived(feature: Feature, archived: boolean) {\r\n let archivedList = feature.archivedForMissionID\r\n ? feature.archivedForMissionID\r\n : [];\r\n const missionID = this.userService.currentMission(feature.spaceID).id;\r\n\r\n archivedList = archivedList.filter((m) => m !== missionID);\r\n\r\n if (archived) {\r\n archivedList.push(missionID);\r\n }\r\n\r\n return this.updateFeature({\r\n id: feature.id,\r\n archivedForMissionID: archivedList,\r\n });\r\n }\r\n\r\n\r\n async updateDueToCreate(feature: Feature) {\r\n this.currentFeatures.space.unshift(feature);\r\n this.currentFeatures.zone.unshift(feature);\r\n this.featureUpdated.next({\r\n space: this.currentFeatures.space,\r\n zone: this.currentFeatures.zone,\r\n }); // for lateral menu\r\n }\r\n\r\n async updateDueToDelete(deletedFeature: Feature) {\r\n const feature = this.currentFeatures.space.find(\r\n (_feature) => _feature.id === deletedFeature.id,\r\n );\r\n if (feature) {\r\n const index = this.currentFeatures.space.indexOf(feature);\r\n this.currentFeatures.space.splice(index, 1);\r\n }\r\n const zoneFeature = this.currentFeatures.zone.find(\r\n (_feature) => _feature.id === deletedFeature.id,\r\n );\r\n if (zoneFeature) {\r\n const index = this.currentFeatures.zone.indexOf(zoneFeature);\r\n this.currentFeatures.zone.splice(index, 1);\r\n }\r\n this.featureUpdated.next({\r\n space: this.currentFeatures.space,\r\n zone: this.currentFeatures.zone,\r\n }); // for lateral menu\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { VisitTemplate } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class TemplateService {\r\n API: any; //AWS\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any\r\n ) {\r\n this.API = apiInjected;\r\n }\r\n\r\n // --CRUD---\r\n async create(template: VisitTemplate): Promise<VisitTemplate> {\r\n return this.API.__proto__.CreateVisitTemplate(template);\r\n }\r\n\r\n async update(template: any): Promise<VisitTemplate> {\r\n return this.API.__proto__.UpdateVisitTemplate(template);\r\n }\r\n\r\n async detele(templateID: string): Promise<VisitTemplate> {\r\n return this.API.__proto__.DeleteVisitTemplate({id:templateID});\r\n }\r\n\r\n async softDelete(templateID: string): Promise<VisitTemplate> {\r\n return this.update({id: templateID, deletedAt: Date.now()});\r\n }\r\n\r\n async get(templateID: string): Promise<VisitTemplate> {\r\n return this.API.__proto__.GetVisitTemplate(templateID);\r\n }\r\n\r\n async getTemplatesBySpace(spaceID: string): Promise<VisitTemplate[]> {\r\n return this.API.__proto__.TemplatesBySpace(spaceID).then((response) => response.items);\r\n }\r\n\r\n async getTemplatesByZone(zoneID: string): Promise<VisitTemplate[]> {\r\n return this.API.__proto__.TemplatesByZone(zoneID).then((response) => response.items);\r\n }\r\n}","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport function floatValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const regex = /^[+-]?([0-9]*[.])?[0-9]+$/;\r\n if (control.value && control.value !== '') {\r\n return !regex.test(control.value) ? { number: control.value } : null;\r\n } else {\r\n return null;\r\n }\r\n };\r\n}","/*\r\n * Public API Surface of ngx-smarterplan-core\r\n */\r\n\r\nexport * from './lib/ngx-smarterplan-core.service';\r\nexport * from './lib/ngx-smarterplan-core.module';\r\nexport * from './lib/types.service';\r\nexport * from './lib/services/matterport.service';\r\nexport * from './lib/services/tag.service';\r\nexport * from './lib/services/baseVisibility.service';\r\nexport * from './lib/services/content.service';\r\nexport * from './lib/services/viewer.service';\r\nexport * from './lib/services/navigator.service';\r\nexport * from './lib/config';\r\nexport * from './lib/services/base-tab.service';\r\nexport * from './lib/services/user.service';\r\nexport * from './lib/helpers.service';\r\nexport * from './lib/services/locale.service';\r\nexport * from './lib/services/s3.service';\r\nexport * from './lib/services/filter.service';\r\nexport * from './lib/services/search.service';\r\nexport * from './lib/services/zone-drawer.service';\r\nexport * from './lib/services/matterport-import.service';\r\nexport * from './lib/mattertagData';\r\n\r\n// DynamoDB (model) services\r\nexport * from './lib/services/models/profile.service';\r\nexport * from './lib/services/models/zone.service';\r\nexport * from './lib/services/models/mission.service';\r\nexport * from './lib/services/models/poi.service';\r\nexport * from './lib/services/models/property.service';\r\nexport * from './lib/services/models/organisation.service';\r\nexport * from './lib/services/models/domain.service';\r\nexport * from './lib/services/models/space.service';\r\nexport * from './lib/services/models/capture.service';\r\nexport * from './lib/services/models/visit.service';\r\nexport * from './lib/services/models/plan.service';\r\nexport * from './lib/services/models/hashtag.service';\r\nexport * from './lib/services/models/navigation.service';\r\nexport * from './lib/services/models/node.service';\r\nexport * from './lib/services/models/equipment.service';\r\nexport * from './lib/services/models/layer.service';\r\nexport * from './lib/services/models/ticket.service';\r\nexport * from './lib/services/models/operation.service';\r\nexport * from './lib/services/intervention.service';\r\nexport * from './lib/services/models/event.service';\r\nexport * from './lib/services/booking.service';\r\nexport * from './lib/services/models/affectation.service';\r\nexport * from './lib/services/models/measurement.service';\r\nexport * from './lib/services/models/comment.service';\r\nexport * from './lib/services/models/feature.service';\r\nexport * from './lib/services/models/template.service';\r\nexport * from './lib/services/support.service';\r\nexport * from './lib/services/validators.service';\r\n\r\n\r\n// Components\r\nexport * from './lib/components/csv-export/csv-export.component';\r\nexport * from './lib/components/search-bar/search-bar.component';\r\nexport * from './lib/components/menu-bar/menu-bar.component';\r\nexport * from './lib/components/loader/loader.component';\r\nexport * from './lib/components/support-modal/support-modal.component';\r\n\r\n// Pipes\r\nexport * from './lib/pipes/duration-to-string.pipe';\r\nexport * from './lib/pipes/hashtag-from-id.pipe';\r\nexport * from './lib/pipes/safe-url.pipe';\r\nexport * from './lib/pipes/time-date-to-local-string.pipe';\r\nexport * from './lib/pipes/username-from-id.pipe';\r\n\r\n// Directives\r\nexport * from './lib/validators/email.directive';\r\nexport * from './lib/validators/no-empty.directive';\r\nexport * from './lib/validators/text.directive';\r\nexport * from './lib/validators/number.directive';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.BaseVisibilityService","i1.PoiService","i2.MatterportService","i2","i3.ViewerService","i1.ProfileService","i2.MissionService","i3.PropertyService","i4","i5","i6","i1.BaseUserService","i2.ZoneService","i3.PoiService","i2.NavigationService","i1.MatterportService","i2.ViewerService","i3.ZoneService","i4.BaseUserService","i1.EventService","i1.OperationService","i2.EventService","i3.AffectationService","i4.PoiService","i5.BaseUserService","i6.NavigatorService","i7.FilterService","i8.InterventionService","i9.NavigationService","i10.ViewerService","i11","i3.OperationService","i4.TicketsService","i5.NavigatorService","i6.FilterService","i7.BaseUserService","i8.ViewerService","i9","i1.FilterService","i2.EquipmentService","i1.SearchService","i1.HashtagService","Observable","i1.SupportService","i5.ValidatorsService","i6.LoaderComponent","i7","i8","i2.FilterService","i2.ProfileService","i1.ZoneService","i5.MatterportService","i6.BaseVisibilityService","i1.CaptureService","i2.NodeService","i3.NavigationService","i4.ZoneService","i5.PlanService","i6.BaseUserService","i2.SpaceService","i4.VisitService","i5.ViewerService","i10","i2.LocaleService","i3.BaseUserService","i4.NavigatorService","i5.SupportService","i6.RangeDatePickerComponent","i7.AvatarComponent","i8.NavigationBarComponent","i12","i3.CommentService","i1.NavigationService","i4.LayerService","i6.PlanService","i2.BaseUserService","i3.MissionService","i1.NavigatorService","i6.NavigationService","i4.CommentService","i7.HashtagService"],"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/poi.service.ts","../../../projects/ngx-smarterplan-core/src/lib/mattertagData.ts","../../../projects/ngx-smarterplan-core/src/lib/services/baseVisibility.service.ts","../../../projects/ngx-smarterplan-core/src/lib/config.ts","../../../projects/ngx-smarterplan-core/src/lib/services/matterport.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/viewer.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/modal-switch-visit/modal-switch-visit.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/modal-switch-visit/modal-switch-visit.component.html","../../../projects/ngx-smarterplan-core/src/lib/services/s3.service.ts","../../../projects/ngx-smarterplan-core/src/lib/helpers.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/profile.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/mission.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/property.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/user.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/zone.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/filter.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/navigation.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/base-object.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/operation.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/event.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/affectation.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/navigator.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/intervention.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/ticket.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/equipment.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/search.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/search-bar/search-bar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/search-bar/search-bar.component.html","../../../projects/ngx-smarterplan-core/src/lib/pipes/duration-to-string.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/hashtag.service.ts","../../../projects/ngx-smarterplan-core/src/lib/pipes/hashtag-from-id.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/pipes/safe-url.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/pipes/time-date-to-local-string.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/pipes/username-from-id.pipe.ts","../../../projects/ngx-smarterplan-core/src/lib/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/components/menu-bar/range-date-picker/range-date-picker.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/range-date-picker/range-date-picker.component.html","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/avatar/avatar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/capture.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/node.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/zone-drawer.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/plan.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/visit.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/space.service.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/navigation-bar/navigation-bar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/navigation-bar/navigation-bar.component.html","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/menu-bar.component.ts","../../../projects/ngx-smarterplan-core/src/lib/components/menu-bar/menu-bar.component.html","../../../projects/ngx-smarterplan-core/src/lib/ngx-smarterplan-core.module.ts","../../../projects/ngx-smarterplan-core/src/lib/services/tag.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/comment.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/content.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/base-tab.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/layer.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/matterport-import.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/organisation.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/domain.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/booking.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/measurement.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/feature.service.ts","../../../projects/ngx-smarterplan-core/src/lib/services/models/template.service.ts","../../../projects/ngx-smarterplan-core/src/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","\r\nexport enum PoiType {\r\n EQUIPMENT = \"EQUIPMENT\",\r\n INFORMATION = \"INFORMATION\",\r\n TICKET = \"TICKET\",\r\n MEASURE = \"MEASURE\",\r\n DATA = \"DATA\",\r\n PEOPLE = \"PEOPLE\",\r\n DESK = \"DESK\",\r\n ROOM = \"ROOM\"\r\n}\r\n\r\nexport enum TicketPriority {\r\n MINIMUM = \"MINIMUM\",\r\n LOW = \"LOW\",\r\n MEDIUM = \"MEDIUM\",\r\n HIGH = \"HIGH\",\r\n MAXIMUM = \"MAXIMUM\"\r\n}\r\n\r\nexport enum TagAction {\r\n HOVER_ON = \"hoverOn\",\r\n AUDIO_CLICK = \"audioClick\",\r\n VIDEO_CLICK = \"videoClick\",\r\n IMAGE_CLICK = \"imageClick\",\r\n DOC_CLICK = \"docClick\",\r\n CLOSE_MODAL = \"closeModal\",\r\n NEXT_SLIDE = \"nextSlide\",\r\n DETAIL_CLICK = \"detailsClick\",\r\n TICKET_CLICK = \"ticketClick\",\r\n YOUTUBE_CLICK = \"youtubeClick\",\r\n}\r\n\r\nexport enum TicketStatus {\r\n TO_BE_PROCESSED = \"TO_BE_PROCESSED\",\r\n PLANNED = \"PLANNED\",\r\n IN_PROGRESS = \"IN_PROGRESS\",\r\n WAITING_FOR_VALIDATION = \"WAITING_FOR_VALIDATION\",\r\n VALIDATED = \"VALIDATED\",\r\n REJECTED = \"REJECTED\",\r\n RESOLVED = \"RESOLVED\",\r\n ARCHIVED = \"ARCHIVED\",\r\n LATE = \"LATE\",\r\n BLOCKED = \"BLOCKED\",\r\n COMPLETED = \"COMPLETED\",\r\n DELAYED = \"DELAYED\",\r\n CANCELLED = \"CANCELLED\",\r\n TO_REDO = \"TO_REDO\",\r\n CREATED = \"CREATED\"\r\n}\r\n\r\nexport enum DomainType {\r\n EQUIPMENT = \"EQUIPMENT\",\r\n MISSION = \"MISSION\",\r\n TICKET = \"TICKET\",\r\n POI = \"POI\",\r\n FEATURE = \"FEATURE\",\r\n BOOKING = \"BOOKING\"\r\n}\r\n\r\nexport enum RoleStatus {\r\n VISITOR = \"VISITOR\",\r\n VISITOR_MUSEUM = \"VISITOR_MUSEUM\",\r\n GUIDE_MUSEUM = \"GUIDE_MUSEUM\",\r\n OCCUPANT = \"OCCUPANT\",\r\n SERVICE = \"SERVICE\",\r\n MANAGER = \"MANAGER\",\r\n OWNER = \"OWNER\",\r\n ADMIN = \"ADMIN\"\r\n}\r\n\r\nexport enum ProfileStatus {\r\n WAITING_FOR_VALIDATION = \"WAITING_FOR_VALIDATION\",\r\n WAITING_FOR_ACTIVATION = \"WAITING_FOR_ACTIVATION\",\r\n ACTIVE = \"ACTIVE\",\r\n INACTIVE = \"INACTIVE\",\r\n BLOCKED = \"BLOCKED\"\r\n}\r\n\r\nexport enum LevelStatus {\r\n MINIMUM = \"MINIMUM\",\r\n LOW = \"LOW\",\r\n MEDIUM = \"MEDIUM\",\r\n HIGH = \"HIGH\",\r\n MAXIMUM = \"MAXIMUM\"\r\n}\r\n\r\nexport enum PropertyType {\r\n PROPERTY = \"PROPERTY\",\r\n VISIT = \"VISIT\",\r\n OCCUPANT = \"OCCUPANT\",\r\n SHARED = \"SHARED\"\r\n}\r\n\r\nexport enum SpaceStatus {\r\n DPE_TO_VALIDATE = \"DPE_TO_VALIDATE\",\r\n DPE_VALIDATED = \"DPE_VALIDATED\",\r\n DPE_FETCH = \"DPE_FETCH\"\r\n}\r\n\r\nexport enum Locale {\r\n FR = \"FR\",\r\n EN = \"EN\"\r\n}\r\n\r\nexport enum EmailStatus {\r\n CREATION_TO_DELIVER = \"CREATION_TO_DELIVER\",\r\n UPDATE_TO_DELIVER = \"UPDATE_TO_DELIVER\",\r\n CANCELLATION_TO_DELIVER = \"CANCELLATION_TO_DELIVER\",\r\n SENT = \"SENT\",\r\n SOFT_BOUNCE = \"SOFT_BOUNCE\",\r\n HARD_BOUNCE = \"HARD_BOUNCE\",\r\n REJECTED = \"REJECTED\"\r\n}\r\n\r\nexport enum CaptureViewer {\r\n CUPIX = \"CUPIX\",\r\n MATTERPORT = \"MATTERPORT\",\r\n SMARTERPLAN_V1 = \"SMARTERPLAN_V1\"\r\n}\r\n\r\nexport enum InventoryStatus {\r\n SUCCESS = \"SUCCESS\",\r\n ERROR = \"ERROR\",\r\n TO_RUN = \"TO_RUN\",\r\n TO_RUN_ONE_IMAGE = \"TO_RUN_ONE_IMAGE\",\r\n ERROR_FILE_OBJ_NOT_EXIST = \"ERROR_FILE_OBJ_NOT_EXIST\",\r\n ERROR_FILE_JSON_NOT_EXIST = \"ERROR_FILE_JSON_NOT_EXIST\",\r\n ERROR_FILE_MODEL_NOT_EXIST = \"ERROR_FILE_MODEL_NOT_EXIST\"\r\n}\r\n\r\nexport enum TypeNote {\r\n CONTRACTUAL = \"CONTRACTUAL\",\r\n INFORMATION = \"INFORMATION\",\r\n TECHNICAL = \"TECHNICAL\",\r\n FINANCIAL = \"FINANCIAL\",\r\n OTHER = \"OTHER\",\r\n IMAGE = \"IMAGE\"\r\n}\r\n\r\nexport enum FeatureType {\r\n DESK = \"DESK\",\r\n INDICATOR_TEMP = \"INDICATOR_TEMP\",\r\n INFORMATION = \"INFORMATION\",\r\n INDICATOR_CO2 = \"INDICATOR_CO2\",\r\n PURCHASE = \"PURCHASE\"\r\n}\r\n\r\nexport enum TicketType {\r\n REPORTING = \"REPORTING\",\r\n REQUEST_FOR_INTERVENTION = \"REQUEST_FOR_INTERVENTION\",\r\n REQUEST_FOR_MAINTENANCE = \"REQUEST_FOR_MAINTENANCE\",\r\n WORK_ORDER = \"WORK_ORDER\",\r\n INCIDENT = \"INCIDENT\",\r\n INFORMATION = \"INFORMATION\"\r\n}\r\n\r\nexport enum EventType {\r\n EQUIPMENT = \"EQUIPMENT\",\r\n COMMENT = \"COMMENT\",\r\n CONTRACTUAL_INTERVENTION = \"CONTRACTUAL_INTERVENTION\",\r\n NON_CONTRACTUAL_INTERVENTION = \"NON_CONTRACTUAL_INTERVENTION\",\r\n TICKET = \"TICKET\",\r\n REPORTING = \"REPORTING\",\r\n REQUEST_FOR_INTERVENTION = \"REQUEST_FOR_INTERVENTION\",\r\n REQUEST_FOR_MAINTENANCE = \"REQUEST_FOR_MAINTENANCE\",\r\n WORK_ORDER = \"WORK_ORDER\",\r\n INCIDENT = \"INCIDENT\",\r\n MEASURE = \"MEASURE\",\r\n BOOKING = \"BOOKING\",\r\n BOOKING_SUBCRIPTION = \"BOOKING_SUBCRIPTION\"\r\n}\r\n\r\nexport enum EventStatus {\r\n TO_BE_PROCESSED = \"TO_BE_PROCESSED\",\r\n PLANNED = \"PLANNED\",\r\n IN_PROGRESS = \"IN_PROGRESS\",\r\n WAITING_FOR_VALIDATION = \"WAITING_FOR_VALIDATION\",\r\n VALIDATED = \"VALIDATED\",\r\n REJECTED = \"REJECTED\",\r\n RESOLVED = \"RESOLVED\",\r\n ARCHIVED = \"ARCHIVED\",\r\n LATE = \"LATE\",\r\n BLOCKED = \"BLOCKED\",\r\n COMPLETED = \"COMPLETED\",\r\n DELAYED = \"DELAYED\",\r\n CANCELLED = \"CANCELLED\",\r\n TO_REDO = \"TO_REDO\",\r\n CREATED = \"CREATED\",\r\n LINKED_TO_EQUIPMENT = \"LINKED_TO_EQUIPMENT\",\r\n UNLINKED_FROM_EQUIPMENT = \"UNLINKED_FROM_EQUIPMENT\",\r\n EDITED = \"EDITED\",\r\n LINKED_TO_A_PARENT_TICKET = \"LINKED_TO_A_PARENT_TICKET\",\r\n WAITING_FOR_ACCEPTATION = \"WAITING_FOR_ACCEPTATION\",\r\n ACCEPTED = \"ACCEPTED\",\r\n REFUSED = \"REFUSED\",\r\n DOMAIN_UPDATED = \"DOMAIN_UPDATED\",\r\n DATES_UPDATED = \"DATES_UPDATED\",\r\n TICKET_CHILD_REMOVED = \"TICKET_CHILD_REMOVED\",\r\n TYPE_UPDATED = \"TYPE_UPDATED\",\r\n DATE_END_UPDATED = \"DATE_END_UPDATED\",\r\n DATE_START_UPDATED = \"DATE_START_UPDATED\",\r\n POSITION_SET = \"POSITION_SET\",\r\n POSITION_UPDATED = \"POSITION_UPDATED\",\r\n POSITION_REMOVED = \"POSITION_REMOVED\"\r\n}\r\n\r\nexport enum PaymentStatus {\r\n UNPAID = \"UNPAID\",\r\n PAID = \"PAID\",\r\n PENDING = \"PENDING\",\r\n ERROR = \"ERROR\"\r\n}\r\n\r\nexport enum CommentType {\r\n MEASURE = \"MEASURE\",\r\n VIDEO = \"VIDEO\",\r\n DOCUMENT = \"DOCUMENT\",\r\n IMAGE = \"IMAGE\",\r\n TEXT = \"TEXT\",\r\n AUDIO = \"AUDIO\",\r\n URL = \"URL\",\r\n YOUTUBE = \"YOUTUBE\",\r\n URL_SHOP = \"URL_SHOP\",\r\n SCRIPT_EMBED = \"SCRIPT_EMBED\"\r\n}\r\n\r\nexport enum StatusEquipment {\r\n TO_SETUP = \"TO_SETUP\",\r\n BROKEN = \"BROKEN\",\r\n UNINSTALLED = \"UNINSTALLED\",\r\n INCIDENT = \"INCIDENT\",\r\n IN_OPERATION = \"IN_OPERATION\",\r\n WAITING_FOR_REPAIR = \"WAITING_FOR_REPAIR\",\r\n DELETED = \"DELETED\",\r\n OUT_OF_ORDER = \"OUT_OF_ORDER\",\r\n TO_BE_REPLACED = \"TO_BE_REPLACED\"\r\n}\r\n\r\n/** Interface for Update (only id is required) */\r\nexport interface IUpdate {\r\n id: string;\r\n}\r\n\r\nexport type AWSType = {\r\n __typename?: string | null;\r\n id?: string | null;\r\n createdAt?: string;\r\n updatedAt?: string;\r\n};\r\n\r\nexport type DbObjectType = {\r\n spaceID?: string | null;\r\n description?: string | null;\r\n pois?: {\r\n __typename?: \"ModelPOIConnection\";\r\n items?: Array<POI> | null;\r\n nextToken?: string | null;\r\n } | null;\r\n space?: Space | null;\r\n domainID?: string | null;\r\n name?: string | null;\r\n title?: string | null;\r\n} & AWSType;\r\n\r\nexport type Ticket = {\r\n spaceID: string;\r\n title: string;\r\n status?: TicketStatus | null;\r\n priority?: TicketPriority | null;\r\n ownerMissionID?: string | null;\r\n ownerMission?: Mission | null;\r\n type?: TicketType | null;\r\n parentID?: string | null;\r\n level?: LevelStatus | null;\r\n friendlyLabel?: string | null;\r\n domain: Domain | null;\r\n domainID: string | null;\r\n events?: {\r\n __typename?: \"ModelEventConnection\";\r\n items?: Array<Event> | null;\r\n nextToken?: string | null;\r\n } | null;\r\n assignees?: {\r\n __typename?: \"ModelAffectationConnection\";\r\n items?: Array<Affectation> | null;\r\n nextToken?: string | null;\r\n } | null;\r\n equipments?: Array<Equipment> | null;\r\n operations?: {\r\n __typename?: \"ModelOperationConnection\";\r\n items?: Array<Operation | null> | null;\r\n nextToken?: string | null;\r\n };\r\n comments?: {\r\n __typename?: \"ModelCommentConnection\";\r\n items?: Array<Comment | null> | null;\r\n nextToken?: string | null;\r\n };\r\n prestataire?: Prestataire | null;\r\n children?: {\r\n __typename?: \"ModelTicketConnection\";\r\n items?: Array<Ticket | null> | null;\r\n nextToken?: string | null;\r\n };\r\n archivedForMissionID?: string[] | null;\r\n} & DbObjectType;\r\n\r\nexport type Operation = {\r\n id?: string | null;\r\n ticketID?: string | null;\r\n equipmentID?: string | null;\r\n deletedAt?: number | null;\r\n ticket?: Ticket | null;\r\n equipment?: Equipment | null;\r\n} & AWSType;\r\n\r\nexport type Equipment = {\r\n name: string;\r\n notes?: {\r\n __typename?: \"ModelNoteConnection\";\r\n items?: Array<Note | null> | null;\r\n nextToken?: string | null;\r\n };\r\n documents?: Array<EquipmentDocument> | null;\r\n documentationImageUrlSigned?: string | null;\r\n subEquipments?: Array<Equipment | null> | null;\r\n subequipmentsIDs?: Array<string | null> | null;\r\n serialNumber?: string | null;\r\n domain?: Domain | null;\r\n childDomain?: Domain | null;\r\n parentDomain?: Domain | null;\r\n photo?: string | null;\r\n zone?: Zone | null;\r\n tickets?: Ticket[] | null;\r\n domainID?: string | null;\r\n spaceID: string;\r\n archivedForMissionID?: string[] | null;\r\n annotation?: string | null;\r\n status?: StatusEquipment | null;\r\n family?: Array<string | null> | null;\r\n manufacturer?: string | null;\r\n sku?: string | null;\r\n installDate?: number | null;\r\n warrantyEndDate?: number | null;\r\n operations?: {\r\n __typename?: \"ModelOperationConnection\";\r\n items?: Array<Operation | null> | null;\r\n nextToken?: string | null;\r\n };\r\n} & DbObjectType;\r\n\r\nexport type EquipmentSelected = {\r\n selected?: boolean;\r\n} & Equipment;\r\n\r\n// not in db\r\nexport type EquipmentDocument = {\r\n filename: string;\r\n url: string;\r\n urlSigned: string;\r\n noteID: string;\r\n};\r\n\r\n// not in db\r\nexport type Prestataire = {\r\n organisation: Organisation;\r\n mission: Mission;\r\n profile: Profile;\r\n name: string;\r\n};\r\n\r\nexport type Note = {\r\n id?: string | null;\r\n attachment?: string | null;\r\n signDate?: number | null;\r\n expirationDate?: number | null;\r\n type?: TypeNote | null;\r\n ownerMissionID?: string | null;\r\n equipmentID?: string | null;\r\n} & AWSType;\r\n\r\nexport type Domain = {\r\n name: string;\r\n slug?: string | null;\r\n abbreviation?: string | null;\r\n description?: string | null;\r\n organisationID?: string | null;\r\n parentID?: string | null;\r\n type?: DomainType | null;\r\n parent?: Domain | null;\r\n children?: {\r\n __typename?: \"ModelDomainConnection\";\r\n items?: Array<Domain | null> | null;\r\n nextToken?: string | null;\r\n };\r\n} & AWSType;\r\n\r\nexport type POI = {\r\n id?: string | null;\r\n coordinate?: string | null;\r\n tagIcon?: string | null;\r\n tagDescription?: string | null;\r\n tagImageID?: string | null;\r\n metadata?: string | null;\r\n matterportSweepID?: string | null;\r\n type?: PoiType | null;\r\n elementID?: string | null;\r\n virtual?: boolean | null;\r\n};\r\n\r\nexport enum ViewerInteractions {\r\n DEFAULT = 0,\r\n ADDING_TICKET,\r\n POSITIONING,\r\n ADDING_EQUIPMENT,\r\n ADDING_MEASURE,\r\n ADDING_FEATURE,\r\n ADDING_ROOM,\r\n}\r\n\r\nexport type Mission = {\r\n userID: string;\r\n role?: RoleStatus | null;\r\n organisationID: string;\r\n spaceID?: string | null;\r\n level?: LevelStatus | null;\r\n orderedOrganisationID?: string | null;\r\n zoneID?: string | null;\r\n groups?: Array<string | null> | null;\r\n emailStatus?: EmailStatus | null;\r\n description?: string | null;\r\n metadata?: string | null;\r\n deletedAt?: number | null;\r\n assignments?: {\r\n __typename?: \"ModelAffectationConnection\";\r\n items?: Array<Affectation | null> | null;\r\n nextToken?: string | null;\r\n };\r\n organisation?: Organisation | null;\r\n orderedOrganisation?: Organisation | null;\r\n user?: Profile | null;\r\n domains?: string[] | null;\r\n // domainObjects?: Domain[] | null;\r\n space?: Space | null;\r\n zone?: Zone | null;\r\n startDateTime?: string | null;\r\n endDateTime?: string | null;\r\n hashtags?: Array<string | null> | null;\r\n templateMissionID?: string | null;\r\n templateMission?: VisitTemplate | null;\r\n locale?: Locale | null;\r\n isInWaitingRoom?: boolean | null;\r\n blockedInChat?: boolean | null;\r\n} & AWSType;\r\n\r\nexport type Affectation = {\r\n mission?: Mission | null;\r\n group: string;\r\n metadata?: string | null;\r\n deletedAt?: number | null;\r\n missionID: string;\r\n ticketID: string;\r\n} & AWSType;\r\n\r\nexport type MediaContent = {\r\n path: string;\r\n title: string;\r\n description: string;\r\n showInTag?: boolean;\r\n type?: CommentType;\r\n};\r\n\r\nexport type Comment = {\r\n title: string;\r\n ticket?: Ticket | null;\r\n ownerID?: string | null;\r\n owner?: Mission | null;\r\n annexe?: string | null;\r\n ticketID?: string | null;\r\n type?: CommentType | null;\r\n dimensions?: Array<number | null> | null;\r\n featureID?: string | null;\r\n isCoverImage?: boolean | null;\r\n index?: number | null;\r\n shownInTag?: boolean | null;\r\n externalLink?: string | null;\r\n} & AWSType & DbObjectType;\r\n\r\n\r\nexport type Zone = {\r\n sweepIDs?: string[] | null;\r\n layer?: Layer | null;\r\n parent?: Zone | null;\r\n virtual?: boolean | null;\r\n name: string;\r\n tags?: Array<string | null> | null;\r\n parentID?: string | null;\r\n spaceID?: string | null;\r\n space?: Space | null;\r\n isMuseumVisitZone?: boolean | null;\r\n nodeIDs?: Array<string | null> | null;\r\n surface?: number | null;\r\n metadata?: string | null;\r\n isMultipleFloorZone?: boolean | null;\r\n} & AWSType;\r\n\r\n\r\nexport type Layer = {\r\n name: string;\r\n} & AWSType;\r\n\r\nexport type Profile = {\r\n id?: string | null;\r\n userID: string;\r\n avatar?: string | null;\r\n token?: string | null;\r\n tokenExpiredAt?: number | null;\r\n status?: ProfileStatus | null;\r\n metadata?: string | null;\r\n lastConnectedAt?: number | null;\r\n pseudo?: string | null;\r\n} & AWSType;\r\n\r\nexport class ProfileEntity implements Profile {\r\n id?: string | null;\r\n\r\n userID: string;\r\n\r\n avatar?: string | null;\r\n\r\n token?: string | null;\r\n\r\n tokenExpiredAt?: number | null;\r\n\r\n status?: ProfileStatus | null;\r\n\r\n createdAt?: string;\r\n\r\n updatedAt?: string;\r\n\r\n firstName: string;\r\n\r\n lastName: string;\r\n\r\n email: string;\r\n\r\n phone: string;\r\n\r\n pseudo: string;\r\n\r\n constructor(init?: Partial<Profile>) {\r\n Object.assign(this, init);\r\n this.metadata = init.metadata;\r\n }\r\n\r\n get metadata(): string {\r\n return JSON.stringify({\r\n firstName: this.firstName,\r\n lastName: this.lastName,\r\n email: this.email,\r\n phone: this.phone,\r\n });\r\n }\r\n\r\n set metadata(m: string) {\r\n const d = JSON.parse(m);\r\n if (d) {\r\n this.firstName = d.firstName;\r\n this.lastName = d.lastName;\r\n this.email = d.email;\r\n this.phone = d.phone;\r\n }\r\n }\r\n\r\n get displayName(): string {\r\n if (this.pseudo) {\r\n return this.pseudo;\r\n }\r\n if (this.lastName.length > 0) {\r\n return `${this.firstName} ${this.lastName}`;\r\n }\r\n return this.email;\r\n }\r\n}\r\n\r\nexport type Organisation = {\r\n name: string;\r\n siret?: string | null;\r\n address?: string | null;\r\n city?: string | null;\r\n postal?: number | null;\r\n logoUrl?: string | null;\r\n originDate?: number | null;\r\n deletedAt?: number | null;\r\n shareToken?: string | null;\r\n tokenExpiresAt?: number | null;\r\n connectedAccountStripeID?: string | null;\r\n stripeOnBoardingCompleted?: boolean | null;\r\n stripeToken?: string | null;\r\n stripeChargesEnabled?: boolean | null;\r\n contactDetails?: string | null;\r\n ticketOrganisationsId?: string | null;\r\n // properties?: {\r\n // __typename?: \"ModelPropertyConnection\";\r\n // items?: Array<Property | null> | null;\r\n // nextToken?: string | null;\r\n // } | null;\r\n} & AWSType;\r\n\r\nexport type Property = {\r\n type: PropertyType;\r\n deletedAt?: number | null;\r\n organisationID: string;\r\n spaceID: string;\r\n zoneID?: string | null;\r\n space?: Space | null;\r\n organisation?: Organisation | null;\r\n // zone?: Zone | null;\r\n} & AWSType;\r\n\r\nexport type Space = {\r\n name: string;\r\n addresses?: string | null;\r\n annexes?: string | null;\r\n tags?: Array<string | null> | null;\r\n latitude?: number | null;\r\n longitude?: number | null;\r\n metadata?: string | null;\r\n level?: LevelStatus | null;\r\n deletedAt?: number | null;\r\n constructionYear?: string | null;\r\n classEnergyConsumption?: string | null;\r\n classGes?: string | null;\r\n status?: SpaceStatus | null;\r\n guestLink?: string | null;\r\n signedImageUrl?: string | null;\r\n zones?: {\r\n __typename?: \"ModelZoneConnection\";\r\n items?: Array<Zone | null> | null;\r\n nextToken?: string | null;\r\n };\r\n properties?: {\r\n __typename?: \"ModelPropertyConnection\";\r\n items?: Array<Property | null> | null;\r\n nextToken?: string | null;\r\n };\r\n visits?: Visit[] | null;\r\n organisationID?: string | null;\r\n organisation?: Organisation | null;\r\n description?: string | null;\r\n} & AWSType;\r\n\r\n// not in DB\r\nexport type Visit = {\r\n captureID: string;\r\n model3d: string;\r\n takenAt: number;\r\n spaceID: string;\r\n viewer: CaptureViewer;\r\n surface: number;\r\n node: Node;\r\n name?: string | null;\r\n imagesImported: boolean;\r\n};\r\n\r\n\r\nexport type Hashtag = {\r\n name?: string | null;\r\n organisationID?: string | null;\r\n spaceID?: string | null;\r\n organization?: Organisation | null;\r\n space?: Space | null;\r\n} & AWSType;\r\n\r\nexport type Capture = {\r\n // clientRef?: string | null;\r\n // originCoordinate?: string | null;\r\n // originAngle?: string | null;\r\n // originZoom?: string | null;\r\n takenAt?: number | null;\r\n viewer?: CaptureViewer | null;\r\n publishedAt?: number | null;\r\n surface?: number | null;\r\n metadata?: string | null;\r\n spaceID?: string | null;\r\n nodes?: {\r\n __typename?: \"ModelNodeConnection\";\r\n items?: Array<Node | null> | null;\r\n nextToken?: string | null;\r\n };\r\n} & AWSType;\r\n\r\nexport type Node = {\r\n model3D?: string | null;\r\n coordinate?: string | null;\r\n size?: string | null;\r\n scale?: string | null;\r\n version?: number | null;\r\n active?: number | null;\r\n order?: number | null;\r\n // quality?: NodeQuality | null;\r\n metadata?: string | null;\r\n captureID?: string | null;\r\n inventoryStatus?: InventoryStatus | null;\r\n navigationForInventory?: string | null;\r\n capture?: Capture | null;\r\n} & AWSType;\r\n\r\nexport type Plan = {\r\n name?: string | null;\r\n annexe?: string | null;\r\n calibration?: string | null;\r\n zoneID?: string | null;\r\n isCurrentForZone?: boolean | null;\r\n spaceID?: string | null;\r\n isModified?: boolean | null;\r\n isImportedMatterport?: boolean | null;\r\n filepath?: string;\r\n model3d?: string | null;\r\n floor?: string | null;\r\n visitName?: string | null;\r\n zone?: Zone | null;\r\n extension?: string | null;\r\n navigationIDs?: string[] | null;\r\n} & AWSType;\r\n\r\nexport type Navigation = {\r\n matterportSweepID?: string | null;\r\n position?: string | null;\r\n rotation?: string | null;\r\n radius?: number | null;\r\n url?: string | null;\r\n tags?: Array<string | null> | null;\r\n level?: LevelStatus | null;\r\n nodeID?: string | null;\r\n spaceID?: string | null;\r\n positionOnPlan?: Array<string | null> | null;\r\n navigationSiblingsId?: string | null;\r\n pois?: {\r\n __typename?: \"ModelPOIConnection\";\r\n items?: Array<POI | null> | null;\r\n nextToken?: string | null;\r\n };\r\n node?: Node | null;\r\n} & AWSType;\r\n\r\nexport type MenuItem = { label: string; url?: string; back?: any; };\r\n\r\n// not in db\r\nexport type Measurement = {\r\n id: string;\r\n poi: POI;\r\n comment: Comment;\r\n singedUrlPhoto?: string | null;\r\n values: Array<number> | null;\r\n numberPoints: number;\r\n};\r\n\r\nexport type Feature = {\r\n title?: string | null;\r\n shortDescription?: string | null;\r\n ownerMissionID?: string | null;\r\n level?: LevelStatus | null;\r\n index?: number | null;\r\n type?: FeatureType | null;\r\n archivedForMissionID?: Array<string | null> | null;\r\n stripeProductID?: string | null;\r\n stripePriceID?: string | null;\r\n bookingPriceMetadata?: string | null;\r\n locale?: Locale | null;\r\n hashtags?: Array<string | null> | null;\r\n coverImageUrl?: string | null;\r\n images?: Array<MediaContent> | null;\r\n videos?: Array<MediaContent> | null;\r\n audios?: Array<MediaContent> | null;\r\n externalLinks?: Array<MediaContent> | null;\r\n documents?: Array<{\r\n path: string;\r\n title: string;\r\n description: string;\r\n }> | null;\r\n comments?: {\r\n __typename?: \"ModelCommentConnection\";\r\n items?: Array<Comment | null> | null;\r\n nextToken?: string | null;\r\n };\r\n domain?: Domain | null;\r\n isBookingPlace?: boolean | null;\r\n events?: {\r\n __typename?: \"ModelEventConnection\";\r\n items?: Array<Event | null> | null;\r\n nextToken?: string | null;\r\n };\r\n spaceID: string;\r\n} & DbObjectType;\r\n\r\nexport type Event = {\r\n title: string;\r\n type?: EventType | null;\r\n estimateStartDate?: number | null;\r\n estimateDuration?: number | null;\r\n estimateEndDate?: number | null;\r\n realStartDate?: number | null;\r\n timeSpent?: number | null;\r\n realEndDate?: number | null;\r\n status?: EventStatus | null;\r\n description?: string | null;\r\n group?: string | null;\r\n metadata?: string | null;\r\n ownerID?: string | null;\r\n ticketID?: string | null;\r\n createdAt?: string | null;\r\n translationPath?: string | null;\r\n featureID?: string | null;\r\n archivedByOwner?: boolean | null;\r\n paymentStatus?: PaymentStatus | null;\r\n stripeSessionID?: string | null;\r\n notificationStatus?: EmailStatus | null;\r\n refusalReason?: string | null;\r\n agoStr?: boolean | string | null;\r\n owner?: Mission | null;\r\n author?: ProfileEntity | null;\r\n feature?: Feature | null;\r\n} & AWSType;\r\n\r\n//not in DB (variation of Event)\r\nexport type RequestIntervention = {\r\n estimateStartDate?: number | null;\r\n estimateDuration?: number | null;\r\n estimateEndDate?: number | null;\r\n realStartDate?: number | null;\r\n realDuration?: number | null;\r\n realEndDate?: number | null;\r\n type: EventType.REQUEST_FOR_INTERVENTION;\r\n status: EventStatus;\r\n intervention?: Event | null;\r\n report?: Event | null;\r\n ticketID: string;\r\n} & AWSType;\r\n\r\n//not in DB (variation of Event)\r\nexport type Intervention = {\r\n estimateStartDate?: number | null;\r\n estimateDuration?: number | null;\r\n estimateEndDate?: number | null;\r\n realStartDate?: number | null;\r\n realDuration?: number | null;\r\n realEndDate?: number | null;\r\n type: EventType;\r\n status: EventStatus;\r\n} & AWSType;\r\n\r\nexport type VisitTemplate = {\r\n id?: string | null;\r\n title?: string | null;\r\n level?: LevelStatus | null;\r\n description?: string | null;\r\n metadata?: string | null;\r\n deletedAt?: number | null;\r\n startDateTime?: string | null;\r\n endDateTime?: string | null;\r\n hashtags?: Array<string | null> | null;\r\n organisationID: string;\r\n spaceID?: string | null;\r\n zoneID?: string | null;\r\n locale?: Locale | null;\r\n realStartedAt?: number | null;\r\n realEndedAt?: number | null;\r\n space?: Space | null;\r\n zone?: Zone | null;\r\n organisation?: Organisation | null;\r\n userMissions?: {\r\n __typename: \"ModelMissionConnection\";\r\n items: Array<Mission | null>;\r\n nextToken?: string | null;\r\n } | null;\r\n} & AWSType;\r\n\r\nexport enum SpModule {\r\n MUSEUM = \"MUSEUM\",\r\n HOTEL = \"HOTEL\",\r\n IMMO = \"IMMO\"\r\n}","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { removeNullKeysFromObject } from \"../../helpers.service\";\r\nimport { POI, PoiType } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class PoiService {\r\n API: any; //AWS APIService\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getPoiByElementId(elementId: string): Promise<POI | null> {\r\n const pois = await this.API.__proto__.PoisByElement(elementId);\r\n if (pois && pois.items.length > 0) {\r\n return pois.items[0];\r\n }\r\n return null;\r\n }\r\n\r\n async getPoisByType(type: PoiType): Promise<[POI] | any> {\r\n return this.API.__proto__.PoisByType(type).then((pois) => pois.items);\r\n }\r\n\r\n async createPOIForSpaceID(\r\n poi: POI\r\n ): Promise<POI> {\r\n removeNullKeysFromObject(poi);\r\n return this.API.__proto__.CreatePOI(poi);\r\n }\r\n\r\n poiIsVirtual(poi: POI): boolean {\r\n const { coordinate } = poi;\r\n return !coordinate;\r\n }\r\n\r\n async updatePoi(poi: {}): Promise<POI> {\r\n return this.API.__proto__.UpdatePOI(poi);\r\n }\r\n\r\n async deletePoi(poiID: string): Promise<POI> {\r\n return this.API.__proto__.DeletePOI({ id: poiID });\r\n }\r\n\r\n async getPoisByMatterportSweepByType(\r\n sweep: string,\r\n type: PoiType,\r\n ): Promise<POI[]> {\r\n return this.API.__proto__.ListPOIs(\r\n { matterportSweepID: { eq: sweep } },\r\n 300,\r\n ).then((response) => response.items.filter((poi) => poi.type === type));\r\n }\r\n}\r\n","/* eslint-disable unicorn/filename-case */\r\n\r\nimport { Comment, DbObjectType, Equipment, Feature, POI, PoiType, Ticket } from \"./types.service\";\r\n\r\n\r\nexport class MattertagData {\r\n // private ticket: Ticket;\r\n\r\n // private equipment: Equipment;\r\n\r\n // private comment: Comment;\r\n\r\n // private feature: Feature;\r\n\r\n private object: DbObjectType;\r\n\r\n private type: PoiType = PoiType.TICKET;\r\n\r\n public elementID: string;\r\n\r\n private position: any = { x: 0, y: 0, z: 0 };\r\n\r\n private normal: any = { x: 0, y: 1, z: 0 };\r\n\r\n private mediaSrc: string;\r\n\r\n private sweepID: string;\r\n\r\n public customIconIndex = 0;\r\n\r\n private rotation: { x: number; y: number; };\r\n\r\n private poi: POI;\r\n\r\n constructor(type: PoiType) {\r\n this.setType(type);\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Setters\r\n ------------------------------------------------------------------------------*/\r\n\r\n setType(type: PoiType) {\r\n this.type = type;\r\n }\r\n\r\n // setTicket(ticket: Ticket) {\r\n // this.ticket = ticket;\r\n // this.setElementID(ticket.id);\r\n // this.setType(PoiType.TICKET);\r\n // }\r\n\r\n // setEquipment(equip: Equipment) {\r\n // this.equipment = equip;\r\n // this.setElementID(equip.id);\r\n // this.setType(PoiType.EQUIPMENT);\r\n // }\r\n\r\n // setComment(comment: Comment) {\r\n // this.comment = comment;\r\n // this.setElementID(comment.id);\r\n // this.setType(PoiType.MEASURE);\r\n // }\r\n\r\n // setFeature(feature: Feature) {\r\n // this.feature = feature;\r\n // this.setElementID(feature.id);\r\n // this.setType(PoiType.DATA);\r\n // }\r\n\r\n // setDesk(feature: Feature) {\r\n // this.feature = feature;\r\n // this.setElementID(feature.id);\r\n // this.setType(PoiType.DESK);\r\n // }\r\n\r\n setObject(object: DbObjectType, tagType: PoiType) {\r\n this.object = object;\r\n this.setElementID(object.id);\r\n this.setType(tagType);\r\n }\r\n\r\n setElementID(ticketID: any) {\r\n this.elementID = ticketID;\r\n }\r\n\r\n setPosition(position: any) {\r\n this.position = position;\r\n }\r\n\r\n setNormal(normal: any) {\r\n this.normal = normal;\r\n }\r\n\r\n setMediaSource(source: string) {\r\n this.mediaSrc = source;\r\n }\r\n\r\n setSweepID(sweepID: string) {\r\n this.sweepID = sweepID;\r\n }\r\n\r\n setRotation(rotation: { x: number; y: number; }) {\r\n this.rotation = rotation;\r\n }\r\n\r\n setPoi(poi: POI) {\r\n this.poi = poi;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Getters\r\n ------------------------------------------------------------------------------*/\r\n\r\n // MattertagData\r\n getData() {\r\n let label = \"New Tag\";\r\n switch (this.type) {\r\n case PoiType.TICKET:\r\n label = this.object ? this.object.title! : \"New Tag\";\r\n break;\r\n case PoiType.EQUIPMENT:\r\n label =this.object ? this.object.name! : \"New Tag\";\r\n break;\r\n case PoiType.MEASURE:\r\n label = this.object ? this.object.title! : \"New Tag\";\r\n break;\r\n case PoiType.DATA:\r\n label = \"\";\r\n break;\r\n case PoiType.ROOM:\r\n label = \"\";\r\n break;\r\n default:\r\n label = \"New Tag\";\r\n break;\r\n }\r\n const data = {\r\n label,\r\n description: \"\",\r\n anchorPosition: {\r\n x: this.position.x * 1,\r\n y: this.position.y * 1,\r\n z: this.position.z * 1,\r\n },\r\n stemVector: {\r\n x: this.normal.x * 0.3,\r\n y: this.normal.y * 0.3,\r\n z: this.normal.z * 0.3,\r\n },\r\n color: {\r\n // blue disc\r\n r: 0,\r\n g: 0,\r\n b: 1,\r\n },\r\n };\r\n return data;\r\n }\r\n\r\n getType() {\r\n return this.type;\r\n }\r\n\r\n getNormal() {\r\n return this.normal;\r\n }\r\n\r\n getMenuToOpen(): string {\r\n switch (this.type) {\r\n case PoiType.TICKET:\r\n return this.object ? \"positioning_ticket\" : \"add_ticket\";\r\n case PoiType.EQUIPMENT:\r\n return this.object ? \"positioning_equip\" : \"add_equip\";\r\n case PoiType.DATA:\r\n return this.object ? \"positioning_feature\" : \"add_feature\";\r\n case PoiType.DESK:\r\n return this.object ? \"positioning_feature\" : \"add_desk\";\r\n case PoiType.ROOM:\r\n return this.object ? \"positioning_room\" : \"add_room\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n getIcon() {\r\n switch (this.type) {\r\n case PoiType.TICKET:\r\n return \"icon_ticket.png\";\r\n case PoiType.EQUIPMENT:\r\n return \"icon_equipment.png\";\r\n }\r\n return \"\";\r\n }\r\n\r\n getCoordinateString() {\r\n return JSON.stringify({\r\n x: this.position.x,\r\n y: this.position.y,\r\n z: this.position.z,\r\n xRotation: this.rotation ? this.rotation.x : null,\r\n yRotation: this.rotation ? this.rotation.y : null,\r\n });\r\n }\r\n\r\n getMetadataString() {\r\n return JSON.stringify({\r\n icon: this.getIcon(),\r\n normal: this.getNormal(),\r\n });\r\n }\r\n\r\n getSweepID() {\r\n return this.sweepID;\r\n }\r\n\r\n getObject(): any {\r\n return this.object;\r\n }\r\n\r\n\r\n getRotation(): { x: number; y: number; } {\r\n return this.rotation;\r\n }\r\n\r\n getPoi(): POI {\r\n return this.poi;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseVisibilityService {\r\n detailShowing = new Subject<boolean>();\r\n\r\n constructor() { }\r\n}","\r\nexport class Config {\r\n my_config: {\r\n icon_ticket?: string;\r\n icon_equipment?: string;\r\n icon_measure?: string;\r\n icon_data?: string;\r\n icon_position: string;\r\n MAX_CHARACTER_DESCRIPTION_TAG: number;\r\n DEFAULT_HEIGHT_HTML_TAG: number;\r\n DEFAULT_OPACITY_TAG: number;\r\n COLD_LIMIT?: number;\r\n HOT_LIMIT?: number;\r\n DEFAULT_WIDTH_HTML_TAG: number;\r\n MAX_IMAGE_HEIGHT_HTML_TAG: number;\r\n icon_room_available?: string;\r\n icon_room_unavailable?: string;\r\n };\r\n\r\n constructor() { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Subject } from 'rxjs';\r\nimport { getDistanceBetweenTwoPoints, poiTypeToString, wait } from '../helpers.service';\r\nimport { MattertagData } from '../mattertagData';\r\nimport { DbObjectType, FeatureType, POI, PoiType, SpModule, TagAction, ViewerInteractions } from '../types.service';\r\nimport { BaseTagService } from './tag.service';\r\nimport { BaseVisibilityService } from './baseVisibility.service';\r\nimport { Config } from '../config';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MatterportService {\r\n public sdk: any;\r\n\r\n private container: any;\r\n\r\n // Position camera\r\n private poseMatterport: any;\r\n\r\n public poseCamera: { rotation: any; position: any; sweep: any; };\r\n\r\n // Pointer trick\r\n private pointerButton: any;\r\n\r\n private oldPoseMatterportPosition: any;\r\n\r\n // Measure mode\r\n private isMeasureModeOn = false;\r\n\r\n // Timers\r\n private lastActionTime = -1;\r\n\r\n private interactionMode: number = ViewerInteractions.DEFAULT;\r\n\r\n private mattertags: Array<string> = [];\r\n\r\n private dictionnaryTags: Map<string, { mattertagData: MattertagData; elementID: string; }> = new Map;\r\n\r\n private lastMeasure = [];\r\n\r\n private distancesLastMeasure: number[] = [];\r\n\r\n private resolution = {\r\n width: 500,\r\n height: 600,\r\n };\r\n\r\n private visibility = {\r\n mattertags: false,\r\n sweeps: true,\r\n };\r\n\r\n private lastScreenshotUri: any;\r\n\r\n public sweeps: Array<string> | null;\r\n\r\n public currentSweep: Subject<string> = new Subject();\r\n\r\n //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 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 tagMessengerOn = false;\r\n\r\n SPModule: SpModule;\r\n\r\n pointerLeftClickHandler = () => {\r\n this.addMattertag();\r\n this.updatePositionInTagData();\r\n };\r\n\r\n pointerRightClickHandler = (e) => {\r\n console.log(\"cancel on right click\");\r\n e.preventDefault();\r\n this.action_canceled();\r\n alert(\"action cancelled\");\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 ) {\r\n this.config = config;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Utils async\r\n ------------------------------------------------------------------------------*/\r\n\r\n async initSdk(tagService: BaseTagService, module: SpModule = SpModule.IMMO): Promise<boolean> {\r\n if (this.sdk) {\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(\r\n \"#viewer-module\",\r\n ) as HTMLElement;\r\n const iframe = document.querySelector(\r\n \"#viewer-module\",\r\n ) as HTMLIFrameElement;\r\n if (!iframe) {\r\n return;\r\n }\r\n\r\n // Add listeners\r\n if (this.pointerButton) {\r\n this.pointerButton.addEventListener(\r\n \"click\",\r\n 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\r\n // Load SDK\r\n console.log(\"Loading Matterport SDK\");\r\n // @ts-ignore\r\n window.MP_SDK.connect(\r\n iframe,\r\n \"qn9wsasuy5h2fzrbrn1nzr0id\",\r\n \"3.11\",\r\n ).then(async (sdk: any) => {\r\n // Instanciate sdk\r\n this.sdk = sdk;\r\n switch (module) {\r\n case SpModule.IMMO:\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-ticket\",\r\n this.config.my_config.icon_ticket,\r\n );\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-equipment\",\r\n this.config.my_config.icon_equipment,\r\n );\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-measure\",\r\n this.config.my_config.icon_measure,\r\n );\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-data\",\r\n this.config.my_config.icon_data,\r\n );\r\n\r\n this.sdk.Measurements.data.subscribe({\r\n onAdded: function (index: any, item: { points: any; }, collection: any) {\r\n // console.log(\r\n // \"item added to the collection\",\r\n // index,\r\n // item,\r\n // );\r\n // this.measurements[index] = item;\r\n this.lastMeasure = item.points;\r\n }.bind(this),\r\n onCollectionUpdated: function (collection: any) {\r\n // console.log('the entire up-to-date collection', collection);\r\n this.getDistanceForLastMeasurement();\r\n }.bind(this),\r\n });\r\n this.sdk.Measurements.mode.subscribe(\r\n function (measurementModeState: { active: any; }) {\r\n // measurement mode state has changed\r\n this.isMeasureModeOn = measurementModeState.active;\r\n // console.log('Is measurement mode currently active? ', measurementModeState.active);\r\n }.bind(this),\r\n );\r\n break;\r\n case SpModule.MUSEUM:\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon-data\",\r\n this.config.my_config.icon_data,\r\n );\r\n break;\r\n case SpModule.HOTEL:\r\n // @TODO: hm...\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon_room_available\",\r\n this.config.my_config.icon_room_available,\r\n );\r\n this.sdk.Mattertag.registerIcon(\r\n \"icon_room_unavailable\",\r\n this.config.my_config.icon_room_unavailable,\r\n );\r\n break;\r\n default:\r\n break;\r\n }\r\n // Load Mattertag icons\r\n this.sdk.Mattertag.registerIcon(\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\r\n if (!this.oldPoseMatterportPosition) {\r\n this.oldPoseMatterportPosition = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n };\r\n }\r\n\r\n if (\r\n this.interactionMode !==\r\n ViewerInteractions.DEFAULT &&\r\n this.mattertagToFollow\r\n ) {\r\n // follow the pointer and changes the position of the last tag\r\n // (we are about to validate, but it exists in sdk already)\r\n this.enable_following_tag(this.mattertagToFollow);\r\n }\r\n }.bind(this),\r\n );\r\n\r\n // 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(collection);\r\n this.sweeps = Object.keys(collection);\r\n }.bind(this),\r\n });\r\n\r\n // subscribe to current sweep\r\n this.sdk.Sweep.current.subscribe(\r\n function subscr(currentSweep: { sid: string; }) {\r\n // Change to the current sweep has occurred.\r\n if (currentSweep.sid === \"\") {\r\n // console.log('Not currently stationed at a sweep position');\r\n } else {\r\n // console.log(\"emmiting sweep\", currentSweep.sid);\r\n this.currentSweep.next(currentSweep.sid);\r\n }\r\n }.bind(this),\r\n );\r\n\r\n // Subscribe to Floor data\r\n this.sdk.Floor.data.subscribe({\r\n onCollectionUpdated: function upd(this: any, collection: any) {\r\n this.floors = Object.values(collection);\r\n }.bind(this),\r\n });\r\n\r\n // on tag click open details page\r\n this.sdk.on(\"tag.click\", (sid: string) => {\r\n // get object of this tag\r\n try {\r\n const mattertagData = this.dictionnaryTags.get(sid)?.mattertagData!;\r\n const url = tagService.getUrlForSeeDetails(\r\n mattertagData.getObject(),\r\n mattertagData.getType(),\r\n );\r\n if (url !== \"\") {\r\n this.visibilityService.detailShowing.next(true);\r\n this.router.navigate([url]);\r\n }\r\n } catch {\r\n console.log(\"Cannot show details for tag\");\r\n }\r\n });\r\n\r\n // Pointer trick\r\n // Create a div that will appear when the cursor is still\r\n // It will intercept the click of the mouse before it trigerring the Matterport's tour navigation\r\n this.timerPointer = setInterval(\r\n this.updatePointerTrick.bind(this),\r\n 50,\r\n );\r\n\r\n\r\n /**\r\n * Transitions\r\n */\r\n this.sdk.on(\"viewmode.changestart\", function (to, from) {\r\n // console.log('Starting to move to ' + to + ' from ' + from);\r\n this.inTransitionMode = true;\r\n }.bind(this));\r\n\r\n this.sdk.on(\"viewmode.changeend\", function (oldMode, newMode) {\r\n // console.log('Ended to move to ' + newMode + ' from ' + oldMode);\r\n if (newMode !== \"mode.transitioning\") {\r\n this.inTransitionMode = false;\r\n }\r\n }.bind(this));\r\n\r\n this.sdk.on(sdk.Sweep.Event.ENTER,\r\n function (oldSweep, newSweep) {\r\n // console.log('Leaving sweep ' + oldSweep);\r\n // console.log('Entering sweep ' + newSweep);\r\n this.inTransitionSweep = false;\r\n }.bind(this)\r\n );\r\n this.sdk.on(sdk.Sweep.Event.EXIT,\r\n function (fromSweep, toSweep) {\r\n // console.log('Leaving sweep ' + fromSweep);\r\n // console.log('Transitioning to sweep ' + toSweep);\r\n this.inTransitionSweep = true;\r\n }.bind(this)\r\n );\r\n resolve(true);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Add Mattertag to the dictionnary of the current tags\r\n * @param mattertagID\r\n * @param mattertagData\r\n * @param tagType\r\n * @param ticketID\r\n */\r\n addMattertagToObject(mattertagID: string, mattertagData: MattertagData) {\r\n if (this.sdk) {\r\n this.mattertags.push(mattertagID);\r\n this.dictionnaryTags.set(mattertagID, {\r\n mattertagData,\r\n elementID: mattertagData.elementID,\r\n });\r\n this.editTagStyle(mattertagID, mattertagData);\r\n }\r\n }\r\n\r\n getDistanceForLastMeasurement() {\r\n if (this.lastMeasure.length > 0) {\r\n const numberPoints = this.lastMeasure.length;\r\n this.distancesLastMeasure = [];\r\n for (let index = 1; index < numberPoints; index += 1) {\r\n const distance = getDistanceBetweenTwoPoints(\r\n this.lastMeasure[index - 1],\r\n this.lastMeasure[index],\r\n );\r\n this.distancesLastMeasure.push(distance);\r\n }\r\n this.takeScreenShot().then((res) => {\r\n this.goToMenu(`visit/${this.currentSpaceID}/add_measurement`);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Init the Mattertag that will follow the cursor\r\n * @param tagType\r\n */\r\n async add_cursor_mattertag(\r\n tagType: PoiType,\r\n element?: any,\r\n positioning: boolean = false,\r\n ) {\r\n if (!this.poseMatterport) return;\r\n const mattertagData = new MattertagData(tagType);\r\n if (positioning) {\r\n // set the coordinates of the existing tag\r\n const [poi] = element.pois.items;\r\n if (poi && poi.coordinate) {\r\n mattertagData.setPosition(JSON.parse(poi.coordinate));\r\n mattertagData.setPoi(poi); // to keep custom tagIon and opacity\r\n }\r\n }\r\n mattertagData.setSweepID(this.poseCamera.sweep);\r\n mattertagData.setRotation(this.poseCamera.rotation);\r\n if (element) {\r\n mattertagData.setObject(element, tagType);\r\n }\r\n this.mattertagToFollow = await this.add_mattertag_to_viewer(\r\n mattertagData,\r\n );\r\n if (positioning) {\r\n this.sdk.Mattertag.editIcon(\r\n this.mattertagToFollow,\r\n \"icon-position\",\r\n );\r\n this.sdk.Mattertag.editOpacity(this.mattertagToFollow, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Add Mattertag from its data\r\n * @param tagID\r\n * @param tagType\r\n * @param mattertagData\r\n */\r\n async add_mattertag_to_viewer(\r\n mattertagData: MattertagData,\r\n ): Promise<string | null> {\r\n let sidList;\r\n if (!this.sdk) {\r\n return null;\r\n }\r\n try {\r\n sidList = await this.sdk.Mattertag.add(mattertagData.getData());\r\n } catch (error) {\r\n console.log(\r\n \"Tag does not belong to the visit\",\r\n error,\r\n mattertagData.getData(),\r\n );\r\n }\r\n if (sidList) {\r\n const mattertagID = sidList[0];\r\n // console.log(\"added tag\", mattertagData.getType(), mattertagID);\r\n this.addMattertagToObject(mattertagID, mattertagData);\r\n return mattertagID;\r\n }\r\n return null;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Utils - Mattertag\r\n ------------------------------------------------------------------------------*/\r\n\r\n addMattertag() {\r\n this.setInteractionMode(ViewerInteractions.DEFAULT);\r\n this.action_open_menu(this.getMenuToOpenForLastTag());\r\n this.resetActionTime();\r\n }\r\n\r\n updatePointerTrick() {\r\n if (\r\n this.interactionMode !== ViewerInteractions.DEFAULT &&\r\n this.mattertagToFollow &&\r\n this.poseMatterport &&\r\n this.getDistPosition(\r\n this.poseMatterport.position,\r\n this.oldPoseMatterportPosition,\r\n ) > 25\r\n ) {\r\n this.pointerButton.style.display = \"none\";\r\n\r\n const size = {\r\n w: this.container.clientWidth,\r\n h: this.container.clientHeight,\r\n };\r\n const coords = this.sdk.Conversion.worldToScreen(\r\n this.poseMatterport.position,\r\n this.poseCamera,\r\n size,\r\n );\r\n this.pointerButton.style.left = `${coords.x * Math.sign(coords.x) - 25\r\n }px`;\r\n this.pointerButton.style.top = `${coords.y * Math.sign(coords.x) - 25\r\n }px`;\r\n this.oldPoseMatterportPosition = {\r\n ...this.poseMatterport.position,\r\n };\r\n } else {\r\n this.pointerButton.style.display = \"block\";\r\n }\r\n }\r\n\r\n async editTagStyle(mattertagID: string, mattertagData: MattertagData) {\r\n 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.Mattertag.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 // TODO for indicators\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(\r\n feature,\r\n poi,\r\n );\r\n poi.tagIcon = tagIcon;\r\n }\r\n }\r\n if (tagIcon.src) {\r\n const pathSigned = await this.tagService.getSignedTagIconSource(tagIcon.src);\r\n if (pathSigned) {\r\n try {\r\n iconName = `icon-${stringTagType}-${mattertagID}-${mattertagData.customIconIndex}`;\r\n await this.sdk.Mattertag.registerIcon(\r\n iconName,\r\n pathSigned,\r\n );\r\n mattertagData.customIconIndex += 1;\r\n } catch {\r\n console.log(\"error registerIcon\");\r\n }\r\n }\r\n }\r\n if (tagIcon.opacity) {\r\n opacity = tagIcon.opacity;\r\n }\r\n }\r\n try {\r\n this.sdk.Mattertag.editIcon(mattertagID, iconName);\r\n this.sdk.Mattertag.editOpacity(mattertagID, opacity);\r\n } catch (error) {\r\n console.log(\"Error editIcon or opacity\", error);\r\n }\r\n }\r\n\r\n\r\n enable_following_tag(mattertag: any) {\r\n this.sdk.Mattertag.editPosition(mattertag, {\r\n anchorPosition: {\r\n x: this.poseMatterport.position.x * 1,\r\n y: this.poseMatterport.position.y * 1,\r\n z: this.poseMatterport.position.z * 1,\r\n },\r\n stemVector: {\r\n x: this.poseMatterport.normal.x * 0.3,\r\n y: this.poseMatterport.normal.y * 0.3,\r\n z: this.poseMatterport.normal.z * 0.3,\r\n },\r\n });\r\n }\r\n\r\n resetActionTime() {\r\n this.lastActionTime = -1;\r\n }\r\n\r\n goToLastTag() {\r\n setTimeout(() => {\r\n const lastTag = this.getLastTag();\r\n this.goToTag(lastTag);\r\n }, 2000);\r\n }\r\n\r\n async goToTag(mattertagID: string) {\r\n if (mattertagID === \"\") return;\r\n try {\r\n await this.sdk.Mattertag.navigateToTag(\r\n mattertagID,\r\n this.sdk.Mattertag.Transition.FLY,\r\n );\r\n } catch (error) {\r\n console.log(\"cannot navigate to tag\", error);\r\n }\r\n }\r\n\r\n goToMenu(menuUrl: any) {\r\n this.router.navigate([menuUrl]);\r\n }\r\n\r\n /**\r\n * Get the distance betwween two 3D positions\r\n * Used in order to see how much the cursor has moved from the previous position\r\n * @param pos1\r\n * @param pos2\r\n */\r\n getDistPosition(pos1: any, pos2: any) {\r\n const size = {\r\n w: this.container.clientWidth,\r\n h: this.container.clientHeight,\r\n };\r\n const coords1 = this.sdk.Conversion.worldToScreen(\r\n pos1,\r\n this.poseCamera,\r\n size,\r\n );\r\n const coords2 = this.sdk.Conversion.worldToScreen(\r\n pos2,\r\n this.poseCamera,\r\n size,\r\n );\r\n return Math.sqrt(\r\n (coords1.x - coords2.x) ** 2 + (coords1.y - coords2.y) ** 2,\r\n );\r\n }\r\n\r\n updatePositionInTagData() {\r\n const lastTag = this.getLastTag();\r\n if (lastTag) {\r\n this.dictionnaryTags.get(lastTag)!.mattertagData.setPosition(\r\n this.poseMatterport.position,\r\n );\r\n this.dictionnaryTags.get(lastTag)!.mattertagData.setNormal(\r\n this.poseMatterport.normal,\r\n );\r\n this.updateMatterTagFromId(lastTag);\r\n }\r\n }\r\n\r\n async updateMatterTagFromId(\r\n mattertagID: string,\r\n object: any = null,\r\n tagType: PoiType | null = null,\r\n ) {\r\n this.sdk.Mattertag.editBillboard(\r\n mattertagID,\r\n this.dictionnaryTags.get(mattertagID)!.mattertagData.getData(),\r\n );\r\n if (object && tagType) {\r\n this.injectHtmlInTag(tagType, object, mattertagID);\r\n }\r\n this.editTagStyle(\r\n mattertagID,\r\n this.dictionnaryTags.get(mattertagID)!.mattertagData,\r\n );\r\n }\r\n\r\n deleteMattertagFromId(mattertagID: string) {\r\n this.sdk.Mattertag.remove(mattertagID);\r\n this.dictionnaryTags.delete(mattertagID);\r\n }\r\n\r\n deleteLastMattertag() {\r\n const mattertagID = this.mattertags.pop();\r\n if (mattertagID) {\r\n this.deleteMattertagFromId(mattertagID);\r\n }\r\n\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Utils - Toolbar\r\n ------------------------------------------------------------------------------*/\r\n\r\n action_toolbox_floorplan() {\r\n this.sdk.Mode.moveTo(\"mode.floorplan\");\r\n }\r\n\r\n action_toolbox_inside_view() {\r\n this.sdk.Mode.moveTo(\"mode.inside\");\r\n }\r\n\r\n async action_toolbox_dollhouse() {\r\n setTimeout(async () => {\r\n console.log(\"mode: \", this.inTransitionMode, \" sweep: \", this.inTransitionSweep);\r\n if (this.inTransitionMode || this.inTransitionSweep) {\r\n console.log(\"viewer is in transition, cannot go dollhouse\");\r\n return;\r\n }\r\n try {\r\n await this.sdk.Mode.moveTo(\"mode.dollhouse\");\r\n } catch (e) {\r\n console.log(\"cannot go to dollhouse\", e);\r\n }\r\n }, 1200);\r\n }\r\n\r\n action_toolbox_mesure() {\r\n const newState = !this.isMeasureModeOn;\r\n this.sdk.Measurements.toggleMode(newState).then(() => {\r\n console.log(\r\n `Measurement mode is now ${newState ? \"enabled\" : \"disabled\"}`,\r\n );\r\n });\r\n }\r\n\r\n action_toolbox_cancel_mesure() {\r\n if (this.isMeasureModeOn) {\r\n this.action_toolbox_mesure();\r\n }\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Actions\r\n ------------------------------------------------------------------------------*/\r\n\r\n async action_add_mattertag_from_POI(\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 createdTag = await this.add_mattertag_to_viewer(mattertagData);\r\n if (createdTag && this.sdk) {\r\n await this.injectHtmlInTag(tagType, object, createdTag);\r\n }\r\n }\r\n\r\n async injectHtmlInTag(\r\n tagType: PoiType,\r\n object: DbObjectType,\r\n tagID: string,\r\n ) {\r\n let { html, height } = await this.tagService.getHtmlToInject(\r\n tagType,\r\n object,\r\n this.config.my_config.DEFAULT_HEIGHT_HTML_TAG\r\n );\r\n if (html !== \"\" && this.sdk) {\r\n const scriptTag = this.tagService.getScriptForTag(object, tagType);\r\n html += `${scriptTag}`;\r\n this.sdk.Mattertag.injectHTML(tagID, html, {\r\n size: {\r\n w: this.config.my_config.DEFAULT_WIDTH_HTML_TAG,\r\n h: height,\r\n },\r\n })\r\n .then((messenger) => {\r\n if (this.tagMessengerOn) {\r\n return;\r\n }\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.onActionAudioClick(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(\r\n TagAction.AUDIO_CLICK, audioClick\r\n );\r\n messenger.on(\r\n TagAction.IMAGE_CLICK, imageClick\r\n );\r\n messenger.on(\r\n TagAction.VIDEO_CLICK, videoClick\r\n );\r\n messenger.on(\r\n TagAction.DOC_CLICK,\r\n this.tagService.onActionDocClick.bind(this.tagService)\r\n );\r\n messenger.on(\r\n TagAction.YOUTUBE_CLICK,\r\n this.tagService.onActionYoutubeClick.bind(this.tagService)\r\n );\r\n })\r\n .catch((error: any) =>\r\n console.log(\"Cannot inject html for tag\", tagID, error),\r\n );\r\n }\r\n }\r\n\r\n async action_delete_all_mattertags() {\r\n // await Promise.all(\r\n this.mattertags.map(async (tag) => {\r\n await this.sdk.Mattertag.remove(tag);\r\n });\r\n // );\r\n this.mattertags = [];\r\n this.dictionnaryTags.clear();\r\n }\r\n\r\n async action_delete_element(\r\n element: DbObjectType,\r\n ) {\r\n const sidTag = this.getTagFromElementId(element.id!).tag;\r\n if (sidTag) {\r\n let resp;\r\n try {\r\n resp = await this.sdk.Mattertag.remove(sidTag);\r\n } catch (error) {\r\n console.log(\"Cannot delete tag\", sidTag, error);\r\n }\r\n if (resp) {\r\n this.dictionnaryTags.delete(sidTag);\r\n const index = this.mattertags.indexOf(sidTag);\r\n this.mattertags.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n async action_position_element(\r\n poiType: PoiType,\r\n element: DbObjectType,\r\n ) {\r\n await this.add_cursor_mattertag(poiType, element, true);\r\n this.setInteractionMode(ViewerInteractions.POSITIONING);\r\n }\r\n\r\n async addElementAsMattertag(poiType: PoiType) {\r\n await this.add_cursor_mattertag(poiType);\r\n switch (poiType) {\r\n case PoiType.DATA:\r\n this.setInteractionMode(ViewerInteractions.ADDING_FEATURE);\r\n break;\r\n case PoiType.DESK:\r\n this.setInteractionMode(ViewerInteractions.ADDING_FEATURE);\r\n break;\r\n case PoiType.TICKET:\r\n this.setInteractionMode(ViewerInteractions.ADDING_TICKET);\r\n break;\r\n case PoiType.EQUIPMENT:\r\n this.setInteractionMode(ViewerInteractions.ADDING_EQUIPMENT);\r\n break;\r\n case PoiType.MEASURE:\r\n this.setInteractionMode(ViewerInteractions.ADDING_MEASURE);\r\n break;\r\n case PoiType.ROOM:\r\n this.setInteractionMode(ViewerInteractions.ADDING_ROOM);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n }\r\n\r\n action_completed() {\r\n return (\r\n Date.now() - this.lastActionTime > 2000 &&\r\n this.lastActionTime !== -1\r\n );\r\n }\r\n\r\n action_canceled() {\r\n this.setInteractionMode(ViewerInteractions.DEFAULT);\r\n this.deleteLastMattertag();\r\n }\r\n\r\n action_open_menu(menu: string) {\r\n this.visibilityService.detailShowing.next(true);\r\n const lastTag = this.getLastTag();\r\n switch (menu) {\r\n case \"add_equip\":\r\n this.goToLastTag();\r\n this.goToMenu(`visit/${this.currentSpaceID}/add_equip`);\r\n break;\r\n case \"add_ticket\":\r\n this.goToLastTag();\r\n this.goToMenu(`visit/${this.currentSpaceID}/add_ticket`);\r\n break;\r\n case \"add_feature\":\r\n this.goToLastTag();\r\n let url: string;\r\n if (this.router.url.includes(\"?\")) {\r\n url = this.router.url.substring(0, this.router.url.indexOf(\"?\"));\r\n } else {\r\n url = this.router.url;\r\n }\r\n console.log(url);\r\n this.goToMenu(`${url}/add_feature`);\r\n break;\r\n case \"add_desk\":\r\n this.goToLastTag();\r\n this.router.navigate(\r\n [`visit/${this.currentSpaceID}/add_feature`],\r\n { queryParams: { isDesk: true } },\r\n );\r\n break;\r\n\r\n case \"add_room\":\r\n this.goToLastTag();\r\n this.router.navigate(\r\n [`visit/${this.currentSpaceID}/add_room`]\r\n );\r\n break;\r\n case \"positioning_ticket\":\r\n console.log(\"positioning_ticket\");\r\n if (lastTag) {\r\n this.router.navigate(\r\n [\r\n `visit/${this.currentSpaceID}/detail/${this.dictionnaryTags.get(lastTag).elementID}`,\r\n ],\r\n { queryParams: { positioning: true } },\r\n );\r\n }\r\n break;\r\n case \"positioning_equip\":\r\n if (lastTag) {\r\n this.router.navigate(\r\n [\r\n `visit/${this.currentSpaceID}/equip/${this.dictionnaryTags.get(lastTag).elementID}`,\r\n ],\r\n { queryParams: { positioning: true } },\r\n );\r\n }\r\n break;\r\n case \"positioning_feature\":\r\n if (lastTag) {\r\n this.router.navigate([`${this.router.url}`], {\r\n queryParams: { positioning: true },\r\n });\r\n }\r\n break;\r\n case \"positioning_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 async action_go_to_floor(floorName: string, matterportFloorSequence: number = null) {\r\n if (!this.floors) {\r\n console.log(\"Floor are not loaded yet\");\r\n return;\r\n }\r\n // console.log(this.floors);\r\n // look up for sequence number (the safest method)\r\n let floorMatterport = this.floors.find(\r\n (floor) => floor.sequence === matterportFloorSequence,\r\n );\r\n if (!floorMatterport) {\r\n floorMatterport = this.floors.find(\r\n (floor) => floorName.includes(floor.name) && floor.name != \"\",\r\n );\r\n }\r\n if (!floorMatterport) {\r\n floorMatterport = this.floors.find((floor) =>\r\n floorName.includes(floor.id),\r\n );\r\n }\r\n // console.log(floorMatterport)\r\n if (floorMatterport) {\r\n let retry = true;\r\n while (retry) {\r\n try {\r\n const floorIndex = await this.sdk.Floor.moveTo(floorMatterport.sequence);\r\n // console.log(\"moved to floorIndex\", floorIndex);\r\n retry = false;\r\n } catch (error) {\r\n console.log(\"Cannot move to Floor\", error);\r\n await wait(100);\r\n }\r\n }\r\n } else {\r\n console.warn(\"No matterport floor found to move to\");\r\n }\r\n }\r\n\r\n async action_go_to_sweep(\r\n sweep: string,\r\n rotation: { x: number; y: number; } = null,\r\n ) {\r\n if (this.forbiddenSweeps.includes(sweep)) {\r\n console.log(\"user is not allowed to go to this sweep\");\r\n return;\r\n }\r\n // console.log(\"going to sweep\", sweep, \"with rotation:\", rotation);\r\n setTimeout(async () => {\r\n if (this.inTransitionMode || this.inTransitionSweep) {\r\n console.log(\"Cannot go to sweep, in transition\");\r\n return;\r\n }\r\n try {\r\n this.inTransitionSweep = true;\r\n await this.sdk.Sweep.moveTo(sweep, {\r\n transition: \"transition.fly\",\r\n transitionTime: 1500,\r\n });\r\n } catch (error) {\r\n this.inTransitionSweep = false;\r\n console.log(\"Cannot move to sweep\", error);\r\n }\r\n if (rotation) {\r\n await this.sdk.Camera.setRotation(rotation, { speed: 100 }); // speed is degrees per second\r\n }\r\n }, 1000);\r\n }\r\n\r\n getCurrentSweep(): string | null {\r\n if (this.poseCamera) {\r\n return this.poseCamera.sweep;\r\n }\r\n return null;\r\n }\r\n\r\n getCurrentCameraPosition(): {\r\n rotation: any;\r\n position: any;\r\n sweep: any;\r\n } | null {\r\n if (this.poseCamera) {\r\n return this.poseCamera;\r\n }\r\n return null;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Setters\r\n ------------------------------------------------------------------------------*/\r\n\r\n setInteractionMode(interactionMode: number) {\r\n this.interactionMode = interactionMode;\r\n }\r\n\r\n setObjectAndPoiInTag(mattertagID: string, object: DbObjectType, poiType: PoiType, poi: POI | null = null) {\r\n this.dictionnaryTags.get(mattertagID).mattertagData.setObject(object, poiType);\r\n if (poi) {\r\n this.dictionnaryTags.get(mattertagID).mattertagData.setPoi(poi);\r\n }\r\n this.dictionnaryTags.get(mattertagID).elementID = object.id;\r\n this.updateMatterTagFromId(mattertagID, object, poiType);\r\n }\r\n\r\n /*-----------------------------------------------------------------------------\r\n Getters\r\n ------------------------------------------------------------------------------*/\r\n\r\n getInteractionMode() {\r\n return this.interactionMode;\r\n }\r\n\r\n public getTagFromElementId(elementID: string): {\r\n tag: string | null;\r\n sweep: string | null;\r\n } {\r\n for (let index = 0; index < this.mattertags.length; index += 1) {\r\n if (\r\n this.dictionnaryTags.get(this.mattertags[index]).elementID ===\r\n elementID\r\n ) {\r\n const { mattertagData } =\r\n this.dictionnaryTags.get(this.mattertags[index]);\r\n const sweep = mattertagData.getSweepID();\r\n if (!sweep) {\r\n return { tag: this.mattertags[index], sweep: null };\r\n }\r\n if (this.sweeps && this.sweeps.includes(sweep)) {\r\n return { tag: this.mattertags[index], sweep };\r\n }\r\n return { tag: null, sweep };\r\n }\r\n }\r\n return { tag: null, sweep: null };\r\n }\r\n\r\n getTags() {\r\n return this.mattertags;\r\n }\r\n\r\n getLastTag(): string | null {\r\n if (this.mattertagToFollow) {\r\n return this.mattertagToFollow;\r\n } else {\r\n return this.mattertags.length === 0\r\n ? null\r\n : this.mattertags[this.mattertags.length - 1];\r\n }\r\n }\r\n\r\n getMenuToOpenForLastTag() {\r\n const lastTag = this.getLastTag();\r\n if (lastTag) {\r\n return this.dictionnaryTags.get(lastTag).mattertagData.getMenuToOpen();\r\n }\r\n return null;\r\n }\r\n\r\n getTagDataFromId(mattertagID: string): MattertagData | null {\r\n try {\r\n return this.dictionnaryTags.get(mattertagID)!.mattertagData;\r\n } catch {\r\n console.log(\"cannot retrieve mattertagData for tag\", mattertagID);\r\n }\r\n return null;\r\n }\r\n\r\n getLastDistances() {\r\n return this.distancesLastMeasure;\r\n }\r\n\r\n takeScreenShot(): Promise<any> {\r\n return this.sdk.Renderer.takeScreenShot(\r\n this.resolution,\r\n this.visibility,\r\n ).then(\r\n function (screenShotUri: any) {\r\n // base64 string\r\n this.lastScreenshotUri = screenShotUri;\r\n return Promise.resolve();\r\n }.bind(this),\r\n );\r\n }\r\n\r\n getScreenShotUri() {\r\n return this.lastScreenshotUri;\r\n }\r\n\r\n getLastMeasurement(): Object {\r\n const data = {\r\n measure: this.lastMeasure,\r\n sweep: this.poseCamera.sweep,\r\n };\r\n return data;\r\n }\r\n\r\n async clearAll() {\r\n console.log(\"removing viewer\");\r\n this.action_delete_all_mattertags();\r\n this.floors = null;\r\n this.sweeps = null;\r\n this.sdk = null;\r\n clearInterval(this.timerPointer);\r\n this.forbiddenSweeps = [];\r\n this.tagMessengerOn = false;\r\n // cancel subscriptions\r\n this.pointerButton.removeEventListener(\"click\", this.pointerLeftClickHandler);\r\n this.pointerButton.removeEventListener(\"contextmenu\", this.pointerRightClickHandler);\r\n }\r\n\r\n async removeForbiddenSweeps(forbiddenSweeps: string[]) {\r\n this.forbiddenSweeps = [...forbiddenSweeps];\r\n let removed = 0;\r\n await Promise.all(\r\n forbiddenSweeps.map(async (sweep) => {\r\n try {\r\n await this.sdk.Sweep.disable(sweep);\r\n removed += 1;\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }),\r\n );\r\n console.log(\"removed sweeps:\", removed);\r\n }\r\n}\r\n","/* eslint-disable no-await-in-loop */\r\n/* eslint-disable camelcase */\r\n/* eslint-disable no-underscore-dangle */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { MatterportService } from \"./matterport.service\";\r\nimport { BaseTagService } from \"./tag.service\";\r\nimport { DbObjectType, POI, ViewerInteractions, PoiType, Comment, Equipment, Ticket, Feature, SpModule } from \"../types.service\";\r\nimport { PoiService } from \"./models/poi.service\";\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ViewerService {\r\n private viewerMode: string = \"Matterport\";\r\n\r\n public currentModel3D: string;\r\n\r\n private tourUrl: string;\r\n\r\n public viewerIsOn: Subject<{\r\n spaceID: string | null;\r\n model3D: string | null;\r\n sweep: string | null;\r\n rotation: { x: number; y: number; } | null;\r\n }> = new Subject();\r\n\r\n public dataIsLoaded: Subject<boolean> = new Subject();\r\n\r\n public isLoaded = false;\r\n\r\n public showingViewer = false;\r\n\r\n public sweepToMove: string | null;\r\n\r\n public rotationToMove: { x: number; y: number; } | null;\r\n\r\n public toolboxStates = {\r\n dollhouse: {\r\n stat: false,\r\n iconId: \"ui-dollhouse\",\r\n show() { },\r\n hide() { },\r\n },\r\n floorplan: {\r\n stat: false,\r\n },\r\n mesure: {\r\n stat: false,\r\n iconId: \"ui-mesure\",\r\n show() { },\r\n hide() { },\r\n },\r\n filter: {\r\n stat: false,\r\n },\r\n };\r\n\r\n constructor(\r\n private poiService: PoiService,\r\n private matterportService: MatterportService,\r\n ) {\r\n this.setMode(\"Matterport\");\r\n }\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Utils\r\n -----------------------------------------------------------------------------------------------------------------*/\r\n\r\n checkMode(indexMode: string) {\r\n return this.viewerMode === indexMode;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Setters\r\n -----------------------------------------------------------------------------------------------------------------*/\r\n\r\n setMode(indexMode: string) {\r\n this.viewerMode = indexMode;\r\n }\r\n\r\n setTourUrl(model3d: string, showIconPlan: boolean = true, showIconDollhouse: boolean = true, showIconFloors: boolean = true) {\r\n // this.tourUrl = this.checkMode(\"Matterport\")\r\n // ? `https://my.matterport.com/show/?m=${model3d}&play=1&qs=1&hr=0>=0&title=0&log=0&brand=0&applicationKey=qn9wsasuy5h2fzrbrn1nzr0id&mds=0`\r\n // : \"http://cupixweework.s3-website.eu-west-3.amazonaws.com/\";\r\n this.tourUrl = `https://my.matterport.com/show/?m=${model3d}&play=1&hr=0&qs=1>=0&title=0&log=0&brand=0&search=0&applicationKey=qn9wsasuy5h2fzrbrn1nzr0id&mds=0`;\r\n if (!showIconPlan) {\r\n this.tourUrl += \"&fp=0\";\r\n }\r\n if (!showIconDollhouse) {\r\n this.tourUrl += \"&dh=0\";\r\n }\r\n if (!showIconFloors) {\r\n this.tourUrl += \"&f=0\";\r\n }\r\n }\r\n\r\n clearAll() {\r\n this.sweepToMove = null;\r\n this.rotationToMove = null;\r\n if (this.checkMode(\"Matterport\")) {\r\n this.showingViewer = false;\r\n this.isLoaded = false;\r\n this.matterportService.clearAll();\r\n this.viewerIsOn.next({\r\n spaceID: null,\r\n model3D: null,\r\n sweep: null,\r\n rotation: null,\r\n });\r\n }\r\n }\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Getters\r\n -----------------------------------------------------------------------------------------------------------------*/\r\n\r\n getMode() {\r\n return this.viewerMode;\r\n }\r\n\r\n getViewerSelectedService() {\r\n // Matterport\r\n // if (this.checkMode(\"Matterport\")) {\r\n // return this.getMatterportService();\r\n // }\r\n return this.getMatterportService();\r\n }\r\n\r\n getTourUrl() {\r\n return this.tourUrl;\r\n }\r\n\r\n getMatterportService() {\r\n return this.matterportService;\r\n }\r\n\r\n /*-----------------------------------------------------------------------------------------------------------------\r\n Generic Main action functions\r\n -----------------------------------------------------------------------------------------------------------------*/\r\n setSweepToMove(sweep: string) {\r\n this.sweepToMove = sweep;\r\n }\r\n\r\n setRotationToMove(rotation: { x: number; y: number; }) {\r\n this.rotationToMove = rotation;\r\n }\r\n\r\n async action_move_to_tag(elementId: string): Promise<boolean> {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n const result =\r\n this.matterportService.getTagFromElementId(elementId);\r\n if (result.tag) {\r\n await this.matterportService.goToTag(result.tag);\r\n return true;\r\n }\r\n if (result.sweep) {\r\n this.sweepToMove = result.sweep;\r\n }\r\n return false;\r\n }\r\n return false;\r\n }\r\n\r\n /**\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 this.actionAddObjectFromPOI(object, poi);\r\n }\r\n }),\r\n );\r\n }\r\n\r\n async actionAddObjectFromPOI(\r\n object: DbObjectType,\r\n poi: POI\r\n ) {\r\n if (this.checkMode(\"Matterport\")) {\r\n return this.matterportService.action_add_mattertag_from_POI(\r\n poi.type!,\r\n object,\r\n poi,\r\n );\r\n }\r\n // Cupix\r\n // TODO\r\n return Promise.resolve();\r\n }\r\n\r\n\r\n async action_delete_element(\r\n element: DbObjectType,\r\n ) {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n await this.matterportService.action_delete_element(element);\r\n }\r\n }\r\n\r\n /**\r\n * Enable 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 (this.checkMode(\"Matterport\") && this.matterportService.getInteractionMode() ===\r\n ViewerInteractions.DEFAULT) {\r\n await this.matterportService.addElementAsMattertag(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(element: DbObjectType, poiType: PoiType) {\r\n if (\r\n this.checkMode(\"Matterport\") &&\r\n this.matterportService.getInteractionMode() ===\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n await this.matterportService.action_position_element(\r\n poiType,\r\n element,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Enable ticket placement menu to add a new ticket\r\n */\r\n action_canceled() {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_canceled();\r\n }\r\n }\r\n\r\n action_toolbox_inside_view() {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_toolbox_inside_view();\r\n }\r\n }\r\n\r\n action_toolbox_dollhouse() {\r\n if (\r\n this.matterportService.getInteractionMode() !==\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n this.action_canceled();\r\n }\r\n\r\n this.action_toolbox_cancel_mesure();\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_toolbox_dollhouse();\r\n }\r\n }\r\n\r\n action_toolbox_mesure() {\r\n if (\r\n this.matterportService.getInteractionMode() !==\r\n ViewerInteractions.DEFAULT\r\n ) {\r\n this.action_canceled();\r\n }\r\n\r\n this.action_toolbox_inside_view();\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_toolbox_mesure();\r\n }\r\n }\r\n\r\n action_toolbox_cancel_mesure() {\r\n // Matterport\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.action_toolbox_cancel_mesure();\r\n }\r\n }\r\n\r\n async action_update_poi(\r\n poi: POI,\r\n isValid: boolean,\r\n element: DbObjectType,\r\n ): Promise<POI> {\r\n if (this.checkMode(\"Matterport\")) {\r\n if (isValid) {\r\n const lastTag = this.matterportService.mattertagToFollow\r\n ? this.matterportService.mattertagToFollow\r\n : this.matterportService.getLastTag();\r\n if (!lastTag) {\r\n return Promise.resolve(poi);\r\n }\r\n const tagData =\r\n this.matterportService.getTagDataFromId(lastTag);\r\n if (!tagData) {\r\n return Promise.resolve(poi);\r\n }\r\n\r\n const poiMetadata = poi.metadata\r\n ? JSON.parse(poi.metadata)\r\n : {};\r\n poiMetadata.normal = tagData.getNormal();\r\n const poiInput = {\r\n id: poi.id,\r\n coordinate: tagData.getCoordinateString(),\r\n matterportSweepID: tagData.getSweepID(),\r\n metadata: JSON.stringify(poiMetadata),\r\n };\r\n const updatedPoi: POI = await this.poiService.updatePoi(\r\n poiInput,\r\n );\r\n tagData.setPoi(updatedPoi);\r\n await this.matterportService.injectHtmlInTag(\r\n poi.type!,\r\n element,\r\n lastTag\r\n );\r\n await this.matterportService.editTagStyle(lastTag, tagData);\r\n this.matterportService.goToTag(lastTag);\r\n\r\n return Promise.resolve(updatedPoi);\r\n }\r\n this.matterportService.deleteLastMattertag();\r\n return Promise.resolve(poi);\r\n }\r\n return Promise.resolve(poi);\r\n }\r\n\r\n 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 =\r\n this.matterportService.getTagDataFromId(tagData.tag);\r\n mattertagData.setObject(object, PoiType.ROOM);\r\n this.matterportService.editTagStyle(tagData.tag, mattertagData);\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(spaceID: string, model3D: string, tagService: BaseTagService, module: SpModule = SpModule.IMMO): Promise<void> {\r\n this.isLoaded = false;\r\n this.matterportService.currentSpaceID = spaceID;\r\n return this.matterportService.initSdk(tagService, module).then(async (result) => {\r\n if (result) {\r\n const { sdk } = this.matterportService;\r\n sdk.App.state.subscribe(function (appState) {\r\n // app state has changed\r\n // console.log('The current phase: ', appState.phase);\r\n if (appState.phase === sdk.App.Phase.PLAYING) {\r\n // console.log('The app is playing');\r\n this.showingViewer = true;\r\n this.viewerIsOn.next({\r\n spaceID,\r\n model3D,\r\n sweep: this.sweepToMove,\r\n rotation: this.rotationToMove,\r\n });\r\n this.dataIsLoaded.next(true);\r\n this.isLoaded = true;\r\n this.sweepToMove = null;\r\n this.rotationToMove = null;\r\n }\r\n }.bind(this));\r\n return Promise.resolve();\r\n }\r\n return Promise.reject();\r\n });\r\n }\r\n\r\n removeForbiddenSweeps(forbiddenSweeps: string[]) {\r\n if (this.checkMode(\"Matterport\")) {\r\n this.matterportService.removeForbiddenSweeps(forbiddenSweeps);\r\n }\r\n }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { ViewerService } from '../../services/viewer.service';\n\n@Component({\n selector: 'lib-modal-switch-visit',\n templateUrl: './modal-switch-visit.component.html',\n styleUrls: ['./modal-switch-visit.component.scss']\n})\nexport class ModalSwitchVisitComponent implements OnInit {\n @Input() content: string;\n @Input() model3D: string;\n @Input() spaceID: string;\n @Input() dataToMove: {sweepToMove:string, rotation:any};\n constructor(public activeModal: NgbActiveModal, private router: Router, private viewerService: ViewerService, \n // private objectSubService: ObjectSubscriptionService\n ) {}\n\n ngOnInit(): void {}\n\n switchVisit() {\n this.activeModal.close();\n if (this.dataToMove) {\n this.viewerService.setSweepToMove(this.dataToMove.sweepToMove);\n this.viewerService.setRotationToMove(this.dataToMove.rotation);\n }\n // this.objectSubService.forceRemove = true; // we reset the tags when changing visit\n this.router.navigate([\"visit\", this.spaceID], {\n queryParams: { model3D: this.model3D, sweep: true },\n });\n }\n\n}\n","<p>modal-switch-visit works!</p>\n","import { Storage } from \"aws-amplify\";\r\nimport { Equipment } from \"../types.service\";\r\n\r\nexport const deleteFromS3 = async (path) => {\r\n await Storage.remove(path, { level: \"public\" })\r\n .then((result) => console.log(\"Successfully deleted =>\", result))\r\n .catch((error) => console.log(\"Deleting from S3 error:\", error));\r\n};\r\n\r\nexport const uploadFileToS3 = async (\r\n path: string,\r\n file: File,\r\n objectId: string | null,\r\n): Promise<string> => {\r\n const prefix = objectId ? `${objectId.slice(0, 8)}_` : \"\";\r\n return Storage.put(path + prefix + file.name, file, {\r\n progressCallback(progress) {\r\n // console.log('Uploaded : ', progress);\r\n },\r\n contentType: file.type,\r\n })\r\n .then((result: any) => {\r\n console.log(\"Success =>\", result);\r\n return result.key;\r\n })\r\n .catch((error) => {\r\n console.log(\"error =>\", error);\r\n return null;\r\n });\r\n};\r\n\r\nexport const getSignedImageUrlForEquipment = async (\r\n equip: Equipment,\r\n): Promise<string | null> => {\r\n if (!equip.photo) {\r\n return Promise.resolve(null);\r\n }\r\n return Storage.get(equip.photo, { level: \"public\" })\r\n .then((result) => {\r\n return result as string;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n return null;\r\n });\r\n \r\n};\r\n\r\nexport const getSignedImageUrlForProfile = async (\r\n profile,\r\n): Promise<string | void> => {\r\n return Storage.get(profile.avatar, { level: \"public\" })\r\n .then((result) => {\r\n return result as string;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n });\r\n};\r\n\r\nexport const getSignedImageUrlForSpace = async (\r\n space,\r\n): Promise<string | void> => {\r\n return Storage.get(space.annexes, { level: \"public\" })\r\n .then((result) => {\r\n return result as string;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n });\r\n};\r\n\r\nexport const uploadBase64Image = async (\r\n uri: string,\r\n objectId: string | null,\r\n path: string,\r\n friendlyFileName: string,\r\n): Promise<string> => {\r\n return fetch(uri)\r\n .then((res) => res.blob())\r\n .then((blob) => {\r\n const file = new File([blob], `${friendlyFileName}.jpeg`, {\r\n type: \"image/jpeg\",\r\n });\r\n return uploadFileToS3(path, file, objectId);\r\n });\r\n};\r\n\r\nexport const removeAllFilesFromFolderS3 = async (\r\n folderPath: string,\r\n): Promise<any> => {\r\n const arrayOfPromises = [];\r\n Storage.list(folderPath, { level: \"public\" })\r\n .then((res) => {\r\n Object.keys(res).map(async (key) => {\r\n const file = res[key];\r\n arrayOfPromises.push(deleteFromS3(file.key));\r\n });\r\n })\r\n .catch((error) => console.error(\"List failure\", error));\r\n return Promise.all(arrayOfPromises);\r\n};\r\n\r\nexport const listFilesInFolder = async (folderPath: string): Promise<any> => {\r\n return Storage.list(folderPath, { level: \"public\" })\r\n .then((res) => {\r\n return res;\r\n })\r\n .catch((error) => console.error(\"List failure\", error));\r\n};\r\n\r\nexport const getSignedFile = async (path): Promise<string | null> => {\r\n return Storage.get(path, { level: \"public\" })\r\n .then((result) => {\r\n return result as string;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n return null;\r\n });\r\n\r\n};\r\n\r\nexport const downloadFileAsObject = async (path): Promise<Object | void> => {\r\n return Storage.get(path, { download: true, level: \"public\" })\r\n .then((result) => {\r\n return result as Object;\r\n })\r\n .catch((error) => {\r\n console.log(\"error fetching file from s3 =>\", error);\r\n });\r\n};\r\n\r\nexport const getBufferForFileFromS3 = async (path): Promise<ArrayBuffer> => {\r\n const object = await downloadFileAsObject(path);\r\n if (object) {\r\n // @ts-ignore\r\n return new ArrayBuffer(object.Body, \"binary\");\r\n }\r\n return null;\r\n};\r\n\r\nexport const uploadJsonToS3 = async (\r\n path: string,\r\n json: string,\r\n filename: string,\r\n): Promise<string> => {\r\n return Storage.put(path + filename, json, {\r\n contentType: \"application/json\",\r\n })\r\n .then((result: any) => {\r\n console.log(\"Success =>\", result);\r\n return result.key;\r\n })\r\n .catch((error) => {\r\n console.log(\"error =>\", error);\r\n return null;\r\n });\r\n};","import { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\nimport { ModalSwitchVisitComponent } from \"./components/modal-switch-visit/modal-switch-visit.component\";\r\nimport { downloadFileAsObject } from \"./services/s3.service\";\r\nimport { EquipmentDocument, LevelStatus, Locale, Mission, PoiType, RoleStatus } from \"./types.service\";\r\n\r\nexport function getDistanceBetweenTwoPoints(startPoint, endPoint) {\r\n const dx = endPoint.x - startPoint.x;\r\n const dy = endPoint.y - startPoint.y;\r\n const dz = endPoint.z - startPoint.z;\r\n const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);\r\n return Math.round(distance * 100) / 100;\r\n}\r\n\r\nexport function poiTypeToString(type: PoiType): string {\r\n switch (type) {\r\n case PoiType.EQUIPMENT:\r\n return \"equipment\";\r\n case PoiType.TICKET:\r\n return \"ticket\";\r\n case PoiType.DATA:\r\n return \"data\";\r\n case PoiType.DESK:\r\n return \"data\";\r\n case PoiType.INFORMATION:\r\n return \"information\";\r\n case PoiType.MEASURE:\r\n return \"measure\";\r\n case PoiType.PEOPLE:\r\n return \"people\";\r\n default:\r\n return \"ticket\";\r\n }\r\n}\r\n\r\nexport function wait(timeout: number): Promise<void> {\r\n return new Promise((resolve) => {\r\n timeout = timeout || 2000;\r\n setTimeout(() => {\r\n resolve();\r\n }, timeout);\r\n });\r\n}\r\n\r\nexport const waitUntil = (condition: () => boolean) => {\r\n return new Promise<void>((resolve, reject) => {\r\n const intervalId = setInterval(() => {\r\n if (condition()) {\r\n clearInterval(intervalId);\r\n resolve();\r\n }\r\n }, 30);\r\n });\r\n};\r\n\r\nexport function enumToArray(enumerable: any) {\r\n return Object.keys(enumerable)\r\n .filter((value) => isNaN(Number(value)) === true)\r\n .map((key) => enumerable[key]);\r\n}\r\n\r\nexport function getLevelsBelow(level: LevelStatus): LevelStatus[] {\r\n const all = [\r\n LevelStatus.MINIMUM,\r\n LevelStatus.LOW,\r\n LevelStatus.MEDIUM,\r\n LevelStatus.HIGH,\r\n LevelStatus.MAXIMUM,\r\n ];\r\n switch (level) {\r\n case LevelStatus.MAXIMUM:\r\n return all;\r\n case LevelStatus.HIGH:\r\n all.splice(4, 1);\r\n return all;\r\n case LevelStatus.MEDIUM:\r\n all.splice(3, 2);\r\n return all;\r\n case LevelStatus.LOW:\r\n return [LevelStatus.MINIMUM, LevelStatus.LOW];\r\n case LevelStatus.MINIMUM:\r\n return [LevelStatus.MINIMUM];\r\n default:\r\n return [LevelStatus.MINIMUM];\r\n }\r\n}\r\n\r\nexport function getHighestLevelForMissions(missions: Mission[]): LevelStatus {\r\n let latestVisibleLevels = [LevelStatus.MINIMUM];\r\n for (const m of missions) {\r\n const visibleLevels = getLevelsBelow(m.level);\r\n if (visibleLevels.length > latestVisibleLevels.length) {\r\n latestVisibleLevels = visibleLevels;\r\n }\r\n }\r\n switch (latestVisibleLevels.length) {\r\n case 1:\r\n return LevelStatus.MINIMUM;\r\n case 2:\r\n return LevelStatus.LOW;\r\n case 3:\r\n return LevelStatus.MEDIUM;\r\n case 4:\r\n return LevelStatus.HIGH;\r\n case 5:\r\n return LevelStatus.MAXIMUM;\r\n default:\r\n return LevelStatus.MINIMUM;\r\n }\r\n}\r\n\r\nexport function getHighestRoleForMissions(missions: Mission[]): RoleStatus {\r\n let highestRole = RoleStatus.VISITOR;\r\n for (const m of missions) {\r\n if (m.role === RoleStatus.ADMIN) {\r\n return RoleStatus.ADMIN;\r\n }\r\n if (highestRole === RoleStatus.OWNER) {\r\n continue;\r\n }\r\n if (m.role === RoleStatus.OWNER) {\r\n highestRole = RoleStatus.OWNER;\r\n }\r\n if (m.role === RoleStatus.MANAGER) {\r\n highestRole = RoleStatus.MANAGER;\r\n }\r\n if (\r\n m.role === RoleStatus.SERVICE &&\r\n highestRole !== RoleStatus.MANAGER\r\n ) {\r\n highestRole = RoleStatus.SERVICE;\r\n }\r\n if (\r\n m.role === RoleStatus.OCCUPANT &&\r\n highestRole === RoleStatus.VISITOR\r\n ) {\r\n highestRole = RoleStatus.OCCUPANT;\r\n }\r\n if (m.role === RoleStatus.GUIDE_MUSEUM) {\r\n highestRole = RoleStatus.GUIDE_MUSEUM;\r\n }\r\n if (m.role === RoleStatus.VISITOR_MUSEUM) {\r\n highestRole = RoleStatus.VISITOR_MUSEUM;\r\n }\r\n }\r\n return highestRole;\r\n}\r\n\r\nexport function getRolesBelowForManager(role: RoleStatus): RoleStatus[] {\r\n const all = [\r\n RoleStatus.VISITOR,\r\n RoleStatus.OCCUPANT,\r\n RoleStatus.SERVICE,\r\n RoleStatus.MANAGER,\r\n RoleStatus.OWNER,\r\n RoleStatus.ADMIN,\r\n ];\r\n const museum = [RoleStatus.VISITOR_MUSEUM, RoleStatus.GUIDE_MUSEUM];\r\n switch (role) {\r\n case RoleStatus.ADMIN:\r\n return [...all, ...museum];\r\n case RoleStatus.OWNER:\r\n all.splice(5, 1);\r\n return all;\r\n case RoleStatus.MANAGER:\r\n all.splice(4, 2);\r\n return all;\r\n case RoleStatus.GUIDE_MUSEUM:\r\n return museum;\r\n default:\r\n return all.splice(4, 2);\r\n }\r\n}\r\n\r\nexport function filterUniqueArrayByID(arrayOfObjects: any[]): any[] {\r\n return arrayOfObjects.filter(\r\n (v, index, a) => a.findIndex((t) => t.id === v.id) === index,\r\n );\r\n}\r\n\r\nexport function removeNullKeysFromObject(object: Object) {\r\n for (const key of Object.keys(object)) {\r\n if (object[key] === null) {\r\n delete object[key];\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Test if a date has expired\r\n * @param date\r\n * @returns true if the date has expired, false otherwise\r\n */\r\n export function dateHasExpired(\r\n date: string | Date | number | null | undefined,\r\n): boolean {\r\n if (date) {\r\n return new Date(date) <= new Date();\r\n }\r\n return false;\r\n}\r\n\r\nexport function stringLocaleToEnum(locale: string): Locale {\r\n switch (locale) {\r\n case \"en\":\r\n return Locale.EN;\r\n case \"fr\":\r\n return Locale.FR;\r\n default:\r\n return Locale.EN;\r\n }\r\n}\r\n\r\n\r\nexport function getMetaForImage(url): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n\r\n img.addEventListener(\"load\", () => {\r\n resolve(img);\r\n });\r\n img.addEventListener(\"error\", () => reject());\r\n img.src = url;\r\n });\r\n}\r\n\r\nexport function sortAlphabeticallyOnName(array: { name: string }[]): any[] {\r\n return array.sort((a, b) => a.name.localeCompare(b.name));\r\n}\r\n\r\nexport function validEmail(email: string) {\r\n const re =\r\n /^(([^\\s\"(),.:;<>@[\\\\\\]]+(\\.[^\\s\"(),.:;<>@[\\\\\\]]+)*)|(\".+\"))@((\\[(?:\\d{1,3}\\.){3}\\d{1,3}])|(([\\dA-Za-z\\-]+\\.)+[A-Za-z]{2,}))$/;\r\n return re.test(email);\r\n}\r\n\r\nexport function downloadBlob(blob, filename) {\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = filename || \"download\";\r\n const clickHandler = () => {\r\n setTimeout(() => {\r\n URL.revokeObjectURL(url);\r\n a.removeEventListener(\"click\", clickHandler);\r\n }, 150);\r\n };\r\n a.addEventListener(\"click\", clickHandler, false);\r\n a.click();\r\n return a;\r\n}\r\n\r\n/*\r\n Open modal if one has to switch virtual visit\r\n*/\r\nexport function openModalForVisitSwitch(\r\n modalService: NgbModal,\r\n model3D: string,\r\n spaceID: string,\r\n dataToMove: {sweepToMove:string, rotation:any} | null = null\r\n) {\r\n const modalReference = modalService.open(ModalSwitchVisitComponent);\r\n modalReference.componentInstance.content =\r\n \"This object belongs to another 3D visit. Are you sure you want to switch the visit?\";\r\n modalReference.componentInstance.model3D = model3D;\r\n modalReference.componentInstance.spaceID = spaceID;\r\n if (dataToMove) {\r\n modalReference.componentInstance.dataToMove = dataToMove;\r\n }\r\n \r\n}\r\n\r\n/**\r\n * Return a string of a given date time in local format.\r\n * The format is determined by the current language.\r\n */\r\n export function dateTimeToLocalString(\r\n date: number | string | Date,\r\n translate?: TranslateService,\r\n mode?,\r\n): string {\r\n let lang = \"en-EN\";\r\n if (translate) {\r\n /** Get current language */\r\n lang = translate.currentLang\r\n ? translate.currentLang\r\n : translate.defaultLang;\r\n /** Transforme '_fr' to 'fr' */\r\n if (lang) {\r\n lang = lang.slice(1);\r\n }\r\n \r\n }\r\n\r\n let options: {\r\n month?;\r\n year?;\r\n day?;\r\n hour?;\r\n minute?;\r\n second?;\r\n dateStyle?;\r\n timeStyle?;\r\n weekday?;\r\n timeZone?;\r\n timeZoneName?;\r\n };\r\n switch (mode) {\r\n case \"day_numeric\":\r\n options = { day: \"numeric\" };\r\n break;\r\n case \"day\":\r\n options = { weekday: \"long\" };\r\n break;\r\n case \"date\":\r\n options = { dateStyle: \"long\" };\r\n break;\r\n case \"short_date_time\":\r\n options = {\r\n year: \"2-digit\",\r\n month: \"2-digit\",\r\n day: \"2-digit\",\r\n hour: \"2-digit\",\r\n minute: \"2-digit\",\r\n };\r\n break;\r\n case \"time\":\r\n options = { hour: \"numeric\", minute: \"numeric\" };\r\n break;\r\n case \"day_time_zone\":\r\n options = {\r\n weekday: \"long\",\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n timeZoneName: \"shortOffset\",\r\n };\r\n break;\r\n default:\r\n options = {\r\n dateStyle: \"long\",\r\n timeStyle: \"short\",\r\n };\r\n }\r\n return new Date(date).toLocaleString(lang, options);\r\n}\r\n\r\n/**\r\n * Compares two string arrays\r\n * @param array1\r\n * @param array2\r\n * @returns\r\n */\r\n export function arraysContainSameElements(\r\n array1: string[],\r\n array2: string[],\r\n): boolean {\r\n return JSON.stringify(array1) === JSON.stringify(array2);\r\n}\r\n\r\n\r\nexport function getVisitUrl(currentUrl: string): string {\r\n const path = currentUrl.split(\"/\");\r\n path.splice(3, path.length - 2);\r\n return path.join(\"/\");\r\n}\r\n\r\n/**\r\n * Extract spaceID from url when in visit 3D\r\n */\r\n export function getSpaceIDFromUrl(url: string): string {\r\n const visitUrl = getVisitUrl(url);\r\n return visitUrl.split(\"/\")[2];\r\n}\r\n\r\n/**\r\n * Download related\r\n */\r\n import FileSaver from \"file-saver\";\r\n\r\n export function downloadFile(fileUrl: string, fileName: string) {\r\n FileSaver.saveAs(fileUrl + fileName, fileName);\r\n }\r\n \r\n export function openDocument(fileUrl: string, fileName: string, id: number) {\r\n window.open(`${fileUrl + fileName}#doc=${id}`, \"_blank\", \"\");\r\n }\r\n \r\n export const downloadEquipmentDocument = async (\r\n document_: EquipmentDocument,\r\n ): Promise<Object | void> => {\r\n const signedFile = await downloadFileAsObject(document_.url);\r\n if (signedFile) {\r\n // @ts-ignore\r\n downloadBlob(signedFile.Body, document_.filename);\r\n }\r\n };\r\n\r\n export async function checkElementById(selector) {\r\n let querySelector = null;\r\n while (querySelector === null) {\r\n await rafAsync();\r\n querySelector = document.getElementById(selector);\r\n }\r\n return querySelector;\r\n}\r\n\r\nfunction rafAsync() {\r\n return new Promise((resolve) => {\r\n requestAnimationFrame(resolve); // faster than set time out\r\n });\r\n}\r\n\r\n/* @param {Array} numbers An array of numbers.\r\n * @return {Number} The calculated average (or mean) value from the specified\r\n * numbers.\r\n */\r\nexport function mean(numbers: number[]) {\r\n let total = 0;\r\n for (const number of numbers) {\r\n total += number;\r\n }\r\n return total / numbers.length;\r\n}\r\n\r\nexport function convertTimestampToLocalZone(timestamp: number): number {\r\n const selectedDate = new Date(timestamp);\r\n const localOffset = -1 * selectedDate.getTimezoneOffset() * 60000;\r\n const stamp = timestamp + localOffset;\r\n return stamp;\r\n}\r\n\r\n/**\r\n * Return string for period of time. Parameters are DateTime objects of luxon library.\r\n */\r\n export function translateDatePeriod(\r\n translateService: any,\r\n dateStartPeriod: any,\r\n dateEndPeriod: any,\r\n): string {\r\n const locale = getLocaleLong(translateService);\r\n return `${dateStartPeriod.toLocaleString({\r\n locale,\r\n month: \"long\",\r\n day: \"2-digit\",\r\n })} - ${dateEndPeriod.toLocaleString({\r\n locale,\r\n month: \"long\",\r\n day: \"2-digit\",\r\n })} `;\r\n}\r\n\r\n\r\n/**\r\n* Return local in the canonical form: \"en-GB\", \"fr-FR\"\r\n*/\r\nexport function getLocaleLong(translate: TranslateService): string {\r\n let lang = translate.currentLang\r\n ? translate.currentLang\r\n : translate.defaultLang;\r\n\r\n /** Transform '_fr' to 'fr' */\r\n lang = lang.slice(1);\r\n if (lang === \"en\") {\r\n return \"en-GB\";\r\n }\r\n return `${lang}-${lang.toUpperCase()}`;\r\n}\r\n\r\n/**\r\n * Return local in the short form: \"en\", \"fr\"\r\n */\r\n export function getLocaleShort(translate: TranslateService): string {\r\n let lang = translate.currentLang\r\n ? translate.currentLang\r\n : translate.defaultLang;\r\n\r\n /** Transform '_fr' to 'fr' */\r\n lang = lang.slice(1);\r\n return lang;\r\n}\r\n\r\n/**\r\n * Format string to lowercase, no spaces\r\n */\r\n export function stringToLowercaseNoSpaces(input: string): string {\r\n const words = input.toLowerCase().split(/\\s+/);\r\n return words.join(\"\");\r\n}\r\n\r\n/**\r\n * Test if the object === {}\r\n * @param obj object {key:value}\r\n * @returns boolean\r\n */\r\n export function isEmptyObject(object): boolean {\r\n for (const x in object) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function shuffleArray(array: any[]) {\r\n const newArray = [...array];\r\n for (let index = array.length - 1; index > 0; index--) {\r\n const indexNew = Math.floor(Math.random() * (index + 1));\r\n // eslint-disable-next-line no-param-reassign\r\n [newArray[index], newArray[indexNew]] = [\r\n newArray[indexNew],\r\n newArray[index],\r\n ];\r\n }\r\n return newArray;\r\n}\r\n\r\nexport function numberToDateString(timestamp: number): string {\r\n const jsDate = new Date(timestamp);\r\n return jsDate.toLocaleString(\"fr-FR\");\r\n}\r\n\r\nexport function durationToString(\r\n duration: number,\r\n translate: TranslateService,\r\n): string {\r\n const days = Math.floor(duration / 3600 / 24);\r\n const hours = Math.floor((duration - days * 24 * 3600) / 3600);\r\n const minutes = Math.floor((duration % 3600) / 60);\r\n const seconds = Math.floor(duration % 60);\r\n\r\n const daysString = translate.instant(\"day(s)\");\r\n const hoursString = translate.instant(\"hour(s)\");\r\n const oneHourString = translate.instant(\"hour\");\r\n const minutesString = translate.instant(\"minute(s)\");\r\n const secondsString = translate.instant(\"second(s)\");\r\n\r\n if (duration > 3600 * 24 * 7) {\r\n return `${days} ${daysString}`;\r\n }\r\n if (duration > 3600 * 24) {\r\n return `${days} ${daysString} ${hours} ${hoursString}`;\r\n }\r\n if (duration === 3600) {\r\n return `${hours} ${oneHourString}`;\r\n }\r\n if (duration > 3600) {\r\n if (minutes === 0) {\r\n return `${hours} ${hoursString}`;\r\n }\r\n return `${hours} ${hoursString} ${minutes} ${minutesString}`;\r\n }\r\n if (duration >= 60) {\r\n if (seconds === 0) {\r\n return `${minutes} ${minutesString}`;\r\n }\r\n return `${minutes} ${minutesString} ${seconds} ${secondsString}`;\r\n }\r\n return `${seconds} ${secondsString}`;\r\n}\r\n","import { Inject } from \"@angular/core\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { AWSType, Profile } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ProfileService {\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async createProfile(profile: Profile): Promise<Profile> {\r\n return this.API.__proto__.CreateProfile(profile);\r\n }\r\n\r\n async getProfile(id: string): Promise<Profile> {\r\n return this.API.__proto__.GetProfile(id);\r\n }\r\n\r\n async updateProfile(profile: any): Promise<Profile> {\r\n if (profile.id === undefined) {\r\n console.log(`an ID is required for update Profile`);\r\n return null;\r\n }\r\n return this.API.__proto__.UpdateProfile(profile);\r\n }\r\n\r\n async deleteProfile(id: string): Promise<Profile> {\t\r\n return this.API.__proto__.DeleteProfile({id:id});\r\n }\r\n\r\n async getProfileFromAWSID(userID: string): Promise<Profile> {\r\n return this.API.__proto__.ProfilesByUserID(userID).then((results) => {\r\n if (results.items.length === 0) {\r\n return null;\r\n }\r\n return results.items[0];\r\n });\r\n }\r\n\r\n async getUsersForMail(mail: string): Promise<Profile[]> {\r\n return this.API.__proto__.ListProfiles({ metadata: { contains: mail } }).then(\r\n (results) => {\r\n return results.items.filter((profile) => !profile.deletedAt);\r\n },\r\n );\r\n }\r\n\r\n async getProfilesForStatus(status: string): Promise<Profile[]> {\r\n return (\r\n await this.API.__proto__.ListProfiles({\r\n status: { eq: status },\r\n })\r\n ).items;\r\n }\r\n}","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { dateHasExpired } from \"../../helpers.service\";\r\nimport { Mission, Organisation, Profile, ProfileStatus, RoleStatus } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class MissionService {\r\n currentMissionsUpdated = new Subject<boolean>();\r\n\r\n lastExpiredMission: Mission;\r\n\r\n nextMissionToStart: Mission;\r\n\r\n currentUserID: string;\r\n\r\n API: any; //AWS\r\n\r\n constructor(\r\n // private affectationService: AffectationService,\r\n @Inject('currentAPIService') apiInjected: any\r\n ) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getMissionsFromUserID(userID: string): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsByUser(userID).then((missions) => {\r\n return missions.items.filter((mis) => !mis.deletedAt);\r\n });\r\n }\r\n\r\n async getMissionsByOrderedOrganisation(\r\n orderedOrgID: string,\r\n ): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsByOrderedOrganisation(orderedOrgID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n\r\n async getMissionsByOrganisation(orgID: string): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsByOrganisation(orgID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n\r\n async create(mission: Mission): Promise<Mission> {\r\n const updMission = await this.API.__proto__.CreateMission(mission);\r\n console.log(\"Mission created\", updMission);\r\n await this.checkIfCurrentUserMissionChanged(updMission);\r\n return updMission;\r\n }\r\n\r\n async update(mission: any): Promise<Mission> {\r\n const updMission = await this.API.__proto__.UpdateMission(mission);\r\n console.log(\"Mission updated\", updMission);\r\n await this.checkIfCurrentUserMissionChanged(updMission);\r\n return updMission;\r\n }\r\n\r\n async assertRoleForUserInOrg(\r\n user: Profile,\r\n org: Organisation,\r\n role: RoleStatus,\r\n ): Promise<boolean> {\r\n return this.getMissionsFromUserID(user.id).then((missions) => {\r\n if (missions) {\r\n const misOrg = missions.filter((mis) => {\r\n return mis.organisationID === org.id && mis.role === role;\r\n });\r\n return misOrg.length > 0;\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n async getMissionsByOrderedOrganisationBySpace(\r\n ordOrgID: string,\r\n spaceID: string,\r\n ): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsByOrderedOrganisationBySpace(ordOrgID, {\r\n eq: spaceID,\r\n }).then((mis) => mis.items);\r\n }\r\n\r\n async softDeleteMission(missionID: string): Promise<Mission> {\r\n // const hardDelete = await this.canHardDeteleMission(mission.id);\r\n // if (hardDelete) {\r\n // return this.hardDeleteMission(mission.id);\r\n // }\r\n console.log(\"Soft Deleting mission\");\r\n const missionUpd = await this.update({\r\n id: missionID,\r\n deletedAt: Date.now(),\r\n });\r\n await this.checkIfCurrentUserMissionChanged(missionUpd);\r\n return missionUpd;\r\n }\r\n\r\n async list(): Promise<Mission[]> {\r\n const mis = await this.API.__proto__.ListMissions();\r\n return mis.items.filter((m) => !m.deletedAt);\r\n }\r\n\r\n // async canHardDeteleMission(missionID: string): Promise<boolean> {\r\n // const events = (\r\n // await this.API.ListEvents({ ownerID: { eq: missionID } })\r\n // ).items;\r\n // if (events.length > 0) {\r\n // return false;\r\n // }\r\n // const comments = (\r\n // await this.API.ListComments({ ownerID: { eq: missionID } })\r\n // ).items;\r\n // if (comments.length > 0) {\r\n // return false;\r\n // }\r\n // const affectations =\r\n // await this.affectationService.getAffectationsFromMissionID(\r\n // missionID,\r\n // );\r\n // if (affectations.length > 0) {\r\n // return false;\r\n // }\r\n // return true;\r\n // }\r\n\r\n async hardDeleteMission(missionID: string): Promise<Mission> {\r\n return this.API.__proto__.DeleteMission({ id: missionID });\r\n }\r\n\r\n getActivatedMissions(missions: Mission[]): Mission[] {\r\n const activated = [];\r\n missions.map(async (mission) => {\r\n const isActivated =\r\n mission.groups && mission.groups.includes(ProfileStatus.ACTIVE);\r\n if (isActivated) {\r\n activated.push(mission);\r\n }\r\n });\r\n return activated;\r\n }\r\n\r\n async getMissionsForZone(zoneID: string): Promise<Mission[]> {\r\n return (await this.API.__proto__.MissionsByZone(zoneID)).items.filter(\r\n (mis) => !mis.deletedAt,\r\n );\r\n }\r\n\r\n async getMissionsForSpace(spaceID: string): Promise<Mission[]> {\r\n return this.API.__proto__.MissionsBySpace(spaceID).then((missions) => missions.items)\r\n }\r\n\r\n activateMission(mis: Mission) {\r\n if (\r\n mis &&\r\n (!mis.groups || !mis.groups.includes(ProfileStatus.ACTIVE))\r\n ) {\r\n const groups = mis.groups ? mis.groups : [];\r\n groups.push(ProfileStatus.ACTIVE);\r\n this.update({ id: mis.id, groups });\r\n }\r\n }\r\n\r\n async getMissionsByTemplate(templateID: string): Promise<Mission[]> {\r\n return (await this.API.__proto__.MissionsByTemplate(templateID)).items.filter(\r\n (mis) => !mis.deletedAt,\r\n );\r\n }\r\n\r\n async getMission(missionID: string): Promise<Mission> {\r\n return this.API.__proto__.GetMission(missionID);\r\n }\r\n\r\n async getMissionsByZoneByRole(\r\n zoneID: string,\r\n role: RoleStatus,\r\n ): Promise<Mission[]> {\r\n return (\r\n await this.API.__proto__.MissionsByZoneByRole(\r\n zoneID,\r\n { eq: role },\r\n null,\r\n {deletedAt: {attributeExists: false}},\r\n 200,\r\n )\r\n ).items;\r\n }\r\n\r\n async checkIfCurrentUserMissionChanged(changedMission: Mission) {\r\n if (this.currentUserID === changedMission.userID) {\r\n this.currentMissionsUpdated.next(true);\r\n }\r\n }\r\n\r\n async instantMissionsOfCurrent(\r\n currentUserID: string,\r\n ): Promise<Mission[] | null> {\r\n this.currentUserID = currentUserID;\r\n let missions = await this.getMissionsFromUserID(currentUserID);\r\n \r\n /** Filter to keep only available missions */\r\n missions = missions.filter((mission) => {\r\n const hasExpired = dateHasExpired(mission.endDateTime);\r\n\r\n /** Update this.lastExpiredMission */\r\n if (hasExpired) {\r\n const lastExpiredDate = this.lastExpiredMission\r\n ? new Date(this.lastExpiredMission.endDateTime)\r\n : null;\r\n const dateExpired = new Date(mission.endDateTime);\r\n if (!lastExpiredDate || dateExpired > lastExpiredDate) {\r\n this.lastExpiredMission = mission;\r\n }\r\n }\r\n return !hasExpired;\r\n });\r\n\r\n if (missions.some((mis)=>mis.role === RoleStatus.VISITOR_MUSEUM) && missions.length > 0) {\r\n // workflow for VISITOR_MUSEUM\r\n return missions;\r\n }\r\n /** Keep only started missions */\r\n let nextMissionDate = null;\r\n missions = missions.filter((mission) => {\r\n const started = mission.startDateTime\r\n ? dateHasExpired(mission.startDateTime)\r\n : true;\r\n /** Update next mission to start */\r\n if (!started) {\r\n const missionDate = new Date(mission.startDateTime);\r\n if (!nextMissionDate || missionDate < nextMissionDate) {\r\n this.nextMissionToStart = mission;\r\n nextMissionDate = missionDate;\r\n }\r\n }\r\n return started;\r\n });\r\n return missions.length > 0 ? missions : null;\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Property } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class PropertyService{\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async createProperty(property: Property): Promise<Property> {\r\n return this.API.__proto__.CreateProperty(property);\r\n }\r\n\r\n async deleteProperty(propertyID: string): Promise<Property> {\r\n return this.API.__proto__.DeleteProperty({id: propertyID});\r\n }\r\n \r\n async getPropertiesForOrganisation(orgID: string): Promise<Property[]> {\r\n return this.API.__proto__.PropertiesByOrganisation(orgID).then(\r\n (props) => props.items,\r\n );\r\n }\r\n\r\n async listProperties(): Promise<Property[]> {\r\n return this.API.__proto__.ListPropertys().then((props) => props.items);\r\n }\r\n\r\n async listPropertiesForSpace(spaceID: string): Promise<Property[]> {\r\n return this.API.__proto__.ListPropertys({ spaceID: { eq: spaceID } }).then((props) => props.items);\r\n }\r\n}","import { Injectable, NgZone } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { Router } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\nimport { LevelStatus, Mission, Organisation, Profile, ProfileEntity, ProfileStatus, PropertyType, RoleStatus } from \"../types.service\";\r\nimport { enumToArray, filterUniqueArrayByID, getHighestLevelForMissions, getHighestRoleForMissions, getLevelsBelow, getRolesBelowForManager } from \"../helpers.service\";\r\nimport { ProfileService } from \"./models/profile.service\";\r\nimport { MissionService } from \"./models/mission.service\";\r\nimport { PropertyService } from \"./models/property.service\";\r\nimport { DateTime } from \"luxon\";\r\nimport { Auth } from \"aws-amplify\";\r\n\r\ninterface CreateUser {\r\n email: string;\r\n phone: string;\r\n lastName: string;\r\n firstName: string;\r\n password?: string;\r\n}\r\n\r\n/**\r\n * UserService handles user's lifecycle, from creation to deletion\r\n */\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseUserService {\r\n\r\n isChanged: Subject<boolean> = new Subject<boolean>();\r\n\r\n updating = false;\r\n\r\n managers = [\r\n RoleStatus.ADMIN,\r\n RoleStatus.MANAGER,\r\n RoleStatus.OWNER,\r\n RoleStatus.GUIDE_MUSEUM,\r\n ];\r\n\r\n currentMissions: Mission[];\r\n\r\n lastExpiredMission: Mission;\r\n\r\n nextMissionToStart: Mission;\r\n\r\n cu: ProfileEntity = null;\r\n\r\n constructor(\r\n private profileService: ProfileService,\r\n private missionService: MissionService,\r\n private propertyService: PropertyService,\r\n private router: Router,\r\n private location: Location,\r\n private ngZone: NgZone,\r\n private translate: TranslateService,\r\n ) {\r\n // this.checkConnectedAWSUser();\r\n this.missionService.currentMissionsUpdated.subscribe(async (data) => {\r\n console.log(\"current missions updated\");\r\n this.currentMissions =\r\n await this.missionService.instantMissionsOfCurrent(this.cu.id);\r\n console.log(\"user is changed emitting\");\r\n this.isChanged.next(true);\r\n });\r\n }\r\n\r\n /**\r\n * Checks if AWS user is connected and assigng it to current user (this.cu)\r\n **/\r\n async checkConnectedAWSUser() {\r\n if (!this.cu) {\r\n console.log(\"check AWS user\");\r\n let cau = null;\r\n let user = null;\r\n try {\r\n if (!this.updating) {\r\n cau = await Auth.currentAuthenticatedUser();\r\n console.log(\"connected\", cau);\r\n user = await this.current(cau);\r\n console.log(\"current of userService\", user);\r\n }\r\n } catch { }\r\n if (!user && !this.updating) {\r\n console.log(\"no user in check connected aws user\");\r\n this.router.navigate([\"auth\"]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * createUser spawns a new User, along with:\r\n * - a proper AWSCognito signup\r\n * - a Profile entry holding the AWSCognito ID\r\n * - a Mission entry holding the Organisation ID\r\n *\r\n * @see 174\r\n * @see https://docs.amplify.aws/lib/auth/emailpassword/q/platform/js#sign-up\r\n * @todo wonder if we can mash together Profile, Mission and User entries\r\n * @param u User to be created\r\n */\r\n async createUserAWSandProfile(\r\n u: {\r\n email: string;\r\n phone: string;\r\n lastName: string;\r\n firstName: string;\r\n password?: string;\r\n },\r\n prevalidated: boolean = false,\r\n ): Promise<Profile> {\r\n const attributes = {\r\n email: u.email.trim(),\r\n given_name: u.firstName,\r\n family_name: u.lastName,\r\n zoneinfo: \"fr\", // @todo deal with zoneinfo and locale\r\n locale: \"fr\",\r\n \"custom:prevalidated\": \"false\",\r\n };\r\n if (prevalidated) {\r\n attributes[\"custom:prevalidated\"] = \"true\";\r\n }\r\n // AWSCognito\r\n const password = u.password ? u.password : \"temporaryp\";\r\n let error;\r\n try {\r\n const { userSub } = await Auth.signUp({\r\n username: u.email, // username should be an email they say\r\n password,\r\n attributes,\r\n clientMetadata: {\r\n phone: u.phone,\r\n },\r\n });\r\n if (userSub) {\r\n return this.createProfile(userSub, u);\r\n }\r\n } catch (error_: any) {\r\n switch (error_.code) {\r\n case \"InvalidPasswordException\":\r\n error = \"auth.error.wrong_password\";\r\n break;\r\n case \"UserNotConfirmedException\":\r\n error = \"auth.error.user_not_confirmed\";\r\n break;\r\n case \"InvalidParameterException\":\r\n error = \"auth.error.invalid_parameter\";\r\n break;\r\n default:\r\n error = error_.message;\r\n }\r\n console.log(`AWS Sign UP error : ${error}`);\r\n }\r\n return Promise.reject(error);\r\n }\r\n\r\n async createProfile(\r\n awsUserID: string,\r\n u: CreateUser,\r\n ): Promise<Profile> {\r\n const profile = await this.profileService.createProfile({\r\n userID: awsUserID,\r\n metadata: JSON.stringify({\r\n email: u.email,\r\n phone: u.phone,\r\n lastName: u.lastName,\r\n firstName: u.firstName,\r\n }),\r\n status: ProfileStatus.WAITING_FOR_ACTIVATION,\r\n });\r\n return profile;\r\n }\r\n\r\n currentOrganisation(spaceID: string = null): Organisation {\r\n if (this.cu) {\r\n if (!spaceID) {\r\n return this.currentMissions[0].organisation;\r\n }\r\n return this.currentMission(spaceID).organisation;\r\n }\r\n return null;\r\n }\r\n\r\n async current(\r\n user,\r\n fastConnect: boolean = false,\r\n ): Promise<ProfileEntity | null> {\r\n if (!this.cu && !this.updating) {\r\n this.updating = true;\r\n this.cu = await this.userFromAWSID(user.username);\r\n if (!this.cu && user.attributes.email) {\r\n console.log(\r\n `No profile for userID 🔪 ${user.attributes.email}`,\r\n );\r\n // There's no profiles, profiles.items.length === 0\r\n // It's maybe the 🤮 case where the profile has been saved with an email\r\n // instead of an hashed id\r\n // If found, we need to replace the id in both the Profile\r\n const emailProfile = await this.userFromAWSID(\r\n user.attributes.email,\r\n );\r\n if (emailProfile) {\r\n console.log(\r\n `👏 doing the spacehip reversal email on ${user.attributes.email}`,\r\n );\r\n this.cu = await this.userFromAWSID(user.username);\r\n }\r\n }\r\n if (!this.cu) {\r\n this.updating = false;\r\n await Auth.signOut();\r\n return null;\r\n }\r\n const missions = await this.missionService.instantMissionsOfCurrent(\r\n this.cu.id\r\n );\r\n this.currentMissions = missions;\r\n let okToLogin = true;\r\n if (!fastConnect && !this.isSPAdmin()) {\r\n // check access token if not Fast connect (fast connect is for the guest connection via link(/redirect?user=))\r\n // and not SmarterPlan Admin\r\n okToLogin = await this.checkAccessToken(\r\n user.signInUserSession.accessToken.jwtToken,\r\n );\r\n }\r\n if (!okToLogin) {\r\n this.cu = null;\r\n this.currentMissions = [];\r\n this.updating = false;\r\n await Auth.signOut();\r\n return null;\r\n }\r\n await this.profileService.updateProfile({\r\n id: this.cu.id,\r\n lastConnectedAt: Date.now(),\r\n });\r\n if (!missions && this.location.path() !== \"/no-mission\") {\r\n this.ngZone.run(() => {\r\n this.router.navigate([\"/no-mission\"]);\r\n });\r\n }\r\n console.log(\"user is changed emitting\");\r\n this.isChanged.next(true);\r\n this.updating = false;\r\n }\r\n return this.cu;\r\n }\r\n\r\n async userFromAWSID(userId: string): Promise<ProfileEntity | null> {\r\n const profile = await this.profileService.getProfileFromAWSID(userId);\r\n if (profile) {\r\n return new ProfileEntity(profile);\r\n }\r\n return null;\r\n }\r\n\r\n async userFromUserID(userID: string): Promise<ProfileEntity | null> {\r\n const profile = await this.profileService.getProfile(userID);\r\n return new ProfileEntity(profile);\r\n }\r\n\r\n currentMission(spaceID: string): Mission {\r\n const mission = this.getMissionForSpace(spaceID);\r\n return mission;\r\n }\r\n\r\n isManager(spaceID: string): boolean {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return this.managers.includes(mission.role);\r\n }\r\n return false;\r\n }\r\n\r\n isService(spaceID: string): boolean {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.SERVICE;\r\n }\r\n return false;\r\n }\r\n\r\n isAdmin(spaceID: string): boolean {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.ADMIN;\r\n }\r\n return false;\r\n }\r\n\r\n isSmarterPlan(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n const spMissions = this.currentMissions.filter(\r\n (m) =>\r\n m.organisationID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" &&\r\n this.managers.includes(m.role),\r\n ); // ID of SmarterPlan\r\n return spMissions.length > 0;\r\n }\r\n\r\n isSPAdmin(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n const spMissions = this.currentMissions.filter(\r\n (m) =>\r\n m.organisationID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" &&\r\n m.role === RoleStatus.ADMIN,\r\n ); // ID of SmarterPlan\r\n return spMissions.length > 0;\r\n }\r\n\r\n getMissionForSpace(spaceID: string): Mission {\r\n if (!this.currentMissions) {\r\n return null;\r\n }\r\n return this.currentMissions.find((m) => m.spaceID === spaceID);\r\n }\r\n\r\n hasManagerRoleInAnyMission(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n return this.currentMissions.some((mis) =>\r\n this.managers.includes(mis.role),\r\n );\r\n }\r\n\r\n hasServiceRoleInAnyMission(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n return this.currentMissions.some(\r\n (mis) => mis.role === RoleStatus.SERVICE,\r\n );\r\n }\r\n\r\n hasAdminRoleInAnyMission(): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n return this.currentMissions.some(\r\n (mis) => mis.role === RoleStatus.ADMIN,\r\n );\r\n }\r\n\r\n async createOrUpdateMissionForOrgWithProperty(\r\n missionInput: Mission,\r\n orgID: string,\r\n create: boolean = true,\r\n ): Promise<Mission> {\r\n const mission = await (create\r\n ? this.missionService.create(missionInput)\r\n : this.missionService.update(missionInput));\r\n\r\n if (this.managers.includes(mission.role) && mission.spaceID) {\r\n const properties =\r\n await this.propertyService.getPropertiesForOrganisation(orgID);\r\n const propertySpaceIDs = properties.map(\r\n (property_) => property_.spaceID,\r\n );\r\n if (propertySpaceIDs.includes(mission.spaceID)) {\r\n return mission;\r\n }\r\n // we delegate the rights of the space\r\n await this.propertyService.createProperty({\r\n spaceID: mission.spaceID,\r\n organisationID: orgID,\r\n type: PropertyType.SHARED,\r\n });\r\n }\r\n return mission;\r\n }\r\n\r\n async softDeleteUser(userID: string) {\r\n const missions = await this.missionService.getMissionsFromUserID(userID);\r\n if (missions.length === 0) {\r\n await this.profileService.updateProfile({ id: userID, deletedAt: Date.now() });\r\n console.log(\"Profile soft deleted\");\r\n }\r\n }\r\n /**\r\n * Checks if the Profile (by id) can be removed completely from the DB (no missions in the DB)\r\n * @param profileID\r\n * @returns boolean\r\n */\r\n async canHardDeleteUser(profileID: string): Promise<boolean> {\r\n const missions = (await this.missionService.getMissionsFromUserID(profileID));\r\n return missions.length === 0;\r\n }\r\n\r\n async hardDeleteUser(userID: string) {\r\n const deleted = await this.profileService.deleteProfile(userID);\r\n console.log(\"Profile hard deleted\");\r\n return deleted;\r\n }\r\n\r\n getManagerMissions(): Mission[] {\r\n if (!this.currentMissions) {\r\n return [];\r\n }\r\n return this.currentMissions.filter((mis) =>\r\n this.managers.includes(mis.role),\r\n );\r\n }\r\n\r\n getAvalableLevelsForCurrentUser(): LevelStatus[] {\r\n if (!this.currentMissions) {\r\n return [LevelStatus.MINIMUM];\r\n }\r\n const levels = enumToArray(LevelStatus);\r\n const highestLevel = getHighestLevelForMissions(this.currentMissions);\r\n\r\n return levels.filter((level) =>\r\n getLevelsBelow(highestLevel).includes(level),\r\n );\r\n }\r\n\r\n getAvailableRolesForCurrentUser(): RoleStatus[] {\r\n if (!this.currentMissions) {\r\n return [RoleStatus.VISITOR];\r\n }\r\n const roles = enumToArray(RoleStatus);\r\n const highestRole = getHighestRoleForMissions(this.currentMissions);\r\n return roles.filter((role) =>\r\n getRolesBelowForManager(highestRole).includes(role),\r\n );\r\n }\r\n\r\n /** Test if the user have the role given in parameter : \"roleStatus\" */\r\n isRole(roleStatus: RoleStatus): boolean {\r\n if (!this.currentMissions) {\r\n return false;\r\n }\r\n return this.currentMissions.some((m) => m.role === roleStatus);\r\n }\r\n\r\n isGuide(spaceID: string = null): boolean {\r\n if (spaceID) {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.GUIDE_MUSEUM;\r\n }\r\n }\r\n return this.isRole(RoleStatus.GUIDE_MUSEUM);\r\n }\r\n\r\n isMuseumVisitor(spaceID: string = null): boolean {\r\n if (spaceID) {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.VISITOR_MUSEUM;\r\n }\r\n }\r\n return this.isRole(RoleStatus.VISITOR_MUSEUM);\r\n }\r\n\r\n isOccupant(): boolean {\r\n return this.isRole(RoleStatus.OCCUPANT);\r\n }\r\n\r\n isVisitor(spaceID: string = null): boolean {\r\n if (spaceID) {\r\n const mission = this.getMissionForSpace(spaceID);\r\n if (mission) {\r\n return mission.role === RoleStatus.VISITOR;\r\n }\r\n }\r\n return this.isRole(RoleStatus.VISITOR);\r\n }\r\n\r\n isMuseumUser(spaceID: string = null): boolean {\r\n return this.isGuide(spaceID) || this.isMuseumVisitor(spaceID);\r\n }\r\n\r\n hasOnlyMuseumRole(): boolean {\r\n if (this.currentMissions) {\r\n return this.currentMissions.every(\r\n (m) =>\r\n m.role === RoleStatus.GUIDE_MUSEUM ||\r\n m.role === RoleStatus.VISITOR_MUSEUM,\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n async profileForMail(mail: string): Promise<Profile> {\r\n const usersWithMail = await this.profileService.getUsersForMail(mail);\r\n return usersWithMail.length > 0 ? usersWithMail[0] : null;\r\n }\r\n\r\n currentOrderedOrgList(): Organisation[] {\r\n if (!this.currentMissions) {\r\n return [];\r\n }\r\n const orderedOrgList = this.currentMissions.map(\r\n (mis) => mis.orderedOrganisation,\r\n );\r\n return filterUniqueArrayByID(orderedOrgList);\r\n }\r\n\r\n userHasAccessToAllZonesInSpace(spaceID: string): boolean {\r\n const missionsForSpace = this.currentMissions.filter(\r\n (mis) => mis.spaceID === spaceID,\r\n );\r\n return missionsForSpace.some(\r\n (mission) =>\r\n !mission.zoneID || (mission.zone && !mission.zone.parentID),\r\n );\r\n }\r\n\r\n async logoutCurrentAndSignOutAuth() {\r\n await this.profileService.updateProfile({\r\n id: this.cu.id,\r\n token: null,\r\n });\r\n this.cu = null;\r\n this.currentMissions = null;\r\n this.isChanged.next(false);\r\n await Auth.signOut();\r\n }\r\n\r\n async logoutCurrentWihtoutAuth() {\r\n await this.profileService.updateProfile({\r\n id: this.cu.id,\r\n token: null,\r\n });\r\n this.cu = null;\r\n this.currentMissions = null;\r\n this.isChanged.next(false);\r\n }\r\n\r\n async checkAccessToken(jwtToken: string): Promise<boolean> {\r\n const now = DateTime.local();\r\n // console.log(\"now\", now);\r\n // console.log(\"in one hour\", now.plus({ hours: 1 }).toMillis());\r\n if (this.cu.token && this.cu.tokenExpiredAt > now.toMillis()) {\r\n // check token\r\n if (this.cu.token === jwtToken) {\r\n console.log(\"same aws token\");\r\n return true;\r\n }\r\n alert(this.translate.instant(\"auth.error.activeToken\"));\r\n return false;\r\n }\r\n await this.profileService.updateProfile({\r\n id: this.cu.id,\r\n tokenExpiredAt: now.plus({ minutes: 5 }).toMillis(),\r\n token: jwtToken,\r\n status: ProfileStatus.ACTIVE,\r\n });\r\n return true;\r\n }\r\n\r\n async clearUserToken(id) {\r\n await this.profileService.updateProfile({\r\n id: id,\r\n token: null,\r\n });\r\n }\r\n\r\n updateCurrentUser(profile: Profile) {\r\n this.cu = new ProfileEntity(profile);\r\n this.isChanged.next(true);\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { DbObjectType, Zone } from \"../../types.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ZoneService {\r\n API: any; //AWS APIService\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any, private userService: BaseUserService) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getZonesBySpace(spaceID: string): Promise<Array<Zone>> {\r\n const list: Zone[] = [];\r\n if (this.API.__proto__.hasOwnProperty('ZonesBySpace')) {\r\n const zones = await this.API.__proto__.ZonesBySpace(spaceID);\r\n if (zones) {\r\n for (const zone of zones.items) {\r\n const zoneObject = { ...zone } as Zone;\r\n zoneObject.virtual = this.zoneIsVirtual(zone);\r\n list.push(zoneObject);\r\n }\r\n }\r\n return list;\r\n } else {\r\n throw new Error('ZonesBySpace not implemented');\r\n }\r\n \r\n }\r\n\r\n async getZonesBySpaceForUser(spaceID: string): Promise<Zone[]> {\r\n const missionForLocation = this.userService.currentMission(spaceID);\r\n const list = [];\r\n if (missionForLocation && missionForLocation.zoneID) {\r\n const allowedZone = await this.getZone(missionForLocation.zoneID);\r\n allowedZone.virtual = this.zoneIsVirtual(allowedZone);\r\n if (allowedZone.parent) {\r\n // list.push(allowedZone.parent);\r\n } else {\r\n // the whole building is authorized\r\n return this.getZonesBySpace(spaceID);\r\n }\r\n list.push(allowedZone);\r\n const children = await this.API.ListZones({\r\n parentID: { eq: allowedZone.id },\r\n });\r\n if (children.items.length > 0) {\r\n for (const child of children.items) {\r\n const childZone = { ...child } as Zone;\r\n childZone.virtual = this.zoneIsVirtual(child);\r\n list.push(childZone);\r\n }\r\n }\r\n } else {\r\n return this.getZonesBySpace(spaceID);\r\n }\r\n return list;\r\n }\r\n\r\n async filterZonesIDsForUser(zones: Zone[]): Promise<Zone[]> {\r\n const { spaceID } = zones[0];\r\n const zoneIDs = new Set(zones.map((zone) => zone.id));\r\n const allowedZones = await this.getZonesBySpaceForUser(spaceID);\r\n const filteredZones = allowedZones.filter((zone) =>\r\n zoneIDs.has(zone.id),\r\n );\r\n return filteredZones;\r\n }\r\n\r\n async deleteZone(zoneID: string): Promise<Zone> {\r\n return this.API.__proto__.DeleteZone({ id: zoneID });\r\n }\r\n\r\n async getZonesForSweepForSpace(\r\n sweepID: string,\r\n spaceID: string,\r\n ): Promise<Zone[]> {\r\n const zonesSpace = (await this.API.__proto__.ZonesBySpace(spaceID)).items;\r\n return zonesSpace.filter(\r\n (zone) => zone.sweepIDs && zone.sweepIDs.includes(sweepID),\r\n );\r\n }\r\n\r\n // // eslint-disable-next-line class-methods-use-this\r\n sortZonesFromChildToParent(zonesToSort: Zone[]) {\r\n // get default\r\n const defaultZone = zonesToSort.find((z) => !z.parentID);\r\n if (defaultZone) {\r\n const indexOf = zonesToSort.indexOf(defaultZone);\r\n zonesToSort.splice(indexOf, 1);\r\n }\r\n const zones = zonesToSort.sort((a, b) => {\r\n if (a.parentID === b.id) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n // so far by number of navigation points in them\r\n // const zones = zonesToSort.sort(\r\n // (a, b) => a.navigations.items.length - b.navigations.items.length,\r\n // );\r\n if (defaultZone) {\r\n zones.push(defaultZone);\r\n }\r\n return zones;\r\n }\r\n\r\n async getZonesForObject(\r\n object: DbObjectType,\r\n ): Promise<Zone[]> {\r\n if (object.pois.items && object.pois.items.length > 0) {\r\n const [poi] = object.pois.items;\r\n if (poi.matterportSweepID) {\r\n const zones = await this.getZonesForSweepForSpace(\r\n poi.matterportSweepID,\r\n object.spaceID,\r\n );\r\n return zones;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async createVirtualZone(zoneInput: Zone): Promise<Zone> {\r\n zoneInput.sweepIDs = [];\r\n const zone = await this.API.__proto__.CreateZone(zoneInput);\r\n console.log(\"virtual zone created\", zone);\r\n return zone;\r\n }\r\n\r\n zoneIsVirtual(zone: Zone): boolean {\r\n if (!zone.sweepIDs) {\r\n return true;\r\n }\r\n if (\r\n (zone.tags && zone.tags.includes(\"virtual\")) ||\r\n zone.sweepIDs.length === 0\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n async getModel3DForZone(zoneID: string): Promise<string> {\r\n const zone = await this.API.__proto__.GetZone(zoneID);\r\n if (zone.nodeIDs) {\r\n const node = await this.API.__proto__.GetNode(zone.nodeIDs[0]);\r\n return node.model3D;\r\n }\r\n return null;\r\n }\r\n\r\n async getZone(zoneID: string): Promise<Zone> {\r\n return this.API.__proto__.GetZone(zoneID);\r\n }\r\n\r\n async getDefaultZoneForSpace(spaceID: string): Promise<Zone> {\r\n return this.getZonesBySpace(spaceID).then(async (zones) => {\r\n const zonesBuilding = zones.filter(\r\n (zone) => zone.layer && zone.layer.name === \"BUILDING\",\r\n );\r\n if (zonesBuilding.length === 1) {\r\n return zonesBuilding[0];\r\n }\r\n const parentZone = zones.find((zone) => !zone.parentID);\r\n return parentZone;\r\n });\r\n }\r\n\r\n async create(input: Zone): Promise<Zone> {\r\n return this.API.__proto__.CreateZone(input);\r\n }\r\n\r\n // async getSortedZonesForSweepForUser(\r\n // sweep: string,\r\n // spaceID: string,\r\n // ): Promise<Zone[]> {\r\n // if (!spaceID) {\r\n // return [];\r\n // }\r\n // const zones = await this.getZonesForSweepForSpace(sweep, spaceID);\r\n // if (zones.length === 0) {\r\n // return [];\r\n // }\r\n // const filteredZones = await this.filterZonesIDsForUser(zones);\r\n // if (filteredZones.length > 0) {\r\n // let zonesSorted = this.sortZonesFromChildToParent(filteredZones);\r\n // zonesSorted = zonesSorted.filter((zone) => zone !== undefined);\r\n // return zonesSorted;\r\n // }\r\n // return [];\r\n // }\r\n\r\n async updateZone(input: any): Promise<Zone> {\r\n return this.API.__proto__.UpdateZone(input);\r\n }\r\n\r\n async getZonesForNodeForSpace(\r\n nodeID: string,\r\n spaceID: string,\r\n ): Promise<Zone[]> {\r\n return this.API.__proto__.ZonesBySpace(spaceID).then(async (zones) => {\r\n const filteredZones = zones.items.filter(\r\n (zone) => zone.nodeIDs && zone.nodeIDs.includes(nodeID),\r\n );\r\n return filteredZones;\r\n });\r\n }\r\n}\r\n","/* eslint-disable no-case-declarations */\r\n/* eslint-disable no-await-in-loop */\r\n/* eslint-disable guard-for-in */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Subject, Subscription } from \"rxjs\";\r\nimport { getLevelsBelow, getHighestLevelForMissions, getHighestRoleForMissions, filterUniqueArrayByID } from \"../helpers.service\";\r\nimport { Zone, Equipment, LevelStatus, Measurement, Mission, Organisation, PoiType, ProfileEntity, RoleStatus, Space, Ticket, DbObjectType, Feature, Comment, VisitTemplate } from \"../types.service\";\r\nimport { PoiService } from \"./models/poi.service\";\r\nimport { ZoneService } from \"./models/zone.service\";\r\nimport { BaseUserService } from \"./user.service\";\r\nenum FilterType {\r\n DOMAIN = \"DOMAIN\",\r\n LEVEL = \"LEVEL\",\r\n ROLE = \"ROLE\",\r\n ZONE = \"ZONE\",\r\n SPACE = \"SPACE\",\r\n HASHTAG = \"HASHTAG\",\r\n}\r\nimport levenshtein from 'js-levenshtein';\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class FilterService {\r\n private updateDateFilter: Subject<Date[]> = new Subject();\r\n\r\n public currentDateFilter: Date[];\r\n\r\n constructor(\r\n private userService: BaseUserService,\r\n private zoneService: ZoneService,\r\n private poiService: PoiService,\r\n ) {}\r\n\r\n filterTicketsByDomain(ticketsToFilter: Ticket[], domain: string) {\r\n return ticketsToFilter.filter((tic) => tic.domainID === domain);\r\n }\r\n\r\n filterObjectsByLevel(objectsToFilter: any[], level: LevelStatus): any[] {\r\n const visibleLevels = getLevelsBelow(level);\r\n const filtered = objectsToFilter.filter((tic) =>\r\n visibleLevels.includes(tic.level),\r\n );\r\n return filtered;\r\n }\r\n\r\n filterTicketsForMission(\r\n ticketsToFilter: Ticket[],\r\n mission: Mission,\r\n ): Ticket[] {\r\n const managerRoles: RoleStatus[] = [\r\n RoleStatus.MANAGER,\r\n RoleStatus.ADMIN,\r\n RoleStatus.OWNER,\r\n ];\r\n if (!managerRoles.includes(mission.role)) {\r\n if (mission.role === RoleStatus.SERVICE) {\r\n // SERVICE can see tickets to which he is assigned\r\n const ticketsAssigned = [];\r\n for (const t of ticketsToFilter) {\r\n if (t.assignees.items.length > 0) {\r\n for (const assignment of t.assignees.items) {\r\n if (assignment.missionID === mission.id) {\r\n ticketsAssigned.push(t);\r\n }\r\n }\r\n }\r\n }\r\n return ticketsAssigned;\r\n }\r\n // OCCUPANT and VISITOR can see only tickets that they created\r\n return ticketsToFilter.filter((ticket) => {\r\n return ticket.ownerMissionID === mission.id;\r\n });\r\n }\r\n return ticketsToFilter;\r\n }\r\n\r\n getFiltersForRole(role: RoleStatus): FilterType[] {\r\n switch (role) {\r\n case RoleStatus.ADMIN:\r\n return [FilterType.LEVEL];\r\n case RoleStatus.MANAGER:\r\n return [FilterType.ZONE, FilterType.LEVEL];\r\n case RoleStatus.OWNER:\r\n return [FilterType.ZONE, FilterType.LEVEL];\r\n case RoleStatus.SERVICE:\r\n return [\r\n // FilterType.ZONE,\r\n // FilterType.LEVEL,\r\n // FilterType.DOMAIN,\r\n FilterType.ROLE, // that is the most severe filter\r\n ];\r\n case RoleStatus.OCCUPANT:\r\n return [\r\n FilterType.ZONE,\r\n FilterType.DOMAIN,\r\n FilterType.ROLE,\r\n FilterType.LEVEL,\r\n FilterType.HASHTAG,\r\n ];\r\n case RoleStatus.VISITOR:\r\n return [\r\n FilterType.ZONE,\r\n FilterType.LEVEL,\r\n FilterType.DOMAIN,\r\n FilterType.ROLE,\r\n FilterType.HASHTAG,\r\n ];\r\n case RoleStatus.VISITOR_MUSEUM:\r\n return [FilterType.ZONE, FilterType.LEVEL, FilterType.HASHTAG];\r\n case RoleStatus.GUIDE_MUSEUM:\r\n return [FilterType.LEVEL];\r\n default:\r\n return [FilterType.LEVEL];\r\n }\r\n }\r\n\r\n async filterTicketsForCurrentUserInSpace(\r\n tickets: Ticket[],\r\n spaceID: string,\r\n ): Promise<Ticket[]> {\r\n const finalTickets: Ticket[] = [];\r\n let domFiltered: Ticket[] = tickets;\r\n let roleFiltered: Ticket[] = tickets;\r\n let levelFiltered: Ticket[] = tickets;\r\n let zoneFiltered: Ticket[] = tickets;\r\n const missions = this.userService.currentMissions;\r\n if (missions) {\r\n const currentSpaceMissions = missions.filter(\r\n (m) => m.spaceID === spaceID,\r\n );\r\n if (currentSpaceMissions.length > 0) {\r\n const highestLelel =\r\n getHighestLevelForMissions(currentSpaceMissions);\r\n const highestRole =\r\n getHighestRoleForMissions(currentSpaceMissions);\r\n // console.log(\"Highest level: \", highestLelel, \", Highest Role: \", highestRole)\r\n\r\n const filters = this.getFiltersForRole(highestRole);\r\n for (const filter of filters) {\r\n if (filter === FilterType.DOMAIN) {\r\n let domains: string[] = [];\r\n for (const m of currentSpaceMissions) {\r\n if (m.domains) {\r\n domains = [...domains, ...m.domains];\r\n }\r\n }\r\n let allDomainsFiltered = [];\r\n for (const d of domains) {\r\n const currentDomFiltered =\r\n this.filterTicketsByDomain(tickets, d);\r\n allDomainsFiltered = [\r\n ...allDomainsFiltered,\r\n ...currentDomFiltered,\r\n ];\r\n }\r\n domFiltered = allDomainsFiltered;\r\n }\r\n if (filter === FilterType.ROLE) {\r\n const highestRoleMission = currentSpaceMissions.find(\r\n (m) => m.role === highestRole,\r\n );\r\n roleFiltered = this.filterTicketsForMission(\r\n tickets,\r\n highestRoleMission,\r\n );\r\n }\r\n\r\n if (filter === FilterType.LEVEL) {\r\n levelFiltered = this.filterObjectsByLevel(\r\n tickets,\r\n highestLelel,\r\n );\r\n }\r\n\r\n if (filter === FilterType.ZONE) {\r\n zoneFiltered = await this.applyZoneFilterForMissions(\r\n currentSpaceMissions,\r\n tickets,\r\n );\r\n }\r\n }\r\n // keep only tickets present in all filtered arrays\r\n // console.log(domFiltered);\r\n // console.log(roleFiltered);\r\n // console.log(levelFiltered);\r\n // console.log(zoneFiltered);\r\n for (const tic of levelFiltered) {\r\n if (\r\n domFiltered.includes(tic) &&\r\n roleFiltered.includes(tic) &&\r\n zoneFiltered.includes(tic)\r\n ) {\r\n finalTickets.push(tic);\r\n }\r\n }\r\n }\r\n }\r\n // console.log(finalTickets);\r\n return finalTickets;\r\n }\r\n\r\n subscribeToDataFilterUpdate(\r\n next?: (value: any) => void,\r\n error?: (error: any) => void,\r\n complete?: () => void,\r\n ): Subscription {\r\n const s = this.updateDateFilter.subscribe(next, error, complete);\r\n return s;\r\n }\r\n\r\n dateFilterUpdated(dateRange: Date[] | null) {\r\n this.currentDateFilter = dateRange;\r\n this.updateDateFilter.next(dateRange);\r\n }\r\n\r\n filterObjectsForDateRange(objects: any[], dateRange: Date[]): any[] {\r\n return objects.filter((object) => {\r\n const createdAtDate = new Date(object.createdAt);\r\n return (\r\n createdAtDate >= dateRange[0] && createdAtDate <= dateRange[1]\r\n );\r\n });\r\n }\r\n\r\n filterMeasurementsForDateRange(\r\n measurements: Measurement[],\r\n dateRange: Date[],\r\n ): Measurement[] {\r\n return measurements.filter((measure) => {\r\n const createdAtDate = new Date(measure.comment.createdAt);\r\n return (\r\n createdAtDate >= dateRange[0] && createdAtDate <= dateRange[1]\r\n );\r\n });\r\n }\r\n\r\n async filterObjectsForZone(\r\n objects: any[],\r\n zoneID: string = null,\r\n zone: Zone = null,\r\n ): Promise<any[]> {\r\n const filteredObjects = [];\r\n await Promise.all(\r\n objects.map(async (object) => {\r\n const [poi] = object.pois.items;\r\n if (poi && zone) {\r\n if (zone.sweepIDs && zone.sweepIDs.includes(poi.matterportSweepID)) {\r\n if (this.poiService.poiIsVirtual(poi) && zone.layer && zone.layer.name === \"FLOOR\" ) {\r\n // we include in Floor zone only\r\n filteredObjects.push(object);\r\n }\r\n if (!this.poiService.poiIsVirtual(poi)) {\r\n filteredObjects.push(object);\r\n }\r\n }\r\n }\r\n if (poi && !zone && zoneID) {\r\n const zones = await this.zoneService.getZonesForObject(\r\n object,\r\n );\r\n if (\r\n zones &&\r\n zones.some(\r\n (zone_) =>\r\n zone_.id === zoneID ||\r\n zone_.parentID === zoneID,\r\n )\r\n ) {\r\n filteredObjects.push(object);\r\n }\r\n }\r\n }),\r\n );\r\n return filteredObjects;\r\n }\r\n\r\n filterEquipmentsByDomainList(\r\n equipments: Equipment[],\r\n domainIDList: string[],\r\n ): Equipment[] {\r\n let filtered = [];\r\n const filteredByDomain = equipments.filter((equip) =>\r\n domainIDList.includes(equip.domainID),\r\n );\r\n filtered = [...filtered, ...filteredByDomain];\r\n const filteredByParentDomain = equipments.filter(\r\n (equip) =>\r\n equip.domain &&\r\n equip.domain.parentID &&\r\n domainIDList.includes(equip.domain.parentID),\r\n );\r\n filtered = [...filtered, ...filteredByParentDomain];\r\n return filterUniqueArrayByID(filtered);\r\n }\r\n\r\n filterEquipmentsForTerm(equips: Equipment[], term: string): Equipment[] {\r\n // filter domains\r\n let byDomain = equips.filter((eq) => {\r\n if (eq.domain && eq.domain.name) {\r\n const normalizedDomain = eq.domain.name.toLowerCase();\r\n const lev = levenshtein(normalizedDomain, term);\r\n return lev <= 2 || normalizedDomain.includes(term);\r\n }\r\n return false;\r\n });\r\n const byParentDomain = equips.filter((eq) => {\r\n if (eq.domain && eq.domain.parentID) {\r\n const normalizedParent = eq.domain.parent.name.toLowerCase();\r\n const lev = levenshtein(normalizedParent, term);\r\n return lev <= 2 || normalizedParent.includes(term);\r\n }\r\n return false;\r\n });\r\n byDomain = [...byDomain, ...byParentDomain];\r\n // filter name\r\n let byName = [];\r\n const terms = term.split(\" \").filter((token) => token.length > 2);\r\n for (const eq of equips) {\r\n const words = eq.name\r\n .toLowerCase()\r\n .split(\" \")\r\n .filter((token) => token.length > 2);\r\n const matched = [];\r\n for (const token of terms) {\r\n for (const word of words) {\r\n if (levenshtein(token, word) <= 1) {\r\n matched.push(true);\r\n break;\r\n }\r\n }\r\n }\r\n if (matched.length === terms.length) {\r\n byName.push(eq);\r\n }\r\n }\r\n\r\n const byNameSimple = equips.filter((eq) =>\r\n eq.name.toLowerCase().includes(term),\r\n );\r\n byName = [...byName, ...byNameSimple];\r\n // by serial number\r\n const bySerialNumber = equips.filter(\r\n (eq) => eq.serialNumber && eq.serialNumber.toLowerCase() === term,\r\n );\r\n const result = [...byDomain, ...byName, ...bySerialNumber];\r\n return filterUniqueArrayByID(result);\r\n }\r\n\r\n filterTicketsForTerm(tickets: Ticket[], term: string): Ticket[] {\r\n // filter term in title and description\r\n const byTitle = this.filterObjectsForTerm(tickets, term);\r\n // by equipment\r\n const byEquipment = tickets.filter(\r\n (ticket) =>\r\n ticket.equipments &&\r\n this.filterEquipmentsForTerm(ticket.equipments, term).length >\r\n 0,\r\n );\r\n return filterUniqueArrayByID([...byTitle, ...byEquipment]);\r\n }\r\n\r\n filterLocationsForTerm(locations: Space[], term: string): Space[] {\r\n // by name\r\n const byName = locations.filter((loc) =>\r\n loc.name.toLowerCase().includes(term),\r\n );\r\n // by address\r\n const byAddress = locations.filter((loc) =>\r\n loc.addresses.toLowerCase().includes(term),\r\n );\r\n return filterUniqueArrayByID([...byName, ...byAddress]);\r\n }\r\n\r\n filterOrganisationsForTerm(\r\n orgs: Organisation[],\r\n term: string,\r\n ): Organisation[] {\r\n const byName = orgs.filter((org) => {\r\n const words = org.name.toLowerCase().split(\" \");\r\n return (\r\n words.some(\r\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\r\n ) || org.name.toLowerCase().includes(term)\r\n );\r\n });\r\n return byName;\r\n }\r\n\r\n filterUsersForTerm(users: ProfileEntity[], term: string) {\r\n const byName = users.filter((user) => {\r\n const words = user.displayName.toLowerCase().split(\" \");\r\n return (\r\n words.some(\r\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\r\n ) || user.displayName.toLowerCase().includes(term)\r\n );\r\n });\r\n return byName;\r\n }\r\n\r\n async filterFeaturesForCurrentUserInSpace(\r\n features: Feature[],\r\n spaceID: string,\r\n ): Promise<Feature[]> {\r\n const finalFeatures: Feature[] = [];\r\n let levelFiltered: Feature[] = features;\r\n let zoneFiltered: Feature[] = features;\r\n let hashtagFiltered: Feature[] = features;\r\n const missions = this.userService.currentMissions;\r\n if (missions) {\r\n const currentSpaceMissions = missions.filter(\r\n (m) => m.spaceID === spaceID,\r\n );\r\n if (currentSpaceMissions.length > 0) {\r\n const highestLelel =\r\n getHighestLevelForMissions(currentSpaceMissions);\r\n const highestRole =\r\n getHighestRoleForMissions(currentSpaceMissions);\r\n\r\n const filters = this.getFiltersForRole(highestRole);\r\n for (const filter of filters) {\r\n if (filter === FilterType.LEVEL) {\r\n levelFiltered = this.filterObjectsByLevel(\r\n features,\r\n highestLelel,\r\n );\r\n }\r\n if (filter === FilterType.ZONE) {\r\n zoneFiltered = await this.applyZoneFilterForMissions(\r\n currentSpaceMissions,\r\n features,\r\n );\r\n }\r\n if (filter === FilterType.HASHTAG) {\r\n hashtagFiltered =\r\n this.filterFeaturesByHashtagsAndLocale(\r\n currentSpaceMissions,\r\n features,\r\n );\r\n }\r\n }\r\n for (const feature of levelFiltered) {\r\n if (\r\n hashtagFiltered.includes(feature) &&\r\n zoneFiltered.includes(feature)\r\n ) {\r\n finalFeatures.push(feature);\r\n }\r\n }\r\n }\r\n }\r\n return finalFeatures;\r\n }\r\n\r\n filterFeaturesForTerm(features: Feature[], term: string): Feature[] {\r\n // filter term in title\r\n const byTitle = this.filterObjectsForTerm(features, term);\r\n // by comments\r\n const byComment = features.filter(\r\n (feature) =>\r\n this.filterObjectsForTerm(feature.comments.items, term).length >\r\n 0,\r\n );\r\n return filterUniqueArrayByID([...byTitle, ...byComment]);\r\n }\r\n\r\n /**\r\n *\r\n * @param objects Array of Comments, Tickets, Features. Obligatory proporties: title, description\r\n * @param term string\r\n */\r\n filterObjectsForTerm(objects: any[], term: string): any[] {\r\n // filter term in title\r\n const byTitle = objects.filter((feature) => {\r\n const words = feature.title.toLowerCase().split(\" \");\r\n return (\r\n words.some(\r\n (word) => word.length > 2 && levenshtein(word, term) <= 1,\r\n ) || feature.title.toLowerCase().includes(term)\r\n );\r\n });\r\n // term present in description\r\n const byDescription = objects.filter(\r\n (feature) =>\r\n feature.description &&\r\n feature.description.toLowerCase().includes(term),\r\n );\r\n return filterUniqueArrayByID([...byTitle, ...byDescription]);\r\n }\r\n\r\n filterMissionByStartTimeDateForDateRange(\r\n missions: any[],\r\n dateRange: Date[],\r\n ): any[] {\r\n return missions.filter((mission) => {\r\n const startDateTime = new Date(mission.startDateTime);\r\n return (\r\n startDateTime >= dateRange[0] && startDateTime <= dateRange[1]\r\n );\r\n });\r\n }\r\n\r\n async applyZoneFilterForMissions(\r\n currentSpaceMissions: Mission[],\r\n objects: any[],\r\n ): Promise<any[]> {\r\n const allowedZones = [];\r\n for (const mission of currentSpaceMissions) {\r\n if (mission.zoneID) {\r\n allowedZones.push(mission.zoneID);\r\n }\r\n }\r\n if (allowedZones.length === currentSpaceMissions.length) {\r\n let allZoneFiltered = [];\r\n await Promise.all(\r\n allowedZones.map(async (zoneID) => {\r\n const currentZoneFiltered = await this.filterObjectsForZone(\r\n objects,\r\n zoneID,\r\n );\r\n allZoneFiltered = [\r\n ...allZoneFiltered,\r\n ...currentZoneFiltered,\r\n ];\r\n }),\r\n );\r\n return filterUniqueArrayByID(allZoneFiltered);\r\n }\r\n return objects;\r\n }\r\n\r\n async filterEquipmentsForCurrentUserInSpace(\r\n spaceID: string,\r\n equips: Equipment[],\r\n ): Promise<Equipment[]> {\r\n const finalEquips: Equipment[] = [];\r\n let domFiltered: Equipment[] = equips;\r\n const roleFiltered: Equipment[] = equips;\r\n const levelFiltered: Equipment[] = equips;\r\n let zoneFiltered: Equipment[] = equips;\r\n const missions = this.userService.currentMissions;\r\n if (missions) {\r\n const currentSpaceMissions = missions.filter(\r\n (m) => m.spaceID === spaceID,\r\n );\r\n if (currentSpaceMissions.length > 0) {\r\n const highestLelel =\r\n getHighestLevelForMissions(currentSpaceMissions);\r\n const highestRole =\r\n getHighestRoleForMissions(currentSpaceMissions);\r\n // console.log(\"Highest level: \", highestLelel, \", Highest Role: \", highestRole)\r\n\r\n const filters = this.getFiltersForRole(highestRole);\r\n for (const filter of filters) {\r\n if (filter === FilterType.DOMAIN) {\r\n let domains: string[] = [];\r\n for (const m of currentSpaceMissions) {\r\n if (m.domains) {\r\n domains = [...domains, ...m.domains];\r\n }\r\n }\r\n let allDomainsFiltered = [];\r\n const currentDomFiltered =\r\n this.filterEquipmentsByDomainList(equips, domains);\r\n allDomainsFiltered = [\r\n ...allDomainsFiltered,\r\n ...currentDomFiltered,\r\n ];\r\n domFiltered = allDomainsFiltered;\r\n }\r\n if (filter === FilterType.ROLE) {\r\n // const highestRoleMission = currentSpaceMissions.find(\r\n // (m) => m.role === highestRole,\r\n // );\r\n // TODO\r\n }\r\n\r\n if (filter === FilterType.LEVEL) {\r\n // TODO, equipment does not have level\r\n }\r\n\r\n if (filter === FilterType.ZONE) {\r\n zoneFiltered = await this.applyZoneFilterForMissions(\r\n currentSpaceMissions,\r\n equips,\r\n );\r\n }\r\n }\r\n for (const tic of levelFiltered) {\r\n if (\r\n domFiltered.includes(tic) &&\r\n roleFiltered.includes(tic) &&\r\n zoneFiltered.includes(tic)\r\n ) {\r\n finalEquips.push(tic);\r\n }\r\n }\r\n }\r\n }\r\n return finalEquips;\r\n }\r\n\r\n async filterMeasurementsForCurrentUserInSpace(\r\n spaceID: string,\r\n comments: Comment[],\r\n ): Promise<Comment[]> {\r\n let finalMeasurements: Comment[] = [];\r\n let zoneFiltered: Comment[] = comments;\r\n const missions = this.userService.currentMissions;\r\n if (missions) {\r\n const currentSpaceMissions = missions.filter(\r\n (m) => m.spaceID === spaceID,\r\n );\r\n if (currentSpaceMissions.length > 0) {\r\n const highestRole =\r\n getHighestRoleForMissions(currentSpaceMissions);\r\n\r\n const filters = this.getFiltersForRole(highestRole);\r\n for (const filter of filters) {\r\n if (filter === FilterType.ZONE) {\r\n zoneFiltered = await this.applyZoneFilterForMissions(\r\n currentSpaceMissions,\r\n comments,\r\n );\r\n }\r\n }\r\n finalMeasurements = zoneFiltered;\r\n }\r\n }\r\n return finalMeasurements;\r\n }\r\n\r\n async isObjectAllowedForUserInSpace(\r\n object: Object,\r\n spaceID: string,\r\n ): Promise<boolean> {\r\n const mission = this.userService.currentMission(spaceID);\r\n const filters = this.getFiltersForRole(mission.role);\r\n for (const filter of filters) {\r\n if (\r\n filter === FilterType.LEVEL &&\r\n Object.prototype.hasOwnProperty.call(object, \"level\")\r\n ) {\r\n const levelFiltered = this.filterObjectsByLevel(\r\n [object],\r\n mission.level,\r\n );\r\n if (levelFiltered.length === 0) {\r\n return false;\r\n }\r\n }\r\n if (filter === FilterType.ZONE) {\r\n const zoneFiltered = await this.applyZoneFilterForMissions(\r\n [mission],\r\n [object],\r\n );\r\n if (zoneFiltered.length === 0) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n filterTemplatesForTerm(missions: Mission[], term: string): Mission[] {\r\n // term present in description\r\n const byDescription = missions.filter(\r\n (mis) =>\r\n mis.description && mis.description.toLowerCase().includes(term),\r\n );\r\n // by user lastName which is the name of the visit:\r\n // metadata: \"{\\\"firstName\\\":\\\"\\\",\\\"lastName\\\":\\\"Visite du 5 Juillet\\\"}\"\r\n const userProfiles = missions.map((mis) => new ProfileEntity(mis.user));\r\n const byUserLastname = this.filterUsersForTerm(userProfiles, term);\r\n const userIds = new Set(byUserLastname.map((user) => user.id));\r\n const missionsByUser = missions.filter((mis) =>\r\n userIds.has(mis.userID),\r\n );\r\n return filterUniqueArrayByID([...byDescription, ...missionsByUser]);\r\n }\r\n\r\n async filterObjectsForSweep(\r\n objects: any[],\r\n objectType: PoiType,\r\n sweep: string,\r\n ): Promise<any[]> {\r\n let filtered = [];\r\n switch (objectType) {\r\n case PoiType.EQUIPMENT:\r\n const pois =\r\n await this.poiService.getPoisByMatterportSweepByType(\r\n sweep,\r\n objectType,\r\n );\r\n const equipIDs = new Set(pois.map((poi) => poi.elementID));\r\n filtered = objects.filter((object) => equipIDs.has(object.id));\r\n break;\r\n default:\r\n break;\r\n }\r\n return filtered;\r\n }\r\n\r\n filterFeaturesByHashtagsAndLocale(\r\n currentSpaceMissions: Mission[],\r\n features: Feature[],\r\n ): Feature[] {\r\n const [currentMission] = currentSpaceMissions;\r\n // filter by locale\r\n let filteredLocale = [...features];\r\n if (currentMission.locale) {\r\n filteredLocale = features.filter(\r\n (feature) =>\r\n feature.locale && feature.locale === currentMission.locale,\r\n );\r\n }\r\n // filter by hashtags\r\n if (currentMission.hashtags && currentMission.hashtags.length > 0) {\r\n const filteredByHashtags = [];\r\n for (const feature of filteredLocale) {\r\n if (!feature.hashtags || feature.hashtags.length === 0) {\r\n // Feature without hashtag is available for everybody\r\n filteredByHashtags.push(feature);\r\n } else if (\r\n currentMission.hashtags.every((hashtag) =>\r\n feature.hashtags.includes(hashtag),\r\n )\r\n ) {\r\n filteredByHashtags.push(feature);\r\n }\r\n }\r\n return filteredByHashtags;\r\n }\r\n return filteredLocale;\r\n }\r\n\r\n filterFeaturesForMissionWithoutZone(\r\n features: Feature[],\r\n mission: Mission,\r\n ): Feature[] {\r\n const finalFeatures: Feature[] = [];\r\n let levelFiltered: Feature[] = features;\r\n let zoneFiltered: Feature[] = features;\r\n let hashtagFiltered: Feature[] = features;\r\n\r\n const filters = this.getFiltersForRole(mission.role);\r\n for (const filter of filters) {\r\n if (filter === FilterType.LEVEL) {\r\n levelFiltered = this.filterObjectsByLevel(\r\n features,\r\n mission.level,\r\n );\r\n }\r\n // if (filter === FilterType.ZONE) {\r\n // zoneFiltered = await this.applyZoneFilterForMissions(\r\n // currentSpaceMissions,\r\n // features,\r\n // );\r\n // }\r\n if (filter === FilterType.HASHTAG) {\r\n hashtagFiltered =\r\n this.filterFeaturesByHashtagsAndLocale(\r\n [mission],\r\n features,\r\n );\r\n }\r\n }\r\n for (const feature of levelFiltered) {\r\n if (\r\n hashtagFiltered.includes(feature) &&\r\n zoneFiltered.includes(feature)\r\n ) {\r\n finalFeatures.push(feature);\r\n }\r\n }\r\n return finalFeatures;\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Navigation, Zone } from \"../../types.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { ZoneService } from \"./zone.service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class NavigationService {\r\n\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any,\r\n private userService: BaseUserService,\r\n private zoneService: ZoneService) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async createNavigation(navInput: Navigation): Promise<Navigation> {\r\n return this.API.__proto__.CreateNavigation(navInput);\r\n }\r\n\r\n async deleteNavigation(id: string): Promise<Navigation> {\r\n return this.API.__proto__.DeleteNavigation({ id });\r\n }\r\n\r\n async getNavigationsForNode(nodeID: string): Promise<Navigation[]> {\r\n return this.API.__proto__.NavigationsByNode(nodeID, null, null, 500).then(\r\n (navs) => navs.items,\r\n );\r\n }\r\n\r\n async getNavigation(id: string): Promise<Navigation> {\r\n return this.API.__proto__.GetNavigation(id);\r\n }\r\n\r\n async getSweepsIDsForSpace(spaceID: string): Promise<string[]> {\r\n const zones = await this.zoneService.getZonesBySpace(spaceID);\r\n const zonesWithSweeps = zones.filter((zone) => zone.sweepIDs && zone.sweepIDs.length > 0);\r\n const allSweeps = zonesWithSweeps.flatMap((zone) => zone.sweepIDs);\r\n return [...new Set(allSweeps)];\r\n }\r\n\r\n async getAllowedSweepsIDsForUserInSpace(\r\n spaceID: string,\r\n ): Promise<string[]> {\r\n const missionsForSpace = this.userService.currentMissions.filter(\r\n (mis) => mis.spaceID === spaceID,\r\n );\r\n let navIDs = [];\r\n if (this.userService.userHasAccessToAllZonesInSpace(spaceID)) {\r\n return this.getSweepsIDsForSpace(spaceID);\r\n }\r\n await Promise.all(\r\n missionsForSpace.map(async (mission) => {\r\n navIDs = [...navIDs, ...mission.zone.sweepIDs];\r\n }),\r\n );\r\n return navIDs;\r\n }\r\n\r\n async getForbiddenNavigationIDsForUserInSpace(\r\n spaceID: string,\r\n ): Promise<string[]> {\r\n const allowed = await this.getAllowedSweepsIDsForUserInSpace(spaceID);\r\n const allNavs = await this.getSweepsIDsForSpace(spaceID);\r\n const difference = allNavs.filter((x) => !allowed.includes(x));\r\n return difference.length > 0 ? difference : null;\r\n }\r\n\r\n async getNavigationsForMatterportIDForSpace(\r\n matterportID: string,\r\n spaceID: string,\r\n ): Promise<Navigation[]> {\r\n return this.API.__proto__.NavigationsByMatterportIDBySpace(matterportID, {\r\n eq: spaceID,\r\n }).then((navs) => navs.items);\r\n }\r\n\r\n async getNavigationsForZone(zone: Zone): Promise<Navigation[]> {\r\n const responseNavs = [];\r\n await Promise.all(\r\n zone.sweepIDs.map(async (sweepID) => {\r\n const navs = await this.getNavigationsForMatterportIDForSpace(\r\n sweepID,\r\n zone.spaceID,\r\n );\r\n if (navs.length > 0) {\r\n responseNavs.push(navs[0]);\r\n }\r\n }),\r\n );\r\n return responseNavs;\r\n }\r\n\r\n async updateNavigation(\r\n navInput: any,\r\n ): Promise<Navigation> {\r\n return this.API.__proto__.UpdateNavigation(navInput);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Equipment, Feature, POI, Ticket } from \"../../types.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseObjectService {\r\n constructor(\r\n protected poiService: PoiService,\r\n private navigationService: NavigationService,\r\n ) {}\r\n\r\n async getModel3dAndSweep(object: Feature | Ticket | Equipment): Promise<{\r\n model3D: string;\r\n sweep: string;\r\n rotation: { x: number; y: number };\r\n } | void> {\r\n return this.poiService\r\n .getPoiByElementId(object.id)\r\n .then(async (poi) => {\r\n if (poi && poi.matterportSweepID) {\r\n const navigations =\r\n await this.navigationService.getNavigationsForMatterportIDForSpace(\r\n poi.matterportSweepID,\r\n object.spaceID,\r\n );\r\n const [poiNavigation] = navigations;\r\n if (this.poiService.poiIsVirtual(poi)) {\r\n return {\r\n model3D: poiNavigation.node.model3D,\r\n sweep: null,\r\n rotation: null,\r\n };\r\n }\r\n const coordinate = JSON.parse(poi.coordinate);\r\n let rotation = null;\r\n if (coordinate.xRotation) {\r\n rotation = {\r\n x: Number(coordinate.xRotation),\r\n y: Number(coordinate.yRotation),\r\n };\r\n }\r\n return {\r\n model3D: poiNavigation.node.model3D,\r\n sweep: poi.matterportSweepID,\r\n rotation,\r\n };\r\n }\r\n return null;\r\n })\r\n .catch((error) => {\r\n return null;\r\n })\r\n }\r\n\r\n async updateIconForAllObjects(\r\n objects: Ticket[] | Feature[] | Equipment[],\r\n tagIcon: string,\r\n ): Promise<POI[]> {\r\n const IDs = [];\r\n for (const object of objects) {\r\n IDs.push(object.id);\r\n }\r\n const pois = [];\r\n await Promise.all(\r\n IDs.map(async (id) => {\r\n const poi = await this.poiService.getPoiByElementId(id);\r\n const updated = await this.poiService.updatePoi({\r\n id: poi.id,\r\n tagIcon,\r\n });\r\n pois.push(updated);\r\n }),\r\n );\r\n console.log(\"updated\", pois.length, \"pois with new icons\");\r\n return pois;\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Operation, Ticket } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class OperationService {\r\n API: any; //AWS\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getOperationsByTicketID(id: string): Promise<Operation[]> {\r\n return this.API.__proto__.OperationsByTicket(id).then((res) => res.items);\r\n }\r\n\r\n async getOperationsByEquipmentID(id: string): Promise<Operation[]> {\r\n return this.API.__proto__.OperationsByEquipment(id).then((res) => res.items);\r\n }\r\n\r\n async getTicketsByEquipmentID(id: string): Promise<Ticket[]> {\r\n const operations = await this.getOperationsByEquipmentID(id);\r\n const tickets = operations.map((operation) => operation.ticket);\r\n return tickets;\r\n }\r\n\r\n async deleteOperationsForEquipment(equipID: string): Promise<Operation[]> {\r\n const deleted = [];\r\n await this.getOperationsByEquipmentID(equipID)\r\n .then(async (operations) => {\r\n if (operations.length > 0) {\r\n await Promise.all(\r\n operations.map(async (op) => {\r\n const deletedOp = await this.API.__proto__.DeleteOperation({ id: op.id });\r\n deleted.push(deletedOp)\r\n }),\r\n );\r\n }\r\n });\r\n return deleted;\r\n }\r\n\r\n async deleteOperationsForTicket(ticketID: string) {\r\n await this.getOperationsByTicketID(ticketID)\r\n .then(async (operations) => {\r\n if (operations.length > 0) {\r\n await Promise.all(\r\n operations.map(async (op) => {\r\n await this.API.__proto__.DeleteOperation({ id: op.id });\r\n }),\r\n );\r\n }\r\n });\r\n }\r\n\r\n async deleteOperation(operationID: string): Promise<Operation> {\r\n return this.API.__proto__.DeleteOperation({ id: operationID });\r\n }\r\n\r\n async createOperation(operation: Operation): Promise<Operation> {\r\n return this.API.__proto__.CreateOperation(operation);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Inject } from \"@angular/core\";\r\nimport { dateTimeToLocalString } from \"../../helpers.service\";\r\nimport { ProfileEntity } from \"../../types.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { Event } from \"../../types.service\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class EventService {\r\n \r\n translationEventSubcriptions = {};\r\n\r\n API: any;\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any, \r\n private userService: BaseUserService,\r\n private translate: TranslateService ) {\r\n this.API = apiInjected;\r\n }\r\n\r\n /**\r\n * CRUD \r\n * */\r\n async createEvent(input: Event): Promise<Event> {\r\n return this.API.__proto__.CreateEvent(input);\r\n }\r\n\r\n async updateEvent(input: any): Promise<Event> {\r\n return this.API.__proto__.UpdateEvent(input);\r\n }\r\n\r\n async deleteEvent(eventID: string): Promise<Event> {\r\n return this.API.__proto__.DeleteEvent({id: eventID});\r\n }\r\n\r\n async getEvent(eventID: string): Promise<Event>{\r\n return this.API.__proto__.GetEvent(eventID);\r\n }\r\n\r\n /** \r\n * Custom get by GSI \r\n * */\r\n async getEventsByTicketID(ticketID: string): Promise<Event[]> {\r\n return this.API.__proto__.EventsByTicket(ticketID).then((events)=> events.items);\r\n }\r\n\r\n async getEventsByTicketIDSortedByDateDesc(ticketID: string): Promise<Event[]> {\r\n return this.API.__proto__.EventsByTicketByDate(\r\n ticketID,\r\n null,\r\n \"DESC\",\r\n ).then((events) => events.items);\r\n }\r\n\r\n async getEventsByGroup(group: string): Promise<Event[]> {\r\n return (await this.API.__proto__.EventsByGroup(group)).items;\r\n }\r\n\r\n /**\r\n * \r\n * SORTING\r\n */\r\n\r\n sortEventsByCreatedAtDateDesc(events: Event[]): Event[] {\r\n events.sort((event1, event2) => {\r\n // @ts-ignore\r\n return new Date(event2.createdAt) - new Date(event1.createdAt);\r\n });\r\n return events;\r\n }\r\n\r\n sortEventsByCreatedAtDateAsc(events: Event[]): Event[] {\r\n events.sort((event1, event2) => {\r\n // @ts-ignore\r\n return new Date(event1.createdAt) - new Date(event2.createdAt);\r\n });\r\n return events;\r\n }\r\n\r\n /**\r\n * TRANSLATIONS \r\n * */\r\n /** Apply a translation to a ticket event, with the current language */\r\n async applyTicketEventTranslate(event: Event) {\r\n const meta = await this.getTranslatedMetaEvent(event);\r\n const path = event.translationPath;\r\n if (path) {\r\n const titlePath = `${path}.title`;\r\n const descriptionPath = `${path}.description`;\r\n const value = this.translate.instant(\r\n [titlePath, descriptionPath],\r\n meta,\r\n );\r\n event.title = value[titlePath];\r\n event.description = value[descriptionPath];\r\n }\r\n }\r\n\r\n /** Unsubscribe a ticket event for his translation */\r\n ticketEventSubscribeTranslation(event: Event) {\r\n if (event.id in this.translationEventSubcriptions) {\r\n this.ticketEventUnsubscribeTranslation(event.id);\r\n }\r\n this.translationEventSubcriptions[event.id] =\r\n this.translate.onLangChange.subscribe((change) => {\r\n this.applyTicketEventTranslate(event);\r\n });\r\n this.applyTicketEventTranslate(event);\r\n }\r\n\r\n /** Unsubscribe a ticket event for his translation */\r\n ticketEventUnsubscribeTranslation(id: string) {\r\n if (id in this.translationEventSubcriptions) {\r\n this.translationEventSubcriptions[id].unsubscribe();\r\n delete this.translationEventSubcriptions[id];\r\n }\r\n }\r\n\r\n /** Generate the translated metadata of an event, according to the current language */\r\n async getTranslatedMetaEvent(event: Event): Promise<any> {\r\n let meta: any = {};\r\n\r\n const owner: ProfileEntity = await this.userService.userFromUserID(\r\n event.owner.userID,\r\n );\r\n\r\n try {\r\n if (event.metadata) meta = JSON.parse(event.metadata);\r\n } catch {}\r\n meta.firstName = owner.firstName;\r\n meta.lastName = owner.lastName;\r\n\r\n if (event.estimateStartDate) {\r\n meta.fromDate = dateTimeToLocalString(\r\n event.estimateStartDate,\r\n this.translate,\r\n );\r\n }\r\n if (event.estimateEndDate)\r\n meta.toDate = dateTimeToLocalString(\r\n event.estimateEndDate,\r\n this.translate,\r\n );\r\n\r\n if (meta.oldStatus)\r\n meta.oldStatus = this.translate.instant(meta.oldStatus);\r\n if (meta.newStatus)\r\n meta.newStatus = this.translate.instant(meta.newStatus);\r\n if (meta.type) meta.type = this.translate.instant(meta.type);\r\n return meta;\r\n }\r\n \r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Affectation } from \"../../types.service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class AffectationService {\r\n API: any;\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getAffectationsFromTicketID(\r\n ticketID: string,\r\n ): Promise<Affectation[] | void> {\r\n return this.API.__proto__.ListAffectations({\r\n ticketID: {\r\n eq: ticketID,\r\n } ,\r\n })\r\n .then((results) => {\r\n return results.items;\r\n })\r\n .catch((error) => {\r\n console.log(\r\n ` Error while retrieving affectations for ${ticketID} : ${JSON.stringify(error)}`,\r\n );\r\n });\r\n }\r\n\r\n async getAffectationsFromMissionID(\r\n missionID: string,\r\n ): Promise<Affectation[] | void> {\r\n return this.API.__proto__.AffectationsByMission(missionID).then((resposne) => resposne.items);\r\n }\r\n\r\n async softDeleteAffectationByMissionByTicket(\r\n ticketID: string,\r\n missionID: string,\r\n ): Promise<Affectation[]> {\r\n const affectations: Affectation[] =\r\n await this.getAffecationsForTicketForMission(missionID, ticketID);\r\n await Promise.all(\r\n affectations.map(async (affectation) => {\r\n const deleted = await this.API.__proto__.UpdateAffectation({\r\n id: affectation.id,\r\n deletedAt: Date.now(),\r\n });\r\n console.log(\"soft deleted affectation\", deleted);\r\n }),\r\n );\r\n return affectations;\r\n }\r\n\r\n async getAffecationsForTicketForMission(\r\n ticketID: string,\r\n missionID: string,\r\n ): Promise<Affectation[]> {\r\n return this.API.__proto__.AffectationsByMissionByTicket(missionID, {\r\n eq: ticketID,\r\n }).then((resposne) => resposne.items);\r\n }\r\n\r\n async softDeleteAffectationByID(\r\n affectationID: string,\r\n ): Promise<Affectation> {\r\n return this.API.__proto__.UpdateAffectation({\r\n id: affectationID,\r\n deletedAt: Date.now(),\r\n });\r\n }\r\n\r\n async createAffectation(input: Affectation): Promise<Affectation> {\r\n return this.API.__proto__.CreateAffectation(input);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { debounceTime, first } from \"rxjs/operators\";\r\nimport { Zone } from \"../types.service\"\r\nimport { MatterportService } from \"./matterport.service\";\r\nimport { ZoneService } from \"./models/zone.service\";\r\nimport { BaseUserService } from \"./user.service\";\r\nimport { ViewerService } from \"./viewer.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class NavigatorService {\r\n\r\n currentSweep: string | null;\r\n\r\n targetSweep: string | null;\r\n\r\n targetRotation: { x: number; y: number } | null;\r\n\r\n currentModel3D: string | null;\r\n\r\n currentSpaceID: string | null;\r\n\r\n currentZone: Zone | null;\r\n\r\n visitLastPosition: Map<string, { sweep: string; rotation: any }> =\r\n new Map();\r\n\r\n floorToGo: Zone | null;\r\n\r\n locationIDChange: Subject<string | null> = new Subject();\r\n\r\n zoneChange: Subject<Zone | null> = new Subject();\r\n\r\n navBarZoneIDChange: Subject<string | null> = new Subject();\r\n\r\n isVisibleChanged = new Subject<boolean>();\r\n\r\n currentNavBarLocationID: string;\r\n\r\n currentNavBarZoneID: string;\r\n\r\n zonesSortedForCurrentSweep: Zone[] | null;\r\n\r\n zonesForUserChange: Subject<Zone[] | null> = new Subject();\r\n\r\n zonesForUserForSpace: Zone[] | null;\r\n\r\n queueSweeps: string[] = [];\r\n\r\n constructor(\r\n private matterportService: MatterportService,\r\n private viewerService: ViewerService,\r\n private zoneService: ZoneService,\r\n private userService: BaseUserService,\r\n ) {\r\n this.matterportService.currentSweep\r\n .pipe(first()) // take first in order not to wait 2 sec an first load\r\n .subscribe((sweep: string) => {\r\n this.currentSweep = sweep;\r\n if (this.zonesForUserForSpace) {\r\n this.setZonesForCurrentSweep();\r\n }\r\n });\r\n this.matterportService.currentSweep\r\n .pipe(debounceTime<string>(2000)) // delays values emitted and return only the latest\r\n .subscribe((sweep: string) => {\r\n this.currentSweep = sweep;\r\n if (this.zonesForUserForSpace) {\r\n this.setZonesForCurrentSweep();\r\n }\r\n });\r\n this.viewerService.viewerIsOn.pipe().subscribe(\r\n (data: {\r\n spaceID: string | null;\r\n model3D: string | null;\r\n sweep: string | null;\r\n rotation: { x: number; y: number } | null;\r\n }) => {\r\n if (this.currentSpaceID !== data.spaceID) {\r\n this.currentSpaceID = data.spaceID;\r\n }\r\n if (!data.spaceID) {\r\n this.zonesForUserForSpace = null;\r\n this.zonesSortedForCurrentSweep = null;\r\n this.currentZone = null;\r\n this.zoneChange.next(null);\r\n this.currentSweep = null;\r\n // save last position\r\n const lastPose = this.matterportService.poseCamera;\r\n if (lastPose && this.currentModel3D && this.userService.cu) {\r\n this.visitLastPosition.set(this.currentModel3D, {\r\n sweep: lastPose.sweep,\r\n rotation: lastPose.rotation,\r\n });\r\n }\r\n this.currentModel3D = data.model3D;\r\n } else {\r\n this.currentModel3D = data.model3D;\r\n this.targetSweep = data.sweep;\r\n this.targetRotation = data.rotation;\r\n this.onViewerLoaded();\r\n }\r\n },\r\n );\r\n this.userService.isChanged.subscribe((isConnected) => {\r\n if (!isConnected) {\r\n // user disconnected, clean Map\r\n this.visitLastPosition = new Map();\r\n }\r\n })\r\n }\r\n\r\n getLastPositionForModel(model3D: string) {\r\n return this.visitLastPosition.get(model3D);\r\n }\r\n\r\n goToSweepWithRotation(\r\n sweep: string,\r\n rotation: { x: number; y: number } | null = null,\r\n ) {\r\n this.matterportService.action_go_to_sweep(sweep, rotation);\r\n }\r\n\r\n goToFloor(floor: Zone) {\r\n let matterportFloorSequence = null;\r\n if (floor.metadata) {\r\n const metadata = JSON.parse(floor.metadata);\r\n if (metadata.matterportFloorSequence !== undefined) {\r\n matterportFloorSequence = metadata.matterportFloorSequence;\r\n }\r\n }\r\n this.matterportService.action_go_to_floor(floor.name, matterportFloorSequence);\r\n }\r\n\r\n async onViewerLoaded() {\r\n let sweepToGo: string | null = null\r\n let rotation: { x: number; y: number } | null = null;\r\n if (this.targetSweep) {\r\n sweepToGo = this.targetSweep;\r\n rotation = this.targetRotation\r\n ? this.targetRotation\r\n : this.checkRotationForSweep(this.targetSweep);\r\n } else {\r\n const lastPostion = this.getLastPositionForModel(\r\n this.currentModel3D!,\r\n );\r\n if (lastPostion) {\r\n sweepToGo = lastPostion.sweep;\r\n rotation = lastPostion.rotation;\r\n }\r\n }\r\n if (this.targetRotation) {\r\n rotation = this.targetRotation;\r\n }\r\n if (sweepToGo && !this.floorToGo) {\r\n // console.log(\"go to sweep\", sweepToGo);\r\n this.goToSweepWithRotation(sweepToGo, rotation);\r\n }\r\n if (this.floorToGo) {\r\n this.goToFloor(this.floorToGo);\r\n this.floorToGo = null;\r\n }\r\n // if first load and zones are not set\r\n this.zonesForUserForSpace =\r\n await this.zoneService.getZonesBySpaceForUser(this.currentSpaceID!);\r\n this.setZonesForCurrentSweep();\r\n }\r\n\r\n checkRotationForSweep(sweep: string): { x: number; y: number } | null {\r\n const lastPosition = this.visitLastPosition.get(this.currentModel3D!);\r\n if (lastPosition && lastPosition.sweep === sweep) {\r\n return lastPosition.rotation;\r\n }\r\n return null;\r\n }\r\n\r\n setZonesForCurrentSweep() {\r\n if (!this.currentSweep) {\r\n return\r\n }\r\n const zonesForSweep = this.zonesForUserForSpace?.filter(\r\n (zone) =>\r\n zone.sweepIDs && zone.sweepIDs.includes(this.currentSweep!)\r\n );\r\n if (zonesForSweep && zonesForSweep.length > 0) { \r\n this.zonesSortedForCurrentSweep = zonesForSweep.sort((a, b) => {\r\n if (a.sweepIDs!.length === b.sweepIDs!.length) {\r\n // if the same amount of sweeps: floor == the whole space\r\n if (a.layer && b.layer) {\r\n // put type BUILDING at the end\r\n return a.layer.name !== \"BUILDING\"\r\n ? -1\r\n : b.layer.name !== \"BUILDING\"\r\n ? 1\r\n : 0;\r\n }\r\n return a.parent?.sweepIDs ? -1 : b.parent?.sweepIDs ? 1 : 0;\r\n }\r\n return a.sweepIDs!.length - b.sweepIDs!.length;\r\n });\r\n this.zonesForUserChange.next(this.zonesSortedForCurrentSweep);\r\n\r\n if (\r\n this.zonesSortedForCurrentSweep.length > 0 &&\r\n this.currentZone !== this.zonesSortedForCurrentSweep[0]\r\n ) {\r\n [this.currentZone] = this.zonesSortedForCurrentSweep;\r\n this.zoneChange.next(this.currentZone);\r\n }\r\n }\r\n \r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Event, EventStatus, EventType, Prestataire, ProfileEntity, RequestIntervention, Ticket } from \"../types.service\";\r\nimport { EventService } from \"./models/event.service\";\r\nimport { MissionService } from \"./models/mission.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class InterventionService {\r\n interventionEventTypes = [\r\n EventType.NON_CONTRACTUAL_INTERVENTION,\r\n EventType.CONTRACTUAL_INTERVENTION,\r\n EventType.REPORTING,\r\n EventType.REQUEST_FOR_INTERVENTION,\r\n ];\r\n\r\n constructor(\r\n private eventService: EventService,\r\n private missionService: MissionService,\r\n ) {}\r\n\r\n async getRequestInterventionFromTicket(\r\n ticket: Ticket,\r\n ): Promise<RequestIntervention> {\r\n const events =\r\n await this.eventService.getEventsByTicketIDSortedByDateDesc(\r\n ticket.id,\r\n );\r\n const relatedEvents = events.filter((event_) =>\r\n this.interventionEventTypes.includes(event_.type),\r\n );\r\n const allRequests = relatedEvents.filter(\r\n (event_) => event_.type === EventType.REQUEST_FOR_INTERVENTION,\r\n );\r\n if (allRequests.length > 0) {\r\n const mostRecent = allRequests[0];\r\n\r\n const composedRequest =\r\n this.eventToRequestIntervention(mostRecent);\r\n\r\n if (composedRequest.status === EventStatus.CANCELLED) {\r\n return composedRequest;\r\n }\r\n\r\n let eventsForMostRecentRequest = relatedEvents.filter(\r\n (event) => event.group === composedRequest.id,\r\n );\r\n let intervention;\r\n if (eventsForMostRecentRequest.length === 0) {\r\n // back compatibility\r\n eventsForMostRecentRequest = relatedEvents;\r\n // get intervention\r\n intervention = this.composeInterventionForRequest(\r\n relatedEvents,\r\n null,\r\n );\r\n // set duration\r\n composedRequest.realDuration =\r\n this.getDurationForRequest(\r\n relatedEvents,\r\n null,\r\n );\r\n } else {\r\n intervention = this.composeInterventionForRequest(\r\n eventsForMostRecentRequest,\r\n composedRequest.id,\r\n );\r\n composedRequest.realDuration =\r\n this.getDurationForRequest(\r\n eventsForMostRecentRequest,\r\n composedRequest.id,\r\n );\r\n }\r\n\r\n if (!composedRequest.estimateStartDate) {\r\n composedRequest.estimateStartDate =\r\n this.getMostRecentEstimateStartDate(\r\n eventsForMostRecentRequest,\r\n );\r\n }\r\n composedRequest.realStartDate =\r\n this.getEarliestRealStartDateForRequest(\r\n relatedEvents,\r\n composedRequest.id,\r\n );\r\n if (!composedRequest.estimateEndDate) {\r\n composedRequest.estimateEndDate =\r\n this.getMostRecentEstimateEndDate(\r\n eventsForMostRecentRequest,\r\n );\r\n }\r\n composedRequest.realEndDate =\r\n this.getLatestRealEndDateForRequest(\r\n relatedEvents,\r\n composedRequest.id,\r\n );\r\n\r\n composedRequest.intervention = intervention;\r\n return composedRequest;\r\n }\r\n return null;\r\n }\r\n\r\n composeInterventionForRequest(\r\n relatedEvents: Event[],\r\n requestID: string,\r\n ): Event {\r\n const interventions = requestID\r\n ? relatedEvents.filter(\r\n (event_) =>\r\n (event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.CONTRACTUAL_INTERVENTION) &&\r\n event_.group === requestID,\r\n )\r\n : relatedEvents.filter(\r\n (event_) =>\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.CONTRACTUAL_INTERVENTION,\r\n );\r\n\r\n if (interventions.length > 0) {\r\n const lastIntervention = interventions[0];\r\n return lastIntervention;\r\n }\r\n return null;\r\n }\r\n\r\n async getPrestataireForTicket(ticket: Ticket): Promise<Prestataire> {\r\n if (ticket.assignees.items.length > 0) {\r\n const sortedAffectations = ticket.assignees.items.sort(\r\n (a, b) =>\r\n // @ts-ignore\r\n // eslint-disable-next-line prettier/prettier\r\n new Date(b.createdAt) - new Date(a.createdAt),\r\n );\r\n const missionIDpresta = sortedAffectations[0].missionID;\r\n const prestaMission = await this.missionService.getMission(\r\n missionIDpresta,\r\n );\r\n const userPrestataire = new ProfileEntity(prestaMission.user);\r\n const prestataire = {\r\n organisation: prestaMission.organisation,\r\n mission: prestaMission,\r\n profile: userPrestataire,\r\n name: userPrestataire.displayName,\r\n };\r\n return prestataire;\r\n }\r\n return null;\r\n }\r\n\r\n getEarliestRealStartDateForRequest(\r\n events: Event[],\r\n requestID: string,\r\n ): number | null {\r\n let date = null;\r\n const interventions = events.filter(\r\n (event_) =>\r\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION) &&\r\n event_.group === requestID,\r\n );\r\n const sortedInterventions =\r\n this.eventService.sortEventsByCreatedAtDateAsc(interventions);\r\n if (sortedInterventions.length > 0) {\r\n for (const event of sortedInterventions) {\r\n if (event.realStartDate) {\r\n date = event.realStartDate;\r\n break;\r\n }\r\n }\r\n }\r\n return date;\r\n }\r\n\r\n getLatestRealEndDateForRequest(\r\n events: Event[],\r\n requestID: string,\r\n ): number | null {\r\n let date = null;\r\n const interventions = events.filter(\r\n (event_) =>\r\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION) &&\r\n event_.group === requestID,\r\n );\r\n const sortedInterventions =\r\n this.eventService.sortEventsByCreatedAtDateDesc(interventions);\r\n if (sortedInterventions.length > 0) {\r\n for (const event of sortedInterventions) {\r\n if (event.realEndDate) {\r\n date = event.realEndDate;\r\n break;\r\n }\r\n }\r\n }\r\n return date;\r\n }\r\n\r\n getDurationForRequest(events: Event[], requestID: string): number {\r\n let duration = 0; // in miliseconds\r\n const interventions = requestID\r\n ? events.filter(\r\n (event_) =>\r\n (event_.type === EventType.CONTRACTUAL_INTERVENTION ||\r\n event_.type ===\r\n EventType.NON_CONTRACTUAL_INTERVENTION) &&\r\n event_.group === requestID,\r\n )\r\n : events.filter(\r\n (event_) =>\r\n event_.type === EventType.CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION,\r\n );\r\n for (const event of interventions) {\r\n if (event.timeSpent) {\r\n duration += event.timeSpent;\r\n }\r\n }\r\n return duration;\r\n }\r\n\r\n getIntervention(events): Event | null {\r\n const interventions = events.filter(\r\n (event_) =>\r\n event_.type === EventType.NON_CONTRACTUAL_INTERVENTION ||\r\n event_.type === EventType.CONTRACTUAL_INTERVENTION,\r\n );\r\n if (interventions.length > 0) {\r\n const lastIntervention = interventions[0];\r\n return lastIntervention;\r\n }\r\n return null;\r\n }\r\n\r\n eventToRequestIntervention(event: Event): RequestIntervention {\r\n const request = {\r\n id: event.group === \"default\" ? event.id : event.group,\r\n realEndDate: event.realEndDate,\r\n realStartDate: event.realStartDate,\r\n estimateStartDate: event.estimateStartDate,\r\n estimateEndDate: event.estimateEndDate,\r\n realDuration: event.timeSpent,\r\n type: event.type,\r\n status: event.status,\r\n createdAt: event.createdAt,\r\n updatedAt: event.updatedAt,\r\n ticketID: event.ticketID,\r\n } as RequestIntervention;\r\n return request;\r\n }\r\n\r\n getMostRecentTimeSpent(events: Event[]): number | null {\r\n let timeSpent = null;\r\n const sortedEvents = this.getAllEventsAfterLastCreated(events);\r\n for (const event_ of sortedEvents) {\r\n if (event_.timeSpent) {\r\n timeSpent = event_.timeSpent;\r\n break;\r\n }\r\n }\r\n return timeSpent;\r\n }\r\n\r\n getAllEventsAfterLastCreated(events: Event[]): Event[] {\r\n const eventsAfter: Event[] = [];\r\n const currentIntervention = this.getCurrentIntevention(events);\r\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\r\n if (sortedEvents.length > 0 && currentIntervention) {\r\n for (const event_ of sortedEvents) {\r\n eventsAfter.push(event_);\r\n if (event_.id === currentIntervention.id) {\r\n break;\r\n }\r\n }\r\n }\r\n return eventsAfter;\r\n }\r\n\r\n getCurrentIntevention(events: Event[]): Event {\r\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\r\n let currentIntervention;\r\n for (const event_ of sortedEvents) {\r\n if (event_.status === EventStatus.CREATED) {\r\n currentIntervention = event_;\r\n }\r\n if (event_.status !== EventStatus.CREATED && currentIntervention) {\r\n break;\r\n }\r\n }\r\n return currentIntervention;\r\n }\r\n\r\n getMostRecentEstimateStartDate(events: Event[]): number | null {\r\n let estimateStartDate = null;\r\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\r\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\r\n for (const event_ of sortedEvents) {\r\n if (event_.estimateStartDate) {\r\n estimateStartDate = event_.estimateStartDate;\r\n break;\r\n }\r\n }\r\n return estimateStartDate;\r\n }\r\n\r\n getMostRecentEstimateEndDate(events: Event[]): number | null {\r\n let date = null;\r\n const sortedEvents = this.eventService.sortEventsByCreatedAtDateDesc(events);\r\n for (const event_ of sortedEvents) {\r\n if (event_.estimateEndDate) {\r\n date = event_.estimateEndDate;\r\n break;\r\n }\r\n }\r\n return date;\r\n }\r\n\r\n // getMostRecentRealStartDate(events: Event[]): number | null {\r\n // let date = null;\r\n // // const sortedEvents = this.sortEventsByCreatedAtDateDesc(events);\r\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\r\n // for (const event_ of sortedEvents) {\r\n // if (event_.realStartDate) {\r\n // date = event_.realStartDate;\r\n // break;\r\n // }\r\n // }\r\n // return date;\r\n // }\r\n\r\n // getMostRecentRealStartDateGlobal(events: Event[]): number | null {\r\n // let date = null;\r\n // // const sortedEvents = this.sortEventsByCreatedAtDateDesc(events);\r\n // const sortedEvents = this.getAllEventsAfterLastCreated(events);\r\n // if (sortedEvents.length > 0) {\r\n // for (const event_ of sortedEvents) {\r\n // if (event_.realStartDate) {\r\n // date = event_.realStartDate;\r\n // break;\r\n // }\r\n // }\r\n // }\r\n // return date;\r\n // }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\n/* eslint-disable consistent-return */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { Subject, Subscription } from \"rxjs\";\r\nimport { openModalForVisitSwitch } from \"../../helpers.service\";\r\nimport { MattertagData } from \"../../mattertagData\";\r\nimport { Event, Ticket, TicketType, TicketPriority, TicketStatus, EventStatus, EventType, Affectation, POI, PoiType, IUpdate } from \"../../types.service\";\r\nimport { FilterService } from \"../filter.service\";\r\nimport { NavigatorService } from \"../navigator.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { ViewerService } from \"../viewer.service\";\r\nimport { BaseObjectService } from \"./base-object.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { OperationService } from \"./operation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\nimport InformationIcon from \"@iconify-icons/mdi/information-outline\";\r\nimport AccidentIcon from \"@iconify-icons/mdi/alert\";\r\nimport WordOrderIcon from \"@iconify-icons/mdi/account-hard-hat\";\r\nimport ReportingIcon from \"@iconify-icons/mdi/file-document-outline\";\r\nimport MaintenanceIcon from \"@iconify-icons/mdi/tools\";\r\nimport { EventService } from \"./event.service\";\r\nimport { InterventionService } from \"../intervention.service\";\r\nimport { AffectationService } from \"./affectation.service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class TicketsService extends BaseObjectService {\r\n currentTickets: { zone: Ticket[]; space: Ticket[] } = {\r\n zone: [],\r\n space: [],\r\n };\r\n\r\n ticketTags: Subject<Ticket[]> = new Subject();\r\n\r\n ticketsFiltered: Ticket[] = [];\r\n\r\n ticketsUpdated: Subject<{\r\n zone: Ticket[];\r\n space: Ticket[];\r\n }> = new Subject();\r\n\r\n currentSpaceID: string;\r\n\r\n zoneIDFilter: string;\r\n\r\n dateFilter: Date[];\r\n\r\n ticketTypeFilter: TicketType[];\r\n\r\n reportingIcon = ReportingIcon;\r\n\r\n maintenanceIcon = MaintenanceIcon;\r\n\r\n workorderIcon = WordOrderIcon;\r\n\r\n informationIcon = InformationIcon;\r\n\r\n accidentIcon = AccidentIcon;\r\n\r\n updateDone: Subject<boolean> = new Subject();\r\n\r\n updating: Subject<boolean> = new Subject();\r\n\r\n API: any;\r\n\r\n isMuseumUser = false;\r\n\r\n navSubscription: Subscription;\r\n\r\n filetrSubscription: Subscription;\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any,\r\n private operationService: OperationService,\r\n private eventService: EventService,\r\n private affectationService: AffectationService,\r\n poiService: PoiService,\r\n private userService: BaseUserService,\r\n private navigatorService: NavigatorService,\r\n private filterService: FilterService,\r\n private interventionService: InterventionService,\r\n navigationService: NavigationService,\r\n private viewerService: ViewerService,\r\n private modalService: NgbModal,\r\n ) {\r\n super(poiService, navigationService);\r\n this.API = apiInjected;\r\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n this.initSubscriptions();\r\n this.userService.isChanged.subscribe((isConnected) => {\r\n if (isConnected) {\r\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n this.initSubscriptions();\r\n } else {\r\n if (this.navSubscription) {\r\n this.navSubscription.unsubscribe();\r\n this.filetrSubscription.unsubscribe();\r\n }\r\n }\r\n });\r\n }\r\n\r\n async initTickets() {\r\n let ticketsFiltered = [];\r\n if (this.currentSpaceID) {\r\n this.updating.next(true);\r\n await this.getTicketsBySpace(this.currentSpaceID).then(\r\n (tickets) => {\r\n if (tickets) {\r\n ticketsFiltered = tickets;\r\n }\r\n },\r\n );\r\n ticketsFiltered =\r\n await this.filterService.filterTicketsForCurrentUserInSpace(\r\n ticketsFiltered,\r\n this.currentSpaceID,\r\n );\r\n if (this.dateFilter) {\r\n ticketsFiltered = this.filterService.filterObjectsForDateRange(\r\n ticketsFiltered,\r\n this.dateFilter,\r\n );\r\n }\r\n if (this.ticketTypeFilter) {\r\n ticketsFiltered = ticketsFiltered.filter((ticket) =>\r\n this.ticketTypeFilter.includes(ticket.type),\r\n );\r\n }\r\n this.currentTickets.space = ticketsFiltered;\r\n this.ticketTags.next(ticketsFiltered); // tags without zone filter\r\n\r\n if (this.zoneIDFilter) {\r\n ticketsFiltered = await this.filterService.filterObjectsForZone(\r\n ticketsFiltered,\r\n this.zoneIDFilter,\r\n );\r\n }\r\n this.currentTickets.zone = ticketsFiltered;\r\n this.ticketsUpdated.next(this.currentTickets);\r\n this.updating.next(false);\r\n } else {\r\n this.ticketTags.next(null);\r\n }\r\n }\r\n\r\n async adaptTicket(ticket: Ticket): Promise<Ticket> {\r\n if (ticket.comments.items.length > 0) {\r\n ticket.comments.items.sort((a, b) => {\r\n // @ts-ignore\r\n return new Date(b.createdAt) - new Date(a.createdAt);\r\n });\r\n }\r\n\r\n if (ticket.events.items.length > 0) {\r\n // Sort events by date\r\n ticket.events.items.sort((event1, event2) => {\r\n // @ts-ignore\r\n return new Date(event2.createdAt) - new Date(event1.createdAt);\r\n });\r\n }\r\n ticket.prestataire =\r\n await this.interventionService.getPrestataireForTicket(ticket);\r\n return ticket;\r\n }\r\n\r\n getPriorityColor(ticket: Ticket): string {\r\n switch (ticket.priority) {\r\n case TicketPriority.MAXIMUM:\r\n return \"crimson\";\r\n case TicketPriority.HIGH:\r\n return \"red\";\r\n case TicketPriority.MEDIUM:\r\n return \"orange\";\r\n case TicketPriority.LOW:\r\n return \"green\";\r\n case TicketPriority.MINIMUM:\r\n return \"blue\";\r\n default:\r\n return \"blue\";\r\n }\r\n }\r\n\r\n getStatusColor(ticket: Ticket): string {\r\n switch (ticket.status) {\r\n case TicketStatus.TO_BE_PROCESSED:\r\n return \"#B0B0B1\";\r\n case TicketStatus.PLANNED:\r\n return \"#EBDF27\";\r\n case TicketStatus.IN_PROGRESS:\r\n return \"#EBDF27\";\r\n case TicketStatus.WAITING_FOR_VALIDATION:\r\n return \"#EBDF27\";\r\n case TicketStatus.VALIDATED:\r\n return \"#BCE2E5\";\r\n case TicketStatus.REJECTED:\r\n return \"#e84c35\";\r\n case TicketStatus.RESOLVED:\r\n return \"#BCE2E5\";\r\n case TicketStatus.ARCHIVED:\r\n return \"#B0B0B1\";\r\n case TicketStatus.LATE:\r\n return \"#e84c35\";\r\n case TicketStatus.BLOCKED:\r\n return \"#e84c35\";\r\n case TicketStatus.COMPLETED:\r\n return \"#388659\";\r\n case TicketStatus.DELAYED:\r\n return \"#DB7543\";\r\n case TicketStatus.CANCELLED:\r\n return \"#e84c35\";\r\n case TicketStatus.TO_REDO:\r\n return \"#DB7543\";\r\n case TicketStatus.CREATED:\r\n return \"#B0B0B1\";\r\n default:\r\n return \"#BCE2E5\";\r\n }\r\n }\r\n\r\n getTicketPriorityNumber(t): number {\r\n return t.priority === TicketPriority.MINIMUM\r\n ? -1\r\n : t.priority === TicketPriority.LOW\r\n ? 0\r\n : t.priority === TicketPriority.MEDIUM\r\n ? 1\r\n : t.priority === TicketPriority.HIGH\r\n ? 2\r\n : t.priority === TicketPriority.MAXIMUM\r\n ? 3\r\n : -1;\r\n }\r\n\r\n getTicketIcon(type: TicketType): any {\r\n // const typeIcon : TicketType = ticket.type;\r\n switch (type) {\r\n case TicketType.REPORTING:\r\n return this.reportingIcon;\r\n case TicketType.REQUEST_FOR_INTERVENTION:\r\n return this.maintenanceIcon;\r\n case TicketType.REQUEST_FOR_MAINTENANCE:\r\n return this.maintenanceIcon;\r\n case TicketType.WORK_ORDER:\r\n return this.workorderIcon;\r\n case TicketType.INCIDENT:\r\n return this.accidentIcon;\r\n case TicketType.INFORMATION:\r\n return this.informationIcon;\r\n default:\r\n return this.maintenanceIcon;\r\n }\r\n }\r\n\r\n async addEventToTicket(ticket: Ticket, event: Event): Promise<Event> {\r\n const currentMission = this.userService.currentMission(ticket.spaceID);\r\n event.group = event.group ? event.group : \"default\";\r\n event.ticketID = event.ticketID ? event.ticketID : ticket.id;\r\n event.status = event.status ? event.status : EventStatus.CREATED;\r\n event.type = event.type ? event.type : EventType.TICKET;\r\n event.ownerID = event.ownerID ? event.ownerID : currentMission.id;\r\n try {\r\n const receivedEvent = await this.eventService.createEvent(event);\r\n // console.log('Event successfully created !');\r\n return receivedEvent;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n async addTicket(ticket: Ticket): Promise<Ticket | void> {\r\n ticket.status = TicketStatus.CREATED;\r\n if (!ticket.ownerMissionID) {\r\n ticket.ownerMissionID = this.userService.currentMission(\r\n ticket.spaceID,\r\n ).id;\r\n }\r\n // TODO!!! filter missions by space of ticket\r\n try {\r\n const receivedTicket = await this.createTicket(ticket);\r\n // console.log('!!! Response from creating ticket :');\r\n // console.log(receivedTicket);\r\n this.addEventToTicket(receivedTicket, {\r\n title: \"Création du ticket\",\r\n description: `Ticket créé par -`,\r\n translationPath: \"ticketEvent.ticket.created\",\r\n });\r\n this.updateDone.next(true);\r\n return receivedTicket; // instead of true\r\n } catch (error) {\r\n console.log(\"Ticket creation FAILED\");\r\n console.log(JSON.stringify(error));\r\n }\r\n }\r\n\r\n async updateTicketWithEvent(\r\n ticket: IUpdate & Partial<Ticket>,\r\n event?: Event,\r\n ): Promise<Ticket> {\r\n const receivedTicket = await this.updateTicket(ticket);\r\n if (receivedTicket) {\r\n console.log(\"Updated ticket :\");\r\n console.log(receivedTicket);\r\n if (event) {\r\n await this.addEventToTicket(receivedTicket, event);\r\n }\r\n this.updateDone.next(true);\r\n }\r\n return receivedTicket;\r\n }\r\n\r\n async removeAssigneeFromTicket(\r\n ticket: Ticket,\r\n assignee: Affectation,\r\n ): Promise<Ticket> {\r\n try {\r\n const affectation =\r\n await this.affectationService.softDeleteAffectationByID(\r\n assignee.id,\r\n );\r\n if (!affectation) {\r\n console.warn(\r\n `removeAssigneeFromTicket(${ticket.id}, ${assignee.id}) failed`,\r\n );\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n return ticket;\r\n }\r\n\r\n async updateTicketLocation(\r\n ticket: Ticket,\r\n tagData: MattertagData\r\n ): Promise<POI> {\r\n const poiInput = {\r\n coordinate: tagData.getCoordinateString(),\r\n type: PoiType.TICKET,\r\n elementID: ticket.id,\r\n metadata: tagData.getMetadataString(),\r\n matterportSweepID: tagData.getSweepID(),\r\n } as POI;\r\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\r\n await this.addEventToTicket(ticket, {\r\n title: \"Changement position du ticket\",\r\n description: \"Le point d'intérêt du ticket a été modifié\",\r\n status: EventStatus.POSITION_SET,\r\n translationPath: \"ticketEvent.position.set\",\r\n });\r\n return poi;\r\n }\r\n\r\n async updateStatusOfTicket(\r\n ticket: Ticket,\r\n status: TicketStatus,\r\n ): Promise<any> {\r\n const currentStatus = ticket.status;\r\n const oldTicketStatus = ticket.status;\r\n ticket.status = status;\r\n if (currentStatus === status) {\r\n return ticket;\r\n }\r\n console.log(\"Updating status\");\r\n return this.updateTicket({\r\n id: ticket.id,\r\n status,\r\n });\r\n }\r\n\r\n async updateTypeOfTicket(ticket: Ticket, type: TicketType): Promise<any> {\r\n const previousType = ticket.type;\r\n ticket.type = type;\r\n await this.updateTicketWithEvent(\r\n { id: ticket.id, type: ticket.type },\r\n {\r\n title: \"Type changé\",\r\n description: `Changement de ${previousType} vers ${ticket.type}`,\r\n metadata: JSON.stringify({ type: ticket.type }),\r\n translationPath: \"ticketEvent.ticket.type\",\r\n },\r\n );\r\n return ticket;\r\n }\r\n\r\n async getTicketsForUserForSpace(spaceID: string): Promise<Ticket[]> {\r\n const ticketsSpace = await this.getTicketsBySpace(spaceID);\r\n return this.filterService.filterTicketsForCurrentUserInSpace(\r\n ticketsSpace,\r\n spaceID,\r\n );\r\n }\r\n\r\n\r\n /** Basic CRUD operations */\r\n async readTicket(id: string) {\r\n return this.API.__proto__.GetTicket(id);\r\n }\r\n\r\n async createTicket(input: Ticket): Promise<Ticket> {\r\n return this.API.__proto__.CreateTicket(input);\r\n }\r\n\r\n async updateTicket(input: IUpdate & Partial<Ticket>): Promise<Ticket> {\r\n return this.API.__proto__.UpdateTicket(input);\r\n }\r\n\r\n async deleteTicket(ticket: Ticket): Promise<Ticket> {\r\n const deleted = await this.API.__proto__.DeleteTicket({ id: ticket.id });\r\n\r\n // delete POI\r\n const poi = await this.poiService.getPoiByElementId(ticket.id);\r\n if (poi) {\r\n this.poiService.deletePoi(poi.id);\r\n }\r\n\r\n // clean parentID\r\n if (ticket.children.items.length > 0) {\r\n ticket.children.items.map(async (childTicket) => {\r\n try {\r\n await this.API.__proto__.UpdateTicket({\r\n id: childTicket.id,\r\n parentID: null,\r\n });\r\n } catch {\r\n console.warn(\"Could not update ticket\", childTicket.id);\r\n }\r\n\r\n await this.API.__proto__.CreateEvent({\r\n title: \"Ticket parent supprimé\",\r\n ticketID: childTicket.id,\r\n description: `Ticket \\\"$ticket.title}\\\" a été supprimé`,\r\n });\r\n });\r\n }\r\n // delete events\r\n await Promise.all(\r\n ticket.events.items.map(async (event_) => {\r\n await this.API.__proto__.DeleteEvent({ id: event_.id });\r\n }),\r\n );\r\n // delete affectationns\r\n if (ticket.assignees.items.length > 0) {\r\n for (const element of ticket.assignees.items) {\r\n this.API.__proto__.DeleteAffectation({ id: element.id });\r\n }\r\n }\r\n // delete comments\r\n await Promise.all(\r\n ticket.comments.items.map(async (comment) => {\r\n await this.API.__proto__.DeleteComment({ id: comment.id });\r\n }),\r\n );\r\n await this.operationService.deleteOperationsForTicket(ticket.id);\r\n return deleted;\r\n }\r\n\r\n /** Custom requests */\r\n async getTicketsBySpace(spaceID: string): Promise<Ticket[]> {\r\n return this.API.__proto__.TicketsBySpace(spaceID).then(\r\n (tickets) => tickets.items,\r\n );\r\n }\r\n\r\n async updateIconForAllTicketsInSpace(\r\n tagIcon: string,\r\n spaceID: string,\r\n ): Promise<{ tickets: Ticket[]; pois: POI[] }> {\r\n const tickets = await this.getTicketsBySpace(spaceID);\r\n const pois = await this.updateIconForAllObjects(tickets, tagIcon);\r\n return { tickets, pois };\r\n }\r\n\r\n /** Archive related */\r\n /** Return true if the current user has archived this ticket */\r\n isArchived(ticket: Ticket): boolean {\r\n return ticket.archivedForMissionID\r\n ? ticket.archivedForMissionID.includes(\r\n this.userService.currentMission(ticket.spaceID).id,\r\n )\r\n : false;\r\n }\r\n\r\n setArchived(ticket: Ticket, archived: boolean) {\r\n let archivedList = ticket.archivedForMissionID\r\n ? ticket.archivedForMissionID\r\n : [];\r\n const missionID = this.userService.currentMission(ticket.spaceID).id;\r\n\r\n archivedList = archivedList.filter((m) => m !== missionID);\r\n\r\n if (archived) {\r\n archivedList.push(missionID);\r\n }\r\n\r\n return this.updateTicketWithEvent({\r\n id: ticket.id,\r\n archivedForMissionID: archivedList,\r\n });\r\n }\r\n\r\n async navigateToTicketIn3D(\r\n ticket: Ticket,\r\n forceSwitchVisit: boolean = false,\r\n ) {\r\n let url = `visit/${ticket.spaceID}`;\r\n if (forceSwitchVisit) {\r\n url += `/detail/${ticket.id}`;\r\n }\r\n const canGoToTag = await this.viewerService.action_move_to_tag(\r\n `${ticket.id}`,\r\n );\r\n if (canGoToTag) {\r\n return;\r\n }\r\n const result = await this.getModel3dAndSweep(ticket);\r\n if (!result || !result.model3D) {\r\n alert(\"Error while getting virtual visit model\");\r\n return;\r\n }\r\n if (!forceSwitchVisit) {\r\n /** Si on ne force pas la visite, on demande si on veut etre switch */\r\n openModalForVisitSwitch(\r\n this.modalService,\r\n result.model3D,\r\n ticket.spaceID,\r\n { sweepToMove: result.sweep, rotation: result.rotation },\r\n );\r\n } else {\r\n /** Si on force le switch de la visit */\r\n window.open(\r\n `${url}?model3D=${result.model3D}&sweep=true`,\r\n \"_blank\",\r\n );\r\n }\r\n }\r\n\r\n initSubscriptions() {\r\n if (!this.isMuseumUser) {\r\n this.navSubscription = this.navigatorService.zoneChange.subscribe((zone) => {\r\n this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n if (!this.currentSpaceID) {\r\n this.ticketTags.next(null);\r\n this.ticketsUpdated.next({ space: [], zone: null });\r\n this.ticketTypeFilter = null;\r\n this.zoneIDFilter = null;\r\n } else if (zone.id !== this.zoneIDFilter) {\r\n this.zoneIDFilter = zone.id;\r\n // console.log(\"going to init tickets from zone\");\r\n this.initTickets();\r\n }\r\n });\r\n this.filetrSubscription = this.filterService.subscribeToDataFilterUpdate((dateRange) => {\r\n this.dateFilter = dateRange;\r\n this.initTickets();\r\n });\r\n this.dateFilter = this.filterService.currentDateFilter;\r\n this.updateDone.subscribe(() => {\r\n if (this.currentSpaceID) {\r\n this.initTickets();\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable, Inject } from \"@angular/core\";\r\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { Subject } from \"rxjs\";\r\nimport { openModalForVisitSwitch, removeNullKeysFromObject } from \"../../helpers.service\";\r\nimport { MattertagData } from \"../../mattertagData\";\r\nimport { Note, Zone, Equipment, EquipmentDocument, Ticket, TypeNote, Mission, EventStatus, EventType, Operation, POI, PoiType, RoleStatus } from \"../../types.service\";\r\nimport { FilterService } from \"../filter.service\";\r\nimport { NavigatorService } from \"../navigator.service\";\r\nimport { deleteFromS3, getSignedFile, getSignedImageUrlForEquipment, uploadFileToS3 } from \"../s3.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { ViewerService } from \"../viewer.service\";\r\nimport { BaseObjectService } from \"./base-object.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { OperationService } from \"./operation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\nimport { TicketsService } from \"./ticket.service\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class EquipmentService extends BaseObjectService {\r\n private prefix = {\r\n technical: \"equipments/note/technical/\",\r\n image: \"equipments/note/image/\",\r\n financial: \"equipments/note/financial/\",\r\n information: \"equipments/note/information/\",\r\n other: \"equipments/note/other/\",\r\n contractual: \"equipments/note/contractual\",\r\n };\r\n\r\n equipmentsUpdated: Subject<{\r\n space: Equipment[];\r\n zone: Equipment[];\r\n }> = new Subject();\r\n\r\n currentEquipments: {\r\n space: Equipment[];\r\n zonesMap: Map<string, Equipment[]>;\r\n } = {\r\n space: [],\r\n zonesMap: new Map(),\r\n };\r\n\r\n equipmentsTags: Subject<Equipment[]> = new Subject();\r\n\r\n zoneIDFilter: string;\r\n\r\n currentZone: Zone;\r\n\r\n currentSpaceID: string;\r\n\r\n /** Null means we do not apply a filter, empty array ([]), means we that we hide all equipment */\r\n equipmentDomainFilter: string[] = null;\r\n\r\n updating: Subject<boolean> = new Subject();\r\n\r\n currentlyUpdating = false;\r\n\r\n currentSweep: string;\r\n\r\n deleteObservable: Subject<Equipment> = new Subject();\r\n\r\n createObservable: Subject<Equipment> = new Subject();\r\n\r\n updateObservable: Subject<Equipment> = new Subject();\r\n\r\n API: any; //AWS\r\n\r\n isMuseumUser = false;\r\n\r\n private destroy$ = new Subject();\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any,\r\n poiService: PoiService,\r\n navigationService: NavigationService,\r\n private operationService: OperationService,\r\n private ticketsService: TicketsService,\r\n private navigatorService: NavigatorService,\r\n private filterService: FilterService,\r\n private userService: BaseUserService,\r\n private viewerService: ViewerService,\r\n private modalService: NgbModal,) \r\n {\r\n super(poiService, navigationService);\r\n this.API = apiInjected;\r\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n this.initSubscriptions();\r\n this.userService.isChanged.subscribe((isConnected) => {\r\n if (isConnected) {\r\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n this.initSubscriptions();\r\n } else {\r\n this.unsubscribe();\r\n }\r\n });\r\n }\r\n\r\n async readEquipment(id: string): Promise<Equipment> {\r\n return this.API.__proto__.GetEquipment(id).then(async (receivedEquip) => {\r\n let equip: Equipment;\r\n if (receivedEquip) {\r\n equip = receivedEquip;\r\n equip = await this.getSignedUrlsForEquipment(receivedEquip);\r\n if (equip.domain) {\r\n if (equip.domain.parentID) {\r\n equip.childDomain = equip.domain;\r\n equip.parentDomain = equip.domain.parent;\r\n } else {\r\n equip.parentDomain = equip.domain;\r\n }\r\n }\r\n if (equip.subequipmentsIDs) {\r\n const subEquips = [];\r\n await Promise.all(\r\n equip.subequipmentsIDs.map(async (subId) => {\r\n const subEquip = await this.API.GetEquipment(subId);\r\n subEquips.push(subEquip);\r\n }),\r\n );\r\n equip.subEquipments = subEquips;\r\n }\r\n }\r\n return equip;\r\n });\r\n }\r\n\r\n async createEquipment(\r\n equip: Equipment,\r\n imageFile: File,\r\n documentFile: File,\r\n ): Promise<Equipment | void> {\r\n removeNullKeysFromObject(equip);\r\n return this.API.CreateEquipment(equip).then(\r\n async (receivedEquipment) => {\r\n let equipment = receivedEquipment as Equipment;\r\n if (equipment) {\r\n console.log(\"equipment created:\", equipment);\r\n if (documentFile) {\r\n await this.uploadDoc(\r\n equipment,\r\n documentFile,\r\n TypeNote.TECHNICAL,\r\n );\r\n }\r\n if (imageFile) {\r\n equipment = await this.uploadImage(\r\n equipment,\r\n imageFile,\r\n );\r\n }\r\n }\r\n return equipment;\r\n },\r\n );\r\n }\r\n\r\n async getSignedUrlsForEquipment(equip: Equipment): Promise<Equipment> {\r\n const equipment = { ...equip };\r\n if (equipment.notes.items.length > 0) {\r\n const docs = [];\r\n await Promise.all(\r\n equipment.notes.items.map(async (note) => {\r\n equipment.documentationImageUrlSigned = await getSignedImageUrlForEquipment(equipment);\r\n if (note.attachment && note.type !== TypeNote.IMAGE) {\r\n const { length } = note.attachment.split(\"/\");\r\n const filename = note.attachment.split(\"/\")[length - 1];\r\n const attachment = await getSignedFile(note.attachment);\r\n if (attachment) {\r\n docs.push({\r\n filename,\r\n url: note.attachment,\r\n urlSigned: attachment,\r\n noteID: note.id,\r\n } as EquipmentDocument);\r\n }\r\n }\r\n }),\r\n );\r\n equipment.documents = docs;\r\n return equipment;\r\n }\r\n return equipment;\r\n }\r\n\r\n async getEquipmentsForTicket(ticket: Ticket): Promise<Equipment[]> {\r\n const equips = [];\r\n if (ticket.operations.items.length > 0) {\r\n await Promise.all(\r\n ticket.operations.items.map(async (operation) => {\r\n const equipment = await this.readEquipment(\r\n operation.equipmentID,\r\n );\r\n equips.push(equipment);\r\n }),\r\n );\r\n }\r\n return equips;\r\n }\r\n\r\n async getEquipmentsForSpace(spaceID: string): Promise<Equipment[]> {\r\n // split by 100\r\n const limit = 100;\r\n let equipsToken = { equips: [], nextToken: null };\r\n do {\r\n equipsToken =\r\n await this.mergeEquipmentsForSpaceWithNextTokenWithLimit(\r\n spaceID,\r\n limit,\r\n equipsToken,\r\n );\r\n } while (equipsToken.nextToken);\r\n return equipsToken.equips;\r\n }\r\n\r\n async mergeEquipmentsForSpaceWithNextTokenWithLimit(\r\n spaceID: string,\r\n limit: number,\r\n equipsToken: { equips: Equipment[]; nextToken: string | null },\r\n ): Promise<{ equips: Equipment[]; nextToken: string | null }> {\r\n return this.API.__proto__.EquipmentsBySpace(\r\n spaceID,\r\n null,\r\n \"DESC\",\r\n null,\r\n limit,\r\n equipsToken.nextToken, // nextToken\r\n ).then((response) => {\r\n const equipsLimit = response.items;\r\n const equipsObject = {\r\n equips: [...equipsToken.equips, ...equipsLimit],\r\n nextToken: response.nextToken,\r\n };\r\n return equipsObject;\r\n });\r\n }\r\n\r\n async uploadImageForAllEquipments(\r\n equipments: Equipment[],\r\n imageFile: File,\r\n ): Promise<Equipment[]> {\r\n if (equipments.length === 0) {\r\n return [];\r\n }\r\n\r\n return uploadFileToS3(this.prefix.image, imageFile, \"BATCH\").then(\r\n async (url) => {\r\n if (url) {\r\n const equips = [];\r\n for (const equip of equipments) {\r\n const currentMission = this.userService.currentMission(\r\n equip.spaceID,\r\n );\r\n await this.API.__proto__.CreateNote({\r\n attachment: url,\r\n type: TypeNote.IMAGE,\r\n equipmentID: equip.id,\r\n ownerMissionID: currentMission\r\n ? currentMission.id\r\n : null,\r\n });\r\n const update = await this.API.__proto__.UpdateEquipment({\r\n id: equip.id,\r\n photo: url,\r\n });\r\n equips.push(update);\r\n }\r\n return equips;\r\n }\r\n return [];\r\n },\r\n );\r\n }\r\n\r\n async uploadImage(\r\n equipment: Equipment,\r\n imageFile: File,\r\n ): Promise<Equipment> {\r\n const equips = await this.uploadImageForAllEquipments(\r\n [equipment],\r\n imageFile,\r\n );\r\n if (equips.length === 0) {\r\n return null;\r\n }\r\n return equips[0];\r\n }\r\n\r\n async updateEquipment(\r\n equip: any,\r\n file: File = null,\r\n noteType: TypeNote = null,\r\n ): Promise<Equipment> {\r\n removeNullKeysFromObject(equip);\r\n return this.API.__proto__.UpdateEquipment(equip).then(\r\n async (receivedEquipment) => {\r\n let equipment = receivedEquipment as Equipment;\r\n if (equipment) {\r\n console.log(\"equipment updated:\", equipment);\r\n if (noteType) {\r\n switch (noteType) {\r\n case TypeNote.IMAGE:\r\n equipment = await this.uploadImage(\r\n equipment,\r\n file,\r\n );\r\n break;\r\n default:\r\n await this.uploadDoc(equipment, file, noteType);\r\n break;\r\n }\r\n }\r\n }\r\n return equipment;\r\n },\r\n );\r\n }\r\n\r\n getPrefixDoc(type: TypeNote) {\r\n let prefix;\r\n switch (type) {\r\n case TypeNote.INFORMATION:\r\n prefix = this.prefix.information;\r\n break;\r\n case TypeNote.FINANCIAL:\r\n prefix = this.prefix.financial;\r\n break;\r\n case TypeNote.CONTRACTUAL:\r\n prefix = this.prefix.contractual;\r\n break;\r\n case TypeNote.OTHER:\r\n prefix = this.prefix.other;\r\n break;\r\n case TypeNote.IMAGE:\r\n prefix = this.prefix.image;\r\n break;\r\n default:\r\n prefix = this.prefix.technical;\r\n break;\r\n }\r\n return prefix;\r\n }\r\n\r\n async uploadDocForAllEquipments(\r\n equipments: Equipment[],\r\n documentFile: File,\r\n type: TypeNote,\r\n ) {\r\n if (equipments.length === 0) {\r\n return [];\r\n }\r\n const prefix = this.getPrefixDoc(type);\r\n const url = await uploadFileToS3(prefix, documentFile, \"BATCH\");\r\n if (url) {\r\n const updateList = [];\r\n for (const equip of equipments) {\r\n const mission = this.userService.currentMission(equip.spaceID);\r\n const newEquip = await this.API.__proto__.CreateNote({\r\n attachment: url,\r\n type,\r\n equipmentID: equip.id,\r\n ownerMissionID: mission ? mission.id : null,\r\n });\r\n updateList.push(newEquip);\r\n }\r\n return updateList;\r\n }\r\n return [];\r\n }\r\n\r\n async uploadDoc(\r\n equipment: Equipment,\r\n documentFile: File,\r\n type: TypeNote,\r\n ): Promise<Note> {\r\n const prefix = this.getPrefixDoc(type);\r\n const mission = this.userService.currentMission(equipment.spaceID);\r\n return uploadFileToS3(prefix, documentFile, equipment.id).then(\r\n async (url) => {\r\n if (url) {\r\n return this.API.__proto__.CreateNote({\r\n attachment: url,\r\n type,\r\n equipmentID: equipment.id,\r\n ownerMissionID: mission ? mission.id : null,\r\n });\r\n }\r\n return null;\r\n },\r\n );\r\n }\r\n\r\n async deleteEquipment(equip: Equipment): Promise<Equipment> {\r\n const deleted = await this.API.__proto__.DeleteEquipment({ id: equip.id });\r\n console.log(\"Deleted equipment\", deleted);\r\n\r\n // delete POI\r\n const [poi] = equip.pois.items;\r\n if (poi) {\r\n await this.poiService.deletePoi(poi.id);\r\n }\r\n // delete notes related\r\n if (equip.notes.items.length > 0) {\r\n await Promise.all(\r\n equip.notes.items.map(async (note: Note) => {\r\n // delete files from S3\r\n /** Not shared with other equipment */\r\n if (\r\n note.attachment &&\r\n !note.attachment.split(\"/\").pop().startsWith(\"BATCH_\")\r\n ) {\r\n await deleteFromS3(note.attachment);\r\n }\r\n await this.API.__proto__.DeleteNote({ id: note.id });\r\n }),\r\n );\r\n }\r\n // delete operations (remove from linked tickets)\r\n await this.operationService.deleteOperationsForEquipment(equip.id)\r\n return deleted;\r\n }\r\n\r\n async updateEquipmentLocation(\r\n equip: Equipment,\r\n tagData: MattertagData,\r\n ): Promise<POI> {\r\n const poiInput = {\r\n coordinate: tagData.getCoordinateString(),\r\n type: PoiType.EQUIPMENT,\r\n elementID: equip.id,\r\n metadata: tagData.getMetadataString(),\r\n matterportSweepID: tagData.getSweepID(),\r\n } as POI;\r\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\r\n return poi;\r\n }\r\n\r\n async removeTicketFromEquipment(\r\n ticket: Ticket,\r\n equip: Equipment,\r\n ): Promise<Operation> {\r\n const operationEquip =\r\n await this.operationService.getOperationsByEquipmentID(equip.id);\r\n const operationToDelete = operationEquip.find(\r\n (op) => op.ticketID === ticket.id,\r\n );\r\n return this.operationService.deleteOperation(operationToDelete.id).then(\r\n (res) => {\r\n this.ticketsService.addEventToTicket(ticket as Ticket, {\r\n title: \"Equipement retiré du ticket\",\r\n description: `Equipement ${equip.name} a été retiré du ticket`,\r\n status: EventStatus.UNLINKED_FROM_EQUIPMENT,\r\n type: EventType.TICKET,\r\n translationPath: \"ticketEvent.ticket.unlinkedFromEquipment\",\r\n metadata: JSON.stringify({ equipment: equip.name }),\r\n });\r\n return res;\r\n },\r\n );\r\n }\r\n\r\n async initEquips() {\r\n if (!this.currentSpaceID) {\r\n return;\r\n }\r\n this.updating.next(true);\r\n this.currentlyUpdating = true;\r\n\r\n let eqList = await this.getEquipmentsForSpace(this.currentSpaceID);\r\n eqList = await this.filterService.filterEquipmentsForCurrentUserInSpace(\r\n this.currentSpaceID,\r\n eqList,\r\n );\r\n // console.log(eqList);\r\n if (eqList.length > 0) {\r\n let filteredEquips = eqList.filter(\r\n (equipment) => !this.isArchived(equipment),\r\n );\r\n\r\n await Promise.all(\r\n filteredEquips.map(async (equip) => {\r\n equip.documentationImageUrlSigned = await getSignedImageUrlForEquipment(equip);\r\n }),\r\n );\r\n if (this.equipmentDomainFilter) {\r\n filteredEquips =\r\n this.filterService.filterEquipmentsByDomainList(\r\n filteredEquips,\r\n this.equipmentDomainFilter,\r\n );\r\n }\r\n this.currentEquipments.space = filteredEquips;\r\n if (this.zoneIDFilter) {\r\n filteredEquips = (await this.filterService.filterObjectsForZone(\r\n filteredEquips,\r\n this.zoneIDFilter,\r\n this.currentZone,\r\n )) as Equipment[];\r\n }\r\n this.currentEquipments.zonesMap.set(\r\n this.zoneIDFilter,\r\n filteredEquips,\r\n );\r\n this.equipmentsTags.next(filteredEquips); // adding tags only for the current zone\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: filteredEquips,\r\n }); // for lateral menu\r\n } else {\r\n if (this.zoneIDFilter) {\r\n this.currentEquipments.zonesMap.set(this.zoneIDFilter, []);\r\n }\r\n this.equipmentsUpdated.next({ space: [], zone: [] }); // for lateral menu\r\n }\r\n // console.log(this.currentEquipments);\r\n this.updating.next(false);\r\n this.currentlyUpdating = false;\r\n }\r\n\r\n async getEquipmentsForCurrentUserForSpace(\r\n spaceID,\r\n missions: Mission[],\r\n ): Promise<Equipment[]> {\r\n let results = [];\r\n\r\n const spaceMissions = missions.filter((m) => m.spaceID === spaceID);\r\n if (spaceMissions.length === 0) {\r\n return results;\r\n }\r\n const canSeeEquips = spaceMissions.some(\r\n (m) =>\r\n this.userService.managers.includes(m.role) ||\r\n m.role === RoleStatus.SERVICE,\r\n );\r\n if (!canSeeEquips) {\r\n return results;\r\n }\r\n let domains = [];\r\n for (const m of spaceMissions) {\r\n domains = [...domains, m.domains];\r\n }\r\n if (domains.length === 0) {\r\n return results;\r\n }\r\n results = await this.getEquipmentsForSpace(spaceID);\r\n // results = this.filterService.filterEquipmentsByDomainList(\r\n // results,\r\n // domains,\r\n // );\r\n return results;\r\n }\r\n\r\n async updateIconForAllEquipmentsInSpace(\r\n tagIcon: string,\r\n spaceID: string,\r\n domainID: string = null,\r\n ): Promise<{ equips: Equipment[]; pois: POI[] }> {\r\n let equips = await this.getEquipmentsForSpace(spaceID);\r\n if (domainID) {\r\n equips = equips.filter((equip) => equip.domainID === domainID);\r\n }\r\n const pois = await this.updateIconForAllObjects(equips, tagIcon);\r\n return { equips, pois };\r\n }\r\n\r\n /** Return true if the current user has archived this equipment */\r\n isArchived(equipment: Equipment): boolean {\r\n return equipment.archivedForMissionID\r\n ? equipment.archivedForMissionID.includes(\r\n this.userService.currentMission(equipment.spaceID).id,\r\n )\r\n : false;\r\n }\r\n\r\n setArchived(equipment: Equipment, archived: boolean) {\r\n let archivedList = equipment.archivedForMissionID\r\n ? equipment.archivedForMissionID\r\n : [];\r\n const missionID = this.userService.currentMission(equipment.spaceID).id;\r\n\r\n archivedList = archivedList.filter((m) => m !== missionID);\r\n\r\n if (archived) {\r\n archivedList.push(missionID);\r\n }\r\n\r\n return this.updateEquipment({\r\n id: equipment.id,\r\n archivedForMissionID: archivedList,\r\n });\r\n }\r\n\r\n async deleteFile(document_: EquipmentDocument) {\r\n await deleteFromS3(document_.url);\r\n await this.API.DeleteNote({ id: document_.noteID });\r\n }\r\n\r\n async navigateToEquipmentIn3D(\r\n equipment: Equipment,\r\n forceSwitchVisit: boolean = false,\r\n ) {\r\n let url = `visit/${equipment.spaceID}`;\r\n if (forceSwitchVisit) {\r\n url += `/equip/${equipment.id}`;\r\n }\r\n const canGoToTag = await this.viewerService.action_move_to_tag(\r\n `${equipment.id}`,\r\n );\r\n if (canGoToTag) {\r\n return;\r\n }\r\n const result = await this.getModel3dAndSweep(equipment);\r\n\r\n if (!result || !result.model3D) {\r\n alert(\"Error while getting virtual visit model\");\r\n return;\r\n }\r\n if (!forceSwitchVisit) {\r\n // check if we are moving within the same 3D model\r\n const currentModel = localStorage.getItem(\"model3D\");\r\n if (currentModel && currentModel === result.model3D) {\r\n // we add tag to the visit\r\n const poi = equipment.pois.items[0];\r\n if (poi.coordinate) {\r\n // we force add because we might be in an another zone\r\n await this.viewerService.actionAddObjectFromPOI(\r\n equipment,\r\n poi,\r\n );\r\n await this.viewerService.action_move_to_tag(equipment.id);\r\n }\r\n } else {\r\n /** Si on ne force pas la visite, on demande si on veut etre switch */\r\n openModalForVisitSwitch(\r\n this.modalService,\r\n result.model3D,\r\n equipment.spaceID,\r\n { sweepToMove: result.sweep, rotation: result.rotation },\r\n );\r\n }\r\n } else {\r\n /** Si on force le switch de la visit */\r\n window.open(\r\n `${url}?model3D=${result.model3D}&sweep=true`,\r\n \"_blank\",\r\n );\r\n }\r\n }\r\n\r\n async updateEquipsForZone() {\r\n this.updating.next(true);\r\n let filteredEquips = [];\r\n if (this.currentEquipments.space.length > 0) {\r\n if (\r\n this.zoneIDFilter &&\r\n this.currentEquipments.zonesMap.has(this.zoneIDFilter)\r\n ) {\r\n filteredEquips = this.currentEquipments.zonesMap.get(\r\n this.zoneIDFilter,\r\n );\r\n // console.log(\"i have equips for this zone\", filteredEquips);\r\n } else {\r\n filteredEquips = (await this.filterService.filterObjectsForZone(\r\n this.currentEquipments.space,\r\n this.zoneIDFilter,\r\n this.currentZone,\r\n )) as Equipment[];\r\n\r\n this.currentEquipments.zonesMap.set(this.zoneIDFilter, [\r\n ...filteredEquips,\r\n ]);\r\n }\r\n if (this.equipmentDomainFilter) {\r\n filteredEquips =\r\n this.filterService.filterEquipmentsByDomainList(\r\n filteredEquips,\r\n this.equipmentDomainFilter,\r\n );\r\n }\r\n this.equipmentsTags.next(filteredEquips); // adding tags only for the current zone\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: filteredEquips,\r\n }); // for lateral menu\r\n } else {\r\n this.equipmentsUpdated.next({ space: [], zone: [] }); // for lateral menu\r\n }\r\n this.updating.next(false);\r\n }\r\n\r\n updateDueToDelete(deletedEquipment: Equipment) {\r\n // console.log(\"update due to delete\", deletedEquipment);\r\n const equip = this.currentEquipments.space.find(\r\n (_equip) => _equip.id === deletedEquipment.id,\r\n );\r\n if (equip) {\r\n const index = this.currentEquipments.space.indexOf(equip);\r\n this.currentEquipments.space.splice(index, 1);\r\n }\r\n for (const zone of this.currentEquipments.zonesMap.keys()) {\r\n const equipToDelete = this.currentEquipments.zonesMap\r\n .get(zone)\r\n .find((_equip) => _equip.id === deletedEquipment.id);\r\n if (equipToDelete) {\r\n const index = this.currentEquipments.zonesMap\r\n .get(zone)\r\n .indexOf(equipToDelete);\r\n this.currentEquipments.zonesMap.get(zone).splice(index, 1);\r\n }\r\n }\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\r\n }); // for lateral menu\r\n }\r\n\r\n updateDueToCreate(createdEquip: Equipment) {\r\n this.currentEquipments.space.unshift(createdEquip);\r\n this.currentEquipments.zonesMap\r\n .get(this.zoneIDFilter)\r\n .unshift(createdEquip);\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\r\n }); // for lateral menu\r\n }\r\n\r\n updateDueToEquipUpdated(updatedEquip: Equipment) {\r\n const equip = this.currentEquipments.space.find(\r\n (_equip) => _equip.id === updatedEquip.id,\r\n );\r\n if (equip) {\r\n const index = this.currentEquipments.space.indexOf(equip);\r\n if (this.isArchived(equip)) {\r\n // we remove archived equipment\r\n this.currentEquipments.space.splice(index, 1);\r\n } else {\r\n this.currentEquipments.space.splice(index, 1, updatedEquip);\r\n }\r\n }\r\n for (const zone of this.currentEquipments.zonesMap.keys()) {\r\n const equipToUpd = this.currentEquipments.zonesMap\r\n .get(zone)\r\n .find((_equip) => _equip.id === updatedEquip.id);\r\n if (equipToUpd) {\r\n const index = this.currentEquipments.zonesMap\r\n .get(zone)\r\n .indexOf(equipToUpd);\r\n if (this.isArchived(equip)) {\r\n this.currentEquipments.zonesMap.get(zone).splice(index, 1);\r\n } else {\r\n this.currentEquipments.zonesMap\r\n .get(zone)\r\n .splice(index, 1, updatedEquip);\r\n }\r\n }\r\n }\r\n this.equipmentsUpdated.next({\r\n space: this.currentEquipments.space,\r\n zone: this.currentEquipments.zonesMap.get(this.zoneIDFilter),\r\n }); // for lateral menu\r\n }\r\n\r\n initSubscriptions() {\r\n if (!this.isMuseumUser) {\r\n console.log(\"subscribe to equipments\");\r\n this.navigatorService.zoneChange.pipe(takeUntil(this.destroy$)).subscribe((zone) => {\r\n if (!zone || !this.navigatorService.currentSpaceID) {\r\n this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n this.equipmentsTags.next(null);\r\n this.equipmentsUpdated.next({ space: [], zone: null });\r\n this.zoneIDFilter = null;\r\n this.currentEquipments = {\r\n space: [],\r\n zonesMap: new Map(),\r\n };\r\n return;\r\n }\r\n if (zone.id !== this.zoneIDFilter) {\r\n this.zoneIDFilter = zone.id;\r\n this.currentZone = zone;\r\n if (\r\n this.currentSpaceID ===\r\n this.navigatorService.currentSpaceID\r\n ) {\r\n // same space, only zone update\r\n // console.log(\r\n // \"going to update equips for zone (same space)\",\r\n // zone,\r\n // );\r\n\r\n this.updateEquipsForZone();\r\n } else {\r\n this.currentSpaceID =\r\n this.navigatorService.currentSpaceID;\r\n // console.log(\r\n // \"going to init equips for zone for new space\",\r\n // this.currentSpaceID,\r\n // );\r\n this.initEquips();\r\n }\r\n }\r\n });\r\n\r\n this.deleteObservable.pipe(takeUntil(this.destroy$)).subscribe((equipment) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToDelete(equipment);\r\n }\r\n });\r\n\r\n this.createObservable.pipe(takeUntil(this.destroy$)).subscribe((equipment) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToCreate(equipment);\r\n }\r\n });\r\n\r\n this.updateObservable.pipe(takeUntil(this.destroy$)).subscribe((equipment) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToEquipUpdated(equipment);\r\n }\r\n });\r\n }\r\n }\r\n\r\n unsubscribe() {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n}","/* eslint-disable no-case-declarations */\r\n/* eslint-disable no-param-reassign */\r\n/* eslint-disable no-await-in-loop */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Mission } from \"../types.service\";\r\nimport { FilterService } from \"./filter.service\";\r\nimport { EquipmentService } from \"./models/equipment.service\";\r\n\r\nexport enum SearchObjectType {\r\n USER = \"USER\",\r\n EQUIPMENT = \"EQUIPMENT\",\r\n TICKET = \"TICKET\",\r\n LOCATION = \"LOCATION\",\r\n FEATURE = \"FEATURE\",\r\n TEMPLATE = \"TEMPLATE\",\r\n}\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class SearchService {\r\n constructor(\r\n private filterService: FilterService,\r\n private equipmentService: EquipmentService,\r\n ) { }\r\n\r\n async searchForTermForTypeInMap(\r\n term: string,\r\n objectType: SearchObjectType,\r\n searchable: any,\r\n ): Promise<any> {\r\n let results;\r\n switch (objectType) {\r\n case SearchObjectType.EQUIPMENT:\r\n results = new Map();\r\n for (const [space, equips] of searchable.entries()) {\r\n const filteredEquips =\r\n this.filterService.filterEquipmentsForTerm(\r\n equips,\r\n term,\r\n );\r\n results.set(space, filteredEquips);\r\n }\r\n break;\r\n case SearchObjectType.TICKET:\r\n results = new Map();\r\n for (const [space, tickets] of searchable.entries()) {\r\n await Promise.all(\r\n tickets.map(async (ticket) => {\r\n const equips =\r\n await this.equipmentService.getEquipmentsForTicket(\r\n ticket,\r\n );\r\n if (equips.length > 0) {\r\n ticket.equipments = equips;\r\n }\r\n }),\r\n );\r\n const filteredTickets =\r\n this.filterService.filterTicketsForTerm(\r\n tickets,\r\n term,\r\n );\r\n results.set(space, filteredTickets);\r\n }\r\n break;\r\n case SearchObjectType.LOCATION:\r\n results = this.filterService.filterLocationsForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n case SearchObjectType.USER:\r\n results = [];\r\n for (const orgObject of searchable) {\r\n const orgResults =\r\n this.filterService.filterOrganisationsForTerm(\r\n [orgObject.org],\r\n term,\r\n );\r\n if (orgResults.length === 0) {\r\n const profiles = orgObject.users.map(\r\n (object) => object.user,\r\n );\r\n const userResults =\r\n this.filterService.filterUsersForTerm(\r\n profiles,\r\n term,\r\n );\r\n const filteredUserMissions = orgObject.users.filter(\r\n (object) => userResults.includes(object.user),\r\n );\r\n if (userResults.length > 0) {\r\n results.push({\r\n org: orgObject.org,\r\n users: filteredUserMissions,\r\n });\r\n }\r\n } else {\r\n results.push(orgObject);\r\n }\r\n }\r\n break;\r\n case SearchObjectType.FEATURE:\r\n results = new Map();\r\n for (const [space, features] of searchable.entries()) {\r\n const filteredFeatures =\r\n await this.filterService.filterFeaturesForTerm(\r\n features,\r\n term,\r\n );\r\n results.set(space, filteredFeatures);\r\n }\r\n break;\r\n case SearchObjectType.TEMPLATE:\r\n results = new Map();\r\n for (const [zone, templates] of searchable) {\r\n const templateResults =\r\n this.filterService.filterTemplatesForTerm(\r\n templates as Mission[],\r\n term,\r\n );\r\n if (templateResults.length > 0) {\r\n results.set(zone, templateResults);\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return results;\r\n }\r\n\r\n async searchForTermForTypeInList(\r\n term: string,\r\n objectType: SearchObjectType,\r\n searchable: any[],\r\n ): Promise<any[]> {\r\n let results;\r\n switch (objectType) {\r\n case SearchObjectType.EQUIPMENT:\r\n results = this.filterService.filterEquipmentsForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n case SearchObjectType.TICKET:\r\n await Promise.all(\r\n searchable.map(async (ticket) => {\r\n const equips =\r\n await this.equipmentService.getEquipmentsForTicket(\r\n ticket,\r\n );\r\n if (equips.length > 0) {\r\n ticket.equipements = equips;\r\n }\r\n }),\r\n );\r\n results = this.filterService.filterTicketsForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n case SearchObjectType.LOCATION:\r\n results = this.filterService.filterLocationsForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n case SearchObjectType.FEATURE:\r\n results = this.filterService.filterFeaturesForTerm(\r\n searchable,\r\n term,\r\n );\r\n break;\r\n default:\r\n break;\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { SearchObjectType, SearchService } from '../../services/search.service';\r\n\r\n@Component({\r\n selector: 'lib-search-bar',\r\n templateUrl: './search-bar.component.html',\r\n styleUrls: ['./search-bar.component.scss']\r\n})\r\nexport class SearchBarComponent implements OnInit {\r\n\r\n @Input() searchable: any;\r\n\r\n @Input() objectType: SearchObjectType;\r\n\r\n @Output() searchEvent = new EventEmitter();\r\n\r\n public model: any;\r\n\r\n // formatter = (result: string) => result.toUpperCase();\r\n\r\n // search: OperatorFunction<string, readonly string[]> = (\r\n // text$: Observable<string>,\r\n // ) =>\r\n // text$.pipe(\r\n // debounceTime(200),\r\n // distinctUntilChanged(),\r\n // map((term) =>\r\n // term === \"\"\r\n // ? []\r\n // : this.searchable\r\n // .filter((v) =>\r\n // v.toLowerCase().includes(term.toLowerCase()),\r\n // )\r\n // .slice(0, 10),\r\n // ),\r\n // );\r\n\r\n // filter = (input: string[]) => string[];\r\n\r\n constructor(private searchService: SearchService) { }\r\n\r\n ngOnInit(): void {\r\n const input = document.querySelector(\"#searchbar\") as HTMLInputElement;\r\n input.addEventListener(\"keydown\", ({ key }) => {\r\n if (key === \"Enter\") {\r\n this.onSubmit();\r\n }\r\n });\r\n }\r\n\r\n onSubmit() {\r\n const input = document.querySelector(\"#searchbar\") as HTMLInputElement;\r\n const searchValue = input.value.toLowerCase();\r\n if (searchValue !== \"\") {\r\n this.filter(searchValue);\r\n } else {\r\n this.searchEvent.emit(null);\r\n }\r\n }\r\n\r\n async filter(term: string) {\r\n const results = await this.searchService.searchForTermForTypeInMap(\r\n term,\r\n this.objectType,\r\n this.searchable,\r\n );\r\n this.searchEvent.emit(results);\r\n }\r\n}\r\n","<div class=\"col-md-8 searchbar\">\n <div class=\"row depend\">\n <div class=\"col-md-5\">\n <input id=\"searchbar\" type=\"text\" class=\"form-control\" placeholder=\"keyword\" />\n </div>\n <div class=\"col-md-5\">\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onSubmit()\">{{ 'Search' |\n translate}}</button>\n </div>\n </div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, Subscription } from 'rxjs';\n\n@Pipe({\n name: 'durationToString'\n})\nexport class DurationToStringPipe implements PipeTransform {\n durationToString(\n duration: number\n ): string {\n const days = Math.floor(duration / 3600 / 24);\n const hours = Math.floor((duration - days * 24 * 3600) / 3600);\n const minutes = Math.floor((duration % 3600) / 60);\n const seconds = Math.floor(duration % 60);\n \n const daysString = this.translate.instant(\"day(s)\");\n const hoursString = this.translate.instant(\"hour(s)\");\n const oneHourString = this.translate.instant(\"hour\");\n const minutesString = this.translate.instant(\"minute(s)\");\n const secondsString = this.translate.instant(\"second(s)\");\n \n if (duration > 3600 * 24 * 7) {\n return `${days} ${daysString}`;\n }\n if (duration > 3600 * 24) {\n return `${days} ${daysString} ${hours} ${hoursString}`;\n }\n if (duration === 3600) {\n return `${hours} ${oneHourString}`;\n }\n if (duration > 3600) {\n if (minutes === 0) {\n return `${hours} ${hoursString}`;\n }\n return `${hours} ${hoursString} ${minutes} ${minutesString}`;\n }\n if (duration >= 60) {\n if (seconds === 0) {\n return `${minutes} ${minutesString}`;\n }\n return `${minutes} ${minutesString} ${seconds} ${secondsString}`;\n }\n return `${seconds} ${secondsString}`;\n }\n\n constructor(private translate: TranslateService) { }\n\n transform(duration: number): Observable<string> {\n let subscript: Subscription;\n\n const dateObserver: Observable<string> = new Observable((observer) => {\n subscript = this.translate.onLangChange.subscribe((event) => {\n observer.next(this.durationToString(duration));\n });\n observer.next(this.durationToString(duration));\n\n return {\n unsubscribe() {\n subscript.unsubscribe();\n },\n };\n });\n return dateObserver;\n }\n\n}\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Hashtag, Node } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class HashtagService {\r\n currentSpaceID: string;\r\n\r\n currentHashtags: Hashtag[] = [];\r\n\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getHashtag(hashtagID: string): Promise<Hashtag> {\r\n return this.API.__proto__.GetHashtag(hashtagID);\r\n }\r\n\r\n async createHashtag(hashtag: Hashtag): Promise<Hashtag> {\r\n const hashtagCreated = await this.API.__proto__.CreateHashtag(hashtag);\r\n this.currentHashtags.push(hashtagCreated);\r\n return hashtagCreated;\r\n }\r\n\r\n async getHashtagsForSpace(spaceID: string = null): Promise<Hashtag[]> {\r\n if (!spaceID) {\r\n if (this.currentHashtags.length === 0 && this.currentSpaceID) {\r\n return this.API.__proto__.HashtagsBySpace(this.currentSpaceID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n return this.currentHashtags;\r\n }\r\n this.currentSpaceID = spaceID;\r\n return this.API.__proto__.HashtagsBySpace(spaceID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { HashtagService } from '../services/models/hashtag.service';\n\n@Pipe({\n name: 'hashtagFromID'\n})\nexport class HashtagFromIdPipe implements PipeTransform {\n\n constructor(\n private hashtagService: HashtagService\n ) {}\n\n async transform(hashtagID: string): Promise<string> {\n if (this.hashtagService.currentHashtags.length === 0) {\n return this.hashtagService.getHashtag(hashtagID).then((hashtag) => {\n return hashtag.name;\n });\n }\n const hashtag = this.hashtagService.currentHashtags.find(\n (_hashtag) => _hashtag.id === hashtagID,\n );\n return hashtag ? hashtag.name : \"\";\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeUrl'\n})\nexport class SafeUrlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) { }\n\n transform(url: any) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { Observable } from 'rxjs/internal/Observable';\n\n@Pipe({\n name: 'timeDateString'\n})\nexport class TimeDateToLocalStringPipe implements PipeTransform {\n /**\n * Return a string of a given date time in local format.\n * The format is determined by the current language.\n */\n dateTimeToLocalString(\n date: number | string | Date,\n mode?: string,\n ): string {\n let lang = \"en-EN\";\n if (this.translate) {\n /** Get current language */\n lang = this.translate.currentLang\n ? this.translate.currentLang\n : this.translate.defaultLang;\n /** Transforme '_fr' to 'fr' */\n if (lang) {\n lang = lang.slice(1);\n }\n \n }\n \n let options: {\n month?;\n year?;\n day?;\n hour?;\n minute?;\n second?;\n dateStyle?;\n timeStyle?;\n weekday?;\n timeZone?;\n timeZoneName?;\n };\n switch (mode) {\n case \"day_numeric\":\n options = { day: \"numeric\" };\n break;\n case \"day\":\n options = { weekday: \"long\" };\n break;\n case \"date\":\n options = { dateStyle: \"long\" };\n break;\n case \"short_date_time\":\n options = {\n year: \"2-digit\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n break;\n case \"time\":\n options = { hour: \"numeric\", minute: \"numeric\" };\n break;\n case \"time_zone\":\n options = { hour: \"numeric\", minute: \"numeric\", timeZoneName: \"shortOffset\"};\n break;\n case \"day_time_zone_weekday\":\n options = {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZoneName: \"shortOffset\",\n };\n break;\n case \"date_time_zone\":\n options = {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZoneName: \"shortOffset\",\n };\n break;\n default:\n options = {\n dateStyle: \"long\",\n timeStyle: \"short\",\n };\n }\n return new Date(date).toLocaleString(lang, options);\n }\n\n constructor(private translate: TranslateService) { }\n\n transform(date: number | string | Date, mode?: any): Observable<string> {\n let subscript: Subscription;\n\n const dateObserver: Observable<string> = new Observable((observer) => {\n subscript = this.translate.onLangChange.subscribe((event) => {\n observer.next(\n this.dateTimeToLocalString(date, mode),\n );\n });\n observer.next(this.dateTimeToLocalString(date, mode));\n\n return {\n unsubscribe() {\n subscript.unsubscribe();\n },\n };\n });\n return dateObserver;\n }\n\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { BaseUserService } from \"../services/user.service\";\r\n\r\n@Pipe({\r\n name: \"usernameFromId\",\r\n})\r\nexport class UsernameFromIdPipe implements PipeTransform {\r\n static cache = {};\r\n\r\n constructor(private userService: BaseUserService) {}\r\n\r\n async transform(userId: string): Promise<string> {\r\n if (UsernameFromIdPipe.cache[userId] !== undefined) {\r\n return new Promise<string>((resolve) => {\r\n resolve(UsernameFromIdPipe.cache[userId]);\r\n });\r\n }\r\n const user = await this.userService.userFromUserID(userId);\r\n // @ts-ignore\r\n UsernameFromIdPipe.cache[userId] = `${user.displayName}`;\r\n return UsernameFromIdPipe.cache[userId];\r\n }\r\n}\r\n","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport function noEmptyValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if(control.value && control.value !== ''){\r\n\r\n const data = control.value.replace(/ /g, '');\r\n return data === '' ? {isEmpty: control.value} : null;\r\n }else{\r\n return null;\r\n }\r\n };\r\n }","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport function emailValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const regex = /^(([^\\s\"(),.:;<>@[\\\\\\]]+(\\.[^\\s\"(),.:;<>@[\\\\\\]]+)*)|(\".+\"))@((\\[(?:\\d{1,3}\\.){3}\\d{1,3}])|(([\\dA-Za-z\\-]+\\.)+[A-Za-z]{2,}))$/;\r\n return !regex.test(control.value) ? {email: control.value} : null;\r\n };\r\n }","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport function textValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const regex = /[a-zA-Z1-9]/;\r\n if (control.value && control.value !== '') {\r\n return !regex.test(control.value) ? { text: control.value } : null;\r\n } else {\r\n return null;\r\n }\r\n };\r\n}","import { Injectable } from '@angular/core';\r\nimport { API } from \"aws-amplify\";\r\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportService {\r\n modalReference;\r\n\r\n constructor(public modalService: NgbModal) { }\r\n\r\n /**\r\n * Open the support form\r\n */\r\n openSupportForm(formComponent) {\r\n this.modalReference = this.modalService.open(formComponent, {\r\n modalDialogClass: 'modal-padding',\r\n });\r\n }\r\n\r\n /**\r\n * Send support request to jira\r\n */\r\n async sendSupport(data:any):Promise<string>{\r\n return new Promise(async (resolve)=>{\r\n const response = await API.post(\"helpEmail\", \"/jira-email/new\", {\r\n body : data,\r\n });\r\n if(response.err){\r\n resolve('error')\r\n }else{\r\n resolve('send')\r\n }\r\n })\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ValidatorsService {\r\n\r\n constructor() { }\r\n\r\n /**\r\n * return if control as error\r\n * @param control \r\n * @returns \r\n */\r\n public isControlError(control) {\r\n return (control && control.invalid && control.touched )\r\n }\r\n\r\n /**\r\n * return error of control\r\n * @param control \r\n * @returns \r\n */\r\n public getError(control){\r\n if(control.errors){\r\n if(control.errors.required){\r\n return 'errorForm.required'\r\n }\r\n if(control.errors.isEmpty){\r\n return 'errorForm.isEmpty'\r\n }\r\n if(control.errors.text){\r\n return 'errorForm.text'\r\n }\r\n if(control.errors.email){\r\n return 'errorForm.email'\r\n }\r\n if(control.errors.maxLength){\r\n return 'errorForm.maxLength'\r\n }\r\n if(control.errors.number){\r\n return 'errorForm.number'\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-loader',\r\n templateUrl: './loader.component.html',\r\n styleUrls: ['./loader.component.scss']\r\n})\r\nexport class LoaderComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","<div class=\"sk-fading-circle\">\r\n <img src=\"../../../../assets/icons/smarterplan.svg\">\r\n <div class=\"sk-circle1 sk-circle\"></div>\r\n <div class=\"sk-circle2 sk-circle\"></div>\r\n <div class=\"sk-circle3 sk-circle\"></div>\r\n <div class=\"sk-circle4 sk-circle\"></div>\r\n <div class=\"sk-circle5 sk-circle\"></div>\r\n <div class=\"sk-circle6 sk-circle\"></div>\r\n <div class=\"sk-circle7 sk-circle\"></div>\r\n <div class=\"sk-circle8 sk-circle\"></div>\r\n <div class=\"sk-circle9 sk-circle\"></div>\r\n <div class=\"sk-circle10 sk-circle\"></div>\r\n <div class=\"sk-circle11 sk-circle\"></div>\r\n <div class=\"sk-circle12 sk-circle\"></div>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\r\nimport { BaseUserService } from '../../services/user.service';\r\nimport { Auth } from \"aws-amplify\";\r\nimport { SupportService } from '../../services/support.service';\r\nimport { noEmptyValidator } from '../../validators/no-empty.directive';\r\nimport { ValidatorsService } from '../../services/validators.service';\r\nimport { emailValidator } from '../../validators/email.directive';\r\nimport { textValidator } from '../../validators/text.directive';\r\n\r\n@Component({\r\n selector: 'app-support-modal',\r\n templateUrl: './support-modal.component.html',\r\n styleUrls: ['./support-modal.component.scss']\r\n})\r\nexport class SupportModalComponent implements OnInit {\r\n status = 'new';\r\n\r\n supportForm: FormGroup;\r\n\r\n currentUser: any;\r\n\r\n loading: boolean = true;\r\n\r\n constructor(\r\n private supportService: SupportService,\r\n public activeModal: NgbActiveModal,\r\n private formBuilder: FormBuilder,\r\n private userService: BaseUserService,\r\n public validatorsService : ValidatorsService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.iniForm();\r\n }\r\n\r\n onClose() {\r\n this.activeModal.close();\r\n }\r\n\r\n async getCurrentUser(): Promise<any> {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const cau = await Auth.currentAuthenticatedUser();\r\n resolve(await this.userService.current(cau));\r\n } catch (error) {\r\n resolve(undefined);\r\n }\r\n })\r\n }\r\n\r\n async iniForm() {\r\n this.currentUser = await this.getCurrentUser();\r\n this.supportForm = this.formBuilder.group({\r\n title: ['', [Validators.required , Validators.maxLength(255), noEmptyValidator(), textValidator()]],\r\n email: [(this.currentUser ? this.currentUser.email : ''), [Validators.required, emailValidator(), Validators.maxLength(255), textValidator()]],\r\n description: ['', [Validators.required, noEmptyValidator(), textValidator()]],\r\n });\r\n this.loading = false;\r\n }\r\n \r\n async onSubmit() {\r\n if(this.supportForm.valid){\r\n this.loading = true;\r\n this.status = await this.supportService.sendSupport(this.supportForm.value);\r\n this.loading = false;\r\n }\r\n }\r\n\r\n}","<div class=\"modal-header\">\r\n <h5 class=\"modal-title\" translate=\"Help\"></h5>\r\n</div>\r\n<div class=\"modal-body\">\r\n <div class=\"support-loader-container\">\r\n <lib-loader *ngIf=\"loading\"></lib-loader>\r\n </div>\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"supportForm\" style=\"margin-top:1rem;\" *ngIf=\"!loading && status==='new'\">\r\n <div>\r\n <label>{{'Title' | translate}} *</label>\r\n <div>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" data-testid=\"new-support-title\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['title'])}\"\r\n maxlength=\"255\">\r\n </div>\r\n <div class=\"invalid-feedback\">\r\n <span data-testid=\"new-support-title-invalid\" [translate]=\"validatorsService.getError(supportForm.controls['title'])\"\r\n *ngIf=\" validatorsService.isControlError(supportForm.controls['title'])\"></span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!currentUser\">\r\n <label>{{'Email' | translate}} *</label>\r\n <div>\r\n <input type=\"email\" class=\"form-control\" formControlName=\"email\" data-testid=\"new-support-email\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['email'])}\"\r\n maxlength=\"255\">\r\n </div>\r\n <div class=\"invalid-feedback\">\r\n <span data-testid=\"new-support-email-invalid\" [translate]=\"validatorsService.getError(supportForm.controls['email'])\"\r\n *ngIf=\" validatorsService.isControlError(supportForm.controls['email'])\"></span>\r\n </div>\r\n </div>\r\n <div>\r\n <label>{{'Description' | translate}} *</label>\r\n <div>\r\n <textarea formControlName=\"description\" class=\"form-control\"\r\n data-testid=\"new-support-description\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(supportForm.controls['description'])}\"></textarea>\r\n </div>\r\n <div class=\"invalid-feedback\" >\r\n <span data-testid=\"new-support-description-invalid\" [translate]=\" validatorsService.getError(supportForm.controls['description'])\"\r\n *ngIf=\"validatorsService.isControlError(supportForm.controls['description'])\"></span>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n <div *ngIf=\"status ==='send'\" translate=\"Your request has been registered\" data-testid=\"new-support-send-info\">\r\n </div>\r\n <div *ngIf=\"status ==='error'\" translate=\"An error has occurred, please renew your request\"\r\n data-testid=\"new-support-error-info\">\r\n\r\n </div>\r\n</div>\r\n<div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn rounded-pill btn-museum\" data-dismiss=\"modal\" translate=\"Close\" (click)=\"onClose()\"\r\n data-testid=\"new-support-close-btn\"></button>\r\n <button *ngIf=\"!loading && status==='new'\" type=\"button\" class=\"btn rounded-pill btn-museum\" translate=\"Submit\"\r\n (click)=\"onSubmit()\" [disabled]=\"!supportForm.valid\" data-testid=\"new-support-submit-btn\"></button>\r\n</div>","import { Injectable } from \"@angular/core\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\nimport { Subject } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class LocaleService {\r\n currentLocale = \"en\";\r\n\r\n // Observable string sources\r\n private showModalSource = new Subject();\r\n\r\n showModal$ = this.showModalSource.asObservable();\r\n\r\n constructor(public translate: TranslateService) {}\r\n\r\n modal() {\r\n this.showModalSource.next(true);\r\n }\r\n\r\n /**\r\n * Reload the app to another language.\r\n *\r\n * Navigation is required because of the way angular localizes: locales are\r\n * completely different compilation bundles, in separate directories, hence\r\n * you need to reload.\r\n *\r\n * @param lang\r\n */\r\n change(lang: string): void {\r\n console.log(\"Switching to\", lang);\r\n this.currentLocale = lang;\r\n this.translate.use(`_${lang}`); // because files are \"_en.json\"\r\n }\r\n\r\n getLocale(): string {\r\n const lang = this.translate.currentLang\r\n ? this.translate.currentLang\r\n : this.translate.defaultLang;\r\n return lang.slice(1);\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\nimport { NgbDate, NgbCalendar, NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';\nimport { FilterService } from '../../../services/filter.service';\n\n@Component({\n selector: 'lib-range-date-picker',\n templateUrl: './range-date-picker.component.html',\n styleUrls: ['./range-date-picker.component.scss']\n})\nexport class RangeDatePickerComponent implements OnInit {\n hoveredDate: NgbDate | null = null;\n\n fromDate: NgbDate | null;\n\n toDate: NgbDate | null;\n\n constructor(\n private calendar: NgbCalendar,\n public formatter: NgbDateParserFormatter,\n private filterService: FilterService,\n ) {\n // this.fromDate = calendar.getPrev(calendar.getToday(), \"d\", 30);\n // this.toDate = calendar.getToday();\n }\n\n ngOnInit(): void {\n this.filterService.dateFilterUpdated(null);\n }\n\n onDateSelection(date: NgbDate) {\n if (!this.fromDate && !this.toDate) {\n this.fromDate = date;\n } else if (\n this.fromDate &&\n !this.toDate &&\n date &&\n date.after(this.fromDate)\n ) {\n this.toDate = date;\n } else {\n this.toDate = null;\n this.fromDate = date;\n }\n }\n\n isHovered(date: NgbDate) {\n return (\n this.fromDate &&\n !this.toDate &&\n this.hoveredDate &&\n date.after(this.fromDate) &&\n date.before(this.hoveredDate)\n );\n }\n\n isInside(date: NgbDate) {\n return (\n this.toDate && date.after(this.fromDate) && date.before(this.toDate)\n );\n }\n\n isRange(date: NgbDate) {\n return (\n date.equals(this.fromDate) ||\n (this.toDate && date.equals(this.toDate)) ||\n this.isInside(date) ||\n this.isHovered(date)\n );\n }\n\n validateInput(currentValue: NgbDate | null, input: string): NgbDate | null {\n const parsed = this.formatter.parse(input);\n return parsed && this.calendar.isValid(NgbDate.from(parsed))\n ? NgbDate.from(parsed)\n : currentValue;\n }\n\n emitRange() {\n if (this.fromDate && this.toDate) {\n const from = new Date(\n this.fromDate.year,\n this.fromDate.month - 1,\n this.fromDate.day,\n );\n const to = new Date(\n this.toDate.year,\n this.toDate.month - 1,\n this.toDate.day,\n 23,\n 59,\n );\n this.filterService.dateFilterUpdated([from, to]);\n }\n }\n\n onClearDates() {\n this.fromDate = null;\n this.toDate = null;\n this.filterService.dateFilterUpdated(null);\n }\n\n onApply() {\n if (this.fromDate && this.toDate) {\n this.emitRange();\n }\n }\n\n\n}\n","<form class=\"form-inline\">\n <div class=\"mb-3 hidden\">\n <div class=\"input-group\">\n <input name=\"datepicker\" class=\"form-control\" ngbDatepicker #datepicker=\"ngbDatepicker\"\n [autoClose]=\"'outside'\" (dateSelect)=\"onDateSelection($event)\" [displayMonths]=\"2\" [dayTemplate]=\"t\"\n outsideDays=\"hidden\" [startDate]=\"fromDate!\" tabindex=\"-1\">\n <ng-template #t let-date let-focused=\"focused\">\n <span class=\"custom-day\" [class.focused]=\"focused\" [class.range]=\"isRange(date)\"\n [class.faded]=\"isHovered(date) || isInside(date)\" (mouseenter)=\"hoveredDate = date\"\n (mouseleave)=\"hoveredDate = null\">\n {{ date.day }}\n </span>\n </ng-template>\n </div>\n </div>\n <div>\n <div class=\"input-group\">\n <input #dpFromDate class=\"form-control\" placeholder=\"dd/MM/yyyy\" name=\"dpFromDate\"\n [value]=\"formatter.format(fromDate)\" (input)=\"fromDate = validateInput(fromDate, dpFromDate.value)\">\n <div class=\"input-group-append\">\n <button class=\"btn btn-outline-secondary calendar\" (click)=\"datepicker.toggle()\" type=\"button\"></button>\n </div>\n </div>\n </div>\n <div class=\"mb-3 ms-2\">\n <div class=\"input-group\">\n <input #dpToDate class=\"form-control\" placeholder=\"dd/MM/yyyy\" name=\"dpToDate\"\n [value]=\"formatter.format(toDate)\" (input)=\"toDate = validateInput(toDate, dpToDate.value)\">\n <div class=\"input-group-append\">\n <button class=\"btn btn-outline-secondary calendar\" (click)=\"datepicker.toggle()\" type=\"button\"></button>\n </div>\n </div>\n </div>\n <button class=\"btn btn-outline-primary rounded-pill ms-3\" (click)=\"onApply()\" [disabled]=\"!toDate\">{{'Apply' |\n translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill ms-3\" (click)=\"onClearDates()\">{{'Clear' |\n translate}}</button>\n</form>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ProfileService } from '../../../services/models/profile.service';\nimport { uploadFileToS3, getSignedImageUrlForProfile } from '../../../services/s3.service';\nimport { BaseUserService } from '../../../services/user.service';\nimport { ProfileEntity } from '../../../types.service';\nimport { Md5 } from \"ts-md5/dist/md5\";\n\nconst cache = {};\n@Component({\n selector: 'lib-avatar',\n template: `<img [src]=\"avatar\" />`,\n styleUrls: [\"./avatar.component.scss\"],\n})\nexport class AvatarComponent implements OnInit {\n\n @Input() size: number = 45;\n\n @Input() userID: string;\n\n currentUser: ProfileEntity;\n\n avatar;\n\n constructor(\n private userService: BaseUserService,\n private profileService: ProfileService,\n ) {\n this.userService.isChanged.subscribe(() => {\n if (!this.currentUser) {\n this.currentUser = this.userService.cu;\n this.setAvatar(this.currentUser);\n }\n });\n }\n\n async ngOnInit(): Promise<void> {\n if (this.userID) {\n const profile = await this.profileService.getProfile(this.userID);\n if (profile) {\n const user = new ProfileEntity(profile);\n this.setAvatar(user);\n }\n } else {\n this.currentUser = this.userService.cu;\n this.setAvatar(this.currentUser);\n }\n }\n\n async setAvatar(user: ProfileEntity) {\n const { id, avatar, email } = user;\n\n // If avatar is not cached, check first if we have an avatar URL to fetch\n // from S3. If not, retrieve it from libravatar.\n // TODO use in a Service to be able to change/upload freely.\n if (!cache.hasOwnProperty(id)) {\n if (!avatar && email) {\n const md5 = new Md5();\n const md5hash = md5.appendStr(email).end();\n const avatar = `https://seccdn.libravatar.org/avatar/${md5hash}?s=${this.size}&default=identicon`;\n const url = await fetch(avatar)\n .then((res) => res.blob())\n .then((blob) => {\n const file = new File([blob], \"avatar.jpeg\", {\n type: \"image/jpeg\",\n });\n return uploadFileToS3(\"avatars/\", file, id);\n });\n await this.profileService.updateProfile({ id, avatar: url });\n user.avatar = url;\n cache[id] = avatar;\n }\n if (avatar) {\n // TODO generating signed urls for avatar makes NO SENSE ($$$)\n // Sorry got to copypaste that, but really need to get rid of\n cache[id] = await getSignedImageUrlForProfile(user);\n }\n }\n this.avatar = cache[id];\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Capture } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class CaptureService {\r\n API: any; //AWS\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected\r\n }\r\n\r\n async getCapturesBySpace(spaceID: string): Promise<Capture[]> {\r\n return this.API.CapturesBySpace(spaceID).then((cap) => cap.items);\r\n }\r\n\r\n async getCapture(captureID: string): Promise<Capture> {\r\n return this.API.__proto__.GetCapture(captureID);\r\n }\r\n\r\n async deleteCapture(captureID: string): Promise<Capture> {\r\n return this.API.__proto__.DeleteCapture({id: captureID});\r\n }\r\n\r\n async updateCapture(capture: any): Promise<Capture> {\r\n return this.API.__proto__.UpdateCapture(capture);\r\n }\r\n\r\n async createCapture(capture: Capture): Promise<Capture> {\r\n return this.API.__proto__.CreateCapture(capture);\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Node } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class NodeService {\r\n API: any;\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async updateNode(input: any): Promise<Node> {\r\n return this.API.__proto__.UpdateNode(input);\r\n }\r\n\r\n async deleteNode(id: string): Promise<Node> {\r\n return this.API.__proto__.DeleteNode({ id });\r\n }\r\n\r\n async getNode(id: string): Promise<Node> {\r\n return this.API.__proto__.GetNode(id);\r\n }\r\n\r\n async createNode(input: Node): Promise<Node> {\r\n return this.API.__proto__.CreateNode(input);\r\n }\r\n}\r\n","import { getMetaForImage, wait } from \"../helpers.service\";\r\nimport { Navigation, Plan } from \"../types.service\";\r\n\r\nexport function getCoefficientsForImage(\r\n img: HTMLImageElement,\r\n rectangle: any,\r\n): { coeffX: number; coeffY: number } {\r\n let coeffY;\r\n let coeffX;\r\n const imgRatio = img.width / img.height;\r\n const rectRatio = rectangle.width / rectangle.height;\r\n // console.log(\"image\", img.width, img.height);\r\n // console.log(\"rectangle\", rectangle.width, rectangle.height);\r\n // console.log(imgRatio, rectRatio);\r\n if (imgRatio > rectRatio) {\r\n // img is fitted in rectangle by width\r\n coeffX = img.width / rectangle.width;\r\n const effectiveImageHeight = rectangle.width / imgRatio;\r\n coeffY = img.height / effectiveImageHeight;\r\n } else {\r\n coeffY = img.height / rectangle.height;\r\n const effectiveImageWidth = rectangle.height * imgRatio;\r\n coeffX = img.width / effectiveImageWidth;\r\n }\r\n // console.log(coeffX, coeffY);\r\n return { coeffX, coeffY };\r\n}\r\n\r\nexport function styleButton(button: HTMLButtonElement) {\r\n button.style.backgroundImage = `url(\"https://api.iconify.design/mdi:adjust.svg?color=green&height=17&width=17\")`;\r\n button.style.backgroundColor = \"transparent\";\r\n button.style.position = \"absolute\";\r\n button.style.border = \"none\";\r\n button.style.width = \"17px\";\r\n button.style.height = \"17px\";\r\n button.disabled = true;\r\n}\r\n\r\nexport const showScanPointsOnPlanInDiv = async (\r\n plan: Plan,\r\n divPlan: HTMLElement,\r\n navigations: Navigation[],\r\n): Promise<HTMLButtonElement[]> => {\r\n if (!divPlan || !plan.filepath) {\r\n return [];\r\n }\r\n const calibrage = JSON.parse(plan.calibration);\r\n\r\n const img = await getMetaForImage(plan.filepath);\r\n divPlan.style.backgroundImage = `url(${plan.filepath})`;\r\n divPlan.style.backgroundSize = \"contain\";\r\n divPlan.style.backgroundRepeat = \"no-repeat\";\r\n await wait(1500); // while image is loaded to div\r\n divPlan.innerHTML = \"\"; // remove all previous buttons if exist\r\n const rect = divPlan.getBoundingClientRect();\r\n const { coeffX, coeffY } = getCoefficientsForImage(img, rect);\r\n const buttons = [];\r\n await Promise.all(\r\n navigations.map(async (navigation) => {\r\n const element = document.createElement(\"button\");\r\n styleButton(element);\r\n element.id = navigation.matterportSweepID;\r\n if (calibrage.new) {\r\n // new procedure of calibrage\r\n // find position for a given plan\r\n const positionsOnPlan = navigation.positionOnPlan.map((entry) =>\r\n JSON.parse(entry),\r\n );\r\n const positionOnPlan = positionsOnPlan.find(\r\n (data) => data.planID === plan.id,\r\n );\r\n if (positionOnPlan) {\r\n const realWidth = img.width / coeffX;\r\n const realHeight = img.height / coeffY;\r\n element.style.top = `${\r\n (positionOnPlan.y * realHeight) / calibrage.imgHeight -\r\n 10\r\n }px`;\r\n element.style.left = `${\r\n (positionOnPlan.x * realWidth) / calibrage.imgWidth - 10\r\n }px`;\r\n }\r\n } else {\r\n const position = JSON.parse(navigation.position);\r\n const x = calibrage.offsetX + position.x * calibrage.x;\r\n const y = calibrage.offsetY + position.z * calibrage.y;\r\n element.style.top = `${y / coeffY - 10}px`;\r\n element.style.left = `${x / coeffX - 10}px`;\r\n }\r\n divPlan.append(element);\r\n buttons.push(element);\r\n }),\r\n );\r\n return buttons;\r\n};\r\n","/* eslint-disable func-names */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { getDocument, GlobalWorkerOptions } from \"pdfjs-dist\";\r\nimport panzoom from \"panzoom\";\r\nimport { ReplaySubject, Subject, takeUntil } from \"rxjs\";\r\nimport { Router } from \"@angular/router\";\r\nimport { FeatureType, Plan, PoiType, Zone } from \"../../types.service\";\r\nimport { BaseVisibilityService } from \"../baseVisibility.service\";\r\nimport { MatterportService } from \"../matterport.service\";\r\nimport { ViewerService } from \"../viewer.service\";\r\nimport { ZoneService } from \"./zone.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { getSignedFile, uploadFileToS3 } from \"../s3.service\";\r\nimport { BaseTagService } from \"../tag.service\";\r\nimport { Config } from \"../../config\";\r\nimport { getCoefficientsForImage } from \"../zone-drawer.service\";\r\nimport { getMetaForImage } from \"../../helpers.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class PlanService {\r\n chosenPlan: Plan;\r\n\r\n currentPlan: Plan;\r\n\r\n currentSweep: string;\r\n\r\n planFileCache: File;\r\n\r\n planCanvas: any;\r\n\r\n planDiv: HTMLElement | SVGElement;\r\n planDivContent: HTMLElement;\r\n\r\n panzoom: any;\r\n\r\n isReady: boolean = false;\r\n\r\n userPositionBtn: HTMLButtonElement;\r\n\r\n coeffPlanX: number;\r\n\r\n coeffPlanY: number;\r\n\r\n calibrationPlan: any;\r\n\r\n detailTagDiv: HTMLElement;\r\n\r\n detailTagDivIsHover = false;\r\n\r\n btnTagIsHover = false;\r\n\r\n resizePlanSubscription = new Subject<boolean>();\r\n\r\n imgPlan: HTMLImageElement;\r\n\r\n lastTouchTime = 0;\r\n\r\n delayDblTouch = 500;\r\n\r\n lastRotation: number = 0;\r\n\r\n htmlContentToInject: {\r\n title: string;\r\n content: string;\r\n elementID: string;\r\n y: number;\r\n x: number;\r\n tagIcon: string;\r\n url: string;\r\n }[] = [];\r\n\r\n cache: {\r\n equipIDs: string[];\r\n ticketIDs: string[];\r\n measurementsIDs: string[];\r\n featureIDs: string[];\r\n zoneID: string;\r\n plan: Plan;\r\n htmlContent: {\r\n title: string;\r\n content: string;\r\n elementID: string;\r\n y: number;\r\n x: number;\r\n tagIcon: string;\r\n url: string;\r\n }[];\r\n };\r\n\r\n focusMouseTagDiv: boolean = false;\r\n\r\n API: any; //AWS\r\n\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any,\r\n private zoneService: ZoneService,\r\n private navigationService: NavigationService,\r\n // private tagService: TagService,\r\n private viewerService: ViewerService,\r\n private router: Router,\r\n private matterportService: MatterportService,\r\n // private config: AppConfig,\r\n private visibilityService: BaseVisibilityService,\r\n ) {\r\n this.API = apiInjected;\r\n this.matterportService.currentCameraPose.subscribe((pose) => {\r\n this.updateRotation(pose.rotation.y);\r\n });\r\n }\r\n\r\n async createPlan(planInput: Plan): Promise<Plan> {\r\n return this.API.__proto__.CreatePlan(planInput);\r\n }\r\n\r\n async deletePlan(plan: Plan): Promise<Plan> {\r\n // await deleteFromS3(plan.annexe);\r\n return this.API.__proto__.DeletePlan({ id: plan.id });\r\n }\r\n\r\n async getPlansForSpace(spaceID: string): Promise<Plan[]> {\r\n return this.API.__proto__.PlansBySpace(spaceID).then(\r\n (response) => response.items,\r\n );\r\n }\r\n\r\n async getPlansForZone(zoneID: string): Promise<Plan[]> {\r\n return this.API.__proto__.PlansByZone(zoneID).then((response) => response.items);\r\n }\r\n\r\n async getSingedPlansForSpace(spaceID: string): Promise<Plan[]> {\r\n const plansFromDB = await this.getPlansForSpace(spaceID);\r\n // console.log(plansFromDB);\r\n const plans = [];\r\n if (plansFromDB.length > 0) {\r\n await Promise.all(\r\n plansFromDB.map(async (plan) => {\r\n const planObject = { ...plan } as Plan;\r\n // annexe looks like visits/modelID/plans/file.extension\r\n const signed = await getSignedFile(plan.annexe);\r\n if (signed) {\r\n planObject.filepath = signed;\r\n }\r\n if (plan.annexe) {\r\n const [, modelID, , filenameWithExtension] =\r\n plan.annexe.split(\"/\");\r\n const [, extention] = filenameWithExtension.split(\".\");\r\n planObject.model3d = modelID;\r\n planObject.extension = extention;\r\n plans.push(planObject);\r\n } else {\r\n console.log(`Error plan have not annexe => `);\r\n console.log(plan.id);\r\n }\r\n }),\r\n );\r\n }\r\n return plans;\r\n }\r\n\r\n async getPlansWithZonesForSpace(spaceID: string): Promise<Plan[]> {\r\n const plans = await this.getPlansForSpace(spaceID);\r\n const plansZones = plans.filter(\r\n (plan) => plan.zone && plan.calibration,\r\n );\r\n return plansZones;\r\n }\r\n\r\n setChosenPlan(chosenPlan: Plan) {\r\n this.chosenPlan = chosenPlan;\r\n }\r\n\r\n getChosenPlan(): Plan {\r\n return this.chosenPlan;\r\n }\r\n\r\n setPlanFileCache(planFileCache: File): Promise<void> {\r\n this.planFileCache = planFileCache;\r\n return Promise.resolve();\r\n }\r\n\r\n getPlanFileCache(): File {\r\n return this.planFileCache;\r\n }\r\n\r\n async createPlanWithAnnexe(\r\n plan: Plan,\r\n file: File,\r\n ): Promise<Plan> {\r\n const createdPlan = await this.createPlan(plan);\r\n const model3D = await this.zoneService.getModel3DForZone(plan.zoneID);\r\n const url = await uploadFileToS3(\r\n `visits/${model3D}/plans/`,\r\n file,\r\n createdPlan.id,\r\n );\r\n if (url) {\r\n return this.API.__proto__.UpdatePlan({ id: createdPlan.id, annexe: url });\r\n }\r\n return createdPlan;\r\n }\r\n\r\n async updatePlan(plan: any): Promise<Plan> {\r\n return this.API.__proto__.UpdatePlan(plan);\r\n }\r\n\r\n async updatePlanFile(): Promise<string> {\r\n if (this.chosenPlan && this.planFileCache) {\r\n const model3D = await this.zoneService.getModel3DForZone(\r\n this.chosenPlan.zoneID,\r\n );\r\n return uploadFileToS3(\r\n `visits/${model3D}/plans/`,\r\n this.planFileCache,\r\n this.chosenPlan.id,\r\n );\r\n }\r\n return Promise.reject();\r\n }\r\n\r\n async setAllPlansForZoneNotCurrent(zoneID: string, currentPlanID: string) {\r\n const plans = await this.API.__proto__.ListPlans({ zoneID: { eq: zoneID } });\r\n await Promise.all(\r\n plans.items.map(async (plan) => {\r\n if (plan.isCurrentForZone && plan.id !== currentPlanID) {\r\n await this.updatePlan({\r\n id: plan.id,\r\n isCurrentForZone: false,\r\n });\r\n }\r\n }),\r\n );\r\n }\r\n\r\n async configurePlan(\r\n currentPlan: Plan,\r\n divId: string = \"planDivPane\",\r\n divContentId: string = \"planDivPaneContent\"\r\n ): Promise<boolean> {\r\n console.log(\"<> COnfigure PLAN : \", currentPlan, divId, divContentId);\r\n this.isReady = false;\r\n if (!this.detailTagDiv) {\r\n this.detailTagDiv = document.querySelector(\r\n `#detailTagDiv`,\r\n ) as HTMLElement;\r\n }\r\n this.detailTagDiv.addEventListener(\"mouseenter\", () => {\r\n this.focusMouseTagDiv = true;\r\n });\r\n this.detailTagDiv.addEventListener(\"mouseleave\", () => {\r\n this.btnTagIsHover = false;\r\n this.detailTagDiv.style.display = \"none\";\r\n this.focusMouseTagDiv = false;\r\n });\r\n\r\n this.calibrationPlan = JSON.parse(currentPlan.calibration);\r\n this.currentPlan = currentPlan;\r\n this.planDiv = document.querySelector(`#${divId}`) as HTMLElement;\r\n this.planDivContent = document.querySelector(`#${divContentId}`) as HTMLElement;\r\n\r\n this.planDiv.addEventListener(\r\n \"touchstart\",\r\n this.handleTouch.bind(this),\r\n );\r\n this.planDiv.addEventListener(\r\n \"dblclick\",\r\n this.onDblClickPlan.bind(this),\r\n );\r\n\r\n if (!currentPlan.annexe.includes(\"pdf\")) {\r\n this.imgPlan = await getMetaForImage(currentPlan.filepath);\r\n //Rect use offsetWidth : height, not actual boundingClientRect because will be modified by the zoom.\r\n const rect = { width: this.planDivContent.offsetWidth, height: this.planDivContent.offsetHeight };\r\n const { coeffX, coeffY } = getCoefficientsForImage(\r\n this.imgPlan,\r\n rect,\r\n );\r\n this.coeffPlanX = coeffX;\r\n this.coeffPlanY = coeffY;\r\n\r\n this.planDivContent.style.backgroundImage = `url(${currentPlan.filepath})`;\r\n } else {\r\n await this.drawPdf(currentPlan);\r\n }\r\n this.planDivContent.style.backgroundSize = \"contain\";\r\n this.planDivContent.style.backgroundRepeat = \"no-repeat\";\r\n\r\n this.panzoom = panzoom(this.planDiv, {\r\n bounds: true,\r\n boundsPadding: 0,\r\n maxZoom: 4,\r\n zoomDoubleClickSpeed: 1, //disables double click zoom\r\n //initialZoom: 4\r\n });\r\n this.panzoom.zoomAbs(0, 0, 4);\r\n setTimeout(() => {\r\n this.updateRotation(this.lastRotation);\r\n }, 200);\r\n return true;\r\n }\r\n\r\n clearPlanImage() {\r\n if (this.planDivContent) {\r\n this.planDivContent.style.backgroundImage = null;\r\n }\r\n }\r\n\r\n async drawPdf(currentPlan: Plan): Promise<void> {\r\n return new Promise(async (resolve) => {\r\n const canvas = document.createElement(\r\n \"canvas\",\r\n ) as HTMLCanvasElement;\r\n\r\n const context = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\r\n const pdfjsWorker = await import(\r\n \"pdfjs-dist/build/pdf.worker.entry\"\r\n );\r\n\r\n GlobalWorkerOptions.workerSrc = pdfjsWorker;\r\n const pdf = await getDocument(\r\n currentPlan.filepath,\r\n ).promise;\r\n const page = await pdf.getPage(1);\r\n\r\n const viewPortParameters = { scale: 1.5 };\r\n const viewport = page.getViewport(viewPortParameters);\r\n\r\n canvas.height = viewport.height;\r\n canvas.width = viewport.width;\r\n const renderContext = {\r\n canvasContext: context,\r\n viewport,\r\n };\r\n const renderTask = page.render(renderContext).promise;\r\n renderTask.then(async () => {\r\n const imgUrl = canvas.toDataURL(\"image/png\");\r\n this.imgPlan = await getMetaForImage(imgUrl);\r\n const rect = { width: this.planDivContent.offsetWidth, height: this.planDivContent.offsetHeight };\r\n const { coeffX, coeffY } = getCoefficientsForImage(\r\n this.imgPlan,\r\n rect,\r\n );\r\n this.coeffPlanX = coeffX;\r\n this.coeffPlanY = coeffY;\r\n this.planDiv.style.backgroundImage = `url(${imgUrl})`;\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n async drawElement(element: any, tagType: PoiType, currentPlan: Plan, tagService: BaseTagService, config: Config) {\r\n const [poi] = element.pois.items;\r\n if (poi && poi.coordinate && currentPlan) {\r\n const { zone } = currentPlan;\r\n if (zone) {\r\n const position = JSON.parse(poi.coordinate);\r\n const button = document.createElement(\"button\");\r\n let elementTitle: string;\r\n const url = tagService.getUrlForSeeDetails(\r\n element,\r\n tagType,\r\n );\r\n let tagIconImage: string;\r\n switch (tagType) {\r\n case PoiType.TICKET: {\r\n elementTitle = element.title;\r\n tagIconImage = config.my_config.icon_ticket;\r\n break;\r\n }\r\n case PoiType.EQUIPMENT: {\r\n tagIconImage = config.my_config.icon_equipment;\r\n elementTitle = element.name;\r\n break;\r\n }\r\n case PoiType.MEASURE:\r\n elementTitle = element.title;\r\n tagIconImage = config.my_config.icon_measure;\r\n break;\r\n case PoiType.DATA:\r\n tagIconImage = config.my_config.icon_data;\r\n break;\r\n case PoiType.DESK:\r\n tagIconImage = config.my_config.icon_data;\r\n break;\r\n default:\r\n return;\r\n }\r\n if (poi.tagIcon) {\r\n const tagIcon = JSON.parse(poi.tagIcon);\r\n if (tagType === PoiType.DATA && element.type === FeatureType.INDICATOR_TEMP) {\r\n tagIcon.src = tagService.getIconTagImageForFeature(\r\n element,\r\n poi,\r\n );\r\n }\r\n // poi.tagIcon = tagIcon;\r\n\r\n if (tagIcon.src) {\r\n const source = await getSignedFile(tagIcon.src);\r\n if (source) {\r\n tagIconImage = source;\r\n }\r\n }\r\n }\r\n this.styleButton(button, tagIconImage);\r\n button.id = element.id;\r\n this.planDivContent.append(button);\r\n let x: number;\r\n let y: number;\r\n if (this.calibrationPlan.new) {\r\n // alert(\"new calibration plan: positioning not ready yet\");\r\n const position2D =\r\n this.transformPosition3DForNewCalibration(position);\r\n x = position2D.x;\r\n y = position2D.y;\r\n button.style.top = `${y / position2D.coeffY - 5}px`;\r\n button.style.left = `${x / position2D.coeffX - 5}px`;\r\n } else {\r\n // to remove when all calibrations are new\r\n x =\r\n this.calibrationPlan.offsetX +\r\n position.x * this.calibrationPlan.x;\r\n y =\r\n this.calibrationPlan.offsetY +\r\n position.z * this.calibrationPlan.y;\r\n button.style.top = `${y / this.coeffPlanY - 5}px`;\r\n button.style.left = `${x / this.coeffPlanX - 5}px`;\r\n }\r\n\r\n const { html, height } = await tagService.getHtmlToInject(\r\n tagType,\r\n element,\r\n 0\r\n );\r\n this.htmlContentToInject.push({\r\n elementID: element.id,\r\n title: elementTitle || \"\",\r\n content: html,\r\n y,\r\n x,\r\n tagIcon: tagIconImage,\r\n url,\r\n });\r\n this.addListenersToButton(button, url);\r\n this.updateRotation(this.lastRotation);\r\n }\r\n }\r\n }\r\n\r\n async drawUserPosition(currentSweep = this.currentSweep) {\r\n this.currentSweep = currentSweep;\r\n if (this.calibrationPlan && currentSweep) {\r\n const position =\r\n this.matterportService.getCurrentCameraPosition()?.position;\r\n if (position) {\r\n if (!this.userPositionBtn) {\r\n this.userPositionBtn = document.createElement(\"button\");\r\n this.userPositionBtn.id = \"currentPosition\";\r\n this.planDivContent.append(this.userPositionBtn);\r\n this.userPositionBtn.title = \"You are here\";\r\n this.styleButton(\r\n this.userPositionBtn,\r\n \"https://api.iconify.design/bx:bxs-user-circle.svg?color=green&height=17&width=17\",\r\n );\r\n }\r\n let x: number;\r\n let y: number;\r\n if (this.calibrationPlan.new) {\r\n const position2D =\r\n this.transformPosition3DForNewCalibration(position);\r\n x = position2D.x / position2D.coeffX - 5;\r\n y = position2D.y / position2D.coeffY - 5;\r\n } else {\r\n x =\r\n (this.calibrationPlan.offsetX +\r\n position.x * this.calibrationPlan.x) /\r\n this.coeffPlanX;\r\n y =\r\n (this.calibrationPlan.offsetY +\r\n position.z * this.calibrationPlan.y) /\r\n this.coeffPlanY;\r\n }\r\n this.userPositionBtn.style.top = `${y}px`;\r\n this.userPositionBtn.style.left = `${x}px`;\r\n this.moveOnPoint({ x: x + 5, y: y + 5 });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Center the view of the plan on coordinates\r\n * @param coordinate Coordinate on the plan\r\n */\r\n moveOnPoint(coordinate) {\r\n if (this.planDiv) {\r\n const scale = this.panzoom.getTransform().scale;\r\n const moveX = (this.planDiv.clientWidth / 2 - coordinate.x * scale);\r\n const moveY = (this.planDiv.clientHeight / 2 - coordinate.y * scale);\r\n this.panzoom.moveTo(moveX, moveY);\r\n this.planDivContent.style.transformOrigin = `${coordinate.x}px ${coordinate.y}px`;\r\n }\r\n }\r\n\r\n /**\r\n * Apply a rotation to the plan\r\n * Buttons will remain in the correct rotation\r\n * @param rotation \r\n */\r\n updateRotation(rotation) {\r\n this.lastRotation = rotation;\r\n if (this.planDivContent) {\r\n this.planDivContent.style.transform = `rotate(${rotation}deg)`;\r\n const buttons = this.planDivContent.querySelectorAll(\"button\");\r\n // eslint-disable-next-line unicorn/no-array-for-each\r\n buttons.forEach((button) => {\r\n button.style.transform = `rotate(${-rotation}deg)`;\r\n });\r\n }\r\n }\r\n\r\n\r\n removeCurrentPosition() {\r\n const button = document.querySelector(\"#currentPosition\");\r\n if (button) {\r\n button.remove();\r\n this.userPositionBtn = null;\r\n }\r\n }\r\n\r\n styleButton(button: HTMLButtonElement, url: string) {\r\n button.style.backgroundImage = `url(${url})`;\r\n button.style.backgroundColor = \"transparent\";\r\n button.style.position = \"absolute\";\r\n button.style.border = \"none\";\r\n button.style.width = \"10px\";\r\n button.style.height = \"10px\";\r\n button.disabled = false;\r\n button.style.backgroundSize = \"contain\";\r\n button.style.backgroundRepeat = \"no-repeat\";\r\n }\r\n\r\n addListenersToButton(button: HTMLButtonElement, url: string) {\r\n button.addEventListener(\"mouseenter\", async (event) => {\r\n const contentForButton = this.htmlContentToInject.find(\r\n (object) => object.elementID === button.id,\r\n );\r\n this.btnTagIsHover = true;\r\n const title = document.querySelector(`#titleTagDiv`) as HTMLElement;\r\n if (contentForButton.title) {\r\n title.style.display = \"inline\";\r\n title.innerHTML = contentForButton.title;\r\n } else {\r\n title.style.display = \"none\";\r\n }\r\n\r\n const content = document.querySelector(\r\n `#htmlTagDiv`,\r\n ) as HTMLElement;\r\n this.detailTagDiv.style.top = `${event.clientY + 10}px`;\r\n this.detailTagDiv.style.left = `${event.clientX < 120 ? 0 : event.clientX - 120\r\n }px`;\r\n this.detailTagDiv.style.display = \"block\";\r\n // console.log(contentForButton.content);\r\n content.innerHTML = contentForButton.content;\r\n const detailButton = content.querySelector(\"#detailBtn\");\r\n if (detailButton) {\r\n detailButton.addEventListener(\"click\", () => {\r\n this.visibilityService.detailShowing.next(true);\r\n this.router.navigate([url]);\r\n });\r\n }\r\n const bookingButton = content.querySelector(\"#bookingBtn\");\r\n if (bookingButton) {\r\n bookingButton.addEventListener(\"click\", () => {\r\n this.visibilityService.detailShowing.next(true);\r\n this.router.navigate([url]);\r\n });\r\n }\r\n });\r\n\r\n button.addEventListener(\"mouseleave\", async () => {\r\n // we wait if user hovers on to div of the tag (changes this.focusMouseTagDiv)\r\n this.btnTagIsHover = false;\r\n setTimeout(() => {\r\n if (!this.focusMouseTagDiv && !this.btnTagIsHover) {\r\n this.detailTagDiv.style.display = \"none\";\r\n }\r\n }, 100);\r\n });\r\n button.addEventListener(\"click\", async () => {\r\n this.detailTagDiv.style.display = \"none\";\r\n await this.viewerService.action_move_to_tag(button.id);\r\n this.visibilityService.detailShowing.next(true);\r\n this.router.navigate([url]);\r\n });\r\n }\r\n\r\n clearBtn(idList: any[]) {\r\n for (const id of idList) {\r\n const button = document.querySelector(`#\\\\${id}`);\r\n if (button) {\r\n button.remove();\r\n }\r\n }\r\n }\r\n\r\n clearAllButtons() {\r\n if (this.planDivContent) {\r\n const buttons = this.planDivContent.querySelectorAll(\"button\");\r\n // eslint-disable-next-line unicorn/no-array-for-each\r\n buttons.forEach(function (currentValue) {\r\n currentValue.remove();\r\n });\r\n this.userPositionBtn = null;\r\n }\r\n }\r\n\r\n onPlanRemove() {\r\n this.userPositionBtn = null;\r\n this.calibrationPlan = null;\r\n this.currentSweep = null;\r\n this.detailTagDiv = null;\r\n }\r\n\r\n async resizePlan(isRemoving: boolean) {\r\n\r\n this.resizePlanSubscription.next(false);\r\n if (isRemoving) {\r\n return;\r\n }\r\n if (this.planDiv && this.currentSweep) {\r\n this.panzoom = panzoom(this.planDiv, {\r\n bounds: true,\r\n boundsPadding: 0,\r\n maxZoom: 4,\r\n });\r\n setTimeout(() => {\r\n const rect = { width: this.planDivContent.offsetWidth, height: this.planDivContent.offsetHeight };\r\n const { coeffX, coeffY } = getCoefficientsForImage(\r\n this.imgPlan,\r\n rect,\r\n );\r\n this.coeffPlanX = coeffX;\r\n this.coeffPlanY = coeffY;\r\n this.panzoom.zoomAbs(0, 0, 4);\r\n this.resizePlanSubscription.next(true);\r\n }, 200);\r\n }\r\n }\r\n\r\n handleTouch(event) {\r\n const now = Date.now();\r\n if (now - this.lastTouchTime < this.delayDblTouch) {\r\n this.lastTouchTime = 0;\r\n // this.onDblClickPlan(event);\r\n /** Simulate a dblclick for phone (we don't get offsetX/Y on touchevent) */\r\n const newEvent = document.createEvent(\"MouseEvents\");\r\n const touch = event.changedTouches[0];\r\n newEvent.initMouseEvent(\r\n \"dblclick\",\r\n true,\r\n true,\r\n event.target.ownerDocument.defaultView,\r\n 0,\r\n touch.screenX,\r\n touch.screenY,\r\n touch.clientX,\r\n touch.clientY,\r\n event.ctrlKey,\r\n event.altKey,\r\n event.shirtKey,\r\n event.metaKey,\r\n 0,\r\n null,\r\n );\r\n event.target.dispatchEvent(newEvent);\r\n } else {\r\n this.lastTouchTime = now;\r\n }\r\n }\r\n\r\n async onDblClickPlan(event) {\r\n event.preventDefault();\r\n const clickX = event.offsetX;\r\n const clickY = event.offsetY;\r\n const zonePlan = this.currentPlan.zone;\r\n if (zonePlan) {\r\n const navigations: any =\r\n await this.navigationService.getNavigationsForZone(zonePlan);\r\n if (navigations.length > 0) {\r\n await Promise.all(\r\n navigations.map(async (nav) => {\r\n const position = JSON.parse(nav.position);\r\n let x: number;\r\n let y: number;\r\n if (this.calibrationPlan.new) {\r\n const position2D =\r\n this.transformPosition3DForNewCalibration(\r\n position,\r\n );\r\n x = position2D.x / position2D.coeffX;\r\n y = position2D.y / position2D.coeffY;\r\n } else {\r\n x =\r\n (this.calibrationPlan.offsetX +\r\n position.x * this.calibrationPlan.x) /\r\n this.coeffPlanX;\r\n y =\r\n (this.calibrationPlan.offsetY +\r\n position.z * this.calibrationPlan.y) /\r\n this.coeffPlanY;\r\n }\r\n\r\n const distX = Math.abs(clickX - x);\r\n const distY = Math.abs(clickY - y);\r\n nav.dist = Math.sqrt(\r\n Math.pow(distX, 2) + Math.pow(distY, 2),\r\n );\r\n }),\r\n );\r\n navigations.sort((a, b) => {\r\n return a.dist - b.dist;\r\n });\r\n this.matterportService.action_go_to_sweep(\r\n navigations[0].matterportSweepID,\r\n );\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Configures plan from cache (previous plan).\r\n */\r\n async uploadPlanFromCache(): Promise<void> {\r\n this.htmlContentToInject = this.cache.htmlContent;\r\n await this.configurePlan(this.cache.plan);\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * Puts buttons (tags) from cache according to passed element IDs (for filter if any)\r\n * @param elementIDs elements (tickets, equipments, etc) to be shown on plan\r\n */\r\n uploadTagsFromCache() {\r\n // console.log(\"uploading tags from cache\");\r\n\r\n for (const cached of this.cache.htmlContent) {\r\n const button = document.createElement(\"button\");\r\n this.styleButton(button, cached.tagIcon);\r\n button.id = cached.elementID;\r\n this.planDivContent.append(button);\r\n if (this.calibrationPlan.new) {\r\n const newCoeffX =\r\n this.coeffPlanX /\r\n (this.imgPlan.width / this.calibrationPlan.imgWidth);\r\n const newCoeffY =\r\n this.coeffPlanY /\r\n (this.imgPlan.height / this.calibrationPlan.imgHeight);\r\n button.style.top = `${cached.y / newCoeffY - 5}px`;\r\n button.style.left = `${cached.x / newCoeffX - 5}px`;\r\n } else {\r\n button.style.top = `${cached.y / this.coeffPlanY - 5}px`;\r\n button.style.left = `${cached.x / this.coeffPlanX - 5}px`;\r\n }\r\n\r\n this.addListenersToButton(button, cached.url);\r\n }\r\n }\r\n\r\n async getCalibratedPlanForZone(zone: Zone): Promise<Plan> {\r\n let plans = (await this.API.PlansByZone(zone.id)).items;\r\n let parentZone = null;\r\n if (plans.length === 0) {\r\n // try to find parent zone\r\n parentZone = await this.API.GetZone(zone.parentID);\r\n plans = (await this.API.PlansByZone(zone.parentID)).items;\r\n }\r\n const calibratedPlan = plans.find(\r\n (plan) => plan.calibration && plan.isCurrentForZone,\r\n ) as Plan;\r\n if (calibratedPlan) {\r\n const signed = await getSignedFile(calibratedPlan.annexe);\r\n if (signed) {\r\n calibratedPlan.filepath = signed;\r\n }\r\n calibratedPlan.navigationIDs = parentZone\r\n ? parentZone.sweepIDs\r\n : zone.sweepIDs;\r\n }\r\n return calibratedPlan || null;\r\n }\r\n\r\n transformPosition3DForNewCalibration(position: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n }): { x: number; y: number; coeffX: number; coeffY: number; } {\r\n const positionX =\r\n this.calibrationPlan.nameXAxis === \"x\" ? position.x : position.z;\r\n const positionY =\r\n this.calibrationPlan.nameYAxis === \"x\" ? position.x : position.z;\r\n let x =\r\n this.calibrationPlan.offsetX +\r\n positionX * this.calibrationPlan.scaleX;\r\n let y =\r\n this.calibrationPlan.offsetY +\r\n positionY * this.calibrationPlan.scaleY;\r\n const newCoeffX =\r\n this.coeffPlanX /\r\n (this.imgPlan.width / this.calibrationPlan.imgWidth);\r\n // console.log(\"newCoeffX\", newCoeffX);\r\n const newCoeffY =\r\n this.coeffPlanY /\r\n (this.imgPlan.height / this.calibrationPlan.imgHeight);\r\n x =\r\n (x - this.calibrationPlan.offsetXPlan) / this.calibrationPlan.scalePlan;\r\n\r\n y =\r\n (y - this.calibrationPlan.offsetYPlan) / this.calibrationPlan.scalePlan;\r\n // console.log(x, y);\r\n\r\n return { x, y, coeffX: newCoeffX, coeffY: newCoeffY };\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\n/* eslint-disable no-restricted-syntax */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Plan, Space, Visit, Zone } from \"../../types.service\";\r\nimport { getSignedFile, listFilesInFolder } from \"../s3.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { CaptureService } from \"./capture.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { NodeService } from \"./node.service\";\r\nimport { PlanService } from \"./plan.service\";\r\nimport { ZoneService } from \"./zone.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class VisitService {\r\n choosenPlan: Plan;\r\n\r\n constructor(\r\n private captureService: CaptureService,\r\n private nodeService: NodeService,\r\n private navigationService: NavigationService,\r\n private zoneService: ZoneService,\r\n private planService: PlanService,\r\n private userService: BaseUserService,\r\n ) {}\r\n\r\n async getVisitsForSpaceForUser(spaceID: string): Promise<Visit[]> {\r\n const visits = [];\r\n const missionsForSpace = this.userService.currentMissions.filter(\r\n (mis) => mis.spaceID === spaceID,\r\n );\r\n const allAllowed =\r\n this.userService.userHasAccessToAllZonesInSpace(spaceID);\r\n const captures = await this.captureService.getCapturesBySpace(spaceID);\r\n const nodes = captures.flatMap((cap) => cap.nodes.items);\r\n let allAllowedNodes = nodes;\r\n let allowedNodeIDs = [];\r\n if (!allAllowed) {\r\n const allowedZones = missionsForSpace.map((mis) => mis.zone);\r\n for (const zone of allowedZones) {\r\n allowedNodeIDs = [...allowedNodeIDs, ...zone.nodeIDs];\r\n }\r\n allowedNodeIDs = [...new Set(allowedNodeIDs)]; // to make unique\r\n allAllowedNodes = allAllowedNodes.filter((node) =>\r\n allowedNodeIDs.includes(node.id),\r\n );\r\n }\r\n for (const node of allAllowedNodes) {\r\n // console.log(node)\r\n const folder = `visits/${node.model3D}/sweeps/`;\r\n const files = await listFilesInFolder(folder);\r\n const isImported = Object.keys(files).length > 20; // TODO : at least 20 should be imported...\r\n const capture = captures.find((cap) =>\r\n cap.nodes.items.includes(node),\r\n );\r\n const visit = {\r\n captureID: node.captureID,\r\n model3d: node.model3D,\r\n takenAt: capture.takenAt,\r\n spaceID,\r\n viewer: capture.viewer,\r\n surface: capture.surface,\r\n node,\r\n name: node.metadata,\r\n imagesImported: isImported,\r\n } as Visit;\r\n visits.push(visit);\r\n }\r\n return visits;\r\n }\r\n\r\n async deleteVisit(visit: Visit, spaceID: string): Promise<any> {\r\n await this.nodeService.deleteNode(visit.node.id);\r\n const capture = await this.captureService.getCapture(visit.captureID);\r\n if (capture.nodes.items.length === 0) {\r\n await this.captureService.deleteCapture(visit.captureID);\r\n }\r\n const navigations = await this.navigationService.getNavigationsForNode(\r\n visit.node.id,\r\n );\r\n const zonesToDelete = await this.zoneService.getZonesForNodeForSpace(\r\n visit.node.id,\r\n spaceID,\r\n );\r\n await Promise.all(\r\n navigations.map(async (navig) => {\r\n await this.navigationService.deleteNavigation(navig.id);\r\n }),\r\n );\r\n if (zonesToDelete.length > 0) {\r\n await Promise.all(\r\n zonesToDelete.map(async (zone) => {\r\n const plans = await this.planService.getPlansForZone(\r\n zone.id,\r\n );\r\n if (plans.length > 0) {\r\n await Promise.all(\r\n plans.map(async (plan) => {\r\n await this.planService.deletePlan(plan);\r\n }),\r\n );\r\n }\r\n await this.zoneService.deleteZone(zone.id);\r\n }),\r\n );\r\n }\r\n // removeAllFilesFromFolderS3(`visits/${visit.model3d}/sweeps`);\r\n return Promise.resolve();\r\n }\r\n\r\n async loadImagesForSpace(space: Space): Promise<any> {\r\n const list = [];\r\n return this.getVisitsForSpaceForUser(space.id).then(async (visits) => {\r\n if (visits) {\r\n space.visits = visits;\r\n await Promise.all(\r\n visits.map(async (visit) => {\r\n const folder = `visits/${visit.model3d}/sweeps/`;\r\n const files = await listFilesInFolder(folder);\r\n await Promise.all(\r\n Object.keys(files).map(async (key) => {\r\n const file = files[key];\r\n const signed = await getSignedFile(file.key);\r\n const filename = file.key.split(\"/\")[3];\r\n list.push({\r\n path: signed,\r\n filename,\r\n visit,\r\n });\r\n }),\r\n );\r\n }),\r\n );\r\n return list;\r\n }\r\n return list;\r\n });\r\n }\r\n\r\n\r\n async getDefaultZoneForVisit(visit: Visit): Promise<Zone> {\r\n return this.zoneService\r\n .getZonesBySpace(visit.spaceID)\r\n .then(async (zones) => {\r\n const zonesWithVisitName = zones.filter(\r\n (zone) =>\r\n zone.name === visit.name &&\r\n zone.layer &&\r\n zone.layer.name === \"BUILDING\",\r\n );\r\n if (zonesWithVisitName.length === 1) {\r\n return zonesWithVisitName[0];\r\n }\r\n const parentZone = zones.find((zone) => !zone.parentID);\r\n return parentZone;\r\n });\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { filterUniqueArrayByID, sortAlphabeticallyOnName } from \"../../helpers.service\";\r\nimport { Space, Layer, PropertyType } from \"../../types.service\";\r\nimport { getSignedImageUrlForSpace } from \"../s3.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { CaptureService } from \"./capture.service\";\r\nimport { MissionService } from \"./mission.service\";\r\nimport { PropertyService } from \"./property.service\";\r\nimport { VisitService } from \"./visit.service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class SpaceService {\r\n\r\n locationsForUser: Space[] = [];\r\n\r\n locationUpdated: Subject<Space[]> = new Subject<Space[]>();\r\n\r\n API: any; //AWS\r\n\r\n constructor(\r\n private visitService: VisitService,\r\n private userService: BaseUserService,\r\n private propertyService: PropertyService,\r\n private captureService: CaptureService,\r\n private missionService: MissionService,\r\n @Inject('currentAPIService') apiInjected: any\r\n ) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async listSpaces(): Promise<Space[]> {\r\n return this.API.__proto__.ListSpaces().then((spaces) =>\r\n spaces.items.filter((sp) => !sp.deletedAt),\r\n );\r\n }\r\n\r\n async getLocationsForCurrentUser(): Promise<Space[]> {\r\n const missions = this.userService.currentMissions;\r\n if (!missions) return [];\r\n let locations = [];\r\n await Promise.all(\r\n missions.map(async (mission) => {\r\n if (mission.space && !mission.space.deletedAt) {\r\n const space = await this.getSpace(mission.space.id);\r\n await this.signUrlForSpace(space);\r\n await this.visitService\r\n .getVisitsForSpaceForUser(space.id)\r\n .then((visits) => {\r\n if (visits) {\r\n space.visits = visits;\r\n }\r\n });\r\n locations.push(space);\r\n }\r\n }),\r\n );\r\n if (locations.length > 0) {\r\n locations = sortAlphabeticallyOnName(\r\n filterUniqueArrayByID(locations),\r\n );\r\n }\r\n this.locationsForUser = locations;\r\n this.locationUpdated.next(locations);\r\n return locations;\r\n }\r\n\r\n async signUrlForSpace(loc: Space) {\r\n if (loc.annexes) {\r\n getSignedImageUrlForSpace(loc).then((url) => {\r\n if (url) {\r\n loc.annexes = url;\r\n }\r\n });\r\n }\r\n }\r\n\r\n async getAllowedSpacesForOrg(\r\n orgID: string,\r\n userOrgID: string,\r\n ): Promise<Space[]> {\r\n if (\r\n userOrgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\" ||\r\n orgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\"\r\n ) {\r\n return this.listSpaces();\r\n }\r\n return this.getSpacesForOrg(userOrgID);\r\n }\r\n\r\n async getSpacesForOrg(orgID: string): Promise<Space[]> {\r\n const properties =\r\n await this.propertyService.getPropertiesForOrganisation(orgID);\r\n if (properties.length > 0) {\r\n const spaces = [];\r\n for (const property of properties) {\r\n if (property.space && !property.space.deletedAt) {\r\n spaces.push(property.space);\r\n }\r\n }\r\n return spaces;\r\n }\r\n return null;\r\n }\r\n\r\n async createSpace(values: Space, layer?: Layer): Promise<any> {\r\n const loc = await this.API.__proto__.CreateSpace(values);\r\n const zoneInput = {\r\n name: values.name,\r\n spaceID: loc.id,\r\n surface: 0,\r\n layerID: layer ? layer.id : null,\r\n };\r\n await this.API.__proto__.CreateZone(zoneInput);\r\n return loc;\r\n }\r\n\r\n async updateSpace(input: any): Promise<Space> {\r\n return this.API.__proto__.UpdateSpace(input);\r\n }\r\n\r\n async getSpace(id: string): Promise<Space> {\r\n return this.API.__proto__.GetSpace(id);\r\n }\r\n\r\n async getModel3DForSpace(spaceID: string): Promise<string> {\r\n const captures = await this.captureService.getCapturesBySpace(spaceID);\r\n if (captures.length > 0 && captures[0].nodes.items.length > 0) {\r\n return captures[0].nodes.items[0].model3D;\r\n }\r\n return null;\r\n }\r\n\r\n async getAllowedModel3DForSpace(spaceID: string): Promise<string> {\r\n const visits = await this.visitService.getVisitsForSpaceForUser(\r\n spaceID,\r\n );\r\n if (visits.length > 0) {\r\n return visits[0].model3d;\r\n }\r\n return null;\r\n }\r\n\r\n async softDeleteSpace(spaceID: string) {\r\n await this.updateSpace({\r\n id: spaceID,\r\n deletedAt: Date.now(),\r\n });\r\n const missions = await this.missionService.getMissionsForSpace(spaceID);\r\n const properties = await this.propertyService.listPropertiesForSpace(spaceID);\r\n if (this.userService.isSPAdmin()) {\r\n // delete all properties\r\n await Promise.all(\r\n properties.map(async (property) => {\r\n await this.propertyService.deleteProperty(property.id);\r\n }),\r\n );\r\n // delete all missions\r\n await Promise.all(\r\n missions.map(async (mission) => {\r\n await this.missionService.update({\r\n id: mission.id,\r\n deletedAt: Date.now(),\r\n });\r\n }),\r\n );\r\n } else {\r\n // delete property for current Org\r\n const currentOrg = this.userService.currentOrganisation(spaceID);\r\n const propertyToDelete = properties.find(\r\n (property) => property.organisationID === currentOrg.id,\r\n );\r\n if (propertyToDelete) {\r\n await this.propertyService.deleteProperty(propertyToDelete.id);\r\n }\r\n const missionsToDelete = missions.filter(\r\n (mission) =>\r\n mission.organisationID === currentOrg.id ||\r\n mission.orderedOrganisationID === currentOrg.id,\r\n );\r\n await Promise.all(\r\n missionsToDelete.map(async (mission) => {\r\n await this.missionService.update({\r\n id: mission.id,\r\n deletedAt: Date.now(),\r\n });\r\n }),\r\n );\r\n }\r\n const tickets = (await this.API.__proto__.TicketsBySpace(spaceID)).items;\r\n await Promise.all(\r\n tickets.map(async (ticket) => {\r\n await this.API.__proto__.DeleteTicket({id:ticket.id});\r\n }),\r\n );\r\n // TODO equipments, etc\r\n\r\n // remove from list\r\n this.locationsForUser = this.locationsForUser.filter((space)=>space.id !== spaceID);\r\n this.locationUpdated.next(this.locationsForUser);\r\n }\r\n\r\n /**\r\n * If current user can archive a space (only if his organisation is owning the property (PropertyType.PROPERTY))\r\n * @param spaceID\r\n * @returns\r\n */\r\n async canArchiveSpace(spaceID: string): Promise<boolean> {\r\n const currentOrg = this.userService.currentOrganisation(spaceID);\r\n const orgProperties =\r\n await this.propertyService.getPropertiesForOrganisation(\r\n currentOrg.id,\r\n );\r\n const property = orgProperties.find(\r\n (property_) => property_.spaceID === spaceID,\r\n );\r\n if (property.type === PropertyType.PROPERTY) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { SpaceService } from '../../../services/models/space.service';\nimport { VisitService } from '../../../services/models/visit.service';\nimport { ZoneService } from '../../../services/models/zone.service';\nimport { NavigatorService } from '../../../services/navigator.service';\nimport { ViewerService } from '../../../services/viewer.service';\nimport { Space, Visit, Zone } from '../../../types.service';\n\n@Component({\n selector: 'lib-navigation-bar',\n templateUrl: './navigation-bar.component.html',\n styleUrls: ['./navigation-bar.component.scss']\n})\nexport class NavigationBarComponent implements OnInit {\n @ViewChild(\"navbarSelectMenu\") navbarSelectMenu!: any;\n\n locations: Space[];\n\n spaceSubscription: Subscription;\n\n viewerSubscription: Subscription;\n\n locationIDSubscription: Subscription;\n\n currentLocationID: string;\n\n currentModel3d: string;\n\n selectedLocation: Space = null;\n\n selectedModel3d: string;\n\n selectedFloor: Zone = null;\n\n selectedZone: Zone = null;\n\n selectedChildZone: Zone = null;\n\n visitsPerSpace: Visit[] = null;\n\n floorsPerSpace: Zone[] = null;\n\n zonesPerSpace: Zone[] = null;\n\n zonesPerFloor: Zone[] = null;\n\n childrenZones: Zone[] = null;\n\n sweepToGo: string;\n\n floorToGo: Zone;\n\n constructor(\n private router: Router,\n private spaceService: SpaceService,\n private zoneService: ZoneService,\n private visitService: VisitService,\n private viewerService: ViewerService,\n private navigatorService: NavigatorService,\n ) {\n this.spaceSubscription = this.spaceService.locationUpdated.subscribe(\n (locs) => {\n this.locations = locs;\n if (this.selectedLocation) {\n this.selectedLocation = this.findLocationByID(\n this.selectedLocation.id,\n ); // Update Object (object address will change);\n }\n },\n );\n this.viewerSubscription = this.viewerService.viewerIsOn.subscribe(\n (data: {\n spaceID: string;\n model3D: string;\n sweep: string | null;\n }) => {\n console.log(\"menu navigation received update\", data);\n this.currentLocationID = data.spaceID;\n this.currentModel3d = data.model3D;\n if (!data.spaceID) {\n this.selectedLocation = null;\n this.sendUpdateLocationEvent();\n return;\n }\n if (\n (!this.selectedLocation ||\n this.selectedLocation.id !== data.spaceID) &&\n this.locations\n ) {\n this.selectedLocation = this.findLocationByID(data.spaceID);\n this.sendUpdateLocationEvent();\n }\n },\n );\n\n /**\n * We listen for Location change event\n */\n this.locationIDSubscription =\n this.navigatorService.locationIDChange.subscribe((id: string) => {\n this.clearData();\n this.selectedLocation = this.findLocationByID(id);\n this.navigatorService.currentNavBarLocationID = id;\n this.onSelectedLocationChanged();\n });\n }\n\n ngOnInit() {\n this.initLocations();\n }\n\n ngOnDestroy() {\n this.spaceSubscription.unsubscribe();\n this.viewerSubscription.unsubscribe();\n this.locationIDSubscription.unsubscribe();\n }\n\n async initLocations() {\n this.locations = this.spaceService.locationsForUser;\n if (this.locations.length === 0) {\n this.locations =\n await this.spaceService.getLocationsForCurrentUser();\n }\n if (this.currentLocationID && this.locations.length > 0) {\n this.selectedLocation = this.findLocationByID(\n this.currentLocationID,\n );\n if (this.selectedLocation) {\n this.sendUpdateLocationEvent();\n }\n }\n }\n\n /**\n * Find a location with a given ID\n * @param id ID for the location\n * @returns The location or null if no location were found\n */\n findLocationByID(id: string): Space {\n const space = this.locations.find((loc) => loc.id === id);\n return space || null; /** Convert to null if undefined */\n }\n\n clearData(clearVisits: boolean = true) {\n this.floorsPerSpace = null;\n this.selectedFloor = null;\n this.zonesPerFloor = null;\n this.childrenZones = null;\n this.selectedModel3d = null;\n this.sweepToGo = null;\n this.floorToGo = null;\n this.selectedZone = null;\n this.selectedChildZone = null;\n if (clearVisits) {\n this.visitsPerSpace = null;\n this.zonesPerSpace = null;\n }\n }\n\n /**\n * When the selectedLocation changes\n * Send a event to locationIDChange from NavigatorService\n * The event will be catch by this component and the filter bar will be update\n */\n sendUpdateLocationEvent() {\n const locationID = this.selectedLocation\n ? this.selectedLocation.id\n : null;\n this.navigatorService.locationIDChange.next(locationID);\n }\n\n async onSelectedLocationChanged() {\n if (!this.selectedLocation) {\n return;\n }\n try {\n this.visitsPerSpace =\n await this.visitService.getVisitsForSpaceForUser(\n this.selectedLocation.id,\n );\n this.zonesPerSpace = await this.zoneService.getZonesBySpaceForUser(\n this.selectedLocation.id,\n );\n if (this.visitsPerSpace.length === 1) {\n this.selectedModel3d = this.visitsPerSpace[0].model3d;\n this.floorsPerSpace = this.zonesPerSpace.filter(\n (zone) => zone.layer && zone.layer.name.includes(\"FLOOR\"),\n );\n if (this.floorsPerSpace.length === 1) {\n [this.selectedFloor] = this.floorsPerSpace;\n this.onFloorClick(false);\n }\n }\n } catch (error) {\n console.log(\"error onChosenLocation\", error);\n }\n }\n\n async onLocationClick() {\n this.clearData();\n await this.sendUpdateLocationEvent();\n }\n\n async onFloorClick(emitEvent = true) {\n this.sweepToGo = null;\n this.selectedZone = null;\n this.selectedChildZone = null;\n if (this.selectedFloor === null) {\n this.navigatorService.navBarZoneIDChange.next(null);\n this.navigatorService.currentNavBarZoneID = null;\n return;\n }\n if (emitEvent) {\n this.navigatorService.navBarZoneIDChange.next(\n this.selectedFloor.id,\n );\n }\n\n this.navigatorService.currentNavBarZoneID = this.selectedFloor.id;\n this.zonesPerFloor = this.zonesPerSpace.filter(\n (zone) =>\n // zone.id === this.selectedFloor.id ||\n zone.parentID === this.selectedFloor.id,\n );\n }\n\n async onZoneClick() {\n this.selectedChildZone = null;\n if (this.selectedZone === null) {\n if (this.selectedFloor === null) {\n this.navigatorService.navBarZoneIDChange.next(null);\n this.navigatorService.currentNavBarZoneID = null;\n } else {\n this.navigatorService.navBarZoneIDChange.next(\n this.selectedFloor.id,\n );\n this.navigatorService.currentNavBarZoneID =\n this.selectedFloor.id;\n }\n return;\n }\n this.childrenZones = this.zonesPerSpace.filter(\n (zone) => zone.parentID === this.selectedZone.id,\n );\n this.navigatorService.navBarZoneIDChange.next(this.selectedZone.id);\n this.navigatorService.currentNavBarZoneID = this.selectedZone.id;\n }\n\n async onVisitClick(event) {\n this.clearData(false);\n const index = event.target.value;\n const visit = this.visitsPerSpace[index];\n this.selectedModel3d = visit.model3d;\n const parentZoneForVisit =\n await this.visitService.getDefaultZoneForVisit(visit);\n this.floorsPerSpace = this.zonesPerSpace.filter(\n (zone) =>\n zone.layer &&\n zone.layer.name.includes(\"FLOOR\") &&\n zone.parentID === parentZoneForVisit.id,\n );\n }\n\n goTo() {\n if (this.selectedZone && !this.selectedZone.virtual) {\n this.sweepToGo = this.selectedChildZone\n ? this.selectedChildZone.sweepIDs[0]\n : this.selectedZone.sweepIDs[0];\n }\n if (this.selectedFloor && !this.selectedZone) {\n this.floorToGo = this.selectedFloor;\n }\n if (this.hasToChangeVisit()) {\n this.goToSweepOrFloor();\n } else {\n if (this.sweepToGo) {\n console.log(\"before set sweep\", this.sweepToGo);\n this.viewerService.setSweepToMove(this.sweepToGo);\n }\n if (this.floorToGo && this.floorsPerSpace.length !== 1) {\n this.navigatorService.floorToGo = this.floorToGo;\n }\n this.router.navigate([\"visit\", this.selectedLocation.id], {\n queryParams: { model3D: this.selectedModel3d },\n });\n }\n }\n\n hasToChangeVisit(): boolean {\n return (\n this.currentLocationID === this.selectedLocation.id &&\n this.selectedModel3d === this.currentModel3d\n );\n }\n\n goToSweepOrFloor() {\n if (this.sweepToGo) {\n this.navigatorService.goToSweepWithRotation(this.sweepToGo);\n }\n if (this.floorToGo) {\n this.navigatorService.goToFloor(this.floorToGo);\n }\n }\n\n // hasHistory(): boolean {\n // return this.navigatorService.modelHasHistory(this.selectedModel3d);\n // }\n\n canGo(): boolean {\n const viewerIsReady =\n this.viewerService.isLoaded && this.viewerService.showingViewer;\n const noViewer = !this.viewerService.showingViewer;\n return viewerIsReady || noViewer;\n }\n\n showLocation(): string {\n if (\n window.innerWidth < 750 &&\n this.navbarSelectMenu &&\n this.navbarSelectMenu.nativeElement.className.search(\"show\") ===\n -1 &&\n this.selectedLocation\n ) {\n return this.selectedLocation.name;\n }\n return \"\";\n }\n}\n","<nav class=\"navbar navbar-expand-md navbar-dark navbar-inverse second-nav\">\n <div class=\"d-flex col-12\">\n <div class=\"me-3\">\n <span class=\"iconify\" data-icon=\"mdi:map-marker-outline\" style=\"color: white;\" data-width=\"30\" data-height=\"30\"></span>\n </div>\n\n <div #navbarSelectMenu class=\"collapse navbar-collapse\" id=\"nav-item-container-blue\">\n <div class=\"d-flex flex-column flex-md-row \">\n <select class=\"form-control flex-fill location select-menu\" [(ngModel)]=\"selectedLocation\"\n (ngModelChange)=\"onLocationClick()\">\n <option [ngValue]=\"null\" selected>{{ 'Location' | translate }}</option>\n <option *ngFor=\"let loc of locations; index as index\" [ngValue]=\"loc\"> {{ loc.name }}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" (change)=\"onVisitClick($event)\"\n *ngIf=\"visitsPerSpace && visitsPerSpace.length > 1\">\n <option value=\"default\" selected disabled hidden>{{'Visit' | translate}}</option>\n <option *ngFor=\"let visit of visitsPerSpace; index as index\" value=\"{{index}}\">{{ visit.name}}\n </option>\n </select>\n <select class=\"form-control flex-fill floor select-menu\" [(ngModel)]=\"selectedFloor\"\n (ngModelChange)=\"onFloorClick()\">\n <option [ngValue]=\"null\" selected>{{'Floor' | translate}}</option>\n <option *ngFor=\"let zone of floorsPerSpace\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu zone\" [(ngModel)]=\"selectedZone\"\n (ngModelChange)=\"onZoneClick()\">\n <option [ngValue]=\"null\" selected>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of zonesPerFloor\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <select class=\"form-control flex-fill select-menu\" [(ngModel)]=\"selectedChildZone\"\n *ngIf=\"childrenZones && childrenZones.length>0\">\n <option [ngValue]=\"null\" selected disabled>{{'Zone' | translate}}</option>\n <option *ngFor=\"let zone of childrenZones\" [ngValue]=\"zone\">{{ zone.name}}</option>\n </select>\n <!-- <select class=\"form-control flex-fill\">\n <option i18n>{{'Favorites' | translate}}</option>\n </select> -->\n </div>\n <div class=\"row\" style=\"margin-left: 0;\">\n <div class=\"outer_circle\">\n <button id='btn-icon' [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\"\n (click)=\"goTo()\"></button>\n </div>\n <button (click)=\"goTo()\" class=\"btn rounded-pill btn-3d\"\n [disabled]=\"!selectedLocation || !selectedModel3d || !canGo()\">{{'3D visit' | translate}}</button>\n </div>\n </div>\n\n <h4 style=\"line-height: 29px;margin: 0;\" *ngIf=\"showLocation()\">\n {{ showLocation() }}\n </h4>\n </div>\n</nav>\n","import { Component, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { LocaleService } from '../../services/locale.service';\r\nimport { NavigatorService } from '../../services/navigator.service';\r\nimport { SupportService } from '../../services/support.service';\r\nimport { BaseUserService } from '../../services/user.service';\r\nimport { ProfileEntity, Mission } from '../../types.service';\r\nimport { SupportModalComponent } from '../support-modal/support-modal.component';\r\n\r\n@Component({\r\n selector: 'lib-menu-bar',\r\n templateUrl: './menu-bar.component.html',\r\n styleUrls: ['./menu-bar.component.scss']\r\n})\r\nexport class MenuBarComponent implements OnInit {\r\n\r\n user: ProfileEntity;\r\n\r\n mission: Mission;\r\n\r\n isVisitor = true;\r\n\r\n isVisible = false;\r\n\r\n isManager: boolean;\r\n\r\n userSubscription: Subscription;\r\n\r\n navSubscription: Subscription;\r\n\r\n constructor(\r\n private router: Router,\r\n public localeService: LocaleService,\r\n private userService: BaseUserService,\r\n private navigatorService: NavigatorService,\r\n private supportService: SupportService,\r\n ) {\r\n this.userSubscription = this.userService.isChanged.subscribe(\r\n (isChanged) => {\r\n if (isChanged) {\r\n this.update();\r\n }\r\n },\r\n );\r\n this.navSubscription = this.navigatorService.isVisibleChanged.subscribe(\r\n (data) => {\r\n this.isVisible = data;\r\n },\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n this.update();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const input = document.querySelector(\r\n \"#mainSearchBar\",\r\n ) as HTMLInputElement;\r\n if (input) {\r\n input.addEventListener(\"keydown\", ({ key }) => {\r\n if (key === \"Enter\") {\r\n this.onSubmit();\r\n }\r\n });\r\n }\r\n this.handleCloseNavbarForItems();\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.userSubscription) {\r\n this.userSubscription.unsubscribe();\r\n }\r\n if (this.navSubscription) {\r\n this.navSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n async signOut() {\r\n await this.userService.logoutCurrentAndSignOutAuth();\r\n this.router.navigate([\"auth\"]); \r\n }\r\n\r\n async update() {\r\n this.user = this.userService.cu;\r\n this.mission = this.userService.currentMissions[0];\r\n this.isManager = this.userService.hasManagerRoleInAnyMission();\r\n this.isVisitor = this.userService.isVisitor();\r\n if (!this.isVisitor) {\r\n this.isVisible = true;\r\n }\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n onSubmit() {\r\n const input = document.querySelector(\r\n \"#mainSearchBar\",\r\n ) as HTMLInputElement;\r\n const searchValue = input.value.toLowerCase();\r\n if (searchValue !== \"\") {\r\n const baseUrl = location.origin;\r\n window.open(\r\n `${baseUrl}/dashboard/search?term=${searchValue}`,\r\n \"_blank\",\r\n );\r\n }\r\n }\r\n\r\n onToggleVisible() {\r\n this.isVisible = !this.isVisible;\r\n }\r\n\r\n handleCloseNavbarForItems() {\r\n const navItems = document.querySelectorAll(\".nav-link\");\r\n const buttonNavToggler = document.querySelector(\".navbar-toggler\");\r\n const navbarItemContainer = document.querySelector(\r\n \"#nav-item-container\",\r\n ) as HTMLDivElement;\r\n const navbarItemContainerTwo = document.querySelector(\r\n \"#nav-item-container-blue\",\r\n ) as HTMLDivElement;\r\n // eslint-disable-next-line unicorn/no-array-for-each\r\n navItems.forEach((navItem) => {\r\n navItem.addEventListener(\"click\", () => {\r\n if (navbarItemContainer.classList.contains(\"show\")) {\r\n buttonNavToggler.setAttribute(\"aria-expanded\", \"false\");\r\n navbarItemContainer.classList.remove(\"show\");\r\n navbarItemContainer.classList.replace(\r\n \"collapse\",\r\n \"collapsing\",\r\n );\r\n navbarItemContainerTwo.classList.remove(\"show\");\r\n navbarItemContainerTwo.classList.replace(\r\n \"collapse\",\r\n \"collapsing\",\r\n );\r\n\r\n setTimeout(() => {\r\n navbarItemContainer.classList.replace(\r\n \"collapsing\",\r\n \"collapse\",\r\n );\r\n }, 500);\r\n setTimeout(() => {\r\n navbarItemContainerTwo.classList.replace(\r\n \"collapsing\",\r\n \"collapse\",\r\n );\r\n }, 500);\r\n }\r\n });\r\n });\r\n }\r\n\r\n openSupportForm() {\r\n this.supportService.openSupportForm(SupportModalComponent);\r\n }\r\n\r\n}\r\n","<div id=\"menu-bar\">\r\n <div *ngIf=\"!isVisitor\">\r\n <nav class=\"navbar navbar-expand-md navbar-light p-0\">\r\n <div class=\"container-fluid\" *ngIf=\"isVisible\">\r\n <div class=\"navbar-brand\" [routerLink]=\"['/dashboard']\">\r\n <img alt=\"\" src=\"../assets/images/logos/logo-rvb-straight.png\">\r\n </div>\r\n <button class=\"navbar-toggler\" data-bs-target=\".navbar-collapse\" data-bs-toggle=\"collapse\" type=\"button\">\r\n <span class=\"navbar-toggler-icon\"></span>\r\n </button>\r\n <div class=\"collapse navbar-collapse\">\r\n <form class=\"form-inline ms-3\">\r\n <input class=\"form-control search-button\" placeholder=\"keyword\" id=\"mainSearchBar\" type=\"text\">\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSubmit()\">{{'Search' |\r\n translate}}</button>\r\n <lib-range-date-picker></lib-range-date-picker>\r\n </form>\r\n\r\n <!-- <div class=\"d-md-none\">\r\n <app-dashboard-navigation></app-dashboard-navigation>\r\n </div> -->\r\n <div class=\"ms-auto nav-item dropdown\">\r\n <div class=\"profile_pic dropdown-toggle\" data-testid=\"dropdown-menu-button\" data-bs-toggle=\"dropdown\">\r\n <lib-avatar></lib-avatar>\r\n </div>\r\n <div class=\"dropdown-menu dropdown-menu-right\">\r\n <p *ngIf=\"user && mission\" class=\"p-2\">\r\n <span class=\"username\">{{ user.displayName }}</span><br />\r\n <span class=\"user-role\">{{ mission.role }}</span><br />\r\n <span class=\"org\">{{ mission.organisation ? mission.organisation.name : \"No organisation\" |\r\n translate}}</span>\r\n </p>\r\n <div class=\"dropdown-divider\"></div>\r\n <!-- <a class=\"dropdown-item\" routerLink=\"/debug\" *ngIf=\"isManager\">Debug</a> -->\r\n <a class=\"dropdown-item\" (click)=\"localeService.modal()\">{{'Language' | translate}}</a>\r\n <a class=\"dropdown-item\" routerLink=\"/dashboard\">{{'Data management' | translate}}</a>\r\n <a class=\"dropdown-item\" routerLink=\"/admin\" *ngIf=\"isManager\">\r\n {{'Users management' | translate}}</a>\r\n <a class=\"dropdown-item\" routerLink=\"/profile\">\r\n {{'Profile' | translate}}</a>\r\n <div class=\"dropdown-divider\"></div>\r\n <button class=\"dropdown-item\" (click)=\"openSupportForm()\">{{\"Help\" | translate}}</button>\r\n <button data-testid=\"logout-auth-btn\" class=\"dropdown-item\" (click)=\"signOut()\">{{\"Logout\" |\r\n translate}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </nav>\r\n <lib-navigation-bar *ngIf=\"isVisible\"></lib-navigation-bar>\r\n </div>\r\n <div *ngIf=\"isVisitor && isVisible\">\r\n <div class=\"visitor-div\">\r\n <div class=\"logo-container\" data-testid=\"dropdown-menu-button\">\r\n <img class=\"img-logo\" alt=\"SmarterPlanLogo\" src=\"../assets/images/logos/logo-reserve.png\">\r\n </div>\r\n <div class=\"avatar-container-menu\">\r\n <div class=\"profile_pic dropdown-toggle\" data-bs-toggle=\"dropdown\">\r\n <lib-avatar></lib-avatar>\r\n </div>\r\n <div class=\"dropdown-menu dropdown-menu-right\">\r\n <button class=\"dropdown-item\" (click)=\"localeService.modal()\">{{'Language' | translate}}</button>\r\n <button class=\"dropdown-item\" (click)=\"openSupportForm()\">{{\"Help\" | translate}}</button>\r\n <button data-testid=\"logout-auth-btn\" class=\"dropdown-item\" (click)=\"signOut()\">{{\"Logout\" |\r\n translate}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { CsvExportComponent } from './components/csv-export/csv-export.component';\r\nimport { SearchBarComponent } from './components/search-bar/search-bar.component';\r\nimport { Config } from './config';\r\nimport { DurationToStringPipe } from './pipes/duration-to-string.pipe';\r\nimport { HashtagFromIdPipe } from './pipes/hashtag-from-id.pipe';\r\nimport { SafeUrlPipe } from './pipes/safe-url.pipe';\r\nimport { TimeDateToLocalStringPipe } from './pipes/time-date-to-local-string.pipe';\r\nimport { ModalSwitchVisitComponent } from './components/modal-switch-visit/modal-switch-visit.component';\r\nimport { UsernameFromIdPipe } from './pipes/username-from-id.pipe';\r\nimport { MenuBarComponent } from './components/menu-bar/menu-bar.component';\r\nimport { AvatarComponent } from './components/menu-bar/avatar/avatar.component';\r\nimport { NavigationBarComponent } from './components/menu-bar/navigation-bar/navigation-bar.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { RangeDatePickerComponent } from './components/menu-bar/range-date-picker/range-date-picker.component';\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { LoaderComponent } from './components/loader/loader.component';\r\nimport { SupportModalComponent } from './components/support-modal/support-modal.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n@NgModule({\r\n declarations: [\r\n TimeDateToLocalStringPipe,\r\n SafeUrlPipe,\r\n HashtagFromIdPipe,\r\n DurationToStringPipe,\r\n CsvExportComponent,\r\n SearchBarComponent,\r\n UsernameFromIdPipe,\r\n ModalSwitchVisitComponent,\r\n MenuBarComponent,\r\n AvatarComponent,\r\n NavigationBarComponent,\r\n RangeDatePickerComponent,\r\n LoaderComponent,\r\n SupportModalComponent\r\n ],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CommonModule,\r\n RouterModule,\r\n NgbModule,\r\n TranslateModule.forChild({\r\n extend: true\r\n })\r\n ],\r\n exports: [\r\n CsvExportComponent,\r\n SearchBarComponent,\r\n TimeDateToLocalStringPipe,\r\n SafeUrlPipe,\r\n HashtagFromIdPipe,\r\n DurationToStringPipe,\r\n UsernameFromIdPipe,\r\n MenuBarComponent,\r\n LoaderComponent,\r\n SupportModalComponent\r\n ]\r\n})\r\nexport class NgxSmarterplanCoreModule {\r\n public static forRoot(config: Config): ModuleWithProviders<NgxSmarterplanCoreModule> {\r\n return {\r\n ngModule: NgxSmarterplanCoreModule,\r\n providers: [\r\n {\r\n provide: 'config',\r\n useValue: config\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","/* eslint-disable no-case-declarations */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Comment, DbObjectType, Equipment, Feature, POI, PoiType, TagAction, Ticket } from \"../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseTagService {\r\n\r\n constructor() {}\r\n\r\n async getHtmlToInject(\r\n tagType: PoiType,\r\n object: DbObjectType,\r\n maxHeightDiv: number\r\n ): Promise<{ html: string; height: number }> {\r\n throw new Error(`getHtmlToInject is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n getUrlForSeeDetails(\r\n object: DbObjectType,\r\n tagType: PoiType,\r\n ): string {\r\n switch (tagType) {\r\n case PoiType.TICKET: {\r\n return `visit/${object.spaceID}/detail/${object.id}`;\r\n }\r\n case PoiType.EQUIPMENT: {\r\n return `visit/${object.spaceID}/equip/${object.id}`;\r\n }\r\n case PoiType.MEASURE: {\r\n return `visit/${object.spaceID}/measurement/${object.id}`;\r\n }\r\n case PoiType.DATA: {\r\n return `visit/${object.spaceID}/feature/${object.id}`;\r\n }\r\n case PoiType.DESK: {\r\n return `visit/${object.spaceID}/add_booking/${object.id}`;\r\n }\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n async prepareEquipmentHtml(\r\n equip: Equipment,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareEquipmentHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareTicketHtml(\r\n ticket: Ticket,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareTicketHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareFeatureHtml(\r\n feature: Feature,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareFeatureHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareMeasurementHtml(\r\n measure: Comment,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareMeasurementHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareDeskHtml(\r\n feature: Feature,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareDeskHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async prepareIndicatorHtml(\r\n feature: Feature,\r\n ): Promise<{ htmlObject: string; height: number }> {\r\n throw new Error(`prepareDeskHtml is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n async getSignedTagIconSource(tagIconSrc: string): Promise<string | null> {\r\n throw new Error(`getSignedTagIconSource is not implemented in the base class.`);\r\n }\r\n\r\n getIconTagImageForFeature(feature: DbObjectType, poi: POI): string {\r\n // const tagIcon = JSON.parse(poi.tagIcon);\r\n // return tagIcon.src;\r\n throw new Error(`getIconTagImageForFeature is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n\r\n getScriptForTag(object, tagType: PoiType): string {\r\n throw new Error(`getScriptForTag is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionDetailClick(url: string) {\r\n throw new Error(`onActionDetailClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionAudioClick(audioCommentID: string) {\r\n throw new Error(`onActionDetailClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionVideoClick(url: string) {\r\n throw new Error(`onActionVideoClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionImageClick(imageCommentID: string) {\r\n throw new Error(`onActionImageClick is not implemented in the base class.\r\n Please override this method in your extended class.`);\r\n }\r\n\r\n onActionDocClick(url: string) {\r\n throw new Error(`onActionDocClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n \r\n onActionYoutubeClick(url: string) {\r\n throw new Error(`onActionYoutubeClick is not implemented in the base class. \r\n Please override this method in your extended class.`);\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Measurement, Feature, Comment, IUpdate, CommentType } from \"../../types.service\";\r\nimport { uploadFileToS3 } from \"../s3.service\";\r\nimport { PoiService } from \"./poi.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class CommentService {\r\n\r\n API: any; // AWS\r\n constructor(@Inject('currentAPIService') apiInjected: any, \r\n private poiService: PoiService) {\r\n this.API = apiInjected;\r\n }\r\n\r\n getCommentsFromTicketID(ticketID: string): Promise<Comment[]> {\r\n return this.API.__proto__.CommentsByTicket(ticketID).then((res)=>res.items);\r\n }\r\n\r\n async getCommentsBySpaceID(spaceID: string): Promise<Comment[]> {\r\n return this.API.__proto__.ListComments({ spaceID: { eq: spaceID } }).then(\r\n (comments) => comments.items,\r\n );\r\n }\r\n\r\n async readCommentAsMeasurement(commentID: string): Promise<Measurement> {\r\n const comment = await this.getComment(commentID);\r\n if (comment.ticketID && !comment.ticket) {\r\n comment.ticket = await this.API.__proto__.GetTicket(comment.ticketID);\r\n }\r\n const values = comment.dimensions;\r\n const numberPoints = values.length + 1;\r\n const poi = await this.poiService.getPoiByElementId(commentID);\r\n const measure = {\r\n id: comment.id,\r\n comment,\r\n poi,\r\n numberPoints,\r\n values,\r\n } as Measurement;\r\n return measure;\r\n }\r\n\r\n /**\r\n * CRUD\r\n *\r\n */\r\n async getComment(commentID: string): Promise<Comment> {\r\n return this.API.__proto__.GetComment(commentID);\r\n }\r\n\r\n async deleteComment(commentID: string): Promise<Comment> {\r\n return this.API.__proto__.DeleteComment({ id: commentID });\r\n }\r\n\r\n async createComment(comment: Comment): Promise<Comment> {\r\n return this.API.__proto__.CreateComment(comment);\r\n }\r\n\r\n async updateComment(input: any): Promise<Comment> {\r\n return this.API.__proto__.UpdateComment(input);\r\n }\r\n\r\n async uploadFileForComment(file: File, id: string = null): Promise<string> {\r\n return uploadFileToS3(\"comments/\", file, id);\r\n }\r\n\r\n /** Create a new comment with an existing Annexe */\r\n async createCommentWithFileURL(\r\n comment: Comment,\r\n url: string,\r\n ): Promise<Comment> {\r\n const newComment = comment;\r\n newComment.annexe = url;\r\n return this.createComment(newComment);\r\n }\r\n\r\n async createCommentWithFile(\r\n comment: Comment,\r\n file: File,\r\n ): Promise<Comment> {\r\n let createdComment = await this.createComment(comment);\r\n if (file) {\r\n const url = await this.uploadFileForComment(\r\n file,\r\n createdComment.id,\r\n );\r\n createdComment = await this.updateComment({\r\n id: createdComment.id,\r\n annexe: url,\r\n });\r\n }\r\n return createdComment;\r\n }\r\n\r\n \r\n\r\n async setCommentAsCoverForFeature(\r\n commentID: string,\r\n feature: Feature,\r\n ): Promise<Comment> {\r\n const updatedComment = await this.updateComment({\r\n id: commentID,\r\n isCoverImage: true,\r\n });\r\n await Promise.all(\r\n feature.comments.items.map(async (image) => {\r\n if (\r\n image.type === CommentType.IMAGE &&\r\n image.id !== commentID\r\n ) {\r\n await this.updateComment({\r\n id: image.id,\r\n isCoverImage: false,\r\n });\r\n }\r\n }),\r\n );\r\n return updatedComment;\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Injectable, OnInit } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { Subject } from \"rxjs\";\r\nimport { MediaContent } from \"../types.service\";\r\nimport { CommentService } from \"./models/comment.service\";\r\nimport { FeatureService } from \"./models/feature.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ContentService {\r\n modalReference;\r\n\r\n currentAudio: HTMLAudioElement;\r\n\r\n closeModal = new Subject<boolean>();\r\n\r\n nextSlide = new Subject<string>();\r\n\r\n constructor(public modalService: NgbModal, private router: Router, private commentService: CommentService) {}\r\n\r\n presentVideoModal(video: MediaContent, videoComponent: any, modalDialogClass: string) {\r\n this.modalReference = this.modalService.open(videoComponent, {\r\n modalDialogClass: modalDialogClass,\r\n });\r\n this.modalReference.componentInstance.video = video;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n }\r\n\r\n async presentAudioModal(audioCommentID: string, audioComponent: any, modalDialogClass: string) {\r\n const audioComment = await this.commentService.getComment(audioCommentID);\r\n const audioMediaContent = {\r\n path: audioComment.annexe,\r\n title: audioComment.title,\r\n description: audioComment.description,\r\n } as MediaContent;\r\n this.modalReference = this.modalService.open(audioComponent, {\r\n modalDialogClass: modalDialogClass,\r\n });\r\n this.modalReference.componentInstance.audio = audioMediaContent;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal(); \r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n }\r\n\r\n presentImageCarouselModal(featureID: string, carouselComponent: any, modalDialogClass: string, \r\n fromTag = true, selectedImageIndex='0') {\r\n this.modalReference = this.modalService.open(\r\n carouselComponent,\r\n {\r\n modalDialogClass: modalDialogClass,\r\n },\r\n );\r\n this.modalReference.componentInstance.featureID = featureID;\r\n this.modalReference.componentInstance.fromTag = fromTag;\r\n this.modalReference.componentInstance.selectedImageIndex = selectedImageIndex;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.componentInstance.slideChanged.subscribe(\r\n (slide) => {\r\n this.nextSlide.next(slide.current);\r\n },\r\n );\r\n }\r\n\r\n presentPdfModal(url: string, pdfComponent: any, modalDialogClass: string,) {\r\n this.modalReference = this.modalService.open(pdfComponent, {\r\n modalDialogClass: modalDialogClass,\r\n });\r\n this.modalReference.componentInstance.url = url;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n }\r\n\r\n presentMuseumImageCarouselModal(\r\n carouselComponent: any,\r\n modalDialogClass: string,\r\n fromTag = true,\r\n selectedImageIndex = \"0\",\r\n images: any[] = null,\r\n commentImageID: string = null,\r\n ) {\r\n this.modalReference = this.modalService.open(carouselComponent, {\r\n modalDialogClass,\r\n });\r\n this.modalReference.componentInstance.fromTag = fromTag;\r\n this.modalReference.componentInstance.selectedImageIndex =\r\n selectedImageIndex;\r\n this.modalReference.componentInstance.images = images;\r\n this.modalReference.componentInstance.commentID = commentImageID;\r\n this.modalReference.dismissed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.closed.subscribe(() => {\r\n this.emitCloseModal();\r\n });\r\n this.modalReference.componentInstance.slideChanged.subscribe(\r\n (slide) => {\r\n this.nextSlide.next(slide.current);\r\n },\r\n );\r\n }\r\n\r\n toogleAudioElement(url: string) {\r\n if (!this.currentAudio || this.currentAudio.src !== url) {\r\n this.currentAudio = new Audio(url);\r\n }\r\n if (this.currentAudio.duration > 0 && !this.currentAudio.paused) {\r\n // it is playing, we stop it\r\n this.currentAudio.pause();\r\n } else {\r\n this.currentAudio.play();\r\n }\r\n }\r\n\r\n showFullscreenCarouselForFeature(featureID: string, fromTag = false) {\r\n const url = this.router.serializeUrl(\r\n this.router.createUrlTree([`/fullscreen/${featureID}`], {\r\n queryParams: { fromTag },\r\n }),\r\n );\r\n window.open(url, \"_blank\");\r\n }\r\n\r\n emitCloseModal() {\r\n this.modalReference = null;\r\n this.closeModal.next(true);\r\n }\r\n\r\n forceCloseCurrentModal() {\r\n if (this.modalReference) {\r\n this.modalReference.dismiss(\"forced\");\r\n }\r\n }\r\n\r\n moveToSlide(slide: string) {\r\n if (this.modalReference) {\r\n this.modalReference.componentInstance.navigateToSlide(slide);\r\n }\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BaseLateralTabService {\r\n activeTab = \"tickets\";\r\n\r\n firstLoad = true;\r\n\r\n constructor() { }\r\n\r\n storeTabHistory(tab: string) {\r\n this.activeTab = tab;\r\n }\r\n\r\n getTabHistory(): string {\r\n // throw new Error(\"Method 'getTabHistory' not implemented.\");\r\n return this.activeTab;\r\n }\r\n}\r\n","import { Injectable, Inject } from \"@angular/core\";\r\nimport { Layer } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class LayerService {\r\n API: any; //AWS\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getLayerForOrganisation(orgID: string): Promise<Layer[]> {\r\n return this.API.__proto__.LayersByOrganisation(orgID).then((list) => list.items);\r\n }\r\n\r\n async createLayerForOrganisation(\r\n layerName: string,\r\n orgID: string,\r\n ): Promise<Layer> {\r\n return this.API.__proto__.CreateLayer({\r\n name: layerName.toUpperCase(),\r\n organisationID: orgID,\r\n });\r\n }\r\n\r\n async getLayerByNameForOrganisation(layerName: string, orgID: string) {\r\n return this.API.__proto__.LayersByOrganisation(orgID, null, {\r\n name: { eq: layerName.toUpperCase() },\r\n }).then((list) => list.items);\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { removeNullKeysFromObject, wait } from \"../helpers.service\";\r\nimport { LevelStatus, Layer, Node, Zone, Navigation, Plan } from \"../types.service\";\r\nimport { LayerService } from \"./models/layer.service\";\r\nimport { NavigationService } from \"./models/navigation.service\";\r\nimport { PlanService } from \"./models/plan.service\";\r\nimport { ZoneService } from \"./models/zone.service\";\r\nimport { uploadJsonToS3, uploadBase64Image, removeAllFilesFromFolderS3 } from \"./s3.service\";\r\nimport { BaseUserService } from \"./user.service\";\r\nimport { ViewerService } from \"./viewer.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class MatterportImportService {\r\n private currentFrame;\r\n\r\n public sdk: any;\r\n\r\n private sweeps: Object;\r\n\r\n public floors: Object;\r\n\r\n private currentFloor;\r\n\r\n private _modelID: string;\r\n\r\n private _spaceID: string;\r\n\r\n public get spaceID(): string {\r\n return this._spaceID;\r\n }\r\n\r\n public set spaceID(value: string) {\r\n this._spaceID = value;\r\n }\r\n\r\n public get modelID(): string {\r\n return this._modelID;\r\n }\r\n\r\n public set modelID(value: string) {\r\n this._modelID = value;\r\n }\r\n\r\n public stop = false;\r\n\r\n public importingImages: Subject<boolean> = new Subject<boolean>();\r\n\r\n public intersection: Subject<any> = new Subject<any>();\r\n\r\n public sweepProcessedCount: Subject<number> = new Subject<number>();\r\n\r\n public totalSweepsCount: Subject<number> = new Subject<number>();\r\n\r\n constructor(\r\n private navigationService: NavigationService,\r\n private zoneService: ZoneService,\r\n private viewerService: ViewerService,\r\n private layerService: LayerService,\r\n private userService: BaseUserService,\r\n private planService: PlanService,\r\n ) {}\r\n\r\n async initSdkForModel(modelID: string): Promise<boolean> {\r\n this.stop = false;\r\n return new Promise((resolve, reject) => {\r\n // Load SDK\r\n console.log(\"Loading Matterport SDK\");\r\n this.modelID = modelID;\r\n const iframe = document.createElement(\"iframe\");\r\n if (!iframe) {\r\n reject(new Error(\"Cannot create iframe\"));\r\n }\r\n this.viewerService.setTourUrl(modelID);\r\n const url = this.viewerService.getTourUrl();\r\n iframe.setAttribute(\"src\", url);\r\n iframe.allow = \"xr-spatial-tracking\";\r\n iframe.height = \"100%\";\r\n iframe.width = \"100%\";\r\n iframe.id = \"viewer-module\";\r\n const element = document.querySelector(\"#viewer-frame\");\r\n element.append(iframe);\r\n this.currentFrame = iframe;\r\n\r\n // @ts-ignore\r\n window.MP_SDK.connect(iframe, \"qn9wsasuy5h2fzrbrn1nzr0id\", \"3.11\")\r\n .then(async (sdk) => {\r\n // Instanciate sdk\r\n this.sdk = sdk;\r\n\r\n // Sibscribe to Floor data\r\n this.sdk.Floor.data.subscribe({\r\n onCollectionUpdated: function upd(collection: any) {\r\n // console.log(\"Floors\", collection);\r\n this.floors = collection;\r\n }.bind(this),\r\n });\r\n // Subscribe to current Floor\r\n this.sdk.Floor.current.subscribe(\r\n function upd(currentFloor) {\r\n this.currentFloor = currentFloor;\r\n // Change to the current floor has occurred.\r\n // if (currentFloor.sequence === -1) {\r\n // console.log(\"Currently viewing all floors\");\r\n // } else if (currentFloor.sequence === undefined) {\r\n // if (currentFloor.id === undefined) {\r\n // console.log(\"Current viewing an unplaced unaligned sweep\");\r\n // } else {\r\n // // console.log('Currently transitioning between floors');\r\n // }\r\n // } else {\r\n // // console.log('Currently on floor', currentFloor.id);\r\n // // console.log('Current floor\\'s sequence index', currentFloor.sequence);\r\n // // console.log('Current floor\\'s name', currentFloor.name)\r\n // }\r\n }.bind(this),\r\n );\r\n\r\n // Subscribe to Sweep data\r\n this.sdk.Sweep.data.subscribe({\r\n onCollectionUpdated: function upd(collection) {\r\n // console.log(\r\n // \"the entire up-to-date collection\",\r\n // collection,\r\n // );\r\n this.sweeps = collection;\r\n }.bind(this),\r\n });\r\n\r\n // Subscribe to intersection\r\n this.sdk.Pointer.intersection.subscribe(\r\n function pointer(intersectionData) {\r\n this.intersection.next(intersectionData.position);\r\n }.bind(this),\r\n );\r\n // remove labels\r\n this.sdk.Settings.update(\"labels\", false)\r\n .then(function (data) {\r\n // Setting update complete.\r\n console.log(`Labels setting: ${data}`);\r\n })\r\n .catch(function (error) {\r\n // Setting update error.\r\n });\r\n\r\n setTimeout(async () => {\r\n console.log(\"init done\");\r\n resolve(true);\r\n }, 5000);\r\n })\r\n .catch((handleError) => console.error(handleError));\r\n });\r\n }\r\n\r\n async importData(\r\n spaceID: string,\r\n surface: number,\r\n reloading: boolean = false,\r\n node: Node = null,\r\n ): Promise<boolean> {\r\n this.spaceID = spaceID;\r\n let floorZones: Zone[] = [];\r\n const zones = await this.zoneService.getZonesBySpace(spaceID);\r\n const mainZone = zones.find((z) => !z.parentID);\r\n if (this.sweeps && mainZone) {\r\n console.log(\"importing data from matterport\");\r\n // save sweeps data as json\r\n const json = JSON.stringify(Object.values(this.sweeps));\r\n await uploadJsonToS3(\r\n `visits/${this.modelID}/inventory/`,\r\n json,\r\n \"data.json\",\r\n );\r\n if (reloading) {\r\n // perform only 360 import since we are reloading\r\n await this.import360images();\r\n console.log(\"after reloading\");\r\n return Promise.resolve(true);\r\n }\r\n // check layer of building type\r\n const layerBuilding = await this.getLayerByName(\"BUILDING\");\r\n const createdDefaultZone = await this.createZone(\r\n node.metadata,\r\n layerBuilding.id,\r\n surface,\r\n mainZone.id,\r\n Object.keys(this.sweeps),\r\n node,\r\n );\r\n if (!createdDefaultZone) {\r\n return Promise.resolve(false);\r\n }\r\n if (this.floors) {\r\n floorZones = await this.importFloorData(\r\n createdDefaultZone.id,\r\n node,\r\n );\r\n }\r\n // console.log(floorZones);\r\n await Promise.all(\r\n Object.keys(this.sweeps).map(async (key) => {\r\n const sweepInfo = this.sweeps[key];\r\n const navigationInput = {\r\n matterportSweepID: sweepInfo.uuid,\r\n position: JSON.stringify(sweepInfo.position),\r\n rotation: JSON.stringify(sweepInfo.rotation),\r\n level: LevelStatus.LOW,\r\n nodeID: node.id,\r\n spaceID,\r\n } as Navigation;\r\n const nav = await this.navigationService.createNavigation(\r\n navigationInput,\r\n );\r\n if (!nav) {\r\n console.log(\r\n \"could create navigation\",\r\n navigationInput.id,\r\n );\r\n }\r\n }),\r\n );\r\n await this.import360images();\r\n return Promise.resolve(true);\r\n }\r\n return Promise.resolve(false);\r\n }\r\n\r\n async createZone(\r\n name: string,\r\n layerID: string,\r\n surface: number = null,\r\n parentID: string = null,\r\n sweeps: string[] = [],\r\n node: Node = null,\r\n metadata: string = null,\r\n ): Promise<Zone> {\r\n const zoneInput = {\r\n name,\r\n spaceID: this.spaceID,\r\n layerID,\r\n sweepIDs: sweeps,\r\n nodeIDs: node ? [node.id] : null,\r\n } as Zone;\r\n removeNullKeysFromObject(zoneInput);\r\n if (surface) {\r\n zoneInput.surface = surface;\r\n }\r\n if (parentID) {\r\n zoneInput.parentID = parentID;\r\n }\r\n if (metadata) {\r\n zoneInput.metadata = metadata;\r\n }\r\n const newLocal = await this.zoneService.create(zoneInput);\r\n return newLocal;\r\n }\r\n\r\n async import360images(): Promise<boolean> {\r\n console.log(\"Importing 360 images\");\r\n this.importingImages.next(true);\r\n return new Promise(async (resolve) => {\r\n const scans = Object.values(this.sweeps);\r\n let maxScan;\r\n let indexScan;\r\n const nmbScans = Object.keys(scans).length;\r\n console.log(\"Total number of scan points :\", nmbScans);\r\n this.totalSweepsCount.next(nmbScans);\r\n // check if we started to load images already\r\n if (localStorage.getItem(\"indexScanLoad\")) {\r\n console.log(\r\n \"retaking import from scan\",\r\n localStorage.getItem(\"indexScanLoad\"),\r\n );\r\n indexScan = +localStorage.getItem(\"indexScanLoad\");\r\n nmbScans < indexScan + 50\r\n ? (maxScan = nmbScans)\r\n : (maxScan = indexScan + 50);\r\n } else {\r\n indexScan = 0;\r\n nmbScans < 50 ? (maxScan = nmbScans) : (maxScan = 50);\r\n maxScan;\r\n }\r\n\r\n for (let index = indexScan; index < maxScan; index += 1) {\r\n if (!this.stop) {\r\n await this.sdk.Sweep.moveTo(scans[index].uuid);\r\n await this.sdk.Camera.setRotation({\r\n x: 0,\r\n y: 0,\r\n });\r\n const img = await this.sdk.Renderer.takeEquirectangular(\r\n { width: 2048, height: 1024 },\r\n { mattertags: false, sweeps: true },\r\n );\r\n await uploadBase64Image(\r\n img,\r\n scans[index].uuid,\r\n `visits/${this.modelID}/sweeps/`,\r\n \"sweep\",\r\n );\r\n this.sweepProcessedCount.next(index);\r\n } else {\r\n localStorage.removeItem(\"indexScanLoad\");\r\n removeAllFilesFromFolderS3(`visits/${this.modelID}/sweeps`);\r\n console.log(\"Abandoning import beacuse it was cancelled\");\r\n resolve(false);\r\n break;\r\n }\r\n }\r\n if (maxScan === nmbScans) {\r\n console.log(\"Import 360 done\");\r\n localStorage.removeItem(\"indexScanLoad\");\r\n this.removeFrame();\r\n this.stop = true;\r\n resolve(true);\r\n } else if (!this.stop) {\r\n // to restart the procedure from where we left of\r\n localStorage.setItem(\"indexScanLoad\", maxScan.toString());\r\n this.removeFrame();\r\n await this.initSdkForModel(this.modelID);\r\n await this.importData(this.spaceID, 0, true);\r\n resolve(true);\r\n }\r\n });\r\n }\r\n\r\n async moveToFloor(floorName: string) {\r\n // by name\r\n // console.log(floorName);\r\n let floorMatterport = Object.values(this.floors).find(\r\n (floor) => floor.name !== \"\" && floorName.includes(floor.name),\r\n );\r\n // by id\r\n if (!floorMatterport) {\r\n floorMatterport = Object.values(this.floors).find((floor) =>\r\n floorName.includes(floor.id),\r\n );\r\n }\r\n // console.log(floorMatterport);\r\n if (floorMatterport) {\r\n try {\r\n await this.sdk.Floor.moveTo(floorMatterport.sequence);\r\n } catch (error) {\r\n console.log(\"Cannot move to Floor\", error);\r\n }\r\n }\r\n }\r\n\r\n public async importFloorData(\r\n defautZoneID: string,\r\n node: Node,\r\n ): Promise<Zone[]> {\r\n const zones = [];\r\n await this.sdk.Mode.moveTo(this.sdk.Mode.Mode.FLOORPLAN);\r\n const nmbFloors = Object.keys(this.floors).length;\r\n console.log(\"Total number of floors\", nmbFloors);\r\n for (let index = 0; index < nmbFloors; index += 1) {\r\n // eslint-disable-next-line no-await-in-loop\r\n console.log(\"Importing floor\", index);\r\n await this.sdk.Floor.moveTo(index).then(async () => {\r\n await wait(700);\r\n // console.log(\"about to save the floor\", index);\r\n const zone = await this.saveFloor(defautZoneID, node);\r\n // console.log(\"received floor zone\", zone);\r\n zones.push(zone);\r\n });\r\n }\r\n return Promise.resolve(zones);\r\n }\r\n\r\n private async saveFloor(defautZoneID: string, node: Node): Promise<Zone> {\r\n let name = this.currentFloor.id;\r\n if (this.currentFloor.name !== \"\") {\r\n name = this.currentFloor.name;\r\n }\r\n const layerFloor = await this.getLayerByName(\"FLOOR\");\r\n const sweepsInfo = Object.values(this.sweeps);\r\n const sweepsForFloor = sweepsInfo.filter(\r\n (sweepInfo) => sweepInfo.floorInfo.id === this.currentFloor.id,\r\n );\r\n const sweepIDs: string[] = sweepsForFloor.map((sweep) => sweep.uuid);\r\n const zone = await this.createZone(\r\n `Étage ${name} - ${node.metadata}`,\r\n layerFloor.id,\r\n null,\r\n defautZoneID,\r\n sweepIDs,\r\n node,\r\n JSON.stringify({matterportFloorSequence: this.currentFloor.sequence})\r\n );\r\n // TODO link to scans\r\n const base64 = await this.sdk.Renderer.takeScreenShot(\r\n { width: 4096, height: 2048 },\r\n );\r\n const spaceIDshort = this.spaceID.slice(0, 8);\r\n await uploadBase64Image(\r\n base64,\r\n null,\r\n `visits/${this.modelID}/plans/`,\r\n `plan_floor_${this.currentFloor.id}_${spaceIDshort}`,\r\n );\r\n // create Plan object\r\n const plan = {\r\n name: `plan_floor_${this.currentFloor.id}`,\r\n annexe: `visits/${this.modelID}/plans/plan_floor_${this.currentFloor.id}_${spaceIDshort}.jpeg`,\r\n zoneID: zone.id,\r\n spaceID: this.spaceID,\r\n isCurrentForZone: true,\r\n isModified: false,\r\n isImportedMatterport: true,\r\n } as Plan;\r\n await this.planService.createPlan(plan);\r\n // console.log(\"floor saved\");\r\n return Promise.resolve(zone);\r\n }\r\n\r\n abandon() {\r\n setTimeout(() => {\r\n console.log(\"abandonning import\");\r\n this.removeFrame();\r\n this.stop = true;\r\n }, 1500);\r\n }\r\n\r\n removeFrame() {\r\n this.currentFrame.remove();\r\n }\r\n\r\n async getLayerByName(name: string): Promise<Layer> {\r\n const mission = this.userService.currentMission(this.spaceID);\r\n const currentOrgId = mission.organisationID;\r\n const layers = await this.layerService.getLayerByNameForOrganisation(\r\n name,\r\n currentOrgId,\r\n );\r\n if (layers.length > 0) {\r\n return layers[0];\r\n }\r\n // create then\r\n return this.layerService.createLayerForOrganisation(name, currentOrgId);\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { Organisation, Property } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class OrganisationService { \r\n smarterPlanID = \"6e28201f-4679-4c29-9d2d-8a325f57cee9\";\r\n API: any; //AWS APIService\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n\r\n async getPropertiesForOrganisation(\r\n orgID: string,\r\n ): Promise<Array<Property>> {\r\n const org = await this.API.__proto__.GetOrganisation({ id: orgID });\r\n if (org) {\r\n return org.properties.items;\r\n }\r\n return [];\r\n }\r\n\r\n async getOrganisationByToken(token: string): Promise<Organisation> {\r\n const orgs = await this.API.__proto__.OrganisationsByToken(token);\r\n if (orgs.items.length > 0) {\r\n const org = orgs.items[0];\r\n return this.tokenIsExpiredForOrg(org) ? null : org;\r\n }\r\n return null;\r\n }\r\n\r\n tokenIsExpiredForOrg(org: Organisation): boolean {\r\n const expirationDate = new Date(org.tokenExpiresAt);\r\n const diffTime = expirationDate.getTime() - Date.now();\r\n return diffTime < 0;\r\n }\r\n\r\n async softDeteleOrg(orgID: string): Promise<Organisation> {\r\n return this.API.__proto__.UpdateOrganisation({\r\n id: orgID,\r\n deletedAt: Date.now(),\r\n });\r\n }\r\n\r\n async updateOrganisation(input: any): Promise<Organisation> {\r\n return this.API.__proto__.UpdateOrganisation(input);\r\n }\r\n\r\n async deleteOrganisation(orgID: string): Promise<Organisation> {\r\n return this.API.__proto__.DeleteOrganisation({ id: orgID });\r\n }\r\n\r\n async createOrganisation(input: Organisation): Promise<Organisation> {\r\n return this.API.__proto__.CreateOrganisation(input);\r\n }\r\n\r\n async getOrganisation(orgID: string): Promise<Organisation> {\r\n return this.API.__proto__.GetOrganisation({ id: orgID });\r\n }\r\n\r\n async listOrganisations(): Promise<Organisation[]> {\r\n return this.API.__proto__.ListOrganisations().then((orgs) => orgs.items);\r\n }\r\n\r\n async getOrganisationForSpace(spaceID: string): Promise<Organisation> {\r\n const properties = await this.API.__proto__.ListPropertys({\r\n spaceID: { eq: spaceID },\r\n });\r\n let orgs = properties.items.map((property) => property.organisation);\r\n if (orgs.length === 1) {\r\n return orgs[0];\r\n }\r\n orgs = orgs.filter((org) => org.id !== this.smarterPlanID);\r\n return orgs.length > 0 ? orgs[0] : null;\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { filterUniqueArrayByID } from \"../../helpers.service\";\r\nimport { Domain, DomainType } from \"../../types.service\";\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class DomainService {\r\n API: any; //AWS\r\n\r\n constructor(@Inject('currentAPIService') apiInjected: any) {\r\n this.API = apiInjected;\r\n }\r\n \r\n async getGenericDomainsAndForOrganisation(\r\n organisationID: string,\r\n ): Promise<any | void> {\r\n return this.API.__proto__.ListDomains().then((domains) => {\r\n return domains.items.filter((dom) => {\r\n return (\r\n dom.organisationID === organisationID || !dom.organisationID\r\n );\r\n });\r\n });\r\n }\r\n\r\n async getGenericDomainsAndForOrgAndOrderedOrg(\r\n orgID: string,\r\n orderedOrgID: string = null,\r\n ): Promise<Domain[]> {\r\n if (orgID === \"6e28201f-4679-4c29-9d2d-8a325f57cee9\") {\r\n // I am SmarterPlan, i can see all\r\n return this.API.__proto__.ListDomains().then((response) => response.items);\r\n }\r\n const currentOrgDomains =\r\n await this.getGenericDomainsAndForOrganisation(orgID);\r\n if (!orderedOrgID || orgID === orderedOrgID) {\r\n return currentOrgDomains;\r\n }\r\n const orderedOrgDomains =\r\n await this.getGenericDomainsAndForOrganisation(orderedOrgID);\r\n const merged = [...currentOrgDomains, ...orderedOrgDomains];\r\n return filterUniqueArrayByID(merged);\r\n }\r\n\r\n async getDomainsForOrgExcludingTypes(\r\n types: DomainType[],\r\n organisationID: string,\r\n ): Promise<Domain[]> {\r\n return this.getGenericDomainsAndForOrganisation(organisationID).then(\r\n (domains) => {\r\n return domains.filter((dom) => !types.includes(dom.type));\r\n },\r\n );\r\n }\r\n\r\n async getDomain(id: string): Promise<Domain> {\r\n return this.API.__proto__.GetDomain(id);\r\n }\r\n\r\n async updateDomain(input: any): Promise<Domain> {\r\n return this.API.__proto__.UpdateDomain(input);\r\n }\r\n\r\n async deleteDomain(id: string): Promise<Domain> {\r\n return this.API.__proto__.DeleteDomain({ id });\r\n }\r\n\r\n async getRootDomains(orgID: string): Promise<Domain[]> {\r\n const allDomains = await this.getGenericDomainsAndForOrganisation(\r\n orgID,\r\n );\r\n const root = allDomains.filter((dom) => !dom.parentID);\r\n return root.sort((a, b) => a.name.localeCompare(b.name));\r\n }\r\n\r\n async createDomain(input: Domain): Promise<Domain> {\r\n return this.API.__proto__.CreateDomain(input);\r\n }\r\n\r\n async getDomainsForOrgForType(\r\n type: DomainType,\r\n organisationID: string,\r\n orderedOrg: string = null,\r\n ): Promise<Domain[]> {\r\n return this.getGenericDomainsAndForOrgAndOrderedOrg(\r\n organisationID,\r\n orderedOrg,\r\n ).then((domains) => {\r\n return domains.filter((dom) => dom.type === type);\r\n });\r\n }\r\n\r\n async getParentDomainsForOrgAndOrderedOrgForType(\r\n type: DomainType,\r\n organisationID: string,\r\n orderedOrg: string = null,\r\n ): Promise<Domain[]> {\r\n return this.getGenericDomainsAndForOrgAndOrderedOrg(\r\n organisationID,\r\n orderedOrg,\r\n ).then((domains) => {\r\n return domains.filter((dom) => dom.type === type && !dom.parentID);\r\n });\r\n }\r\n\r\n async getDomainsForMissionsForOrg(orgID: string): Promise<Domain[]> {\r\n const domains = await this.getDomainsForOrgExcludingTypes(\r\n [DomainType.BOOKING, DomainType.FEATURE, DomainType.MISSION],\r\n orgID,\r\n );\r\n return domains.filter((dom) => !dom.parentID);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { dateHasExpired } from \"../helpers.service\";\r\nimport { EventType, EventStatus, EmailStatus, Event, ProfileEntity } from \"../types.service\";\r\nimport { EventService } from \"./models/event.service\";\r\nimport { MissionService } from \"./models/mission.service\";\r\nimport { BaseUserService } from \"./user.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BookingService {\r\n constructor(private eventService: EventService, private userService: BaseUserService,\r\n private missionService: MissionService,) { }\r\n\r\n getFutureOrCurrentEvents(events: Event[]): Event[] {\r\n const now = new Date();\r\n return events\r\n .filter((event) => event.realEndDate > now.getTime())\r\n .sort((a, b) => a.realStartDate - b.realStartDate);\r\n }\r\n\r\n getEventsWithRealStartDateBeforeToday(events: Event[]): Event[] {\r\n const now = new Date();\r\n now.setHours(0, 0, 0, 0);\r\n return events\r\n .filter((event) => event.realStartDate < now.getTime())\r\n .sort((a, b) => b.realStartDate - a.realStartDate);\r\n }\r\n\r\n async autoUpdateBookingEvent(\r\n eventProm: Event | Promise<Event>,\r\n ): Promise<Event> {\r\n const event = await eventProm;\r\n const startExpired = dateHasExpired(event.realStartDate);\r\n const endExpired = dateHasExpired(event.realEndDate);\r\n\r\n if (event.type === EventType.BOOKING && endExpired) {\r\n /** [BOOKING] VALIDATED => LATE */\r\n if (event.status === EventStatus.VALIDATED) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.LATE,\r\n });\r\n }\r\n /** [BOOKING] CREATED => REFUSED */\r\n if (event.status === EventStatus.CREATED) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.REFUSED,\r\n });\r\n }\r\n }\r\n if (event.type === EventType.BOOKING_SUBCRIPTION) {\r\n /** [SUB] CREATED => REFUSED */\r\n if (event.status === EventStatus.CREATED && endExpired) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.REFUSED,\r\n });\r\n }\r\n /** [SUB] IN_PROGRESS | VALIDATED => COMPLETED */\r\n if (\r\n endExpired &&\r\n (event.status === EventStatus.IN_PROGRESS ||\r\n event.status === EventStatus.VALIDATED)\r\n ) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.COMPLETED,\r\n });\r\n }\r\n /** [SUB] CREATED => IN_PROGRESS */\r\n if (startExpired && event.status === EventStatus.CREATED) {\r\n return this.eventService.updateEvent({\r\n id: event.id,\r\n status: EventStatus.IN_PROGRESS,\r\n });\r\n }\r\n }\r\n\r\n return event;\r\n }\r\n\r\n mergeEventsToSubscriptsionUnique(\r\n event: Event,\r\n uniqueList: Event[],\r\n ): Event[] {\r\n if (!event || event.type !== EventType.BOOKING_SUBCRIPTION)\r\n return uniqueList;\r\n\r\n const newUniqueList = [...uniqueList]; // deep copy\r\n const index = newUniqueList.findIndex(\r\n (event_) => event_.group === event.group,\r\n );\r\n\r\n /** If an event of the same group already exist, we merge date, to get the min and max date and update status */\r\n if (index >= 0) {\r\n const groupEvent = newUniqueList[index];\r\n if (groupEvent.realStartDate > event.realStartDate) {\r\n groupEvent.realStartDate = event.realStartDate;\r\n }\r\n if (groupEvent.realEndDate < event.realEndDate) {\r\n groupEvent.realEndDate = event.realEndDate;\r\n groupEvent.status = event.status;\r\n }\r\n groupEvent.author = event.author;\r\n } else {\r\n newUniqueList.push({ ...event });\r\n }\r\n\r\n return newUniqueList;\r\n }\r\n\r\n /** Merge a subscription event list to a unique event */\r\n mergeEventsToSubscriptions(allBokings: Event[]): Event[] {\r\n let uniqueList = [];\r\n for (const event of allBokings) {\r\n uniqueList = this.mergeEventsToSubscriptsionUnique(\r\n event,\r\n uniqueList,\r\n );\r\n }\r\n return uniqueList;\r\n }\r\n\r\n async updateStatusOfEventsInSubscriptionWithReason(\r\n subscriptionGroup: string,\r\n newStatus: EventStatus,\r\n reason: string = null,\r\n ): Promise<Event[]> {\r\n const eventsOfSubcription = await this.eventService.getEventsByGroup(\r\n subscriptionGroup,\r\n );\r\n const updatedEvents = [];\r\n await Promise.all(\r\n eventsOfSubcription.map(async (event) => {\r\n const updEvent = await this.eventService.updateEvent({\r\n id: event.id,\r\n status: newStatus,\r\n refusalReason: reason,\r\n notificationStatus: reason\r\n ? EmailStatus.UPDATE_TO_DELIVER\r\n : null,\r\n });\r\n updatedEvents.push(updEvent);\r\n }),\r\n );\r\n return updatedEvents;\r\n }\r\n\r\n getActiveFutureBookings(allBooking: Event[]): Event[] {\r\n let bookings = this.getFutureOrCurrentEvents(allBooking);\r\n bookings = bookings.filter(\r\n (event_) =>\r\n event_.status !== EventStatus.CANCELLED &&\r\n event_.status !== EventStatus.REFUSED &&\r\n event_.status !== EventStatus.ARCHIVED,\r\n );\r\n return bookings;\r\n }\r\n\r\n async archiveForOwnerEventsInSubscription(\r\n subscriptionGroup: string,\r\n ): Promise<Event[]> {\r\n const eventsOfSubcription = await this.eventService.getEventsByGroup(\r\n subscriptionGroup,\r\n );\r\n const updatedEvents = [];\r\n await Promise.all(\r\n eventsOfSubcription.map(async (event) => {\r\n const updEvent = await this.eventService.updateEvent({\r\n id: event.id,\r\n archivedByOwner: true,\r\n });\r\n updatedEvents.push(updEvent);\r\n }),\r\n );\r\n return updatedEvents;\r\n }\r\n\r\n getConflictBookingForDates(\r\n start: number,\r\n end: number,\r\n bookingsToFilter: Event[],\r\n ): Event | null {\r\n for (const booking of bookingsToFilter) {\r\n if (\r\n booking.status !== EventStatus.REFUSED &&\r\n booking.status !== EventStatus.CANCELLED &&\r\n booking.status !== EventStatus.ARCHIVED\r\n ) {\r\n if (\r\n start >= booking.realStartDate &&\r\n start + 1000 < booking.realEndDate\r\n ) {\r\n return booking;\r\n }\r\n if (\r\n end > booking.realStartDate + 1000 &&\r\n end <= booking.realEndDate\r\n ) {\r\n return booking;\r\n }\r\n if (\r\n start <= booking.realStartDate &&\r\n end >= booking.realEndDate\r\n ) {\r\n return booking;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async getAuthorOfEvent(event: Event): Promise<ProfileEntity> {\r\n const authorMission = await this.missionService.getMission(\r\n event.ownerID,\r\n );\r\n const author = await this.userService.userFromUserID(\r\n authorMission.userID,\r\n );\r\n return author;\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { Measurement, PoiType, Comment, POI } from \"../../types.service\";\r\nimport { FilterService } from \"../filter.service\";\r\nimport { NavigatorService } from \"../navigator.service\";\r\nimport { deleteFromS3, uploadFileToS3 } from \"../s3.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { CommentService } from \"./comment.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class MeasurementService {\r\n path = \"measurements/\";\r\n\r\n currentMeasurements: {\r\n space: Measurement[];\r\n zone: Measurement[];\r\n } = { space: [], zone: [] };\r\n\r\n measurementsTags: Subject<Comment[]> = new Subject();\r\n\r\n measurementsUpdated: Subject<{\r\n space: Measurement[];\r\n zone: Measurement[];\r\n }> = new Subject();\r\n\r\n currentSpaceID: string;\r\n\r\n zoneIDFilter: string;\r\n\r\n dateFilter: Date[];\r\n\r\n measurementFilter: boolean = false; // if false means no filtering, everything is allowed\r\n\r\n updateDone: Subject<boolean> = new Subject();\r\n\r\n updating: Subject<boolean> = new Subject();\r\n\r\n constructor(\r\n private navigatorService: NavigatorService,\r\n private filterService: FilterService,\r\n private commentService: CommentService,\r\n private poiService: PoiService,\r\n private userService: BaseUserService,\r\n private navigationService: NavigationService,\r\n ) {\r\n const isMuseumUser = this.userService.hasOnlyMuseumRole();\r\n if (!isMuseumUser) {\r\n this.navigatorService.zoneChange.subscribe((zone) => {\r\n this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n if (!this.currentSpaceID) {\r\n this.measurementsTags.next(null);\r\n this.measurementsUpdated.next({ space: [], zone: null });\r\n this.measurementFilter = null;\r\n this.zoneIDFilter = null;\r\n } else if (zone.id !== this.zoneIDFilter) {\r\n this.zoneIDFilter = zone.id;\r\n // console.log(\"going to init measurements from zone\");\r\n this.initMeasurements();\r\n }\r\n });\r\n this.filterService.subscribeToDataFilterUpdate((dateRange) => {\r\n this.dateFilter = dateRange;\r\n this.initMeasurements();\r\n });\r\n this.dateFilter = this.filterService.currentDateFilter;\r\n this.updateDone.subscribe(() => this.initMeasurements());\r\n }\r\n }\r\n\r\n async initMeasurements() {\r\n if (this.currentSpaceID) {\r\n this.updating.next(true);\r\n let comments = await this.commentService.getCommentsBySpaceID(\r\n this.currentSpaceID,\r\n );\r\n comments =\r\n await this.filterService.filterMeasurementsForCurrentUserInSpace(\r\n this.currentSpaceID,\r\n comments,\r\n );\r\n let measurements = [];\r\n if (comments.length > 0) {\r\n await Promise.all(\r\n comments.map(async (comment) => {\r\n const measurement =\r\n await this.commentService.readCommentAsMeasurement(\r\n comment.id,\r\n );\r\n measurements.push(measurement);\r\n }),\r\n );\r\n if (this.dateFilter) {\r\n measurements =\r\n this.filterService.filterMeasurementsForDateRange(\r\n measurements,\r\n this.dateFilter,\r\n );\r\n }\r\n if (this.measurementFilter) {\r\n measurements = [];\r\n }\r\n this.currentMeasurements.space = measurements;\r\n // emit on tags should be after setting current.space !!\r\n this.measurementsTags.next(measurements.map((m) => m.comment));\r\n\r\n if (this.zoneIDFilter) {\r\n const commentsZone =\r\n await this.filterService.filterObjectsForZone(\r\n measurements.map((measure) => measure.comment),\r\n this.zoneIDFilter,\r\n );\r\n measurements = measurements.filter((measure) =>\r\n commentsZone.includes(measure.comment),\r\n );\r\n }\r\n measurements.sort((a, b) => {\r\n return (\r\n // @ts-ignore\r\n new Date(b.comment.createdAt) -\r\n // @ts-ignore\r\n new Date(a.comment.createdAt)\r\n );\r\n });\r\n this.currentMeasurements.zone = measurements;\r\n this.measurementsUpdated.next(this.currentMeasurements);\r\n } else {\r\n this.currentMeasurements.space = [];\r\n this.currentMeasurements.zone = [];\r\n this.measurementsUpdated.next({ space: [], zone: [] }); // for lateral menu\r\n }\r\n } else {\r\n this.measurementsTags.next(null);\r\n }\r\n this.updating.next(false);\r\n }\r\n\r\n async deleteMeasurement(measurement: Measurement): Promise<Comment> {\r\n const deletedComment = await this.commentService.deleteComment(\r\n measurement.comment.id,\r\n );\r\n if (deletedComment) {\r\n await this.poiService.deletePoi(measurement.poi.id);\r\n const prefix = `${measurement.comment.id.slice(0, 8)}_`;\r\n const path = `${this.path + prefix}mesure.jpeg`;\r\n await deleteFromS3(path);\r\n }\r\n return deletedComment;\r\n }\r\n\r\n async createMeasurementForSpace(\r\n commentInput: Comment,\r\n dataMeasurements: { measure: any[]; sweep: string },\r\n screenshot: any,\r\n spaceID: string,\r\n ): Promise<Measurement> {\r\n const lastMeasure = dataMeasurements.measure;\r\n const sweepID = dataMeasurements.sweep;\r\n const lastPoint = lastMeasure[lastMeasure.length - 1];\r\n let comment = await this.commentService.createComment(commentInput);\r\n const poiInput = {\r\n coordinate: JSON.stringify({\r\n x: lastPoint.x,\r\n y: lastPoint.y,\r\n z: lastPoint.z,\r\n }),\r\n type: PoiType.MEASURE,\r\n elementID: comment.id,\r\n matterportSweepID: sweepID,\r\n } as POI;\r\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\r\n const screen = await fetch(screenshot);\r\n const blob = await screen.blob();\r\n const file = new File([blob], \"mesure.jpeg\", { type: \"image/jpeg\" });\r\n const url = await uploadFileToS3(this.path, file, comment.id);\r\n if (url) {\r\n comment = await this.commentService.updateComment({\r\n id: comment.id,\r\n annexe: url,\r\n });\r\n }\r\n const measurement = {\r\n comment,\r\n poi,\r\n } as Measurement;\r\n return measurement;\r\n }\r\n\r\n async getModel3DForMeasurement(measurement: Measurement): Promise<string> {\r\n const poi = await this.poiService.getPoiByElementId(\r\n measurement.comment.id,\r\n );\r\n if (poi && poi.matterportSweepID) {\r\n const navigations =\r\n await this.navigationService.getNavigationsForMatterportIDForSpace(\r\n poi.matterportSweepID,\r\n measurement.comment.spaceID,\r\n );\r\n const [poiNavigation] = navigations;\r\n return poiNavigation.node.model3D;\r\n }\r\n return null;\r\n }\r\n}\r\n","/* eslint-disable no-await-in-loop */\r\n/* eslint-disable class-methods-use-this */\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { MattertagData } from \"../../mattertagData\";\r\nimport { Feature, Hashtag, FeatureType, CommentType, POI, PoiType, Event, LevelStatus } from \"../../types.service\";\r\nimport { FilterService } from \"../filter.service\";\r\nimport { NavigatorService } from \"../navigator.service\";\r\nimport { BaseUserService } from \"../user.service\";\r\nimport { BaseObjectService } from \"./base-object.service\";\r\nimport { CommentService } from \"./comment.service\";\r\nimport { HashtagService } from \"./hashtag.service\";\r\nimport { NavigationService } from \"./navigation.service\";\r\nimport { PoiService } from \"./poi.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class FeatureService extends BaseObjectService {\r\n API: any; //AWS\r\n\r\n featureUpdated: Subject<{\r\n space: Feature[];\r\n zone: Feature[];\r\n }> = new Subject();\r\n\r\n currentFeatures: { space: Feature[]; zone: Feature[] } = {\r\n space: [],\r\n zone: [],\r\n };\r\n\r\n featureTags: Subject<Feature[]> = new Subject();\r\n\r\n featureFiltered: Feature[] = [];\r\n\r\n updateDone: Subject<boolean> = new Subject();\r\n\r\n zoneIDFilter: string;\r\n\r\n currentSpaceID: string;\r\n\r\n updating: Subject<boolean> = new Subject();\r\n\r\n isUpdating = false;\r\n\r\n featureDomainFilter: string[] = null;\r\n\r\n deskDomainFilter: string[] = null;\r\n\r\n deskBookingsUpdated: Subject<Event[]> = new Subject();\r\n\r\n public currentHashtags: Hashtag[] = [];\r\n\r\n createObservable: Subject<Feature> = new Subject();\r\n\r\n deleteObservable: Subject<Feature> = new Subject();\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any,\r\n private navigatorService: NavigatorService,\r\n private filterService: FilterService,\r\n poiService: PoiService,\r\n private commentService: CommentService,\r\n private userService: BaseUserService,\r\n navigationService: NavigationService,\r\n private hashtagService: HashtagService,\r\n ) {\r\n super(poiService, navigationService);\r\n this.API = apiInjected;\r\n this.featureUpdated.subscribe((list) => {\r\n this.currentFeatures = list;\r\n });\r\n this.navigatorService.zoneChange.subscribe((zone) => {\r\n this.currentSpaceID = this.navigatorService.currentSpaceID;\r\n if (!this.currentSpaceID) {\r\n this.featureTags.next(null);\r\n this.featureUpdated.next({ space: [], zone: null });\r\n this.zoneIDFilter = null;\r\n } else if (zone.id !== this.zoneIDFilter && !this.userService.isMuseumUser(this.currentSpaceID)) {\r\n this.zoneIDFilter = zone.id;\r\n this.initFeatures();\r\n }\r\n });\r\n this.updateDone.subscribe(() => {\r\n if (this.currentSpaceID) {\r\n this.initFeatures();\r\n }\r\n });\r\n\r\n this.deleteObservable.subscribe((feature) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToDelete(feature);\r\n }\r\n });\r\n\r\n this.createObservable.subscribe((feature) => {\r\n if (this.currentSpaceID) {\r\n this.updateDueToCreate(feature);\r\n }\r\n });\r\n }\r\n\r\n /*\r\n * CRUD\r\n */\r\n async createFeature(feature: Feature): Promise<Feature> {\r\n return this.API.__proto__.CreateFeature(feature);\r\n }\r\n\r\n async deleteFeature(feature: Feature): Promise<Feature> {\r\n const deleted = await this.API.__proto__.DeleteFeature({ id: feature.id });\r\n if (deleted) {\r\n const poi = await this.poiService.getPoiByElementId(feature.id);\r\n if (poi) {\r\n await this.poiService.deletePoi(poi.id);\r\n }\r\n // delete comments\r\n for (const comment of deleted.comments.items) {\r\n await this.commentService.deleteComment(comment.id);\r\n }\r\n }\r\n return deleted;\r\n }\r\n\r\n async updateFeature(feature: any): Promise<Feature> {\r\n return this.API.__proto__.UpdateFeature(feature);\r\n }\r\n\r\n async getFeature(id: string): Promise<Feature> {\r\n const feature = (await this.API.__proto__.GetFeature(id)) as Feature;\r\n feature.events.items.sort((a, b) => b.realStartDate - a.realStartDate);\r\n this.setCoverImage(feature);\r\n this.setImages(feature);\r\n this.setVideos(feature);\r\n this.setDocuments(feature);\r\n this.setAudio(feature);\r\n this.setExternalLinks(feature);\r\n this.isBookingPlace(feature);\r\n return feature;\r\n }\r\n\r\n\r\n async initFeatures() {\r\n if (!this.currentSpaceID) {\r\n return;\r\n }\r\n this.updating.next(true);\r\n this.isUpdating = true;\r\n const featureList = await this.getFeaturesForSpace(this.currentSpaceID);\r\n this.currentHashtags = await this.hashtagService.getHashtagsForSpace(\r\n this.currentSpaceID,\r\n );\r\n // console.log(this.currentHashtags);\r\n if (featureList.length > 0) {\r\n let filteredFeatures = [...featureList];\r\n let filteredPointInterest = filteredFeatures.filter(\r\n (feature) => feature.type !== FeatureType.DESK,\r\n );\r\n let filteredDesks = filteredFeatures.filter(\r\n (feature) => feature.type === FeatureType.DESK,\r\n );\r\n if (this.featureDomainFilter) {\r\n filteredPointInterest = filteredPointInterest.filter(\r\n (feature) =>\r\n this.featureDomainFilter.find(\r\n (domain) =>\r\n feature.domain && domain === feature.domain.id,\r\n ),\r\n );\r\n }\r\n if (this.deskDomainFilter) {\r\n filteredDesks = filteredDesks.filter((feature) =>\r\n this.deskDomainFilter.find(\r\n (domain) =>\r\n feature.domain && domain === feature.domain.id,\r\n ),\r\n );\r\n }\r\n filteredFeatures = [...filteredPointInterest, ...filteredDesks];\r\n this.currentFeatures.space = filteredFeatures.sort(\r\n (a, b) => a.index - b.index,\r\n );\r\n // emit on tags should be after setting current.space !!\r\n this.featureTags.next(filteredFeatures); // for tags update without zone filtering\r\n if (this.zoneIDFilter) {\r\n filteredFeatures =\r\n (await this.filterService.filterObjectsForZone(\r\n filteredFeatures,\r\n this.zoneIDFilter,\r\n )) as Feature[];\r\n }\r\n this.currentFeatures.zone = filteredFeatures.sort(\r\n (a, b) => a.index - b.index,\r\n );\r\n // console.log(this.currentFeatures);\r\n this.featureUpdated.next(this.currentFeatures); // for lateral menu\r\n } else {\r\n this.featureUpdated.next({ space: [], zone: [] }); // for lateral menu\r\n }\r\n this.updating.next(false);\r\n this.isUpdating = false;\r\n }\r\n\r\n async getFeaturesForSpace(\r\n spaceID: string,\r\n keepArchived: boolean = false,\r\n ): Promise<Feature[]> {\r\n const features = await this.API.__proto__.FeaturesBySpace(spaceID).then(\r\n (response) => response.items,\r\n );\r\n let featuresForUser =\r\n await this.filterService.filterFeaturesForCurrentUserInSpace(\r\n features,\r\n spaceID,\r\n );\r\n if (!keepArchived) {\r\n featuresForUser = featuresForUser.filter(\r\n (feature) => !this.isArchived(feature),\r\n );\r\n }\r\n for (const feature of featuresForUser) {\r\n this.setCoverImage(feature);\r\n this.isBookingPlace(feature);\r\n }\r\n return featuresForUser;\r\n }\r\n\r\n async getFeaturesBySpaceWithoutFiltering(spaceID: string): Promise<Feature[]> {\r\n let features = await this.API.__proto__.FeaturesBySpace(spaceID).then(\r\n (response) => response.items,\r\n );\r\n features = features.filter(\r\n (feature) => !this.isArchived(feature),\r\n );\r\n for (const feature of features) {\r\n this.setCoverImage(feature);\r\n this.isBookingPlace(feature);\r\n }\r\n return features;\r\n }\r\n\r\n isBookingPlace(feature: Feature) {\r\n feature.isBookingPlace = feature.type === FeatureType.DESK;\r\n }\r\n\r\n \r\n setCoverImage(feature: Feature) {\r\n const coverImage = feature.comments.items.find(\r\n (com) => com.isCoverImage,\r\n );\r\n if (coverImage) {\r\n feature.coverImageUrl = coverImage.annexe;\r\n } else if (\r\n feature.comments.items.some((com) => com.type === CommentType.IMAGE)\r\n ) {\r\n const imageComment = feature.comments.items.find(\r\n (com) => com.type === CommentType.IMAGE,\r\n );\r\n feature.coverImageUrl = imageComment.annexe;\r\n }\r\n }\r\n\r\n async updateFeatureLocation(\r\n feature: Feature,\r\n tagData: MattertagData,\r\n spaceID: string,\r\n ): Promise<POI> {\r\n const poiInput = {\r\n coordinate: tagData.getCoordinateString(),\r\n type: feature.isBookingPlace ? PoiType.DESK : PoiType.DATA,\r\n elementID: feature.id,\r\n metadata: tagData.getMetadataString(),\r\n matterportSweepID: tagData.getSweepID(),\r\n } as POI;\r\n const poi = await this.poiService.createPOIForSpaceID(poiInput);\r\n return poi;\r\n }\r\n\r\n setImages(feature: Feature) {\r\n const imagesComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.IMAGE)\r\n .sort((a, b) => a.index - b.index);\r\n const images = [];\r\n for (const image of imagesComments) {\r\n images.push({\r\n path: image.annexe,\r\n title: image.title,\r\n description: image.description,\r\n showInTag: image.shownInTag,\r\n });\r\n }\r\n feature.images = images;\r\n }\r\n\r\n setVideos(feature: Feature) {\r\n const videosComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.VIDEO || com.type === CommentType.YOUTUBE)\r\n .sort((a, b) => a.index - b.index);\r\n const videos = [];\r\n for (const video of videosComments) {\r\n videos.push({\r\n path: video.type === CommentType.YOUTUBE ? 'https://www.youtube.com/embed/' + video.externalLink : video.annexe,\r\n title: video.title,\r\n description: video.description,\r\n type: video.type,\r\n });\r\n }\r\n feature.videos = videos;\r\n }\r\n\r\n setDocuments(feature: Feature) {\r\n const documentComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.DOCUMENT)\r\n .sort((a, b) => a.index - b.index);\r\n const docs = [];\r\n for (const document of documentComments) {\r\n docs.push({\r\n path: document.annexe,\r\n title: document.title,\r\n description: document.description,\r\n });\r\n }\r\n feature.documents = docs;\r\n }\r\n\r\n setAudio(feature: Feature) {\r\n const audioComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.AUDIO)\r\n .sort((a, b) => a.index - b.index);\r\n const audios = [];\r\n for (const audio of audioComments) {\r\n audios.push({\r\n path: audio.annexe,\r\n title: audio.title,\r\n description: audio.description,\r\n });\r\n }\r\n feature.audios = audios;\r\n }\r\n\r\n setExternalLinks(feature: Feature) {\r\n const linksComments = feature.comments.items\r\n .filter((com) => com.type === CommentType.URL)\r\n .sort((a, b) => a.index - b.index);\r\n const externalLinks = [];\r\n for (const link of linksComments) {\r\n externalLinks.push({\r\n path: link.externalLink,\r\n title: link.title,\r\n description: link.description,\r\n showInTag: link.shownInTag,\r\n });\r\n }\r\n feature.externalLinks = externalLinks;\r\n }\r\n\r\n \r\n\r\n \r\n\r\n async getFirstFeatureForSpace(spaceID: string): Promise<Feature> {\r\n const features = await this.getFeaturesForSpace(spaceID);\r\n const first = features.find((feat) => feat.index === 1);\r\n return first;\r\n }\r\n\r\n async updateIconForAllFeaturesInSpace(\r\n tagIcon: string,\r\n spaceID: string,\r\n categoryID: string = null,\r\n ): Promise<{ features: Feature[]; pois: POI[] }> {\r\n let features = await this.getFeaturesForSpace(spaceID);\r\n if (categoryID) {\r\n features = features.filter(\r\n (feature) => feature.domainID === categoryID,\r\n );\r\n }\r\n const pois = await this.updateIconForAllObjects(features, tagIcon);\r\n return { features, pois };\r\n }\r\n\r\n async getCreatedIndicesForFeaturesInSpace(\r\n spaceID: string,\r\n ): Promise<number[]> {\r\n let features = (await this.API.__proto__.FeaturesBySpace(spaceID)).items;\r\n features = features.filter((feat) => feat.index);\r\n return features.map((feat) => feat.index);\r\n }\r\n\r\n async getDesksForSpace(spaceID: string): Promise<Feature[]> {\r\n const features = await this.getFeaturesForSpace(spaceID);\r\n return features.filter((feat) => feat.isBookingPlace);\r\n }\r\n\r\n /** Return true if the current user has archived this feature */\r\n isArchived(feature: Feature): boolean {\r\n return feature.archivedForMissionID\r\n ? feature.archivedForMissionID.includes(\r\n this.userService.currentMission(feature.spaceID).id,\r\n )\r\n : false;\r\n }\r\n\r\n setArchived(feature: Feature, archived: boolean) {\r\n let archivedList = feature.archivedForMissionID\r\n ? feature.archivedForMissionID\r\n : [];\r\n const missionID = this.userService.currentMission(feature.spaceID).id;\r\n\r\n archivedList = archivedList.filter((m) => m !== missionID);\r\n\r\n if (archived) {\r\n archivedList.push(missionID);\r\n }\r\n\r\n return this.updateFeature({\r\n id: feature.id,\r\n archivedForMissionID: archivedList,\r\n });\r\n }\r\n\r\n\r\n async updateDueToCreate(feature: Feature) {\r\n this.currentFeatures.space.unshift(feature);\r\n this.currentFeatures.zone.unshift(feature);\r\n this.featureUpdated.next({\r\n space: this.currentFeatures.space,\r\n zone: this.currentFeatures.zone,\r\n }); // for lateral menu\r\n }\r\n\r\n async updateDueToDelete(deletedFeature: Feature) {\r\n const feature = this.currentFeatures.space.find(\r\n (_feature) => _feature.id === deletedFeature.id,\r\n );\r\n if (feature) {\r\n const index = this.currentFeatures.space.indexOf(feature);\r\n this.currentFeatures.space.splice(index, 1);\r\n }\r\n const zoneFeature = this.currentFeatures.zone.find(\r\n (_feature) => _feature.id === deletedFeature.id,\r\n );\r\n if (zoneFeature) {\r\n const index = this.currentFeatures.zone.indexOf(zoneFeature);\r\n this.currentFeatures.zone.splice(index, 1);\r\n }\r\n this.featureUpdated.next({\r\n space: this.currentFeatures.space,\r\n zone: this.currentFeatures.zone,\r\n }); // for lateral menu\r\n }\r\n}\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { VisitTemplate } from \"../../types.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class TemplateService {\r\n API: any; //AWS\r\n\r\n constructor(\r\n @Inject('currentAPIService') apiInjected: any\r\n ) {\r\n this.API = apiInjected;\r\n }\r\n\r\n // --CRUD---\r\n async create(template: VisitTemplate): Promise<VisitTemplate> {\r\n return this.API.__proto__.CreateVisitTemplate(template);\r\n }\r\n\r\n async update(template: any): Promise<VisitTemplate> {\r\n return this.API.__proto__.UpdateVisitTemplate(template);\r\n }\r\n\r\n async detele(templateID: string): Promise<VisitTemplate> {\r\n return this.API.__proto__.DeleteVisitTemplate({id:templateID});\r\n }\r\n\r\n async softDelete(templateID: string): Promise<VisitTemplate> {\r\n return this.update({id: templateID, deletedAt: Date.now()});\r\n }\r\n\r\n async get(templateID: string): Promise<VisitTemplate> {\r\n return this.API.__proto__.GetVisitTemplate(templateID);\r\n }\r\n\r\n async getTemplatesBySpace(spaceID: string): Promise<VisitTemplate[]> {\r\n return this.API.__proto__.TemplatesBySpace(spaceID).then((response) => response.items);\r\n }\r\n\r\n async getTemplatesByZone(zoneID: string): Promise<VisitTemplate[]> {\r\n return this.API.__proto__.TemplatesByZone(zoneID).then((response) => response.items);\r\n }\r\n}","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport function floatValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const regex = /^[+-]?([0-9]*[.])?[0-9]+$/;\r\n if (control.value && control.value !== '') {\r\n return !regex.test(control.value) ? { number: control.value } : null;\r\n } else {\r\n return null;\r\n }\r\n };\r\n}","/*\r\n * Public API Surface of ngx-smarterplan-core\r\n */\r\n\r\nexport * from './lib/ngx-smarterplan-core.service';\r\nexport * from './lib/ngx-smarterplan-core.module';\r\nexport * from './lib/types.service';\r\nexport * from './lib/services/matterport.service';\r\nexport * from './lib/services/tag.service';\r\nexport * from './lib/services/baseVisibility.service';\r\nexport * from './lib/services/content.service';\r\nexport * from './lib/services/viewer.service';\r\nexport * from './lib/services/navigator.service';\r\nexport * from './lib/config';\r\nexport * from './lib/services/base-tab.service';\r\nexport * from './lib/services/user.service';\r\nexport * from './lib/helpers.service';\r\nexport * from './lib/services/locale.service';\r\nexport * from './lib/services/s3.service';\r\nexport * from './lib/services/filter.service';\r\nexport * from './lib/services/search.service';\r\nexport * from './lib/services/zone-drawer.service';\r\nexport * from './lib/services/matterport-import.service';\r\nexport * from './lib/mattertagData';\r\n\r\n// DynamoDB (model) services\r\nexport * from './lib/services/models/profile.service';\r\nexport * from './lib/services/models/zone.service';\r\nexport * from './lib/services/models/mission.service';\r\nexport * from './lib/services/models/poi.service';\r\nexport * from './lib/services/models/property.service';\r\nexport * from './lib/services/models/organisation.service';\r\nexport * from './lib/services/models/domain.service';\r\nexport * from './lib/services/models/space.service';\r\nexport * from './lib/services/models/capture.service';\r\nexport * from './lib/services/models/visit.service';\r\nexport * from './lib/services/models/plan.service';\r\nexport * from './lib/services/models/hashtag.service';\r\nexport * from './lib/services/models/navigation.service';\r\nexport * from './lib/services/models/node.service';\r\nexport * from './lib/services/models/equipment.service';\r\nexport * from './lib/services/models/layer.service';\r\nexport * from './lib/services/models/ticket.service';\r\nexport * from './lib/services/models/operation.service';\r\nexport * from './lib/services/intervention.service';\r\nexport * from './lib/services/models/event.service';\r\nexport * from './lib/services/booking.service';\r\nexport * from './lib/services/models/affectation.service';\r\nexport * from './lib/services/models/measurement.service';\r\nexport * from './lib/services/models/comment.service';\r\nexport * from './lib/services/models/feature.service';\r\nexport * from './lib/services/models/template.service';\r\nexport * from './lib/services/support.service';\r\nexport * from './lib/services/validators.service';\r\n\r\n\r\n// Components\r\nexport * from './lib/components/csv-export/csv-export.component';\r\nexport * from './lib/components/search-bar/search-bar.component';\r\nexport * from './lib/components/menu-bar/menu-bar.component';\r\nexport * from './lib/components/loader/loader.component';\r\nexport * from './lib/components/support-modal/support-modal.component';\r\n\r\n// Pipes\r\nexport * from './lib/pipes/duration-to-string.pipe';\r\nexport * from './lib/pipes/hashtag-from-id.pipe';\r\nexport * from './lib/pipes/safe-url.pipe';\r\nexport * from './lib/pipes/time-date-to-local-string.pipe';\r\nexport * from './lib/pipes/username-from-id.pipe';\r\n\r\n// Directives\r\nexport * from './lib/validators/email.directive';\r\nexport * from './lib/validators/no-empty.directive';\r\nexport * from './lib/validators/text.directive';\r\nexport * from './lib/validators/number.directive';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.BaseVisibilityService","i1.PoiService","i2.MatterportService","i2","i3.ViewerService","i1.ProfileService","i2.MissionService","i3.PropertyService","i4","i5","i6","i1.BaseUserService","i2.ZoneService","i3.PoiService","i2.NavigationService","i1.MatterportService","i2.ViewerService","i3.ZoneService","i4.BaseUserService","i1.EventService","i1.OperationService","i2.EventService","i3.AffectationService","i4.PoiService","i5.BaseUserService","i6.NavigatorService","i7.FilterService","i8.InterventionService","i9.NavigationService","i10.ViewerService","i11","i3.OperationService","i4.TicketsService","i5.NavigatorService","i6.FilterService","i7.BaseUserService","i8.ViewerService","i9","i1.FilterService","i2.EquipmentService","i1.SearchService","i1.HashtagService","Observable","i1.SupportService","i5.ValidatorsService","i6.LoaderComponent","i7","i8","i2.FilterService","i2.ProfileService","i1.ZoneService","i5.MatterportService","i6.BaseVisibilityService","i1.CaptureService","i2.NodeService","i3.NavigationService","i4.ZoneService","i5.PlanService","i6.BaseUserService","i2.SpaceService","i4.VisitService","i5.ViewerService","i10","i2.LocaleService","i3.BaseUserService","i4.NavigatorService","i5.SupportService","i6.RangeDatePickerComponent","i7.AvatarComponent","i8.NavigationBarComponent","i12","i3.CommentService","i1.NavigationService","i4.LayerService","i6.PlanService","i2.BaseUserService","i3.MissionService","i1.NavigatorService","i6.NavigationService","i4.CommentService","i7.HashtagService"],"mappings":"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"}
|