{"version":3,"file":"app-b0bd0c0b.a18c9ca94304d9aa.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/administration/projects/manage/manage-project.ts"],"sourcesContent":["import { HttpResponseMessage } from 'aurelia-http-client';\r\nimport { RequestErrorHandling, RequestMethod } from './../../../services/api-client';\r\nimport { AppContextService } from 'app/services/app-context-service';\r\nimport { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport { ModalService } from 'app/services/modal-service';\r\nimport { Router } from 'aurelia-router';\r\nimport { autoinject, observable, computedFrom } from 'aurelia-framework';\r\nimport { ClassificationDto, Member, ProjectDto, ProjectInvitation, ResponseStatus } from 'app/models/project-dto';\r\nimport { ApiClient } from 'app/services/api-client';\r\nimport { UnitSettings } from \"./unit-settings\";\r\nimport { WhitelistDto } from 'app/models/whitelist-dto';\r\nimport { I18N } from 'aurelia-i18n';\r\nimport { UserDto } from 'app/models/user-administration-dtos';\r\nimport { DialogCloseResult } from 'aurelia-dialog';\r\nimport { ProjectRole, UIPrjRoleNames } from 'app/models/project-role';\r\nimport { ErrorService } from 'app/services/error-service';\r\nimport { OrgTokenService } from 'app/services/org-token-service';\r\nimport { OrgTokenInfo } from 'app/models/org-token-info';\r\nimport { OrgRole } from 'app/models/org-role';\r\n\r\nexport interface BasicInfo {\r\n\tTypeId?: string;\r\n\tClassificationId?: string;\r\n\tGrossArea?: string;\r\n}\r\n\r\n@autoinject\r\nexport class ManageProject {\r\n\tpublic isEditing: boolean = false;\r\n\tpublic isSaving: boolean = false;\r\n\tpublic project: ProjectDto | undefined;\r\n\tpublic originalProject: ProjectDto | undefined;\r\n\tprivate projectId: string | undefined = \"\";\r\n\tprivate fieldsetBody: any;\r\n\t@observable searchMemberText:string = \"\";\r\n\tpublic admin:UserDto | undefined;\r\n\tprivate searchMemberEnabled: boolean = false;\r\n\tprivate searchMemberResult: Member[];\r\n\tprivate classifications: ClassificationDto[] = [];\r\n\tpublic showSettings: boolean = false;\r\n\tpublic viewContext: string;\r\n\tpublic searchTerm: string = \"\";\r\n\tprivate subscriptions: Subscription[] = [];\r\n\tpublic unitSettings:UnitSettings | undefined;\r\n\tchosenWhitelistId: string = '00000000-0000-0000-0000-000000000000';\r\n\twhitelists: WhitelistDto[] = [];\r\n\tprivate asOrgUser: boolean = true;\r\n\tprivate projectRoles: string[] = Object.keys(ProjectRole).filter((v) => isNaN(Number(v)));\r\n\tprivate orgTokenInfo: OrgTokenInfo | undefined;\r\n\t\r\n\tconstructor(private element: Element, private apiClient: ApiClient, private router: Router, private modal: ModalService,\r\n\t\t private events: EventAggregator, private i18n: I18N, private appContext: AppContextService, private orgTokenService: OrgTokenService) {\r\n\t\tthis.searchMemberResult = [];\r\n\t\tthis.viewContext = \"ProjectMemberSearch\";\r\n\t}\r\n\t@computedFrom('project.name', 'project.location.address', 'project.location.zipcode', 'project.location.city')\r\n\tget isFormInvalid(): boolean {\r\n\t\t//Unless these conditions are fullfilled a project can neither be updated or created.\r\n\t\t//This is based on the database setup.\r\n\t\treturn !(\r\n\t\t\t\t(this.project?.name != undefined \t\t\t\t&& this.project.name != '')\r\n\t\t\t&& \t(this.project?.location?.address != undefined \t&& this.project?.location?.address != '')\r\n\t\t\t&&\t(this.project?.location?.zipCode != undefined \t&& this.project?.location?.zipCode != '')\r\n\t\t\t&&\t(this.project?.location?.city != undefined \t\t&& this.project?.location?.city != '')\r\n\t\t);\r\n\t}\r\n\t@computedFrom('orgTokenInfo.OrgRole')\r\n\tget isOrgAdmin(): boolean {\r\n\t\treturn this.orgTokenInfo?.orgRole == OrgRole.Org_Admin;\r\n\t}\r\n\r\n\r\n\tasync activate(input: any) {\r\n\t\tthis.projectId = input.projectId;\r\n\t\tif (this.projectId != undefined) { \r\n\t\t\tthis.isEditing = true;\r\n\t\t\tawait this.getAllWhitelists(); // let us make sure these are in place, before we fetch the project.\r\n\t\t\tawait this.fetchClassifications();\r\n\t\t\tawait this.fetchProject(this.projectId);\r\n\r\n\t\t\t// Apparently ensure WL is either NULL or valid:\r\n\t\t\t//this.getWhitelist();\r\n\t\t\tlet prjWhitelist: string | undefined = this.project?.whitelistId;\r\n\t\t\tthis.chosenWhitelistId = (prjWhitelist ? prjWhitelist : \"\");\r\n\t\t} else { // Creating a fresh new project.\r\n\t\t\tthis.resetInputs();\r\n\t\t\tthis.ensureAdminIsFirstMember();\r\n\t\t}\r\n\t\tthis.updateOrgTokenInfo();\r\n\t\t// this.ensureAdminIsFirstMember();\r\n\t}\r\n\r\n\tensureAdminIsFirstMember() {\r\n\t\t//ensures that the creator of the project gets added as the first member, enabling safety checks on the procedure so that admin\r\n\t\t//cannot re-add themselves to the project, causing the project to corrupt.\r\n\t\tthis.admin = this.appContext.currentUser;\r\n\t\tconsole.log('act, init this.project to empty, companyName:', this.admin?.companyName);\r\n\t\tif (this.admin) {\r\n\t\t\tlet myAdmin:UserDto = this.admin;\r\n\t\t\tconsole.log(`ensureAdminIsFirstMember, admin userId: ${myAdmin.id}, userCompany:${myAdmin.organization.id}`, myAdmin);\r\n\t\t\tif (!myAdmin.organization.id) { throw 'no org id on admin user.'; }\r\n\r\n\t\t\tthis.project = {\r\n\t\t\t\tid: this.projectId != undefined ? this.projectId : '00000000-0000-0000-0000-000000000000',\r\n\t\t\t\tname: '',\r\n\t\t\t\tregion: '',\r\n\t\t\t\tclassificationId: '',\r\n\t\t\t\twhitelistId: '',\r\n\t\t\t\townerCompanyId: '',\r\n\t\t\t\townerCompanyName: '',\r\n\t\t\t\tmembers: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tuserId: this.admin.id,\r\n\t\t\t\t\t\tname: this.admin.firstName + \" \" + this.admin.lastName,\r\n\t\t\t\t\t\temail: this.admin.email,\r\n\t\t\t\t\t\tcompanyName: this.admin.companyName,\r\n\t\t\t\t\t\tuserCompanyId: myAdmin.organization.id //'00000000-0000-0000-0000-000000000000' //https://jira.eg.dk/browse/AJC-3664\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\tprojectInvitations: [],\r\n\t\t\t\tselected: false,\r\n\t\t\t\tcreated_UTC: new Date()\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tattached() {\r\n\t\tthis.fieldsetBody = this.element.querySelector(\".manage-project__body\");\r\n\t\tthis.fieldsetBody.addEventListener('scroll', this.isScrolled);\r\n\t\t\r\n\t\tconst searchHandler = (data: any) => this.handleMemberListSearchEvent(data);\r\n\t\tthis.subscriptions = [\r\n\t\t\tthis.events.subscribe(this.viewContext + \":SearchTermChanged\", searchHandler),\r\n\t\t\tthis.events.subscribe(\"global:org-changed\", async () => this.updateOrgTokenInfo())\r\n\t\t];\r\n\t}\r\n\tupdateOrgTokenInfo() {\r\n\t\tthis.orgTokenInfo = this.orgTokenService.getOrgTokenInfo();\r\n\t}\r\n\r\n\tdeactivate() {\t\t\r\n\t\tthis.fieldsetBody.removeEventListener('scroll', this.isScrolled);\r\n\t}\r\n\r\n\tdetached() {\r\n\t\tthis.subscriptions.forEach(subscription => (\r\n\t\t\tsubscription.dispose()\r\n\t\t));\r\n\t}\r\n\r\n\tprivate isScrolled = (event: any) => {\r\n\t\tif (this.fieldsetBody.scrollTop > 0) {\r\n\t\t\tdocument.querySelector('top-bar')?.classList.add('scrolled');\r\n\t\t} else {\r\n\t\t\tdocument.querySelector('top-bar')?.classList.remove('scrolled');\r\n\t\t}\r\n\t}\r\n\r\n\tpublic toggleUnitSettings(){\r\n\t\tthis.showSettings = !this.showSettings;\r\n\t}\r\n\t\r\n\tpublic reset() {\r\n if (this.isEditing) {\r\n this.router.navigateToRoute('projects');\r\n } else {\r\n this.project = this.originalProject;\r\n this.projectId = \"\";\r\n this.resetInputs();\r\n }\r\n\t}\r\n\t\r\n\tprivate resetInputs() {\r\n\t\tthis.isEditing = false;\r\n\t\tthis.project = undefined;\r\n\t}\r\n\r\n\tpublic submit() {\r\n\t\tthis.isSaving = true;\r\n\t\tif (this.isEditing) {\r\n\t\t\tthis.update();\r\n\t\t} else {\r\n\r\n\t\t\tthis.create();\r\n\t\t}\r\n\t}\r\n\t\r\n\r\n\tpublic closeUnitSettings() {\r\n\t\tthis.showSettings = false;\r\n\t}\r\n\t\r\n\tprivate create() { //Should at some point be changed to do it the same way as createByOrgFromToken\r\n\t\tlet trimmedProjectName = Boolean(this.project) && Boolean(this.project?.name) ? this.project?.name.trim() : '';\r\n\r\n\t\tif (!Boolean(trimmedProjectName)) {\r\n\t\t\tthis.modal.OpenMessage(\"Error\", \"The project was not created because the name contained only whitespaces! Please try again.\").whenClosed(() => {\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.apiClient.system.postJson('Project/Create', trimmedProjectName)\r\n\t\t.jsonResult()\r\n\t\t.then((createdProjectId: string) => {\r\n\t\t\tif (this.project) {\r\n\r\n\t\t\t\tthis.projectId = createdProjectId;\r\n\t\t\t\tthis.project.id = createdProjectId;\r\n\t\t\t\tlet number = this.project.number;\r\n\t\t\t\tlet basicInfo:BasicInfo = this.getUpdatedBasicInfo();\r\n\t\t\t\tlet location:any = this.getUpdatedLocation();\r\n\t\t\t\tlet region = location.region;\r\n\t\t\t\tlet facilityManager = this.getUpdatedFacilityManager();\r\n\t\t\t\t// // build objects to update project tables\r\n\t\t\t\tlet promises = [];\r\n\t\t\t\t//promises[0]\r\n\t\t\t\tpromises.push(this.apiClient.project(this.projectId).postJson('Project/SetBasicInfo', basicInfo).response().catch(async reason => console.error(await reason.json())));\r\n\t\t\t\t\r\n\t\t\t\tif (Boolean(number)) {\r\n\t\t\t\t\tpromises.push(this.apiClient.system.postJson('Project/SetNumber/' + this.projectId, number).response().catch(async reason => console.error(await reason.json())));\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif (Boolean(region)) {\r\n\t\t\t\t\tpromises.push(this.apiClient.system.postJson('Project/SetRegion/' + this.projectId, region).response().catch(async reason => console.error(await reason.json())));\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif (location.Address && location.City && location.ZipCode && location.Address !== \"\" && location.City !== \"\" && location.ZipCode !== \"\") {\r\n\t\t\t\t\tpromises.push(this.apiClient.system.postJson('Project/SetAddress/' + this.projectId, location).response().catch(async reason => console.error(await reason.json())));\r\n\t\t\t\t}\r\n\t\t\t\t//promises[1]\r\n\t\t\t\tpromises.push(this.apiClient.system.postJson('Project/SetFacilityManager/' + this.projectId, facilityManager).response().catch(async reason => console.error(await reason.json())));\r\n\t\t\t\t\r\n\t\t\t\tlet membersAdded:Member[] = this.getAddedMembers();\r\n\t\t\t\tif (membersAdded.length > 0) {\r\n\t\t\t\t\t// not called || promises[2] \r\n\t\t\t\t\tfor (let x of membersAdded) {\r\n\t\t\t\t\t\tconsole.log(`membersAdded: userId: ${x.userId} userCompanyId: ${x.userCompanyId}`);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpromises.push(this.apiClient.project(this.projectId).postJson('Project/AddPrjAdminMember', membersAdded).response().catch(async reason => console.error(await reason.json())));\r\n\t\t\t\t}\r\n\r\n\t\t\tpromises.push(this.unitSettings?.save());\r\n\t\t\t\r\n\t\t\tthis.rememberOriginalProject(); // clone this.project into this.originalProject, for some reason. I wonder why this.project should be changed by now?\r\n\t\t\t\r\n\t\t\tPromise.all(promises).then(values => {\r\n\t\t\t\tconsole.log('all after-create promises OK');\r\n\t\t\t\tthis.events.publish(\"project-created\", this.project);\r\n\t\t\t}).finally(() => {\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\t}).then( () => {\r\n\t\t\tconsole.log('after create-post OK');\r\n\t\t\tthis.router.navigate('administration/projects/edit/'+ this.projectId,{replace:true, trigger:true});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate createByOrgFromToken() {\r\n\t\t//TODO - Check if any org is selected\r\n\t\tif (this.orgTokenInfo?.orgRole != OrgRole.Org_Admin) { return; } //Should never happen.\r\n\t\tlet trimmedProjectName = Boolean(this.project) && Boolean(this.project?.name) ? this.project?.name.trim() : '';\r\n\r\n\t\tif (!Boolean(trimmedProjectName)) {\r\n\t\t\tthis.modal.OpenMessage(\"Error\", \"The project was not created because the name contained only whitespaces! Please try again.\").whenClosed(() => {\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.apiClient.orgByToken.postJson('Project/CreatePrjInOrg', trimmedProjectName)\r\n\t\t.jsonResult()\r\n\t\t.then((createdProjectId: string) => {\r\n\t\t\tif (this.project) {\r\n\r\n\t\t\t\tthis.projectId = createdProjectId;\r\n\t\t\t\tthis.project.id = createdProjectId;\r\n\t\t\t\tlet number = this.project.number;\r\n\t\t\t\tlet basicInfo:BasicInfo = this.getUpdatedBasicInfo();\r\n\t\t\t\tlet location:any = this.getUpdatedLocation();\r\n\t\t\t\tlet region = location.region;\r\n\t\t\t\tlet facilityManager = this.getUpdatedFacilityManager();\r\n\t\t\t\t// // build objects to update project tables\r\n\r\n\t\t\t\tlet promises = [];\r\n\t\t\t\tpromises.push(this.apiClient.orgByToken.postJson(`Project/SetBasicInfo?projectId=${createdProjectId}`, basicInfo).response().catch(async reason => console.error(await reason.json())));\r\n\t\t\t\t\r\n\t\t\t\tif (Boolean(number)) {\r\n\t\t\t\t\tpromises.push(this.apiClient.orgByToken.postJson('Project/SetNumber/' + this.projectId, number).response().catch(async reason => console.error(await reason.json())));\r\n\t\t\t\t}\r\n\t\t\t\tif (Boolean(region)) {\r\n\t\t\t\t\tpromises.push(this.apiClient.orgByToken.postJson('Project/SetRegion/' + this.projectId, region).response().catch(async reason => console.error(await reason.json())));\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif (location.Address && location.City && location.ZipCode && location.Address !== \"\" && location.City !== \"\" && location.ZipCode !== \"\") {\r\n\t\t\t\t\tpromises.push(this.apiClient.orgByToken.postJson('Project/SetAddress/' + this.projectId, location).response().catch(async reason => console.error(await reason.json())));\r\n\t\t\t\t}\r\n\t\t\t\tpromises.push(this.apiClient.orgByToken.postJson('Project/SetFacilityManager/' + this.projectId, facilityManager).response().catch(async reason => console.error(await reason.json())));\r\n\t\t\t\t\r\n\t\t\t\tlet membersAdded = this.getAddedMembers();\r\n\t\t\t\tif (membersAdded.length > 0) {\r\n\t\t\t\t\t//This is ALWAYS ONLY the current user being set as admin on the project.\r\n\t\t\t\t\t//Before the project is created no user can be added to the project. I Guess it should be refactored, so the client does not send a list.\r\n\t\t\t\t\tpromises.push(this.apiClient.orgByToken.postJson(`Project/AddPrjAdminMember?projectId=${createdProjectId}`, membersAdded).response().catch(async reason => console.error(await reason.json())));\r\n\t\t\t\t}\r\n\r\n\t\t\tpromises.push(this.unitSettings?.saveByOrg(createdProjectId));\r\n\t\t\t\r\n\t\t\tthis.rememberOriginalProject(); // clone this.project into this.originalProject, for some reason. I wonder why this.project should be changed by now?\r\n\t\t\t\r\n\t\t\tPromise.all(promises).then(values => {\r\n\t\t\t\tconsole.log('all after-create promises OK');\r\n\t\t\t\tthis.events.publish(\"project-created\", this.project);\r\n\t\t\t}).finally(() => {\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\t}).then( () => {\r\n\t\t\tconsole.log('after create-post OK');\r\n\t\t\tthis.router.navigate('administration/projects/edit/'+ this.projectId,{replace:true, trigger:true});\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tputHostOnInvitations(invitations:ProjectInvitation[]) { // needed so API server knows where to link to.\r\n\t\tlet L = window.location;\r\n\t\tlet host = `${L.protocol}//${L.host}`; \r\n\t\tconsole.log('passing host:',host);\r\n\t\tfor (let i of invitations) { i.host = host;\t}\r\n\t}\r\n\r\n\tasync updateWhitelist() {\r\n\t\tif (this.originalProject?.whitelistId == this.chosenWhitelistId) {\r\n\t\t\tconsole.log('whitelist UNchanged:', this.originalProject.whitelistId, '<-', this.chosenWhitelistId);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.chosenWhitelistId) {\r\n\t\t\tconsole.log(`chosenWhitelist not a proper value:[${this.chosenWhitelistId}], so we don't try to store it.`);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconsole.log('whitelist change:', this.originalProject?.whitelistId, '<-', this.chosenWhitelistId);\r\n\t\tif (this.projectId != undefined) {\r\n\t\t\tlet api = this.apiClient.project(this.projectId);\r\n\t\t\tlet path = `Project/SetWhitelist/${this.projectId}`;\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconsole.log('arg for WL:', this.chosenWhitelistId);\r\n\t\t\t\tlet REH:RequestErrorHandling = api.postJson(path, this.chosenWhitelistId);\r\n\t\t\t\t//let HRM:HttpResponseMessage = await REH.response();\r\n\t\t\t\tlet jsonResponse = await REH.jsonResult();\r\n\t\t\t\tconsole.log('setWhitelist response:', jsonResponse);\r\n\t\t\t\t// stop that crap: //promises.push(whitelistPromise);\r\n\r\n\t\t\t\t// also, fix-up the project itself: (preferably, this should be done in the happy-path of the SetWhitelist call.)\r\n\t\t\t\t// It is important this happens, otherwise rememberOriginalProject() won't remember that change correctly.\r\n\t\t\t\tif (this.project) { this.project.whitelistId = this.chosenWhitelistId; }\r\n\t\t\t} catch (reason: any) {\r\n\t\t\t\tconsole.error('SetWhiteList failed with:', reason);\r\n\t\t\t\tlet xx = await reason.json();\r\n\t\t\t\tconsole.error('err resp:', xx);\r\n\t\t\t}\t\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async update() {\t\t\r\n\t\tlet number = this.project?.number;\r\n\t\tlet region = this.project?.location?.region;\r\n\t\tlet basicInfo:BasicInfo = this.getUpdatedBasicInfo();\r\n\t\tlet location:any = this.getUpdatedLocation();\r\n\t\tlet facilityManager = this.getUpdatedFacilityManager();\r\n\t\t\r\n\t\tlet promises = [];\r\n\r\n\t\ttry {\r\n\t\t\tawait this.updateWhitelist();\r\n\t\t} catch (e) {\r\n\t\t\tconsole.warn('updateWhitelist failed, saving rest of project anyway', e);\r\n\t\t}\r\n\t\t\r\n\t\tif (this.projectId != undefined && this.originalProject?.name.trim() !== this.project?.name.trim()) {\r\n\t\t\tpromises.push(this.apiClient.project(this.projectId).postJson('Project/Rename/' + this.projectId, this.project?.name.trim()).response().catch(async reason => console.error(reason)));\r\n\t\t}\r\n\t\tif (this.projectId != undefined) {\r\n\t\t\tpromises.push(this.apiClient.project(this.projectId).postJson('Project/SetBasicInfo', basicInfo).response().catch(async reason => console.error(reason)));\r\n\t\t}\r\n\r\n\t\tif (number != undefined) {\r\n\t\t\tpromises.push(this.apiClient.system.postJson('Project/SetNumber/' + this.projectId, number).response().catch(async reason => console.error(reason)));\r\n\t\t}\r\n\r\n\t\tif (region != undefined) {\r\n\t\t\tpromises.push(this.apiClient.system.postJson('Project/SetRegion/' + this.projectId, region).response().catch(async reason => console.error(reason)));\r\n\t\t}\r\n\t\t\r\n\t\tif (location.Address != undefined && location.City != undefined && location.ZipCode != undefined && location.Address !== \"\" && location.City !== \"\" && location.ZipCode !== \"\") {\r\n\t\t\tpromises.push(this.apiClient.system.postJson('Project/SetAddress/' + this.projectId, location).response());\r\n\t\t} else {\r\n\t\t\tthis.modal.OpenMessage(\"Location information not updated\", \"Address, zip code and city could not be updated because one or more fields were empty.\")\r\n\t\t\tif (this.project?.location) {\r\n\t\t\t\tthis.project.location = this.originalProject?.location;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpromises.push(this.apiClient.system.postJson('Project/SetFacilityManager/' + this.projectId, facilityManager).response().catch(async reason => console.error(reason)));\r\n\r\n\t\tpromises.push(this.unitSettings?.save());\r\n\t\t\r\n\t\tthis.rememberOriginalProject();\r\n\r\n\t\tPromise.all(promises).then(values => {\r\n\t\t\tthis.events.publish(\"project-updated\", this.project);\r\n\t\t}).finally(() => {\r\n\t\t\tthis.isSaving = false;\r\n\t\t});\r\n\t\t\r\n\t}\r\n\t\r\n\tprivate async fetchClassifications() {\r\n\t\tconsole.log('before GetClassifications');\r\n\t\tif (this.projectId != undefined) {\r\n\t\t\tthis.classifications = await this.apiClient.orgByToken\r\n\t\t\t.postJson('Classification/GetClassifications_NoRole', this.projectId)\r\n\t\t\t.jsonResult();\r\n\t\t\tconsole.log('after GetClassifications:', this.classifications);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async fetchProject(projectId:string) {\r\n\t\tconsole.log('before fetchProject', projectId);\r\n\t\ttry {\r\n\t\t\tlet RM:RequestMethod = this.apiClient.project(projectId);\r\n\t\t\tlet R2:RequestErrorHandling = RM.get('Project/GetProject');\r\n\r\n\t\t\tlet resultPrj:ProjectDto = await R2.jsonResult();\r\n\t\t\tconsole.log('fetchProject THEN:', resultPrj);\r\n\t\t\tthis.project = resultPrj;\r\n\t\t\tthis.rememberOriginalProject();\r\n\t\t} catch (e) {\r\n\t\t\tconsole.error('something failed in fetchProject', projectId, e);\r\n\t\t} finally {\r\n\t\t\tconsole.log('after fetchProject call,', projectId);\r\n\t\t}\r\n\t}\r\n\t\r\n\tprivate rememberOriginalProject() {\r\n\t\tconsole.log('rememberOriginalProject');\r\n\t\t/* Makes a copy of the initial UNEDITED project,\r\n\t\tused at SAVE time to compare against for changes,\r\n\t\tto decide what changes have happened\r\n\t\tand need to be stored. \r\n\t\t*/\r\n\t\tthis.originalProject = Object.assign({}, this.project);\r\n\t\tif (this.project) {\r\n\t\t\tthis.originalProject.members = Boolean(this.project.members)\r\n\t\t\t? Object.assign([], this.project.members)\r\n\t\t\t: [];\r\n\t\t\tthis.originalProject.projectInvitations = Boolean(this.project.projectInvitations)\r\n\t\t\t? Object.assign([], this.project.projectInvitations)\r\n\t\t\t: [];\r\n\t\t\tthis.originalProject.location = Boolean(this.project.location) \r\n\t\t\t? Object.assign({}, this.project.location)\r\n\t\t\t: {};\r\n\t\t\tthis.originalProject.location.coordinates = Boolean(this.project.location) && Boolean(this.project?.location?.coordinates)\r\n\t\t\t? Object.assign({}, this.project.location?.coordinates)\r\n\t\t\t: { latitude : null, longitude: null };\r\n\t\t\t\r\n\t\tthis.originalProject.facilityManager = Boolean(this.project.facilityManager) \r\n\t\t\t? Object.assign({}, this.project.facilityManager)\r\n\t\t\t: {};\r\n\r\n\t\t\tthis.originalProject.facilityManager.location = Boolean(this.project.facilityManager) && Boolean(this.project?.facilityManager?.location)\r\n\t\t\t? Object.assign({}, this.project?.facilityManager?.location)\r\n\t\t\t: {};\r\n\t\t\t\r\n\t\t\tthis.originalProject.facilityManager.location.coordinates = Boolean(this.project.facilityManager) && Boolean(this.project?.facilityManager?.location) && Boolean(this.project?.facilityManager?.location?.coordinates) \r\n\t\t\t? Object.assign({}, this.project.facilityManager?.location?.coordinates)\r\n\t\t\t: { latitude : null, longitude: null };\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tprivate getUpdatedBasicInfo(): BasicInfo { // {} {\r\n\t\tconsole.log('getUpdatedBasicInfo');\r\n\t\tif (this.isEditing) {\r\n\t\t\tlet basicInfo:BasicInfo = {\r\n\t\t\t\tTypeId: this.isEditing ? this.originalProject?.typeId : \"00000000-0000-0000-0000-000000000000\",\r\n\t\t\t\tClassificationId: this.isEditing ? this.originalProject?.classificationId : \"00000000-0000-0000-0000-000000000000\",\r\n\t\t\t\tGrossArea: this.isEditing ? this.originalProject?.grossArea : \"\"\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tif (this.project?.typeId !== this.originalProject?.typeId) {\r\n\t\t\t\tbasicInfo.TypeId = this.project?.typeId;\r\n\t\t\t}\r\n\t\t\tif (this.project?.classificationId !== this.originalProject?.classificationId) {\r\n\t\t\t\tbasicInfo.ClassificationId = this.project?.classificationId.toString() === \"0\" ? \"00000000-0000-0000-0000-000000000000\" : this.project?.classificationId;\r\n\t\t\t}\r\n\t\t\tif (this.project?.grossArea !== this.originalProject?.grossArea) {\r\n\t\t\t\tbasicInfo.GrossArea = this.project?.grossArea;\r\n\t\t\t}\r\n\t\t\treturn basicInfo;\r\n\t\t} else {\r\n\t\t\tlet basicInfo:BasicInfo = {\r\n\t\t\t\tTypeId: \"00000000-0000-0000-0000-000000000000\",\r\n\t\t\t\tClassificationId: \"00000000-0000-0000-0000-000000000000\",\r\n\t\t\t\tGrossArea: \"\"\r\n\t\t\t};\r\n\t\t\tif (Boolean(this.project?.typeId)) {\r\n\t\t\t\tbasicInfo.TypeId = this.project?.typeId;\r\n\t\t\t}\r\n\t\t\tif (this.project?.classificationId != undefined) {\r\n\t\t\t\tbasicInfo.ClassificationId = this.project?.classificationId;\r\n\t\t\t}\r\n\t\t\tif (Boolean(this.project?.grossArea)) {\r\n\t\t\t\tbasicInfo.GrossArea = this.project?.grossArea;\r\n\t\t\t}\r\n\t\t\treturn basicInfo;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate getUpdatedLocation(): {} {\r\n\t\tif (this.isEditing) {\r\n\t\t\tlet location = {\r\n\t\t\t\tAddress: this.isEditing ? this.originalProject?.location?.address : \"\",\r\n\t\t\t\tCity: this.isEditing ? this.originalProject?.location?.city : \"\",\r\n\t\t\t\tZipCode: this.isEditing ? this.originalProject?.location?.zipCode : \"\",\r\n\t\t\t\tRegion: this.isEditing ? this.originalProject?.location?.region : \"\"\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tif (this.project?.location?.address !== this.originalProject?.location?.address) {\r\n\t\t\t\tlocation.Address = this.project?.location?.address;\r\n\t\t\t}\r\n\t\t\tif (this.project?.location?.zipCode !== this.originalProject?.location?.zipCode) {\r\n\t\t\t\tlocation.ZipCode = this.project?.location?.zipCode;\r\n\t\t\t}\r\n\t\t\tif (this.project?.location?.city !== this.originalProject?.location?.city) {\r\n\t\t\t\tlocation.City = this.project?.location?.city;\r\n\t\t\t}\r\n\t\t\tconsole.log(\"ori \" , this.originalProject?.location?.region)\r\n\t\t\tconsole.log(\"prj \" , this.project?.location?.region) \r\n\t\t\tif (this.project?.location?.region !== this.originalProject?.location?.region) {\r\n\t\t\t\tlocation.Region = this.project?.location?.region;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn location;\r\n\t\t} else {\r\n\t\t\tlet location: {Address?: string, City?: string, ZipCode?: string, region: string} = {\r\n\t\t\t\tAddress: \"\",\r\n\t\t\t\tCity: \"\",\r\n\t\t\t\tZipCode: \"\",\r\n\t\t\t\tregion: \"\"\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tif (this.project?.location != undefined && this.project?.location?.address != undefined) {\r\n\t\t\t\tlocation.Address = this.project?.location?.address;\r\n\t\t\t}\r\n\t\t\tif (this.project?.location != undefined && this.project?.location?.zipCode != undefined) {\r\n\t\t\t\tlocation.ZipCode = this.project?.location?.zipCode;\r\n\t\t\t}\r\n\t\t\tif (this.project?.location != undefined && this.project?.location?.city != undefined) {\r\n\t\t\t\tlocation.City = this.project?.location?.city;\r\n\t\t\t}\r\n\t\t\tif (this.project?.location?.region !== this.originalProject?.location?.region) {\r\n\t\t\t\tlocation.region = this.project?.location?.region ? this.project?.location?.region : \"\";\r\n\t\t\t}\r\n\t\t\treturn location;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate getUpdatedFacilityManager(): {} {\r\n\t\tif(this.isEditing) {\r\n\t\t\tlet facilityManager = {\r\n\t\t\t\tName: this.isEditing ? this.originalProject?.facilityManager?.name : \"\",\r\n\t\t\t\tLocation: {\r\n\t\t\t\t\tAddress: this.isEditing ? this.originalProject?.facilityManager?.location?.address : \"\",\r\n\t\t\t\t\tCity: this.isEditing ? this.originalProject?.facilityManager?.location?.city : \"\",\r\n\t\t\t\t\tZipCode: this.isEditing ? this.originalProject?.facilityManager?.location?.zipCode : \"\",\r\n\t\t\t\t},\r\n\t\t\t\tVat: this.isEditing ? this.originalProject?.facilityManager?.vat : \"\"\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tif (this.project?.facilityManager?.name !== this.originalProject?.facilityManager?.name) {\r\n\t\t\t\tfacilityManager.Name = this.project?.facilityManager?.name;\r\n\t\t\t}\r\n\t\t\tif (this.project?.facilityManager?.location?.address !== this.originalProject?.facilityManager?.location?.address) {\r\n\t\t\t\tfacilityManager.Location.Address = this.project?.facilityManager?.location?.address;\r\n\t\t\t}\r\n\t\t\tif (this.project?.facilityManager?.location?.zipCode !== this.originalProject?.facilityManager?.location?.zipCode) {\r\n\t\t\t\tfacilityManager.Location.ZipCode = this.project?.facilityManager?.location?.zipCode;\r\n\t\t\t}\r\n\t\t\tif (this.project?.facilityManager?.location?.city !== this.originalProject?.facilityManager?.location?.city) {\r\n\t\t\t\tfacilityManager.Location.City = this.project?.facilityManager?.location?.city;\r\n\t\t\t}\t\t\t\r\n\t\t\tif (this.project?.facilityManager?.vat !== this.originalProject?.facilityManager?.vat) {\r\n\t\t\t\tfacilityManager.Vat = this.project?.facilityManager?.vat;\r\n\t\t\t}\r\n\t\t\treturn facilityManager;\r\n\t\t} else {\r\n\t\t\tlet facilityManager: {Name: string | undefined, Location: any, Vat: string | undefined} = {\r\n\t\t\t\tName: \"\",\r\n\t\t\t\tLocation: {\r\n\t\t\t\t\tAddress: \"\",\r\n\t\t\t\t\tCity: \"\",\r\n\t\t\t\t\tZipCode: \"\",\r\n\t\t\t\t},\r\n\t\t\t\tVat: \"\"\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tif (Boolean(this.project?.facilityManager) && this.project?.facilityManager?.name != undefined) {\r\n\t\t\t\tfacilityManager.Name = this.project?.facilityManager?.name;\r\n\t\t\t}\r\n\t\t\tif (Boolean(this.project?.facilityManager) && Boolean(this.project?.facilityManager?.location) && this.project?.facilityManager?.location?.address != undefined) {\r\n\t\t\t\tfacilityManager.Location.Address = this.project?.facilityManager?.location?.address;\r\n\t\t\t}\r\n\t\t\tif (Boolean(this.project?.facilityManager) && Boolean(this.project?.facilityManager?.location) && this.project?.facilityManager?.location?.zipCode != undefined) {\r\n\t\t\t\tfacilityManager.Location.ZipCode = this.project?.facilityManager?.location?.zipCode;\r\n\t\t\t}\r\n\t\t\tif (Boolean(this.project?.facilityManager) && Boolean(this.project?.facilityManager?.location) && this.project?.facilityManager?.location?.city != undefined) {\r\n\t\t\t\tfacilityManager.Location.City = this.project?.facilityManager?.location?.city;\r\n\t\t\t}\t\t\t\r\n\t\t\tif (Boolean(this.project?.facilityManager) && this.project?.facilityManager?.vat != undefined) {\r\n\t\t\t\tfacilityManager.Vat = this.project?.facilityManager?.vat;\r\n\t\t\t}\r\n\t\t\treturn facilityManager;\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n\t\r\n\t/* MEMBER HANDLING */\r\n\r\n\tprivate handleMemberListSearchEvent(data: string) { \r\n\t\tconsole.log('handleMemberListSearchEvent, data:', data);\r\n\t\tthis.searchTerm = data; \r\n\t}\t\r\n\r\n\tpublic newMember() { \r\n\t\tconsole.log('newMember');\r\n\t\tthis.searchMemberEnabled = true; \t\t\r\n\t\tthis.focusField_ASAP(); // JG: This should put keyboard focus in the search field!\r\n\t}\r\n\r\n\tpublic focusField_ASAP() { //console.log('setting focus to ', inputField);\r\n\t\tlet inputField = document.getElementById('memberSearchInput_id');\r\n\t\tsetTimeout(() => { inputField!.focus(); } , 200);\r\n\t\t// so, set keyboard focus to input field 'memberSearchInput_id'\r\n\t\t// why did this not work..? must we async it?\r\n\t\t// Maybe it is because it is not enabled yet?\r\n\t}\r\n\r\n\tpublic cancelNewMember() {\r\n\t\tconsole.log('cancelNewMember');\r\n\t\tthis.searchMemberEnabled = false;\r\n\t\tthis.searchMemberResult = [];\r\n\t\tthis.searchMemberText = \"\";\r\n\t}\r\n\t\r\n\tpublic async searchMemberTextChanged(newValue: string, oldValue: string) {\r\n\t\t//console.log('searchMemberTextChanged, newValue:',newValue);\r\n\t\tif (!newValue) {\r\n\t\t\tthis.searchMemberResult = [];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet result:any = undefined; // this is an array of some DTO type, and we should specify that.\r\n\t\ttry {\r\n\t\t\tresult = await this.apiClient.orgByToken.postJson(`UserInfo/SearchForUsers?projectId=${this.projectId}`, newValue).jsonResult();\r\n\t\t\tconsole.log(\"result \" , result);\r\n\t\t} catch (reason) {\r\n\t\t\tconsole.error(reason);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\t\r\n\t\tlet currentMemberIds = this.project?.members.map(x => x.userId);\r\n\t\tthis.searchMemberResult = result\r\n\t\t.filter((m: any) => {\t\t\t\t\t\r\n\t\t\treturn currentMemberIds?.indexOf(m.id) === -1\r\n\t\t})\r\n\t\t.map((userDto: any) => {\r\n\t\t\treturn { userId : userDto.id, \r\n\t\t\t\tname : userDto.name, \r\n\t\t\t\temail: userDto.email, \r\n\t\t\t\tcompanyName: userDto.companyName, \r\n\t\t\t\tuserCompanyId: userDto.UserCompanyId };\r\n\t\t});\r\n\t}\r\n\t\r\n\tpublic async addMember(member: Member, index: number) {\r\n\t\tconsole.log('addMember, member:',member);\r\n\t\tif (Boolean(this.project?.members.find(x => x.email === member.email))){\r\n\t\t\tthis.modal.OpenMessage(\r\n\t\t\t\tthis.i18n.tr(\"Error\"),\r\n\t\t\t\tthis.i18n.tr(\"User with email: \") + member.email + this.i18n.tr(\" is already attached to this project.\") \r\n\t\t\t)\r\n\t\t} else {\r\n\r\n\t\t\tif (this.projectId == undefined) { return; }\r\n\r\n\t\t\tlet result: HttpResponseMessage = await this.apiClient.project(this.projectId).postJson('Project/AddMembers', [member]).response();\r\n\t\t\tif (result.statusCode != 200) {\r\n\t\t\t\tthis.modal.OpenMessage(\"User not added\", \"The user could not be added to the project.\")\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.appContext.getSelectedProject();\r\n\t\t\tthis.project?.members.push(member);// in manage-project.addMemember.\r\n\t\t\tconsole.log('addMember will add', member, 'we now have', this.project?.members);\r\n\t\t\tconsole.log(`userId: ${member.userId}, companyId: ${member.userCompanyId}`);\r\n\t\t\tthis.searchMemberResult.splice(index, 1);\r\n\t\t}\r\n\t\t\r\n\t}\r\n\r\n\tpublic async removeMember(member:Member) {\r\n\t\tif (this.projectId != undefined) {\r\n\t\t\tlet areYouSure: DialogCloseResult = await this.modal.OpenConfirm(\"Remove member\", \"Are you sure you want to remove this member?\").whenClosed();\r\n\t\t\tif (areYouSure.wasCancelled == true) { return; }\r\n\t\t\tlet result: HttpResponseMessage = await this.apiClient.project(this.projectId).postJson('Project/RemoveMembers', [member.userId]).response();\r\n\t\t\tif (result.statusCode == 200) {\r\n\t\t\t\tlet index = this.project?.members.indexOf(member);\r\n\t\t\t\tif (index != undefined) {\r\n\t\t\t\t\tthis.project?.members.splice(index, 1);//ManageProject.removeMember\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tthis.modal.OpenMessage(\"User not removed\", \"The user could not be removed from the project.\")\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tprivate getAddedMembers():Member[] {\r\n\t\tif (!this.project) { return [];} // (No project - none added.)\r\n\t\tif (!Boolean(this.project.members)) { return []; } // (No members - none added.)\r\n\t\t\r\n\t\tlet originals:string[] = []; // Compare current members with originals.\r\n\t\tif (this.originalProject) { originals = this.originalProject.members.map( m => m.userId ); }\t\r\n\t\tif (!originals) { return []; } // (without originals, 'added' makes no sense.. I guess?)\r\n\t\treturn this.project.members.filter( m => !originals.includes(m.userId) ); \t\t\r\n\t} \r\n\r\n\t// return true if not found, return false if array is empty..?\t\t \r\n\t// return those (..current) project-members that are NOT in the original-memberIDs: (which thus must have been added.)\r\n\t//: false // (JG: For some reason, the original code was expressed like this: That is, it would filter 'false' if originalMembersIds evaluated to false..? I don't know the logic behind that.)\r\n\r\n\tprivate getRemovedMembersIds():string[] {\r\n\t\tif (!Boolean(this.originalProject) || !Boolean(this.originalProject?.members) || !Boolean(this.project?.members) ) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tlet currentMembersIds = this.project?.members.map(x => x.userId);\r\n\t\tlet originalMembersIds = this.originalProject?.members.map(x => x.userId);\r\n\t\tif (originalMembersIds) {\r\n\t\t\treturn originalMembersIds.filter(memberId => {\r\n\t\t\t\tif (currentMembersIds) {\r\n\t\t\t\t\treturn currentMembersIds.indexOf(memberId) < 0\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn [];\r\n\t}\r\n\r\n\r\n\r\n\r\n\t/* INVITE HANDLING */\r\n\r\n\tpublic async inviteMember(email: string) { // triggers when +Plus-INVITE is clicked.\r\n\t\tconsole.log('inviteMember, email:',email);\r\n\r\n\t\tif (Boolean(this.project?.projectInvitations.find(x => x.email.toLowerCase() === email.toLowerCase())) || Boolean(this.project?.members.find(x => x.email.toLowerCase() === email.toLowerCase()))) {\r\n\t\t\tthis.modal.OpenMessage(\r\n\t\t\t\tthis.i18n.tr(\"Error\"),\r\n\t\t\t\tthis.i18n.tr(\"A user with email: \") + email + this.i18n.tr(\" has already been added to this project.\")\r\n\t\t\t)\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.validateEmail(email)) {\r\n\t\t\tthis.modal.OpenMessage(\r\n\t\t\t\tthis.i18n.tr(\"Error\"),\r\n\t\t\t\tthis.i18n.tr(\"The entered email is invalid\")\r\n\t\t\t)\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet L = window.location;\r\n\t\tlet host = `${L.protocol}//${L.host}`; \r\n\t\tconsole.log('passing host:',host);\r\n\t\t//let host:string = 'https://aoc-linux-client-test.azurewebsites.net';\r\n\t\tlet invite: ProjectInvitation = { \r\n\t\t\temail: email, \r\n\t\t\tid: \"00000000-0000-0000-0000-000000000000\",\r\n\t\t\tprojectId: \"00000000-0000-0000-0000-000000000000\" ,\r\n\t\t\thost: host,\r\n\t\t\tresponseStatus: ResponseStatus.Pending,\r\n\t\t\tasOrgUser: this.asOrgUser,\r\n\t\t\tinviteeName: \"\",\r\n\t\t\tinviteeOrgName: \"\",\r\n\t\t\tprojectRole: ProjectRole.Prj_User\r\n\t\t};\r\n\r\n\t\tif (this.projectId != undefined) {\r\n\t\t\t// let userExistResult: HttpResponseMessage = await this.apiClient.project(this.projectId).postJson('Project/IsUserKnown', invite.email).response();\r\n\t\t\t// console.log(\"userExistResult \" , userExistResult);\r\n\t\t\tlet addInviResult: HttpResponseMessage = await this.apiClient.project(this.projectId).postJson('Project/AddInvitations', [invite]).response();\r\n\t\t\tif (addInviResult.statusCode == 200) {\r\n\t\t\t\tlet updatedInvitations: ProjectInvitation[] = addInviResult.content;\r\n\t\t\t\tfor (let i = 0; i < updatedInvitations.length; i++) {\r\n\t\t\t\t\tlet ix = this.project?.projectInvitations.findIndex(x => x.email == updatedInvitations[i].email);\r\n\t\t\t\t\tif (ix && ix > -1) {\r\n\t\t\t\t\t\tthis.project?.projectInvitations.splice(ix, 1, updatedInvitations[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\t\r\n\t\t\t\tconsole.log(\"updatedInvitaiton\" , updatedInvitations[0]);\r\n\t\t\t\tthis.project?.projectInvitations.push(updatedInvitations[0]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic async removeInvitee(invitee: ProjectInvitation): Promise {\r\n\t\tif (this.projectId != undefined) {\r\n\t\t\tlet areYouSure: DialogCloseResult = await this.modal.OpenConfirm(\"Remove invitation\", \"Are you sure you want to remove this invitation?\").whenClosed();\r\n\t\t\tif (areYouSure.wasCancelled == true) { return; }\r\n\t\t\tlet result: HttpResponseMessage = await this.apiClient.project(this.projectId).postJson('Project/RemoveInvitations', [invitee.id])\r\n\t\t\t.handleErrorWithErrorService((t: ErrorService, reason: HttpResponseMessage) => {\r\n\t\t\t\tif (reason.statusCode == 410) {\r\n\t\t\t\t\tthis.modal.OpenConfirm(\"Invitation not found\",\"The invitation could not be found. Do you wish to reload the project?\")\r\n\t\t\t\t\t.whenClosed(async (result: DialogCloseResult) => {\r\n\t\t\t\t\t\tif (result.wasCancelled == false) {\r\n\t\t\t\t\t\t\tthis.project = await this.apiClient.project(this.project!.id).get('Project/GetProject').jsonResult();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.modal.OpenMessage(\"Role change failed\",\"Changing the role did not succeed.\");\r\n\t\t\t\t}\r\n\t\t\t}).response();\r\n\t\t\tif (result.statusCode == 200) {\r\n\t\t\t\tlet index = this.project?.projectInvitations.indexOf(invitee);\r\n\t\t\t\tif (index != undefined && index != -1) {\r\n\t\t\t\t\tthis.project?.projectInvitations.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate getAddedInvitations():ProjectInvitation[]{\r\n\t\tif (!Boolean(this.project?.projectInvitations)) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tif (this.project?.projectInvitations) {\r\n\t\t\treturn this.project.projectInvitations.filter(invitation => { return invitation.id === \"00000000-0000-0000-0000-000000000000\"});\r\n\t\t}\r\n\t\treturn [];\r\n\t}\r\n\r\n\tprivate getRemovedInvitationIds():string[]{\r\n\t\tif (!Boolean(this.originalProject) || !Boolean(this.originalProject?.projectInvitations) || !Boolean(this.project?.projectInvitations) )\r\n\t\t\treturn [];\r\n\t\tlet currentInvitationIds = this.project?.projectInvitations.filter(invitation => { return invitation.id !== \"00000000-0000-0000-0000-000000000000\"}).map(x => x.id);\r\n\t\tlet originalMembersIds = this.originalProject?.projectInvitations.filter(invitation => { return invitation.id !== \"00000000-0000-0000-0000-000000000000\"}).map(x => x.id);\r\n\t\tif (originalMembersIds) {\t\r\n\t\t\treturn originalMembersIds.filter(invitationId => {\r\n\t\t\t\tif (currentInvitationIds) {\r\n\t\t\t\t\treturn currentInvitationIds.indexOf(invitationId) < 0\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn [];\r\n\t}\r\n\r\n\tprivate validateEmail(mail: string) { // UB: inviteMember.\r\n\t\treturn /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(mail);\r\n\t}\r\n\r\n\tprivate GetResponseStatus(status: number): string {\r\n\t\treturn ResponseStatus[status];\r\n\t}\r\n\r\n\t/*\r\n\tJG: This does not make sense - we already have this info,\r\n\tand it doesn't make sense to retrieve the full whitelist DTO\r\n\tjust to throw it all away, to just get the ID?\r\n\tprivate getWhitelist() {\r\n\t\t// We do this, because project-whitelist is on local org-db, NOT on master db.\r\n\t\tconsole.log('begin getWhitelist');\r\n\t\tthis.apiClient.project(this.projectId)\r\n\t\t.get(\"Project/GetWhitelist\")\r\n\t\t.jsonResult()\r\n\t\t.then( (prjWhitelist_result:WhitelistDto) => {\r\n\t\t\tconsole.log('after getWhitelist:', prjWhitelist_result.id, prjWhitelist_result);\r\n\t\t\tthis.chosenWhitelistId = prjWhitelist_result.id === undefined\r\n\t\t\t\t? null\r\n\t\t\t\t: prjWhitelist_result.id;\r\n\t\t});\r\n\t}\r\n\t*/\r\n\r\n\tprivate async getAllWhitelists() {\r\n\t\tthis.whitelists = [];\r\n\t\tconsole.log('before getAllWhitelists', this.projectId);\r\n\t\tthis.whitelists = await this.apiClient.orgByToken.postJson('Whitelist/GetWhitelists_NoRole', this.projectId).jsonResult();\r\n\t\tconsole.log('after getAllWhitelists:', this.whitelists);\r\n\t}\r\n\t\r\n\t/* TRANSFER PROJECT STANDARDS */\r\n\tprivate openTransferStandards(project : string) {\r\n\t\tthis.router.navigate('administration/projects/edit/'+project+'/transfer');\r\n\r\n\t}\r\n\r\n\tgetRoleName(role: number | string): string {\r\n\t\tif (typeof role === \"number\") {\r\n\t\t\treturn UIPrjRoleNames[ProjectRole[role]];\r\n\t\t} else {\r\n\t\t\treturn UIPrjRoleNames[role];\r\n\t\t}\r\n\t}\r\n\r\n\tasync setNewRole(member: Member, role:string): Promise {\r\n if (this.project) {\r\n let memberRole = ProjectRole[role];\r\n console.log(\"role\",memberRole);\r\n let response = await this.apiClient.project(this.project.id).postJson(`PrjManager/ChangeMemberRole_NOROLE?userId=${member.userId}`, memberRole).response();\r\n if (response.statusCode == 200) {\r\n member.role = ProjectRole[role];\r\n\t\t\t\tif (member.userId == this.appContext.currentUser?.id) {\r\n\t\t\t\t\tthis.events.publish(\"navigation:update-prj-token\");\r\n\t\t\t\t}\r\n return;\r\n }\r\n }\r\n }\r\n\r\n\tasync setNewRoleForInvitee(invitee: ProjectInvitation, role: string): Promise {\r\n if (this.project) {\r\n let memberRole = ProjectRole[role];\r\n console.log(\"role\",memberRole);\r\n let response = await this.apiClient.project(this.project.id).postJson(`Project/UpdateInvitationRole?invitationId=${invitee.id}`, role)\r\n\t\t\t.handleErrorWithErrorService((t: ErrorService, reason: HttpResponseMessage) => {\r\n\t\t\t\tif (reason.statusCode == 410) {\r\n\t\t\t\t\tthis.modal.OpenConfirm(\"Invitation not found\",\"The invitation could not be found. Do you wish to reload the project?\")\r\n\t\t\t\t\t.whenClosed(async (result: DialogCloseResult) => {\r\n\t\t\t\t\t\tif (result.wasCancelled == false) {\r\n\t\t\t\t\t\t\tthis.project = await this.apiClient.project(this.project!.id).get('Project/GetProject').jsonResult();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.modal.OpenMessage(\"Role change failed\",\"Changing the role did not succeed.\");\r\n\t\t\t\t}\r\n\t\t\t}).response();\r\n if (response.statusCode == 200) {\r\n invitee.projectRole = ProjectRole[role];\r\n return;\r\n }\r\n }\r\n }\r\n\r\n\tprivate async resendInvitation(invitation: ProjectInvitation) {\r\n\t\tlet L = window.location;\r\n\t\tlet host = `${L.protocol}//${L.host}`; \r\n\t\tinvitation.host = host;\r\n\t\tif (this.project) {//Not using prjToken, could in the future perhaps?\r\n\t\t\tlet response = await this.apiClient.project(this.project.id).postJson(`Project/ResendInvitation`, invitation)\r\n\t\t\t.handleErrorWithErrorService((t: ErrorService, reason: HttpResponseMessage) => {\r\n\t\t\t\tif (reason.statusCode == 410) {\r\n\t\t\t\t\tthis.modal.OpenConfirm(\"Invitation not found\",\"The invitation could not be found. Do you wish to reload the project?\")\r\n\t\t\t\t\t.whenClosed(async (result: DialogCloseResult) => {\r\n\t\t\t\t\t\tif (result.wasCancelled == false) {\r\n\t\t\t\t\t\t\tthis.project = await this.apiClient.project(this.project!.id).get('Project/GetProject').jsonResult();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.modal.OpenMessage(\"Role change failed\",\"Changing the role did not succeed.\");\r\n\t\t\t\t}\r\n\t\t\t}).response();\r\n if (response.statusCode == 200) {\r\n\t\t\t\tinvitation.responseStatus = ResponseStatus.Pending;\r\n return;\r\n } \r\n\t\t}\r\n\t}\r\n\t\r\n}\r\n"],"names":["ManageProject","constructor","element","apiClient","router","modal","events","i18n","appContext","orgTokenService","isEditing","isSaving","projectId","searchMemberText","searchMemberEnabled","classifications","showSettings","searchTerm","subscriptions","chosenWhitelistId","whitelists","asOrgUser","projectRoles","Object","keys","filter","v","isNaN","Number","isScrolled","event","this","fieldsetBody","scrollTop","document","querySelector","classList","add","remove","searchMemberResult","viewContext","isFormInvalid","undefined","project","name","location","address","zipCode","city","isOrgAdmin","orgTokenInfo","orgRole","async","input","getAllWhitelists","fetchClassifications","fetchProject","prjWhitelist","whitelistId","resetInputs","ensureAdminIsFirstMember","updateOrgTokenInfo","admin","currentUser","console","log","companyName","myAdmin","id","organization","region","classificationId","ownerCompanyId","ownerCompanyName","members","userId","firstName","lastName","email","userCompanyId","projectInvitations","selected","created_UTC","Date","attached","addEventListener","subscribe","data","handleMemberListSearchEvent","getOrgTokenInfo","deactivate","removeEventListener","detached","forEach","subscription","dispose","toggleUnitSettings","reset","navigateToRoute","originalProject","submit","update","create","closeUnitSettings","trimmedProjectName","Boolean","trim","system","postJson","jsonResult","then","createdProjectId","number","basicInfo","getUpdatedBasicInfo","getUpdatedLocation","facilityManager","getUpdatedFacilityManager","promises","push","response","catch","reason","error","json","Address","City","ZipCode","membersAdded","getAddedMembers","length","x","unitSettings","save","rememberOriginalProject","Promise","all","values","publish","finally","navigate","replace","trigger","OpenMessage","whenClosed","createByOrgFromToken","orgByToken","saveByOrg","putHostOnInvitations","invitations","L","window","host","protocol","i","api","path","REH","jsonResponse","xx","updateWhitelist","e","warn","R2","get","resultPrj","assign","coordinates","latitude","longitude","TypeId","typeId","ClassificationId","GrossArea","grossArea","toString","Region","Name","Location","Vat","vat","newMember","focusField_ASAP","inputField","getElementById","setTimeout","focus","cancelNewMember","newValue","oldValue","result","currentMemberIds","map","m","indexOf","userDto","UserCompanyId","member","index","find","tr","statusCode","getSelectedProject","splice","OpenConfirm","wasCancelled","originals","includes","getRemovedMembersIds","currentMembersIds","originalMembersIds","memberId","toLowerCase","validateEmail","invite","responseStatus","inviteeName","inviteeOrgName","projectRole","addInviResult","updatedInvitations","content","ix","findIndex","invitee","handleErrorWithErrorService","t","getAddedInvitations","invitation","getRemovedInvitationIds","currentInvitationIds","invitationId","mail","test","GetResponseStatus","status","openTransferStandards","getRoleName","role","memberRole","observable","computedFrom","autoinject","Element","I18N"],"sourceRoot":""}