@smarterplan/ngx-smarterplan-admin 0.1.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +24 -0
  2. package/esm2020/lib/admin/admin.component.mjs +33 -0
  3. package/esm2020/lib/chevron/chevron.component.mjs +19 -0
  4. package/esm2020/lib/guest-link/guest-link.component.mjs +62 -0
  5. package/esm2020/lib/guide.guard.mjs +25 -0
  6. package/esm2020/lib/name-from-id.pipe.mjs +29 -0
  7. package/esm2020/lib/ngx-smarterplan-admin-routing.module.mjs +47 -0
  8. package/esm2020/lib/ngx-smarterplan-admin.module.mjs +90 -0
  9. package/esm2020/lib/ngx-smarterplan-admin.service.mjs +14 -0
  10. package/esm2020/lib/organisation/organisation.component.mjs +166 -0
  11. package/esm2020/lib/sp-admin.guard.mjs +31 -0
  12. package/esm2020/lib/user/detail-organisation/detail-organisation.component.mjs +160 -0
  13. package/esm2020/lib/user/form-mission/form-mission.component.mjs +205 -0
  14. package/esm2020/lib/user/form-organisation/form-organisation.component.mjs +125 -0
  15. package/esm2020/lib/user/user-mission-form/user-mission-form.component.mjs +106 -0
  16. package/esm2020/lib/user/user.component.mjs +325 -0
  17. package/esm2020/lib/visitor/create-batch/create-batch.component.mjs +108 -0
  18. package/esm2020/lib/visitor/template/template.component.mjs +219 -0
  19. package/esm2020/lib/visitor/visitor.component.mjs +284 -0
  20. package/esm2020/public-api.mjs +6 -0
  21. package/esm2020/smarterplan-ngx-smarterplan-admin.mjs +5 -0
  22. package/fesm2015/smarterplan-ngx-smarterplan-admin.mjs +2026 -0
  23. package/fesm2015/smarterplan-ngx-smarterplan-admin.mjs.map +1 -0
  24. package/fesm2020/smarterplan-ngx-smarterplan-admin.mjs +1921 -0
  25. package/fesm2020/smarterplan-ngx-smarterplan-admin.mjs.map +1 -0
  26. package/lib/admin/admin.component.d.ts +13 -0
  27. package/lib/chevron/chevron.component.d.ts +9 -0
  28. package/lib/guest-link/guest-link.component.d.ts +20 -0
  29. package/lib/guide.guard.d.ts +11 -0
  30. package/lib/name-from-id.pipe.d.ts +11 -0
  31. package/lib/ngx-smarterplan-admin-routing.module.d.ts +7 -0
  32. package/lib/ngx-smarterplan-admin.module.d.ts +26 -0
  33. package/lib/ngx-smarterplan-admin.service.d.ts +6 -0
  34. package/lib/organisation/organisation.component.d.ts +53 -0
  35. package/lib/sp-admin.guard.d.ts +12 -0
  36. package/lib/user/detail-organisation/detail-organisation.component.d.ts +39 -0
  37. package/lib/user/form-mission/form-mission.component.d.ts +54 -0
  38. package/lib/user/form-organisation/form-organisation.component.d.ts +32 -0
  39. package/lib/user/user-mission-form/user-mission-form.component.d.ts +28 -0
  40. package/lib/user/user.component.d.ts +100 -0
  41. package/lib/visitor/create-batch/create-batch.component.d.ts +23 -0
  42. package/lib/visitor/template/template.component.d.ts +52 -0
  43. package/lib/visitor/visitor.component.d.ts +65 -0
  44. package/package.json +39 -0
  45. package/public-api.d.ts +2 -0
  46. package/smarterplan-ngx-smarterplan-admin.d.ts +5 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smarterplan-ngx-smarterplan-admin.mjs","sources":["../../../projects/ngx-smarterplan-admin/src/lib/ngx-smarterplan-admin.service.ts","../../../projects/ngx-smarterplan-admin/src/lib/chevron/chevron.component.ts","../../../projects/ngx-smarterplan-admin/src/lib/chevron/chevron.component.html","../../../projects/ngx-smarterplan-admin/src/lib/organisation/organisation.component.ts","../../../projects/ngx-smarterplan-admin/src/lib/organisation/organisation.component.html","../../../projects/ngx-smarterplan-admin/src/lib/guest-link/guest-link.component.ts","../../../projects/ngx-smarterplan-admin/src/lib/guest-link/guest-link.component.html","../../../projects/ngx-smarterplan-admin/src/lib/user/form-mission/form-mission.component.ts","../../../projects/ngx-smarterplan-admin/src/lib/user/form-mission/form-mission.component.html","../../../projects/ngx-smarterplan-admin/src/lib/user/user-mission-form/user-mission-form.component.ts","../../../projects/ngx-smarterplan-admin/src/lib/user/user-mission-form/user-mission-form.component.html","../../../projects/ngx-smarterplan-admin/src/lib/user/form-organisation/form-organisation.component.ts","../../../projects/ngx-smarterplan-admin/src/lib/user/form-organisation/form-organisation.component.html","../../../projects/ngx-smarterplan-admin/src/lib/user/detail-organisation/detail-organisation.component.ts","../../../projects/ngx-smarterplan-admin/src/lib/user/detail-organisation/detail-organisation.component.html","../../../projects/ngx-smarterplan-admin/src/lib/user/user.component.ts","../../../projects/ngx-smarterplan-admin/src/lib/user/user.component.html","../../../projects/ngx-smarterplan-admin/src/lib/visitor/template/template.component.ts","../../../projects/ngx-smarterplan-admin/src/lib/visitor/template/template.component.html","../../../projects/ngx-smarterplan-admin/src/lib/visitor/create-batch/create-batch.component.ts","../../../projects/ngx-smarterplan-admin/src/lib/visitor/create-batch/create-batch.component.html","../../../projects/ngx-smarterplan-admin/src/lib/visitor/visitor.component.ts","../../../projects/ngx-smarterplan-admin/src/lib/visitor/visitor.component.html","../../../projects/ngx-smarterplan-admin/src/lib/admin/admin.component.ts","../../../projects/ngx-smarterplan-admin/src/lib/admin/admin.component.html","../../../projects/ngx-smarterplan-admin/src/lib/guide.guard.ts","../../../projects/ngx-smarterplan-admin/src/lib/sp-admin.guard.ts","../../../projects/ngx-smarterplan-admin/src/lib/ngx-smarterplan-admin-routing.module.ts","../../../projects/ngx-smarterplan-admin/src/lib/name-from-id.pipe.ts","../../../projects/ngx-smarterplan-admin/src/lib/ngx-smarterplan-admin.module.ts","../../../projects/ngx-smarterplan-admin/src/public-api.ts","../../../projects/ngx-smarterplan-admin/src/smarterplan-ngx-smarterplan-admin.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxSmarterplanAdminService {\n\n constructor() { }\n}\n","import { Input } from '@angular/core';\nimport { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-chevron',\n templateUrl: './chevron.component.html',\n styleUrls: ['./chevron.component.scss']\n})\nexport class ChevronComponent implements OnInit {\n @Input() conditionShowing = false;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","<div style=\"height: 30px; width: 30px;\">\r\n <span class=\"icon-container\" >\r\n <div [class]=\"conditionShowing ? 'icon-img-up' : 'icon-img-down'\"></div>\r\n </span>\r\n</div>\r\n","import { Component, OnInit } from \"@angular/core\";\nimport {\n FormBuilder,\n FormGroup,\n AbstractControl,\n Validators,\n} from \"@angular/forms\";\nimport { BaseUserService, EmailStatus, LevelStatus, Mission, MissionService, Organisation, OrganisationService, Profile, ProfileEntity, PropertyService, removeNullKeysFromObject, RoleStatus } from \"ngx-smarterplan-core\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Component({\n selector: 'lib-organisation',\n templateUrl: './organisation.component.html',\n styleUrls: ['./organisation.component.scss']\n})\nexport class OrganisationComponent implements OnInit {\n\n admins = [];\n\n clients = [];\n\n details = -1;\n\n query = \"\";\n\n error = null;\n\n form: FormGroup;\n\n create = false;\n\n working = false;\n\n isAddingAdmin = false;\n\n me: Profile;\n\n org: Organisation;\n\n loading = false;\n\n editing = false;\n\n // fullAccess true gives access to all orgs\n // this is reserved to Smarterplan ADMINs\n fullAccess: boolean = false;\n\n constructor(\n private orgService: OrganisationService,\n private fb: FormBuilder,\n private userService: BaseUserService,\n private missionService: MissionService,\n private translate: TranslateService,\n private propertyService: PropertyService,\n ) {}\n\n async ngOnInit() {\n this.resetList();\n }\n\n /**\n * resetList fetches a fresh organisation list from server\n */\n async resetList() {\n this.loading = true;\n await this.missionService\n .getMissionsByOrderedOrganisation(\n \"6e28201f-4679-4c29-9d2d-8a325f57cee9\",\n )\n .then(async (missions) => {\n if (missions) {\n const client = {};\n await Promise.all(\n missions.map(async (m) => {\n if (!client.hasOwnProperty(m.organisationID)) {\n client[m.organisationID] = {\n name: m.organisation.name,\n organisation: m.organisation,\n adminMissions: [],\n properties: [],\n };\n }\n if (m.role === RoleStatus.ADMIN && !m.deletedAt) {\n const alreadyAdmin = client[\n m.organisationID\n ].adminMissions.filter(\n (mis) => mis.user.id === m.userID,\n );\n if (alreadyAdmin.length === 0) {\n client[m.organisationID].adminMissions.push(\n {\n user: new ProfileEntity(m.user),\n mission: m,\n },\n );\n }\n }\n // get properties\n const properties =\n await this.propertyService.getPropertiesForOrganisation(\n m.organisationID,\n );\n client[m.organisationID].properties = properties\n .filter(\n (property) =>\n !property.deletedAt && property.space,\n )\n .map((property) => property.space.name);\n }),\n );\n this.clients = Object.values(client);\n }\n this.loading = false;\n });\n }\n\n /**\n * onToggleDetail folds/unfolds details for a given organisation\n * @param i index of the organisation to be toggled\n */\n onToggleDetail(index) {\n this.details = index === this.details ? -1 : index;\n }\n\n onAdd() {\n this.create = true;\n this.form = this.fb.group({\n name: [null, [Validators.required]],\n address: [\"\"],\n city: [\"\"],\n postal: [null],\n siret: [null],\n \n });\n }\n\n onEdit(org: Organisation) {\n this.create = false;\n this.editing = true;\n this.form = this.fb.group({\n id: [org.id],\n name: [org.name, [Validators.required]],\n address: [org.address],\n city: [org.city],\n postal: [org.postal],\n siret: [org.siret],\n \n });\n }\n\n onCancel() {\n // this.form = null;\n this.form.reset();\n this.create = false;\n this.editing = false;\n }\n\n get name(): AbstractControl {\n return this.form.get(\"name\");\n }\n\n get email(): AbstractControl {\n return this.form.get(\"user\").get(\"email\");\n }\n\n /**\n * Handle creation or update of organisation\n * @see 174\n */\n async onSubmitOrg() {\n this.working = true;\n const formValue = this.form.value;\n removeNullKeysFromObject(formValue);\n try {\n if (this.create) {\n const organisation = await this.orgService.createOrganisation(formValue as Organisation);\n } else {\n await this.orgService.updateOrganisation(formValue);\n }\n } catch (error) {\n this.error = true;\n console.error(error);\n }\n await this.resetList();\n this.working = false;\n this.create = false;\n this.editing = false;\n this.form.reset();\n }\n\n onArchive(_) {\n console.log(\"Unimplemented\");\n }\n\n onDismiss() {\n this.error = null;\n }\n\n async onDeleteOrg(org: Organisation) {\n const message = this.translate.instant(\"confirm.deleteOrganisation\");\n if (\n window.confirm(message) &&\n org.id !== \"6e28201f-4679-4c29-9d2d-8a325f57cee9\"\n ) {\n const propertiesToDelete =\n await this.propertyService.getPropertiesForOrganisation(org.id);\n await this.orgService.deleteOrganisation(org.id);\n (await this.missionService.getMissionsByOrganisation(org.id)).map(\n (m) => this.missionService.softDeleteMission(m.id),\n );\n await Promise.all(\n propertiesToDelete.map(async (property) => {\n await this.propertyService.deleteProperty(property.id);\n }),\n );\n }\n }\n\n}\n","<div class=\"container-fluid\" class=\"dashboard-tab\">\r\n <h3>{{'SmarterPlan Client Organisations' | translate}}</h3>\r\n <div class=\"row\">\r\n <div class=\"col-md-8 col-lg-6\">\r\n\r\n <div *ngIf=\"error\" class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\">\r\n <strong>{{'Error' | translate}}!</strong> We haven't been able to fulfil your request.\r\n <button type=\"button\" class=\"close\" data-dismiss=\"alert\" (click)=\"onDismiss()\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"!create && !editing\">\r\n <div class=\"d-flex justify-content-between align-items-center p-1\">\r\n <input class=\"form-control search-button\" [(ngModel)]=\"query\" i18n-placeholder placeholder=\"Search\"\r\n type=\"text\">&nbsp;\r\n </div>\r\n <!-- <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onAdd()\">{{'Add new client organisation' |\r\n translate}}</button> -->\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let a of clients; index as index\"\r\n (click)=\"onToggleDetail(index)\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n {{a.name}}\r\n <lib-chevron [conditionShowing]=\"index==details\"></lib-chevron>\r\n <!-- <ic-icon [icon]=\"index==details ? chevronDown : chevronRight\"></ic-icon> -->\r\n </div>\r\n\r\n <div *ngIf=\"index==details\">\r\n <ul class=\"list-group list-group-flush\">\r\n <!-- <li class=\"list-group-item bg-transparent\">{{'Activité' | translate}}</li> -->\r\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{ a.organisation.address }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{ 'Postal Code' | translate}}: {{ a.organisation.postal }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'City' | translate}}: {{ a.organisation.city }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'SIRET' | translate}}: {{ a.organisation.siret ?\r\n a.organisation.siret : 'Not provided' | translate }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Created' | translate}}: {{ a.organisation.createdAt }}\r\n </li>\r\n <ng-container *ngIf=\"a.adminMissions.length > 0\">\r\n <li *ngIf=\"a.adminMissions.length <= 1\" class=\"list-group-item bg-transparent\">\r\n {{'Administrator User' | translate}} :</li>\r\n <li *ngIf=\"a.adminMissions.length > 1\" class=\"list-group-item bg-transparent\">\r\n {{'Administrator User(s)' | translate}} :</li>\r\n <li class=\"list-group-item list-group-item-action\"\r\n *ngFor=\"let admin of a.adminMissions; index as index\" (click)=\"onToggleDetail(index)\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"ml-4\"> {{admin.user.displayName}} ({{admin.user.email}})\r\n <!-- <button type=\"button\" class=\"btn btn-primary rounded-pill\" style=\"float: right;\"\r\n (click)=\"onRemoveAdmin(admin)\">\r\n {{'Remove'|translate}}</button> \r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Phone'}}: {{admin.user.phone}}</li> -->\r\n </ul>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"a.adminMissions.length == 0\">\r\n <li class=\"list-group-item bg-warning\"><span class=\"badge badge-warning\">\r\n {{'Warning' | translate}}</span> {{'No Administrator User'| translate}} </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"a.properties.length > 0\">\r\n <li class=\"list-group-item bg-transparent\">{{'Locations' | translate}}: </li>\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let property of a.properties\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"ml-4\">{{property}}</li>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n <div class=\"action-button-container\">\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onEdit(a.organisation)\">\r\n {{'Edit' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onArchive(a.organisation)\" disabled>\r\n {{'Archive' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onDeleteOrg(a.organisation)\">\r\n {{'Delete' | translate}}</button>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div *ngIf=\"form && (create || editing)\">\r\n <form (ngSubmit)=\"onSubmitOrg()\" [formGroup]=\"form\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && name.touched\" required\r\n formControlName=\"name\">\r\n <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"address\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'City' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"city\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Postal code' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"postal\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'SIRET' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"siret\">\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"working\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div class=\"action-button-container\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n [disabled]=\"working || form.invalid\">{{'Save' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" [disabled]=\"working\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <!--<spOrganisationForm [model]=\" editingOrganisation\" (submit)=\"onSave($event)\" (cancel)=\"onCancel()\">\r\n </spOrganisationForm>-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <div>{{'Administrator User' | translate}}</div>\r\n <div formGroupName=\"user\" *ngIf=\"create || isAddingAdmin\">\r\n <div *ngIf=\"form\" class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"email.invalid && email.touched\" required\r\n formControlName=\"email\">\r\n <div class=\"invalid-feedback\">\r\n {{'An email is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'First name' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"firstName\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Last name' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"lastName\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Phone' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"phone\">\r\n </div>\r\n </div>\r\n </div> -->","import { Component, Input, OnInit } from '@angular/core';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { SpaceService } from 'ngx-smarterplan-core';\r\nimport * as CryptoJS from \"crypto-js\";\r\n\r\n@Component({\r\n selector: 'lib-guest-link',\r\n templateUrl: './guest-link.component.html',\r\n styleUrls: ['./guest-link.component.scss']\r\n})\r\nexport class GuestLinkComponent implements OnInit {\r\n\r\n @Input() spaceID: string;\r\n\r\n @Input() username: string;\r\n\r\n errorMessage: string;\r\n\r\n model3D: string;\r\n\r\n link: string;\r\n\r\n constructor(\r\n private spaceService: SpaceService,\r\n public activeModal: NgbActiveModal,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.setModel3D();\r\n }\r\n\r\n async setModel3D() {\r\n this.model3D = await this.spaceService.getModel3DForSpace(this.spaceID);\r\n }\r\n\r\n async onGenerate() {\r\n const inputElement = document.querySelector(\r\n \"#password\",\r\n ) as HTMLInputElement;\r\n const password = inputElement.value;\r\n if (password.length < 8) {\r\n this.errorMessage = \"register.password.weak\";\r\n return;\r\n }\r\n this.errorMessage = null;\r\n const encrypted = CryptoJS.AES.encrypt(\r\n JSON.stringify({\r\n user: this.username,\r\n password,\r\n }),\r\n \"EncryptedUser\",\r\n ).toString();\r\n const redirect = `redirect?spaceID=${this.spaceID}&model3D=${this.model3D}&user=${encrypted}`;\r\n const { origin } = document.location;\r\n this.link = `${origin}/${redirect}`;\r\n setTimeout(() => {\r\n const hyperlink = document.querySelector(\r\n \"#linkHref\",\r\n ) as HTMLElement;\r\n if (hyperlink) {\r\n hyperlink.setAttribute(\"href\", this.link);\r\n }\r\n }, 200); // wait until the element is rendered because of *ngIf\r\n\r\n await this.spaceService.updateSpace({\r\n id: this.spaceID,\r\n guestLink: redirect,\r\n });\r\n }\r\n\r\n onCancel() {\r\n if (this.activeModal) {\r\n this.activeModal.close();\r\n }\r\n }\r\n\r\n}\r\n","<div class=\"main\">\r\n <p>{{'Current password for account:' | translate}} {{username}}</p>\r\n <input type=\"password\" class=\"form-control\" id=\"password\">\r\n <p *ngIf=\"errorMessage\">{{errorMessage}}</p>\r\n <div class=\"row ml-0 mt-3\" *ngIf=\"link\">\r\n <a id=\"linkHref\" target=\"_blank\">{{'Try the link' | translate }}</a>\r\n <div ngxClipboard [cbContent]=\"link\" [style.cursor]=\"'pointer'\" style=\"margin-left: 5px; max-width: 20px;\"\r\n ngbTooltip=\"Copied!\" triggers=\"click:blur\">\r\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\r\n data-height=\"20\"></span>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row ml-0 mt-3\">\r\n <button class=\"btn btn-primary rounded-pill mr-2\" (click)=\"onGenerate()\">{{'Generate link' | translate\r\n }}</button>\r\n <button class=\"btn btn-primary rounded-pill\" (click)=\"onCancel()\">{{'Cancel' | translate }}</button>\r\n </div>\r\n\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormGroup, FormBuilder, AbstractControl } from '@angular/forms';\r\nimport { Zone, Mission, Organisation, Space, RoleStatus, \r\n LevelStatus, Domain, Locale, BaseUserService, DomainService, \r\n OrganisationService, ZoneService, enumToArray, EmailStatus, \r\n Hashtag, SpaceService, LocaleService, HashtagService, stringLocaleToEnum } from 'ngx-smarterplan-core';\r\nimport { DateTime } from \"luxon\";\r\nimport { Validators } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'lib-form-mission',\r\n templateUrl: './form-mission.component.html',\r\n styleUrls: ['./form-mission.component.scss']\r\n})\r\nexport class FormMissionComponent implements OnInit {\r\n\r\n @Input() missionToEdit: Mission;\r\n\r\n @Input() organisationForMission: Organisation;\r\n\r\n @Input() isSP: boolean;\r\n\r\n @Input() userForMissionID: string;\r\n\r\n @Input() currentUserOrganisation: Organisation;\r\n\r\n missionForm: FormGroup;\r\n\r\n availableSpaces: Space[];\r\n\r\n @Output() addedMissionInput = new EventEmitter<Mission>();\r\n\r\n startDate: number;\r\n\r\n endDate: number;\r\n\r\n availableRoles: RoleStatus[];\r\n\r\n availableLevels: LevelStatus[];\r\n\r\n availableHashtags: Hashtag[] = [];\r\n\r\n domains: Domain[];\r\n\r\n allOrgs: Organisation[];\r\n\r\n isGuide = false;\r\n\r\n zonesForSpace: Zone[];\r\n\r\n defaultZone: Zone;\r\n\r\n missionTimeStart: number = 12 * 60 * 60000; // midday in milliseconds\r\n\r\n missionTimeEnd: number = 12 * 60 * 60000;\r\n\r\n addedHashtags: Hashtag[] = [];\r\n\r\n currentLocale: Locale;\r\n\r\n locales: string[];\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private spaceService: SpaceService,\r\n private userService: BaseUserService,\r\n private domainService: DomainService,\r\n private organisationService: OrganisationService,\r\n private zoneService: ZoneService,\r\n private hashtagService: HashtagService,\r\n private localeService: LocaleService,\r\n ) {}\r\n\r\n async ngOnInit() {\r\n this.updateUserInfo();\r\n await this.setDomains();\r\n if (this.isSP) {\r\n this.allOrgs = await this.organisationService.listOrganisations();\r\n }\r\n this.currentLocale = stringLocaleToEnum(this.localeService.getLocale()); // to match enum Locale\r\n this.locales = enumToArray(Locale);\r\n if (this.missionToEdit) {\r\n this.initFormForEdit();\r\n } else {\r\n this.initEmptyForm();\r\n }\r\n }\r\n\r\n updateUserInfo() {\r\n this.availableRoles =\r\n this.userService.getAvailableRolesForCurrentUser();\r\n this.availableLevels =\r\n this.userService.getAvalableLevelsForCurrentUser();\r\n this.isGuide = this.userService.isGuide();\r\n }\r\n\r\n async setDomains() {\r\n if (!this.isGuide) {\r\n const domains =\r\n await this.domainService.getDomainsForMissionsForOrg(\r\n this.currentUserOrganisation.id,\r\n );\r\n this.domains = domains;\r\n }\r\n }\r\n\r\n async setHashtags(spaceID: string) {\r\n this.availableHashtags = await this.hashtagService.getHashtagsForSpace(\r\n spaceID,\r\n );\r\n }\r\n\r\n get spaceID(): AbstractControl {\r\n return this.missionForm.get(\"space\");\r\n }\r\n\r\n get role(): AbstractControl {\r\n return this.missionForm.get(\"role\");\r\n }\r\n\r\n async initFormForEdit() {\r\n const m = this.missionToEdit;\r\n this.userForMissionID = m.userID;\r\n this.availableSpaces = await this.spaceService.getAllowedSpacesForOrg(\r\n this.missionToEdit.organisationID,\r\n this.currentUserOrganisation.id,\r\n );\r\n await this.setHashtags(m.spaceID);\r\n this.missionForm = this.fb.group({\r\n id: m.id,\r\n organisation: [{ value: m.organisation.name, disabled: true }],\r\n organisationID: m.organisationID,\r\n orderedOrganisationID: m.orderedOrganisationID,\r\n role: [m.role],\r\n level: [m.level],\r\n space: [m.spaceID],\r\n description: [m.description],\r\n domains: [m.domains],\r\n zone: [m.zoneID],\r\n locale: [m.locale],\r\n });\r\n if (m.hashtags && m.hashtags.length > 0) {\r\n this.addedHashtags = this.availableHashtags.filter((hashtag) =>\r\n m.hashtags.includes(hashtag.id),\r\n );\r\n }\r\n if (m.startDateTime) {\r\n const date = DateTime.fromISO(m.startDateTime);\r\n this.missionTimeStart = (date.hour * 60 + date.minute) * 60 * 1000;\r\n this.startDate = date.toMillis() - this.missionTimeStart;\r\n }\r\n if (m.endDateTime) {\r\n const date = DateTime.fromISO(m.endDateTime);\r\n this.missionTimeEnd = (date.hour * 60 + date.minute) * 60 * 1000;\r\n this.endDate = date.toMillis() - this.missionTimeEnd;\r\n }\r\n this.onSpaceClick();\r\n }\r\n\r\n async onSpaceClick() {\r\n const zones = await this.zoneService.getZonesBySpace(\r\n this.spaceID.value,\r\n );\r\n this.defaultZone = zones.find((zone) => !zone.parentID);\r\n const indexOfDefaultZone = zones.indexOf(this.defaultZone);\r\n zones.splice(indexOfDefaultZone, 1);\r\n this.zonesForSpace = zones;\r\n await this.setHashtags(this.spaceID.value);\r\n }\r\n\r\n async initEmptyForm() {\r\n this.availableSpaces = await this.spaceService.getAllowedSpacesForOrg(\r\n this.organisationForMission.id,\r\n this.currentUserOrganisation.id,\r\n );\r\n this.missionForm = this.fb.group({\r\n role: [null, Validators.required],\r\n level: [LevelStatus.MINIMUM],\r\n organisation: [\r\n { value: this.organisationForMission.name, disabled: true },\r\n ],\r\n organisationID: this.organisationForMission.id,\r\n orderedOrganisationID: this.currentUserOrganisation.id,\r\n space: [null, Validators.required],\r\n zone: [null],\r\n description: [\"\"],\r\n domains: [null],\r\n locale: [this.currentLocale],\r\n });\r\n }\r\n\r\n onHashtagClick(hashtag: Hashtag) {\r\n if (!this.hashtagAdded(hashtag)) {\r\n this.addedHashtags.push(hashtag);\r\n } else {\r\n this.addedHashtags.splice(this.addedHashtags.indexOf(hashtag), 1);\r\n }\r\n }\r\n\r\n hashtagAdded(hashtag: Hashtag): boolean {\r\n return (\r\n this.addedHashtags.find(\r\n (_hashtag) => _hashtag.id === hashtag.id,\r\n ) !== undefined\r\n );\r\n }\r\n\r\n removeHashtag(hashtag: Hashtag) {\r\n this.addedHashtags.splice(this.addedHashtags.indexOf(hashtag), 1);\r\n }\r\n\r\n onSubmit() {\r\n const formValue = this.missionForm.value;\r\n if(!this.missionForm.valid) {\r\n // this shows errors in the form\r\n this.missionForm.markAllAsTouched();\r\n return;\r\n }\r\n let startDateString: string;\r\n let endDateString: string;\r\n if (this.startDate) {\r\n const dateHourStartNumber = this.startDate + this.missionTimeStart;\r\n const startDate = DateTime.fromMillis(dateHourStartNumber);\r\n startDateString = startDate.toISO();\r\n }\r\n if (this.endDate) {\r\n const dateHourEndNumber = this.endDate + this.missionTimeEnd;\r\n const endDate = DateTime.fromMillis(dateHourEndNumber);\r\n endDateString = endDate.toISO();\r\n }\r\n const missionInput: Mission = {\r\n organisationID: formValue.organisationID,\r\n orderedOrganisationID: formValue.orderedOrganisationID,\r\n level: formValue.level,\r\n role: formValue.role,\r\n description: formValue.description,\r\n startDateTime: startDateString,\r\n endDateTime: endDateString,\r\n domains: formValue.domains,\r\n userID: this.userForMissionID,\r\n emailStatus: this.missionToEdit\r\n ? this.missionToEdit.emailStatus\r\n : EmailStatus.CREATION_TO_DELIVER,\r\n locale: formValue.locale,\r\n };\r\n missionInput.hashtags = this.addedHashtags.map((h) => h.id);\r\n if (formValue.space) {\r\n missionInput.spaceID = formValue.space;\r\n }\r\n if (formValue.zone) {\r\n missionInput.zoneID = formValue.zone;\r\n }\r\n if (this.missionToEdit) {\r\n missionInput.id = this.missionToEdit.id;\r\n }\r\n this.addedMissionInput.emit(missionInput);\r\n }\r\n\r\n onCancel() {\r\n this.addedMissionInput.emit(null);\r\n }\r\n\r\n}\r\n","<div class=\"form-containter\" *ngIf=\"missionForm\">\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'Mission details' | translate }}</h4>\r\n </div>\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"missionForm\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Organisation' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"organisation\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\" *ngIf=\"isSP\">\r\n <label class=\"col-sm-4 col-form-label\">{{ 'Ordered by' | translate }}</label>\r\n <div class=\"col-sm-8\">\r\n <select class=\"form-control\" required formControlName=\"orderedOrganisationID\">\r\n <option *ngFor=\"let org of allOrgs\" [ngValue]=\"org.id\">\r\n {{ org.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Description' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <textarea class=\"form-control\" formControlName=\"description\" rows=\"10\"></textarea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Role' | translate}}*</label>\r\n <div class=\"col-sm-8\">\r\n <select class=\"form-control\" required formControlName=\"role\" [class.is-invalid]=\"role.invalid && role.touched\">\r\n <option *ngFor=\"let r of availableRoles\" [ngValue]=\"r\">\r\n {{ r }}\r\n </option>\r\n </select>\r\n <div class=\"invalid-feedback\">\r\n {{'Role is required' | translate}}.\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\"\r\n *ngIf=\"missionForm.get('role').value !== 'VISITOR_MUSEUM' && missionForm.get('role').value !== 'GUIDE_MUSEUM'\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Domains' | translate}}</label>\r\n <div class=\"col-sm-8\" *ngIf=\"domains\">\r\n <select class=\"form-control\" multiple formControlName=\"domains\">\r\n <option *ngFor=\"let domain of domains\" [ngValue]=\"domain.id\">\r\n {{ domain.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Access level' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <select class=\"form-control\" required formControlName=\"level\">\r\n <option *ngFor=\"let level of availableLevels\" [ngValue]=\"level\">\r\n {{ level }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{ 'Authorized location' | translate }}*</label>\r\n <div class=\"col-sm-8\" *ngIf=\"availableSpaces\">\r\n <select class=\"form-control\" required formControlName=\"space\" (change)=\"onSpaceClick()\" \r\n [class.is-invalid]=\"spaceID.invalid && spaceID.touched\">\r\n <option *ngFor=\"let space of availableSpaces\" [ngValue]=\"space.id\">\r\n {{ space.name }}\r\n </option>\r\n </select>\r\n <div class=\"invalid-feedback\">\r\n {{'Location is required' | translate}}.\r\n </div>\r\n </div>\r\n <div class=\"col-sm-8\" *ngIf=\"!availableSpaces\">\r\n {{ 'No locations available' | translate}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{ 'Authorized zone' | translate }}</label>\r\n <div class=\"col-sm-8\" *ngIf=\"zonesForSpace; else noSpace\">\r\n <select class=\"form-control\" formControlName=\"zone\">\r\n <option [ngValue]=\"defaultZone.id\">\r\n {{ 'All zones' | translate }}\r\n </option>\r\n <option *ngFor=\"let zone of zonesForSpace\" [ngValue]=\"zone.id\">\r\n {{ zone.name }}\r\n </option>\r\n </select>\r\n </div>\r\n <ng-template #noSpace>\r\n <div class=\"col-sm-8 hint-container\">\r\n <p class=\"hint keywordsRules\">{{'You need to choose the location first' | translate}} </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Language' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <select class=\"form-control\" formControlName=\"locale\">\r\n <option [ngValue]=\"null\">{{'Not applicable' | translate}}</option>\r\n <option *ngFor=\"let locale of locales\" [ngValue]=\"locale\">\r\n {{ locale }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n <!-- Hashtags are available after Space is set -->\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Hashtags' | translate}}</label>\r\n <div class=\"col-sm-8\" *ngIf=\"spaceID.value\">\r\n <p class=\"keywordsRules\" *ngIf=\"availableHashtags.length > 0\">{{'Available hashtags' | translate}} </p>\r\n <p class=\"keywordsRules\" *ngIf=\"availableHashtags.length === 0\">\r\n {{'No hashtags created for this location' | translate}} </p>\r\n <div *ngIf=\"availableHashtags.length > 0\">\r\n <ul class=\"keywordsDisplay no-border\">\r\n <div class=\"keywordsdisplayContainer\">\r\n <li *ngFor=\"let hashtag of availableHashtags\"\r\n [class]=\"hashtagAdded(hashtag) ? 'keywordsItem added' : 'keywordsItem'\"\r\n (click)=\"onHashtagClick(hashtag)\" style=\"cursor: pointer;\"\r\n ngbTooltip=\"{{hashtagAdded(hashtag) ? ('Remove'|translate) : ('Add'|translate) }}\">\r\n {{hashtag.name}}\r\n </li>\r\n </div>\r\n </ul>\r\n <p class=\"keywordsRules\">{{'Added hashtags' | translate}} </p>\r\n <ul class=\"keywordsDisplay\">\r\n <div class=\"keywordsdisplayContainer\" *ngIf=\"addedHashtags.length> 0\">\r\n <li class=\"keywordsItem\" *ngFor=\"let hashtag of addedHashtags\">{{ hashtag.name }}\r\n <a type=\"button\" class=\"closeButton\" (click)=\"removeHashtag(hashtag)\">\r\n <span class=\"crossItem\"></span>\r\n </a>\r\n </li>\r\n </div>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-8 hint-container\" *ngIf=\"!spaceID.value\">\r\n <p class=\"hint keywordsRules\">{{'You need to choose the location first' | translate}} </p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Mission Start Date' | translate}}</label>\r\n <div class=\"input-group col-sm-8\">\r\n <input class=\"form-control\" placeholder=\"dd/mm/yyyy\" [(ngModel)]=\"startDate\" ngbDatepicker\r\n #d1=\"ngbDatepicker\" [ngModelOptions]=\"{standalone: true}\">\r\n <div class=\"input-group-append\">\r\n <button class=\"btn btn-outline-secondary calendar\" (click)=\"d1.toggle()\" type=\"button\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Mission Start Time' | translate}}</label>\r\n <div class=\"input-group col-sm-8 timeZoneContainer\">\r\n <ngb-timepicker [(ngModel)]=\"missionTimeStart\" [ngModelOptions]=\"{standalone: true}\"></ngb-timepicker>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Mission End Date' | translate}}</label>\r\n <div class=\"input-group col-sm-8\">\r\n <input class=\"form-control\" placeholder=\"dd/mm/yyyy\" [(ngModel)]=\"endDate\" ngbDatepicker\r\n #d2=\"ngbDatepicker\" [ngModelOptions]=\"{standalone: true}\">\r\n <div class=\"input-group-append\">\r\n <button class=\"btn btn-outline-secondary calendar\" (click)=\"d2.toggle()\" type=\"button\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Mission End Time' | translate}}</label>\r\n <div class=\"input-group col-sm-8 timeZoneContainer\">\r\n <ngb-timepicker [(ngModel)]=\"missionTimeEnd\" [ngModelOptions]=\"{standalone: true}\"></ngb-timepicker>\r\n </div>\r\n </div>\r\n\r\n <div class=\"btn-control-div action-button-container\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill mr-3 action-button\"\r\n >{{'Save' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' |\r\n translate}}</button>\r\n </div>\r\n </form>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Organisation, Mission, Profile, BaseUserService } from 'ngx-smarterplan-core';\r\n\r\n@Component({\r\n selector: 'lib-user-mission-form',\r\n templateUrl: './user-mission-form.component.html',\r\n styleUrls: ['./user-mission-form.component.scss']\r\n})\r\nexport class UserMissionFormComponent implements OnInit {\r\n \r\n @Input() addToOrganisation: Organisation;\r\n\r\n @Input() isSP: boolean;\r\n\r\n @Input() createForExistingUser = false;\r\n\r\n form: FormGroup;\r\n\r\n @Input() currentOrg: Organisation;\r\n\r\n @Output() added = new EventEmitter<boolean>();\r\n\r\n working = false;\r\n\r\n missionInput: Mission;\r\n\r\n createdUser: Profile;\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private userService: BaseUserService,\r\n private translate: TranslateService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.onAddNewUserMissionToOrg();\r\n }\r\n\r\n async onAddNewUserMissionToOrg() {\r\n this.form = this.fb.group({\r\n email: [null, [Validators.required]],\r\n lastName: [\"\"],\r\n firstName: [\"\"],\r\n });\r\n }\r\n\r\n onCancel() {\r\n this.added.emit(false);\r\n }\r\n\r\n get email(): AbstractControl {\r\n return this.form.get(\"email\");\r\n }\r\n\r\n async onSubmit() {\r\n this.working = true;\r\n let p: Profile;\r\n try {\r\n const formValue = this.form.value;\r\n p = await this.userService.profileForMail(formValue.email);\r\n if (p) {\r\n alert(\"User with this email exists already!\");\r\n this.working = false;\r\n return;\r\n }\r\n try {\r\n const profile = await this.userService.createUserAWSandProfile(\r\n formValue,\r\n true,\r\n );\r\n console.log(\"User created!\", profile.metadata);\r\n this.createdUser = profile;\r\n } catch (error) {\r\n this.working = false;\r\n alert(this.translate.instant(JSON.stringify(error)));\r\n return;\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n this.working = false;\r\n }\r\n\r\n // async updateAllMissionsFromTemplate(missionInput: UpdateMissionInput) {\r\n // // all missions of this organisation\r\n // const missionsFromTemplate =\r\n // await this.missionService.getMissionsByTemplate(\r\n // this.missionToEdit.id,\r\n // );\r\n // await Promise.all(\r\n // missionsFromTemplate.map(async (mission) => {\r\n // const missionTemplate = { ...missionInput };\r\n // if (this.sendUpdate) {\r\n // missionTemplate.emailStatus = EmailStatus.UPDATE_TO_DELIVER;\r\n // }\r\n // missionTemplate.id = mission.id;\r\n // await this.missionService.update(missionTemplate);\r\n // }),\r\n // );\r\n // }\r\n\r\n async onMissionInput(mission: Mission) {\r\n if (mission) {\r\n this.missionInput = mission;\r\n await this.userService.createOrUpdateMissionForOrgWithProperty(\r\n this.missionInput as Mission,\r\n this.missionInput.organisationID,\r\n );\r\n this.added.emit(true);\r\n } else {\r\n this.added.emit(false);\r\n }\r\n }\r\n}\r\n","<div *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n <div id=\"personalInfo\">\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'User Personal Information' | translate }}</h4>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"email.invalid && email.touched\" required\r\n formControlName=\"email\">\r\n <div class=\"invalid-feedback\">\r\n {{'An email is required' | translate}}.\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Last name' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"lastName\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'First name' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"firstName\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"working\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n\r\n <div *ngIf=\"createdUser; else waitingForUser\">\r\n <div class=\"alert alert-info\">\r\n {{'User successfully created' | translate}}\r\n </div>\r\n <lib-form-mission [organisationForMission]=\"addToOrganisation\" [userForMissionID]=\"createdUser.id\"\r\n [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\" (addedMissionInput)=\"onMissionInput($event)\">\r\n </lib-form-mission>\r\n </div>\r\n <ng-template #waitingForUser>\r\n <div class=\"action-button-container\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill mr-3 action-button\"\r\n [disabled]=\"working || form.invalid\">{{'Create user' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" [disabled]=\"working\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\r\n </div>\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'Mission details' | translate }}</h4>\r\n </div>\r\n <ngb-alert type=\"warning\" [dismissible]=\"false\">{{'Please create a user first' | translate}}.</ngb-alert>\r\n\r\n </ng-template>\r\n </form>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms';\r\nimport { Organisation, ProfileEntity, OrganisationService, BaseUserService, removeNullKeysFromObject, Mission } from 'ngx-smarterplan-core';\r\n\r\n@Component({\r\n selector: 'lib-form-organisation',\r\n templateUrl: './form-organisation.component.html',\r\n styleUrls: ['./form-organisation.component.scss']\r\n})\r\nexport class FormOrganisationComponent implements OnInit {\r\n form: FormGroup;\r\n\r\n working = false;\r\n\r\n startDate: number;\r\n\r\n endDate: number;\r\n\r\n @Input() currentOrg: Organisation;\r\n\r\n @Input() currentUser: ProfileEntity;\r\n\r\n @Input() existing: boolean;\r\n\r\n @Output() added = new EventEmitter<boolean>();\r\n\r\n isSP: boolean;\r\n\r\n token: string;\r\n\r\n existingOrgID: string;\r\n\r\n createdOrg: Organisation;\r\n\r\n constructor(\r\n private orgService: OrganisationService,\r\n private fb: FormBuilder,\r\n private userService: BaseUserService,\r\n ) {}\r\n\r\n async ngOnInit(): Promise<void> {\r\n this.isSP = this.userService.isSPAdmin();\r\n this.initForm();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const handlePaste = function handlePaste(event) {\r\n const pastedData = event.clipboardData.getData(\"Text\");\r\n if (pastedData.length > 10) {\r\n this.findOrgByToken(pastedData);\r\n }\r\n }.bind(this);\r\n if (this.existing) {\r\n setTimeout(() => {\r\n const inputElement = document.querySelector(\r\n \"#tokenInput\",\r\n ) as HTMLInputElement;\r\n inputElement.addEventListener(\"paste\", handlePaste);\r\n inputElement.addEventListener(\"keydown\", ({ key }) => {\r\n if (key === \"Backspace\" || key === \"Delete\") {\r\n this.initForm();\r\n }\r\n });\r\n inputElement.addEventListener(\"keydown\", ({ key }) => {\r\n if (key === \"Enter\") {\r\n const { value } = inputElement;\r\n this.findOrgByToken(value);\r\n }\r\n });\r\n }, 600);\r\n }\r\n }\r\n\r\n initForm() {\r\n this.form = this.fb.group({\r\n name: [null, [Validators.required]],\r\n address: [\"\"],\r\n city: [\"\"],\r\n postal: [null],\r\n siret: [null],\r\n });\r\n if (this.existing) {\r\n const orgControls = this.form as FormGroup;\r\n for (const control of Object.keys(orgControls.controls)) {\r\n orgControls.controls[control].disable();\r\n }\r\n }\r\n }\r\n\r\n onCancel() {\r\n this.form = null;\r\n this.added.emit(false);\r\n }\r\n\r\n get name(): AbstractControl {\r\n return this.form.get(\"name\");\r\n }\r\n\r\n async onSubmit() {\r\n this.working = true;\r\n const formValue = this.form.value;\r\n removeNullKeysFromObject(formValue);\r\n try {\r\n if (!this.existing) {\r\n const organisation = await this.orgService.createOrganisation(\r\n formValue,\r\n );\r\n if (organisation) {\r\n this.createdOrg = organisation;\r\n }\r\n } else {\r\n // orgID = this.existingOrgID;\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n this.added.emit(false);\r\n }\r\n this.working = false;\r\n }\r\n\r\n async findOrgByToken(token: string) {\r\n const org = await this.orgService.getOrganisationByToken(token);\r\n if (org) {\r\n this.form.setValue({\r\n name: [org.name],\r\n address: [org.address],\r\n city: [org.city],\r\n postal: [org.postal],\r\n siret: [org.siret],\r\n });\r\n this.existingOrgID = org.id;\r\n } else {\r\n alert(\"No organisation found. Maybe token is expired?\");\r\n }\r\n }\r\n\r\n userAndMissionAdded(added: boolean) {\r\n this.added.emit(added);\r\n }\r\n}\r\n","<div *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n <div>\r\n <h4>{{ 'Organisation' | translate }}</h4>\r\n </div>\r\n <div class=\"form-group row\" *ngIf=\"existing\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Organisation Token' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" id=\"tokenInput\" placeholder=\"Paste organisation token here\">\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && name.touched\" required\r\n formControlName=\"name\">\r\n <div class=\"invalid-feedback\">\r\n {{'Name is mandatory' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"address\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'City' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"city\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Postal Code' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"postal\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'SIRET' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"siret\">\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"createdOrg; else noOrg\">\r\n <div class=\"alert alert-info\">\r\n {{'Organisation successfully created' | translate}}\r\n </div>\r\n <lib-user-mission-form [addToOrganisation]=\"createdOrg\" [currentOrg]=\"currentOrg\" [isSP]=\"isSP\"\r\n (added)=\"userAndMissionAdded($event)\">\r\n </lib-user-mission-form>\r\n </div>\r\n <ng-template #noOrg>\r\n <div class=\"action-button-container\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill mr-3 action-button\"\r\n [disabled]=\"this.working || form.invalid\">{{'Create organisation' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" [disabled]=\"this.working\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\r\n </div>\r\n <div style='margin-top: 1rem'>\r\n <h4>{{ 'User Personal Information' | translate }}</h4>\r\n </div>\r\n <ngb-alert type=\"warning\" [dismissible]=\"false\">{{'Please create new organisation first' | translate}}\r\n </ngb-alert>\r\n\r\n </ng-template>\r\n\r\n\r\n </form>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormGroup, FormBuilder, AbstractControl } from '@angular/forms';\r\nimport { Organisation, OrganisationService, removeNullKeysFromObject } from 'ngx-smarterplan-core';\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\n@Component({\r\n selector: 'lib-detail-organisation',\r\n templateUrl: './detail-organisation.component.html',\r\n styleUrls: ['./detail-organisation.component.scss']\r\n})\r\nexport class DetailOrganisationComponent implements OnInit {\r\n @Input() org: Organisation;\r\n\r\n @Input() currentOrg: Organisation;\r\n\r\n @Input() isSP: boolean;\r\n\r\n @Output() orgChanged = new EventEmitter<boolean>();\r\n\r\n myOrg: boolean;\r\n\r\n tokenExpired: boolean;\r\n\r\n loading = false;\r\n\r\n connectingStripe = false;\r\n\r\n modalRef;\r\n\r\n errorMessage: string;\r\n\r\n editForm: FormGroup;\r\n\r\n constructor(\r\n private organisationService: OrganisationService,\r\n // private localStripe: StripeService,\r\n private formBuilder: FormBuilder,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.myOrg = this.currentOrg.id === this.org.id;\r\n if (!this.org.connectedAccountStripeID && (this.myOrg || this.isSP)) {\r\n this.setConnectStripeLink();\r\n }\r\n }\r\n\r\n ngOnChanges() {\r\n this.myOrg = this.currentOrg.id === this.org.id;\r\n }\r\n\r\n async onToken() {\r\n const token = uuidv4();\r\n const expires = new Date();\r\n expires.setDate(expires.getDate() + 7); // 7 days expiration\r\n this.org = await this.organisationService.updateOrganisation({\r\n id: this.org.id,\r\n shareToken: token,\r\n tokenExpiresAt: expires.getTime(),\r\n });\r\n this.orgChanged.emit(true);\r\n }\r\n\r\n prettifyToken(): string {\r\n const expirationDate = new Date(this.org.tokenExpiresAt);\r\n const diffTime = expirationDate.getTime() - Date.now();\r\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\r\n const expirationString =\r\n diffTime < 0 ? \"expired!\" : `expires in ${diffDays} days`;\r\n return `${this.org.shareToken.slice(0, 6)}... ${expirationString}`;\r\n }\r\n\r\n /**\r\n * Created New Stripe Account and launches onboarding procedure (mail, phone, business details..) by Stripe\r\n * @returns null\r\n */\r\n // async onCreateStripe() {\r\n // this.loading = true;\r\n // // Make the request\r\n // const responseAccount = await API.post(\r\n // \"stripeApi\",\r\n // \"/create/account\",\r\n // {},\r\n // );\r\n // console.log(responseAccount);\r\n // if (responseAccount.err) {\r\n // this.handleStripeError(responseAccount);\r\n // return;\r\n // }\r\n\r\n // const { account } = responseAccount;\r\n // // save account id to organisation\r\n // await this.organisationService.update({\r\n // id: this.org.id,\r\n // connectedAccountStripeID: account.id,\r\n // stripeOnBoardingCompleted: false,\r\n // });\r\n\r\n // const { origin } = document.location;\r\n // const responseAccountLinks = await this.localStripe.createAccountLink(\r\n // account.id,\r\n // origin,\r\n // );\r\n // if (responseAccountLinks.err) {\r\n // this.handleStripeError(responseAccountLinks);\r\n // return;\r\n // }\r\n // window.location.href = responseAccountLinks.accountLinks.url;\r\n // this.loading = false;\r\n // }\r\n\r\n // async onCompleteOnboardingStripe() {\r\n // this.loading = true;\r\n // const responseAccountLinks = await this.localStripe.createAccountLink(\r\n // this.org.connectedAccountStripeID,\r\n // origin,\r\n // );\r\n // if (responseAccountLinks.err) {\r\n // this.handleStripeError(responseAccountLinks);\r\n // return;\r\n // }\r\n // window.location.href = responseAccountLinks.accountLinks.url;\r\n // this.loading = false;\r\n // }\r\n\r\n // handleStripeError(stripeResponse) {\r\n // alert(stripeResponse.err.raw.message);\r\n // this.loading = false;\r\n // }\r\n\r\n /**\r\n * Generate link for Launching OAuth connection with Stripe: https://stripe.com/docs/connect/oauth-standard-accounts#integrating-oauth\r\n */\r\n setConnectStripeLink() {\r\n setTimeout(() => {\r\n const hyperlink = document.querySelector(\r\n \"#linkStripe\",\r\n ) as HTMLElement;\r\n if (hyperlink) {\r\n const clientID = \"ca_KQhYOlgR1ipOxLBBQHfQeCLoaySRVD5P\"; // TODO change for live Stripe Account\r\n const { origin } = document.location;\r\n const returnUrl = `${origin}/stripe/redirect`;\r\n hyperlink.setAttribute(\r\n \"href\",\r\n `https://connect.stripe.com/oauth/authorize?response_type=code&client_id=${clientID}&scope=read_write&redirect_uri=${returnUrl}&state=${this.org.id}`,\r\n );\r\n }\r\n }, 200); // wait until the element is rendered\r\n }\r\n\r\n /** Edit */\r\n onEdit() {\r\n this.editForm = this.formBuilder.group({\r\n id: this.org.id,\r\n name: this.org.name,\r\n siret: this.org.siret,\r\n city: this.org.city,\r\n address: this.org.address,\r\n contactDetails: this.org.contactDetails,\r\n postal: this.org.postal,\r\n });\r\n }\r\n\r\n get name(): AbstractControl {\r\n return this.editForm.get(\"name\");\r\n }\r\n\r\n async onSubmit() {\r\n const formValue = this.editForm.value;\r\n removeNullKeysFromObject(formValue);\r\n try {\r\n const updatedOrg =\r\n await this.organisationService.updateOrganisation(formValue);\r\n this.org = updatedOrg;\r\n } catch (error) {\r\n console.error(JSON.stringify(error));\r\n }\r\n this.editForm = null;\r\n }\r\n\r\n onCancel() {\r\n this.editForm = null;\r\n }\r\n}\r\n","<div>\r\n <h5>{{'Organisation Details' | translate }}</h5>\r\n <div *ngIf=\"!editForm\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{ org.name }}</li>\r\n\r\n <li class=\"list-group-item bg-transparent\">{{'SIRET' | translate }}: {{\r\n org.siret ? org.siret : (\"No data\" | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate }}: {{\r\n org.address ? org.address : (\"No data\" | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'City' | translate }}: {{org.city }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Contact information' | translate}}:\r\n {{ org.contactDetails ? org.contactDetails : (\"No data\" | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"isSP\">\r\n <div class=\"row ml-0\">\r\n <div>\r\n {{'Active token' | translate }}:\r\n {{ org.shareToken ? prettifyToken() : ('No' | translate) }}\r\n </div>\r\n <div *ngIf=\"org.shareToken && !tokenExpired\" ngxClipboard [cbContent]=\"org.shareToken\"\r\n [style.cursor]=\"'pointer'\" style=\"margin-left: 5px; max-width: 20px;\" ngbTooltip=\"Copied!\"\r\n triggers=\"click:blur\">\r\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\r\n data-height=\"20\"></span>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n <div class=\"action-button-container\">\r\n <button class=\"btn btn-outline-primary rounded-pill mt-2 ml-3 action-button\" *ngIf=\"isSP || myOrg\"\r\n (click)=\"onEdit()\">\r\n {{'Edit' | translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill mt-2 ml-3 action-button\" *ngIf=\"isSP\"\r\n (click)=\"onToken()\">{{'Generate\r\n token' | translate}}</button>\r\n </div>\r\n </div>\r\n\r\n <!--Edit Form-->\r\n <div *ngIf=\"editForm\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"editForm\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && name.touched\" required\r\n formControlName=\"name\">\r\n <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Contact information' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"contactDetails\"\r\n placeholder=\"{{'Name, phone, email' | translate}}\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"address\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'City' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"city\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Postal code' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"postal\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'SIRET' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"siret\">\r\n </div>\r\n </div>\r\n <div class=\"action-button-container\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n [disabled]=\"editForm.invalid\">{{'Save' |\r\n translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' |\r\n translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <!--Loading-->\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n\r\n <!--Stripe-->\r\n <hr>\r\n <h5>{{'stripe.account' | translate }}</h5>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"(isSP || myOrg) && org.connectedAccountStripeID\">\r\n {{'stripe.connected' | translate }}: {{org.connectedAccountStripeID.substring(0, 15) }}...</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"(isSP || myOrg) && org.stripeOnBoardingCompleted !== null\">\r\n {{'stripe.completed' | translate }}: {{org.stripeOnBoardingCompleted }}</li>\r\n </ul>\r\n <!-- <a *ngIf=\"(myOrg || isSP) && !org.connectedAccountStripeID\" id=\"linkStripe\" \r\n class=\"ml-3 stripe-connect\"><span>Connect with</span>\r\n </a>\r\n <button class=\"btn btn-outline-primary rounded-pill mt-3 mb-3 ml-3 no-lowercase\"\r\n *ngIf=\"(myOrg || isSP) && org.connectedAccountStripeID && !org.stripeOnBoardingCompleted\"\r\n (click)=\"onCompleteOnboardingStripe()\">{{'stripe.toComplete' | translate}}</button> -->\r\n\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport {\r\n BaseUserService,\r\n Domain,\r\n DomainService,\r\n DomainType,\r\n filterUniqueArrayByID,\r\n Mission,\r\n MissionService,\r\n Organisation,\r\n OrganisationService,\r\n Profile,\r\n ProfileEntity,\r\n} from 'ngx-smarterplan-core';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { GuestLinkComponent } from '../guest-link/guest-link.component';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'lib-user',\r\n templateUrl: './user.component.html',\r\n styleUrls: ['./user.component.scss'],\r\n})\r\nexport class UserComponent implements OnInit {\r\n users: Array<Mission & { name: string }>;\r\n\r\n detailsUser = '-1';\r\n\r\n detailsOrg = '-1';\r\n\r\n query = '';\r\n\r\n create = false;\r\n\r\n edit = false;\r\n\r\n working = false;\r\n\r\n createForExistingUser = false;\r\n\r\n isAddingOrg = false;\r\n\r\n isAddingToExistingOrg = false;\r\n\r\n userForAddingMission: ProfileEntity;\r\n\r\n currentOrg: Organisation;\r\n\r\n me: ProfileEntity;\r\n\r\n isManager = false;\r\n\r\n hideList = false;\r\n\r\n orgsUsersMissions: Array<{\r\n org: Organisation;\r\n users: Array<{\r\n missions: Mission[];\r\n user: ProfileEntity;\r\n }>;\r\n }> = [];\r\n\r\n missionToEdit: Mission;\r\n\r\n isSP = false;\r\n\r\n isGuide = false;\r\n\r\n clientsSP: string[] = [];\r\n\r\n prestataireClients: Array<{ orgOwner: string; prestataire: string }> = [];\r\n\r\n domains: Domain[];\r\n\r\n addToOrg: Organisation;\r\n\r\n orgSelectedDetails: Organisation;\r\n\r\n filteredOrgsUsersMissions: Array<{\r\n org: Organisation;\r\n users: Array<{\r\n missions: Mission[];\r\n user: ProfileEntity;\r\n }>;\r\n }>;\r\n\r\n loading = false;\r\n\r\n private destroy$ = new Subject();\r\n\r\n constructor(\r\n private userService: BaseUserService,\r\n private missionService: MissionService,\r\n private domainService: DomainService,\r\n private organisationService: OrganisationService,\r\n private modalService: NgbModal,\r\n private translate: TranslateService\r\n ) {\r\n this.userService.isChanged\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((isConnected) => {\r\n if (isConnected) {\r\n this.initInfo();\r\n }\r\n });\r\n }\r\n\r\n // @todo list my org and sub orgs\r\n\r\n /**\r\n * resetList fetches a fresh user list from server\r\n */\r\n async resetList() {\r\n this.orgsUsersMissions = [];\r\n let allMissions = [];\r\n this.loading = true;\r\n if (this.isSP) {\r\n this.orgsUsersMissions = await this.initListForSP();\r\n this.filteredOrgsUsersMissions = this.orgsUsersMissions;\r\n this.loading = false;\r\n return;\r\n }\r\n allMissions = await this.missionService.getMissionsByOrderedOrganisation(\r\n this.currentOrg.id\r\n );\r\n const currentOrgMissions =\r\n await this.missionService.getMissionsByOrganisation(this.currentOrg.id);\r\n allMissions = [...allMissions, ...currentOrgMissions];\r\n allMissions = allMissions.filter((mission) => mission.user && !mission.user.deletedAt);\r\n allMissions = filterUniqueArrayByID(allMissions);\r\n\r\n if (allMissions) {\r\n const orgs = allMissions.map((mis) => mis.organisation);\r\n const profiles = allMissions.map((mis) => mis.user);\r\n const uniqueOrg = filterUniqueArrayByID(orgs);\r\n const uniqueUsers = filterUniqueArrayByID(profiles);\r\n uniqueOrg.map((org) => {\r\n const orgMissions = allMissions.filter((mis) => {\r\n return mis.organisationID === org.id;\r\n });\r\n let users = this.getUsersForOrgMissions(uniqueUsers, orgMissions);\r\n users = users.sort((user) => (user.user.email ? 0 : -1));\r\n const object = {\r\n org,\r\n users,\r\n };\r\n this.orgsUsersMissions.push(object);\r\n });\r\n }\r\n this.filteredOrgsUsersMissions = this.orgsUsersMissions;\r\n this.loading = false;\r\n }\r\n\r\n async initInfo() {\r\n const currentUser = this.userService.cu;\r\n if (currentUser) {\r\n this.me = currentUser;\r\n this.currentOrg = this.userService.currentOrganisation();\r\n this.isManager = this.userService.hasManagerRoleInAnyMission();\r\n this.isSP = this.userService.isSPAdmin();\r\n this.isGuide = this.userService.isGuide();\r\n this.resetList();\r\n this.setDomains();\r\n }\r\n }\r\n\r\n async ngOnInit(): Promise<void> {\r\n this.initInfo();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n\r\n async initListForSP(): Promise<any[]> {\r\n const results = [];\r\n let allMissions = [];\r\n let allOrgs = [];\r\n allOrgs = await this.organisationService.listOrganisations();\r\n await Promise.all(\r\n allOrgs.map(async (org) => {\r\n const missions = await this.missionService.getMissionsByOrganisation(\r\n org.id\r\n );\r\n allMissions = [...allMissions, ...missions];\r\n })\r\n );\r\n\r\n const profiles = allMissions\r\n .map((mis) => mis.user)\r\n .filter((user) => !user.deletedAt);\r\n const uniqueUsers = filterUniqueArrayByID(\r\n profiles.filter((profile) => profile !== null)\r\n );\r\n allOrgs.map((org) => {\r\n const orgMissions = allMissions.filter((mis) => {\r\n return mis.organisationID === org.id;\r\n });\r\n\r\n if (orgMissions.length > 0) {\r\n if (\r\n orgMissions.filter(\r\n (m) =>\r\n m.orderedOrganisationID === '6e28201f-4679-4c29-9d2d-8a325f57cee9'\r\n ).length > 0\r\n ) {\r\n this.clientsSP.push(org.id);\r\n } else {\r\n this.prestataireClients.push({\r\n orgOwner: orgMissions[0].orderedOrganisationID,\r\n prestataire: org.id,\r\n });\r\n }\r\n }\r\n const users = this.getUsersForOrgMissions(uniqueUsers, orgMissions);\r\n const object = {\r\n org,\r\n users,\r\n };\r\n results.push(object);\r\n });\r\n return results;\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n getUsersForOrgMissions(\r\n uniqueUsers: Profile[],\r\n orgMissions: Mission[]\r\n ): Array<{\r\n missions: Mission[];\r\n user: ProfileEntity;\r\n }> {\r\n const users = uniqueUsers.map((user) => {\r\n const userMissions = orgMissions.filter((m) => m.userID === user.id);\r\n if (userMissions.length > 0) {\r\n const userProfile = new ProfileEntity(user);\r\n // once we got the user we check filter only active missions (not deleted)\r\n const activeMissions = userMissions.filter((mis) => !mis.deletedAt);\r\n return {\r\n missions: activeMissions,\r\n user: userProfile,\r\n };\r\n }\r\n return null;\r\n });\r\n return users.filter((us) => us !== null);\r\n }\r\n\r\n async setDomains() {\r\n const domains = await this.domainService.getDomainsForOrgExcludingTypes(\r\n [DomainType.FEATURE, DomainType.BOOKING],\r\n this.currentOrg.id\r\n );\r\n this.domains = domains;\r\n }\r\n\r\n /**\r\n * onToggleDetail folds/unfolds details for a given organisation\r\n * @param i index of the organisation to be toggled\r\n */\r\n onToggleDetailOrg(index, org) {\r\n this.detailsOrg = index === this.detailsOrg ? '-1' : index;\r\n this.orgSelectedDetails = this.detailsOrg === '-1' ? null : org;\r\n }\r\n\r\n onToggleDetailUser(index) {\r\n this.detailsUser = index === this.detailsUser ? '-1' : index;\r\n }\r\n\r\n async onAdd(org: Organisation) {\r\n this.create = true;\r\n this.hideList = true;\r\n this.addToOrg = org;\r\n }\r\n\r\n async onEdit(m: Mission) {\r\n this.edit = true;\r\n this.hideList = true;\r\n this.missionToEdit = m;\r\n }\r\n\r\n onCancel() {\r\n this.working = false;\r\n this.create = false;\r\n this.missionToEdit = null;\r\n this.createForExistingUser = false;\r\n }\r\n\r\n onAddForUser(org: Organisation, user: ProfileEntity) {\r\n this.hideList = true;\r\n this.createForExistingUser = true;\r\n this.userForAddingMission = user;\r\n this.addToOrg = org;\r\n }\r\n\r\n onAddOrg() {\r\n this.hideList = true;\r\n this.isAddingOrg = true;\r\n }\r\n\r\n orgAdded(isAdded: boolean) {\r\n this.hideList = false;\r\n this.isAddingOrg = false;\r\n this.isAddingToExistingOrg = false;\r\n if (isAdded) {\r\n this.resetList();\r\n }\r\n }\r\n\r\n userAdded(isAdded: boolean) {\r\n console.log(isAdded);\r\n this.hideList = false;\r\n this.create = false;\r\n this.addToOrg = null;\r\n this.createForExistingUser = false;\r\n this.userForAddingMission = null;\r\n if (isAdded) {\r\n this.resetList();\r\n }\r\n }\r\n\r\n async onMissionEdited(mission: Mission) {\r\n this.edit = false;\r\n this.missionToEdit = null;\r\n if (mission) {\r\n await this.userService.createOrUpdateMissionForOrgWithProperty(\r\n mission,\r\n mission.organisationID,\r\n false\r\n );\r\n this.resetList();\r\n }\r\n this.hideList = false;\r\n }\r\n\r\n async onMissionCreated(mission: Mission) {\r\n this.createForExistingUser = false;\r\n this.userForAddingMission = null;\r\n if (mission) {\r\n await this.userService.createOrUpdateMissionForOrgWithProperty(\r\n mission,\r\n mission.organisationID\r\n );\r\n this.resetList();\r\n }\r\n this.hideList = false;\r\n }\r\n\r\n getOrderedOrg(orgID: string): string | null {\r\n let name;\r\n this.prestataireClients.map(async (presta) => {\r\n if (presta.prestataire === orgID) {\r\n const org = this.orgsUsersMissions.filter(\r\n (object) => object.org.id === presta.orgOwner\r\n );\r\n if (org.length > 0) {\r\n name = org[0].org.name;\r\n }\r\n }\r\n });\r\n return name;\r\n }\r\n\r\n domainIdsToStringForMission(mission: Mission): string {\r\n let names = '';\r\n for (const domainID of mission.domains) {\r\n const domain = this.domains.find((dom) => dom.id === domainID);\r\n if (domain) {\r\n names = `${names} ${domain.name},`;\r\n }\r\n }\r\n return names.slice(0, -1); // to remove last comma\r\n }\r\n\r\n async onDeleteMission(mission: Mission) {\r\n const message = this.translate.instant('confirm.deleteMission');\r\n if (window.confirm(message)) {\r\n await this.missionService.softDeleteMission(mission.id);\r\n this.resetList();\r\n }\r\n }\r\n\r\n async onDeleteUser(user) {\r\n const message = this.translate.instant('confirm.deleteUser');\r\n if (window.confirm(message)) {\r\n const userMissions = await this.missionService.getMissionsFromUserID(\r\n user.id\r\n );\r\n if (userMissions.length > 0) {\r\n const resultDelete = [];\r\n await Promise.all(\r\n userMissions.map(async (mission) => {\r\n if (\r\n mission.orderedOrganisationID === this.currentOrg.id ||\r\n this.isSP\r\n ) {\r\n const deletedMission =\r\n await this.missionService.softDeleteMission(mission.id);\r\n if (deletedMission) {\r\n resultDelete.push(deletedMission);\r\n }\r\n }\r\n })\r\n );\r\n if (resultDelete.length > 0) {\r\n await this.userService.softDeleteUser(user.id);\r\n await this.resetList();\r\n }\r\n } else {\r\n await this.userService.softDeleteUser(user.id);\r\n await this.resetList();\r\n }\r\n }\r\n }\r\n\r\n applyResultsSearchBar(results) {\r\n this.orgSelectedDetails = null;\r\n this.filteredOrgsUsersMissions = results || this.orgsUsersMissions;\r\n }\r\n\r\n onAddInExistingOrg() {\r\n this.hideList = true;\r\n this.isAddingToExistingOrg = true;\r\n }\r\n\r\n /**\r\n * Creates encypted link and sets it for guestLink for Space.\r\n * @param mis\r\n */\r\n onSetForShareableLink(user: ProfileEntity, mission: Mission) {\r\n const modalReference = this.modalService.open(GuestLinkComponent);\r\n modalReference.componentInstance.username = user.email;\r\n modalReference.componentInstance.spaceID = mission.spaceID;\r\n }\r\n\r\n async onClearToken(user) {\r\n await this.userService.clearUserToken(user.user.id);\r\n const firstMessage = this.translate.instant('firstTokenMessage');\r\n const secondMessage = this.translate.instant('secondTokenMessage');\r\n alert(firstMessage + user.user.displayName + secondMessage);\r\n }\r\n}\r\n","<div class=\"dashboard-tab\">\r\n <div class=\"header-dashboard-tab\">\r\n <h3>{{'Users' | translate}}</h3>\r\n <!-- <app-search-bar *ngIf=\"!hideList\" [searchable]=\"orgsUsersMissions\" objectType=\"USER\"\r\n (searchEvent)=\"applyResultsSearchBar($event)\">\r\n </app-search-bar> -->\r\n <hr>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-8 col-lg-6\">\r\n <div class=\"row ml-0 mb-2\" *ngIf=\"!hideList\">\r\n <button class=\"btn btn-outline-primary rounded-pill add-button\" *ngIf=\"isManager && !isGuide\" (click)=\"onAddOrg()\">\r\n {{'Add user to new organisation' | translate}}</button>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div *ngIf=\"!hideList\">\r\n <ul class=\"list-group list-group-flush\" *ngIf=\"filteredOrgsUsersMissions\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let o of filteredOrgsUsersMissions\">\r\n <div class=\"d-flex justify-content-between align-items-center font-weight-bold\"\r\n ngbTooltip=\"See details and users\" style=\"cursor: pointer;\" (click)=\"onToggleDetailOrg(o.org.id, o.org)\">\r\n {{o.org.name}} <small *ngIf=\"o.org.id == currentOrg.id\">({{'My organisation' | translate}})</small>\r\n <small *ngIf=\"isSP && clientsSP.includes(o.org.id)\">({{'Client of SmarterPlan' | translate}})</small>\r\n <small *ngIf=\"isSP && getOrderedOrg(o.org.id)\">({{'Client of ' | translate}}\r\n {{getOrderedOrg(o.org.id)}})</small>\r\n <lib-chevron [conditionShowing]=\"detailsOrg==o.org.id\"></lib-chevron>\r\n </div>\r\n <div class=\"missions\" *ngIf=\"detailsOrg==o.org.id\">\r\n <div class='d-flex'>\r\n <button class=\"btn btn-outline-primary rounded-pill mt-3 mb-3\" (click)=\"onAdd(o.org)\">{{'Add user' |\r\n translate}}</button>\r\n </div>\r\n\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let a of o.users\"\r\n (click)=\"onToggleDetailUser(a.user.id)\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n {{a.user.displayName}}\r\n <lib-chevron [conditionShowing]=\"detailsUser==a.user.id\"></lib-chevron>\r\n </div>\r\n\r\n <div *ngIf=\"detailsUser==a.user.id\">\r\n <div class=\"ml-3\">\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n {{'Email' | translate}}: {{a.user.email }}\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\"\r\n (click)=\"onAddForUser(o.org, a.user)\">{{'Add new mission' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\" (click)=\"onClearToken(a)\">\r\n {{'Clear Token' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill\"\r\n (click)=\"onDeleteUser(a.user)\">{{'Delete user' | translate}}</button>\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n {{ a.missions.length > 0 ? ('Current Missions' | translate) : ('No missions' | translate)}}\r\n </div>\r\n </div>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let mis of a.missions\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.description\">\r\n {{'Description' | translate}}: {{mis.description}}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.templateMissionID\">\r\n {{'Attendee of tour' | translate}}: {{mis.templateMission.title}}</li>\r\n\r\n <li class=\"list-group-item bg-transparent\">{{'Role' | translate}}: {{ mis.role }}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.hashtags && mis.hashtags.length> 0\">\r\n {{'Hashtags' | translate}}: <ul class=\"keywordsDisplay no-border\">\r\n <div class=\"keywordsdisplayContainer\">\r\n <li class=\"keywordsItem\" *ngFor=\"let hashtag of mis.hashtags\">\r\n {{ hashtag | hashtagFromID | async }}</li>\r\n </div>\r\n </ul>\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Language' | translate }}: {{\r\n mis.locale ? mis.locale : ('Not applicable' | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate }}: {{\r\n mis.level}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Ordered by' | translate }}: {{\r\n mis.orderedOrganisation.name}}</li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"mis.domains\">{{'Domains' | translate }}:\r\n {{mis.domains ?\r\n domainIdsToStringForMission(mis) : (\"No data\" | translate) }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Authorized location' | translate }}:\r\n {{ mis.space ? mis.space.name : \"No location\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Authorized zone' | translate }}:\r\n {{ mis.zone ? mis.zone.name : \"All zones allowed\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Starts' | translate }}:\r\n {{ mis.startDateTime ? (mis.startDateTime | timeDateString: \"day_time_zone\" | async) :\r\n \"No data\" | translate}}, {{'Ends' | translate}}: {{ mis.endDateTime\r\n ? (mis.endDateTime | timeDateString: \"day_time_zone\" | async)\r\n : \"No data\" | translate}}.\r\n </li>\r\n </ul>\r\n <div class=\"action-button-container\">\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill mr-2 action-button\"\r\n (click)=\"onEdit(mis)\">{{'Edit' |\r\n translate}}</button>\r\n <button type=\"button\" *ngIf=\"mis.role === 'VISITOR' || mis.role === 'VISITOR_MUSEUM'\"\r\n class=\"btn btn-outline-primary rounded-pill mr-2 action-button share-visitor-button\"\r\n (click)=\"onSetForShareableLink(a.user, mis)\">{{'Generate Shareable Link' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n (click)=\"onDeleteMission(mis)\">{{'Delete' | translate}}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div *ngIf=\"create\">\r\n <lib-user-mission-form [addToOrganisation]=\"addToOrg\" [currentOrg]=\"currentOrg\" [isSP]=\"isSP\"\r\n (added)=\"userAdded($event)\">\r\n </lib-user-mission-form>\r\n </div>\r\n <div *ngIf=\"edit\">\r\n <lib-form-mission [missionToEdit]=\"missionToEdit\" [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\"\r\n (addedMissionInput)=\"onMissionEdited($event)\"></lib-form-mission>\r\n </div>\r\n <div *ngIf=\"createForExistingUser\">\r\n <lib-form-mission [organisationForMission]=\"addToOrg\" [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\"\r\n [userForMissionID]=\"userForAddingMission.id\" (addedMissionInput)=\"onMissionCreated($event)\">\r\n </lib-form-mission>\r\n </div>\r\n <div *ngIf=\"isAddingOrg || isAddingToExistingOrg\">\r\n <lib-form-organisation [currentOrg]=\"currentOrg\" [currentUser]=\"me\" [existing]=\"isAddingToExistingOrg\"\r\n (added)=\"orgAdded($event)\"></lib-form-organisation>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-4 col-lg-6\" *ngIf=\"orgSelectedDetails && !isGuide\">\r\n <lib-detail-organisation [org]=\"orgSelectedDetails\" [currentOrg]=\"currentOrg\" [isSP]=\"isSP\"\r\n (orgChanged)='orgAdded($event)'></lib-detail-organisation>\r\n </div>\r\n </div>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Organisation, LevelStatus, Zone, Space, Hashtag, Locale, BaseUserService, SpaceService, ZoneService, stringLocaleToEnum, enumToArray, RoleStatus, sortAlphabeticallyOnName, HashtagService, Mission, VisitTemplate, TemplateService } from 'ngx-smarterplan-core';\r\nimport { DateTime } from \"luxon\";\r\nimport { Location } from '@angular/common';\r\nimport { Input } from '@angular/core';\r\nimport { Output } from '@angular/core';\r\nimport { EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-template',\r\n templateUrl: './template.component.html',\r\n styleUrls: ['./template.component.scss']\r\n})\r\nexport class TemplateComponent implements OnInit {\r\n @Input() currentOrg: Organisation;\r\n\r\n @Input() editTemplate: VisitTemplate;\r\n\r\n @Input() zoneID: string;\r\n\r\n @Output() updatedTemplate = new EventEmitter<VisitTemplate>();\r\n\r\n @Output() createdTemplate = new EventEmitter<VisitTemplate>();\r\n\r\n form: FormGroup;\r\n\r\n working = false;\r\n\r\n startDate: number;\r\n\r\n endDate: number;\r\n\r\n zonesForSpace: Zone[];\r\n\r\n availableLevels: LevelStatus[];\r\n\r\n availableSpaces: Space[];\r\n\r\n missionTimeStart: number = 12 * 60 * 60000; // midday in milliseconds\r\n\r\n missionTimeEnd: number = 12 * 60 * 60000;\r\n\r\n inputZone: Zone;\r\n\r\n availableHashtags: Hashtag[] = [];\r\n\r\n addedHashtags: Hashtag[] = [];\r\n\r\n currentLocale: Locale;\r\n\r\n locales: string[];\r\n\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private fb: FormBuilder,\r\n private userService: BaseUserService,\r\n private spaceService: SpaceService,\r\n private zoneService: ZoneService,\r\n private location: Location,\r\n private hashtagService: HashtagService,\r\n private translate: TranslateService,\r\n private templateService: TemplateService,\r\n ) {\r\n this.userService.isChanged.subscribe(() => {\r\n this.updateUserInfo();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.setup();\r\n const lang = this.translate.currentLang\r\n ? this.translate.currentLang\r\n : this.translate.defaultLang;\r\n\r\n /** Transforme '_fr' to 'fr' */\r\n this.currentLocale = stringLocaleToEnum(lang.slice(1)); // to match enum Locale\r\n this.locales = enumToArray(Locale);\r\n }\r\n\r\n async setup() {\r\n this.initForm();\r\n if (this.zoneID) {\r\n this.inputZone = await this.zoneService.getZone(this.zoneID);\r\n await this.setHashtags(this.inputZone.spaceID);\r\n }\r\n if (this.editTemplate) {\r\n // we are editing a template\r\n this.onSpaceClick();\r\n }\r\n await this.updateUserInfo();\r\n\r\n }\r\n\r\n async updateUserInfo() {\r\n if (this.userService.cu) {\r\n this.availableLevels =\r\n this.userService.getAvalableLevelsForCurrentUser();\r\n this.currentOrg = this.userService.currentOrganisation();\r\n this.availableSpaces = await this.spaceService.getSpacesForOrg(\r\n this.currentOrg.id,\r\n );\r\n }\r\n }\r\n\r\n initForm() {\r\n if (this.editTemplate) {\r\n this.form = this.fb.group({\r\n title: [this.editTemplate.title],\r\n level: [this.editTemplate.level],\r\n organisationID: [this.editTemplate.organisationID],\r\n space: [this.editTemplate.spaceID],\r\n description: [this.editTemplate.description],\r\n zone: [\r\n this.editTemplate.zoneID,\r\n Validators.required,\r\n ],\r\n locale: [this.editTemplate.locale],\r\n });\r\n if (this.editTemplate.startDateTime) {\r\n const date = DateTime.fromISO(this.editTemplate.startDateTime);\r\n this.missionTimeStart = (date.hour * 60 + date.minute) * 60 * 1000;\r\n this.startDate = date.toMillis() - this.missionTimeStart;\r\n }\r\n if (this.editTemplate.endDateTime) {\r\n const date = DateTime.fromISO(this.editTemplate.endDateTime);\r\n this.missionTimeEnd = (date.hour * 60 + date.minute) * 60 * 1000;\r\n this.endDate = date.toMillis() - this.missionTimeEnd;\r\n }\r\n } else {\r\n this.form = this.fb.group({\r\n title: [\"\"],\r\n level: [LevelStatus.MINIMUM],\r\n organisationID: this.currentOrg.id,\r\n space: this.inputZone ? this.inputZone.spaceID : [null],\r\n description: [null],\r\n zone: [\r\n this.inputZone ? this.inputZone.id : null,\r\n Validators.required,\r\n ],\r\n locale: [this.currentLocale],\r\n });\r\n }\r\n\r\n }\r\n\r\n async onSubmit() {\r\n this.working = true;\r\n const formValue = this.form.getRawValue();\r\n let startDateString: string;\r\n let endDateString: string;\r\n if (this.startDate) {\r\n const dateHourStartNumber = this.startDate + this.missionTimeStart;\r\n const startDate = DateTime.fromMillis(dateHourStartNumber);\r\n startDateString = startDate.toISO();\r\n }\r\n if (this.endDate) {\r\n const dateHourEndNumber = this.endDate + this.missionTimeEnd;\r\n const endDate = DateTime.fromMillis(dateHourEndNumber);\r\n endDateString = endDate.toISO();\r\n }\r\n try {\r\n if (this.editTemplate) {\r\n // update\r\n const template: VisitTemplate = {\r\n id: this.editTemplate.id,\r\n title: formValue.title,\r\n level: formValue.level,\r\n description: formValue.description,\r\n organisationID: formValue.organisationID,\r\n startDateTime: startDateString,\r\n endDateTime: endDateString,\r\n hashtags: this.addedHashtags.map((hashtag) => hashtag.id),\r\n locale: formValue.locale,\r\n };\r\n if (formValue.space) {\r\n template.spaceID = formValue.space;\r\n }\r\n if (formValue.zone) {\r\n template.zoneID = formValue.zone;\r\n }\r\n this.updatedTemplate.emit(template);\r\n } else {\r\n //create\r\n if (this.currentOrg) {\r\n const template: VisitTemplate = {\r\n title: formValue.title,\r\n organisationID: this.currentOrg.id,\r\n level: formValue.level,\r\n description: formValue.description,\r\n startDateTime: startDateString,\r\n endDateTime: endDateString,\r\n hashtags: this.addedHashtags.map((hashtag) => hashtag.id),\r\n locale: formValue.locale,\r\n };\r\n if (formValue.space) {\r\n template.spaceID = formValue.space;\r\n }\r\n if (formValue.zone) {\r\n template.zoneID = formValue.zone;\r\n }\r\n this.createdTemplate.emit(template);\r\n }\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n\r\n onCancel() {\r\n this.form = null;\r\n if (this.editTemplate) {\r\n this.updatedTemplate.emit(null);\r\n } else {\r\n this.createdTemplate.emit(null);\r\n }\r\n }\r\n\r\n get title(): AbstractControl {\r\n return this.form.get(\"title\");\r\n }\r\n\r\n get spaceID(): AbstractControl {\r\n return this.form.get(\"space\");\r\n }\r\n\r\n async onSpaceClick() {\r\n const zones = await this.zoneService.getZonesBySpace(\r\n this.spaceID.value,\r\n );\r\n const museumZones = zones.filter((zone) => zone.isMuseumVisitZone);\r\n this.zonesForSpace = sortAlphabeticallyOnName(museumZones);\r\n await this.setHashtags(this.spaceID.value);\r\n }\r\n\r\n onHashtagClick(hashtag: Hashtag) {\r\n if (!this.addedHashtags.includes(hashtag)) {\r\n this.addedHashtags.push(hashtag);\r\n } else {\r\n this.addedHashtags.splice(this.addedHashtags.indexOf(hashtag), 1);\r\n }\r\n }\r\n\r\n async setHashtags(spaceID: string) {\r\n this.availableHashtags = await this.hashtagService.getHashtagsForSpace(\r\n spaceID,\r\n );\r\n }\r\n}\r\n","<div class=\"form-container\" *ngIf=\"form\">\r\n <div>\r\n <h4>{{ 'Visit Template' | translate }}</h4>\r\n </div>\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n <div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Visit Title' | translate}} *</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\"\r\n placeholder=\"Edvard Munch - « Un poème d’amour, de vie et de mort »\"\r\n [class.is-invalid]=\"title.invalid && title.touched\" required\r\n formControlName=\"title\">\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Description' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <textarea class=\"form-control\" formControlName=\"description\" style=\"height:200px\"\r\n placeholder=\"Cette visite d’1h30 vous présentera les œuvres emblématiques du célèbre peintre norvégien Edvard Munch (1863-1944)...\"></textarea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Language' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <select class=\"form-control\" formControlName=\"locale\">\r\n <option [ngValue]=\"null\">{{'Not applicable' | translate}}</option>\r\n <option *ngFor=\"let locale of locales\" [ngValue]=\"locale\">\r\n {{ locale }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Level' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <select class=\"form-control\" required formControlName=\"level\">\r\n <option *ngFor=\"let level of availableLevels\" [ngValue]=\"level\">\r\n {{ level }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{ 'Authorized location' | translate }}*</label>\r\n <div class=\"col-sm-8\" *ngIf=\"availableSpaces && !inputZone\">\r\n <select class=\"form-control\" required formControlName=\"space\" (change)=\"onSpaceClick()\">\r\n <option *ngFor=\"let space of availableSpaces\" [ngValue]=\"space.id\">\r\n {{ space.name }}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"col-sm-8\" *ngIf=\"!availableSpaces\">\r\n {{ 'No locations available' | translate}}\r\n </div>\r\n <div class=\"col-sm-8\" *ngIf=\"inputZone\">\r\n <input type=\"text\" class=\"form-control\" [value]=\"inputZone.space.name\" disabled>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{ 'Authorized zone' | translate }}*</label>\r\n <div class=\"col-sm-8\" *ngIf=\"zonesForSpace && zonesForSpace.length > 0 && !inputZone\">\r\n <select class=\"form-control\" required formControlName=\"zone\">\r\n <option *ngFor=\"let zone of zonesForSpace\" [ngValue]=\"zone.id\">\r\n {{ zone.name }}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"col-sm-8\" *ngIf=\"zonesForSpace && zonesForSpace.length === 0 && !inputZone\">\r\n <p class=\"warning col-form-label\">{{\"No Museum Zones found for this location\"| translate}}</p>\r\n </div>\r\n <div class=\"col-sm-8\" *ngIf=\"inputZone\">\r\n <input type=\"text\" class=\"form-control\" [value]=\"inputZone.name\" disabled>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Hashtags' | translate}}</label>\r\n <div class=\"col-sm-8\" *ngIf=\"spaceID.value\">\r\n <p class=\"keywordsRules\" *ngIf=\"availableHashtags.length > 0\">{{'Available hashtags' | translate}}\r\n </p>\r\n <p class=\"keywordsRules\" *ngIf=\"availableHashtags.length === 0\">{{'No hashtags created for this\r\n location' | translate}} </p>\r\n <div *ngIf=\"availableHashtags.length > 0\">\r\n <ul class=\"keywordsDisplay no-border\">\r\n <div class=\"keywordsdisplayContainer\">\r\n <li [class]=\"addedHashtags.includes(hashtag) ? 'keywordsItem added' : 'keywordsItem'\"\r\n *ngFor=\"let hashtag of availableHashtags\" (click)=\"onHashtagClick(hashtag)\"\r\n style=\"cursor: pointer;\"\r\n ngbTooltip=\"{{addedHashtags.includes(hashtag) ? ('Remove'|translate) : ('Add'|translate) }}\">\r\n {{hashtag.name}}</li>\r\n </div>\r\n </ul>\r\n <p class=\"keywordsRules\">{{'Added hashtags' | translate}} </p>\r\n <ul class=\"keywordsDisplay\">\r\n <div class=\"keywordsdisplayContainer\" *ngIf=\"addedHashtags.length> 0\">\r\n <li class=\"keywordsItem\" *ngFor=\"let hashtag of addedHashtags\">{{ hashtag.name }}</li>\r\n </div>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-8\" *ngIf=\"!spaceID.value\">\r\n <p class=\"keywordsRules\">{{'You need to choose the location first' | translate}} </p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Start Date' | translate}}</label>\r\n <div class=\"input-group col-sm-8\">\r\n <input class=\"form-control\" placeholder=\"dd/mm/yyyy\" [(ngModel)]=\"startDate\" ngbDatepicker\r\n #d1=\"ngbDatepicker\" [ngModelOptions]=\"{standalone: true}\">\r\n <div class=\"input-group-append\">\r\n <button class=\"btn btn-outline-secondary calendar\" (click)=\"d1.toggle()\" type=\"button\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Start Time' | translate}}</label>\r\n <div class=\"input-group col-sm-8\">\r\n <ngb-timepicker [(ngModel)]=\"missionTimeStart\" [ngModelOptions]=\"{standalone: true}\">\r\n </ngb-timepicker>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'End Date' | translate}}</label>\r\n <div class=\"input-group col-sm-8\">\r\n <input class=\"form-control\" placeholder=\"dd/mm/yyyy\" [(ngModel)]=\"endDate\" ngbDatepicker\r\n #d2=\"ngbDatepicker\" [ngModelOptions]=\"{standalone: true}\">\r\n <div class=\"input-group-append\">\r\n <button class=\"btn btn-outline-secondary calendar\" (click)=\"d2.toggle()\" type=\"button\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'End Time' | translate}}</label>\r\n <div class=\"input-group col-sm-8\">\r\n <ngb-timepicker [(ngModel)]=\"missionTimeEnd\" [ngModelOptions]=\"{standalone: true}\"></ngb-timepicker>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"btn-control-div action-button-container\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n [disabled]=\"this.working || form.invalid\">{{'Save' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" [disabled]=\"this.working\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\r\n </div>\r\n\r\n </form>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Mission, MissionService, BaseUserService, Profile, validEmail, VisitTemplate, RoleStatus } from 'ngx-smarterplan-core';\r\nimport * as Papa from 'papaparse';\r\n\r\n@Component({\r\n selector: 'lib-create-batch',\r\n templateUrl: './create-batch.component.html',\r\n styleUrls: ['./create-batch.component.scss']\r\n})\r\nexport class CreateBatchComponent implements OnInit {\r\n @Input() template: VisitTemplate;\r\n\r\n @Output() createdMissions = new EventEmitter<Mission[]>();\r\n\r\n addedEmails: string[] = [];\r\n\r\n csvFile: File;\r\n\r\n working = false;\r\n\r\n constructor(\r\n private missionService: MissionService,\r\n private userService: BaseUserService,\r\n private translate: TranslateService,\r\n ) {}\r\n\r\n ngOnInit(): void {}\r\n\r\n onAddEmail(value: string) {\r\n if (value) {\r\n if (validEmail(value)) {\r\n this.addedEmails.push(value);\r\n } else {\r\n alert(\"Please, enter a valid email address\");\r\n }\r\n }\r\n }\r\n\r\n onDelete(index) {\r\n this.addedEmails.splice(index, 1);\r\n }\r\n\r\n onCancel() {\r\n this.createdMissions.emit(null);\r\n }\r\n\r\n async onCreateMissions() {\r\n const createdMissions = [];\r\n let user: Profile;\r\n this.working = true;\r\n await Promise.all(\r\n this.addedEmails.map(async (mail) => {\r\n user = await this.userService.profileForMail(mail);\r\n if (!user) {\r\n try {\r\n const profile =\r\n await this.userService.createUserAWSandProfile(\r\n {\r\n email: mail,\r\n lastName: mail,\r\n firstName: \"\",\r\n phone: \"\",\r\n },\r\n true,\r\n );\r\n user = profile;\r\n } catch (error) {\r\n alert(\r\n `Error creating users: ${this.translate.instant(\r\n error as string,\r\n )}`,\r\n );\r\n this.working = false;\r\n return;\r\n }\r\n }\r\n if (user) {\r\n const missionInput: Mission = {\r\n organisationID: this.template.organisationID,\r\n orderedOrganisationID: this.template.organisationID,\r\n level: this.template.level,\r\n role: RoleStatus.VISITOR_MUSEUM,\r\n description: \"Generated from template\",\r\n userID: user.id,\r\n startDateTime: this.template.startDateTime,\r\n endDateTime: this.template.endDateTime,\r\n spaceID: this.template.spaceID,\r\n zoneID: this.template.zoneID,\r\n templateMissionID: this.template.id,\r\n hashtags: this.template.hashtags,\r\n };\r\n const mission = await this.missionService.create(\r\n missionInput,\r\n );\r\n createdMissions.push(mission);\r\n }\r\n }),\r\n );\r\n this.working = false;\r\n this.createdMissions.emit(createdMissions);\r\n this.addedEmails = [];\r\n }\r\n\r\n async handleFileInput(eventTarget: any) {\r\n const files= eventTarget.files;\r\n const uploaded = files.item(0);\r\n if (uploaded.name.includes(\".csv\")) {\r\n Papa.parse(uploaded, {\r\n complete: function onComplete(results) {\r\n for (const mail of results.data) {\r\n this.addedEmails.push(mail[0]);\r\n }\r\n console.log(this.addedEmails);\r\n // eslint-disable-next-line no-extra-bind\r\n }.bind(this),\r\n });\r\n } else {\r\n alert(\"Not a csv file\");\r\n }\r\n }\r\n\r\n}\r\n","<div>\r\n <h4>{{'Add email address' | translate}}</h4>\r\n <div class=\"row\">\r\n <input class=\"form-control custom-form\" #box (keyup.enter)=\"onAddEmail(box.value); box.value=''\"\r\n placeholder=\"me@example.com\">\r\n <div class=\"outer_circle\" style='margin-left: 1.1em;'>\r\n <button id='btn-icon' (click)=\"onAddEmail(box.value); box.value=''\"></button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-3\">\r\n <label for=\"file\" class=\"btn btn-label-file rounded-pill\">\r\n <input type=\"file\" id=\"file\" (change)=\"handleFileInput($event.target)\" />\r\n {{'Upload from csv' | translate}}</label>\r\n </div>\r\n\r\n <ul *ngIf=\"addedEmails.length > 0\">\r\n <li class=\"list_item\" *ngFor=\"let mail of addedEmails; index as index\">{{mail}}\r\n <div class=\"icon-container\" (click)=\"onDelete(index)\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </li>\r\n </ul>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"working\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div class=\"row action-button-container\">\r\n <button class=\"btn btn-outline-primary rounded-pill mr-2 mt-3 action-button\" (click)=\"onCreateMissions()\">\r\n {{'Create users' | translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill mr-2 mt-3 action-button\" (click)=\"onCancel()\">\r\n {{'Cancel' | translate}}</button>\r\n </div>\r\n\r\n</div>","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport {\r\n Mission, Zone, Organisation, BaseUserService, MissionService,\r\n SpaceService, ZoneService, RoleStatus, ProfileEntity, EmailStatus, TemplateService, VisitTemplate, sortAlphabeticallyOnName\r\n} from 'ngx-smarterplan-core';\r\n\r\n@Component({\r\n selector: 'lib-visitor',\r\n templateUrl: './visitor.component.html',\r\n styleUrls: ['./visitor.component.scss']\r\n})\r\nexport class VisitorComponent implements OnInit {\r\n @ViewChild(\"deleteUsers\") modal;\r\n\r\n chosenTemplate: VisitTemplate;\r\n\r\n allOrderedMissions: Mission[];\r\n\r\n currentOrg: Organisation;\r\n\r\n templateToEdit: VisitTemplate;\r\n\r\n editing = false;\r\n\r\n creating = false;\r\n\r\n zoneIDForNewTemplate: string;\r\n\r\n isAddingBatch = false;\r\n\r\n allZoneTemplatesMap: Map<Zone, VisitTemplate[]> = new Map(); // zone=>its templates\r\n\r\n allZoneTemplatesMapFiltered: Map<Zone, VisitTemplate[]>;\r\n\r\n allTemplateMissionsMap: Map<string, Mission[]> = new Map(); // templateID, its derived Missions\r\n\r\n detailsForZones: string[] = [];\r\n\r\n csvHeaders = [\r\n \"email\",\r\n \"user_status\",\r\n \"zone\",\r\n \"location\",\r\n \"start_date_time\",\r\n \"end_date_time\",\r\n \"access_level\",\r\n ];\r\n\r\n templateShowing: string;\r\n\r\n loading = false;\r\n\r\n currentTemplateUsers;\r\n\r\n modalRef;\r\n\r\n toDuplicate = false;\r\n\r\n constructor(\r\n private userService: BaseUserService,\r\n private missionService: MissionService,\r\n private router: Router,\r\n private translate: TranslateService,\r\n private spaceService: SpaceService,\r\n private zoneService: ZoneService,\r\n private modalService: NgbModal,\r\n private templateService: TemplateService,\r\n ) {\r\n this.userService.isChanged.subscribe(() => this.setup());\r\n }\r\n\r\n ngOnInit(): void {\r\n this.setup();\r\n }\r\n\r\n setup() {\r\n this.setupUser();\r\n this.setZonesTemplates();\r\n }\r\n\r\n async setZonesTemplates() {\r\n if (!this.currentOrg) {\r\n return;\r\n }\r\n this.loading = true;\r\n this.allZoneTemplatesMap = new Map();\r\n this.allTemplateMissionsMap = new Map();\r\n let locations = this.spaceService.locationsForUser;\r\n if (locations.length === 0) {\r\n locations = await this.spaceService.getLocationsForCurrentUser();\r\n }\r\n await Promise.all(\r\n locations.map(async (space) => {\r\n let zones = await this.zoneService.getZonesBySpace(space.id);\r\n zones = zones.filter((zone) => zone.isMuseumVisitZone);\r\n await Promise.all(\r\n zones.map(async (zone) => {\r\n const visitorsMissions =\r\n await this.missionService.getMissionsByZoneByRole(\r\n zone.id,\r\n RoleStatus.VISITOR_MUSEUM,\r\n );\r\n let templates =\r\n await this.templateService.getTemplatesByZone(zone.id);\r\n templates = templates.filter((template) => !template.deletedAt);\r\n templates = templates.sort(\r\n (a, b) =>\r\n // @ts-ignore\r\n // eslint-disable-next-line prettier/prettier\r\n new Date(b.startDateTime) - new Date(a.startDateTime),\r\n );\r\n for (const template of templates) {\r\n const missionsFromTemplate =\r\n visitorsMissions.filter(\r\n (mis) =>\r\n mis.templateMissionID === template.id,\r\n );\r\n\r\n this.allTemplateMissionsMap.set(\r\n template.id,\r\n missionsFromTemplate,\r\n );\r\n }\r\n this.allZoneTemplatesMap.set(zone, templates);\r\n }),\r\n );\r\n }),\r\n );\r\n // sort list by zone name alphabetically\r\n this.allZoneTemplatesMapFiltered =\r\n new Map([...this.allZoneTemplatesMap.entries()].sort((a, b) => a[0].name.localeCompare(b[0].name)));\r\n this.loading = false;\r\n }\r\n\r\n setupUser() {\r\n this.currentOrg = this.userService.currentOrganisation();\r\n }\r\n\r\n onCreateTemplate() {\r\n this.creating = true;\r\n }\r\n\r\n async onDeleteMission(mission: Mission) {\r\n await this.missionService.softDeleteMission(mission.id);\r\n this.setZonesTemplates();\r\n }\r\n\r\n async onEditTemplate(template: VisitTemplate) {\r\n this.editing = true;\r\n this.templateToEdit = template;\r\n }\r\n\r\n onUpdatedEvent(isAdded: Mission[]) {\r\n this.editing = false;\r\n this.templateToEdit = null;\r\n this.isAddingBatch = false;\r\n this.chosenTemplate = null;\r\n if (isAdded) {\r\n this.setZonesTemplates();\r\n }\r\n }\r\n\r\n async onUpdatedTemplate(template: VisitTemplate) {\r\n this.loading = true;\r\n this.editing = false;\r\n this.templateToEdit = null;\r\n if (template) {\r\n if (this.toDuplicate) {\r\n // create new template\r\n delete template.id;\r\n await this.templateService.create(template);\r\n this.toDuplicate = false;\r\n await this.setZonesTemplates();\r\n return;\r\n }\r\n await this.templateService.update(template);\r\n await this.setZonesTemplates();\r\n // update related Missions\r\n const missionsForTemplate =\r\n await this.missionService.getMissionsByTemplate(template.id);\r\n await Promise.all(\r\n missionsForTemplate.map(async (mission) => {\r\n const missionUpdate = {\r\n id: mission.id,\r\n level: template.level,\r\n startDateTime: template.startDateTime,\r\n endDateTime: template.endDateTime,\r\n locale: template.locale,\r\n zoneID: template.zoneID,\r\n spaceID: template.spaceID,\r\n hashtags: template.hashtags,\r\n };\r\n await this.missionService.update(missionUpdate);\r\n }),\r\n );\r\n }\r\n\r\n this.loading = false;\r\n }\r\n\r\n async onCreatedTemplate(template: VisitTemplate) {\r\n this.loading = true;\r\n this.creating = false;\r\n if (template) {\r\n await this.templateService.create(template);\r\n this.setZonesTemplates();\r\n }\r\n this.loading = false;\r\n }\r\n\r\n onToggleMissionsForZone(zoneID: string) {\r\n if (this.detailsForZones.includes(zoneID)) {\r\n const index = this.detailsForZones.indexOf(zoneID);\r\n this.detailsForZones.splice(index, 1);\r\n } else {\r\n this.detailsForZones.push(zoneID);\r\n }\r\n }\r\n\r\n onToggleTemplateDetails(template) {\r\n this.templateShowing =\r\n this.templateShowing === template.id ? null : template.id;\r\n }\r\n\r\n onAddNewTemplateToZone(zone: Zone) {\r\n this.zoneIDForNewTemplate = zone.id;\r\n this.creating = true;\r\n }\r\n\r\n async onArchiveTemplate(template: VisitTemplate) {\r\n const message = this.translate.instant(\"confirm.archiveTemplate\");\r\n if (window.confirm(message)) {\r\n const missionsToDelete = this.allTemplateMissionsMap.get(template.id);\r\n await Promise.all(\r\n missionsToDelete.map(async (mission) => {\r\n await this.missionService.softDeleteMission(mission.id);\r\n }),\r\n );\r\n await this.templateService.softDelete(template.id);\r\n this.setZonesTemplates();\r\n }\r\n }\r\n\r\n onGenerateBatch(template: VisitTemplate) {\r\n this.chosenTemplate = template;\r\n this.isAddingBatch = true;\r\n }\r\n\r\n generateCSVUsers(template: VisitTemplate) {\r\n const data = [];\r\n for (const mission of this.allTemplateMissionsMap.get(template.id)) {\r\n const user = new ProfileEntity(mission.user);\r\n data.push([\r\n user.email,\r\n mission.user.status,\r\n mission.zone.name,\r\n mission.space.name,\r\n mission.startDateTime,\r\n mission.endDateTime,\r\n mission.level,\r\n ]);\r\n }\r\n return data;\r\n }\r\n\r\n async onSendInvitation(template: VisitTemplate) {\r\n await Promise.all(\r\n this.allTemplateMissionsMap\r\n .get(template.id)\r\n .map(async (mission) => {\r\n if (mission.emailStatus !== EmailStatus.SENT) {\r\n await this.missionService.update({\r\n id: mission.id,\r\n emailStatus: EmailStatus.CREATION_TO_DELIVER,\r\n });\r\n }\r\n }),\r\n );\r\n }\r\n\r\n async onSendUpdate(template: VisitTemplate) {\r\n await Promise.all(\r\n this.allTemplateMissionsMap\r\n .get(template.id)\r\n .map(async (mission) => {\r\n await this.missionService.update({\r\n id: mission.id,\r\n emailStatus: EmailStatus.UPDATE_TO_DELIVER,\r\n });\r\n }),\r\n );\r\n }\r\n\r\n async onCancelTemplate(template: VisitTemplate) {\r\n const message = this.translate.instant(\"confirm.cancelTemplate\");\r\n if (window.confirm(message)) {\r\n await Promise.all(\r\n this.allTemplateMissionsMap\r\n .get(template.id)\r\n .map(async (mission) => {\r\n await this.missionService.update({\r\n id: mission.id,\r\n emailStatus: EmailStatus.CANCELLATION_TO_DELIVER,\r\n deletedAt: Date.now(),\r\n });\r\n }),\r\n );\r\n }\r\n }\r\n\r\n applyResultsSearchBar(results) {\r\n this.allZoneTemplatesMapFiltered = results || this.allZoneTemplatesMap;\r\n }\r\n\r\n onDeleteUsers(mis: VisitTemplate) {\r\n this.currentTemplateUsers = [];\r\n for (const mission of this.allTemplateMissionsMap.get(mis.id)) {\r\n this.currentTemplateUsers.push({\r\n mission,\r\n profile: new ProfileEntity(mission.user),\r\n checked: false,\r\n index: this.allTemplateMissionsMap.get(mis.id).indexOf(mission),\r\n });\r\n }\r\n this.modalRef = this.modalService.open(this.modal);\r\n }\r\n\r\n /**\r\n * Deletes mission of the user and checks if can hard delete the Profile (no other missions)\r\n */\r\n async onDeleteChosen() {\r\n const listToDelete = this.currentTemplateUsers.filter(\r\n (object) => object.checked,\r\n );\r\n await Promise.all(\r\n listToDelete.map(async (object) => {\r\n await this.missionService.softDeleteMission(object.mission.id);\r\n await this.userService.softDeleteUser(object.profile.id);\r\n\r\n this.allTemplateMissionsMap\r\n .get(object.mission.templateMissionID)\r\n .splice(object.index, 1);\r\n }),\r\n );\r\n this.modalRef.close();\r\n }\r\n\r\n onDuplicateTemplate(template: VisitTemplate) {\r\n this.editing = true;\r\n this.templateToEdit = template;\r\n this.toDuplicate = true;\r\n }\r\n\r\n async onCleanTimeTemplate(template: VisitTemplate) {\r\n await this.templateService.update({\r\n id: template.id,\r\n realEndedAt: null,\r\n realStartedAt: null\r\n });\r\n await this.setZonesTemplates();\r\n }\r\n\r\n}\r\n","<div class=\"dashboard-tab\">\r\n <div class=\"header-dashboard-tab\">\r\n <h3>{{'Museum Visitors' | translate}}</h3>\r\n <!-- <app-search-bar [searchable]=\"allZoneTemplatesMap\" objectType=\"TEMPLATE\"\r\n (searchEvent)=\"applyResultsSearchBar($event)\">\r\n </app-search-bar> -->\r\n <hr>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-8 col-lg-7\">\r\n <div class=\"row ml-0 mb-2\">\r\n <h4 class=\"header-small\">{{'Itineraries' | translate}}</h4>\r\n </div>\r\n <div class=\"row ml-0 mb-2\" *ngIf=\"!editing && !creating\">\r\n <button class=\"btn btn-outline-primary rounded-pill ml-3 add-button\" (click)=\"onCreateTemplate()\">\r\n {{'Create template for new itinerary' | translate}}</button>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div *ngIf=\"!editing && !creating\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let pair of allZoneTemplatesMapFiltered | keyvalue\">\r\n <h4>{{pair.key.name}} <span style=\"font-size:0.8em\"> - {{pair.key.space.name}}</span> </h4>\r\n <div class=\"d-flex justify-content-between align-items-center\"\r\n (click)=\"onToggleMissionsForZone(pair.key.id)\">\r\n <ng-container *ngIf=\"pair.value.length <= 1\">\r\n {{pair.value.length}} {{'visit template found' | translate}}\r\n </ng-container>\r\n <ng-container *ngIf=\"pair.value.length > 1\">\r\n {{pair.value.length}} {{'visit templates found' | translate}}\r\n </ng-container>\r\n <lib-chevron [conditionShowing]=\"detailsForZones.includes(pair.key.id)\"></lib-chevron>\r\n\r\n </div>\r\n <div *ngIf=\"detailsForZones.includes(pair.key.id)\">\r\n <button class=\"btn btn-outline-primary rounded-pill mt-3 mb-3 ml-2\"\r\n (click)=\"onAddNewTemplateToZone(pair.key)\">{{'Add new template' | translate}}</button>\r\n\r\n <ul class=\"container-fluid list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let template of pair.value\">\r\n <div class=\"d-flex justify-content-between align-items-center\"\r\n (click)=\"onToggleTemplateDetails(template)\">\r\n <h5>{{template.title}}</h5>\r\n <lib-chevron [conditionShowing]=\"templateShowing === template.id\"></lib-chevron>\r\n </div>\r\n <div *ngIf=\"templateShowing === template.id\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Description' | translate }}:\r\n {{ template.description}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Language' | translate }}:\r\n {{ template.locale ? template.locale : ('Not applicable' | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\"\r\n *ngIf=\"template.hashtags && template.hashtags.length> 0\">\r\n {{'Hashtags' | translate}}:\r\n <ul class=\"keywordsDisplay no-border\">\r\n <div class=\"keywordsdisplayContainer\"\r\n *ngIf=\"template.hashtags.length> 0\">\r\n <li class=\"keywordsItem\" *ngFor=\"let hashtag of template.hashtags\">{{\r\n hashtag | hashtagFromID | async }}</li>\r\n </div>\r\n </ul>\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate }}:\r\n {{ template.level}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Planned at' | translate }} :\r\n {{ template.startDateTime ? (template.startDateTime |\r\n timeDateString:\"day_time_zone\" | async) :\r\n \"No data\" | translate }} - \r\n {{ template.endDateTime ?\r\n (template.endDateTime | timeDateString:\"day_time_zone\" | async) : \"No data\" |\r\n translate}}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">\r\n {{'Effective start/end time ' | translate }}: \r\n {{ template.realStartedAt ? (template.realStartedAt |\r\n timeDateString:\"day_time_zone\" | async) : ('No data' | translate)}} / \r\n {{ template.realEndedAt ? (template.realEndedAt |\r\n timeDateString:\"day_time_zone\" | async) : ('No data' | translate)}}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\"\r\n *ngIf=\"allTemplateMissionsMap.get(template.id)\">\r\n {{'Visitors created' |\r\n translate}}:{{allTemplateMissionsMap.get(template.id).length}}\r\n <lib-csv-export [headers]=\"csvHeaders\" [title]=\"'Users'\"\r\n buttonLabel=\"Download users\" [rowsInput]=\"generateCSVUsers(template)\">\r\n </lib-csv-export>\r\n </li>\r\n \r\n </ul>\r\n <div class=\"action-button-container\">\r\n <div class=\"d-inline-block mr-2 action-button\" ngbDropdown\r\n #myDrop=\"ngbDropdown\">\r\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownManual\"\r\n ngbDropdownToggle>{{'Manage users' |\r\n translate}}</button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownManual\">\r\n <button (click)=\"onGenerateBatch(template)\" ngbDropdownItem>\r\n {{'Create users from this template' | translate}}</button>\r\n <button (click)=\"onSendInvitation(template)\" ngbDropdownItem>\r\n {{'Send invitation to all users' | translate}}\r\n </button>\r\n <button (click)=\"onSendUpdate(template)\" ngbDropdownItem>\r\n {{'Send update to all users' | translate}}\r\n </button>\r\n <button (click)=\"onDeleteUsers(template)\" ngbDropdownItem>\r\n {{'Remove users' | translate}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"d-inline-block mr-2 action-button\" ngbDropdown\r\n #myDrop2=\"ngbDropdown\">\r\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdown2\"\r\n ngbDropdownToggle>{{'Manage template' |\r\n translate}}</button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdown2\">\r\n <button (click)=\"onEditTemplate(template)\" ngbDropdownItem>\r\n {{'Edit template' | translate}}</button>\r\n <button (click)=\"onCleanTimeTemplate(template)\" ngbDropdownItem>\r\n {{'Clean effective times' | translate}}\r\n </button>\r\n <button (click)=\"onArchiveTemplate(template)\" ngbDropdownItem>\r\n {{'Archive template' | translate}}\r\n </button>\r\n <button (click)=\"onCancelTemplate(template)\" ngbDropdownItem>\r\n {{'Cancel visit' | translate}}\r\n </button>\r\n <button (click)=\"onDuplicateTemplate(template)\" ngbDropdownItem>\r\n {{'Duplicate' | translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <button type=\"button\" class=\"btn btn-primary rounded-pill mr-2 ml-auto\"\r\n (click)=\"onEdit(mis)\">\r\n {{'Edit' | translate}}</button>\r\n <button class=\"btn btn-primary rounded-pill mt-3 mb-3 ml-auto\"\r\n (click)=\"onArchiveTemplate(mis)\">{{'Archive' | translate}}</button> -->\r\n </div>\r\n\r\n </li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"editing\">\r\n <lib-template [editTemplate]=\"templateToEdit\" [currentOrg]=\"currentOrg\"\r\n (updatedTemplate)=\"onUpdatedTemplate($event)\"></lib-template>\r\n </div>\r\n <div *ngIf=\"creating\">\r\n <lib-template [currentOrg]=\"currentOrg\" [zoneID]=\"zoneIDForNewTemplate\"\r\n (createdTemplate)=\"onCreatedTemplate($event)\"></lib-template>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 col-lg-5\" *ngIf=\"isAddingBatch\">\r\n <lib-create-batch [template]=\"chosenTemplate\" (createdMissions)=\"onUpdatedEvent($event)\"></lib-create-batch>\r\n </div>\r\n <ng-template #deleteUsers let-modal>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"modal-basic-title\">{{\"Delete users\" | translate}}\r\n </h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modalRef.close()\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"column align-items-center\">\r\n <div class=\"row\" style=\"padding: 0 1.25rem;\">\r\n <ul class=\"container-fluid list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let object of currentTemplateUsers\">\r\n <input type=\"checkbox\" [(ngModel)]=\"object.checked\"> {{object.profile.email}}\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div class=\"row\" style=\"padding: 1.25rem;\">\r\n <button class=\"btn btn-outline-primary rounded-pill mr-4\" (click)=\"onDeleteChosen()\">{{\"Apply\" |\r\n translate}}\r\n </button>\r\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"modalRef.close()\">{{\"Cancel\" |\r\n translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { BaseUserService} from 'ngx-smarterplan-core'\r\n\r\n@Component({\r\n selector: 'lib-admin',\r\n templateUrl: './admin.component.html',\r\n styleUrls: ['./admin.component.scss']\r\n})\r\nexport class AdminComponent implements OnInit {\r\n\r\n isSmarterPlanUser = false;\r\n\r\n isGuide = false;\r\n\r\n constructor(private userService: BaseUserService) {\r\n this.userService.isChanged.subscribe((isChanged) => {\r\n if (isChanged) {\r\n this.isSmarterPlanUser = this.userService.isSPAdmin();\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.isSmarterPlanUser = this.userService.isSPAdmin();\r\n this.isGuide = this.userService.isGuide();\r\n }\r\n getIcon(path: string[], isActive: boolean): string {\r\n const suffix: string = isActive ? \"-over\" : \"\";\r\n return `/icons/${path.join(\"/\")}${suffix}.svg`;\r\n }\r\n\r\n}\r\n","<div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"d-none col-md-3 col-lg-2 d-md-block sidebar\">\n <ul class=\"nav nav-pills flex-column\">\n <li class=\"nav-item\"><a class=\"nav-link\" routerLink=\"/admin/users\" [routerLinkActive]=\"['active']\"\n #rlaUser=\"routerLinkActive\">\n <img class=\"big-icon\" [src]=\"getIcon(['menu', 'user'], rlaUser.isActive)\" />{{'Users' |\n translate}}</a></li>\n <li class=\"nav-item\" *ngIf=\"isSmarterPlanUser\"><a class=\"nav-link\" routerLink=\"/admin/clients\"\n [routerLinkActive]=\"['active']\" #rlaOrganization=\"routerLinkActive\">\n <img class=\"big-icon\"\n [src]=\"getIcon(['menu', 'organisation'], rlaOrganization.isActive)\" />{{'Clients' |\n translate}}</a></li>\n <li class=\"nav-item\" *ngIf=\"isSmarterPlanUser || isGuide\"><a class=\"nav-link\"\n routerLink=\"/admin/visitors\" [routerLinkActive]=\"['active']\" #rlaVisitor=\"routerLinkActive\">\n <img class=\"big-icon\" [src]=\"getIcon(['menu', 'user'], rlaVisitor.isActive)\" />\n {{'Museum Visitors' | translate }}</a></li>\n </ul>\n </div> <!-- ml-sm-auto -->\n <main role=\"main\" class=\"col-12 col-md-9 col-lg-10 px-md-4\">\n <router-outlet></router-outlet>\n </main>\n </div>\n</div>","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router';\r\nimport { BaseUserService } from 'ngx-smarterplan-core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GuideGuard implements CanActivate {\r\n constructor(private userService: BaseUserService, private router: Router) {}\r\n\r\n async canActivate(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Promise<boolean | UrlTree> {\r\n if (this.userService.isGuide() || this.userService.isSPAdmin()) {\r\n return true;\r\n }\r\n return this.router.parseUrl(\"/notauthorized\");\r\n }\r\n \r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate, Router, UrlTree } from '@angular/router';\r\nimport { BaseUserService } from 'ngx-smarterplan-core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SpAdminGuard implements CanActivate {\r\n constructor(private userService: BaseUserService, private router: Router) {}\r\n\r\n canActivate():\r\n | Observable<boolean | UrlTree>\r\n | Promise<boolean | UrlTree>\r\n | boolean\r\n | UrlTree {\r\n let canGo = false;\r\n if (this.userService.cu) {\r\n canGo = this.userService.isSPAdmin();\r\n }\r\n if (canGo) {\r\n return true;\r\n }\r\n alert(\"You are not authorised to access this page\");\r\n this.router.navigate([\"\"]);\r\n return false;\r\n }\r\n \r\n}\r\n","import { NgModule } from \"@angular/core\";\r\nimport { Routes, RouterModule } from \"@angular/router\";\r\nimport { AdminComponent } from \"./admin/admin.component\";\r\nimport { GuideGuard } from \"./guide.guard\";\r\nimport { OrganisationComponent } from \"./organisation/organisation.component\";\r\nimport { SpAdminGuard } from \"./sp-admin.guard\";\r\nimport { UserComponent } from \"./user/user.component\";\r\nimport { CreateBatchComponent } from \"./visitor/create-batch/create-batch.component\";\r\nimport { TemplateComponent } from \"./visitor/template/template.component\";\r\nimport { VisitorComponent } from \"./visitor/visitor.component\";\r\n\r\nconst routes: Routes = [\r\n {\r\n path: \"\",\r\n component: AdminComponent,\r\n children: [\r\n { path: \"users\", component: UserComponent },\r\n {\r\n path: \"visitors\",\r\n children: [\r\n { path: \"\", component: VisitorComponent },\r\n { path: \"template\", component: TemplateComponent },\r\n ],\r\n canActivate: [GuideGuard]\r\n },\r\n {\r\n path: \"clients\",\r\n component: OrganisationComponent,\r\n canActivate: [SpAdminGuard]\r\n },\r\n { path: \"\", redirectTo: \"users\", pathMatch: \"full\" },\r\n ]\r\n },\r\n ];\r\n \r\n @NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule],\r\n })\r\nexport class AdminRoutingModule { }","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { BaseUserService } from 'ngx-smarterplan-core';\r\n\r\n@Pipe({\r\n name: 'nameFromId'\r\n})\r\nexport class NameFromIdPipe 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 (NameFromIdPipe.cache[userId] !== undefined) {\r\n return new Promise<string>((resolve) => {\r\n resolve(NameFromIdPipe.cache[userId]);\r\n });\r\n }\r\n const user = await this.userService.userFromUserID(userId);\r\n // @ts-ignore\r\n NameFromId.cache[userId] = `${user.displayName}`;\r\n return NameFromIdPipe.cache[userId];\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { OrganisationComponent } from './organisation/organisation.component';\r\nimport { UserComponent } from './user/user.component';\r\nimport { VisitorComponent } from './visitor/visitor.component';\r\nimport { AdminComponent } from './admin/admin.component';\r\nimport { AdminRoutingModule } from './ngx-smarterplan-admin-routing.module';\r\nimport { TranslateModule } from \"@ngx-translate/core\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { GuestLinkComponent } from './guest-link/guest-link.component';\r\nimport { ChevronComponent } from './chevron/chevron.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormMissionComponent } from './user/form-mission/form-mission.component';\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { UserMissionFormComponent } from './user/user-mission-form/user-mission-form.component';\r\nimport { FormOrganisationComponent } from './user/form-organisation/form-organisation.component';\r\nimport { DetailOrganisationComponent } from './user/detail-organisation/detail-organisation.component';\r\nimport { ClipboardModule } from 'ngx-clipboard';\r\nimport { CreateBatchComponent } from './visitor/create-batch/create-batch.component';\r\nimport { NameFromIdPipe } from './name-from-id.pipe';\r\nimport { TemplateComponent } from './visitor/template/template.component';\r\nimport { NgxSmarterplanCoreModule } from 'ngx-smarterplan-core';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n AdminComponent,\r\n UserComponent,\r\n VisitorComponent,\r\n OrganisationComponent,\r\n GuestLinkComponent,\r\n ChevronComponent,\r\n FormMissionComponent,\r\n UserMissionFormComponent,\r\n FormOrganisationComponent,\r\n DetailOrganisationComponent,\r\n CreateBatchComponent,\r\n NameFromIdPipe,\r\n TemplateComponent,\r\n ],\r\n imports: [\r\n ClipboardModule,\r\n NgbModule,\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NgxSmarterplanCoreModule,\r\n TranslateModule.forChild({\r\n extend: true\r\n }),\r\n AdminRoutingModule\r\n ], \r\n exports: []\r\n})\r\nexport class NgxSmarterplanAdminModule {}\r\n","/*\n * Public API Surface of ngx-smarterplan-admin\n */\n\nexport * from './lib/ngx-smarterplan-admin.service';\nexport * from './lib/ngx-smarterplan-admin.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4.ChevronComponent","i5","i2","i3","i4","i1","i4.FormMissionComponent","i6","i3.UserMissionFormComponent","uuidv4","i5.UserMissionFormComponent","i6.FormMissionComponent","i7.FormOrganisationComponent","i8.DetailOrganisationComponent","i9","i5.ChevronComponent","i6.TemplateComponent","i7.CreateBatchComponent","i8"],"mappings":"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"}