{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"React\"","webpack:///./Classes/ApprovalEnum.jsx","webpack:///./Classes/DivisionEnum.jsx","webpack:///./Classes/BaseGrant.jsx","webpack:///./Classes/Grant.jsx","webpack:///./Classes/GrantStatus.jsx","webpack:///./Classes/ApplicationStatus.jsx","webpack:///./Classes/PublishableGrant.jsx","webpack:///./Classes/WorkflowManager.jsx","webpack:///./Classes/PublishedGrantData.jsx","webpack:///./Classes/PublishedEventData.jsx","webpack:///./Classes/ListNames.jsx","webpack:///./Classes/User.jsx","webpack:///./Classes/Attachment.jsx","webpack:///./Classes/LogMessage.jsx","webpack:///./Classes/LogSeverityEnum.jsx","webpack:///./Classes/Proposal.jsx","webpack:///./Classes/SpecialCall.jsx","webpack:///./Classes/PotentialStudy.jsx","webpack:///./Classes/ExploratoryGroupRegistration.jsx","webpack:///./Classes/PlenaryMeetingRegistration.jsx","webpack:///./Classes/SeminarRegistration.jsx","webpack:///./Classes/Application.jsx","webpack:///./Classes/ApplicantDetails.jsx","webpack:///./Classes/ProjectDetails.jsx","webpack:///./Classes/Budget.jsx","webpack:///./Classes/ApplicationAttachments.jsx","webpack:///./Classes/DocumentGenerator.jsx","webpack:///./Classes/DocumentGeneratorRibbon.jsx","webpack:///./Classes/ManageGrantsRibbon.jsx","webpack:///./Classes/AgreementsDetails.jsx","webpack:///./Classes/BudgetDetails.jsx","webpack:///./Classes/ProjectTimeline.jsx","webpack:///./Classes/AdditionalQuestions.jsx","webpack:///./Classes/ManageApplicationsRibbon.jsx","webpack:///./Classes/ApplicationAsyncDefaultValues.jsx","webpack:///./Classes/Nationalities.jsx","webpack:///./Classes/Nations.jsx","webpack:///./Classes/Titles.jsx","webpack:///./Classes/LinkedApproval.jsx","webpack:///./Classes/ChangeRequest.jsx","webpack:///./Classes/ApplicationFieldCollections.jsx","webpack:///./Classes/ReleasableTo.jsx","webpack:///./Classes/InternalApplicationStatusEnum.jsx","webpack:///./Classes/KeyPriority.jsx","webpack:///./Components/ApprovalDialogComponent.jsx","webpack:///./Components/ConfirmDialogComponent.jsx","webpack:///./Components/PublishedGrantComponent.jsx","webpack:///./Components/GrantDetailsComponent.jsx","webpack:///./Components/GrantApplicationWizardComponent.jsx","webpack:///./Components/ErrorMessageComponent.jsx","webpack:///./Components/EventRegistrationComponent.jsx","webpack:///./Components/SetKeyPrioritiesComponent.jsx","webpack:///./Components/ChangeAdvisorsComponent.jsx","webpack:///./Components/AssignSpecialistComponent.jsx","webpack:///./Components/ReviewCommentsComponent.jsx","webpack:///./Components/ReviewEvaluationsComponent.jsx","webpack:///./Components/ReviewSummaryComponent.jsx","webpack:///./Components/AssignReviewersComponent.jsx","webpack:///./Components/RequestMoreInformationComponent.jsx","webpack:///./Components/NotifyBudgetOfficersComponent.jsx","webpack:///./Components/StudyOrderGroupComponent.jsx","webpack:///./Components/Wizard1ApplicantComponent.jsx","webpack:///./Components/Wizard2ProjectDetailsComponent.jsx","webpack:///./Components/Wizard3BudgetComponent.jsx","webpack:///./Components/Wizard4AudienceComponent.jsx","webpack:///./Components/Wizard5ProjectStructureTimelineComponent.jsx","webpack:///./Components/Wizard6PreviousGrantsComponent.jsx","webpack:///./Components/Wizard7AttachmentsComponent.jsx","webpack:///./Components/Wizard9FinancialRulesComponent.jsx","webpack:///./Components/Wizard10OverviewComponent.jsx","webpack:///./Components/AmmendApplicationComponent.jsx","webpack:///./Components/ApplicationApprovalHistoryComponent.jsx","webpack:///./Components/InvitationDialogComponent.jsx","webpack:///./Components/SubmitDialogComponent.jsx","webpack:///./Components/ChangeRequestComponent.jsx","webpack:///./Components/ChangeRequestHistoryComponent.jsx","webpack:///./Components/AnsweredQuestionsComponent.jsx","webpack:///./Components/StudyGroupSubSiteCreatorComponent.jsx","webpack:///./Components/StudyGroupDocumentCreatorComponent.jsx","webpack:///./Components/ExchangeRateComponent.jsx","webpack:///./Components/KeyPrioritiesSelectorComponent.jsx","webpack:///./DisplayTemplates/DivisionFieldTemplate.jsx","webpack:///./DisplayTemplates/ContentTypeFieldTemplate.jsx","webpack:///./DisplayTemplates/ReadOnlyFieldTemplate.jsx","webpack:///./DisplayTemplates/ApprovalFieldTemplate.jsx","webpack:///./DisplayTemplates/CodeFieldTemplate.jsx","webpack:///./DisplayTemplates/SignatureFieldTemplate.jsx","webpack:///./DisplayTemplates/AutoNumberFieldTemplate.jsx","webpack:///./DisplayTemplates/BeneficiaryRequestFieldTemplate.jsx","webpack:///./DisplayTemplates/SharedWithFieldTemplate.jsx","webpack:///./DisplayTemplates/AssignedHeadOfSectionFieldTemplate.jsx","webpack:///./DisplayTemplates/ApplicationApprovalStatusFieldTemplate.jsx","webpack:///./RenderingDefinitions/BaseGrantRendering.jsx","webpack:///./RenderingDefinitions/PublishedGrantRendering.jsx","webpack:///./RenderingDefinitions/MyApplicationsRendering.jsx","webpack:///./Services/SharePointRestService.jsx","webpack:///./Services/SPUtil.jsx","webpack:///./Services/SPPreSaveAction.jsx","webpack:///./Services/SPRibbonControl.jsx","webpack:///./Services/FormValidator.jsx","webpack:///./Services/LocalStorageCache.jsx","webpack:///./index.jsx","webpack:///./RenderingDefinitions/DIGrantRendering.jsx","webpack:///./RenderingDefinitions/PDDGrantRendering.jsx","webpack:///./RenderingDefinitions/ESCGrantRendering.jsx","webpack:///external \"ReactDOM\""],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","4","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","React","ApprovalEnum","DivisionEnum","BaseGrant","item","_classCallCheck","this","setInternalDataFromSharePointObject","_createClass","_currentItem","_id","Id","_title","Title","_code","natoCode","_synopsis","natoSynopsis","_startDate","natoStartDate","indexOf","Date","SPUtil","parseSharePointDate","_endDate","natoEndDate","_editor","Editor","_modifiedOn","parse","Modified","_onHold","natoGrantStatus","toLocaleLowerCase","endsWith","divistionStr","natoDivision","startsWith","_division","PDD","DI","ESC","_spPageContextInfo","webTitle","INVALID","natoProjectType","_projectType","natoSpecialCallTemplate","natoPDDProjectType","_hasBeenSynchronized","currentGrantCode","url","webAbsoluteUrl","Promise","resolve","reject","SharePointRestService","fetch","then","response","json","odata","jsonObject","PublishedGrantData","catch","reason","itemId","listGuid","_this","objectName","division","spContentRow","document","getElementById","dialogContainer","createElement","id","insertAdjacentHTML","outerHTML","ReactDOM","ConfirmDialogComponent_ConfirmDialogComponent","title","subText","onConfirm","archiveInternal","onCancel","onClose","removeChild","_this2","location","search","saveCurrentForm","getPublishedGrantData","publishedGrant","allPromises","Array","Recycle","all","ctx","SP","ClientContext","get_current","list","get_web","get_lists","getById","listRootFolder","get_rootFolder","getItemById","load","executeQueryAsync","sender","args","fileUrl","get_item","rootFolderName","get_name","file","getFileByServerRelativeUrl","targetfileUrl","split","set_item","GrantStatus","ARCHIVED","update","moveTo","MoveOperations","overwrite","queryStringParam","parseQuerystring","href","LogMessage","Log","get_errorDetails","LogSeverityEnum","Error","_this3","synchronizeInternal","querystringAction","_this4","webPartQualifier","WebPartPage","Parts","Item","WebPartQualifier","formCtx","submitButtonId","SubmitButtonID","newPostbackUrl","action","modifyQueryStringParameter","encodeURIComponent","SPPreSaveAction","getInstance","callback","PostBackRequired","SPClientForms","ClientFormManager","SubmitClientForm","strictDoPostback","options","WebForm_PostBackOptions","WebForm_DoPostBackWithOptions","Verbose","PreSaveItem","_this5","UI","ModalDialog","showWaitScreenWithNoClose","Create","publishedGrantData","commonModalDialogClose","DialogResult","OK","study","PotentialStudy","additionalQuestions","questions","publishedEventData","PublishedEventData","spItem","synopsis","startDate","endDate","description","eventType","niagEvents","niagSocialEvents","additonalQuestions","Update","projectType","proposal","audience","natoTargetAudience","map","a","Key","Name","SetAudience","set","_url","code","editor","modifiedOn","onHold","isPublished","PUBLISHED_ON_HOLD","PUBLISHED","WAITING_FOR_PUBLICATION","Grant","_BaseGrant","Grant_classCallCheck","_possibleConstructorReturn","__proto__","getPrototypeOf","Number","listid","Guid","_get","UpdatePublishedGrantExternalView","_inherits","Grant_createClass","onhold","GrantStatus_classCallCheck","WAITING_FOR_HEAD_OF_SECTION","REJECTED_BY_HEAD_OF_SECTION","WAITING_FOR_PLANNING_OFFICER","REJECTED_BY_PLANNING_OFFICER","WAITING_FOR_PUBLICATION_AFTER_APPROVAL","ApplicationStatus","ApplicationStatus_classCallCheck","DRAFT","SUBMITTED","SUBMITTED_MORE_INFORMATION_REQUESTED","REJECTED","UNDER_REVIEW","AWARDED","PublishableGrant","PublishableGrant_classCallCheck","PublishableGrant_possibleConstructorReturn","PublishInternal","PublishableGrant_inherits","PublishableGrant_createClass","currentItemIdPromise","pathname","ListNames","GRANTS","userId","PublishableGrant_get","fromPublishableGrant","updatePublishedEventPromise","WorkflowManager","WorkflowManager_classCallCheck","WorkflowManager_createClass","listTitle","workflowName","workflowParameters","continueOnWorkflowNotFound","urlWAssoc","find","subscriptionData","Enabled","workflowParamsAsXml","keys","xmlEncodeFunction","param","join","webMethod","soap","xmlhttp","XMLHttpRequest","open","setRequestHeader","onreadystatechange","ev","readyState","DONE","status","statusText","send","PublishedGrantData_classCallCheck","PublishedGrantData_possibleConstructorReturn","_grantDetailsLink","natoGrantDetails","Url","PublishedGrantData_inherits","PublishedGrantData_createClass","PUBLISHED_GRANTS","headers","If-Match","undefined","clientContext","getByTitle","resetRoleInheritance","securityPrincipels","resetAudience","contributeGroups","web","adminGroup","get_associatedOwnerGroup","get_hasUniqueRoleAssignments","breakRoleInheritance","roleAssignments","get_roleAssignments","audienceRoles","RoleDefinitionBindingCollection","add","get_roleDefinitions","getByType","RoleType","reader","adminRoles","administrator","pddRoles","permissionCount","get_count","assignment","get_member","get_principalType","Utilities","PrincipalType","user","get_roleDefinitionBindings","removeAll","forEach","principal","ensureUser","group","get_siteGroups","getByName","groupName","X-HTTP-Method","currentItemJson","format","__metadata","type","queryString","grantDetailsLink","grantId","div","natoDescription","grant","applicationId","APPLICATIONS","EVENT_REGISTRATIONS","Application","rendering","toString","isLoggedIn","grantCode","linkToDetails","newItem","Description","newPublishedGrantObject","StartWorklow","Type","_PublishedGrantData","PublishedEventData_classCallCheck","PublishedEventData_possibleConstructorReturn","_description","_eventType","natoNIAGEventType","_niagEvents","natoNIAGEvents","_niagSocialEvents","natoNIAGSocialEvents","natoEncodedAdditionalQuestions","encodedAdditionalQuestions","JSON","_additionalQuestions","AdditionalQuestions","_questions","PublishedEventData_inherits","PublishedEventData_createClass","stringify","ListNames_classCallCheck","GRANT_APPROVALS","EVENT_REGISTRATIONS_SUBMITTED","DOCUMENT_TEMPLATES","ADDITIONAL_QUESTIONS","BENEFICIARY_REQUEST","QUESTIONS_ANSWERS","KEY_PRIORITIES","User","User_classCallCheck","_firstname","FirstName","_lastname","LastName","JobTitle","_emailaddress","EMail","Email","_address","_postalCode","_city","User_createClass","firstname","lastname","emailaddress","address","postalCode","city","groupsToCheck","isMemberOfGroup","cacheExpirationDate","now","cacheKey","cachedUserAdminData","LocalStorageCache","tryGetFromCache","cachedData","divisionalGroupName","context","currentUser","get_currentUser","userGroups","get_groups","isMember","groupsEnumerator","getEnumerator","moveNext","get_title","tryStoreInCache","userDisplayName","e","groupNames","querySiteInsteadOfWeb","arguments","cachedUserGroupsData","possibleMember","siteAbsoluteUrl","showError","numberOfGroups","cachedUser","setHours","isFormsBasedAuthentication","systemUserKey","UserAccount","Firstname","getUserById","Attachment","filename","contents","isNew","Attachment_classCallCheck","_filename","_contents","_isNew","Attachment_createClass","content-length","byteLength","fetchRaw","Delete","message","comments","listItem","base64Content","Base64EncodedByteArray","append","uniqueString","Math","random","substring","fileCreateInfo","FileCreationInformation","set_url","set_content","set_overwrite","folder","get_folder","ensureAttachmentsFolder","subfolder","newFile","get_files","setAttachmentFileMetadata","get_listItemAllFields","parentFolder","existingSubFolder","getFolderByServerRelativeUrl","docsetHomePageData","urlDocSet","newSubFolder","get_folders","newSubFolderItem","permissionsToDelete","pop","deleteObject","webServerRelativeUrl","kb","round","mb","toFixed","component","severity","LogMessage_classCallCheck","_message","_component","_severity","_timestamp","LogMessage_createClass","caller","ExecuteOrDelayUntilScriptLoaded","logEvent","CustomEvent","detail","constructor","dispatchEvent","Proposal","_PublishableGrant","Proposal_classCallCheck","Proposal_possibleConstructorReturn","natoHeadOfSectionApproval","_headOfSectionApproval","Pending","Approved","natoPlanningOfficerApproval","_planningOfficerApproval","_targetAudience","entity","registerPreSaveAction","isNaN","currentStatus","newStatus","Comments","Proposal_inherits","Proposal_createClass","headOfSectionApproval","planningOfficerApproval","Rejected","folderPath","manageListsPerms","BasePermissions","initPropertiesFromJson","ListItemAllFields","EffectiveBasePermissions","currentUserCanEditListItems","has","PermissionKind","addListItems","elm","SpecialCall","SpecialCall_classCallCheck","SpecialCall_possibleConstructorReturn","SpecialCall_inherits","SpecialCall_createClass","currentUserCanCreateNewSpecialCall","userHasPermission","link","rootfolder","innerText","appendChild","PotentialStudy_classCallCheck","PotentialStudy_possibleConstructorReturn","parseFields","PotentialStudy_inherits","PotentialStudy_createClass","natoAdditionalQuestions","fromFieldValue","questionsObject","natoAdditionalQuestionsId","fromIds","PotentialStudy_get","currentUserCanCreateNewPotentialStudy","ExploratoryGroupRegistration","ExploratoryGroupRegistration_classCallCheck","_itemTitle","_registrationDate","Created","_country","natoCountry","natoFirstname","natoLastname","natoTitle","_eMailAddress","natoEMailAddress","_company","natoCompany","_additionalQuestionAnswers","natoAdditionalQuestionAnswers","answer","ExploratoryGroupRegistration_createClass","additionalQuestionAnswerString","String","ContentTypeId","itemTitle","registrationDate","country","eMailAddress","company","additionalQuestionAnswers","additionalQuestionFields","concat","objectValues","additionalQuestionValues","allValues","numberOfColumns","fields","PlenaryMeetingRegistration","PlenaryMeetingRegistration_classCallCheck","replace","PlenaryMeetingRegistration_createClass","SeminarRegistration","SeminarRegistration_classCallCheck","SeminarRegistration_createClass","Application_classCallCheck","FileRef","_applicationStatus","natoApplicationStatus","_approvalStatus","natoApplicationApprovalStatus","_approvalComments","natoApprovalComments","_keyPriorities","natoKeyPriorities","_encodedKeyPriorities","natoEncodedKeyPriorities","_hasUniquePermissions","HasUniqueRoleAssignments","_author","Author","Account","ID","AuthorId","userLoginName","_projectNumber","natoProjectNumber","_meetingNumber","natoMeetingNumber","_partnershipFramework","natoPartnershipFramework","_origin","natoOrigin","_beneficiaryNation","natoBeneficiaryNation","_primaryKeyPriority","natoPrimaryKeyPriority","_secondaryKeyPriority","natoSecondaryKeyPriority","_priority","natoPriority","_beneficiaryNationsSplit","natoBeneficiaryNationsSplit","_region","natoRegion","_finalReportDueDate","natoFinalReportDueDate","_processStage","natoProcessStage","_godParent","natoGodParent","_documentReferences","natoDocumentReferences","_webURL","natoWebURL","_publisher","natoPublisher","_publisherSubSeries","natoPublisherSubSeries","_dateBooksReceived","natoDateBooksReceived","_yearOfInitialAward","natoYearOfInitialAward","_yearOfOfficialClosure","natoYearOfOfficialClosure","_approvedBudgetCeiling","natoApprovedBudgetCeiling","_initialAwardTrancheAmount","natoInitialAwardTrancheAmount","_milestone1TrancheAmount","natoMilestone1TrancheAmount","_milestone2TrancheAmount","natoMilestone2TrancheAmount","_milestone3TrancheAmount","natoMilestone3TrancheAmount","_milestone4TrancheAmount","natoMilestone4TrancheAmount","_milestoneFinalTrancheAmount","natoMilestoneFinalTrancheAmount","_initialAmount","natoInitialAmount","_budgetApproval","natoBudgetApproval","_applicantDetails","ApplicantDetails","_projectDetails","ProjectDetails","_projectBudget","BudgetDetails","_projectTimeline","ProjectTimeline","_attachmentsDetails","ApplicationAttachments","_agreementsDetails","AgreementsDetails","fieldValueToClaims","fieldValue","userData","claim","_advisors","natoAdvisors","_seniorAdvisors","natoSeniorAdvisors","_reviewers","natoReviewers","_grantAdministrators","natoGrantAdministrators","_headOfSection","natoAssignedHeadOfSection","_sectionSpecialists","natoSectionSpecialist","guidMatch","RegExp","exec","_listGuid","get_empty","setInitialPermission","defaultValues","ApplicationAsyncDefaultValues","setSeniorAdvisors","updatedItems","seniorAdvisors","Application_createClass","priorities","keyPrioritiesText","_toConsumableArray","Set","kp","sort","b","localeCompare","internalStatus","externalStatus","attachment","updateAverageRating","averageReviewScorePromise","getAverageRatingForAllEvaluations","averageRating","ApplicationApprovalStatusFieldTemplate","generateInternalValue","natoReadyForErpInterface","InternalApplicationStatusEnum","APPROVED_READY_FOR_INTERFACE","setSubmittedPermissions","saveApprovalAttachment","SetCustomStatus","APPROVED","applicantDetails","dataArray","Uint8Array","charCodeAt","UploadToDocumentSet","fieldValues","val","internalFieldName","reviewers","_this6","newRole","reviewerClaims","FieldUserValue","fromUser","reviewersToRemove","filter","findIndex","newReviewer","newReviewers","currentReviewer","principalId","get_principalId","reviewerUser","userRoles","sendNotificationPromise","grantAdministrators","advisors","_this7","advisorClaims","seniorAdvisorClaims","grantAdministratorClaims","headOfSection","sectionSpecialists","_this8","headOfSectionClaims","sectionSpecialistsClaims","evaluationsFolder","serverRelativeUrl","evaluationsFiles","fileEnumerator","ratings","averageRatingStr","get_fieldValues","parseFloat","totalAverageRating","reduce","items","_this9","getHeadOfSectionPromise","getHeadOfSectionFromGrantData","meetingNumber","setMonth","getMonth","assignedHeadOfSection","headOfSectionIds","notificationEmailMessageType","ChangeRequest","EnsureChangeRequestFolder","ensureBeneficiaryRequestFolder","messageToSend","emailTitle","_this10","updateApplicationStatus","urlItem","setPermissionsForMoreInformationNeeded","_this11","_this12","Info","get_message","role","accessDeniedExpected","RoleDefinition","permissionsChanged","getItemAtIndex","setIndividualPermissionsTo","_this13","authorId","_this14","beneficiaryNation","keyPriorities","origin","partnershipFramework","approvalComments","primaryKeyPriority","secondaryKeyPriority","priority","beneficiaryNationsSplit","region","finalReportDueDate","formatDate","processStage","godParent","documentReferences","webURL","publisher","publisherSubSeries","dateBooksReceived","yearOfInitialAward","yearOfOfficialClosure","approvedBudgetCeiling","initialAwardTrancheAmount","milestone1TrancheAmount","milestone2TrancheAmount","milestone3TrancheAmount","milestone4TrancheAmount","milestoneFinalTrancheAmount","initialAmount","toUserNameList","contactPerson","contactEmailAddress","contactAddress","contactCountry","contactNationality","contactTelephoneNumber","organizationName","organizationAddress","organizationPostalCode","organizationCity","organizationCountry","alternativeContactPerson","alternativeContactAddress","alternativeContactCountry","alternativeContactNationality","telephoneNumber","alternativeContactEmailAddress","alternativeContactOrganizationName","alternativeContactOrganizationCountry","projectCoDirectorsDetails","projectDetails","projectCode","projectSynopsis","projectDescription","projectDetailedDescription","projectLocation","projectCity","projectCountry","projectDate","projectEndDate","projectAmount","projectTopic","projectBudget","budgetBreakdownTemplate","substr","budgetCurrency","totalAmount","budgetBreakdown","budgetItems","ammount","numToWords","directorName","taskNumber","removeMilestone","directorCountry","directorAddress","agreementsDetails","previousGrants","publication","projectTargetAudience","projectNumberOfParticipants","projectRepresentative","userArray","nameList","isArray","row","num","th","dg","tn","tw","x","str","sk","y","trim","text","searchPattern","test","oldAttachment","SaveBudgetApproval","_this15","_commentsBO","_attachmentBO","_oldAttachmentBO","_statusBO","updateApprovalItem","updateFields","_internalFieldValueBO","createApprovalItem","_this16","itemCreateInfo","ListItemCreationInformation","set_folderUrl","newListItem","addItem","newValue","get_id","uploadAttachment","_this17","approvalIdStr","approvalId","natoApprovalStatus","_this18","promises","deleteOldAttachmentPromise","uploadAttachmentPromise","Upload","projectTimeline","attachmentsDetails","_this19","setProgramNumber","projectNumber","budgetApproval","_this20","isApplicant","decode","date","getDate","getFullYear","idDocSet","docSetId","_applicationFromContext","_isRetrievingApplicationForContext","setTimeout","getFromContext","application","logExceptionOnError","ApplicantDetails_classCallCheck","_editUserId","natoEditUserId","_organizationName","natoOrganization","_contactPerson","natoContactPerson","_contactEmailAddress","natoContactEmailAddress","_alternativeContactPerson","natoAlternativeContactPerson","_alternativeContactEmailAddress","natoAlternativeContactEmailAddress","_contactTelephoneNumber","natoContactTelephoneNumber","_telephoneNumber","natoTelephoneNumber","_organizationAddress","natoOrganizationAddress","_organizationPostalCode","natoOrganizationPostalCode","_organizationCity","natoOrganizationCity","_organizationCountry","natoOrganizationCountry","_invitedEmails","natoInvitedEmails","_contactAddress","natoContactAddress","_contactCountry","natoContactCountry","_contactNationality","natoContactNationality","_alternativeContactAddress","natoAlternativeContactAddress","_alternativeContactCountry","natoAlternativeContactCountry","_alternativeContactNationality","natoAlternativeContactNationality","_alternativeContactOrganizationName","natoAlternativeContactOrganization","_alternativeContactOrganizationCountry","natoAlternativeContactOrganizationCountry","_projectCoDirectorsDetails","natoProjectCoDirectorsDetails","ApplicantDetails_createClass","nowDate","timestamp","getHours","getMinutes","getSeconds","Path","ContentType","additionalFields","applicationsListRootFolder","applicationDocSetContentType","get_site","get_rootWeb","get_contentTypes","SOD","executeFunc","DocumentSet","docsetUrl","get_value","relativeUrl","folderItem","getCurrentUser","UpdateEditUser","details","editUserId","invitedEmails","_alternativeContactAlternativeEmailAddress","alternativeContactAlternativeEmailAddress","_alternativeContactCity","alternativeContactCity","_alternativeContactDepartment","alternativeContactDepartment","_alternativeContactFirstname","alternativeContactFirstname","_alternativeContactInstitute","alternativeContactInstitute","_alternativeContactLastname","alternativeContactLastname","_alternativeContactMobileNumber","alternativeContactMobileNumber","_alternativeContactTelephoneNumber","alternativeContactTelephoneNumber","_alternativeContactTitle","alternativeContactTitle","_alternativeContactZipCode","alternativeContactZipCode","_contactAlternativeEmailAddress","contactAlternativeEmailAddress","_contactCity","contactCity","_contactDepartment","contactDepartment","_contactFirstname","contactFirstname","_contactInstitute","contactInstitute","_contactLastname","contactLastname","_contactMobileNumber","contactMobileNumber","_contactTitle","contactTitle","_contactZipCode","contactZipCode","ProjectDetails_classCallCheck","_projectCode","_projectSynopsis","_projectDescription","_projectDetailedDescription","natoProjectDetailedDescription","_projectTargetAudience","natoProjectTargetAudience","_projectNumberOfParticipants","natoProjectNumberOfParticipants","_projectLocation","natoProjectLocation","_projectCity","natoProjectCity","_projectCountry","natoProjectCountry","_projectDate","natoProjectDate","_projectEndDate","natoProjectEndDate","_projectInstitutionName","natoProjectInstitutionName","_projectAmount","natoProjectAmount","_projectTopic","natoProjectTopic","_projectRepresentative","natoProjectRepresentative","_resourcesBreakdown","natoResourcesBreakdown","_tasksBreakdown","natoTasksBreakdown","ProjectDetails_createClass","Slug","projectInstitutionName","workBreakdown","resourceBreakdown","Budget","Budget_classCallCheck","_budgetFilename","_dataLoaded","Budget_createClass","itemUrl","budgetFileUrl","budgetData","_dummyValue","foo","serializableItem","bar","currentItemUrl","uploadUrl","blob","Blob","dummyValue","ApplicationAttachments_classCallCheck","ApplicationAttachments_createClass","allFilenames","toLocaleUpperCase","FileLeafRef","allCopyPromises","siteRelativeUrl","newFilename","_rootFolder","serviceUrl","rootFolder","cachedListId","_listId","listDetailsServiceUrl","listData","DocumentGenerator","siteRelativeTemplateUrl","showProgressDialog","relativeTo","DocumentGenerator_classCallCheck","_openDocumentMimeType","_closeDialogHtml","_templateUrl","_templateEngine","DocxTemplater","_templateFile","_showProgressDialog","_relativeTo","DocumentGenerator_createClass","templateData","getContextualObject","ShowProgress","uri","arrayBuffer","renderInternal","siteRelativeFolderUrl","apiUrlOverride","overwriteStr","newDocument","getZip","generate","mimeType","compression","apiBaseUrl","uploadResult","ServerRelativeUrl","serverRelativeFileUrl","progressImageVisibility","_progressDialog","get_dialogElement","getElementsByClassName","innerHTML","autoSize","getElementsByTagName","style","display","zipFile","JSZip","loadZip","setOptions","nullGetter","part","scopeManager","setData","render","ex","toLocaleDateString","toLocaleString","toLocaleTimeString","properties","scriptRefs","index","registerSod","loadMultiple","body","element","className","propertyTable","propertyTableHead","propertyTableRow","propertyTableHeader1","propertyTableHeader2","propertyTableBody","dirData","propertyTableParameterCell","propertyTableValueCell","functionName","Dialog","stupidDialogEventListener","DialogOptions","allowMaximize","showClose","html","dialogReturnValueCallback","showModalDialog","isUserSeniorAdvisor","isUserAdvisor","isGrantAdministrator","isAdmin","DocumentGeneratorRibbon","DocumentGeneratorRibbon_classCallCheck","_templates","_defaultIcon","shouldRender","retrieveTemplates","templates","SPRibbonControl","ribbon","executeOrDelayUntilRibbonLoaded","registerRibbonPageComponent","spRibbon","getChildByTitle","tab","CUI","Tab","addChild","app","addGroupToTab","createGroupDefinition","DocumentGeneratorRibbon_createClass","ribbonControl","Group","layout","Layout","section","Section","controlProperties","ControlProperties","Command","TemplateAlias","LabelText","Image32by32","Image32by32Top","Image32by32Left","ToolTipDescription","ToolTipTitle","controlComponent","Controls","Button","createComponentForDisplayMode","getRow","flyout","FlyoutAnchorCommandProperties","menuControl","Menu","menuSection","MenuSection","templateIdAsStr","templateId","icon","iconPath","buttonId","button","selectLayout","flyoutComponent","FlyoutAnchor","cachedTemplates","natoTemplateIcon","natoTemplateDescription","pageComponent","DocumentGeneratorPageComponent","DocumentGeneratorRibbon_possibleConstructorReturn","_handledCommands","_asyncCommandsEnabled","_allowGeneration","applicationStatus","RefreshCommandUI","DocumentGeneratorRibbon_inherits","Page","PageComponent","enable","handle","commandId","props","seq","sb","Sys","StringBuilder","commandName","DoesUserHasPermissions","userHasPermissions","standardProperties","getStandardProperties","applicationProperties","toPropertyList","showTemplateProperties","sourceControlId","SourceControlId","_templateUrls","performDocumentGeneration","_commands","handlerFunction","sequence","relativeTemplateUrl","template","reverse","merge","saveAs","removeIndivualUserPermissions","templateUrls","Ribbon","PageManager","get_instance","addPageComponent","ManageGrantsRibbon","ManageGrantsRibbon_classCallCheck","selectTabById","createEditGrantsGroupDefinition","createManageGrantsPlanningGroupDefinition","createManageGrantsPublishingGroupDefinition","ManageGrantsRibbon_createClass","renderContextPerElement","firstRenderContextId","firstRenderContext","CurrentItem","ControlMode","SPClientTemplates","ClientControlMode","EditForm","NewForm","row1","controlProperties_1","controlComponent_1","controlProperties_2","controlComponent_2","controlProperties_3","controlComponent_3","controlProperties_4","controlComponent_4","ToggleButtonCommandProperties","QueryCommand","ToggleButton","ApprovalPageComponent","ManageGrantsRibbon_possibleConstructorReturn","ManageGrantsRibbon_inherits","ShowPartAttachment","ApproveHeadOfSectionEnabled","listId","ApproveHeadOfSection","ApprovePlanningOfficerEnabled","ApprovePlanningOfficer","ApproveBudgetEnabled","ApproveBudget","PublishEnabled","Publish","SynchronizeEnabled","Synchronize","PutOnHoldEnabled","PutOnHold","On","renderer","ArchiveEnabled","Archive","pageListId","AgreementsDetails_classCallCheck","_previousGrants","natoPreviousGrants","_publication","natoPublication","_otherMeetingsAndConferences","natoOtherMeetingsAndConferences","AgreementsDetails_createClass","additionelFields","otherMeetingsAndConferences","BudgetDetails_classCallCheck","_budgetBreakdown","natoBudgetBreakdown","_budgetWBSTemplate","mapBudgetTemplateForwad","natoBudgetWBSTemplate","_budgetCurrency","natoBudgetCurrency","_totalAmount","BudgetDetails_createClass","mapBudgetTemplateReverse","serializedBreakDown","natoBudgetBreakdownEUR","taskId","task_reference","lenght","task_name","budgetBreakdownTemplateName","budgetCurrencyName","total","ProjectTimeline_classCallCheck","natoProjectTimelineBreakdown","_projectTimelineCtrls","natoProjectTimelineCtrls","parseMinMaxDates","ProjectTimeline_createClass","parsedMilestones","parseDate","milestone","dateStrParts","col_date","_minDate","minDate","milestoneData","_maxDate","maxDate","projectTimelineCtrls","AdditionalQuestions_classCallCheck","questionData","Question","natoQuestion","AnswerType","natoAnswerType","Options","natoOptions","Expression","natoRegularExpression","ValidationMessage","natoValidationMessage","Required","natoRequired","AdditionalQuestions_createClass","disabled","onValueChange","q","validator","TextField","required","onChanged","onGetErrorMessage","deferredValidationTime","multiline","rows","SpinButton","label","step","onDecrement","onIncrement","DatePicker","onSelectDate","isRequired","allowTextInput","parseDateFromString","option","selected","styles","optionText","whiteSpace","ComboBox","allowFreeform","autoComplete","caretDownButtonStyles","root","minWidth","useComboBoxAsMenuWidth","multiSelect","valueArray","AdditionalQuestions_toConsumableArray","valueString","newSelectedOptions","optionIndex","selectedKey","ids","query","seperatedValues","ManageApplicationsRibbon","ManageApplicationsRibbon_classCallCheck","createApplicationDefinition","createAssignmentsDefinition","createReviewEvaluationDefinition","createChangeRequestsDefinition","createApproveRejectDefinition","ChangeRequestHistoryComponent","ShowNotificationBannerIfNessecary","ManageApplicationsRibbon_createClass","controlProperties_8","controlComponent_8","controlProperties_9","controlComponent_9","controlProperties_10","controlComponent_10","controlProperties_7","controlComponent_7","controlProperties_13","controlComponent_13","controlProperties_6","controlComponent_6","controlProperties_11","controlComponent_11","controlProperties_12","controlComponent_12","controlProperties_5","controlComponent_5","controlProperties_5a","controlComponent_5a","controlProperties_4a","controlComponent_4a","ManageApplicationPageComponent","ManageApplicationsRibbon_possibleConstructorReturn","_application","ManageApplicationsRibbon_inherits","ReviewCommentsComponent","containerId","commentsContainer","mainContent","ReviewCommentsComponent_ReviewCommentsComponent","parentElement","ReviewEvaluationsComponent","evaluationContainer","ReviewEvaluationsComponent_ReviewEvaluationsComponent","ReviewSummaryComponent","summaryContainer","ReviewSummaryComponent_ReviewSummaryComponent","SetKeyPrioritiesComponent","prioritiesContainer","SetKeyPrioritiesComponent_SetKeyPrioritiesComponent","RefreshPage","ChangeAdvisorsComponent","assignAdvisorsContainer","ChangeAdvisorsComponent_ChangeAdvisorsComponent","AssignSpecialistComponent","assignSpecialistContainer","AssignSpecialistComponent_AssignSpecialistComponent","ApprovalDialogComponent","DoesUserHasPermissionsBO","budgetOfficerApprovalContainer","ApprovalDialogComponent_ApprovalDialogComponent","allowAttachments","pendingOption","onApprove","comment","onReject","RejectBudget","approveRejectContainer","customStatusValues","v","customStatusList","Approve","Reject","onCustomStatusSet","approvalHistoryContainer","ApplicationApprovalHistoryComponent_ApplicationApprovalHistoryComponent","RequestMoreInformationComponent","requestMoreInfoContainer","RequestMoreInformationComponent_RequestMoreInformationComponent","buttonEnabled","showInDialog","NotifyBudgetOfficersComponent","notifyBudgetOfficersContainer","NotifyBudgetOfficersComponent_NotifyBudgetOfficersComponent","AssignReviewersComponent","assignReviewers","AssignReviewersComponent_AssignReviewersComponent","getByCode","GrantApplicationWizardComponent","ShowInDialog","AmmendApplicationComponent","ammendApplicationContainer","AmmendApplicationComponent_AmmendApplicationComponent","layoutsUrl","showMaximized","approvalStatus","awardContainer","checkListName","exchangeRateComponent","exchangeRateClass","ExchangeRateComponent_ExchangeRateComponent","ref","confirmButtonLabel","currencyPromise","updateBudgetBreakdown","updateProjectBudgetEurField","Award","rejectContainer","FinallyReject","ApplicationAsyncDefaultValues_classCallCheck","_programNumberField","_seniorAdvisorsField","_divisionField","_listPermissionLevelNeeded","approveItems","_currentUserHasEnoughPermissionsForUpdate","_permissionsForCurrentUserHaveBeenQueried","_cacheKey","readPermissionsFromCache","_updatedListItems","ApplicationAsyncDefaultValues_createClass","hasPermissions","seniorAdvisorsGroup","seniorAdvisorsGroupMembers","get_users","CamlQuery","set_viewXml","applications","getItems","updatedListItems","userCanEditList","get_effectiveBasePermissions","seniorAdvisorUsers","userEnumerator","get_loginName","listItemEnumerator","editListItems","advisorDataCollection","highestProgramNumber","applicationsWithoutProgramNumber","allButNumbersRegex","programNumberStr","programNumber","parseInt","max","newProgramNumber","prefixProgramNumber","prefixStr","repeat","numberOfLeadingCharacter","Nationalities","Nationalities_classCallCheck","Nationalities_createClass","List","nationality","Nations","Nations_classCallCheck","Nations_createClass","nation","Titles","Titles_classCallCheck","Titles_createClass","LinkedApproval","primaryApproval","secondaryApproval","LinkedApproval_classCallCheck","hasPrimaryApprovalPermissions","hasSecondaryApprovalPermissions","bindApprovalFields","LinkedApproval_createClass","onChange","changedBy","changedOn","setState","needsUpdate","otherApprovalField","CurrentFieldSchema","helpText","autoApproveLabel","Label","fontStyle","fontSize","additionalDialogElements","justification","attachments","changeRequestCode","ChangeRequest_classCallCheck","_itemId","_justification","_attachments","_changeRequestCode","ChangeRequest_createClass","changeRequestFolder","currentItemCount","crName","generateCrNumber","specificChangeRequestFolder","specificChangeRequestFolderItem","_status","number","_created","_createdBy","person","FOLDERNAME","GetChangeRequests","camlOverride","changeRequestFolderUrl","camlQuery","set_folderServerRelativeUrl","crList","contenttype","get_contentType","approval","filesize","createdOn","createdBy","get_lookupValue","urlParts","parentFolderName","files","parentFolderFound","allChangeRequests","crNumber","cr","ApplicationFieldCollections","collection","ApplicationFieldCollections_classCallCheck","_all","_urlOnly","_basic_after_save","_applicicationWizardFields","_fields","ApplicationFieldCollections_createClass","atob","ReleasableTo","ReleasableTo_classCallCheck","ReleasableTo_createClass","KeyPriority","KeyPriority_classCallCheck","_level1","natoLevel1","_level2","natoLevel2","_level3","natoLevel3","KeyPriority_createClass","level1","level2","level3","_Component","ApprovalDialogComponent_classCallCheck","ApprovalDialogComponent_possibleConstructorReturn","state","hideDialog","approveStatus","approveStatusInitial","customApproveStatus","showAttachmentUploadPanel","isUploadingAttachment","OnSaveClick","OnCancelClick","OnAddAttachmentClick","onCommentChanged","ApprovalDialogComponent_inherits","Component","ApprovalDialogComponent_createClass","Attachments","AttachmentFiles","FileName","commentsField","focus","uploadField","uploadFiles","_ref","_slicedToArray","onPending","_loop","fr","FileReader","readAsArrayBuffer","onloadend","bytes","showUploadPanelStyle","checked","filteredCustomStatus","keyValuePair","attachmentElement","target","hidden","dialogContentProps","DialogType","largeHeader","modalProps","isBlocking","containerClassName","getStyles","main","max-width","width","field","ChoiceGroup","changeApproveStatusInternal","color","Dropdown","marginLeft","changeCustomApproveStatusInternal","onClick","iconProps","iconName","ProgressIndicator","children","ConfirmDialogComponent","ConfirmDialogComponent_classCallCheck","ConfirmDialogComponent_possibleConstructorReturn","checkList","numberOfCheckboxesChecked","OnConfirmClick","onCheckboxChange","ConfirmDialogComponent_inherits","ConfirmDialogComponent_createClass","isChecked","newNumber","checkListAll","Checkbox","PublishedGrantComponent","PublishedGrantComponent_classCallCheck","PublishedGrantComponent_possibleConstructorReturn","PublishedGrantComponent_inherits","PublishedGrantComponent_createClass","formValues","Code","Synopsis","Start date","End date","tableRows","formField","marginTop","GrantDetailsComponent","GrantDetailsComponent_classCallCheck","GrantDetailsComponent_possibleConstructorReturn","ReactGA","grantDescription","grantStatus","grantDivision","applyButtonAvailable","currentUserIsNotAuthorized","previousApplication","checkboxTermsAndConditionsChecked","termsAndConditionsHaveBeenClicked","isGrantAdmin","onTermsConditionsClick","onCloseClick","onApplyClick","onCreateAdGrantAdminClick","GrantDetailsComponent_inherits","GrantDetailsComponent_createClass","publishedEvent","getBasicGrantData","getApplication","prevProps","prevState","_descriptionContainer","querySelectorAll","addEventListener","imageLoaded","event","removeEventListener","get_childDialog","cancel","createAsGrantAdmin","preventDefault","stopPropagation","alert","applicantIsTooLate","setMinutes","setSeconds","grantIsOnHold","applyButtonText","termsAndConditionsLink","createApplicationAsGrantAdminButton","footerPanelOptions","background","borderColor","borderRadius","padding","marginBottom","Icon","footerPanelAlreadyExistingApplication","dangerouslySetInnerHTML","__html","AnsweredQuestionsComponent_AnsweredQuestionsComponent","sourceUrl","rootUrl","siteServerRelativeUrl","loginUrl","registerUrl","dialogResult","dialogContent","GrantApplicationWizardComponent_classCallCheck","GrantApplicationWizardComponent_possibleConstructorReturn","_pageIndex","activeWizardPageIndex","isSaving","otherUser","allowEdit","onNavigateBackClick","onNavigateForwardClick","onPivotLinkClick","onSaveDraftClick","onSubmitClick","onPivotNavigate","updatedApplication","page","SetReadOnly","GrantApplicationWizardComponent_inherits","GrantApplicationWizardComponent_createClass","_pivotElement","pivotDomElement","srcElement","classList","contains","Validate","pivotType","savePage","success","linkText","newIndex","_numberOfPivots","SubmitDialogComponent_SubmitDialogComponent","submitApplication","progressDialog","Submit","close","clone","errorObject","errorMessage","itemKey","retrievedApplication","pageIndex","notifyData","SPStatusNotificationData","STSHtmlEncode","notification","SPNotifications","ContainerID","Status","Show","notificationTopParent","container","tagName","zIndex","dataIsValid","_typeof","Save","loadApplication","Hide","warningStyle","isDraft","pivots","Applicant Details","Wizard1ApplicantComponent","IsVisible","Order","Project Details","Wizard2ProjectDetailsComponent","Attachments and Agreements","Wizard7AttachmentsComponent","Wizard3BudgetComponent","Project Structure and Timeline","Wizard5ProjectStructureTimelineComponent","Others","Wizard6PreviousGrantsComponent","Overview","Wizard10OverviewComponent","assign","Activity details","pivotElements","pivotTitle","DynamicElement","isDisabled","Pivot","headerButtonProps","height","position","componentRef","onLinkClick","linkFormat","PivotLinkFormat","links","linkSize","PivotLinkSize","large","textAlign","bottom","right","margin","ariaLabel","cleanUrl","ErrorMessageComponent","ErrorMessageComponent_classCallCheck","ErrorMessageComponent_possibleConstructorReturn","logs","showDebugPanel","onClosePanelClick","onDebugPanelToggleClick","handleOnLog","ErrorMessageComponent_inherits","ErrorMessageComponent_createClass","onkeyup","altKey","statusID","addStatus","setStatusPriColor","dialog","clonedStatus","cloneNode","statusBarInDialog","querySelector","insertBefore","removeStatus","workspace","scrollTo","top","behavior","logTable","entry","toISOString","cursor","src","Panel","isOpen","hasCloseButton","PanelType","medium","onDismiss","headerText","ExecuteOrDelayUntilBodyLoaded","initializeErrorComponent","topMenu","suitebar","errorMessageContainer","ErrorMessageComponent_ErrorMessageComponent","notifyScriptLoadedAndExecuteWaitingJobs","EventRegistrationComponent","EventRegistrationComponent_classCallCheck","EventRegistrationComponent_possibleConstructorReturn","_countryOptions","_titleOptions","selectedCountry","selectedTitle","messageBarText","messageBarType","MessageBarType","blocked","formWasSubmitted","additionalFieldValues","onCountryValueChanged","onTitleValueChanged","additionalFieldValueChanged","EventRegistrationComponent_inherits","EventRegistrationComponent_createClass","querystring","ownerDocument","resizeIfDialog","snapshot","eventRegistration","_otherCountryControl","_firstnameControl","_lastnameControl","_companyControl","_eMailAddressControl","_otherTitleControl","validateForm","info","promise","saveExploratoryGroupRegistration","savePlenaryMeetingRegistration","saveSeminarRegistration","successHandler","thankyouText","border","errorHandler","error","reasonReponse","unansweredAdditionalQuestion","faultyAnsweredAnsweredAdditionalQuestions","question","fieldName","values","arrayToOptions","arr","countryOptions","titleOptions","messageBar","backgroundColor","left","MessageBar","questionId","onChangeFunction","currentValue","questionControl","RenderField","questionText","_countryControl","placeholder","_titleControl","comboBoxOptionStyles","flexContainer","FormValidator","validateEmailAddress","SetKeyPrioritiesComponent_classCallCheck","SetKeyPrioritiesComponent_possibleConstructorReturn","preSelectedKeyPriorities","encodedKeyPriorities","_a","selectedKeyPriorities","initialSelection","changed","onSelectedKeyPrioritiesChanged","SetKeyPrioritiesComponent_inherits","SetKeyPrioritiesComponent_createClass","updateKeyPriorities","selection","subtitle","_spNotification","KeyPrioritiesSelectorComponent_KeyPrioritiesSelectorComponent","initialValue","showLabel","showAsText","onSelectionChanged","onStartLoad","onEndLoad","ChangeAdvisorsComponent_classCallCheck","ChangeAdvisorsComponent_possibleConstructorReturn","peoplePickerInitialized","advisorsGroupMembers","grantAdminGroupMembers","ChangeAdvisorsComponent_inherits","ChangeAdvisorsComponent_createClass","_peoplePickerDivAdvisors","_peoplePickerDivSeniorAdvisors","initializePeoplePicker","initializationInterval","setInterval","clearInterval","advisorsPeoplePickerValues","AutoFillDisplayText","AutoFillKey","DisplayText","EntityType","IsResolved","Resolved","seniorAdvisorsPeoplePickerValues","grantAdminPeoplePickerValues","schemaAdvisors","schemaSeniorAdvisors","schemaGrantAdministrators","divisionStrVal","advisorsGroup","grantAdministratorsGroup","grantAdministratorsGroupMembers","userCollectionToGroup","userCollection","users","enumerator","seniorAdvisorEnumerator","defaultUser","get_email","initializationFunction","_peoplePickerDivGrantAdministrators","peoplePickerDictionaryValue","peoplePickerObject","SPClientPeoplePickerDict","getPeoplePickerValue","advisorsCollection","userObj","seniorAdvisorsCollection","grantAdministratorsCollection","updateAdvisors","peoplePickerDivGrantAdministratorsId","peoplePickerDivSeniorAdvisorsId","peoplePickerDivAdvisorsId","marginRight","peoplePickerDiv","Tooltip","calloutProps","gapSpace","tooltipProps","onRenderContent","delay","TooltipDelay","zero","directionalHint","AssignSpecialistComponent_classCallCheck","AssignSpecialistComponent_possibleConstructorReturn","sectionSpecialistGroupMembers","headOfSectionGroupMembers","AssignSpecialistComponent_inherits","AssignSpecialistComponent_createClass","_peoplePickerDivSectionSpecialist","_peoplePickerDivHeadOfSection","sectionSpecialistPeoplePickerValues","headOfSectionPeoplePickerValues","schemaSectionSpecialist","schemaHeadOfSection","sectionSpecialistGroup","headOfSectionGroup","allClaims","AddUserKeys","sectionSpecialist","sectionSpecialistCollection","headOfSectionCollection","updateSectionSpecialists","peoplePickerDivHeadOfSectionId","peoplePickerDivSectionSpecialistId","ReviewCommentsComponent_classCallCheck","ReviewCommentsComponent_possibleConstructorReturn","commentsfolder","allComments","OnCommentTextChanged","readHandler","commentFileName","serverRelativeUrlOfMyFile","protocol","host","req","ReviewCommentsComponent_inherits","ReviewCommentsComponent_createClass","serverRelativeUrlForComments","commentsFolder","commentsFiles","allFileRetrievalPromises","get_serverRelativeUrl","author","get_author","lastModified","get_timeLastModified","fileBinaryRequest","promiseForThisFile","fileContents","content","responses","responseText","saveComments","get_content","ensureCommentsFolder","setCommentsPermissions","setCommentsFileMetadata","permissionsDebug","roleAssignment","username","permissions","otherComments","fontWeight","ReviewEvaluationsComponent_classCallCheck","ReviewEvaluationsComponent_possibleConstructorReturn","onChangeChoice","newFormValues","choicesValue","_formData","choicesRequired","onChangeComments","commentsText","commentsRequired","_dialogTitle","formMYP","formEvents","evaluation","submitAllowed","onSaveClick","onCancelClick","_currentUser","_evaluationFileName","_req","ReviewEvaluationsComponent_inherits","ReviewEvaluationsComponent_createClass","flatArrayForParsing","evaluationObj","flatArrayForSaving","evaluationJSON","saveEvaluation","ensureEvaluationsFolder","setEvaluationFilePermissions","setEvaluationFileMetadata","allNumericValues","choicesAverage","choiceValueStr","choiceValue","getAverageRatingForCurrentEvaluation","contributor","retrieveAdvisorsUrl","grp","groupId","advisorRoles","formValid","dynamicFields","sectionTag","sectionTitle","choicesTag","choicesAllowed","choicesTitle","choicesOptions","commentsTag","commentsAllowed","commentsTitle","keyPriorityAsText","retElement","grouped","keyPriority","isUserReviewer","Event_SPS_Key_Priorities","Event_Topic_Important","Event_Topic_Impact","Event_Topic_Title","Event_Topic_Overlap","Event_Topic_Programme","Event_Attendees_Speakers","Event_Attendees_Audience","Event_Organisation_Organized","Event_Organisation_Budget","Event_Overall_Evaluation","MYP_Impact_Important","MYP_Impact_Creative","MYP_Impact_Sustainable","MYP_Impact_Defence","MYP_Impact_Diplomacy","MYP_Impact_Young","MYP_Success_Experience","MYP_Success_Users","MYP_Success_Sufficient","MYP_Success_Schedule","MYP_Success_Budget","MYP_Risks","MYP_Criteria_Clear","MYP_Criteria_Quantitative","MYP_Overall_Evaluation","MYP_Project_Evaluator","ReviewSummaryComponent_classCallCheck","ReviewSummaryComponent_possibleConstructorReturn","formData","hideDetails","OnDetailsClick","ReviewSummaryComponent_inherits","ReviewSummaryComponent_createClass","choicesData","choicesAverageCount","choicesAverageSum","commentsData","serverRelativeUrlForEvaluations","evalItem","currentData","tmp","reviewer","optionKey","paddingLeft","commentsList","itemCT","keyCT","AssignReviewersComponent_classCallCheck","AssignReviewersComponent_possibleConstructorReturn","reviewersGroupMembers","AssignReviewersComponent_inherits","AssignReviewersComponent_createClass","_peoplePickerDivReviewers","reviewersPeoplePickerValues","schema","reviewersGroup","reviewersCollection","updateReviewers","RequestMoreInformationComponent_classCallCheck","RequestMoreInformationComponent_possibleConstructorReturn","onRenderChangeRequestOption","optionData","iconType","shortDescription","submittedOn","aria-hidden","selectedChangeRequest","changeRequest","OnCommentsTextChanged","onChangeRequestChanged","RequestMoreInformationComponent_inherits","RequestMoreInformationComponent_createClass","mailSubject","shouldUpdateApplicationStatus","RequestMoreInformationFromApplicant","requests","crOptions","defaultOption","unshift","onRenderOption","changeRequestUI","renderChangeRequestPart","NotifyBudgetOfficersComponent_classCallCheck","NotifyBudgetOfficersComponent_possibleConstructorReturn","NotifyBudgetOfficersComponent_inherits","NotifyBudgetOfficersComponent_createClass","NotifyBudgetOfficers","StudyOrderGroupComponent","StudyOrderGroupComponent_classCallCheck","StudyOrderGroupComponent_possibleConstructorReturn","_natoClassifications","onRenderEventOption","siteUsers","events","onChangeNatoClassification","onChangeChairmanCountry","onEventChanged","retrieveNiagEvents","StudyOrderGroupComponent_inherits","StudyOrderGroupComponent_createClass","newKey","_natoClassification","_chairmanCountry","_chairmanNamePicker","retrievedEvents","odataObject","natoExternalStatus","Eventtype","eventOptions","classificationOptions","peoplePickerDivChairmanId","peoplePickerDivMembersId","_membersNamePicker","generateAnnex","borderSpacing","placeHolder","size","_studyGroupId","onAddFieldValueChange","_chairmanCompany","people","schema_multiple","schema_single","get_siteUsers","webUrl","templateTitle","webTemplates","getAvailableWebTemplates","customTemplate","webTemplate","webCreationInformation","WebCreationInformation","set_title","set_description","set_language","set_useSamePermissionsAsParentSite","set_webTemplate","get_webs","templateUrl","newWebUrl","destination","_eventName","getPersonName","cachedEvents","_eventSynopsis","_eventCode","studyGroupId","siteTitle","siteDescription","generateStudyOrderDoc","CreateWebsite","HideProgress","Wizard1ApplicantComponent_classCallCheck","Wizard1ApplicantComponent_possibleConstructorReturn","_coDirectorFields","firstName","lastName","telephone","mobile","email","alternativeEmail","institute","department","streetAndNumber","zipCode","_formDataESC","User title","objectMapping","fieldType","disable","User First Name","User Last Name","User professional e-mail address","NPD title","NPD first name","NPD last name","NPD nationality","validatePhoneNumber","NPD office telephone number","NPD mobile telephone number","NPD email address","NPD alternative email address","NPD Institute ","NPD Institute: Faculty/Department","NPD Institute: Street and number","NPD Institute: ZIP code","NPD Institute: City","NPD Institute: Country","PPD title","PPD first name","PPD last name","PPD nationality","PPD office telephone number","PPD mobile telephone number","PPD email address","PPD alternative email address","PPD Institute","PPD Institute: Faculty/Department","PPD Institute: Street and number","PPD Institute: ZIP code","PPD Institute: City","PPD Institute: Country","_formDataESC_OLD","Lastname","Professional e-mail address","Primary contact person","NATO Country Project Director address","NATO Country Project Director country","NATO Country Project Director nationality","Primary contact's telephone number","Primary contact's e-mail address","Organization name","Organization address (street and number)","Organization postal code","Organization city","Organization country","Alternative contact person","Partner Country Project Director address","Partner Country Project Director country","Partner Country Project Director nationality","Applicant telephone number","Alternative contact's e-mail address","Partner Country Project Director institution name","Partner Country Project Director institution country","_formDataPDD","_countryFields","_nationalityFields","_titleFields","showInvitationDialog","hideInvitationDialog","closeInvitationDialog","onInvite","invitedEmail","_invitationEmail","isEmailAddress","currentApplication","savePromise","newApplicationId","getByIdWithFields","waitForCorrectPermissions","hasUniqueRoleAssignments","inviteDisabled","inviteIsBeingSent","wf","applicationURL","invittee","getByEmail","userFound","Recipient","encodeURI","invitationEmail","inviterName","invitationDate","SaveInvitationEmails","getCommandItems","showPCDDialog","onDeletePCDRow","hidePCDDialog","closePCDDialog","dialogPCDFormData","savePCDDisabled","onAddPCDRow","dialogPCDData","currentCodirectors","codirectors","_eventsSelection","count","selectedCodirectorsIndices","getSelectedIndices","currentCodirectorSelection","setAllSelected","infoTextToDisplay","allowValidation","onFieldFocus","onFieldBlur","onFieldValueChange","Wizard1ApplicantComponent_inherits","Wizard1ApplicantComponent_createClass","updatedFormData","f","invitedEmailsStr","Selection","codirectorsStrValue","projectCoDirectors","sumbit","allFieldsOk","textField","refs","thisFieldOk","validatePhoneField","validateCountryField","phone","isPhoneNumber","propertyDescriptor","getOwnPropertyDescriptor","UpdateInvitationEmails","currentTarget","inviteButtonEnabled","isValidCodirectorData","codirector","requiredFields","every","validateCodirectorData","errorMessageElement","errorMessageText","addErrorText","aria-live","paddingTop","data-automation-id","DynamicTag","isCountryField","isNationalityField","isTitleField","dynamicTag","onFocus","onBlur","asOptions","fieldLabel","validationClass","formTable","colSpan","CommandBar","DetailsList","_eventsControl","compact","columns","isMultiline","selectionMode","SelectionMode","multiple","setKey","layoutMode","DetailsListLayoutMode","justified","isHeaderVisible","selectionPreservedOnEmptyClick","enterModalSelectionOnTouch","checkboxVisibility","CheckboxVisibility","onHover","eventDialog","onDialogPCDFieldValueChange","borderWidth","infoBlock","invitationHistory","sortableInvites","getTime","invItem","invDate","invitationDialog","primary","onDialogFieldValueChange","paddingRight","maxHeight","overflowY","verticalAlign","Wizard2ProjectDetailsComponent_classCallCheck","Wizard2ProjectDetailsComponent_possibleConstructorReturn","show","Project type","Project title","Detailed description","Target audience","Number of participants","Location","City","Country","Estimated start date","Estimated end date","Institution name","Topic to be addressed","NATO representative, if known","updateFieldVisibility","currentProjectType","minimumDate","maximumDate","minStartDate","applicationEndDate","addMonths","Wizard2ProjectDetailsComponent_inherits","Wizard2ProjectDetailsComponent_createClass","projectTypeIsMultiYearProject","projectTypeIsCoSponsorship","projectTypeIsCallForProposal","divisionIsESC","divisionIsPDD","projectTypeLC","projectTypeIsESCMYP","projectTypeIsESCEvent","overrideDatePickerFocus","datePickerElement","submit","validateDateFields","validateProjectTypeField","validateKeyPrioritiesField","validateDetailedDescriptionField","setDate","selectedProjectType","wordCount","regexMatch","match","projectTypeOptions","disableAutoFocus","selectedKeyPriorites","encodedPriorities","wordCountLabel","float","planningDetailsLocked","enabled","Wizard3BudgetComponent_classCallCheck","Wizard3BudgetComponent_possibleConstructorReturn","_templateKeys","_templateKeysSPS","_templateKeysPDD","_templateKeysDI","_currencies","_asyncStateUpdateJob","_disableTemplateChange","_budgetDetails","_templateName","_currencyName","onTemplateValueChanged","onCurrencyValueChanged","onBudgetChange","onBudgetTotalChange","onDescriptionChange","onChangeBudget","onKeyPressInsideTable","onKeyPressInsideDropDown","saveDisabled","selectedTemplate","selectedCurrency","Wizard3BudgetComponent_inherits","Wizard3BudgetComponent_createClass","applyBudget","taskName","currency","amountTotal","_budgetSelection","applyCurrency","loadData","budgetDetailsList","moveFocusInsideTable","direction","keyCode","shiftKey","parentTable","allInputsInTable","newElementToFocus","parentRow","hasAttribute","getAttribute","selectedIndex","setIndexSelected","onRender","onKeyDown","templateOptions","start","linkToAttachmentsPage","currencyOptions","curr","currencyComboBoxDisabled","formCombo","_templateControl","_currencyControl","none","currencySymbol","len","selectedEvents","budgetitem","amountSum","clearTimeout","selectedRow","currentBudgetItems","firstSelectedRowIndex","previousValue","mileStoneIndex","sum","budgetItem","amount","Wizard4AudienceComponent","Wizard4AudienceComponent_classCallCheck","Wizard4AudienceComponent_possibleConstructorReturn","Wizard4AudienceComponent_inherits","Wizard4AudienceComponent_createClass","Wizard5ProjectStructureTimelineComponent_classCallCheck","Wizard5ProjectStructureTimelineComponent_possibleConstructorReturn","onChangeMS1","onChangeMS2","onChangeMS3","onChangeMS4","onChangeMS5","recalculateDates","ms1DaysChanged","ms2DaysChanged","ms3DaysChanged","ms4DaysChanged","ms5DaysChanged","startDateErrorMessage","milestoneErrorMessage","timelineItems","formControls","kickoffDate","ms1offset","ms2offset","ms3offset","ms4offset","ms5offset","disableTab","ms1days","ms2days","ms3days","ms4days","ms5days","totalDurationInMonths","Wizard5ProjectStructureTimelineComponent_inherits","Wizard5ProjectStructureTimelineComponent_createClass","_ms1days","_ms2days","_ms3days","_ms4days","_ms5days","timelineControls","timelineCtrls","kickOffDate","milestone1Days","milestone2Days","milestone3Days","milestone4Days","milestone5Days","milestone1Months","milestone2Months","milestone3Months","milestone4Months","milestone5Months","timelineDetailsList","dateMin","ms2enabled","ms3enabled","ms4enabled","ms5enabled","startDateErrorMessageElement","milestoneErrorMessageElement","_startDateControl","newDate","defaultSelectedKey","min","m1","m2","m3","m4","m5","dateKickoff","ctrls","toDateString","lastDate","itemsUpd","col_event","col_descr","toShortDate","dateMS1","dateMS2","dateMS3","dateMS4","dateMS5","dateMax","duration","calculateTotalDuration","finalMilestoneDate","months","weekday","getDay","selectedDate","recalculateDays","Wizard6PreviousGrantsComponent_classCallCheck","Wizard6PreviousGrantsComponent_possibleConstructorReturn","Previous NATO Projects","Publication","showDialog","onDeleteRow","closeDialog","dialogFormData","Sponsor","onAddRow","_date","_location","_sponsorOrganizer","eventItems","sponsorOrganizer","currentSelection","Wizard6PreviousGrantsComponent_inherits","Wizard6PreviousGrantsComponent_createClass","eventsListStr","dialogData","saveButtonEnabled","Wizard7AttachmentsComponent_classCallCheck","Wizard7AttachmentsComponent_possibleConstructorReturn","_allowEdit","_pollDocumentsTimer","iFrameLoaded","documentSetContentsUrl","documentsValid","defaultDocumentFilenames","validationCount","_applicationAttachments","onFrameLoad","Wizard7AttachmentsComponent_inherits","Wizard7AttachmentsComponent_createClass","documentsSetContentsUrl","iFrameDocument","_documentSetContentsFrame","contentDocument","numberOfDocuments","containsError","provisionDefaultDocuments","documentsCopied","contentWindow","reload","getDefaultDocuments","defaultDocuments","pollDocuments","iFrameWindow","ListData","documentsPerExtension","Row","documentInfo","dataRow","isDefaultDocument","extension","File_x0020_Type","numberOfDefaultDocuments","numberOfCustomDocuments","wordDocuments","excelDocuments","totalOfUserDocuments","iFrameDisplayStyle","progressIndicator","validationErrorElement","iFrameUrl","iFrame","onLoad","Wizard9FinancialRulesComponent","Wizard9FinancialRulesComponent_classCallCheck","Wizard9FinancialRulesComponent_possibleConstructorReturn","_getCommandItems","milestoneItems","Wizard9FinancialRulesComponent_inherits","Wizard9FinancialRulesComponent_createClass","dateFR","Wizard10OverviewComponent_classCallCheck","Wizard10OverviewComponent_possibleConstructorReturn","_printableAreaId","print","Wizard10OverviewComponent_inherits","Wizard10OverviewComponent_createClass","printWindow","write","cellSpacing","isEscMultiYearProject","codirectordata","keyPriorityData","AmmendApplicationComponent_classCallCheck","AmmendApplicationComponent_possibleConstructorReturn","milestones","mCode","onMeetingNumberChanged","onPartnershipFrameworkChanged","onOriginChanged","onBeneficiaryNationChanged","onPrimaryKeyPriorityChanged","onSecondaryKeyPriorityChanged","onPriorityChanged","onBeneficiaryNationsSplitChanged","onRegionChanged","onFinalReportDueDateChanged","onProcessStageChanged","onGodParentChanged","onDocumentReferencesChanged","onWebURLChanged","onPublisherChanged","onPublisherSubSeriesChanged","onDateBooksReceivedChanged","onYearOfInitialAwardChanged","onYearOfOfficialClosureChanged","onApprovedBudgetCeilingChanged","onInitialAwardTrancheAmountChanged","onMilestone1TrancheAmountChanged","onMilestone2TrancheAmountChanged","onMilestone3TrancheAmountChanged","onMilestone4TrancheAmountChanged","onMilestoneFinalTrancheAmountChanged","onInitialAmountChanged","AmmendApplicationComponent_inherits","AmmendApplicationComponent_createClass","inputStyle","partnershipFrameworksOptions","framework","originsOptions","nationOptions","keyPriorityList","primaryKeyPriorityOptions","secondaryKeyPriorityOptions","priorityOptions","regionOptions","processStageOptions","publisherOptions","publisherSubSeriesOptions","yearsList","yearOfInitialAwardOptions","yearOfOfficialClosureOptions","ApplicationApprovalHistoryComponent","ApplicationApprovalHistoryComponent_classCallCheck","ApplicationApprovalHistoryComponent_possibleConstructorReturn","approvalFolder","allApprovals","OnCloseClick","ApplicationApprovalHistoryComponent_inherits","ApplicationApprovalHistoryComponent_createClass","serverRelativeUrlForApproval","appprovalFolder","approvalFiles","approvalData","currentApproval","approvalItem","approvalHistory","InvitationDialogComponent","InvitationDialogComponent_classCallCheck","InvitationDialogComponent_possibleConstructorReturn","iconColour","iconTooltip","EndDate","showPastEvents","draftParticipants","submittedParticipants","selectedParticipants","_participantSelection","getSelection","onCopyEmailAddressesToClipboardClick","onCopySelectedUsersToClipboardClick","onShowPastEventsChange","InvitationDialogComponent_inherits","InvitationDialogComponent_createClass","dateobj","year","month","hours","minutes","converted_date","urlDrafts","urlSubmitted","draftRegistrationsPromise","submittedRegistrationsPromise","participantParsing","objects","registrationObject","contentTypeId","Company","RegistrationDate","dateConvert","RegistrationObject","allResponses","participants","allFields","fieldsOrder","header","fieldValuesForThisRegistration","fieldHeadersForThisRegistration","tableCells","valueStr","borderCollapse","getParticipants","copyTextToClipboard","allEmailAddresses","tableHtml","allParticipants","allEmails","minHeight","readOnly","maxWidth","overflow","generateList","SubmitDialogComponent","SubmitDialogComponent_classCallCheck","SubmitDialogComponent_possibleConstructorReturn","userCreator","userAcceptedHandbook","OnCheckboxChange","SubmitDialogComponent_inherits","SubmitDialogComponent_createClass","ChangeRequestComponent","ChangeRequestComponent_classCallCheck","ChangeRequestComponent_possibleConstructorReturn","isSubmitting","isSubmitted","onDescriptionChanged","onJustificationChanged","onUploadFilesClicked","onDeleteFileClicked","ChangeRequestComponent_inherits","ChangeRequestComponent_createClass","currentAttachmentCollection","allUploadPromises","_uploadField","currentFile","singleFileUploadPromise","newAttachment","results","attachmentInfo","borderTop","ChangeRequestHistoryComponent_classCallCheck","ChangeRequestHistoryComponent_possibleConstructorReturn","_updatedChangeRequestCodes","userCanApprove","onStatusRender","onApproveButtonClick","onRequestMoreInformationClick","ChangeRequestHistoryComponent_inherits","ChangeRequestHistoryComponent_createClass","changeRequests","getMilliseconds","currentUserCanApprove","allowedGroups","saveChangeRequestStatus","allSavePromises","saveCrPromise","SaveStatus","changeCrStatus","currentChangeRequests","requestMoreInformationElement","crItemId","currentCr","data-cr-id","statusElement","commentsElement","approvalElement","dataColumns","isResizable","GetPendingChangeRequests","pendingRequests","AnsweredQuestionsComponent","AnsweredQuestionsComponent_classCallCheck","AnsweredQuestionsComponent_possibleConstructorReturn","showQuestionDialog","hideQuestionDialog","closeQuestionDialog","questionSubmitted","answeredQuestions","disableSubmitQuestion","allQA","natoAnswer","onQuestionTextChanged","onSubmitQuestion","AnsweredQuestionsComponent_inherits","AnsweredQuestionsComponent_createClass","questionDialog","maxLength","adminGroupName","unansweredQuestionsCount","ViewXml","urlUQ","StudyGroupSubSiteCreatorComponent","StudyGroupSubSiteCreatorComponent_classCallCheck","StudyGroupSubSiteCreatorComponent_possibleConstructorReturn","onRenderNIAGEventOption","onTemplateChanged","onCodeChanged","OnCreateClick","onAdvancedPropertiesClick","onIndependentSubsiteCheckboxChange","onMasterpageChanged","onCustomCssChanged","selectedNiagEvent","selectedWebTemplate","showAdvancedSettings","createIndependentSubsite","subsiteCode","masterpage","masterpages","customCss","StudyGroupSubSiteCreatorComponent_inherits","StudyGroupSubSiteCreatorComponent_createClass","retrieveWebTemplates","retrieveMasterpages","FileSystemObjectType","allTemplates","templateEnumerator","masterpageGallery","getCatalog","ListTemplateType","masterPageCatalog","masterpageNames","createSubsite","subSite","createSubsiteSecurityGroups","siteUrl","get_url","onCreate","subweb","siteGroups","diAdminGroup","groupObject","owner","webDesigner","permissionData","newGroupInfo","GroupCreationInformation","newGroup","roles","set_owner","quicklaunch","get_navigation","get_quickLaunch","newWeb","get_allProperties","nasDiCustomAction","get_userCustomActions","set_name","set_sequence","set_location","set_scriptSrc","manageWebPermissions","manageWeb","templatesCustomAction","set_group","set_rights","masterpageUrl","set_masterUrl","set_useShared","parentNode","quickLaunchEnumerator","quickLaunchLink","quickLaunchCreationInfo","NavigationNodeCreationInformation","set_isExternal","set_asLastNode","get_children","masterpageOptions","createButtonEnabled","advancedPropertiesExpandCollapseIcon","advancedPropertiesText","StudyGroupDocumentCreatorComponent","StudyGroupDocumentCreatorComponent_classCallCheck","StudyGroupDocumentCreatorComponent_possibleConstructorReturn","onSubsiteChanged","loadSubsiteValues","onDocumentTemplateChanged","setChairman","onChairmainCompanyChanged","onChairmainCountryChanged","onChairmainNameChanged","onClassificationChanged","onReleasableToChanged","onStudyOrderDateChanged","onStudyOrderReferenceChanged","onSgNumberChanged","onStudyTitleChanged","onStudyCompletionDateChanged","onStudyBudgetChanged","subsites","documentTemplates","selectedSubsite","selectedDocumentTemplate","chairman","selectedClassification","releasableTo","studyOrderDate","studyOrderReference","sgNumber","studyTitle","studyCompletionDate","studyBudget","StudyGroupDocumentCreatorComponent_inherits","StudyGroupDocumentCreatorComponent_createClass","_diWeb","relativeWebUrl","openWeb","retrieveSubwebs","defaultSelectedSubWeb","get_context","subwebs","getSubwebsForCurrentUser","allSubwebs","webEnumerator","propNameValues","draftRegistrationsParsePromise","submittedRegistrationsParsePromise","allParsedResponses","selectedWeb","getGrantData","previousFieldValues","keyValuePairs","documentTemplate","destinationUrl","arrayIndex","alreadyInArray","newArrayValue","subsiteOptions","webInfo","releasableToOptions","participantElements","selectedKeys","ExchangeRateComponent","ExchangeRateComponent_classCallCheck","ExchangeRateComponent_possibleConstructorReturn","onRateChange","onReverseRate","reversed","rate","ExchangeRateComponent_inherits","ExchangeRateComponent_createClass","parseRate","inverseRate","Rate","rateStr","breakdown","newBreakdown","amountStr","KeyPrioritiesSelectorComponent","KeyPrioritiesSelectorComponent_classCallCheck","KeyPrioritiesSelectorComponent_possibleConstructorReturn","KeyPrioritiesSelectorComponent_inherits","KeyPrioritiesSelectorComponent_createClass","selectedKeyPrioritiesArray","k","external_React_","keyPriorityOptions","input","level1Number","level1NumberMatch","itemType","SelectableOptionMenuItemType","Header","Normal","Divider","DivisionFieldTemplate","DivisionFieldTemplate_classCallCheck","DivisionFieldTemplate_possibleConstructorReturn","View","formContext","Utility","GetFormContextForCurrentField","registerGetValueCallback","getValue","CurrentFieldValue","DivisionFieldTemplate_inherits","DivisionFieldTemplate_createClass","data-value","ContentTypeFieldTemplate","ContentTypeFieldTemplate_classCallCheck","ContentTypeFieldTemplate_possibleConstructorReturn","ContentTypeFieldTemplate_inherits","ContentTypeFieldTemplate_createClass","ReadOnlyFieldTemplate","ReadOnlyFieldTemplate_classCallCheck","ReadOnlyFieldTemplate_possibleConstructorReturn","ReadOnlyFieldTemplate_inherits","ReadOnlyFieldTemplate_createClass","ApprovalFieldTemplate","ApprovalFieldTemplate_classCallCheck","ApprovalFieldTemplate_possibleConstructorReturn","approvalDataPerField","Folder","Text","Subtext","approvalItemExists","_additionalElements","hasPermissionsQueried","internalFieldValue","onPreSave","ApprovalFieldTemplate_inherits","ApprovalFieldTemplate_createClass","approveButtonElement","onclick","showApprovalDialog","currentItemId","FormContext","itemAttributes","getLinkToCurrentItem","_onChangeCallback","approveButton","data-initial","data-new","CodeFieldTemplate","_ReadOnlyFieldTemplat","CodeFieldTemplate_classCallCheck","CodeFieldTemplate_possibleConstructorReturn","_iconsLoaded","onCodeClick","onBeneficiaryRequestClick","onChangeRequestClick","onChangeRequestHistoryClick","beneficiaryRequestDialogCallback","CodeFieldTemplate_inherits","CodeFieldTemplate_createClass","params","grantDetailsIdStr","applicationIdStr","openGrantWizardInDialog","openGrantDetailsInDialog","iconsLoaded","forceUpdate","evt","serverRequestPath","showSharePointForm","GetPermMaskH","GetPermMaskL","stsNavigateFunc","perms","High","PermMask","Low","formType","openBeneficiaryRequestFormInDialog","publishedGrantId","requestUrl","lastCreatedRequest","docProperties","setPermissionsForSubmittedBeneficiaryRequestForm","applicantAssignments","isPropertyAvailable","sharePointGroup","DisplayForm","renderInDefaultMode","actionsButton","changeRequestButtonAvailable","menuIcon","menuProps","shouldFocusOnMount","secondaryText","newIcon","alt","startDateStr","parseLocale","codeElement","SignatureFieldTemplate","SignatureFieldTemplate_classCallCheck","SignatureFieldTemplate_possibleConstructorReturn","resize","initializeIcons","SignatureFieldTemplate_inherits","SignatureFieldTemplate_createClass","_canvas","_signature","SignaturePad","fromDataURL","off","toDataURL","ratio","devicePixelRatio","offsetWidth","offsetHeight","getContext","scale","clear","base64EncodedImage","natoSignature","AutoNumberFieldTemplate","AutoNumberFieldTemplate_classCallCheck","AutoNumberFieldTemplate_possibleConstructorReturn","AutoNumberFieldTemplate_inherits","AutoNumberFieldTemplate_createClass","docsetHomePageUrl","BeneficiaryRequestFieldTemplate","BeneficiaryRequestFieldTemplate_classCallCheck","BeneficiaryRequestFieldTemplate_possibleConstructorReturn","TEMPLATE_URL","FORM_URL","dialogCallback","BeneficiaryRequestFieldTemplate_inherits","BeneficiaryRequestFieldTemplate_createClass","SharedWithFieldTemplate","SharedWithFieldTemplate_classCallCheck","SharedWithFieldTemplate_possibleConstructorReturn","permissionsLoaded","onRenderTooltip","onTooltipToggle","SharedWithFieldTemplate_inherits","SharedWithFieldTemplate_createClass","isTooltipVisible","RoleAssignments","Username","Member","Permissions","RoleDefinitionBindings","roleDefinition","roleRows","AssignedHeadOfSectionFieldTemplate","AssignedHeadOfSectionFieldTemplate_classCallCheck","AssignedHeadOfSectionFieldTemplate_possibleConstructorReturn","selectedUser","usersLoaded","onChangeUser","AssignedHeadOfSectionFieldTemplate_inherits","AssignedHeadOfSectionFieldTemplate_createClass","EntityData","SPUserID","selectedUserId","userOptions","defaultFieldHtml","ListSchema","ApplicationApprovalStatusFieldTemplate_classCallCheck","ApplicationApprovalStatusFieldTemplate_possibleConstructorReturn","decodedValue","ApplicationApprovalStatusFieldTemplate_inherits","ApplicationApprovalStatusFieldTemplate_createClass","PENDING","isSiteAdmin","seed","statusArray","statusStr","BaseGrantRendering","BaseGrantRendering_classCallCheck","componentsPerField","_grant","webPermMasks","BaseGrantRendering_createClass","registrationContext","ViewStyle","fieldRendering","fieldInternalName","fieldRenderOverride","generateContextDiv","Templates","Fields","OnPostRender","fieldHashmap","Field","obj","elementId","DivisionFieldTemplate_DivisionFieldTemplate","CodeFieldTemplate_CodeFieldTemplate","ReadOnlyFieldTemplate_ReadOnlyFieldTemplate","ApprovalFieldTemplate_ApprovalFieldTemplate","SignatureFieldTemplate_SignatureFieldTemplate","AutoNumberFieldTemplate_AutoNumberFieldTemplate","SharedWithFieldTemplate_SharedWithFieldTemplate","AssignedHeadOfSectionFieldTemplate_AssignedHeadOfSectionFieldTemplate","ApplicationApprovalStatusFieldTemplate_ApplicationApprovalStatusFieldTemplate","onPostRender","TemplateManager","RegisterTemplateOverrides","contentTypeDropDown","setAttribute","visibility","selectedContentType","selectedOptions","contentTypeSpan","titleField","synopsisField","onblur","externalStatusDiv","externalStatusValue","firstElementChild","codeField","toLowerCase","codeFieldValue","webpartId","allUserSpans","hrefExpression","allUserLinks","userLink","controlDivId","controlDiv","coDirectorSearchLabel","coDirectorSelectElement","onchange","htmlSelectElement","selectedValue","selectedText","coDirectorOptions","parsedCodirectorData","institution","emptyOption","selectedCodirector","decodeURIComponent","labelTranslations","Project Number","Application description","Key Priorities","Application Status","Application Approval Status","Grant Administrators","Senior Advisors","Advisors","Reviewers","Meeting Number","Contact person","tableData","approvalStatusValue","approvalStatusText","Items","contentType","pow","clonedContext","stack","mainForm","currentFormTable","publishedGrantDataElement","borderLeft","_publishedGrantComponent","updateGrantStatus","listGuidStr","itemIdStr","externalStatusField","fontFamily","userHasManageWebPerm","cachedUserGroupsKey","localStorage","cachedUserGroups","getItem","cachedGroups","memberOfGroup","memberofGroupStr","groupname","menu","nextSibling","seperator","groupMenuItem","textDecoration","removeItem","createRoleMenuItem","applicationLinksInQuicklaunch","executeOrDelayUntilScriptLoaded","SetUiComponentVisibility","SetPageTitle","PublishedGrantRendering","PublishedGrantRendering_classCallCheck","PublishedGrantRendering_createClass","baseViewId","BaseViewID","oldRenderListView","RenderListView","webPartID","hashCode","getViewHash","OnPreRender","g_MinimalDownload","asyncDeltaManager","RegisterModuleInit","publishedGrantRendering","RegisterRenderingTemplates","MyApplicationsRendering","MyApplicationsRendering_classCallCheck","MyApplicationsRendering_createClass","webpartQualifier","webpartDiv","BeneficiaryRequestFieldTemplate_BeneficiaryRequestFieldTemplate","myApplicationsRendering","SharePointRestService_classCallCheck","SharePointRestService_createClass","method","UpdateFormDigest","defaultHeaders","Accept","Content-Type","X-RequestDigest","credentials","res","ok","parsedText","fromAddress","toAccountName","subject","mail","From","To","Body","Subject","content-type","loadIcons","disableWarnings","warnOnMissingIcons","SPUtil_classCallCheck","SPUtil_createClass","waitForIcons","pairs","pair","fieldCollection","currentWeb","isValidUser","dateStr","currentDoPostback","WebForms","PageRequestManager","_additionalInput","h","_form","_isCrossPost","_postBackSettings","_createPostBackSettings","_masterPageUniqueID","_uniqueIDToClientID","g","_getPostBackSettings","_asyncPostBackControlIDs","_postBackControlIDs","_findNearestElement","_activeElement","async","onsubmit","_onsubmit","_originalDoPostBack","__EVENTTARGET","__EVENTARGUMENT","_onFormSubmit","datetimeparts","datestring","timestring","dateparts","day","hour","timeparts","navigator","writeText","err","textArea","select","execCommand","console","fallbackCopyTextToClipboard","nativeCopyTextToClipboard","SPPreSaveAction_classCallCheck","preSaveActionQueue","attachPreSaveAction","SPPreSaveAction_createClass","PreSaveAction","internalPreSaveAction","_callback","orignalOnclickCall","orignalOnclickTargetId","queuedFunction","returnVal","instance","SPRibbonControl_classCallCheck","_ribbon","_ribbonTabId","_actionListToExecuteAfterRibbonLoaded","pageManager","afterRibbonLoadedAction","get_ribbon","add_ribbonInited","initialTabId","_ribbonStartInit","SPRibbonControl_createClass","tabId","get_element","tabTitle","groupDefinition","tabObject","refresh","_instance","FormValidator_classCallCheck","FormValidator_createClass","allowEmpty","validateUsingRegex","isValid","expression","LocalStorageCache_classCallCheck","LocalStorageCache_createClass","constructorMethod","maxAge","GLOBAL_CACHE_KEY","Storage","cachedContent","cachedObject","cacheTimestamp","newObject","objectToCache","setItem","__webpack_exports__","BaseGrant_BaseGrant","Grant_Grant","PublishableGrant_PublishableGrant","PublishedGrantData_PublishedGrantData","PublishedEventData_PublishedEventData","User_User","Attachment_Attachment","Proposal_Proposal","SpecialCall_SpecialCall","PotentialStudy_PotentialStudy","ExploratoryGroupRegistration_ExploratoryGroupRegistration","PlenaryMeetingRegistration_PlenaryMeetingRegistration","SeminarRegistration_SeminarRegistration","Application_Application","ApplicantDetails_ApplicantDetails","ProjectDetails_ProjectDetails","ApplicationAttachments_ApplicationAttachments","DocumentGenerator_DocumentGenerator","DocumentGeneratorRibbon_DocumentGeneratorRibbon","ManageGrantsRibbon_ManageGrantsRibbon","AgreementsDetails_AgreementsDetails","BudgetDetails_BudgetDetails","ProjectTimeline_ProjectTimeline","AdditionalQuestions_AdditionalQuestions","ManageApplicationsRibbon_ManageApplicationsRibbon","ApplicationAsyncDefaultValues_ApplicationAsyncDefaultValues","LinkedApproval_LinkedApproval","ChangeRequest_ChangeRequest","WorkflowManager_WorkflowManager","GrantDetailsComponent_GrantDetailsComponent","GrantApplicationWizardComponent_GrantApplicationWizardComponent","EventRegistrationComponent_EventRegistrationComponent","Wizard1ApplicantComponent_Wizard1ApplicantComponent","Wizard2ProjectDetailsComponent_Wizard2ProjectDetailsComponent","Wizard3BudgetComponent_Wizard3BudgetComponent","Wizard5ProjectStructureTimelineComponent_Wizard5ProjectStructureTimelineComponent","Wizard6PreviousGrantsComponent_Wizard6PreviousGrantsComponent","Wizard7AttachmentsComponent_Wizard7AttachmentsComponent","Wizard10OverviewComponent_Wizard10OverviewComponent","InvitationDialogComponent_InvitationDialogComponent","ChangeRequestComponent_ChangeRequestComponent","ChangeRequestHistoryComponent_ChangeRequestHistoryComponent","StudyGroupSubSiteCreatorComponent_StudyGroupSubSiteCreatorComponent","StudyGroupDocumentCreatorComponent_StudyGroupDocumentCreatorComponent","BaseGrantRendering_BaseGrantRendering","SharePointRestService_SharePointRestService","SPPreSaveAction_SPPreSaveAction","DIGrantRendering","_potentialStudy","setNiagEventTypeListener","niagEventTypeDropdown","displayStyle","closest","source","view","natoNiagEvents","natoSocialNiagEvents","additionalQuestionsCandidates","renderFilterDropDown","startingLetters","toUpperCase","captionSpan","firstLetterSelect","insertAdjacentElement","blankOption","letter","selectedLetter","updatePotentialStudyStatus","_index__WEBPACK_IMPORTED_MODULE_2__","initialize","grantRendering","PDDGrantRendering","_proposal","_linkedApproval","_headOfSectionApprovalInitialized","_questionsChecked","headOfSectionApprovalField","planningOfficerApprovalField","assignedHeadOfSectionField","ShowUnansweredQuestionsNotificationBanner","updated","updateProposalStatus","approvalField","isEnabled","renderNewProposalLink","approvalFieldPlanningOfficer","approvalFieldHeadOfSection","approvalValue","ESCGrantRendering","_specialCall","updateSpecialCallStatus"],"mappings":"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CA,WACA,UACA,gBACA,YACA,UACA,iCACA,WACA,YACA,YACA,YACA,YACA,cACA,WACA,eACA,YACA,kBACA,UACA,UACA,UACA,qBACA,YACA,YACA,UACA,YACA,gBACA,cACA,WACA,QACA,UACA,QACA,SACA,aACA,YACA,QACA,aACA,WACA,UACA,UACA,qBACA,WACA,WACA,YACA,oBACA,UACA,SACA,WACA,UACA,SACA,kBACA,oBACA,8BACA,WACA,UACA,WACA,SACA,WACA,eACA,QACA,cACA,YACA,eACA,YACA,aACA,WACA,UACA,WACA,UACA,6BACA,WACA,cACA,YACA,YACA,aACA,SACA,aACA,UACA,QACA,QACA,UACA,UACA,UACA,WACA,WACA,SACA,YACA,cACA,SACA,UACA,UACA,UACA,cACA,UACA,UACA,WACA,WACA,SACA,kBACA,YACA,eACA,WACA,aACA,UACA,WACA,WACA,YACA,WACA,SACA,UACA,OACA,cACA,aACA,cACA,YACA,UACA,cACA,WACA,UACA,YACA,cACA,gBACA,WACA,UACA,WACA,aACA,aACA,WACA,UACA,WACA,uBACA,iBACA,gBACA,aACA,WACA,WACA,SACA,aACA,mBACA,eACA,4BACA,YACA,QACA,YACA,UACA,cACA,aACA,oBACA,aACA,WACA,oBACA,SACA,aACA,eACA,SACA,UACA,WACA,UACA,UACA,iBACA,eACA,mBACA,iBACA,cACA,SACA,cACA,aACA,gBACA,aACA,UACA,cACA,iBACA,cACA,YACA,YACA,mBACA,SACA,gBACA,+CACA,eACA,UACA,aACA,WACA,YACA,iCACA,QACA,UACA,QACA,SACA,YACA,cACA,YACA,OACA,WACA,WACA,YACA,SACA,cACA,mBACA,WACA,UACA,UACA,4BACA,WACA,UACA,YACA,uCACA,YACA,cACA,UACA,aACA,aACA,kBACA,YACA,SACA,UACA,wQCjQG,IAAME,GAAb,oBAAAA,iGAAAC,CAAA9mD,KAAA6mD,GAAA,OAAAE,GAAAF,EAAA,OAAA7nD,IAAA,YAAAN,MAAA,WAEQ,OAAOmoD,EAAQF,KAAK/6C,IAAI,SAAAo7C,GACpB,OACIhoD,IAAKgoD,EACL7tB,KAAM6tB,EACNnL,QACIC,YACIC,WAAY,kBARpC8K,EAAA,GAeAA,GAAQF,MACJ,cACA,UACA,UACA,UACA,SACA,sBACA,YACA,UACA,YACA,UACA,aACA,UACA,UACA,aACA,WACA,UACA,UACA,SACA,QACA,SACA,UACA,yBACA,WACA,SACA,oBACA,WACA,eACA,UACA,aACA,WACA,WACA,SACA,2BACA,OACA,QACA,QACA,WACA,UACA,QACA,wCACA,aACA,gBACA,UACA,OACA,SACA,UACA,UACA,WACA,WACA,qBACA,UACA,QACA,cACA,oBACA,UACA,UACA,WACA,WACA,OACA,UACA,SACA,QACA,SACA,UACA,UACA,QACA,SACA,UACA,YACA,SACA,gBACA,SACA,QACA,WACA,UACA,UACA,QACA,YACA,4BACA,OACA,UACA,SACA,QACA,UACA,QACA,SACA,aACA,QACA,WACA,yCACA,qBACA,SACA,aACA,mCACA,SACA,UACA,UACA,UACA,QACA,gBACA,YACA,aACA,aACA,SACA,WACA,WACA,OACA,QACA,mBACA,aACA,YACA,SACA,kCACA,uBACA,SACA,WACA,aACA,UACA,aACA,UACA,UACA,QACA,QACA,cACA,cACA,YACA,QACA,UACA,kBACA,SACA,OACA,WACA,QACA,SACA,mBACA,WACA,OACA,cACA,SACA,WACA,QACA,UACA,qBACA,SACA,wBACA,cACA,mCACA,QACA,aACA,wBACA,eACA,UACA,SACA,aACA,eACA,YACA,WACA,WACA,kBACA,UACA,eACA,cACA,QACA,YACA,QACA,WACA,SACA,cACA,uBACA,aACA,+BACA,WACA,cACA,OACA,QACA,sBACA,UACA,UACA,eACA,SACA,SACA,UACA,uBACA,iBACA,gBACA,UACA,aACA,UACA,YACA,WACA,QACA,SACA,sQChNG,IAAMM,GAAb,oBAAAA,iGAAAC,CAAAlnD,KAAAinD,GAAA,OAAAE,GAAAF,EAAA,OAAAjoD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","file":"NATO.SP.PreAwardPortal.NatoAwardSystem.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t4: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/Dist/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([767,1,0,2]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","module.exports = React;","//An enumaration to indicate the status of an Approval\r\nexport var ApprovalEnum;\r\n(function (ApprovalEnum) {\r\n ApprovalEnum[ApprovalEnum[\"Pending\"] = 0] = \"Pending\";\r\n ApprovalEnum[ApprovalEnum[\"Approved\"] = 1] = \"Approved\";\r\n ApprovalEnum[ApprovalEnum[\"Rejected\"] = 2] = \"Rejected\";\r\n})(ApprovalEnum || (ApprovalEnum = {}));\r\n//# sourceMappingURL=ApprovalEnum.jsx.map","export var DivisionEnum;\r\n(function (DivisionEnum) {\r\n DivisionEnum[DivisionEnum[\"PDD\"] = 0] = \"PDD\";\r\n DivisionEnum[DivisionEnum[\"ESC\"] = 1] = \"ESC\";\r\n DivisionEnum[DivisionEnum[\"DI\"] = 2] = \"DI\";\r\n DivisionEnum[DivisionEnum[\"INVALID\"] = 3] = \"INVALID\";\r\n})(DivisionEnum || (DivisionEnum = {}));\r\n//# sourceMappingURL=DivisionEnum.jsx.map","import * as ReactDOM from 'react-dom';\r\nimport { SharePointRestService, PublishedGrantData, DivisionEnum, GrantStatus, SPUtil, SPPreSaveAction, ConfirmDialogComponent, LogSeverityEnum, LogMessage, PotentialStudy, PublishedEventData } from \"../index\";\r\nexport class BaseGrant {\r\n constructor(item) {\r\n this.setInternalDataFromSharePointObject(item);\r\n }\r\n setInternalDataFromSharePointObject(item) {\r\n this._currentItem = item;\r\n this._id = item.Id;\r\n this._title = item.Title;\r\n this._code = item.natoCode;\r\n this._synopsis = item.natoSynopsis;\r\n this._startDate = (!item.natoStartDate || item.natoStartDate.indexOf(\"T\") >= 0) ? new Date(item.natoStartDate) : SPUtil.parseSharePointDate(item.natoStartDate);\r\n this._endDate = (!item.natoEndDate || item.natoEndDate.indexOf(\"T\") >= 0) ? new Date(item.natoEndDate) : SPUtil.parseSharePointDate(item.natoEndDate);\r\n this._editor = (item.Editor != null) ? item.Editor.Title : null;\r\n this._modifiedOn = new Date(Date.parse(item.Modified));\r\n this._onHold = (\"\" + item.natoGrantStatus).toLocaleLowerCase().endsWith(\"on hold\");\r\n let divistionStr = item.natoDivision;\r\n if (divistionStr && divistionStr.toLocaleLowerCase().startsWith(\"pdd\")) {\r\n this._division = DivisionEnum.PDD;\r\n }\r\n else if (divistionStr && divistionStr.toLocaleLowerCase().startsWith(\"di\")) {\r\n this._division = DivisionEnum.DI;\r\n }\r\n else if (divistionStr && divistionStr.toLocaleLowerCase().startsWith(\"esc\")) {\r\n this._division = DivisionEnum.ESC;\r\n }\r\n else if (!divistionStr && _spPageContextInfo.webTitle.toLocaleLowerCase().startsWith(\"pdd\")) {\r\n this._division = DivisionEnum.PDD;\r\n }\r\n else if (!divistionStr && _spPageContextInfo.webTitle.toLocaleLowerCase().startsWith(\"di\")) {\r\n this._division = DivisionEnum.DI;\r\n }\r\n else if (!divistionStr && _spPageContextInfo.webTitle.toLocaleLowerCase().startsWith(\"esc\")) {\r\n this._division = DivisionEnum.ESC;\r\n }\r\n else {\r\n this._division = DivisionEnum.INVALID;\r\n }\r\n if (item.natoProjectType) {\r\n this._projectType = item.natoProjectType;\r\n }\r\n else if (this._division == DivisionEnum.ESC) {\r\n this._projectType = item.natoSpecialCallTemplate;\r\n }\r\n else if (this._division == DivisionEnum.PDD) {\r\n this._projectType = item.natoPDDProjectType;\r\n }\r\n this._hasBeenSynchronized = false;\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get url() {\r\n return this._url;\r\n }\r\n set url(url) {\r\n this._url = url;\r\n }\r\n get title() {\r\n return this._title;\r\n }\r\n set title(title) {\r\n this._title = title;\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n set code(code) {\r\n this._code = code;\r\n }\r\n get synopsis() {\r\n return this._synopsis;\r\n }\r\n set synopsis(synopsis) {\r\n this._synopsis = synopsis;\r\n }\r\n get startDate() {\r\n return this._startDate;\r\n }\r\n set startDate(startDate) {\r\n this._startDate = startDate;\r\n }\r\n get endDate() {\r\n return this._endDate;\r\n }\r\n set endDate(endDate) {\r\n this._endDate = endDate;\r\n }\r\n get editor() {\r\n return this._editor;\r\n }\r\n set editor(editor) {\r\n this._editor = editor;\r\n }\r\n get modifiedOn() {\r\n return this._modifiedOn;\r\n }\r\n set modifiedOn(modifiedOn) {\r\n this._modifiedOn = modifiedOn;\r\n }\r\n get division() {\r\n return this._division;\r\n }\r\n set division(division) {\r\n this._division = division;\r\n }\r\n get isPublished() {\r\n if (this.url != null && this.url.toLocaleLowerCase().indexOf(\"lists/grants/grants/\") != -1)\r\n return true;\r\n return false;\r\n }\r\n get onHold() {\r\n return this._onHold;\r\n }\r\n set onHold(onHold) {\r\n this._onHold = onHold;\r\n }\r\n get projectType() {\r\n return this._projectType;\r\n }\r\n set projectType(projectType) {\r\n this._projectType = projectType;\r\n }\r\n get status() {\r\n if (!this.isPublished)\r\n return GrantStatus.WAITING_FOR_PUBLICATION;\r\n if (this.isPublished) {\r\n if (this.onHold) {\r\n return GrantStatus.PUBLISHED_ON_HOLD;\r\n }\r\n return GrantStatus.PUBLISHED;\r\n }\r\n }\r\n get spItem() {\r\n return this._currentItem;\r\n }\r\n /**\r\n * Retrieves any public data for this Grant,\r\n * @return {Promise} The public data for this grant as a PublishedGrantData, or if this grant was not published\r\n */\r\n getPublishedGrantData() {\r\n const currentGrantCode = this._code;\r\n const url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('Grant Publications')/items?$filter=natoCode eq '\" + currentGrantCode + \"'&$select=ID,Title,natoCode,natoSynopsis,natoStartDate,natoEndDate,natoGrantDetails,natoDivision,natoProjectType,Modified,Created,Editor/Title&$expand=Editor\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n if (odata.value.length == 0) {\r\n resolve(null);\r\n }\r\n else {\r\n let jsonObject = odata.value[0];\r\n resolve(new PublishedGrantData(jsonObject));\r\n }\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n Archive(itemId, listGuid) {\r\n let objectName = \"proposal\";\r\n if (this.division == DivisionEnum.DI) {\r\n objectName = \"event\";\r\n }\r\n else if (this.division == DivisionEnum.ESC) {\r\n objectName = \"special call\";\r\n }\r\n let spContentRow = document.getElementById('contentRow');\r\n let dialogContainer = document.createElement('DIV');\r\n dialogContainer.id = 'natoDialogContainer';\r\n spContentRow.insertAdjacentHTML('beforeend', dialogContainer.outerHTML);\r\n ReactDOM.render( { this.archiveInternal(itemId, listGuid); }} onCancel={() => { }} onClose={() => { spContentRow.removeChild(document.getElementById('natoDialogContainer')); }}/>, document.getElementById('natoDialogContainer'));\r\n return true;\r\n }\r\n archiveInternal(itemId, listGuid) {\r\n return new Promise((resolve, reject) => {\r\n if (window.location.search.toLocaleLowerCase().indexOf(\"archive=1\") == -1 || this._hasBeenSynchronized) {\r\n this.saveCurrentForm(\"archive\", listGuid);\r\n }\r\n else {\r\n this.getPublishedGrantData().then((publishedGrant) => {\r\n //If there is any publishedGrant data object, move that item to the recycle bin\r\n let allPromises = new Array();\r\n if (publishedGrant) {\r\n allPromises.push(publishedGrant.Recycle());\r\n }\r\n Promise.all(allPromises).then(() => {\r\n //All archived grants go into the 'Archive' folder\r\n var targetFolder = \"Archive\";\r\n var ctx = SP.ClientContext.get_current();\r\n var list = ctx.get_web().get_lists().getById(listGuid);\r\n var listRootFolder = list.get_rootFolder();\r\n var item = list.getItemById(itemId);\r\n ctx.load(listRootFolder, 'Name');\r\n ctx.load(item, 'FileRef', 'FileDirRef');\r\n ctx.executeQueryAsync((sender, args) => {\r\n var fileUrl = item.get_item(\"FileRef\");\r\n var rootFolderName = listRootFolder.get_name();\r\n var file = ctx.get_web().getFileByServerRelativeUrl(fileUrl);\r\n var targetfileUrl = _spPageContextInfo.webAbsoluteUrl + \"/Lists/\" + rootFolderName + \"/\" + targetFolder + \"/\" + fileUrl.split('/').slice(-1);\r\n //Update the item itself set the status to 'Archived'\r\n item.set_item(\"natoExternalStatus\", GrantStatus.ARCHIVED);\r\n item.set_item(\"natoGrantStatus\", GrantStatus.ARCHIVED);\r\n item.update();\r\n //Move the file to the archive folder\r\n file.moveTo(targetfileUrl, SP.MoveOperations.overwrite);\r\n ctx.executeQueryAsync((sender, args) => {\r\n let queryStringParam = SPUtil.parseQuerystring(location.search);\r\n window.location.href = queryStringParam[\"Source\"];\r\n }, (sender, args) => {\r\n LogMessage.Log(\"Unable to archive the current Grant '\" + this.id + \"': \" + args.get_errorDetails(), this, LogSeverityEnum.Error);\r\n });\r\n }, (sender, args) => {\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n Synchronize(itemId, listGuid) {\r\n let spContentRow = document.getElementById('contentRow');\r\n let dialogContainer = document.createElement('DIV');\r\n dialogContainer.id = 'natoDialogContainer';\r\n spContentRow.insertAdjacentHTML('beforeend', dialogContainer.outerHTML);\r\n ReactDOM.render( { this.synchronizeInternal(itemId, listGuid); }} onCancel={() => { }} onClose={() => { spContentRow.removeChild(document.getElementById('natoDialogContainer')); }}/>, document.getElementById('natoDialogContainer'));\r\n return true;\r\n }\r\n saveCurrentForm(querystringAction, listGuid) {\r\n let webPartQualifier = window[\"WPSC\"].WebPartPage.Parts.Item(0).WebPartQualifier;\r\n let formCtx = window[webPartQualifier + \"FormCtx\"];\r\n let submitButtonId = document.getElementById(formCtx.SubmitButtonID).name;\r\n let aspForm = document.getElementById(\"aspnetForm\");\r\n let oldPostbackUrl = aspForm.action;\r\n let newPostbackUrl = SPUtil.modifyQueryStringParameter(location.href, \"Source\", encodeURIComponent(location.href + \"&\" + querystringAction + \"=1&listId=\" + listGuid));\r\n SPPreSaveAction.getInstance().callback = () => {\r\n //The 'SPClientForms.ClientFormManager.SubmitClientForm' does 2 things\r\n //1) It validates the current form\r\n //2) Check if the form can be saved client-side (without a postback) and it does to when possible\r\n //It returns true if a postback is still needed, false if no postback is needed\r\n //By setting the 'formCtx.PostBackRequired' the 'SubmitClientForm'-function will skip the saving part, and only do the validation.\r\n //This makes it more predictable and this easier for us.\r\n formCtx.PostBackRequired = true;\r\n if (SPClientForms.ClientFormManager.SubmitClientForm(webPartQualifier)) {\r\n //The page validation of the form did not succeed (missing required fields perhaps?). Cancel the save action.\r\n return false;\r\n }\r\n //Perform postback if the page is valid\r\n SPUtil.strictDoPostback(() => {\r\n let options = new WebForm_PostBackOptions(submitButtonId, \"\", true, \"\", newPostbackUrl, false, true);\r\n WebForm_DoPostBackWithOptions(options);\r\n LogMessage.Log(\"Performing postback...\", this, LogSeverityEnum.Verbose);\r\n });\r\n return true;\r\n };\r\n //Trigger the PreSaveAction by executing the PreSaveItem\r\n if (!PreSaveItem()) {\r\n return;\r\n }\r\n return;\r\n }\r\n synchronizeInternal(itemId, listGuid) {\r\n return new Promise((resolve, reject) => {\r\n if (window.location.search.toLocaleLowerCase().indexOf(\"synchronize=1\") == -1 || this._hasBeenSynchronized) {\r\n this.saveCurrentForm(\"synchronize\", listGuid);\r\n }\r\n else {\r\n SP.UI.ModalDialog.showWaitScreenWithNoClose(\"Please wait...\", \"Synchronizing grant data to the external view.\");\r\n this.getPublishedGrantData().then((publishedGrant) => {\r\n if (publishedGrant == null) {\r\n this.id = itemId;\r\n PublishedGrantData.Create(this).then(publishedGrantData => {\r\n SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, null);\r\n resolve(publishedGrantData);\r\n });\r\n }\r\n else {\r\n if (this.division == DivisionEnum.DI) {\r\n let study = new PotentialStudy(this._currentItem);\r\n study.additionalQuestions.then(questions => {\r\n let publishedEventData = new PublishedEventData(publishedGrant.spItem);\r\n publishedEventData.synopsis = study.synopsis;\r\n publishedEventData.title = study.title;\r\n publishedEventData.startDate = study.startDate;\r\n publishedEventData.endDate = study.endDate;\r\n publishedEventData.division = study.division;\r\n publishedEventData.description = study.description;\r\n publishedEventData.eventType = study.eventType;\r\n publishedEventData.niagEvents = study.niagEvents;\r\n publishedEventData.niagSocialEvents = study.niagSocialEvents;\r\n publishedEventData.additonalQuestions = questions;\r\n publishedEventData.Update().then(() => {\r\n SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, null);\r\n resolve(publishedGrant);\r\n });\r\n });\r\n }\r\n else {\r\n publishedGrant.synopsis = this.synopsis;\r\n publishedGrant.title = this.title;\r\n publishedGrant.endDate = this.endDate;\r\n publishedGrant.division = this.division;\r\n publishedGrant.projectType = this.projectType;\r\n publishedGrant.Update().then(publishedGrantData => {\r\n if (this.division == DivisionEnum.PDD) {\r\n let proposal = this; //This seems weird, but a direct cast is not accepted by TypeScript...\r\n let audience = new Array();\r\n if (proposal.spItem.natoTargetAudience && proposal.spItem.natoTargetAudience.length > 0) {\r\n audience = proposal.spItem.natoTargetAudience.map(a => a.Key || a.Name);\r\n }\r\n publishedGrant.SetAudience(audience).then(() => {\r\n SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, null);\r\n resolve(publishedGrant);\r\n });\r\n }\r\n else {\r\n SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, null);\r\n resolve(publishedGrant);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=BaseGrant.jsx.map","import { BaseGrant, SPUtil } from \"../index\";\r\nexport class Grant extends BaseGrant {\r\n constructor(item) {\r\n super(item);\r\n let queryStringParam = SPUtil.parseQuerystring(location.search);\r\n if (queryStringParam[\"synchronize\"] && queryStringParam[\"synchronize\"] == \"1\") {\r\n let itemId = Number(queryStringParam[\"ID\"]);\r\n let listid = new SP.Guid(queryStringParam[\"listId\"]);\r\n super.synchronizeInternal(itemId, listid).then(publishedGrantData => {\r\n this._hasBeenSynchronized = true;\r\n let renderer = window[\"GrantRendering\"];\r\n renderer.UpdatePublishedGrantExternalView(publishedGrantData);\r\n });\r\n }\r\n }\r\n Unpublish() {\r\n return false;\r\n }\r\n updateOnHoldStatus(onhold) {\r\n return new Promise((resolve, reject) => {\r\n resolve();\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=Grant.jsx.map","export class GrantStatus {\r\n}\r\nGrantStatus.WAITING_FOR_HEAD_OF_SECTION = \"Pending - Waiting for approval by Head of Section\";\r\nGrantStatus.REJECTED_BY_HEAD_OF_SECTION = \"Rejected - Rejected by Head of Section\";\r\nGrantStatus.WAITING_FOR_PLANNING_OFFICER = \"Pending - Waiting for approval by Planning Officer\";\r\nGrantStatus.REJECTED_BY_PLANNING_OFFICER = \"Rejected - Rejected by Planning Officer\";\r\nGrantStatus.WAITING_FOR_PUBLICATION_AFTER_APPROVAL = \"Approved - Waiting for publication\";\r\nGrantStatus.WAITING_FOR_PUBLICATION = \"Pending - Waiting for publication\";\r\nGrantStatus.PUBLISHED = \"Published - Open for applications\";\r\nGrantStatus.PUBLISHED_ON_HOLD = \"Published - On Hold\";\r\nGrantStatus.ARCHIVED = \"Archived\";\r\n//# sourceMappingURL=GrantStatus.jsx.map","export class ApplicationStatus {\r\n}\r\nApplicationStatus.DRAFT = \"Draft\";\r\nApplicationStatus.SUBMITTED = \"Submitted\";\r\nApplicationStatus.SUBMITTED_MORE_INFORMATION_REQUESTED = \"Submitted - Waiting for more information\";\r\n//static readonly APPROVED = \"Approved\"\r\nApplicationStatus.REJECTED = \"Rejected\";\r\nApplicationStatus.UNDER_REVIEW = \"Under review\";\r\nApplicationStatus.AWARDED = \"Awarded\";\r\nApplicationStatus.ARCHIVED = \"Archived\";\r\nApplicationStatus.INVALID = \"Invalid\";\r\n//# sourceMappingURL=ApplicationStatus.jsx.map","import * as ReactDOM from 'react-dom';\r\nimport { BaseGrant, PublishedGrantData, SPUtil, LogMessage, LogSeverityEnum, GrantStatus, ConfirmDialogComponent, DivisionEnum, PublishedEventData, PotentialStudy, ListNames, SharePointRestService } from \"../index\";\r\nexport class PublishableGrant extends BaseGrant {\r\n constructor(item) {\r\n super(item);\r\n let queryStringParam = SPUtil.parseQuerystring(location.search);\r\n if (queryStringParam[\"publish\"] && queryStringParam[\"publish\"] == \"1\") {\r\n let itemId = Number(queryStringParam[\"ID\"]);\r\n let listid = new SP.Guid(queryStringParam[\"listId\"]);\r\n this.PublishInternal(itemId, listid);\r\n }\r\n else if (queryStringParam[\"archive\"] && queryStringParam[\"archive\"] == \"1\") {\r\n let itemId = Number(queryStringParam[\"ID\"]);\r\n let listid = new SP.Guid(queryStringParam[\"listId\"]);\r\n this.archiveInternal(itemId, listid).then(publishedGrantData => {\r\n });\r\n }\r\n }\r\n Publish(itemId, listGuid) {\r\n let spContentRow = document.getElementById('contentRow');\r\n let dialogContainer = document.createElement('DIV');\r\n dialogContainer.id = 'natoDialogContainer';\r\n spContentRow.insertAdjacentHTML('beforeend', dialogContainer.outerHTML);\r\n let objectName = \"proposal\";\r\n if (this.division == DivisionEnum.DI) {\r\n objectName = \"event\";\r\n }\r\n else if (this.division == DivisionEnum.ESC) {\r\n objectName = \"special call\";\r\n }\r\n ReactDOM.render( { this.PublishInternal(itemId, listGuid); }} onCancel={() => { }} onClose={() => { spContentRow.removeChild(document.getElementById('natoDialogContainer')); }}/>, document.getElementById('natoDialogContainer'));\r\n return true;\r\n }\r\n PublishInternal(itemId, listGuid) {\r\n //The current form is not saved yet. Force a postback which will also this the current form.\r\n if (window.location.search.toLocaleLowerCase().indexOf(\"publish=1\") == -1) {\r\n LogMessage.Log(\"Saving current item\", this, LogSeverityEnum.Verbose);\r\n this.saveCurrentForm(\"publish\", listGuid);\r\n LogMessage.Log(\"Saving item saved\", this, LogSeverityEnum.Verbose);\r\n return;\r\n }\r\n //We could be publishing from the (1) NewForm.aspx or (2) Editform.aspx.\r\n //In the case of Editform.aspx retrieving the ItemId is easy, it is in the QueryString\r\n //In the case of newform.aspx we get the ItemId of the last created item, because we just forced a save action milliseconds before\r\n let currentItemIdPromise = Promise.resolve(itemId);\r\n if (window.location.search.toLocaleLowerCase().indexOf(\"publish=1\") != -1 && window.location.pathname.toLocaleLowerCase().endsWith(\"newform.aspx\")) {\r\n currentItemIdPromise = new Promise((resolve, reject) => {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANTS + \"')/items?$filter=AuthorId eq \" + _spPageContextInfo.userId + \"&$orderby=Created%20desc&$top=1&$select=*,natoTargetAudience/Title,natoTargetAudience/Name,natoTargetAudience/ID&$expand=natoTargetAudience\";\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n //In the newform.aspx, the current-item will be initialized from the context, so all data will be null (empty)\r\n //Therefor, we update the 'this'-object with the data retrieved from the last created item by the current user\r\n this.setInternalDataFromSharePointObject(odata.value[0]);\r\n resolve(this.id);\r\n });\r\n })\r\n .catch(reason => {\r\n reject(\"foo\");\r\n });\r\n });\r\n }\r\n currentItemIdPromise.then(id => {\r\n SP.UI.ModalDialog.showWaitScreenWithNoClose(\"Please wait...\", \"Publishing '\" + this.code + \"'\");\r\n itemId = id;\r\n super.getPublishedGrantData().then((publishedGrant) => {\r\n let allPromises = new Array();\r\n if (this.division == DivisionEnum.DI) {\r\n let study = PotentialStudy.fromPublishableGrant(this);\r\n //let study: PotentialStudy = (this as Object) as PotentialStudy; //This seems weird, but a direct cast is not accepted by TypeScript...\r\n //TODO.. append the study with more PotentialStudy related info\r\n if (publishedGrant == null) {\r\n study.id = itemId;\r\n allPromises.push(PublishedEventData.Create(study));\r\n }\r\n else {\r\n let publishedEventData = new PublishedEventData(publishedGrant.spItem);\r\n let updatePublishedEventPromise = study.additionalQuestions.then(questions => {\r\n publishedEventData.synopsis = study.synopsis;\r\n publishedEventData.title = study.title;\r\n publishedEventData.startDate = study.startDate;\r\n publishedEventData.endDate = study.endDate;\r\n publishedEventData.division = study.division;\r\n publishedEventData.description = study.description;\r\n publishedEventData.eventType = study.eventType;\r\n publishedEventData.niagEvents = study.niagEvents;\r\n publishedEventData.niagSocialEvents = study.niagSocialEvents;\r\n publishedEventData.additonalQuestions = questions;\r\n return publishedEventData.Update();\r\n });\r\n allPromises.push(updatePublishedEventPromise);\r\n }\r\n }\r\n else {\r\n if (publishedGrant == null) {\r\n this.id = itemId;\r\n allPromises.push(PublishedGrantData.Create(this));\r\n }\r\n else {\r\n publishedGrant.synopsis = this.synopsis;\r\n publishedGrant.title = this.title;\r\n publishedGrant.startDate = this.startDate;\r\n publishedGrant.endDate = this.endDate;\r\n publishedGrant.division = this.division;\r\n publishedGrant.projectType = this.projectType;\r\n allPromises.push(publishedGrant.Update());\r\n if (this.division == DivisionEnum.PDD) {\r\n let proposal = this; //This seems weird, but a direct cast is not accepted by TypeScript...\r\n let audience = new Array();\r\n if (proposal.spItem.natoTargetAudience && proposal.spItem.natoTargetAudience.length > 0) {\r\n audience = proposal.spItem.natoTargetAudience.map(a => a.Key || a.Name);\r\n }\r\n allPromises.push(publishedGrant.SetAudience(audience));\r\n }\r\n }\r\n }\r\n Promise.all(allPromises).then(() => {\r\n var targetFolder = \"Grants\";\r\n var ctx = SP.ClientContext.get_current();\r\n var list = ctx.get_web().get_lists().getById(listGuid);\r\n var listRootFolder = list.get_rootFolder();\r\n var item = list.getItemById(itemId);\r\n ctx.load(listRootFolder, 'Name');\r\n ctx.load(item, 'FileRef', 'FileDirRef');\r\n ctx.executeQueryAsync((sender, args) => {\r\n var fileUrl = item.get_item(\"FileRef\");\r\n var rootFolderName = listRootFolder.get_name();\r\n var file = ctx.get_web().getFileByServerRelativeUrl(fileUrl);\r\n var targetfileUrl = _spPageContextInfo.webAbsoluteUrl + \"/Lists/\" + rootFolderName + \"/\" + targetFolder + \"/\" + fileUrl.split('/').slice(-1);\r\n item.set_item(\"ContentTypeId\", \"0x0100B559F5196BCB3C47A982255EFCCB0F6D01\");\r\n item.set_item(\"natoExternalStatus\", GrantStatus.PUBLISHED);\r\n item.set_item(\"natoGrantStatus\", GrantStatus.PUBLISHED);\r\n item.update();\r\n file.moveTo(targetfileUrl, SP.MoveOperations.overwrite);\r\n ctx.executeQueryAsync((sender, args) => {\r\n let queryStringParam = SPUtil.parseQuerystring(location.search);\r\n window.location.href = queryStringParam[\"Source\"];\r\n }, (sender, args) => {\r\n LogMessage.Log(\"Unable to update the current Grant '\" + this.id + \" and set the publishing details': \" + args.get_errorDetails(), this, LogSeverityEnum.Error);\r\n });\r\n }, (sender, args) => {\r\n });\r\n });\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=PublishableGrant.jsx.map","import { SharePointRestService, LogMessage, LogSeverityEnum } from \"../index\";\r\nexport class WorkflowManager {\r\n constructor() {\r\n }\r\n StartWorklow(listTitle, itemId, workflowName, workflowParameters, continueOnWorkflowNotFound) {\r\n LogMessage.Log(\"Starting workflow '\" + workflowName + \"' for item '\" + itemId + \"'\", this, LogSeverityEnum.Verbose);\r\n return new Promise((resolve, reject) => {\r\n //Get all workflows associated with the list\r\n let urlWAssoc = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/Lists/GetByTitle('\" + listTitle + \"')/WorkflowAssociations\";\r\n SharePointRestService.fetch(urlWAssoc)\r\n .then(response => {\r\n response.json().then(odata => {\r\n //Find the workflow by name\r\n let subscriptions = odata.value;\r\n let validSubscription = subscriptions.find(subscriptionData => subscriptionData.Name.toLocaleLowerCase() == workflowName.toLocaleLowerCase() && subscriptionData.Enabled);\r\n if (validSubscription) {\r\n let workflowParamsAsXml = \"\";\r\n if (Object.keys(workflowParameters).length > 0) {\r\n let xmlEncodeFunction = window[\"ULSEncodeXML\"];\r\n workflowParamsAsXml = Object.keys(workflowParameters).map(param => {\r\n return \"<\" + param + \">\" + workflowParameters[param] + \"\";\r\n }).join(\"\");\r\n workflowParamsAsXml = \"\" + workflowParamsAsXml + \"\";\r\n workflowParamsAsXml = xmlEncodeFunction(workflowParamsAsXml);\r\n }\r\n //Call our custom asmx webservice to start workflows\r\n var webMethod = _spPageContextInfo.webAbsoluteUrl + \"/_layouts/15/NATO.NAS/workflow.asmx\";\r\n var soap = [];\r\n soap.push(\"\");\r\n soap.push(\"\");\r\n soap.push(\"\");\r\n soap.push(\"\");\r\n soap.push(\"\" + _spPageContextInfo.webAbsoluteUrl + \"\");\r\n soap.push(\"\" + listTitle + \"\");\r\n soap.push(\"\" + itemId + \"\");\r\n soap.push(\"\" + workflowName + \"\");\r\n soap.push(\"\" + workflowParamsAsXml + \"\");\r\n soap.push(\"\");\r\n soap.push(\"\");\r\n soap.push(\"\");\r\n //Construct a XMLHttpRequest. The 'fetch' command will modify the headers in such a way that SharePoint doesn't understand it anymore\r\n let xmlhttp = new XMLHttpRequest();\r\n xmlhttp.open('POST', webMethod, true);\r\n xmlhttp.setRequestHeader(\"Content-Type\", \"text/xml; charset=UTF-8\");\r\n xmlhttp.setRequestHeader(\"SOAPAction\", \"http://NATO.int/NAS/Start\");\r\n xmlhttp.onreadystatechange = (ev) => {\r\n if (xmlhttp.readyState == XMLHttpRequest.DONE) {\r\n if (xmlhttp.status == 200) {\r\n //Workflow successfully started\r\n resolve();\r\n }\r\n else {\r\n LogMessage.Log(\"Unable to start workflow: \" + xmlhttp.statusText, this, LogSeverityEnum.Error);\r\n reject(\"Unable to start workflow.\");\r\n }\r\n }\r\n };\r\n //Execute the SOAP message\r\n xmlhttp.send(soap.join(\"\"));\r\n }\r\n else {\r\n //A workflow with this name does not exists or is not enabled\r\n if (continueOnWorkflowNotFound) {\r\n resolve();\r\n }\r\n else {\r\n LogMessage.Log(\"Unable to find workflow: \" + workflowName, this, LogSeverityEnum.Error);\r\n reject(\"Unable to start workflow.\");\r\n }\r\n }\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to enumerate workflow: \" + reason, this, LogSeverityEnum.Error);\r\n reject(\"Unable to enumerate workflow\");\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=WorkflowManager.jsx.map","import { SPUtil, BaseGrant, SharePointRestService, ListNames, DivisionEnum, Application } from \"../index\";\r\nimport { WorkflowManager } from \"./WorkflowManager\";\r\nexport class PublishedGrantData extends BaseGrant {\r\n constructor(item) {\r\n super(item);\r\n this._grantDetailsLink = item.natoGrantDetails.Url;\r\n }\r\n get grantDetailsLink() {\r\n return this._grantDetailsLink;\r\n }\r\n set grantDetailsLink(grantDetailsLink) {\r\n this._grantDetailsLink = grantDetailsLink;\r\n }\r\n Recycle() {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.PUBLISHED_GRANTS + \"')/items(\" + this.id + \")\";\r\n let headers = { \"If-Match\": \"*\" };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"DELETE\", undefined, headers)\r\n .then(response => {\r\n resolve();\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n resetAudience() {\r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n let list = web.get_lists().getByTitle(ListNames.PUBLISHED_GRANTS);\r\n let item = list.getItemById(this.id);\r\n item.resetRoleInheritance();\r\n clientContext.load(list);\r\n return new Promise((resolve, reject) => {\r\n //Execute the ClientContext batch commands\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve();\r\n }, (sender, args) => {\r\n reject(args);\r\n });\r\n });\r\n }\r\n SetAudience(securityPrincipels) {\r\n if (securityPrincipels.length == 0) {\r\n return this.resetAudience();\r\n }\r\n let contributeGroups = [\"PDD Budget Officers\", \"PDD Evaluation Board\", \"PDD Head of Section\", \"PDD Planning Officers\", \"PDD Section Specialists\"];\r\n //Initialize all objects needed in order to set the permissions for this Application \r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n let list = web.get_lists().getByTitle(ListNames.PUBLISHED_GRANTS);\r\n let item = list.getItemById(this.id);\r\n let adminGroup = web.get_associatedOwnerGroup();\r\n //Instruct the client context to load our objects in one batch\r\n clientContext.load(web);\r\n clientContext.load(list);\r\n clientContext.load(web);\r\n clientContext.load(item, \"HasUniqueRoleAssignments\");\r\n clientContext.load(adminGroup);\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n //Check if the item has already broken permission inheritance\r\n if (!item.get_hasUniqueRoleAssignments()) {\r\n //Break the role inheretance, inheret all permissions, and than apply our new set of roles\r\n item.breakRoleInheritance(true, true);\r\n }\r\n let roleAssignments = item.get_roleAssignments();\r\n clientContext.load(roleAssignments, \"Include(Member, RoleDefinitionBindings)\");\r\n clientContext.executeQueryAsync((sender, args) => {\r\n //Grant the target audience principles 'Read' permissions to the Published Grant\r\n let audienceRoles = new SP.RoleDefinitionBindingCollection(clientContext);\r\n audienceRoles.add(web.get_roleDefinitions().getByType(SP.RoleType.reader));\r\n //Grant the administrators 'Full Control' permissions to the Published Grant\r\n let adminRoles = new SP.RoleDefinitionBindingCollection(clientContext);\r\n adminRoles.add(web.get_roleDefinitions().getByType(SP.RoleType.administrator));\r\n //Grant the PDD Groups 'Read' permissions to the Published Grant\r\n let pddRoles = new SP.RoleDefinitionBindingCollection(clientContext);\r\n pddRoles.add(web.get_roleDefinitions().getByType(SP.RoleType.reader));\r\n //Remove all individual permissions\r\n let permissionCount = roleAssignments.get_count();\r\n for (let i = 0; i < permissionCount; i++) {\r\n let assignment = roleAssignments.get_item(i);\r\n if (assignment.get_member().get_principalType() == SP.Utilities.PrincipalType.user) {\r\n assignment.get_roleDefinitionBindings().removeAll();\r\n assignment.update();\r\n }\r\n }\r\n securityPrincipels.forEach(principal => {\r\n if (principal.toLocaleLowerCase().startsWith(\"i:\")) {\r\n let user = web.ensureUser(principal);\r\n clientContext.load(user);\r\n item.get_roleAssignments().add(user, audienceRoles);\r\n }\r\n else {\r\n let group = web.get_siteGroups().getByName(principal);\r\n clientContext.load(group);\r\n item.get_roleAssignments().add(group, audienceRoles);\r\n }\r\n });\r\n contributeGroups.forEach(groupName => {\r\n let group = web.get_siteGroups().getByName(groupName);\r\n clientContext.load(group);\r\n item.get_roleAssignments().add(group, pddRoles);\r\n });\r\n item.get_roleAssignments().add(adminGroup, adminRoles);\r\n //Execute the ClientContext batch commands\r\n clientContext.executeQueryAsync((sender, args) => {\r\n //Success\r\n resolve();\r\n }, (sender, args) => {\r\n //There was an error setting the custom permissions\r\n reject(args);\r\n });\r\n }, (sender, args) => {\r\n //There was an error breaking the permissions\r\n reject(args);\r\n });\r\n }, (sender, args) => {\r\n reject(args);\r\n });\r\n });\r\n }\r\n Update() {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.PUBLISHED_GRANTS + \"')/items(\" + this.id + \")\";\r\n let headers = { \"X-HTTP-Method\": \"MERGE\", \"If-Match\": \"*\" };\r\n let currentItemJson = {\r\n \"Title\": this.title,\r\n \"natoCode\": this.code,\r\n \"natoSynopsis\": this.synopsis,\r\n \"natoStartDate\": this.startDate.format(\"yyyy-MM-ddThh:mm:ssZ\"),\r\n \"natoEndDate\": this.endDate.format(\"yyyy-MM-ddThh:mm:ssZ\"),\r\n \"natoDivision\": DivisionEnum[this.division],\r\n \"natoProjectType\": this.projectType,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantPublicationsListItem\" }\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", currentItemJson, headers)\r\n .then(response => {\r\n resolve();\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n getBasicGrantData() {\r\n let queryString = this.grantDetailsLink.slice(this.grantDetailsLink.indexOf(\"?\"));\r\n let params = SPUtil.parseQuerystring(queryString);\r\n let grantId = params[\"ID\"];\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANTS + \"')/items(\" + grantId + \")?$select=Title,natoDescription,natoGrantStatus,natoDivision\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"GET\", undefined, undefined, false)\r\n .then(response => {\r\n response.json().then(odata => {\r\n let div = (DivisionEnum)[odata.natoDivision];\r\n div = div || DivisionEnum.INVALID;\r\n resolve({\r\n division: div,\r\n description: odata.natoDescription,\r\n status: odata.natoGrantStatus\r\n });\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n getGrant() {\r\n let queryString = this.grantDetailsLink.slice(this.grantDetailsLink.indexOf(\"?\"));\r\n let params = SPUtil.parseQuerystring(queryString);\r\n let grantId = params[\"ID\"];\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANTS + \"')/items(\" + grantId + \")\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n let grant = new BaseGrant(odata);\r\n resolve(grant);\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n getApplication(applicationId) {\r\n let currentGrantCode = this._code;\r\n //Get application by grant code and application ID (if needed)\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items?$select=*,FileLeafRef,FileRef,hasuniqueroleassignments,Author/Title,Author/Name,Author/ID&$expand=Author&$filter=natoCode eq '\" + currentGrantCode + \"'\" + (applicationId ? \" and Id eq \" + Number(applicationId) : \"\");\r\n if (this._division == DivisionEnum.DI) {\r\n url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/getbytitle('\" + ListNames.EVENT_REGISTRATIONS + \"')/items?$select=*,FileLeafRef,FileRef&$filter=natoCode eq '\" + currentGrantCode + \"'\";\r\n }\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n if (odata.value.length == 0) {\r\n resolve(null);\r\n }\r\n else {\r\n let jsonObject = odata.value[0];\r\n resolve(new Application(jsonObject));\r\n }\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n static getById(itemId) {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.PUBLISHED_GRANTS + \"')/items(\" + itemId + \")?$select=ID,Title,natoCode,natoSynopsis,natoEndDate,natoGrantDetails,natoDivision,natoProjectType,Modified\";\r\n let rendering = window[\"GrantRendering\"];\r\n if (rendering.toString() == \"DIGrantRendering\") {\r\n url = url + \",natoNIAGEventType,natoNIAGEvents,natoNIAGSocialEvents,natoDescription,natoEncodedAdditionalQuestions\";\r\n }\r\n return new Promise((resolve, reject) => {\r\n SPUtil.isLoggedIn().then(isLoggedIn => {\r\n if (isLoggedIn && rendering.toString() != \"DIGrantRendering\") {\r\n url = url + \",Created,Editor/Title&$expand=Editor\";\r\n }\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n let jsonObject = odata;\r\n resolve(new PublishedGrantData(jsonObject));\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n }).catch(reason => {\r\n });\r\n });\r\n }\r\n static getByCode(grantCode) {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.PUBLISHED_GRANTS + \"')/items?$filter=natoCode eq '\" + grantCode + \"'&$select=ID,Title,natoCode,natoSynopsis,natoEndDate,natoGrantDetails,natoDivision,natoProjectType,Modified\";\r\n let rendering = window[\"GrantRendering\"];\r\n if (rendering.toString() == \"DIGrantRendering\") {\r\n url = url + \",natoNIAGEventType,natoNIAGEvents,natoNIAGSocialEvents,natoDescription,natoEncodedAdditionalQuestions\";\r\n }\r\n return new Promise((resolve, reject) => {\r\n SPUtil.isLoggedIn().then(isLoggedIn => {\r\n if (isLoggedIn) {\r\n url = url + \",Created,Editor/Title&$expand=Editor\";\r\n }\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n let jsonObject = odata.value[0];\r\n resolve(new PublishedGrantData(jsonObject));\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n });\r\n }\r\n static Create(grant) {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.PUBLISHED_GRANTS + \"')/items\";\r\n let linkToDetails = _spPageContextInfo.webAbsoluteUrl + \"/Lists/\" + ListNames.GRANTS + \"/DispForm.aspx?ID=\" + grant.id;\r\n let newItem = {\r\n \"Title\": grant.title,\r\n \"natoCode\": grant.code,\r\n \"natoSynopsis\": grant.synopsis,\r\n \"natoEndDate\": grant.endDate.format(\"yyyy-MM-ddThh:mm:ssZ\"),\r\n \"natoGrantDetails\": {\r\n \"Description\": \"Details\",\r\n \"Url\": linkToDetails\r\n },\r\n \"natoDivision\": DivisionEnum[grant.division],\r\n \"natoProjectType\": grant.projectType,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantPublicationsListItem\" }\r\n };\r\n let audience = new Array();\r\n if (grant.division == DivisionEnum.PDD) {\r\n let proposal = grant; //This seems weird, but a direct cast is not accepted by TypeScript...\r\n if (proposal.spItem.natoTargetAudience && proposal.spItem.natoTargetAudience.length > 0) {\r\n audience = proposal.spItem.natoTargetAudience.map(a => a.Key || a.Name);\r\n }\r\n }\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", newItem)\r\n .then(response => {\r\n response.json().then(odata => {\r\n let jsonObject = odata;\r\n let newPublishedGrantObject = new PublishedGrantData(jsonObject);\r\n if (audience.length > 0) {\r\n newPublishedGrantObject.SetAudience(audience).then(() => {\r\n let wf = new WorkflowManager();\r\n wf.StartWorklow(\"Grants\", grant.id, \"ProposalNotification\", { \"Type\": \"Published\" }, true).then(() => {\r\n resolve(newPublishedGrantObject);\r\n });\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n }\r\n else {\r\n resolve(newPublishedGrantObject);\r\n }\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=PublishedGrantData.jsx.map","import { SharePointRestService, ListNames, DivisionEnum, PublishedGrantData, AdditionalQuestions } from \"../index\";\r\nexport class PublishedEventData extends PublishedGrantData {\r\n constructor(item) {\r\n super(item);\r\n this._description = item.natoDescription;\r\n this._eventType = item.natoNIAGEventType;\r\n this._niagEvents = item.natoNIAGEvents ? item.natoNIAGEvents.split(\"\\n\") : new Array();\r\n this._niagSocialEvents = item.natoNIAGSocialEvents ? item.natoNIAGSocialEvents.split(\"\\n\") : new Array();\r\n if (item.natoEncodedAdditionalQuestions) {\r\n let encodedAdditionalQuestions = JSON.parse(item.natoEncodedAdditionalQuestions);\r\n this._additionalQuestions = new AdditionalQuestions(encodedAdditionalQuestions._questions);\r\n }\r\n }\r\n get eventType() {\r\n return this._eventType;\r\n }\r\n set eventType(eventType) {\r\n this._eventType = eventType;\r\n }\r\n get description() {\r\n return this._description;\r\n }\r\n set description(description) {\r\n this._description = description;\r\n }\r\n get niagEvents() {\r\n return this._niagEvents;\r\n }\r\n set niagEvents(niagEvents) {\r\n this._niagEvents = niagEvents;\r\n }\r\n get niagSocialEvents() {\r\n return this._niagSocialEvents;\r\n }\r\n set niagSocialEvents(niagSocialEvents) {\r\n this._niagSocialEvents = niagSocialEvents;\r\n }\r\n get additonalQuestions() {\r\n return this._additionalQuestions;\r\n }\r\n set additonalQuestions(additionalQuestions) {\r\n this._additionalQuestions = additionalQuestions;\r\n }\r\n Update() {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.PUBLISHED_GRANTS + \"')/items(\" + this.id + \")\";\r\n let headers = { \"X-HTTP-Method\": \"MERGE\", \"If-Match\": \"*\" };\r\n let currentItemJson = {\r\n \"Title\": this.title,\r\n \"natoCode\": this.code,\r\n \"natoSynopsis\": this.synopsis,\r\n \"natoStartDate\": this.startDate.format(\"yyyy-MM-ddThh:mm:ssZ\"),\r\n \"natoEndDate\": this.endDate.format(\"yyyy-MM-ddThh:mm:ssZ\"),\r\n \"natoDivision\": DivisionEnum[this.division],\r\n \"natoDescription\": this.description,\r\n \"natoNIAGEventType\": this.eventType,\r\n \"natoNIAGEvents\": this.niagEvents.join(\"\\n\"),\r\n \"natoNIAGSocialEvents\": this.niagSocialEvents.join(\"\\n\"),\r\n \"natoEncodedAdditionalQuestions\": JSON.stringify(this._additionalQuestions),\r\n \"__metadata\": { \"type\": \"SP.Data.GrantPublicationsListItem\" }\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", currentItemJson, headers)\r\n .then(response => {\r\n resolve();\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n static Create(grant) {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.PUBLISHED_GRANTS + \"')/items\";\r\n let linkToDetails = _spPageContextInfo.webAbsoluteUrl + \"/Lists/\" + ListNames.GRANTS + \"/DispForm.aspx?ID=\" + grant.id;\r\n return new Promise((resolve, reject) => {\r\n grant.additionalQuestions.then(questions => {\r\n let newItem = {\r\n \"Title\": grant.title,\r\n \"natoCode\": grant.code,\r\n \"natoSynopsis\": grant.synopsis,\r\n \"natoStartDate\": grant.startDate.format(\"yyyy-MM-ddThh:mm:ssZ\"),\r\n \"natoEndDate\": grant.endDate.format(\"yyyy-MM-ddThh:mm:ssZ\"),\r\n \"natoGrantDetails\": {\r\n \"Description\": \"Details\",\r\n \"Url\": linkToDetails\r\n },\r\n \"natoDivision\": DivisionEnum[grant.division],\r\n \"natoDescription\": grant.description,\r\n \"natoNIAGEventType\": grant.eventType,\r\n \"natoNIAGEvents\": grant.niagEvents.join(\"\\n\"),\r\n \"natoNIAGSocialEvents\": grant.niagSocialEvents.join(\"\\n\"),\r\n \"natoEncodedAdditionalQuestions\": JSON.stringify(questions),\r\n \"__metadata\": { \"type\": \"SP.Data.GrantPublicationsListItem\" }\r\n };\r\n SharePointRestService.fetch(url, \"POST\", newItem)\r\n .then(response => {\r\n response.json().then(odata => {\r\n let jsonObject = odata;\r\n resolve(new PublishedEventData(jsonObject));\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=PublishedEventData.jsx.map","export class ListNames {\r\n}\r\nListNames.APPLICATIONS = \"GrantApplications\";\r\nListNames.GRANTS = \"Grants\";\r\nListNames.PUBLISHED_GRANTS = \"Grant Publications\";\r\nListNames.GRANT_APPROVALS = \"GrantApprovals\";\r\nListNames.EVENT_REGISTRATIONS = \"Event Registrations\";\r\nListNames.EVENT_REGISTRATIONS_SUBMITTED = \"Processed Registrations\";\r\nListNames.DOCUMENT_TEMPLATES = \"Document Templates\";\r\nListNames.ADDITIONAL_QUESTIONS = \"Additional Questions\";\r\nListNames.BENEFICIARY_REQUEST = \"Beneficiary Request\";\r\nListNames.QUESTIONS_ANSWERS = \"Questions and Answers\";\r\nListNames.KEY_PRIORITIES = \"Key Priorities\";\r\n//# sourceMappingURL=ListNames.jsx.map","import { SharePointRestService, LocalStorageCache, DivisionEnum, LogMessage, LogSeverityEnum } from \"../index\";\r\nexport class User {\r\n constructor(item) {\r\n this._currentItem = item;\r\n this._id = item.Id;\r\n this._firstname = item.FirstName || \"[Unknown]\";\r\n this._lastname = item.LastName || \"[Unknown]\";\r\n this._title = item.JobTitle || \"[Unknown]\";\r\n this._emailaddress = item.EMail || item.Email || \"[Unknown]\";\r\n this._address = \"Unknown\";\r\n this._postalCode = \"Unknown\";\r\n this._city = \"Unknown\";\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get firstname() {\r\n return this._firstname;\r\n }\r\n set firstname(firstname) {\r\n this._firstname = firstname;\r\n }\r\n get lastname() {\r\n return this._lastname;\r\n }\r\n set lastname(lastname) {\r\n this._lastname = lastname;\r\n }\r\n get title() {\r\n return this._title;\r\n }\r\n set title(title) {\r\n this._title = title;\r\n }\r\n get emailaddress() {\r\n return this._emailaddress;\r\n }\r\n set emailaddress(emailaddress) {\r\n this._emailaddress = emailaddress;\r\n }\r\n get address() {\r\n return this._address;\r\n }\r\n set address(address) {\r\n this._address = address;\r\n }\r\n get postalCode() {\r\n return this._postalCode;\r\n }\r\n set postalCode(postalCode) {\r\n this._postalCode = postalCode;\r\n }\r\n get city() {\r\n return this._city;\r\n }\r\n set city(city) {\r\n this._city = city;\r\n }\r\n static isApplicant(division) {\r\n // Check for logged in user\r\n if (!_spPageContextInfo.userId) {\r\n return Promise.resolve(false);\r\n }\r\n //Important: The group name if always: ' Grant Applicants'. So for ESC, it is 'ESC Grant Applicants'\r\n let groupsToCheck = new Array();\r\n if (!division) {\r\n groupsToCheck.push(DivisionEnum[DivisionEnum.PDD] + \" Grant Applicants\");\r\n groupsToCheck.push(DivisionEnum[DivisionEnum.ESC] + \" Grant Applicants\");\r\n groupsToCheck.push(DivisionEnum[DivisionEnum.DI] + \" Grant Applicants\");\r\n }\r\n else {\r\n groupsToCheck.push(DivisionEnum[division] + \" Grant Applicants\");\r\n }\r\n return User.isMemberOfGroup(groupsToCheck);\r\n }\r\n /**\r\n * Checks if the user is a Grant Administrator for the specified division. Note that this data is cached locally for 4 hours.\r\n * @param {DivisionEnum} division The division (ESC, PDD, DI) to check the permissions for\r\n * @return {Promise} Returns 'true' is the user is a Grant Administrator for this division, false otherwise.\r\n */\r\n static isGrantAdministrator(division) {\r\n // Check for logged in user\r\n if (!_spPageContextInfo.userId) {\r\n return Promise.resolve(false);\r\n }\r\n // Set cache expiration to 4 hours\r\n let cacheExpirationDate = new Date(Date.now() + (4 * 60 * 60 * 1000));\r\n // Load cached user admin data\r\n let cacheKey = \"UserAdmin:\" + _spPageContextInfo.userId;\r\n let cachedUserAdminData = LocalStorageCache.tryGetFromCache(cacheKey, (cachedData) => {\r\n return cachedData;\r\n }, cacheExpirationDate);\r\n if (cachedUserAdminData == null) { //No cached data, initialize everything with status 'Unknown'\r\n cachedUserAdminData = {};\r\n cachedUserAdminData[DivisionEnum.DI] = \"Unknown\";\r\n cachedUserAdminData[DivisionEnum.ESC] = \"Unknown\";\r\n cachedUserAdminData[DivisionEnum.PDD] = \"Unknown\";\r\n }\r\n if (cachedUserAdminData[division] == \"Admin\") {\r\n return Promise.resolve(true); //The cache specified the user is an admin\r\n }\r\n else if (cachedUserAdminData[division] == \"NotAdmin\") {\r\n return Promise.resolve(false); //The cache specified the user is NOT an admin\r\n }\r\n else {\r\n //Important: The group name if always: ' Grant Administrators'. So for ESC, it is 'ESC Grant Administrators'\r\n let divisionalGroupName = DivisionEnum[division] + \" Grant Administrators\";\r\n //There is also an overall Admin group, called NAS Administrators. NAS Administrators all also Grant Administrators for all divisions\r\n let genericAdminGroupName = \"NAS Administrators\";\r\n //Query all groups for the current user\r\n let context = SP.ClientContext.get_current();\r\n let currentUser = context.get_web().get_currentUser();\r\n let userGroups = currentUser.get_groups();\r\n context.load(currentUser);\r\n context.load(userGroups);\r\n return new Promise((resolve, reject) => {\r\n context.executeQueryAsync((sender, args) => {\r\n //Iterate over all groups the user is a member of. If we find either the divisional grant admin group, or the NAS Administrator group\r\n let isMember = false;\r\n let groupsEnumerator = userGroups.getEnumerator();\r\n while (groupsEnumerator.moveNext()) {\r\n let group = groupsEnumerator.get_current();\r\n if (group.get_title() == divisionalGroupName || group.get_title() == genericAdminGroupName) {\r\n isMember = true;\r\n break;\r\n }\r\n }\r\n cachedUserAdminData[division] = isMember ? \"Admin\" : \"NotAdmin\";\r\n LocalStorageCache.tryStoreInCache(cacheKey, cachedUserAdminData);\r\n resolve(isMember);\r\n }, (sender, args) => {\r\n try {\r\n let groupName = DivisionEnum[division] + \" Grant Administrators\";\r\n this.isMemberOfGroup([groupName]).then(isMember => {\r\n resolve(isMember);\r\n }).catch(reason => {\r\n LogMessage.Log(\"There was an error retrieving the group membership for user: \" + _spPageContextInfo.userDisplayName, this, LogSeverityEnum.Error);\r\n reject();\r\n });\r\n }\r\n catch (e) {\r\n LogMessage.Log(\"There was an error retrieving the group membership for user: \" + _spPageContextInfo.userDisplayName, this, LogSeverityEnum.Error);\r\n reject();\r\n }\r\n });\r\n });\r\n }\r\n }\r\n static isMemberOfGroup(groupNames, querySiteInsteadOfWeb = false) {\r\n // Check for logged in user\r\n if (!_spPageContextInfo.userId) {\r\n return Promise.resolve(false);\r\n }\r\n // Set cache expiration to 5 minutes\r\n let cacheExpirationDate = new Date(Date.now() + (5 * 60 * 1000));\r\n // Load cached user group memberships\r\n let cacheKey = \"UserGroups:\" + _spPageContextInfo.userId;\r\n let cachedUserGroupsData = LocalStorageCache.tryGetFromCache(cacheKey, (cachedData) => {\r\n return cachedData;\r\n }, cacheExpirationDate);\r\n if (cachedUserGroupsData == null) {\r\n cachedUserGroupsData = {};\r\n }\r\n // Check cached user groups data\r\n let possibleMember = false;\r\n let isMember = false;\r\n for (let i = 0; i < groupNames.length; i++) {\r\n let groupName = groupNames[i];\r\n if (cachedUserGroupsData[groupName] == \"Yes\") {\r\n isMember = true;\r\n i = groupNames.length;\r\n }\r\n else if (cachedUserGroupsData[groupName] == \"No\") {\r\n //do nothing\r\n }\r\n else if (!cachedUserGroupsData[groupName]) {\r\n possibleMember = true;\r\n }\r\n else {\r\n //do nothing\r\n }\r\n }\r\n if (isMember) {\r\n return Promise.resolve(true);\r\n }\r\n else if (!possibleMember) {\r\n return Promise.resolve(false);\r\n }\r\n else {\r\n let userId = Number(_spPageContextInfo.userId);\r\n let rootUrl = querySiteInsteadOfWeb ? _spPageContextInfo.siteAbsoluteUrl : _spPageContextInfo.webAbsoluteUrl;\r\n let url = rootUrl + \"/_api/web/GetUserById(\" + userId + \")/Groups\";\r\n return new Promise((resolve, reject) => {\r\n let showError = querySiteInsteadOfWeb;\r\n SharePointRestService.fetch(url, \"GET\", undefined, undefined, showError)\r\n .then(response => {\r\n response.json().then(odata => {\r\n let numberOfGroups = odata.value.length;\r\n for (let i = 0; i < numberOfGroups; i++) {\r\n let groupName = odata.value[i].Title;\r\n cachedUserGroupsData[groupName] = \"Yes\";\r\n }\r\n let isMember = false;\r\n groupNames.forEach(groupName => {\r\n if (cachedUserGroupsData[groupName] == \"Yes\") {\r\n isMember = true;\r\n }\r\n else {\r\n cachedUserGroupsData[groupName] = \"No\";\r\n }\r\n });\r\n LocalStorageCache.tryStoreInCache(cacheKey, cachedUserGroupsData);\r\n resolve(isMember);\r\n ;\r\n });\r\n })\r\n .catch(reason => {\r\n let reasonReponse = reason;\r\n if (reasonReponse && reasonReponse.status == 403) {\r\n return this.isMemberOfGroup(groupNames, true);\r\n }\r\n else {\r\n LogMessage.Log(\"Unable to retrieve the group membership: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n }\r\n });\r\n });\r\n }\r\n // Get current user groups data\r\n /*\r\n let context: SP.ClientContext = SP.ClientContext.get_current();\r\n let currentUser: SP.User = context.get_web().get_currentUser();\r\n let userGroups: SP.GroupCollection = currentUser.get_groups();\r\n\r\n context.load(currentUser);\r\n context.load(userGroups);\r\n\r\n return new Promise((resolve, reject) => {\r\n context.executeQueryAsync(\r\n (sender: any, args: SP.ClientRequestSucceededEventArgs): void => {\r\n\r\n cachedUserGroupsData = {};\r\n let groupsEnumerator: IEnumerator = userGroups.getEnumerator();\r\n\r\n // Mark active/inactive groups for the user\r\n while (groupsEnumerator.moveNext()) {\r\n let group: SP.Group = groupsEnumerator.get_current();\r\n cachedUserGroupsData[group.get_title()] = \"Yes\";\r\n }\r\n\r\n let isMember: boolean = false;\r\n\r\n groupNames.forEach(groupName => {\r\n if (cachedUserGroupsData[groupName] == \"Yes\") {\r\n isMember = true;\r\n }\r\n else {\r\n cachedUserGroupsData[groupName] = \"No\";\r\n }\r\n });\r\n\r\n //console.log(\"New user groups:\", cachedUserGroupsData);\r\n LocalStorageCache.tryStoreInCache<{}>(cacheKey, cachedUserGroupsData);\r\n\r\n resolve(isMember);\r\n },\r\n (sender: any, args: SP.ClientRequestFailedEventArgs): void => {\r\n reject();\r\n });\r\n });\r\n }*/\r\n }\r\n /**\r\n * Retrieves the Title, FirstName, LastName, EMail, and JobTitle for a given user\r\n * @param {number} userId The SharePoint UserId (or ItemID) for the user to retrieve\r\n * @return {Promise} An User object with the Title, FirstName, LastName, EMail, and JobTitle\r\n */\r\n static getUserById(userId) {\r\n let cacheKey = \"User:\" + userId;\r\n let cachedUser = LocalStorageCache.tryGetFromCache(cacheKey, (cachedData) => { return new User(cachedData._currentItem); }, new Date(new Date(0).setHours(4)));\r\n if (cachedUser != null) {\r\n return Promise.resolve(cachedUser);\r\n }\r\n //Not query SharePoint if userId is null\r\n if (userId == null) {\r\n return Promise.resolve(null);\r\n }\r\n let url = \"\";\r\n let isFormsBasedAuthentication = _spPageContextInfo.systemUserKey.startsWith(\"i:0#.f\");\r\n if (isFormsBasedAuthentication) {\r\n url = _spPageContextInfo.siteAbsoluteUrl + \"/_api/web/SiteUserInfoList/items/getbyid(\" + userId + \")?$select=*\";\r\n }\r\n else {\r\n url = _spPageContextInfo.siteAbsoluteUrl + \"/_api/web/SiteUserInfoList/items/getbyid(\" + userId + \")?$select=Title,FirstName,LastName,EMail,JobTitle\";\r\n }\r\n //var url = _spPageContextInfo.siteAbsoluteUrl + \"/_api/web/lists/getbytitle('User%20Information%20List')/items/getbyid(\" + userId + \")?$select=Title,FirstName,LastName,EMail,JobTitle\"\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n odata.Id = userId;\r\n let user = new User(odata);\r\n LocalStorageCache.tryStoreInCache(cacheKey, user);\r\n resolve(user);\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n /**\r\n * Retrieves the Title, FirstName, LastName, EMail, and JobTitle for the current user\r\n * @return {Promise} An User object with the Title, FirstName, LastName, EMail, and JobTitle\r\n */\r\n static getCurrentUser() {\r\n if (window.UserAccount) {\r\n let user = new User({\r\n Id: _spPageContextInfo.userId,\r\n FirstName: window.UserAccount.Firstname,\r\n LastName: window.UserAccount.LastName,\r\n JobTitle: window.UserAccount.JobTitle,\r\n Email: window.UserAccount.Email\r\n });\r\n return Promise.resolve(user);\r\n }\r\n else {\r\n return User.getUserById(_spPageContextInfo.userId);\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=User.jsx.map","import { SharePointRestService, LogMessage, LogSeverityEnum } from \"../index\";\r\nexport class Attachment {\r\n constructor(filename, contents, isNew = true, url) {\r\n this._filename = filename;\r\n this._contents = contents;\r\n this._isNew = isNew;\r\n this._url = url;\r\n }\r\n get filename() {\r\n return this._filename;\r\n }\r\n set filename(filename) {\r\n this._filename = filename;\r\n }\r\n get contents() {\r\n return this._contents;\r\n }\r\n set contents(contents) {\r\n this._contents = contents;\r\n }\r\n get filesize() {\r\n let length = this._contents.byteLength;\r\n let kb = Math.round(length / 1024);\r\n let mb = +(kb / 1024).toFixed(2);\r\n if (mb > 1)\r\n return mb + \" MB\";\r\n else\r\n return kb + \" KB\";\r\n }\r\n get isNew() {\r\n return this._isNew;\r\n }\r\n get url() {\r\n return this._url;\r\n }\r\n Upload(listTitle, itemId) {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/getbytitle('\" + listTitle + \"')/items(\" + itemId + \")/AttachmentFiles/add(FileName='\" + this._filename + \"')\";\r\n let headers = { \"content-length\": this._contents.byteLength };\r\n return new Promise((resolve, reject) => {\r\n LogMessage.Log(\"Uploading attachment '\" + this._filename + \"'\", this, LogSeverityEnum.Verbose);\r\n SharePointRestService.fetchRaw(url, \"POST\", this._contents, headers)\r\n .then(response => {\r\n LogMessage.Log(\"Attachment '\" + this._filename + \"' has been uploaded\", this, LogSeverityEnum.Verbose);\r\n resolve();\r\n })\r\n .catch(reason => {\r\n if (reason.status == 400) {\r\n LogMessage.Log(\"Attachment '\" + this._filename + \"' already exists\", this, LogSeverityEnum.Verbose);\r\n this.Delete(listTitle, itemId).then(() => {\r\n SharePointRestService.fetchRaw(url, \"POST\", this._contents, headers)\r\n .then(response => {\r\n LogMessage.Log(\"Attachment '\" + this._filename + \"' has been uploaded\", this, LogSeverityEnum.Verbose);\r\n resolve();\r\n })\r\n .catch(reason => {\r\n LogMessage.Log(\"Error uploading attachment '\" + this._filename + \"':\" + reason.message, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n else {\r\n LogMessage.Log(\"Error uploading attachment '\" + this._filename + \"':\" + reason.message, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n }\r\n });\r\n });\r\n }\r\n UploadToDocumentSet(listTitle, itemId, status, comments) {\r\n // Load the document set item\r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n let list = web.get_lists().getByTitle(listTitle);\r\n let listItem = list.getItemById(itemId);\r\n var base64Content = new SP.Base64EncodedByteArray(); //base64 encoding\r\n for (let i = 0; i < this._contents.length; i++) {\r\n base64Content.append(this._contents[i]);\r\n }\r\n // Initialize the new file and save it\r\n let uniqueString = Math.random().toString(36).substring(2);\r\n let fileCreateInfo = new SP.FileCreationInformation();\r\n fileCreateInfo.set_url(uniqueString + \"_\" + this._filename);\r\n fileCreateInfo.set_content(base64Content);\r\n fileCreateInfo.set_overwrite(true);\r\n let folder = listItem.get_folder();\r\n return new Promise((resolve, reject) => {\r\n this.ensureAttachmentsFolder(folder).then(subfolder => {\r\n let newFile = subfolder.get_files().add(fileCreateInfo);\r\n clientContext.load(newFile);\r\n clientContext.executeQueryAsync((sender, args) => {\r\n this.setAttachmentFileMetadata(newFile, status, comments).then(() => {\r\n resolve(newFile);\r\n }).catch(reason => {\r\n //Error setting file metadata\r\n LogMessage.Log(\"Error setting the metadata for the commentsfile '\" + newFile.get_name() + \"'\", this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n }, (sender, args) => {\r\n //Error saving file\r\n LogMessage.Log(\"Error uploading the approval attachments '\" + this._filename + \"'\", this, LogSeverityEnum.Error);\r\n reject(args.get_errorDetails());\r\n });\r\n }).catch(reason => {\r\n //Error creating subfolder for comments\r\n LogMessage.Log(\"Error creating folder for the approval attachments '\" + this._filename + \"'\", this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n setAttachmentFileMetadata(file, status, comments) {\r\n let clientContext = SP.ClientContext.get_current();\r\n let listItem = file.get_listItemAllFields();\r\n listItem.set_item(\"Title\", this._filename);\r\n listItem.set_item(\"natoSystemfile\", true);\r\n listItem.set_item(\"natoApplicationStatus\", status);\r\n listItem.set_item(\"natoApprovalComments\", comments);\r\n listItem.update();\r\n clientContext.load(listItem);\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve();\r\n }, (sender, args) => {\r\n reject();\r\n });\r\n });\r\n }\r\n ensureAttachmentsFolder(parentFolder) {\r\n let subFolderName = \"ApprovalAttachments\";\r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n let existingSubFolder = clientContext.get_web().getFolderByServerRelativeUrl(window.docsetHomePageData.urlDocSet + \"/\" + subFolderName);\r\n clientContext.load(parentFolder);\r\n clientContext.load(existingSubFolder);\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve(existingSubFolder);\r\n }, (sender, args) => {\r\n let newSubFolder = parentFolder.get_folders().add(subFolderName);\r\n let newSubFolderItem = newSubFolder.get_listItemAllFields();\r\n newSubFolderItem.set_item(\"natoSystemfile\", true);\r\n newSubFolderItem.breakRoleInheritance(true, true);\r\n let roleAssignments = newSubFolderItem.get_roleAssignments();\r\n newSubFolderItem.update();\r\n clientContext.load(newSubFolder);\r\n clientContext.load(newSubFolderItem);\r\n clientContext.load(roleAssignments, \"Include(Member)\");\r\n clientContext.executeQueryAsync((sender, args) => {\r\n let permissionsToDelete = new Array();\r\n let permissionCount = roleAssignments.get_count();\r\n for (let i = 0; i < permissionCount; i++) {\r\n let assignment = roleAssignments.get_item(i);\r\n if (assignment.get_member().get_principalType() == SP.Utilities.PrincipalType.user) {\r\n permissionsToDelete.push(assignment);\r\n }\r\n }\r\n if (permissionsToDelete.length > 0) {\r\n while (permissionsToDelete.length > 0) {\r\n let assignment = permissionsToDelete.pop();\r\n assignment.deleteObject();\r\n }\r\n newSubFolderItem.update();\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve(newSubFolder);\r\n }, (sender, args) => {\r\n reject(args.get_errorDetails());\r\n });\r\n }\r\n else {\r\n resolve(newSubFolder);\r\n }\r\n }, (sender, args) => {\r\n reject(args.get_errorDetails());\r\n });\r\n });\r\n });\r\n }\r\n Delete(listTitle, itemId) {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/getFileByServerRelativeUrl('\" + _spPageContextInfo.webServerRelativeUrl + \"/Lists/\" + listTitle + \"/Attachments/\" + itemId + \"/\" + this._filename + \"')\";\r\n return new Promise((resolve, reject) => {\r\n LogMessage.Log(\"Deleting attachment '\" + this._filename + \"'\", this, LogSeverityEnum.Verbose);\r\n SharePointRestService.fetchRaw(url, \"DELETE\")\r\n .then(response => {\r\n LogMessage.Log(\"Attachment '\" + this._filename + \"' has been deleted\", this, LogSeverityEnum.Verbose);\r\n resolve();\r\n })\r\n .catch(reason => {\r\n LogMessage.Log(\"Error deleting attachment'\" + this._filename + \"':\" + reason.message, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=Attachment.jsx.map","export class LogMessage {\r\n constructor(message, component, severity) {\r\n this._message = message;\r\n this._component = component;\r\n this._severity = severity;\r\n this._timestamp = new Date(Date.now());\r\n }\r\n get message() {\r\n return this._message;\r\n }\r\n get component() {\r\n return this._component;\r\n }\r\n get severity() {\r\n return this._severity;\r\n }\r\n get timestamp() {\r\n return this._timestamp;\r\n }\r\n /**\r\n * Static method for dispatching a global onLog event.\r\n * @param {string} message The message (text) you want the user to see\r\n * @param {any} caller The object that class this function, normally 'this'\r\n * @param {LogSeverityEnum} severity The severity of the log entry\r\n */\r\n static Log(message, caller, severity) {\r\n ExecuteOrDelayUntilScriptLoaded(() => {\r\n var logEvent = new CustomEvent(\"onLog\", {\r\n detail: {\r\n LogMessage: new LogMessage(message, caller.constructor.name, severity)\r\n }\r\n });\r\n window.dispatchEvent(logEvent);\r\n }, \"ErrorMessageComponent.tsx\");\r\n }\r\n}\r\n//# sourceMappingURL=LogMessage.jsx.map","export var LogSeverityEnum;\r\n(function (LogSeverityEnum) {\r\n LogSeverityEnum[LogSeverityEnum[\"Verbose\"] = 0] = \"Verbose\";\r\n LogSeverityEnum[LogSeverityEnum[\"Info\"] = 1] = \"Info\";\r\n LogSeverityEnum[LogSeverityEnum[\"High\"] = 2] = \"High\";\r\n LogSeverityEnum[LogSeverityEnum[\"Error\"] = 3] = \"Error\";\r\n})(LogSeverityEnum || (LogSeverityEnum = {}));\r\n//# sourceMappingURL=LogSeverityEnum.jsx.map","import { PublishableGrant, ApprovalEnum, GrantStatus, ListNames, SharePointRestService, SPUtil, SPPreSaveAction } from \"../index\";\r\nimport { WorkflowManager } from './WorkflowManager';\r\nexport class Proposal extends PublishableGrant {\r\n constructor(item) {\r\n super(item);\r\n if (item.natoHeadOfSectionApproval == null || item.natoHeadOfSectionApproval == \"\") {\r\n this._headOfSectionApproval = ApprovalEnum.Pending;\r\n }\r\n else {\r\n let statusAsText = item.natoHeadOfSectionApproval.split(\";#\")[1];\r\n if (statusAsText == ApprovalEnum[ApprovalEnum.Approved])\r\n this._headOfSectionApproval = ApprovalEnum.Approved;\r\n else\r\n this._headOfSectionApproval = ApprovalEnum.Pending;\r\n }\r\n if (item.natoPlanningOfficerApproval == null || item.natoPlanningOfficerApproval == \"\") {\r\n this._planningOfficerApproval = ApprovalEnum.Pending;\r\n }\r\n else {\r\n let statusAsText = item.natoPlanningOfficerApproval.split(\";#\")[1];\r\n if (statusAsText == ApprovalEnum[ApprovalEnum.Approved])\r\n this._planningOfficerApproval = ApprovalEnum.Approved;\r\n else\r\n this._planningOfficerApproval = ApprovalEnum.Pending;\r\n }\r\n if (item.natoTargetAudience && item.natoTargetAudience.length > 0) {\r\n this._targetAudience = item.natoTargetAudience.map(entity => {\r\n return entity.Key;\r\n });\r\n }\r\n else {\r\n this._targetAudience = Array();\r\n }\r\n SPPreSaveAction.getInstance().registerPreSaveAction(() => {\r\n return new Promise((resolve, reject) => {\r\n let queryStringParam = SPUtil.parseQuerystring(location.search);\r\n let itemId = Number(queryStringParam[\"ID\"]);\r\n if (!isNaN(itemId)) {\r\n let currentStatus = this._currentItem.natoGrantStatus;\r\n let newStatus = this.status;\r\n if (currentStatus != newStatus) {\r\n let wf = new WorkflowManager();\r\n wf.StartWorklow(\"Grants\", this._id, \"ProposalNotification\", { \"Type\": \"ApprovedRejected\", \"Comments\": newStatus }, true).then(() => {\r\n resolve();\r\n });\r\n }\r\n else {\r\n //Item status did not change. Resolve this promise\r\n resolve();\r\n }\r\n }\r\n else {\r\n //Item does not have an ID yet, so this is a new item. Resolve this promise\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n get headOfSectionApproval() {\r\n return this._headOfSectionApproval;\r\n }\r\n set headOfSectionApproval(headOfSectionApproval) {\r\n this._headOfSectionApproval = headOfSectionApproval;\r\n }\r\n get planningOfficerApproval() {\r\n return this._planningOfficerApproval;\r\n }\r\n set planningOfficerApproval(planningOfficerApproval) {\r\n this._planningOfficerApproval = planningOfficerApproval;\r\n }\r\n get targetAudience() {\r\n return this._targetAudience;\r\n }\r\n get status() {\r\n if (this._headOfSectionApproval == ApprovalEnum.Pending)\r\n return GrantStatus.WAITING_FOR_HEAD_OF_SECTION;\r\n if (this._headOfSectionApproval == ApprovalEnum.Rejected)\r\n return GrantStatus.REJECTED_BY_HEAD_OF_SECTION;\r\n if (this._headOfSectionApproval == ApprovalEnum.Approved) {\r\n if (this._planningOfficerApproval == ApprovalEnum.Pending)\r\n return GrantStatus.WAITING_FOR_PLANNING_OFFICER;\r\n if (this._planningOfficerApproval == ApprovalEnum.Rejected)\r\n return GrantStatus.REJECTED_BY_PLANNING_OFFICER;\r\n if (this._planningOfficerApproval == ApprovalEnum.Approved) {\r\n if (!this.isPublished)\r\n return GrantStatus.WAITING_FOR_PUBLICATION_AFTER_APPROVAL;\r\n if (this.isPublished)\r\n return GrantStatus.PUBLISHED;\r\n }\r\n }\r\n }\r\n /*\r\n public static getAssignedHeadOfSection(grantCode: string): Promise<{}> {\r\n\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANTS + \"')/items(\" + grantId + \")?$select=Title,natoDescription,natoGrantStatus,natoDivision\";\r\n\r\n }*/\r\n static currentUserCanCreateNewProposal() {\r\n if (document.getElementById(\"O365_MainLink_SignIn\") != null)\r\n return Promise.resolve(false);\r\n let folderPath = _spPageContextInfo.webServerRelativeUrl + \"/Lists/\" + ListNames.GRANTS + \"/Proposals\";\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/getFolderByServerRelativeUrl('\" + folderPath + \"')/?$expand=ListItemAllFields/EffectiveBasePermissions\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n let manageListsPerms = new SP.BasePermissions();\r\n manageListsPerms.initPropertiesFromJson(odata.ListItemAllFields.EffectiveBasePermissions);\r\n let currentUserCanEditListItems = manageListsPerms.has(SP.PermissionKind.addListItems);\r\n resolve(currentUserCanEditListItems);\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n static renderNewProposalLink(elm) {\r\n //Disable this for now...\r\n return;\r\n /*\r\n Proposal.currentUserCanCreateNewProposal().then((userHasPermission) => {\r\n if (userHasPermission) {\r\n\r\n let link: HTMLAnchorElement = document.createElement('A') as HTMLAnchorElement;\r\n let rootfolder: string = encodeURIComponent(_spPageContextInfo.webServerRelativeUrl + \"/Lists/\" + ListNames.GRANTS + \"/Proposals\")\r\n link.href = _spPageContextInfo.webAbsoluteUrl + \"/Lists/\" + ListNames.GRANTS + \"/NewForm.aspx?RootFolder=\" + rootfolder;\r\n link.innerText = \"Create new proposal\"\r\n elm.appendChild(link);\r\n }\r\n });*/\r\n }\r\n}\r\n//# sourceMappingURL=Proposal.jsx.map","import { PublishableGrant, GrantStatus, ListNames, SharePointRestService } from \"../index\";\r\nexport class SpecialCall extends PublishableGrant {\r\n constructor(item) {\r\n super(item);\r\n }\r\n get status() {\r\n if (!this.isPublished)\r\n return GrantStatus.WAITING_FOR_PUBLICATION;\r\n if (this.isPublished)\r\n return GrantStatus.PUBLISHED;\r\n }\r\n static currentUserCanCreateNewSpecialCall() {\r\n if (document.getElementById(\"O365_MainLink_SignIn\") != null)\r\n return Promise.resolve(false);\r\n let folderPath = _spPageContextInfo.webServerRelativeUrl + \"/Lists/\" + ListNames.GRANTS + \"/Special%20calls\";\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/getFolderByServerRelativeUrl('\" + folderPath + \"')/?$expand=ListItemAllFields/EffectiveBasePermissions\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n let manageListsPerms = new SP.BasePermissions();\r\n manageListsPerms.initPropertiesFromJson(odata.ListItemAllFields.EffectiveBasePermissions);\r\n let currentUserCanEditListItems = manageListsPerms.has(SP.PermissionKind.addListItems);\r\n resolve(currentUserCanEditListItems);\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n static renderNewSpecialCallLink(elm) {\r\n SpecialCall.currentUserCanCreateNewSpecialCall().then((userHasPermission) => {\r\n if (userHasPermission) {\r\n let link = document.createElement('A');\r\n let rootfolder = encodeURIComponent(_spPageContextInfo.webServerRelativeUrl + \"/Lists/\" + ListNames.GRANTS + \"/Special%20calls\");\r\n link.href = _spPageContextInfo.webAbsoluteUrl + \"/Lists/\" + ListNames.GRANTS + \"/NewForm.aspx?RootFolder=\" + rootfolder;\r\n link.innerText = \"Create new special call\";\r\n elm.appendChild(link);\r\n }\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=SpecialCall.jsx.map","import { PublishableGrant, ListNames, SharePointRestService, AdditionalQuestions } from \"../index\";\r\nexport class PotentialStudy extends PublishableGrant {\r\n constructor(item) {\r\n super(item);\r\n this.parseFields(item);\r\n }\r\n parseFields(item) {\r\n this._description = item.natoDescription;\r\n this._eventType = item.natoNIAGEventType;\r\n this._niagEvents = item.natoNIAGEvents ? item.natoNIAGEvents.split(\"\\n\") : new Array();\r\n this._niagSocialEvents = item.natoNIAGSocialEvents ? item.natoNIAGSocialEvents.split(\"\\n\") : new Array();\r\n if (item.natoAdditionalQuestions && item.natoAdditionalQuestions != \"\") {\r\n this._additionalQuestions = null;\r\n AdditionalQuestions.fromFieldValue(item.natoAdditionalQuestions).then(questionsObject => {\r\n this._additionalQuestions = questionsObject;\r\n });\r\n }\r\n else if (item.natoAdditionalQuestionsId && item.natoAdditionalQuestionsId != \"\") {\r\n this._additionalQuestions = null;\r\n AdditionalQuestions.fromIds(item.natoAdditionalQuestionsId).then(questionsObject => {\r\n this._additionalQuestions = questionsObject;\r\n });\r\n }\r\n else {\r\n this._additionalQuestions = new AdditionalQuestions(new Array());\r\n }\r\n }\r\n get eventType() {\r\n return this._eventType;\r\n }\r\n set eventType(eventType) {\r\n this._eventType = eventType;\r\n }\r\n get description() {\r\n return this._description;\r\n }\r\n set description(description) {\r\n this._description = description;\r\n }\r\n get niagEvents() {\r\n return this._niagEvents;\r\n }\r\n set niagEvents(niagEvents) {\r\n this._niagEvents = niagEvents;\r\n }\r\n get niagSocialEvents() {\r\n return this._niagSocialEvents;\r\n }\r\n set niagSocialEvents(niagSocialEvents) {\r\n this._niagSocialEvents = niagSocialEvents;\r\n }\r\n get additionalQuestions() {\r\n if (this._additionalQuestions) {\r\n return Promise.resolve(this._additionalQuestions);\r\n }\r\n else {\r\n if (super.spItem.natoAdditionalQuestions)\r\n return AdditionalQuestions.fromFieldValue(super.spItem.natoAdditionalQuestions);\r\n else if (super.spItem.natoAdditionalQuestionsId)\r\n return AdditionalQuestions.fromIds(super.spItem.natoAdditionalQuestionsId);\r\n else\r\n Promise.resolve(this._additionalQuestions);\r\n }\r\n }\r\n static currentUserCanCreateNewPotentialStudy() {\r\n if (document.getElementById(\"O365_MainLink_SignIn\") != null)\r\n return Promise.resolve(false);\r\n let folderPath = _spPageContextInfo.webServerRelativeUrl + \"/Lists/\" + ListNames.GRANTS + \"/Potential%20studies\";\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/getFolderByServerRelativeUrl('\" + folderPath + \"')/?$expand=ListItemAllFields/EffectiveBasePermissions\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n let manageListsPerms = new SP.BasePermissions();\r\n manageListsPerms.initPropertiesFromJson(odata.ListItemAllFields.EffectiveBasePermissions);\r\n let currentUserCanEditListItems = manageListsPerms.has(SP.PermissionKind.addListItems);\r\n resolve(currentUserCanEditListItems);\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n static fromPublishableGrant(grant) {\r\n let study = grant; //This seems weird, but a direct cast is not accepted by TypeScript...\r\n study.parseFields(study.spItem);\r\n return study;\r\n }\r\n static renderNewPotentialStudyLink(elm) {\r\n PotentialStudy.currentUserCanCreateNewPotentialStudy().then((userHasPermission) => {\r\n if (userHasPermission) {\r\n let link = document.createElement('A');\r\n let rootfolder = encodeURIComponent(_spPageContextInfo.webServerRelativeUrl + \"/Lists/\" + ListNames.GRANTS + \"/Potential%20studies\");\r\n link.href = _spPageContextInfo.webAbsoluteUrl + \"/Lists/\" + ListNames.GRANTS + \"/NewForm.aspx?RootFolder=\" + rootfolder;\r\n link.innerText = \"Create new Potential Study\";\r\n elm.appendChild(link);\r\n }\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=PotentialStudy.jsx.map","import { SharePointRestService, ListNames } from \"../index\";\r\nexport class ExploratoryGroupRegistration {\r\n constructor(item) {\r\n this._currentItem = item;\r\n if (this._currentItem != null) {\r\n this._id = item.Id;\r\n this._itemTitle = item.Title;\r\n this._code = item.natoCode;\r\n this._editor = (item.Editor != null) ? item.Editor.Title : null;\r\n this._modifiedOn = new Date(Date.parse(item.Modified));\r\n this._registrationDate = new Date(Date.parse(item.Created));\r\n this._country = item.natoCountry;\r\n this._firstname = item.natoFirstname;\r\n this._lastname = item.natoLastname;\r\n this._title = item.natoTitle;\r\n this._eMailAddress = item.natoEMailAddress;\r\n this._company = item.natoCompany;\r\n //this._attendance = item.natoAttendance;\r\n //this._representation = item.natoRepresentation\r\n //this._role = item.natoRole;\r\n try {\r\n this._additionalQuestionAnswers = JSON.parse(item.natoAdditionalQuestionAnswers);\r\n }\r\n catch (e) {\r\n this._additionalQuestionAnswers = {};\r\n (\"\" + item.natoAdditionalQuestionAnswers).split(\"\\n\").forEach((answer) => {\r\n let key = answer.split(\":\", 2)[0];\r\n let value = answer.split(\":\", 2)[1];\r\n this._additionalQuestionAnswers[key] = value;\r\n });\r\n }\r\n }\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get itemTitle() {\r\n return this._itemTitle;\r\n }\r\n set itemTitle(itemTitle) {\r\n this._itemTitle = itemTitle;\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n set code(code) {\r\n this._code = code;\r\n }\r\n get editor() {\r\n return this._editor;\r\n }\r\n set editor(editor) {\r\n this._editor = editor;\r\n }\r\n get modifiedOn() {\r\n return this._modifiedOn;\r\n }\r\n set modifiedOn(modifiedOn) {\r\n this._modifiedOn = modifiedOn;\r\n }\r\n get registrationDate() {\r\n return this._registrationDate;\r\n }\r\n set registrationDate(registrationDate) {\r\n this._registrationDate = registrationDate;\r\n }\r\n get country() {\r\n return this._country;\r\n }\r\n set country(country) {\r\n this._country = country;\r\n }\r\n get firstname() {\r\n return this._firstname;\r\n }\r\n set firstname(firstname) {\r\n this._firstname = firstname;\r\n }\r\n get lastname() {\r\n return this._lastname;\r\n }\r\n set lastname(lastname) {\r\n this._lastname = lastname;\r\n }\r\n get title() {\r\n return this._title;\r\n }\r\n set title(title) {\r\n this._title = title;\r\n }\r\n get eMailAddress() {\r\n return this._eMailAddress;\r\n }\r\n set eMailAddress(eMailAddress) {\r\n this._eMailAddress = eMailAddress;\r\n }\r\n get company() {\r\n return this._company;\r\n }\r\n set company(company) {\r\n this._company = company;\r\n }\r\n /*get attendance(): string {\r\n return this._attendance;\r\n }\r\n\r\n set attendance(attendance: string) {\r\n this._attendance = attendance;\r\n }\r\n\r\n get representation(): string {\r\n return this._representation;\r\n }\r\n\r\n set representation(representation: string) {\r\n this._representation = representation;\r\n }\r\n\r\n get role(): string {\r\n return this._role;\r\n }\r\n\r\n set role(role: string) {\r\n this._role = role;\r\n }*/\r\n get additionalQuestionAnswers() {\r\n return this._additionalQuestionAnswers;\r\n }\r\n set additionalQuestionAnswers(additionalQuestionAnswers) {\r\n this._additionalQuestionAnswers = additionalQuestionAnswers;\r\n }\r\n get spItem() {\r\n return this._currentItem;\r\n }\r\n get fields() {\r\n let objectFields = [\"Lastname\", \"Firstname\", \"Title\", \"Company\", \"Email\", \"Country\", \"Registration Date\" /*,\"Attendence\", \"Representation\", \"Role\"*/];\r\n let additionalQuestionFields = this.additionalQuestionAnswers != null ? Object.keys(this.additionalQuestionAnswers) : [];\r\n let allFields = objectFields.concat(additionalQuestionFields);\r\n return allFields;\r\n }\r\n get fieldValues() {\r\n let objectValues = [this.lastname, this.firstname, this.title, this.company, this.eMailAddress, this.country, this.registrationDate /*, this.attendance, this.representation, this.role*/];\r\n let additionalQuestionValues = this.additionalQuestionAnswers != null ? Object.keys(this.additionalQuestionAnswers).map(key => this.additionalQuestionAnswers[key]) : [];\r\n let allValues = objectValues.concat(additionalQuestionValues);\r\n let numberOfColumns = this.fields.length;\r\n while (allValues.length < numberOfColumns) {\r\n allValues = allValues.concat([\"\"]);\r\n }\r\n return allValues;\r\n }\r\n Update() {\r\n if (this._currentItem != null) {\r\n this._currentItem.Title = this._itemTitle;\r\n this._currentItem.natoCode = this._code;\r\n this._currentItem.natoCountry = this._country;\r\n this._currentItem.natoFirstname = this._firstname;\r\n this._currentItem.natoLastname = this._lastname;\r\n this._currentItem.natoTitle = this._title;\r\n this._currentItem.natoEMailAddress = this._eMailAddress;\r\n this._currentItem.natoCompany = this._company;\r\n //this._currentItem.natoAttendance = this._attendance;\r\n //this._currentItem.natoRepresentation = this._representation;\r\n //this._currentItem.natoRole = this._role;\r\n this._currentItem.natoAdditionalQuestionAnswers = JSON.stringify(this._additionalQuestionAnswers);\r\n }\r\n let additionalQuestionAnswerString = Object.keys(this._additionalQuestionAnswers).map(key => {\r\n return String.format(\"{0}: {1}\", key, this._additionalQuestionAnswers[key]);\r\n }).join(\"\\n\");\r\n let item = {\r\n \"Title\": this._itemTitle,\r\n \"ContentTypeId\": \"0x0100726FF052898002408F696B215FADF03C\",\r\n \"natoCode\": this._code,\r\n \"natoCountry\": this._country,\r\n \"natoFirstname\": this._firstname,\r\n \"natoLastname\": this._lastname,\r\n \"natoTitle\": this._title,\r\n \"natoEMailAddress\": this._eMailAddress,\r\n \"natoCompany\": this._company,\r\n //\"natoAttendance\": this._attendance,\r\n //\"natoRepresentation\": this._representation,\r\n //\"natoRole\": this._role,\r\n \"natoAdditionalQuestionAnswers\": additionalQuestionAnswerString,\r\n \"__metadata\": { \"type\": \"SP.Data.EventRegistrationsListItem\" }\r\n };\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.EVENT_REGISTRATIONS + \"')/items\";\r\n let headers = {};\r\n if (this._currentItem != null) {\r\n url = url + \"(\" + this._id + \")\";\r\n headers = { \"X-HTTP-Method\": \"MERGE\", \"If-Match\": \"*\" };\r\n }\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", item, headers, false)\r\n .then(response => {\r\n resolve();\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=ExploratoryGroupRegistration.jsx.map","import { SharePointRestService, ListNames } from \"../index\";\r\nexport class PlenaryMeetingRegistration {\r\n constructor(item) {\r\n this._currentItem = item;\r\n if (this._currentItem != null) {\r\n this._id = item.Id;\r\n this._itemTitle = item.Title;\r\n this._code = item.natoCode;\r\n this._editor = (item.Editor != null) ? item.Editor.Title : null;\r\n this._modifiedOn = new Date(Date.parse(item.Modified));\r\n this._registrationDate = new Date(Date.parse(item.Created));\r\n this._country = item.natoCountry;\r\n this._firstname = item.natoFirstname;\r\n this._lastname = item.natoLastname;\r\n this._title = item.natoTitle;\r\n this._eMailAddress = item.natoEMailAddress;\r\n this._company = item.natoCompany;\r\n //this._passportNumber = item.natoPassportNumber;\r\n //this._passportExpiration = item.natoPassportExpirationDate ? new Date(Date.parse(item.natoPassportExpirationDate)) : new Date(0);\r\n //this._birthDate = item.natoBirthDate ? new Date(Date.parse(item.natoBirthDate)) : new Date(0);\r\n //this._firstOrLastMeeting = item.natoFirstLastMeeting;\r\n //this._niagEvents = item.natoNIAGEvents;\r\n //this._niagSocialEvents = item.natoNIAGSocialEvents;\r\n //this._dietaryRestrictions = item.natoDietaryRestrictions;\r\n //this._spouseWillJoin = item.natoSpouseWillJoin;\r\n try {\r\n this._additionalQuestionAnswers = JSON.parse(item.natoAdditionalQuestionAnswers);\r\n }\r\n catch (e) {\r\n this._additionalQuestionAnswers = {};\r\n (\"\" + item.natoAdditionalQuestionAnswers).split(\"\\n\").forEach((answer) => {\r\n let key = answer.slice(0, answer.indexOf(':'));\r\n let value = answer.slice(answer.indexOf(':') + 1).replace(/^\\s+/g, '');\r\n this._additionalQuestionAnswers[key] = value;\r\n });\r\n }\r\n }\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get itemTitle() {\r\n return this._itemTitle;\r\n }\r\n set itemTitle(itemTitle) {\r\n this._itemTitle = itemTitle;\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n set code(code) {\r\n this._code = code;\r\n }\r\n get editor() {\r\n return this._editor;\r\n }\r\n set editor(editor) {\r\n this._editor = editor;\r\n }\r\n get modifiedOn() {\r\n return this._modifiedOn;\r\n }\r\n set modifiedOn(modifiedOn) {\r\n this._modifiedOn = modifiedOn;\r\n }\r\n get registrationDate() {\r\n return this._registrationDate;\r\n }\r\n set registrationDate(registrationDate) {\r\n this._registrationDate = registrationDate;\r\n }\r\n get country() {\r\n return this._country;\r\n }\r\n set country(country) {\r\n this._country = country;\r\n }\r\n get firstname() {\r\n return this._firstname;\r\n }\r\n set firstname(firstname) {\r\n this._firstname = firstname;\r\n }\r\n get lastname() {\r\n return this._lastname;\r\n }\r\n set lastname(lastname) {\r\n this._lastname = lastname;\r\n }\r\n get title() {\r\n return this._title;\r\n }\r\n set title(title) {\r\n this._title = title;\r\n }\r\n get eMailAddress() {\r\n return this._eMailAddress;\r\n }\r\n set eMailAddress(eMailAddress) {\r\n this._eMailAddress = eMailAddress;\r\n }\r\n get company() {\r\n return this._company;\r\n }\r\n set company(company) {\r\n this._company = company;\r\n }\r\n /*get passportNumber(): string {\r\n return this._passportNumber;\r\n }\r\n\r\n set passportNumber(passportNumber: string) {\r\n this._passportNumber = passportNumber;\r\n }\r\n\r\n get passportExpiration(): Date {\r\n return this._passportExpiration;\r\n }\r\n\r\n set passportExpiration(passportExpiration: Date) {\r\n this._passportExpiration = passportExpiration;\r\n }\r\n\r\n get birthDate(): Date {\r\n return this._birthDate;\r\n }\r\n\r\n set birthDate(birthDate: Date) {\r\n this._birthDate = birthDate;\r\n }\r\n\r\n get firstOrLastMeeting(): \"\" | \"Yes\" | \"No\" | \"Not applicable\" {\r\n return this._firstOrLastMeeting;\r\n }\r\n\r\n set firstOrLastMeeting(firstOrLastMeeting: \"\" | \"Yes\" | \"No\" | \"Not applicable\") {\r\n this._firstOrLastMeeting = firstOrLastMeeting;\r\n }\r\n\r\n get niagEvents(): string {\r\n return this._niagEvents;\r\n }\r\n\r\n set niagEvents(niagEvents: string) {\r\n this._niagEvents = niagEvents;\r\n }\r\n\r\n get niagSocialEvents(): string {\r\n return this._niagSocialEvents;\r\n }\r\n\r\n set niagSocialEvents(niagSocialEvents: string) {\r\n this._niagSocialEvents = niagSocialEvents;\r\n }\r\n\r\n get dietaryRestrictions(): string {\r\n return this._dietaryRestrictions;\r\n }\r\n\r\n set dietaryRestrictions(dietaryRestrictions: string) {\r\n this._dietaryRestrictions = dietaryRestrictions;\r\n }\r\n\r\n get spouseWillJoin(): boolean {\r\n return this._spouseWillJoin;\r\n }\r\n\r\n set spouseWillJoin(spouseWillJoin: boolean) {\r\n this._spouseWillJoin = spouseWillJoin;\r\n }*/\r\n get additionalQuestionAnswers() {\r\n return this._additionalQuestionAnswers;\r\n }\r\n set additionalQuestionAnswers(additionalQuestionAnswers) {\r\n this._additionalQuestionAnswers = additionalQuestionAnswers;\r\n }\r\n get spItem() {\r\n return this._currentItem;\r\n }\r\n get fields() {\r\n let objectFields = [\"Lastname\", \"Firstname\", \"Title\", \"Company\", \"Email\", \"Country\", \"Registration Date\" /*, \"Passport number\", \"Passport Expiration\", \"Birthdate\", \"First or last meeting\", \"NIAG Events\", \"NIAG Social Events\", \"Dietary restrictions\", \"Spouse will join\" */];\r\n let additionalQuestionFields = this.additionalQuestionAnswers != null ? Object.keys(this.additionalQuestionAnswers) : [];\r\n let allFields = objectFields.concat(additionalQuestionFields);\r\n return allFields;\r\n }\r\n get fieldValues() {\r\n let objectValues = [this.lastname, this.firstname, this.title, this.company, this.eMailAddress, this.country, this.registrationDate /*, this.passportNumber, this.passportExpiration, this.birthDate, this.firstOrLastMeeting, this.niagEvents, this.niagSocialEvents, this.dietaryRestrictions, this.spouseWillJoin*/];\r\n let additionalQuestionValues = this.additionalQuestionAnswers != null ? Object.keys(this.additionalQuestionAnswers).map(key => this.additionalQuestionAnswers[key]) : [];\r\n let allValues = objectValues.concat(additionalQuestionValues);\r\n let numberOfColumns = this.fields.length;\r\n while (allValues.length < numberOfColumns) {\r\n allValues = allValues.concat([\"\"]);\r\n }\r\n return allValues;\r\n }\r\n Update() {\r\n if (this._currentItem != null) {\r\n this._currentItem.Title = this._itemTitle;\r\n this._currentItem.natoCode = this._code;\r\n this._currentItem.natoCountry = this._country;\r\n this._currentItem.natoFirstname = this._firstname;\r\n this._currentItem.natoLastname = this._lastname;\r\n this._currentItem.natoTitle = this._title;\r\n this._currentItem.natoEMailAddress = this._eMailAddress;\r\n this._currentItem.natoCompany = this._company;\r\n //this._currentItem.natoPassportNumber = this._passportNumber;\r\n //this._currentItem.natoPassportExpirationDate = this._passportExpiration;\r\n //this._currentItem.natoBirthDate = this._birthDate;\r\n //this._currentItem.natoFirstLastMeeting = this._firstOrLastMeeting;\r\n //this._currentItem.natoNIAGEvents = this._niagEvents;\r\n //this._currentItem.natoNIAGSocialEvents = this._niagSocialEvents;\r\n //this._currentItem.natoDietaryRestrictions = this._dietaryRestrictions;\r\n //this._currentItem.natoSpouseWillJoin = this._spouseWillJoin;\r\n }\r\n let additionalQuestionAnswerString = Object.keys(this._additionalQuestionAnswers).map(key => {\r\n return String.format(\"{0}: {1}\", key, this._additionalQuestionAnswers[key]);\r\n }).join(\"\\n\");\r\n let item = {\r\n \"Title\": this._itemTitle,\r\n \"ContentTypeId\": \"0x0100FD5571D868C6B840B415A4E771F1A353\",\r\n \"natoCode\": this._code,\r\n \"natoCountry\": this._country,\r\n \"natoFirstname\": this._firstname,\r\n \"natoLastname\": this._lastname,\r\n \"natoTitle\": this._title,\r\n \"natoEMailAddress\": this._eMailAddress,\r\n \"natoCompany\": this._company,\r\n //\"natoPassportNumber\": this._passportNumber,\r\n //\"natoPassportExpirationDate\": this._passportExpiration,\r\n //\"natoBirthDate\": this._birthDate,\r\n //\"natoFirstLastMeeting\": this._firstOrLastMeeting,\r\n //\"natoNIAGEvents\": this._niagEvents,\r\n //\"natoNIAGSocialEvents\": this._niagSocialEvents,\r\n //\"natoDietaryRestrictions\": this._dietaryRestrictions,\r\n //\"natoSpouseWillJoin\": this._spouseWillJoin,\r\n \"natoAdditionalQuestionAnswers\": additionalQuestionAnswerString,\r\n \"__metadata\": { \"type\": \"SP.Data.EventRegistrationsListItem\" }\r\n };\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.EVENT_REGISTRATIONS + \"')/items\";\r\n let headers = {};\r\n if (this._currentItem != null) {\r\n url = url + \"(\" + this._id + \")\";\r\n headers = { \"X-HTTP-Method\": \"MERGE\", \"If-Match\": \"*\" };\r\n }\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", item, headers, false)\r\n .then(response => {\r\n resolve();\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=PlenaryMeetingRegistration.jsx.map","import { SharePointRestService, ListNames } from \"../index\";\r\nexport class SeminarRegistration {\r\n constructor(item) {\r\n this._currentItem = item;\r\n if (this._currentItem != null) {\r\n this._id = item.Id;\r\n this._itemTitle = item.Title;\r\n this._code = item.natoCode;\r\n this._editor = (item.Editor != null) ? item.Editor.Title : null;\r\n this._modifiedOn = new Date(Date.parse(item.Modified));\r\n this._registrationDate = new Date(Date.parse(item.Created));\r\n this._country = item.natoCountry;\r\n this._firstname = item.natoFirstname;\r\n this._lastname = item.natoLastname;\r\n this._title = item.natoTitle;\r\n this._eMailAddress = item.natoEMailAddress;\r\n this._company = item.natoCompany;\r\n try {\r\n this._additionalQuestionAnswers = JSON.parse(item.natoAdditionalQuestionAnswers);\r\n }\r\n catch (e) {\r\n this._additionalQuestionAnswers = {};\r\n (\"\" + item.natoAdditionalQuestionAnswers).split(\"\\n\").forEach((answer) => {\r\n let key = answer.split(\":\", 2)[0];\r\n let value = answer.split(\":\", 2)[1];\r\n this._additionalQuestionAnswers[key] = value;\r\n });\r\n }\r\n }\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get itemTitle() {\r\n return this._itemTitle;\r\n }\r\n set itemTitle(itemTitle) {\r\n this._itemTitle = itemTitle;\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n set code(code) {\r\n this._code = code;\r\n }\r\n get editor() {\r\n return this._editor;\r\n }\r\n set editor(editor) {\r\n this._editor = editor;\r\n }\r\n get modifiedOn() {\r\n return this._modifiedOn;\r\n }\r\n set modifiedOn(modifiedOn) {\r\n this._modifiedOn = modifiedOn;\r\n }\r\n get registrationDate() {\r\n return this._registrationDate;\r\n }\r\n set registrationDate(registrationDate) {\r\n this._registrationDate = registrationDate;\r\n }\r\n get country() {\r\n return this._country;\r\n }\r\n set country(country) {\r\n this._country = country;\r\n }\r\n get firstname() {\r\n return this._firstname;\r\n }\r\n set firstname(firstname) {\r\n this._firstname = firstname;\r\n }\r\n get lastname() {\r\n return this._lastname;\r\n }\r\n set lastname(lastname) {\r\n this._lastname = lastname;\r\n }\r\n get title() {\r\n return this._title;\r\n }\r\n set title(title) {\r\n this._title = title;\r\n }\r\n get eMailAddress() {\r\n return this._eMailAddress;\r\n }\r\n set eMailAddress(eMailAddress) {\r\n this._eMailAddress = eMailAddress;\r\n }\r\n get company() {\r\n return this._company;\r\n }\r\n set company(company) {\r\n this._company = company;\r\n }\r\n get additionalQuestionAnswers() {\r\n return this._additionalQuestionAnswers;\r\n }\r\n set additionalQuestionAnswers(additionalQuestionAnswers) {\r\n this._additionalQuestionAnswers = additionalQuestionAnswers;\r\n }\r\n get spItem() {\r\n return this._currentItem;\r\n }\r\n get fields() {\r\n let objectFields = [\"Lastname\", \"Firstname\", \"Title\", \"Company\", \"Email\", \"Country\", \"Registration Date\"];\r\n let additionalQuestionFields = this.additionalQuestionAnswers != null ? Object.keys(this.additionalQuestionAnswers) : [];\r\n let allFields = objectFields.concat(additionalQuestionFields);\r\n return allFields;\r\n }\r\n get fieldValues() {\r\n let objectValues = [this.lastname, this.firstname, this.title, this.company, this.eMailAddress, this.country, this.registrationDate];\r\n let additionalQuestionValues = this.additionalQuestionAnswers != null ? Object.keys(this.additionalQuestionAnswers).map(key => this.additionalQuestionAnswers[key]) : [];\r\n let allValues = objectValues.concat(additionalQuestionValues);\r\n let numberOfColumns = this.fields.length;\r\n while (allValues.length < numberOfColumns) {\r\n allValues = allValues.concat([\"\"]);\r\n }\r\n return allValues;\r\n }\r\n Update() {\r\n if (this._currentItem != null) {\r\n this._currentItem.Title = this._itemTitle;\r\n this._currentItem.natoCode = this._code;\r\n this._currentItem.natoCountry = this._country;\r\n this._currentItem.natoFirstname = this._firstname;\r\n this._currentItem.natoLastname = this._lastname;\r\n this._currentItem.natoTitle = this._title;\r\n this._currentItem.natoEMailAddress = this._eMailAddress;\r\n this._currentItem.natoCompany = this._company;\r\n this._currentItem.natoAdditionalQuestionAnswers = JSON.stringify(this._additionalQuestionAnswers);\r\n }\r\n let additionalQuestionAnswerString = Object.keys(this._additionalQuestionAnswers).map(key => {\r\n return String.format(\"{0}: {1}\", key, this._additionalQuestionAnswers[key]);\r\n }).join(\"\\n\");\r\n let item = {\r\n \"Title\": this._itemTitle,\r\n \"ContentTypeId\": \"0x0100851C6E04655A4B709E90172A8EBD6AA4\",\r\n \"natoCode\": this._code,\r\n \"natoCountry\": this._country,\r\n \"natoFirstname\": this._firstname,\r\n \"natoLastname\": this._lastname,\r\n \"natoTitle\": this._title,\r\n \"natoEMailAddress\": this._eMailAddress,\r\n \"natoCompany\": this._company,\r\n \"natoAdditionalQuestionAnswers\": additionalQuestionAnswerString,\r\n \"__metadata\": { \"type\": \"SP.Data.EventRegistrationsListItem\" }\r\n };\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.EVENT_REGISTRATIONS + \"')/items\";\r\n let headers = {};\r\n if (this._currentItem != null) {\r\n url = url + \"(\" + this._id + \")\";\r\n headers = { \"X-HTTP-Method\": \"MERGE\", \"If-Match\": \"*\" };\r\n }\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", item, headers, false)\r\n .then(response => {\r\n resolve();\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=SeminarRegistration.jsx.map","import { SharePointRestService, Attachment, ProjectTimeline, ApplicationStatus, ApplicantDetails, ProjectDetails, BudgetDetails, ApplicationAttachments, AgreementsDetails, ListNames, DivisionEnum, LogMessage, LogSeverityEnum, ApplicationAsyncDefaultValues, User, ChangeRequest, ApplicationApprovalStatusFieldTemplate, SPUtil, Grant, InternalApplicationStatusEnum, WorkflowManager } from \"../index\";\r\n//Class that defines the 'GrantApplication'\r\n//When an applicant wants to apply for a grant an Application object is initialized\r\nexport class Application {\r\n constructor(item) {\r\n this._currentItem = item;\r\n if (this._currentItem != null) {\r\n this._id = item.Id;\r\n this._url = item.FileRef;\r\n this._applicationStatus = item.natoApplicationStatus;\r\n this._approvalStatus = item.natoApplicationApprovalStatus;\r\n this._approvalComments = item.natoApprovalComments;\r\n this._keyPriorities = item.natoKeyPriorities;\r\n this._encodedKeyPriorities = item.natoEncodedKeyPriorities;\r\n this._hasUniquePermissions = item.HasUniqueRoleAssignments;\r\n this._author = item.Author ? {\r\n Name: item.Author.Title,\r\n Account: item.Author.Name,\r\n ID: item.AuthorId\r\n } : {\r\n Name: \"\",\r\n Account: _spPageContextInfo.userLoginName,\r\n ID: item.AuthorId\r\n };\r\n this._projectNumber = item.natoProjectNumber;\r\n this._meetingNumber = item.natoMeetingNumber;\r\n this._partnershipFramework = item.natoPartnershipFramework;\r\n this._origin = item.natoOrigin;\r\n this._beneficiaryNation = item.natoBeneficiaryNation;\r\n this._primaryKeyPriority = item.natoPrimaryKeyPriority;\r\n this._secondaryKeyPriority = item.natoSecondaryKeyPriority;\r\n this._priority = item.natoPriority;\r\n this._beneficiaryNationsSplit = item.natoBeneficiaryNationsSplit;\r\n this._region = item.natoRegion;\r\n this._finalReportDueDate = item.natoFinalReportDueDate ? new Date(Date.parse(item.natoFinalReportDueDate)) : null;\r\n this._processStage = item.natoProcessStage;\r\n this._godParent = item.natoGodParent;\r\n this._documentReferences = item.natoDocumentReferences;\r\n this._webURL = item.natoWebURL;\r\n this._publisher = item.natoPublisher;\r\n this._publisherSubSeries = item.natoPublisherSubSeries;\r\n this._dateBooksReceived = item.natoDateBooksReceived ? new Date(Date.parse(item.natoDateBooksReceived)) : null;\r\n this._yearOfInitialAward = item.natoYearOfInitialAward;\r\n this._yearOfOfficialClosure = item.natoYearOfOfficialClosure;\r\n this._approvedBudgetCeiling = item.natoApprovedBudgetCeiling;\r\n this._initialAwardTrancheAmount = item.natoInitialAwardTrancheAmount;\r\n this._milestone1TrancheAmount = item.natoMilestone1TrancheAmount;\r\n this._milestone2TrancheAmount = item.natoMilestone2TrancheAmount;\r\n this._milestone3TrancheAmount = item.natoMilestone3TrancheAmount;\r\n this._milestone4TrancheAmount = item.natoMilestone4TrancheAmount;\r\n this._milestoneFinalTrancheAmount = item.natoMilestoneFinalTrancheAmount;\r\n this._initialAmount = item.natoInitialAmount;\r\n this._budgetApproval = item.natoBudgetApproval;\r\n this._applicantDetails = new ApplicantDetails(item);\r\n this._projectDetails = new ProjectDetails(item);\r\n this._projectBudget = new BudgetDetails(item);\r\n this._projectTimeline = new ProjectTimeline(item);\r\n this._attachmentsDetails = new ApplicationAttachments(item);\r\n this._agreementsDetails = new AgreementsDetails(item);\r\n let fieldValueToClaims = (fieldValue) => {\r\n if (fieldValue && fieldValue.length > 0) {\r\n return fieldValue.map(userData => { return { claim: userData.Name, name: userData.Title, id: userData.ID }; });\r\n }\r\n else if (fieldValue && fieldValue.ID) {\r\n return [{ claim: fieldValue.Name, name: fieldValue.Title, id: fieldValue.ID }];\r\n }\r\n else {\r\n return new Array();\r\n }\r\n };\r\n this._advisors = fieldValueToClaims(item.natoAdvisors);\r\n this._seniorAdvisors = fieldValueToClaims(item.natoSeniorAdvisors);\r\n this._reviewers = fieldValueToClaims(item.natoReviewers);\r\n this._grantAdministrators = fieldValueToClaims(item.natoGrantAdministrators);\r\n this._headOfSection = fieldValueToClaims(item.natoAssignedHeadOfSection);\r\n this._sectionSpecialists = fieldValueToClaims(item.natoSectionSpecialist);\r\n /*\r\n if (item.natoAdvisors && item.natoAdvisors.length > 0) {\r\n this._advisors = item.natoAdvisors.map(userData => { return { claim: userData.Name, name: userData.Title, id: userData.ID } })\r\n }\r\n else {\r\n this._advisors = new Array();\r\n }\r\n\r\n if (item.natoSeniorAdvisors && item.natoSeniorAdvisors.length > 0) {\r\n this._seniorAdvisors = item.natoSeniorAdvisors.map(userData => { return { claim: userData.Name, name: userData.Title, id: userData.ID } })\r\n }\r\n else {\r\n this._seniorAdvisors = new Array();\r\n }\r\n\r\n if (item.natoReviewers && item.natoReviewers.length > 0) {\r\n this._reviewers = item.natoReviewers.map(userData => { return { claim: userData.Name, name: userData.Title, id: userData.ID } })\r\n }\r\n else {\r\n this._reviewers = new Array();\r\n }\r\n\r\n if (item.natoGrantAdministrators && item.natoGrantAdministrators.length > 0) {\r\n this._grantAdministrators = item.natoGrantAdministrators.map(userData => { return { claim: userData.Name, name: userData.Title, id: userData.ID } })\r\n }\r\n else {\r\n this._grantAdministrators = new Array();\r\n }\r\n\r\n if (item.natoAssignedHeadOfSection && item.natoAssignedHeadOfSection.length > 0) {\r\n this._headOfSection = item.natoAssignedHeadOfSection.map(userData => { return { claim: userData.Name, name: userData.Title, id: userData.ID } })\r\n }\r\n else {\r\n this._headOfSection = new Array();\r\n }\r\n\r\n if (item.natoSectionSpecialist && item.natoSectionSpecialist.length > 0) {\r\n this._sectionSpecialists = item.natoSectionSpecialist.map(userData => { return { claim: userData.Name, name: userData.Title, id: userData.ID } })\r\n }\r\n else {\r\n this._sectionSpecialists = new Array();\r\n }*/\r\n //The property odata.editlink will be something like 'Web/Lists(guid'faff81fb-a2be-48a7-8f91-99d1ad26384d')/Items(2)'\r\n //So we use a RegularExpression to extract the ListID from this link\r\n if (item[\"odata.editLink\"]) {\r\n let guidRegex = new RegExp(/[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}/i);\r\n var guidMatch = guidRegex.exec(item[\"odata.editLink\"]);\r\n this._listGuid = (guidMatch) ? new SP.Guid(guidMatch[0]) : SP.Guid.get_empty();\r\n }\r\n }\r\n if (typeof (item.HasUniqueRoleAssignments) == \"boolean\" && !this._hasUniquePermissions) {\r\n this.setInitialPermission();\r\n }\r\n let division = this._applicantDetails.division;\r\n let defaultValues = new ApplicationAsyncDefaultValues();\r\n if (this._applicationStatus != ApplicationStatus.DRAFT && division == DivisionEnum.ESC && this._seniorAdvisors.length == 0) {\r\n defaultValues.setSeniorAdvisors(this._listGuid).then(updatedItems => {\r\n if (updatedItems[this.id] != null) {\r\n this._seniorAdvisors = updatedItems[this.id].seniorAdvisors;\r\n }\r\n });\r\n }\r\n }\r\n //The SharePoint ItemId\r\n get id() {\r\n return this._id;\r\n }\r\n //The SharePoint ItemId\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get listId() {\r\n return this._listGuid;\r\n }\r\n //The absolute URL for this application DocumentSet\r\n get url() {\r\n return window.location.origin + this._url;\r\n }\r\n //The server-relative URL for this application DocumentSet\r\n get serverRelativeUrl() {\r\n return this._url;\r\n }\r\n //Corresponds to the details found on ApplicationWizard page1: ApplicantDetails\r\n set applicantDetails(applicantDetails) {\r\n this._applicantDetails = applicantDetails;\r\n }\r\n //Corresponds to the details found on ApplicationWizard page1: ApplicantDetails\r\n get applicantDetails() {\r\n return this._applicantDetails;\r\n }\r\n //Corresponds to the details found on ApplicationWizard page2: ProjectDetails\r\n set projectDetails(projectDetails) {\r\n this._projectDetails = projectDetails;\r\n }\r\n //Corresponds to the details found on ApplicationWizard page2: ProjectDetails\r\n get projectDetails() {\r\n return this._projectDetails;\r\n }\r\n //Corresponds to the details found on ApplicationWizard page3: BudgetDetails\r\n set projectBudget(projectBudget) {\r\n this._projectBudget = projectBudget;\r\n }\r\n //Corresponds to the details found on ApplicationWizard page3: BudgetDetails\r\n get projectBudget() {\r\n return this._projectBudget;\r\n }\r\n set projectTimeline(projectTimeline) {\r\n this._projectTimeline = projectTimeline;\r\n }\r\n get projectTimeline() {\r\n return this._projectTimeline;\r\n }\r\n //Corresponds to the details found on ApplicationWizard page7: Attachments\r\n set attachmentsDetails(attachmentsDetails) {\r\n this._attachmentsDetails = attachmentsDetails;\r\n }\r\n //Corresponds to the details found on ApplicationWizard page7: Attachments\r\n get attachmentsDetails() {\r\n return this._attachmentsDetails;\r\n }\r\n //Corresponds to the details found on ApplicationWizard page7: Attachments\r\n set agreementsDetails(agreementsDetails) {\r\n this._agreementsDetails = agreementsDetails;\r\n }\r\n //Corresponds to the details found on ApplicationWizard page7: Attachments\r\n get agreementsDetails() {\r\n return this._agreementsDetails;\r\n }\r\n get keyPriorities() {\r\n return this._keyPriorities;\r\n }\r\n get encodedKeyPriorities() {\r\n return this._encodedKeyPriorities;\r\n }\r\n get advisors() {\r\n return this._advisors;\r\n }\r\n get seniorAdvisors() {\r\n return this._seniorAdvisors;\r\n }\r\n get reviewers() {\r\n return this._reviewers;\r\n }\r\n get grantAdministrators() {\r\n return this._grantAdministrators;\r\n }\r\n get sectionSpecialists() {\r\n return this._sectionSpecialists;\r\n }\r\n get headOfSection() {\r\n return this._headOfSection;\r\n }\r\n get projectNumber() {\r\n if (this._projectNumber && this._projectNumber.length > 0) {\r\n return Promise.resolve(this._projectNumber);\r\n }\r\n else {\r\n return new Promise((resolve, reject) => {\r\n let defaultValues = new ApplicationAsyncDefaultValues();\r\n defaultValues.setProgramNumber(this._listGuid).then(updatedItems => {\r\n if (updatedItems[this.id] != null) {\r\n this._projectNumber = updatedItems[this.id].projectNumber;\r\n resolve(this._projectNumber);\r\n }\r\n else {\r\n reject(); //TODO: this should probably not be a reject!\r\n }\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to generate a new Project Number for application '\" + this._id + \"': \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n }\r\n get meetingNumber() {\r\n return this._meetingNumber;\r\n }\r\n set meetingNumber(meetingNumber) {\r\n this._meetingNumber = meetingNumber;\r\n }\r\n get partnershipFramework() {\r\n return this._partnershipFramework;\r\n }\r\n set partnershipFramework(partnershipFramework) {\r\n this._partnershipFramework = partnershipFramework;\r\n }\r\n get origin() {\r\n return this._origin;\r\n }\r\n set origin(origin) {\r\n this._origin = origin;\r\n }\r\n get beneficiaryNation() {\r\n return this._beneficiaryNation;\r\n }\r\n set beneficiaryNation(beneficiaryNation) {\r\n this._beneficiaryNation = beneficiaryNation;\r\n }\r\n get primaryKeyPriority() {\r\n return this._primaryKeyPriority;\r\n }\r\n set primaryKeyPriority(primaryKeyPriority) {\r\n this._primaryKeyPriority = primaryKeyPriority;\r\n }\r\n get secondaryKeyPriority() {\r\n return this._secondaryKeyPriority;\r\n }\r\n set secondaryKeyPriority(secondaryKeyPriority) {\r\n this._secondaryKeyPriority = secondaryKeyPriority;\r\n }\r\n get priority() {\r\n return this._priority;\r\n }\r\n set priority(priority) {\r\n this._priority = priority;\r\n }\r\n get beneficiaryNationsSplit() {\r\n return this._beneficiaryNationsSplit;\r\n }\r\n set beneficiaryNationsSplit(beneficiaryNationsSplit) {\r\n this._beneficiaryNationsSplit = beneficiaryNationsSplit;\r\n }\r\n get region() {\r\n return this._region;\r\n }\r\n set region(region) {\r\n this._region = region;\r\n }\r\n get finalReportDueDate() {\r\n return this._finalReportDueDate;\r\n }\r\n set finalReportDueDate(finalReportDueDate) {\r\n this._finalReportDueDate = finalReportDueDate;\r\n }\r\n get processStage() {\r\n return this._processStage;\r\n }\r\n set processStage(processStage) {\r\n this._processStage = processStage;\r\n }\r\n get godParent() {\r\n return this._godParent;\r\n }\r\n set godParent(godParent) {\r\n this._godParent = godParent;\r\n }\r\n get documentReferences() {\r\n return this._documentReferences;\r\n }\r\n set documentReferences(documentReferences) {\r\n this._documentReferences = documentReferences;\r\n }\r\n get webURL() {\r\n return this._webURL;\r\n }\r\n set webURL(webURL) {\r\n this._webURL = webURL;\r\n }\r\n get publisher() {\r\n return this._publisher;\r\n }\r\n set publisher(publisher) {\r\n this._publisher = publisher;\r\n }\r\n get publisherSubSeries() {\r\n return this._publisherSubSeries;\r\n }\r\n set publisherSubSeries(publisherSubSeries) {\r\n this._publisherSubSeries = publisherSubSeries;\r\n }\r\n get dateBooksReceived() {\r\n return this._dateBooksReceived;\r\n }\r\n set dateBooksReceived(dateBooksReceived) {\r\n this._dateBooksReceived = dateBooksReceived;\r\n }\r\n get yearOfInitialAward() {\r\n return this._yearOfInitialAward;\r\n }\r\n set yearOfInitialAward(yearOfInitialAward) {\r\n this._yearOfInitialAward = yearOfInitialAward;\r\n }\r\n get yearOfOfficialClosure() {\r\n return this._yearOfOfficialClosure;\r\n }\r\n set yearOfOfficialClosure(yearOfOfficialClosure) {\r\n this._yearOfOfficialClosure = yearOfOfficialClosure;\r\n }\r\n get approvedBudgetCeiling() {\r\n return this._approvedBudgetCeiling;\r\n }\r\n set approvedBudgetCeiling(approvedBudgetCeiling) {\r\n this._approvedBudgetCeiling = approvedBudgetCeiling;\r\n }\r\n get initialAwardTrancheAmount() {\r\n return this._initialAwardTrancheAmount;\r\n }\r\n set initialAwardTrancheAmount(initialAwardTrancheAmount) {\r\n this._initialAwardTrancheAmount = initialAwardTrancheAmount;\r\n }\r\n get milestone1TrancheAmount() {\r\n return this._milestone1TrancheAmount;\r\n }\r\n set milestone1TrancheAmount(milestone1TrancheAmount) {\r\n this._milestone1TrancheAmount = milestone1TrancheAmount;\r\n }\r\n get milestone2TrancheAmount() {\r\n return this._milestone2TrancheAmount;\r\n }\r\n set milestone2TrancheAmount(milestone2TrancheAmount) {\r\n this._milestone2TrancheAmount = milestone2TrancheAmount;\r\n }\r\n get milestone3TrancheAmount() {\r\n return this._milestone3TrancheAmount;\r\n }\r\n set milestone3TrancheAmount(milestone3TrancheAmount) {\r\n this._milestone3TrancheAmount = milestone3TrancheAmount;\r\n }\r\n get milestone4TrancheAmount() {\r\n return this._milestone4TrancheAmount;\r\n }\r\n set milestone4TrancheAmount(milestone4TrancheAmount) {\r\n this._milestone4TrancheAmount = milestone4TrancheAmount;\r\n }\r\n get milestoneFinalTrancheAmount() {\r\n return this._milestoneFinalTrancheAmount;\r\n }\r\n set milestoneFinalTrancheAmount(milestoneFinalTrancheAmount) {\r\n this._milestoneFinalTrancheAmount = milestoneFinalTrancheAmount;\r\n }\r\n get initialAmount() {\r\n return this._initialAmount;\r\n }\r\n set initialAmount(initialAmount) {\r\n this._initialAmount = initialAmount;\r\n }\r\n get budgetApproval() {\r\n return this._budgetApproval;\r\n }\r\n set budgetApproval(budgetApproval) {\r\n this._budgetApproval = budgetApproval;\r\n }\r\n get applicationStatus() {\r\n let status = ApplicationStatus.INVALID;\r\n try {\r\n status = (this._applicationStatus && this._applicationStatus != \"\") ? this._applicationStatus : ApplicationStatus.DRAFT;\r\n }\r\n catch (e) {\r\n status = ApplicationStatus.INVALID;\r\n }\r\n return status;\r\n }\r\n get approvalStatus() {\r\n return new Promise((resolve, reject) => {\r\n SPUtil.isLoggedIn().then(isLoggedIn => {\r\n if (isLoggedIn) {\r\n User.isApplicant().then(isApplicant => {\r\n if (isApplicant) {\r\n resolve(\"-\");\r\n }\r\n else {\r\n let status = ApplicationApprovalStatusFieldTemplate.decode(this._approvalStatus);\r\n resolve(status);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n get approvalComments() {\r\n return this._approvalComments;\r\n }\r\n get authorId() {\r\n return (this._author ? this._author.ID : null);\r\n }\r\n get hasUniqueRoleAssignments() {\r\n return this._hasUniquePermissions;\r\n }\r\n updateKeyPriorities(priorities) {\r\n LogMessage.Log(\"Updating KeyPriorities values for '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let keyPrioritiesText = [...new Set(priorities.map(kp => kp.title))].sort((a, b) => a.localeCompare(b)).join(\"\\n\");\r\n let fields = {\r\n \"natoKeyPriorities\": keyPrioritiesText,\r\n \"natoEncodedKeyPriorities\": JSON.stringify(priorities),\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", fields, headers)\r\n .then(response => {\r\n this._keyPriorities = keyPrioritiesText;\r\n this._encodedKeyPriorities = JSON.stringify(priorities);\r\n resolve(this);\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n SetCustomStatus(internalStatus, externalStatus, comments, attachment, updateAverageRating = false) {\r\n LogMessage.Log(\"Setting application '\" + this._id + \"' status to: \" + internalStatus, this, LogSeverityEnum.Verbose);\r\n let averageReviewScorePromise = Promise.resolve(-1);\r\n if (updateAverageRating) {\r\n averageReviewScorePromise = this.getAverageRatingForAllEvaluations();\r\n }\r\n return new Promise((resolve, reject) => {\r\n averageReviewScorePromise.then(averageRating => {\r\n let fields = {\r\n \"natoApplicationStatus\": externalStatus,\r\n \"natoApplicationApprovalStatus\": ApplicationApprovalStatusFieldTemplate.generateInternalValue(internalStatus),\r\n \"natoApprovalComments\": comments,\r\n \"natoReadyForErpInterface\": internalStatus == InternalApplicationStatusEnum.APPROVED_READY_FOR_INTERFACE ? \"Yes\" : \"No\",\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n if (!isNaN(averageRating) && averageRating >= 0) {\r\n fields[\"natoAverageRating\"] = averageRating;\r\n }\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n SharePointRestService.fetch(url, \"POST\", fields, headers)\r\n .then(response => {\r\n this._applicationStatus = ApplicationStatus.UNDER_REVIEW;\r\n this._approvalComments = comments;\r\n this.setSubmittedPermissions().then(result => {\r\n this.saveApprovalAttachment(attachment, internalStatus, comments).then(file => {\r\n resolve(true);\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to save attachment '\" + attachment.filename + \"': \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n });\r\n }\r\n Approve(comments, attachment) {\r\n LogMessage.Log(\"Approving application '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n return this.SetCustomStatus(InternalApplicationStatusEnum.APPROVED, ApplicationStatus.UNDER_REVIEW, comments, attachment, this.applicantDetails.division == DivisionEnum.ESC);\r\n /*\r\n let fields = {\r\n //\"natoApplicationStatus\": ApplicationStatus.APPROVED,\r\n \"natoApplicationStatus\": ApplicationStatus.UNDER_REVIEW,\r\n \"natoApplicationApprovalStatus\": ApplicationApprovalStatusFieldTemplate.generateInternalValue(InternalApplicationStatusEnum.APPROVED),\r\n \"natoApprovalComments\": comments,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n }\r\n\r\n let url: string = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\"\r\n let headers: any = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", fields, headers)\r\n .then(response => {\r\n\r\n this._applicationStatus = ApplicationStatus.UNDER_REVIEW\r\n this._approvalComments = comments;\r\n\r\n this.setSubmittedPermissions().then(result => {\r\n\r\n this.saveApprovalAttachment(attachment, InternalApplicationStatusEnum.APPROVED, comments).then(file => {\r\n resolve(true);\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to save attachment '\" + attachment.filename + \"': \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason)\r\n });\r\n });\r\n\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason)\r\n });\r\n });\r\n */\r\n }\r\n Award() {\r\n LogMessage.Log(\"Awarding application '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let fields = {\r\n \"natoApplicationStatus\": ApplicationStatus.AWARDED,\r\n \"natoReadyForErpInterface\": \"Yes\",\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", fields, headers)\r\n .then(response => {\r\n let wf = new WorkflowManager();\r\n wf.StartWorklow(\"Grant Applications\", this._id, \"Notification\", { \"Type\": \"AwardedRejected\" }, true).then(() => {\r\n this._applicationStatus = ApplicationStatus.AWARDED;\r\n resolve(true);\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n FinallyReject() {\r\n LogMessage.Log(\"Rejecting application '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let fields = {\r\n \"natoApplicationStatus\": ApplicationStatus.REJECTED,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", fields, headers)\r\n .then(response => {\r\n let wf = new WorkflowManager();\r\n wf.StartWorklow(\"Grant Applications\", this._id, \"Notification\", { \"Type\": \"AwardedRejected\" }, true).then(() => {\r\n this._applicationStatus = ApplicationStatus.REJECTED;\r\n resolve(true);\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n Reject(comments, attachment) {\r\n LogMessage.Log(\"Rejecting application '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n return this.SetCustomStatus(InternalApplicationStatusEnum.REJECTED, ApplicationStatus.UNDER_REVIEW, comments, attachment, this.applicantDetails.division == DivisionEnum.ESC);\r\n /*\r\n let fields = {\r\n //\"natoApplicationStatus\": ApplicationStatus.REJECTED,\r\n \"natoApplicationStatus\": ApplicationStatus.UNDER_REVIEW,\r\n \"natoApplicationApprovalStatus\": ApplicationApprovalStatusFieldTemplate.generateInternalValue(InternalApplicationStatusEnum.REJECTED),\r\n \"natoApprovalComments\": comments,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n }\r\n \r\n let url: string = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\"\r\n let headers: any = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n }\r\n \r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", fields, headers)\r\n .then(response => {\r\n \r\n this._applicationStatus = ApplicationStatus.UNDER_REVIEW;\r\n this._approvalComments = comments\r\n this.setSubmittedPermissions().then(result => {\r\n \r\n this.saveApprovalAttachment(attachment, InternalApplicationStatusEnum.REJECTED, comments).then(file => {\r\n resolve(true);\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to save attachment '\" + attachment.filename + \"': \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason)\r\n });\r\n });\r\n \r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason)\r\n });\r\n });*/\r\n }\r\n /*\r\n public getInternalState(): Promise {\r\n\r\n if (this.applicationStatus != ApplicationStatus.UNDER_REVIEW) {\r\n return Promise.resolve(this.applicationStatus);\r\n }\r\n else {\r\n\r\n let context: SP.ClientContext = SP.ClientContext.get_current();\r\n\r\n let approvalFolder: string = \"ApprovalAttachments\"\r\n let serverRelativeUrlForApproval: string = this.serverRelativeUrl + \"/\" + approvalFolder + \"/\"\r\n let appprovalFolder: SP.Folder = context.get_web().getFolderByServerRelativeUrl(serverRelativeUrlForApproval);\r\n let approvalFiles = appprovalFolder.get_files()\r\n\r\n //Request the folder and files from the SharePoint webservice\r\n\r\n context.load(appprovalFolder);\r\n context.load(approvalFiles, \"Include(TimeLastModified, Author, ServerRelativeUrl, ListItemAllFields)\")\r\n\r\n context.executeQueryAsync(\r\n (sender: any, args: SP.ClientRequestSucceededEventArgs): void => {\r\n\r\n let approvalData: { status: string, date: Date, user: string, comments: string, filename: string, fileUrl: string }[] = new Array();\r\n\r\n //Loop over all files in the approval-folder\r\n var fileEnumerator = approvalFiles.getEnumerator();\r\n while (fileEnumerator.moveNext()) {\r\n\r\n //Get some basic information regarding the file\r\n let file: SP.File = fileEnumerator.get_current();\r\n let relativeUrl: string = file.get_serverRelativeUrl();\r\n let author: string = file.get_author().get_title();\r\n let lastModified: Date = file.get_timeLastModified();\r\n let item: SP.ListItem = file.get_listItemAllFields();\r\n let status: string = item.get_fieldValues()[\"natoApplicationStatus\"];\r\n let comments: string = item.get_fieldValues()[\"natoApprovalComments\"];\r\n let filename: string = (\"\" + item.get_fieldValues()[\"FileLeafRef\"]).split(\"_\").splice(1).join(\"_\");\r\n\r\n if (filename.toLocaleLowerCase() == \"empty.txt\") {\r\n filename = null;\r\n }\r\n\r\n approvalData.push({\r\n date: lastModified,\r\n user: author,\r\n fileUrl: relativeUrl,\r\n comments: comments,\r\n filename: filename,\r\n status: status\r\n });\r\n }\r\n\r\n if (approvalData.length == 0) {\r\n return Promise.resolve(\r\n }\r\n }\r\n\r\n\r\n }\r\n }*/\r\n saveApprovalAttachment(attachment, status, comments) {\r\n if (attachment == null) {\r\n let dummyText = \"Empty\";\r\n var dataArray = new Uint8Array(dummyText.length);\r\n for (let i = 0; i < dummyText.length; i++) {\r\n dataArray[i] = dummyText.charCodeAt(i);\r\n }\r\n attachment = new Attachment(\"Empty.txt\", dataArray);\r\n }\r\n return attachment.UploadToDocumentSet(\"Grant Applications\", this.id, status.toString(), comments);\r\n }\r\n updateFields(fieldValues) {\r\n let fields = {\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n fieldValues.forEach(val => {\r\n fields[val.internalFieldName] = val.fieldValue;\r\n });\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", fields, headers)\r\n .then(response => {\r\n resolve();\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n updateReviewers(reviewers) {\r\n LogMessage.Log(\"Updating Reviewers values for '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let ctx = SP.ClientContext.get_current();\r\n let applicationList = ctx.get_web().get_lists().getById(this._listGuid);\r\n let listItem = applicationList.getItemById(this._id);\r\n let roleAssignments = listItem.get_roleAssignments();\r\n let newRole = ctx.get_web().get_roleDefinitions().getByName(\"Contribute and Manage Permissions\");\r\n let reviewerClaims = reviewers.map(user => { return SP.FieldUserValue.fromUser(user.claim); });\r\n let newStatus = reviewerClaims.length > 0 ? ApplicationStatus.UNDER_REVIEW : ApplicationStatus.SUBMITTED;\r\n listItem.set_item(\"natoReviewers\", reviewerClaims);\r\n listItem.set_item(\"natoNumberOfReviewers\", reviewerClaims.length);\r\n listItem.set_item(\"natoApplicationStatus\", newStatus);\r\n //Create a list of revierers to remove and a list of reviewers to add\r\n let reviewersToRemove = this._reviewers.filter(r => reviewers.findIndex(newReviewer => newReviewer.claim.toLocaleLowerCase() == r.claim.toLocaleLowerCase()) == -1);\r\n let newReviewers = reviewers.filter(r => this.reviewers.findIndex(currentReviewer => currentReviewer.claim.toLocaleLowerCase() == r.claim.toLocaleLowerCase()) == -1);\r\n listItem.update();\r\n ctx.load(listItem);\r\n ctx.load(roleAssignments, \"Include(PrincipalId, Member, RoleDefinitionBindings)\");\r\n ctx.load(newRole);\r\n return new Promise((resolve, reject) => {\r\n ctx.executeQueryAsync((sender, args) => {\r\n this._reviewers = reviewers;\r\n //Remove 'old' reviewers\r\n let permissionCount = roleAssignments.get_count();\r\n for (let i = 0; i < permissionCount; i++) {\r\n let assignment = roleAssignments.get_item(i);\r\n if (assignment.get_member().get_principalType() == SP.Utilities.PrincipalType.user) {\r\n let principalId = assignment.get_principalId();\r\n if (reviewersToRemove.findIndex(r => r.id == principalId) >= 0) {\r\n assignment.get_roleDefinitionBindings().removeAll();\r\n }\r\n assignment.update();\r\n }\r\n }\r\n //Add 'new' reviewers\r\n newReviewers.forEach(newReviewer => {\r\n let reviewerUser = ctx.get_web().ensureUser(newReviewer.claim);\r\n let userRoles = new SP.RoleDefinitionBindingCollection(ctx);\r\n userRoles.add(newRole);\r\n roleAssignments.add(reviewerUser, userRoles);\r\n });\r\n listItem.update();\r\n ctx.executeQueryAsync((sender, args) => {\r\n //Send an e-mail notification when the reviewers are assigned\r\n //When the reviewers are cleared, don't send a notifcation\r\n let sendNotificationPromise = Promise.resolve();\r\n if (reviewerClaims.length > 0) {\r\n sendNotificationPromise = (new WorkflowManager()).StartWorklow(\"Grant Applications\", this._id, \"Notification\", { \"Type\": \"ReviewerAssigned\" }, true);\r\n }\r\n sendNotificationPromise.then(() => {\r\n resolve();\r\n });\r\n }, (sender, args) => {\r\n //There was an error updating the permissions for the reviewers\r\n reject();\r\n });\r\n }, (sender, args) => {\r\n //There was an error metadata the permissions for the reviewers\r\n reject();\r\n });\r\n });\r\n }\r\n updateAdvisors(grantAdministrators, seniorAdvisors, advisors) {\r\n LogMessage.Log(\"Updating Advisors values for '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let ctx = SP.ClientContext.get_current();\r\n let applicationList = ctx.get_web().get_lists().getById(this._listGuid);\r\n let listItem = applicationList.getItemById(this._id);\r\n let advisorClaims = advisors.map(user => { return SP.FieldUserValue.fromUser(user.claim); });\r\n let seniorAdvisorClaims = seniorAdvisors.map(user => { return SP.FieldUserValue.fromUser(user.claim); });\r\n let grantAdministratorClaims = grantAdministrators.map(user => { return SP.FieldUserValue.fromUser(user.claim); });\r\n listItem.set_item(\"natoAdvisors\", advisorClaims);\r\n listItem.set_item(\"natoSeniorAdvisors\", seniorAdvisorClaims);\r\n listItem.set_item(\"natoGrantAdministrators\", grantAdministratorClaims);\r\n listItem.update();\r\n ctx.load(listItem);\r\n return new Promise((resolve, reject) => {\r\n ctx.executeQueryAsync((sender, args) => {\r\n this._advisors = advisors;\r\n this._seniorAdvisors = seniorAdvisors;\r\n this._grantAdministrators = grantAdministrators;\r\n //Send an e-mail notification when the advisors, senior advisors, etc. are updated\r\n let wf = new WorkflowManager();\r\n wf.StartWorklow(\"Grant Applications\", this._id, \"Notification\", { \"Type\": \"Assigned\" }, true).then(() => {\r\n resolve();\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n }, (sender, args) => {\r\n reject();\r\n });\r\n });\r\n }\r\n updateSectionSpecialists(grantAdministrators, headOfSection, sectionSpecialists) {\r\n LogMessage.Log(\"Updating Section Specialists values for '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let ctx = SP.ClientContext.get_current();\r\n let applicationList = ctx.get_web().get_lists().getById(this._listGuid);\r\n let listItem = applicationList.getItemById(this._id);\r\n let headOfSectionClaims = headOfSection.map(user => { return SP.FieldUserValue.fromUser(user.claim); });\r\n let sectionSpecialistsClaims = sectionSpecialists.map(user => { return SP.FieldUserValue.fromUser(user.claim); });\r\n let grantAdministratorClaims = grantAdministrators.map(user => { return SP.FieldUserValue.fromUser(user.claim); });\r\n listItem.set_item(\"natoAssignedHeadOfSection\", headOfSectionClaims);\r\n listItem.set_item(\"natoSectionSpecialist\", sectionSpecialistsClaims);\r\n listItem.set_item(\"natoGrantAdministrators\", grantAdministratorClaims);\r\n listItem.update();\r\n ctx.load(listItem);\r\n return new Promise((resolve, reject) => {\r\n ctx.executeQueryAsync((sender, args) => {\r\n this._headOfSection = headOfSection;\r\n this._sectionSpecialists = sectionSpecialists;\r\n this._grantAdministrators = grantAdministrators;\r\n let wf = new WorkflowManager();\r\n wf.StartWorklow(\"Grant Applications\", this._id, \"Notification\", { \"Type\": \"Assigned\" }, true).then(() => {\r\n resolve();\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n }, (sender, args) => {\r\n reject();\r\n });\r\n });\r\n }\r\n getAverageRatingForAllEvaluations() {\r\n //Get the folder containing all evaluations\r\n let clientContext = SP.ClientContext.get_current();\r\n let subFolderName = \"Evaluations\";\r\n let evaluationsFolder = clientContext.get_web().getFolderByServerRelativeUrl(this.serverRelativeUrl + \"/\" + subFolderName);\r\n clientContext.load(evaluationsFolder);\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n //Get all evaluation files\r\n let evaluationsFiles = evaluationsFolder.get_files();\r\n //Request the folder and files from the SharePoint webservice\r\n let context = SP.ClientContext.get_current();\r\n context.load(evaluationsFiles, \"Include(TimeLastModified, Author, ServerRelativeUrl, ListItemAllFields)\");\r\n context.executeQueryAsync((sender, args) => {\r\n //Loop over all files in the evaluations folder\r\n let fileEnumerator = evaluationsFiles.getEnumerator();\r\n let ratings = new Array();\r\n while (fileEnumerator.moveNext()) {\r\n let file = fileEnumerator.get_current();\r\n file.get_listItemAllFields;\r\n let averageRatingStr = \"\" + file.get_listItemAllFields().get_fieldValues()[\"natoAverageRating\"];\r\n try {\r\n let averageRating = Number.parseFloat(averageRatingStr);\r\n if (!isNaN(averageRating) && averageRating >= 0) {\r\n ratings.push(averageRating);\r\n }\r\n }\r\n catch (e) {\r\n }\r\n }\r\n let totalAverageRating = ratings.length > 0 ? ratings.reduce((p, c) => p + c, 0) / ratings.length : -1;\r\n resolve(totalAverageRating);\r\n });\r\n }, (sender, args) => {\r\n //No evaluation folder, return -1\r\n resolve(-1);\r\n });\r\n });\r\n }\r\n isUserAdvisor(user) {\r\n return user && this._advisors.find(items => items.id == user.id) != null;\r\n }\r\n isUserSeniorAdvisor(user) {\r\n return user && this._seniorAdvisors.find(items => items.id == user.id) != null;\r\n }\r\n isUserReviewer(user) {\r\n return user && this._reviewers.find(items => items.id == user.id) != null;\r\n }\r\n getHeadOfSectionFromGrantData() {\r\n let grantCode = this.applicantDetails.code;\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANTS + \"')/items?$filter=natoCode eq '\" + grantCode + \"'&$select=natoAssignedHeadOfSection/Title,natoAssignedHeadOfSection/Name,natoAssignedHeadOfSection/ID&$expand=natoAssignedHeadOfSection\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n if (odata && odata.value && odata.value.length > 0) {\r\n let grant = new Grant(odata.value[0]);\r\n let userData = grant.spItem.natoAssignedHeadOfSection;\r\n if (userData) {\r\n let user = {\r\n claim: userData.Name,\r\n name: userData.Title,\r\n id: userData.ID\r\n };\r\n resolve([user]);\r\n }\r\n }\r\n resolve(new Array());\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n Submit() {\r\n LogMessage.Log(\"Submitting application '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let getHeadOfSectionPromise = Promise.resolve(new Array());\r\n if (this._applicantDetails.division == DivisionEnum.PDD) {\r\n getHeadOfSectionPromise = this.getHeadOfSectionFromGrantData();\r\n }\r\n if (!this._meetingNumber || this._meetingNumber.length == 0) {\r\n let now = (new Date(Date.now()));\r\n let nextMonth = new Date(now.setMonth(now.getMonth() + 1));\r\n let meetingNumber = nextMonth.format(\"yyyy/MM\");\r\n this._meetingNumber = meetingNumber;\r\n }\r\n return new Promise((resolve, reject) => {\r\n getHeadOfSectionPromise.then(assignedHeadOfSection => {\r\n let fields = {\r\n \"natoApplicationStatus\": ApplicationStatus.SUBMITTED,\r\n \"natoMeetingNumber\": this._meetingNumber,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n if (assignedHeadOfSection.length > 0) {\r\n let headOfSectionIds = assignedHeadOfSection.map(user => Number(user.id));\r\n fields[\"natoAssignedHeadOfSectionId\"] = headOfSectionIds[0];\r\n }\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n SharePointRestService.fetch(url, \"POST\", fields, headers)\r\n .then(response => {\r\n let notificationEmailMessageType = \"Submitted\";\r\n if (this._applicationStatus == ApplicationStatus.SUBMITTED_MORE_INFORMATION_REQUESTED) {\r\n notificationEmailMessageType = \"Update\";\r\n }\r\n this._applicationStatus = ApplicationStatus.SUBMITTED;\r\n let wf = new WorkflowManager();\r\n wf.StartWorklow(\"Grant Applications\", this._id, \"Notification\", { \"Type\": notificationEmailMessageType }, true).then(() => {\r\n ChangeRequest.EnsureChangeRequestFolder(this).then(() => {\r\n this.ensureBeneficiaryRequestFolder().then(folder => {\r\n this.setSubmittedPermissions().then(result => {\r\n resolve(true);\r\n });\r\n });\r\n });\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n });\r\n }\r\n RequestMoreInformationFromApplicant(messageToSend, emailTitle, updateApplicationStatus = true) {\r\n LogMessage.Log(\"Request more information for application '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n return new Promise((resolve, reject) => {\r\n let wf = new WorkflowManager();\r\n wf.StartWorklow(\"Grant Applications\", this._id, \"Notification\", { \"Type\": \"MoreInfo\", \"Comments\": messageToSend }, true).then(() => {\r\n if (updateApplicationStatus) {\r\n // Save application status\r\n let fields = {\r\n \"natoApplicationStatus\": ApplicationStatus.SUBMITTED_MORE_INFORMATION_REQUESTED,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n let urlItem = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n SharePointRestService.fetch(urlItem, \"POST\", fields, headers)\r\n .then(response => {\r\n this._applicationStatus = ApplicationStatus.SUBMITTED_MORE_INFORMATION_REQUESTED;\r\n this.setPermissionsForMoreInformationNeeded().then(() => {\r\n resolve(true);\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n }\r\n else {\r\n resolve(true);\r\n }\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n /*\r\n //Start the Request More Information workflow\r\n let workflowName: string = \"Request More Information\";\r\n let itemUrl = this.url;\r\n\r\n //Get all workflows associated with the list\r\n let urlWAssoc: string = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/Lists/\" + ListNames.APPLICATIONS + \"/WorkflowAssociations\"\r\n SharePointRestService.fetch(urlWAssoc)\r\n .then(response => {\r\n response.json().then(odata => {\r\n\r\n //Find the workflow by name\r\n let subscriptions: Array<{ Name: string, Id: string, Enabled: boolean }> = odata.value\r\n let validSubscription = subscriptions.find(subscriptionData => subscriptionData.Name.toLocaleLowerCase() == workflowName.toLocaleLowerCase() && subscriptionData.Enabled)\r\n\r\n //Construct an old-fashioned SOAP message. The SP2010 Workflow engine is best called using the SOAP asmx webservices\r\n var webMethod = _spPageContextInfo.webAbsoluteUrl + \"/_vti_bin/workflow.asmx\"\r\n var soap: string[] = [];\r\n soap.push(\"\")\r\n soap.push(\"\");\r\n soap.push(\"\")\r\n soap.push(\"\")\r\n soap.push(\"\" + itemUrl + \"\")\r\n soap.push(\"{\" + validSubscription.Id + \"}\")\r\n soap.push(\"\" + this.applicantDetails.eMailAddress + \"\" + emailTitle + \"\" + messageToSend + \"\")\r\n soap.push(\"\")\r\n soap.push(\"\")\r\n soap.push(\"\")\r\n\r\n //Set the proper headers for the SOAP message\r\n let headers = {\r\n \"Accept-Encoding\": \"gzip,deflate\",\r\n \"Content-Type\": \"text/xml; charset=UTF-8\",\r\n \"SOAPAction\": \"http://schemas.microsoft.com/sharepoint/soap/workflow/StartWorkflow\"\r\n }\r\n\r\n //Construct a XMLHttpRequest. The 'fetch' command will modify the headers in such a way that SharePoint doesn't understand it anymore\r\n let xmlhttp = new XMLHttpRequest();\r\n xmlhttp.open('POST', webMethod, true);\r\n xmlhttp.setRequestHeader(\"Content-Type\", \"text/xml\");\r\n xmlhttp.setRequestHeader(\"SOAPAction\", \"http://schemas.microsoft.com/sharepoint/soap/workflow/StartWorkflow\");\r\n xmlhttp.onreadystatechange = (ev: Event) => {\r\n if (xmlhttp.readyState == 4) {\r\n if (xmlhttp.status == 200) {\r\n\r\n //Workflow successfully started\r\n //console.log(\"Request More Information workflow is started!\");\r\n\r\n if (updateApplicationStatus) {\r\n // Save application status\r\n let fields = {\r\n \"natoApplicationStatus\": ApplicationStatus.SUBMITTED_MORE_INFORMATION_REQUESTED,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n }\r\n\r\n let urlItem: string = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\"\r\n let headers: any = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n }\r\n\r\n SharePointRestService.fetch(urlItem, \"POST\", fields, headers)\r\n .then(response => {\r\n\r\n this._applicationStatus = ApplicationStatus.SUBMITTED_MORE_INFORMATION_REQUESTED\r\n this.setPermissionsForMoreInformationNeeded().then(() => {\r\n resolve(true);\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason)\r\n });\r\n }\r\n else {\r\n resolve(true);\r\n }\r\n }\r\n else {\r\n LogMessage.Log(\"Unable to start workflow: \" + xmlhttp.statusText, this, LogSeverityEnum.Error);\r\n reject(\"Unable to start workflow.\");\r\n }\r\n }\r\n };\r\n //Execute the SOAP message\r\n xmlhttp.send(soap.join(\"\"));\r\n });\r\n\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to enumerate workflow: \" + reason, this, LogSeverityEnum.Error);\r\n reject(\"Unable to enumerate workflow\");\r\n });\r\n });*/\r\n }\r\n NotifyBudgetOfficers(messageToSend) {\r\n LogMessage.Log(\"Notify Budget Officers for application '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n return new Promise((resolve, reject) => {\r\n let wf = new WorkflowManager();\r\n wf.StartWorklow(\"Grant Applications\", this._id, \"Notification\", { \"Type\": \"Inform\", \"Comments\": messageToSend }, true).then(() => {\r\n resolve(true);\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n /*\r\n return new Promise((resolve, reject) => {\r\n\r\n //Start the Notify Budget Officers workflow\r\n let workflowName: string = \"Notify Budget Officers\";\r\n let itemUrl = this.url;\r\n\r\n //Get all workflows associated with the list\r\n let urlWAssoc: string = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/Lists/\" + ListNames.APPLICATIONS + \"/WorkflowAssociations\"\r\n SharePointRestService.fetch(urlWAssoc)\r\n .then(response => {\r\n response.json().then(odata => {\r\n\r\n //Find the workflow by name\r\n let subscriptions: Array<{ Name: string, Id: string, Enabled: boolean }> = odata.value\r\n let validSubscription = subscriptions.find(subscriptionData => subscriptionData.Name.toLocaleLowerCase() == workflowName.toLocaleLowerCase() && subscriptionData.Enabled)\r\n\r\n //Construct an old-fashioned SOAP message. The SP2010 Workflow engine is best called using the SOAP asmx webservices\r\n var webMethod = _spPageContextInfo.webAbsoluteUrl + \"/_vti_bin/workflow.asmx\"\r\n var soap: string[] = [];\r\n soap.push(\"\")\r\n soap.push(\"\");\r\n soap.push(\"\")\r\n soap.push(\"\")\r\n soap.push(\"\" + itemUrl + \"\")\r\n soap.push(\"{\" + validSubscription.Id + \"}\")\r\n soap.push(\"\" + messageToSend + \"\")\r\n soap.push(\"\")\r\n soap.push(\"\")\r\n soap.push(\"\")\r\n\r\n //Set the proper headers for the SOAP message\r\n let headers = {\r\n \"Accept-Encoding\": \"gzip,deflate\",\r\n \"Content-Type\": \"text/xml; charset=UTF-8\",\r\n \"SOAPAction\": \"http://schemas.microsoft.com/sharepoint/soap/workflow/StartWorkflow\"\r\n }\r\n\r\n //Construct a XMLHttpRequest. The 'fetch' command will modify the headers in such a way that SharePoint doesn't understand it anymore\r\n let xmlhttp = new XMLHttpRequest();\r\n xmlhttp.open('POST', webMethod, true);\r\n xmlhttp.setRequestHeader(\"Content-Type\", \"text/xml\");\r\n xmlhttp.setRequestHeader(\"SOAPAction\", \"http://schemas.microsoft.com/sharepoint/soap/workflow/StartWorkflow\");\r\n xmlhttp.onreadystatechange = (ev: Event) => {\r\n if (xmlhttp.readyState == 4) {\r\n if (xmlhttp.status == 200) {\r\n\r\n //Workflow successfully started\r\n //console.log(\"Notify Budget Officers workflow is started!\");\r\n\r\n resolve(true);\r\n }\r\n else {\r\n LogMessage.Log(\"Unable to start workflow: \" + xmlhttp.statusText, this, LogSeverityEnum.Error);\r\n reject(\"Unable to start workflow.\");\r\n }\r\n }\r\n };\r\n //Execute the SOAP message\r\n xmlhttp.send(soap.join(\"\"));\r\n });\r\n\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to enumerate workflow: \" + reason, this, LogSeverityEnum.Error);\r\n reject(\"Unable to enumerate workflow\");\r\n });\r\n });\r\n */\r\n }\r\n ensureBeneficiaryRequestFolder() {\r\n let foldername = \"BeneficiaryRequests\";\r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n let list = web.get_lists().getById(this._listGuid);\r\n let listItem = list.getItemById(this._id);\r\n let existingSubFolder = clientContext.get_web().getFolderByServerRelativeUrl(this.serverRelativeUrl + \"/\" + foldername);\r\n let parentFolder = listItem.get_folder();\r\n clientContext.load(parentFolder);\r\n clientContext.load(existingSubFolder);\r\n clientContext.load(existingSubFolder.get_folders(), \"Include(Name)\");\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n LogMessage.Log(\"Beneficiary request folder already exists\", this, LogSeverityEnum.Info);\r\n resolve(existingSubFolder);\r\n }, (sender, args) => {\r\n LogMessage.Log(\"Creating new beneficiary request folder\", this, LogSeverityEnum.Info);\r\n let newSubFolder = parentFolder.get_folders().add(foldername);\r\n let newSubFolderItem = newSubFolder.get_listItemAllFields();\r\n newSubFolderItem.set_item(\"natoSystemfile\", false);\r\n newSubFolderItem.breakRoleInheritance(true, true);\r\n newSubFolderItem.update();\r\n clientContext.load(newSubFolder);\r\n clientContext.load(newSubFolderItem);\r\n clientContext.load(newSubFolder.get_folders(), \"Include(Name)\");\r\n clientContext.executeQueryAsync((sender, args) => {\r\n LogMessage.Log(\"New beneficiary request folder created\", this, LogSeverityEnum.Info);\r\n resolve(newSubFolder);\r\n }, (sender, args) => {\r\n LogMessage.Log(\"Error creating new beneficiary request folder: \" + args.get_message(), this, LogSeverityEnum.Info);\r\n reject(args.get_errorDetails());\r\n });\r\n });\r\n });\r\n }\r\n setIndividualPermissionsTo(clientContext, role, accessDeniedExpected) {\r\n let web = clientContext.get_web();\r\n let list = web.get_lists().getById(this._listGuid);\r\n let item = list.getItemById(this.id);\r\n let roleAssignments = item.get_roleAssignments();\r\n let newRole;\r\n if (role instanceof SP.RoleDefinition) {\r\n newRole = role;\r\n }\r\n else {\r\n newRole = web.get_roleDefinitions().getByType(role);\r\n }\r\n //Load the current item and the roleAssignments\r\n clientContext.load(item);\r\n clientContext.load(roleAssignments, \"Include(Member, RoleDefinitionBindings)\");\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n //Replace all permissions that are assigned to single users\r\n //Leave all permisions assigned to groups intact\r\n let permissionsChanged = false;\r\n let permissionCount = roleAssignments.get_count();\r\n for (let i = 0; i < permissionCount; i++) {\r\n let assignment = roleAssignments.get_item(i);\r\n if (assignment.get_member().get_principalType() == SP.Utilities.PrincipalType.user) {\r\n //If the user only has Limited Access, remove all permissions\r\n if (assignment.get_roleDefinitionBindings().get_count() == 1 && assignment.get_roleDefinitionBindings().getItemAtIndex(0).get_name().toLocaleLowerCase() == \"Limited Access\".toLocaleLowerCase()) {\r\n assignment.get_roleDefinitionBindings().removeAll();\r\n }\r\n else { //Else set the permissions to the role specified \r\n assignment.get_roleDefinitionBindings().removeAll();\r\n assignment.get_roleDefinitionBindings().add(newRole);\r\n }\r\n assignment.update();\r\n permissionsChanged = true;\r\n }\r\n }\r\n //Only update the item if the permissions have been changed\r\n if (permissionsChanged) {\r\n item.update();\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve();\r\n }, (sender, args) => {\r\n if (args.get_message().toLocaleLowerCase().indexOf(\"Access denied.\".toLocaleLowerCase()) >= 0 && accessDeniedExpected) {\r\n resolve();\r\n }\r\n else {\r\n reject(args.get_errorDetails());\r\n }\r\n });\r\n }\r\n else {\r\n resolve();\r\n }\r\n }, (sender, args) => {\r\n reject(args.get_errorDetails());\r\n });\r\n });\r\n }\r\n setSubmittedPermissions() {\r\n //Initialize all objects needed in order to set the permissions for this Application \r\n let clientContext = SP.ClientContext.get_current();\r\n return this.setIndividualPermissionsTo(clientContext, SP.RoleType.reader, true);\r\n }\r\n setPermissionsForMoreInformationNeeded() {\r\n //Initialize all objects needed in order to set the permissions for this Application \r\n let clientContext = SP.ClientContext.get_current();\r\n let role = clientContext.get_web().get_roleDefinitions().getByName(\"Contribute and Manage Permissions\");\r\n clientContext.load(role);\r\n return this.setIndividualPermissionsTo(clientContext, role, false);\r\n //return this.setIndividualPermissionsTo(clientContext, SP.RoleType.contributor, false);\r\n }\r\n setInitialPermission() {\r\n //Initialize all objects needed in order to set the permissions for this Application \r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n let list = web.get_lists().getById(this._listGuid);\r\n let item = list.getItemById(this.id);\r\n //let user: SP.User = web.get_currentUser();\r\n let user = web.getUserById(this.authorId);\r\n //Break the role inheretance, clear all permissions, and than apply our new set of roles\r\n item.breakRoleInheritance(true, true);\r\n //Instruct the client context to load our objects in one batch\r\n clientContext.load(web);\r\n clientContext.load(list);\r\n clientContext.load(web);\r\n clientContext.load(item);\r\n clientContext.load(user);\r\n return new Promise((resolve, reject) => {\r\n //Execute the ClientContext batch commands\r\n clientContext.executeQueryAsync((sender, args) => {\r\n //Grant the current user 'Contribute' permissions to the Application\r\n let userRoles = new SP.RoleDefinitionBindingCollection(clientContext);\r\n userRoles.add(web.get_roleDefinitions().getByType(SP.RoleType.editor));\r\n userRoles.add(web.get_roleDefinitions().getByName(\"Contribute and Manage Permissions\")); //Pure edit permission (SP.RoleType.editor) do not have the possiblity to manage permissions\r\n item.get_roleAssignments().add(user, userRoles);\r\n item.update();\r\n let roleAssignments = item.get_roleAssignments();\r\n clientContext.load(roleAssignments, \"Include(Member, RoleDefinitionBindings)\");\r\n clientContext.executeQueryAsync((sender, args) => {\r\n //Replace all permissions that are assigned to applicants and reviewers (ESC/SPS)\r\n let permissionCount = roleAssignments.get_count();\r\n for (let i = 0; i < permissionCount; i++) {\r\n let assignment = roleAssignments.get_item(i);\r\n if (assignment.get_member().get_title().toLocaleLowerCase().indexOf(\"grant applicants\") >= 0) {\r\n assignment.get_roleDefinitionBindings().removeAll();\r\n assignment.update();\r\n }\r\n else if (assignment.get_member().get_title().toLocaleLowerCase().indexOf(\"esc reviewers\") >= 0) {\r\n assignment.get_roleDefinitionBindings().removeAll();\r\n assignment.update();\r\n }\r\n }\r\n clientContext.executeQueryAsync((sender, args) => {\r\n this._hasUniquePermissions = true;\r\n resolve(true);\r\n }, (sender, args) => {\r\n reject(args);\r\n });\r\n }, (sender, args) => {\r\n reject(args);\r\n });\r\n }, (sender, args) => {\r\n reject(args);\r\n });\r\n });\r\n }\r\n toPropertyList() {\r\n let list = {};\r\n // Application details\r\n list[\"xxxxxx\"] = \"\";\r\n list[\"id\"] = this.id.toString();\r\n list[\"url\"] = this.url;\r\n list[\"division\"] = DivisionEnum[this.applicantDetails.division];\r\n if (this.applicantDetails.division == DivisionEnum.ESC) {\r\n list[\"application.partnerCountryDirectorNation\"] = this.beneficiaryNation;\r\n list[\"application.keyPriorities\"] = this.keyPriorities;\r\n list[\"application.meetingNumber\"] = this.meetingNumber;\r\n list[\"application.origin\"] = this.origin;\r\n list[\"application.partnershipFramework\"] = this.partnershipFramework;\r\n list[\"application.approvalComments\"] = this.approvalComments;\r\n list[\"application.primarySPSKeyPriority\"] = this.primaryKeyPriority;\r\n list[\"application.secondarySPSKeyPriority\"] = this.secondaryKeyPriority;\r\n list[\"application.NATOPriority\"] = this.priority;\r\n list[\"application.beneficiaryNationsSplit\"] = this.beneficiaryNationsSplit;\r\n list[\"application.region\"] = this.region;\r\n list[\"application.finalReportDueDate\"] = this.finalReportDueDate ? Application.formatDate(this.finalReportDueDate) : \"\";\r\n list[\"application.processStage\"] = this.processStage;\r\n list[\"application.ISEGEvaluators\"] = this.godParent;\r\n list[\"application.PCSCApprovalDocumentsRef\"] = this.documentReferences;\r\n list[\"application.webURL\"] = this.webURL;\r\n list[\"application.publisher\"] = this.publisher;\r\n list[\"application.publisherSubSeries\"] = this.publisherSubSeries;\r\n list[\"application.dateBooksReceived\"] = this.dateBooksReceived ? Application.formatDate(this.dateBooksReceived) : \"\";\r\n list[\"application.yearOfInitialAward\"] = this.yearOfInitialAward;\r\n list[\"application.yearOfOfficialClosure\"] = this.yearOfOfficialClosure;\r\n list[\"application.approvedBudgetCeilingEUR\"] = this.approvedBudgetCeiling;\r\n list[\"application.initialAwardTrancheAmountEUR\"] = this.initialAwardTrancheAmount;\r\n list[\"application.milestone1TrancheAmountEUR\"] = this.milestone1TrancheAmount;\r\n list[\"application.milestone2TrancheAmountEUR\"] = this.milestone2TrancheAmount;\r\n list[\"application.milestone3TrancheAmountEUR\"] = this.milestone3TrancheAmount;\r\n list[\"application.milestone4TrancheAmountEUR\"] = this.milestone4TrancheAmount;\r\n list[\"application.milestoneFinalTrancheAmountEUR\"] = this.milestoneFinalTrancheAmount;\r\n list[\"application.initialAmountEUR\"] = this.initialAmount;\r\n // User lists\r\n list[\"application.grantAdministrators\"] = this.toUserNameList(this.grantAdministrators);\r\n list[\"application.reviewers\"] = this.toUserNameList(this.reviewers);\r\n // Applicant details\r\n list[\"applicant.firstname\"] = this.applicantDetails.firstname;\r\n list[\"applicant.lastname\"] = this.applicantDetails.lastname;\r\n list[\"applicant.title\"] = (this.applicantDetails.title == \"[Unknown]\") ? \"\" : this.applicantDetails.title;\r\n list[\"applicant.professionalEmailAddress\"] = this.applicantDetails.eMailAddress;\r\n list[\"applicant.NPDName\"] = this.applicantDetails.contactPerson;\r\n list[\"applicant.NPDEmailAddress\"] = this.applicantDetails.contactEmailAddress;\r\n list[\"applicant.NPDAddress\"] = this.applicantDetails.contactAddress;\r\n list[\"applicant.NPDCountry\"] = this.applicantDetails.contactCountry;\r\n list[\"applicant.NPDNationality\"] = this.applicantDetails.contactNationality;\r\n list[\"applicant.NPDTelephoneNumber\"] = this.applicantDetails.contactTelephoneNumber;\r\n list[\"applicant.NPDInstitutionName\"] = this.applicantDetails.organizationName;\r\n list[\"applicant.organizationAddress\"] = this.applicantDetails.organizationAddress;\r\n list[\"applicant.organizationPostalCode\"] = this.applicantDetails.organizationPostalCode;\r\n list[\"applicant.organizationCity\"] = this.applicantDetails.organizationCity;\r\n list[\"applicant.organizationCountry\"] = this.applicantDetails.organizationCountry;\r\n list[\"applicant.PPDName\"] = this.applicantDetails.alternativeContactPerson;\r\n list[\"applicant.PPDAddress\"] = this.applicantDetails.alternativeContactAddress;\r\n list[\"applicant.PPDCountry\"] = this.applicantDetails.alternativeContactCountry;\r\n list[\"applicant.PPDNationality\"] = this.applicantDetails.alternativeContactNationality;\r\n list[\"applicant.PPDTelephoneNumber\"] = this.applicantDetails.telephoneNumber;\r\n list[\"applicant.PPDEmailAddress\"] = this.applicantDetails.alternativeContactEmailAddress;\r\n list[\"applicant.PPDInstitutionName\"] = this.applicantDetails.alternativeContactOrganizationName;\r\n list[\"applicant.PPDInstitutionCountry\"] = this.applicantDetails.alternativeContactOrganizationCountry;\r\n list[\"applicant.projectCoDirectorsDetails\"] = this.applicantDetails.projectCoDirectorsDetails;\r\n // Project details\r\n list[\"project.code\"] = this.projectDetails.projectCode;\r\n list[\"project.number\"] = this._projectNumber;\r\n list[\"project.synopsis\"] = this.projectDetails.projectSynopsis;\r\n list[\"project.type\"] = this.projectDetails.projectType;\r\n list[\"project.title\"] = this.projectDetails.projectDescription;\r\n list[\"project.description\"] = this.projectDetails.projectDetailedDescription;\r\n list[\"project.venue\"] = this.projectDetails.projectLocation;\r\n list[\"project.venueCity\"] = this.projectDetails.projectCity;\r\n list[\"project.venueCountry\"] = this.projectDetails.projectCountry;\r\n list[\"project.estimatedStartDate\"] = this.projectDetails.projectDate ? Application.formatDate(this.projectDetails.projectDate) : \"\";\r\n list[\"project.estimatedEndDate\"] = this.projectDetails.projectEndDate ? Application.formatDate(this.projectDetails.projectEndDate) : \"\";\r\n list[\"project.amount\"] = this.projectDetails.projectAmount;\r\n list[\"project.SPSKeyPriorities\"] = this.projectDetails.projectTopic;\r\n list[\"project.activityCode\"] = \"\";\r\n if (this.projectBudget.budgetBreakdownTemplate && this.projectBudget.budgetBreakdownTemplate.length > 6) {\r\n list[\"project.activityCode\"] = this.projectBudget.budgetBreakdownTemplate.substr(this.projectBudget.budgetBreakdownTemplate.length - 4, 3);\r\n }\r\n // Budget details\r\n list[\"budget.template\"] = this.projectBudget.budgetBreakdownTemplate;\r\n list[\"budget.currency\"] = this.projectBudget.budgetCurrency;\r\n // ESC MYP data\r\n list[\"project.NPD\"] = [];\r\n list[\"project.PPD\"] = [];\r\n list[\"project.PCD\"] = [];\r\n list[\"budget.awardAmount\"] = \"\";\r\n list[\"budget.awardAmountTextEnglish\"] = \"\";\r\n let totalAmount = 0;\r\n // Event\r\n if ((this.projectBudget.budgetBreakdownTemplate == \"Advanced Research Workshop (ARW)\"\r\n || this.projectBudget.budgetBreakdownTemplate == \"Advanced Study Institute (ASI)\"\r\n || this.projectBudget.budgetBreakdownTemplate == \"Advanced Training Course (ATC)\")\r\n && this.projectBudget.budgetBreakdown\r\n && this.projectBudget.budgetBreakdown.length > 0) {\r\n let budgetItems = JSON.parse(this.projectBudget.budgetBreakdown);\r\n Object.keys(budgetItems).forEach(key => {\r\n if (budgetItems[key].ammount && budgetItems[key].ammount.length > 0) {\r\n totalAmount += Number(budgetItems[key].ammount);\r\n }\r\n });\r\n if (totalAmount > 0) {\r\n list[\"budget.awardAmount\"] = totalAmount.toString();\r\n list[\"budget.awardAmountTextEnglish\"] = this.numToWords(totalAmount);\r\n }\r\n }\r\n // MYP\r\n if (this.projectBudget.budgetBreakdownTemplate == \"Multi-Year Project (MYP)\"\r\n && this.projectBudget.budgetBreakdown\r\n && this.projectBudget.budgetBreakdown.length > 0) {\r\n let budgetItems = JSON.parse(this.projectBudget.budgetBreakdown);\r\n //console.log(\"budgetBreakdown:\", budgetItems);\r\n Object.keys(budgetItems).forEach(key => {\r\n if (budgetItems[key].directorName && budgetItems[key].directorName.length > 0) {\r\n if (budgetItems[key].taskNumber == \"M1-NPD\") {\r\n list[\"project.NPD\"] = [{\r\n \"description\": this.removeMilestone(budgetItems[key].description),\r\n \"name\": budgetItems[key].directorName,\r\n \"country\": budgetItems[key].directorCountry,\r\n \"address\": budgetItems[key].directorAddress\r\n }];\r\n }\r\n else if (budgetItems[key].taskNumber == \"M1-PPD\") {\r\n list[\"project.PPD\"] = [{\r\n \"description\": this.removeMilestone(budgetItems[key].description),\r\n \"name\": budgetItems[key].directorName,\r\n \"country\": budgetItems[key].directorCountry,\r\n \"address\": budgetItems[key].directorAddress\r\n }];\r\n }\r\n else if (budgetItems[key].taskNumber.substr(0, 2) == \"M1\") {\r\n list[\"project.PCD\"].push({\r\n \"description\": this.removeMilestone(budgetItems[key].description),\r\n \"name\": budgetItems[key].directorName,\r\n \"country\": budgetItems[key].directorCountry,\r\n \"address\": budgetItems[key].directorAddress\r\n });\r\n }\r\n if (budgetItems[key].ammount && budgetItems[key].ammount.length > 0) {\r\n totalAmount += Number(budgetItems[key].ammount);\r\n }\r\n }\r\n });\r\n if (totalAmount > 0) {\r\n list[\"budget.awardAmount\"] = totalAmount.toString();\r\n list[\"budget.awardAmountTextEnglish\"] = this.numToWords(totalAmount);\r\n }\r\n }\r\n }\r\n else if (this.applicantDetails.division == DivisionEnum.PDD) {\r\n list[\"application.approvalComments\"] = this.approvalComments;\r\n list[\"application.previousGrants\"] = this.agreementsDetails.previousGrants;\r\n list[\"application.publication\"] = this.agreementsDetails.publication;\r\n // User lists\r\n list[\"application.grantAdministrators\"] = this.toUserNameList(this.grantAdministrators);\r\n list[\"application.sectionSpecialists\"] = this.toUserNameList(this.sectionSpecialists);\r\n list[\"application.reviewers\"] = this.toUserNameList(this.reviewers);\r\n // Applicant details\r\n list[\"applicant.firstname\"] = this.applicantDetails.firstname;\r\n list[\"applicant.lastname\"] = this.applicantDetails.lastname;\r\n list[\"applicant.title\"] = (this.applicantDetails.title == \"[Unknown]\") ? \"\" : this.applicantDetails.title;\r\n list[\"applicant.eMailAddress\"] = this.applicantDetails.eMailAddress;\r\n list[\"applicant.organizationName\"] = this.applicantDetails.organizationName;\r\n list[\"applicant.contactPerson\"] = this.applicantDetails.contactPerson;\r\n list[\"applicant.contactEmailAddress\"] = this.applicantDetails.contactEmailAddress;\r\n list[\"applicant.alternativeContactPerson\"] = this.applicantDetails.alternativeContactPerson;\r\n list[\"applicant.alternativeContactEmailAddress\"] = this.applicantDetails.alternativeContactEmailAddress;\r\n list[\"applicant.contactTelephoneNumber\"] = this.applicantDetails.contactTelephoneNumber;\r\n list[\"applicant.telephoneNumber\"] = this.applicantDetails.telephoneNumber;\r\n list[\"applicant.organizationAddress\"] = this.applicantDetails.organizationAddress;\r\n list[\"applicant.organizationPostalCode\"] = this.applicantDetails.organizationPostalCode;\r\n list[\"applicant.organizationCity\"] = this.applicantDetails.organizationCity;\r\n list[\"applicant.organizationCountry\"] = this.applicantDetails.organizationCountry;\r\n list[\"applicant.contactAddress\"] = this.applicantDetails.contactAddress;\r\n list[\"applicant.contactCountry\"] = this.applicantDetails.contactCountry;\r\n list[\"applicant.contactNationality\"] = this.applicantDetails.contactNationality;\r\n list[\"applicant.alternativeContactAddress\"] = this.applicantDetails.alternativeContactAddress;\r\n list[\"applicant.alternativeContactCountry\"] = this.applicantDetails.alternativeContactCountry;\r\n list[\"applicant.alternativeContactNationality\"] = this.applicantDetails.alternativeContactNationality;\r\n list[\"applicant.alternativeContactOrganizationName\"] = this.applicantDetails.alternativeContactOrganizationName;\r\n list[\"applicant.alternativeContactOrganizationCountry\"] = this.applicantDetails.alternativeContactOrganizationCountry;\r\n list[\"applicant.projectCoDirectorsDetails\"] = this.applicantDetails.projectCoDirectorsDetails;\r\n // Project details\r\n list[\"project.code\"] = this.projectDetails.projectCode;\r\n list[\"project.number\"] = this._projectNumber;\r\n list[\"project.synopsis\"] = this.projectDetails.projectSynopsis;\r\n list[\"project.type\"] = this.projectDetails.projectType;\r\n list[\"project.title\"] = this.projectDetails.projectDescription;\r\n list[\"project.detailedDescription\"] = this.projectDetails.projectDetailedDescription;\r\n list[\"project.targetAudience\"] = this.projectDetails.projectTargetAudience;\r\n list[\"project.numberOfParticipants\"] = this.projectDetails.projectNumberOfParticipants;\r\n list[\"project.location\"] = this.projectDetails.projectLocation;\r\n list[\"project.city\"] = this.projectDetails.projectCity;\r\n list[\"project.country\"] = this.projectDetails.projectCountry;\r\n list[\"project.date\"] = this.projectDetails.projectDate ? Application.formatDate(this.projectDetails.projectDate) : \"\";\r\n list[\"project.endDate\"] = this.projectDetails.projectEndDate ? Application.formatDate(this.projectDetails.projectEndDate) : \"\";\r\n list[\"project.amount\"] = this.projectDetails.projectAmount;\r\n list[\"project.topic\"] = this.projectDetails.projectTopic;\r\n list[\"project.representative\"] = this.projectDetails.projectRepresentative;\r\n list[\"project.activityCode\"] = \"\";\r\n if (this.projectBudget.budgetBreakdownTemplate && this.projectBudget.budgetBreakdownTemplate.length > 6) {\r\n list[\"project.activityCode\"] = this.projectBudget.budgetBreakdownTemplate.substr(this.projectBudget.budgetBreakdownTemplate.length - 4, 3);\r\n }\r\n // Budget details\r\n list[\"budget.template\"] = this.projectBudget.budgetBreakdownTemplate;\r\n list[\"budget.currency\"] = this.projectBudget.budgetCurrency;\r\n }\r\n return list;\r\n }\r\n toUserNameList(userArray) {\r\n let nameList = \"\";\r\n if (userArray && Array.isArray(userArray) && userArray.length > 0) {\r\n userArray.forEach(row => {\r\n if (row && row.name && row.name.length > 0) {\r\n nameList += (nameList.length > 0 ? \"; \" : \"\") + row.name;\r\n }\r\n });\r\n }\r\n return nameList;\r\n }\r\n /**\r\n * Convert number to English words.\r\n * @return {string} The number as words.\r\n */\r\n numToWords(num) {\r\n var th = ['', 'thousand', 'million', 'billion', 'trillion'];\r\n var dg = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];\r\n var tn = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];\r\n var tw = ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];\r\n var s = num.toString();\r\n //s = s.toString();\r\n //s = s.replace(/[\\, ]/g, '');\r\n //if (s != parseFloat(s)) return 'not a number';\r\n var x = s.indexOf('.');\r\n if (x == -1)\r\n x = s.length;\r\n if (x > 15)\r\n return 'too big';\r\n var n = s.split('');\r\n var str = '';\r\n var sk = 0;\r\n for (var i = 0; i < x; i++) {\r\n if ((x - i) % 3 == 2) {\r\n if (n[i] == '1') {\r\n str += tn[Number(n[i + 1])] + ' ';\r\n i++;\r\n sk = 1;\r\n }\r\n else if (n[i] != \"0\") {\r\n str += tw[Number(n[i]) - 2] + ' ';\r\n sk = 1;\r\n }\r\n }\r\n else if (n[i] != \"0\") { // 0235\r\n str += dg[n[i]] + ' ';\r\n if ((x - i) % 3 == 0)\r\n str += 'hundred ';\r\n sk = 1;\r\n }\r\n if ((x - i) % 3 == 1) {\r\n if (sk)\r\n str += th[(x - i - 1) / 3] + ' ';\r\n sk = 0;\r\n }\r\n }\r\n if (x != s.length) {\r\n var y = s.length;\r\n str += 'point ';\r\n for (var i = x + 1; i < y; i++)\r\n str += dg[n[i]] + ' ';\r\n }\r\n return str.replace(/\\s+/g, ' ').trim();\r\n }\r\n /**\r\n * Format Date value similar to \"23 November 2018\".\r\n * @return {string} The formatted date.\r\n */\r\n static formatDate(date) {\r\n const monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\r\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\r\n ];\r\n return date ? date.getDate() + \" \" + monthNames[date.getMonth()] + \" \" + date.getFullYear() : \"\";\r\n }\r\n /**\r\n * Remove leading milestone code from text (e.g. M1-).\r\n * @return {string} Cleaned text.\r\n */\r\n removeMilestone(text) {\r\n var searchPattern = new RegExp('^M[0-9]-');\r\n if (text && text.length > 3 && searchPattern.test(text)) {\r\n return text.substr(3);\r\n }\r\n else {\r\n return text;\r\n }\r\n }\r\n /**\r\n * Retrieves the Application from the contect. Note that this function will only work from the DocumentSet Homepage.\r\n * @return {Promise} The Application object in a Promise\r\n */\r\n static getFromContext() {\r\n if (window.docsetHomePageData && window.docsetHomePageData.idDocSet) {\r\n let docSetId = Number(window.docsetHomePageData.idDocSet);\r\n if (Application._applicationFromContext != null && Application._applicationFromContext.id == docSetId) {\r\n return Promise.resolve(Application._applicationFromContext);\r\n }\r\n else if (Application._isRetrievingApplicationForContext) {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n Application.getFromContext().then(application => {\r\n resolve(application);\r\n }).catch(e => {\r\n reject(e);\r\n });\r\n }, 500);\r\n });\r\n }\r\n else {\r\n Application._isRetrievingApplicationForContext = true;\r\n return new Promise((resolve, reject) => {\r\n Application.getById(docSetId).then(application => {\r\n Application._applicationFromContext = application;\r\n Application._isRetrievingApplicationForContext = false;\r\n resolve(application);\r\n });\r\n });\r\n }\r\n }\r\n else {\r\n Promise.reject(\"Invalid application context\");\r\n }\r\n }\r\n /**\r\n * Retrieves the Application by ID.\r\n * @return {Promise} The Application object in a Promise\r\n */\r\n static getById(id) {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + id + \")\";\r\n url = url + \"?$select=*,HasUniqueRoleAssignments,FileRef,FileLeafRef,natoEncodedKeyPriorities,\";\r\n url = url + \"Author/Title,Author/Name,AuthorId,natoGrantAdministrators/Title,natoGrantAdministrators/Name,natoGrantAdministrators/ID,natoAdvisors/Title,natoAdvisors/Name,natoAdvisors/ID,natoSeniorAdvisors/Title,natoSeniorAdvisors/Name,natoSeniorAdvisors/ID,natoReviewers/Title,natoReviewers/Name,natoReviewers/ID,\";\r\n url = url + \"natoAssignedHeadOfSection/Title,natoAssignedHeadOfSection/Name,natoAssignedHeadOfSection/ID,natoSectionSpecialist/Title,natoSectionSpecialist/Name,natoSectionSpecialist/ID\";\r\n url = url + \"&$expand=Author,natoGrantAdministrators,natoAdvisors,natoSeniorAdvisors,natoReviewers,natoAssignedHeadOfSection,natoSectionSpecialist\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n let application = new Application(odata);\r\n resolve(application);\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n /**\r\n * Retrieves the Application by ID.\r\n * @return {Promise} The Application object in a Promise\r\n */\r\n static getByIdWithFields(id, fields, logExceptionOnError = true) {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + id + \")\";\r\n url = url + \"?$select=\" + fields.toString();\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"GET\", undefined, undefined, logExceptionOnError)\r\n .then(response => {\r\n response.json().then(odata => {\r\n let application = new Application(odata);\r\n resolve(application);\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n ApproveBudget(comments, attachment, oldAttachment) {\r\n LogMessage.Log(\"Approving budget for application '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n return this.SaveBudgetApproval(comments, attachment, oldAttachment, 'Approve');\r\n }\r\n RejectBudget(comments, attachment, oldAttachment) {\r\n LogMessage.Log(\"Rejecting budget for application '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n return this.SaveBudgetApproval(comments, attachment, oldAttachment, 'Reject');\r\n }\r\n SaveBudgetApproval(comments, attachment, oldAttachment, status) {\r\n this._commentsBO = comments;\r\n this._attachmentBO = attachment;\r\n this._oldAttachmentBO = oldAttachment;\r\n this._statusBO = status;\r\n return new Promise((resolve, reject) => {\r\n if (this._budgetApproval && this._budgetApproval != \"\") {\r\n this.updateApprovalItem().then(() => {\r\n this.updateFields([{ internalFieldName: \"natoBudgetApproval\", fieldValue: this._internalFieldValueBO }]).then(() => {\r\n resolve();\r\n }).catch(reason => {\r\n });\r\n });\r\n }\r\n else {\r\n this.createApprovalItem().then(() => {\r\n this.updateFields([{ internalFieldName: \"natoBudgetApproval\", fieldValue: this._internalFieldValueBO }]).then(() => {\r\n resolve();\r\n }).catch(reason => {\r\n });\r\n });\r\n }\r\n });\r\n }\r\n //Create a new ApprovalItem\r\n createApprovalItem() {\r\n //We use the ClientContext for this, because the REST service cannot create items in a folder\r\n let context = SP.ClientContext.get_current();\r\n let list = context.get_web().get_lists().getByTitle(ListNames.GRANT_APPROVALS);\r\n let folderPath = _spPageContextInfo.webServerRelativeUrl + \"/Lists/\" + ListNames.GRANT_APPROVALS + \"/Budget Approvals\";\r\n //Make sure we create the ApprovalItem in the correct folder\r\n let itemCreateInfo = new SP.ListItemCreationInformation();\r\n itemCreateInfo.set_folderUrl(folderPath);\r\n //Add the rest of the metadata\r\n var newListItem = list.addItem(itemCreateInfo);\r\n newListItem.set_item(\"Title\", \"\" + this._commentsBO);\r\n newListItem.set_item(\"natoApprovalStatus\", this._statusBO);\r\n newListItem.set_item(\"natoGrantDetails\", null /*this.getLinkToCurrentItem()*/);\r\n newListItem.update();\r\n return new Promise((resolve, reject) => {\r\n context.executeQueryAsync((sender, args) => {\r\n let newValue = newListItem.get_id() + \";#\" + this._statusBO;\r\n this._internalFieldValueBO = newValue;\r\n this.uploadAttachment().then(() => {\r\n resolve(newValue);\r\n }).catch((reason) => {\r\n //Something went wrong saving the attachment\r\n LogMessage.Log(\"Unable to save the attachment with Approval Item '\" + newListItem.get_id() + \"': \" + reason, this, LogSeverityEnum.Error);\r\n });\r\n }, (sender, args) => {\r\n LogMessage.Log(\"Error creating approval item in '\" + folderPath + \"': \" + args.get_message(), this, LogSeverityEnum.Error);\r\n reject(args);\r\n });\r\n });\r\n }\r\n updateApprovalItem() {\r\n let approvalIdStr = this._budgetApproval.split(\";#\")[0];\r\n let approvalId = Number(approvalIdStr);\r\n let item = {\r\n \"Title\": \"\" + this._commentsBO,\r\n \"natoApprovalStatus\": this._statusBO,\r\n \"natoGrantDetails\": {\r\n \"Description\": \"Details\",\r\n \"Url\": null /*this.getLinkToCurrentItem()*/\r\n },\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApprovalsListItem\" }\r\n };\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANT_APPROVALS + \"')/items(\" + approvalId + \")\";\r\n let headers = { \"X-HTTP-Method\": \"MERGE\", \"If-Match\": \"*\" };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", item, headers)\r\n .then(response => {\r\n this._internalFieldValueBO = approvalId + \";#\" + this._statusBO;\r\n this.uploadAttachment().then(() => {\r\n resolve();\r\n }).catch((reason) => {\r\n LogMessage.Log(\"Unable to save the attachment with Approval Item '\" + approvalId + \"': \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n uploadAttachment() {\r\n if (this._attachmentBO != null && this._attachmentBO.isNew) {\r\n return new Promise((resolve, reject) => {\r\n let approvalIdStr = this._internalFieldValueBO.split(\";#\")[0];\r\n let approvalId = Number(approvalIdStr);\r\n let promises = new Array();\r\n if (this._oldAttachmentBO != null) {\r\n let deleteOldAttachmentPromise = this._oldAttachmentBO.Delete(ListNames.GRANT_APPROVALS, approvalId);\r\n promises.push(deleteOldAttachmentPromise);\r\n }\r\n let uploadAttachmentPromise = this._attachmentBO.Upload(ListNames.GRANT_APPROVALS, approvalId);\r\n promises.push(uploadAttachmentPromise);\r\n Promise.all(promises).then(() => {\r\n resolve();\r\n });\r\n });\r\n }\r\n else {\r\n return Promise.resolve(true);\r\n }\r\n }\r\n}\r\nApplication._isRetrievingApplicationForContext = false;\r\n//# sourceMappingURL=Application.jsx.map","import { SharePointRestService, ListNames, LogMessage, LogSeverityEnum, DivisionEnum, User } from \"../index\";\r\nexport class ApplicantDetails {\r\n constructor(item) {\r\n this._currentItem = item;\r\n if (this._currentItem != null) {\r\n this._id = item.Id;\r\n this._itemTitle = item.Title;\r\n this._code = item.natoCode;\r\n this._editor = (item.Editor != null) ? item.Editor.Title : null;\r\n this._modifiedOn = new Date(Date.parse(item.Modified));\r\n this._division = Number(DivisionEnum[item.natoDivision]);\r\n this._editUserId = item.natoEditUserId;\r\n this._firstname = item.natoFirstname;\r\n this._lastname = item.natoLastname;\r\n this._title = item.natoTitle;\r\n this._eMailAddress = item.natoEMailAddress;\r\n //this._address = item.natoAddress;\r\n //this._postalCode = item.natoPostalCode;\r\n //this._city = item.natoCity; \r\n //this._country = item.natoCountry;\r\n this._organizationName = item.natoOrganization;\r\n this._contactPerson = item.natoContactPerson;\r\n this._contactEmailAddress = item.natoContactEmailAddress;\r\n this._alternativeContactPerson = item.natoAlternativeContactPerson;\r\n this._alternativeContactEmailAddress = item.natoAlternativeContactEmailAddress;\r\n this._contactTelephoneNumber = item.natoContactTelephoneNumber;\r\n this._telephoneNumber = item.natoTelephoneNumber;\r\n this._organizationAddress = item.natoOrganizationAddress;\r\n this._organizationPostalCode = item.natoOrganizationPostalCode;\r\n this._organizationCity = item.natoOrganizationCity;\r\n this._organizationCountry = item.natoOrganizationCountry;\r\n //this._organizationBankAccountHolder = item.natoOrganizationBankAccountHolder;\r\n //this._organizationBankAccountIBAN = item.natoOrganizationBankAccountIBAN;\r\n //this._organizationBankAccountSWIFT = item.natoOrganizationBankAccountSWIFT;\r\n //this._organizationBankAccountABACode = item.natoOrganizationBankAccountABACode;\r\n //this._organizationBankAccountBankName = item.natoOrganizationBankAccountBankName;\r\n this._invitedEmails = item.natoInvitedEmails;\r\n this._contactAddress = item.natoContactAddress;\r\n this._contactCountry = item.natoContactCountry;\r\n this._contactNationality = item.natoContactNationality;\r\n this._alternativeContactAddress = item.natoAlternativeContactAddress;\r\n this._alternativeContactCountry = item.natoAlternativeContactCountry;\r\n this._alternativeContactNationality = item.natoAlternativeContactNationality;\r\n this._alternativeContactOrganizationName = item.natoAlternativeContactOrganization;\r\n this._alternativeContactOrganizationCountry = item.natoAlternativeContactOrganizationCountry;\r\n this._projectCoDirectorsDetails = item.natoProjectCoDirectorsDetails;\r\n }\r\n }\r\n get spItem() {\r\n return this._currentItem;\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get itemTitle() {\r\n return this._itemTitle;\r\n }\r\n set itemTitle(itemTitle) {\r\n this._itemTitle = itemTitle;\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n set code(code) {\r\n this._code = code;\r\n }\r\n get division() {\r\n return this._division;\r\n }\r\n set division(division) {\r\n this._division = division;\r\n }\r\n //UserId editting the Application\r\n set editUserId(editUserId) {\r\n this._editUserId = editUserId;\r\n }\r\n //UserId editting the Application\r\n get editUserId() {\r\n return this._editUserId;\r\n }\r\n get editor() {\r\n return this._editor;\r\n }\r\n set editor(editor) {\r\n this._editor = editor;\r\n }\r\n get modifiedOn() {\r\n return this._modifiedOn;\r\n }\r\n set modifiedOn(modifiedOn) {\r\n this._modifiedOn = modifiedOn;\r\n }\r\n get firstname() {\r\n return this._firstname;\r\n }\r\n set firstname(firstname) {\r\n this._firstname = firstname;\r\n }\r\n get lastname() {\r\n return this._lastname;\r\n }\r\n set lastname(lastname) {\r\n this._lastname = lastname;\r\n }\r\n get title() {\r\n return this._title;\r\n }\r\n set title(title) {\r\n this._title = title;\r\n }\r\n get eMailAddress() {\r\n return this._eMailAddress;\r\n }\r\n set eMailAddress(eMailAddress) {\r\n this._eMailAddress = eMailAddress;\r\n }\r\n //get address(): string {\r\n // return this._address;\r\n //}\r\n //set address(address: string) {\r\n // this._address = address;\r\n //}\r\n //get postalCode(): string {\r\n // return this._postalCode;\r\n //}\r\n //set postalCode(postalCode: string) {\r\n // this._postalCode = postalCode;\r\n //}\r\n //get city(): string {\r\n // return this._city;\r\n //}\r\n //set city(city: string) {\r\n // this._city = city;\r\n //}\r\n //get country(): string {\r\n // return this._country;\r\n //}\r\n //set country(country: string) {\r\n // this._country = country;\r\n //}\r\n get organizationName() {\r\n return this._organizationName;\r\n }\r\n set organizationName(organizationName) {\r\n this._organizationName = organizationName;\r\n }\r\n get contactPerson() {\r\n return this._contactPerson;\r\n }\r\n set contactPerson(contactPerson) {\r\n this._contactPerson = contactPerson;\r\n }\r\n get contactEmailAddress() {\r\n return this._contactEmailAddress;\r\n }\r\n set contactEmailAddress(contactEmailAddress) {\r\n this._contactEmailAddress = contactEmailAddress;\r\n }\r\n get alternativeContactPerson() {\r\n return this._alternativeContactPerson;\r\n }\r\n set alternativeContactPerson(alternativeContactPerson) {\r\n this._alternativeContactPerson = alternativeContactPerson;\r\n }\r\n get alternativeContactEmailAddress() {\r\n return this._alternativeContactEmailAddress;\r\n }\r\n set alternativeContactEmailAddress(alternativeContactEmailAddress) {\r\n this._alternativeContactEmailAddress = alternativeContactEmailAddress;\r\n }\r\n get contactTelephoneNumber() {\r\n return this._contactTelephoneNumber;\r\n }\r\n set contactTelephoneNumber(contactTelephoneNumber) {\r\n this._contactTelephoneNumber = contactTelephoneNumber;\r\n }\r\n get telephoneNumber() {\r\n return this._telephoneNumber;\r\n }\r\n set telephoneNumber(telephoneNumber) {\r\n this._telephoneNumber = telephoneNumber;\r\n }\r\n get organizationAddress() {\r\n return this._organizationAddress;\r\n }\r\n set organizationAddress(organizationAddress) {\r\n this._organizationAddress = organizationAddress;\r\n }\r\n get organizationPostalCode() {\r\n return this._organizationPostalCode;\r\n }\r\n set organizationPostalCode(organizationPostalCode) {\r\n this._organizationPostalCode = organizationPostalCode;\r\n }\r\n get organizationCity() {\r\n return this._organizationCity;\r\n }\r\n set organizationCity(organizationCity) {\r\n this._organizationCity = organizationCity;\r\n }\r\n get organizationCountry() {\r\n return this._organizationCountry;\r\n }\r\n set organizationCountry(organizationCountry) {\r\n this._organizationCountry = organizationCountry;\r\n }\r\n //get organizationBankAccountHolder(): string {\r\n // return this._organizationBankAccountHolder;\r\n //}\r\n //set organizationBankAccountHolder(organizationBankAccountHolder: string) {\r\n // this._organizationBankAccountHolder = organizationBankAccountHolder;\r\n //}\r\n //get organizationBankAccountIBAN(): string {\r\n // return this._organizationBankAccountIBAN;\r\n //}\r\n //set organizationBankAccountIBAN(organizationBankAccountIBAN: string) {\r\n // this._organizationBankAccountIBAN = organizationBankAccountIBAN;\r\n //}\r\n //get organizationBankAccountSWIFT(): string {\r\n // return this._organizationBankAccountSWIFT;\r\n //}\r\n //set organizationBankAccountSWIFT(organizationBankAccountSWIFT: string) {\r\n // this._organizationBankAccountSWIFT = organizationBankAccountSWIFT;\r\n //}\r\n //get organizationBankAccountABACode(): string {\r\n // return this._organizationBankAccountABACode;\r\n //}\r\n //set organizationBankAccountABACode(organizationBankAccountABACode: string) {\r\n // this._organizationBankAccountABACode = organizationBankAccountABACode;\r\n //}\r\n //get organizationBankAccountBankName(): string {\r\n // return this._organizationBankAccountBankName;\r\n //}\r\n //set organizationBankAccountBankName(organizationBankAccountBankName: string) {\r\n // this._organizationBankAccountBankName = organizationBankAccountBankName;\r\n //}\r\n get invitedEmails() {\r\n return this._invitedEmails;\r\n }\r\n set invitedEmails(invitedEmails) {\r\n this._invitedEmails = invitedEmails;\r\n }\r\n get contactAddress() {\r\n return this._contactAddress;\r\n }\r\n set contactAddress(contactAddress) {\r\n this._contactAddress = contactAddress;\r\n }\r\n get contactCountry() {\r\n return this._contactCountry;\r\n }\r\n set contactCountry(contactCountry) {\r\n this._contactCountry = contactCountry;\r\n }\r\n get contactNationality() {\r\n return this._contactNationality;\r\n }\r\n set contactNationality(contactNationality) {\r\n this._contactNationality = contactNationality;\r\n }\r\n get alternativeContactAddress() {\r\n return this._alternativeContactAddress;\r\n }\r\n set alternativeContactAddress(alternativeContactAddress) {\r\n this._alternativeContactAddress = alternativeContactAddress;\r\n }\r\n get alternativeContactCountry() {\r\n return this._alternativeContactCountry;\r\n }\r\n set alternativeContactCountry(alternativeContactCountry) {\r\n this._alternativeContactCountry = alternativeContactCountry;\r\n }\r\n get alternativeContactNationality() {\r\n return this._alternativeContactNationality;\r\n }\r\n set alternativeContactNationality(alternativeContactNationality) {\r\n this._alternativeContactNationality = alternativeContactNationality;\r\n }\r\n get alternativeContactOrganizationName() {\r\n return this._alternativeContactOrganizationName;\r\n }\r\n set alternativeContactOrganizationName(alternativeContactOrganizationName) {\r\n this._alternativeContactOrganizationName = alternativeContactOrganizationName;\r\n }\r\n get alternativeContactOrganizationCountry() {\r\n return this._alternativeContactOrganizationCountry;\r\n }\r\n set alternativeContactOrganizationCountry(alternativeContactOrganizationCountry) {\r\n this._alternativeContactOrganizationCountry = alternativeContactOrganizationCountry;\r\n }\r\n get projectCoDirectorsDetails() {\r\n return this._projectCoDirectorsDetails;\r\n }\r\n set projectCoDirectorsDetails(projectCoDirectorsDetails) {\r\n this._projectCoDirectorsDetails = projectCoDirectorsDetails;\r\n }\r\n get alternativeContactAlternativeEmailAddress() {\r\n return this._alternativeContactAlternativeEmailAddress;\r\n }\r\n set alternativeContactAlternativeEmailAddress(alternativeContactAlternativeEmailAddress) {\r\n this._alternativeContactAlternativeEmailAddress = alternativeContactAlternativeEmailAddress;\r\n }\r\n get alternativeContactCity() {\r\n return this._alternativeContactCity;\r\n }\r\n set alternativeContactCity(alternativeContactCity) {\r\n this._alternativeContactCity = alternativeContactCity;\r\n }\r\n get alternativeContactDepartment() {\r\n return this._alternativeContactDepartment;\r\n }\r\n set alternativeContactDepartment(alternativeContactDepartment) {\r\n this._alternativeContactDepartment = alternativeContactDepartment;\r\n }\r\n get alternativeContactFirstname() {\r\n return this._alternativeContactFirstname;\r\n }\r\n set alternativeContactFirstname(alternativeContactFirstname) {\r\n this._alternativeContactFirstname = alternativeContactFirstname;\r\n }\r\n get alternativeContactInstitute() {\r\n return this._alternativeContactInstitute;\r\n }\r\n set alternativeContactInstitute(alternativeContactInstitute) {\r\n this._alternativeContactInstitute = alternativeContactInstitute;\r\n }\r\n get alternativeContactLastname() {\r\n return this._alternativeContactLastname;\r\n }\r\n set alternativeContactLastname(alternativeContactLastname) {\r\n this._alternativeContactLastname = alternativeContactLastname;\r\n }\r\n get alternativeContactMobileNumber() {\r\n return this._alternativeContactMobileNumber;\r\n }\r\n set alternativeContactMobileNumber(alternativeContactMobileNumber) {\r\n this._alternativeContactMobileNumber = alternativeContactMobileNumber;\r\n }\r\n get alternativeContactTelephoneNumber() {\r\n return this._alternativeContactTelephoneNumber;\r\n }\r\n set alternativeContactTelephoneNumber(alternativeContactTelephoneNumber) {\r\n this._alternativeContactTelephoneNumber = alternativeContactTelephoneNumber;\r\n }\r\n get alternativeContactTitle() {\r\n return this._alternativeContactTitle;\r\n }\r\n set alternativeContactTitle(alternativeContactTitle) {\r\n this._alternativeContactTitle = alternativeContactTitle;\r\n }\r\n get alternativeContactZipCode() {\r\n return this._alternativeContactZipCode;\r\n }\r\n set alternativeContactZipCode(alternativeContactZipCode) {\r\n this._alternativeContactZipCode = alternativeContactZipCode;\r\n }\r\n get contactAlternativeEmailAddress() {\r\n return this._contactAlternativeEmailAddress;\r\n }\r\n set contactAlternativeEmailAddress(contactAlternativeEmailAddress) {\r\n this._contactAlternativeEmailAddress = contactAlternativeEmailAddress;\r\n }\r\n get prcontactCityoperty() {\r\n return this._contactCity;\r\n }\r\n set contactCity(contactCity) {\r\n this._contactCity = contactCity;\r\n }\r\n get contactDepartment() {\r\n return this._contactDepartment;\r\n }\r\n set contactDepartment(contactDepartment) {\r\n this._contactDepartment = contactDepartment;\r\n }\r\n get contactFirstname() {\r\n return this._contactFirstname;\r\n }\r\n set contactFirstname(contactFirstname) {\r\n this._contactFirstname = contactFirstname;\r\n }\r\n get contactInstitute() {\r\n return this._contactInstitute;\r\n }\r\n set contactInstitute(contactInstitute) {\r\n this._contactInstitute = contactInstitute;\r\n }\r\n get contactLastname() {\r\n return this._contactLastname;\r\n }\r\n set contactLastname(contactLastname) {\r\n this._contactLastname = contactLastname;\r\n }\r\n get contactMobileNumber() {\r\n return this._contactMobileNumber;\r\n }\r\n set contactMobileNumber(contactMobileNumber) {\r\n this._contactMobileNumber = contactMobileNumber;\r\n }\r\n get contactTitle() {\r\n return this._contactTitle;\r\n }\r\n set contactTitle(contactTitle) {\r\n this._contactTitle = contactTitle;\r\n }\r\n get contactZipCode() {\r\n return this._contactZipCode;\r\n }\r\n set contactZipCode(contactZipCode) {\r\n this._contactZipCode = contactZipCode;\r\n }\r\n Update() {\r\n //If this item was initialized with a SharePointItem in the constructor, make sure the internal references are all set\r\n if (this._currentItem != null) {\r\n this._currentItem.Title = this._itemTitle;\r\n this._currentItem.natoCode = this._code;\r\n this._currentItem.natoDivision = DivisionEnum[this._division];\r\n this._currentItem.natoFirstname = this._firstname;\r\n this._currentItem.natoLastname = this._lastname;\r\n this._currentItem.natoTitle = this._title;\r\n this._currentItem.natoEMailAddress = this._eMailAddress;\r\n //this._currentItem.natoAddress = this._address;\r\n //this._currentItem.natoPostalCode = this._postalCode;\r\n //this._currentItem.natoCity = this._city;\r\n //this._currentItem.natoCountry = this._country;\r\n this._currentItem.natoOrganization = this._organizationName;\r\n this._currentItem.natoContactPerson = this._contactPerson;\r\n this._currentItem.natoContactEmailAddress = this._contactEmailAddress;\r\n this._currentItem.natoAlternativeContactPerson = this._alternativeContactPerson;\r\n this._currentItem.natoAlternativeContactEmailAddress = this._alternativeContactEmailAddress;\r\n this._currentItem.natoContactTelephoneNumber = this._contactTelephoneNumber;\r\n this._currentItem.natoTelephoneNumber = this._telephoneNumber;\r\n this._currentItem.natoOrganizationAddress = this._organizationAddress;\r\n this._currentItem.natoOrganizationPostalCode = this._organizationPostalCode;\r\n this._currentItem.natoOrganizationCity = this._organizationCity;\r\n this._currentItem.natoOrganizationCountry = this._organizationCountry;\r\n //this._currentItem.natoOrganizationBankAccountHolder = this._organizationBankAccountHolder;\r\n //this._currentItem.natoOrganizationBankAccountIBAN = this._organizationBankAccountIBAN;\r\n //this._currentItem.natoOrganizationBankAccountSWIFT = this._organizationBankAccountSWIFT;\r\n //this._currentItem.natoOrganizationBankAccountABACode = this._organizationBankAccountABACode;\r\n //this._currentItem.natoOrganizationBankAccountBankName = this._organizationBankAccountBankName;\r\n this._currentItem.natoInvitedEmails = this._invitedEmails;\r\n this._currentItem.natoEditUserId = this._editUserId;\r\n this._currentItem.natoContactAddress = this._contactAddress;\r\n this._currentItem.natoContactCountry = this._contactCountry;\r\n this._currentItem.natoContactNationality = this._contactNationality;\r\n this._currentItem.natoAlternativeContactAddress = this._alternativeContactAddress;\r\n this._currentItem.natoAlternativeContactCountry = this._alternativeContactCountry;\r\n this._currentItem.natoAlternativeContactNationality = this._alternativeContactNationality;\r\n this._currentItem.natoAlternativeContactOrganization = this._alternativeContactOrganizationName;\r\n this._currentItem.natoAlternativeContactOrganizationCountry = this._alternativeContactOrganizationCountry;\r\n this._currentItem.natoProjectCoDirectorsDetails = this._projectCoDirectorsDetails;\r\n }\r\n //Basic item fields, these fields are needed when creating a new DocumentSet\r\n let nowDate = new Date(Date.now());\r\n let timestamp = nowDate.getFullYear() + (\"0\" + (nowDate.getMonth() + 1)).slice(-2) + (\"0\" + nowDate.getDate()).slice(-2) + (\"0\" + nowDate.getHours()).slice(-2) + (\"0\" + nowDate.getMinutes()).slice(-2) + (\"0\" + nowDate.getSeconds()).slice(-2);\r\n let title = this._itemTitle.replace(/[^0-9a-zA-Z\\s\\[\\]]/g, '') + \" \" + timestamp;\r\n let item = {\r\n \"Title\": title,\r\n \"Path\": _spPageContextInfo.webServerRelativeUrl + \"/\" + ListNames.APPLICATIONS,\r\n \"ContentTypeId\": \"0x0120D52000ECEF8712FAB50C419F9E57F98F87E9E8\",\r\n \"ContentType\": \"Application\"\r\n };\r\n //Specific fields found on the ApplicationWizard page1\r\n let additionalFields = {\r\n \"natoCode\": this._code,\r\n \"natoDivision\": DivisionEnum[this._division],\r\n \"natoFirstname\": this._firstname,\r\n \"natoLastname\": this._lastname,\r\n \"natoTitle\": this._title,\r\n \"natoEMailAddress\": this._eMailAddress,\r\n //\"natoAddress\": this._address,\r\n //\"natoPostalCode\": this._postalCode,\r\n //\"natoCity\": this._city,\r\n //\"natoCountry\": this._country,\r\n \"natoOrganization\": this._organizationName,\r\n \"natoContactPerson\": this._contactPerson,\r\n \"natoContactEmailAddress\": this._contactEmailAddress,\r\n \"natoAlternativeContactPerson\": this._alternativeContactPerson,\r\n \"natoAlternativeContactEmailAddress\": this._alternativeContactEmailAddress,\r\n \"natoContactTelephoneNumber\": this._contactTelephoneNumber,\r\n \"natoTelephoneNumber\": this._telephoneNumber,\r\n \"natoOrganizationAddress\": this._organizationAddress,\r\n \"natoOrganizationPostalCode\": this._organizationPostalCode,\r\n \"natoOrganizationCity\": this._organizationCity,\r\n \"natoOrganizationCountry\": this._organizationCountry,\r\n //\"natoOrganizationBankAccountHolder\": this._organizationBankAccountHolder,\r\n //\"natoOrganizationBankAccountIBAN\": this._organizationBankAccountIBAN,\r\n //\"natoOrganizationBankAccountSWIFT\": this._organizationBankAccountSWIFT,\r\n //\"natoOrganizationBankAccountABACode\": this._organizationBankAccountABACode,\r\n //\"natoOrganizationBankAccountBankName\": this._organizationBankAccountBankName,\r\n \"natoContactAddress\": this._contactAddress,\r\n \"natoContactCountry\": this._contactCountry,\r\n \"natoContactNationality\": this._contactNationality,\r\n \"natoAlternativeContactAddress\": this._alternativeContactAddress,\r\n \"natoAlternativeContactCountry\": this._alternativeContactCountry,\r\n \"natoAlternativeContactNationality\": this._alternativeContactNationality,\r\n \"natoAlternativeContactOrganization\": this._alternativeContactOrganizationName,\r\n \"natoAlternativeContactOrganizationCountry\": this._alternativeContactOrganizationCountry,\r\n \"natoProjectCoDirectorsDetails\": this._projectCoDirectorsDetails,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n if (this._currentItem != null || this._id > 0) {\r\n LogMessage.Log(\"Updating ApplicantDetails values '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", additionalFields, headers)\r\n .then(response => {\r\n resolve(this);\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n else {\r\n //Create a new DocumentSet\r\n LogMessage.Log(\"Creating new DocumentSet for Application\", this, LogSeverityEnum.Verbose);\r\n let context = SP.ClientContext.get_current();\r\n let applicationsList = context.get_web().get_lists().getByTitle(\"Grant Applications\");\r\n let applicationsListRootFolder = applicationsList.get_rootFolder();\r\n //let applicationDocSetContentType: SP.ContentType = applicationsList.get_contentTypes().getById(item.ContentTypeId);\r\n let applicationDocSetContentType = context.get_site().get_rootWeb().get_contentTypes().getById(item.ContentTypeId);\r\n context.load(applicationsListRootFolder);\r\n context.load(applicationDocSetContentType);\r\n return new Promise((resolve, reject) => {\r\n SP.SOD.executeFunc('sp.documentmanagement.js', 'SP.DocumentSet.DocumentSet', () => {\r\n context.executeQueryAsync((sender, args) => {\r\n let result = SP.DocumentSet.DocumentSet.create(context, applicationsListRootFolder, item.Title, applicationDocSetContentType.get_id());\r\n context.executeQueryAsync((sender, args) => {\r\n let docsetUrl = result.get_value();\r\n let relativeUrl = (_spPageContextInfo.webServerRelativeUrl + docsetUrl.replace(_spPageContextInfo.webAbsoluteUrl, '')).replace(\"//\", \"/\"); //convert to relative url\r\n //let relativeUrl: string = docsetUrl.replace(_spPageContextInfo.webAbsoluteUrl, ''); \r\n let folder = context.get_web().getFolderByServerRelativeUrl(relativeUrl);\r\n let folderItem = folder.get_listItemAllFields();\r\n context.load(folderItem);\r\n context.executeQueryAsync((sender, args) => {\r\n this._id = Number(folderItem.get_id());\r\n User.getCurrentUser().then((user) => {\r\n this._editUserId = user.id;\r\n this.UpdateEditUser().then((details) => {\r\n this.Update().then((details) => {\r\n resolve(details);\r\n });\r\n });\r\n });\r\n }, (sender, args) => {\r\n LogMessage.Log(\"Unable to retrieve the ID of the new Application DocumentSet: \" + args.get_message(), this, LogSeverityEnum.Error);\r\n reject(args.get_message());\r\n });\r\n }, (sender, args) => {\r\n LogMessage.Log(\"Unable to create a new Application DocumentSet: \" + args.get_message(), this, LogSeverityEnum.Error);\r\n reject(args.get_message());\r\n });\r\n }, (sender, args) => {\r\n LogMessage.Log(\"Unable to retrieve the data for a new Application DocumentSet: \" + args.get_message(), this, LogSeverityEnum.Error);\r\n reject(args.get_message());\r\n });\r\n });\r\n });\r\n //IMPORTANT: Since a cumalative updates, this doesn't seem to work anymore. This code has been replaced by the JSOM code above...\r\n /*\r\n //The new REST API does not support the creation of DocumentSets (yet...), however the old ListData API does.(http://www.itidea.nl/index.php/create-a-document-set-using-jsom-and-rest/)\r\n let url: string = _spPageContextInfo.webAbsoluteUrl + \"/_vti_bin/listdata.svc/\" + ListNames.APPLICATIONS;\r\n \r\n //The 'Slug'-header is needed in order to create DocumentSets\r\n let headers: any = {\r\n \"Slug\": _spPageContextInfo.webServerRelativeUrl + \"/\" + ListNames.APPLICATIONS + \"/\" + item.Title + \"|\" + item.ContentTypeId\r\n }\r\n \r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", item, headers)\r\n .then(response => {\r\n response.json().then(odata => {\r\n \r\n this._id = odata.d.Id;\r\n \r\n User.getCurrentUser().then((user) => {\r\n this._editUserId = user.id;\r\n this.UpdateEditUser().then((details: ApplicantDetails) => {\r\n this.Update().then((details: ApplicantDetails) => {\r\n resolve(details);\r\n });\r\n });\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to parse data after creating a new Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to create a new Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason)\r\n });\r\n });*/\r\n }\r\n }\r\n UpdateInvitationEmails() {\r\n //If this item was initialized with a SharePointItem in the constructor, make sure the internal references are all set\r\n if (this._currentItem != null) {\r\n this._currentItem.natoInvitedEmails = this._invitedEmails;\r\n }\r\n //Basic item fields, these fields are needed when creating a new DocumentSet\r\n let item = {\r\n \"Path\": _spPageContextInfo.webServerRelativeUrl + \"/\" + ListNames.APPLICATIONS,\r\n \"ContentTypeId\": \"0x0120D52000ECEF8712FAB50C419F9E57F98F87E9E8\",\r\n \"ContentType\": \"Application\"\r\n };\r\n //Specific fields found on the ApplicationWizard page1\r\n let additionalFields = {\r\n \"natoInvitedEmails\": this._invitedEmails,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n if (this._currentItem != null || this._id > 0) {\r\n LogMessage.Log(\"Updating ApplicantDetails natoInvitedEmails value '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", additionalFields, headers)\r\n .then(response => {\r\n resolve(this);\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n }\r\n UpdateEditUser() {\r\n //If this item was initialized with a SharePointItem in the constructor, make sure the internal references are all set\r\n if (this._currentItem != null) {\r\n this._currentItem.natoEditUserId = this._editUserId;\r\n }\r\n //Basic item fields, these fields are needed when creating a new DocumentSet\r\n let item = {\r\n \"Path\": _spPageContextInfo.webServerRelativeUrl + \"/\" + ListNames.APPLICATIONS,\r\n \"ContentTypeId\": \"0x0120D52000ECEF8712FAB50C419F9E57F98F87E9E8\",\r\n \"ContentType\": \"Application\"\r\n };\r\n //Specific fields found on the ApplicationWizard page1\r\n let additionalFields = {\r\n \"natoEditUserId\": this._editUserId,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n if (this._currentItem != null || this._id > 0) {\r\n LogMessage.Log(\"Updating ApplicantDetails natoEditUserId value '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", additionalFields, headers)\r\n .then(response => {\r\n resolve(this);\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=ApplicantDetails.jsx.map","import { SharePointRestService, ListNames } from \"../index\";\r\nexport class ProjectDetails {\r\n constructor(item) {\r\n this._currentItem = item;\r\n if (this._currentItem != null) {\r\n this._id = item.Id;\r\n this._itemTitle = item.Title;\r\n this._code = item.natoCode;\r\n this._editor = (item.Editor != null) ? item.Editor.Title : null;\r\n this._modifiedOn = new Date(Date.parse(item.Modified));\r\n this._projectCode = item.natoCode;\r\n this._projectSynopsis = item.natoSynopsis;\r\n this._projectType = item.natoProjectType;\r\n this._projectDescription = item.natoDescription;\r\n this._projectDetailedDescription = item.natoProjectDetailedDescription;\r\n this._projectTargetAudience = item.natoProjectTargetAudience;\r\n this._projectNumberOfParticipants = item.natoProjectNumberOfParticipants;\r\n this._projectLocation = item.natoProjectLocation;\r\n this._projectCity = item.natoProjectCity;\r\n this._projectCountry = item.natoProjectCountry;\r\n this._projectDate = item.natoProjectDate ? new Date(Date.parse(item.natoProjectDate)) : null;\r\n this._projectEndDate = item.natoProjectEndDate ? new Date(Date.parse(item.natoProjectEndDate)) : null;\r\n this._projectInstitutionName = item.natoProjectInstitutionName;\r\n this._projectAmount = item.natoProjectAmount;\r\n this._projectTopic = item.natoProjectTopic;\r\n this._projectRepresentative = item.natoProjectRepresentative;\r\n this._resourcesBreakdown = item.natoResourcesBreakdown;\r\n this._tasksBreakdown = item.natoTasksBreakdown;\r\n }\r\n }\r\n get spItem() {\r\n return this._currentItem;\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get itemTitle() {\r\n return this._itemTitle;\r\n }\r\n set itemTitle(itemTitle) {\r\n this._itemTitle = itemTitle;\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n set code(code) {\r\n this._code = code;\r\n }\r\n get editor() {\r\n return this._editor;\r\n }\r\n set editor(editor) {\r\n this._editor = editor;\r\n }\r\n get modifiedOn() {\r\n return this._modifiedOn;\r\n }\r\n set modifiedOn(modifiedOn) {\r\n this._modifiedOn = modifiedOn;\r\n }\r\n get projectCode() {\r\n return this._projectCode;\r\n }\r\n set projectCode(projectCode) {\r\n this._projectCode = projectCode;\r\n }\r\n get projectSynopsis() {\r\n return this._projectSynopsis;\r\n }\r\n set projectSynopsis(projectSynopsis) {\r\n this._projectSynopsis = projectSynopsis;\r\n }\r\n get projectType() {\r\n return this._projectType;\r\n }\r\n set projectType(projectType) {\r\n this._projectType = projectType;\r\n }\r\n get projectDescription() {\r\n return this._projectDescription;\r\n }\r\n set projectDescription(projectDescription) {\r\n this._projectDescription = projectDescription;\r\n }\r\n get projectDetailedDescription() {\r\n return this._projectDetailedDescription;\r\n }\r\n set projectDetailedDescription(projectDetailedDescription) {\r\n this._projectDetailedDescription = projectDetailedDescription;\r\n }\r\n get projectTargetAudience() {\r\n return this._projectTargetAudience;\r\n }\r\n set projectTargetAudience(projectTargetAudience) {\r\n this._projectTargetAudience = projectTargetAudience;\r\n }\r\n get projectNumberOfParticipants() {\r\n return this._projectNumberOfParticipants;\r\n }\r\n set projectNumberOfParticipants(projectNumberOfParticipants) {\r\n this._projectNumberOfParticipants = projectNumberOfParticipants;\r\n }\r\n get projectLocation() {\r\n return this._projectLocation;\r\n }\r\n set projectLocation(projectLocation) {\r\n this._projectLocation = projectLocation;\r\n }\r\n get projectCity() {\r\n return this._projectCity;\r\n }\r\n set projectCity(projectCity) {\r\n this._projectCity = projectCity;\r\n }\r\n get projectCountry() {\r\n return this._projectCountry;\r\n }\r\n set projectCountry(projectCountry) {\r\n this._projectCountry = projectCountry;\r\n }\r\n get projectDate() {\r\n return this._projectDate;\r\n }\r\n set projectDate(projectDate) {\r\n this._projectDate = projectDate;\r\n }\r\n get projectEndDate() {\r\n return this._projectEndDate;\r\n }\r\n set projectEndDate(projectEndDate) {\r\n this._projectEndDate = projectEndDate;\r\n }\r\n get projectInstitutionName() {\r\n return this._projectInstitutionName;\r\n }\r\n set projectInstitutionName(projectInstitutionName) {\r\n this._projectInstitutionName = projectInstitutionName;\r\n }\r\n get projectAmount() {\r\n return this._projectAmount;\r\n }\r\n set projectAmount(projectAmount) {\r\n this._projectAmount = projectAmount;\r\n }\r\n get projectTopic() {\r\n return this._projectTopic;\r\n }\r\n set projectTopic(projectTopic) {\r\n this._projectTopic = projectTopic;\r\n }\r\n get projectRepresentative() {\r\n return this._projectRepresentative;\r\n }\r\n set projectRepresentative(projectRepresentative) {\r\n this._projectRepresentative = projectRepresentative;\r\n }\r\n get workBreakdown() {\r\n return this._tasksBreakdown;\r\n }\r\n set workBreakdown(workBreakdown) {\r\n this._tasksBreakdown = workBreakdown;\r\n }\r\n get resourceBreakdown() {\r\n return this._resourcesBreakdown;\r\n }\r\n set resourceBreakdown(resourceBreakdown) {\r\n this._resourcesBreakdown = resourceBreakdown;\r\n }\r\n Update() {\r\n if (this._currentItem != null) {\r\n this._currentItem.Title = this._itemTitle;\r\n this._currentItem.natoCode = this._code;\r\n //this._currentItem.natoResourcesBreakdown = this._resourcesBreakdown;\r\n //this._currentItem.natoTasksBreakdown = this._tasksBreakdown;\r\n }\r\n let nowDate = new Date(Date.now());\r\n let timestamp = nowDate.getFullYear() + (\"0\" + (nowDate.getMonth() + 1)).slice(-2) + (\"0\" + nowDate.getDate()).slice(-2) + (\"0\" + nowDate.getHours()).slice(-2) + (\"0\" + nowDate.getMinutes()).slice(-2) + (\"0\" + nowDate.getSeconds()).slice(-2);\r\n let item = {\r\n \"Title\": this._itemTitle + \" \" + timestamp,\r\n \"Path\": _spPageContextInfo.webServerRelativeUrl + \"/\" + ListNames.APPLICATIONS,\r\n \"ContentTypeId\": \"0x0120D52000ECEF8712FAB50C419F9E57F98F87E9E8\",\r\n \"ContentType\": \"Application\"\r\n };\r\n //Specific fields found on the ApplicationWizard page2\r\n let additionalFields = {\r\n \"natoCode\": this._code,\r\n \"natoSynopsis\": this._projectSynopsis,\r\n \"natoProjectType\": this._projectType,\r\n \"natoDescription\": this._projectDescription,\r\n \"natoProjectDetailedDescription\": this._projectDetailedDescription,\r\n \"natoProjectTargetAudience\": this._projectTargetAudience,\r\n \"natoProjectNumberOfParticipants\": this._projectNumberOfParticipants,\r\n \"natoProjectLocation\": this._projectLocation,\r\n \"natoProjectCity\": this._projectCity,\r\n \"natoProjectCountry\": this._projectCountry,\r\n \"natoProjectDate\": this._projectDate,\r\n \"natoProjectEndDate\": this._projectEndDate,\r\n \"natoProjectInstitutionName\": this._projectInstitutionName,\r\n \"natoProjectAmount\": this._projectAmount,\r\n \"natoProjectTopic\": this._projectTopic,\r\n \"natoProjectRepresentative\": this._projectRepresentative,\r\n //\"natoResourcesBreakdown\": this._resourcesBreakdown,\r\n //\"natoTasksBreakdown\": this._tasksBreakdown,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n if (this._currentItem != null || this._id > 0) {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", additionalFields, headers)\r\n .then(response => {\r\n this._currentItem.natoCode = this._projectCode;\r\n this._currentItem.natoSynopsis = this._projectSynopsis;\r\n this._currentItem.natoProjectType = this._projectType;\r\n this._currentItem.natoDescription = this._projectDescription;\r\n this._currentItem.natoProjectDetailedDescription = this._projectDetailedDescription;\r\n this._currentItem.natoProjectTargetAudience = this._projectTargetAudience;\r\n this._currentItem.natoProjectNumberOfParticipants = this._projectNumberOfParticipants;\r\n this._currentItem.natoProjectLocation = this._projectLocation;\r\n this._currentItem.natoProjectCity = this._projectCity;\r\n this._currentItem.natoProjectCountry = this._projectCountry;\r\n this._currentItem.natoProjectDate = this._projectDate;\r\n this._currentItem.natoProjectEndDate = this._projectEndDate;\r\n this._currentItem.natoProjectInstitutionName = this._projectInstitutionName;\r\n this._currentItem.natoProjectAmount = this._projectAmount;\r\n this._currentItem.natoProjectTopic = this._projectTopic;\r\n this._currentItem.natoProjectRepresentative = this._projectRepresentative;\r\n resolve(this);\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n else {\r\n //The new REST API does not support the creation of DocumentSets (yet...), however the old ListData API does.(http://www.itidea.nl/index.php/create-a-document-set-using-jsom-and-rest/)\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_vti_bin/listdata.svc/\" + ListNames.APPLICATIONS;\r\n //The 'Slug'-header is needed in order to create DocumentSets\r\n let headers = {\r\n \"Slug\": _spPageContextInfo.webServerRelativeUrl + \"/\" + ListNames.APPLICATIONS + \"/\" + item.Title + \"|\" + item.ContentTypeId\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", item, headers)\r\n .then(response => {\r\n response.json().then(odata => {\r\n this._id = odata.d.Id;\r\n this.Update().then((details) => {\r\n resolve(details);\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=ProjectDetails.jsx.map","import { SharePointRestService, ListNames } from \"../index\";\r\nexport class Budget {\r\n constructor(item) {\r\n this._budgetFilename = \"budget.nbf\";\r\n this._dataLoaded = false;\r\n this._currentItem = item;\r\n if (this._currentItem != null) {\r\n this._id = item.Id;\r\n this._itemTitle = item.Title;\r\n this._code = item.natoCode;\r\n this._editor = (item.Editor != null) ? item.Editor.Title : null;\r\n this._modifiedOn = new Date(Date.parse(item.Modified));\r\n }\r\n }\r\n get spItem() {\r\n return this._currentItem;\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get itemTitle() {\r\n return this._itemTitle;\r\n }\r\n set itemTitle(itemTitle) {\r\n this._itemTitle = itemTitle;\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n set code(code) {\r\n this._code = code;\r\n }\r\n get editor() {\r\n return this._editor;\r\n }\r\n set editor(editor) {\r\n this._editor = editor;\r\n }\r\n get modifiedOn() {\r\n return this._modifiedOn;\r\n }\r\n set modifiedOn(modifiedOn) {\r\n this._modifiedOn = modifiedOn;\r\n }\r\n get dummyValue() {\r\n return this._dummyValue;\r\n }\r\n set dummyValue(dummyValue) {\r\n this._dummyValue = dummyValue;\r\n }\r\n loadData() {\r\n if (this._dataLoaded) {\r\n return Promise.resolve(true);\r\n }\r\n let itemUrl = encodeURIComponent(_spPageContextInfo.webServerRelativeUrl + \"/\" + ListNames.APPLICATIONS + \"/\" + this.itemTitle + \"/\" + this._budgetFilename);\r\n let budgetFileUrl = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/GetFileByServerRelativeUrl('\" + itemUrl + \"')/$value\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetchRaw(budgetFileUrl, \"GET\").then((result) => {\r\n result.json().then(budgetData => {\r\n this._dummyValue = budgetData.foo;\r\n this._dataLoaded = true;\r\n resolve(true);\r\n }).catch(reason => {\r\n resolve(false);\r\n });\r\n }).catch((reason) => {\r\n resolve(false);\r\n });\r\n });\r\n }\r\n Update() {\r\n let serializableItem = {\r\n foo: this._dummyValue,\r\n bar: new Date(Date.now())\r\n };\r\n let currentItemUrl = encodeURIComponent(_spPageContextInfo.webServerRelativeUrl + \"/\" + ListNames.APPLICATIONS + \"/\" + this.itemTitle);\r\n let uploadUrl = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/GetFolderByServerRelativeUrl('\" + currentItemUrl + \"')/Files/add(url='\" + this._budgetFilename + \"',overwrite=true)\";\r\n let blob = new Blob([JSON.stringify(serializableItem)], { type: \"application/json\" });\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetchRaw(uploadUrl, \"POST\", blob).then((result) => {\r\n resolve(this);\r\n }).catch((reason) => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=Budget.jsx.map","import { SharePointRestService, ListNames, LogMessage, LogSeverityEnum, LocalStorageCache } from \"../index\";\r\nexport class ApplicationAttachments {\r\n constructor(item) {\r\n this._dataLoaded = false;\r\n this._currentItem = item;\r\n if (this._currentItem != null) {\r\n this._id = item.Id;\r\n this._itemTitle = item.Title;\r\n this._code = item.natoCode;\r\n this._editor = (item.Editor != null) ? item.Editor.Title : null;\r\n this._modifiedOn = new Date(Date.parse(item.Modified));\r\n }\r\n }\r\n get spItem() {\r\n return this._currentItem;\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get itemTitle() {\r\n return this._itemTitle;\r\n }\r\n set itemTitle(itemTitle) {\r\n this._itemTitle = itemTitle;\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n set code(code) {\r\n this._code = code;\r\n }\r\n get editor() {\r\n return this._editor;\r\n }\r\n set editor(editor) {\r\n this._editor = editor;\r\n }\r\n get modifiedOn() {\r\n return this._modifiedOn;\r\n }\r\n set modifiedOn(modifiedOn) {\r\n this._modifiedOn = modifiedOn;\r\n }\r\n get documentsSetContentsUrl() {\r\n let url = _spPageContextInfo.webServerRelativeUrl + \"/SitePages/DocSetContents.aspx?ID=\" + this._id + \"&List=\" + this._listId + \"&RootFolder=\" + encodeURIComponent(this._rootFolder.replace(/\\/$/, \"\"));\r\n return url;\r\n }\r\n getDefaultDocuments(projectType) {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.DOCUMENT_TEMPLATES + \"')/items?$select=ID,FileLeafRef,FileRef,ContentType/Name&$expand=ContentType&$filter=(natoProjectType eq '\" + projectType + \"' or natoProjectType eq 'Generic') and startswith(ContentTypeId,'0x010100BF34207CB61DED4BA4935F0FF1537421')\";\r\n return new Promise((resolve, reject) => {\r\n //Retrieve the temlates from the 'Default documents' library using a REST call\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n //The list is empty, resolve\r\n if (odata.value.length == 0) {\r\n resolve([]);\r\n }\r\n else {\r\n let allFilenames = new Array();\r\n for (let i = 0; i < odata.value.length; i++) {\r\n if ((\"\" + odata.value[i].ContentType.Name).toLocaleUpperCase() == \"DEFAULT DOCUMENT\") {\r\n let filename = odata.value[i].FileLeafRef; //FileLeafRef is the filename\r\n allFilenames.push(filename);\r\n }\r\n }\r\n resolve(allFilenames);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n provisionDefaultDocuments(projectType) {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.DOCUMENT_TEMPLATES + \"')/items?$select=ID,FileLeafRef,FileRef,ContentType/Name&$expand=ContentType&$filter=(natoProjectType eq '\" + projectType + \"' or natoProjectType eq 'Generic') and startswith(ContentTypeId,'0x010100BF34207CB61DED4BA4935F0FF1537421')\";\r\n return new Promise((resolve, reject) => {\r\n //Retrieve the temlates from the 'Default documents' library using a REST call\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n //The list is empty, resolve\r\n if (odata.value.length == 0) {\r\n resolve([]);\r\n }\r\n else {\r\n let allCopyPromises = new Array();\r\n let allFilenames = new Array();\r\n for (let i = 0; i < odata.value.length; i++) {\r\n if ((\"\" + odata.value[i].ContentType.Name).toLocaleUpperCase() == \"DEFAULT DOCUMENT\") {\r\n let itemId = Number(odata.value[i].ID);\r\n let filename = odata.value[i].FileLeafRef; //FileLeafRef is the filename\r\n let siteRelativeUrl = odata.value[i].FileRef; //FileRef is the SiteRelativeUrl of the file \r\n let newFilename = this._rootFolder + filename;\r\n let serviceUrl = _spPageContextInfo.webServerRelativeUrl + \"/_api/web/GetFileByServerRelativeUrl('\" + encodeURIComponent(siteRelativeUrl) + \"')/copyTo(strNewUrl='\" + newFilename + \"', bOverWrite=true)\";\r\n allCopyPromises.push(SharePointRestService.fetch(serviceUrl, \"POST\"));\r\n allFilenames.push(filename);\r\n }\r\n }\r\n Promise.all(allCopyPromises).then(() => {\r\n resolve(allFilenames);\r\n }).catch(reason => {\r\n LogMessage.Log(reason, this, LogSeverityEnum.Error);\r\n });\r\n }\r\n });\r\n });\r\n });\r\n }\r\n loadData() {\r\n if (this._dataLoaded) {\r\n return Promise.resolve(true);\r\n }\r\n let rootFolder = _spPageContextInfo.webServerRelativeUrl + \"/\" + ListNames.APPLICATIONS + \"/\" + this.itemTitle + \"/\";\r\n let cacheKey = \"ListId:\" + ListNames.APPLICATIONS + \"_\" + _spPageContextInfo.webTitle + \"_\" + _spPageContextInfo.webServerRelativeUrl;\r\n let cachedListId = LocalStorageCache.tryGetFromCache(cacheKey, (cachedData) => { return new SP.Guid(cachedData); }, new Date(new Date(0).setHours(4)));\r\n if (cachedListId != null) {\r\n this._listId = cachedListId;\r\n this._rootFolder = rootFolder;\r\n this._dataLoaded = true;\r\n return Promise.resolve(true);\r\n }\r\n let listDetailsServiceUrl = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/Lists/\" + ListNames.APPLICATIONS + \"/?$select=Id\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(listDetailsServiceUrl).then((result) => {\r\n result.json().then(listData => {\r\n this._listId = new SP.Guid(listData.Id);\r\n this._rootFolder = rootFolder;\r\n this._dataLoaded = true;\r\n LocalStorageCache.tryStoreInCache(cacheKey, this._listId.toString());\r\n resolve(true);\r\n }).catch(reason => {\r\n resolve(false);\r\n });\r\n }).catch((reason) => {\r\n resolve(false);\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=ApplicationAttachments.jsx.map","import DocxTemplater from \"docxtemplater\";\r\nimport JSZip from \"jszip\";\r\nimport { SharePointRestService, Application, DivisionEnum, User } from \"../index\";\r\nexport class DocumentGenerator {\r\n /**\r\n * Creates a new DocumentGenerator\r\n * @param {string} siteRelativeTemplateUrl The path of the docx-template specified as the Site Relative URL (/subsite/doclib/folder/documentTemplate.docx)\r\n * @param {boolean} showProgressDialog Set to 'true' to show a ProgressDialog, or false to run this in quit mode\r\n */\r\n constructor(siteRelativeTemplateUrl, showProgressDialog = true, relativeTo = \"Web\") {\r\n this._openDocumentMimeType = \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\r\n this._closeDialogHtml = \"
Close\";\r\n this._templateUrl = siteRelativeTemplateUrl;\r\n this._templateEngine = new DocxTemplater();\r\n this._templateFile = null;\r\n this._showProgressDialog = showProgressDialog;\r\n this._relativeTo = relativeTo;\r\n }\r\n /**\r\n * Merges the template with the provided data, replacing all text in {...} inside the template with values in the template data\r\n * @param {{[key:string]: string}} templateData A collection of key-value pairs to merge with the template. If omitted or null, data from the current page contect will be used\r\n * @return {Promise<>} A promise to indicate the merge was completed\r\n */\r\n merge(templateData) {\r\n if (templateData == null) {\r\n templateData = this.getContextualObject();\r\n }\r\n else {\r\n Object.keys(templateData).forEach(key => {\r\n if (!templateData[key] || templateData[key].length == 0) {\r\n templateData[key] = \"{\" + key + \"}\";\r\n }\r\n });\r\n }\r\n this.ShowProgress(\"Retrieving document template\");\r\n if (this._templateFile == null) {\r\n let baseUrl = this._relativeTo == \"Web\" ? _spPageContextInfo.webAbsoluteUrl : _spPageContextInfo.siteAbsoluteUrl;\r\n let uri = baseUrl + \"/_api/web/GetFileByServerRelativeUrl('\" + this._templateUrl + \"')/$value\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(uri).then((result) => {\r\n result.arrayBuffer().then((data) => {\r\n this._templateFile = data;\r\n this.renderInternal(templateData);\r\n resolve();\r\n });\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n else {\r\n this.renderInternal(templateData);\r\n Promise.resolve();\r\n }\r\n }\r\n /**\r\n * Saves the document to a SharePoint location\r\n * @param {string} siteRelativeFolderUrl The SiteRelative URL of the folder to store the document (/subsite/web/doclib/folder)\r\n * @param {string} filename The filename of the new document (something.docx)\r\n * @param {boolean} overwrite Specify 'true' to overwrite the false if it already exists, 'false' will reject the promise if an error occurs\r\n * @return {Promise} A promise to indicate the save action was completed and returns the RelativeServerUrl for the generated document\r\n */\r\n saveAs(siteRelativeFolderUrl, filename, overwrite = true, apiUrlOverride = null) {\r\n let overwriteStr = String(overwrite).toLocaleLowerCase();\r\n this.ShowProgress(\"Compressing document\");\r\n let newDocument = this._templateEngine.getZip().generate({\r\n type: \"blob\",\r\n mimeType: this._openDocumentMimeType,\r\n compression: \"DEFLATE\" //Compress the output using Zip Deflate\r\n });\r\n let apiBaseUrl = (apiUrlOverride && apiUrlOverride.length > 0) ? apiUrlOverride : _spPageContextInfo.webAbsoluteUrl;\r\n this.ShowProgress(\"Saving document\");\r\n let uploadUrl = apiBaseUrl + \"/_api/web/GetFolderByServerRelativeUrl('\" + siteRelativeFolderUrl + \"')/Files/add(url='\" + filename + \"',overwrite=\" + overwriteStr + \")\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetchRaw(uploadUrl, \"POST\", newDocument).then((result) => {\r\n result.json().then(uploadResult => {\r\n this.ShowProgress(this._closeDialogHtml, false);\r\n resolve(uploadResult.ServerRelativeUrl);\r\n });\r\n }).catch((reason) => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n removeIndivualUserPermissions(serverRelativeFileUrl) {\r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n let file = web.getFileByServerRelativeUrl(serverRelativeFileUrl);\r\n let item = file.get_listItemAllFields();\r\n let roleAssignments = item.get_roleAssignments();\r\n //Load the current item and the roleAssignments\r\n clientContext.load(item, \"HasUniqueRoleAssignments\");\r\n clientContext.load(roleAssignments, \"Include(Member, RoleDefinitionBindings)\");\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n //Break permission inheretance if needed\r\n if (!item.get_hasUniqueRoleAssignments()) {\r\n item.breakRoleInheritance(true, false);\r\n }\r\n //Remove all permissions that are assigned to single users\r\n //Leave all permisions assigned to groups intact\r\n let permissionsChanged = false;\r\n let permissionCount = roleAssignments.get_count();\r\n for (let i = 0; i < permissionCount; i++) {\r\n let assignment = roleAssignments.get_item(i);\r\n if (assignment.get_member().get_principalType() == SP.Utilities.PrincipalType.user) {\r\n assignment.get_roleDefinitionBindings().removeAll();\r\n assignment.update();\r\n permissionsChanged = true;\r\n }\r\n }\r\n //Only update the item if the permissions have been changed\r\n if (permissionsChanged) {\r\n item.update();\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve();\r\n }, (sender, args) => {\r\n reject(args.get_errorDetails());\r\n });\r\n }\r\n else {\r\n resolve();\r\n }\r\n }, (sender, args) => {\r\n reject(args.get_errorDetails());\r\n });\r\n });\r\n }\r\n static getStandardProperties() {\r\n let now = new Date(Date.now());\r\n let list = {};\r\n list[\"date.text\"] = now.toLocaleString();\r\n list[\"date.datetext\"] = Application.formatDate(now);\r\n //list[\"date.datetext\"] = now.toLocaleDateString();\r\n list[\"date.timetext\"] = now.toLocaleTimeString();\r\n list[\"date.year\"] = now.getFullYear().toString();\r\n list[\"date.month\"] = (now.getMonth() + 1).toString();\r\n list[\"date.day\"] = now.getDate().toString();\r\n list[\"date.hour\"] = now.getHours().toString();\r\n list[\"date.minutes\"] = now.getMinutes().toString();\r\n list[\"date.seconds\"] = now.getHours().toString();\r\n list[\"web.title\"] = _spPageContextInfo.webTitle;\r\n return list;\r\n }\r\n static showTemplateProperties(properties) {\r\n //All the scripts needed for the ClientPeoplePicker\r\n let scriptRefs = ['sp.core.js', 'sp.runtime.js', 'sp.js', 'autofill.js', 'clientpeoplepicker.js', 'clientforms.js', 'clienttemplates.js'];\r\n //Register all scripts as Script-On-Demand (SoD) dependencies\r\n scriptRefs.forEach(function (val, index) {\r\n if (!window['_v_dictSod'][val]) {\r\n SP.SOD.registerSod(val, \"\\u002f_layouts\\u002f15\\u002f\" + val);\r\n }\r\n ;\r\n });\r\n //Load all scripts, and execute callback after the scripts have been loaded\r\n SP.SOD.loadMultiple(scriptRefs, function () {\r\n let webTitle = _spPageContextInfo.webTitle.trim();\r\n //Create the dialog\r\n var dialogContainer = document.createElement('div');\r\n dialogContainer.style.display = 'none';\r\n document.body.appendChild(dialogContainer);\r\n var element = dialogContainer.appendChild(document.createElement('div'));\r\n element.className = \"nato-templateproperties-dialog\";\r\n var propertyTable = document.createElement('table');\r\n element.appendChild(propertyTable);\r\n var propertyTableHead = document.createElement('thead');\r\n propertyTable.appendChild(propertyTableHead);\r\n var propertyTableRow = document.createElement('tr');\r\n propertyTableHead.appendChild(propertyTableRow);\r\n var propertyTableHeader1 = document.createElement('th');\r\n propertyTableHeader1.innerText = \"Parameter\";\r\n propertyTableRow.appendChild(propertyTableHeader1);\r\n var propertyTableHeader2 = document.createElement('th');\r\n propertyTableHeader2.innerText = \"Value\";\r\n propertyTableRow.appendChild(propertyTableHeader2);\r\n var propertyTableBody = document.createElement('tbody');\r\n propertyTable.appendChild(propertyTableBody);\r\n Object.keys(properties).sort().forEach((key) => {\r\n let value = \"\";\r\n if (key == \"project.NPD\" || key == \"project.PPD\" || key == \"project.PCD\") {\r\n if (properties[key] && properties[key].length > 0) {\r\n properties[key].forEach(dirData => {\r\n value += dirData.description + \", \" + dirData.name + \", \" + dirData.country + \"\\n\";\r\n });\r\n }\r\n else {\r\n value = null;\r\n }\r\n }\r\n else {\r\n value = properties[key];\r\n }\r\n let propertyTableRow = document.createElement('tr');\r\n propertyTableBody.appendChild(propertyTableRow);\r\n let propertyTableParameterCell = document.createElement('td');\r\n propertyTableParameterCell.innerText = key;\r\n propertyTableRow.appendChild(propertyTableParameterCell);\r\n let propertyTableValueCell = document.createElement('td');\r\n propertyTableValueCell.innerText = value;\r\n propertyTableRow.appendChild(propertyTableValueCell);\r\n });\r\n //Disable the SharePoint dialog eventreceiver. It will block any Synthetic React event from firing\r\n let functionName = Object.keys(SP.UI.Dialog).find(key => {\r\n return ((\"\" + SP.UI.Dialog[key]).toString().toLocaleLowerCase().indexOf(\"a.stopPropagation()\".toLocaleLowerCase()) != -1);\r\n });\r\n let stupidDialogEventListener = SP.UI.Dialog[functionName];\r\n SP.UI.Dialog[functionName] = function (e) { return true; };\r\n //Specify options for the dialog\r\n let options = new SP.UI.DialogOptions();\r\n options.title = webTitle;\r\n options.allowMaximize = true;\r\n options.showClose = true;\r\n options.autoSize = true;\r\n options.html = element;\r\n options.dialogReturnValueCallback = (result, args) => {\r\n //Restore the SharePoint Dialog EventReceiver we disabled a few lines above \r\n SP.UI.Dialog[functionName] = stupidDialogEventListener;\r\n };\r\n //Show the dialog\r\n let dialog = SP.UI.ModalDialog.showModalDialog(options);\r\n });\r\n }\r\n ShowProgress(message, progressImageVisibility = true) {\r\n if (!this._showProgressDialog)\r\n return;\r\n if (this._progressDialog) {\r\n this._progressDialog.get_dialogElement().getElementsByClassName(\"nato-dialog-content\")[0].innerHTML += \" ✔
\" + message;\r\n this._progressDialog.autoSize();\r\n }\r\n else {\r\n this._progressDialog = SP.UI.ModalDialog.showWaitScreenWithNoClose(\"Generating document\", \"\" + message + \"\");\r\n }\r\n this._progressDialog.get_dialogElement().getElementsByTagName(\"IMG\")[1].style.display = progressImageVisibility ? \"\" : \"none\";\r\n }\r\n renderInternal(templateData) {\r\n this.ShowProgress(\"Replacing placeholders\");\r\n try {\r\n let zipFile = new JSZip(this._templateFile);\r\n this._templateEngine.loadZip(zipFile);\r\n this._templateEngine.setOptions({\r\n nullGetter: (part, scopeManager) => {\r\n return (\"{\" + part.value + \"}\");\r\n }\r\n });\r\n this._templateEngine.setData(templateData);\r\n this._templateEngine.render();\r\n }\r\n catch (ex) {\r\n }\r\n }\r\n getContextualObject() {\r\n return {\r\n firstname: 'Alain',\r\n lastname: 'de Klerk',\r\n date: (new Date(Date.now())).toLocaleDateString()\r\n };\r\n }\r\n static DoesUserHasPermissions() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC || application.applicantDetails.division == DivisionEnum.PDD) {\r\n User.getCurrentUser().then(user => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC) {\r\n if (application.isUserSeniorAdvisor(user) || application.isUserAdvisor(user)) {\r\n resolve(true);\r\n }\r\n else {\r\n User.isGrantAdministrator(DivisionEnum.ESC).then(isAdmin => {\r\n resolve(isAdmin);\r\n });\r\n }\r\n }\r\n else if (application.applicantDetails.division == DivisionEnum.PDD) {\r\n User.isMemberOfGroup([\"NAS Administrators\", \"PDD Grant Administrators\", \"PDD Section Specialists\"]).then(isMember => {\r\n resolve(isMember);\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=DocumentGenerator.jsx.map","import { SharePointRestService, ListNames, SPRibbonControl, DocumentGenerator, LocalStorageCache, SPUtil, Application, ApplicationStatus, User, DivisionEnum } from \"../index\";\r\nexport class DocumentGeneratorRibbon {\r\n constructor() {\r\n this._templates = {};\r\n this._defaultIcon = \"/_layouts/15/Images/DOC32.GIF\";\r\n SPUtil.isLoggedIn().then(isLoggedIn => {\r\n if (isLoggedIn && this.shouldRender()) {\r\n this.retrieveTemplates().then(templates => {\r\n this._templates = templates;\r\n if (this._templates != null && Object.keys(this._templates).length > 0) {\r\n SPRibbonControl.getInstance().then((ribbon) => {\r\n ribbon.executeOrDelayUntilRibbonLoaded(() => {\r\n this.registerRibbonPageComponent();\r\n let tabObject = ribbon.spRibbon.getChildByTitle(\"Grants\");\r\n if (tabObject == null) {\r\n var tab = new CUI.Tab(ribbon.spRibbon, 'CustomAction.NAS.Tab', 'Grants', 'Use this tab to manage grants', 'CustomAction.NAS.Tab.Command', false, '', null);\r\n ribbon.spRibbon.addChild(tab);\r\n }\r\n Application.getFromContext().then(app => {\r\n ribbon.addGroupToTab(\"Grants\", this.createGroupDefinition(ribbon, app));\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n shouldRender() {\r\n if (window.docsetHomePageData == null)\r\n return false;\r\n if (Number(window.docsetHomePageData.idDocSet) <= 0)\r\n return false;\r\n return true;\r\n }\r\n createGroupDefinition(ribbonControl, application) {\r\n let division = application.applicantDetails.division;\r\n var group = new CUI.Group(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.DocumentGenerator\", \"Letter templates\", \"Use these buttons to generate letters based on templates\", \"CustomAction.NAS.Tab.DocumentGenerator.Command\", null);\r\n var layout = new CUI.Layout(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.DocumentGenerator.Layout\", \"CustomAction.NAS.Tab.DocumentGenerator.Layout\");\r\n group.addChild(layout);\r\n var section = new CUI.Section(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.DocumentGenerator.Section\", 2, \"Top\"); //2==OneRow\r\n layout.addChild(section);\r\n //Button for \"viewing template properties\"\r\n let controlProperties = new CUI.ControlProperties();\r\n controlProperties.Command = \"CustomAction.NAS.Tab.DocumentGenerator.Control.ViewProperties.Command\";\r\n controlProperties.Id = (\"CustomAction.NAS.Tab.DocumentGenerator.Control.ViewProperties\");\r\n controlProperties.TemplateAlias = \"o1\";\r\n controlProperties.LabelText = \"View Properties\";\r\n controlProperties.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties.Image32by32Top = -408;\r\n controlProperties.Image32by32Left = -68;\r\n controlProperties.ToolTipDescription = \"View a list of all properties that can be used in the document templates. This action is only enabled for \" + ((division == DivisionEnum.ESC) ? \"ESC Grants Administrators / Senior Advisors / Advisors\" : \"PDD Grants Administrators / Section Specialists\") + \".\";\r\n controlProperties.ToolTipTitle = \"View template properties.\";\r\n let buttonId = \"CustomAction.NAS.Tab.DocumentGenerator.Button.ViewProperties\";\r\n let button = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId, controlProperties);\r\n let controlComponent = button.createComponentForDisplayMode(\"Large\");\r\n var row1 = section.getRow(1);\r\n row1.addChild(controlComponent);\r\n let flyout = new CUI.Controls.FlyoutAnchorCommandProperties();\r\n flyout.Command = \"CustomAction.NAS.Tab.DocumentGenerator.Control.FlyoutProperties.Command\";\r\n flyout.Id = \"CustomAction.NAS.Tab.DocumentGenerator.Control.FlyoutProperties\";\r\n flyout.TemplateAlias = \"o1\";\r\n flyout.LabelText = \"Generate Letter\";\r\n flyout.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n flyout.Image32by32Top = -103;\r\n flyout.Image32by32Left = -375;\r\n flyout.ToolTipDescription = \"Generate a document, report or letter.\";\r\n flyout.ToolTipTitle = \"Generate a document, report or letter.\";\r\n let menuControl = new CUI.Menu(ribbonControl.spRibbon, flyout.Id + \".Menu\");\r\n let menuSection = new CUI.MenuSection(ribbonControl.spRibbon, flyout.Id + \".Menu.MenuSection\", \"Templates\", \"\", true, 500, \"Menu32\");\r\n menuControl.addChild(menuSection);\r\n Object.keys(this._templates).forEach((templateIdAsStr, index) => {\r\n let templateId = Number(templateIdAsStr);\r\n let icon = this._templates[templateId].iconPath != \"\" ? this._templates[templateId].iconPath : _spPageContextInfo.webAbsoluteUrl + this._defaultIcon;\r\n var controlProperties = new CUI.ControlProperties();\r\n controlProperties.Command = \"CustomAction.NAS.Tab.DocumentGenerator.Control.Command\";\r\n controlProperties.Id = (\"CustomAction.NAS.Tab.DocumentGenerator.Control\" + index);\r\n controlProperties.TemplateAlias = \"o1\";\r\n controlProperties.LabelText = this._templates[templateId].title;\r\n controlProperties.Image32by32 = icon;\r\n controlProperties.ToolTipDescription = \"This action is only enabled for \" + ((division == DivisionEnum.ESC) ? \"ESC Grants Administrators / Senior Advisors / Advisors\" : \"PDD Grants Administrators\") + \" and only when the application has been submitted or is under review, approved, rejected or awarded.\";\r\n controlProperties.ToolTipTitle = this._templates[templateId].description;\r\n let buttonId = (\"CustomAction.NAS.Tab.DocumentGenerator.Button\" + index + \".\" + templateId);\r\n var button = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId, controlProperties);\r\n menuSection.addChild(button.createComponentForDisplayMode(\"Menu32\"));\r\n group.selectLayout('CustomAction.NAS.Tab.DocumentGenerator.Layout');\r\n });\r\n let flyoutAnchor = new CUI.Controls.FlyoutAnchor(ribbonControl.spRibbon, flyout.Id, flyout, menuControl);\r\n let flyoutComponent = flyoutAnchor.createComponentForDisplayMode(\"Large\");\r\n var row1 = section.getRow(1);\r\n row1.addChild(flyoutComponent);\r\n return group;\r\n }\r\n /**\r\n * Retrieves the letter templates for the current site from the DocumentLibrary\r\n * @return {Promise<{ [itemId: number]: { title: string, siteRelativeUrl: string, iconPath: string, description: string } }>} A Promise with a dictionary containing all templates\r\n */\r\n retrieveTemplates() {\r\n // Set cache expiration to 4 hours\r\n let cacheExpirationDate = new Date(Date.now() + (4 * 60 * 60 * 1000));\r\n let cacheKey = \"Templates:\" + _spPageContextInfo.webAbsoluteUrl;\r\n let cachedTemplates = LocalStorageCache.tryGetFromCache(cacheKey, null, cacheExpirationDate);\r\n if (cachedTemplates != null) {\r\n return Promise.resolve(cachedTemplates);\r\n }\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.DOCUMENT_TEMPLATES + \"')/items?$select=ID,FileLeafRef,FileRef,natoTemplateIcon,natoTemplateDescription,ContentType/Name&$expand=ContentType&$filter=natoTemplateDescription ne ''\";\r\n return new Promise((resolve, reject) => {\r\n //Retrieve the temlates from the 'DocumentTemplates' library using a REST call\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n let templates = {};\r\n //The list is empty, resolve null\r\n if (odata.value.length == 0) {\r\n resolve(null);\r\n }\r\n else {\r\n //Transform the odata objects into key-object pairs\r\n for (let i = 0; i < odata.value.length; i++) {\r\n if ((\"\" + odata.value[i].ContentType.Name).toLocaleUpperCase() == \"LETTER TEMPLATE\") {\r\n let itemId = Number(odata.value[i].ID);\r\n templates[itemId] = {\r\n title: odata.value[i].FileLeafRef,\r\n siteRelativeUrl: odata.value[i].FileRef,\r\n iconPath: (odata.value[i].natoTemplateIcon != null) ? odata.value[i].natoTemplateIcon.Url : \"\",\r\n description: \"\" + odata.value[i].natoTemplateDescription\r\n };\r\n }\r\n }\r\n LocalStorageCache.tryStoreInCache(cacheKey, templates);\r\n resolve(templates);\r\n }\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n /**\r\n * The PageComponent is responsible for listening for commands issued by the Ribbon.\r\n * This function creates the PageComponent and registers it to the page.\r\n */\r\n registerRibbonPageComponent() {\r\n //Create the class definition. Because the CUI.Page.PageComponent class is only available at runtime after the Ribbon has been load\r\n //this class definition is created inside a function. Luckiliy this is possible as of TypeScript 1.6.\r\n let DocumentGeneratorPageComponent = class extends CUI.Page.PageComponent {\r\n constructor() {\r\n //Call the CUI.Page.PageComponent constructor\r\n super();\r\n this._handledCommands = {};\r\n this._asyncCommandsEnabled = {};\r\n this._allowGeneration = false;\r\n Application.getFromContext().then(application => {\r\n if (application.applicationStatus == ApplicationStatus.SUBMITTED\r\n || application.applicationStatus == ApplicationStatus.UNDER_REVIEW\r\n || application.applicationStatus == ApplicationStatus.AWARDED) {\r\n User.getCurrentUser().then((user) => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC\r\n && (application.isUserSeniorAdvisor(user) || application.isUserAdvisor(user))) {\r\n this._allowGeneration = true;\r\n RefreshCommandUI();\r\n }\r\n else {\r\n User.isGrantAdministrator(application.applicantDetails.division).then(isAdmin => {\r\n if (isAdmin) {\r\n this._allowGeneration = true;\r\n RefreshCommandUI();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n set templateUrls(templateUrls) {\r\n this._templateUrls = templateUrls;\r\n }\r\n get templateUrls() {\r\n return this._templateUrls;\r\n }\r\n init() {\r\n this._handledCommands[\"CustomAction.NAS.Tab.Command\"] = {\r\n enable: () => {\r\n return true;\r\n },\r\n handle: (commandId, props, seq) => {\r\n //Do nothing\r\n }\r\n };\r\n this._handledCommands[\"CustomAction.NAS.Tab.DocumentGenerator.Command\"] = {\r\n enable: () => {\r\n return true;\r\n },\r\n handle: (commandId, props, seq) => {\r\n //Do nothing\r\n }\r\n },\r\n this._handledCommands[\"CustomAction.NAS.Tab.DocumentGenerator.Control.FlyoutProperties.Command\"] = {\r\n enable: () => {\r\n return true;\r\n },\r\n handle: (commandId, props, seq) => {\r\n //Do nothing\r\n }\r\n },\r\n this._handledCommands[\"CustomAction.NAS.Tab.DocumentGenerator.Control.PopulateTemplates\"] = {\r\n enable: () => {\r\n return true;\r\n },\r\n handle: (commandId, props, seq) => {\r\n var sb = new Sys.StringBuilder();\r\n sb.append('');\r\n sb.append('');\r\n sb.append('');\r\n sb.append('');\r\n sb.append('');\r\n sb.append('');\r\n sb.append('');\r\n return sb.toString();\r\n }\r\n },\r\n this._handledCommands[\"CustomAction.NAS.Tab.DocumentGenerator.Control.ViewProperties.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.DocumentGenerator.Control.ViewProperties.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n DocumentGenerator.DoesUserHasPermissions().then(userHasPermissions => {\r\n this._asyncCommandsEnabled[commandName] = userHasPermissions;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n //Retrieve the 'application' object. The data in the application will be used to fill placeholders in the document template\r\n Application.getFromContext().then(application => {\r\n application.projectNumber.then(projectNumber => {\r\n let standardProperties = DocumentGenerator.getStandardProperties();\r\n let applicationProperties = application.toPropertyList();\r\n Object.keys(standardProperties).forEach(key => {\r\n applicationProperties[key] = standardProperties[key];\r\n });\r\n //Transform the application object to a flat propertylist\r\n DocumentGenerator.showTemplateProperties(applicationProperties);\r\n });\r\n });\r\n }\r\n };\r\n this._handledCommands[\"CustomAction.NAS.Tab.DocumentGenerator.Control.Command\"] = {\r\n enable: () => {\r\n return this._allowGeneration;\r\n },\r\n handle: (commandId, props, seq) => {\r\n let sourceControlId = props.SourceControlId;\r\n if (sourceControlId != null) {\r\n let itemId = Number(sourceControlId.split(\".\").slice(-1)[0]);\r\n let relativeUrl = this._templateUrls[itemId].siteRelativeUrl;\r\n this.performDocumentGeneration(relativeUrl);\r\n }\r\n }\r\n };\r\n this._commands = Object.keys(this._handledCommands);\r\n }\r\n getFocusedCommands() {\r\n return [];\r\n }\r\n getGlobalCommands() {\r\n return this._commands;\r\n }\r\n canHandleCommand(commandId) {\r\n let handlerFunction = this._handledCommands[commandId].enable;\r\n if (typeof (handlerFunction) == \"function\") {\r\n return handlerFunction();\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n handleCommand(commandId, properties, sequence) {\r\n return this._handledCommands[commandId].handle(commandId, properties, sequence);\r\n }\r\n isFocusable() {\r\n return true;\r\n }\r\n yieldFocus() {\r\n return true;\r\n }\r\n receiveFocus() {\r\n return true;\r\n }\r\n handleGroup() {\r\n //Do nothing\r\n }\r\n showTemplateProperties() {\r\n }\r\n performDocumentGeneration(relativeTemplateUrl) {\r\n let template = new DocumentGenerator(relativeTemplateUrl);\r\n let docsetUrl = window.docsetHomePageData != null ? window.docsetHomePageData.urlDocSet : \"/NAS/DI-NIAG/Shared%20Documents\";\r\n //Retrieve the filename from the template\r\n let filename = relativeTemplateUrl.split(\"/\").reverse()[0];\r\n //Retrieve the 'applcation' object. The data in the application will be used to fill placeholders in the document template\r\n Application.getFromContext().then(application => {\r\n application.projectNumber.then(projectNumber => {\r\n //Transform the application object to a flat propertylist\r\n let standardProperties = DocumentGenerator.getStandardProperties();\r\n let applicationProperties = application.toPropertyList();\r\n Object.keys(standardProperties).forEach(key => {\r\n applicationProperties[key] = standardProperties[key];\r\n });\r\n //Merge the template with the properties in the application\r\n template.merge(applicationProperties).then(() => {\r\n //Save the template in the current document set\r\n template.saveAs(docsetUrl, filename, true).then(serverRelativeUrl => {\r\n //Remove user permissions...\r\n template.removeIndivualUserPermissions(serverRelativeUrl).then(() => {\r\n //Done\r\n });\r\n });\r\n });\r\n });\r\n });\r\n }\r\n };\r\n //Create the 'pageComponent' object from the 'PageComponent' class\r\n let pageComponent = new DocumentGeneratorPageComponent();\r\n pageComponent.templateUrls = this._templates;\r\n //Retrieve the PageManager object from the Ribbon\r\n var ribbonPageManager = SP.Ribbon.PageManager.get_instance();\r\n //Register the PageComponent\r\n ribbonPageManager.addPageComponent(pageComponent);\r\n }\r\n}\r\n//# sourceMappingURL=DocumentGeneratorRibbon.jsx.map","import { SPRibbonControl, SPUtil, User, DivisionEnum } from \"../index\";\r\nexport class ManageGrantsRibbon {\r\n constructor() {\r\n SPRibbonControl.getInstance().then((ribbon) => {\r\n ribbon.executeOrDelayUntilRibbonLoaded(() => {\r\n if (this.shouldRender()) {\r\n this.registerRibbonPageComponent();\r\n let tabObject = ribbon.spRibbon.getChildByTitle(\"Grants\");\r\n if (tabObject == null) {\r\n var tab = new CUI.Tab(ribbon.spRibbon, 'CustomAction.NAS.Tab', 'Grants', 'Use this tab to manage grants', 'CustomAction.NAS.Tab.Command', false, '', null);\r\n ribbon.spRibbon.addChild(tab);\r\n ribbon.selectTabById(\"CustomAction.NAS.Tab\");\r\n }\r\n ribbon.addGroupToTab(\"Grants\", this.createEditGrantsGroupDefinition(ribbon));\r\n ribbon.addGroupToTab(\"Grants\", this.createManageGrantsPlanningGroupDefinition(ribbon));\r\n ribbon.addGroupToTab(\"Grants\", this.createManageGrantsPublishingGroupDefinition(ribbon));\r\n }\r\n });\r\n });\r\n }\r\n shouldRender() {\r\n if (window[\"GrantRendering\"].grant == null)\r\n return false;\r\n if (Object.keys(window[\"GrantRendering\"].renderContextPerElement).length == 0)\r\n return false;\r\n let firstRenderContextId = Object.keys(window[\"GrantRendering\"].renderContextPerElement)[0];\r\n let firstRenderContext = window[\"GrantRendering\"].renderContextPerElement[firstRenderContextId];\r\n //The \"Beneficiary Request\" contentype might have the 'Signature' field with a custom rendering. That might trigger the GrantRendering component\r\n //However, we don't want the 'Grants' ribbon on the \"Beneficiary Request\" forms\r\n if (firstRenderContext.CurrentItem.ContentType.toLocaleLowerCase() == (\"Beneficiary Request\").toLocaleLowerCase())\r\n return false;\r\n return firstRenderContext.ControlMode == SPClientTemplates.ClientControlMode.EditForm || firstRenderContext.ControlMode == SPClientTemplates.ClientControlMode.NewForm;\r\n }\r\n createEditGrantsGroupDefinition(ribbonControl) {\r\n var group = new CUI.Group(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.EditGrants\", \"Edit Grants\", \"Edit Grants\", \"CustomAction.NAS.Tab.EditGrants.Command\", null);\r\n var layout = new CUI.Layout(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.EditGrants.Layout\", \"CustomAction.NAS.Tab.EditGrants.Layout\");\r\n group.addChild(layout);\r\n var section = new CUI.Section(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.EditGrants.Section\", 2, \"Top\"); //2==OneRow\r\n layout.addChild(section);\r\n var row1 = section.getRow(1);\r\n //Button for \"Add File\"\r\n let controlProperties_1 = new CUI.ControlProperties();\r\n controlProperties_1.Command = \"CustomAction.NAS.Tab.EditGrants.Control.AddAttachment.Command\";\r\n controlProperties_1.Id = (\"CustomAction.NAS.Tab.EditGrants.Control.AddAttachment\");\r\n controlProperties_1.TemplateAlias = \"o1\";\r\n controlProperties_1.LabelText = \"Attach File\";\r\n controlProperties_1.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_1.Image32by32Top = -205;\r\n controlProperties_1.Image32by32Left = -443;\r\n controlProperties_1.ToolTipDescription = \"Attach File\";\r\n controlProperties_1.ToolTipTitle = \"Attach File\";\r\n let buttonId_1 = \"CustomAction.NAS.Tab.EditGrants.Button.AddAttachment\";\r\n let button_1 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_1, controlProperties_1);\r\n let controlComponent_1 = button_1.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_1);\r\n group.selectLayout(\"CustomAction.NAS.Tab.EditGrants.Layout\");\r\n return group;\r\n }\r\n createManageGrantsPlanningGroupDefinition(ribbonControl) {\r\n var group = new CUI.Group(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ManageGrantsPlanning\", \"Planning\", \"Planning\", \"CustomAction.NAS.Tab.ManageGrantsPlanning.Command\", null);\r\n var layout = new CUI.Layout(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ManageGrantsPlanning.Layout\", \"CustomAction.NAS.Tab.ManageGrantsPlanning.Layout\");\r\n group.addChild(layout);\r\n var section = new CUI.Section(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ManageGrantsPlanning.Section\", 2, \"Top\"); //2==OneRow\r\n layout.addChild(section);\r\n var row1 = section.getRow(1);\r\n //Button for \"Approve (Head of Section)\"\r\n let controlProperties_1 = new CUI.ControlProperties();\r\n controlProperties_1.Command = \"CustomAction.NAS.Tab.ManageGrantsPlanning.Control.ApproveHeadOfSection.Command\";\r\n controlProperties_1.Id = (\"CustomAction.NAS.Tab.ManageGrantsPlanning.Control.ApproveHeadOfSection\");\r\n controlProperties_1.TemplateAlias = \"o1\";\r\n controlProperties_1.LabelText = \"Approve (Head of Section)\";\r\n controlProperties_1.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_1.Image32by32Top = -408;\r\n controlProperties_1.Image32by32Left = -340;\r\n controlProperties_1.ToolTipDescription = \"Approve (Head of Section)\";\r\n controlProperties_1.ToolTipTitle = \"Approve (Head of Section)\";\r\n let buttonId_1 = \"CustomAction.NAS.Tab.ManageGrantsPlanning.Button.ApproveHeadOfSection\";\r\n let button_1 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_1, controlProperties_1);\r\n let controlComponent_1 = button_1.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_1);\r\n //Button for \"Approve (Planning Officer)\"\r\n let controlProperties_2 = new CUI.ControlProperties();\r\n controlProperties_2.Command = \"CustomAction.NAS.Tab.ManageGrantsPlanning.Control.ApprovePlanningOfficer.Command\";\r\n controlProperties_2.Id = (\"CustomAction.NAS.Tab.ManageGrantsPlanning.Control.ApprovePlanningOfficer\");\r\n controlProperties_2.TemplateAlias = \"o1\";\r\n controlProperties_2.LabelText = \"Approve (Planning Officer)\";\r\n controlProperties_2.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_2.Image32by32Top = -68;\r\n controlProperties_2.Image32by32Left = -272;\r\n controlProperties_2.ToolTipDescription = \"Approve (Planning Officer)\";\r\n controlProperties_2.ToolTipTitle = \"Approve (Planning Officer)\";\r\n let buttonId_2 = \"CustomAction.NAS.Tab.ManageGrantsPlanning.Button.ApprovePlanningOfficer\";\r\n let button_2 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_2, controlProperties_2);\r\n let controlComponent_2 = button_2.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_2);\r\n //Button for \"Approve (Budget)\"\r\n if (window[\"GrantRendering\"].grant.division != DivisionEnum.PDD) {\r\n let controlProperties_3 = new CUI.ControlProperties();\r\n controlProperties_3.Command = \"CustomAction.NAS.Tab.ManageGrantsPlanning.Control.ApproveBudget.Command\";\r\n controlProperties_3.Id = (\"CustomAction.NAS.Tab.ManageGrantsPlanning.Control.ApproveBudget\");\r\n controlProperties_3.TemplateAlias = \"o1\";\r\n controlProperties_3.LabelText = \"Approve Budget\";\r\n controlProperties_3.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_3.Image32by32Top = -512;\r\n controlProperties_3.Image32by32Left = -475;\r\n controlProperties_3.ToolTipDescription = \"Approve Budget\";\r\n controlProperties_3.ToolTipTitle = \"Approve Budget\";\r\n let buttonId_3 = \"CustomAction.NAS.Tab.ManageGrantsPlanning.Button.ApproveBudget\";\r\n let button_3 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_3, controlProperties_3);\r\n let controlComponent_3 = button_3.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_3);\r\n }\r\n //Button for \"Publish\"\r\n let controlProperties_4 = new CUI.ControlProperties();\r\n controlProperties_4.Command = \"CustomAction.NAS.Tab.ManageGrantsPlanning.Control.Publish.Command\";\r\n controlProperties_4.Id = (\"CustomAction.NAS.Tab.ManageGrantsPlanning.Control.Publish\");\r\n controlProperties_4.TemplateAlias = \"o1\";\r\n controlProperties_4.LabelText = \"Publish\";\r\n controlProperties_4.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_4.Image32by32Top = -374;\r\n controlProperties_4.Image32by32Left = -170;\r\n controlProperties_4.ToolTipDescription = \"By publishing this item you make it visible for all (anonymous) users.\";\r\n controlProperties_4.ToolTipTitle = \"Publish\";\r\n let buttonId_4 = \"CustomAction.NAS.Tab.ManageGrantsPlanning.Button.Publish\";\r\n let button_4 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_4, controlProperties_4);\r\n let controlComponent_4 = button_4.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_4);\r\n group.selectLayout('CustomAction.NAS.Tab.ManageGrantsPlanning.Layout');\r\n return group;\r\n }\r\n createManageGrantsPublishingGroupDefinition(ribbonControl) {\r\n var group = new CUI.Group(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ManageGrantsPublishing\", \"Publishing\", \"Publishing\", \"CustomAction.NAS.Tab.ManageGrantsPublishing.Command\", null);\r\n var layout = new CUI.Layout(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ManageGrantsPublishing.Layout\", \"CustomAction.NAS.Tab.ManageGrantsPublishing.Layout\");\r\n group.addChild(layout);\r\n var section = new CUI.Section(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ManageGrantsPublishing.Section\", 2, \"Top\"); //2==OneRow\r\n layout.addChild(section);\r\n var row1 = section.getRow(1);\r\n //Button for \"Synchronize\"\r\n let controlProperties_1 = new CUI.ControlProperties();\r\n controlProperties_1.Command = \"CustomAction.NAS.Tab.ManageGrantsPublishing.Control.Synchronize.Command\";\r\n controlProperties_1.Id = (\"CustomAction.NAS.Tab.ManageGrantsPublishing.Control.ApproveHeadOfSection\");\r\n controlProperties_1.TemplateAlias = \"o1\";\r\n controlProperties_1.LabelText = \"Synchronize\";\r\n controlProperties_1.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/Images/synchronizationtitle.png\";\r\n controlProperties_1.Image32by32Top = -0;\r\n controlProperties_1.Image32by32Left = -0;\r\n controlProperties_1.ToolTipDescription = \"Synchronize external view\";\r\n controlProperties_1.ToolTipTitle = \"Synchronize external view\";\r\n let buttonId_1 = \"CustomAction.NAS.Tab.ManageGrantsPublishing.Button.Synchronize\";\r\n let button_1 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_1, controlProperties_1);\r\n let controlComponent_1 = button_1.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_1);\r\n //Button for \"On hold\"\r\n let controlProperties_2 = new CUI.Controls.ToggleButtonCommandProperties();\r\n controlProperties_2.Command = \"CustomAction.NAS.Tab.ManageGrantsPublishing.Control.OnHold.Command\";\r\n controlProperties_2.QueryCommand = \"CustomAction.NAS.Tab.ManageGrantsPublishing.Control.OnHold.QueryCommand\";\r\n controlProperties_2.Id = (\"CustomAction.NAS.Tab.ManageGrantsPublishing.Control.OnHold\");\r\n controlProperties_2.TemplateAlias = \"o1\";\r\n controlProperties_2.LabelText = \"On hold\";\r\n controlProperties_2.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/Images/PLPAUSE1.GIF\";\r\n controlProperties_2.Image32by32Top = -0;\r\n controlProperties_2.Image32by32Left = -0;\r\n controlProperties_2.ToolTipDescription = \"On hold\";\r\n controlProperties_2.ToolTipTitle = \"On hold\";\r\n let buttonId_2 = \"CustomAction.NAS.Tab.ManageGrantsPublishing.Button.OnHold\";\r\n let button_2 = new CUI.Controls.ToggleButton(ribbonControl.spRibbon, buttonId_2, controlProperties_2);\r\n let controlComponent_2 = button_2.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_2);\r\n //Button for \"Archive\"\r\n let controlProperties_3 = new CUI.ControlProperties();\r\n controlProperties_3.Command = \"CustomAction.NAS.Tab.ManageGrantsPublishing.Control.Archive.Command\";\r\n controlProperties_3.Id = (\"CustomAction.NAS.Tab.ManageGrantsPublishing.Control.Archive\");\r\n controlProperties_3.TemplateAlias = \"o1\";\r\n controlProperties_3.LabelText = \"Archive\";\r\n controlProperties_3.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/Images/declarerecorditemhh.png\";\r\n controlProperties_3.Image32by32Top = -0;\r\n controlProperties_3.Image32by32Left = -0;\r\n controlProperties_3.ToolTipDescription = \"Archive\";\r\n controlProperties_3.ToolTipTitle = \"Archive\";\r\n let buttonId_3 = \"CustomAction.NAS.Tab.ManageGrantsPublishing.Button.Archive\";\r\n let button_3 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_3, controlProperties_3);\r\n let controlComponent_3 = button_3.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_3);\r\n group.selectLayout('CustomAction.NAS.Tab.ManageGrantsPublishing.Layout');\r\n return group;\r\n }\r\n /**\r\n * The PageComponent is responsible for listening for commands issued by the Ribbon.\r\n * This function creates the PageComponent and registers it to the page.\r\n */\r\n registerRibbonPageComponent() {\r\n //Create the class definition. Because the CUI.Page.PageComponent class is only available at runtime after the Ribbon has been load\r\n //this class definition is created inside a function. Luckiliy this is possible as of TypeScript 1.6.\r\n let ApprovalPageComponent = class extends CUI.Page.PageComponent {\r\n constructor() {\r\n //Call the CUI.Page.PageComponent constructor\r\n super();\r\n this._handledCommands = {};\r\n this._asyncCommandsEnabled = {};\r\n }\r\n init() {\r\n //Empty handlers for the groups that only returnt true, otherwise the complete group will be disabled\r\n this._handledCommands[\"CustomAction.NAS.Tab.Command\"] = {\r\n enable: () => { return true; },\r\n handle: (commandId, props, seq) => { return void (0); }\r\n };\r\n this._handledCommands[\"CustomAction.NAS.Tab.EditGrants.Command\"] = {\r\n enable: () => { return true; },\r\n handle: (commandId, props, seq) => { return void (0); }\r\n };\r\n this._handledCommands[\"CustomAction.NAS.Tab.ManageGrantsPlanning.Command\"] = {\r\n enable: () => { return true; },\r\n handle: (commandId, props, seq) => { return void (0); }\r\n };\r\n this._handledCommands[\"CustomAction.NAS.Tab.ManageGrantsPublishing.Command\"] = {\r\n enable: () => { return true; },\r\n handle: (commandId, props, seq) => { return void (0); }\r\n };\r\n //Command for \"Add Attachment\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.EditGrants.Control.AddAttachment.Command\"] = {\r\n enable: () => {\r\n return true;\r\n },\r\n handle: (commandId, props, seq) => {\r\n ShowPartAttachment();\r\n }\r\n };\r\n //Command for \"Approve (Head of section)\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.ManageGrantsPlanning.Control.ApproveHeadOfSection.Command\"] = {\r\n enable: () => {\r\n let windowRegisteredEnableFunction = window[\"GrantRendering\"].ApproveHeadOfSectionEnabled;\r\n if (typeof windowRegisteredEnableFunction !== \"undefined\") {\r\n return window[\"GrantRendering\"].ApproveHeadOfSectionEnabled(this.listId.toString(), this.itemId);\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n window[\"GrantRendering\"].ApproveHeadOfSection(this.listId.toString(), this.itemId);\r\n }\r\n };\r\n //Command for \"Approve (Planning Officer)\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.ManageGrantsPlanning.Control.ApprovePlanningOfficer.Command\"] = {\r\n enable: () => {\r\n let windowRegisteredEnableFunction = window[\"GrantRendering\"].ApprovePlanningOfficerEnabled;\r\n if (typeof windowRegisteredEnableFunction !== \"undefined\") {\r\n return window[\"GrantRendering\"].ApprovePlanningOfficerEnabled(this.listId.toString(), this.itemId);\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n window[\"GrantRendering\"].ApprovePlanningOfficer(this.listId.toString(), this.itemId);\r\n }\r\n };\r\n //Command for \"Approve Budget\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.ManageGrantsPlanning.Control.ApproveBudget.Command\"] = {\r\n enable: () => {\r\n let windowRegisteredEnableFunction = window[\"GrantRendering\"].ApproveBudgetEnabled;\r\n if (typeof windowRegisteredEnableFunction !== \"undefined\") {\r\n return window[\"GrantRendering\"].ApproveBudgetEnabled(this.listId.toString(), this.itemId);\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n window[\"GrantRendering\"].ApproveBudget(this.listId.toString(), this.itemId);\r\n }\r\n };\r\n //Command for \"Publish\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.ManageGrantsPlanning.Control.Publish.Command\"] = {\r\n enable: () => {\r\n let windowRegisteredEnableFunction = window[\"GrantRendering\"].PublishEnabled;\r\n if (typeof windowRegisteredEnableFunction !== \"undefined\") {\r\n if (window[\"GrantRendering\"].PublishEnabled(this.listId.toString(), this.itemId)) {\r\n let commandName = \"CustomAction.NAS.Tab.ManageGrantsPlanning.Control.Publish.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n User.isGrantAdministrator(window[\"GrantRendering\"].grant.division).then(isAdmin => {\r\n this._asyncCommandsEnabled[commandName] = isAdmin;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n window[\"GrantRendering\"].Publish(this.listId.toString(), this.itemId);\r\n }\r\n };\r\n //Command for Synchronize\r\n this._handledCommands[\"CustomAction.NAS.Tab.ManageGrantsPublishing.Control.Synchronize.Command\"] = {\r\n enable: () => {\r\n let windowRegisteredEnableFunction = window[\"GrantRendering\"].SynchronizeEnabled;\r\n if (typeof windowRegisteredEnableFunction !== \"undefined\") {\r\n return window[\"GrantRendering\"].SynchronizeEnabled(this.listId.toString(), this.itemId);\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n window[\"GrantRendering\"].Synchronize(this.listId.toString(), this.itemId);\r\n }\r\n };\r\n //Command for OnHold\r\n this._handledCommands[\"CustomAction.NAS.Tab.ManageGrantsPublishing.Control.OnHold.Command\"] = {\r\n enable: () => {\r\n let windowRegisteredEnableFunction = window[\"GrantRendering\"].PutOnHoldEnabled;\r\n if (typeof windowRegisteredEnableFunction !== \"undefined\") {\r\n return window[\"GrantRendering\"].PutOnHoldEnabled(this.listId.toString(), this.itemId);\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n window[\"GrantRendering\"].PutOnHold(this.listId.toString(), this.itemId, props.On);\r\n }\r\n };\r\n //Command for OnHold\r\n this._handledCommands[\"CustomAction.NAS.Tab.ManageGrantsPublishing.Control.OnHold.QueryCommand\"] = {\r\n enable: () => {\r\n return true;\r\n },\r\n handle: (commandId, props, seq) => {\r\n let renderer = window[\"GrantRendering\"];\r\n if (renderer != null) {\r\n props[\"On\"] = renderer.grant.onHold;\r\n }\r\n return true;\r\n }\r\n };\r\n //Command for Archive\r\n this._handledCommands[\"CustomAction.NAS.Tab.ManageGrantsPublishing.Control.Archive.Command\"] = {\r\n enable: () => {\r\n let windowRegisteredEnableFunction = window[\"GrantRendering\"].ArchiveEnabled;\r\n if (typeof windowRegisteredEnableFunction !== \"undefined\") {\r\n return window[\"GrantRendering\"].ArchiveEnabled(this.listId.toString(), this.itemId);\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n window[\"GrantRendering\"].Archive(this.listId.toString(), this.itemId);\r\n }\r\n };\r\n this._commands = Object.keys(this._handledCommands);\r\n }\r\n getFocusedCommands() {\r\n return [];\r\n }\r\n getGlobalCommands() {\r\n return this._commands;\r\n }\r\n canHandleCommand(commandId) {\r\n let handlerFunction = this._handledCommands[commandId].enable;\r\n if (typeof (handlerFunction) == \"function\") {\r\n return handlerFunction();\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n handleCommand(commandId, properties, sequence) {\r\n return this._handledCommands[commandId].handle(commandId, properties, sequence);\r\n }\r\n isFocusable() {\r\n return true;\r\n }\r\n yieldFocus() {\r\n return true;\r\n }\r\n receiveFocus() {\r\n return true;\r\n }\r\n handleGroup() {\r\n //Do nothing\r\n }\r\n get listId() {\r\n return new SP.Guid(_spPageContextInfo.pageListId);\r\n }\r\n get itemId() {\r\n return Number(SPUtil.parseQuerystring(window.location.search)[\"ID\"]);\r\n }\r\n };\r\n //Create the 'pageComponent' object from the 'PageComponent' class\r\n let pageComponent = new ApprovalPageComponent();\r\n //Retrieve the PageManager object from the Ribbon\r\n var ribbonPageManager = SP.Ribbon.PageManager.get_instance();\r\n //Register the PageComponent\r\n ribbonPageManager.addPageComponent(pageComponent);\r\n }\r\n}\r\n//# sourceMappingURL=ManageGrantsRibbon.jsx.map","import { SharePointRestService, ListNames, LogMessage, LogSeverityEnum } from \"../index\";\r\n//The 'AgreementsDetails' class is used in the Grant Application Wizard. The applicant is asked about previous grants he/she received and other conferences about the same topic\r\nexport class AgreementsDetails {\r\n constructor(item) {\r\n this._currentItem = item;\r\n if (this._currentItem != null) {\r\n this._id = item.Id;\r\n this._itemTitle = item.Title;\r\n this._code = item.natoCode;\r\n this._editor = (item.Editor != null) ? item.Editor.Title : null;\r\n this._modifiedOn = new Date(Date.parse(item.Modified));\r\n this._previousGrants = item.natoPreviousGrants;\r\n this._publication = item.natoPublication;\r\n this._otherMeetingsAndConferences = item.natoOtherMeetingsAndConferences;\r\n }\r\n }\r\n get spItem() {\r\n return this._currentItem;\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get itemTitle() {\r\n return this._itemTitle;\r\n }\r\n set itemTitle(itemTitle) {\r\n this._itemTitle = itemTitle;\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n set code(code) {\r\n this._code = code;\r\n }\r\n get editor() {\r\n return this._editor;\r\n }\r\n set editor(editor) {\r\n this._editor = editor;\r\n }\r\n get modifiedOn() {\r\n return this._modifiedOn;\r\n }\r\n set modifiedOn(modifiedOn) {\r\n this._modifiedOn = modifiedOn;\r\n }\r\n get previousGrants() {\r\n return this._previousGrants;\r\n }\r\n set previousGrants(previousGrants) {\r\n this._previousGrants = previousGrants;\r\n }\r\n get publication() {\r\n return this._publication;\r\n }\r\n set publication(publication) {\r\n this._publication = publication;\r\n }\r\n get otherMeetingsAndConferences() {\r\n return this._otherMeetingsAndConferences;\r\n }\r\n set otherMeetingsAndConferences(otherMeetingsAndConferences) {\r\n this._otherMeetingsAndConferences = otherMeetingsAndConferences;\r\n }\r\n Update() {\r\n //If this item was initialized with a SharePointItem in the constructor, make sure the internal references are all set\r\n if (this._currentItem != null) {\r\n this._currentItem.Title = this._itemTitle;\r\n this._currentItem.natoCode = this._code;\r\n this._currentItem.natoPreviousGrants = this._previousGrants;\r\n this._currentItem.natoPublication = this._publication;\r\n this._currentItem.natoOtherMeetingsAndConferences = this._otherMeetingsAndConferences;\r\n }\r\n let nowDate = new Date(Date.now());\r\n let timestamp = nowDate.getFullYear() + (\"0\" + (nowDate.getMonth() + 1)).slice(-2) + (\"0\" + nowDate.getDate()).slice(-2) + (\"0\" + nowDate.getHours()).slice(-2) + (\"0\" + nowDate.getMinutes()).slice(-2) + (\"0\" + nowDate.getSeconds()).slice(-2);\r\n //Basic item fields, these fields are needed when creating a new DocumentSet\r\n let item = {\r\n \"Title\": this._itemTitle + \" \" + timestamp,\r\n \"Path\": _spPageContextInfo.webServerRelativeUrl + \"/\" + ListNames.APPLICATIONS,\r\n \"ContentTypeId\": \"0x0120D52000ECEF8712FAB50C419F9E57F98F87E9E8\",\r\n \"ContentType\": \"Application\"\r\n };\r\n //Specific fields found on the ApplicationWizard page7\r\n let additionelFields = {\r\n //\"natoCode\": this._code,\r\n \"natoPreviousGrants\": this._previousGrants,\r\n \"natoPublication\": this._publication,\r\n \"natoOtherMeetingsAndConferences\": this._otherMeetingsAndConferences,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n if (this._currentItem != null || this._id > 0) {\r\n LogMessage.Log(\"Updating AgreementsDetails values '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", additionelFields, headers)\r\n .then(response => {\r\n resolve(this);\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application DocumentSet: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=AgreementsDetails.jsx.map","import { SharePointRestService, ListNames, LogMessage, LogSeverityEnum } from \"../index\";\r\nexport class BudgetDetails {\r\n constructor(item) {\r\n this._currentItem = item;\r\n if (this._currentItem != null) {\r\n this._id = item.Id;\r\n this._itemTitle = item.Title;\r\n this._code = item.natoCode;\r\n this._editor = (item.Editor != null) ? item.Editor.Title : null;\r\n this._modifiedOn = new Date(Date.parse(item.Modified));\r\n this._budgetBreakdown = item.natoBudgetBreakdown;\r\n this._budgetWBSTemplate = this.mapBudgetTemplateForwad(item.natoBudgetWBSTemplate);\r\n this._budgetCurrency = item.natoBudgetCurrency;\r\n this._totalAmount = item.natoProjectAmount ? Number(item.natoProjectAmount.replace(/[^0-9.]/g, \"\")) : 0;\r\n // Referenced data (read-only)\r\n this._resourcesBreakdown = item.natoResourcesBreakdown; // Resources\r\n this._tasksBreakdown = item.natoTasksBreakdown; // Tasks\r\n }\r\n }\r\n get spItem() {\r\n return this._currentItem;\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get itemTitle() {\r\n return this._itemTitle;\r\n }\r\n set itemTitle(itemTitle) {\r\n this._itemTitle = itemTitle;\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n set code(code) {\r\n this._code = code;\r\n }\r\n get editor() {\r\n return this._editor;\r\n }\r\n set editor(editor) {\r\n this._editor = editor;\r\n }\r\n get modifiedOn() {\r\n return this._modifiedOn;\r\n }\r\n set modifiedOn(modifiedOn) {\r\n this._modifiedOn = modifiedOn;\r\n }\r\n get budgetBreakdown() {\r\n return this._budgetBreakdown;\r\n }\r\n set budgetBreakdown(budgetBreakdown) {\r\n this._budgetBreakdown = budgetBreakdown;\r\n }\r\n get budgetBreakdownTemplate() {\r\n return this._budgetWBSTemplate;\r\n }\r\n set budgetBreakdownTemplate(budgetBreakdownTemplateName) {\r\n this._budgetWBSTemplate = budgetBreakdownTemplateName;\r\n }\r\n get budgetCurrency() {\r\n return this._budgetCurrency;\r\n }\r\n set budgetCurrency(budgetCurrencyName) {\r\n this._budgetCurrency = budgetCurrencyName;\r\n }\r\n set totalAmount(total) {\r\n this._totalAmount = total;\r\n }\r\n get totalAmount() {\r\n return this._totalAmount;\r\n }\r\n Update() {\r\n //If this item was initialized with a SharePointItem in the constructor, make sure the internal references are all set\r\n if (this._currentItem != null) {\r\n this._currentItem.Title = this._itemTitle;\r\n this._currentItem.natoCode = this._code;\r\n this._currentItem.natoBudgetBreakdown = this._budgetBreakdown;\r\n this._currentItem.natoBudgetWBSTemplate = this.mapBudgetTemplateReverse(this._budgetWBSTemplate);\r\n this._currentItem.natoBudgetCurrency = this._budgetCurrency;\r\n }\r\n let nowDate = new Date(Date.now());\r\n let timestamp = nowDate.getFullYear() + (\"0\" + (nowDate.getMonth() + 1)).slice(-2) + (\"0\" + nowDate.getDate()).slice(-2) + (\"0\" + nowDate.getHours()).slice(-2) + (\"0\" + nowDate.getMinutes()).slice(-2) + (\"0\" + nowDate.getSeconds()).slice(-2);\r\n //Basic item fields, these fields are needed when creating a new DocumentSet\r\n let item = {\r\n \"Title\": this._itemTitle + \" \" + timestamp,\r\n \"Path\": _spPageContextInfo.webServerRelativeUrl + \"/\" + ListNames.APPLICATIONS,\r\n \"ContentTypeId\": \"0x0120D52000ECEF8712FAB50C419F9E57F98F87E9E8\",\r\n \"ContentType\": \"Application\"\r\n };\r\n //Specific fields found on the ApplicationWizard page3\r\n let additionelFields = {\r\n \"natoBudgetBreakdown\": this._budgetBreakdown,\r\n \"natoBudgetWBSTemplate\": this.mapBudgetTemplateReverse(this._budgetWBSTemplate),\r\n \"natoBudgetCurrency\": this._budgetCurrency,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n if (this._budgetWBSTemplate.toLocaleLowerCase() == \"Multi-Year Project (MYP)\".toLocaleLowerCase()\r\n || this._budgetWBSTemplate.toLocaleLowerCase() == \"Call for proposal\".toLocaleLowerCase()) {\r\n this._currentItem.natoProjectAmount = this._budgetCurrency + \" \" + this._totalAmount;\r\n additionelFields[\"natoProjectAmount\"] = this._currentItem.natoProjectAmount;\r\n }\r\n if (this._currentItem != null || this._id > 0) {\r\n LogMessage.Log(\"Updating BudgetDetails values '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", additionelFields, headers)\r\n .then(response => {\r\n resolve(this);\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application Budget: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n }\r\n updateProjectBudgetEurField(serializedBreakDown) {\r\n if (this._currentItem != null || this._id > 0) {\r\n LogMessage.Log(\"Updating BudgetDetailsEUR values '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n let fields = {\r\n \"natoBudgetBreakdownEUR\": serializedBreakDown,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", fields, headers)\r\n .then(response => {\r\n resolve();\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Application Budget: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n }\r\n // taskId to task name helper\r\n getTaskName(taskId) {\r\n if (this._tasksBreakdown && this._tasksBreakdown.length && taskId.length) {\r\n var data = JSON.parse(this._tasksBreakdown);\r\n for (var i in data) {\r\n var id = data[i].task_reference;\r\n if (id && id.lenght && id == taskId) {\r\n return data[i].task_name;\r\n }\r\n }\r\n }\r\n // Not found\r\n return \"N/A\";\r\n }\r\n mapBudgetTemplateForwad(template) {\r\n if (template == \"T-DI_NIAG_Grants\")\r\n return \"DI NIAG Grants\";\r\n if (template == \"T-SPS_ATC\")\r\n return \"Advanced Training Course (ATC)\";\r\n if (template == \"T-SPS_MYP\")\r\n return \"Multi-Year Projects (MYP)\";\r\n if (template == \"T-SPS_ASI\")\r\n return \"Advance Study Institute (ASI)\";\r\n if (template == \"T-SPS_ARW\")\r\n return \"Advanced Research Workshop (ARW)\";\r\n return template;\r\n }\r\n mapBudgetTemplateReverse(name) {\r\n if (name == \"DI NIAG Grants\")\r\n return \"T-DI_NIAG_Grants\";\r\n if (name == \"Advanced Training Course (ATC)\")\r\n return \"T-SPS_ATC\";\r\n if (name == \"Multi-Year Projects (MYP)\")\r\n return \"T-SPS_MYP\";\r\n if (name == \"Advance Study Institute (ASI)\")\r\n return \"T-SPS_ASI\";\r\n if (name == \"Advanced Research Workshop (ARW)\")\r\n return \"T-SPS_ARW\";\r\n return name;\r\n }\r\n}\r\n//# sourceMappingURL=BudgetDetails.jsx.map","import { SharePointRestService, ListNames, LogMessage, LogSeverityEnum } from \"../index\";\r\nexport class ProjectTimeline {\r\n constructor(item) {\r\n this._currentItem = item;\r\n if (this._currentItem != null) {\r\n this._id = item.Id;\r\n this._itemTitle = item.Title;\r\n this._code = item.natoCode;\r\n this._editor = (item.Editor != null) ? item.Editor.Title : null;\r\n this._modifiedOn = new Date(Date.parse(item.Modified));\r\n this._projectTimeline = item.natoProjectTimelineBreakdown;\r\n this._projectTimelineCtrls = item.natoProjectTimelineCtrls;\r\n this.parseMinMaxDates();\r\n }\r\n }\r\n get spItem() {\r\n return this._currentItem;\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get itemTitle() {\r\n return this._itemTitle;\r\n }\r\n set itemTitle(itemTitle) {\r\n this._itemTitle = itemTitle;\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n set code(code) {\r\n this._code = code;\r\n }\r\n get editor() {\r\n return this._editor;\r\n }\r\n set editor(editor) {\r\n this._editor = editor;\r\n }\r\n get modifiedOn() {\r\n return this._modifiedOn;\r\n }\r\n set modifiedOn(modifiedOn) {\r\n this._modifiedOn = modifiedOn;\r\n }\r\n get projectTimeline() {\r\n return this._projectTimeline;\r\n }\r\n set projectTimeline(projectTimeline) {\r\n this._projectTimeline = projectTimeline;\r\n this.parseMinMaxDates();\r\n }\r\n get formControls() {\r\n return this._projectTimelineCtrls;\r\n }\r\n set formControls(projectTimelineCtrls) {\r\n this._projectTimelineCtrls = projectTimelineCtrls;\r\n }\r\n get minimumDate() {\r\n return this._minDate;\r\n }\r\n get maximumDate() {\r\n return this._maxDate;\r\n }\r\n parseMinMaxDates() {\r\n let parsedMilestones = this._projectTimeline ? JSON.parse(this._projectTimeline) : null;\r\n if (parsedMilestones && parsedMilestones.length > 0) {\r\n let parseDate = (milestone) => {\r\n let dateStr = milestone.col_date;\r\n let dateStrParts = dateStr.split(/[\\s//-/.]/);\r\n let date = new Date(Number(dateStrParts[2]), Number(dateStrParts[1]) - 1, Number(dateStrParts[0])); //Remember, months are zero-based\r\n return date;\r\n };\r\n this._minDate = parsedMilestones.reduce((minDate, milestoneData) => {\r\n let date = parseDate(milestoneData);\r\n return date < minDate ? date : minDate;\r\n }, new Date(9999, 11, 31));\r\n this._maxDate = parsedMilestones.reduce((maxDate, milestoneData) => {\r\n let date = parseDate(milestoneData);\r\n return date > maxDate ? date : maxDate;\r\n }, new Date(1970, 0, 1));\r\n }\r\n }\r\n Update() {\r\n if (this._currentItem != null) {\r\n this._currentItem.Title = this._itemTitle;\r\n this._currentItem.natoCode = this._code;\r\n }\r\n let nowDate = new Date(Date.now());\r\n let timestamp = nowDate.getFullYear() + (\"0\" + (nowDate.getMonth() + 1)).slice(-2) + (\"0\" + nowDate.getDate()).slice(-2) + (\"0\" + nowDate.getHours()).slice(-2) + (\"0\" + nowDate.getMinutes()).slice(-2) + (\"0\" + nowDate.getSeconds()).slice(-2);\r\n let item = {\r\n \"Title\": this._itemTitle + \" \" + timestamp,\r\n \"Path\": _spPageContextInfo.webServerRelativeUrl + \"/\" + ListNames.APPLICATIONS,\r\n \"ContentTypeId\": \"0x0120D52000ECEF8712FAB50C419F9E57F98F87E9E8\",\r\n \"ContentType\": \"Application\"\r\n };\r\n //Specific fields found on the ApplicationWizard page2\r\n let additionalFields = {\r\n \"natoProjectTimelineBreakdown\": this._projectTimeline,\r\n \"natoProjectTimelineCtrls\": this._projectTimelineCtrls,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n if ((\"\" + this._currentItem.natoProjectType).toLocaleLowerCase() == \"Multi-Year Project (MYP)\".toLocaleLowerCase()) {\r\n additionalFields[\"natoProjectDate\"] = this._minDate;\r\n additionalFields[\"natoProjectEndDate\"] = this._maxDate;\r\n }\r\n if (this._currentItem != null || this._id > 0) {\r\n LogMessage.Log(\"Updating ProjectTimeline values '\" + this._id + \"'\", this, LogSeverityEnum.Verbose);\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._id + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", additionalFields, headers)\r\n .then(response => {\r\n resolve(this);\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the Project timeline: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n else {\r\n //The new REST API does not support the creation of DocumentSets (yet...), however the old ListData API does.(http://www.itidea.nl/index.php/create-a-document-set-using-jsom-and-rest/)\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_vti_bin/listdata.svc/\" + ListNames.APPLICATIONS;\r\n //The 'Slug'-header is needed in order to create DocumentSets\r\n let headers = {\r\n \"Slug\": _spPageContextInfo.webServerRelativeUrl + \"/\" + ListNames.APPLICATIONS + \"/\" + item.Title + \"|\" + item.ContentTypeId\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", item, headers)\r\n .then(response => {\r\n response.json().then(odata => {\r\n this._id = odata.d.Id;\r\n this.Update().then((details) => {\r\n resolve(details);\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=ProjectTimeline.jsx.map","import { SharePointRestService, ListNames, LogMessage, LogSeverityEnum, SPUtil } from \"../index\";\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { ComboBox } from 'office-ui-fabric-react/lib/ComboBox';\r\nimport { SpinButton } from 'office-ui-fabric-react/lib/SpinButton';\r\nimport { DatePicker } from 'office-ui-fabric-react/lib/DatePicker';\r\n//Class for defining 'Additional Questions' for the DI/NIAG Event Registration process. Additional questions can be defined by the Grant Administrator (or other PowerUsers)\r\n//These additional questions replaced the InfoPath forms DI had in the previous versions\r\nexport class AdditionalQuestions {\r\n constructor(questions) {\r\n this._questions = new Array();\r\n //Parse the questions and save them into a private Array\r\n questions.forEach((questionData) => {\r\n this._questions.push({\r\n Id: Number(questionData.Id),\r\n Title: questionData.Title,\r\n Question: questionData.natoQuestion || questionData.Question || \"-\",\r\n AnswerType: questionData.natoAnswerType || questionData.AnswerType,\r\n Options: (questionData.natoOptions) ? (\"\" + questionData.natoOptions).split('\\n') : (questionData.Options) ? questionData.Options : new Array(),\r\n Expression: (questionData.natoRegularExpression) ? questionData.natoRegularExpression : (questionData.Expression) ? questionData.Expression : undefined,\r\n ValidationMessage: questionData.natoValidationMessage || questionData.ValidationMessage,\r\n Required: questionData.natoRequired || questionData.Required\r\n });\r\n /*\r\n if (questionData.natoQuestion) {\r\n //Data is coming from a SharePoint REST Json object\r\n this._questions.push({\r\n Id: Number(questionData.Id),\r\n Title: questionData.Title,\r\n Question: questionData.natoQuestion,\r\n AnswerType: questionData.natoAnswerType,\r\n Options: (questionData.natoOptions) ? (\"\" + questionData.natoOptions).split('\\n') : new Array(),\r\n Expression: (questionData.natoRegularExpression) ? questionData.natoRegularExpression : undefined,\r\n ValidationMessage: questionData.natoValidationMessage,\r\n Required: questionData.natoRequired\r\n });\r\n }\r\n else {\r\n //Data is being deserialized\r\n this._questions.push({\r\n Id: Number(questionData.Id),\r\n Title: questionData.Title,\r\n Question: questionData.Question,\r\n AnswerType: questionData.AnswerType,\r\n Options: (questionData.Options) ? questionData.Options : new Array(),\r\n Expression: (questionData.Expression) ? questionData.Expression : undefined,\r\n ValidationMessage: questionData.ValidationMessage,\r\n Required: questionData.Required\r\n });\r\n }*/\r\n });\r\n }\r\n //Returns the (internal) question data array\r\n get questionData() {\r\n return this._questions;\r\n }\r\n /**\r\n * Construct a new ReactElement with UI controls based on the parameters of the AdditionlQuestion\r\n * @param {Number} id The id of the additional question to render\r\n * @param {boolean} disabled True to render the controls in disabled mode, false to render the controls in normal mode\r\n * @param {(fieldname: string, value: string | string[] | Date | Number) => void} onValueChange A callback function that is called when the value of the control is changed\r\n * @return {React.ReactElement<{ }>} A ReactElement with the UI controls\r\n */\r\n RenderField(id, value, disabled, onValueChange) {\r\n //Get the correct question-data by ID\r\n let questionData = this._questions.find(q => q.Id == id);\r\n //If the question-data has a validation expression, construct a validation function\r\n let validator;\r\n if (questionData.Expression) {\r\n validator = (value) => {\r\n if ((\"\" + value) == \"\")\r\n return \"\";\r\n let regex = new RegExp(questionData.Expression);\r\n let match = regex.test(value);\r\n if (!match) {\r\n return (questionData.ValidationMessage ? questionData.ValidationMessage : String.format(\"'{0}' is not valid answer\", value));\r\n }\r\n return \"\";\r\n };\r\n }\r\n //Render a TextField\r\n if (questionData.AnswerType.toLocaleLowerCase() == \"text\" || questionData.AnswerType.toLocaleLowerCase() == \"multiline text\") {\r\n return ( { onValueChange(questionData.Title, newValue); }} onGetErrorMessage={validator} deferredValidationTime={validator ? 500 : 0} disabled={disabled} value={value} multiline={questionData.AnswerType.toLocaleLowerCase() == \"multiline text\"} rows={questionData.AnswerType.toLocaleLowerCase() == \"multiline text\" ? 3 : 1}/>);\r\n }\r\n //Render a SpinnerTextField\r\n else if (questionData.AnswerType.toLocaleLowerCase() == \"number\") {\r\n return ( { onValueChange(questionData.Title, Number(newValue) - 1); }} onIncrement={(newValue) => { onValueChange(questionData.Title, Number(newValue) + 1); }} disabled={disabled} value={value}/>);\r\n }\r\n //Render a DatePicker\r\n else if (questionData.AnswerType.toLocaleLowerCase() == \"date\") {\r\n return ( { onValueChange(questionData.Title, newValue); }} isRequired={questionData.Required} disabled={disabled} allowTextInput={true} parseDateFromString={SPUtil.parseDateFromString} value={value}/>);\r\n }\r\n //Render a ComboBox\r\n else if (questionData.AnswerType.toLocaleLowerCase() == \"choice (one selection)\") {\r\n //Create the ComboBox options collection\r\n let options = questionData.Options.map(option => {\r\n return {\r\n key: option,\r\n text: option,\r\n selected: (option == value),\r\n styles: { optionText: { whiteSpace: \"normal\" } }\r\n };\r\n });\r\n return { onValueChange(questionData.Title, newValue.key); }} disabled={disabled} multiSelect={false} text={value}/>;\r\n }\r\n //Render a ComboBox with checkboxes for every item (multi-select)\r\n else if (questionData.AnswerType.toLocaleLowerCase() == \"choice (multiple selections)\") {\r\n //Create different collection objects based on the options\r\n let valueArray = [...value].sort((a, b) => { return a.localeCompare(b); });\r\n let valueSet = new Set(valueArray);\r\n let valueString = valueArray.join(\", \");\r\n //Create the ComboBox options collection\r\n let options = questionData.Options.map(option => {\r\n return {\r\n key: option,\r\n text: option,\r\n selected: false,\r\n styles: { optionText: { whiteSpace: \"normal\" } }\r\n };\r\n });\r\n //Create a wrapper for the 'OnChange' event. This wrapper handles the selection or deselection of the individual checkboxes\r\n let onChangedWrapper = (newValue, index, value) => {\r\n let newSelectedOptions = valueArray;\r\n let optionIndex = valueArray.indexOf(newValue.key.toString());\r\n if (optionIndex >= 0) {\r\n newSelectedOptions.splice(optionIndex, 1); //Remove a selected value\r\n }\r\n else {\r\n newSelectedOptions.push(newValue.key.toString()); //Add a selected value\r\n }\r\n //Call the onValueChange callback with the new values\r\n onValueChange(questionData.Title, newSelectedOptions);\r\n };\r\n return ;\r\n }\r\n }\r\n /**\r\n * Construct a new 'AdditionalQuestions' object from an event object\r\n * @param {number[]} ids The (internal) lookup-IDs of the 'AdditionalQuestions' field. This field is a multi-lookup and the internal value is stored as \"ID;#Val;#ID;#Val...\"\r\n * @return {Promise} The AdditionalQuestions object in a Promise\r\n */\r\n static fromIds(ids) {\r\n let orQueryValues = ids.map(id => {\r\n return \"ID eq \" + id;\r\n });\r\n let query = orQueryValues.join(\" or \");\r\n //Construct the serviceURL to get all specified additional questions\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.ADDITIONAL_QUESTIONS + \"')/items?$filter=\" + query;\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n let questions = new AdditionalQuestions(odata.value);\r\n resolve(questions);\r\n });\r\n })\r\n .catch(reason => {\r\n LogMessage.Log(\"Unable to retrieve the Addition Questions: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n /**\r\n * Construct a new 'AdditionalQuestions' object from an event object\r\n * @param {string} fieldValue The (internal) field value of the 'AdditionalQuestions' field. This field is a multi-lookup and the internal value is stored as \"ID;#Val;#ID;#Val...\"\r\n * @return {Promise} The AdditionalQuestions object in a Promise\r\n */\r\n static fromFieldValue(fieldValue) {\r\n //FieldValue is the internal value of the 'AdditionalQuestions' field. This field is a multi-lookup and the internal value\r\n //is stored as \"ID;#Val;#ID;#Val...\"\r\n //Create a REST where clause (ID eq 1 or ID eq 2 or ID eq 3, etc.)\r\n let ids = new Array();\r\n let seperatedValues = fieldValue.split(\";#\");\r\n for (let i = 0; i < seperatedValues.length; i = i + 2) {\r\n ids.push(Number(seperatedValues[i]));\r\n }\r\n return AdditionalQuestions.fromIds(ids);\r\n }\r\n}\r\n//# sourceMappingURL=AdditionalQuestions.jsx.map","import * as ReactDOM from 'react-dom';\r\nimport { ApprovalDialogComponent, RequestMoreInformationComponent, SPRibbonControl, SPUtil, SetKeyPrioritiesComponent, ChangeAdvisorsComponent, AssignSpecialistComponent, Application, ReviewCommentsComponent, ReviewEvaluationsComponent, ReviewSummaryComponent, User, AssignReviewersComponent, NotifyBudgetOfficersComponent, PublishedGrantData, GrantApplicationWizardComponent, DivisionEnum, InternalApplicationStatusEnum, AmmendApplicationComponent, ApplicationApprovalHistoryComponent, ApplicationStatus, ConfirmDialogComponent, ChangeRequestHistoryComponent, ExchangeRateComponent } from \"../index\";\r\nexport class ManageApplicationsRibbon {\r\n constructor() {\r\n SPRibbonControl.getInstance().then((ribbon) => {\r\n ribbon.executeOrDelayUntilRibbonLoaded(() => {\r\n if (this.shouldRender()) {\r\n this.registerRibbonPageComponent();\r\n let tabObject = ribbon.spRibbon.getChildByTitle(\"Grants\");\r\n if (tabObject == null) {\r\n var tab = new CUI.Tab(ribbon.spRibbon, 'CustomAction.NAS.Tab', 'Grants', 'Use this tab to manage grants', 'CustomAction.NAS.Tab.Command', false, '', null);\r\n ribbon.spRibbon.addChild(tab);\r\n }\r\n Application.getFromContext().then(app => {\r\n ribbon.addGroupToTab(\"Grants\", this.createApplicationDefinition(ribbon, app));\r\n ribbon.addGroupToTab(\"Grants\", this.createAssignmentsDefinition(ribbon, app));\r\n ribbon.addGroupToTab(\"Grants\", this.createReviewEvaluationDefinition(ribbon, app));\r\n ribbon.addGroupToTab(\"Grants\", this.createChangeRequestsDefinition(ribbon, app));\r\n ribbon.addGroupToTab(\"Grants\", this.createApproveRejectDefinition(ribbon, app));\r\n ribbon.selectTabById(\"CustomAction.NAS.Tab\");\r\n ChangeRequestHistoryComponent.ShowNotificationBannerIfNessecary(app);\r\n });\r\n }\r\n });\r\n });\r\n }\r\n shouldRender() {\r\n if (window.docsetHomePageData == null)\r\n return false;\r\n if (Number(window.docsetHomePageData.idDocSet) <= 0)\r\n return false;\r\n return true;\r\n }\r\n createApplicationDefinition(ribbonControl, application) {\r\n let division = application.applicantDetails.division;\r\n var group = new CUI.Group(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.Application\", \"Application\", \"Application\", \"CustomAction.NAS.Tab.Application.Command\", null);\r\n var layout = new CUI.Layout(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.Application.Layout\", \"CustomAction.NAS.Tab.Application.Layout\");\r\n group.addChild(layout);\r\n var section = new CUI.Section(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.Application.Section\", 2, \"Top\"); //2==OneRow\r\n layout.addChild(section);\r\n var row1 = section.getRow(1);\r\n //Button for \"View application details\"\r\n if (division == DivisionEnum.ESC || division == DivisionEnum.PDD) {\r\n let controlProperties_8 = new CUI.ControlProperties();\r\n controlProperties_8.Command = \"CustomAction.NAS.Tab.Application.Control.ApplicationDetails.Command\";\r\n controlProperties_8.Id = (\"CustomAction.NAS.Tab.Application.Control.ApplicationDetails\");\r\n controlProperties_8.TemplateAlias = \"o1\";\r\n controlProperties_8.LabelText = \"View Application Details\";\r\n controlProperties_8.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_8.Image32by32Top = -1;\r\n controlProperties_8.Image32by32Left = -171;\r\n controlProperties_8.ToolTipDescription = \"This action is enabled for everyone allowed to view this application.\";\r\n controlProperties_8.ToolTipTitle = \"View application details as the applicant has entered them.\";\r\n let buttonId_8 = \"CustomAction.NAS.Tab.Application.Button.ApplicationDetails\";\r\n let button_8 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_8, controlProperties_8);\r\n let controlComponent_8 = button_8.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_8);\r\n }\r\n //Button for \"Set key priorities\"\r\n if (division == DivisionEnum.ESC) {\r\n let controlProperties_2 = new CUI.ControlProperties();\r\n controlProperties_2.Command = \"CustomAction.NAS.Tab.Application.Control.SetKeyPriorities.Command\";\r\n controlProperties_2.Id = (\"CustomAction.NAS.Tab.Application.Control.SetKeyPriorities\");\r\n controlProperties_2.TemplateAlias = \"o1\";\r\n controlProperties_2.LabelText = \"Set Key Priorities\";\r\n controlProperties_2.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_2.Image32by32Top = -102;\r\n controlProperties_2.Image32by32Left = -476;\r\n controlProperties_2.ToolTipDescription = \"This action is only enabled for ESC Grants Administrators / Senior Advisors and only when the application has been submitted.\";\r\n controlProperties_2.ToolTipTitle = \"Set the key priorities for this application.\";\r\n let buttonId_2 = \"CustomAction.NAS.Tab.Application.Button.SetKeyPriorities\";\r\n let button_2 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_2, controlProperties_2);\r\n let controlComponent_2 = button_2.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_2);\r\n }\r\n //Button for \"Ammend application\"\r\n if (division == DivisionEnum.ESC) {\r\n let controlProperties_9 = new CUI.ControlProperties();\r\n controlProperties_9.Command = \"CustomAction.NAS.Tab.Application.Control.AmmendApplication.Command\";\r\n controlProperties_9.Id = (\"CustomAction.NAS.Tab.Application.Control.AmmendApplication\");\r\n controlProperties_9.TemplateAlias = \"o1\";\r\n controlProperties_9.LabelText = \"Amend Application\";\r\n controlProperties_9.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_9.Image32by32Top = -204;\r\n controlProperties_9.Image32by32Left = -271;\r\n controlProperties_9.ToolTipDescription = \"This action is only enabled for ESC Grant Administrators / Senior Advisors / Advisors / Budget Officers.\";\r\n controlProperties_9.ToolTipTitle = \"Amend application additional details.\";\r\n let buttonId_9 = \"CustomAction.NAS.Tab.Application.Button.AmmendApplication\";\r\n let button_9 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_9, controlProperties_9);\r\n let controlComponent_9 = button_9.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_9);\r\n }\r\n //Button for \"Version History\"\r\n let controlProperties_10 = new CUI.ControlProperties();\r\n controlProperties_10.Command = \"CustomAction.NAS.Tab.Application.Control.VersionHistory.Command\";\r\n controlProperties_10.Id = (\"CustomAction.NAS.Tab.Application.Control.VersionHistory\");\r\n controlProperties_10.TemplateAlias = \"o1\";\r\n controlProperties_10.LabelText = \"Version History\";\r\n controlProperties_10.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_10.Image32by32Top = -35;\r\n controlProperties_10.Image32by32Left = -171;\r\n controlProperties_10.ToolTipDescription = \"View and manage the version history of the current application\";\r\n controlProperties_10.ToolTipTitle = \"Version History\";\r\n let buttonId_10 = \"CustomAction.NAS.Tab.Application.Button.VersionHistory\";\r\n let button_10 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_10, controlProperties_10);\r\n let controlComponent_10 = button_10.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_10);\r\n group.selectLayout('CustomAction.NAS.Tab.Application.Layout');\r\n return group;\r\n }\r\n createAssignmentsDefinition(ribbonControl, application) {\r\n let division = application.applicantDetails.division;\r\n var group = new CUI.Group(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.Assignments\", \"Assignments\", \"Assignments\", \"CustomAction.NAS.Tab.Assignments.Command\", null);\r\n var layout = new CUI.Layout(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.Assignments.Layout\", \"CustomAction.NAS.Tab.Assignments.Layout\");\r\n group.addChild(layout);\r\n var section = new CUI.Section(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.Assignments.Section\", 2, \"Top\"); //2==OneRow\r\n layout.addChild(section);\r\n var row1 = section.getRow(1);\r\n //Button for \"Assign advisors\"\r\n if (division == DivisionEnum.ESC) {\r\n let controlProperties_3 = new CUI.ControlProperties();\r\n controlProperties_3.Command = \"CustomAction.NAS.Tab.Assignments.Control.AssignAdvisors.Command\";\r\n controlProperties_3.Id = (\"CustomAction.NAS.Tab.Assignments.Control.AssignAdvisors\");\r\n controlProperties_3.TemplateAlias = \"o1\";\r\n controlProperties_3.LabelText = \"Assign Advisors\";\r\n controlProperties_3.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_3.Image32by32Top = -308;\r\n controlProperties_3.Image32by32Left = -272;\r\n controlProperties_3.ToolTipDescription = \"This action is only enabled for ESC Grants Administrators / Senior Advisors and only when the application has been submitted.\";\r\n controlProperties_3.ToolTipTitle = \"Assign Senior Advisors and Advisors for this application.\";\r\n let buttonId_3 = \"CustomAction.NAS.Tab.Assignments.Button.AssignAdvisors\";\r\n let button_3 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_3, controlProperties_3);\r\n let controlComponent_3 = button_3.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_3);\r\n }\r\n //Button for \"Assign Reviewers\"\r\n if (division == DivisionEnum.ESC) {\r\n let controlProperties_7 = new CUI.ControlProperties();\r\n controlProperties_7.Command = \"CustomAction.NAS.Tab.Assignments.Control.AssignReviewers.Command\";\r\n controlProperties_7.Id = (\"CustomAction.NAS.Tab.Assignments.Control.AssignReviewers\");\r\n controlProperties_7.TemplateAlias = \"o1\";\r\n controlProperties_7.LabelText = \"Assign Reviewers\";\r\n controlProperties_7.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_7.Image32by32Top = -408;\r\n controlProperties_7.Image32by32Left = -408;\r\n controlProperties_7.ToolTipDescription = \"This action is only enabled for ESC Senior Advisors / Advisors and only when the application has been submitted.\";\r\n controlProperties_7.ToolTipTitle = \"Assign reviewers for this application.\";\r\n let buttonId_7 = \"CustomAction.NAS.Tab.Assignments.Button.AssignReviewers\";\r\n let button_7 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_7, controlProperties_7);\r\n let controlComponent_7 = button_7.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_7);\r\n }\r\n //Button for \"Assign specialist\"\r\n if (division == DivisionEnum.PDD) {\r\n let controlProperties_13 = new CUI.ControlProperties();\r\n controlProperties_13.Command = \"CustomAction.NAS.Tab.Assignments.Control.AssignSpecialist.Command\";\r\n controlProperties_13.Id = (\"CustomAction.NAS.Tab.Assignments.Control.AssignSpecialist\");\r\n controlProperties_13.TemplateAlias = \"o1\";\r\n controlProperties_13.LabelText = \"Assign Specialist\";\r\n controlProperties_13.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_13.Image32by32Top = -308;\r\n controlProperties_13.Image32by32Left = -272;\r\n controlProperties_13.ToolTipDescription = \"This action is only enabled for PDD Grants Administrators and only when the application has been submitted.\";\r\n controlProperties_13.ToolTipTitle = \"Assign Head Of Section and Section Specialist for this application.\";\r\n let buttonId_13 = \"CustomAction.NAS.Tab.Assignments.Button.AssignSpecialist\";\r\n let button_13 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_13, controlProperties_13);\r\n let controlComponent_13 = button_13.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_13);\r\n }\r\n //Button for \"Notify Budget Officers\"\r\n if (division == DivisionEnum.ESC || division == DivisionEnum.PDD) {\r\n let controlProperties_6 = new CUI.ControlProperties();\r\n controlProperties_6.Command = \"CustomAction.NAS.Tab.Assignments.Control.NotifyBudgetOfficer.Command\";\r\n controlProperties_6.Id = (\"CustomAction.NAS.Tab.Assignments.Control.NotifyBudgetOfficer\");\r\n controlProperties_6.TemplateAlias = \"o1\";\r\n controlProperties_6.LabelText = \"Notify Budget Officers\";\r\n controlProperties_6.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_6.Image32by32Top = -138;\r\n controlProperties_6.Image32by32Left = -444;\r\n controlProperties_6.ToolTipDescription = \"This action is only enabled for \" + ((division == DivisionEnum.ESC) ? \"ESC Grants Administrators / Senior Advisors / Advisors\" : \"PDD Grant Administrators\") + \" and only when the application is submitted, under review or awarded.\";\r\n controlProperties_6.ToolTipTitle = \"Send notification to Budget Officers regarding this application.\";\r\n let buttonId_6 = \"CustomAction.NAS.Tab.Assignments.Button.NotifyBudgetOfficer\";\r\n let button_6 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_6, controlProperties_6);\r\n let controlComponent_6 = button_6.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_6);\r\n }\r\n group.selectLayout('CustomAction.NAS.Tab.Assignments.Layout');\r\n return group;\r\n }\r\n createReviewEvaluationDefinition(ribbonControl, application) {\r\n let division = application.applicantDetails.division;\r\n var group = new CUI.Group(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ReviewEvaluation\", \"Review and Evaluation\", \"Review and Evaluation\", \"CustomAction.NAS.Tab.ReviewEvaluation.Command\", null);\r\n var layout = new CUI.Layout(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ReviewEvaluation.Layout\", \"CustomAction.NAS.Tab.ReviewEvaluation.Layout\");\r\n group.addChild(layout);\r\n var section = new CUI.Section(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ReviewEvaluation.Section\", 2, \"Top\"); //2==OneRow\r\n layout.addChild(section);\r\n var row1 = section.getRow(1);\r\n //Button for \"Add comment\"\r\n if (division == DivisionEnum.ESC || division == DivisionEnum.PDD) {\r\n let controlProperties_1 = new CUI.ControlProperties();\r\n controlProperties_1.Command = \"CustomAction.NAS.Tab.ReviewEvaluation.Control.AddComment.Command\";\r\n controlProperties_1.Id = (\"CustomAction.NAS.Tab.ReviewEvaluation.Control.AddComment\");\r\n controlProperties_1.TemplateAlias = \"o1\";\r\n controlProperties_1.LabelText = \"Add Comment\";\r\n controlProperties_1.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_1.Image32by32Top = -374;\r\n controlProperties_1.Image32by32Left = -68;\r\n controlProperties_1.ToolTipDescription = \"This action is only enabled for \" + ((division == DivisionEnum.ESC) ? \"ESC Grants Administrators / Senior Advisors / Advisors / ISEG Members\" : \"PDD Grants Administrators / Budget Officers\") + \" and only when the application has been submitted or is under review.\";\r\n controlProperties_1.ToolTipTitle = \"Add comments for this application.\";\r\n let buttonId_1 = \"CustomAction.NAS.Tab.ReviewEvaluation.Button.AddComment\";\r\n let button_1 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_1, controlProperties_1);\r\n let controlComponent_1 = button_1.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_1);\r\n }\r\n //Button for \"Add evaluation\"\r\n if (division == DivisionEnum.ESC) {\r\n let controlProperties_11 = new CUI.ControlProperties();\r\n controlProperties_11.Command = \"CustomAction.NAS.Tab.ReviewEvaluation.Control.AddEvaluation.Command\";\r\n controlProperties_11.Id = (\"CustomAction.NAS.Tab.ReviewEvaluation.Control.AddEvaluation\");\r\n controlProperties_11.TemplateAlias = \"o1\";\r\n controlProperties_11.LabelText = \"Add Evaluation\";\r\n controlProperties_11.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_11.Image32by32Top = -306;\r\n controlProperties_11.Image32by32Left = -1;\r\n controlProperties_11.ToolTipDescription = \"This action is only enabled for ESC Reviewers and only when the application is under review or is already reviewed.\";\r\n controlProperties_11.ToolTipTitle = \"Evaluate this application by filling in the evaluation form.\";\r\n let buttonId_11 = \"CustomAction.NAS.Tab.ReviewEvaluation.Button.AddEvaluation\";\r\n let button_11 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_11, controlProperties_11);\r\n let controlComponent_11 = button_11.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_11);\r\n }\r\n //Button for \"Evaluation Summary\"\r\n if (division == DivisionEnum.ESC) {\r\n let controlProperties_12 = new CUI.ControlProperties();\r\n controlProperties_12.Command = \"CustomAction.NAS.Tab.ReviewEvaluation.Control.EvaluationSummary.Command\";\r\n controlProperties_12.Id = (\"CustomAction.NAS.Tab.ReviewEvaluation.Control.EvaluationSummary\");\r\n controlProperties_12.TemplateAlias = \"o1\";\r\n controlProperties_12.LabelText = \"Evaluation Summary\";\r\n controlProperties_12.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_12.Image32by32Top = -34;\r\n controlProperties_12.Image32by32Left = -170;\r\n controlProperties_12.ToolTipDescription = \"This action is only enabled for ESC Grants Administrators / Senior Advisors / Advisors / Budget Officers and only when the application is under review or is already reviewed.\";\r\n controlProperties_12.ToolTipTitle = \"Review the evaluation summary for this application.\";\r\n let buttonId_12 = \"CustomAction.NAS.Tab.ReviewEvaluation.Button.EvaluationSummary\";\r\n let button_12 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_12, controlProperties_12);\r\n let controlComponent_12 = button_12.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_12);\r\n }\r\n group.selectLayout('CustomAction.NAS.Tab.ReviewEvaluation.Layout');\r\n return group;\r\n }\r\n createChangeRequestsDefinition(ribbonControl, application) {\r\n let division = application.applicantDetails.division;\r\n var group = new CUI.Group(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ChangeRequests\", \"Change Requests\", \"Change Requests\", \"CustomAction.NAS.Tab.ChangeRequests.Command\", null);\r\n var layout = new CUI.Layout(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ChangeRequests.Layout\", \"CustomAction.NAS.Tab.ChangeRequests.Layout\");\r\n group.addChild(layout);\r\n var section = new CUI.Section(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ChangeRequests.Section\", 2, \"Top\"); //2==OneRow\r\n layout.addChild(section);\r\n var row1 = section.getRow(1);\r\n //Button for \"Request more information\"\r\n if (division == DivisionEnum.ESC || division == DivisionEnum.PDD) {\r\n let controlProperties_5 = new CUI.ControlProperties();\r\n controlProperties_5.Command = \"CustomAction.NAS.Tab.ChangeRequests.Control.MoreInformation.Command\";\r\n controlProperties_5.Id = (\"CustomAction.NAS.Tab.ChangeRequests.Control.MoreInformation\");\r\n controlProperties_5.TemplateAlias = \"o1\";\r\n controlProperties_5.LabelText = \"Request More Information\";\r\n controlProperties_5.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_5.Image32by32Top = -242;\r\n controlProperties_5.Image32by32Left = -342;\r\n controlProperties_5.ToolTipDescription = \"This action is only enabled when the application has been submitted.\";\r\n controlProperties_5.ToolTipTitle = \"Request more information from the applicant regarding this application.\";\r\n let buttonId_5 = \"CustomAction.NAS.Tab.ChangeRequests.Button.MoreInformation\";\r\n let button_5 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_5, controlProperties_5);\r\n let controlComponent_5 = button_5.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_5);\r\n }\r\n //Button for \"View Change Requests\"\r\n if (division == DivisionEnum.ESC || division == DivisionEnum.PDD) {\r\n let controlProperties_5a = new CUI.ControlProperties();\r\n controlProperties_5a.Command = \"CustomAction.NAS.Tab.ChangeRequests.Control.ChangeRequests.Command\";\r\n controlProperties_5a.Id = (\"CustomAction.NAS.Tab.ChangeRequests.Control.ChangeRequests\");\r\n controlProperties_5a.TemplateAlias = \"o1\";\r\n controlProperties_5a.LabelText = \"View Change Requests\";\r\n controlProperties_5a.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_5a.Image32by32Top = -478;\r\n controlProperties_5a.Image32by32Left = -70;\r\n //controlProperties_5.ToolTipDescription = \"This action is only enabled for \" + ((division == DivisionEnum.ESC) ? \"ESC Grants Administrators / Senior Advisors / Advisors\" : \"PDD Grants Administrators\") + \" and only when the application has been submitted.\";\r\n controlProperties_5a.ToolTipTitle = \"View submitted change requests and approve or reject them.\";\r\n let buttonId_5a = \"CustomAction.NAS.Tab.ChangeRequests.Button.ChangeRequests\";\r\n let button_5a = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_5a, controlProperties_5a);\r\n let controlComponent_5a = button_5a.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_5a);\r\n }\r\n group.selectLayout('CustomAction.NAS.Tab.ChangeRequests.Layout');\r\n return group;\r\n }\r\n createApproveRejectDefinition(ribbonControl, application) {\r\n let division = application.applicantDetails.division;\r\n var group = new CUI.Group(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ApproveReject\", \"Approve or Reject\", \"Approve or Reject\", \"CustomAction.NAS.Tab.ApproveReject.Command\", null);\r\n var layout = new CUI.Layout(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ApproveReject.Layout\", \"CustomAction.NAS.Tab.ApproveReject.Layout\");\r\n group.addChild(layout);\r\n var section = new CUI.Section(ribbonControl.spRibbon, \"CustomAction.NAS.Tab.ApproveReject.Section\", 2, \"Top\"); //2==OneRow\r\n layout.addChild(section);\r\n var row1 = section.getRow(1);\r\n //Button for \"Budget Officer Approval\"\r\n if (division == DivisionEnum.PDD) {\r\n let controlProperties_4 = new CUI.ControlProperties();\r\n controlProperties_4.Command = \"CustomAction.NAS.Tab.ApproveReject.Control.BudgetOfficerApproval.Command\";\r\n controlProperties_4.Id = (\"CustomAction.NAS.Tab.ApproveReject.Control.BudgetOfficerApproval\");\r\n controlProperties_4.TemplateAlias = \"o1\";\r\n controlProperties_4.LabelText = \"Budget Officer Approval\";\r\n controlProperties_4.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_4.Image32by32Top = -68;\r\n controlProperties_4.Image32by32Left = -272;\r\n controlProperties_4.ToolTipDescription = \"This action is only enabled for PDD Budget Officers.\";\r\n controlProperties_4.ToolTipTitle = \"Budget Officer Approval for this application.\";\r\n let buttonId_4 = \"CustomAction.NAS.Tab.ApproveReject.Button.BudgetOfficerApproval\";\r\n let button_4 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_4, controlProperties_4);\r\n let controlComponent_4 = button_4.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_4);\r\n }\r\n //Button for \"Approve/reject\"\r\n if (division == DivisionEnum.ESC || division == DivisionEnum.PDD) {\r\n let controlProperties_4 = new CUI.ControlProperties();\r\n controlProperties_4.Command = \"CustomAction.NAS.Tab.ApproveReject.Control.ApproveReject.Command\";\r\n controlProperties_4.Id = (\"CustomAction.NAS.Tab.ApproveReject.Control.ApproveReject\");\r\n controlProperties_4.TemplateAlias = \"o1\";\r\n controlProperties_4.LabelText = \"Approve/ Reject\";\r\n controlProperties_4.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_4.Image32by32Top = -68;\r\n controlProperties_4.Image32by32Left = -544;\r\n controlProperties_4.ToolTipDescription = \"This action is only enabled for \" + ((division == DivisionEnum.ESC) ? \"ESC Grants Administrators / Senior Advisors\" : \"PDD Grants Administrators\") + \" and only when the application has been submitted or is under review, approved or rejected.\";\r\n controlProperties_4.ToolTipTitle = \"Approve or reject this application.\";\r\n let buttonId_4 = \"CustomAction.NAS.Tab.ApproveReject.Button.ApproveReject\";\r\n let button_4 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_4, controlProperties_4);\r\n let controlComponent_4 = button_4.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_4);\r\n let controlProperties_4a = new CUI.ControlProperties();\r\n controlProperties_4a.Command = \"CustomAction.NAS.Tab.ApproveReject.Control.ApprovalHistory.Command\";\r\n controlProperties_4a.Id = (\"CustomAction.NAS.Tab.ApproveReject.Control.ApprovalHistory\");\r\n controlProperties_4a.TemplateAlias = \"o1\";\r\n controlProperties_4a.LabelText = \"Approval History\";\r\n controlProperties_4a.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_4a.Image32by32Top = -34;\r\n controlProperties_4a.Image32by32Left = -544;\r\n controlProperties_4a.ToolTipDescription = \"TODO\"; //\"This action is only enabled for \" + ((division == DivisionEnum.ESC) ? \"SPS Grants Administrators / Senior Advisors\" : \"PDD Grants Administrators\") + \" and only when the application has been submitted or is under review.\";\r\n controlProperties_4a.ToolTipTitle = \"TODO\"; //\"Approve or reject this application.\";\r\n let buttonId_4a = \"CustomAction.NAS.Tab.ApproveReject.Button.ApproveReject\";\r\n let button_4a = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_4a, controlProperties_4a);\r\n let controlComponent_4a = button_4a.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_4a);\r\n }\r\n //Button for \"Award application\"\r\n if (division == DivisionEnum.ESC || division == DivisionEnum.PDD) {\r\n let controlProperties_10 = new CUI.ControlProperties();\r\n controlProperties_10.Command = \"CustomAction.NAS.Tab.ApproveReject.Control.AwardApplication.Command\";\r\n controlProperties_10.Id = (\"CustomAction.NAS.Tab.ApproveReject.Control.AwardApplication\");\r\n controlProperties_10.TemplateAlias = \"o1\";\r\n controlProperties_10.LabelText = \"Award Application\";\r\n controlProperties_10.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_10.Image32by32Top = -478;\r\n controlProperties_10.Image32by32Left = -72;\r\n controlProperties_10.ToolTipDescription = \"This action is only enabled for \" + ((division == DivisionEnum.ESC) ? \"ESC Grant Administrators\" : \"PDD Grant Administrators\") + \" and only when the application is approved.\";\r\n controlProperties_10.ToolTipTitle = \"Award application.\";\r\n let buttonId_10 = \"CustomAction.NAS.Tab.ApproveReject.Button.AwardApplication\";\r\n let button_10 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_10, controlProperties_10);\r\n let controlComponent_10 = button_10.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_10);\r\n }\r\n //Button for \"Finally reject application\"\r\n if (division == DivisionEnum.ESC || division == DivisionEnum.PDD) {\r\n let controlProperties_11 = new CUI.ControlProperties();\r\n controlProperties_11.Command = \"CustomAction.NAS.Tab.ApproveReject.Control.FinalRejectApplication.Command\";\r\n controlProperties_11.Id = (\"CustomAction.NAS.Tab.ApproveReject.Control.FinalRejectApplication\");\r\n controlProperties_11.TemplateAlias = \"o1\";\r\n controlProperties_11.LabelText = \"Finally Reject Application\";\r\n controlProperties_11.Image32by32 = _spPageContextInfo.webServerRelativeUrl + \"/_layouts/15/1033/Images/formatmap32x32.png?rev=23\";\r\n controlProperties_11.Image32by32Top = -102;\r\n controlProperties_11.Image32by32Left = -546;\r\n controlProperties_11.ToolTipDescription = \"This action is only enabled for \" + ((division == DivisionEnum.ESC) ? \"ESC Grant Administrators\" : \"PDD Grant Administrators\") + \" and only when the application is rejected.\";\r\n controlProperties_11.ToolTipTitle = \"Finally Reject Application\";\r\n let buttonId_11 = \"CustomAction.NAS.Tab.ApproveReject.Button.FinalRejectApplication\";\r\n let button_11 = new CUI.Controls.Button(ribbonControl.spRibbon, buttonId_11, controlProperties_11);\r\n let controlComponent_11 = button_11.createComponentForDisplayMode(\"Large\");\r\n row1.addChild(controlComponent_11);\r\n }\r\n group.selectLayout('CustomAction.NAS.Tab.ApproveReject.Layout');\r\n return group;\r\n }\r\n /**\r\n * The PageComponent is responsible for listening for commands issued by the Ribbon.\r\n * This function creates the PageComponent and registers it to the page.\r\n */\r\n registerRibbonPageComponent() {\r\n //Create the class definition. Because the CUI.Page.PageComponent class is only available at runtime after the Ribbon has been load\r\n //this class definition is created inside a function. Luckiliy this is possible as of TypeScript 1.6.\r\n let ManageApplicationPageComponent = class extends CUI.Page.PageComponent {\r\n constructor(application) {\r\n //Call the CUI.Page.PageComponent constructor\r\n super();\r\n this._handledCommands = {};\r\n this._asyncCommandsEnabled = {};\r\n if (application) {\r\n this._application = application;\r\n }\r\n else {\r\n Application.getFromContext().then(app => {\r\n this._application = app;\r\n });\r\n }\r\n }\r\n init() {\r\n //Empty handlers for the groups that only return true, otherwise the complete group will be disabled\r\n this._handledCommands[\"CustomAction.NAS.Tab.Command\"] = {\r\n enable: () => { return true; },\r\n handle: (commandId, props, seq) => { return void (0); }\r\n };\r\n this._handledCommands[\"CustomAction.NAS.Tab.Application.Command\"] = {\r\n enable: () => { return true; },\r\n handle: (commandId, props, seq) => { return void (0); }\r\n };\r\n this._handledCommands[\"CustomAction.NAS.Tab.Assignments.Command\"] = {\r\n enable: () => { return true; },\r\n handle: (commandId, props, seq) => { return void (0); }\r\n };\r\n this._handledCommands[\"CustomAction.NAS.Tab.ReviewEvaluation.Command\"] = {\r\n enable: () => { return true; },\r\n handle: (commandId, props, seq) => { return void (0); }\r\n };\r\n this._handledCommands[\"CustomAction.NAS.Tab.ChangeRequests.Command\"] = {\r\n enable: () => { return true; },\r\n handle: (commandId, props, seq) => { return void (0); }\r\n };\r\n this._handledCommands[\"CustomAction.NAS.Tab.ApproveReject.Command\"] = {\r\n enable: () => { return true; },\r\n handle: (commandId, props, seq) => { return void (0); }\r\n };\r\n //Command for \"Add Comment\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.ReviewEvaluation.Control.AddComment.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.ReviewEvaluation.Control.AddComment.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n ReviewCommentsComponent.DoesUserHasPermissions().then(userHasPermissions => {\r\n this._asyncCommandsEnabled[commandName] = userHasPermissions;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n let containerId = \"nato-sp-nas-reviewcomments\";\r\n let commentsContainer = document.getElementById(containerId);\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n if (!commentsContainer) {\r\n commentsContainer = document.createElement('DIV');\r\n commentsContainer.id = containerId;\r\n mainContent.appendChild(commentsContainer);\r\n }\r\n //let applicationId: number = this.itemId;\r\n User.getCurrentUser().then((user) => {\r\n ReactDOM.render( { }} onClose={() => { commentsContainer.parentElement.removeChild(commentsContainer); }}/>, document.getElementById(containerId));\r\n });\r\n }\r\n };\r\n //Command for \"Add Evaluation\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.ReviewEvaluation.Control.AddEvaluation.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.ReviewEvaluation.Control.AddEvaluation.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n ReviewEvaluationsComponent.DoesUserHasPermissions().then(userHasPermissions => {\r\n this._asyncCommandsEnabled[commandName] = userHasPermissions;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n let containerId = \"nato-sp-nas-evaluation\";\r\n let evaluationContainer = document.getElementById(containerId);\r\n if (!evaluationContainer) {\r\n evaluationContainer = document.createElement('DIV');\r\n evaluationContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(evaluationContainer);\r\n }\r\n //let applicationId: number = this.itemId;\r\n User.getCurrentUser().then((user) => {\r\n ReactDOM.render( { }} onClose={() => { evaluationContainer.parentElement.removeChild(evaluationContainer); }}/>, document.getElementById(containerId));\r\n });\r\n }\r\n };\r\n //Command for \"Evaluation Summary\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.ReviewEvaluation.Control.EvaluationSummary.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.ReviewEvaluation.Control.EvaluationSummary.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n ReviewSummaryComponent.DoesUserHasPermissions().then(userHasPermissions => {\r\n this._asyncCommandsEnabled[commandName] = userHasPermissions;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n let containerId = \"nato-sp-nas-summary\";\r\n let summaryContainer = document.getElementById(containerId);\r\n if (!summaryContainer) {\r\n summaryContainer = document.createElement('DIV');\r\n summaryContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(summaryContainer);\r\n }\r\n //let applicationId: number = this.itemId;\r\n User.getCurrentUser().then((user) => {\r\n ReactDOM.render( { }} onClose={() => { summaryContainer.parentElement.removeChild(summaryContainer); }}/>, document.getElementById(containerId));\r\n });\r\n }\r\n };\r\n //Command for \"Set Key Priorities\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.Application.Control.SetKeyPriorities.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.Application.Control.SetKeyPriorities.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n SetKeyPrioritiesComponent.DoesUserHasPermissions().then(userHasPermissions => {\r\n this._asyncCommandsEnabled[commandName] = userHasPermissions;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n let containerId = \"nato-sp-nas-keypriorities\";\r\n let prioritiesContainer = document.getElementById(containerId);\r\n if (!prioritiesContainer) {\r\n prioritiesContainer = document.createElement('DIV');\r\n prioritiesContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(prioritiesContainer);\r\n }\r\n ReactDOM.render( { SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK); }} onClose={() => { prioritiesContainer.parentElement.removeChild(prioritiesContainer); }}/>, document.getElementById(containerId));\r\n }\r\n };\r\n //Command for \"Assign Advisors\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.Assignments.Control.AssignAdvisors.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.Assignments.Control.AssignAdvisors.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n ChangeAdvisorsComponent.DoesUserHasPermissions().then(userHasPermissions => {\r\n this._asyncCommandsEnabled[commandName] = userHasPermissions;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n let containerId = \"nato-sp-nas-assignadvisors\";\r\n let assignAdvisorsContainer = document.getElementById(containerId);\r\n if (!assignAdvisorsContainer) {\r\n assignAdvisorsContainer = document.createElement('DIV');\r\n assignAdvisorsContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(assignAdvisorsContainer);\r\n }\r\n ReactDOM.render( { SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK); }} onClose={() => { assignAdvisorsContainer.parentElement.removeChild(assignAdvisorsContainer); }}/>, document.getElementById(containerId));\r\n }\r\n };\r\n //Command for \"Assign Specialist\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.Assignments.Control.AssignSpecialist.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.Assignments.Control.AssignSpecialist.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n AssignSpecialistComponent.DoesUserHasPermissions().then(userHasPermissions => {\r\n this._asyncCommandsEnabled[commandName] = userHasPermissions;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n let containerId = \"nato-sp-nas-assignspecialist\";\r\n let assignSpecialistContainer = document.getElementById(containerId);\r\n if (!assignSpecialistContainer) {\r\n assignSpecialistContainer = document.createElement('DIV');\r\n assignSpecialistContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(assignSpecialistContainer);\r\n }\r\n ReactDOM.render( { SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK); }} onClose={() => { assignSpecialistContainer.parentElement.removeChild(assignSpecialistContainer); }}/>, document.getElementById(containerId));\r\n }\r\n };\r\n //Command for \"Budget Officer Approval\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.ApproveReject.Control.BudgetOfficerApproval.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.ApproveReject.Control.BudgetOfficerApproval.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n ApprovalDialogComponent.DoesUserHasPermissionsBO().then(userHasPermissions => {\r\n this._asyncCommandsEnabled[commandName] = userHasPermissions;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n let containerId = \"nato-sp-nas-budgetofficerapproval\";\r\n let budgetOfficerApprovalContainer = document.getElementById(containerId);\r\n if (!budgetOfficerApprovalContainer) {\r\n budgetOfficerApprovalContainer = document.createElement('DIV');\r\n budgetOfficerApprovalContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(budgetOfficerApprovalContainer);\r\n }\r\n ReactDOM.render( {\r\n this.ShowProgress(\"Updating application\", \"Setting Budget Officer Approval status to 'Approved'\", true);\r\n this._application.ApproveBudget(comment, attachment, oldAttachment).then(() => {\r\n SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK);\r\n });\r\n }} onReject={(comment, attachment, oldAttachment) => {\r\n this.ShowProgress(\"Updating application\", \"Setting Budget Officer Approval status to 'Rejected'\", true);\r\n this._application.RejectBudget(comment, attachment, oldAttachment).then(() => {\r\n SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK);\r\n });\r\n }} onClose={() => {\r\n budgetOfficerApprovalContainer.parentElement.removeChild(budgetOfficerApprovalContainer);\r\n }}/>, document.getElementById(containerId));\r\n }\r\n };\r\n //Command for \"Approve/Reject\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.ApproveReject.Control.ApproveReject.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.ApproveReject.Control.ApproveReject.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n ApprovalDialogComponent.DoesUserHasPermissions().then(userHasPermissions => {\r\n this._asyncCommandsEnabled[commandName] = userHasPermissions;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n let containerId = \"nato-sp-nas-approvereject\";\r\n let approveRejectContainer = document.getElementById(containerId);\r\n if (!approveRejectContainer) {\r\n approveRejectContainer = document.createElement('DIV');\r\n approveRejectContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(approveRejectContainer);\r\n }\r\n let customStatusValues = Object.keys(InternalApplicationStatusEnum).map(v => { return { key: v, value: InternalApplicationStatusEnum[v] }; });\r\n ReactDOM.render( {\r\n this.ShowProgress(\"Updating application\", \"Setting status to 'Approved'\", true);\r\n this._application.Approve(comment, attachment).then(() => {\r\n SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK);\r\n });\r\n }} onReject={(comment, attachment) => {\r\n this.ShowProgress(\"Updating application\", \"Setting status to 'Rejected'\", true);\r\n this._application.Reject(comment, attachment).then(() => {\r\n SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK);\r\n });\r\n }} onCustomStatusSet={(status, comment, attachment) => {\r\n let newStatus = InternalApplicationStatusEnum[status];\r\n this.ShowProgress(\"Updating application\", \"Setting status to '\" + newStatus + \"'\", true);\r\n this._application.SetCustomStatus(newStatus, ApplicationStatus.UNDER_REVIEW, comment, attachment, this._application.applicantDetails.division == DivisionEnum.ESC).then(() => {\r\n SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK);\r\n });\r\n }} onClose={() => {\r\n approveRejectContainer.parentElement.removeChild(approveRejectContainer);\r\n }}/>, document.getElementById(containerId));\r\n }\r\n };\r\n //Command for \"Approval History\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.ApproveReject.Control.ApprovalHistory.Command\"] = {\r\n enable: () => {\r\n return true;\r\n },\r\n handle: (commandId, props, seq) => {\r\n let containerId = \"nato-sp-nas-approvalhistory\";\r\n let approvalHistoryContainer = document.getElementById(containerId);\r\n if (!approvalHistoryContainer) {\r\n approvalHistoryContainer = document.createElement('DIV');\r\n approvalHistoryContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(approvalHistoryContainer);\r\n }\r\n ReactDOM.render( {\r\n approvalHistoryContainer.parentElement.removeChild(approvalHistoryContainer);\r\n }}/>, document.getElementById(containerId));\r\n }\r\n };\r\n //Command for \"Request more information\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.ChangeRequests.Control.MoreInformation.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.ChangeRequests.Control.MoreInformation.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n RequestMoreInformationComponent.DoesUserHasPermissions().then(userHasPermissions => {\r\n this._asyncCommandsEnabled[commandName] = userHasPermissions;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n let containerId = \"nato-sp-nas-requestmoreinfo\";\r\n let requestMoreInfoContainer = document.getElementById(containerId);\r\n if (!requestMoreInfoContainer) {\r\n requestMoreInfoContainer = document.createElement('DIV');\r\n requestMoreInfoContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(requestMoreInfoContainer);\r\n }\r\n ReactDOM.render( { SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK); }} onClose={() => { requestMoreInfoContainer.parentElement.removeChild(requestMoreInfoContainer); }}/>, document.getElementById(containerId));\r\n }\r\n };\r\n //Command for \"View Change Requests\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.ChangeRequests.Control.ChangeRequests.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.ChangeRequests.Control.ChangeRequests.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n let buttonEnabled = this._application.applicationStatus != ApplicationStatus.DRAFT;\r\n this._asyncCommandsEnabled[commandName] = buttonEnabled;\r\n RefreshCommandUI();\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n ChangeRequestHistoryComponent.showInDialog(this._application);\r\n }\r\n };\r\n //Command for \"Notify budget officer\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.Assignments.Control.NotifyBudgetOfficer.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.Assignments.Control.NotifyBudgetOfficer.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n NotifyBudgetOfficersComponent.DoesUserHasPermissions().then(userHasPermissions => {\r\n this._asyncCommandsEnabled[commandName] = userHasPermissions;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n let containerId = \"nato-sp-nas-notifybudgetofficers\";\r\n let notifyBudgetOfficersContainer = document.getElementById(containerId);\r\n if (!notifyBudgetOfficersContainer) {\r\n notifyBudgetOfficersContainer = document.createElement('DIV');\r\n notifyBudgetOfficersContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(notifyBudgetOfficersContainer);\r\n }\r\n ReactDOM.render( { SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK); }} onClose={() => { notifyBudgetOfficersContainer.parentElement.removeChild(notifyBudgetOfficersContainer); }}/>, document.getElementById(containerId));\r\n }\r\n };\r\n //Command for \"Assign reviewers\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.Assignments.Control.AssignReviewers.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.Assignments.Control.AssignReviewers.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n AssignReviewersComponent.DoesUserHasPermissions().then(userHasPermissions => {\r\n this._asyncCommandsEnabled[commandName] = userHasPermissions;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n let containerId = \"nato-sp-nas-assignreviewers\";\r\n let assignReviewers = document.getElementById(containerId);\r\n if (!assignReviewers) {\r\n assignReviewers = document.createElement('DIV');\r\n assignReviewers.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(assignReviewers);\r\n }\r\n ReactDOM.render( { SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK); }} onClose={() => { assignReviewers.parentElement.removeChild(assignReviewers); }}/>, document.getElementById(containerId));\r\n }\r\n };\r\n //Command for \"Application Details\"\r\n this._handledCommands[\"CustomAction.NAS.Tab.Application.Control.ApplicationDetails.Command\"] = {\r\n enable: () => {\r\n return true;\r\n },\r\n handle: (commandId, props, seq) => {\r\n let grantCode = this._application.applicantDetails.code;\r\n PublishedGrantData.getByCode(grantCode).then(publishedGrantData => {\r\n GrantApplicationWizardComponent.ShowInDialog(publishedGrantData, this._application);\r\n });\r\n }\r\n };\r\n //Command for \"Ammend application\" \r\n this._handledCommands[\"CustomAction.NAS.Tab.Application.Control.AmmendApplication.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.Application.Control.AmmendApplication.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n AmmendApplicationComponent.DoesUserHasPermissions().then(userHasPermissions => {\r\n this._asyncCommandsEnabled[commandName] = userHasPermissions;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n let containerId = \"nato-sp-nas-ammendapplication\";\r\n let ammendApplicationContainer = document.getElementById(containerId);\r\n if (!ammendApplicationContainer) {\r\n ammendApplicationContainer = document.createElement('DIV');\r\n ammendApplicationContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(ammendApplicationContainer);\r\n }\r\n ReactDOM.render( { SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK); }} onClose={() => { ammendApplicationContainer.parentElement.removeChild(ammendApplicationContainer); }}/>, document.getElementById(containerId));\r\n }\r\n };\r\n //Command for \"Version History\" \r\n this._handledCommands[\"CustomAction.NAS.Tab.Application.Control.VersionHistory.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.ApproveReject.Control.VersionHistory.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n User.isGrantAdministrator(this._application.applicantDetails.division).then(isAdmin => {\r\n this._asyncCommandsEnabled[commandName] = isAdmin;\r\n RefreshCommandUI();\r\n });\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n let url = _spPageContextInfo.webAbsoluteUrl + '/' + _spPageContextInfo.layoutsUrl + '/Versions.aspx?list=' + this._application.listId + '&ID=' + this._application.id;\r\n let options = new SP.UI.DialogOptions();\r\n options.title = \"Verion History\";\r\n options.allowMaximize = false;\r\n options.showClose = true;\r\n options.showMaximized = false;\r\n options.autoSize = true;\r\n options.url = url;\r\n let dialog = SP.UI.ModalDialog.showModalDialog(options);\r\n }\r\n };\r\n //Command for \"Award application\" \r\n this._handledCommands[\"CustomAction.NAS.Tab.ApproveReject.Control.AwardApplication.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.ApproveReject.Control.AwardApplication.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n if (this._application.applicationStatus == ApplicationStatus.UNDER_REVIEW) {\r\n this._application.approvalStatus.then((status) => {\r\n if (status == InternalApplicationStatusEnum.APPROVED || status == InternalApplicationStatusEnum.APPROVED_READY_FOR_INTERFACE) {\r\n User.isGrantAdministrator(this._application.applicantDetails.division).then(isAdmin => {\r\n this._asyncCommandsEnabled[commandName] = isAdmin;\r\n RefreshCommandUI();\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n this._asyncCommandsEnabled[commandName] = false;\r\n }\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n if (this._application.applicationStatus == ApplicationStatus.UNDER_REVIEW) {\r\n this._application.approvalStatus.then((status) => {\r\n if (status == InternalApplicationStatusEnum.APPROVED || status == InternalApplicationStatusEnum.APPROVED_READY_FOR_INTERFACE) {\r\n // Confirm the Award action with a dialog\r\n let containerId = \"nato-sp-nas-award\";\r\n let awardContainer = document.getElementById(containerId);\r\n if (!awardContainer) {\r\n awardContainer = document.createElement('DIV');\r\n awardContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(awardContainer);\r\n }\r\n let checkListName = \"\";\r\n if (this._application.applicantDetails.division == DivisionEnum.ESC) {\r\n checkListName = \"award\";\r\n }\r\n let exchangeRateComponent = null;\r\n let exchangeRateClass = null;\r\n if (this._application.projectBudget.budgetCurrency.toLocaleUpperCase() != \"EUR\") {\r\n exchangeRateComponent = exchangeRateClass = e} application={this._application}/>;\r\n }\r\n ReactDOM.render( {\r\n let currencyPromise;\r\n if (exchangeRateComponent != null && exchangeRateClass != null) {\r\n //Use the exchange rate to update the project breakdown structure with the provided exchange rate\r\n currencyPromise = exchangeRateClass.updateBudgetBreakdown();\r\n }\r\n else {\r\n //If no exchange of currency is required, just copy the project breakdown structure\r\n currencyPromise = this._application.projectBudget.updateProjectBudgetEurField(this._application.projectBudget.budgetBreakdown);\r\n }\r\n this.ShowProgress(\"Updating application\", \"Setting status to 'Awarded'\", true);\r\n currencyPromise.then(() => {\r\n this._application.Award().then(() => {\r\n SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK);\r\n });\r\n });\r\n }} onCancel={() => { }} onClose={() => { awardContainer.parentElement.removeChild(awardContainer); }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{exchangeRateComponent}\r\n\t\t\t\t\t\t\t\t\t\t, document.getElementById(containerId));\r\n }\r\n });\r\n }\r\n }\r\n };\r\n //Command for \"Finally Reject application\" \r\n this._handledCommands[\"CustomAction.NAS.Tab.ApproveReject.Control.FinalRejectApplication.Command\"] = {\r\n enable: () => {\r\n let commandName = \"CustomAction.NAS.Tab.Application.Control.FinalRejectApplication.Command\";\r\n if (this._asyncCommandsEnabled[commandName] !== undefined) {\r\n return this._asyncCommandsEnabled[commandName];\r\n }\r\n else {\r\n if (this._application.applicationStatus == ApplicationStatus.UNDER_REVIEW) {\r\n this._application.approvalStatus.then((status) => {\r\n if (status == InternalApplicationStatusEnum.REJECTED) {\r\n User.isGrantAdministrator(this._application.applicantDetails.division).then(isAdmin => {\r\n this._asyncCommandsEnabled[commandName] = isAdmin;\r\n RefreshCommandUI();\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n this._asyncCommandsEnabled[commandName] = false;\r\n }\r\n return false;\r\n }\r\n },\r\n handle: (commandId, props, seq) => {\r\n if (this._application.applicationStatus == ApplicationStatus.UNDER_REVIEW) {\r\n this._application.approvalStatus.then((status) => {\r\n if (status == InternalApplicationStatusEnum.REJECTED) {\r\n // Confirm the Reject action with a dialog\r\n let containerId = \"nato-sp-nas-finally-reject\";\r\n let rejectContainer = document.getElementById(containerId);\r\n if (!rejectContainer) {\r\n rejectContainer = document.createElement('DIV');\r\n rejectContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(rejectContainer);\r\n }\r\n ReactDOM.render( {\r\n this.ShowProgress(\"Updating application\", \"Setting status to 'Rejected'\", true);\r\n this._application.FinallyReject().then(() => {\r\n SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK);\r\n });\r\n }} onCancel={() => { }} onClose={() => { rejectContainer.parentElement.removeChild(rejectContainer); }}/>, document.getElementById(containerId));\r\n }\r\n });\r\n }\r\n }\r\n };\r\n this._commands = Object.keys(this._handledCommands);\r\n }\r\n getFocusedCommands() {\r\n return [];\r\n }\r\n getGlobalCommands() {\r\n return this._commands;\r\n }\r\n canHandleCommand(commandId) {\r\n let handlerFunction = this._handledCommands[commandId].enable;\r\n if (typeof (handlerFunction) == \"function\") {\r\n return handlerFunction();\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n handleCommand(commandId, properties, sequence) {\r\n return this._handledCommands[commandId].handle(commandId, properties, sequence);\r\n }\r\n isFocusable() {\r\n return true;\r\n }\r\n yieldFocus() {\r\n return true;\r\n }\r\n receiveFocus() {\r\n return true;\r\n }\r\n handleGroup() {\r\n //Do nothing\r\n }\r\n get listId() {\r\n return new SP.Guid(_spPageContextInfo.pageListId);\r\n }\r\n get itemId() {\r\n return Number(SPUtil.parseQuerystring(window.location.search)[\"ID\"]);\r\n }\r\n ShowProgress(title, message, progressImageVisibility = true) {\r\n if (this._progressDialog) {\r\n this._progressDialog.get_dialogElement().getElementsByClassName(\"nato-dialog-content\")[0].innerHTML += \" ✔
\" + message;\r\n this._progressDialog.autoSize();\r\n }\r\n else {\r\n this._progressDialog = SP.UI.ModalDialog.showWaitScreenWithNoClose(title, \"\" + message + \"\");\r\n }\r\n this._progressDialog.get_dialogElement().getElementsByTagName(\"IMG\")[1].style.display = progressImageVisibility ? \"\" : \"none\";\r\n }\r\n };\r\n //Get the current application and load the PageComponent\r\n Application.getFromContext().then(app => {\r\n //Create the 'pageComponent' object from the 'PageComponent' class\r\n let pageComponent = new ManageApplicationPageComponent(app);\r\n //Retrieve the PageManager object from the Ribbon\r\n var ribbonPageManager = SP.Ribbon.PageManager.get_instance();\r\n //Register the PageComponent\r\n ribbonPageManager.addPageComponent(pageComponent);\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=ManageApplicationsRibbon.jsx.map","import { LocalStorageCache, LogMessage, LogSeverityEnum, DivisionEnum } from \"../index\";\r\n//This class will fill default values for (new) Application items\r\n//An application is typically created by an applicant, which does not have a lot of permissions on the site\r\n//Some 'Default' values require more information about the site, so these values are created on the fly\r\nexport class ApplicationAsyncDefaultValues {\r\n constructor() {\r\n this._programNumberField = \"natoProjectNumber\";\r\n this._seniorAdvisorsField = \"natoSeniorAdvisors\";\r\n this._divisionField = \"natoDivision\";\r\n this._listPermissionLevelNeeded = SP.PermissionKind.approveItems;\r\n this._currentUserHasEnoughPermissionsForUpdate = true;\r\n this._permissionsForCurrentUserHaveBeenQueried = false;\r\n this._cacheKey = \"ApplicationAsyncDefaultValues\";\r\n this.readPermissionsFromCache();\r\n if (ApplicationAsyncDefaultValues._updatedListItems == null) {\r\n ApplicationAsyncDefaultValues._updatedListItems = {};\r\n }\r\n }\r\n readPermissionsFromCache() {\r\n let cachedData = LocalStorageCache.tryGetFromCache(this._cacheKey, (cachedData) => {\r\n return {\r\n hasPermissions: cachedData.hasPermissions,\r\n };\r\n }, new Date(new Date(0).setHours(4)));\r\n if (cachedData) {\r\n this._currentUserHasEnoughPermissionsForUpdate = cachedData.hasPermissions;\r\n this._permissionsForCurrentUserHaveBeenQueried = true;\r\n }\r\n }\r\n /**\r\n * Queries the specified list for all items without Senior Advisors and updates the found items with the members of the Senior Advisors group\r\n * @param {SP.Guid} listId The SharePoint ListID to query\r\n * @return {Promise} A promise containing all updates ListItems\r\n */\r\n setSeniorAdvisors(listId) {\r\n if (this._permissionsForCurrentUserHaveBeenQueried && !this._currentUserHasEnoughPermissionsForUpdate) {\r\n return Promise.reject(\"User did not have enough permissions to update the Senior Advisors\");\r\n }\r\n //Get the basic SharePoint information from the ClientContext\r\n let context = SP.ClientContext.get_current();\r\n let web = context.get_web();\r\n let list = web.get_lists().getById(listId);\r\n //Load the members of the Senior Advisors group\r\n let seniorAdvisorsGroup = context.get_web().get_siteGroups().getByName(\"ESC Senior Advisors\"); //TO-DO; get Senior Advisors of the correct group\r\n let seniorAdvisorsGroupMembers = seniorAdvisorsGroup.get_users();\r\n //Create a CAML query to retrieve only items where the SeniorAdvisors field has no value\r\n let query = new SP.CamlQuery();\r\n query.set_viewXml(\"\");\r\n let applications = list.getItems(query);\r\n //Load everything from SharePoint\r\n context.load(web);\r\n context.load(list, \"EffectiveBasePermissions\");\r\n context.load(applications, \"Include(Id, \" + this._seniorAdvisorsField + \", EffectiveBasePermissions)\");\r\n context.load(seniorAdvisorsGroup);\r\n context.load(seniorAdvisorsGroupMembers);\r\n return new Promise((resolve, reject) => {\r\n //Create an array to hold all the items we want to return eventually\r\n let updatedListItems = new Array();\r\n context.executeQueryAsync((sender, args) => {\r\n let userCanEditList = list.get_effectiveBasePermissions().has(this._listPermissionLevelNeeded);\r\n LocalStorageCache.tryStoreInCache(this._cacheKey, { hasPermissions: userCanEditList });\r\n //Check if the user has EditPermissions on the list. If the user does not have it, skip this entiry function\r\n if (userCanEditList) {\r\n //Create a collection with all claims for the Senior Advisors\r\n let seniorAdvisorClaims = new Array();\r\n let seniorAdvisorUsers = new Array();\r\n let userEnumerator = seniorAdvisorsGroupMembers.getEnumerator();\r\n while (userEnumerator.moveNext()) {\r\n let user = userEnumerator.get_current();\r\n seniorAdvisorUsers.push(user);\r\n seniorAdvisorClaims.push(SP.FieldUserValue.fromUser(user.get_loginName()));\r\n }\r\n //Loop over the ListItems (all items without Senior Advisors)\r\n let listItemEnumerator = applications.getEnumerator();\r\n while (listItemEnumerator.moveNext()) {\r\n let item = listItemEnumerator.get_current();\r\n //Check if the current user can edit the retrieved ListItem\r\n if (item.get_effectiveBasePermissions().has(SP.PermissionKind.editListItems)) {\r\n //Update the ListItem and set the Senior Advisors\r\n item.set_item(this._seniorAdvisorsField, seniorAdvisorClaims);\r\n item.update();\r\n updatedListItems.push(item);\r\n context.load(item);\r\n }\r\n }\r\n //Push the 'update' to SharePoint\r\n context.executeQueryAsync((sender, args) => {\r\n //Succesfully updated the ListItems\r\n let advisorDataCollection = seniorAdvisorUsers.map(user => { return { claim: user.get_loginName(), name: user.get_title(), id: user.get_id() }; });\r\n updatedListItems.forEach(item => {\r\n if (ApplicationAsyncDefaultValues._updatedListItems[item.get_id()] != null) {\r\n ApplicationAsyncDefaultValues._updatedListItems[item.get_id()].seniorAdvisors = advisorDataCollection;\r\n }\r\n else {\r\n ApplicationAsyncDefaultValues._updatedListItems[item.get_id()] = {\r\n projectNumber: null,\r\n seniorAdvisors: advisorDataCollection\r\n };\r\n }\r\n });\r\n resolve(ApplicationAsyncDefaultValues._updatedListItems);\r\n }, (sender, args) => {\r\n //There was a problem pushing the changes to SharePoint\r\n //TODO: happens sometimes... please investigate\r\n LogMessage.Log(\"Error saving Senior Advisors: '\" + args.get_errorDetails() + \"'\", this, LogSeverityEnum.Error);\r\n reject(args.get_errorDetails());\r\n });\r\n } //End-if: User does not have list permissions\r\n else {\r\n reject(\"User did not have enough permissions to update the Senior Advisors\");\r\n }\r\n }, (sender, args) => {\r\n //There was an error querying the ListItems or the Senior Advisors\r\n LogMessage.Log(\"Error updating Senior Advisors: '\" + args.get_errorDetails() + \"'\", this, LogSeverityEnum.Error);\r\n reject(args.get_errorDetails());\r\n });\r\n });\r\n }\r\n /**\r\n * Queries the specified list for all items without the Program Number set and updates the found items with a new (sequential) Program Number\r\n * @param {SP.Guid} listId The SharePoint ListID to query\r\n * @return {Promise} A promise containing all updates ListItems\r\n */\r\n setProgramNumber(listId) {\r\n //TODO: Solve concurrency problem for this one..\r\n if (this._permissionsForCurrentUserHaveBeenQueried && !this._currentUserHasEnoughPermissionsForUpdate) {\r\n return Promise.reject(\"User did not have enough permissions to update the Project Number\");\r\n }\r\n //Get the basic SharePoint information from the ClientContext\r\n let context = SP.ClientContext.get_current();\r\n let web = context.get_web();\r\n let list = web.get_lists().getById(listId);\r\n //Get all 'Application' objects from the list. We need all objects in order to find out which one has the highest 'Program Number'\r\n let query = new SP.CamlQuery();\r\n query.set_viewXml(\"Application\");\r\n let applications = list.getItems(query);\r\n //Load everything from SharePoint\r\n context.load(web);\r\n context.load(list, \"EffectiveBasePermissions\");\r\n context.load(applications, \"Include(Id, \" + this._programNumberField + \", \" + this._divisionField + \", EffectiveBasePermissions)\");\r\n return new Promise((resolve, reject) => {\r\n context.executeQueryAsync((sender, args) => {\r\n let userCanEditList = list.get_effectiveBasePermissions().has(this._listPermissionLevelNeeded);\r\n LocalStorageCache.tryStoreInCache(this._cacheKey, { hasPermissions: userCanEditList });\r\n //Check if the user has EditPermissions on the list. If the user does not have it, skip this entiry function\r\n if (userCanEditList) {\r\n let highestProgramNumber = 0; //Keep track of the highest Program Number found so far\r\n let applicationsWithoutProgramNumber = new Array(); //Keep track of all applications without a Project Number\r\n let allButNumbersRegex = /\\D/g; //Regular Expressions to extract the Program Number from text\r\n //Loop over all Applications in order to find the largest/highest Project Number\r\n let listItemEnumerator = applications.getEnumerator();\r\n while (listItemEnumerator.moveNext()) {\r\n let item = listItemEnumerator.get_current();\r\n //Check if this item already has a Project Number\r\n let programNumberStr = item.get_item(this._programNumberField);\r\n if (programNumberStr && programNumberStr.length > 0) {\r\n try {\r\n programNumberStr = programNumberStr.replace(allButNumbersRegex, \"\");\r\n let programNumber = Number.parseInt(programNumberStr);\r\n highestProgramNumber = Math.max(highestProgramNumber, programNumber);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n else {\r\n //There is no Project Number for this Item, so we add it to a list to get updated \r\n applicationsWithoutProgramNumber.push(item);\r\n }\r\n }\r\n //Update all items without a Project Number\r\n applicationsWithoutProgramNumber\r\n .sort((a, b) => { return a.get_id() - b.get_id(); }) //Sort by Id and loop over all items\r\n .forEach(item => {\r\n //Check if the current user has enough permissions to update the item\r\n if (item.get_effectiveBasePermissions().has(SP.PermissionKind.editListItems)) {\r\n if (ApplicationAsyncDefaultValues._updatedListItems[item.get_id()] == null ||\r\n ApplicationAsyncDefaultValues._updatedListItems[item.get_id()].projectNumber == null) {\r\n //Increase the Project Number by 1 and update the ListItem\r\n highestProgramNumber++;\r\n let division = \"\" + item.get_item(\"natoDivision\");\r\n let newProgramNumber = this.prefixProgramNumber(highestProgramNumber, division);\r\n if (ApplicationAsyncDefaultValues._updatedListItems[item.get_id()] != null) {\r\n ApplicationAsyncDefaultValues._updatedListItems[item.get_id()].projectNumber = newProgramNumber;\r\n }\r\n else {\r\n ApplicationAsyncDefaultValues._updatedListItems[item.get_id()] = {\r\n projectNumber: newProgramNumber,\r\n seniorAdvisors: new Array()\r\n };\r\n }\r\n item.set_item(this._programNumberField, newProgramNumber);\r\n item.update();\r\n context.load(item);\r\n }\r\n }\r\n });\r\n context.executeQueryAsync((sender, args) => {\r\n /*\r\n applicationsWithoutProgramNumber.forEach(item => {\r\n if (ApplicationAsyncDefaultValues._updatedListItems[item.get_id()] != null) {\r\n ApplicationAsyncDefaultValues._updatedListItems[item.get_id()].projectNumber = item.get_item(this._programNumberField);\r\n }\r\n else {\r\n ApplicationAsyncDefaultValues._updatedListItems[item.get_id()] = {\r\n projectNumber: item.get_item(this._programNumberField),\r\n seniorAdvisors: new Array()\r\n }\r\n }\r\n })*/\r\n resolve(ApplicationAsyncDefaultValues._updatedListItems);\r\n }, (sender, args) => {\r\n //There was an error updating the ListItems\r\n LogMessage.Log(\"Error saving Project Numbers: '\" + args.get_errorDetails() + \"'\", this, LogSeverityEnum.Error);\r\n reject(args.get_errorDetails());\r\n });\r\n }\r\n else {\r\n //User does not have enough permissions on the list\r\n reject(\"User did not have enough permissions to update the Senior Advisors\");\r\n }\r\n }, (sender, args) => {\r\n //There was an error updating the ListItems\r\n LogMessage.Log(\"Error retrieving items for updating Project Numbers: '\" + args.get_errorDetails() + \"'\", this, LogSeverityEnum.Error);\r\n reject(args.get_errorDetails());\r\n });\r\n });\r\n }\r\n prefixProgramNumber(x, division) {\r\n let prefixStr = \"\";\r\n if (division.toLocaleUpperCase() == DivisionEnum[DivisionEnum.ESC]) {\r\n prefixStr = \"G\";\r\n }\r\n else if (division.toLocaleUpperCase() == DivisionEnum[DivisionEnum.PDD]) {\r\n prefixStr = \"R\";\r\n }\r\n let numberOfLeadingCharacter = 7;\r\n let fillCharacter = \"0\";\r\n let programNumber = prefixStr + (fillCharacter.repeat(numberOfLeadingCharacter) + Math.round(x).toString()).slice(numberOfLeadingCharacter * -1);\r\n return programNumber;\r\n }\r\n}\r\n//# sourceMappingURL=ApplicationAsyncDefaultValues.jsx.map","export class Nationalities {\r\n static asOptions() {\r\n return Nationalities.List.map(nationality => {\r\n return {\r\n key: nationality,\r\n text: nationality,\r\n styles: {\r\n optionText: {\r\n whiteSpace: \"normal\"\r\n }\r\n }\r\n };\r\n });\r\n }\r\n}\r\nNationalities.List = [\r\n \"Afghani\",\r\n \"Alandic\",\r\n \"Albanian\",\r\n \"Algerian\",\r\n \"American\",\r\n \"Andorran\",\r\n \"Angolan\",\r\n \"Anguillan\",\r\n \"Antarctic\",\r\n \"Antiguan\",\r\n \"Argentine\",\r\n \"Armenian\",\r\n \"Arubian\",\r\n \"Ascension\",\r\n \"Australian\",\r\n \"Austrian\",\r\n \"Azerbaijani\",\r\n \"Bahameese\",\r\n \"Bahrainian\",\r\n \"Bangladeshi\",\r\n \"Barbadian\",\r\n \"Belarusian\",\r\n \"Belgian\",\r\n \"Belizean\",\r\n \"Beninese\",\r\n \"Bermudan\",\r\n \"Bhutanese\",\r\n \"Bolivian\",\r\n \"Bosnian\",\r\n \"Bouvet Island\",\r\n \"Brazilian\",\r\n \"British\",\r\n \"British Indian Ocean Territory\",\r\n \"Bruneian\",\r\n \"Bulgarian\",\r\n \"Burkinabe\",\r\n \"Burundian\",\r\n \"Cambodian\",\r\n \"Cameroonian\",\r\n \"Canadian\",\r\n \"Cape Verdean\",\r\n \"Caymanian\",\r\n \"Central African\",\r\n \"Chadian\",\r\n \"Chilean\",\r\n \"Chinese\",\r\n \"Christmas Islander\",\r\n \"Cocossian\",\r\n \"Colombian\",\r\n \"Comoran\",\r\n \"Congolese\",\r\n \"Cook Islander\",\r\n \"Costa Rican\",\r\n \"Croatian\",\r\n \"Cuban\",\r\n \"Cypriot\",\r\n \"Czech\",\r\n \"Danish\",\r\n \"Djiboutian\",\r\n \"Dominican\",\r\n \"Dutch\",\r\n \"Ecuadorean\",\r\n \"Egyptian\",\r\n \"Emirati\",\r\n \"Emirian\",\r\n \"Equatorial Guinean\",\r\n \"Eritrean\",\r\n \"Estonian\",\r\n \"Ethiopian\",\r\n \"Falkland Islander\",\r\n \"Faroese\",\r\n \"Fijian\",\r\n \"Filipino\",\r\n \"Finnish\",\r\n \"French\",\r\n \"French Guianese\",\r\n \"French Polynesian\",\r\n \"French Southern Territories\",\r\n \"Gabonese\",\r\n \"Gambian\",\r\n \"Georgian\",\r\n \"German\",\r\n \"Ghanaian\",\r\n \"Gibralterian\",\r\n \"Greek\",\r\n \"Greenlander\",\r\n \"Grenadian\",\r\n \"Guadeloupean\",\r\n \"Guamanian\",\r\n \"Guatemalan\",\r\n \"Guernsey\",\r\n \"Guinean\",\r\n \"Guyanese\",\r\n \"Haitian\",\r\n \"Heard and McDonald Islands\",\r\n \"Honduran\",\r\n \"Hong Konger\",\r\n \"Hungarian\",\r\n \"Icelander\",\r\n \"I-Kiribati\",\r\n \"Indian\",\r\n \"Indonesian\",\r\n \"Iranian\",\r\n \"Iraqi\",\r\n \"Irish\",\r\n \"Israeli\",\r\n \"Italian\",\r\n \"Ivorian\",\r\n \"Jamaican\",\r\n \"Japanese\",\r\n \"Jersey\",\r\n \"Jordanian\",\r\n \"Kazakhstani\",\r\n \"Kenyan\",\r\n \"Kittian\",\r\n \"Kosovar\",\r\n \"Kuwaiti\",\r\n \"Kyrgyzstani\",\r\n \"Laotian\",\r\n \"Latvian\",\r\n \"Lebanese\",\r\n \"Liberian\",\r\n \"Libyan\",\r\n \"Liechtensteiner\",\r\n \"Lithunian\",\r\n \"Luxembourger\",\r\n \"Macanese\",\r\n \"Macedonian\",\r\n \"Mahoran\",\r\n \"Malagasy\",\r\n \"Malawian\",\r\n \"Malaysian\",\r\n \"Maldivan\",\r\n \"Malian\",\r\n \"Maltese\",\r\n \"Manx\",\r\n \"Marshallese\",\r\n \"Martinican\",\r\n \"Mauritanian\",\r\n \"Mauritian\",\r\n \"Mexican\",\r\n \"Micronesian\",\r\n \"Moldovan\",\r\n \"Monacan\",\r\n \"Mongolian\",\r\n \"Montenegrin\",\r\n \"Montserratian\",\r\n \"Moroccan\",\r\n \"Mosotho\",\r\n \"Motswana\",\r\n \"Mozambican\",\r\n \"Myanmarese\",\r\n \"Namibian\",\r\n \"Nauruan\",\r\n \"Nepalese\",\r\n \"Netherlands Antilles\",\r\n \"New Caledonian\",\r\n \"New Zealander\",\r\n \"Nicaraguan\",\r\n \"Nigerian\",\r\n \"Nigerien\",\r\n \"Niuean\",\r\n \"Ni-Vanuatu\",\r\n \"Norfolk Islander\",\r\n \"North Korean\",\r\n \"Northern Mariana Islander\",\r\n \"Norwegian\",\r\n \"Omani\",\r\n \"Pakistani\",\r\n \"Palauan\",\r\n \"Palestinian\",\r\n \"Panamanian\",\r\n \"Papua New Guinean\",\r\n \"Paraguayan\",\r\n \"Peruvian\",\r\n \"Pitcairn Islander\",\r\n \"Polish\",\r\n \"Portuguese\",\r\n \"Puerto Rican\",\r\n \"Qatari\",\r\n \"Reunion\",\r\n \"Romanian\",\r\n \"Russian\",\r\n \"Rwandan\",\r\n \"Saint Helenian\",\r\n \"Saint Lucian\",\r\n \"Saint Vincentian\",\r\n \"Saint-Pierrais\",\r\n \"Salvadorean\",\r\n \"Samoan\",\r\n \"Sanmarinese\",\r\n \"Sao Tomean\",\r\n \"Saudi Arabian\",\r\n \"Senegalese\",\r\n \"Serbian\",\r\n \"Seychellois\",\r\n \"Sierra Leonean\",\r\n \"Singaporean\",\r\n \"Slovakian\",\r\n \"Slovenian\",\r\n \"Solomon Islander\",\r\n \"Somali\",\r\n \"South African\",\r\n \"South Georgia and the South Sandwich Islands\",\r\n \"South Korean\",\r\n \"Spanish\",\r\n \"Sri Lankan\",\r\n \"Sudanese\",\r\n \"Surinamer\",\r\n \"Svalbard and Jan Mayen Islands\",\r\n \"Swazi\",\r\n \"Swedish\",\r\n \"Swiss\",\r\n \"Syrian\",\r\n \"Taiwanese\",\r\n \"Tajikistani\",\r\n \"Tanzanian\",\r\n \"Thai\",\r\n \"Timorese\",\r\n \"Togolese\",\r\n \"Tokelauan\",\r\n \"Tongan\",\r\n \"Trinidadian\",\r\n \"Tristan da Cunha\",\r\n \"Tunisian\",\r\n \"Turkish\",\r\n \"Turkmen\",\r\n \"Turks and Caicos Islander\",\r\n \"Tuvaluan\",\r\n \"Ugandan\",\r\n \"Ukrainian\",\r\n \"United States Minor Outlying Islands\",\r\n \"Uruguayan\",\r\n \"Uzbekistani\",\r\n \"Vatican\",\r\n \"Venezuelan\",\r\n \"Vietnamese\",\r\n \"Virgin Islander\",\r\n \"Wallisian\",\r\n \"Yemeni\",\r\n \"Zambian\",\r\n \"Zimbabwean\"\r\n];\r\n//# sourceMappingURL=Nationalities.jsx.map","export class Nations {\r\n static asOptions() {\r\n return Nations.List.map(nation => {\r\n return {\r\n key: nation,\r\n text: nation,\r\n styles: {\r\n optionText: {\r\n whiteSpace: \"normal\"\r\n }\r\n }\r\n };\r\n });\r\n }\r\n}\r\nNations.List = [\r\n \"Afghanistan\",\r\n \"Albania\",\r\n \"Algeria\",\r\n \"Andorra\",\r\n \"Angola\",\r\n \"Antigua and Barbuda\",\r\n \"Argentina\",\r\n \"Armenia\",\r\n \"Australia\",\r\n \"Austria\",\r\n \"Azerbaijan\",\r\n \"Bahamas\",\r\n \"Bahrain\",\r\n \"Bangladesh\",\r\n \"Barbados\",\r\n \"Belarus\",\r\n \"Belgium\",\r\n \"Belize\",\r\n \"Benin\",\r\n \"Bhutan\",\r\n \"Bolivia\",\r\n \"Bosnia and Herzegovina\",\r\n \"Botswana\",\r\n \"Brazil\",\r\n \"Brunei Darussalam\",\r\n \"Bulgaria\",\r\n \"Burkina Faso\",\r\n \"Burundi\",\r\n \"Cabo Verde\",\r\n \"Cambodia\",\r\n \"Cameroon\",\r\n \"Canada\",\r\n \"Central African Republic\",\r\n \"Chad\",\r\n \"Chile\",\r\n \"China\",\r\n \"Colombia\",\r\n \"Comoros\",\r\n \"Congo\",\r\n \"Congo, The Democratic Republic of the\",\r\n \"Costa Rica\",\r\n \"Côte d’Ivoire\",\r\n \"Croatia\",\r\n \"Cuba\",\r\n \"Cyprus\",\r\n \"Czechia\",\r\n \"Denmark\",\r\n \"Djibouti\",\r\n \"Dominica\",\r\n \"Dominican Republic\",\r\n \"Ecuador\",\r\n \"Egypt\",\r\n \"El Salvador\",\r\n \"Equatorial Guinea\",\r\n \"Eritrea\",\r\n \"Estonia\",\r\n \"Eswatini\",\r\n \"Ethiopia\",\r\n \"Fiji\",\r\n \"Finland\",\r\n \"France\",\r\n \"Gabon\",\r\n \"Gambia\",\r\n \"Georgia\",\r\n \"Germany\",\r\n \"Ghana\",\r\n \"Greece\",\r\n \"Grenada\",\r\n \"Guatemala\",\r\n \"Guinea\",\r\n \"Guinea-Bissau\",\r\n \"Guyana\",\r\n \"Haiti\",\r\n \"Honduras\",\r\n \"Hungary\",\r\n \"Iceland\",\r\n \"India\",\r\n \"Indonesia\",\r\n \"Iran, Islamic Republic of\",\r\n \"Iraq\",\r\n \"Ireland\",\r\n \"Israel\",\r\n \"Italy\",\r\n \"Jamaica\",\r\n \"Japan\",\r\n \"Jordan\",\r\n \"Kazakhstan\",\r\n \"Kenya\",\r\n \"Kiribati\",\r\n \"Korea, Democratic People’s Republic of\",\r\n \"Korea, Republic of\",\r\n \"Kuwait\",\r\n \"Kyrgyzstan\",\r\n \"Lao People’s Democratic Republic\",\r\n \"Latvia\",\r\n \"Lebanon\",\r\n \"Lesotho\",\r\n \"Liberia\",\r\n \"Libya\",\r\n \"Liechtenstein\",\r\n \"Lithuania\",\r\n \"Luxembourg\",\r\n \"Madagascar\",\r\n \"Malawi\",\r\n \"Malaysia\",\r\n \"Maldives\",\r\n \"Mali\",\r\n \"Malta\",\r\n \"Marshall Islands\",\r\n \"Mauritania\",\r\n \"Mauritius\",\r\n \"Mexico\",\r\n \"Micronesia, Federated States of\",\r\n \"Moldova, Republic of\",\r\n \"Monaco\",\r\n \"Mongolia\",\r\n \"Montenegro\",\r\n \"Morocco\",\r\n \"Mozambique\",\r\n \"Myanmar\",\r\n \"Namibia\",\r\n \"Nauru\",\r\n \"Nepal\",\r\n \"Netherlands\",\r\n \"New Zealand\",\r\n \"Nicaragua\",\r\n \"Niger\",\r\n \"Nigeria\",\r\n \"North Macedonia\",\r\n \"Norway\",\r\n \"Oman\",\r\n \"Pakistan\",\r\n \"Palau\",\r\n \"Panama\",\r\n \"Papua New Guinea\",\r\n \"Paraguay\",\r\n \"Peru\",\r\n \"Philippines\",\r\n \"Poland\",\r\n \"Portugal\",\r\n \"Qatar\",\r\n \"Romania\",\r\n \"Russian Federation\",\r\n \"Rwanda\",\r\n \"Saint Kitts and Nevis\",\r\n \"Saint Lucia\",\r\n \"Saint Vincent and the Grenadines\",\r\n \"Samoa\",\r\n \"San Marino\",\r\n \"São Tomé and Príncipe\",\r\n \"Saudi Arabia\",\r\n \"Senegal\",\r\n \"Serbia\",\r\n \"Seychelles\",\r\n \"Sierra Leone\",\r\n \"Singapore\",\r\n \"Slovakia\",\r\n \"Slovenia\",\r\n \"Solomon Islands\",\r\n \"Somalia\",\r\n \"South Africa\",\r\n \"South Sudan\",\r\n \"Spain\",\r\n \"Sri Lanka\",\r\n \"Sudan\",\r\n \"Suriname\",\r\n \"Sweden\",\r\n \"Switzerland\",\r\n \"Syrian Arab Republic\",\r\n \"Tajikistan\",\r\n \"Tanzania, United Republic of\",\r\n \"Thailand\",\r\n \"Timor-Leste\",\r\n \"Togo\",\r\n \"Tonga\",\r\n \"Trinidad and Tobago\",\r\n \"Tunisia\",\r\n \"Türkiye\",\r\n \"Turkmenistan\",\r\n \"Tuvalu\",\r\n \"Uganda\",\r\n \"Ukraine\",\r\n \"United Arab Emirates\",\r\n \"United Kingdom\",\r\n \"United States\",\r\n \"Uruguay\",\r\n \"Uzbekistan\",\r\n \"Vanuatu\",\r\n \"Venezuela\",\r\n \"Viet Nam\",\r\n \"Yemen\",\r\n \"Zambia\",\r\n \"Zimbabwe\"\r\n];\r\n//# sourceMappingURL=Nations.jsx.map","export class Titles {\r\n static asOptions() {\r\n return Titles.List.map(title => {\r\n return {\r\n key: title,\r\n text: title,\r\n styles: {\r\n optionText: {\r\n whiteSpace: \"normal\"\r\n }\r\n }\r\n };\r\n });\r\n }\r\n}\r\nTitles.List = [\r\n \"Mr.\",\r\n \"Mrs.\",\r\n \"Ms.\",\r\n \"Dr.\",\r\n \"Prof.\"\r\n];\r\n//# sourceMappingURL=Titles.jsx.map","import { Label } from 'office-ui-fabric-react/lib/Label';\r\n//Class that defines the 'LinkedApproval'\r\n//This class is specifically programmed for PDD. PDD has the following requirement.\r\n//If the user performs the \"Head of Section\"-approval, and that same user has also \"Planning Officer\"-approval permissions\r\n//The \"Planning Officer\"-approval should also immediately be approved\r\n//So using this class we can link 2 approval actions\r\nexport class LinkedApproval {\r\n constructor(primaryApproval, secondaryApproval) {\r\n primaryApproval.hasPermissions().then(hasPrimaryApprovalPermissions => {\r\n if (hasPrimaryApprovalPermissions) {\r\n secondaryApproval.hasPermissions().then(hasSecondaryApprovalPermissions => {\r\n if (hasSecondaryApprovalPermissions) {\r\n this.bindApprovalFields(primaryApproval, secondaryApproval);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n bindApprovalFields(primaryApproval, secondaryApproval) {\r\n primaryApproval.onChange = (status, changedBy, changedOn, comments) => {\r\n secondaryApproval.setState({\r\n status: status,\r\n changedBy: changedBy,\r\n changedOn: changedOn,\r\n comments: \"Automatically approved\",\r\n needsUpdate: true\r\n });\r\n };\r\n let otherApprovalField = secondaryApproval.props.ctx.CurrentFieldSchema[\"Title\"];\r\n let helpText = String.format(\"Approving or rejecting this item will automatically set the same status on '{0}' as you also have permissions on '{0}'.\", otherApprovalField);\r\n let autoApproveLabel = ();\r\n primaryApproval.additionalDialogElements.push(autoApproveLabel);\r\n }\r\n}\r\n//# sourceMappingURL=LinkedApproval.jsx.map","import { SharePointRestService, Attachment, ListNames, LogMessage, LogSeverityEnum, DivisionEnum } from \"../index\";\r\nimport { WorkflowManager } from \"./WorkflowManager\";\r\nexport class ChangeRequest {\r\n constructor(description, justification, attachments, itemId, changeRequestCode) {\r\n this._itemId = -1;\r\n this._description = description;\r\n this._justification = justification;\r\n this._attachments = attachments;\r\n if (changeRequestCode) {\r\n this._changeRequestCode = changeRequestCode;\r\n }\r\n if (itemId >= 0) {\r\n this._itemId = itemId;\r\n }\r\n }\r\n get description() {\r\n return this._description;\r\n }\r\n get justification() {\r\n return this._justification;\r\n }\r\n get attachments() {\r\n return this._attachments;\r\n }\r\n get changeRequestCode() {\r\n return this._changeRequestCode;\r\n }\r\n get createdOn() {\r\n return this._created;\r\n }\r\n set createdOn(date) {\r\n this._created = date;\r\n }\r\n get createdBy() {\r\n return this._createdBy;\r\n }\r\n set createdBy(person) {\r\n this._createdBy = person;\r\n }\r\n get status() {\r\n return this._status;\r\n }\r\n set status(status) {\r\n this._status = status;\r\n }\r\n get approvalComments() {\r\n return this._approvalComments;\r\n }\r\n set approvalComments(approvalComments) {\r\n this._approvalComments = approvalComments;\r\n }\r\n get itemId() {\r\n return this._itemId;\r\n }\r\n Submit(application) {\r\n return new Promise((resolve, reject) => {\r\n ChangeRequest.EnsureChangeRequestFolder(application).then((changeRequestFolder) => {\r\n let currentItemCount = changeRequestFolder.get_folders().get_count();\r\n if (!this._changeRequestCode) {\r\n let crName = this.generateCrNumber(application, currentItemCount);\r\n this._changeRequestCode = crName;\r\n }\r\n let clientContext = SP.ClientContext.get_current();\r\n let specificChangeRequestFolder = changeRequestFolder.get_folders().add(this._changeRequestCode);\r\n clientContext.load(changeRequestFolder);\r\n clientContext.load(specificChangeRequestFolder);\r\n clientContext.executeQueryAsync((sender, args) => {\r\n let specificChangeRequestFolderItem = specificChangeRequestFolder.get_listItemAllFields();\r\n specificChangeRequestFolderItem.set_item(\"natoSystemfile\", false);\r\n specificChangeRequestFolderItem.set_item(\"natoDescription\", this._description);\r\n specificChangeRequestFolderItem.set_item(\"natoJustification\", this._justification);\r\n specificChangeRequestFolderItem.update();\r\n this._attachments.forEach(attachment => {\r\n var base64Content = new SP.Base64EncodedByteArray(); //base64 encoding\r\n for (let i = 0; i < attachment.contents.length; i++) {\r\n base64Content.append(attachment.contents[i]);\r\n }\r\n let fileCreateInfo = new SP.FileCreationInformation();\r\n fileCreateInfo.set_url(attachment.filename);\r\n fileCreateInfo.set_content(base64Content);\r\n fileCreateInfo.set_overwrite(true);\r\n let newFile = specificChangeRequestFolder.get_files().add(fileCreateInfo);\r\n clientContext.load(newFile);\r\n });\r\n clientContext.executeQueryAsync((sender, args) => {\r\n let wf = new WorkflowManager();\r\n wf.StartWorklow(\"Grant Applications\", application.id, \"Notification\", { \"Type\": \"ChangeRequest\" }, true).then(() => {\r\n resolve(this._changeRequestCode);\r\n });\r\n }, (sender, args) => { reject(); });\r\n }, (sender, args) => {\r\n reject();\r\n });\r\n });\r\n });\r\n }\r\n SaveStatus(status, comments) {\r\n LogMessage.Log(\"Updating ChangeRequest values '\" + this._itemId + \"'\", this, LogSeverityEnum.Verbose);\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + this._itemId + \")\";\r\n let headers = {\r\n \"X-HTTP-Method\": \"MERGE\",\r\n \"If-Match\": \"*\"\r\n };\r\n let fields = {\r\n \"natoApprovalComments\": comments,\r\n \"natoApplicationStatus\": status,\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApplicationsItem\" }\r\n };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", fields, headers)\r\n .then(response => {\r\n this._approvalComments = comments;\r\n this._status = status;\r\n resolve(this);\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to update the ChangeRequest: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n generateCrNumber(application, number) {\r\n let prefixStr = \"\";\r\n if (application.applicantDetails.division == DivisionEnum.ESC) {\r\n prefixStr = \"G\";\r\n }\r\n else if (application.applicantDetails.division == DivisionEnum.PDD) {\r\n prefixStr = \"R\";\r\n }\r\n let numberOfLeadingCharacter = 7;\r\n let fillCharacter = \"0\";\r\n let crNumber = prefixStr + (fillCharacter.repeat(numberOfLeadingCharacter) + Math.round(application.id).toString() + \"-\" + number).slice(numberOfLeadingCharacter * -1);\r\n return crNumber;\r\n }\r\n static EnsureChangeRequestFolder(application) {\r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n let list = web.get_lists().getById(application.listId);\r\n let listItem = list.getItemById(application.id);\r\n let existingSubFolder = clientContext.get_web().getFolderByServerRelativeUrl(application.serverRelativeUrl + \"/\" + ChangeRequest.FOLDERNAME);\r\n let parentFolder = listItem.get_folder();\r\n clientContext.load(parentFolder);\r\n clientContext.load(existingSubFolder);\r\n clientContext.load(existingSubFolder.get_folders(), \"Include(Name)\");\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n LogMessage.Log(\"Change request folder already exists\", this, LogSeverityEnum.Info);\r\n resolve(existingSubFolder);\r\n }, (sender, args) => {\r\n LogMessage.Log(\"Creating new change request folder\", this, LogSeverityEnum.Info);\r\n let newSubFolder = parentFolder.get_folders().add(ChangeRequest.FOLDERNAME);\r\n let newSubFolderItem = newSubFolder.get_listItemAllFields();\r\n newSubFolderItem.set_item(\"natoSystemfile\", true);\r\n newSubFolderItem.breakRoleInheritance(true, true);\r\n newSubFolderItem.update();\r\n clientContext.load(newSubFolder);\r\n clientContext.load(newSubFolderItem);\r\n clientContext.load(newSubFolder.get_folders(), \"Include(Name)\");\r\n clientContext.executeQueryAsync((sender, args) => {\r\n LogMessage.Log(\"New change request folder created\", this, LogSeverityEnum.Info);\r\n resolve(newSubFolder);\r\n }, (sender, args) => {\r\n LogMessage.Log(\"Error creating new change request folder: \" + args.get_message(), this, LogSeverityEnum.Info);\r\n reject(args.get_errorDetails());\r\n });\r\n });\r\n });\r\n }\r\n static GetPendingChangeRequests(application) {\r\n let camlQuery = \"Pending\";\r\n return ChangeRequest.GetChangeRequests(application, camlQuery);\r\n }\r\n static GetChangeRequests(application, camlOverride) {\r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n let list = web.get_lists().getById(application.listId);\r\n let changeRequestFolderUrl = application.serverRelativeUrl + \"/\" + ChangeRequest.FOLDERNAME;\r\n let camlQuery = new SP.CamlQuery();\r\n let query = camlOverride ? camlOverride : \"\";\r\n camlQuery.set_viewXml(query);\r\n camlQuery.set_folderServerRelativeUrl(changeRequestFolderUrl);\r\n let items = list.getItems(camlQuery);\r\n clientContext.load(items, \"Include(Id, FileLeafRef, FileRef, ContentType, FileSizeDisplay, Created, Author, natoDescription, natoJustification, natoApprovalComments, natoApplicationStatus)\");\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n let crList = {};\r\n let listItemEnumerator = items.getEnumerator();\r\n while (listItemEnumerator.moveNext()) {\r\n let item = listItemEnumerator.get_current();\r\n let contenttype = item.get_contentType().get_name();\r\n let itemId = item.get_id();\r\n let name = item.get_item(\"FileLeafRef\");\r\n let url = item.get_item(\"FileRef\");\r\n let description = item.get_item(\"natoDescription\");\r\n let approval = item.get_item(\"natoApplicationStatus\");\r\n let natoJustification = item.get_item(\"natoJustification\");\r\n let approvalComments = item.get_item(\"natoApprovalComments\");\r\n let filesize = Number(item.get_item(\"FileSizeDisplay\"));\r\n let createdOn = new Date(item.get_item(\"Created\"));\r\n let createdBy = item.get_item(\"Author\").get_lookupValue();\r\n let urlParts = url.split(\"/\");\r\n let parentFolderName = urlParts[urlParts.length - (contenttype.toLocaleLowerCase() == \"folder\" ? 1 : 2)];\r\n if (!crList[parentFolderName]) {\r\n crList[parentFolderName] = {\r\n description: \"\",\r\n justification: \"\",\r\n files: new Array(),\r\n parentFolderFound: false\r\n };\r\n }\r\n if (contenttype.toLocaleLowerCase() == \"folder\") {\r\n crList[parentFolderName].description = description;\r\n crList[parentFolderName].justification = description;\r\n crList[parentFolderName].createdOn = createdOn;\r\n crList[parentFolderName].createdBy = createdBy;\r\n crList[parentFolderName].approvalComments = approvalComments;\r\n crList[parentFolderName].approvalStatus = approval;\r\n crList[parentFolderName].itemId = itemId;\r\n crList[parentFolderName].parentFolderFound = true;\r\n }\r\n else {\r\n crList[parentFolderName].files.push(new Attachment(name, new Uint8Array(filesize), false, url));\r\n }\r\n }\r\n let allChangeRequests = Object.keys(crList)\r\n .filter(crNumber => { return crList[crNumber].parentFolderFound; })\r\n .map(crNumber => {\r\n let cr = new ChangeRequest(crList[crNumber].description, crList[crNumber].justification, crList[crNumber].files, crList[crNumber].itemId, crNumber);\r\n cr.createdBy = crList[crNumber].createdBy;\r\n cr.createdOn = crList[crNumber].createdOn;\r\n cr.approvalComments = crList[crNumber].approvalComments;\r\n cr.status = crList[crNumber].approvalStatus;\r\n return cr;\r\n });\r\n resolve(allChangeRequests);\r\n }, (sender, args) => {\r\n reject(args);\r\n });\r\n });\r\n }\r\n}\r\nChangeRequest.FOLDERNAME = \"ChangeRequests\";\r\n//# sourceMappingURL=ChangeRequest.jsx.map","export class ApplicationFieldCollections {\r\n constructor(collection) {\r\n this._all = \"KixIYXNVbmlxdWVSb2xlQXNzaWdubWVudHMsRmlsZVJlZixGaWxlTGVhZlJlZixBdXRob3IvVGl0bGUsQXV0aG9yL05hbWUsQXV0aG9ySWQsbmF0b0dyYW50QWRtaW5pc3RyYXRvcnMvVGl0bGUsbmF0b0dyYW50QWRtaW5pc3RyYXRvcnMvTmFtZSxuYXRvR3JhbnRBZG1pbmlzdHJhdG9ycy9JRCxuYXRvQWR2aXNvcnMvVGl0bGUsbmF0b0Fkdmlzb3JzL05hbWUsbmF0b0Fkdmlzb3JzL0lELG5hdG9TZW5pb3JBZHZpc29ycy9UaXRsZSxuYXRvU2VuaW9yQWR2aXNvcnMvTmFtZSxuYXRvU2VuaW9yQWR2aXNvcnMvSUQsbmF0b1Jldmlld2Vycy9UaXRsZSxuYXRvUmV2aWV3ZXJzL05hbWUsbmF0b1Jldmlld2Vycy9JRCYkZXhwYW5kPUF1dGhvcixuYXRvR3JhbnRBZG1pbmlzdHJhdG9ycyxuYXRvQWR2aXNvcnMsbmF0b1NlbmlvckFkdmlzb3JzLG5hdG9SZXZpZXdlcnM=\";\r\n this._urlOnly = \"RmlsZVJlZixGaWxlTGVhZlJlZg==\";\r\n this._basic_after_save = \"SWQsRmlsZVJlZixGaWxlTGVhZlJlZixIYXNVbmlxdWVSb2xlQXNzaWdubWVudHMsQXV0aG9ySWQ=\";\r\n this._applicicationWizardFields = \"KixIYXNVbmlxdWVSb2xlQXNzaWdubWVudHMsRmlsZVJlZixGaWxlTGVhZlJlZixBdXRob3IvVGl0bGUsQXV0aG9yL05hbWUsQXV0aG9ySWQmJGV4cGFuZD1BdXRob3I=\";\r\n switch (collection) {\r\n case \"ALL\":\r\n this._fields = this._all;\r\n break;\r\n case \"URL_ONLY\":\r\n this._fields = this._urlOnly;\r\n break;\r\n case \"APPLICATION_WIZARD\":\r\n this._fields = this._applicicationWizardFields;\r\n break;\r\n case \"BASIC_AFTER_SAVE\":\r\n this._fields = this._basic_after_save;\r\n break;\r\n }\r\n }\r\n toString() {\r\n return atob(this._fields);\r\n }\r\n}\r\n//# sourceMappingURL=ApplicationFieldCollections.jsx.map","export class ReleasableTo {\r\n static asOptions() {\r\n return ReleasableTo.List.map(nation => {\r\n return {\r\n key: nation,\r\n text: nation,\r\n styles: {\r\n optionText: {\r\n whiteSpace: \"normal\"\r\n }\r\n }\r\n };\r\n });\r\n }\r\n}\r\nReleasableTo.List = [\r\n \"NATO Partnership Programs\",\r\n \"EAPC\",\r\n \"EDA\",\r\n \"EEAS\",\r\n \"EU\",\r\n \"EU Council\",\r\n \"EU Commission\",\r\n \"EUFOR\",\r\n \"EUROCONTROL\",\r\n \"FAA\",\r\n \"Global Coalition\",\r\n \"IATA\",\r\n \"ICAO\",\r\n \"ICI\",\r\n \"IP\",\r\n \"ISAF\",\r\n \"KFOR\",\r\n \"MD\",\r\n \"NMI\",\r\n \"NATO Response Force\",\r\n \"OCCAR\",\r\n \"OSCE\",\r\n \"PFP\",\r\n \"RESOLUTE SUPPORT\",\r\n \"TRIDENT JACKAL 2019\",\r\n \"UNICITY\",\r\n \"UNODC\",\r\n \"WB\",\r\n \"Afghanistan\",\r\n \"Algeria\",\r\n \"Argentina\",\r\n \"Armenia\",\r\n \"Australia\",\r\n \"Austria\",\r\n \"Azerbaijan\",\r\n \"Bahrain\",\r\n \"Belarus\",\r\n \"Bosnia and Herzegovina\",\r\n \"Brazil\",\r\n \"China\",\r\n \"Colombia\",\r\n \"Egypt\",\r\n \"El Salvador\",\r\n \"Finland\",\r\n \"Georgia\",\r\n \"India\",\r\n \"Iraq\",\r\n \"Ireland\",\r\n \"Israel\",\r\n \"Japan\",\r\n \"Jordan\",\r\n \"Kazakhstan\",\r\n \"Korea\",\r\n \"Kuwait\",\r\n \"Kyrgyz Republic\",\r\n \"Malaysia\",\r\n \"Mauritania\",\r\n \"Moldova\",\r\n \"Mongolia\",\r\n \"Morocco\",\r\n \"New Zealand\",\r\n \"North Macedonia\",\r\n \"Oman\",\r\n \"Pakistan\",\r\n \"Qatar\",\r\n \"Russia\",\r\n \"Saudi Arabia\",\r\n \"Serbia\",\r\n \"South Africa\",\r\n \"Sweden\",\r\n \"Switzerland\",\r\n \"Tajikistan\",\r\n \"Turkmenistan\",\r\n \"U.A.E.\",\r\n \"Ukraine\",\r\n \"United States\",\r\n \"Uzbekistan\",\r\n];\r\n//# sourceMappingURL=ReleasableTo.jsx.map","export var InternalApplicationStatusEnum;\r\n(function (InternalApplicationStatusEnum) {\r\n InternalApplicationStatusEnum[\"UNDER_REVIEW_RECEIVED\"] = \"Under Review (Received)\";\r\n InternalApplicationStatusEnum[\"SENT_TO_ISEG\"] = \"Sent to ISEG\";\r\n InternalApplicationStatusEnum[\"RECOMMENDED\"] = \"Recommended\";\r\n InternalApplicationStatusEnum[\"SILENCE\"] = \"Silence\";\r\n InternalApplicationStatusEnum[\"APPROVED\"] = \"Approved\";\r\n InternalApplicationStatusEnum[\"APPROVED_READY_FOR_INTERFACE\"] = \"Approved - Ready for ERP Interface\";\r\n InternalApplicationStatusEnum[\"REJECTED\"] = \"Rejected\";\r\n InternalApplicationStatusEnum[\"ONGOING\"] = \"Ongoing\";\r\n InternalApplicationStatusEnum[\"COMPLETED\"] = \"Completed\";\r\n InternalApplicationStatusEnum[\"CLOSED\"] = \"Closed\";\r\n InternalApplicationStatusEnum[\"ON_HOLD\"] = \"On-Hold\";\r\n InternalApplicationStatusEnum[\"WITHDRAWN\"] = \"Withdrawn\";\r\n InternalApplicationStatusEnum[\"CANCELLED\"] = \"Cancelled\";\r\n InternalApplicationStatusEnum[\"PENDING\"] = \"Pending\";\r\n})(InternalApplicationStatusEnum || (InternalApplicationStatusEnum = {}));\r\n//# sourceMappingURL=InternalApplicationStatusEnum.jsx.map","export class KeyPriority {\r\n constructor(item) {\r\n this._id = Number(item.Id);\r\n this._title = item.Title;\r\n this._level1 = item.natoLevel1;\r\n this._level2 = item.natoLevel2;\r\n this._level3 = item.natoLevel3;\r\n this._description = item.natoDescription;\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n set id(id) {\r\n this._id = id;\r\n }\r\n get level1() {\r\n return this._level1;\r\n }\r\n set level1(level1) {\r\n this._level1 = level1;\r\n }\r\n get level2() {\r\n return this._level2;\r\n }\r\n set level2(level2) {\r\n this._level2 = level2;\r\n }\r\n get level3() {\r\n return this._level3;\r\n }\r\n set level3(level3) {\r\n this._level3 = level3;\r\n }\r\n get description() {\r\n return this._description;\r\n }\r\n set description(description) {\r\n this._description = description;\r\n }\r\n get title() {\r\n return this._title;\r\n }\r\n set title(title) {\r\n this._title = title;\r\n }\r\n}\r\n//# sourceMappingURL=KeyPriority.jsx.map","import { Component } from 'react';\r\nimport { Attachment, User, Application, ApplicationStatus, DivisionEnum, SharePointRestService, ListNames } from \"../index\";\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { ChoiceGroup } from 'office-ui-fabric-react/lib/ChoiceGroup';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { Dropdown } from 'office-ui-fabric-react/lib/Dropdown';\r\nimport { ProgressIndicator } from 'office-ui-fabric-react/lib/ProgressIndicator';\r\nimport { CommandButton } from 'office-ui-fabric-react/lib/Button';\r\nexport class ApprovalDialogComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n hideDialog: false,\r\n comment: \"\",\r\n approveStatus: { key: \"Approve\", text: \"Approve\" },\r\n approveStatusInitial: \"\",\r\n customApproveStatus: undefined,\r\n showAttachmentUploadPanel: false,\r\n isUploadingAttachment: false,\r\n attachment: null,\r\n oldAttachment: null,\r\n changedBy: \"\",\r\n changedOn: new Date(1970, 1, 1),\r\n };\r\n this.OnSaveClick = this.OnSaveClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n this.OnAddAttachmentClick = this.OnAddAttachmentClick.bind(this);\r\n this.onCommentChanged = this.onCommentChanged.bind(this);\r\n }\r\n componentWillMount() {\r\n if (this.props.application && this.props.application.budgetApproval != \"\" && this.props.application.budgetApproval != undefined) {\r\n //Retrieve the ID from the fields value. The value has the following format \"ID;#Value\"\r\n let approvalIdStr = this.props.application.budgetApproval.split(\";#\")[0];\r\n let approvalId = Number(approvalIdStr);\r\n //Retrieve the approvalItem by ID\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANT_APPROVALS + \"')/items(\" + approvalId + \")?$select=Title,natoApprovalStatus,natoGrantDetails,Modified,Attachments,AttachmentFiles,Editor/Title&$expand=Editor,AttachmentFiles\";\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n let attachment = odata.Attachments ? new Attachment(odata.AttachmentFiles[0].FileName, new Uint8Array(0), false, odata.AttachmentFiles[0].ServerRelativeUrl) : null;\r\n //Update the internal state to reflect all metadata in the UserInterface\r\n this.setState({\r\n comment: (odata.Title) ? odata.Title : \"\",\r\n approveStatus: { key: odata.natoApprovalStatus, text: odata.natoApprovalStatus },\r\n approveStatusInitial: odata.natoApprovalStatus,\r\n changedBy: odata.Editor.Title,\r\n changedOn: new Date(odata.Modified),\r\n attachment: attachment,\r\n oldAttachment: attachment\r\n });\r\n });\r\n })\r\n .catch(reason => {\r\n });\r\n }\r\n }\r\n //Set the focus to the CommentsField so the user can start typing immediately\r\n componentDidMount() {\r\n if (this.commentsField != null)\r\n this.commentsField.focus();\r\n }\r\n OnSaveClick() {\r\n let promises = new Array();\r\n if (this.uploadField.files.length > 0) {\r\n promises.push(this.uploadFiles());\r\n }\r\n Promise.all(promises).then(([file]) => {\r\n if (this.state.approveStatus.key == \"Approve\") {\r\n this.props.onApprove(this.state.comment, file, this.state.oldAttachment);\r\n }\r\n if (this.state.approveStatus.key == \"Reject\") {\r\n this.props.onReject(this.state.comment, file, this.state.oldAttachment);\r\n }\r\n if (this.state.approveStatus.key == \"Pending\" && this.props.onPending) {\r\n this.props.onPending(this.state.comment, file);\r\n }\r\n if (this.state.approveStatus.key == \"Other\" && this.props.onCustomStatusSet) {\r\n this.props.onCustomStatusSet(this.state.customApproveStatus ? this.state.customApproveStatus.key : \"\", this.state.comment, file);\r\n }\r\n this.setState({ hideDialog: true });\r\n this.props.onClose();\r\n });\r\n }\r\n OnCancelClick() {\r\n this.setState({ hideDialog: true });\r\n this.props.onClose();\r\n }\r\n OnAddAttachmentClick() {\r\n this.setState({ showAttachmentUploadPanel: !this.state.showAttachmentUploadPanel });\r\n }\r\n changeApproveStatusInternal(option) {\r\n this.setState({\r\n approveStatus: { key: option.key, text: option.text }\r\n });\r\n }\r\n changeCustomApproveStatusInternal(option) {\r\n this.setState({\r\n customApproveStatus: { key: option.key, text: option.text }\r\n });\r\n }\r\n onCommentChanged(newValue) {\r\n this.setState({\r\n comment: newValue\r\n });\r\n }\r\n uploadFiles() {\r\n this.setState({ isUploadingAttachment: true });\r\n return new Promise((resolve, reject) => {\r\n let files = this.uploadField.files;\r\n for (let i = 0; i < files.length; i++) {\r\n let fr = new FileReader();\r\n fr.readAsArrayBuffer(files[i]);\r\n fr.onloadend = () => {\r\n this.setState({ isUploadingAttachment: false });\r\n let bytes = new Uint8Array(fr.result);\r\n resolve(new Attachment(files[i].name, bytes));\r\n };\r\n }\r\n });\r\n }\r\n render() {\r\n let showUploadPanelStyle = (this.state.showAttachmentUploadPanel && this.props.allowAttachments) ? { \"display\": \"block\" } : { \"display\": \"none\" };\r\n let options = [\r\n {\r\n key: \"Approve\",\r\n text: \"Approve\",\r\n checked: true,\r\n },\r\n {\r\n key: \"Reject\",\r\n text: \"Reject\",\r\n }\r\n ];\r\n if (this.props.pendingOption == \"Visible\") {\r\n options.push({\r\n key: \"Pending\",\r\n text: \"Pending\",\r\n });\r\n }\r\n let filteredCustomStatus = new Array();\r\n if (this.props.customStatusList) {\r\n filteredCustomStatus = this.props.customStatusList.filter((keyValuePair) => keyValuePair.value.toLocaleLowerCase() != \"approved\" &&\r\n keyValuePair.value.toLocaleLowerCase() != \"rejected\" &&\r\n keyValuePair.value.toLocaleLowerCase() != \"pending\").map((keyValuePair) => {\r\n return {\r\n key: keyValuePair.key,\r\n text: keyValuePair.value,\r\n styles: {\r\n optionText: {\r\n whiteSpace: \"normal\"\r\n }\r\n }\r\n };\r\n });\r\n options.push({\r\n key: \"Other\",\r\n text: \"Other value...\",\r\n style: {\r\n fontStyle: \"italic\"\r\n }\r\n });\r\n }\r\n let attachmentElement = null;\r\n if (this.state.attachment != null) {\r\n if (this.state.attachment.isNew) {\r\n attachmentElement = (

{this.state.attachment.filename} ({this.state.attachment.filesize})
);\r\n }\r\n else {\r\n attachmentElement = ();\r\n }\r\n }\r\n else {\r\n attachmentElement = (
);\r\n }\r\n return (
\r\n \r\n
);\r\n }\r\n static DoesUserHasPermissions() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n if ((application.applicantDetails.division == DivisionEnum.ESC || application.applicantDetails.division == DivisionEnum.PDD)\r\n && (application.applicationStatus == ApplicationStatus.SUBMITTED\r\n || application.applicationStatus == ApplicationStatus.UNDER_REVIEW)) {\r\n User.getCurrentUser().then(user => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC) {\r\n if (application.isUserSeniorAdvisor(user)) {\r\n resolve(true);\r\n }\r\n else {\r\n User.isGrantAdministrator(DivisionEnum.ESC).then(isAdmin => {\r\n resolve(isAdmin);\r\n });\r\n }\r\n }\r\n else if (application.applicantDetails.division == DivisionEnum.PDD) {\r\n User.isGrantAdministrator(DivisionEnum.PDD).then(isAdmin => {\r\n resolve(isAdmin);\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n static DoesUserHasPermissionsBO() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n if (application.applicantDetails.division == DivisionEnum.PDD\r\n && (application.applicationStatus == ApplicationStatus.SUBMITTED ||\r\n application.applicationStatus == ApplicationStatus.UNDER_REVIEW ||\r\n application.applicationStatus == ApplicationStatus.AWARDED)) {\r\n User.isMemberOfGroup([\"PDD Budget Officers\"]).then(isMember => {\r\n resolve(isMember);\r\n });\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=ApprovalDialogComponent.jsx.map","import { Component } from 'react';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { Checkbox } from 'office-ui-fabric-react/lib/Checkbox';\r\nexport class ConfirmDialogComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n let checkList = [];\r\n if (this.props.checkListName && this.props.checkListName == \"award\") {\r\n checkList = [\r\n \"Confirm the award letter has been generated\"\r\n ];\r\n }\r\n this.state = {\r\n hideDialog: false,\r\n checkList: checkList,\r\n numberOfCheckboxesChecked: 0\r\n };\r\n this.OnConfirmClick = this.OnConfirmClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n this.onCheckboxChange = this.onCheckboxChange.bind(this);\r\n }\r\n OnConfirmClick() {\r\n this.setState({ hideDialog: true });\r\n this.props.onConfirm();\r\n this.props.onClose();\r\n }\r\n OnCancelClick() {\r\n this.setState({ hideDialog: true });\r\n this.props.onCancel();\r\n this.props.onClose();\r\n }\r\n onCheckboxChange(ev, isChecked) {\r\n let newNumber = this.state.numberOfCheckboxesChecked + (isChecked ? 1 : -1);\r\n this.setState({\r\n numberOfCheckboxesChecked: newNumber\r\n });\r\n }\r\n componentWillMount() {\r\n }\r\n render() {\r\n let checkListAll = (Object.keys(this.state.checkList).map((key, index) => {\r\n return (
\r\n \r\n
);\r\n }));\r\n return (
\r\n \r\n
);\r\n }\r\n}\r\n//# sourceMappingURL=ConfirmDialogComponent.jsx.map","import { Component } from 'react';\r\nexport class PublishedGrantComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n publishedGrant: this.props.publishedGrant\r\n };\r\n }\r\n set publishedGrant(publishedGrant) {\r\n this.setState({ publishedGrant: publishedGrant });\r\n }\r\n get publishedGrant() {\r\n return this.state.publishedGrant;\r\n }\r\n render() {\r\n if (this.state.publishedGrant != null) {\r\n let formValues = {\r\n //\"State\": \"\",\r\n //\"Published on\": this.props.publishedGrant.modifiedOn.format(\"dd MMM yyyy HH:mm\"),\r\n //\"Published by\": this.props.publishedGrant.editor,\r\n //\"Title\": this.props.publishedGrant.title,\r\n \"Code\": this.state.publishedGrant.code,\r\n \"Synopsis\": this.state.publishedGrant.synopsis,\r\n \"Start date\": this.state.publishedGrant.startDate.format(\"dd MMM yyyy\"),\r\n \"End date\": this.state.publishedGrant.endDate.format(\"dd MMM yyyy\")\r\n };\r\n let tableRows = Object.keys(formValues).map((formField, index) => ({formField}:{formValues[formField]}));\r\n return (
\r\n
\r\n

External view

\r\n
\r\n \r\n \r\n {tableRows}\r\n \r\n
\r\n
);\r\n }\r\n else {\r\n return (
\r\n
\r\n

External view

\r\n
\r\n
\r\n This proposal has no external view as it hasn't been published yet.\r\n
\r\n
);\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=PublishedGrantComponent.jsx.map","import { Component } from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { AnsweredQuestionsComponent, GrantStatus, DivisionEnum, User, PublishedEventData, LocalStorageCache } from \"../index\";\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { Checkbox } from 'office-ui-fabric-react/lib/Checkbox';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport * as ReactGA from 'react-ga';\r\n//This component shows the grant details and give the user (applicant) the possiblity to apply for a grant\r\nexport class GrantDetailsComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n ReactGA.modalview(_spPageContextInfo.webServerRelativeUrl + \"/GrantDetails/\" + this.props.publishedGrant.code);\r\n this.state = {\r\n grantDescription: \"\",\r\n grantStatus: \"\",\r\n grantDivision: DivisionEnum.INVALID,\r\n applyButtonAvailable: false,\r\n currentUserIsNotAuthorized: false,\r\n previousApplication: null,\r\n checkboxTermsAndConditionsChecked: false,\r\n termsAndConditionsHaveBeenClicked: false,\r\n isGrantAdmin: false\r\n };\r\n this.onCheckboxChange = this.onCheckboxChange.bind(this);\r\n this.onTermsConditionsClick = this.onTermsConditionsClick.bind(this);\r\n this.onCloseClick = this.onCloseClick.bind(this);\r\n this.onApplyClick = this.onApplyClick.bind(this);\r\n this.onCreateAdGrantAdminClick = this.onCreateAdGrantAdminClick.bind(this);\r\n }\r\n //Executed just before the React component mounts\r\n componentWillMount() {\r\n let cacheKey = \"TermsAndConditions:\" + _spPageContextInfo.webServerRelativeUrl;\r\n let cachedValue = LocalStorageCache.tryGetFromCache(cacheKey, null, new Date(new Date(0).setMonth(1)));\r\n if ((\"\" + cachedValue).toLocaleLowerCase() == \"Yes\".toLocaleLowerCase()) {\r\n this.setState({\r\n termsAndConditionsHaveBeenClicked: true\r\n });\r\n }\r\n //Check if the user is a Grant Administrator\r\n User.isGrantAdministrator(this.props.publishedGrant.division).then(isAdmin => {\r\n this.setState({\r\n isGrantAdmin: isAdmin\r\n });\r\n });\r\n if (this.props.publishedGrant.division == DivisionEnum.DI) {\r\n let publishedEvent = new PublishedEventData(this.props.publishedGrant.spItem);\r\n this.setState({\r\n grantDescription: publishedEvent.description,\r\n grantStatus: \"\",\r\n grantDivision: publishedEvent.division,\r\n currentUserIsNotAuthorized: false,\r\n previousApplication: null\r\n });\r\n }\r\n else {\r\n if (this.props.publishedGrant != null) {\r\n //Retrieve the grant description. The description is stored in the Grants lists and is not part of the Published Grant\r\n this.props.publishedGrant.getBasicGrantData().then((data) => {\r\n //Update the internal state of this object to reflect the grant description\r\n this.setState({\r\n grantDescription: data.description,\r\n grantStatus: data.status,\r\n grantDivision: data.division\r\n });\r\n //Retrieve any application the user may have started before\r\n this.props.publishedGrant.getApplication(this.props.applicationId).then((application) => {\r\n if (application != null) {\r\n this.setState({\r\n previousApplication: application\r\n });\r\n }\r\n });\r\n }).catch((reason) => {\r\n //The user does not have access to the Grants lists\r\n if (reason.status == 404) {\r\n this.setState({\r\n currentUserIsNotAuthorized: true\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n componentDidUpdate(prevProps, prevState) {\r\n if (this._descriptionContainer != null && this._descriptionContainer.querySelectorAll(\"IMG\").length > 0) {\r\n this._descriptionContainer.querySelectorAll(\"IMG\").forEach((element, index) => {\r\n element.addEventListener('load', this.imageLoaded);\r\n });\r\n }\r\n }\r\n imageLoaded(event) {\r\n event.target.removeEventListener('load', this.imageLoaded);\r\n SP.UI.ModalDialog.get_childDialog().autoSize();\r\n }\r\n componentDidMount() {\r\n SP.UI.ModalDialog.get_childDialog().autoSize();\r\n }\r\n onCloseClick(ev) {\r\n SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.cancel, null);\r\n }\r\n onApplyClick(ev) {\r\n SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, this.state.previousApplication);\r\n }\r\n onCreateAdGrantAdminClick(ev) {\r\n SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, { createAsGrantAdmin: true });\r\n }\r\n onCheckboxChange(ev, isChecked) {\r\n if (!this.state.termsAndConditionsHaveBeenClicked) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n window.alert(\"Please read the terms and conditions first\");\r\n }\r\n else {\r\n //The apply button is only available if the user checked the Terms&Conditions checkbox\r\n this.setState({\r\n checkboxTermsAndConditionsChecked: isChecked,\r\n applyButtonAvailable: isChecked\r\n });\r\n }\r\n }\r\n onTermsConditionsClick(event) {\r\n let cacheKey = \"TermsAndConditions:\" + _spPageContextInfo.webServerRelativeUrl;\r\n LocalStorageCache.tryStoreInCache(cacheKey, \"Yes\");\r\n this.setState({\r\n termsAndConditionsHaveBeenClicked: true\r\n });\r\n }\r\n render() {\r\n let warningStyle = {\r\n \"color\": \"#721c24\",\r\n \"background\": \"#f8d7da\",\r\n \"borderColor\": \"1px solid #f5c6cb\",\r\n \"borderRadius\": \"5px\",\r\n \"padding\": \"10px\",\r\n \"marginBottom\": \"20px\"\r\n };\r\n if (this.props.publishedGrant != null && this.state.grantDescription != \"\") {\r\n let applicantIsTooLate = this.props.publishedGrant.endDate < new Date(new Date(new Date(new Date(Date.now()).setHours(0)).setMinutes(0)).setSeconds(0) - 1000); //Set it to 1 second before mid-night\r\n let grantIsOnHold = (this.state.grantStatus == GrantStatus.PUBLISHED_ON_HOLD);\r\n let applyButtonText = (this.state.grantDivision == DivisionEnum.DI) ? \"Register for this event\" : \"Apply for this grant\";\r\n let termsAndConditionsLink = _spPageContextInfo.webServerRelativeUrl + \"/SiteAssets/UsersTermsAndConditions.pdf\";\r\n let createApplicationAsGrantAdminButton = null;\r\n if (this.state.isGrantAdmin && this.props.publishedGrant.division != DivisionEnum.DI) {\r\n createApplicationAsGrantAdminButton = Create Application
as Grant Administrator
;\r\n }\r\n let footerPanelOptions = (\r\n {applicantIsTooLate &&
You can no longer apply for this grant
}\r\n {(grantIsOnHold && !applicantIsTooLate) &&
This grant has (temporary) been put on hold. You can not apply for this grant at this moment. Please come back later.
}\r\n \r\n\t\t\t\t\t{createApplicationAsGrantAdminButton}\r\n\t\t\t\t\t\r\n
\r\n
\r\n \r\n
You can download a copy of the Terms and Conditions \r\n here.\r\n
\r\n
);\r\n let footerPanelAlreadyExistingApplication = (\r\n\t\t\t\t\t\r\n\t\t\t\t\t{createApplicationAsGrantAdminButton}\r\n \r\n );\r\n return (
\r\n
this._descriptionContainer = elm} dangerouslySetInnerHTML={{ __html: this.state.grantDescription.replace(/\\n/g, '
') }}/>\r\n {(this.state.grantDivision == DivisionEnum.ESC || this.state.grantDivision == DivisionEnum.PDD) && }\r\n {this.state.previousApplication == null && footerPanelOptions}\r\n {this.state.previousApplication != null && footerPanelAlreadyExistingApplication}\r\n
);\r\n }\r\n else if (this.state.currentUserIsNotAuthorized) {\r\n //If the user is not authorized to view the Grant Details (probably anonymous user), show login and register hyperlinks to the user\r\n //The 'openGrantDetails' is a sentinal parameter to indicate that we want to re-open this Grant Details dialog after a login\r\n let sourceUrl = window.location.pathname + \"?openGrantDetails=\" + this.props.publishedGrant.id;\r\n let rootUrl = _spPageContextInfo.siteServerRelativeUrl == '/' ? '' : _spPageContextInfo.siteServerRelativeUrl;\r\n let loginUrl = rootUrl + \"/_layouts/15/Authenticate.aspx?Source=\" + encodeURIComponent(sourceUrl);\r\n let registerUrl = rootUrl + \"/_layouts/15/Registration/Register.aspx?SourceWeb=\" + encodeURIComponent(_spPageContextInfo.webTitle);\r\n return (
\r\n
\r\n You need to login in order to view the grant details.\r\n \r\n
\r\n \r\n
);\r\n }\r\n return null;\r\n }\r\n //Show the GrantDetails in a Dialog\r\n //Returns 'SP.UI.DialogResult.OK' as a Promise if the user wants to apply for this grant\r\n static ShowInDialog(publishedGrant, applicationId) {\r\n //All the scripts needed for the ClientPeoplePicker\r\n let scriptRefs = ['sp.core.js', 'sp.runtime.js', 'sp.js', 'autofill.js', 'clientpeoplepicker.js', 'clientforms.js', 'clienttemplates.js'];\r\n //Register all scripts as Script-On-Demand (SoD) dependencies\r\n scriptRefs.forEach(function (val, index) {\r\n if (!window['_v_dictSod'][val]) {\r\n SP.SOD.registerSod(val, \"\\u002f_layouts\\u002f15\\u002f\" + val);\r\n }\r\n ;\r\n });\r\n let promise = new Promise((resolve) => {\r\n //Load all scripts, and execute callback after the scripts have been loaded\r\n SP.SOD.loadMultiple(scriptRefs, function () {\r\n let webTitle = _spPageContextInfo.webTitle.trim();\r\n //Create the dialog and render the ReactComponent\r\n var dialogContainer = document.createElement('div');\r\n dialogContainer.style.display = 'none';\r\n document.body.appendChild(dialogContainer);\r\n var element = dialogContainer.appendChild(document.createElement('div'));\r\n element.className = \"nato-grantdetails-dialog\";\r\n //Disable the SharePoint dialog eventreceiver. It will block any Synthetic React event from firing\r\n let functionName = Object.keys(SP.UI.Dialog).find(key => {\r\n return ((\"\" + SP.UI.Dialog[key]).toString().toLocaleLowerCase().indexOf(\"a.stopPropagation()\".toLocaleLowerCase()) != -1);\r\n });\r\n let stupidDialogEventListener = SP.UI.Dialog[functionName];\r\n SP.UI.Dialog[functionName] = function (e) { return true; };\r\n //Specify options for the dialog\r\n let options = new SP.UI.DialogOptions();\r\n options.title = webTitle + \": \" + publishedGrant.code + \" - \" + publishedGrant.synopsis;\r\n options.allowMaximize = true;\r\n options.showClose = true;\r\n options.autoSize = true;\r\n options.html = element;\r\n options.dialogReturnValueCallback = (result, args) => {\r\n //Restore the SharePoint Dialog EventReceiver we disabled a few lines above \r\n SP.UI.Dialog[functionName] = stupidDialogEventListener;\r\n resolve({\r\n dialogResult: result,\r\n application: args\r\n });\r\n };\r\n //Show the dialog\r\n let dialog = SP.UI.ModalDialog.showModalDialog(options);\r\n let dialogContent = dialog.get_dialogElement().getElementsByClassName(\"nato-grantdetails-dialog\")[0];\r\n ReactDOM.render(, dialogContent);\r\n });\r\n });\r\n return promise;\r\n }\r\n}\r\n//# sourceMappingURL=GrantDetailsComponent.jsx.map","import { Component } from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { Application, User, Wizard1ApplicantComponent, Wizard2ProjectDetailsComponent, Wizard3BudgetComponent, Wizard5ProjectStructureTimelineComponent, Wizard6PreviousGrantsComponent, Wizard7AttachmentsComponent, Wizard10OverviewComponent, SharePointRestService, ListNames, LogMessage, LogSeverityEnum, SubmitDialogComponent, ApplicationStatus, DivisionEnum } from \"../index\";\r\nimport { PivotLinkSize, PivotLinkFormat, PivotItem, Pivot } from 'office-ui-fabric-react/lib/Pivot';\r\nimport { Button, IconButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nexport class GrantApplicationWizardComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this._pageIndex = {};\r\n this._itemId = 0;\r\n this.state = {\r\n activeWizardPageIndex: 0,\r\n application: this.props.application,\r\n isSaving: false,\r\n currentUser: null,\r\n otherUser: null,\r\n allowEdit: false,\r\n isAdmin: false\r\n };\r\n this._itemId = (this.props.application != null) ? this.props.application.id : 0;\r\n this.onNavigateBackClick = this.onNavigateBackClick.bind(this);\r\n this.onNavigateForwardClick = this.onNavigateForwardClick.bind(this);\r\n this.onPivotLinkClick = this.onPivotLinkClick.bind(this);\r\n this.onSaveDraftClick = this.onSaveDraftClick.bind(this);\r\n this.onSubmitClick = this.onSubmitClick.bind(this);\r\n this.onPivotNavigate = this.onPivotNavigate.bind(this);\r\n let division = (this.props.application && this.props.application.applicantDetails) ? this.props.application.applicantDetails.division : this.props.publishedGrant.division;\r\n User.isGrantAdministrator(division).then(isAdmin => {\r\n this.setState({\r\n isAdmin: isAdmin\r\n });\r\n User.getCurrentUser().then((user) => {\r\n this.setState({\r\n currentUser: user\r\n });\r\n let allowEdit = true;\r\n if (this.state.application) {\r\n allowEdit = ((this.state.application.applicantDetails.editUserId == null || user == null || this.state.application.applicantDetails.editUserId == user.id)\r\n && (this.state.application.applicationStatus == ApplicationStatus.DRAFT || this.state.application.applicationStatus == ApplicationStatus.SUBMITTED_MORE_INFORMATION_REQUESTED))\r\n || isAdmin;\r\n if (this.state.application.applicantDetails.editUserId && this.state.application.applicantDetails.editUserId != user.id) {\r\n User.getUserById(this.state.application.applicantDetails.editUserId).then((otherUser) => {\r\n this.setState({\r\n otherUser: otherUser\r\n });\r\n });\r\n }\r\n // Set edit user ID\r\n if (this.state.application.applicantDetails.editUserId == null && user != null && allowEdit) {\r\n let updatedApplication = this.state.application;\r\n updatedApplication.applicantDetails.editUserId = user.id;\r\n updatedApplication.applicantDetails.UpdateEditUser().then(() => {\r\n this.setState({\r\n application: updatedApplication\r\n });\r\n });\r\n }\r\n }\r\n this.setState({\r\n allowEdit: allowEdit\r\n });\r\n let page = this._pageIndex[this.state.activeWizardPageIndex];\r\n if (page) {\r\n page.SetReadOnly(allowEdit);\r\n }\r\n });\r\n });\r\n }\r\n //Executed just before the React component mounts\r\n componentWillMount() {\r\n LogMessage.Log(\"Application wizard loaded\", this, LogSeverityEnum.Verbose);\r\n window.addEventListener('onPivotNavigate', this.onPivotNavigate);\r\n }\r\n componentDidMount() {\r\n if (this._pivotElement != null) {\r\n var pivotDomElement = ReactDOM.findDOMNode(this._pivotElement);\r\n if (pivotDomElement != null) {\r\n pivotDomElement.addEventListener(\"click\", (e) => {\r\n if (e.srcElement.classList.contains(\"ms-Pivot-text\")) {\r\n let page = this._pageIndex[this.state.activeWizardPageIndex];\r\n if (page != null && !page.Validate(false)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n componentWillUnmount() {\r\n LogMessage.Log(\"Wizard closed\", this, LogSeverityEnum.Verbose);\r\n window.removeEventListener('onPivotNavigate', this.onPivotNavigate);\r\n }\r\n //Listener for pivot navigate initialized by other componentsS\r\n onPivotNavigate(e) {\r\n let pivotType = e.detail[\"Pivot\"];\r\n LogMessage.Log(\"External pivot navigate command received\", this, LogSeverityEnum.Verbose);\r\n this.savePage(this.state.activeWizardPageIndex).then((success) => {\r\n if (success) {\r\n let pivotItems = (this._pivotElement.props.children);\r\n pivotItems.forEach((val, index) => {\r\n if (val.props.linkText.toLocaleLowerCase() == pivotType.toLocaleLowerCase()) {\r\n this.setState({\r\n activeWizardPageIndex: index\r\n });\r\n let page = this._pageIndex[index];\r\n if (page) {\r\n page.SetReadOnly(this.state.allowEdit);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n onNavigateBackClick() {\r\n LogMessage.Log(\"Button 'back' clicked by user\", this, LogSeverityEnum.Verbose);\r\n this.savePage(this.state.activeWizardPageIndex).then((success) => {\r\n if (success) {\r\n let newIndex = (this.state.activeWizardPageIndex - 1) % this._numberOfPivots;\r\n this.setState({\r\n activeWizardPageIndex: newIndex\r\n });\r\n let page = this._pageIndex[newIndex];\r\n if (page) {\r\n page.SetReadOnly(this.state.allowEdit);\r\n }\r\n }\r\n });\r\n }\r\n onNavigateForwardClick() {\r\n LogMessage.Log(\"Button 'Next' clicked by user\", this, LogSeverityEnum.Verbose);\r\n this.savePage(this.state.activeWizardPageIndex).then((success) => {\r\n if (success) {\r\n let newIndex = (this.state.activeWizardPageIndex + 1) % this._numberOfPivots;\r\n this.setState({\r\n activeWizardPageIndex: newIndex\r\n });\r\n let page = this._pageIndex[newIndex];\r\n if (page) {\r\n page.SetReadOnly(this.state.allowEdit);\r\n }\r\n }\r\n });\r\n }\r\n onSaveDraftClick() {\r\n LogMessage.Log(\"Button 'Save draft' clicked by user\", this, LogSeverityEnum.Verbose);\r\n this.savePage(this.state.activeWizardPageIndex).then((success) => {\r\n if (success) {\r\n //alert('Page data is saved!');\r\n }\r\n });\r\n }\r\n onSubmitClick() {\r\n if (this.state.application.applicationStatus != ApplicationStatus.DRAFT && this.state.application.applicationStatus != ApplicationStatus.SUBMITTED_MORE_INFORMATION_REQUESTED) {\r\n return;\r\n }\r\n this.savePage(this.state.activeWizardPageIndex).then((success) => {\r\n let spContentRow = document.getElementById('contentRow');\r\n let dialogContainer = document.createElement('DIV');\r\n dialogContainer.id = 'natoDialogContainer';\r\n spContentRow.insertAdjacentHTML('beforeend', dialogContainer.outerHTML);\r\n ReactDOM.render( { this.submitApplication(); }} onCancel={() => { }} onClose={() => { spContentRow.removeChild(document.getElementById('natoDialogContainer')); }}/>, document.getElementById('natoDialogContainer'));\r\n }).catch(reason => {\r\n LogMessage.Log(\"There was an error saving the application\", this, LogSeverityEnum.Error);\r\n });\r\n }\r\n submitApplication() {\r\n return new Promise((resolve, reject) => {\r\n let message = \"Submitting application\";\r\n let closeButton = \"
Close\";\r\n let progressDialog = SP.UI.ModalDialog.showWaitScreenWithNoClose(\"Please wait...\", \"\" + message + \"\");\r\n progressDialog.autoSize();\r\n this.state.application.Submit().then(result => {\r\n let doneMessage = \"The application was submitted successfully.\";\r\n progressDialog.get_dialogElement().getElementsByClassName(\"nato-dialog-content\")[0].innerHTML += \" ✔

\" + doneMessage;\r\n progressDialog.autoSize();\r\n setTimeout(() => {\r\n progressDialog.close(SP.UI.DialogResult.OK);\r\n SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, null);\r\n resolve();\r\n }, 5000);\r\n }).catch(reason => {\r\n try {\r\n let reasonResponse = reason;\r\n if (reasonResponse) {\r\n reasonResponse.clone().json().then(errorObject => {\r\n let errorMessage = errorObject[\"odata.error\"].message.value;\r\n progressDialog.get_dialogElement().getElementsByClassName(\"nato-dialog-content\")[0].innerHTML += \"
There was an error submitting your application:
\" + errorMessage + \"
\" + closeButton;\r\n progressDialog.autoSize();\r\n });\r\n }\r\n }\r\n catch (e) {\r\n }\r\n reject(reason);\r\n });\r\n });\r\n }\r\n onPivotLinkClick(item, ev) {\r\n LogMessage.Log(\"Wizard hyperlink clicked by user\", this, LogSeverityEnum.Verbose);\r\n this.savePage(this.state.activeWizardPageIndex).then((success) => {\r\n if (success) {\r\n let newIndex = Number(item.props.itemKey);\r\n this.setState({\r\n activeWizardPageIndex: newIndex\r\n });\r\n let page = this._pageIndex[newIndex];\r\n if (page) {\r\n page.SetReadOnly(this.state.allowEdit);\r\n }\r\n }\r\n else {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n this.setState({\r\n activeWizardPageIndex: this.state.activeWizardPageIndex\r\n });\r\n }\r\n });\r\n }\r\n loadApplication(itemId) {\r\n if (itemId != 0) {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/\" + ListNames.APPLICATIONS + \"/items(\" + itemId + \")?$select=*,FileRef,FileLeafRef,hasuniqueroleassignments\";\r\n LogMessage.Log(\"Retrieving ApplicationObject '\" + itemId + \"'\", this, LogSeverityEnum.Verbose);\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n let retrievedApplication = new Application(odata);\r\n this.setState({\r\n application: retrievedApplication\r\n });\r\n LogMessage.Log(\"ApplicationObject '\" + itemId + \"' retrieved (code='\" + retrievedApplication.id + \"')\", this, LogSeverityEnum.Verbose);\r\n resolve(retrievedApplication.id);\r\n }).catch(reason => {\r\n //The object could not be parsed\r\n LogMessage.Log(\"Error parsing ApplicationObject '\" + itemId + \"':\" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n }).catch(reason => {\r\n //There was an error loading the ApplicationItem\r\n LogMessage.Log(\"Error retrieving ApplicationObject '\" + itemId + \"':\" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n }\r\n //Save the Wizard page specified by the 'PageIndex'\r\n //Returns 'True' if the validation and the save of the page was successful, 'False' otherwise\r\n savePage(pageIndex) {\r\n if (!this.state.allowEdit) {\r\n return new Promise((resolve, reject) => { resolve(true); });\r\n }\r\n let notifyData = new SPStatusNotificationData(\"\", STSHtmlEncode(\"Please wait\"), \"/_layouts/15/images/loadingcirclests16.gif?rev=23\", null);\r\n var notification = new window['SPNotification'](SPNotifications.ContainerID.Status, \"Saving data...\", true, null, null, notifyData);\r\n notification.Show(false);\r\n let notificationTopParent = notification.container.element;\r\n while (notificationTopParent.parentElement.tagName.toLocaleLowerCase() != \"body\") {\r\n notificationTopParent = notificationTopParent.parentElement;\r\n }\r\n notificationTopParent.style.zIndex = \"5000\";\r\n //Retrieve the page Item\r\n let page = this._pageIndex[pageIndex];\r\n if (page != null) {\r\n return new Promise((resolve, reject) => {\r\n //First validate the page, we validate for a normal save, not for a submit\r\n let dataIsValid = page.Validate(false);\r\n LogMessage.Log(\"Page '\" + typeof (page) + \"' validated (value='\" + dataIsValid + \"')\", this, LogSeverityEnum.Verbose);\r\n if (dataIsValid) { //The data on the form is valid, continue to actual save the data\r\n page.Save().then(id => {\r\n LogMessage.Log(\"ApplicationObject '\" + id + \"' saved\", this, LogSeverityEnum.Verbose);\r\n //If an id is returned that is different from the id we have in this object, (re)load the ApplicationItem\r\n //This happens for example when a new ApplcationItem was created\r\n if (this._itemId != id) {\r\n this._itemId = id;\r\n this.loadApplication(this._itemId).then(() => {\r\n //The ApplicationItem was loaded, to proceed\r\n notification.Hide();\r\n resolve(true);\r\n }).catch(reason => {\r\n notification.Hide();\r\n reject(reason); //There was an error loading the Application Item\r\n });\r\n }\r\n else {\r\n //The data on the form was saved, and we don't need to (re)load the ApplicationItem\r\n notification.Hide();\r\n resolve(true);\r\n }\r\n }).catch((reason) => {\r\n //There was an error saving the current page\r\n LogMessage.Log(\"There was an error saving ApplicationObject '\" + this._itemId + \"':\" + reason, this, LogSeverityEnum.Error);\r\n notification.Hide();\r\n reject(reason);\r\n });\r\n }\r\n else {\r\n //The data on the page is not valid\r\n notification.Hide();\r\n resolve(false);\r\n }\r\n });\r\n }\r\n else {\r\n //There is no page loaded, so return true and resume with the Wizard\r\n notification.Hide();\r\n return Promise.resolve(true);\r\n }\r\n }\r\n render() {\r\n let warningStyle = {\r\n \"color\": \"#721c24\",\r\n \"background\": \"#f8d7da\",\r\n \"borderColor\": \"1px solid #f5c6cb\",\r\n \"borderRadius\": \"5px\",\r\n \"padding\": \"10px\",\r\n };\r\n let infoStyle = {\r\n \"color\": \"#721c24\",\r\n \"background\": \"#ffff90\",\r\n \"borderColor\": \"1px solid #f5c6cb\",\r\n \"borderRadius\": \"5px\",\r\n \"padding\": \"10px\",\r\n };\r\n let division = (this.props.application && this.props.application.applicantDetails) ? this.props.application.applicantDetails.division : this.props.publishedGrant.division;\r\n let isDraft = (this.state.application == null || this.state.application.applicationStatus == ApplicationStatus.DRAFT || this.state.application.applicationStatus == ApplicationStatus.SUBMITTED_MORE_INFORMATION_REQUESTED);\r\n let pivots = {\r\n \"Applicant Details\": {\r\n Component: Wizard1ApplicantComponent,\r\n IsVisible: true,\r\n Order: 1\r\n },\r\n \"Project Details\": {\r\n Component: Wizard2ProjectDetailsComponent,\r\n IsVisible: true,\r\n Order: 2\r\n },\r\n \"Attachments and Agreements\": {\r\n Component: Wizard7AttachmentsComponent,\r\n IsVisible: true,\r\n Order: 3\r\n },\r\n \"Budget\": {\r\n Component: Wizard3BudgetComponent,\r\n IsVisible: true,\r\n Order: 4\r\n },\r\n \"Project Structure and Timeline\": {\r\n Component: Wizard5ProjectStructureTimelineComponent,\r\n IsVisible: division == DivisionEnum.ESC,\r\n //Before it was only visible to EndUsers, but now it is visible to applicants again...\r\n //IsVisible: this.state.isAdmin && division == DivisionEnum.ESC\r\n Order: 5\r\n },\r\n \"Others\": {\r\n Component: Wizard6PreviousGrantsComponent,\r\n IsVisible: division == DivisionEnum.PDD,\r\n Order: 6\r\n },\r\n \"Overview\": {\r\n Component: Wizard10OverviewComponent,\r\n IsVisible: division == DivisionEnum.ESC,\r\n Order: 7\r\n }\r\n };\r\n if (division === DivisionEnum.ESC) {\r\n pivots = Object.assign(pivots, {\r\n \"Activity details\": {\r\n Component: Wizard2ProjectDetailsComponent,\r\n IsVisible: true,\r\n Order: 2\r\n }\r\n });\r\n delete (pivots[\"Project Details\"]);\r\n }\r\n let pivotElements = Object.keys(pivots)\r\n .filter(pivotTitle => { return pivots[pivotTitle].IsVisible; })\r\n .sort((a, b) => pivots[a].Order - pivots[b].Order)\r\n .map((pivotTitle, index) => {\r\n const DynamicElement = pivots[pivotTitle].Component;\r\n //If the application is still in Draft, only enable the PivotLinks for until the current page and the next page.\r\n //We don't want the use to skip certain steps\r\n //let isDisabled = (isDraft && index > this.state.activeWizardPageIndex + 1); Still buggy...\r\n let isDisabled = isDraft;\r\n let elm = (\r\n this._pageIndex[index] = elm}/>\r\n );\r\n return elm;\r\n });\r\n this._numberOfPivots = pivotElements.length;\r\n let wizard = (
\r\n {!this.state.allowEdit ?\r\n ((isDraft) ?\r\n
This application is being editted by {(this.state.otherUser) ? this.state.otherUser.firstname + \" \" + this.state.otherUser.lastname : \"another person\"}!
\r\n :\r\n
This application is already submitted and cannot be edited!
)\r\n :\r\n ((isDraft) ?\r\n null\r\n :\r\n
This application is already submitted, but because you are a Grant Administrator you can still edit it.
)}\r\n\r\n { this._pivotElement = elm; }} onLinkClick={this.onPivotLinkClick} selectedKey={`${this.state.activeWizardPageIndex}`} linkFormat={PivotLinkFormat.links} linkSize={PivotLinkSize.large}>\r\n {pivotElements}\r\n \r\n\r\n\t\t\t
\r\n \r\n \r\n {this.state.application != null\r\n && this.state.allowEdit\r\n &&
\r\n
);\r\n return wizard;\r\n }\r\n static ShowInDialog(publishedGrant, application) {\r\n //All the scripts needed for the ClientPeoplePicker\r\n let scriptRefs = ['sp.core.js', 'sp.runtime.js', 'sp.js', 'autofill.js', 'clientpeoplepicker.js', 'clientforms.js', 'clienttemplates.js'];\r\n //Register all scripts as Script-On-Demand (SoD) dependencies\r\n scriptRefs.forEach(function (val, index) {\r\n if (!window['_v_dictSod'][val]) {\r\n SP.SOD.registerSod(val, \"\\u002f_layouts\\u002f15\\u002f\" + val);\r\n }\r\n ;\r\n });\r\n let promise = new Promise((resolve) => {\r\n //Load all scripts, and execute callback after the scripts have been loaded\r\n SP.SOD.loadMultiple(scriptRefs, function () {\r\n let webTitle = _spPageContextInfo.webTitle.trim();\r\n //Create the dialog and render the ReactComponent\r\n var dialogContainer = document.createElement('div');\r\n dialogContainer.style.display = 'none';\r\n document.body.appendChild(dialogContainer);\r\n var element = dialogContainer.appendChild(document.createElement('div'));\r\n element.className = \"nato-grantdetails-dialog\";\r\n let stupidDialogEventListener = SP.UI.Dialog[\"$1Q\"];\r\n SP.UI.Dialog[\"$1Q\"] = function (e) { return true; };\r\n //Specify options for the dialog\r\n let options = new SP.UI.DialogOptions();\r\n options.title = \"Application form: \" + publishedGrant.code + \" - \" + publishedGrant.synopsis;\r\n options.allowMaximize = true;\r\n options.showClose = true;\r\n options.showMaximized = true;\r\n options.html = element;\r\n options.dialogReturnValueCallback = (code, args) => {\r\n SP.UI.Dialog[\"$1Q\"] = stupidDialogEventListener;\r\n if (code == SP.UI.DialogResult.OK) {\r\n var notifyData = new SPStatusNotificationData(null, STSHtmlEncode(\"Updating application\"), \"/_layouts/15/images/loadingcirclests16.gif?rev=23\", null);\r\n var notification = new window['SPNotification'](SPNotifications.ContainerID.Status, STSHtmlEncode(\"Done\"), true, null, null, notifyData);\r\n notification.Show(false);\r\n SP.UI.ModalDialog.RefreshPage(code);\r\n }\r\n else if (window.docsetHomePageData == null) {\r\n let cleanUrl = window.location.href.replace(window.location.search, '');\r\n window.location.href = cleanUrl;\r\n }\r\n //Mark the application as not being editted\r\n if (application && application.applicantDetails && application.applicantDetails.editUserId) {\r\n User.getCurrentUser().then((user) => {\r\n if (user && application.applicantDetails.editUserId == user.id) {\r\n application.applicantDetails.editUserId = null;\r\n application.applicantDetails.UpdateEditUser().then(() => { });\r\n }\r\n });\r\n }\r\n };\r\n //Show the dialog\r\n let dialog = SP.UI.ModalDialog.showModalDialog(options);\r\n let dialogContent = dialog.get_dialogElement().getElementsByClassName(\"nato-grantdetails-dialog\")[0];\r\n ReactDOM.render(, dialogContent);\r\n });\r\n });\r\n return promise;\r\n }\r\n}\r\n//# sourceMappingURL=GrantApplicationWizardComponent.jsx.map","import { Component } from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { LogSeverityEnum } from \"../index\";\r\nimport { Panel, PanelType } from 'office-ui-fabric-react/lib/Panel';\r\nimport { DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\n//This component gathers logs from the various components\r\nexport class ErrorMessageComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n logs: new Array(),\r\n showDebugPanel: false,\r\n };\r\n this.onClosePanelClick = this.onClosePanelClick.bind(this);\r\n this.onDebugPanelToggleClick = this.onDebugPanelToggleClick.bind(this);\r\n this.handleOnLog = this.handleOnLog.bind(this);\r\n }\r\n //Register the onError and onLog global window events\r\n componentDidMount() {\r\n window.addEventListener('onLog', this.handleOnLog);\r\n window.onkeyup = (e) => {\r\n if (e.altKey && e.key == \"q\") {\r\n this.onDebugPanelToggleClick();\r\n }\r\n };\r\n }\r\n //Make sure we unregister these events when we unload the component\r\n componentWillUnmount() {\r\n window.removeEventListener('onLog', this.handleOnLog);\r\n }\r\n //This function is called on both the onError and the onLog event\r\n handleOnLog(e) {\r\n let message = e.detail[\"LogMessage\"];\r\n //Append the new message to the existing log array\r\n this.setState({\r\n logs: [...this.state.logs, message]\r\n });\r\n //In case of an error, show a message to the user\r\n if (message.severity == LogSeverityEnum.Error) {\r\n let errorVisibilityTime = 20 * 1000;\r\n var statusID = SP.UI.Status.addStatus('Error', message.message);\r\n SP.UI.Status.setStatusPriColor(statusID, 'red');\r\n //In the case a dialog is open, also show this error inside the dialog\r\n let dialog = SP.UI.ModalDialog.get_childDialog();\r\n if (dialog) {\r\n let dialogContent = dialog.get_dialogElement().getElementsByClassName(\"nato-grantdetails-dialog\")[0];\r\n //Grab the statusbar from the main page and clone it\r\n let statusBar = document.getElementById(statusID);\r\n let clonedStatus = statusBar.parentElement.cloneNode(true);\r\n //Check if a status bar is already on the dialog, if so, remove it\r\n let statusBarInDialog = dialogContent.parentElement.querySelector(\"#pageStatusBar\");\r\n if (statusBarInDialog) {\r\n statusBarInDialog.parentElement.removeChild(statusBarInDialog);\r\n }\r\n //Add the cloned status bar to the dialog\r\n dialogContent.parentElement.insertBefore(clonedStatus, dialogContent);\r\n //Remove the statusbar after a set time\r\n setTimeout(function () {\r\n if (clonedStatus && clonedStatus.parentElement) {\r\n clonedStatus.parentElement.removeChild(clonedStatus);\r\n }\r\n }, errorVisibilityTime);\r\n }\r\n setTimeout(function () {\r\n SP.UI.Status.removeStatus(statusID);\r\n }, errorVisibilityTime);\r\n let workspace = document.getElementById('s4-workspace');\r\n if (workspace) {\r\n workspace.scrollTo({\r\n top: 0,\r\n behavior: 'smooth'\r\n });\r\n }\r\n }\r\n }\r\n //Show (or hide) the log panel\r\n onDebugPanelToggleClick() {\r\n this.setState({ showDebugPanel: true });\r\n }\r\n onClosePanelClick() {\r\n this.setState({ showDebugPanel: false });\r\n }\r\n render() {\r\n //Create a simple HTML table with all log entries\r\n var logTable = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.logs.map((entry, index) => {\r\n return ;\r\n })}\r\n \r\n
TimeSeverityMessageComponent
{entry.timestamp.toISOString().slice(11, 23)}{LogSeverityEnum[entry.severity]}{entry.message}{entry.component}
);\r\n return
\r\n \r\n \r\n \r\n this.setState({ showDebugPanel: false })} headerText=\"Logs\">\r\n \r\n
\r\n \r\n
\r\n
\r\n {logTable}\r\n
\r\n
\r\n
\r\n
;\r\n }\r\n}\r\nExecuteOrDelayUntilBodyLoaded(() => {\r\n let initializeErrorComponent = () => {\r\n let topMenu = document.getElementById(\"O365_TopMenu\");\r\n if (topMenu != null) {\r\n let suitebar = topMenu.getElementsByClassName(\"o365cs-nav-rightMenus\")[0];\r\n let errorMessageContainer = document.createElement('DIV');\r\n errorMessageContainer.className = \"o365cs-nav-topItem\";\r\n errorMessageContainer.id = 'errorMessageContainer';\r\n if (suitebar) {\r\n suitebar.insertAdjacentHTML('afterbegin', errorMessageContainer.outerHTML);\r\n ReactDOM.render(, document.getElementById('errorMessageContainer'));\r\n SP.SOD.notifyScriptLoadedAndExecuteWaitingJobs(\"ErrorMessageComponent.tsx\");\r\n }\r\n }\r\n else {\r\n setTimeout(() => {\r\n initializeErrorComponent();\r\n }, 100);\r\n }\r\n };\r\n initializeErrorComponent();\r\n});\r\n//# sourceMappingURL=ErrorMessageComponent.jsx.map","import { Component } from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { ExploratoryGroupRegistration, PlenaryMeetingRegistration, SPUtil, FormValidator, PublishedEventData, SeminarRegistration, LogMessage, LogSeverityEnum } from \"../index\";\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { PrimaryButton, DefaultButton, IconButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { ComboBox } from 'office-ui-fabric-react/lib/ComboBox';\r\nimport { MessageBar, MessageBarType } from 'office-ui-fabric-react/lib/MessageBar';\r\n//Component for letting users register for events such as Study Groups\r\nexport class EventRegistrationComponent extends Component {\r\n //private _attendanceControl: ComboBox; //Only EG (Exploratory Groups)\r\n //private _representationConrol: ComboBox; //Only EG (Exploratory Groups)\r\n //private _roleControl: ComboBox; //Only EG (Exploratory Groups)\r\n //private _firstLastMeetingControl: ComboBox //Only PM (Plenary Meeting)\r\n //private _birthDateControl: DatePicker //Only PM (Plenary Meeting)\r\n //private _passportNumberControl: TextField //Only PM (Plenary Meeting)\r\n //private _passportExpirationControl: DatePicker //Only PM (Plenary Meeting)\r\n //private _dietaryRestrictionsControl: TextField //Only PM (Plenary Meeting)\r\n //private _spouseWillJoinControl: Checkbox; //Only PM (Plenary Meeting)\r\n //private _niagEventsControl: DetailsList;\r\n //private _niagSocialEventsControl: DetailsList;\r\n //private _niagEventsSelection: Selection = new Selection();\r\n //private _niagSocialEventsSelection: Selection = new Selection();\r\n constructor(props) {\r\n super(props);\r\n //Options for the various dropdown controls on this form\r\n this._countryOptions = [\"Albania\", \"Austria\", \"Belgium\", \"Bulgaria\", \"Canada\", \"Croatia\", \"Czechia\", \"Denmark\", \"Estonia\", \"Finland\", \"France\", \"Germany\", \"Greece\", \"Hungary\", \"Iceland\", \"Italy\", \"Latvia\", \"Lithuania\", \"Luxembourg\", \"Montenegro\", \"Netherlands\", \"North Macedonia\", \"Norway\", \"Poland\", \"Portugal\", \"Romania\", \"Serbia\", \"Slovakia\", \"Slovenia\", \"Spain\", \"Sweden\", \"Switzerland\", \"Türkiye\", \"Ukraine\", \"United Kingdom\", \"United States\", \"Other\"];\r\n this._titleOptions = [\"Mr\", \"Mrs\", \"Miss\", \"Other\"];\r\n if (this.props.publishedEvent != null && this.props.publishedEvent.eventType.toLocaleLowerCase() == \"exploratory group\") {\r\n this._eventType = \"ExploratoryGroup\";\r\n }\r\n else if (this.props.publishedEvent != null && this.props.publishedEvent.eventType.toLocaleLowerCase() == \"plenary meeting\") {\r\n this._eventType = \"PlenaryMeeting\";\r\n }\r\n else if (this.props.publishedEvent != null && this.props.publishedEvent.eventType.toLocaleLowerCase() == \"seminar/workshop/roundtable\") {\r\n this._eventType = \"Seminar/Workshop/Roundtable\";\r\n }\r\n //Initialize empty state\r\n this.state = {\r\n selectedCountry: \"\",\r\n selectedTitle: \"\",\r\n //selectedAttendance: \"\",\r\n //selectedRepresentation: \"\",\r\n //selectedRole: \"\",\r\n //selectedFirstLastMeeting: \"\",\r\n //birthDate: null,\r\n //passportExpirationDate: null,\r\n messageBarText: \"\",\r\n messageBarType: MessageBarType.blocked,\r\n formWasSubmitted: false,\r\n numberOfCheckboxesChecked: 0,\r\n //niagEvents: \"\",\r\n //niagSocialEvents: \"\",\r\n additionalFieldValues: {}\r\n };\r\n this.onCloseClick = this.onCloseClick.bind(this);\r\n this.onSubmitClick = this.onSubmitClick.bind(this);\r\n //this.onBirthDateChanged = this.onBirthDateChanged.bind(this);\r\n //this.onPassportExpirirationDateChanged = this.onPassportExpirirationDateChanged.bind(this);\r\n this.onCountryValueChanged = this.onCountryValueChanged.bind(this);\r\n //this.onAttendanceValueChanged = this.onAttendanceValueChanged.bind(this);\r\n //this.onRepresentationValueChanged = this.onRepresentationValueChanged.bind(this);\r\n //this.onRoleValueChanged = this.onRoleValueChanged.bind(this);\r\n this.onTitleValueChanged = this.onTitleValueChanged.bind(this);\r\n //this.onFirstOrLastMeetingValueChanged = this.onFirstOrLastMeetingValueChanged.bind(this);\r\n this.onCheckboxChange = this.onCheckboxChange.bind(this);\r\n this.additionalFieldValueChanged = this.additionalFieldValueChanged.bind(this);\r\n }\r\n resizeIfDialog() {\r\n let element = ReactDOM.findDOMNode(this);\r\n let querystring = element.ownerDocument.location.search;\r\n let params = SPUtil.parseQuerystring(querystring);\r\n if (params[\"isDlg\"] == \"1\" || true) {\r\n setTimeout(() => {\r\n SP.UI.ModalDialog.get_childDialog().autoSize();\r\n }, 1);\r\n }\r\n }\r\n componentDidMount() {\r\n this.resizeIfDialog();\r\n }\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n this.resizeIfDialog();\r\n }\r\n //User pressed the Close button\r\n onCloseClick(ev) {\r\n if (this.state.formWasSubmitted) {\r\n //If the form was succesfully submitted, close the form with 'OK' parameter\r\n SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, null);\r\n }\r\n else {\r\n //If the form was not submittes, close the form with 'Cancel' parameter\r\n SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.cancel, null);\r\n }\r\n }\r\n saveExploratoryGroupRegistration() {\r\n let eventRegistration = new ExploratoryGroupRegistration(null);\r\n eventRegistration.code = this.props.publishedEvent.code;\r\n eventRegistration.country = (this.state.selectedCountry == \"Other\") ? this._otherCountryControl.state.value.trim() : this.state.selectedCountry;\r\n eventRegistration.firstname = this._firstnameControl.state.value;\r\n eventRegistration.lastname = this._lastnameControl.state.value;\r\n eventRegistration.company = this._companyControl.state.value;\r\n eventRegistration.eMailAddress = this._eMailAddressControl.state.value;\r\n eventRegistration.title = this.state.selectedTitle == \"Other\" ? this._otherTitleControl.state.value.trim() : this.state.selectedTitle;\r\n //eventRegistration.representation = this.state.selectedRepresentation;\r\n //eventRegistration.attendance = this.state.selectedAttendance;\r\n //eventRegistration.role = this.state.selectedRole;\r\n eventRegistration.itemTitle = (\"[\" + eventRegistration.code + \"] \" + eventRegistration.firstname + eventRegistration.lastname).substr(0, 255);\r\n eventRegistration.additionalQuestionAnswers = this.state.additionalFieldValues;\r\n return eventRegistration.Update();\r\n }\r\n savePlenaryMeetingRegistration() {\r\n let eventRegistration = new PlenaryMeetingRegistration(null);\r\n eventRegistration.code = this.props.publishedEvent.code;\r\n eventRegistration.country = (this.state.selectedCountry == \"Other\") ? this._otherCountryControl.state.value.trim() : this.state.selectedCountry;\r\n eventRegistration.firstname = this._firstnameControl.state.value;\r\n eventRegistration.lastname = this._lastnameControl.state.value;\r\n eventRegistration.company = this._companyControl.state.value;\r\n eventRegistration.eMailAddress = this._eMailAddressControl.state.value;\r\n eventRegistration.title = this.state.selectedTitle == \"Other\" ? this._otherTitleControl.state.value.trim() : this.state.selectedTitle;\r\n //eventRegistration.passportNumber = this._passportNumberControl ? this._passportNumberControl.state.value : ''\r\n //eventRegistration.passportExpiration = this._passportExpirationControl ? this._passportExpirationControl.state.selectedDate : new Date(0);\r\n //eventRegistration.firstOrLastMeeting = (this.state.selectedFirstLastMeeting as \"\" | \"Yes\" | \"No\" | \"Not applicable\");\r\n //eventRegistration.birthDate = this._birthDateControl ? this._birthDateControl.state.selectedDate : new Date(0);\r\n //eventRegistration.dietaryRestrictions = this._dietaryRestrictionsControl ? this._dietaryRestrictionsControl.state.value : ''\r\n //eventRegistration.spouseWillJoin = this._spouseWillJoinControl ? this._spouseWillJoinControl.checked : false\r\n /*eventRegistration.niagEvents = this._niagEventsSelection.getSelection().map(item => {\r\n return item.key.toString();\r\n }).join(\"\\n\");\r\n\r\n eventRegistration.niagSocialEvents = this._niagSocialEventsSelection.getSelection().map(item => {\r\n return item.key.toString();\r\n }).join(\"\\n\");*/\r\n eventRegistration.additionalQuestionAnswers = this.state.additionalFieldValues;\r\n eventRegistration.itemTitle = (\"[\" + eventRegistration.code + \"] \" + eventRegistration.firstname + \" \" + eventRegistration.lastname).substr(0, 255);\r\n return eventRegistration.Update();\r\n }\r\n saveSeminarRegistration() {\r\n let eventRegistration = new SeminarRegistration(null);\r\n eventRegistration.code = this.props.publishedEvent.code;\r\n eventRegistration.country = (this.state.selectedCountry == \"Other\") ? this._otherCountryControl.state.value.trim() : this.state.selectedCountry;\r\n eventRegistration.firstname = this._firstnameControl.state.value;\r\n eventRegistration.lastname = this._lastnameControl.state.value;\r\n eventRegistration.company = this._companyControl.state.value;\r\n eventRegistration.eMailAddress = this._eMailAddressControl.state.value;\r\n eventRegistration.title = this.state.selectedTitle == \"Other\" ? this._otherTitleControl.state.value.trim() : this.state.selectedTitle;\r\n eventRegistration.itemTitle = (\"[\" + eventRegistration.code + \"] \" + eventRegistration.firstname + eventRegistration.lastname).substr(0, 255);\r\n eventRegistration.additionalQuestionAnswers = this.state.additionalFieldValues;\r\n return eventRegistration.Update();\r\n }\r\n onSubmitClick(ev) {\r\n //First, validate if all (required) have a value\r\n if (this.validateForm()) {\r\n this.setState({\r\n messageBarText: \"Please wait while we are saving your registration\",\r\n messageBarType: MessageBarType.info,\r\n formWasSubmitted: true\r\n });\r\n let promise;\r\n if (this._eventType == \"ExploratoryGroup\") {\r\n promise = this.saveExploratoryGroupRegistration();\r\n }\r\n else if (this._eventType == \"PlenaryMeeting\") {\r\n promise = this.savePlenaryMeetingRegistration();\r\n }\r\n else if (this._eventType == \"Seminar/Workshop/Roundtable\") {\r\n promise = this.saveSeminarRegistration();\r\n }\r\n let successHandler = () => {\r\n let thankyouText = \r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t { SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, null); }}/>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\tYou have been successfully registered for NIAG EVENT: {this.props.publishedEvent.code}

\r\n\t\t\t\t\tPlease read carefully the admin arrangements (or calling notice or General Information Package) related to the event as it captures all required information for this meeting.

\r\n\t\t\t\t\tDue to the high level of participants in NIAG activities, individual questions for which the information is in the admin arrangements will be treated as low priority and likely not be answered.

\r\n\t\t\t\t\tThank you.
\r\n\t\t\t\t\tThe NIAG Office.

\r\n\t\t\t\t
;\r\n this.setState({\r\n messageBarText: thankyouText,\r\n messageBarType: MessageBarType.success,\r\n formWasSubmitted: true\r\n });\r\n //Close the dialog after 15 seconds\r\n //setTimeout(() => {\r\n //\tSP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, null);\r\n //}, 15 * 1000);\r\n };\r\n let errorHandler = (error) => {\r\n this.setState({\r\n messageBarText: \"There was an error registering for this event\",\r\n messageBarType: MessageBarType.error\r\n });\r\n LogMessage.Log(error, this, LogSeverityEnum.Error);\r\n //Hide the message after 5 seconds\r\n setTimeout(() => {\r\n this.setState({\r\n messageBarText: \"\",\r\n });\r\n }, 5 * 1000);\r\n };\r\n promise.then(() => {\r\n successHandler();\r\n })\r\n .catch((reason) => {\r\n try {\r\n let reasonReponse = reason;\r\n if (reasonReponse && reasonReponse.status == 500) {\r\n reasonReponse.clone().json().then(errorObject => {\r\n let errorMessage = errorObject[\"odata.error\"].message.value;\r\n if (errorMessage.toLocaleLowerCase() == \"Item does not exist. It may have been deleted by another user.\".toLocaleLowerCase()) {\r\n successHandler();\r\n }\r\n else {\r\n errorHandler(errorMessage);\r\n }\r\n }).catch(reason => {\r\n errorHandler(\"Error reading the response\");\r\n });\r\n }\r\n else {\r\n errorHandler(\"Error: \" + reasonReponse.status);\r\n }\r\n }\r\n catch (e) {\r\n errorHandler(\"\" + e);\r\n }\r\n });\r\n }\r\n }\r\n onCountryValueChanged(option, index, value) {\r\n this.setState({ selectedCountry: (option) ? option.text : value });\r\n }\r\n /*private onRoleValueChanged(option?: IComboBoxOption, index?: number, value?: string): void {\r\n this.setState({ selectedRole: (option) ? option.text : value });\r\n }\r\n\r\n private onAttendanceValueChanged(option?: IComboBoxOption, index?: number, value?: string): void {\r\n this.setState({ selectedAttendance: (option) ? option.text : value });\r\n }\r\n\r\n private onRepresentationValueChanged(option?: IComboBoxOption, index?: number, value?: string): void {\r\n this.setState({ selectedRepresentation: (option) ? option.text : value });\r\n }*/\r\n /*private onFirstOrLastMeetingValueChanged(option?: IComboBoxOption, index?: number, value?: string): void {\r\n this.setState({ selectedFirstLastMeeting: (option) ? option.text : value });\r\n }*/\r\n onTitleValueChanged(option, index, value) {\r\n this.setState({ selectedTitle: (option) ? option.text : value });\r\n }\r\n /*private onBirthDateChanged(date: Date | null | undefined): void {\r\n this.setState({ birthDate: date });\r\n }\r\n\r\n private onPassportExpirirationDateChanged(date: Date | null | undefined): void {\r\n this.setState({ passportExpirationDate: date });\r\n }*/\r\n onCheckboxChange(ev, isChecked) {\r\n let newNumber = this.state.numberOfCheckboxesChecked + (isChecked ? 1 : -1);\r\n this.setState({\r\n numberOfCheckboxesChecked: newNumber\r\n });\r\n }\r\n validateForm() {\r\n let unansweredAdditionalQuestion = null;\r\n let faultyAnsweredAnsweredAdditionalQuestions = null;\r\n if (this.props.publishedEvent.additonalQuestions) {\r\n unansweredAdditionalQuestion = this.props.publishedEvent.additonalQuestions.questionData.find(question => {\r\n return question.Required && ((\"\" + this.state.additionalFieldValues[question.Title]).trim() == \"\" || this.state.additionalFieldValues[question.Title] == undefined);\r\n });\r\n faultyAnsweredAnsweredAdditionalQuestions = this.props.publishedEvent.additonalQuestions.questionData.find(question => {\r\n return question.Expression != null && (\"\" + this.state.additionalFieldValues[question.Title]) != \"\" && !(new RegExp(question.Expression)).test(\"\" + this.state.additionalFieldValues[question.Title]);\r\n });\r\n }\r\n if (unansweredAdditionalQuestion != null ||\r\n faultyAnsweredAnsweredAdditionalQuestions != null ||\r\n this.state.selectedCountry.trim() == \"\" ||\r\n (this.state.selectedCountry.trim() == \"Other\" && this._otherCountryControl.state.value.trim() == \"\") ||\r\n this.state.selectedTitle.trim() == \"\" ||\r\n this._firstnameControl.state.value.trim() == \"\" ||\r\n this._lastnameControl.state.value.trim() == \"\" ||\r\n this._companyControl.state.value.trim() == \"\" ||\r\n this._eMailAddressControl.state.value.trim() == \"\" || this._eMailAddressControl.state.errorMessage != \"\"\r\n //(this.state.selectedRepresentation.trim() == \"\" && this._eventType == \"ExploratoryGroup\" && false ) ||\r\n //(this.state.selectedAttendance.trim() == \"\" && this._eventType == \"ExploratoryGroup\" && false) ||\r\n //(this.state.selectedRole.trim() == \"\" && this._eventType == \"ExploratoryGroup\" && false)\r\n ) {\r\n this.setState({\r\n messageBarText: \"You did not fill in this form correctly\",\r\n messageBarType: MessageBarType.blocked\r\n });\r\n setTimeout(() => {\r\n this.setState({\r\n messageBarText: \"\",\r\n });\r\n }, 5 * 1000);\r\n return false;\r\n }\r\n else {\r\n this.setState({ messageBarText: \"\" });\r\n return true;\r\n }\r\n }\r\n additionalFieldValueChanged(fieldName, value) {\r\n let values = this.state.additionalFieldValues;\r\n values[fieldName] = value;\r\n this.setState({ additionalFieldValues: values });\r\n }\r\n render() {\r\n //Delegate function to transform a list of (textual) options to an object that can be displayed as option in a DropDown or Select-box\r\n let arrayToOptions = (arr) => {\r\n let options = arr.reduce((map, val) => {\r\n map.push({ key: val, text: val, styles: { optionText: { whiteSpace: \"normal\" } } });\r\n return map;\r\n }, []);\r\n return options;\r\n };\r\n //Transform all options-lists into actuel option-objects\r\n let countryOptions = arrayToOptions(this._countryOptions);\r\n let titleOptions = arrayToOptions(this._titleOptions);\r\n //let attendanceOptions = arrayToOptions(this._attendanceOptions);\r\n //let representationOptions = arrayToOptions(this._representationOptions);\r\n //let roleOptions = arrayToOptions(this._roleOptions);\r\n //let meetingOptions = arrayToOptions(this._firstOrLastMeetingOptions)\r\n //Parse the array of events to Objects that can be used by the DetailsList\r\n let eventItems = new Array();\r\n if (this.props.publishedEvent != null && this.props.publishedEvent.niagEvents.length > 0) {\r\n eventItems = this.props.publishedEvent.niagEvents.map((event, index) => {\r\n return { event: event, key: event };\r\n }).filter(event => { return (\"\" + event.key).trim().length > 0; });\r\n }\r\n //Parse the array of social events to Objects that can be used by the DetailsList\r\n let socialEventItems = new Array();\r\n if (this.props.publishedEvent != null && this.props.publishedEvent.niagSocialEvents.length > 0) {\r\n socialEventItems = this.props.publishedEvent.niagSocialEvents.map((event, index) => {\r\n return { event: event, key: event };\r\n }).filter(event => { return (\"\" + event.key).trim().length > 0; });\r\n ;\r\n }\r\n let messageBar = (this.state.messageBarText != \"\" &&\r\n
\r\n \r\n {this.state.messageBarText}\r\n \r\n
);\r\n let additionalQuestions = this.props.publishedEvent.additonalQuestions && this.props.publishedEvent.additonalQuestions.questionData.map(question => {\r\n let questionId = question.Id;\r\n let isDisabled = this.state.formWasSubmitted;\r\n let onChangeFunction = this.additionalFieldValueChanged;\r\n let currentValue = this.state.additionalFieldValues[question.Title] || \"\";\r\n let questionControl = this.props.publishedEvent.additonalQuestions.RenderField(questionId, currentValue, isDisabled, onChangeFunction);\r\n //Remove all HTML except for , , , and \r\n let questionText = question.Question.replace(/<(?!\\/?(b|u|i|strong)(?=>|\\s.*>))\\/?.*?>/, \"\");\r\n return (\r\n \r\n\t\t\t\t\t\r\n {question.Required && *}\r\n \r\n \r\n {questionControl}\r\n \r\n );\r\n });\r\n //let showExploratoryGroupSpecificFields: boolean = (this._eventType == \"ExploratoryGroup\" && false);\r\n //let showPlenaryMeetingSpecificFields: boolean = (this._eventType == \"PlenaryMeeting\" && false);\r\n let form = (
\r\n {messageBar}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\t\t\t\t\t\t{/*showExploratoryGroupSpecificFields && (\r\n \r\n \r\n \r\n )*/}\r\n\t\t\t\t\t\t{/*showExploratoryGroupSpecificFields && (\r\n \r\n \r\n \r\n )*/}\r\n\t\t\t\t\t\t{/*showExploratoryGroupSpecificFields && (\r\n \r\n \r\n \r\n )*/}\r\n\t\t\t\t\t\t{/*showPlenaryMeetingSpecificFields && (\r\n \r\n \r\n \r\n )*/}\r\n\t\t\t\t\t\t{/*showPlenaryMeetingSpecificFields && (\r\n \r\n \r\n \r\n )*/}\r\n\t\t\t\t\t\t{/*showPlenaryMeetingSpecificFields && (\r\n \r\n \r\n \r\n )*/}\r\n\t\t\t\t\t\t{/*showPlenaryMeetingSpecificFields && (\r\n \r\n \r\n \r\n )*/}\r\n {/*(eventItems.length > 0 &&\r\n \r\n \r\n \r\n )}\r\n {(socialEventItems.length > 0 &&\r\n \r\n \r\n \r\n )*/}\r\n\t\t\t\t\t\t{/*showPlenaryMeetingSpecificFields && (\r\n \r\n \r\n \r\n )*/}\r\n\t\t\t\t\t\t{/*showPlenaryMeetingSpecificFields && (\r\n \r\n \r\n \r\n )*/}\r\n\r\n {additionalQuestions}\r\n\r\n \r\n
\r\n \r\n *\r\n \r\n this._countryControl = elm} allowFreeform={false} autoComplete='on' options={countryOptions} caretDownButtonStyles={{ root: { minWidth: \"0px\" } }} useComboBoxAsMenuWidth={true} required={true} onChanged={this.onCountryValueChanged} value={this.state.selectedCountry} disabled={this.state.formWasSubmitted}/>\r\n
\r\n \r\n *\r\n \r\n this._titleControl = elm} allowFreeform={false} autoComplete='on' options={titleOptions} caretDownButtonStyles={{ root: { minWidth: \"0px\" } }} comboBoxOptionStyles={{ flexContainer: { display: \"inline\" } }} useComboBoxAsMenuWidth={true} required={false} onChanged={this.onTitleValueChanged} value={this.state.selectedTitle} disabled={this.state.formWasSubmitted}/>\r\n
\r\n \r\n *\r\n \r\n this._lastnameControl = elm} disabled={this.state.formWasSubmitted} required={true}/>\r\n
\r\n \r\n *\r\n \r\n this._firstnameControl = elm} disabled={this.state.formWasSubmitted} required={true}/>\r\n
\r\n \r\n *\r\n \r\n this._eMailAddressControl = elm} disabled={this.state.formWasSubmitted} required={true} onGetErrorMessage={(value) => { return FormValidator.validateEmailAddress(value, true); }} deferredValidationTime={500}/>\r\n
\r\n \r\n *\r\n \r\n this._companyControl = elm} disabled={this.state.formWasSubmitted} required={true}/>\r\n
\r\n \r\n *\r\n \r\n this._attendanceControl = elm}\r\n allowFreeform={false}\r\n autoComplete='off'\r\n options={attendanceOptions}\r\n caretDownButtonStyles={{ root: { minWidth: \"0px\" } }}\r\n comboBoxOptionStyles={{ flexContainer: { display: \"inline\" } }}\r\n useComboBoxAsMenuWidth={true}\r\n required={true}\r\n onChanged={this.onAttendanceValueChanged}\r\n value={this.state.selectedAttendance}\r\n disabled={this.state.formWasSubmitted}\r\n />\r\n
\r\n \r\n *\r\n \r\n this._representationConrol = elm}\r\n allowFreeform={false}\r\n autoComplete='off'\r\n options={representationOptions}\r\n caretDownButtonStyles={{ root: { minWidth: \"0px\" } }}\r\n useComboBoxAsMenuWidth={true}\r\n required={true}\r\n onChanged={this.onRepresentationValueChanged}\r\n value={this.state.selectedRepresentation}\r\n disabled={this.state.formWasSubmitted}\r\n />\r\n
\r\n \r\n *\r\n \r\n this._roleControl = elm}\r\n allowFreeform={false}\r\n autoComplete='off'\r\n options={roleOptions}\r\n caretDownButtonStyles={{ root: { minWidth: \"0px\" } }}\r\n useComboBoxAsMenuWidth={true}\r\n required={true}\r\n onChanged={this.onRoleValueChanged}\r\n value={this.state.selectedRole}\r\n disabled={this.state.formWasSubmitted}\r\n />\r\n
\r\n this._firstLastMeetingControl = elm}\r\n allowFreeform={false}\r\n autoComplete='off'\r\n options={meetingOptions}\r\n caretDownButtonStyles={{ root: { minWidth: \"0px\" } }}\r\n useComboBoxAsMenuWidth={true}\r\n required={true}\r\n onChanged={this.onFirstOrLastMeetingValueChanged}\r\n value={this.state.selectedFirstLastMeeting}\r\n disabled={this.state.formWasSubmitted}\r\n />\r\n
\r\n this._birthDateControl = elm}\r\n disabled={this.state.formWasSubmitted}\r\n value={this.state.birthDate}\r\n allowTextInput={true}\r\n parseDateFromString={SPUtil.parseDateFromString}\r\n disableAutoFocus={true}\r\n onSelectDate={this.onBirthDateChanged}\r\n />\r\n
\r\n this._passportNumberControl = elm}\r\n disabled={this.state.formWasSubmitted}\r\n required={true} />\r\n
(dd/mm/yyyy)\r\n this._passportExpirationControl = elm}\r\n disabled={this.state.formWasSubmitted}\r\n value={this.state.passportExpirationDate}\r\n allowTextInput={true}\r\n parseDateFromString={SPUtil.parseDateFromString}\r\n disableAutoFocus={true}\r\n onSelectDate={this.onPassportExpirirationDateChanged}\r\n />\r\n
\r\n this._niagEventsControl = elm}\r\n items={eventItems}\r\n compact={true}\r\n columns={[{ key: \"event\", name: \"Event\", fieldName: \"event\", minWidth: 200 }]}\r\n selectionMode={this.state.formWasSubmitted ? SelectionMode.none : SelectionMode.multiple}\r\n selection={this._niagEventsSelection}\r\n setKey='set'\r\n layoutMode={DetailsListLayoutMode.justified}\r\n isHeaderVisible={false}\r\n selectionPreservedOnEmptyClick={true}\r\n enterModalSelectionOnTouch={true}\r\n />\r\n
\r\n this._niagSocialEventsControl = elm}\r\n items={socialEventItems}\r\n compact={true}\r\n columns={[{ key: \"event\", name: \"Social Event\", fieldName: \"event\", minWidth: 200 }]}\r\n selectionMode={this.state.formWasSubmitted ? SelectionMode.none : SelectionMode.multiple}\r\n selection={this._niagSocialEventsSelection}\r\n setKey='set'\r\n layoutMode={DetailsListLayoutMode.justified}\r\n isHeaderVisible={false}\r\n selectionPreservedOnEmptyClick={true}\r\n enterModalSelectionOnTouch={true}\r\n />\r\n
\r\n this._dietaryRestrictionsControl = elm}\r\n disabled={this.state.formWasSubmitted}\r\n multiline\r\n rows={4}\r\n required={true} />\r\n
\r\n this._spouseWillJoinControl = elm}\r\n disabled={this.state.formWasSubmitted} />\r\n
\r\n\r\n {/*((this._eventType == \"ExploratoryGroup\" || this._eventType == \"Seminar/Workshop/Roundtable\") &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
)*/}\r\n\r\n \r\n \r\n
);\r\n return form;\r\n }\r\n static ShowInDialog(publishedGrant) {\r\n //All the scripts needed for the ClientPeoplePicker\r\n let scriptRefs = ['sp.core.js', 'sp.runtime.js', 'sp.js', 'autofill.js', 'clientpeoplepicker.js', 'clientforms.js', 'clienttemplates.js'];\r\n //Register all scripts as Script-On-Demand (SoD) dependencies\r\n scriptRefs.forEach(function (val, index) {\r\n if (!window['_v_dictSod'][val]) {\r\n SP.SOD.registerSod(val, \"\\u002f_layouts\\u002f15\\u002f\" + val);\r\n }\r\n ;\r\n });\r\n let promise = new Promise((resolve) => {\r\n //Load all scripts, and execute callback after the scripts have been loaded\r\n SP.SOD.loadMultiple(scriptRefs, function () {\r\n let webTitle = _spPageContextInfo.webTitle.trim();\r\n //Create the dialog and render the ReactComponent\r\n var dialogContainer = document.createElement('div');\r\n dialogContainer.style.display = 'none';\r\n document.body.appendChild(dialogContainer);\r\n var element = dialogContainer.appendChild(document.createElement('div'));\r\n element.className = \"nato-grantdetails-dialog\";\r\n let stupidDialogEventListener = SP.UI.Dialog[\"$1Q\"];\r\n SP.UI.Dialog[\"$1Q\"] = function (e) { return true; };\r\n //Specify options for the dialog\r\n let options = new SP.UI.DialogOptions();\r\n options.title = \"Application form: \" + publishedGrant.code + \" - \" + publishedGrant.synopsis;\r\n options.allowMaximize = true;\r\n options.showClose = true;\r\n options.showMaximized = false;\r\n options.autoSize = true;\r\n options.html = element;\r\n options.dialogReturnValueCallback = (code, args) => {\r\n SP.UI.Dialog[\"$1Q\"] = stupidDialogEventListener;\r\n if (code == SP.UI.DialogResult.OK) {\r\n var notifyData = new SPStatusNotificationData(null, STSHtmlEncode(\"Updating registration\"), \"/_layouts/15/images/loadingcirclests16.gif?rev=23\", null);\r\n var notification = new window['SPNotification'](SPNotifications.ContainerID.Status, STSHtmlEncode(\"Done\"), true, null, null, notifyData);\r\n notification.Show(false);\r\n SP.UI.ModalDialog.RefreshPage(code);\r\n }\r\n };\r\n let publishedEvent = new PublishedEventData(publishedGrant.spItem);\r\n //Show the dialog\r\n let dialog = SP.UI.ModalDialog.showModalDialog(options);\r\n let dialogContent = dialog.get_dialogElement().getElementsByClassName(\"nato-grantdetails-dialog\")[0];\r\n ReactDOM.render(, dialogContent);\r\n });\r\n });\r\n return promise;\r\n }\r\n}\r\n//# sourceMappingURL=EventRegistrationComponent.jsx.map","import { Component } from 'react';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { Application, User, DivisionEnum, LogMessage, LogSeverityEnum, ApplicationStatus, KeyPrioritiesSelectorComponent } from \"../index\";\r\n//This class is used by the during the review of the Application. The 'Grant Administrator' can update the KeyPriorities of the application.\r\nexport class SetKeyPrioritiesComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n let preSelectedKeyPriorities = new Array();\r\n let encodedKeyPriorities = this.props.application.encodedKeyPriorities;\r\n if (encodedKeyPriorities && encodedKeyPriorities.trim().length > 0) {\r\n try {\r\n let parsedKeyPriorities = JSON.parse(encodedKeyPriorities.trim());\r\n preSelectedKeyPriorities = parsedKeyPriorities.map(kp => Number(kp._id));\r\n }\r\n catch (_a) { }\r\n }\r\n this.state = {\r\n hideDialog: false,\r\n selectedKeyPriorities: new Array(),\r\n initialSelection: preSelectedKeyPriorities,\r\n changed: false\r\n };\r\n this.OnConfirmClick = this.OnConfirmClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n this.onSelectedKeyPrioritiesChanged = this.onSelectedKeyPrioritiesChanged.bind(this);\r\n }\r\n //Used pressed 'OK'; save the data\r\n OnConfirmClick() {\r\n if (this.state.changed) {\r\n this.props.application.updateKeyPriorities(this.state.selectedKeyPriorities).then(() => {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onConfirm)\r\n this.props.onConfirm();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }).catch(reason => {\r\n LogMessage.Log(\"Error updating the 'Key Priorities' for Application '\" + this.props.application.id + \"': \" + reason, this, LogSeverityEnum.Error);\r\n });\r\n }\r\n else {\r\n if (this.props.onConfirm)\r\n this.props.onConfirm();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n }\r\n //Used pressed 'Cancel'; close the form\r\n OnCancelClick() {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onCancel)\r\n this.props.onCancel();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n onSelectedKeyPrioritiesChanged(selection) {\r\n this.setState({\r\n selectedKeyPriorities: selection,\r\n changed: true\r\n });\r\n }\r\n render() {\r\n let title = this.props.title || \"Key Priorities\";\r\n let subtitle = this.props.subText || \"Use this dialog to update the Key Priorities for this application\";\r\n if (this._spNotification == null) {\r\n let notifyData = new SPStatusNotificationData(\"\", STSHtmlEncode(\"Please wait\"), \"/_layouts/15/images/loadingcirclests16.gif?rev=23\", null);\r\n var notification = new window['SPNotification'](SPNotifications.ContainerID.Status, \"Loading Key Priorities\", false, null, null, notifyData);\r\n this._spNotification = notification;\r\n }\r\n return (
\r\n \r\n
);\r\n }\r\n //Check if the user has enough permissions to update the KeyPriorities. \r\n //The user must be a member of the ESC Grant Administrators group\r\n static DoesUserHasPermissions() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC\r\n && application.applicationStatus == ApplicationStatus.SUBMITTED) {\r\n User.getCurrentUser().then(user => {\r\n if (application.isUserSeniorAdvisor(user)) {\r\n resolve(true);\r\n }\r\n else {\r\n User.isGrantAdministrator(DivisionEnum.ESC).then(isAdmin => {\r\n resolve(isAdmin);\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=SetKeyPrioritiesComponent.jsx.map","import { Component } from 'react';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TooltipHost, TooltipDelay } from 'office-ui-fabric-react/lib/Tooltip';\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport { Application, User, DivisionEnum, ApplicationStatus, LogMessage, LogSeverityEnum } from \"../index\";\r\nexport class ChangeAdvisorsComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n hideDialog: false,\r\n peoplePickerInitialized: false,\r\n advisorsGroupMembers: new Array(),\r\n seniorAdvisorsGroupMembers: new Array(),\r\n grantAdminGroupMembers: new Array()\r\n };\r\n this.OnConfirmClick = this.OnConfirmClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n }\r\n componentWillMount() {\r\n }\r\n componentDidMount() {\r\n if (!this.state.peoplePickerInitialized) {\r\n if (this._peoplePickerDivAdvisors != null && this._peoplePickerDivSeniorAdvisors != null) {\r\n this.initializePeoplePicker();\r\n }\r\n else {\r\n let initializationInterval = setInterval(() => {\r\n if (this._peoplePickerDivAdvisors != null && this._peoplePickerDivSeniorAdvisors != null) {\r\n this.initializePeoplePicker();\r\n clearInterval(initializationInterval);\r\n }\r\n }, 100);\r\n }\r\n }\r\n }\r\n initializePeoplePicker() {\r\n let advisorsPeoplePickerValues = this.props.application.advisors.map(user => {\r\n return {\r\n Key: user.claim,\r\n AutoFillDisplayText: user.name,\r\n AutoFillKey: user.claim,\r\n Description: user.name,\r\n DisplayText: user.name,\r\n EntityType: \"User\",\r\n IsResolved: true,\r\n Resolved: true\r\n };\r\n });\r\n let seniorAdvisorsPeoplePickerValues = this.props.application.seniorAdvisors.map(user => {\r\n return {\r\n Key: user.claim,\r\n AutoFillDisplayText: user.name,\r\n AutoFillKey: user.claim,\r\n Description: user.name,\r\n DisplayText: user.name,\r\n EntityType: \"User\",\r\n IsResolved: true,\r\n Resolved: true\r\n };\r\n });\r\n let grantAdminPeoplePickerValues = this.props.application.grantAdministrators.map(user => {\r\n return {\r\n Key: user.claim,\r\n AutoFillDisplayText: user.name,\r\n AutoFillKey: user.claim,\r\n Description: user.name,\r\n DisplayText: user.name,\r\n EntityType: \"User\",\r\n IsResolved: true,\r\n Resolved: true\r\n };\r\n });\r\n //All the scripts needed for the ClientPeoplePicker\r\n let scriptRefs = ['sp.core.js', 'sp.runtime.js', 'sp.js', 'autofill.js', 'clientpeoplepicker.js', 'clientforms.js', 'clienttemplates.js'];\r\n //Register all scripts as Script-On-Demand (SoD) dependencies\r\n scriptRefs.forEach(function (val, index) {\r\n if (!window['_v_dictSod'][val]) {\r\n SP.SOD.registerSod(val, \"\\u002f_layouts\\u002f15\\u002f\" + val);\r\n }\r\n ;\r\n });\r\n //Load all scripts, and execute callback after the scripts have been loaded\r\n SP.SOD.loadMultiple(scriptRefs, () => {\r\n //Create a schema object that describes the behaviour of the ClientPeoplePicker\r\n var schemaAdvisors = {};\r\n schemaAdvisors['PrincipalAccountType'] = 'User,DL';\r\n schemaAdvisors['SearchPrincipalSource'] = 15;\r\n schemaAdvisors['ResolvePrincipalSource'] = 15;\r\n schemaAdvisors['AllowMultipleValues'] = true;\r\n schemaAdvisors['MaximumEntitySuggestions'] = 50;\r\n schemaAdvisors['Width'] = '280px';\r\n //Create a schema object that describes the behaviour of the ClientPeoplePicker\r\n var schemaSeniorAdvisors = {};\r\n schemaSeniorAdvisors['PrincipalAccountType'] = 'User,DL';\r\n schemaSeniorAdvisors['SearchPrincipalSource'] = 15;\r\n schemaSeniorAdvisors['ResolvePrincipalSource'] = 15;\r\n schemaSeniorAdvisors['AllowMultipleValues'] = true;\r\n schemaSeniorAdvisors['MaximumEntitySuggestions'] = 50;\r\n schemaSeniorAdvisors['Width'] = '280px';\r\n //Create a schema object that describes the behaviour of the ClientPeoplePicker\r\n var schemaGrantAdministrators = {};\r\n schemaGrantAdministrators['PrincipalAccountType'] = 'User,DL';\r\n schemaGrantAdministrators['SearchPrincipalSource'] = 15;\r\n schemaGrantAdministrators['ResolvePrincipalSource'] = 15;\r\n schemaGrantAdministrators['AllowMultipleValues'] = true;\r\n schemaGrantAdministrators['MaximumEntitySuggestions'] = 50;\r\n schemaGrantAdministrators['Width'] = '280px';\r\n let context = SP.ClientContext.get_current();\r\n let division = this.props.application.applicantDetails.division;\r\n if (typeof (division) == \"undefined\" || division == DivisionEnum.INVALID) {\r\n if (_spPageContextInfo.webTitle.toLocaleLowerCase().startsWith(\"esc\"))\r\n division = DivisionEnum.ESC;\r\n if (_spPageContextInfo.webTitle.toLocaleLowerCase().startsWith(\"di\"))\r\n division = DivisionEnum.DI;\r\n if (_spPageContextInfo.webTitle.toLocaleLowerCase().startsWith(\"pdd\"))\r\n division = DivisionEnum.PDD;\r\n }\r\n let divisionStrVal = DivisionEnum[division];\r\n let advisorsGroup = context.get_web().get_siteGroups().getByName(divisionStrVal + \" Advisors\");\r\n let seniorAdvisorsGroup = context.get_web().get_siteGroups().getByName(divisionStrVal + \" Senior Advisors\");\r\n let grantAdministratorsGroup = context.get_web().get_siteGroups().getByName(divisionStrVal + \" Grant Administrators\");\r\n let advisorsGroupMembers = advisorsGroup.get_users();\r\n let seniorAdvisorsGroupMembers = seniorAdvisorsGroup.get_users();\r\n let grantAdministratorsGroupMembers = grantAdministratorsGroup.get_users();\r\n context.load(advisorsGroup);\r\n context.load(seniorAdvisorsGroup);\r\n context.load(grantAdministratorsGroup);\r\n context.load(advisorsGroupMembers);\r\n context.load(seniorAdvisorsGroupMembers);\r\n context.load(grantAdministratorsGroupMembers);\r\n context.executeQueryAsync((sender, args) => {\r\n schemaAdvisors[\"SharePointGroupID\"] = advisorsGroup.get_id();\r\n schemaSeniorAdvisors[\"SharePointGroupID\"] = seniorAdvisorsGroup.get_id();\r\n schemaGrantAdministrators[\"SharePointGroupID\"] = grantAdministratorsGroup.get_id();\r\n let userCollectionToGroup = (userCollection) => {\r\n let users = new Array();\r\n let enumerator = userCollection.getEnumerator();\r\n while (enumerator.moveNext()) {\r\n users.push(enumerator.get_current());\r\n }\r\n return users;\r\n };\r\n if (seniorAdvisorsPeoplePickerValues.length == 0) {\r\n let seniorAdvisorEnumerator = seniorAdvisorsGroupMembers.getEnumerator();\r\n while (seniorAdvisorEnumerator.moveNext()) {\r\n let user = seniorAdvisorEnumerator.get_current();\r\n var defaultUser = {\r\n Key: user.get_loginName(),\r\n AutoFillDisplayText: user.get_title(),\r\n AutoFillKey: user.get_loginName(),\r\n Description: user.get_email(),\r\n DisplayText: user.get_title(),\r\n EntityType: \"User\",\r\n IsResolved: true,\r\n Resolved: true\r\n };\r\n seniorAdvisorsPeoplePickerValues.push(defaultUser);\r\n }\r\n }\r\n //Initialize the PeoplePicker. Because there are no Typings available for the SPClientPeoplePicker object we use the hash-list \r\n let initializationFunction = window['SPClientPeoplePicker_InitStandaloneControlWrapper'];\r\n initializationFunction.call(window, this._peoplePickerDivGrantAdministrators.id, grantAdminPeoplePickerValues, schemaGrantAdministrators);\r\n initializationFunction.call(window, this._peoplePickerDivSeniorAdvisors.id, seniorAdvisorsPeoplePickerValues, schemaSeniorAdvisors);\r\n initializationFunction.call(window, this._peoplePickerDivAdvisors.id, advisorsPeoplePickerValues, schemaAdvisors);\r\n this.setState({\r\n peoplePickerInitialized: true,\r\n advisorsGroupMembers: userCollectionToGroup(advisorsGroupMembers),\r\n seniorAdvisorsGroupMembers: userCollectionToGroup(seniorAdvisorsGroupMembers),\r\n grantAdminGroupMembers: userCollectionToGroup(grantAdministratorsGroupMembers),\r\n });\r\n }, (sender, args) => {\r\n LogMessage.Log(args.get_message(), this, LogSeverityEnum.Error);\r\n });\r\n });\r\n }\r\n getPeoplePickerValue(element) {\r\n //Retrieve the PeoplePickerObject from the form\r\n let peoplePickerDictionaryValue = element.id + \"_TopSpan\";\r\n let peoplePickerObject = window[\"SPClientPeoplePicker\"].SPClientPeoplePickerDict[peoplePickerDictionaryValue];\r\n //Get all information for the resolved users\r\n let getAllUserInfoFunc = peoplePickerObject['GetAllUserInfo'];\r\n let userInfo = getAllUserInfoFunc.call(peoplePickerObject);\r\n return userInfo;\r\n }\r\n OnConfirmClick() {\r\n let advisors = this.getPeoplePickerValue(this._peoplePickerDivAdvisors);\r\n let advisorsCollection = new Array();\r\n if (advisors.length > 0) {\r\n advisorsCollection = advisors.map(userObj => {\r\n let claim = userObj[\"Key\"];\r\n let displayName = userObj[\"DisplayText\"];\r\n return { claim: claim, name: displayName };\r\n });\r\n }\r\n let seniorAdvisors = this.getPeoplePickerValue(this._peoplePickerDivSeniorAdvisors);\r\n let seniorAdvisorsCollection = new Array();\r\n if (seniorAdvisors.length > 0) {\r\n seniorAdvisorsCollection = seniorAdvisors.map(userObj => {\r\n let claim = userObj[\"Key\"];\r\n let displayName = userObj[\"DisplayText\"];\r\n return { claim: claim, name: displayName };\r\n });\r\n }\r\n let grantAdministrators = this.getPeoplePickerValue(this._peoplePickerDivGrantAdministrators);\r\n let grantAdministratorsCollection = new Array();\r\n if (grantAdministrators.length > 0) {\r\n grantAdministratorsCollection = grantAdministrators.map(userObj => {\r\n let claim = userObj[\"Key\"];\r\n let displayName = userObj[\"DisplayText\"];\r\n return { claim: claim, name: displayName };\r\n });\r\n }\r\n this.props.application.updateAdvisors(grantAdministratorsCollection, seniorAdvisorsCollection, advisorsCollection).then(() => {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onConfirm)\r\n this.props.onConfirm();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }).catch(reason => {\r\n });\r\n }\r\n OnCancelClick() {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onCancel)\r\n this.props.onCancel();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n render() {\r\n let peoplePickerDivGrantAdministratorsId = this._peoplePickerDivGrantAdministrators ? this._peoplePickerDivGrantAdministrators.id : 'peoplePickerDiv_' + Math.random().toString(36).substr(2, 10);\r\n let peoplePickerDivSeniorAdvisorsId = this._peoplePickerDivSeniorAdvisors ? this._peoplePickerDivSeniorAdvisors.id : 'peoplePickerDiv_' + Math.random().toString(36).substr(2, 10);\r\n let peoplePickerDivAdvisorsId = this._peoplePickerDivAdvisors ? this._peoplePickerDivAdvisors.id : 'peoplePickerDiv_' + Math.random().toString(36).substr(2, 10);\r\n let title = this.props.title || \"Assign Advisors\";\r\n let subtitle = this.props.subText || \"Use this dialog to assign advisors.\";\r\n return (
\r\n \r\n
);\r\n }\r\n static DoesUserHasPermissions() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC\r\n && application.applicationStatus == ApplicationStatus.SUBMITTED) {\r\n User.getCurrentUser().then(user => {\r\n if (application.isUserSeniorAdvisor(user)) {\r\n resolve(true);\r\n }\r\n else {\r\n User.isGrantAdministrator(DivisionEnum.ESC).then(isAdmin => {\r\n resolve(isAdmin);\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=ChangeAdvisorsComponent.jsx.map","import { Component } from 'react';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TooltipHost, TooltipDelay } from 'office-ui-fabric-react/lib/Tooltip';\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport { Application, User, DivisionEnum, ApplicationStatus, LogMessage, LogSeverityEnum } from \"../index\";\r\nexport class AssignSpecialistComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n hideDialog: false,\r\n peoplePickerInitialized: false,\r\n sectionSpecialistGroupMembers: new Array(),\r\n headOfSectionGroupMembers: new Array(),\r\n grantAdminGroupMembers: new Array()\r\n };\r\n this.OnConfirmClick = this.OnConfirmClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n }\r\n componentWillMount() {\r\n }\r\n componentDidMount() {\r\n if (!this.state.peoplePickerInitialized) {\r\n if (this._peoplePickerDivSectionSpecialist != null && this._peoplePickerDivHeadOfSection != null) {\r\n this.initializePeoplePicker();\r\n }\r\n else {\r\n let initializationInterval = setInterval(() => {\r\n if (this._peoplePickerDivSectionSpecialist != null && this._peoplePickerDivHeadOfSection != null) {\r\n this.initializePeoplePicker();\r\n clearInterval(initializationInterval);\r\n }\r\n }, 100);\r\n }\r\n }\r\n }\r\n initializePeoplePicker() {\r\n let sectionSpecialistPeoplePickerValues = this.props.application.sectionSpecialists.map(user => {\r\n return {\r\n Key: user.claim,\r\n AutoFillDisplayText: user.name,\r\n AutoFillKey: user.claim,\r\n Description: user.name,\r\n DisplayText: user.name,\r\n EntityType: \"User\",\r\n IsResolved: true,\r\n Resolved: true\r\n };\r\n });\r\n let headOfSectionPeoplePickerValues = this.props.application.headOfSection.map(user => {\r\n return {\r\n Key: user.claim,\r\n AutoFillDisplayText: user.name,\r\n AutoFillKey: user.claim,\r\n Description: user.name,\r\n DisplayText: user.name,\r\n EntityType: \"User\",\r\n IsResolved: true,\r\n Resolved: true\r\n };\r\n });\r\n let grantAdminPeoplePickerValues = this.props.application.grantAdministrators.map(user => {\r\n return {\r\n Key: user.claim,\r\n AutoFillDisplayText: user.name,\r\n AutoFillKey: user.claim,\r\n Description: user.name,\r\n DisplayText: user.name,\r\n EntityType: \"User\",\r\n IsResolved: true,\r\n Resolved: true\r\n };\r\n });\r\n //All the scripts needed for the ClientPeoplePicker\r\n let scriptRefs = ['sp.core.js', 'sp.runtime.js', 'sp.js', 'autofill.js', 'clientpeoplepicker.js', 'clientforms.js', 'clienttemplates.js'];\r\n //Register all scripts as Script-On-Demand (SoD) dependencies\r\n scriptRefs.forEach(function (val, index) {\r\n if (!window['_v_dictSod'][val]) {\r\n SP.SOD.registerSod(val, \"\\u002f_layouts\\u002f15\\u002f\" + val);\r\n }\r\n ;\r\n });\r\n //Load all scripts, and execute callback after the scripts have been loaded\r\n SP.SOD.loadMultiple(scriptRefs, () => {\r\n //Create a schema object that describes the behaviour of the ClientPeoplePicker\r\n var schemaSectionSpecialist = {};\r\n schemaSectionSpecialist['PrincipalAccountType'] = 'User,DL';\r\n schemaSectionSpecialist['SearchPrincipalSource'] = 15;\r\n schemaSectionSpecialist['ResolvePrincipalSource'] = 15;\r\n schemaSectionSpecialist['AllowMultipleValues'] = false;\r\n schemaSectionSpecialist['MaximumEntitySuggestions'] = 50;\r\n schemaSectionSpecialist['Width'] = '280px';\r\n //Create a schema object that describes the behaviour of the ClientPeoplePicker\r\n var schemaHeadOfSection = {};\r\n schemaHeadOfSection['PrincipalAccountType'] = 'User,DL';\r\n schemaHeadOfSection['SearchPrincipalSource'] = 15;\r\n schemaHeadOfSection['ResolvePrincipalSource'] = 15;\r\n schemaHeadOfSection['AllowMultipleValues'] = false;\r\n schemaHeadOfSection['MaximumEntitySuggestions'] = 50;\r\n schemaHeadOfSection['Width'] = '280px';\r\n //Create a schema object that describes the behaviour of the ClientPeoplePicker\r\n var schemaGrantAdministrators = {};\r\n schemaGrantAdministrators['PrincipalAccountType'] = 'User,DL';\r\n schemaGrantAdministrators['SearchPrincipalSource'] = 15;\r\n schemaGrantAdministrators['ResolvePrincipalSource'] = 15;\r\n schemaGrantAdministrators['AllowMultipleValues'] = false;\r\n schemaGrantAdministrators['MaximumEntitySuggestions'] = 50;\r\n schemaGrantAdministrators['Width'] = '280px';\r\n let context = SP.ClientContext.get_current();\r\n let division = this.props.application.applicantDetails.division;\r\n if (typeof (division) == \"undefined\" || division == DivisionEnum.INVALID) {\r\n if (_spPageContextInfo.webTitle.toLocaleLowerCase().startsWith(\"esc\"))\r\n division = DivisionEnum.ESC;\r\n if (_spPageContextInfo.webTitle.toLocaleLowerCase().startsWith(\"di\"))\r\n division = DivisionEnum.DI;\r\n if (_spPageContextInfo.webTitle.toLocaleLowerCase().startsWith(\"pdd\"))\r\n division = DivisionEnum.PDD;\r\n }\r\n let divisionStrVal = DivisionEnum[division];\r\n let sectionSpecialistGroup = context.get_web().get_siteGroups().getByName(divisionStrVal + \" Section Specialists\");\r\n let headOfSectionGroup = context.get_web().get_siteGroups().getByName(divisionStrVal + \" Head of Section\");\r\n let grantAdministratorsGroup = context.get_web().get_siteGroups().getByName(divisionStrVal + \" Grant Administrators\");\r\n let sectionSpecialistGroupMembers = sectionSpecialistGroup.get_users();\r\n let headOfSectionGroupMembers = headOfSectionGroup.get_users();\r\n let grantAdministratorsGroupMembers = grantAdministratorsGroup.get_users();\r\n context.load(sectionSpecialistGroup);\r\n context.load(headOfSectionGroup);\r\n context.load(grantAdministratorsGroup);\r\n context.load(sectionSpecialistGroupMembers);\r\n context.load(headOfSectionGroupMembers);\r\n context.load(grantAdministratorsGroupMembers);\r\n context.executeQueryAsync((sender, args) => {\r\n schemaSectionSpecialist[\"SharePointGroupID\"] = sectionSpecialistGroup.get_id();\r\n schemaHeadOfSection[\"SharePointGroupID\"] = headOfSectionGroup.get_id();\r\n schemaGrantAdministrators[\"SharePointGroupID\"] = grantAdministratorsGroup.get_id();\r\n let userCollectionToGroup = (userCollection) => {\r\n let users = new Array();\r\n let enumerator = userCollection.getEnumerator();\r\n while (enumerator.moveNext()) {\r\n users.push(enumerator.get_current());\r\n }\r\n return users;\r\n };\r\n if (headOfSectionPeoplePickerValues.length == 0) {\r\n this.props.application.getHeadOfSectionFromGrantData().then(users => {\r\n if (users.length > 0) {\r\n let peoplePickerObject = window[\"SPClientPeoplePicker\"].SPClientPeoplePickerDict[this._peoplePickerDivHeadOfSection.id + \"_TopSpan\"];\r\n let allClaims = users.map(user => user.claim).join(\";\");\r\n peoplePickerObject.AddUserKeys(allClaims);\r\n }\r\n });\r\n }\r\n //Initialize the PeoplePicker. Because there are no Typings available for the SPClientPeoplePicker object we use the hash-list \r\n let initializationFunction = window['SPClientPeoplePicker_InitStandaloneControlWrapper'];\r\n initializationFunction.call(window, this._peoplePickerDivGrantAdministrators.id, grantAdminPeoplePickerValues, schemaGrantAdministrators);\r\n initializationFunction.call(window, this._peoplePickerDivHeadOfSection.id, headOfSectionPeoplePickerValues, schemaHeadOfSection);\r\n initializationFunction.call(window, this._peoplePickerDivSectionSpecialist.id, sectionSpecialistPeoplePickerValues, schemaSectionSpecialist);\r\n this.setState({\r\n peoplePickerInitialized: true,\r\n sectionSpecialistGroupMembers: userCollectionToGroup(sectionSpecialistGroupMembers),\r\n headOfSectionGroupMembers: userCollectionToGroup(headOfSectionGroupMembers),\r\n grantAdminGroupMembers: userCollectionToGroup(grantAdministratorsGroupMembers),\r\n });\r\n }, (sender, args) => {\r\n LogMessage.Log(args.get_message(), this, LogSeverityEnum.Error);\r\n });\r\n });\r\n }\r\n getPeoplePickerValue(element) {\r\n //Retrieve the PeoplePickerObject from the form\r\n let peoplePickerDictionaryValue = element.id + \"_TopSpan\";\r\n let peoplePickerObject = window[\"SPClientPeoplePicker\"].SPClientPeoplePickerDict[peoplePickerDictionaryValue];\r\n //Get all information for the resolved users\r\n let getAllUserInfoFunc = peoplePickerObject['GetAllUserInfo'];\r\n let userInfo = getAllUserInfoFunc.call(peoplePickerObject);\r\n return userInfo;\r\n }\r\n OnConfirmClick() {\r\n let sectionSpecialist = this.getPeoplePickerValue(this._peoplePickerDivSectionSpecialist);\r\n let sectionSpecialistCollection = new Array();\r\n if (sectionSpecialist.length > 0) {\r\n sectionSpecialistCollection = sectionSpecialist.map(userObj => {\r\n let claim = userObj[\"Key\"];\r\n let displayName = userObj[\"DisplayText\"];\r\n return { claim: claim, name: displayName };\r\n });\r\n }\r\n let headOfSection = this.getPeoplePickerValue(this._peoplePickerDivHeadOfSection);\r\n let headOfSectionCollection = new Array();\r\n if (headOfSection.length > 0) {\r\n headOfSectionCollection = headOfSection.map(userObj => {\r\n let claim = userObj[\"Key\"];\r\n let displayName = userObj[\"DisplayText\"];\r\n return { claim: claim, name: displayName };\r\n });\r\n }\r\n let grantAdministrators = this.getPeoplePickerValue(this._peoplePickerDivGrantAdministrators);\r\n let grantAdministratorsCollection = new Array();\r\n if (grantAdministrators.length > 0) {\r\n grantAdministratorsCollection = grantAdministrators.map(userObj => {\r\n let claim = userObj[\"Key\"];\r\n let displayName = userObj[\"DisplayText\"];\r\n return { claim: claim, name: displayName };\r\n });\r\n }\r\n this.props.application.updateSectionSpecialists(grantAdministratorsCollection, headOfSectionCollection, sectionSpecialistCollection).then(() => {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onConfirm)\r\n this.props.onConfirm();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }).catch(reason => {\r\n });\r\n }\r\n OnCancelClick() {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onCancel)\r\n this.props.onCancel();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n render() {\r\n let peoplePickerDivGrantAdministratorsId = this._peoplePickerDivGrantAdministrators ? this._peoplePickerDivGrantAdministrators.id : 'peoplePickerDiv_' + Math.random().toString(36).substr(2, 10);\r\n let peoplePickerDivHeadOfSectionId = this._peoplePickerDivHeadOfSection ? this._peoplePickerDivHeadOfSection.id : 'peoplePickerDiv_' + Math.random().toString(36).substr(2, 10);\r\n let peoplePickerDivSectionSpecialistId = this._peoplePickerDivSectionSpecialist ? this._peoplePickerDivSectionSpecialist.id : 'peoplePickerDiv_' + Math.random().toString(36).substr(2, 10);\r\n let title = this.props.title || \"Assign Section Specialist\";\r\n let subtitle = this.props.subText || \"Use this dialog to assign section specialist.\";\r\n return (
\r\n \r\n
);\r\n }\r\n static DoesUserHasPermissions() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n if (application.applicantDetails.division == DivisionEnum.PDD\r\n && application.applicationStatus == ApplicationStatus.SUBMITTED) {\r\n User.isGrantAdministrator(DivisionEnum.PDD).then(isAdmin => {\r\n resolve(isAdmin);\r\n });\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=AssignSpecialistComponent.jsx.map","import { Component } from 'react';\r\nimport { SharePointRestService, User, Application, LogMessage, LogSeverityEnum, DivisionEnum, ApplicationStatus } from \"../index\";\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nexport class ReviewCommentsComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.commentsfolder = \"Comments\";\r\n this.state = {\r\n hideDialog: false,\r\n comment: \"\",\r\n allComments: new Array()\r\n };\r\n this.OnSaveClick = this.OnSaveClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n this.OnCommentTextChanged = this.OnCommentTextChanged.bind(this);\r\n this.readHandler = this.readHandler.bind(this);\r\n // Set current user and build the storage file name\r\n this.currentUser = this.props.currentUser;\r\n this.commentFileName = \"_Comments_\" + this.currentUser.id + \"_\" + this.currentUser.firstname + \"_\" + this.currentUser.lastname + \".txt\";\r\n // Read the latest comments from the file (if any)\r\n var serverRelativeUrlOfMyFile = window.location.protocol + '//' + window.location.host + window.docsetHomePageData.urlDocSet + \"/\" + this.commentsfolder + \"/\" + this.commentFileName;\r\n this.req = new XMLHttpRequest();\r\n this.req.onreadystatechange = this.readHandler;\r\n this.req.open(\"GET\", serverRelativeUrlOfMyFile, true);\r\n this.req.send();\r\n }\r\n componentDidMount() {\r\n let context = SP.ClientContext.get_current();\r\n //Retrieve the commments-folder and the list of files\r\n let serverRelativeUrlForComments = window.docsetHomePageData.urlDocSet + \"/\" + this.commentsfolder + \"/\";\r\n let commentsFolder = context.get_web().getFolderByServerRelativeUrl(serverRelativeUrlForComments);\r\n let commentsFiles = commentsFolder.get_files();\r\n //Request the folder and files from the SharePoint webservice\r\n context.load(commentsFolder);\r\n context.load(commentsFiles, \"Include(TimeLastModified, Author, ServerRelativeUrl)\");\r\n context.executeQueryAsync((sender, args) => {\r\n //This list will hold all promises for the file-retrieval. So for every file in the 'comments'-folder a Promise will be created\r\n let allFileRetrievalPromises = new Array();\r\n //Loop over all files in the comments-folder\r\n var fileEnumerator = commentsFiles.getEnumerator();\r\n while (fileEnumerator.moveNext()) {\r\n //Get some basic information regarding the file\r\n let file = fileEnumerator.get_current();\r\n let relativeUrl = file.get_serverRelativeUrl();\r\n let author = file.get_author().get_title();\r\n let lastModified = file.get_timeLastModified();\r\n //The WebService address for retrieving the file content (note the $value in the end)\r\n let fileBinaryRequest = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/GetFileByServerRelativeUrl('\" + relativeUrl + \"')/$value\";\r\n //Retrieve the file from SharePoint, and create a Promise for this\r\n let promiseForThisFile = new Promise((resolve, reject) => {\r\n SharePointRestService.fetchRaw(fileBinaryRequest, \"GET\").then(response => {\r\n response.text().then(fileContents => {\r\n //Success, we retrieve the filecontents from SharePoint\r\n resolve({ content: fileContents, url: relativeUrl, author: author, lastModified: lastModified });\r\n }).catch(reason => {\r\n //There was an error reading the file, the file exists but we could not read its content\r\n resolve({ content: \"-\", url: relativeUrl, author: author, lastModified: lastModified });\r\n });\r\n }).catch(reason => {\r\n //There was an error retrieving the file from SharePoint. The file exists we were unable to fetch it from SharePoint\r\n resolve({ content: \"-\", url: relativeUrl, author: author, lastModified: lastModified });\r\n });\r\n });\r\n allFileRetrievalPromises.push(promiseForThisFile); //Push the promise to the list of promises\r\n }\r\n //Wait for all promises to be resolved; so wait for all files to be retrieved\r\n Promise.all(allFileRetrievalPromises).then((responses) => {\r\n this.setState({\r\n allComments: responses\r\n });\r\n }).catch(reason => {\r\n });\r\n }, (sender, args) => {\r\n //Probably the 'Comments' folder does not exist yet, that means there are no comments yet\r\n //In this case we do nothing\r\n });\r\n }\r\n readHandler() {\r\n // Set textarea contents only if the file is read successfully\r\n if (this.req.readyState == 4 && this.req.status == 200) {\r\n this.setState({\r\n comment: this.req.responseText\r\n });\r\n }\r\n }\r\n OnSaveClick() {\r\n let comments = this.state.comment ? this.state.comment : \"\";\r\n this.saveComments(comments).then((file) => {\r\n this.setState({\r\n hideDialog: true\r\n });\r\n if (this.props.onConfirm)\r\n this.props.onConfirm();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }).catch(reason => {\r\n });\r\n }\r\n saveComments(comments) {\r\n // Load the document set item\r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n //let list = web.getList(ListNames.APPLICATIONS);\r\n let list = web.get_lists().getByTitle(\"Grant Applications\");\r\n let listItem = list.getItemById(this.props.application.id);\r\n // Initialize the new file and save it\r\n let fileCreateInfo = new SP.FileCreationInformation();\r\n fileCreateInfo.set_url(this.commentFileName);\r\n fileCreateInfo.set_content(new SP.Base64EncodedByteArray());\r\n fileCreateInfo.set_overwrite(true);\r\n for (var i = 0; i < comments.length; i++) {\r\n fileCreateInfo.get_content().append(comments.charCodeAt(i));\r\n }\r\n let folder = listItem.get_folder();\r\n return new Promise((resolve, reject) => {\r\n this.ensureCommentsFolder(folder).then(subfolder => {\r\n let newFile = subfolder.get_files().add(fileCreateInfo);\r\n clientContext.load(newFile);\r\n clientContext.executeQueryAsync((sender, args) => {\r\n this.setCommentsPermissions(newFile).then(() => {\r\n this.setCommentsFileMetadata(newFile).then(() => {\r\n resolve(newFile);\r\n }).catch(reason => {\r\n //Error setting file metadata\r\n LogMessage.Log(\"Error setting the metadata for the commentsfile '\" + newFile.get_name() + \"'\", this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n }).catch(reason => {\r\n //Error setting file permissions\r\n LogMessage.Log(\"Error setting the permissions for the commentsfile '\" + newFile.get_name() + \"'\", this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n }, (sender, args) => {\r\n //Error saving file\r\n LogMessage.Log(\"Error uploading the commentsfile '\" + this.commentFileName + \"'\", this, LogSeverityEnum.Error);\r\n reject(args.get_errorDetails());\r\n });\r\n }).catch(reason => {\r\n //Error creating subfolder for comments\r\n LogMessage.Log(\"Error creating folder for the commentsfile '\" + this.commentFileName + \"'\", this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n setCommentsFileMetadata(file) {\r\n let clientContext = SP.ClientContext.get_current();\r\n let listItem = file.get_listItemAllFields();\r\n listItem.set_item(\"natoSystemfile\", true);\r\n listItem.update();\r\n clientContext.load(listItem);\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve();\r\n }, (sender, args) => {\r\n reject();\r\n });\r\n });\r\n }\r\n setCommentsPermissions(file) {\r\n //Initialize all objects needed in order to set the permissions for this CommentsFile \r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n let item = file.get_listItemAllFields();\r\n let user = web.get_currentUser();\r\n let adminGroup = web.get_associatedOwnerGroup();\r\n //Break the role inheretance, clear all permissions, and than apply our new set of roles\r\n item.breakRoleInheritance(true, true);\r\n //Instruct the client context to load our objects in one batch\r\n clientContext.load(web);\r\n clientContext.load(item);\r\n clientContext.load(user);\r\n clientContext.load(adminGroup);\r\n return new Promise((resolve, reject) => {\r\n //Execute the ClientContext batch commands\r\n clientContext.executeQueryAsync((sender, args) => {\r\n //Grant the current user 'Edit' permissions to the CommentsFile\r\n let userRoles = new SP.RoleDefinitionBindingCollection(clientContext);\r\n userRoles.add(web.get_roleDefinitions().getByType(SP.RoleType.editor));\r\n item.get_roleAssignments().add(user, userRoles);\r\n //Grant the administrators 'Full Control' permissions to the CommentsFile\r\n let adminRoles = new SP.RoleDefinitionBindingCollection(clientContext);\r\n adminRoles.add(web.get_roleDefinitions().getByType(SP.RoleType.administrator));\r\n item.get_roleAssignments().add(adminGroup, adminRoles);\r\n item.update();\r\n let roleAssignments = item.get_roleAssignments();\r\n clientContext.load(roleAssignments, \"Include(Member, RoleDefinitionBindings)\");\r\n clientContext.load(item);\r\n clientContext.executeQueryAsync((sender, args) => {\r\n let permissionsDebug = {};\r\n for (let i = 0; i < roleAssignments.get_count(); i++) {\r\n let roleAssignment = roleAssignments.get_item(i);\r\n let username = roleAssignment.get_member().get_loginName();\r\n permissionsDebug[username] = new Array();\r\n let permissions = roleAssignment.get_roleDefinitionBindings();\r\n for (let j = 0; j < permissions.get_count(); j++) {\r\n permissionsDebug[username].push(permissions.get_item(j).get_name());\r\n }\r\n }\r\n //Give the other users 'Read'-permissions\r\n let permissionCount = roleAssignments.get_count();\r\n for (let i = 0; i < permissionCount; i++) {\r\n let assignment = roleAssignments.get_item(i);\r\n if (assignment.get_member().get_title() == user.get_title() || assignment.get_member().get_title() == adminGroup.get_title()) {\r\n //Skip, because we just set them....\r\n }\r\n else if (assignment.get_member().get_title().toLocaleLowerCase().indexOf(\"grant applicants\") >= 0) {\r\n //Remove permissions for Grant Applicants\r\n assignment.get_roleDefinitionBindings().removeAll();\r\n }\r\n else if (assignment.get_member().get_principalType() == SP.Utilities.PrincipalType.user) {\r\n //Remove permissions assigned to single users\r\n assignment.get_roleDefinitionBindings().removeAll();\r\n }\r\n else {\r\n //Set all other permissions to Read\r\n assignment.get_roleDefinitionBindings().removeAll();\r\n assignment.get_roleDefinitionBindings().add(web.get_roleDefinitions().getByType(SP.RoleType.reader));\r\n }\r\n assignment.update();\r\n }\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve(true);\r\n }, (sender, args) => {\r\n reject(args);\r\n LogMessage.Log(\"Error setting read-only permissions for comments-file '\" + user.get_title() + \"'\", this, LogSeverityEnum.Error);\r\n });\r\n }, (sender, args) => {\r\n reject(args);\r\n LogMessage.Log(\"Error setting edit permissions for current user on comments-file '\" + user.get_title() + \"'\", this, LogSeverityEnum.Error);\r\n });\r\n }, (sender, args) => {\r\n reject(args);\r\n LogMessage.Log(\"Error breaking permission inheritance on comments-file '\" + user.get_title() + \"'\", this, LogSeverityEnum.Error);\r\n });\r\n });\r\n }\r\n ensureCommentsFolder(parentFolder) {\r\n let subFolderName = \"Comments\";\r\n let clientContext = SP.ClientContext.get_current();\r\n let existingSubFolder = clientContext.get_web().getFolderByServerRelativeUrl(window.docsetHomePageData.urlDocSet + \"/\" + subFolderName);\r\n clientContext.load(parentFolder);\r\n clientContext.load(existingSubFolder);\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve(existingSubFolder);\r\n }, (sender, args) => {\r\n let newSubFolder = parentFolder.get_folders().add(subFolderName);\r\n let newSubFolderItem = newSubFolder.get_listItemAllFields();\r\n newSubFolderItem.set_item(\"natoSystemfile\", true);\r\n newSubFolderItem.update();\r\n clientContext.load(newSubFolder);\r\n clientContext.load(newSubFolderItem);\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve(newSubFolder);\r\n }, (sender, args) => {\r\n reject(args.get_errorDetails());\r\n });\r\n });\r\n });\r\n }\r\n OnCancelClick() {\r\n this.setState({\r\n hideDialog: true\r\n });\r\n if (this.props.onCancel)\r\n this.props.onCancel();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n OnCommentTextChanged(newValue) {\r\n this.setState({\r\n comment: newValue\r\n });\r\n }\r\n render() {\r\n //Create the section to display the other comments\r\n let otherComments = this.state.allComments\r\n .filter(c => !c.url.endsWith(this.commentFileName)) //Filter the comments by the current user (if any)\r\n .sort((a, b) => { if (a < b)\r\n return -1; if (a > b)\r\n return 1; return 0; }) //Sort newest on top\r\n .map((comment, index) => {\r\n return (
\r\n {comment.author} {comment.lastModified.format(\"dd/MM/yyyy HH:mm\")}:
\r\n {comment.content}\r\n
);\r\n });\r\n return (
\r\n \r\n
);\r\n }\r\n static DoesUserHasPermissions() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n if ((application.applicantDetails.division == DivisionEnum.ESC || application.applicantDetails.division == DivisionEnum.PDD)\r\n && (application.applicationStatus == ApplicationStatus.SUBMITTED || application.applicationStatus == ApplicationStatus.UNDER_REVIEW)) {\r\n User.getCurrentUser().then(user => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC) {\r\n if (application.isUserSeniorAdvisor(user)\r\n || application.isUserAdvisor(user)) {\r\n resolve(true);\r\n }\r\n else {\r\n User.isMemberOfGroup([\"NAS Administrators\", \"ESC Grant Administrators\", \"ESC ISEG Members\"]).then(isMember => {\r\n resolve(isMember);\r\n });\r\n }\r\n }\r\n else if (application.applicantDetails.division == DivisionEnum.PDD) {\r\n User.isMemberOfGroup([\"NAS Administrators\", \"PDD Grant Administrators\", \"PDD Budget Officers\"]).then(isMember => {\r\n resolve(isMember);\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=ReviewCommentsComponent.jsx.map","import { Component } from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { SharePointRestService, Application, User, ConfirmDialogComponent, LogMessage, LogSeverityEnum, DivisionEnum, ApplicationStatus, WorkflowManager } from \"../index\";\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { ChoiceGroup } from 'office-ui-fabric-react/lib/ChoiceGroup';\r\nexport class ReviewEvaluationsComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.onChangeChoice = (fieldName, option) => {\r\n let newFormValues = this.state.formValues;\r\n if (!newFormValues[fieldName]) {\r\n newFormValues[fieldName] = { choicesValue: \"\" };\r\n }\r\n newFormValues[fieldName].choicesValue = option.key;\r\n this.setState({\r\n formValues: newFormValues\r\n }, () => { if (this._formData[fieldName].choicesRequired) {\r\n this.validateForm();\r\n } });\r\n };\r\n this.onChangeComments = (fieldName, newValue) => {\r\n let newFormValues = this.state.formValues;\r\n if (!newFormValues[fieldName]) {\r\n newFormValues[fieldName] = { commentsText: \"\" };\r\n }\r\n newFormValues[fieldName].commentsText = newValue;\r\n this.setState({\r\n formValues: newFormValues\r\n }, () => { if (this._formData[fieldName].commentsRequired) {\r\n this.validateForm();\r\n } });\r\n };\r\n //Select form data based on project type\r\n this._dialogTitle = \"Evaluation form\";\r\n this._formData = {};\r\n if (this.props.application && this.props.application.projectDetails) {\r\n if (this.props.application.projectDetails.projectType == \"Multi-Year Project (MYP)\") {\r\n this._dialogTitle = \"Evaluation form for Multi-Year Projects (ISEG Review)\";\r\n this._formData = ReviewEvaluationsComponent.formMYP;\r\n }\r\n else {\r\n this._dialogTitle = \"Evaluation form for Events (ISEG Review)\";\r\n this._formData = ReviewEvaluationsComponent.formEvents;\r\n }\r\n }\r\n this.state = {\r\n hideDialog: false,\r\n evaluation: \"\",\r\n formValues: {},\r\n status: \"Draft\",\r\n submitAllowed: false,\r\n projectNumber: \"\"\r\n };\r\n this.onSaveClick = this.onSaveClick.bind(this);\r\n this.onSubmitClick = this.onSubmitClick.bind(this);\r\n this.onCancelClick = this.onCancelClick.bind(this);\r\n this.validateForm = this.validateForm.bind(this);\r\n this.readHandler = this.readHandler.bind(this);\r\n // Set current user and build the storage file name\r\n this._currentUser = this.props.currentUser;\r\n this._evaluationFileName = (\"_Evaluation_\" + this._currentUser.id + \"_\" + this._currentUser.firstname + \"_\" + this._currentUser.lastname).replace(/\\W/g, '') + \".txt\";\r\n // Read the latest evaluation from the file (if any)\r\n var serverRelativeUrlOfMyFile = window.location.protocol + '//' + window.location.host + window.docsetHomePageData.urlDocSet + \"/Evaluations/\" + this._evaluationFileName;\r\n this._req = new XMLHttpRequest();\r\n this._req.onreadystatechange = this.readHandler;\r\n this._req.open(\"GET\", serverRelativeUrlOfMyFile, true);\r\n this._req.send();\r\n // Read project number\r\n this.props.application.projectNumber.then(projectNumber => {\r\n this.setState({\r\n projectNumber: projectNumber\r\n });\r\n });\r\n }\r\n readHandler() {\r\n // Set evaluation contents only if the file is read successfully\r\n if (this._req.readyState == 4 && this._req.status == 200) {\r\n //console.log(\"File: \" + this._req.responseText);\r\n let evaluationObj = JSON.parse(this._req.responseText);\r\n var flatArrayForParsing;\r\n if (evaluationObj && evaluationObj.status && (evaluationObj.status == \"Draft\" || evaluationObj.status == \"Submitted\")) {\r\n this.setState({\r\n status: evaluationObj.status\r\n });\r\n }\r\n if (evaluationObj && evaluationObj.evaluation) {\r\n flatArrayForParsing = evaluationObj.evaluation;\r\n }\r\n if (!flatArrayForParsing) {\r\n this.setState({\r\n formValues: {}\r\n });\r\n }\r\n else {\r\n let newFormValues = {};\r\n flatArrayForParsing.forEach(item => {\r\n newFormValues[item.itemKey] = {\r\n choicesValue: item.choicesValue,\r\n commentsText: item.commentsText\r\n };\r\n });\r\n this.setState({\r\n formValues: newFormValues\r\n });\r\n }\r\n // Initialize the Submit button state\r\n this.validateForm();\r\n }\r\n }\r\n onSubmitClick() {\r\n // Confirm the Submit action with a dialog\r\n let spContentRow = document.getElementById('contentRow');\r\n let dialogContainer = document.createElement('DIV');\r\n dialogContainer.id = 'natoDialogContainer';\r\n spContentRow.insertAdjacentHTML('beforeend', dialogContainer.outerHTML);\r\n ReactDOM.render( { this.setState({ status: \"Submitted\" }, () => { this.onSaveClick(); }); }} onCancel={() => { }} onClose={() => { spContentRow.removeChild(document.getElementById('natoDialogContainer')); }}/>, document.getElementById('natoDialogContainer'));\r\n }\r\n onSaveClick() {\r\n // Reformat the evaluation data for saving\r\n let flatArrayForSaving = Object.keys(this.state.formValues).map(itemKey => {\r\n return {\r\n itemKey: itemKey,\r\n choicesValue: this.state.formValues[itemKey].choicesValue,\r\n commentsText: this.state.formValues[itemKey].commentsText\r\n };\r\n });\r\n let evaluationObj = {\r\n status: this.state.status,\r\n evaluation: flatArrayForSaving\r\n };\r\n let evaluationJSON = JSON.stringify(evaluationObj);\r\n this.saveEvaluation(evaluationJSON).then((file) => {\r\n //Send a notification when a user submits a review/evaluation\r\n //The user can also save his/her review as a draft, in that case, we don't send an notification (yet)\r\n let sendNotificationPromise = Promise.resolve();\r\n if (this.state.status.toLocaleLowerCase() == \"Submitted\".toLocaleLowerCase()) {\r\n sendNotificationPromise = (new WorkflowManager()).StartWorklow(\"Grant Applications\", this.props.application.id, \"Notification\", { \"Type\": \"Reviewed\" }, true);\r\n }\r\n sendNotificationPromise.then(() => {\r\n this.setState({\r\n hideDialog: true\r\n });\r\n if (this.props.onConfirm)\r\n this.props.onConfirm();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n });\r\n }).catch(reason => {\r\n });\r\n }\r\n saveEvaluation(evaluation) {\r\n // Load the document set item\r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n let list = web.get_lists().getByTitle(\"Grant Applications\");\r\n let listItem = list.getItemById(this.props.application.id);\r\n // Initialize the new file and save it\r\n let fileCreateInfo = new SP.FileCreationInformation();\r\n fileCreateInfo.set_url(this._evaluationFileName);\r\n fileCreateInfo.set_content(new SP.Base64EncodedByteArray());\r\n fileCreateInfo.set_overwrite(true);\r\n for (var i = 0; i < evaluation.length; i++) {\r\n fileCreateInfo.get_content().append(evaluation.charCodeAt(i));\r\n }\r\n let folder = listItem.get_folder();\r\n return new Promise((resolve, reject) => {\r\n this.ensureEvaluationsFolder(folder).then(subfolder => {\r\n let newFile = subfolder.get_files().add(fileCreateInfo);\r\n clientContext.load(newFile);\r\n clientContext.executeQueryAsync((sender, args) => {\r\n this.setEvaluationFilePermissions(newFile).then(() => {\r\n this.setEvaluationFileMetadata(newFile).then(() => {\r\n resolve(newFile);\r\n }).catch(reason => {\r\n //Error setting file metadata\r\n LogMessage.Log(\"Error setting the metadata for the evaluation file '\" + newFile.get_name() + \"'\", this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n }).catch(reason => {\r\n //Error setting file permissions\r\n LogMessage.Log(\"Error setting the permissions for the evaluation file '\" + newFile.get_name() + \"'\", this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n }, (sender, args) => {\r\n //Error saving file\r\n LogMessage.Log(\"Error uploading the evaluation file '\" + this._evaluationFileName + \"'\", this, LogSeverityEnum.Error);\r\n reject(args.get_errorDetails());\r\n });\r\n }).catch(reason => {\r\n //Error creating subfolder for evaluations\r\n LogMessage.Log(\"Error creating folder for the evaluation file '\" + this._evaluationFileName + \"'\", this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n });\r\n }\r\n getAverageRatingForCurrentEvaluation() {\r\n if (this.state.status == \"Draft\") {\r\n return -1;\r\n }\r\n else {\r\n let allNumericValues = new Array();\r\n Object.keys(this.state.formValues).forEach(itemKey => {\r\n if (this._formData[itemKey].choicesAverage) {\r\n let formValue = this.state.formValues[itemKey];\r\n let choiceValueStr = \"\" + formValue.choicesValue;\r\n try {\r\n let choiceValue = Number.parseFloat(choiceValueStr);\r\n allNumericValues.push(choiceValue);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n });\r\n if (allNumericValues.length == 0) {\r\n return -1;\r\n }\r\n else {\r\n return allNumericValues.reduce((p, c) => p + c, 0) / allNumericValues.length;\r\n }\r\n }\r\n }\r\n setEvaluationFileMetadata(file) {\r\n let averageRating = this.getAverageRatingForCurrentEvaluation();\r\n let clientContext = SP.ClientContext.get_current();\r\n let listItem = file.get_listItemAllFields();\r\n listItem.set_item(\"natoSystemfile\", true);\r\n listItem.set_item(\"natoAverageRating\", averageRating);\r\n listItem.update();\r\n clientContext.load(listItem);\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve();\r\n }, (sender, args) => {\r\n reject();\r\n });\r\n });\r\n }\r\n setEvaluationFilePermissions(file) {\r\n //Initialize all objects needed in order to set the permissions for this Evaluation File \r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n let item = file.get_listItemAllFields();\r\n let user = web.get_currentUser();\r\n let adminGroup = web.get_associatedOwnerGroup();\r\n //Grant the current user 'Contribute' permissions to the Evaluation File\r\n let userRoles = new SP.RoleDefinitionBindingCollection(clientContext);\r\n userRoles.add(web.get_roleDefinitions().getByType(SP.RoleType.contributor));\r\n //Grant the administrators 'Full Control' permissions to the EvaluationsFile\r\n let adminRoles = new SP.RoleDefinitionBindingCollection(clientContext);\r\n adminRoles.add(web.get_roleDefinitions().getByType(SP.RoleType.administrator));\r\n //Break the role inheretance, clear all permissions, and than apply our new set of roles\r\n item.breakRoleInheritance(false, true);\r\n item.get_roleAssignments().add(user, userRoles);\r\n item.get_roleAssignments().add(adminGroup, adminRoles);\r\n //Instruct the client context to load our objects in one batch\r\n clientContext.load(web);\r\n clientContext.load(item);\r\n clientContext.load(user);\r\n clientContext.load(adminGroup);\r\n return new Promise((resolve, reject) => {\r\n //Execute the ClientContext batch commands\r\n clientContext.executeQueryAsync((sender, args) => {\r\n //Retrieve all Advisor groups from the SiteCollection\r\n let retrieveAdvisorsUrl = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/sitegroups?$filter=substringof('Advisors',Title)&$select=Id\";\r\n SharePointRestService.fetch(retrieveAdvisorsUrl)\r\n .then(response => {\r\n response.json().then(odata => {\r\n if (odata && odata.value && odata.value.length > 0) {\r\n //Get all GroupIds for Advisors groups\r\n let groupIds = odata.value.map(grp => Number(grp.Id));\r\n groupIds.forEach(groupId => {\r\n //Grant the advisors 'Read' permissions to the EvaluationsFile\r\n let group = web.get_siteGroups().getById(groupId);\r\n let advisorRoles = new SP.RoleDefinitionBindingCollection(clientContext);\r\n advisorRoles.add(web.get_roleDefinitions().getByType(SP.RoleType.reader));\r\n item.get_roleAssignments().add(group, advisorRoles);\r\n });\r\n clientContext.load(item);\r\n //Execute the ClientContext batch commands\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve(true);\r\n }, (sender, args) => {\r\n reject(args);\r\n });\r\n }\r\n else {\r\n //No additional advisors to add\r\n resolve(true);\r\n }\r\n });\r\n })\r\n .catch(reason => {\r\n LogMessage.Log(\"Unable to retrieve the (Senior) advisor groups: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n }, (sender, args) => {\r\n reject(args);\r\n });\r\n });\r\n }\r\n ensureEvaluationsFolder(parentFolder) {\r\n let subFolderName = \"Evaluations\";\r\n let clientContext = SP.ClientContext.get_current();\r\n let existingSubFolder = clientContext.get_web().getFolderByServerRelativeUrl(window.docsetHomePageData.urlDocSet + \"/\" + subFolderName);\r\n clientContext.load(parentFolder);\r\n clientContext.load(existingSubFolder);\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve(existingSubFolder);\r\n }, (sender, args) => {\r\n let newSubFolder = parentFolder.get_folders().add(subFolderName);\r\n let newSubFolderItem = newSubFolder.get_listItemAllFields();\r\n newSubFolderItem.set_item(\"natoSystemfile\", true);\r\n newSubFolderItem.update();\r\n clientContext.load(newSubFolder);\r\n clientContext.load(newSubFolderItem);\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve(newSubFolder);\r\n }, (sender, args) => {\r\n reject(args.get_errorDetails());\r\n });\r\n });\r\n });\r\n }\r\n onCancelClick() {\r\n this.setState({\r\n hideDialog: true\r\n });\r\n if (this.props.onCancel)\r\n this.props.onCancel();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n validateForm() {\r\n // Enable the Submit button only when all required fields are filled\r\n let formValid = true;\r\n for (let fieldName in this._formData) {\r\n if ((this._formData[fieldName].choicesRequired && (!this.state.formValues[fieldName] || !this.state.formValues[fieldName].choicesValue))\r\n || (this._formData[fieldName].commentsRequired && (!this.state.formValues[fieldName] || !this.state.formValues[fieldName].commentsText || this.state.formValues[fieldName].commentsText.trim() == \"\"))) {\r\n formValid = false;\r\n break;\r\n }\r\n }\r\n if (this.state.submitAllowed != formValid) {\r\n this.setState({\r\n submitAllowed: formValid\r\n });\r\n }\r\n }\r\n get keyPriorityAsText() {\r\n let retElement =
No Key Priorities have been set
;\r\n if (this.props.application && this.props.application.encodedKeyPriorities && this.props.application.encodedKeyPriorities.trim().length > 0) {\r\n try {\r\n let selectedKeyPriorities = JSON.parse(this.props.application.encodedKeyPriorities);\r\n let grouped = {};\r\n selectedKeyPriorities.forEach(kp => {\r\n let level2 = kp._level2;\r\n if (!grouped[level2]) {\r\n grouped[level2] = new Array();\r\n }\r\n grouped[level2].push(kp);\r\n });\r\n retElement = (

\r\n\t\t\t\t\tThe following Key Priorities were identied by the Senior Advisor and/or Grant Administrator:\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t{Object.keys(grouped).sort((a, b) => a.localeCompare(b)).map(level2 => {\r\n return (
  • \r\n\t\t\t\t\t\t\t\t{level2}\r\n\t\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t\t\t{grouped[level2].sort((a, b) => a._description.localeCompare(b._description)).map(keyPriority => {\r\n return (
    • {keyPriority._description.replace(/(<([^>]+)>)/ig, \"\")}
    • );\r\n })}\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
  • );\r\n })}\r\n\t\t\t\t
);\r\n }\r\n catch (_a) {\r\n retElement =
There was an error retrieving the Key Priorities
;\r\n }\r\n }\r\n return retElement;\r\n }\r\n render() {\r\n let dynamicFields = (Object.keys(this._formData).map((fieldName, index) => {\r\n let choicesValue = this.state.formValues && this.state.formValues[fieldName] && this.state.formValues[fieldName].choicesValue ? this.state.formValues[fieldName].choicesValue : \"\";\r\n let commentsText = this.state.formValues && this.state.formValues[fieldName] && this.state.formValues[fieldName].commentsText ? this.state.formValues[fieldName].commentsText : \"\";\r\n let sectionTag = (this._formData[fieldName].sectionTitle != \"\" &&\r\n
\r\n
\r\n
\r\n

{this._formData[fieldName].sectionTitle}

\r\n
);\r\n let choicesTag = (this._formData[fieldName].choicesAllowed &&\r\n
\r\n {this._formData[fieldName].choicesTitle}\r\n {this._formData[fieldName].choicesRequired && {\" *\"}}\r\n { this.onChangeChoice(fieldName, option); }} label={\"\"} required={false} key={\"cg\" + index} disabled={this.state.status != \"Draft\"}/>\r\n
);\r\n let commentsTag = (this._formData[fieldName].commentsAllowed &&\r\n
\r\n {this._formData[fieldName].commentsTitle}\r\n {this._formData[fieldName].commentsRequired && {\" *\"}}\r\n { this.onChangeComments(fieldName, newValue); }} label={\"\"} multiline rows={4} required={false} disabled={this.state.status != \"Draft\"}/>\r\n\t\t\t\t\t
);\r\n let keyPriorities = (this._formData[fieldName].sectionTitle == \"SPS Key Priorities\" && this.keyPriorityAsText);\r\n return (
\r\n\t\t\t\t\t\t{sectionTag}\r\n
\r\n {choicesTag}\r\n\t\t\t\t\t\t{commentsTag}\r\n\t\t\t\t\t\t{keyPriorities}\r\n
);\r\n }));\r\n return (
\r\n \r\n
);\r\n }\r\n static DoesUserHasPermissions() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC\r\n && application.applicationStatus == ApplicationStatus.UNDER_REVIEW) {\r\n User.getCurrentUser().then(user => {\r\n resolve(application.isUserReviewer(user));\r\n });\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n// Evaluation items for all applications that are not a Multi Year Project\r\nReviewEvaluationsComponent.formEvents = {\r\n \"Event_SPS_Key_Priorities\": {\r\n sectionTitle: \"SPS Key Priorities\",\r\n choicesAllowed: false,\r\n commentsAllowed: true,\r\n commentsRequired: true,\r\n commentsTitle: \"Which SPS Key Priorities, if any, are actually addressed by this event? This is often but not always those identified by the proposers. How relevant is the proposal to these priorities?\"\r\n },\r\n \"Event_Topic_Important\": {\r\n sectionTitle: \"Topic and Programme\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Is the proposed topic important and relevant to NATO?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - unimportant / irrelevant\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3 - extremely important\" }\r\n ],\r\n commentsAllowed: false\r\n },\r\n \"Event_Topic_Impact\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Is this event likely to have an impact? Will that impact extend beyond the direct participants?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - no impact\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3 - strong impact beyond participants\" }\r\n ],\r\n commentsAllowed: false\r\n },\r\n \"Event_Topic_Title\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesTitle: \"Is the title appropriate and comprehensible to the non - specialist?\",\r\n choicesOptions: [\r\n { key: \"Yes\", text: \"Yes\" },\r\n { key: \"No\", text: \"No\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsTitle: \"comments\"\r\n },\r\n \"Event_Topic_Overlap\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesTitle: \"Does the event overlap or duplicate other events on similar topics?\",\r\n choicesOptions: [\r\n { key: \"Yes\", text: \"Yes\" },\r\n { key: \"No\", text: \"No\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsTitle: \"comments\"\r\n },\r\n \"Event_Topic_Programme\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Is the programme focused and appropriate for the topic?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - inappropriate\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3 - highly focused\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsTitle: \"comments; how could the programme be further improved?\"\r\n },\r\n \"Event_Attendees_Speakers\": {\r\n sectionTitle: \"Attendees\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Are the speakers strong and appropriate?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - poor\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3 - excellent\" }\r\n ],\r\n commentsAllowed: false\r\n },\r\n \"Event_Attendees_Audience\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Is the target audience the right one? (particularly for ATC and ASI)\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - inappropriate\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3 - just right\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsTitle: \"comments; additional speakers to suggest? speakers who should be removed? who else might benefit from attending? are there other nations / partners who should be included?\"\r\n },\r\n \"Event_Organisation_Organized\": {\r\n sectionTitle: \"Organisation\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Does the event appear to be well organized?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - a mess\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3 - very good organisation\" }\r\n ],\r\n commentsAllowed: false\r\n },\r\n \"Event_Organisation_Budget\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Is the event budget realistic?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - not at all\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3 - entirely\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsTitle: \"comments\"\r\n },\r\n \"Event_Overall_Evaluation\": {\r\n sectionTitle: \"Overall Evaluation\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesRequired: true,\r\n choicesTitle: \"What is your overall evaluation?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - poor\" },\r\n { key: \"1\", text: \"1 - fair\" },\r\n { key: \"2\", text: \"2 - good\" },\r\n { key: \"3\", text: \"3 - very good\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsRequired: true,\r\n commentsTitle: \"comments\"\r\n }\r\n};\r\n// Evaluation items for all applications that are a Multi Year Project\r\nReviewEvaluationsComponent.formMYP = {\r\n \"MYP_Impact_Important\": {\r\n sectionTitle: \"Impact - Scientific/Technical\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"How important is the scientific or technical problem addressed?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - unimportant\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - extremely important\" }\r\n ],\r\n commentsAllowed: false\r\n },\r\n \"MYP_Impact_Creative\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"How creative, original, or transformative is this project? Will the project advance the state of knowledge in its field and/or others?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - entirely duplicative\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - extremely novel and creative\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsTitle: \"comments\"\r\n },\r\n \"MYP_Impact_Sustainable\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Are you aware of any similar work that this project might overlap or duplicate? Is this project’s innovation sustainable; does it lend itself to follow-on work or applications?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - not sustainable\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - certain to be deployed\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsTitle: \"comments\"\r\n },\r\n \"MYP_Impact_Defence\": {\r\n sectionTitle: \"Impact - Defence and Security\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Does the project address an important defence or security issue?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - unimportant\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - extremely important\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsTitle: \"comments\"\r\n },\r\n \"MYP_Impact_Diplomacy\": {\r\n sectionTitle: \"Impact - Public Diplomacy\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Will the project provide a platform for public diplomacy for NATO?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - no visibility\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - extremely visible\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsTitle: \"comments\"\r\n },\r\n \"MYP_Impact_Young\": {\r\n sectionTitle: \"Impact - Young Scientists\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Does the project provide adequate & appropriate opportunities for the involvement and training of young scientists?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - no opportunities\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - strong and appropriate training focus\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsTitle: \"comments\"\r\n },\r\n \"MYP_Success_Experience\": {\r\n sectionTitle: \"Project Success\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Do the proposers have adequate experience, training, and infrastructure to carry out the project?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - no experience\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - highly qualified\" }\r\n ],\r\n commentsAllowed: false\r\n },\r\n \"MYP_Success_Users\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Are the proposed End-Users appropriate? How deep is their commitment to the project and its results?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - inappropriate or indifferent\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - appropriate and strongly committed\" }\r\n ],\r\n commentsAllowed: false\r\n },\r\n \"MYP_Success_Sufficient\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Is the work proposed appropriate and sufficient to achieve the goals of the project?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - totally insufficient\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - highly appropriate\" }\r\n ],\r\n commentsAllowed: false\r\n },\r\n \"MYP_Success_Schedule\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Is the schedule realistic?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - totally unrealistic\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - very\" }\r\n ],\r\n commentsAllowed: false\r\n },\r\n \"MYP_Success_Budget\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Is the budget, including any non-SPS funds, realistic and appropriate to the work proposed?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - totally insufficient\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - realistic and appropriate\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsTitle: \"comments: how could the these factors be improved?\"\r\n },\r\n \"MYP_Risks\": {\r\n sectionTitle: \"Risks\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Are risks, technical, programmatic, and/or political, clearly identified? Are any important risks overlooked? Are appropriate strategies for mitigating these risks clearly identified?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - major risks overlooked\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - all significant risks accounted for with credible mitigation strategies\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsTitle: \"comments: what additional risks should be taken into account, what additional mitigation measures are required?\"\r\n },\r\n \"MYP_Criteria_Clear\": {\r\n sectionTitle: \"Evaluation Criteria\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"Are the project criteria for success clear and appropriate to the project objectives?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - unclear or unrelated to project goals\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - very clear and tightly linked to project goals\" }\r\n ],\r\n commentsAllowed: false\r\n },\r\n \"MYP_Criteria_Quantitative\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesTitle: \"To what extent can the criteria for success be evaluated quantitatively?\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - no meaningful quantitative evaluation\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - all criteria qualified and measurable\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsTitle: \"comments: how could they be improved and made more quantitative?\"\r\n },\r\n \"MYP_Overall_Evaluation\": {\r\n sectionTitle: \"Overall Evaluation\",\r\n choicesAllowed: true,\r\n choicesAverage: true,\r\n choicesRequired: true,\r\n choicesTitle: \"\",\r\n choicesOptions: [\r\n { key: \"0\", text: \"0 - poor\" },\r\n { key: \"1\", text: \"1\" },\r\n { key: \"2\", text: \"2\" },\r\n { key: \"3\", text: \"3\" },\r\n { key: \"4\", text: \"4\" },\r\n { key: \"5\", text: \"5 - excellent\" }\r\n ],\r\n commentsAllowed: true,\r\n commentsRequired: true,\r\n commentsTitle: \"comments\"\r\n },\r\n \"MYP_Project_Evaluator\": {\r\n sectionTitle: \"\",\r\n choicesAllowed: true,\r\n choicesTitle: \"Would you consider being a Project Evaluator for this project? This involves monitoring project progress, reviewing reports, site visits as required, and an assessment at the end of the project.\",\r\n choicesOptions: [\r\n { key: \"Yes\", text: \"Yes\" },\r\n { key: \"No\", text: \"No\" }\r\n ],\r\n commentsAllowed: false\r\n }\r\n};\r\n//# sourceMappingURL=ReviewEvaluationsComponent.jsx.map","import { Component } from 'react';\r\nimport { SharePointRestService, ReviewEvaluationsComponent, Application, User, DivisionEnum, ApplicationStatus } from \"../index\";\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nexport class ReviewSummaryComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this._formData = {};\r\n this.evaluationsFolder = \"Evaluations\";\r\n this.state = {\r\n hideDialog: false,\r\n formData: {},\r\n hideDetails: true\r\n };\r\n this.OnDetailsClick = this.OnDetailsClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n }\r\n componentDidMount() {\r\n //Select form data based on project type\r\n this._dialogTitle = \"Evaluation form\";\r\n this._formData = {};\r\n if (this.props.application && this.props.application.projectDetails) {\r\n if (this.props.application.projectDetails.projectType == \"Multi-Year Project (MYP)\") {\r\n this._dialogTitle = \"Evaluation summary for Multi-Year Projects (ISEG Review)\";\r\n this._formData = ReviewEvaluationsComponent.formMYP;\r\n }\r\n else {\r\n this._dialogTitle = \"Evaluation summary for Events (ISEG Review)\";\r\n this._formData = ReviewEvaluationsComponent.formEvents;\r\n }\r\n Object.keys(this._formData).forEach(key => {\r\n this._formData[key].choicesData = {};\r\n this._formData[key].choicesAverageCount = 0;\r\n this._formData[key].choicesAverageSum = 0;\r\n this._formData[key].commentsData = new Array();\r\n });\r\n }\r\n let context = SP.ClientContext.get_current();\r\n //Retrieve the evaluations folder and the list of files\r\n let serverRelativeUrlForEvaluations = window.docsetHomePageData.urlDocSet + \"/\" + this.evaluationsFolder + \"/\";\r\n let evaluationsFolder = context.get_web().getFolderByServerRelativeUrl(serverRelativeUrlForEvaluations);\r\n let evaluationsFiles = evaluationsFolder.get_files();\r\n //Request the folder and files from the SharePoint webservice\r\n context.load(evaluationsFolder);\r\n context.load(evaluationsFiles, \"Include(TimeLastModified, Author, ServerRelativeUrl)\");\r\n context.executeQueryAsync((sender, args) => {\r\n //This list will hold all promises for the file-retrieval. So for every file in the evaluations folder a Promise will be created\r\n let allFileRetrievalPromises = new Array();\r\n //Loop over all files in the evaluations folder\r\n var fileEnumerator = evaluationsFiles.getEnumerator();\r\n while (fileEnumerator.moveNext()) {\r\n //Get some basic information regarding the file\r\n let file = fileEnumerator.get_current();\r\n let relativeUrl = file.get_serverRelativeUrl();\r\n let author = file.get_author().get_title();\r\n let lastModified = file.get_timeLastModified();\r\n //The WebService address for retrieving the file content (note the $value in the end)\r\n let fileBinaryRequest = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/GetFileByServerRelativeUrl('\" + relativeUrl + \"')/$value\";\r\n //Retrieve the file from SharePoint, and create a Promise for this\r\n let promiseForThisFile = new Promise((resolve, reject) => {\r\n SharePointRestService.fetchRaw(fileBinaryRequest, \"GET\").then(response => {\r\n response.text().then(fileContents => {\r\n //Success, we retrieve the filecontents from SharePoint\r\n resolve({ content: fileContents, url: relativeUrl, author: author, lastModified: lastModified });\r\n }).catch(reason => {\r\n //There was an error reading the file, the file exists but we could not read its content\r\n resolve({ content: \"-\", url: relativeUrl, author: author, lastModified: lastModified });\r\n });\r\n }).catch(reason => {\r\n //There was an error retrieving the file from SharePoint. The file exists we were unable to fetch it from SharePoint\r\n resolve({ content: \"-\", url: relativeUrl, author: author, lastModified: lastModified });\r\n });\r\n });\r\n //Push the promise to the list of promises\r\n allFileRetrievalPromises.push(promiseForThisFile);\r\n }\r\n //Wait for all promises to be resolved; so wait for all files to be retrieved\r\n Promise.all(allFileRetrievalPromises).then((responses) => {\r\n // Parse evaluations data\r\n responses.forEach(item => {\r\n let evaluationObj = JSON.parse(item.content);\r\n // Process only submitted evaluations\r\n if (evaluationObj && evaluationObj.status == \"Submitted\") {\r\n evaluationObj.evaluation.forEach(evalItem => {\r\n let currentData = this._formData[evalItem.itemKey];\r\n // Item has choices value\r\n if (evalItem.choicesValue) {\r\n if (currentData.choicesAverageCount) {\r\n currentData.choicesAverageCount++;\r\n currentData.choicesAverageSum += Number(evalItem.choicesValue);\r\n }\r\n else {\r\n currentData.choicesAverageCount = 1;\r\n currentData.choicesAverageSum = Number(evalItem.choicesValue);\r\n }\r\n if (currentData.choicesData) {\r\n if (currentData.choicesData[evalItem.choicesValue]) {\r\n let tmp = currentData.choicesData[evalItem.choicesValue];\r\n tmp += \", \" + item.author;\r\n currentData.choicesData[evalItem.choicesValue] = tmp;\r\n }\r\n else {\r\n currentData.choicesData[evalItem.choicesValue] = item.author;\r\n }\r\n }\r\n else {\r\n currentData.choicesData = {};\r\n currentData.choicesData[evalItem.choicesValue] = item.author;\r\n }\r\n }\r\n // Item has comments\r\n if (evalItem.commentsText) {\r\n if (!currentData.commentsData) {\r\n currentData.commentsData = new Array();\r\n }\r\n currentData.commentsData.push({ reviewer: item.author, commentsText: evalItem.commentsText, lastModified: item.lastModified });\r\n }\r\n this._formData[evalItem.itemKey] = currentData;\r\n });\r\n }\r\n });\r\n this.setState({\r\n formData: this._formData\r\n });\r\n }).catch(reason => {\r\n });\r\n }, (sender, args) => {\r\n //Probably the 'Evaluations' folder does not exist yet, that means there are no evaluations yet\r\n //In this case we do nothing\r\n });\r\n }\r\n OnDetailsClick() {\r\n this.setState({\r\n hideDetails: !this.state.hideDetails\r\n });\r\n }\r\n OnCancelClick() {\r\n this.setState({\r\n hideDialog: true\r\n });\r\n if (this.props.onCancel)\r\n this.props.onCancel();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n render() {\r\n let dynamicFields = (Object.keys(this._formData).map((fieldName, index) => {\r\n // Section header\r\n let sectionTag = (this._formData[fieldName].sectionTitle != \"\" &&\r\n
\r\n
\r\n
\r\n

{this._formData[fieldName].sectionTitle}

\r\n
);\r\n // Choices\r\n let choicesOptions = (this._formData[fieldName].choicesAllowed &&\r\n Object.keys(this._formData[fieldName].choicesOptions).map((optionKey) => {\r\n return (\r\n {this._formData[fieldName].choicesOptions[optionKey].text}\r\n {(this._formData[fieldName].choicesData && this._formData[fieldName].choicesData[this._formData[fieldName].choicesOptions[optionKey].key]) ? this._formData[fieldName].choicesData[this._formData[fieldName].choicesOptions[optionKey].key] : \"\"}\r\n );\r\n }));\r\n let choicesTag = (this._formData[fieldName].choicesAllowed &&\r\n
\r\n {this._formData[fieldName].choicesTitle}\r\n {this._formData[fieldName].choicesRequired && {\" *\"}}\r\n
\r\n {this._formData[fieldName].choicesAverage\r\n && this._formData[fieldName].choicesAverageCount\r\n && this._formData[fieldName].choicesAverageCount > 0\r\n && Average rating: {(this._formData[fieldName].choicesAverageSum / this._formData[fieldName].choicesAverageCount).toFixed(1)}
}\r\n \r\n \r\n {choicesOptions}\r\n \r\n \r\n
);\r\n // Comments\r\n let commentsList = (this._formData[fieldName].commentsAllowed &&\r\n this._formData[fieldName].commentsData &&\r\n Object.keys(this._formData[fieldName].commentsData).map((key) => {\r\n return (
\r\n {this._formData[fieldName].commentsData[key].reviewer} \r\n {this._formData[fieldName].commentsData[key].lastModified.format(\"dd/MM/yyyy HH:mm\")}:\r\n {this._formData[fieldName].commentsData[key].commentsText.split('\\n').map(function (itemCT, keyCT) {\r\n return (\r\n
\r\n {itemCT}\r\n
);\r\n })}\r\n
);\r\n }));\r\n let commentsTag = (this._formData[fieldName].commentsAllowed &&\r\n (!this.state.hideDetails || !this._formData[fieldName].choicesAllowed) &&\r\n
\r\n {this._formData[fieldName].commentsTitle}\r\n {this._formData[fieldName].commentsRequired && {\" *\"}}\r\n {commentsList}\r\n
);\r\n return (
\r\n {sectionTag}\r\n
\r\n {choicesTag}\r\n {commentsTag}\r\n
);\r\n }));\r\n return (
\r\n \r\n
);\r\n }\r\n static DoesUserHasPermissions() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC\r\n && application.applicationStatus == ApplicationStatus.UNDER_REVIEW) {\r\n User.getCurrentUser().then(user => {\r\n if (application.isUserSeniorAdvisor(user)\r\n || application.isUserAdvisor(user)) {\r\n resolve(true);\r\n }\r\n else {\r\n User.isMemberOfGroup([\"NAS Administrators\", \"ESC Grant Administrators\", \"ESC Budget Officers\"]).then(isMember => {\r\n resolve(isMember);\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=ReviewSummaryComponent.jsx.map","import { Component } from 'react';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { TooltipHost, TooltipDelay } from 'office-ui-fabric-react/lib/Tooltip';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport { Application, User, DivisionEnum, ApplicationStatus } from \"../index\";\r\nexport class AssignReviewersComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n hideDialog: false,\r\n peoplePickerInitialized: false,\r\n reviewersGroupMembers: new Array()\r\n };\r\n this.OnConfirmClick = this.OnConfirmClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n }\r\n componentWillMount() {\r\n }\r\n componentDidMount() {\r\n if (!this.state.peoplePickerInitialized) {\r\n if (this._peoplePickerDivReviewers != null) {\r\n this.initializePeoplePicker();\r\n }\r\n else {\r\n let initializationInterval = setInterval(() => {\r\n if (this._peoplePickerDivReviewers != null) {\r\n this.initializePeoplePicker();\r\n clearInterval(initializationInterval);\r\n }\r\n }, 100);\r\n }\r\n }\r\n }\r\n componentDidUpdate(prevProps, prevState) {\r\n }\r\n initializePeoplePicker() {\r\n let reviewersPeoplePickerValues = this.props.application.reviewers.map(user => {\r\n return {\r\n Key: user.claim,\r\n AutoFillDisplayText: user.name,\r\n AutoFillKey: user.claim,\r\n Description: user.name,\r\n DisplayText: user.name,\r\n EntityType: \"User\",\r\n IsResolved: true,\r\n Resolved: true\r\n };\r\n });\r\n //All the scripts needed for the ClientPeoplePicker\r\n let scriptRefs = ['sp.core.js', 'sp.runtime.js', 'sp.js', 'autofill.js', 'clientpeoplepicker.js', 'clientforms.js', 'clienttemplates.js'];\r\n //Register all scripts as Script-On-Demand (SoD) dependencies\r\n scriptRefs.forEach(function (val, index) {\r\n if (!window['_v_dictSod'][val]) {\r\n SP.SOD.registerSod(val, \"\\u002f_layouts\\u002f15\\u002f\" + val);\r\n }\r\n ;\r\n });\r\n //Load all scripts, and execute callback after the scripts have been loaded\r\n SP.SOD.loadMultiple(scriptRefs, () => {\r\n //Create a schema object that describes the behaviour of the ClientPeoplePicker\r\n var schema = {};\r\n schema['PrincipalAccountType'] = 'User,DL';\r\n schema['SearchPrincipalSource'] = 15;\r\n schema['ResolvePrincipalSource'] = 15;\r\n schema['AllowMultipleValues'] = true;\r\n schema['MaximumEntitySuggestions'] = 50;\r\n schema['Width'] = '280px';\r\n let context = SP.ClientContext.get_current();\r\n let reviewersGroup = context.get_web().get_siteGroups().getByName(\"ESC Reviewers\");\r\n let reviewersGroupMembers = reviewersGroup.get_users();\r\n context.load(reviewersGroup);\r\n context.load(reviewersGroupMembers);\r\n context.executeQueryAsync((sender, args) => {\r\n schema['SharePointGroupID'] = reviewersGroup.get_id();\r\n let userCollectionToGroup = (userCollection) => {\r\n let users = new Array();\r\n let enumerator = userCollection.getEnumerator();\r\n while (enumerator.moveNext()) {\r\n users.push(enumerator.get_current());\r\n }\r\n return users;\r\n };\r\n //Initialize the PeoplePicker. Because there are no Typings available for the SPClientPeoplePicker object we use the hash-list\r\n let initializationFunction = window['SPClientPeoplePicker_InitStandaloneControlWrapper'];\r\n initializationFunction.call(window, this._peoplePickerDivReviewers.id, reviewersPeoplePickerValues, schema);\r\n this.setState({\r\n peoplePickerInitialized: true,\r\n reviewersGroupMembers: userCollectionToGroup(reviewersGroupMembers)\r\n });\r\n }, (sender, args) => {\r\n });\r\n });\r\n }\r\n getPeoplePickerValue(element) {\r\n //Retrieve the PeoplePickerObject from the form\r\n let peoplePickerDictionaryValue = element.id + \"_TopSpan\";\r\n let peoplePickerObject = window[\"SPClientPeoplePicker\"].SPClientPeoplePickerDict[peoplePickerDictionaryValue];\r\n //Get all information for the resolved users\r\n let getAllUserInfoFunc = peoplePickerObject['GetAllUserInfo'];\r\n let userInfo = getAllUserInfoFunc.call(peoplePickerObject);\r\n return userInfo;\r\n }\r\n OnConfirmClick() {\r\n let reviewers = this.getPeoplePickerValue(this._peoplePickerDivReviewers);\r\n let reviewersCollection = new Array();\r\n if (reviewers.length > 0) {\r\n reviewersCollection = reviewers.map(userObj => {\r\n let claim = userObj[\"Key\"];\r\n let displayName = userObj[\"DisplayText\"];\r\n return { claim: claim, name: displayName };\r\n });\r\n }\r\n this.props.application.updateReviewers(reviewersCollection).then(() => {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onConfirm)\r\n this.props.onConfirm();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }).catch(reason => {\r\n });\r\n }\r\n OnCancelClick() {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onCancel)\r\n this.props.onCancel();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n render() {\r\n let peoplePickerDivAdvisorsId = this._peoplePickerDivReviewers ? this._peoplePickerDivReviewers.id : 'peoplePickerDiv_' + Math.random().toString(36).substr(2, 10);\r\n let title = this.props.title || \"Assign Reviewers\";\r\n let subtitle = this.props.subText || \"Use this dialog assign reviewers.\";\r\n return (
\r\n \r\n
);\r\n }\r\n static DoesUserHasPermissions() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC\r\n && (application.applicationStatus == ApplicationStatus.SUBMITTED || application.applicationStatus == ApplicationStatus.UNDER_REVIEW)) {\r\n User.getCurrentUser().then(user => {\r\n if (application.isUserSeniorAdvisor(user) || application.isUserAdvisor(user)) {\r\n resolve(true);\r\n }\r\n else {\r\n User.isGrantAdministrator(DivisionEnum.ESC).then(isAdmin => {\r\n resolve(isAdmin);\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=AssignReviewersComponent.jsx.map","import { Component } from 'react';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport { Dropdown } from 'office-ui-fabric-react/lib/Dropdown';\r\nimport { Application, ApplicationStatus, DivisionEnum, User, ChangeRequest } from \"../index\";\r\nexport class RequestMoreInformationComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.onRenderChangeRequestOption = (option) => {\r\n let optionData = option.data;\r\n if (optionData) {\r\n let iconType = \"\";\r\n switch (optionData.status) {\r\n case \"Approved\": {\r\n iconType = \"StatusCircleCheckmark\";\r\n break;\r\n }\r\n case \"Rejected\": {\r\n iconType = \"StatusCircleErrorX\";\r\n break;\r\n }\r\n case \"Pending\": {\r\n iconType = \"StatusCircleQuestionMark\";\r\n break;\r\n }\r\n }\r\n let shortDescription = optionData.description;\r\n if (shortDescription.length > 50) {\r\n shortDescription = shortDescription.substr(0, 47) + \"...\";\r\n }\r\n let submittedOn = \"(Submitted on: \" + optionData.createdOn.format(\"dd MMM yyyy HH: mm\") + \")\";\r\n return (
\r\n \r\n {option.text} {submittedOn}
\r\n {shortDescription}\r\n
);\r\n }\r\n else {\r\n return (
{option.text}
);\r\n }\r\n };\r\n this.state = {\r\n hideDialog: false,\r\n comments: \"\",\r\n allChangeRequests: new Array(),\r\n selectedChangeRequest: this.props.changeRequest\r\n };\r\n this.OnConfirmClick = this.OnConfirmClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n this.OnCommentsTextChanged = this.OnCommentsTextChanged.bind(this);\r\n this.onChangeRequestChanged = this.onChangeRequestChanged.bind(this);\r\n }\r\n OnConfirmClick() {\r\n let applicationName = this.props.application.url.split(\"/\").reverse()[0];\r\n let mailSubject = \"More information is requested regarding \" + applicationName;\r\n let shouldUpdateApplicationStatus = true;\r\n if (this.state.selectedChangeRequest) {\r\n mailSubject = \"More information is requested regarding change request \" + this.state.selectedChangeRequest.changeRequestCode;\r\n shouldUpdateApplicationStatus = false;\r\n }\r\n this.props.application.RequestMoreInformationFromApplicant(this.state.comments, mailSubject, shouldUpdateApplicationStatus).then(() => {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onConfirm)\r\n this.props.onConfirm();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }).catch(reason => {\r\n });\r\n }\r\n OnCancelClick() {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onCancel)\r\n this.props.onCancel();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n OnCommentsTextChanged(newValue) {\r\n this.setState({\r\n comments: newValue\r\n });\r\n }\r\n componentWillMount() {\r\n ChangeRequest.GetChangeRequests(this.props.application).then(requests => {\r\n this.setState({\r\n allChangeRequests: requests\r\n });\r\n });\r\n }\r\n onChangeRequestChanged(option, index) {\r\n this.setState({\r\n selectedChangeRequest: option.data\r\n });\r\n }\r\n renderChangeRequestPart() {\r\n let crOptions = this.state.allChangeRequests.map(cr => {\r\n return {\r\n key: cr.itemId,\r\n text: \"Change Request #\" + cr.changeRequestCode,\r\n data: cr\r\n };\r\n });\r\n let defaultOption = {\r\n key: -1,\r\n text: \"The application itself\",\r\n data: null,\r\n disabled: this.props.application.applicationStatus != ApplicationStatus.SUBMITTED\r\n };\r\n crOptions.unshift(defaultOption);\r\n let changeRequestDropDown =
\r\n \r\n \r\n
;\r\n return changeRequestDropDown;\r\n }\r\n render() {\r\n let title = this.props.title || \"Request More Information\";\r\n let subtitle = this.props.subText || \"Use this dialog request more information from the applicant. The applicant will be notified by e-mail.\";\r\n let changeRequestUI;\r\n if (this.props.changeRequest != null || this.state.allChangeRequests.length > 0) {\r\n changeRequestUI = this.renderChangeRequestPart();\r\n }\r\n return (
\r\n \r\n
);\r\n }\r\n static DoesUserHasPermissions() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n if ((application.applicantDetails.division == DivisionEnum.ESC || application.applicantDetails.division == DivisionEnum.PDD)\r\n && application.applicationStatus == ApplicationStatus.SUBMITTED) {\r\n User.getCurrentUser().then(user => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC) {\r\n if (application.isUserSeniorAdvisor(user) || application.isUserAdvisor(user)) {\r\n resolve(true);\r\n }\r\n else {\r\n User.isGrantAdministrator(DivisionEnum.ESC).then(isAdmin => {\r\n resolve(isAdmin);\r\n });\r\n }\r\n }\r\n else if (application.applicantDetails.division == DivisionEnum.PDD) {\r\n User.isGrantAdministrator(DivisionEnum.PDD).then(isAdmin => {\r\n resolve(isAdmin);\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=RequestMoreInformationComponent.jsx.map","import { Component } from 'react';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { Application, ApplicationStatus, User, DivisionEnum } from \"../index\";\r\nexport class NotifyBudgetOfficersComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n hideDialog: false,\r\n comments: \"\"\r\n };\r\n this.OnConfirmClick = this.OnConfirmClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n this.OnCommentsTextChanged = this.OnCommentsTextChanged.bind(this);\r\n }\r\n OnConfirmClick() {\r\n this.props.application.NotifyBudgetOfficers(this.state.comments).then(() => {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onConfirm)\r\n this.props.onConfirm();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }).catch(reason => {\r\n });\r\n }\r\n OnCancelClick() {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onCancel)\r\n this.props.onCancel();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n OnCommentsTextChanged(newValue) {\r\n this.setState({\r\n comments: newValue\r\n });\r\n }\r\n componentWillMount() {\r\n }\r\n render() {\r\n let title = this.props.title || \"Notify Budget Officers\";\r\n let subtitle = this.props.subText || \"You can notify the budget officers and request a review. An e-mail will be sent to the budget officers.\";\r\n return (
\r\n \r\n
);\r\n }\r\n static DoesUserHasPermissions() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC\r\n && (application.applicationStatus == ApplicationStatus.SUBMITTED ||\r\n application.applicationStatus == ApplicationStatus.UNDER_REVIEW ||\r\n application.applicationStatus == ApplicationStatus.AWARDED)) {\r\n User.getCurrentUser().then(user => {\r\n if (application.isUserSeniorAdvisor(user)\r\n || application.isUserAdvisor(user)) {\r\n resolve(true);\r\n }\r\n else {\r\n User.isGrantAdministrator(DivisionEnum.ESC).then(isAdmin => {\r\n resolve(isAdmin);\r\n });\r\n }\r\n });\r\n }\r\n else if (application.applicantDetails.division == DivisionEnum.PDD\r\n && (application.applicationStatus == ApplicationStatus.SUBMITTED ||\r\n application.applicationStatus == ApplicationStatus.UNDER_REVIEW ||\r\n application.applicationStatus == ApplicationStatus.AWARDED)) {\r\n User.isGrantAdministrator(DivisionEnum.PDD).then(isAdmin => {\r\n resolve(isAdmin);\r\n });\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=NotifyBudgetOfficersComponent.jsx.map","import { Component } from 'react';\r\nimport { SharePointRestService, ListNames, LogMessage, LogSeverityEnum, LocalStorageCache, GrantStatus } from \"../index\";\r\nimport { SPUtil } from \"../index\";\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { Dropdown } from 'office-ui-fabric-react/lib/Dropdown';\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { TooltipHost, TooltipDelay } from 'office-ui-fabric-react/lib/Tooltip';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport { DocumentGenerator } from \"../index\";\r\nexport class StudyOrderGroupComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this._natoClassifications = [\"NATO Unclassified\", \"NATO Restricted\", \"NATO Secret\"];\r\n this._countryOptions = [\"Albania\", \"Austria\", \"Belgium\", \"Bulgaria\", \"Canada\", \"Croatia\", \"Czechia\", \"Denmark\", \"Estonia\", \"Finland\", \"France\", \"Germany\", \"Greece\", \"Hungary\", \"Iceland\", \"Italy\", \"Latvia\", \"Lithuania\", \"Luxembourg\", \"Montenegro\", \"Netherlands\", \"Norway\", \"Poland\", \"Portugal\", \"Romania\", \"Serbia\", \"Slovakia\", \"Slovenia\", \"Spain\", \"Sweden\", \"Switzerland\", \"Türkiye\", \"Ukraine\", \"United Kingdom\", \"United States\", \"Other\"];\r\n this._niagEvents = {};\r\n this.onRenderEventOption = (option) => {\r\n let iconType = (option.data.Status == GrantStatus.PUBLISHED) ? \"Completed\" : \"Blocked\";\r\n return (
\r\n \r\n {option.data.Title} ({option.data.Code})
\r\n {option.data.Synopsis}\r\n
);\r\n };\r\n this.state = {\r\n hideDialog: false,\r\n comment: \"\",\r\n peoplePickerInitialized: false,\r\n siteUsers: new Array(),\r\n events: new Array(),\r\n };\r\n this.OnSaveClick = this.OnSaveClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n this.onChangeNatoClassification = this.onChangeNatoClassification.bind(this);\r\n this.onChangeChairmanCountry = this.onChangeChairmanCountry.bind(this);\r\n this.onEventChanged = this.onEventChanged.bind(this);\r\n // Retrieve the events\r\n SPUtil.isLoggedIn().then(isLoggedIn => {\r\n if (isLoggedIn) {\r\n this.retrieveNiagEvents().then(events => {\r\n this._niagEvents = events;\r\n });\r\n }\r\n });\r\n //Delegate function to transform a list of (textual) options to an object that can be displayed as option in a DropDown or Select-box\r\n let arrayToOptions = (arr) => {\r\n let options = arr.reduce((map, val) => {\r\n map.push({ key: val, text: val, styles: { optionText: { whiteSpace: \"normal\" } } });\r\n return map;\r\n }, []);\r\n return options;\r\n };\r\n }\r\n onChangeNatoClassification(newKey) {\r\n this._natoClassification = newKey.key.toString();\r\n }\r\n ;\r\n onChangeChairmanCountry(newKey) {\r\n this._chairmanCountry = newKey.key.toString();\r\n }\r\n ;\r\n componentDidMount() {\r\n if (!this.state.peoplePickerInitialized) {\r\n if (this._chairmanNamePicker != null) {\r\n this.initializePeoplePicker();\r\n }\r\n else {\r\n let initializationInterval = setInterval(() => {\r\n if (this._chairmanNamePicker != null) {\r\n this.initializePeoplePicker();\r\n clearInterval(initializationInterval);\r\n }\r\n }, 100);\r\n }\r\n }\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANTS + \"')/items?$filter=natoExternalStatus ne '\" + GrantStatus.ARCHIVED + \"'\";\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n if (odata.value.length == 0) {\r\n }\r\n else {\r\n let retrievedEvents = odata.value.map((odataObject, index) => {\r\n return {\r\n Title: odataObject.Title,\r\n Code: odataObject.natoCode,\r\n Synopsis: odataObject.natoSynopsis,\r\n Status: odataObject.natoExternalStatus,\r\n Eventtype: odataObject.natoNIAGEventType\r\n };\r\n });\r\n retrievedEvents = retrievedEvents.filter(a => { return a.Code != null && a.Code.length > 0; }).sort((a, b) => { return a.Title.localeCompare(b.Title); });\r\n this.setState({\r\n events: retrievedEvents\r\n });\r\n }\r\n });\r\n })\r\n .catch(reason => {\r\n LogMessage.Log(\"Unable to retrieve the events: \" + reason, this, LogSeverityEnum.Error);\r\n });\r\n }\r\n render() {\r\n //Delegate function to transform a list of (textual) options to an object that can be displayed as option in a DropDown or Select-box\r\n let arrayToOptions = (arr) => {\r\n let options = arr.reduce((map, val) => {\r\n map.push({ key: val, text: val, styles: { optionText: { whiteSpace: \"normal\" } } });\r\n return map;\r\n }, []);\r\n return options;\r\n };\r\n // NIAG events\r\n let eventOptions = this.state.events.map(event => {\r\n return {\r\n key: event.Code,\r\n text: event.Code,\r\n data: event\r\n };\r\n });\r\n // Prepare dropdowns\r\n let classificationOptions = arrayToOptions(this._natoClassifications);\r\n let countryOptions = arrayToOptions(this._countryOptions);\r\n // Prepare people pickers\r\n let peoplePickerDivChairmanId = this._chairmanNamePicker ? this._chairmanNamePicker.id : 'peoplePickerDiv_' + Math.random().toString(36).substr(2, 10);\r\n let peoplePickerDivMembersId = this._membersNamePicker ? this._membersNamePicker.id : 'peoplePickerDiv_' + Math.random().toString(36).substr(2, 10);\r\n if (this.props.generateAnnex) {\r\n return (
\r\n \r\n
);\r\n }\r\n else {\r\n return (
\r\n \r\n
);\r\n }\r\n }\r\n onAddFieldValueChange() {\r\n }\r\n getPersonName(element) {\r\n let people = this.getPeoplePickerValue(element);\r\n let peopleCollection = new Array();\r\n if (people.length > 0) {\r\n peopleCollection = people.map(userObj => {\r\n let claim = userObj[\"Key\"];\r\n let displayName = userObj[\"DisplayText\"];\r\n return { claim: claim, name: displayName };\r\n });\r\n return peopleCollection[0].name;\r\n }\r\n return \"N/A\";\r\n }\r\n getPeoplePickerValue(element) {\r\n //Retrieve the PeoplePickerObject from the form\r\n let peoplePickerDictionaryValue = element.id + \"_TopSpan\";\r\n let peoplePickerObject = window[\"SPClientPeoplePicker\"].SPClientPeoplePickerDict[peoplePickerDictionaryValue];\r\n //Get all information for the resolved users\r\n let getAllUserInfoFunc = peoplePickerObject['GetAllUserInfo'];\r\n let userInfo = getAllUserInfoFunc.call(peoplePickerObject);\r\n return userInfo;\r\n }\r\n initializePeoplePicker() {\r\n //All the scripts needed for the ClientPeoplePicker\r\n let scriptRefs = ['sp.core.js', 'sp.runtime.js', 'sp.js', 'autofill.js', 'clientpeoplepicker.js', 'clientforms.js', 'clienttemplates.js'];\r\n //Register all scripts as Script-On-Demand (SoD) dependencies\r\n scriptRefs.forEach(function (val, index) {\r\n if (!window['_v_dictSod'][val]) {\r\n SP.SOD.registerSod(val, \"\\u002f_layouts\\u002f15\\u002f\" + val);\r\n }\r\n ;\r\n });\r\n //Load all scripts, and execute callback after the scripts have been loaded\r\n SP.SOD.loadMultiple(scriptRefs, () => {\r\n //Create a schema object that describes the behaviour of the ClientPeoplePicker\r\n var schema_multiple = {};\r\n schema_multiple['PrincipalAccountType'] = 'User,DL';\r\n schema_multiple['SearchPrincipalSource'] = 15;\r\n schema_multiple['ResolvePrincipalSource'] = 15;\r\n schema_multiple['AllowMultipleValues'] = true;\r\n schema_multiple['MaximumEntitySuggestions'] = 50;\r\n schema_multiple['Width'] = '280px';\r\n var schema_single = {};\r\n schema_single['PrincipalAccountType'] = 'User,DL';\r\n schema_single['SearchPrincipalSource'] = 15;\r\n schema_single['ResolvePrincipalSource'] = 15;\r\n schema_single['AllowMultipleValues'] = false;\r\n schema_single['MaximumEntitySuggestions'] = 50;\r\n schema_single['Width'] = '280px';\r\n let context = SP.ClientContext.get_current();\r\n // let reviewersGroup = context.get_web().get_siteGroups().getByName(\"ESC Reviewers\");\r\n // let reviewersGroupMembers = reviewersGroup.get_users();\r\n // context.load(reviewersGroup);\r\n // context.load(reviewersGroupMembers);\r\n let siteUsers = context.get_web().get_siteUsers();\r\n context.load(siteUsers);\r\n context.executeQueryAsync((sender, args) => {\r\n // schema['SharePointGroupID'] = reviewersGroup.get_id();\r\n let userCollectionToGroup = (userCollection) => {\r\n let users = new Array();\r\n let enumerator = userCollection.getEnumerator();\r\n while (enumerator.moveNext()) {\r\n users.push(enumerator.get_current());\r\n }\r\n return users;\r\n };\r\n //Initialize the PeoplePicker. Because there are no Typings available for the SPClientPeoplePicker object we use the hash-list\r\n let initializationFunction = window['SPClientPeoplePicker_InitStandaloneControlWrapper'];\r\n initializationFunction.call(window, this._chairmanNamePicker.id, null, schema_single);\r\n initializationFunction.call(window, this._membersNamePicker.id, null, schema_multiple);\r\n this.setState({\r\n peoplePickerInitialized: true,\r\n siteUsers: userCollectionToGroup(siteUsers)\r\n });\r\n }, (sender, args) => {\r\n });\r\n });\r\n }\r\n CreateWebsite(title, description, webUrl, templateTitle) {\r\n //Load the ClientContext and retrieve all WebTemplates\r\n let context = SP.ClientContext.get_current();\r\n let web = context.get_web();\r\n context.load(web);\r\n let webTemplates = web.getAvailableWebTemplates(1033, false);\r\n context.load(webTemplates);\r\n return new Promise((resolve, reject) => {\r\n context.executeQueryAsync((sender, args) => {\r\n //Get the correct Template from the title\r\n let enumerator = webTemplates.getEnumerator();\r\n let customTemplate;\r\n let teamsiteTemplate;\r\n while (enumerator.moveNext()) {\r\n let webTemplate = enumerator.get_current();\r\n let webTitle = webTemplate.get_title();\r\n if (webTitle == templateTitle) {\r\n customTemplate = webTemplate.get_name();\r\n break;\r\n }\r\n }\r\n //Fallback; if there is no Custom Template generate a basic TeamSite\r\n if (!customTemplate || customTemplate.length == 0) {\r\n customTemplate = \"STS#0\";\r\n }\r\n //Create the WebCreationInfo object to create the new subweb from the template\r\n let webCreationInformation = new SP.WebCreationInformation();\r\n webCreationInformation.set_title(title);\r\n webCreationInformation.set_description(description);\r\n webCreationInformation.set_language(1033);\r\n webCreationInformation.set_url(webUrl);\r\n webCreationInformation.set_useSamePermissionsAsParentSite(true);\r\n webCreationInformation.set_webTemplate(customTemplate);\r\n web.get_webs().add(webCreationInformation);\r\n //Execute the ClientContext create the web\r\n context.executeQueryAsync((sender, args) => {\r\n if (this._progressDialog)\r\n this._progressDialog.close;\r\n resolve(webUrl);\r\n }, (sender, args) => {\r\n //There was an error creating the subweb\r\n reject(args.get_message());\r\n });\r\n }, (sender, args) => {\r\n //There was an error retrieving the WebTemplates\r\n reject(args.get_message());\r\n });\r\n });\r\n }\r\n generateStudyOrderDoc(webURL) {\r\n let context = SP.ClientContext.get_current();\r\n let templateUrl = _spPageContextInfo.siteServerRelativeUrl + \"/DI-NIAG/DocumentTemplates/StudyOrder.docx\";\r\n let filename = \"StudyOrderGroup.docx\";\r\n //Transform the application object to a flat propertylist\r\n let standardProperties = DocumentGenerator.getStandardProperties();\r\n let applicationProperties = this.toPropertyList();\r\n let newWebUrl = _spPageContextInfo.siteServerRelativeUrl + \"/DI-NIAG/\" + webURL;\r\n let destination = newWebUrl + \"/Shared Documents\";\r\n Object.keys(standardProperties).forEach(key => {\r\n applicationProperties[key] = standardProperties[key];\r\n });\r\n let template = new DocumentGenerator(templateUrl, true, \"Site\");\r\n //Merge the template with the properties in the application\r\n return new Promise((resolve, reject) => {\r\n template.merge(applicationProperties).then(() => {\r\n //Save the template in the current document set\r\n template.saveAs(destination, filename, true, newWebUrl).then(serverRelativeUrl => {\r\n return resolve();\r\n });\r\n });\r\n });\r\n }\r\n toPropertyList() {\r\n let list = {};\r\n list[\"contractRef\"] = \"contractRef\";\r\n list[\"expContractDateEN\"] = \"expContractDateEN\";\r\n list[\"expStartDateEN\"] = \"expStartDateEN\";\r\n list[\"expEndDateEN\"] = \"expEndDateEN\";\r\n list[\"groupId\"] = this._studyGroupId.value;\r\n list[\"studySubject\"] = this._eventName;\r\n list[\"studyTitle\"] = this._eventName;\r\n list[\"chairmanName\"] = this.getPersonName(this._chairmanNamePicker);\r\n list[\"chairmanCompany\"] = this._chairmanCompany.value;\r\n list[\"chairmanCountry\"] = this._chairmanCountry;\r\n list[\"classificatoonName\"] = this._natoClassification;\r\n return list;\r\n }\r\n /**\r\n * Retrieves the NIAG events\r\n * @return {Promise<{ [itemId: number]: { title: string, siteRelativeUrl: string, iconPath: string, description: string } }>} A Promise with a dictionary containing all templates\r\n */\r\n retrieveNiagEvents() {\r\n let cacheKey = \"NIAG Events:\" + _spPageContextInfo.webAbsoluteUrl;\r\n let cachedEvents = LocalStorageCache.tryGetFromCache(cacheKey, null, new Date(new Date(0).setHours(4)));\r\n if (cachedEvents != null) {\r\n return Promise.resolve(cachedEvents);\r\n }\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.PUBLISHED_GRANTS + \"')/items?$select=ID,Title\";\r\n return new Promise((resolve, reject) => {\r\n // Retrieve the events\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n let events = {};\r\n //The list is empty, resolve null\r\n if (odata.value.length == 0) {\r\n resolve(null);\r\n }\r\n else {\r\n //Transform the odata objects into key-object paris\r\n for (let i = 0; i < odata.value.length; i++) {\r\n let itemId = Number(odata.value[i].ID);\r\n events[itemId] = {\r\n title: odata.value[i].Title,\r\n id: odata.value[i].ID\r\n };\r\n //this._niagEventsOptions.push(odata.value[i].Title);\r\n }\r\n LocalStorageCache.tryStoreInCache(cacheKey, events);\r\n resolve(events);\r\n }\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n onEventChanged(option, index) {\r\n this._eventName = this.state.events[index].Title;\r\n this._eventSynopsis = this.state.events[index].Synopsis;\r\n this._eventCode = this.state.events[index].Code;\r\n }\r\n ShowProgress(message, progressImageVisibility = true) {\r\n if (this._progressDialog) {\r\n this._progressDialog.get_dialogElement().getElementsByClassName(\"nato-dialog-content\")[0].innerHTML += \" ✔
\" + message;\r\n this._progressDialog.autoSize();\r\n }\r\n else {\r\n this._progressDialog = SP.UI.ModalDialog.showWaitScreenWithNoClose(\"Please wait...\", \"\" + message + \"\");\r\n }\r\n this._progressDialog.get_dialogElement().getElementsByTagName(\"IMG\")[1].style.display = progressImageVisibility ? \"\" : \"none\";\r\n }\r\n HideProgress() {\r\n if (this._progressDialog) {\r\n this._progressDialog.close(SP.UI.DialogResult.OK);\r\n this._progressDialog = null;\r\n }\r\n }\r\n OnSaveClick() {\r\n // The Study Group Unique Id\r\n let studyGroupId = this._studyGroupId.value;\r\n // Validation of fields\r\n // GroupId\r\n if (!studyGroupId) {\r\n return;\r\n }\r\n // Event name\r\n if (!this._eventName) {\r\n return;\r\n }\r\n // Event code\r\n if (!this._eventCode) {\r\n return;\r\n }\r\n // Validations specific to Annex 2 Form generation only\r\n if (this.props.generateAnnex) {\r\n // Chairman\r\n if (!this.getPersonName(this._chairmanNamePicker)) {\r\n return;\r\n }\r\n // At least one member\r\n if (!this.getPersonName(this._membersNamePicker)) {\r\n return;\r\n }\r\n // Classification\r\n if (!this._natoClassification) {\r\n return;\r\n }\r\n // Chairman country\r\n if (!this._chairmanCountry) {\r\n return;\r\n }\r\n // Chairman company\r\n if (!this._chairmanCompany.value) {\r\n return;\r\n }\r\n }\r\n // Site title is a combination of the study group id and the event name\r\n let siteTitle = (studyGroupId + \":\" + this._eventCode).trim();\r\n // Site descrption\r\n let siteDescription = this._eventName + \" subsite\";\r\n // The template we are copying from\r\n let templateTitle = \"StudyOrderGroup\";\r\n // The relative URL of the site, must be unique and should not contain\r\n // non-URL friendly characters\r\n let webURL = studyGroupId + this._eventName;\r\n // Hide the dialog\r\n this.setState({\r\n hideDialog: true\r\n });\r\n // Create the study order sub-site\r\n if (!this.props.generateAnnex) {\r\n this.ShowProgress(\"Creating sub-site...\");\r\n // Create the site\r\n this.CreateWebsite(siteTitle, siteDescription, webURL, templateTitle).then((newWebUrl) => {\r\n this.HideProgress();\r\n });\r\n }\r\n else {\r\n // TODO: Check if the site has not been created yet and create it if so\r\n // Generate and save the Study Order Group document from the template\r\n this.generateStudyOrderDoc(webURL).then(() => {\r\n });\r\n }\r\n }\r\n OnCancelClick() {\r\n this.setState({\r\n hideDialog: true\r\n });\r\n if (this.props.onCancel)\r\n this.props.onCancel();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n}\r\n//# sourceMappingURL=StudyOrderGroupComponent.jsx.map","import { Component } from 'react';\r\nimport { User, Nations, Nationalities, ApplicantDetails, Application, FormValidator, LogMessage, LogSeverityEnum, DivisionEnum, ApplicationFieldCollections, WorkflowManager, Titles } from \"../index\";\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { CommandBar } from 'office-ui-fabric-react/lib/CommandBar';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { ComboBox } from 'office-ui-fabric-react/lib/ComboBox';\r\nimport { CheckboxVisibility, DetailsList, DetailsListLayoutMode, Selection, SelectionMode } from 'office-ui-fabric-react/lib/DetailsList';\r\nexport class Wizard1ApplicantComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this._coDirectorFields = {\r\n title: null,\r\n firstName: null,\r\n lastName: null,\r\n nationality: null,\r\n telephone: null,\r\n mobile: null,\r\n email: null,\r\n alternativeEmail: null,\r\n institute: null,\r\n department: null,\r\n streetAndNumber: null,\r\n zipCode: null,\r\n city: null,\r\n country: null\r\n };\r\n this._formDataESC = {\r\n \"User title\": {\r\n //1\r\n value: () => { return (this._applicantDetails) ? this._applicantDetails.title : (this.state.currentUser != null && this.state.currentUser.title != null) ? \"\" + this.state.currentUser.title : \"\"; },\r\n objectMapping: \"title\",\r\n fieldType: TextField,\r\n title: \"Professional or honorary title of the person creating the initial application in NAS\",\r\n disable: true,\r\n required: false\r\n },\r\n \"User First Name\": {\r\n //2\r\n value: () => { return (this._applicantDetails) ? this._applicantDetails.firstname : (this.state.currentUser != null && this.state.currentUser.firstname != null) ? \"\" + this.state.currentUser.firstname : \"\"; },\r\n objectMapping: \"firstname\",\r\n fieldType: TextField,\r\n title: \"First name of the person creating the initial application in NAS\",\r\n disable: true,\r\n required: false\r\n },\r\n \"User Last Name\": {\r\n //3\r\n value: () => { return (this._applicantDetails) ? this._applicantDetails.lastname : (this.state.currentUser != null && this.state.currentUser.lastname != null) ? \"\" + this.state.currentUser.lastname : \"\"; },\r\n objectMapping: \"lastname\",\r\n fieldType: TextField,\r\n title: \"Last name of the person creating the initial application in NAS\",\r\n disable: true,\r\n required: false\r\n },\r\n \"User professional e-mail address\": {\r\n //4\r\n value: () => { return (this._applicantDetails) ? this._applicantDetails.eMailAddress : (this.state.currentUser != null && this.state.currentUser.emailaddress != null) ? \"\" + this.state.currentUser.emailaddress : \"\"; },\r\n objectMapping: \"eMailAddress\",\r\n fieldType: TextField,\r\n title: \"The e-mail address of the person creating the initial application in NAS. Note: correspondence will be addressed primarily to the NATO country Project Director(NPD) once the application has been submitted.\",\r\n disable: true,\r\n required: false,\r\n },\r\n \"NPD title\": {\r\n //5\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactTitle : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: ComboBox,\r\n title: \"Enter the professional or honorary title of the lead Co-Director from a NATO nation (NATO country Project Director - NPD) who will be the point of contact for this activity. This application will be submitted in this person’s name. This may or may not be the same User who fills out this application. There is one NPD per activity .The NPD shares responsibility and authority with the PPD for the overall technical management of the activity.The NPD and their Institute will receive and manage all SPS funds and have ultimate responsibility and accountability for financial aspects of the activity\",\r\n disable: false,\r\n required: true\r\n },\r\n \"NPD first name\": {\r\n //6\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactFirstname : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the first name of the lead Co-Director from a NATO nation (NATO country Project Director - NPD) who will be the point of contact for this activity. This application will be submitted in this person’s name. This may or may not be the same User who fills out this application. There is one NPD per activity.The NPD shares responsibility and authority with the PPD for the overall technical management of the activity.The NPD and their Institute will receive and manage all SPS funds and have ultimate responsibility and accountability for financial aspects of the activity.\",\r\n disable: false,\r\n required: true\r\n },\r\n \"NPD last name\": {\r\n //7\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactLastname : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the last name of the lead Co-Director from a NATO nation (NATO country Project Director - NPD) who will be the point of contact for this activity. This application will be submitted in this person’s name. This may or may not be the same User who fills out this application. There is one NPD per activity.The NPD shares responsibility and authority with the PPD for the overall technical management of the activity.The NPD and their Institute will receive and manage all SPS funds and have ultimate responsibility and accountability for financial aspects of the activity.\",\r\n disable: false,\r\n required: true\r\n },\r\n \"NPD nationality\": {\r\n //8\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactNationality : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: ComboBox,\r\n title: \"Enter the NATO country Project Director’s (NPD) nationality. The NPD must be a national of, resident and employed in a NATO nation.\",\r\n disable: false,\r\n required: true,\r\n validator: (value) => { return FormValidator.validatePhoneNumber(value, true); }\r\n },\r\n \"NPD office telephone number\": {\r\n //9\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactTelephoneNumber : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the NATO country Project Director's (NPD) telephone number at their Institute of affiliation, including international dialing code. Example: +3227481234\",\r\n disable: false,\r\n required: true,\r\n validator: (value) => { return FormValidator.validatePhoneNumber(value, true); }\r\n },\r\n \"NPD mobile telephone number\": {\r\n //10\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactMobileNumber : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the mobile telephone number of the NATO country Project Director (NPD), including international dialing code. Example: +32797123456\",\r\n disable: false,\r\n required: true\r\n },\r\n \"NPD email address\": {\r\n //11\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactEmailAddress : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the NATO country Project Director's (NPD) professional email address. This will be the primary email address that SPS will use to contact the NPD, for all communications related to this activity.\",\r\n disable: false,\r\n required: true,\r\n validator: (value) => { return FormValidator.validateEmailAddress(value, true); }\r\n },\r\n \"NPD alternative email address\": {\r\n //12\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactAlternativeEmailAddress : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Please enter an alternative email address where the NATO country Project Director may be reached if necessary.\",\r\n disable: false,\r\n required: true,\r\n validator: (value) => { return FormValidator.validateEmailAddress(value, true); }\r\n },\r\n \"NPD Institute \": {\r\n //13\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactInstitute : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the name of the Institute/organization to which the NATO country Project Director (NPD) is affiliated. This Institute will receive correspondence concerning this activity.Please note that this Institute must be located in a NATO Nation. Note that for-profit organizations are not eligible.\",\r\n disable: false,\r\n required: true\r\n },\r\n \"NPD Institute: Faculty/Department\": {\r\n //14\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactDepartment : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"If applicable, please enter the name of the Faculty or Department to which the NATO country Project Director (NPD) is affiliated\",\r\n disable: false,\r\n required: false\r\n },\r\n \"NPD Institute: Street and number\": {\r\n //15\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactAddress : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the street and building number of the NATO country Project Director’s (NPD) Institute/organization. Please note that the Institute/ organization must be located in a NATO Nation.\",\r\n disable: false,\r\n required: true\r\n },\r\n \"NPD Institute: ZIP code\": {\r\n //16\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactZipCode : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the ZIP code of the NATO country Project Director’s (NPD) Institute/organization. Please note that the Institute / organization must be located in a NATO Nation.\",\r\n disable: false,\r\n required: true\r\n },\r\n \"NPD Institute: City\": {\r\n //17\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactCity : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the town/city where the NATO country Project Director’s (NPD) Institute/organization is located. Please note that the Institute / organization must be located in a NATO Nation.\",\r\n disable: false,\r\n required: true\r\n },\r\n \"NPD Institute: Country\": {\r\n //18\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactCountry : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: ComboBox,\r\n title: \"Enter the country where the NATO country Project Director’s (NPD) Institute/organization is located. Please note that the Institute / organization must be located in a NATO Nation.\",\r\n disable: false,\r\n required: true\r\n },\r\n \"PPD title\": {\r\n //19\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactTitle : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: ComboBox,\r\n title: \"Enter the professional or honorary title of the lead Co-Director from a NATO Partner nation (Partner country Project Director - PPD) for this activity. This may or may not be the same User who fills out this application. There is one PPD per activity.The PPD shares responsibility and authority with the NPD for the overall technical management of the activity.\",\r\n disable: false,\r\n required: true\r\n },\r\n \"PPD first name\": {\r\n //20\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactFirstname : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the first name of the lead Co-Director from a NATO Partner nation (Partner country Project Director - PPD) for this activity. This may or may not be the same User who fills out this application. There is one PPD per activity.The PPD shares responsibility and authority with the NPD for the overall technical management of the activity.\",\r\n disable: false,\r\n required: true\r\n },\r\n \"PPD last name\": {\r\n //21\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactLastname : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the last name of the lead Co-Director from a NATO Partner nation (Partner country Project Director - PPD) for this activity. This may or may not be the same User who fills out this application. There is one PPD per activity.The PPD shares responsibility and authority with the NPD for the overall technical management of the activity.\",\r\n disable: false,\r\n required: true,\r\n },\r\n \"PPD nationality\": {\r\n //22\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactNationality : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: ComboBox,\r\n title: \"Please specify the Partner country Project Director’s (PPD) nationality. The PPD must be a national of, resident and employed in an eligible NATO Partner country.\",\r\n disable: false,\r\n required: true,\r\n },\r\n \"PPD office telephone number\": {\r\n //23\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactTelephoneNumber : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the Partner country Project Director's (PPD) telephone number at their Institute of affiliation, including international dialing code. Example: +3227481234\",\r\n disable: false,\r\n required: true,\r\n validator: (value) => { return FormValidator.validatePhoneNumber(value, true); }\r\n },\r\n \"PPD mobile telephone number\": {\r\n //24\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactMobileNumber : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the mobile telephone number of the Partner country Project Director (PPD), including international dialing code. Example: +32797123456\",\r\n disable: false,\r\n required: true,\r\n validator: (value) => { return FormValidator.validatePhoneNumber(value, true); }\r\n },\r\n \"PPD email address\": {\r\n //25\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactEmailAddress : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the Partner country Project Director's (PPD) professional email address at their Institute of affiliation.\",\r\n disable: false,\r\n required: true,\r\n validator: (value) => { return FormValidator.validateEmailAddress(value, true); }\r\n },\r\n \"PPD alternative email address\": {\r\n //26\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactAlternativeEmailAddress : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Please enter an alternative email address where the Partner country Project Director (PPD) may be reached if necessary.\",\r\n disable: false,\r\n required: false,\r\n validator: (value) => { return FormValidator.validateEmailAddress(value, true); }\r\n },\r\n \"PPD Institute\": {\r\n //27\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactInstitute : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the name of the Institute/organization to which the Partner country Project Director (PPD) is affiliated. Correspondence concerning this activity will be addressed to this Institute.Please note that the Institute / organization must be located in an eligible NATO Partner nation. Note that for-profit organizations are not eligible\",\r\n disable: false,\r\n required: true\r\n },\r\n \"PPD Institute: Faculty/Department\": {\r\n //28\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactDepartment : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"If applicable, please enter the name of the Faculty or Department to which the Partner country Project Director (PPD) is affiliated. Please note that the Institute / organization must be located in an eligible NATO Partner nation\",\r\n disable: false,\r\n required: false\r\n },\r\n \"PPD Institute: Street and number\": {\r\n //29\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactAddress : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the street and building number of the Partner country Project Director’s (PPD) Institute/organization. Please note that the Institute / organization must be located in an eligible NATO Partner nation\",\r\n disable: false,\r\n required: true\r\n },\r\n \"PPD Institute: ZIP code\": {\r\n //30\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactZipCode : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the ZIP code of the Partner country Project Director’s (PPD) Institute/organization. Please note that the Institute / organization must be located in an eligible NATO Partner nation\",\r\n disable: false,\r\n required: true\r\n },\r\n \"PPD Institute: City\": {\r\n //31\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactCity : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: TextField,\r\n title: \"Enter the town/city where the Partner country Project Director’s (PPD) Institute/organization is located. Please note that the Institute / organization must be located in an eligible NATO Partner nation\",\r\n disable: false,\r\n required: true\r\n },\r\n \"PPD Institute: Country\": {\r\n //32\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactCountry : \"\"; },\r\n objectMapping: \"\",\r\n fieldType: ComboBox,\r\n title: \"Enter the country where the Partner country Project Director’s institution is located. Please note that the Institute / organization must be located in an eligible NATO Partner nation\",\r\n disable: false,\r\n required: true\r\n }\r\n };\r\n this._formDataESC_OLD = {\r\n \"Lastname\": {\r\n value: () => { return (this._applicantDetails) ? this._applicantDetails.lastname : (this.state.currentUser != null && this.state.currentUser.lastname != null) ? \"\" + this.state.currentUser.lastname : \"\"; },\r\n objectMapping: \"lastname\",\r\n fieldType: TextField,\r\n title: \"Your lastname, familyname or surname.\",\r\n disable: true,\r\n required: false\r\n },\r\n \"Firstname\": {\r\n value: () => { return (this._applicantDetails) ? this._applicantDetails.firstname : (this.state.currentUser != null && this.state.currentUser.firstname != null) ? \"\" + this.state.currentUser.firstname : \"\"; },\r\n objectMapping: \"firstname\",\r\n fieldType: TextField,\r\n title: \"Your firstname.\",\r\n disable: true,\r\n required: false\r\n },\r\n \"Title\": {\r\n value: () => { return (this._applicantDetails) ? this._applicantDetails.title : (this.state.currentUser != null && this.state.currentUser.title != null) ? \"\" + this.state.currentUser.title : \"\"; },\r\n objectMapping: \"title\",\r\n fieldType: TextField,\r\n title: \"Your title (Mr./Mrs./Miss/...).\",\r\n disable: true,\r\n required: false\r\n },\r\n \"Professional e-mail address\": {\r\n value: () => { return (this._applicantDetails) ? this._applicantDetails.eMailAddress : (this.state.currentUser != null && this.state.currentUser.emailaddress != null) ? \"\" + this.state.currentUser.emailaddress : \"\"; },\r\n objectMapping: \"eMailAddress\",\r\n fieldType: TextField,\r\n title: \"The e-mail address we can use to contact you.\",\r\n disable: true,\r\n required: false,\r\n },\r\n \"Primary contact person\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactPerson : \"\"; },\r\n objectMapping: \"contactPerson\",\r\n fieldType: TextField,\r\n title: \"Enter the title, first and last name of the primary point of contact for this project. This may or may not be the same as the user account name.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"NATO Country Project Director address\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactAddress : \"\"; },\r\n objectMapping: \"contactAddress\",\r\n fieldType: TextField,\r\n title: \"Address, Street, Number, CIP and City.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"NATO Country Project Director country\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactCountry : \"\"; },\r\n objectMapping: \"contactCountry\",\r\n fieldType: ComboBox,\r\n title: \"NATO Country Project Director country.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"NATO Country Project Director nationality\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactNationality : \"\"; },\r\n objectMapping: \"contactNationality\",\r\n fieldType: ComboBox,\r\n title: \"NATO Country Project Director nationality.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Primary contact's telephone number\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactTelephoneNumber : \"\"; },\r\n objectMapping: \"contactTelephoneNumber\",\r\n fieldType: TextField,\r\n title: \"The NATO Country Project Director's telephone number. Example: +3227071234\",\r\n disable: true,\r\n required: true,\r\n validator: (value) => { return FormValidator.validatePhoneNumber(value, true); }\r\n },\r\n \"Primary contact's e-mail address\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactEmailAddress : \"\"; },\r\n objectMapping: \"contactEmailAddress\",\r\n fieldType: TextField,\r\n title: \"The contact person's e-mail address.\",\r\n disable: true,\r\n required: true,\r\n validator: (value) => { return FormValidator.validateEmailAddress(value, true); }\r\n },\r\n \"Organization name\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.organizationName : \"\"; },\r\n objectMapping: \"organizationName\",\r\n fieldType: TextField,\r\n title: \"The name of the organization.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Organization address (street and number)\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.organizationAddress : \"\"; },\r\n objectMapping: \"organizationAddress\",\r\n fieldType: TextField,\r\n title: \"Street name and number.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Organization postal code\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.organizationPostalCode : \"\"; },\r\n objectMapping: \"organizationPostalCode\",\r\n fieldType: TextField,\r\n title: \"Organization postal code.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Organization city\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.organizationCity : \"\"; },\r\n objectMapping: \"organizationCity\",\r\n fieldType: TextField,\r\n title: \"Organization city.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Organization country\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.organizationCountry : \"\"; },\r\n objectMapping: \"organizationCountry\",\r\n fieldType: ComboBox,\r\n title: \"Organization country.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Alternative contact person\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactPerson : \"\"; },\r\n objectMapping: \"alternativeContactPerson\",\r\n fieldType: TextField,\r\n title: \"The name of your organization's alternative contact person.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Partner Country Project Director address\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactAddress : \"\"; },\r\n objectMapping: \"alternativeContactAddress\",\r\n fieldType: TextField,\r\n title: \"Street/Number/CIP/CITY.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Partner Country Project Director country\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactCountry : \"\"; },\r\n objectMapping: \"alternativeContactCountry\",\r\n fieldType: ComboBox,\r\n title: \"Partner Country Project Director country.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Partner Country Project Director nationality\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactNationality : \"\"; },\r\n objectMapping: \"alternativeContactNationality\",\r\n fieldType: ComboBox,\r\n title: \"Partner Country Project Director nationality.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Applicant telephone number\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.telephoneNumber : \"\"; },\r\n objectMapping: \"telephoneNumber\",\r\n fieldType: TextField,\r\n title: \"The Partner Country Project Director's telephone number. Example: +3227071234\",\r\n disable: true,\r\n required: true,\r\n validator: (value) => { return FormValidator.validatePhoneNumber(value, true); }\r\n },\r\n \"Alternative contact's e-mail address\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactEmailAddress : \"\"; },\r\n objectMapping: \"alternativeContactEmailAddress\",\r\n fieldType: TextField,\r\n title: \"The e-mail address of your organization's alternative contact.\",\r\n disable: true,\r\n required: true,\r\n validator: (value) => { return FormValidator.validateEmailAddress(value, true); }\r\n },\r\n \"Partner Country Project Director institution name\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactOrganizationName : \"\"; },\r\n objectMapping: \"alternativeContactOrganizationName\",\r\n fieldType: TextField,\r\n title: \"The name of the organization of the Partner Country Project Director.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Partner Country Project Director institution country\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactOrganizationCountry : \"\"; },\r\n objectMapping: \"alternativeContactOrganizationCountry\",\r\n fieldType: ComboBox,\r\n title: \"Partner Country Project Director institution country.\",\r\n disable: true,\r\n required: true\r\n }\r\n };\r\n this._formDataPDD = {\r\n \"Lastname\": {\r\n value: () => { return (this._applicantDetails) ? this._applicantDetails.lastname : (this.state.currentUser != null && this.state.currentUser.lastname != null) ? \"\" + this.state.currentUser.lastname : \"\"; },\r\n objectMapping: \"lastname\",\r\n fieldType: TextField,\r\n title: \"Your lastname, familyname or surname.\",\r\n disable: true,\r\n required: false\r\n },\r\n \"Firstname\": {\r\n value: () => { return (this._applicantDetails) ? this._applicantDetails.firstname : (this.state.currentUser != null && this.state.currentUser.firstname != null) ? \"\" + this.state.currentUser.firstname : \"\"; },\r\n objectMapping: \"firstname\",\r\n fieldType: TextField,\r\n title: \"Your firstname.\",\r\n disable: true,\r\n required: false\r\n },\r\n \"Title\": {\r\n value: () => { return (this._applicantDetails) ? this._applicantDetails.title : (this.state.currentUser != null && this.state.currentUser.title != null) ? \"\" + this.state.currentUser.title : \"\"; },\r\n objectMapping: \"title\",\r\n fieldType: TextField,\r\n title: \"Your title (Mr./Mrs./Miss/...).\",\r\n disable: true,\r\n required: false\r\n },\r\n \"Professional e-mail address\": {\r\n value: () => { return (this._applicantDetails) ? this._applicantDetails.eMailAddress : (this.state.currentUser != null && this.state.currentUser.emailaddress != null) ? \"\" + this.state.currentUser.emailaddress : \"\"; },\r\n objectMapping: \"eMailAddress\",\r\n fieldType: TextField,\r\n title: \"The e-mail address we can use to contact you.\",\r\n disable: true,\r\n required: false,\r\n },\r\n \"Primary contact person\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactPerson : \"\"; },\r\n objectMapping: \"contactPerson\",\r\n fieldType: TextField,\r\n title: \"Enter the title, first and last name of the primary point of contact for this project. This may or may not be the same as the user account name.\",\r\n disable: true,\r\n required: false\r\n },\r\n \"Primary contact's e-mail address\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactEmailAddress : \"\"; },\r\n objectMapping: \"contactEmailAddress\",\r\n fieldType: TextField,\r\n title: \"The contact person's e-mail address.\",\r\n disable: true,\r\n required: false,\r\n validator: (value) => { return FormValidator.validateEmailAddress(value, true); }\r\n },\r\n \"Primary contact's telephone number\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.contactTelephoneNumber : \"\"; },\r\n objectMapping: \"contactTelephoneNumber\",\r\n fieldType: TextField,\r\n title: \"The contact person's telephone number. Example: +3227071234\",\r\n disable: true,\r\n required: true,\r\n validator: (value) => { return FormValidator.validatePhoneNumber(value, true); }\r\n },\r\n \"Alternative contact person\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactPerson : \"\"; },\r\n objectMapping: \"alternativeContactPerson\",\r\n fieldType: TextField,\r\n title: \"The name of your organization's alternative contact person.\",\r\n disable: true,\r\n required: false\r\n },\r\n \"Alternative contact's e-mail address\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.alternativeContactEmailAddress : \"\"; },\r\n objectMapping: \"alternativeContactEmailAddress\",\r\n fieldType: TextField,\r\n title: \"The e-mail address of your organization's alternative contact.\",\r\n disable: true,\r\n required: false,\r\n validator: (value) => { return FormValidator.validateEmailAddress(value, true); }\r\n },\r\n \"Applicant telephone number\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.telephoneNumber : \"\"; },\r\n objectMapping: \"telephoneNumber\",\r\n fieldType: TextField,\r\n title: \"Applicant telephone number. Example: +3227071234\",\r\n disable: true,\r\n required: this.props.publishedGrant.division == DivisionEnum.ESC,\r\n validator: (value) => { return FormValidator.validatePhoneNumber(value, true); }\r\n },\r\n \"Organization name\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.organizationName : \"\"; },\r\n objectMapping: \"organizationName\",\r\n fieldType: TextField,\r\n title: \"The name of the organization.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Organization address (street and number)\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.organizationAddress : \"\"; },\r\n objectMapping: \"organizationAddress\",\r\n fieldType: TextField,\r\n title: \"Street name and number.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Organization postal code\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.organizationPostalCode : \"\"; },\r\n objectMapping: \"organizationPostalCode\",\r\n fieldType: TextField,\r\n title: \"Organization postal code.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Organization city\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.organizationCity : \"\"; },\r\n objectMapping: \"organizationCity\",\r\n fieldType: TextField,\r\n title: \"Organization city.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Organization country\": {\r\n value: () => { return this._applicantDetails != null ? this._applicantDetails.organizationCountry : \"\"; },\r\n objectMapping: \"organizationCountry\",\r\n fieldType: ComboBox,\r\n title: \"Organization country.\",\r\n disable: true,\r\n required: true\r\n }\r\n };\r\n this._countryFields = new Set([\"NPD Institute: Country\", \"PPD Institute: Country\"]);\r\n this._nationalityFields = new Set([\"NPD nationality\", \"PPD nationality\"]);\r\n this._titleFields = new Set([\"NPD title\", \"PPD title\"]);\r\n this.showInvitationDialog = () => {\r\n this.setState({ hideInvitationDialog: false });\r\n };\r\n this.closeInvitationDialog = () => {\r\n this.setState({ hideInvitationDialog: true });\r\n };\r\n this.onInvite = () => {\r\n //Newly invited e-mail \r\n let invitedEmail = this._invitationEmail.value.trim();\r\n if (invitedEmail.length > 0 && FormValidator.isEmailAddress(invitedEmail, false)) {\r\n //If this application is not yet created, we need to save/create is first before we can continiue to send the invite.\r\n let currentApplication = this.props.application ? this.props.application : null;\r\n let savePromise = Promise.resolve(currentApplication);\r\n if (this._applicantDetails == null) {\r\n savePromise = new Promise((resolve, reject) => {\r\n this.Save().then(newApplicationId => {\r\n Application.getByIdWithFields(newApplicationId, new ApplicationFieldCollections(\"BASIC_AFTER_SAVE\")).then(application => {\r\n //Create a recursive waiting/polling function to wait until the correct permissions are set\r\n let waitForCorrectPermissions = () => {\r\n if (!application.hasUniqueRoleAssignments) {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n waitForCorrectPermissions().then(() => {\r\n resolve();\r\n });\r\n }, 10);\r\n });\r\n }\r\n else {\r\n return Promise.resolve();\r\n }\r\n };\r\n waitForCorrectPermissions().then(() => {\r\n resolve(application);\r\n });\r\n });\r\n });\r\n });\r\n }\r\n savePromise.then((application) => {\r\n this.setState({\r\n inviteDisabled: true,\r\n inviteIsBeingSent: true\r\n });\r\n //Start the Invite Others workflow\r\n let workflowName = \"Send Invitation\";\r\n let useJSOMToSetPermissions = true;\r\n let setPermissionsForInvitee;\r\n let wf = new WorkflowManager();\r\n //Build the URL for opening the grant application by the invitee\r\n let applicationURL = _spPageContextInfo.webAbsoluteUrl + \"?d=\" + this.props.publishedGrant.id + \"&a=\" + application.id;\r\n if (useJSOMToSetPermissions) {\r\n setPermissionsForInvitee = new Promise((resolve, reject) => {\r\n let ctx = SP.ClientContext.get_current();\r\n let applicationList = ctx.get_web().get_lists().getById(application.listId);\r\n let listItem = applicationList.getItemById(application.id);\r\n let roleAssignments = listItem.get_roleAssignments();\r\n let newRole = ctx.get_web().get_roleDefinitions().getByName(\"Contribute and Manage Permissions\");\r\n let invittee = ctx.get_web().get_siteUsers().getByEmail(invitedEmail);\r\n let userRoles = new SP.RoleDefinitionBindingCollection(ctx);\r\n userRoles.add(newRole);\r\n roleAssignments.add(invittee, userRoles);\r\n ctx.load(listItem);\r\n ctx.load(invittee);\r\n ctx.load(roleAssignments, \"Include(PrincipalId, Member, RoleDefinitionBindings)\");\r\n ctx.load(newRole);\r\n ctx.executeQueryAsync((sender, args) => {\r\n resolve(true);\r\n }, (sender, args) => {\r\n if (args.get_message().toLocaleLowerCase() == (\"User cannot be found.\").toLocaleLowerCase()) {\r\n resolve(false);\r\n }\r\n else {\r\n reject(args);\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n setPermissionsForInvitee = new Promise((resolve, reject) => {\r\n wf.StartWorklow(\"Grant Applications\", application.id, workflowName, { \"Recipient\": invitedEmail, \"ApplicationURL\": encodeURI(applicationURL) }, false).then(() => {\r\n resolve(true);\r\n });\r\n });\r\n }\r\n setPermissionsForInvitee.then((userFound) => {\r\n wf.StartWorklow(\"Grant Applications\", application.id, \"Notification\", { \"Type\": \"Invite\", \"Recipient\": invitedEmail, \"Comments\": encodeURI(applicationURL) }, true).then(() => {\r\n let invitedEmails = this.state.invitedEmails;\r\n invitedEmails.push({\r\n \"invitationEmail\": invitedEmail,\r\n \"inviterName\": this.state.currentUser.firstname + \" \" + this.state.currentUser.lastname,\r\n \"invitationDate\": new Date(Date.now())\r\n });\r\n this.setState({\r\n invitedEmails: invitedEmails,\r\n inviteIsBeingSent: false,\r\n hideInvitationDialog: true\r\n });\r\n this.SaveInvitationEmails().then((itemId) => {\r\n //console.log(\"Invitation sent & saved!\");\r\n });\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"Unable to start workflow: \" + reason, this, LogSeverityEnum.Error);\r\n this.setState({\r\n inviteDisabled: true,\r\n hideInvitationDialog: true\r\n });\r\n });\r\n }); //End-promise: Save application\r\n } //End-if: Valid e-mail address\r\n };\r\n this.getCommandItems = () => {\r\n return [\r\n {\r\n key: 'addRow',\r\n text: 'Insert row',\r\n iconProps: { iconName: 'Add' },\r\n onClick: this.showPCDDialog\r\n },\r\n {\r\n key: 'deleteRow',\r\n text: 'Delete row',\r\n iconProps: { iconName: 'Delete' },\r\n onClick: this.onDeletePCDRow\r\n }\r\n ];\r\n };\r\n this.showPCDDialog = () => {\r\n this.setState({ hidePCDDialog: false });\r\n };\r\n this.closePCDDialog = () => {\r\n this.setState({\r\n hidePCDDialog: true,\r\n dialogPCDFormData: {},\r\n savePCDDisabled: true\r\n });\r\n };\r\n this.onAddPCDRow = () => {\r\n if (!this.state.savePCDDisabled) {\r\n let dialogPCDData = this.state.dialogPCDFormData;\r\n let currentCodirectors = this.state.codirectors;\r\n currentCodirectors.push(dialogPCDData);\r\n this.setState({\r\n codirectors: currentCodirectors,\r\n hidePCDDialog: true,\r\n dialogPCDFormData: {},\r\n savePCDDisabled: true\r\n });\r\n }\r\n };\r\n this.onDeletePCDRow = () => {\r\n if (this._eventsSelection && this._eventsSelection.count > 0 && this.state.codirectors && this.state.codirectors.length > 0) {\r\n let selectedCodirectorsIndices = this._eventsSelection.getSelectedIndices();\r\n let currentCodirectorSelection = this.state.codirectors;\r\n selectedCodirectorsIndices.forEach((index) => {\r\n currentCodirectorSelection[index] = {};\r\n });\r\n currentCodirectorSelection = currentCodirectorSelection.filter(c => c.firstName && c.firstName.length > 0);\r\n this._eventsSelection.setAllSelected(false);\r\n this.setState({\r\n codirectors: currentCodirectorSelection\r\n });\r\n }\r\n /*if (this._eventsSelection) {\r\n let selectedEvents: number[] = this._eventsSelection.getSelectedIndices();\r\n \r\n if (this.state.eventItems && selectedEvents.length) {\r\n let result: any[] = [];\r\n \r\n this.state.eventItems.forEach((event: any, index: number) => {\r\n if (selectedEvents.indexOf(index) == -1) {\r\n result.push(event);\r\n }\r\n });\r\n \r\n let currentSelection: Selection = this._eventsSelection;\r\n currentSelection.setAllSelected(false);\r\n this._eventsSelection = currentSelection;\r\n \r\n this.setState({\r\n eventItems: result\r\n });\r\n }\r\n }*/\r\n };\r\n if (this.props.publishedGrant.division != null) {\r\n if (this.props.publishedGrant.division == DivisionEnum.ESC) {\r\n this._formData = this._formDataESC;\r\n }\r\n if (this.props.publishedGrant.division == DivisionEnum.PDD) {\r\n this._formData = this._formDataPDD;\r\n }\r\n }\r\n this.state = {\r\n currentUser: null,\r\n infoTextToDisplay: \"\",\r\n formData: this._formData,\r\n hideInvitationDialog: true,\r\n inviteDisabled: true,\r\n inviteIsBeingSent: false,\r\n invitedEmails: [],\r\n allowEdit: false,\r\n allowValidation: false,\r\n //eventItems: [],\r\n codirectors: [],\r\n //dialogPCDFormData: { \"name\": \"\", \"institution\": \"\", \"address\": \"\", \"country\": \"\", \"nationality\": \"\", \"email\": \"\", \"telephone\": \"\" },\r\n dialogPCDFormData: {},\r\n hidePCDDialog: true,\r\n savePCDDisabled: true\r\n };\r\n if (this.props.application != null) {\r\n this._applicantDetails = this.props.application.applicantDetails;\r\n }\r\n this.onFieldFocus = this.onFieldFocus.bind(this);\r\n this.onFieldBlur = this.onFieldBlur.bind(this);\r\n this.onFieldValueChange = this.onFieldValueChange.bind(this);\r\n }\r\n SetReadOnly(allowEdit) {\r\n if (this.state.allowEdit != allowEdit) {\r\n let updatedFormData = this.state.formData;\r\n //Update the 'disable' property of the fields, except for the first 4 fields.\r\n Object.keys(updatedFormData).slice(4).forEach(f => {\r\n updatedFormData[f].disable = !allowEdit;\r\n });\r\n this.setState({\r\n formData: updatedFormData,\r\n allowEdit: allowEdit\r\n });\r\n /*\r\n //updatedFormData[\"Country\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Organization name\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Primary contact person\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Primary contact's e-mail address\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Alternative contact person\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Alternative contact's e-mail address\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Primary contact's telephone number\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Applicant telephone number\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Organization address (street and number)\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Organization postal code\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Organization city\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Organization country\"][\"disable\"] = !allowEdit;\r\n //updatedFormData[\"Bank account holder\"][\"disable\"] = !allowEdit;\r\n //updatedFormData[\"IBAN number (bank account number)\"][\"disable\"] = !allowEdit;\r\n //updatedFormData[\"SWIFT code (sort code)\"][\"disable\"] = !allowEdit;\r\n //updatedFormData[\"ABA Code\"][\"disable\"] = !allowEdit;\r\n //updatedFormData[\"Bank Name\"][\"disable\"] = !allowEdit;\r\n\r\n if (this.props.publishedGrant.division == DivisionEnum.ESC) {\r\n updatedFormData[\"NATO Country Project Director address\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"NATO Country Project Director country\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"NATO Country Project Director nationality\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Partner Country Project Director address\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Partner Country Project Director country\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Partner Country Project Director nationality\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Partner Country Project Director institution name\"][\"disable\"] = !allowEdit;\r\n updatedFormData[\"Partner Country Project Director institution country\"][\"disable\"] = !allowEdit;\r\n }*/\r\n this.setState({\r\n formData: updatedFormData,\r\n allowEdit: allowEdit\r\n });\r\n }\r\n }\r\n //Executed just before the React component mounts\r\n componentWillMount() {\r\n LogMessage.Log(\"Wizard page 1 loaded\", this, LogSeverityEnum.Verbose);\r\n User.getCurrentUser().then((user) => {\r\n this.setState({\r\n currentUser: user\r\n });\r\n });\r\n //Parse the array of e-mails\r\n if (this._applicantDetails) {\r\n let invitedEmails = new Array();\r\n let invitedEmailsStr = this._applicantDetails.invitedEmails;\r\n if (invitedEmailsStr && invitedEmailsStr.length > 0) {\r\n invitedEmails = JSON.parse(invitedEmailsStr);\r\n this.setState({\r\n invitedEmails: invitedEmails\r\n });\r\n }\r\n }\r\n this._eventsSelection = new Selection();\r\n if (this._applicantDetails) {\r\n //Parse the array of events to Objects that can be used by the DetailsList\r\n let codirectorsStrValue = this._applicantDetails.projectCoDirectorsDetails;\r\n if (codirectorsStrValue && codirectorsStrValue.length > 0) {\r\n try {\r\n let projectCoDirectors = JSON.parse(codirectorsStrValue);\r\n if (projectCoDirectors && projectCoDirectors.length > 0) {\r\n this.setState({\r\n codirectors: projectCoDirectors\r\n });\r\n }\r\n }\r\n catch (ex) {\r\n }\r\n }\r\n /*\r\n let eventItems: { name: string, institution: string, address: string, country: string, nationality: string, email: string, telephone: string }[] = new Array();\r\n\r\n let eventsListStr: string = this._applicantDetails.projectCoDirectorsDetails;\r\n\r\n if (eventsListStr && eventsListStr.length) {\r\n eventItems = JSON.parse(eventsListStr);\r\n this.setState({\r\n eventItems: eventItems\r\n });\r\n }*/\r\n }\r\n }\r\n Validate(sumbit) {\r\n let allFieldsOk = true;\r\n this.setState({ allowValidation: true });\r\n //Loop over all fields and check if they have an errorMessage\r\n Object.keys(this._formData).forEach(fieldName => {\r\n let textField = this.refs[fieldName];\r\n if (textField) {\r\n let thisFieldOk = (fieldName.toLocaleLowerCase() == \"Organization country\".toLocaleLowerCase() ||\r\n fieldName.toLocaleLowerCase() == \"NATO Country Project Director country\".toLocaleLowerCase() ||\r\n fieldName.toLocaleLowerCase() == \"NATO Country Project Director nationality\".toLocaleLowerCase() ||\r\n fieldName.toLocaleLowerCase() == \"Partner Country Project Director country\".toLocaleLowerCase() ||\r\n fieldName.toLocaleLowerCase() == \"Partner Country Project Director nationality\".toLocaleLowerCase() ||\r\n fieldName.toLocaleLowerCase() == \"Partner Country Project Director institution country\".toLocaleLowerCase() ||\r\n (textField.state && (textField.state.errorMessage === \"\" || textField.state.errorMessage === undefined)));\r\n allFieldsOk = allFieldsOk && thisFieldOk;\r\n }\r\n });\r\n allFieldsOk = allFieldsOk && (this.validatePhoneField(\"Primary contact's telephone number\") == \"\");\r\n allFieldsOk = allFieldsOk && (this.validatePhoneField(\"Applicant telephone number\") == \"\");\r\n allFieldsOk = allFieldsOk && (this.validateCountryField(\"Organization country\") == \"\");\r\n if (this.props.publishedGrant.division == DivisionEnum.ESC) {\r\n allFieldsOk = allFieldsOk && (this.validateCountryField(\"NATO Country Project Director country\") == \"\");\r\n allFieldsOk = allFieldsOk && (this.validateCountryField(\"NATO Country Project Director nationality\") == \"\");\r\n allFieldsOk = allFieldsOk && (this.validateCountryField(\"Partner Country Project Director country\") == \"\");\r\n allFieldsOk = allFieldsOk && (this.validateCountryField(\"Partner Country Project Director nationality\") == \"\");\r\n allFieldsOk = allFieldsOk && (this.validateCountryField(\"Partner Country Project Director institution country\") == \"\");\r\n }\r\n return allFieldsOk;\r\n }\r\n validateCountryField(fieldName) {\r\n let selectedCountry = this.state.formData[fieldName].value();\r\n if (selectedCountry == null || selectedCountry == \"\") {\r\n return \"This field is required\";\r\n }\r\n return \"\";\r\n }\r\n validatePhoneField(fieldName) {\r\n let phone = this.state.formData[fieldName].value();\r\n if (!FormValidator.isPhoneNumber(phone, !this.state.formData[fieldName].required)) {\r\n return \"This field is required\";\r\n }\r\n return \"\";\r\n }\r\n Save() {\r\n //Map all values from the fields on this page to the object\r\n let data = null;\r\n if (this._applicantDetails == null) {\r\n data = new ApplicantDetails(null);\r\n data.division = this.props.publishedGrant.division;\r\n Object.keys(this._formData).forEach(fieldName => {\r\n //Retrieve the value from the field\r\n let value = this.state.formData[fieldName].value();\r\n //Get the name of the property of the ApplicantDetails that this field is mapped to\r\n let objectMapping = this.state.formData[fieldName].objectMapping;\r\n //Check if the name of the property indeed exists on the object\r\n let propertyDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(data), objectMapping);\r\n if (propertyDescriptor !== undefined && (typeof propertyDescriptor.set === \"function\")) {\r\n data[objectMapping] = value;\r\n }\r\n });\r\n data[\"projectCoDirectorsDetails\"] = \"\";\r\n //if (this.state.eventItems) {\r\n // data[\"projectCoDirectorsDetails\"] = JSON.stringify(this.state.eventItems);\r\n //}\r\n if (this.state.codirectors && this.state.codirectors.length > 0) {\r\n data[\"projectCoDirectorsDetails\"] = JSON.stringify(this.state.codirectors);\r\n }\r\n this._applicantDetails = data;\r\n }\r\n else {\r\n data = this._applicantDetails;\r\n Object.keys(this._formData).forEach(fieldName => {\r\n //Retrieve the value from the field\r\n let value = this.state.formData[fieldName].value();\r\n //Get the name of the property of the ApplicantDetails that this field is mapped to\r\n let objectMapping = this.state.formData[fieldName].objectMapping;\r\n //Check if the name of the property indeed exists on the object\r\n let propertyDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(data), objectMapping);\r\n if (propertyDescriptor !== undefined && (typeof propertyDescriptor.set === \"function\")) {\r\n data[objectMapping] = value;\r\n }\r\n });\r\n data[\"projectCoDirectorsDetails\"] = \"\";\r\n //if (this.state.eventItems) {\r\n // data[\"projectCoDirectorsDetails\"] = JSON.stringify(this.state.eventItems);\r\n //}\r\n if (this.state.codirectors && this.state.codirectors.length > 0) {\r\n data[\"projectCoDirectorsDetails\"] = JSON.stringify(this.state.codirectors);\r\n }\r\n }\r\n //The title is constructed from various other fields\r\n data.code = this.props.publishedGrant.code;\r\n data.itemTitle = (\"[\" + data.code + \"] \" + data.firstname + \" \" + data.lastname).substr(0, 255);\r\n //Update the ListItem\r\n return new Promise((resolve, reject) => {\r\n data.Update().then(details => {\r\n resolve(details.id);\r\n }).\r\n catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n SaveInvitationEmails() {\r\n let data = this._applicantDetails;\r\n //Serialize invited e-mails\r\n data[\"invitedEmails\"] = \"\";\r\n if (this.state.invitedEmails) {\r\n data[\"invitedEmails\"] = JSON.stringify(this.state.invitedEmails);\r\n }\r\n //Update the ListItem\r\n return new Promise((resolve, reject) => {\r\n data.UpdateInvitationEmails().then(details => {\r\n resolve(details.id);\r\n }).\r\n catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n onFieldFocus(ev) {\r\n //Retrieve the 'title'-property from the field and render it as helptext\r\n let text = \"\" + ev.currentTarget.title;\r\n this.setState({ infoTextToDisplay: text });\r\n }\r\n onFieldBlur(ev) {\r\n //Clear the helptext\r\n this.setState({ infoTextToDisplay: \"\" });\r\n }\r\n onFieldValueChange(fieldName, newValue) {\r\n //Get the field that was updated and set its value by creating an anonymous function that returns that value\r\n let field = this.state.formData[fieldName];\r\n if (field.fieldType == ComboBox) {\r\n newValue = newValue.key;\r\n }\r\n field.value = () => { return newValue; };\r\n //Update the current state\r\n let updatedFormData = this.state.formData;\r\n updatedFormData[fieldName] = field;\r\n this.setState({ formData: updatedFormData });\r\n }\r\n onDialogFieldValueChange(newValue) {\r\n let inviteButtonEnabled = FormValidator.isEmailAddress(newValue, false);\r\n this.setState({ inviteDisabled: !inviteButtonEnabled });\r\n }\r\n onDialogPCDFieldValueChange(fieldName, newValue) {\r\n let dialogPCDData = this.state.dialogPCDFormData;\r\n let property = fieldName;\r\n let value = newValue;\r\n if (newValue.key) {\r\n value = newValue.key;\r\n }\r\n dialogPCDData[property] = value.trim();\r\n let validateCodirectorData = (codirector) => {\r\n let requiredFields = ['title', 'firstName', 'lastName', 'nationality', 'telephone', 'mobile', 'email', /*'alternativeEmail',*/ 'institute', /*'department',*/ 'streetAndNumber', 'zipCode', 'city', 'country'];\r\n let isValid = Object.keys(codirector).length >= requiredFields.length && requiredFields.every(field => codirector[field] && codirector[field].length > 0) && FormValidator.isEmailAddress(dialogPCDData[\"email\"], false) && FormValidator.isPhoneNumber(dialogPCDData[\"telephone\"], false);\r\n return isValid;\r\n };\r\n let isValidCodirectorData = validateCodirectorData(dialogPCDData);\r\n this.setState({ dialogPCDFormData: dialogPCDData, savePCDDisabled: !isValidCodirectorData });\r\n }\r\n render() {\r\n let dynamicFields = (\r\n //Create a tablerow for every field\r\n Object.keys(this._formData).map((fieldName, index) => {\r\n let validator = this._formData[fieldName].validator;\r\n if (this._formData[fieldName].required) {\r\n validator = (value) => {\r\n if (!value || value == \"\") {\r\n return Promise.resolve(\"This field is required\");\r\n }\r\n else if (this._formData[fieldName].validator != null) {\r\n return this._formData[fieldName].validator(value);\r\n }\r\n return Promise.resolve(\"\");\r\n };\r\n }\r\n //Specific ComboBox (Countey) validator\r\n let errorMessageElement = null;\r\n let errorMessageText = \"\";\r\n let addErrorText = false;\r\n if (this.state.allowValidation) {\r\n if (fieldName.toLocaleLowerCase() == \"Organization country\".toLocaleLowerCase()) {\r\n errorMessageText = this.validateCountryField(\"Organization country\");\r\n addErrorText = true;\r\n }\r\n if (fieldName.toLocaleLowerCase() == \"NATO Country Project Director country\".toLocaleLowerCase()) {\r\n errorMessageText = this.validateCountryField(\"NATO Country Project Director country\");\r\n addErrorText = true;\r\n }\r\n if (fieldName.toLocaleLowerCase() == \"NATO Country Project Director nationality\".toLocaleLowerCase()) {\r\n errorMessageText = this.validateCountryField(\"NATO Country Project Director nationality\");\r\n addErrorText = true;\r\n }\r\n if (fieldName.toLocaleLowerCase() == \"Partner Country Project Director country\".toLocaleLowerCase()) {\r\n errorMessageText = this.validateCountryField(\"Partner Country Project Director country\");\r\n addErrorText = true;\r\n }\r\n if (fieldName.toLocaleLowerCase() == \"Partner Country Project Director nationality\".toLocaleLowerCase()) {\r\n errorMessageText = this.validateCountryField(\"Partner Country Project Director nationality\");\r\n addErrorText = true;\r\n }\r\n if (fieldName.toLocaleLowerCase() == \"Partner Country Project Director institution country\".toLocaleLowerCase()) {\r\n errorMessageText = this.validateCountryField(\"Partner Country Project Director institution country\");\r\n addErrorText = true;\r\n }\r\n if (addErrorText) {\r\n errorMessageElement = \r\n
\r\n

\r\n {errorMessageText}\r\n

\r\n
\r\n
;\r\n }\r\n }\r\n //The key is to use a capitalized variable name (DynamicTag) or else React will treat it as a built-in DOM element.\r\n //So DynamicTag is basically or \r\n const DynamicTag = this._formData[fieldName].fieldType;\r\n let fieldValue = this._formData[fieldName].value();\r\n let isCountryField = this._countryFields.has(fieldName)\r\n || fieldName.toLocaleLowerCase() == \"Organization country\".toLocaleLowerCase()\r\n || fieldName.toLocaleLowerCase() == \"NATO Country Project Director country\".toLocaleLowerCase()\r\n || fieldName.toLocaleLowerCase() == \"Partner Country Project Director country\".toLocaleLowerCase()\r\n || fieldName.toLocaleLowerCase() == \"Partner Country Project Director institution country\".toLocaleLowerCase();\r\n let isNationalityField = this._nationalityFields.has(fieldName)\r\n || fieldName.toLocaleLowerCase() == \"NATO Country Project Director nationality\".toLocaleLowerCase()\r\n || fieldName.toLocaleLowerCase() == \"Partner Country Project Director nationality\".toLocaleLowerCase();\r\n let isTitleField = this._titleFields.has(fieldName);\r\n let dynamicTag = ( { this.onFieldValueChange(fieldName, newValue); }} onFocus={this.onFieldFocus} onBlur={this.onFieldBlur} disabled={this._formData[fieldName].disable} required={this._formData[fieldName].required} onGetErrorMessage={validator} deferredValidationTime={validator ? 500 : 0} \r\n //ComboBox Props\r\n options={isCountryField ? Nations.asOptions() : (isNationalityField ? Nationalities.asOptions() : (isTitleField ? Titles.asOptions() : null))} allowFreeform={this._formData[fieldName].fieldType == ComboBox && isTitleField} selectedKey={this._formData[fieldName].fieldType == ComboBox ? fieldValue : null} caretDownButtonStyles={this._formData[fieldName].fieldType == ComboBox ? { root: { minWidth: \"0px\" } } : null} useComboBoxAsMenuWidth={this._formData[fieldName].fieldType == ComboBox ? true : null}/>);\r\n let fieldLabel = fieldName;\r\n if (this.props.publishedGrant.division == DivisionEnum.PDD && fieldLabel == \"Applicant telephone number\") {\r\n fieldLabel = \"Alternative contact telephone number\";\r\n }\r\n if (this.props.publishedGrant.division == DivisionEnum.ESC) {\r\n if (fieldLabel == \"Lastname\") {\r\n fieldLabel = \"User lastname\";\r\n }\r\n if (fieldLabel == \"Firstname\") {\r\n fieldLabel = \"User firstname\";\r\n }\r\n if (fieldLabel == \"Title\") {\r\n fieldLabel = \"User title\";\r\n }\r\n if (fieldLabel == \"Primary contact person\") {\r\n fieldLabel = \"NATO Country Project Director name, firstname\";\r\n }\r\n if (fieldLabel == \"Primary contact's telephone number\") {\r\n fieldLabel = \"NATO Country Project Director telephone number\";\r\n }\r\n if (fieldLabel == \"Primary contact's e-mail address\") {\r\n fieldLabel = \"NATO Country Project Director email address\";\r\n }\r\n if (fieldLabel == \"Organization name\") {\r\n fieldLabel = \"NATO Country Project Director institution name\";\r\n }\r\n if (fieldLabel == \"Alternative contact person\") {\r\n fieldLabel = \"Partner Country Project Director name, firstname\";\r\n }\r\n if (fieldLabel == \"Alternative contact's e-mail address\") {\r\n fieldLabel = \"Partner Country Project Director email address\";\r\n }\r\n if (fieldLabel == \"Applicant telephone number\") {\r\n fieldLabel = \"Partner Country Project Director telephone number\";\r\n }\r\n }\r\n return (\r\n \r\n \r\n {dynamicTag}\r\n {errorMessageElement}\r\n \r\n );\r\n }));\r\n //Parse the array of events to Objects that can be used by the DetailsList\r\n let columns = [\r\n { key: \"title\", name: \"Title\", fieldName: \"title\", minWidth: 50, isMultiline: true, data: 'string' },\r\n { key: \"firstName\", name: \"Firstname\", fieldName: \"firstName\", minWidth: 75, isMultiline: true, data: 'string' },\r\n { key: \"lastName\", name: \"Lastname\", fieldName: \"lastName\", minWidth: 75, isMultiline: true, data: 'string' },\r\n { key: \"nationality\", name: \"Nationality\", fieldName: \"nationality\", minWidth: 75, isMultiline: true, data: 'string' },\r\n { key: \"telephone\", name: \"Telephone\", fieldName: \"telephone\", minWidth: 75, isMultiline: true, data: 'string' },\r\n { key: \"email\", name: \"Email\", fieldName: \"email\", minWidth: 75, isMultiline: true, data: 'string' },\r\n { key: \"alternativeEmail\", name: \"Alternative Email\", fieldName: \"alternativeEmail\", minWidth: 75, isMultiline: true, data: 'string' },\r\n { key: \"institute\", name: \"Institute\", fieldName: \"institute\", minWidth: 75, isMultiline: true, data: 'string' },\r\n { key: \"department\", name: \"Department\", fieldName: \"department\", minWidth: 75, isMultiline: true, data: 'string' },\r\n { key: \"streetAndNumber\", name: \"Address\", fieldName: \"streetAndNumber\", minWidth: 75, isMultiline: true, data: 'string' },\r\n { key: \"zipCode\", name: \"Zipcode\", fieldName: \"zipCode\", minWidth: 75, isMultiline: true, data: 'string' },\r\n { key: \"city\", name: \"City\", fieldName: \"city\", minWidth: 75, isMultiline: true, data: 'string' },\r\n { key: \"country\", name: \"Country\", fieldName: \"country\", minWidth: 75, isMultiline: true, data: 'string' }\r\n ];\r\n let validationClass = this.state.allowValidation ? \"nato-validation\" : \"nato-no-validation\";\r\n //Put all the TableRows in a nice table\r\n let formTable = (\r\n \r\n {dynamicFields}\r\n {this.props.publishedGrant.division == DivisionEnum.ESC &&\r\n \r\n \r\n }\r\n \r\n
\r\n
\r\n Project Co Directors (only for Multi Years Projects):\r\n
\r\n
\r\n\r\n {this.state.allowEdit && }\r\n\r\n this._eventsControl = elm} items={this.state.codirectors} compact={false} columns={columns} selectionMode={SelectionMode.multiple} selection={this._eventsSelection} setKey='set' layoutMode={DetailsListLayoutMode.justified} isHeaderVisible={true} selectionPreservedOnEmptyClick={true} enterModalSelectionOnTouch={true} checkboxVisibility={CheckboxVisibility.onHover}/>\r\n
);\r\n //New event dialog\r\n let eventDialog = null;\r\n if (this.props.publishedGrant.division == DivisionEnum.ESC) {\r\n eventDialog = ();\r\n }\r\n let infoBlock = (this.state.infoTextToDisplay != \"\" &&
{this.state.infoTextToDisplay}
);\r\n //Invitation dialog\r\n let invitationHistory = \"\";\r\n if (this.state.invitedEmails.length > 0) {\r\n invitationHistory = \"Already invited e-mails:\";\r\n //Lets sort the invites, newest on top\r\n let sortableInvites = this.state.invitedEmails;\r\n sortableInvites = sortableInvites.sort((a, b) => { return (new Date(b.invitationDate)).getTime() - (new Date(a.invitationDate)).getTime(); });\r\n sortableInvites.forEach(invItem => {\r\n let invDate = new Date(invItem.invitationDate);\r\n let timestamp = (\"0\" + invDate.getDate()).slice(-2) + \".\" + (\"0\" + (invDate.getMonth() + 1)).slice(-2) + \".\" + invDate.getFullYear() + \" \" + (\"0\" + invDate.getHours()).slice(-2) + \":\" + (\"0\" + invDate.getMinutes()).slice(-2);\r\n invitationHistory = invitationHistory + \"
\" + invItem.invitationEmail + \" invited by \" + invItem.inviterName + \" on \" + timestamp;\r\n });\r\n }\r\n //Invitation dialog for both ESC and PDD\r\n let invitationDialog = null;\r\n if (this.props.publishedGrant.division == DivisionEnum.ESC || this.props.publishedGrant.division == DivisionEnum.PDD) {\r\n invitationDialog = (
\r\n \r\n\r\n
\r\n You may invite collegues or other persons to work with you on this application.\r\n
\r\n Note that only one person can edit this application at the same time and the application can only be submitted by the person who started the application.\r\n {this.props.publishedGrant.division == DivisionEnum.ESC &&
It is not necessary to invite (CO-)directors, you can add their details in the proceeding tabs.
}\r\n
\r\n\r\n \r\n
);\r\n }\r\n return ({eventDialog}
{formTable}{infoBlock}

{invitationDialog}
);\r\n }\r\n}\r\n//# sourceMappingURL=Wizard1ApplicantComponent.jsx.map","import { Component } from 'react';\r\nimport { User, ProjectDetails, LogMessage, LogSeverityEnum, DivisionEnum, Nations, SPUtil, KeyPrioritiesSelectorComponent } from \"../index\";\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { Dropdown } from 'office-ui-fabric-react/lib/Dropdown';\r\nimport { ComboBox } from 'office-ui-fabric-react/lib/ComboBox';\r\nimport { DatePicker } from 'office-ui-fabric-react/lib/DatePicker';\r\nexport class Wizard2ProjectDetailsComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this._formData = {\r\n \"Code\": {\r\n value: () => { return this.props.publishedGrant.code; },\r\n objectMapping: \"code\",\r\n fieldType: TextField,\r\n title: \"The code of the Speciall Call or Proposal.\",\r\n show: true,\r\n disable: true,\r\n required: false\r\n },\r\n \"Synopsis\": {\r\n value: () => { return this.props.publishedGrant.synopsis; },\r\n objectMapping: \"synopsis\",\r\n fieldType: TextField,\r\n title: \"The synopsis of the Speciall Call or Proposal.\",\r\n show: (this.props.publishedGrant.division == DivisionEnum.ESC),\r\n disable: true,\r\n required: false\r\n },\r\n \"Project type\": {\r\n value: () => { return (this.props.publishedGrant.projectType && this.props.publishedGrant.projectType != \"\") ? (this.props.publishedGrant.projectType == \"Co - Sponsorship (Grants)\" ? \"Co - Sponsorship\" : (this.props.publishedGrant.projectType == \"Call for proposal (Agreements)\" || this.props.publishedGrant.projectType == \"Call of Proposal (Agreements)\" ? \"Call for proposal\" : this.props.publishedGrant.projectType)) : (this._projectDetails != null && this._projectDetails.projectType != null ? this._projectDetails.projectType : \"\"); },\r\n objectMapping: \"projectType\",\r\n fieldType: Dropdown,\r\n title: \"Type of project.\",\r\n show: true,\r\n disable: true,\r\n required: true\r\n },\r\n \"Project title\": {\r\n value: () => { return this._projectDetails != null && this._projectDetails.projectDescription != null ? this._projectDetails.projectDescription : \"\"; },\r\n objectMapping: \"projectDescription\",\r\n fieldType: TextField,\r\n title: \"Please enter the title of your project.\",\r\n show: true,\r\n disable: true,\r\n required: true\r\n },\r\n \"Detailed description\": {\r\n value: () => { return this._projectDetails != null && this._projectDetails.projectDetailedDescription != null ? this._projectDetails.projectDetailedDescription : \"\"; },\r\n objectMapping: \"projectDetailedDescription\",\r\n fieldType: TextField,\r\n title: \"Provide an overview of your project aims, outputs and outcomes.\",\r\n show: (this.props.publishedGrant.division == DivisionEnum.PDD),\r\n disable: true,\r\n required: true\r\n },\r\n \"Target audience\": {\r\n value: () => { return this._projectDetails != null && this._projectDetails.projectTargetAudience != null ? this._projectDetails.projectTargetAudience : \"\"; },\r\n objectMapping: \"projectTargetAudience\",\r\n fieldType: TextField,\r\n title: \"Target audience.\",\r\n show: (this.props.publishedGrant.division == DivisionEnum.PDD),\r\n disable: true,\r\n required: (this.props.publishedGrant.division == DivisionEnum.ESC)\r\n },\r\n \"Number of participants\": {\r\n value: () => { return this._projectDetails != null && this._projectDetails.projectNumberOfParticipants != null ? this._projectDetails.projectNumberOfParticipants : \"\"; },\r\n objectMapping: \"projectNumberOfParticipants\",\r\n fieldType: TextField,\r\n title: \"Number of participants.\\nCould be an estimation and also split into different categories.\\nExample: 50 participants, 4 speakers, 5 students.\",\r\n show: (this.props.publishedGrant.division == DivisionEnum.PDD),\r\n disable: true,\r\n required: true\r\n },\r\n \"Location\": {\r\n value: () => { return this._projectDetails != null && this._projectDetails.projectLocation != null ? this._projectDetails.projectLocation : \"\"; },\r\n objectMapping: \"projectLocation\",\r\n fieldType: TextField,\r\n title: \"Location.\",\r\n show: (this.props.publishedGrant.division == DivisionEnum.PDD),\r\n disable: true,\r\n required: (this.props.publishedGrant.division == DivisionEnum.ESC)\r\n },\r\n \"City\": {\r\n value: () => { return this._projectDetails != null && this._projectDetails.projectCity != null ? this._projectDetails.projectCity : \"\"; },\r\n objectMapping: \"projectCity\",\r\n fieldType: TextField,\r\n title: \"Enter one or multiple cities, ‘online’, or ‘nationwide’ as appropriate.\",\r\n show: (this.props.publishedGrant.division == DivisionEnum.PDD),\r\n disable: true,\r\n required: true\r\n },\r\n \"Country\": {\r\n value: () => { return this._projectDetails != null && this._projectDetails.projectCountry != null ? this._projectDetails.projectCountry : \"\"; },\r\n objectMapping: \"projectCountry\",\r\n fieldType: ComboBox,\r\n title: \"Country.\",\r\n show: (this.props.publishedGrant.division == DivisionEnum.PDD),\r\n disable: true,\r\n required: true\r\n },\r\n \"Estimated start date\": {\r\n value: () => { return this._projectDetails != null && this._projectDetails.projectDate != null ? this._projectDetails.projectDate : null; },\r\n objectMapping: \"projectDate\",\r\n fieldType: DatePicker,\r\n title: (this.props.application.applicantDetails.division == DivisionEnum.ESC) ? \"Estimated start date.\\nShould be a minimum of 9 months after the application end date.\" : \"Estimated start date.\\nStart date and end date must be in the same fiscal year.\",\r\n show: true,\r\n disable: true,\r\n required: true,\r\n },\r\n \"Estimated end date\": {\r\n value: () => { return this._projectDetails != null && this._projectDetails.projectEndDate != null ? this._projectDetails.projectEndDate : null; },\r\n objectMapping: \"projectEndDate\",\r\n fieldType: DatePicker,\r\n title: (this.props.application.applicantDetails.division == DivisionEnum.ESC) ? \"Estimated end date.\" : \"Estimated end date.\\nStart date and end date must be in the same fiscal year.\",\r\n show: true,\r\n disable: true,\r\n required: true,\r\n },\r\n \"Institution name\": {\r\n value: () => { return this._projectDetails != null && this._projectDetails.projectInstitutionName != null ? this._projectDetails.projectInstitutionName : \"\"; },\r\n objectMapping: \"projectInstitutionName\",\r\n fieldType: TextField,\r\n title: \"Institution name.\",\r\n show: false,\r\n disable: true,\r\n required: true\r\n },\r\n //\"Amount\": {\r\n // value: () => { return this._projectDetails != null && this._projectDetails.projectAmount != null ? this._projectDetails.projectAmount : \"\" },\r\n // objectMapping: \"projectAmount\",\r\n // fieldType: TextField,\r\n // title: \"Project currency and amount. For example EUR 10000.\",\r\n // show: false,\r\n // disable: true,\r\n // required: true,\r\n // validator: (value: string) => { return FormValidator.validateCurrency(value, true) }\r\n //},\r\n \"Topic to be addressed\": {\r\n value: () => { return this._projectDetails != null && this._projectDetails.projectTopic != null ? this._projectDetails.projectTopic : \"\"; },\r\n objectMapping: \"projectTopic\",\r\n fieldType: TextField,\r\n title: (this.props.publishedGrant.division == DivisionEnum.ESC) ? \"Topic to be addressed.\" : \"Please enter the project themes and objectives, aligned with NATO's current agenda.\",\r\n show: true,\r\n disable: true,\r\n required: true\r\n },\r\n \"NATO representative, if known\": {\r\n value: () => { return this._projectDetails != null && this._projectDetails.projectRepresentative != null ? this._projectDetails.projectRepresentative : \"\"; },\r\n objectMapping: \"projectRepresentative\",\r\n fieldType: TextField,\r\n title: (this.props.publishedGrant.division == DivisionEnum.ESC) ? \"NATO representative, if known.\" : \"If you would like to request a speaker or other NATO representation, please enter the name (if known), role or proposed topic.\",\r\n show: (this.props.publishedGrant.division == DivisionEnum.PDD),\r\n disable: true,\r\n required: false\r\n }\r\n };\r\n if (this.props.application != null) {\r\n this._projectDetails = this.props.application.projectDetails;\r\n }\r\n //} else {\r\n // this._projectDetails = new ProjectDetails(null);\r\n //}\r\n this.onFieldFocus = this.onFieldFocus.bind(this);\r\n this.onFieldBlur = this.onFieldBlur.bind(this);\r\n this.onFieldValueChange = this.onFieldValueChange.bind(this);\r\n this.updateFieldVisibility = this.updateFieldVisibility.bind(this);\r\n //if (this.props.publishedGrant.division != null && this.props.publishedGrant.division != DivisionEnum.ESC) {\r\n // delete this._formData[\"Institution name\"];\r\n // delete this._formData[\"Synopsis\"];\r\n // delete this._formData[\"Amount\"];\r\n //}\r\n let currentProjectType = this._formData[\"Project type\"].value();\r\n //Check if this is a Multi-Year Project\r\n if (currentProjectType && currentProjectType.toString().toLocaleLowerCase() == \"Multi-Year Project (MYP)\".toLocaleLowerCase()) {\r\n //For MYPs, disable the startdate, enddate and amount fields\r\n //We modify the private this._formdata field just before we attach it to the state\r\n let planningFields = [\"Location\", \"Estimated start date\", \"Estimated end date\" /*, \"Amount\"*/];\r\n planningFields.forEach(fieldName => {\r\n this._formData[fieldName].disable = true;\r\n this._formData[fieldName].required = false;\r\n this._formData[fieldName].value = () => {\r\n switch (fieldName) {\r\n case \"Location\": {\r\n return \"\";\r\n }\r\n case \"Amount\": {\r\n return this.props.application.projectBudget.totalAmount ? this.props.application.projectBudget.budgetCurrency + \" \" + this.props.application.projectBudget.totalAmount : \"\";\r\n }\r\n case \"Estimated start date\": {\r\n return this.props.application.projectTimeline.minimumDate;\r\n }\r\n case \"Estimated end date\": {\r\n return this.props.application.projectTimeline.maximumDate;\r\n }\r\n default: {\r\n return this.props.application.projectDetails[this._formData[fieldName].objectMapping];\r\n }\r\n }\r\n };\r\n });\r\n }\r\n let minStartDate = null;\r\n let applicationEndDate = this.props.publishedGrant.endDate;\r\n if (this.props.application\r\n && this.props.application.applicantDetails\r\n && this.props.application.applicantDetails.division != null) {\r\n //For ESC only, the start date should be a minimum of 9 months after the end date of the application\r\n if (this.props.application.applicantDetails.division == DivisionEnum.ESC && applicationEndDate) {\r\n minStartDate = new Date(this.addMonths(applicationEndDate, 9));\r\n }\r\n else {\r\n minStartDate = new Date();\r\n }\r\n }\r\n this.state = {\r\n currentUser: null,\r\n infoTextToDisplay: \"\",\r\n allowEdit: false,\r\n allowValidation: false,\r\n formData: this._formData,\r\n minStartDate: minStartDate\r\n };\r\n }\r\n SetReadOnly(allowEdit) {\r\n if (this.state.allowEdit != allowEdit) {\r\n let projectTypeIsMultiYearProject = this.state.formData[\"Project type\"].value().toString().toLocaleLowerCase() == \"Multi-Year Project (MYP)\".toLocaleLowerCase();\r\n let projectTypeIsCoSponsorship = this.state.formData[\"Project type\"].value().toString().toLocaleLowerCase() == \"Co - Sponsorship\".toLocaleLowerCase();\r\n let projectTypeIsCallForProposal = this.state.formData[\"Project type\"].value().toString().toLocaleLowerCase() == \"Call for proposal\".toLocaleLowerCase();\r\n let updatedFormData = this.state.formData;\r\n updatedFormData[\"Project type\"].disable = !allowEdit || (this.props.publishedGrant.projectType && this.props.publishedGrant.projectType != \"\");\r\n updatedFormData[\"Project title\"].disable = !allowEdit;\r\n updatedFormData[\"Detailed description\"].disable = !allowEdit;\r\n updatedFormData[\"Location\"].disable = !allowEdit || projectTypeIsMultiYearProject;\r\n updatedFormData[\"City\"].disable = !allowEdit;\r\n updatedFormData[\"Country\"].disable = !allowEdit;\r\n updatedFormData[\"Target audience\"].disable = !allowEdit;\r\n updatedFormData[\"Number of participants\"].disable = !allowEdit;\r\n updatedFormData[\"Estimated start date\"].disable = !allowEdit || projectTypeIsMultiYearProject;\r\n updatedFormData[\"Estimated end date\"].disable = !allowEdit || projectTypeIsMultiYearProject;\r\n if (updatedFormData[\"Institution name\"]) {\r\n updatedFormData[\"Institution name\"].disable = !allowEdit;\r\n }\r\n if (updatedFormData[\"Amount\"]) {\r\n updatedFormData[\"Amount\"].disable = !allowEdit || projectTypeIsMultiYearProject || projectTypeIsCoSponsorship || projectTypeIsCallForProposal;\r\n }\r\n updatedFormData[\"Topic to be addressed\"].disable = !allowEdit;\r\n updatedFormData[\"NATO representative, if known\"].disable = !allowEdit;\r\n this.setState({\r\n formData: updatedFormData,\r\n allowEdit: allowEdit\r\n });\r\n }\r\n }\r\n // Show only the relevant fields\r\n updateFieldVisibility() {\r\n let divisionIsESC = (this.props.publishedGrant.division == DivisionEnum.ESC);\r\n let divisionIsPDD = (this.props.publishedGrant.division == DivisionEnum.PDD);\r\n let projectTypeLC = this.state.formData[\"Project type\"].value().toString().toLocaleLowerCase();\r\n let projectTypeIsESCMYP = (divisionIsESC && projectTypeLC == \"Multi-Year Project (MYP)\".toLocaleLowerCase());\r\n let projectTypeIsESCEvent = (divisionIsESC && (projectTypeLC == \"Advanced Training Course (ATC)\".toLocaleLowerCase() || projectTypeLC == \"Advanced Study Institute (ASI)\".toLocaleLowerCase() || projectTypeLC == \"Advanced Research Workshop (ARW)\".toLocaleLowerCase()));\r\n let updatedFormData = this.state.formData;\r\n updatedFormData[\"Detailed description\"].show = divisionIsPDD || projectTypeIsESCMYP || projectTypeIsESCEvent;\r\n updatedFormData[\"Location\"].show = divisionIsPDD || projectTypeIsESCEvent;\r\n updatedFormData[\"City\"].show = divisionIsPDD || projectTypeIsESCEvent;\r\n updatedFormData[\"Country\"].show = divisionIsPDD || projectTypeIsESCEvent;\r\n if (projectTypeIsESCMYP) {\r\n updatedFormData[\"Detailed description\"].title = \"Please provide an abstract of your proposal in 500 words or fewer.\";\r\n }\r\n if (projectTypeIsESCEvent) {\r\n updatedFormData[\"Detailed description\"].title = \"Please provide a description of the event and the need for it in details (500 words or less); how does it relate to SPS Key Priorities?\";\r\n }\r\n this.setState({\r\n formData: updatedFormData\r\n });\r\n }\r\n //Executed just before the React component mounts\r\n componentWillMount() {\r\n LogMessage.Log(\"Wizard page 2 (Project Details) loaded\", this, LogSeverityEnum.Verbose);\r\n User.getCurrentUser().then((user) => {\r\n this.setState({\r\n currentUser: user\r\n });\r\n });\r\n }\r\n componentDidMount() {\r\n let overrideDatePickerFocus = (datePickerElement) => {\r\n let originalFocusMethod = datePickerElement[\"_onTextFieldFocus\"];\r\n let newFocusMethod = () => {\r\n this.setState({ infoTextToDisplay: datePickerElement.props[\"title\"] });\r\n originalFocusMethod;\r\n };\r\n datePickerElement[\"_onTextFieldFocus\"] = newFocusMethod;\r\n };\r\n overrideDatePickerFocus(this.refs[\"Estimated start date\"]);\r\n overrideDatePickerFocus(this.refs[\"Estimated end date\"]);\r\n this.updateFieldVisibility();\r\n }\r\n Validate(submit) {\r\n let allFieldsOk = true;\r\n this.setState({ allowValidation: true });\r\n //Loop over all fields and check if they have an errorMessage\r\n Object.keys(this.state.formData).forEach(fieldName => {\r\n if (this.state.formData[fieldName].show) {\r\n let textField = this.refs[fieldName];\r\n if (textField) {\r\n let thisFieldOk = (fieldName.toLocaleLowerCase() == \"Country\".toLocaleLowerCase() ||\r\n (\"\" + textField.state.errorMessage).trim() == \"\" ||\r\n textField.state.errorMessage === undefined);\r\n //Some some odd reason, it the field was required to begin with, but we change the required to 'false' later on, the required-field-validator still fires\r\n //This is especially true or Location and Amount when the users switches to Multi-Year-Projects\r\n //So for those fields, we have an additional check\r\n if (textField.state && textField.state.errorMessage && textField.state.errorMessage.toLocaleLowerCase() == \"This field is required\".toLocaleLowerCase() && !this.state.formData[fieldName].required) {\r\n thisFieldOk = true;\r\n }\r\n allFieldsOk = allFieldsOk && thisFieldOk;\r\n }\r\n }\r\n });\r\n allFieldsOk = allFieldsOk && (this.validateDateFields() == \"\");\r\n allFieldsOk = allFieldsOk && (this.validateCountryField() == \"\");\r\n allFieldsOk = allFieldsOk && (this.validateProjectTypeField() == \"\");\r\n allFieldsOk = allFieldsOk && (this.validateKeyPrioritiesField() == \"\");\r\n allFieldsOk = allFieldsOk && (this.validateDetailedDescriptionField() == \"\");\r\n return allFieldsOk;\r\n }\r\n validateDateFields() {\r\n let startDate = this.state.formData[\"Estimated start date\"].value();\r\n let endDate = this.state.formData[\"Estimated end date\"].value();\r\n let applicationEndDate = this.props.publishedGrant.endDate;\r\n if (this.state.formData[\"Estimated start date\"].required && startDate == null) {\r\n return \"This field is required\";\r\n }\r\n if (this.state.formData[\"Estimated start date\"].required && endDate == null) {\r\n return \"This field is required\";\r\n }\r\n //The startdate cannot be before the enddate\r\n if (startDate && endDate && startDate > endDate) {\r\n return \"Start date should be before End date.\";\r\n }\r\n //For PDD only, the startdate and the enddate should be in the same fiscal year\r\n if (this.props.application.applicantDetails.division == DivisionEnum.PDD\r\n && startDate && endDate && startDate.getFullYear() != endDate.getFullYear()) {\r\n return \"Start date and end date for the project must be in the same fiscal year.\";\r\n }\r\n //For ESC only, the start date should be a minimum of 9 months after the end date of the application\r\n if (this.props.application.applicantDetails.division == DivisionEnum.ESC\r\n && this.state.formData[\"Estimated start date\"].disable == false\r\n && applicationEndDate\r\n && startDate < new Date(this.addMonths(applicationEndDate, 9))) {\r\n return \"Estimated start date should be a minimum of 9 months after the application end date.\";\r\n }\r\n return \"\";\r\n }\r\n validateKeyPrioritiesField() {\r\n if (this.props.publishedGrant.division != DivisionEnum.ESC)\r\n return \"\";\r\n let value = this.state.formData[\"Topic to be addressed\"].value();\r\n if (value == null || value == undefined || (\"\" + value).trim().length == 0) {\r\n return \"This field is required\";\r\n }\r\n return \"\";\r\n }\r\n addMonths(date, count) {\r\n if (date && count) {\r\n var m, d = (date = new Date(+date)).getDate();\r\n date.setMonth(date.getMonth() + count, 1);\r\n m = date.getMonth();\r\n date.setDate(d);\r\n if (date.getMonth() !== m)\r\n date.setDate(0);\r\n }\r\n return date;\r\n }\r\n validateCountryField() {\r\n let selectedCountry = this.state.formData[\"Country\"].value();\r\n if (this.state.formData[\"Country\"].show && (selectedCountry == null || selectedCountry == \"\")) {\r\n return \"This field is required\";\r\n }\r\n return \"\";\r\n }\r\n validateProjectTypeField() {\r\n let selectedProjectType = this.state.formData[\"Project type\"].value();\r\n if (selectedProjectType == null || selectedProjectType == \"\") {\r\n return \"This field is required\";\r\n }\r\n return \"\";\r\n }\r\n validateDetailedDescriptionField() {\r\n if (this.props.application.applicantDetails.division == DivisionEnum.ESC) {\r\n let wordCount = this.wordCount('' + this.state.formData[\"Detailed description\"].value());\r\n if (wordCount > 500)\r\n return \"This field is contains more than 500 words\";\r\n }\r\n return \"\";\r\n }\r\n Save() {\r\n //Map all values from the fields on this page to the object\r\n let data = null;\r\n if (this._projectDetails == null) {\r\n data = new ProjectDetails(null);\r\n Object.keys(this.state.formData).forEach(fieldName => {\r\n //Retrieve the value from the field\r\n let value = (this.state.formData[fieldName].show) ? this.state.formData[fieldName].value() : null;\r\n //Get the name of the property of the ApplicantDetails that this field is mapped to\r\n let objectMapping = this.state.formData[fieldName].objectMapping;\r\n //Check if the name of the property indeed exists on the object\r\n let propertyDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(data), objectMapping);\r\n if (propertyDescriptor !== undefined && (typeof propertyDescriptor.set === \"function\")) {\r\n data[objectMapping] = value;\r\n }\r\n });\r\n this._projectDetails = data;\r\n }\r\n else {\r\n data = this._projectDetails;\r\n Object.keys(this.state.formData).forEach(fieldName => {\r\n //Retrieve the value from the field\r\n let value = (this.state.formData[fieldName].show) ? this.state.formData[fieldName].value() : null;\r\n //Get the name of the property of the ApplicantDetails that this field is mapped to\r\n let objectMapping = this.state.formData[fieldName].objectMapping;\r\n //Check if the name of the property indeed exists on the object\r\n let propertyDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(data), objectMapping);\r\n if (propertyDescriptor !== undefined && (typeof propertyDescriptor.set === \"function\")) {\r\n data[objectMapping] = value;\r\n }\r\n });\r\n }\r\n //Update the ListItem\r\n return new Promise((resolve, reject) => {\r\n data.Update().then(details => {\r\n resolve(details.id);\r\n }).\r\n catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n wordCount(str) {\r\n let wordCount = 0;\r\n if (('' + str).trim() !== '') {\r\n const regexMatch = ('' + str).match(/[^\\S]\\S/gi);\r\n if (regexMatch) {\r\n wordCount = regexMatch.length + 1;\r\n }\r\n else if (!regexMatch) {\r\n wordCount = 1;\r\n }\r\n }\r\n return wordCount;\r\n }\r\n // React form for adding a new entry\r\n render() {\r\n let projectTypeOptions = (this.props.publishedGrant.division == DivisionEnum.ESC) ?\r\n [\r\n { key: 'Multi-Year Project (MYP)', text: 'Multi-Year Project (MYP)' },\r\n { key: 'Advanced Training Course (ATC)', text: 'Advanced Training Course (ATC)' },\r\n { key: 'Advanced Study Institute (ASI)', text: 'Advanced Study Institute (ASI)' },\r\n { key: 'Advanced Research Workshop (ARW)', text: 'Advanced Research Workshop (ARW)' }\r\n ] :\r\n [\r\n { key: 'Co - Sponsorship', text: 'Co - Sponsorship (Grants)' },\r\n { key: 'Call for proposal', text: 'Call for proposal (Agreements)' }\r\n ];\r\n let dynamicFields = (\r\n //Create a tablerow for every field\r\n Object.keys(this.state.formData).map((fieldName, index) => {\r\n if (this.state.formData[fieldName].show) {\r\n let validator = this.state.formData[fieldName].validator;\r\n if (this.state.formData[fieldName].required) {\r\n validator = (value) => {\r\n if (!value || value == \"\") {\r\n return Promise.resolve(\"This field is required\");\r\n }\r\n else if (this.state.formData[fieldName].validator != null) {\r\n return this.state.formData[fieldName].validator(value);\r\n }\r\n return Promise.resolve(\"\");\r\n };\r\n }\r\n //Specific Date validators\r\n let errorMessageElement = null;\r\n let errorMessageText = \"\";\r\n if (this.state.allowValidation) {\r\n if (fieldName.toLocaleLowerCase() == \"Estimated end date\".toLocaleLowerCase()) {\r\n errorMessageText = this.validateDateFields();\r\n }\r\n else if (fieldName.toLocaleLowerCase() == \"Country\".toLocaleLowerCase()) {\r\n errorMessageText = this.validateCountryField();\r\n }\r\n else if (fieldName.toLocaleLowerCase() == \"Project type\".toLocaleLowerCase()) {\r\n errorMessageText = this.validateProjectTypeField();\r\n }\r\n else if (fieldName == \"Topic to be addressed\" && this.props.publishedGrant.division == DivisionEnum.ESC) {\r\n errorMessageText = this.validateKeyPrioritiesField();\r\n }\r\n else if (fieldName == \"Detailed description\" && this.props.publishedGrant.division == DivisionEnum.ESC) {\r\n errorMessageText = this.validateDetailedDescriptionField();\r\n }\r\n if (errorMessageText != \"\") {\r\n errorMessageElement = \r\n
\r\n

\r\n {errorMessageText}\r\n

\r\n
\r\n
;\r\n }\r\n }\r\n let options = null;\r\n if (fieldName.toLocaleLowerCase() == \"Project type\".toLocaleLowerCase()) {\r\n options = projectTypeOptions;\r\n }\r\n else if (fieldName.toLocaleLowerCase() == \"Country\".toLocaleLowerCase()) {\r\n options = Nations.asOptions();\r\n }\r\n //The key is to use a capitalized variable name (DynamicTag) or else React will treat it as a built-in DOM element.\r\n //So DynamicTag is basically or \r\n const DynamicTag = this.state.formData[fieldName].fieldType;\r\n let fieldValue = this.state.formData[fieldName].value();\r\n let dynamicTag = ( { this.onFieldValueChange(fieldName, newValue); }} onFocus={this.onFieldFocus} onBlur={this.onFieldBlur} disabled={this.state.formData[fieldName].disable} required={this.state.formData[fieldName].required} onGetErrorMessage={validator} deferredValidationTime={validator ? 500 : 0} \r\n //Specifics for ProjectType DropDown\r\n options={options} selectedKey={this.state.formData[fieldName].fieldType == Dropdown || this.state.formData[fieldName].fieldType == ComboBox ? fieldValue : null} \r\n //Specifics for DatePickers\r\n onSelectDate={this.state.formData[fieldName].fieldType == DatePicker ? (newValue) => { this.onFieldValueChange(fieldName, newValue); } : null} minDate={this.state.formData[fieldName].fieldType == DatePicker ? this.state.minStartDate : null} className={(fieldName.toLocaleLowerCase() == \"Estimated end date\".toLocaleLowerCase() || fieldName.toLocaleLowerCase() == \"Country\".toLocaleLowerCase() || fieldName.toLocaleLowerCase() == \"Project type\".toLocaleLowerCase()) && errorMessageText != \"\" ? \"invalid-value\" : null} isRequired={this.state.formData[fieldName].required} disableAutoFocus={this.state.formData[fieldName].fieldType == DatePicker ? true : null} allowTextInput={this.state.formData[fieldName].fieldType == DatePicker ? true : null} parseDateFromString={this.state.formData[fieldName].fieldType == DatePicker ? SPUtil.parseDateFromString : null} \r\n //ComboBox Props\r\n caretDownButtonStyles={this.state.formData[fieldName].fieldType == ComboBox ? { root: { minWidth: \"0px\" } } : null} useComboBoxAsMenuWidth={this.state.formData[fieldName].fieldType == ComboBox ? true : null} \r\n //TextArea (multiline) props\r\n multiline={fieldName.toLocaleLowerCase() == \"Detailed description\".toLocaleLowerCase()} rows={fieldName.toLocaleLowerCase() == \"Detailed description\".toLocaleLowerCase() ? 10 : 1}/>);\r\n let fieldLabel = fieldName;\r\n if (this.props.publishedGrant.division == DivisionEnum.PDD) {\r\n if (fieldLabel == \"Amount\") {\r\n fieldLabel = \"Total amount requested from NATO\";\r\n }\r\n if (fieldLabel == \"Location\") {\r\n fieldLabel = \"Venue\";\r\n }\r\n if (fieldLabel == \"Topic to be addressed\") {\r\n fieldLabel = \"Project themes\";\r\n }\r\n if (fieldLabel == \"NATO representative, if known\") {\r\n fieldLabel = \"Requested NATO speaker\";\r\n }\r\n }\r\n if (this.props.publishedGrant.division == DivisionEnum.ESC) {\r\n let projectTypeLC = this.state.formData[\"Project type\"].value().toString().toLocaleLowerCase();\r\n let projectTypeIsESCMYP = (projectTypeLC == \"Multi-Year Project (MYP)\".toLocaleLowerCase());\r\n let projectTypeIsESCEvent = (projectTypeLC == \"Advanced Training Course (ATC)\".toLocaleLowerCase() || projectTypeLC == \"Advanced Study Institute (ASI)\".toLocaleLowerCase() || projectTypeLC == \"Advanced Research Workshop (ARW)\".toLocaleLowerCase());\r\n if (fieldLabel === \"Project type\") {\r\n fieldLabel = \"Activity type\";\r\n }\r\n if (fieldLabel === \"Project title\") {\r\n fieldLabel = \"Activity title\";\r\n }\r\n if (fieldLabel == \"Detailed description\" && projectTypeIsESCMYP) {\r\n fieldLabel = \"Abstract\";\r\n }\r\n if (fieldLabel == \"Detailed description\" && projectTypeIsESCEvent) {\r\n fieldLabel = \"Description and justification\";\r\n }\r\n if (fieldLabel == \"Location\" && projectTypeIsESCEvent) {\r\n fieldLabel = \"Event venue\";\r\n }\r\n if (fieldLabel == \"City\" && projectTypeIsESCEvent) {\r\n fieldLabel = \"Venue city\";\r\n }\r\n if (fieldLabel == \"Country\" && projectTypeIsESCEvent) {\r\n fieldLabel = \"Venue country\";\r\n }\r\n if (fieldName == \"Topic to be addressed\") {\r\n let selectedKeyPriorites = new Array();\r\n try {\r\n let selection = JSON.parse((\"\" + fieldValue).trim());\r\n selectedKeyPriorites = selection.map(kp => Number(kp._id));\r\n }\r\n catch (e) { }\r\n dynamicTag = {\r\n let encodedPriorities = keyPriorities.length > 0 ? JSON.stringify(keyPriorities) : \"\";\r\n this.onFieldValueChange(fieldName, encodedPriorities);\r\n }} required={this.state.formData[fieldName].required}/>;\r\n fieldLabel = \"SPS key priorities\";\r\n }\r\n }\r\n const wordCountEnabled = (fieldName.toLocaleLowerCase() === \"Detailed description\".toLocaleLowerCase() && this.props.publishedGrant.division == DivisionEnum.ESC);\r\n let wordCountLabel = undefined;\r\n if (wordCountEnabled) {\r\n let wordCount = this.wordCount(fieldValue);\r\n wordCountLabel = {`${wordCount} word(s)`};\r\n }\r\n return (\r\n \r\n \r\n {dynamicTag}\r\n {wordCountLabel}\r\n {errorMessageElement}\r\n \r\n );\r\n }\r\n else {\r\n return;\r\n }\r\n }));\r\n let validationClass = this.state.allowValidation ? \"nato-validation\" : \"nato-no-validation\";\r\n //Put all the TableRows in a nice table\r\n let formTable = (\r\n \r\n {dynamicFields}\r\n \r\n
);\r\n let infoBlock = (this.state.infoTextToDisplay != \"\" &&
{this.state.infoTextToDisplay.split('\\n').map((item, key) => { return {item}
; })}
);\r\n return ({formTable}{infoBlock});\r\n }\r\n onFieldFocus(ev) {\r\n //Retrieve the 'title'-property from the field and render it as helptext\r\n let text = \"\" + ev.currentTarget.title;\r\n this.setState({ infoTextToDisplay: text });\r\n }\r\n onFieldBlur(ev) {\r\n //Clear the helptext\r\n this.setState({ infoTextToDisplay: \"\" });\r\n }\r\n onFieldValueChange(fieldName, newValue) {\r\n //Get the field that was updated and set its value by creating an anonymous function that returns that value\r\n let field = this.state.formData[fieldName];\r\n if (field.fieldType == Dropdown || field.fieldType == ComboBox) {\r\n newValue = newValue.key;\r\n }\r\n field.value = () => { return newValue; };\r\n //Get the current state of all fields on this form\r\n let updatedFormData = this.state.formData;\r\n //Update the current state for the changed field\r\n updatedFormData[fieldName] = field;\r\n //If the applicant selected 'Multi-Year-Project (MYP)' for the ProjectType, then disable the startDate, endDate and amount as\r\n //the applicant should use the Work BreakDown Structure (WBS) on the next tab\r\n if (fieldName.toLocaleLowerCase() == \"Project type\".toLocaleLowerCase()) {\r\n if (this.props.publishedGrant.division == DivisionEnum.ESC) {\r\n let planningDetailsLocked = (newValue == \"Multi-Year Project (MYP)\");\r\n let planningFields = [\"Location\", \"Estimated start date\", \"Estimated end date\" /*, \"Amount\"*/];\r\n planningFields.forEach(fieldName => {\r\n updatedFormData[fieldName].disable = planningDetailsLocked;\r\n updatedFormData[fieldName].required = !planningDetailsLocked;\r\n updatedFormData[fieldName].value = planningDetailsLocked ?\r\n () => { return this.props.application.projectDetails[updatedFormData[fieldName].objectMapping]; } :\r\n updatedFormData[fieldName].value;\r\n });\r\n }\r\n this.updateFieldVisibility();\r\n }\r\n //Set the internal React state\r\n this.setState({ formData: updatedFormData });\r\n }\r\n setPlanningFieldsState(enabled) {\r\n }\r\n}\r\n//# sourceMappingURL=Wizard2ProjectDetailsComponent.jsx.map","import { Component } from 'react';\r\nimport { User, BudgetDetails, LogMessage, LogSeverityEnum, Nations, DivisionEnum } from \"../index\";\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { ComboBox } from 'office-ui-fabric-react/lib/ComboBox';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport { CheckboxVisibility, DetailsList, DetailsListLayoutMode, Selection, SelectionMode } from 'office-ui-fabric-react/lib/DetailsList';\r\nexport class Wizard3BudgetComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n // All templates\r\n this._templateKeys = [\r\n \"T-DI_NIAG_Grants\",\r\n \"T-DI_NIAG_STUDY_GROUP\",\r\n \"T-PDD_Grants\",\r\n \"T-PDD_Other_Programs\",\r\n \"Advanced Research Workshop (ARW)\",\r\n \"Advanced Study Institute (ASI)\",\r\n \"Advanced Training Course (ATC)\",\r\n \"Multi-Year Project (MYP)\"\r\n ];\r\n // SPS templates\r\n this._templateKeysSPS = [\r\n \"Advanced Research Workshop (ARW)\",\r\n \"Advanced Study Institute (ASI)\",\r\n \"Advanced Training Course (ATC)\",\r\n \"Multi-Year Project (MYP)\"\r\n ];\r\n // PDD templates\r\n this._templateKeysPDD = [\r\n \"Co - Sponsorship\",\r\n \"Call for proposal\",\r\n ];\r\n // DI templates\r\n this._templateKeysDI = [\r\n \"T-DI_NIAG_Grants\",\r\n \"T-DI_NIAG_STUDY_GROUP\",\r\n ];\r\n // Currencies\r\n this._currencies = [\r\n \"EUR\", \"GBP\", \"USD\", \"AED\", \"AFN\", \"AMD\", \"AUD\", \"AZN\", \"BAM\", \"BGN\", \"BRL\", \"BYN\", \"CAD\", \"CHF\", \"CLP\", \"CZK\", \"DJF\", \"DKK\", \"DZD\",\r\n \"EGP\", \"ETB\", \"GEL\", \"HKD\", \"HRK\", \"HUF\", \"ILS\", \"INR\", \"IQD\", \"ISK\", \"JOD\", \"JPY\", \"KGS\", \"KRW\", \"KWD\", \"KZT\", \"MAD\", \"MDL\", \"MKD\",\r\n \"MRO\", \"MRU\", \"MXN\", \"NOK\", \"NZD\", \"PKR\", \"PLN\", \"QAR\", \"RON\", \"RSD\", \"RUB\", \"SEK\", \"SGD\", \"THB\", \"TJS\", \"TND\", \"TRY\", \"UAH\", \"UZS\"\r\n ];\r\n this._asyncStateUpdateJob = -1;\r\n this._disableTemplateChange = true;\r\n if (this.props.application != null) {\r\n this._budgetDetails = this.props.application.projectBudget;\r\n if (this._budgetDetails != null) {\r\n this._templateName = this._budgetDetails.budgetBreakdownTemplate;\r\n this._currencyName = this._budgetDetails.budgetCurrency;\r\n }\r\n }\r\n else {\r\n this._budgetDetails = new BudgetDetails(null);\r\n }\r\n this.onFieldFocus = this.onFieldFocus.bind(this);\r\n this.onFieldBlur = this.onFieldBlur.bind(this);\r\n this.onFieldValueChange = this.onFieldValueChange.bind(this);\r\n this.onTemplateValueChanged = this.onTemplateValueChanged.bind(this);\r\n this.onCurrencyValueChanged = this.onCurrencyValueChanged.bind(this);\r\n this.onBudgetChange = this.onBudgetChange.bind(this);\r\n this.onBudgetTotalChange = this.onBudgetTotalChange.bind(this);\r\n this.onDescriptionChange = this.onDescriptionChange.bind(this);\r\n //this.onDirectorNameChange = this.onDirectorNameChange.bind(this);\r\n //this.onDirectorCountryChange = this.onDirectorCountryChange.bind(this);\r\n //this.onDirectorAddressChange = this.onDirectorAddressChange.bind(this);\r\n this.onChangeBudget = this.onChangeBudget.bind(this);\r\n this.onKeyPressInsideTable = this.onKeyPressInsideTable.bind(this);\r\n this.onKeyPressInsideDropDown = this.onKeyPressInsideDropDown.bind(this);\r\n //For ESC, the Currency must always be EUR\r\n this._currencyName = (this.props.publishedGrant.division == DivisionEnum.ESC) ? \"EUR\" : this._currencyName;\r\n this.state = {\r\n currentUser: null,\r\n infoTextToDisplay: ((this.props.publishedGrant.division == DivisionEnum.ESC) ?\r\n \"\"\r\n //\"\\n\\nMulti - Year Project(MYP)\\nThese are research and development projects related to NATO’s strategic goals and relevant to the SPS Key Priorities. The projects enable Partner country scientists to increase contacts in the NATO science community, while building a stronger science infrastructure in their home countries.\\nNote: Please enter addresses in format 'Street Housenumber, City, State'.\" +\r\n //\"\\n\\nAdvanced Training Course(ATC)\\nThis is a course designed to enable specialists in NATO countries to share their security-related expertise in one of the SPS Key Priority areas. An ATC is not intended to be lecture-driven, but to be intensive and interactive in nature. The course contributes to the training of experts in Partner countries and enables the formation and strengthening of international expert networks.\" +\r\n //\"\\n\\nAdvanced Study Institute(ASI)\\nThis is a high-level tutorial course offering the latest developments in a NATO-relevant subject to an advanced-level audience.\" +\r\n //\"\\n\\nAdvanced Research Workshop(ARW)\\nAdvanced-level discussions among experts from different countries with the aim of addressing contemporary security challenges.\"\r\n :\r\n \"For Budget Template 'Co-Sponsorship', enter the amounts requested from NATO in column 'NATO Amount'\\n\" +\r\n \"and the total cost expected for that Task/Expenditure Type in 'Total Amount'.\\n\\n\" +\r\n \"For Budget Template 'Call for proposal', enter the overall requested Amount from NATO in 'NATO Amount'.\"),\r\n budgetItems: [],\r\n saveDisabled: false,\r\n selectedTemplate: this._templateName,\r\n selectedCurrency: this._currencyName,\r\n allowEdit: false\r\n };\r\n }\r\n componentDidMount() {\r\n if (this.props.application\r\n && this.props.application.projectDetails\r\n && this.props.application.projectDetails.projectType\r\n && this.props.application.projectDetails.projectType != \"\"\r\n && this._templateName != this.props.application.projectDetails.projectType) {\r\n this.onTemplateValueChanged(null, null, this.props.application.projectDetails.projectType);\r\n //this._disableTemplateChange = true;\r\n }\r\n }\r\n onTemplateValueChanged(option, index, value) {\r\n this._templateName = (option) ? option.text : value;\r\n if (this.state.selectedTemplate != \"\") {\r\n // Warn and continue only after confirmation\r\n this.onChangeBudget();\r\n }\r\n else {\r\n // Apply without confirmation\r\n this.applyBudget();\r\n }\r\n }\r\n applyBudget() {\r\n let result = [];\r\n this.setState({ selectedTemplate: this._templateName });\r\n if (this._templateName == \"T-DI_NIAG_Grants\") {\r\n result.push({ \"taskNumber\": \"Milestone -1- 2018\", \"taskName\": \"Milestone -1- 2018\", \"description\": \"Milestone -1- 2018 Expenditure Incurred\", \"currency\": \"\", \"ammount\": \"\" });\r\n result.push({ \"taskNumber\": \"Milestone -2- 2018\", \"taskName\": \"Milestone -2- 2018\", \"description\": \"Milestone -2- 2018 Expenditure Incurred\", \"currency\": \"\", \"ammount\": \"\" });\r\n result.push({ \"taskNumber\": \"Milestone -3- 2018\", \"taskName\": \"Milestone -3- 2018\", \"description\": \"Milestone -3- 2018 Expenditure Incurred\", \"currency\": \"\", \"ammount\": \"\" });\r\n result.push({ \"taskNumber\": \"Milestone -4- 2018\", \"taskName\": \"Milestone -4- 2018\", \"description\": \"Milestone -4- 2018 Expenditure Incurred\", \"currency\": \"\", \"ammount\": \"\" });\r\n result.push({ \"taskNumber\": \"Milestone -1- 2019\", \"taskName\": \"Milestone -1- 2019\", \"description\": \"Milestone -1- 2019 Expenditure Incurred\", \"currency\": \"\", \"ammount\": \"\" });\r\n result.push({ \"taskNumber\": \"Milestone -2- 2019\", \"taskName\": \"Milestone -2- 2019\", \"description\": \"Milestone -2- 2019 Expenditure Incurred\", \"currency\": \"\", \"ammount\": \"\" });\r\n result.push({ \"taskNumber\": \"Milestone -3- 2019\", \"taskName\": \"Milestone -3- 2019\", \"description\": \"Milestone -3- 2019 Expenditure Incurred\", \"currency\": \"\", \"ammount\": \"\" });\r\n result.push({ \"taskNumber\": \"Milestone -4- 2019\", \"taskName\": \"Milestone -4- 2019\", \"description\": \"Milestone -4- 2019 Expenditure Incurred\", \"currency\": \"\", \"ammount\": \"\" });\r\n }\r\n else if (this._templateName == \"T-DI_NIAG_STUDY_GROUP\") {\r\n result.push({ \"taskNumber\": \"Milestone -1- 2018\", \"taskName\": \"Milestone -1- 2018\", \"description\": \"Milestone -1- 2018 Expenditure Incurred\", \"currency\": \"\", \"ammount\": \"\" });\r\n }\r\n else if (this._templateName == \"Co - Sponsorship\") {\r\n result.push({ \"taskNumber\": \"1 - Travel Exps Speakers\", \"taskName\": \"Travel Exps Speakers\", \"description\": \"\" /*\"Travel expenses speakers (excluding nato staff)\"*/, \"currency\": \"\", \"ammount\": \"\", \"amountTotal\": \"\" });\r\n result.push({ \"taskNumber\": \"2 - Travel Exps Partic\", \"taskName\": \"Travel Exps Partic\", \"description\": \"\" /*\"Travel expenses participants (excluding nato staff)\"*/, \"currency\": \"\", \"ammount\": \"\", \"amountTotal\": \"\" });\r\n result.push({ \"taskNumber\": \"3 - Meals Catering\", \"taskName\": \"Meals Catering\", \"description\": \"\" /*\"Meals / catering (the total cannot exceed 25% of the final nato contribution)\"*/, \"currency\": \"\", \"ammount\": \"\", \"amountTotal\": \"\" });\r\n result.push({ \"taskNumber\": \"4 - Rentals\", \"taskName\": \"Rentals\", \"description\": \"\" /*\"Rentals (provided and invoiced by a third party)\"*/, \"currency\": \"\", \"ammount\": \"\", \"amountTotal\": \"\" });\r\n result.push({ \"taskNumber\": \"5 - Linguistic Services\", \"taskName\": \"Linguistic Services\", \"description\": \"\" /*\"Linguistic services (provided and invoiced by a third party)\"*/, \"currency\": \"\", \"ammount\": \"\", \"amountTotal\": \"\" });\r\n result.push({ \"taskNumber\": \"6 - Deliverables\", \"taskName\": \"Deliverables\", \"description\": \"\" /*\"Deliverables (provided by the grantee. detailed description required)\"*/, \"currency\": \"\", \"ammount\": \"\", \"amountTotal\": \"\" });\r\n result.push({ \"taskNumber\": \"7 - Other 3rd party\", \"taskName\": \"Other 3rd party\", \"description\": \"\" /*\"Other (provided and invoiced by a third party. description required)\"*/, \"currency\": \"\", \"ammount\": \"\", \"amountTotal\": \"\" });\r\n result.push({ \"taskNumber\": \"8 - Org Expenses\", \"taskName\": \"Org Expenses\", \"description\": \"\" /*\"Organizational expenses/overhead (provided by the grantee)\"*/, \"currency\": \"\", \"ammount\": \"\", \"amountTotal\": \"\" });\r\n }\r\n else if (this._templateName == \"Call for proposal\") {\r\n result.push({ \"taskNumber\": \"Budget – Payment\", \"taskName\": \"Budget – Payment\", \"description\": \"\" /*\"Travel expenses speakers (excluding nato staff)\"*/, \"currency\": \"\", \"ammount\": \"\" });\r\n }\r\n else if (this._templateName == \"Advanced Research Workshop (ARW)\") {\r\n result.push({ \"taskNumber\": \"Budget Amount\", \"taskName\": \"Budget Amount\", \"description\": \"Budget Amount\", \"currency\": \"\", \"ammount\": \"\" });\r\n }\r\n else if (this._templateName == \"Advanced Study Institute (ASI)\") {\r\n result.push({ \"taskNumber\": \"Budget Amount\", \"taskName\": \"Budget Amount\", \"description\": \"Budget Amount\", \"currency\": \"\", \"ammount\": \"\" });\r\n }\r\n else if (this._templateName == \"Advanced Training Course (ATC)\") {\r\n result.push({ \"taskNumber\": \"Budget Amount\", \"taskName\": \"Budget Amount\", \"description\": \"Budget Amount\", \"currency\": \"\", \"ammount\": \"\" });\r\n }\r\n else if (this._templateName == \"Multi-Year Project (MYP)\") {\r\n result.push({ \"taskNumber\": \"M1-NPD\", \"taskName\": \"M1-NPD\", \"description\": \"M1-NATO Country Director\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M1-PPD\", \"taskName\": \"M1-PPD\", \"description\": \"M1-NATO M1-Partner Country Director\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M1-PCD1\", \"taskName\": \"M1-PCD1\", \"description\": \"M1-Project Co-Director1\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M1-PCD2\", \"taskName\": \"M1-PCD2\", \"description\": \"M1-Project Co-Director2\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M1-PCD3\", \"taskName\": \"M1-PCD3\", \"description\": \"M1-Project Co-Director3\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M1-PCD4\", \"taskName\": \"M1-PCD4\", \"description\": \"M1-Project Co-Director4\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M1-PCD5\", \"taskName\": \"M1-PCD5\", \"description\": \"M1-Project Co-Director5\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M1-PCD6\", \"taskName\": \"M1-PCD6\", \"description\": \"M1-Project Co-Director6\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M1-PCD7\", \"taskName\": \"M1-PCD7\", \"description\": \"M1-Project Co-Director7\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M2-NPD\", \"taskName\": \"M2-NPD\", \"description\": \"M2-NATO Country Director\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M2-PPD\", \"taskName\": \"M2-PPD\", \"description\": \"M2-NATO M2-Partner Country Director\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M2-PCD1\", \"taskName\": \"M2-PCD1\", \"description\": \"M2-Project Co-Director1\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M2-PCD2\", \"taskName\": \"M2-PCD2\", \"description\": \"M2-Project Co-Director2\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M2-PCD3\", \"taskName\": \"M2-PCD3\", \"description\": \"M2-Project Co-Director3\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M2-PCD4\", \"taskName\": \"M2-PCD4\", \"description\": \"M2-Project Co-Director4\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M2-PCD5\", \"taskName\": \"M2-PCD5\", \"description\": \"M2-Project Co-Director5\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M2-PCD6\", \"taskName\": \"M2-PCD6\", \"description\": \"M2-Project Co-Director6\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M2-PCD7\", \"taskName\": \"M2-PCD7\", \"description\": \"M2-Project Co-Director7\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M3-NPD\", \"taskName\": \"M3-NPD\", \"description\": \"M3-NATO Country Director\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M3-PPD\", \"taskName\": \"M3-PPD\", \"description\": \"M3-NATO M3-Partner Country Director\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M3-PCD1\", \"taskName\": \"M3-PCD1\", \"description\": \"M3-Project Co-Director1\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M3-PCD2\", \"taskName\": \"M3-PCD2\", \"description\": \"M3-Project Co-Director2\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M3-PCD3\", \"taskName\": \"M3-PCD3\", \"description\": \"M3-Project Co-Director3\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M3-PCD4\", \"taskName\": \"M3-PCD4\", \"description\": \"M3-Project Co-Director4\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M3-PCD5\", \"taskName\": \"M3-PCD5\", \"description\": \"M3-Project Co-Director5\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M3-PCD6\", \"taskName\": \"M3-PCD6\", \"description\": \"M3-Project Co-Director6\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M3-PCD7\", \"taskName\": \"M3-PCD7\", \"description\": \"M3-Project Co-Director7\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M4-NPD\", \"taskName\": \"M4-NPD\", \"description\": \"M4-NATO Country Director\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M4-PPD\", \"taskName\": \"M4-PPD\", \"description\": \"M4-NATO M4-Partner Country Director\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M4-PCD1\", \"taskName\": \"M4-PCD1\", \"description\": \"M4-Project Co-Director1\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M4-PCD2\", \"taskName\": \"M4-PCD2\", \"description\": \"M4-Project Co-Director2\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M4-PCD3\", \"taskName\": \"M4-PCD3\", \"description\": \"M4-Project Co-Director3\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M4-PCD4\", \"taskName\": \"M4-PCD4\", \"description\": \"M4-Project Co-Director4\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M4-PCD5\", \"taskName\": \"M4-PCD5\", \"description\": \"M4-Project Co-Director5\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M4-PCD6\", \"taskName\": \"M4-PCD6\", \"description\": \"M4-Project Co-Director6\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"M4-PCD7\", \"taskName\": \"M4-PCD7\", \"description\": \"M4-Project Co-Director7\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"MF-NPD\", \"taskName\": \"MF-NPD\", \"description\": \"MF-NATO Country Director\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"MF-PPD\", \"taskName\": \"MF-PPD\", \"description\": \"MF-NATO MF-Partner Country Director\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"MF-PCD1\", \"taskName\": \"MF-PCD1\", \"description\": \"MF-Project Co-Director1\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"MF-PCD2\", \"taskName\": \"MF-PCD2\", \"description\": \"MF-Project Co-Director2\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"MF-PCD3\", \"taskName\": \"MF-PCD3\", \"description\": \"MF-Project Co-Director3\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"MF-PCD4\", \"taskName\": \"MF-PCD4\", \"description\": \"MF-Project Co-Director4\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"MF-PCD5\", \"taskName\": \"MF-PCD5\", \"description\": \"MF-Project Co-Director5\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"MF-PCD6\", \"taskName\": \"MF-PCD6\", \"description\": \"MF-Project Co-Director6\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n result.push({ \"taskNumber\": \"MF-PCD7\", \"taskName\": \"MF-PCD7\", \"description\": \"MF-Project Co-Director7\", \"currency\": \"\", \"ammount\": \"\" /*, \"directorName\": \"\", \"directorCountry\": \"\"*/ });\r\n }\r\n this._budgetSelection.setAllSelected(false);\r\n this.setState({\r\n budgetItems: result\r\n });\r\n if (this.state.selectedCurrency != \"\") {\r\n this.applyCurrency(this.state.selectedCurrency, result);\r\n }\r\n }\r\n //Executed just before the React component mounts\r\n componentWillMount() {\r\n LogMessage.Log(\"Wizard page 3 (Budget) loaded\", this, LogSeverityEnum.Verbose);\r\n User.getCurrentUser().then((user) => {\r\n this.setState({\r\n currentUser: user\r\n });\r\n });\r\n // Initilize the selections for all 5 milestones\r\n this._budgetSelection = new Selection();\r\n this.loadData();\r\n }\r\n loadData() {\r\n // Load the data into the tables\r\n if (this._budgetDetails) {\r\n // Get the JSON data for all milestones\r\n let budgetDetailsList = this._budgetDetails.budgetBreakdown;\r\n if (budgetDetailsList && budgetDetailsList.length) {\r\n let budgetItems = JSON.parse(budgetDetailsList);\r\n this.setState({\r\n budgetItems: budgetItems\r\n });\r\n }\r\n }\r\n }\r\n Validate(submit) {\r\n let allFieldsOk = true;\r\n return allFieldsOk;\r\n }\r\n get totalAmount() {\r\n let sumAmount = this.state.budgetItems.reduce((sum, budgetItem) => {\r\n if (budgetItem && budgetItem.ammount) {\r\n let amount = Number(budgetItem.ammount);\r\n if (!isNaN(amount)) {\r\n return sum + amount;\r\n }\r\n }\r\n return sum;\r\n }, 0);\r\n return sumAmount;\r\n }\r\n Save() {\r\n if (this._budgetDetails == null) {\r\n this._budgetDetails = new BudgetDetails(null);\r\n }\r\n //Map all values from the fields on this page to the object\r\n let data = this._budgetDetails;\r\n // The WBS JSON\r\n if (this.state.budgetItems.length) {\r\n data[\"budgetBreakdown\"] = JSON.stringify(this.state.budgetItems);\r\n }\r\n data.budgetBreakdownTemplate = this._templateName;\r\n data.budgetCurrency = this._currencyName;\r\n data.totalAmount = this.totalAmount;\r\n return new Promise((resolve, reject) => {\r\n data.Update().then(details => {\r\n resolve(details.id);\r\n }).\r\n catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n onFieldFocus(ev) {\r\n //Retrieve the 'title'-property from the field and render it as helptext\r\n let text = \"\" + ev.currentTarget.title;\r\n this.setState({ infoTextToDisplay: text });\r\n }\r\n onFieldBlur(ev) {\r\n //Clear the helptext\r\n this.setState({ infoTextToDisplay: \"\" });\r\n }\r\n onFieldValueChange(fieldName, newValue) {\r\n }\r\n onAddFieldValueChange() {\r\n }\r\n onKeyPressInsideDropDown(event) {\r\n this.moveFocusInsideTable(event, event.target);\r\n }\r\n onKeyPressInsideTable(event) {\r\n this.moveFocusInsideTable(event, event.currentTarget);\r\n }\r\n moveFocusInsideTable(event, target) {\r\n let direction = \"STAY\";\r\n if (event.keyCode == 9 && event.shiftKey) { //9=tab\r\n direction = \"LEFT\";\r\n }\r\n else if (event.keyCode == 9) { //9=tab\r\n direction = \"RIGHT\";\r\n }\r\n if (direction != \"STAY\") {\r\n event.preventDefault();\r\n //Get a hold of the Budget Breakdown Table\r\n let parentTable = target.parentElement;\r\n while (parentTable.className.indexOf(\"nato-wizardformtable\") < 0) {\r\n parentTable = parentTable.parentElement;\r\n }\r\n //Find the next (or previous) INPUT element relative to the event target\r\n let allInputsInTable = parentTable.getElementsByTagName(\"INPUT\");\r\n let newElementToFocus = null;\r\n for (let i = 0; i < allInputsInTable.length; i++) {\r\n if (allInputsInTable[i] == target && direction == \"LEFT\" && i > 0) {\r\n newElementToFocus = allInputsInTable[i - 1];\r\n i = allInputsInTable.length;\r\n }\r\n else if (allInputsInTable[i] == target && direction == \"RIGHT\" && i < allInputsInTable.length - 1) {\r\n newElementToFocus = allInputsInTable[i + 1];\r\n i = allInputsInTable.length;\r\n }\r\n }\r\n if (newElementToFocus != null) {\r\n let parentRow = newElementToFocus.parentElement;\r\n while (!(parentRow.hasAttribute(\"data-automationid\") && parentRow.getAttribute(\"data-automationid\").toLocaleLowerCase() == \"detailsrow\")) {\r\n parentRow = parentRow.parentElement;\r\n }\r\n let selectedIndex = Number(parentRow.getAttribute(\"data-selection-index\"));\r\n this._budgetSelection.getSelectedIndices().filter(index => {\r\n return index != selectedIndex;\r\n }).forEach(index => {\r\n this._budgetSelection.setIndexSelected(index, false, false);\r\n });\r\n this._budgetSelection.setIndexSelected(selectedIndex, true, true);\r\n newElementToFocus.focus();\r\n }\r\n }\r\n }\r\n // React form for adding a new entry\r\n render() {\r\n //Delegate function to transform a list of (textual) options to an object that can be displayed as option in a DropDown or Select-box\r\n let arrayToOptions = (arr) => {\r\n let options = arr.reduce((map, val) => {\r\n map.push({ key: val, text: val, styles: { optionText: { whiteSpace: \"normal\" } } });\r\n return map;\r\n }, []);\r\n return options;\r\n };\r\n let countryOptions = arrayToOptions(Nations.List);\r\n let columns = [\r\n { key: \"col_task_nr\", name: \"Task Number\", fieldName: \"taskNumber\", minWidth: 150, isMultiline: false },\r\n { key: \"col_name\", name: \"Task Name\", fieldName: \"taskName\", minWidth: 200, isMultiline: false },\r\n {\r\n key: \"col_descrption\",\r\n name: \"Description\",\r\n fieldName: \"description\",\r\n minWidth: 250,\r\n isMultiline: true,\r\n onRender: (item) => {\r\n return ;\r\n }\r\n },\r\n {\r\n key: \"col_ammount\",\r\n name: (this.props.publishedGrant.division == DivisionEnum.ESC) ? \"Amount\" : \"NATO Amount\",\r\n fieldName: \"ammount\",\r\n minWidth: 100,\r\n isMultiline: false,\r\n onRender: (item) => {\r\n return ;\r\n }\r\n }\r\n ];\r\n // Add additional amount column for the Co - Sponsorship template type\r\n if (this._templateName == \"Co - Sponsorship\") {\r\n columns.push({\r\n key: \"col_amountTotal\",\r\n name: \"Total Amount\",\r\n fieldName: \"amountTotal\",\r\n minWidth: 100,\r\n isMultiline: false,\r\n onRender: (item) => {\r\n return ;\r\n }\r\n });\r\n }\r\n columns.push({ key: \"col_currency\", name: \"Currency\", fieldName: \"currency\", minWidth: 60, isMultiline: false });\r\n // Add three additional columns for the Multi-Year Project (MYP) template type\r\n /*if (this._templateName == \"Multi-Year Project (MYP)\") {\r\n columns.push({\r\n key: \"col_directorName\",\r\n name: \"Director Name\",\r\n fieldName: \"directorName\",\r\n minWidth: 150,\r\n isMultiline: true,\r\n onRender: (item: IDocument) => {\r\n return \r\n }\r\n });\r\n\r\n columns.push({\r\n key: \"col_directorCountry\",\r\n name: \"Director Country\",\r\n fieldName: \"directorCountry\",\r\n minWidth: 150,\r\n isMultiline: true,\r\n onRender: (item: IDocument) => {\r\n return {\r\n let target: EventTarget = (e.target as EventTarget)\r\n target.addEventListener(\"keydown\", this.onKeyPressInsideDropDown);\r\n }}\r\n />\r\n }\r\n });\r\n\r\n columns.push({\r\n key: \"col_directorAddress\",\r\n name: \"Director Address\",\r\n fieldName: \"directorAddress\",\r\n minWidth: 150,\r\n isMultiline: true,\r\n onRender: (item: IDocument) => {\r\n return \r\n }\r\n });\r\n }*/\r\n let templateOptions = arrayToOptions(this._templateKeys);\r\n let start = _spPageContextInfo.webServerRelativeUrl.indexOf(\"/\", 1);\r\n let division = _spPageContextInfo.webServerRelativeUrl.substring(start + 1);\r\n if (division == \"ESC-SPS\") {\r\n templateOptions = arrayToOptions(this._templateKeysSPS);\r\n }\r\n else if (division == \"DI-NIAG\") {\r\n templateOptions = arrayToOptions(this._templateKeysDI);\r\n }\r\n else if (division == \"PDD\") {\r\n templateOptions = arrayToOptions(this._templateKeysPDD);\r\n }\r\n else {\r\n //console.log(\"Unknown division \" + division);\r\n }\r\n let linkToAttachmentsPage = null;\r\n if (this.state.selectedTemplate == \"Multi-Year Project (MYP)\" && this.state.allowEdit) {\r\n linkToAttachmentsPage = (\r\n\t\t\t\t\r\n\t\t\t\t\r\n For 'Multi-Year Projects' (MYP), please complete the detailed budget workbook in Excel format and upload in the \r\n ' {\r\n window.dispatchEvent(new CustomEvent(\"onPivotNavigate\", {\r\n detail: {\r\n Pivot: \"Attachments and Agreements\"\r\n }\r\n }));\r\n }}>Attachments and Agreements' section.\r\n Template can be found in the application package.\r\n Please fill in the template before completing this section.\r\n );\r\n }\r\n let currencyOptions = arrayToOptions(this._currencies);\r\n //For ESC, disable all currencies other than EUR and disable the control\r\n if (this.props.publishedGrant.division == DivisionEnum.ESC) {\r\n currencyOptions.forEach(curr => {\r\n curr[\"disabled\"] = curr.key.toLocaleLowerCase() != \"EUR\".toLocaleLowerCase();\r\n });\r\n }\r\n let currencyComboBoxDisabled = (this.props.publishedGrant.division == DivisionEnum.ESC);\r\n let formCombo = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n this._templateControl = elm} allowFreeform={false} autoComplete='off' options={templateOptions} styles={{ root: { width: \"90%\" } }} caretDownButtonStyles={{ root: { minWidth: \"0px\" } }} comboBoxOptionStyles={{ flexContainer: { display: \"inline\" } }} useComboBoxAsMenuWidth={true} required={true} onChanged={this.onTemplateValueChanged} value={this.state.selectedTemplate} disabled={this.state.saveDisabled || !this.state.allowEdit || this._disableTemplateChange}/>\r\n \r\n {linkToAttachmentsPage}\r\n
\r\n {(this.props.publishedGrant.division == DivisionEnum.ESC) ? EUR :\r\n this._currencyControl = elm} allowFreeform={false} autoComplete='off' options={currencyOptions} styles={{ root: { width: \"90%\" } }} caretDownButtonStyles={{ root: { minWidth: \"0px\" } }} comboBoxOptionStyles={{ flexContainer: { display: \"inline\" } }} useComboBoxAsMenuWidth={true} required={true} onChanged={this.onCurrencyValueChanged} value={this.state.selectedCurrency} disabled={this.state.saveDisabled || !this.state.allowEdit || currencyComboBoxDisabled}/>}\r\n
);\r\n // Table for WBS\r\n let formTable = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n \r\n

{(this.props.publishedGrant.division == DivisionEnum.ESC) ? \"Overall Budget\" : \"Work Breakdown Structure\"}

\r\n \r\n
\r\n\t\t\t\t\t\t\tTOTAL: {this.totalAmount} {this.state.selectedCurrency}\r\n\t\t\t\t\t\t
);\r\n let infoBlock = (this.state.infoTextToDisplay != \"\" &&
{this.state.infoTextToDisplay.split('\\n').map((item, key) => { return {item}
; })}
);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

Template

{formCombo}\r\n
\r\n {formTable}\r\n
\r\n {infoBlock}\r\n
);\r\n }\r\n toShortDate(date) {\r\n let timestamp = (\"0\" + date.getDate()).slice(-2) + \".\" + (\"0\" + (date.getMonth() + 1)).slice(-2) + \".\" + date.getFullYear();\r\n return timestamp;\r\n }\r\n SetReadOnly(allowEdit) {\r\n if (this.state.allowEdit != allowEdit) {\r\n this.setState({\r\n allowEdit: allowEdit\r\n });\r\n }\r\n }\r\n onCurrencyValueChanged(option, index, value) {\r\n if (this.state.selectedCurrency != \"\") {\r\n // TODO: Warn and continue only after confirmation\r\n }\r\n let currency = (option) ? option.text : value;\r\n this.applyCurrency(currency, this.state.budgetItems);\r\n }\r\n applyCurrency(currencySymbol, items) {\r\n this._currencyName = currencySymbol;\r\n this.setState({\r\n selectedCurrency: this._currencyName\r\n });\r\n var len = items.length;\r\n for (var i = 0; i < len; i++) {\r\n items[i].currency = currencySymbol;\r\n }\r\n this.setState({\r\n budgetItems: items\r\n });\r\n }\r\n onBudgetChange(value) {\r\n let selectedEvents = this._budgetSelection.getSelectedIndices();\r\n let items = this.state.budgetItems;\r\n if (isNaN(+value)) {\r\n if (this.state.budgetItems && selectedEvents.length) {\r\n this.state.budgetItems.forEach((budgetitem, index) => {\r\n if (selectedEvents.indexOf(index) != -1) {\r\n value = items[index].ammount;\r\n }\r\n });\r\n return;\r\n }\r\n }\r\n if (this.state.budgetItems && selectedEvents.length) {\r\n this.state.budgetItems.forEach((budgetitem, index) => {\r\n if (selectedEvents.indexOf(index) != -1) {\r\n items[index].ammount = value;\r\n }\r\n });\r\n if (this._templateName == \"Co - Sponsorship\") {\r\n let amountSum = 0;\r\n this.state.budgetItems.forEach((budgetitem, index) => {\r\n if (budgetitem.taskNumber == \"8 - Org Expenses\") {\r\n items[index].ammount = Math.round(amountSum * 0.05);\r\n }\r\n else if (items[index].ammount != \"\") {\r\n amountSum += Number(items[index].ammount);\r\n }\r\n });\r\n }\r\n this.setState({\r\n budgetItems: items\r\n });\r\n }\r\n }\r\n onBudgetTotalChange(value) {\r\n let selectedEvents = this._budgetSelection.getSelectedIndices();\r\n let items = this.state.budgetItems;\r\n if (isNaN(+value)) {\r\n if (this.state.budgetItems && selectedEvents.length) {\r\n this.state.budgetItems.forEach((budgetitem, index) => {\r\n if (selectedEvents.indexOf(index) != -1) {\r\n value = items[index].amountTotal;\r\n }\r\n });\r\n return;\r\n }\r\n }\r\n if (this.state.budgetItems && selectedEvents.length) {\r\n this.state.budgetItems.forEach((budgetitem, index) => {\r\n if (selectedEvents.indexOf(index) != -1) {\r\n items[index].amountTotal = value;\r\n }\r\n });\r\n this.setState({\r\n budgetItems: items\r\n });\r\n }\r\n }\r\n updateMultiYearProjectFields(newValue, fieldName) {\r\n if (this._asyncStateUpdateJob != -1) {\r\n window.clearTimeout(this._asyncStateUpdateJob);\r\n }\r\n this._asyncStateUpdateJob = window.setTimeout(() => {\r\n this._asyncStateUpdateJob = -1;\r\n let selectedRow = this._budgetSelection.getSelectedIndices();\r\n let currentBudgetItems = this.state.budgetItems;\r\n if (currentBudgetItems && selectedRow.length) {\r\n let firstSelectedRowIndex = selectedRow[0];\r\n let previousValue = currentBudgetItems[firstSelectedRowIndex][fieldName];\r\n currentBudgetItems[firstSelectedRowIndex][fieldName] = newValue;\r\n if (this._templateName == \"Multi-Year Project (MYP)\" && firstSelectedRowIndex < 9) {\r\n [1, 2, 3, 4].forEach(mileStoneIndex => {\r\n if (currentBudgetItems[mileStoneIndex * 9 + firstSelectedRowIndex][fieldName] == previousValue) {\r\n currentBudgetItems[mileStoneIndex * 9 + firstSelectedRowIndex][fieldName] = newValue;\r\n }\r\n });\r\n }\r\n this.setState({\r\n budgetItems: currentBudgetItems\r\n });\r\n }\r\n }, 100);\r\n }\r\n onDescriptionChange(value) {\r\n let selectedEvents = this._budgetSelection.getSelectedIndices();\r\n let items = this.state.budgetItems;\r\n if (this.state.budgetItems && selectedEvents.length) {\r\n this.state.budgetItems.forEach((budgetitem, index) => {\r\n if (selectedEvents.indexOf(index) != -1) {\r\n items[index].description = value;\r\n }\r\n });\r\n this.setState({\r\n budgetItems: items\r\n });\r\n }\r\n }\r\n //private onDirectorAddressChange(value: string) {\r\n // this.updateMultiYearProjectFields(value, \"directorAddress\");\r\n //}\r\n //private onDirectorNameChange(value: string) {\r\n // this.updateMultiYearProjectFields(value, \"directorName\");\r\n //}\r\n //private onDirectorCountryChange(newKey: IComboBoxOption): void {\r\n // let value: string = newKey.key.toString();\r\n // this.updateMultiYearProjectFields(value, \"directorCountry\");\r\n //}\r\n onChangeBudget() {\r\n let isEmpty = true;\r\n if (this.state.budgetItems) {\r\n this.state.budgetItems.forEach(function (item) {\r\n if ((item.ammount === \"\")) {\r\n }\r\n else {\r\n isEmpty = false;\r\n }\r\n });\r\n }\r\n //if (isEmpty) {\r\n this.applyBudget();\r\n return;\r\n //}\r\n // Confirm the Submit action with a dialog\r\n //let spContentRow = document.getElementById('contentRow');\r\n //let dialogContainer = document.createElement('DIV');\r\n //dialogContainer.id = 'natoDialogContainer'\r\n // spContentRow.insertAdjacentHTML('beforeend', dialogContainer.outerHTML);\r\n //ReactDOM.render( { this.setState(() => { this.applyBudget(); }); }}\r\n // onCancel={() => { }}\r\n // onClose={() => { spContentRow.removeChild(document.getElementById('natoDialogContainer')) }} />,\r\n // document.getElementById('natoDialogContainer'));\r\n }\r\n}\r\n/*\r\nvar arr = JSON.parse(str);\r\nfor (var i = 0; i\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n );\r\n return formTable;\r\n }\r\n}\r\n//# sourceMappingURL=Wizard4AudienceComponent.jsx.map","import { Component } from 'react';\r\n//import * as ReactDOM from 'react-dom';\r\nimport { User, ProjectTimeline, LogMessage, LogSeverityEnum, DivisionEnum } from \"../index\";\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { DatePicker } from 'office-ui-fabric-react/lib/DatePicker';\r\nimport { SpinButton } from \"office-ui-fabric-react/lib/SpinButton\";\r\nimport { CheckboxVisibility, DetailsList, DetailsListLayoutMode, SelectionMode } from 'office-ui-fabric-react/lib/DetailsList';\r\nimport { Dropdown } from 'office-ui-fabric-react/lib/Dropdown';\r\nexport class Wizard5ProjectStructureTimelineComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n if (this.props.application != null) {\r\n this._projectTimeline = this.props.application.projectTimeline;\r\n }\r\n else {\r\n this._projectTimeline = new ProjectTimeline(null);\r\n }\r\n this.onFieldFocus = this.onFieldFocus.bind(this);\r\n this.onFieldBlur = this.onFieldBlur.bind(this);\r\n this.onFieldValueChange = this.onFieldValueChange.bind(this);\r\n this.onChangeMS1 = this.onChangeMS1.bind(this);\r\n this.onChangeMS2 = this.onChangeMS2.bind(this);\r\n this.onChangeMS3 = this.onChangeMS3.bind(this);\r\n this.onChangeMS4 = this.onChangeMS4.bind(this);\r\n this.onChangeMS5 = this.onChangeMS5.bind(this);\r\n this.recalculateDates = this.recalculateDates.bind(this);\r\n this.ms1DaysChanged = this.ms1DaysChanged.bind(this);\r\n this.ms2DaysChanged = this.ms2DaysChanged.bind(this);\r\n this.ms3DaysChanged = this.ms3DaysChanged.bind(this);\r\n this.ms4DaysChanged = this.ms4DaysChanged.bind(this);\r\n this.ms5DaysChanged = this.ms5DaysChanged.bind(this);\r\n this.onValueChange = this.onValueChange.bind(this);\r\n let minStartDate = null;\r\n let applicationEndDate = this.props.publishedGrant.endDate;\r\n if (this.props.application\r\n && this.props.application.applicantDetails\r\n && this.props.application.applicantDetails.division != null) {\r\n //For ESC only, the start date should be a minimum of 9 months after the end date of the application\r\n if (this.props.application.applicantDetails.division == DivisionEnum.ESC && applicationEndDate) {\r\n minStartDate = new Date(this.addMonths(applicationEndDate, 9));\r\n }\r\n else {\r\n minStartDate = new Date();\r\n }\r\n }\r\n this.state = {\r\n currentUser: null,\r\n infoTextToDisplay: \"The selected date is only a preference and will be updated with the real project start date.\",\r\n startDateErrorMessage: \"\",\r\n milestoneErrorMessage: \"\",\r\n timelineItems: [],\r\n formControls: {},\r\n saveDisabled: false,\r\n kickoffDate: null,\r\n ms1offset: \"6\",\r\n ms2offset: \"0\",\r\n ms3offset: \"0\",\r\n ms4offset: \"0\",\r\n ms5offset: \"0\",\r\n allowEdit: false,\r\n disableTab: false,\r\n ms1days: \"0\",\r\n ms2days: \"0\",\r\n ms3days: \"0\",\r\n ms4days: \"0\",\r\n ms5days: \"0\",\r\n totalDurationInMonths: 0,\r\n minStartDate: minStartDate\r\n };\r\n }\r\n //Executed just before the React component mounts\r\n componentWillMount() {\r\n LogMessage.Log(\"Wizard page 5 (Timeline) loaded\", this, LogSeverityEnum.Verbose);\r\n User.getCurrentUser().then((user) => {\r\n this.setState({\r\n currentUser: user\r\n });\r\n });\r\n this.loadData();\r\n }\r\n loadData() {\r\n this._ms1days = \"0\";\r\n this._ms2days = \"0\";\r\n this._ms3days = \"0\";\r\n this._ms4days = \"0\";\r\n this._ms5days = \"0\";\r\n // Load the data into the tables\r\n if (this._projectTimeline) {\r\n // Get the JSON data for all controls\r\n let timelineControls = this._projectTimeline.formControls;\r\n if (timelineControls && timelineControls.length > 2) {\r\n let timelineCtrls = JSON.parse(timelineControls);\r\n if (timelineCtrls) {\r\n let kickoffDate = new Date(timelineCtrls.kickOffDate);\r\n this._ms1days = timelineCtrls.milestone1Days;\r\n this._ms2days = timelineCtrls.milestone2Days;\r\n this._ms3days = timelineCtrls.milestone3Days;\r\n this._ms4days = timelineCtrls.milestone4Days;\r\n this._ms5days = timelineCtrls.milestone5Days;\r\n this.setState({\r\n formControls: timelineCtrls,\r\n kickoffDate: kickoffDate,\r\n ms1offset: timelineCtrls.milestone1Months,\r\n ms1days: timelineCtrls.milestone1Days,\r\n ms2offset: timelineCtrls.milestone2Months,\r\n ms2days: timelineCtrls.milestone2Days,\r\n ms3offset: timelineCtrls.milestone3Months,\r\n ms3days: timelineCtrls.milestone3Days,\r\n ms4offset: timelineCtrls.milestone4Months,\r\n ms4days: timelineCtrls.milestone4Days,\r\n ms5offset: timelineCtrls.milestone5Months,\r\n ms5days: timelineCtrls.milestone5Days\r\n });\r\n this.recalculateDates(kickoffDate, timelineCtrls.milestone1Months, timelineCtrls.milestone2Months, timelineCtrls.milestone3Months, timelineCtrls.milestone4Months, timelineCtrls.milestone5Months);\r\n }\r\n }\r\n // Get the JSON data for all milestones\r\n let timelineDetailsList = this._projectTimeline.projectTimeline;\r\n if (timelineDetailsList && timelineDetailsList.length) {\r\n let timelineItems = JSON.parse(timelineDetailsList);\r\n this.setState({\r\n timelineItems: timelineItems\r\n });\r\n }\r\n }\r\n }\r\n Save() {\r\n if (this._projectTimeline == null) {\r\n this._projectTimeline = new ProjectTimeline(null);\r\n }\r\n //Map all values from the fields on this page to the object\r\n let data = this._projectTimeline;\r\n // The WBS JSON\r\n if (this.state.timelineItems.length) {\r\n data[\"projectTimeline\"] = JSON.stringify(this.state.timelineItems);\r\n }\r\n // The form JSON\r\n if (this.state.formControls) {\r\n data[\"formControls\"] = JSON.stringify(this.state.formControls);\r\n }\r\n return new Promise((resolve, reject) => {\r\n data.Update().then(details => {\r\n resolve(details.id);\r\n }).\r\n catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n Validate(submit) {\r\n if (this.state.allowEdit && this.state.kickoffDate == null) {\r\n this.setState({\r\n startDateErrorMessage: \"This field is required\"\r\n });\r\n return false;\r\n }\r\n let applicationEndDate = this.props.publishedGrant.endDate;\r\n //For ESC only, the start date should be a minimum of 9 months after the end date of the application\r\n if (this.props.application.applicantDetails.division == DivisionEnum.ESC\r\n && this.state.allowEdit\r\n && applicationEndDate\r\n && (this.state.kickoffDate == null || this.state.kickoffDate < new Date(this.addMonths(applicationEndDate, 9)))) {\r\n return false;\r\n }\r\n return (!this.state.allowEdit || (this.state.kickoffDate != null && this.state.ms5offset != null && this.state.ms5offset != \"0\"\r\n && this.state.startDateErrorMessage == \"\" && this.state.milestoneErrorMessage == \"\"));\r\n }\r\n SetReadOnly(allowEdit) {\r\n // Disable edit when not MYP in ESC\r\n let disableTab = false;\r\n if (this.props.application\r\n && this.props.application.applicantDetails.division == DivisionEnum.ESC\r\n && this.props.application.projectBudget\r\n && this.props.application.projectBudget.budgetBreakdownTemplate != \"Multi-Year Project (MYP)\") {\r\n disableTab = true;\r\n }\r\n allowEdit = allowEdit && !disableTab;\r\n this.setState({\r\n allowEdit: allowEdit,\r\n disableTab: disableTab,\r\n infoTextToDisplay: disableTab ? \"This information is applicable only for Multi-Year Project (MYP) applications.\" : this.state.infoTextToDisplay\r\n });\r\n }\r\n render() {\r\n // Parse the array of events to Objects that can be used by the DetailsList\r\n let columnsMilestones = [\r\n { key: \"col_event\", name: \"Event\", fieldName: \"col_event\", minWidth: 100, isMultiline: false },\r\n { key: \"col_descr\", name: \"Description\", fieldName: \"col_descr\", minWidth: 300, isMultiline: false },\r\n { key: \"col_date\", name: \"Preferred date\", fieldName: \"col_date\", minWidth: 200, isMultiline: false }\r\n ];\r\n // Check if newDate is at least 6 months from now...\r\n let dateMin = new Date(this.addMonths(new Date(), 6));\r\n let ms1enabled = false && this.state.allowEdit;\r\n let ms2enabled = this.state.kickoffDate != null && this.state.kickoffDate >= dateMin && this.state.allowEdit;\r\n let ms3enabled = ms2enabled && this.state.ms2offset != \"0\" && this.state.allowEdit;\r\n let ms4enabled = ms3enabled && this.state.ms3offset != \"0\" && this.state.allowEdit;\r\n let ms5enabled = this.state.kickoffDate != null && this.state.kickoffDate >= dateMin && this.state.allowEdit;\r\n let infoBlock = (this.state.infoTextToDisplay != \"\" &&
{this.state.infoTextToDisplay}
);\r\n //Specific validators\r\n let startDateErrorMessageElement = null;\r\n if (this.state.allowEdit && this.state.startDateErrorMessage != \"\") {\r\n startDateErrorMessageElement =\r\n \r\n \r\n \r\n
\r\n

\r\n {this.state.startDateErrorMessage}\r\n

\r\n
\r\n \r\n ;\r\n }\r\n let milestoneErrorMessageElement = null;\r\n if (this.state.allowEdit && this.state.milestoneErrorMessage != \"\") {\r\n milestoneErrorMessageElement =\r\n \r\n \r\n \r\n
\r\n

\r\n {this.state.milestoneErrorMessage}\r\n

\r\n
\r\n \r\n ;\r\n }\r\n let formTable = (
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {startDateErrorMessageElement}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n {milestoneErrorMessageElement}\r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n this._startDateControl = field} minDate={this.state.minStartDate} onSelectDate={newDate => {\r\n //console.log(newDate);\r\n this.setState({ kickoffDate: newDate });\r\n this.recalculateDates(newDate, this.state.ms1offset, this.state.ms2offset, this.state.ms3offset, this.state.ms4offset, this.state.ms5offset);\r\n }}/>\r\n
\r\n \r\n \r\n {\r\n this.ms1DaysChanged(this.onValueChange(Number(newValue) - 1));\r\n }} onIncrement={(newValue) => {\r\n this.ms1DaysChanged(this.onValueChange(Number(newValue) + 1));\r\n }}/>\r\n
\r\n \r\n \r\n {\r\n this.ms2DaysChanged(this.onValueChange(Number(newValue) - 1));\r\n }} onIncrement={(newValue) => {\r\n this.ms2DaysChanged(this.onValueChange(Number(newValue) + 1));\r\n }}/>\r\n
\r\n \r\n \r\n {\r\n this.ms3DaysChanged(this.onValueChange(Number(newValue) - 1));\r\n }} onIncrement={(newValue) => {\r\n this.ms3DaysChanged(this.onValueChange(Number(newValue) + 1));\r\n }}/>\r\n
\r\n \r\n \r\n {\r\n this.ms4DaysChanged(this.onValueChange(Number(newValue) - 1));\r\n }} onIncrement={(newValue) => {\r\n this.ms4DaysChanged(this.onValueChange(Number(newValue) + 1));\r\n }}/>\r\n
\r\n \r\n \r\n {\r\n this.ms5DaysChanged(this.onValueChange(Number(newValue) - 1));\r\n }} onIncrement={(newValue) => {\r\n this.ms5DaysChanged(this.onValueChange(Number(newValue) + 1));\r\n }}/>\r\n
\r\n

Milestones

\r\n \r\n \r\n
\r\n\r\n {infoBlock}\r\n\r\n
);\r\n return formTable;\r\n }\r\n onFieldFocus(ev) {\r\n //Retrieve the 'title'-property from the field and render it as helptext\r\n let text = \"\" + ev.currentTarget.title;\r\n this.setState({ infoTextToDisplay: text });\r\n }\r\n onFieldBlur(ev) {\r\n //Clear the helptext\r\n this.setState({ infoTextToDisplay: \"\" });\r\n }\r\n onFieldValueChange(fieldName, newValue) {\r\n }\r\n onAddFieldValueChange() {\r\n }\r\n recalculateDates(newDate, m1, m2, m3, m4, m5) {\r\n if (newDate == null) {\r\n this.setState({\r\n timelineItems: [],\r\n formControls: {},\r\n kickoffDate: newDate,\r\n totalDurationInMonths: 0\r\n });\r\n return;\r\n }\r\n // Ensure these are not empty\r\n if (!this._ms1days)\r\n this._ms1days = \"0\";\r\n if (!this._ms2days || m2 == \"0\")\r\n this._ms2days = \"0\";\r\n if (!this._ms3days || m3 == \"0\")\r\n this._ms3days = \"0\";\r\n if (!this._ms4days || m4 == \"0\")\r\n this._ms4days = \"0\";\r\n if (!this._ms5days || m5 == \"0\")\r\n this._ms5days = \"0\";\r\n // Kick off date\r\n let dateKickoff = newDate;\r\n // Check if newDate is at least 6 months from now...\r\n let dateMin = new Date(this.addMonths(new Date(), 6));\r\n if (dateKickoff < dateMin) {\r\n this.setState({\r\n startDateErrorMessage: \"The minumum date should be at least 6 months from now\"\r\n });\r\n return;\r\n }\r\n this.setState({\r\n startDateErrorMessage: \"\",\r\n milestoneErrorMessage: (m1 == \"0\" || m5 == \"0\") ? \"Milestone 1 and the final milestone are mandatory\" : \"\"\r\n });\r\n // Store the states of all form controls\r\n let ctrls = {};\r\n ctrls[\"kickOffDate\"] = dateKickoff.toDateString();\r\n ctrls[\"milestone1Months\"] = m1;\r\n ctrls[\"milestone1Days\"] = this._ms1days;\r\n ctrls[\"milestone2Months\"] = m2;\r\n ctrls[\"milestone2Days\"] = this._ms2days;\r\n ctrls[\"milestone3Months\"] = m3;\r\n ctrls[\"milestone3Days\"] = this._ms3days;\r\n ctrls[\"milestone4Months\"] = m4;\r\n ctrls[\"milestone4Days\"] = this._ms4days;\r\n ctrls[\"milestone5Months\"] = m5;\r\n ctrls[\"milestone5Days\"] = this._ms5days;\r\n let lastDate = newDate;\r\n let itemsUpd = [];\r\n itemsUpd.push({\r\n \"col_event\": \"Kick-Off\",\r\n \"col_descr\": \"Project Kick-Off Meeting\",\r\n \"col_date\": this.toShortDate(dateKickoff)\r\n });\r\n if (m1 != \"0\") {\r\n // Milestone 1 date\r\n let dateMS1 = new Date(this.addMonths(dateKickoff, parseInt(m1)));\r\n dateMS1.setDate(dateMS1.getDate() + parseInt(this._ms1days));\r\n lastDate = dateMS1;\r\n itemsUpd.push({\r\n \"col_event\": \"Milestone 1\",\r\n \"col_descr\": \"First Progress and Financial Report\",\r\n \"col_date\": this.toShortDate(dateMS1)\r\n });\r\n if (m2 != \"0\") {\r\n // Milestone 2 date\r\n let dateMS2 = new Date(this.addMonths(dateMS1, parseInt(m2)));\r\n dateMS2.setDate(dateMS2.getDate() + parseInt(this._ms2days));\r\n lastDate = dateMS2;\r\n itemsUpd.push({\r\n \"col_event\": \"Milestone 2\",\r\n \"col_descr\": \"Second Progress and Financial Report\",\r\n \"col_date\": this.toShortDate(dateMS2)\r\n });\r\n if (m3 != \"0\") {\r\n // Milestone 3 date\r\n let dateMS3 = new Date(this.addMonths(dateMS2, parseInt(m3)));\r\n dateMS3.setDate(dateMS3.getDate() + parseInt(this._ms3days));\r\n lastDate = dateMS3;\r\n itemsUpd.push({\r\n \"col_event\": \"Milestone 3\",\r\n \"col_descr\": \"Thrird Progress and Financial Report\",\r\n \"col_date\": this.toShortDate(dateMS3)\r\n });\r\n if (m4 != \"0\") {\r\n // Milestone 4 date\r\n let dateMS4 = new Date(this.addMonths(dateMS3, parseInt(m4)));\r\n dateMS4.setDate(dateMS4.getDate() + parseInt(this._ms4days));\r\n lastDate = dateMS4;\r\n itemsUpd.push({\r\n \"col_event\": \"Milestone 4\",\r\n \"col_descr\": \"Fourth Progress and Financial Report\",\r\n \"col_date\": this.toShortDate(dateMS4)\r\n });\r\n }\r\n }\r\n }\r\n }\r\n // Final report date\r\n let dateMS5 = new Date(this.addMonths(lastDate, parseInt(m5)));\r\n dateMS5.setDate(dateMS5.getDate() + parseInt(this._ms5days));\r\n itemsUpd.push({\r\n \"col_event\": \"Final Report\",\r\n \"col_descr\": \"Final Technical and Financial Report\",\r\n \"col_date\": this.toShortDate(dateMS5)\r\n });\r\n let dateMax = new Date(this.addMonths(newDate, 36));\r\n let duration = this.calculateTotalDuration(newDate, dateMS5);\r\n if (dateMS5 > dateMax) {\r\n this.setState({\r\n milestoneErrorMessage: \"The entire duration cannot be more than 36 months after the kick-off date\"\r\n });\r\n }\r\n this.setState({\r\n timelineItems: itemsUpd,\r\n formControls: ctrls,\r\n kickoffDate: newDate,\r\n totalDurationInMonths: duration\r\n });\r\n }\r\n calculateTotalDuration(kickoffDate, finalMilestoneDate) {\r\n let months = (finalMilestoneDate.getFullYear() - kickoffDate.getFullYear()) * 12;\r\n months = months + (finalMilestoneDate.getMonth() + 1);\r\n months = months - (kickoffDate.getMonth() + 1);\r\n months = months + (finalMilestoneDate.getDate() / 30);\r\n months = months - (kickoffDate.getDate() / 30);\r\n return Math.round(months * 10) / 10;\r\n }\r\n toShortDate(date) {\r\n if (date) {\r\n let days = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\r\n let weekday = days[date.getDay()];\r\n let timestamp = (\"0\" + date.getDate()).slice(-2) + \"/\" + (\"0\" + (date.getMonth() + 1)).slice(-2) + \"/\" + date.getFullYear();\r\n return timestamp + \" (\" + weekday + \")\";\r\n }\r\n return \"\";\r\n }\r\n onChangeMS1(newKey) {\r\n let newValue = newKey.key.toString();\r\n this.setState({\r\n ms1offset: newValue\r\n });\r\n this.recalculateDates(this._startDateControl.state.selectedDate, newValue, this.state.ms2offset, this.state.ms3offset, this.state.ms4offset, this.state.ms5offset);\r\n }\r\n ;\r\n onChangeMS2(newKey) {\r\n let newValue = newKey.key.toString();\r\n this.setState({\r\n ms2offset: newValue,\r\n ms2days: (newValue == \"0\") ? \"0\" : this.state.ms2days,\r\n ms3offset: (newValue == \"0\") ? \"0\" : this.state.ms3offset,\r\n ms3days: (newValue == \"0\") ? \"0\" : this.state.ms3days,\r\n ms4offset: (newValue == \"0\") ? \"0\" : this.state.ms4offset,\r\n ms4days: (newValue == \"0\") ? \"0\" : this.state.ms4days\r\n });\r\n this.recalculateDates(this._startDateControl.state.selectedDate, this.state.ms1offset, newValue, (newValue == \"0\") ? \"0\" : this.state.ms3offset, (newValue == \"0\") ? \"0\" : this.state.ms4offset, this.state.ms5offset);\r\n }\r\n ;\r\n onChangeMS3(newKey) {\r\n let newValue = newKey.key.toString();\r\n this.setState({\r\n ms3offset: newValue,\r\n ms3days: (newValue == \"0\") ? \"0\" : this.state.ms3days,\r\n ms4offset: (newValue == \"0\") ? \"0\" : this.state.ms4offset,\r\n ms4days: (newValue == \"0\") ? \"0\" : this.state.ms4days\r\n });\r\n this.recalculateDates(this._startDateControl.state.selectedDate, this.state.ms1offset, this.state.ms2offset, newValue, (newValue == \"0\") ? \"0\" : this.state.ms4offset, this.state.ms5offset);\r\n }\r\n ;\r\n onChangeMS4(newKey) {\r\n let newValue = newKey.key.toString();\r\n this.setState({\r\n ms4offset: newValue,\r\n ms4days: (newValue == \"0\") ? \"0\" : this.state.ms4days\r\n });\r\n this.recalculateDates(this._startDateControl.state.selectedDate, this.state.ms1offset, this.state.ms2offset, this.state.ms3offset, newValue, this.state.ms5offset);\r\n }\r\n onChangeMS5(newKey) {\r\n let newValue = newKey.key.toString();\r\n this.setState({\r\n ms5offset: newValue\r\n });\r\n this.recalculateDates(this._startDateControl.state.selectedDate, this.state.ms1offset, this.state.ms2offset, this.state.ms3offset, this.state.ms4offset, newValue);\r\n }\r\n ms1DaysChanged(newValue) {\r\n this.setState({\r\n ms1days: newValue.toString()\r\n });\r\n this.recalculateDays(newValue.toString(), this.state.ms2days, this.state.ms3days, this.state.ms4days, this.state.ms5days);\r\n }\r\n ms2DaysChanged(newValue) {\r\n this.setState({\r\n ms2days: newValue.toString()\r\n });\r\n this.recalculateDays(this.state.ms1days, newValue.toString(), this.state.ms3days, this.state.ms4days, this.state.ms5days);\r\n }\r\n ms3DaysChanged(newValue) {\r\n this.setState({\r\n ms3days: newValue.toString()\r\n });\r\n this.recalculateDays(this.state.ms1days, this.state.ms2days, newValue.toString(), this.state.ms4days, this.state.ms5days);\r\n }\r\n ms4DaysChanged(newValue) {\r\n this.setState({\r\n ms4days: newValue.toString()\r\n });\r\n this.recalculateDays(this.state.ms1days, this.state.ms2days, this.state.ms3days, newValue.toString(), this.state.ms5days);\r\n }\r\n ms5DaysChanged(newValue) {\r\n this.setState({\r\n ms5days: newValue.toString()\r\n });\r\n this.recalculateDays(this.state.ms1days, this.state.ms2days, this.state.ms3days, this.state.ms4days, newValue.toString());\r\n }\r\n addMonths(date, count) {\r\n if (date && count) {\r\n var m, d = (date = new Date(+date)).getDate();\r\n date.setMonth(date.getMonth() + count, 1);\r\n m = date.getMonth();\r\n date.setDate(d);\r\n if (date.getMonth() !== m)\r\n date.setDate(0);\r\n }\r\n return date;\r\n }\r\n onValueChange(newValue) {\r\n let n = newValue;\r\n if (n < -15)\r\n n = -15;\r\n if (n > 15)\r\n n = 15;\r\n return n;\r\n }\r\n recalculateDays(m1, m2, m3, m4, m5) {\r\n this._ms1days = m1;\r\n this._ms2days = m2;\r\n this._ms3days = m3;\r\n this._ms4days = m4;\r\n this._ms5days = m5;\r\n this.recalculateDates(this._startDateControl.state.selectedDate, this.state.ms1offset, this.state.ms2offset, this.state.ms3offset, this.state.ms4offset, this.state.ms5offset);\r\n }\r\n}\r\n//# sourceMappingURL=Wizard5ProjectStructureTimelineComponent.jsx.map","import { Component } from 'react';\r\nimport { User, AgreementsDetails, LogMessage, LogSeverityEnum } from \"../index\";\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { CommandBar } from 'office-ui-fabric-react/lib/CommandBar';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { DatePicker } from 'office-ui-fabric-react/lib/DatePicker';\r\nimport { CheckboxVisibility, DetailsList, DetailsListLayoutMode, Selection, SelectionMode } from 'office-ui-fabric-react/lib/DetailsList';\r\nexport class Wizard6PreviousGrantsComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n //This structure contains all information needed to render the forms on this page\r\n this._formData = {\r\n \"Previous NATO Projects\": {\r\n value: () => { return (this._agreementsDetails && this._agreementsDetails.previousGrants) ? this._agreementsDetails.previousGrants : \"\"; },\r\n objectMapping: \"previousGrants\",\r\n fieldType: TextField,\r\n title: \"Provide details of grants received from any NATO division or body, including the year, project title & amount granted.\",\r\n disable: true,\r\n required: true\r\n },\r\n \"Publication\": {\r\n value: () => { return (this._agreementsDetails && this._agreementsDetails.publication) ? this._agreementsDetails.publication : \"\"; },\r\n objectMapping: \"publication\",\r\n fieldType: TextField,\r\n title: \"Will you publish a book in the NATO science series? If not, what type of publication, if any, is planned?\",\r\n disable: true,\r\n required: false\r\n }\r\n };\r\n this.getCommandItems = () => {\r\n return [\r\n {\r\n key: 'addRow',\r\n text: 'Insert row',\r\n iconProps: { iconName: 'Add' },\r\n onClick: this.showDialog\r\n },\r\n {\r\n key: 'deleteRow',\r\n text: 'Delete row',\r\n iconProps: { iconName: 'Delete' },\r\n onClick: this.onDeleteRow\r\n }\r\n ];\r\n };\r\n this.showDialog = () => {\r\n this.setState({ hideDialog: false });\r\n };\r\n this.closeDialog = () => {\r\n this.setState({\r\n hideDialog: true,\r\n dialogFormData: { \"Title\": \"\", \"Date\": \"\", \"Location\": \"\", \"Sponsor\": \"\" },\r\n saveDisabled: true\r\n });\r\n };\r\n this.onAddRow = () => {\r\n if (this._title.value.trim().length > 0\r\n && this._date.state.selectedDate\r\n && this._location.value.trim().length > 0\r\n && this._sponsorOrganizer.value.trim().length > 0) {\r\n let itemsUpd = this.state.eventItems;\r\n itemsUpd.push({\r\n \"title\": this._title.value.trim(),\r\n \"date\": this._date.state.selectedDate.toDateString(),\r\n \"location\": this._location.value.trim(),\r\n \"sponsorOrganizer\": this._sponsorOrganizer.value.trim()\r\n });\r\n this.setState({\r\n eventItems: itemsUpd,\r\n hideDialog: true,\r\n dialogFormData: { \"Title\": \"\", \"Date\": \"\", \"Location\": \"\", \"Sponsor\": \"\" },\r\n saveDisabled: true\r\n });\r\n }\r\n };\r\n this.onDeleteRow = () => {\r\n let selectedEvents = this._eventsSelection.getSelectedIndices();\r\n if (this.state.eventItems && selectedEvents.length) {\r\n let result = [];\r\n this.state.eventItems.forEach((event, index) => {\r\n if (selectedEvents.indexOf(index) == -1) {\r\n result.push(event);\r\n }\r\n });\r\n let currentSelection = this._eventsSelection;\r\n currentSelection.setAllSelected(false);\r\n this._eventsSelection = currentSelection;\r\n this.setState({\r\n eventItems: result\r\n });\r\n }\r\n };\r\n if (this.props.application != null) {\r\n this._agreementsDetails = this.props.application.agreementsDetails;\r\n }\r\n this.state = {\r\n currentUser: null,\r\n infoTextToDisplay: \"\",\r\n formData: this._formData,\r\n eventItems: [],\r\n hideDialog: true,\r\n saveDisabled: true,\r\n dialogFormData: { \"Title\": \"\", \"Date\": \"\", \"Location\": \"\", \"Sponsor\": \"\" },\r\n allowEdit: false,\r\n allowValidation: false\r\n };\r\n this.onFieldFocus = this.onFieldFocus.bind(this);\r\n this.onFieldBlur = this.onFieldBlur.bind(this);\r\n this.onFieldValueChange = this.onFieldValueChange.bind(this);\r\n }\r\n SetReadOnly(allowEdit) {\r\n if (this.state.allowEdit != allowEdit) {\r\n let updatedFormData = this.state.formData;\r\n updatedFormData[\"Previous NATO Projects\"][\"disable\"] = false;\r\n updatedFormData[\"Publication\"][\"disable\"] = false;\r\n this.setState({\r\n formData: updatedFormData,\r\n allowEdit: allowEdit\r\n });\r\n }\r\n }\r\n //Executed just before the React component mounts\r\n componentWillMount() {\r\n LogMessage.Log(\"Wizard page 7 (Agreements) loaded\", this, LogSeverityEnum.Verbose);\r\n User.getCurrentUser().then((user) => {\r\n this.setState({\r\n currentUser: user\r\n });\r\n });\r\n this._eventsSelection = new Selection();\r\n if (this._agreementsDetails) {\r\n //Parse the array of events to Objects that can be used by the DetailsList\r\n let eventItems = new Array();\r\n let eventsListStr = this._agreementsDetails.otherMeetingsAndConferences;\r\n if (eventsListStr && eventsListStr.length) {\r\n eventItems = JSON.parse(eventsListStr);\r\n this.setState({\r\n eventItems: eventItems\r\n });\r\n }\r\n }\r\n }\r\n Validate(submit) {\r\n let allFieldsOk = true;\r\n this.setState({ allowValidation: true });\r\n //Loop over all fields and check if they have an errorMessage\r\n Object.keys(this._formData).forEach(fieldName => {\r\n let textField = this.refs[fieldName];\r\n if (textField) {\r\n allFieldsOk = allFieldsOk && (textField.state.errorMessage == \"\");\r\n }\r\n });\r\n return allFieldsOk;\r\n }\r\n Save() {\r\n if (this._agreementsDetails == null) {\r\n this._agreementsDetails = new AgreementsDetails(null);\r\n }\r\n //Map all values from the fields on this page to the object\r\n let data = this._agreementsDetails;\r\n Object.keys(this._formData).forEach(fieldName => {\r\n //Retrieve the value from the field\r\n let value = this.state.formData[fieldName].value();\r\n //Get the name of the property of the AgreementsDetails that this field is mapped to\r\n let objectMapping = this.state.formData[fieldName].objectMapping;\r\n //Check if the name of the property indeed exists on the object\r\n let propertyDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(data), objectMapping);\r\n if (propertyDescriptor !== undefined && (typeof propertyDescriptor.set === \"function\")) {\r\n data[objectMapping] = value;\r\n }\r\n });\r\n data[\"otherMeetingsAndConferences\"] = \"\";\r\n if (this.state.eventItems) {\r\n data[\"otherMeetingsAndConferences\"] = JSON.stringify(this.state.eventItems);\r\n }\r\n //Update the ListItem\r\n return new Promise((resolve, reject) => {\r\n data.Update().then(details => {\r\n resolve(details.id);\r\n }).\r\n catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n onFieldFocus(ev) {\r\n //Retrieve the 'title'-property from the field and render it as helptext\r\n let text = \"\" + ev.currentTarget.title;\r\n this.setState({ infoTextToDisplay: text });\r\n }\r\n onFieldBlur(ev) {\r\n //Clear the helptext\r\n this.setState({ infoTextToDisplay: \"\" });\r\n }\r\n onFieldValueChange(fieldName, newValue) {\r\n //Get the field that was updated and set its value by creating an anonymous function that returns that value\r\n let field = this.state.formData[fieldName];\r\n field.value = () => { return newValue; };\r\n //Update the current state\r\n let updatedFormData = this.state.formData;\r\n updatedFormData[fieldName] = field;\r\n this.setState({ formData: updatedFormData });\r\n }\r\n onDialogFieldValueChange(fieldName, newValue) {\r\n let dialogData = this.state.dialogFormData;\r\n if (fieldName == \"Date\") {\r\n dialogData[fieldName] = newValue;\r\n }\r\n else {\r\n dialogData[fieldName] = newValue.trim();\r\n }\r\n let saveButtonEnabled = dialogData[\"Title\"].length > 0 && dialogData[\"Date\"] && dialogData[\"Location\"].length > 0 && dialogData[\"Sponsor\"].length > 0;\r\n this.setState({ dialogFormData: dialogData, saveDisabled: !saveButtonEnabled });\r\n }\r\n render() {\r\n let dynamicFields = (\r\n //Create a tablerow for every field\r\n Object.keys(this._formData).map((fieldName, index) => {\r\n let validator = this._formData[fieldName].validator;\r\n if (this._formData[fieldName].required) {\r\n validator = (value) => {\r\n if (!value || value == \"\") {\r\n return Promise.resolve(\"This field is required\");\r\n }\r\n else if (this._formData[fieldName].validator != null) {\r\n return this._formData[fieldName].validator(value);\r\n }\r\n return Promise.resolve(\"\");\r\n };\r\n }\r\n //The key is to use a capitalized variable name (DynamicTag) or else React will treat it as a built-in DOM element.\r\n //So DynamicTag is basically or \r\n const DynamicTag = this._formData[fieldName].fieldType;\r\n let dynamicTag = ( { this.onFieldValueChange(fieldName, newValue); }} onFocus={this.onFieldFocus} onBlur={this.onFieldBlur} disabled={this._formData[fieldName].disable} required={this._formData[fieldName].required} onGetErrorMessage={validator} deferredValidationTime={validator ? 500 : 0}/>);\r\n return (\r\n \r\n \r\n {dynamicTag}\r\n \r\n );\r\n }));\r\n //Parse the array of events to Objects that can be used by the DetailsList\r\n let columns = [\r\n { key: \"title\", name: \"Title\", fieldName: \"title\", minWidth: 150, isMultiline: true, data: 'string' },\r\n { key: \"date\", name: \"Date\", fieldName: \"date\", minWidth: 150, isMultiline: true, data: 'string' },\r\n { key: \"location\", name: \"Location\", fieldName: \"location\", minWidth: 150, isMultiline: true, data: 'string' },\r\n { key: \"sponsorOrganizer\", name: \"Sponsor/Organizer\", fieldName: \"sponsorOrganizer\", minWidth: 150, isMultiline: true, data: 'string' }\r\n ];\r\n let validationClass = this.state.allowValidation ? \"nato-validation\" : \"nato-no-validation\";\r\n //Put all the TableRows in a nice table\r\n let formTable = (\r\n \r\n {dynamicFields}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Other Meetings and Conferences:
Are you aware of other meetings or conferences on the same topic in the same or previous year?
\r\n
\r\n\r\n {this.state.allowEdit && }\r\n\r\n this._eventsControl = elm} items={this.state.eventItems} compact={false} columns={columns} selectionMode={SelectionMode.multiple} selection={this._eventsSelection} setKey='set' layoutMode={DetailsListLayoutMode.justified} isHeaderVisible={true} selectionPreservedOnEmptyClick={true} enterModalSelectionOnTouch={true} checkboxVisibility={CheckboxVisibility.onHover}/>\r\n
);\r\n //New event dialog\r\n let eventDialog = ();\r\n let infoBlock = (this.state.infoTextToDisplay != \"\" &&
{this.state.infoTextToDisplay}
);\r\n return ({eventDialog}
{formTable}{infoBlock}
);\r\n }\r\n}\r\n//# sourceMappingURL=Wizard6PreviousGrantsComponent.jsx.map","import { Component } from 'react';\r\nimport { LogMessage, LogSeverityEnum, DivisionEnum, ApplicationStatus } from \"../index\";\r\nimport { ProgressIndicator } from 'office-ui-fabric-react/lib/ProgressIndicator';\r\nexport class Wizard7AttachmentsComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this._allowEdit = false;\r\n this._pollDocumentsTimer = -1;\r\n this.state = {\r\n iFrameLoaded: false,\r\n documentSetContentsUrl: \"\",\r\n documentsValid: false,\r\n defaultDocumentFilenames: [],\r\n validationCount: 0\r\n };\r\n if (this.props.application != null) {\r\n this._applicationAttachments = this.props.application.attachmentsDetails;\r\n }\r\n this.onFrameLoad = this.onFrameLoad.bind(this);\r\n }\r\n Save() {\r\n return new Promise((resolve, reject) => {\r\n resolve(this.props.application.id);\r\n });\r\n }\r\n Validate(submit) {\r\n this.setState({\r\n validationCount: this.state.validationCount + 1\r\n });\r\n return this.state.documentsValid;\r\n }\r\n SetReadOnly(allowEdit) {\r\n this._allowEdit = allowEdit;\r\n }\r\n //Executed just before the React component mounts\r\n componentWillMount() {\r\n if (this._applicationAttachments != null) {\r\n this._applicationAttachments.loadData().then(success => {\r\n if (success) {\r\n this.setState({\r\n documentSetContentsUrl: this._applicationAttachments.documentsSetContentsUrl\r\n });\r\n }\r\n });\r\n }\r\n LogMessage.Log(\"Wizard page 7 loaded\", this, LogSeverityEnum.Verbose);\r\n }\r\n //Executed just before the React component mounts\r\n componentDidMount() {\r\n }\r\n componentWillUnmount() {\r\n if (this._pollDocumentsTimer >= 0) {\r\n clearInterval(this._pollDocumentsTimer);\r\n }\r\n }\r\n onFrameLoad() {\r\n let iFrameDocument = this._documentSetContentsFrame.contentDocument;\r\n let numberOfDocuments = iFrameDocument.body.getElementsByClassName(\"ms-itmhover\").length;\r\n let containsError = iFrameDocument.body.getElementsByClassName(\"ms-error-detailsFold\").length > 0;\r\n if (numberOfDocuments == 0 && !containsError) {\r\n this._applicationAttachments.provisionDefaultDocuments(this.props.application.projectDetails.projectType).then((documentsCopied) => {\r\n if (documentsCopied.length > 0) {\r\n this.setState({\r\n defaultDocumentFilenames: documentsCopied\r\n });\r\n this._documentSetContentsFrame.contentWindow.location.reload();\r\n }\r\n else {\r\n this.setState({\r\n iFrameLoaded: true\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n this.setState({\r\n iFrameLoaded: true\r\n });\r\n }\r\n if (this.state.defaultDocumentFilenames.length == 0) {\r\n this._applicationAttachments.getDefaultDocuments(this.props.application.projectDetails.projectType).then((defaultDocuments) => {\r\n this.setState({\r\n defaultDocumentFilenames: defaultDocuments\r\n });\r\n });\r\n }\r\n this._pollDocumentsTimer = setInterval(() => {\r\n try {\r\n let documentsValid = this.pollDocuments();\r\n if (documentsValid !== this.state.documentsValid) {\r\n this.setState({\r\n documentsValid: documentsValid\r\n });\r\n }\r\n }\r\n catch (e) {\r\n if (e._documentSetContentsFrame === undefined || this._documentSetContentsFrame.contentWindow === undefined)\r\n clearInterval(this._pollDocumentsTimer);\r\n }\r\n }, 500);\r\n }\r\n pollDocuments() {\r\n //Only ESC has a validation on the documents\r\n if (this.props.application.applicantDetails.division !== DivisionEnum.ESC) {\r\n return true;\r\n }\r\n //Retrieve the documents iFrame and fetch the DataRows\r\n const iFrameWindow = this._documentSetContentsFrame.contentWindow;\r\n if (!iFrameWindow.ctx || !iFrameWindow.ctx.ListData)\r\n return false;\r\n const dataRows = iFrameWindow.ctx.ListData.Row;\r\n let documentsPerExtension = dataRows.reduce((documentInfo, dataRow) => {\r\n let filename = dataRow.FileLeafRef;\r\n let isDefaultDocument = this.state.defaultDocumentFilenames.indexOf(filename) >= 0;\r\n let extension = ('' + dataRow.File_x0020_Type).toLocaleLowerCase();\r\n if (!documentInfo[extension]) {\r\n documentInfo[extension] = { numberOfDefaultDocuments: 0, numberOfCustomDocuments: 0 };\r\n }\r\n if (isDefaultDocument)\r\n documentInfo[extension].numberOfDefaultDocuments++;\r\n else if (!isDefaultDocument) {\r\n documentInfo[extension].numberOfCustomDocuments++;\r\n }\r\n return documentInfo;\r\n }, {});\r\n if (this.props.application.applicantDetails.division == DivisionEnum.ESC) {\r\n let wordDocuments = documentsPerExtension['docx'] ? documentsPerExtension['docx'].numberOfCustomDocuments : 0;\r\n wordDocuments += documentsPerExtension['doc'] ? documentsPerExtension['doc'].numberOfCustomDocuments : 0;\r\n let excelDocuments = documentsPerExtension['xlsx'] ? documentsPerExtension['xlsx'].numberOfCustomDocuments : 0;\r\n excelDocuments += documentsPerExtension['xls'] ? documentsPerExtension['xls'].numberOfCustomDocuments : 0;\r\n let totalOfUserDocuments = Object.keys(documentsPerExtension).reduce((sum, extension) => {\r\n return sum + documentsPerExtension[extension].numberOfCustomDocuments;\r\n }, 0);\r\n if (this.props.application.applicationStatus == ApplicationStatus.DRAFT ||\r\n this.props.application.applicationStatus == ApplicationStatus.SUBMITTED_MORE_INFORMATION_REQUESTED) {\r\n return wordDocuments === 1 && excelDocuments === 1 && totalOfUserDocuments === 2;\r\n }\r\n else {\r\n return wordDocuments >= 1 && excelDocuments >= 1;\r\n }\r\n }\r\n }\r\n render() {\r\n //let iFrameSrc: string = \"/NAS/PDD/SitePages/DocSetContents.aspx?ID=73&List=d36177e8-c4c7-4753-acb7-ac1db12ef0b6&RootFolder=%2FNAS%2FPDD%2FGrantApplications%2F%5BPDD2017%2E12%2E01%5D%20Alain%20de%20Klerk\"\r\n let iFrameDisplayStyle = this.state.iFrameLoaded ? \"block\" : \"none\";\r\n let helpText = (this.props.publishedGrant.division == DivisionEnum.ESC) ? ((this.props.application\r\n && this.props.application.projectDetails\r\n && this.props.application.projectDetails.projectType\r\n && this.props.application.projectDetails.projectType == \"Multi-Year Project (MYP)\") ? (
\r\n Please complete and upload the SPS MYP Application and Attachments file. In order to be eligible the file must include the following completed templates and documents in a single WORD document:\r\n
    \r\n
  1. \r\n MYP Application Acceptance of Funds (template provided)\r\n
  2. \r\n
  3. \r\n Research Agreement and confirmation of acceptance of MYP Handbook (template provided).\r\n
  4. \r\n
  5. \r\n CVs for all Co-Directors (using the templates in the Application and Attachments file).\r\n
  6. \r\n
  7. \r\n Intellectual Property Rights Agreement (IPR) (example) OR a signed Waiver (own format).\r\n
  8. \r\n
  9. \r\n A brief overview of the participating institutions, their capabilities, resources, and facilities. Please include the address of the institutional web page as well as the web address of any school or institute linked to the project.\r\n
  10. \r\n
  11. \r\n End-user Commitments.\r\n
  12. \r\n
  13. \r\n The Project Summary (using the template included in the Application and Attachment file).\r\n
  14. \r\n
\r\n Please upload the SPS MYP Detailed Excel Budget.\r\n
\r\n The attachments should be one WORD file and one EXCEL file only. All templates are available through downloading the MYP application package available on the SPS Website.\r\n
) : (
\r\n Please complete and upload the SPS Event Application file. In order to be eligible the file must include the following completed templates and documents in a single WORD document:\r\n
    \r\n
  1. \r\n SPS Event Application - Acceptance of Funds (template provided).\r\n
  2. \r\n
  3. \r\n CVs for NPD and PPD (using the templates included in the Application file).\r\n
  4. \r\n
  5. \r\n The Project Summary (using the template included in the Application file).\r\n
  6. \r\n
  7. \r\n Please upload the SPS Event Excel Budget.\r\n
  8. \r\n
\r\n The attachments should be one WORD file and one EXCEL file only. All templates are available through downloading the EVENT application package available on the SPS Website.\r\n
)) : (
\r\n Please include the following attachments:\r\n
    \r\n
  1. \r\n A letter of request, signed and dated with all bank details (see grant application guidelines)\r\n
  2. \r\n
  3. \r\n A structured outline of the activity including a summary, objectives, audience insight, strategy, implementation, assessment, outputs, outcomes (see grant application guidelines)\r\n
  4. \r\n
  5. \r\n A detailed budget breakdown on the provided Excel spreadsheet\r\n
  6. \r\n
  7. \r\n A draft event agenda (if applicable)\r\n
  8. \r\n
  9. \r\n A draft list of participants (if applicable)\r\n
  10. \r\n
\r\n
);\r\n let progressIndicator = ();\r\n let validationErrorElement = (this.state.validationCount > 0 && !this.state.documentsValid) ? (
Incorrect (number of) documents were uploaded to this application
) : undefined;\r\n let iFrameUrl = this.state.documentSetContentsUrl + \"&allowEdit=\" + this._allowEdit;\r\n let iFrame = ();\r\n let container = (
\r\n {helpText}\r\n {validationErrorElement}\r\n {(this.state.documentSetContentsUrl != \"\" && iFrame)}\r\n {(!this.state.iFrameLoaded && progressIndicator)}\r\n
);\r\n return container;\r\n }\r\n}\r\n//# sourceMappingURL=Wizard7AttachmentsComponent.jsx.map","import { Component } from 'react';\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { DatePicker } from 'office-ui-fabric-react/lib/DatePicker';\r\nimport { CheckboxVisibility, DetailsList, DetailsListLayoutMode, SelectionMode } from 'office-ui-fabric-react/lib/DetailsList';\r\nimport { CommandBar } from 'office-ui-fabric-react/lib/CommandBar';\r\nexport class Wizard9FinancialRulesComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this._getCommandItems = () => {\r\n return [];\r\n };\r\n // if (this.props.application != null) {\r\n // this._projectDetails = this.props.application.projectDetails;\r\n // }\r\n this.onFieldFocus = this.onFieldFocus.bind(this);\r\n this.onFieldBlur = this.onFieldBlur.bind(this);\r\n this.onFieldValueChange = this.onFieldValueChange.bind(this);\r\n this.state = {\r\n currentUser: null,\r\n infoTextToDisplay: \"\",\r\n milestoneItems: [],\r\n saveDisabled: false,\r\n kickoffDate: null\r\n };\r\n }\r\n SetReadOnly(allowEdit) {\r\n //TODO\r\n }\r\n render() {\r\n // Parse the array of events to Objects that can be used by the DetailsList\r\n let columnsMilestones = [\r\n { key: \"col_event\", name: \"Event\", fieldName: \"col_event\", minWidth: 200, isMultiline: false },\r\n { key: \"col_descr\", name: \"Description\", fieldName: \"col_descr\", minWidth: 300, isMultiline: false },\r\n { key: \"col_date\", name: \"Expected date\", fieldName: \"col_date\", minWidth: 100, isMultiline: false }\r\n ];\r\n let formTable = (\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n this._startDateControl = field} onSelectDate={newDate => {\r\n //console.log(newDate);\r\n this.setState({ kickoffDate: newDate });\r\n this.recalculateDates(newDate);\r\n }}/>\r\n
\r\n

Milestones

\r\n \r\n \r\n
);\r\n return formTable;\r\n }\r\n onFieldFocus(ev) {\r\n //Retrieve the 'title'-property from the field and render it as helptext\r\n let text = \"\" + ev.currentTarget.title;\r\n this.setState({ infoTextToDisplay: text });\r\n }\r\n onFieldBlur(ev) {\r\n //Clear the helptext\r\n this.setState({ infoTextToDisplay: \"\" });\r\n }\r\n onFieldValueChange(fieldName, newValue) {\r\n }\r\n onAddFieldValueChange() {\r\n }\r\n recalculateDates(newDate) {\r\n // Kick off date\r\n let dateKickoff = newDate; //this.state.kickoffDate; //this._startDateControl.state.selectedDate;\r\n // Milestone 1 date\r\n let dateMS1 = new Date();\r\n dateMS1.setDate(dateKickoff.getDate() + 180);\r\n // Milestone 2 date\r\n let dateMS2 = new Date();\r\n dateMS2.setDate(dateMS1.getDate() + 180);\r\n // Milestone 3 date\r\n let dateMS3 = new Date();\r\n dateMS3.setDate(dateMS2.getDate() + 180);\r\n // Milestone 4 date\r\n let dateMS4 = new Date();\r\n dateMS4.setDate(dateMS3.getDate() + 180);\r\n // Final report date\r\n let dateFR = new Date();\r\n dateFR.setDate(dateMS4.getDate() + 180);\r\n let itemsUpd = this.state.milestoneItems;\r\n itemsUpd = [];\r\n itemsUpd.push({\r\n \"col_event\": \"Kick-Off\",\r\n \"col_descr\": \"Project Kick-Off Meeting\",\r\n \"col_date\": this.toShortDate(dateKickoff)\r\n });\r\n itemsUpd.push({\r\n \"col_event\": \"Milestone 1\",\r\n \"col_descr\": \"First Progress and Financial Report\",\r\n \"col_date\": this.toShortDate(dateMS1)\r\n });\r\n itemsUpd.push({\r\n \"col_event\": \"Milestone 2\",\r\n \"col_descr\": \"Second Progress and Financial Report\",\r\n \"col_date\": this.toShortDate(dateMS2)\r\n });\r\n itemsUpd.push({\r\n \"col_event\": \"Milestone 3\",\r\n \"col_descr\": \"Thrird Progress and Financial Report\",\r\n \"col_date\": this.toShortDate(dateMS3)\r\n });\r\n itemsUpd.push({\r\n \"col_event\": \"Milestone 4\",\r\n \"col_descr\": \"Fourth Progress and Financial Report\",\r\n \"col_date\": this.toShortDate(dateMS4)\r\n });\r\n itemsUpd.push({\r\n \"col_event\": \"Final Report\",\r\n \"col_descr\": \"Final Technical and Financial Report\",\r\n \"col_date\": this.toShortDate(dateFR)\r\n });\r\n this.setState({\r\n milestoneItems: itemsUpd,\r\n kickoffDate: newDate\r\n });\r\n }\r\n toShortDate(date) {\r\n if (date) {\r\n let timestamp = (\"0\" + date.getDate()).slice(-2) + \".\" + (\"0\" + (date.getMonth() + 1)).slice(-2) + \".\" + date.getFullYear();\r\n return timestamp;\r\n }\r\n return \"\";\r\n }\r\n}\r\n//# sourceMappingURL=Wizard9FinancialRulesComponent.jsx.map","import { Component } from 'react';\r\n//import * as ReactDOM from 'react-dom';\r\nimport { LogMessage, LogSeverityEnum } from \"../index\";\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { IconButton } from '../../node_modules/office-ui-fabric-react/lib/Button';\r\nexport class Wizard10OverviewComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this._printableAreaId = 'printableArea';\r\n this.print = this.print.bind(this);\r\n this.state = {};\r\n }\r\n componentDidMount() {\r\n LogMessage.Log(\"Wizard page 10 (Overview) loaded\", this, LogSeverityEnum.Verbose);\r\n }\r\n //Saves all data on the current ApplicationWizardPage and creates a new SharePoint item if nessecary\r\n //Returns the item-ID of the saved Application Item in a Promise\r\n Save() {\r\n return Promise.resolve(this.props.application.id);\r\n }\r\n //Validates the fields on the current ApplicationWizardPage and show warnings if nessacery\r\n //Parameter submit: 'True' if this function should validate the fields for submissal, 'false' to validate for a normal save\r\n //Returns 'false' if some fields have invalid values, 'true' if all fields are valid\r\n Validate(submit) {\r\n return true;\r\n }\r\n //A function to render the Page in (1) Editable mode, or (2) Read-only mode\r\n SetReadOnly(allowEdit) {\r\n }\r\n get fieldValues() {\r\n const isEscMultiYearProject = this.props.application && this.props.application.projectDetails && this.props.application.projectDetails.projectType && this.props.application.projectDetails.projectType.toLocaleLowerCase() === \"Multi-Year Project (MYP)\".toLocaleLowerCase();\r\n return [\r\n //Applicant details\r\n {\r\n display: true,\r\n field: \"NATO Country Project Director name, firstname\",\r\n value: this.props.application.applicantDetails.contactPerson\r\n },\r\n {\r\n display: true,\r\n field: \"NATO Country Project Director address\",\r\n value: this.props.application.applicantDetails.contactAddress\r\n },\r\n {\r\n display: true,\r\n field: \"NATO Country Project Director country\",\r\n value: this.props.application.applicantDetails.contactCountry\r\n },\r\n {\r\n display: true,\r\n field: \"NATO Country Project Director nationality\",\r\n value: this.props.application.applicantDetails.contactNationality\r\n },\r\n {\r\n display: true,\r\n field: \"NATO Country Project Director telephone number\",\r\n value: this.props.application.applicantDetails.contactTelephoneNumber\r\n },\r\n {\r\n display: true,\r\n field: \"NATO Country Project Director email address\",\r\n value: this.props.application.applicantDetails.alternativeContactEmailAddress\r\n },\r\n {\r\n display: true,\r\n field: \"NATO Country Project Director institution name\",\r\n value: this.props.application.applicantDetails.organizationName\r\n },\r\n {\r\n display: true,\r\n field: \"Organization address (street and number)\",\r\n value: this.props.application.applicantDetails.organizationAddress\r\n },\r\n {\r\n display: true,\r\n field: \"Organization postal code\",\r\n value: this.props.application.applicantDetails.organizationPostalCode\r\n },\r\n {\r\n display: true,\r\n field: \"Organization city\",\r\n value: this.props.application.applicantDetails.organizationCity\r\n },\r\n {\r\n display: true,\r\n field: \"Organization country\",\r\n value: this.props.application.applicantDetails.organizationCountry\r\n },\r\n {\r\n display: true,\r\n field: \"Partner Country Project Director name, firstname\",\r\n value: this.props.application.applicantDetails.alternativeContactPerson\r\n },\r\n {\r\n display: true,\r\n field: \"Partner Country Project Director address\",\r\n value: this.props.application.applicantDetails.alternativeContactAddress\r\n },\r\n {\r\n display: true,\r\n field: \"Partner Country Project Director country\",\r\n value: this.props.application.applicantDetails.alternativeContactCountry\r\n },\r\n {\r\n display: true,\r\n field: \"Partner Country Project Director nationality\",\r\n value: this.props.application.applicantDetails.alternativeContactNationality\r\n },\r\n {\r\n display: true,\r\n field: \"Partner Country Project Director telephone number\",\r\n value: this.props.application.applicantDetails.telephoneNumber\r\n },\r\n {\r\n display: true,\r\n field: \"Partner Country Project Director email address\",\r\n value: this.props.application.applicantDetails.alternativeContactEmailAddress\r\n },\r\n {\r\n display: true,\r\n field: \"Partner Country Project Director institution name\",\r\n value: this.props.application.applicantDetails.alternativeContactOrganizationName\r\n },\r\n {\r\n display: true,\r\n field: \"Partner Country Project Director institution country\",\r\n value: this.props.application.applicantDetails.alternativeContactOrganizationCountry\r\n },\r\n {\r\n display: true,\r\n field: \"Project Co Director\",\r\n value: this.props.application.applicantDetails.projectCoDirectorsDetails && this.props.application.applicantDetails.projectCoDirectorsDetails.length > 0 ?\r\n JSON.parse(this.props.application.applicantDetails.projectCoDirectorsDetails).map((codirectordata, index) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Name{codirectordata['name']}
Institution{codirectordata['institution']}
Address{codirectordata['address']}
Country{codirectordata['country']}
Nationality{codirectordata['nationality']}
E-mail address{codirectordata['email']}
Telephone number{codirectordata['telephone']}
);\r\n }) : ''\r\n },\r\n //Activity details\r\n {\r\n display: true,\r\n field: \"Code\",\r\n value: this.props.application.projectDetails.code\r\n },\r\n {\r\n display: true,\r\n field: \"Synopsis\",\r\n value: this.props.application.projectDetails.projectSynopsis\r\n },\r\n {\r\n display: true,\r\n field: \"Activity type\",\r\n value: this.props.application.projectDetails.projectType\r\n },\r\n {\r\n display: true,\r\n field: \"Activity title\",\r\n value: this.props.application.projectDetails.projectDescription\r\n },\r\n {\r\n display: true,\r\n field: isEscMultiYearProject ? \"Abstract\" : \"Description and justification\",\r\n value: this.props.application.projectDetails.projectDetailedDescription\r\n },\r\n {\r\n display: !isEscMultiYearProject,\r\n field: \"Event venue\",\r\n value: this.props.application.projectDetails.projectLocation\r\n },\r\n {\r\n display: !isEscMultiYearProject,\r\n field: \"Event venue\",\r\n value: this.props.application.projectDetails.projectCity\r\n },\r\n {\r\n display: !isEscMultiYearProject,\r\n field: \"Event venue\",\r\n value: this.props.application.projectDetails.projectCountry\r\n },\r\n {\r\n display: true,\r\n field: \"Estimated start date\",\r\n value: this.props.application.projectDetails.projectDate ? this.props.application.projectDetails.projectDate.toLocaleDateString() : ''\r\n },\r\n {\r\n display: true,\r\n field: \"Estimated end date\",\r\n value: this.props.application.projectDetails.projectEndDate ? this.props.application.projectDetails.projectEndDate.toLocaleDateString() : ''\r\n },\r\n {\r\n display: true,\r\n field: \"SPS key priorities\",\r\n value: this.props.application.projectDetails.projectTopic && this.props.application.projectDetails.projectTopic.length > 0 ?\r\n
    \r\n {JSON.parse(this.props.application.projectDetails.projectTopic).map((keyPriorityData, index) => {\r\n const arrow = '⇒';\r\n return (
  • {`${keyPriorityData['_level1']} ${arrow} ${keyPriorityData['_level2']} ${arrow} ${keyPriorityData['_level3']}`}
  • );\r\n })}\r\n
: ''\r\n },\r\n //Budget\r\n {\r\n display: true,\r\n field: \"Budget template\",\r\n value: this.props.application.projectBudget.budgetBreakdownTemplate\r\n },\r\n {\r\n display: true,\r\n field: \"Budget currency\",\r\n value: this.props.application.projectBudget.budgetCurrency,\r\n },\r\n {\r\n display: true,\r\n field: \"Overall budget\",\r\n value: this.props.application.projectBudget.budgetBreakdown && this.props.application.projectBudget.budgetBreakdown.length > 0 ?\r\n \r\n \r\n \r\n \r\n \r\n {JSON.parse(this.props.application.projectBudget.budgetBreakdown).map((budgetData, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
TaskDescriptionAmount
{budgetData['taskName']}{budgetData['description']}{budgetData['ammount']}
: ''\r\n },\r\n //Milestones\r\n {\r\n display: isEscMultiYearProject,\r\n field: \"Milestones\",\r\n value: this.props.application.projectTimeline.projectTimeline && this.props.application.projectTimeline.projectTimeline.length > 0 ?\r\n \r\n \r\n \r\n \r\n \r\n {JSON.parse(this.props.application.projectTimeline.projectTimeline).map((milestoneData, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
EventDescriptionPreferred date
{milestoneData['col_event']}{milestoneData['col_descr']}{milestoneData['col_date']}
: ''\r\n }\r\n ];\r\n }\r\n print(event) {\r\n let printWindow = window.open('', 'PRINT', 'height=400,width=600');\r\n printWindow.document.write('' + document.title + '');\r\n printWindow.document.write('');\r\n printWindow.document.write('

' + document.title + '

');\r\n printWindow.document.write(document.getElementById(this._printableAreaId).innerHTML);\r\n printWindow.document.write('');\r\n printWindow.document.close(); // necessary for IE >= 10\r\n printWindow.focus(); // necessary for IE >= 10*/\r\n printWindow.print();\r\n printWindow.close();\r\n }\r\n render() {\r\n return (\r\n \r\n \r\n \r\n
\r\n \r\n \r\n {this.fieldValues.filter(f => f.display).map(f => {\r\n return (\r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {f.value}\r\n \r\n
\r\n
\r\n
);\r\n }\r\n}\r\n//# sourceMappingURL=Wizard10OverviewComponent.jsx.map","import { Component } from 'react';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TooltipHost, TooltipDelay } from 'office-ui-fabric-react/lib/Tooltip';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { Dropdown } from 'office-ui-fabric-react/lib/Dropdown';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport { DatePicker } from 'office-ui-fabric-react/lib/DatePicker';\r\nimport { Application, Nations, DivisionEnum, User } from \"../index\";\r\nexport class AmmendApplicationComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n let beneficiaryNation = this.props.application.beneficiaryNation;\r\n let milestones = {};\r\n // For MYP: Set Partner Country Director (PPD) nation to Budget PPD director country by default\r\n if (this.props.application.projectBudget\r\n && this.props.application.projectBudget.budgetBreakdownTemplate == \"Multi-Year Project (MYP)\"\r\n && this.props.application.projectBudget.budgetBreakdown) {\r\n let budgetBreakdown = JSON.parse(this.props.application.projectBudget.budgetBreakdown);\r\n if (Array.isArray(budgetBreakdown) && budgetBreakdown.length > 0) {\r\n budgetBreakdown.forEach(row => {\r\n if (!beneficiaryNation && row && row.taskNumber && row.taskNumber == \"M1-PPD\" && row.directorCountry && row.directorCountry.length > 0) {\r\n beneficiaryNation = row.directorCountry;\r\n }\r\n if (row && row.taskNumber && row.taskNumber.length > 2 && row.ammount && row.ammount.length > 0) {\r\n let mCode = row.taskNumber.substr(0, 2);\r\n if (milestones[mCode]) {\r\n milestones[mCode].totalAmount += Number(row.ammount);\r\n }\r\n else {\r\n milestones[mCode] = { totalAmount: Number(row.ammount) };\r\n }\r\n }\r\n });\r\n }\r\n }\r\n this.state = {\r\n hideDialog: false,\r\n meetingNumber: this.props.application.meetingNumber,\r\n partnershipFramework: this.props.application.partnershipFramework,\r\n origin: this.props.application.origin,\r\n beneficiaryNation: beneficiaryNation,\r\n primaryKeyPriority: this.props.application.primaryKeyPriority,\r\n secondaryKeyPriority: this.props.application.secondaryKeyPriority,\r\n priority: this.props.application.priority,\r\n beneficiaryNationsSplit: this.props.application.beneficiaryNationsSplit,\r\n region: this.props.application.region,\r\n finalReportDueDate: this.props.application.finalReportDueDate ? new Date(this.props.application.finalReportDueDate) : null,\r\n processStage: this.props.application.processStage,\r\n godParent: this.props.application.godParent,\r\n documentReferences: this.props.application.documentReferences,\r\n webURL: this.props.application.webURL,\r\n publisher: this.props.application.publisher,\r\n publisherSubSeries: this.props.application.publisherSubSeries,\r\n dateBooksReceived: this.props.application.dateBooksReceived ? new Date(this.props.application.dateBooksReceived) : null,\r\n yearOfInitialAward: this.props.application.yearOfInitialAward,\r\n yearOfOfficialClosure: this.props.application.yearOfOfficialClosure,\r\n approvedBudgetCeiling: this.props.application.approvedBudgetCeiling,\r\n initialAwardTrancheAmount: this.props.application.initialAwardTrancheAmount,\r\n milestone1TrancheAmount: this.props.application.milestone1TrancheAmount ? this.props.application.milestone1TrancheAmount : (milestones[\"M1\"] ? milestones[\"M1\"].totalAmount.toString() : null),\r\n milestone2TrancheAmount: this.props.application.milestone2TrancheAmount ? this.props.application.milestone2TrancheAmount : (milestones[\"M2\"] ? milestones[\"M2\"].totalAmount.toString() : null),\r\n milestone3TrancheAmount: this.props.application.milestone3TrancheAmount ? this.props.application.milestone3TrancheAmount : (milestones[\"M3\"] ? milestones[\"M3\"].totalAmount.toString() : null),\r\n milestone4TrancheAmount: this.props.application.milestone4TrancheAmount ? this.props.application.milestone4TrancheAmount : (milestones[\"M4\"] ? milestones[\"M4\"].totalAmount.toString() : null),\r\n milestoneFinalTrancheAmount: this.props.application.milestoneFinalTrancheAmount ? this.props.application.milestoneFinalTrancheAmount : (milestones[\"MF\"] ? milestones[\"MF\"].totalAmount.toString() : null),\r\n initialAmount: this.props.application.initialAmount\r\n };\r\n this.OnConfirmClick = this.OnConfirmClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n this.onMeetingNumberChanged = this.onMeetingNumberChanged.bind(this);\r\n this.onPartnershipFrameworkChanged = this.onPartnershipFrameworkChanged.bind(this);\r\n this.onOriginChanged = this.onOriginChanged.bind(this);\r\n this.onBeneficiaryNationChanged = this.onBeneficiaryNationChanged.bind(this);\r\n this.onPrimaryKeyPriorityChanged = this.onPrimaryKeyPriorityChanged.bind(this);\r\n this.onSecondaryKeyPriorityChanged = this.onSecondaryKeyPriorityChanged.bind(this);\r\n this.onPriorityChanged = this.onPriorityChanged.bind(this);\r\n this.onBeneficiaryNationsSplitChanged = this.onBeneficiaryNationsSplitChanged.bind(this);\r\n this.onRegionChanged = this.onRegionChanged.bind(this);\r\n this.onFinalReportDueDateChanged = this.onFinalReportDueDateChanged.bind(this);\r\n this.onProcessStageChanged = this.onProcessStageChanged.bind(this);\r\n this.onGodParentChanged = this.onGodParentChanged.bind(this);\r\n this.onDocumentReferencesChanged = this.onDocumentReferencesChanged.bind(this);\r\n this.onWebURLChanged = this.onWebURLChanged.bind(this);\r\n this.onPublisherChanged = this.onPublisherChanged.bind(this);\r\n this.onPublisherSubSeriesChanged = this.onPublisherSubSeriesChanged.bind(this);\r\n this.onDateBooksReceivedChanged = this.onDateBooksReceivedChanged.bind(this);\r\n this.onYearOfInitialAwardChanged = this.onYearOfInitialAwardChanged.bind(this);\r\n this.onYearOfOfficialClosureChanged = this.onYearOfOfficialClosureChanged.bind(this);\r\n this.onApprovedBudgetCeilingChanged = this.onApprovedBudgetCeilingChanged.bind(this);\r\n this.onInitialAwardTrancheAmountChanged = this.onInitialAwardTrancheAmountChanged.bind(this);\r\n this.onMilestone1TrancheAmountChanged = this.onMilestone1TrancheAmountChanged.bind(this);\r\n this.onMilestone2TrancheAmountChanged = this.onMilestone2TrancheAmountChanged.bind(this);\r\n this.onMilestone3TrancheAmountChanged = this.onMilestone3TrancheAmountChanged.bind(this);\r\n this.onMilestone4TrancheAmountChanged = this.onMilestone4TrancheAmountChanged.bind(this);\r\n this.onMilestoneFinalTrancheAmountChanged = this.onMilestoneFinalTrancheAmountChanged.bind(this);\r\n this.onInitialAmountChanged = this.onInitialAmountChanged.bind(this);\r\n }\r\n componentWillMount() {\r\n }\r\n componentDidMount() {\r\n }\r\n OnConfirmClick() {\r\n this.props.application.meetingNumber = this.state.meetingNumber;\r\n this.props.application.partnershipFramework = this.state.partnershipFramework;\r\n this.props.application.origin = this.state.origin;\r\n this.props.application.beneficiaryNation = this.state.beneficiaryNation;\r\n this.props.application.primaryKeyPriority = this.state.primaryKeyPriority;\r\n this.props.application.secondaryKeyPriority = this.state.secondaryKeyPriority;\r\n this.props.application.priority = this.state.priority;\r\n this.props.application.beneficiaryNationsSplit = this.state.beneficiaryNationsSplit;\r\n this.props.application.region = this.state.region;\r\n this.props.application.finalReportDueDate = this.state.finalReportDueDate;\r\n this.props.application.processStage = this.state.processStage;\r\n this.props.application.godParent = this.state.godParent;\r\n this.props.application.documentReferences = this.state.documentReferences;\r\n this.props.application.webURL = this.state.webURL;\r\n this.props.application.publisher = this.state.publisher;\r\n this.props.application.publisherSubSeries = this.state.publisherSubSeries;\r\n this.props.application.dateBooksReceived = this.state.dateBooksReceived;\r\n this.props.application.yearOfInitialAward = this.state.yearOfInitialAward;\r\n this.props.application.yearOfOfficialClosure = this.state.yearOfOfficialClosure;\r\n this.props.application.approvedBudgetCeiling = this.state.approvedBudgetCeiling;\r\n this.props.application.initialAwardTrancheAmount = this.state.initialAwardTrancheAmount;\r\n this.props.application.milestone1TrancheAmount = this.state.milestone1TrancheAmount;\r\n this.props.application.milestone2TrancheAmount = this.state.milestone2TrancheAmount;\r\n this.props.application.milestone3TrancheAmount = this.state.milestone3TrancheAmount;\r\n this.props.application.milestone4TrancheAmount = this.state.milestone4TrancheAmount;\r\n this.props.application.milestoneFinalTrancheAmount = this.state.milestoneFinalTrancheAmount;\r\n this.props.application.initialAmount = this.state.initialAmount;\r\n this.props.application.updateFields([\r\n { internalFieldName: \"natoMeetingNumber\", fieldValue: this.props.application.meetingNumber },\r\n { internalFieldName: \"natoPartnershipFramework\", fieldValue: this.props.application.partnershipFramework },\r\n { internalFieldName: \"natoOrigin\", fieldValue: this.props.application.origin },\r\n { internalFieldName: \"natoBeneficiaryNation\", fieldValue: this.props.application.beneficiaryNation },\r\n { internalFieldName: \"natoPrimaryKeyPriority\", fieldValue: this.props.application.primaryKeyPriority },\r\n { internalFieldName: \"natoSecondaryKeyPriority\", fieldValue: this.props.application.secondaryKeyPriority },\r\n { internalFieldName: \"natoPriority\", fieldValue: this.props.application.priority },\r\n { internalFieldName: \"natoBeneficiaryNationsSplit\", fieldValue: this.props.application.beneficiaryNationsSplit },\r\n { internalFieldName: \"natoRegion\", fieldValue: this.props.application.region },\r\n { internalFieldName: \"natoFinalReportDueDate\", fieldValue: this.props.application.finalReportDueDate },\r\n { internalFieldName: \"natoProcessStage\", fieldValue: this.props.application.processStage },\r\n { internalFieldName: \"natoGodParent\", fieldValue: this.props.application.godParent },\r\n { internalFieldName: \"natoDocumentReferences\", fieldValue: this.props.application.documentReferences },\r\n { internalFieldName: \"natoWebURL\", fieldValue: this.props.application.webURL },\r\n { internalFieldName: \"natoPublisher\", fieldValue: this.props.application.publisher },\r\n { internalFieldName: \"natoPublisherSubSeries\", fieldValue: this.props.application.publisherSubSeries },\r\n { internalFieldName: \"natoDateBooksReceived\", fieldValue: this.props.application.dateBooksReceived },\r\n { internalFieldName: \"natoYearOfInitialAward\", fieldValue: this.props.application.yearOfInitialAward },\r\n { internalFieldName: \"natoYearOfOfficialClosure\", fieldValue: this.props.application.yearOfOfficialClosure },\r\n { internalFieldName: \"natoApprovedBudgetCeiling\", fieldValue: this.props.application.approvedBudgetCeiling },\r\n { internalFieldName: \"natoInitialAwardTrancheAmount\", fieldValue: this.props.application.initialAwardTrancheAmount },\r\n { internalFieldName: \"natoMilestone1TrancheAmount\", fieldValue: this.props.application.milestone1TrancheAmount },\r\n { internalFieldName: \"natoMilestone2TrancheAmount\", fieldValue: this.props.application.milestone2TrancheAmount },\r\n { internalFieldName: \"natoMilestone3TrancheAmount\", fieldValue: this.props.application.milestone3TrancheAmount },\r\n { internalFieldName: \"natoMilestone4TrancheAmount\", fieldValue: this.props.application.milestone4TrancheAmount },\r\n { internalFieldName: \"natoMilestoneFinalTrancheAmount\", fieldValue: this.props.application.milestoneFinalTrancheAmount },\r\n { internalFieldName: \"natoInitialAmount\", fieldValue: this.props.application.initialAmount }\r\n ]).then(() => {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onConfirm)\r\n this.props.onConfirm();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }).catch(reason => {\r\n });\r\n }\r\n OnCancelClick() {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onCancel)\r\n this.props.onCancel();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n onMeetingNumberChanged(newValue) {\r\n this.setState({\r\n meetingNumber: newValue\r\n });\r\n }\r\n onPartnershipFrameworkChanged(option, index) {\r\n this.setState({\r\n partnershipFramework: (\"\" + option.key)\r\n });\r\n }\r\n onOriginChanged(option, index) {\r\n this.setState({\r\n origin: (\"\" + option.key)\r\n });\r\n }\r\n onBeneficiaryNationChanged(option, index) {\r\n this.setState({\r\n beneficiaryNation: (\"\" + option.key)\r\n });\r\n }\r\n onPrimaryKeyPriorityChanged(option, index) {\r\n this.setState({\r\n primaryKeyPriority: (\"\" + option.key)\r\n });\r\n }\r\n onSecondaryKeyPriorityChanged(option, index) {\r\n this.setState({\r\n secondaryKeyPriority: (\"\" + option.key)\r\n });\r\n }\r\n onPriorityChanged(option, index) {\r\n this.setState({\r\n priority: (\"\" + option.key)\r\n });\r\n }\r\n onBeneficiaryNationsSplitChanged(newValue) {\r\n this.setState({\r\n beneficiaryNationsSplit: newValue\r\n });\r\n }\r\n onRegionChanged(option, index) {\r\n this.setState({\r\n region: (\"\" + option.key)\r\n });\r\n }\r\n onFinalReportDueDateChanged(newValue) {\r\n this.setState({\r\n finalReportDueDate: newValue\r\n });\r\n }\r\n onProcessStageChanged(option, index) {\r\n this.setState({\r\n processStage: (\"\" + option.key)\r\n });\r\n }\r\n onGodParentChanged(newValue) {\r\n this.setState({\r\n godParent: newValue\r\n });\r\n }\r\n onDocumentReferencesChanged(newValue) {\r\n this.setState({\r\n documentReferences: newValue\r\n });\r\n }\r\n onWebURLChanged(newValue) {\r\n this.setState({\r\n webURL: newValue\r\n });\r\n }\r\n onPublisherChanged(option, index) {\r\n this.setState({\r\n publisher: (\"\" + option.key)\r\n });\r\n }\r\n onPublisherSubSeriesChanged(option, index) {\r\n this.setState({\r\n publisherSubSeries: (\"\" + option.key)\r\n });\r\n }\r\n onDateBooksReceivedChanged(newValue) {\r\n this.setState({\r\n dateBooksReceived: newValue\r\n });\r\n }\r\n onYearOfInitialAwardChanged(option, index) {\r\n this.setState({\r\n yearOfInitialAward: Number(option.key)\r\n });\r\n }\r\n onYearOfOfficialClosureChanged(option, index) {\r\n this.setState({\r\n yearOfOfficialClosure: Number(option.key)\r\n });\r\n }\r\n onApprovedBudgetCeilingChanged(newValue) {\r\n this.setState({\r\n approvedBudgetCeiling: (\"\" + newValue).replace(/[^0-9]/g, '')\r\n });\r\n }\r\n onInitialAwardTrancheAmountChanged(newValue) {\r\n this.setState({\r\n initialAwardTrancheAmount: (\"\" + newValue).replace(/[^0-9]/g, '')\r\n });\r\n }\r\n onMilestone1TrancheAmountChanged(newValue) {\r\n this.setState({\r\n milestone1TrancheAmount: (\"\" + newValue).replace(/[^0-9]/g, '')\r\n });\r\n }\r\n onMilestone2TrancheAmountChanged(newValue) {\r\n this.setState({\r\n milestone2TrancheAmount: (\"\" + newValue).replace(/[^0-9]/g, '')\r\n });\r\n }\r\n onMilestone3TrancheAmountChanged(newValue) {\r\n this.setState({\r\n milestone3TrancheAmount: (\"\" + newValue).replace(/[^0-9]/g, '')\r\n });\r\n }\r\n onMilestone4TrancheAmountChanged(newValue) {\r\n this.setState({\r\n milestone4TrancheAmount: (\"\" + newValue).replace(/[^0-9]/g, '')\r\n });\r\n }\r\n onMilestoneFinalTrancheAmountChanged(newValue) {\r\n this.setState({\r\n milestoneFinalTrancheAmount: (\"\" + newValue).replace(/[^0-9]/g, '')\r\n });\r\n }\r\n onInitialAmountChanged(newValue) {\r\n this.setState({\r\n initialAmount: (\"\" + newValue).replace(/[^0-9]/g, '')\r\n });\r\n }\r\n render() {\r\n let division = this.props.application.applicantDetails.division;\r\n let title = this.props.title || \"Amend application\";\r\n let subtitle = this.props.subText || \"Use this dialog to amend the application\";\r\n let inputStyle = { display: \"inline-block\", width: \"330px\", marginRight: \"7px\" };\r\n // Partnership Frameworks\r\n let partnershipFrameworks = [\"\", \"EAPC\", \"EAPC–BLK\", \"EAPC–CAS\", \"EAPC–CAU\", \"EAPC-GLP\", \"EAPC-NGE\", \"ICI\", \"IO\", \"MD\", \"NRC\", \"NUKR\", \"OPS\"].sort((a, b) => { return a.localeCompare(b); });\r\n let partnershipFrameworksOptions = partnershipFrameworks.map(framework => {\r\n return { key: framework, text: framework, selected: (this.state.partnershipFramework == framework) };\r\n });\r\n // Origins\r\n let origins = [\"Bottom-up\", \"Top-down\", \"\"].sort((a, b) => { return a.localeCompare(b); });\r\n let originsOptions = origins.map(origin => {\r\n return { key: origin, text: origin, selected: (this.state.origin == origin) };\r\n });\r\n // Nations\r\n let nations = Nations.List.sort((a, b) => { return a.localeCompare(b); });\r\n let nationOptions = nations.map(nation => {\r\n return { key: nation, text: nation, selected: (this.state.beneficiaryNation == nation) };\r\n });\r\n // Primary SPS Key Priority / Secondary SPS Key Priority\r\n let keyPriorityList = [\r\n \"\",\r\n \"1a CT\",\r\n \"1b ES\",\r\n \"1c Cyber\",\r\n \"1d CBRN\",\r\n \"1e Env\",\r\n \"2 OPS\",\r\n \"3a ADV\",\r\n \"3b BRDR\",\r\n \"3c UXO\",\r\n \"3d HUM\",\r\n \"4 Other\"\r\n ];\r\n let primaryKeyPriorityOptions = keyPriorityList.map(value => {\r\n return { key: value, text: value, selected: (this.state.primaryKeyPriority == value) };\r\n });\r\n let secondaryKeyPriorityOptions = keyPriorityList.map(value => {\r\n return { key: value, text: value, selected: (this.state.secondaryKeyPriority == value) };\r\n });\r\n // NATO Priority\r\n let priorityList = [\r\n \"\",\r\n \"Counter-Terrorism (CT)\",\r\n \"CR Related (CTR)\",\r\n \"DCB\",\r\n \"Projecting Stability (PS)\",\r\n \"CT-DCB\",\r\n \"CT-PS\",\r\n \"DCB-PS\",\r\n \"DCB-PS-CT\"\r\n ];\r\n let priorityOptions = priorityList.map(value => {\r\n return { key: value, text: value, selected: (this.state.priority == value) };\r\n });\r\n // Region\r\n let regionList = [\r\n \"\",\r\n \"UKRAINE\",\r\n \"OTHER EAPC PARTNERS (NOT CAU/CAS/EA2/GLP) (2012)\",\r\n \"NON-ASSOCIATED EAPC\",\r\n \"EAPC ON SELFUND:AUSTRIA/ SWTZ/SWD/ MLT/ IRL(2012)\",\r\n \"MEDITERRANEAN DIALOGUE\",\r\n \"BALKAN\",\r\n \"CAUCASUS\",\r\n \"CENTRAL ASIA\"\r\n ];\r\n let regionOptions = regionList.map(value => {\r\n return { key: value, text: value, selected: (this.state.region == value) };\r\n });\r\n // Process Stage\r\n let processStageList = [\r\n \"\",\r\n \"Application\",\r\n \"ISEG\",\r\n \"PCSC\",\r\n \"Advisor\"\r\n ];\r\n let processStageOptions = processStageList.map(value => {\r\n return { key: value, text: value, selected: (this.state.processStage == value) };\r\n });\r\n // Publisher\r\n let publisherList = [\r\n \"\",\r\n \"Not Publishing\",\r\n \"Springer\",\r\n \"IOS Press\"\r\n ];\r\n let publisherOptions = publisherList.map(value => {\r\n return { key: value, text: value, selected: (this.state.publisher == value) };\r\n });\r\n // Publisher Sub-Series\r\n let publisherSubSeriesList = [\r\n \"\",\r\n \"Chemistry and Biology (Springer)\",\r\n \"Physics and Biophysics (Springer)\",\r\n \"Environmental Security (Springer)\",\r\n \"Information and Communications Security (IOS Press)\",\r\n \"Human and Societal Dynamics (IOS Press)\"\r\n ];\r\n let publisherSubSeriesOptions = publisherSubSeriesList.map(value => {\r\n return { key: value, text: value, selected: (this.state.publisherSubSeries == value) };\r\n });\r\n // Year of Initial Award / Year of Official Closure\r\n let yearsList = [];\r\n for (let y = 2000; y <= 2099; y++) {\r\n yearsList.push(y);\r\n }\r\n let yearOfInitialAwardOptions = yearsList.map(value => {\r\n return { key: value, text: value, selected: (this.state.yearOfInitialAward == value) };\r\n });\r\n let yearOfOfficialClosureOptions = yearsList.map(value => {\r\n return { key: value, text: value, selected: (this.state.yearOfOfficialClosure == value) };\r\n });\r\n return (
\r\n \r\n
);\r\n }\r\n static DoesUserHasPermissions() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n User.getCurrentUser().then(user => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC) {\r\n if (application.isUserSeniorAdvisor(user)\r\n || application.isUserAdvisor(user)) {\r\n resolve(true);\r\n }\r\n else {\r\n User.isMemberOfGroup([\"NAS Administrators\", \"ESC Grant Administrators\", \"ESC Budget Officers\"]).then(isMember => {\r\n resolve(isMember);\r\n });\r\n }\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=AmmendApplicationComponent.jsx.map","import { Component } from 'react';\r\nimport { User, Application, DivisionEnum, ApplicationStatus } from \"../index\";\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nexport class ApplicationApprovalHistoryComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.approvalFolder = \"ApprovalAttachments\";\r\n this.state = {\r\n hideDialog: false,\r\n allApprovals: new Array()\r\n };\r\n this.OnCloseClick = this.OnCloseClick.bind(this);\r\n }\r\n componentDidMount() {\r\n let context = SP.ClientContext.get_current();\r\n //Retrieve the approval-folder and the list of files\r\n let serverRelativeUrlForApproval = window.docsetHomePageData.urlDocSet + \"/\" + this.approvalFolder + \"/\";\r\n let appprovalFolder = context.get_web().getFolderByServerRelativeUrl(serverRelativeUrlForApproval);\r\n let approvalFiles = appprovalFolder.get_files();\r\n //Request the folder and files from the SharePoint webservice\r\n context.load(appprovalFolder);\r\n context.load(approvalFiles, \"Include(TimeLastModified, Author, ServerRelativeUrl, ListItemAllFields)\");\r\n context.executeQueryAsync((sender, args) => {\r\n let approvalData = new Array();\r\n //Loop over all files in the comments-folder\r\n var fileEnumerator = approvalFiles.getEnumerator();\r\n while (fileEnumerator.moveNext()) {\r\n //Get some basic information regarding the file\r\n let file = fileEnumerator.get_current();\r\n let relativeUrl = file.get_serverRelativeUrl();\r\n let author = file.get_author().get_title();\r\n let lastModified = file.get_timeLastModified();\r\n let item = file.get_listItemAllFields();\r\n let status = item.get_fieldValues()[\"natoApplicationStatus\"];\r\n let comments = item.get_fieldValues()[\"natoApprovalComments\"];\r\n let filename = (\"\" + item.get_fieldValues()[\"FileLeafRef\"]).split(\"_\").splice(1).join(\"_\");\r\n if (filename.toLocaleLowerCase() == \"empty.txt\") {\r\n filename = null;\r\n }\r\n approvalData.push({\r\n date: lastModified,\r\n user: author,\r\n fileUrl: relativeUrl,\r\n comments: comments,\r\n filename: filename,\r\n status: status\r\n });\r\n }\r\n this.setState({\r\n allApprovals: approvalData\r\n });\r\n }, (sender, args) => {\r\n //Probably the 'ApprovalAttachments' folder does not exist yet, that means there are no approvals yet\r\n //In this case we do nothing\r\n });\r\n }\r\n OnCloseClick() {\r\n this.setState({\r\n hideDialog: true\r\n });\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n render() {\r\n let currentApproval;\r\n if (this.state.allApprovals.length <= 0) {\r\n currentApproval = [Pending];\r\n }\r\n else {\r\n currentApproval = this.state.allApprovals.slice(0) //Take a copy of the Array\r\n .sort((a, b) => { return Number(b.date) - Number(a.date); }) //Sort newest on top\r\n .splice(0, 1) //Take the first item\r\n .map((approvalItem, index) => {\r\n let attachmentElement = null;\r\n if (approvalItem.filename) {\r\n attachmentElement = ();\r\n }\r\n let returnElement = (
\r\n\t\t\t\t\t\t{(approvalItem.status == \"Pending\") && {approvalItem.status}}\r\n\t\t\t\t\t\t{(approvalItem.status == \"Rejected\") && {approvalItem.status} by {approvalItem.user} on {approvalItem.date.format(\"dd MMM yyyy HH:mm\")}{(approvalItem.comments != null && approvalItem.comments.length > 0) && ( with comment {approvalItem.comments})}{attachmentElement}}\r\n\t\t\t\t\t\t{(approvalItem.status == \"Approved\") && {approvalItem.status} by {approvalItem.user} on {approvalItem.date.format(\"dd MMM yyyy HH:mm\")}{(approvalItem.comments != null && approvalItem.comments.length > 0) && ( with comment {approvalItem.comments})}{attachmentElement}}\r\n\t\t\t\t\t\t{(approvalItem.status != \"Pending\" && approvalItem.status != \"Rejected\" && approvalItem.status != \"Approved\") && {approvalItem.status} by {approvalItem.user} on {approvalItem.date.format(\"dd MMM yyyy HH:mm\")}{(approvalItem.comments != null && approvalItem.comments.length > 0) && ( with comment {approvalItem.comments})}{attachmentElement}}\r\n\t\t\t\t\t
);\r\n return returnElement;\r\n });\r\n }\r\n //Create the section to display the approval history\r\n let approvalHistory;\r\n if (this.state.allApprovals.length >= 2) {\r\n approvalHistory = this.state.allApprovals.slice(0) //Take a copy of the array\r\n .sort((a, b) => { return Number(b.date) - Number(a.date); }) //Sort newest on top\r\n //.slice(1) //Skip the first item\r\n .map((approvalItem, index) => {\r\n let attachmentElement = null;\r\n if (approvalItem.filename) {\r\n attachmentElement = ();\r\n }\r\n let color = \"blue\";\r\n if (approvalItem.status == \"Approved\") {\r\n color = \"green\";\r\n }\r\n if (approvalItem.status == \"Rejected\") {\r\n color = \"red\";\r\n }\r\n if (approvalItem.status == \"Pending\") {\r\n color = \"black\";\r\n }\r\n let returnElement = (\r\n {approvalItem.date.format(\"dd MMM yyyy HH:mm\")}\r\n {approvalItem.status}\r\n {approvalItem.user}\r\n {approvalItem.comments}\r\n {attachmentElement}\r\n );\r\n return returnElement;\r\n });\r\n }\r\n return (
\r\n \r\n
);\r\n }\r\n static DoesUserHasPermissions() {\r\n return new Promise((resolve, reject) => {\r\n Application.getFromContext().then(application => {\r\n if ((application.applicantDetails.division == DivisionEnum.ESC || application.applicantDetails.division == DivisionEnum.PDD)\r\n && (application.applicationStatus == ApplicationStatus.SUBMITTED || application.applicationStatus == ApplicationStatus.UNDER_REVIEW)) {\r\n User.getCurrentUser().then(user => {\r\n if (application.applicantDetails.division == DivisionEnum.ESC) {\r\n if (application.isUserSeniorAdvisor(user)\r\n || application.isUserAdvisor(user)\r\n || application.isUserReviewer(user)) {\r\n resolve(true);\r\n }\r\n else {\r\n User.isMemberOfGroup([\"NAS Administrators\", \"ESC Grant Administrators\", \"ESC ISEG Members\"]).then(isMember => {\r\n resolve(isMember);\r\n });\r\n }\r\n }\r\n else if (application.applicantDetails.division == DivisionEnum.PDD) {\r\n User.isMemberOfGroup([\"NAS Administrators\", \"PDD Grant Administrators\", \"PDD Budget Officers\"]).then(isMember => {\r\n resolve(isMember);\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=ApplicationApprovalHistoryComponent.jsx.map","import { Component } from 'react';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { Dropdown } from 'office-ui-fabric-react/lib/Dropdown';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport { DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TooltipHost, TooltipDelay } from 'office-ui-fabric-react/lib/Tooltip';\r\nimport { DetailsList, DetailsListLayoutMode, Selection, SelectionMode } from 'office-ui-fabric-react/lib/DetailsList';\r\nimport { ListNames, GrantStatus, LogMessage, LogSeverityEnum, SharePointRestService, ExploratoryGroupRegistration, PlenaryMeetingRegistration, SeminarRegistration, SPUtil } from \"../index\";\r\nimport { Checkbox } from '../../node_modules/office-ui-fabric-react/lib/Checkbox';\r\nexport class InvitationDialogComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.onRenderEventOption = (option) => {\r\n const iconType = (option.data.Status == GrantStatus.PUBLISHED) ? \"Completed\" : \"Blocked\";\r\n const iconColour = (option.data.Status == GrantStatus.PUBLISHED) ? \"Green\" : \"Red\";\r\n const iconTooltip = (option.data.Status == GrantStatus.PUBLISHED) ? \"Published\" : \"Not published\";\r\n const date = option.data.EndDate ? option.data.EndDate.format(\"dd-MM-yyyy\") : \"«No date set»\";\r\n return (
\r\n\t\t\t\r\n\t\t\t\t\t{date} {option.data.Title} ({option.data.Code})
\r\n\t\t\t\t\t{option.data.Synopsis}\r\n\t\t\t\t
);\r\n };\r\n this.state = {\r\n hideDialog: false,\r\n showPastEvents: false,\r\n events: new Array(),\r\n draftParticipants: new Array(),\r\n submittedParticipants: new Array(),\r\n selectedParticipants: new Array()\r\n };\r\n this._participantSelection = new Selection({\r\n onSelectionChanged: () => {\r\n this.setState({\r\n selectedParticipants: this._participantSelection.getSelection()\r\n });\r\n }\r\n });\r\n this.OnCloseClick = this.OnCloseClick.bind(this);\r\n this.onRenderEventOption = this.onRenderEventOption.bind(this);\r\n this.onEventChanged = this.onEventChanged.bind(this);\r\n this.onCopyEmailAddressesToClipboardClick = this.onCopyEmailAddressesToClipboardClick.bind(this);\r\n this.onCopySelectedUsersToClipboardClick = this.onCopySelectedUsersToClipboardClick.bind(this);\r\n this.onShowPastEventsChange = this.onShowPastEventsChange.bind(this);\r\n }\r\n componentDidMount() {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANTS + \"')/items?$filter=natoExternalStatus ne '\" + GrantStatus.ARCHIVED + \"'\";\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n if (odata.value.length == 0) {\r\n }\r\n else {\r\n let retrievedEvents = odata.value.map((odataObject, index) => {\r\n return {\r\n Title: odataObject.Title,\r\n Code: odataObject.natoCode,\r\n Synopsis: odataObject.natoSynopsis,\r\n Status: odataObject.natoExternalStatus,\r\n Eventtype: odataObject.natoNIAGEventType,\r\n EndDate: odataObject.natoEndDate ? new Date(odataObject.natoEndDate) : undefined\r\n };\r\n });\r\n retrievedEvents = retrievedEvents.filter(a => { return a.Code != null && a.Code.length > 0; }).sort((a, b) => { return a.Title.localeCompare(b.Title); });\r\n this.setState({\r\n events: retrievedEvents\r\n });\r\n }\r\n });\r\n })\r\n .catch(reason => {\r\n LogMessage.Log(\"Unable to retrieve the events: \" + reason, this, LogSeverityEnum.Error);\r\n });\r\n }\r\n dateConvert(dateobj, format) {\r\n let year = dateobj.getFullYear();\r\n let month = (\"0\" + (dateobj.getMonth() + 1)).slice(-2);\r\n let date = (\"0\" + dateobj.getDate()).slice(-2);\r\n let hours = (\"0\" + dateobj.getHours()).slice(-2);\r\n let minutes = (\"0\" + dateobj.getMinutes()).slice(-2);\r\n let seconds = (\"0\" + dateobj.getSeconds()).slice(-2);\r\n let day = dateobj.getDay();\r\n let months = [\"JAN\", \"FEB\", \"MAR\", \"APR\", \"MAY\", \"JUN\", \"JUL\", \"AUG\", \"SEP\", \"OCT\", \"NOV\", \"DEC\"];\r\n let dates = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\r\n let converted_date = \"\";\r\n switch (format) {\r\n case \"DD/MM/YYYY HH:MM\":\r\n converted_date = date + \"/\" + month + \"/\" + year + ' ' + hours + ':' + minutes;\r\n break;\r\n case \"DD/MM/YYYY\":\r\n converted_date = date + \"/\" + month + \"/\" + year;\r\n break;\r\n }\r\n return converted_date;\r\n }\r\n getParticipants(code) {\r\n const itemLimit = 9999;\r\n let urlDrafts = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.EVENT_REGISTRATIONS + \"')/items?$filter=natoCode eq '\" + code + \"'&$orderby=Created&$limit=\" + itemLimit;\r\n let urlSubmitted = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.EVENT_REGISTRATIONS_SUBMITTED + \"')/items?$filter=natoCode eq '\" + code + \"'&$orderby=Created&$limit=\" + itemLimit;\r\n let draftRegistrationsPromise = SharePointRestService.fetch(urlDrafts);\r\n let submittedRegistrationsPromise = SharePointRestService.fetch(urlSubmitted);\r\n let participantParsing = (objects, status) => {\r\n if (objects.length > 0) {\r\n let participants = objects.map((odataObject, index) => {\r\n let registrationObject = null;\r\n let contentTypeId = odataObject.ContentTypeId;\r\n if (contentTypeId.toLocaleUpperCase().startsWith(\"0x0100726FF052898002408F696B215FADF03C\".toLocaleUpperCase())) {\r\n registrationObject = new ExploratoryGroupRegistration(odataObject);\r\n }\r\n else if (contentTypeId.toLocaleUpperCase().startsWith(\"0x0100FD5571D868C6B840B415A4E771F1A353\".toLocaleUpperCase())) {\r\n registrationObject = new PlenaryMeetingRegistration(odataObject);\r\n }\r\n else if (contentTypeId.toLocaleUpperCase().startsWith(\"0x0100851C6E04655A4B709E90172A8EBD6AA4\".toLocaleUpperCase())) {\r\n registrationObject = new SeminarRegistration(odataObject);\r\n }\r\n return {\r\n ID: Number(odataObject.Id),\r\n Title: odataObject.natoTitle,\r\n Country: odataObject.natoCountry,\r\n Firstname: odataObject.natoFirstname,\r\n Lastname: odataObject.natoLastname,\r\n Company: odataObject.natoCompany,\r\n Email: odataObject.natoEMailAddress,\r\n RegistrationDate: this.dateConvert(new Date(odataObject.Created), \"DD/MM/YYYY\"),\r\n Status: status,\r\n RegistrationObject: registrationObject\r\n };\r\n });\r\n return participants; //.sort((a, b) => {return a.Lastname.localeCompare(b.Lastname) })\r\n }\r\n else {\r\n return new Array();\r\n }\r\n };\r\n Promise.all([draftRegistrationsPromise, submittedRegistrationsPromise]).then((allResponses) => {\r\n allResponses[0].json().then(odata => {\r\n let participants = participantParsing(odata.value, \"Draft\");\r\n this.setState({ draftParticipants: participants });\r\n });\r\n allResponses[1].json().then(odata => {\r\n let participants = participantParsing(odata.value, \"Submitted\");\r\n this.setState({ submittedParticipants: participants });\r\n });\r\n });\r\n }\r\n OnCloseClick() {\r\n this.setState({\r\n hideDialog: true\r\n });\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n generateList() {\r\n let participants = this.selectedParticipants;\r\n if (participants.length > 0) {\r\n let firstRegistration = participants.find(p => p.RegistrationObject != null);\r\n //REtrieve all fields and create a dictionary in order to display them in the correct order\r\n let allFields = firstRegistration.RegistrationObject.fields;\r\n let fieldsOrder = {};\r\n allFields.forEach((value, index) => {\r\n fieldsOrder[value] = index;\r\n });\r\n let header = {allFields.map((header, index) => {\r\n return (\r\n {header}\r\n );\r\n })};\r\n let rows = participants.filter(p => p.RegistrationObject != null).map((p, index) => {\r\n let fieldValuesForThisRegistration = p.RegistrationObject.fieldValues;\r\n let fieldHeadersForThisRegistration = p.RegistrationObject.fields;\r\n let tableCells = Object.keys(fieldsOrder).sort((a, b) => fieldsOrder[a] - fieldsOrder[b]).map(fieldName => {\r\n let valueStr = \"\";\r\n const index = fieldHeadersForThisRegistration.findIndex((f) => f === fieldName);\r\n if (index >= 0) {\r\n const value = fieldValuesForThisRegistration[index];\r\n valueStr = value.toString();\r\n if (value instanceof Date) {\r\n valueStr = this.dateConvert(value, \"DD/MM/YYYY\");\r\n }\r\n }\r\n return ({valueStr});\r\n });\r\n return {tableCells};\r\n });\r\n let table = ({header}{rows}
);\r\n return table;\r\n }\r\n else {\r\n return (
);\r\n }\r\n }\r\n onEventChanged(option, index) {\r\n this.getParticipants(\"\" + option.key);\r\n this._participantSelection.setAllSelected(false);\r\n }\r\n onShowPastEventsChange(ev, checked) {\r\n this.setState({\r\n showPastEvents: checked\r\n });\r\n }\r\n get selectedParticipants() {\r\n let parsedObjects = this.state.selectedParticipants;\r\n return parsedObjects;\r\n }\r\n onCopyEmailAddressesToClipboardClick() {\r\n SPUtil.copyTextToClipboard(this.allEmailAddresses);\r\n alert(\"The e-mail addresses have been copied to your clipboard\");\r\n }\r\n onCopySelectedUsersToClipboardClick() {\r\n let tableElement = document.getElementById(\"nato-sp-nas-participantTable\");\r\n let tableHtml = tableElement.outerHTML;\r\n SPUtil.copyTextToClipboard(tableHtml);\r\n alert(\"The selected participants have been copied to your clipboard\");\r\n }\r\n get allEmailAddresses() {\r\n return this.selectedParticipants.\r\n filter((p) => { return p.Email != null; }).\r\n sort((a, b) => { return (\"\" + a.Email).localeCompare(\"\" + b.Email); }).\r\n map((p) => { return p.Email; }).\r\n join(\"; \");\r\n }\r\n render() {\r\n const eventOptions = this.state.events.filter(e => {\r\n if (this.state.showPastEvents)\r\n return true;\r\n else\r\n return e.EndDate !== undefined && e.EndDate > (new Date(Date.now()));\r\n }).sort((a, b) => {\r\n if (a.EndDate === undefined)\r\n return -1;\r\n else if (b.EndDate === undefined)\r\n return 1;\r\n else\r\n return Number(b.EndDate) - Number(a.EndDate);\r\n }).map(event => {\r\n return {\r\n key: event.Code,\r\n text: event.Code,\r\n data: event\r\n };\r\n });\r\n let allParticipants = this.state.draftParticipants.concat(this.state.submittedParticipants);\r\n let allEmails = this.allEmailAddresses;\r\n let inputStyle = { display: \"inline-block\", width: \"330px\", marginRight: \"7px\" };\r\n return (
\r\n\t\t\t\t\r\n\t\t\t
);\r\n }\r\n}\r\n//# sourceMappingURL=InvitationDialogComponent.jsx.map","import { Component } from 'react';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { Checkbox } from 'office-ui-fabric-react/lib/Checkbox';\r\nexport class SubmitDialogComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n let userCreator = false;\r\n let subText = \"\";\r\n if (this.props.application\r\n && this.props.application.authorId\r\n && this.props.currentUser\r\n && this.props.application.authorId == this.props.currentUser.id) {\r\n userCreator = true;\r\n subText = \"Are you sure you want to submit this application? After you have submitted this application you can no longer change its content.\";\r\n }\r\n else {\r\n subText = \"Application could be submitted only by the user who created it.\";\r\n }\r\n this.state = {\r\n hideDialog: false,\r\n userCreator: userCreator,\r\n userAcceptedHandbook: false,\r\n subText: subText\r\n };\r\n this.OnCheckboxChange = this.OnCheckboxChange.bind(this);\r\n this.OnConfirmClick = this.OnConfirmClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n }\r\n OnCheckboxChange(ev, isChecked) {\r\n this.setState({\r\n userAcceptedHandbook: isChecked\r\n });\r\n }\r\n OnConfirmClick() {\r\n this.setState({ hideDialog: true });\r\n this.props.onConfirm();\r\n this.props.onClose();\r\n }\r\n OnCancelClick() {\r\n this.setState({ hideDialog: true });\r\n this.props.onCancel();\r\n this.props.onClose();\r\n }\r\n componentWillMount() {\r\n }\r\n render() {\r\n return (
\r\n \r\n
);\r\n }\r\n}\r\n//# sourceMappingURL=SubmitDialogComponent.jsx.map","import { Component } from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { TooltipHost, TooltipDelay } from 'office-ui-fabric-react/lib/Tooltip';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { ProgressIndicator } from 'office-ui-fabric-react/lib/ProgressIndicator';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport { Attachment, ChangeRequest } from \"../index\";\r\nexport class ChangeRequestComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n hideDialog: false,\r\n description: \"\",\r\n justification: \"\",\r\n isUploadingAttachment: false,\r\n isSubmitting: false,\r\n isSubmitted: false,\r\n attachments: new Array(),\r\n changeRequest: null\r\n };\r\n this.OnConfirmClick = this.OnConfirmClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n this.onDescriptionChanged = this.onDescriptionChanged.bind(this);\r\n this.onJustificationChanged = this.onJustificationChanged.bind(this);\r\n this.onUploadFilesClicked = this.onUploadFilesClicked.bind(this);\r\n this.onDeleteFileClicked = this.onDeleteFileClicked.bind(this);\r\n }\r\n componentWillMount() {\r\n }\r\n componentDidMount() {\r\n }\r\n OnConfirmClick() {\r\n this.setState({\r\n isSubmitting: true\r\n });\r\n this.uploadFiles().then(() => {\r\n let cr = new ChangeRequest(this.state.description, this.state.justification, this.state.attachments);\r\n cr.Submit(this.props.application).then((changeRequestCode) => {\r\n this.setState({\r\n isSubmitting: false,\r\n isSubmitted: true,\r\n changeRequest: cr\r\n });\r\n });\r\n });\r\n }\r\n OnCancelClick() {\r\n this.setState({ hideDialog: true });\r\n if (this.state.isSubmitted && this.props.onConfirm) {\r\n this.props.onConfirm();\r\n }\r\n else if (!this.state.isSubmitted && this.props.onCancel) {\r\n this.props.onCancel();\r\n }\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n onDescriptionChanged(newValue) {\r\n if (newValue == null)\r\n newValue = \"\";\r\n this.setState({ description: newValue });\r\n }\r\n onJustificationChanged(newValue) {\r\n if (newValue == null)\r\n newValue = \"\";\r\n this.setState({ justification: newValue });\r\n }\r\n onUploadFilesClicked(event) {\r\n if (this.state.isSubmitting || this.state.isSubmitted)\r\n return;\r\n else\r\n this.uploadFiles();\r\n }\r\n onDeleteFileClicked(filename) {\r\n let currentAttachmentCollection = this.state.attachments;\r\n currentAttachmentCollection = currentAttachmentCollection.filter(a => a.filename.toLocaleLowerCase() != filename.toLocaleLowerCase());\r\n this.setState({ attachments: currentAttachmentCollection });\r\n }\r\n uploadFiles() {\r\n this.setState({ isUploadingAttachment: true });\r\n let allUploadPromises = new Array();\r\n let files = this._uploadField.files;\r\n for (let i = 0; i < files.length; i++) {\r\n let currentFile = files[i];\r\n if (this.state.attachments.findIndex(a => a.filename.toLocaleLowerCase() == currentFile.name.toLocaleLowerCase()) == -1) {\r\n let fr = new FileReader();\r\n fr.readAsArrayBuffer(currentFile);\r\n let singleFileUploadPromise = new Promise((resolve, reject) => {\r\n fr.onloadend = () => {\r\n let bytes = new Uint8Array(fr.result);\r\n let newAttachment = new Attachment(currentFile.name, bytes);\r\n let currentAttachmentCollection = this.state.attachments;\r\n currentAttachmentCollection.push(newAttachment);\r\n this.setState({ attachments: currentAttachmentCollection });\r\n resolve(newAttachment);\r\n };\r\n });\r\n allUploadPromises.push(singleFileUploadPromise);\r\n }\r\n }\r\n if (allUploadPromises.length == 0) {\r\n this.setState({ isUploadingAttachment: false });\r\n return Promise.resolve();\r\n }\r\n else {\r\n return new Promise((resolve, reject) => {\r\n Promise.all(allUploadPromises).then(results => {\r\n if (this._uploadField != null) {\r\n this._uploadField.value = \"\";\r\n }\r\n this.setState({ isUploadingAttachment: false });\r\n resolve();\r\n });\r\n });\r\n }\r\n }\r\n render() {\r\n let title = this.props.title || \"Submit change request\";\r\n let subtitle = this.props.subText || \"Use this dialog request a change regarding your previously submitted application.\";\r\n let inputStyle = { display: \"inline-block\", width: \"330px\", marginRight: \"7px\" };\r\n let attachmentInfo = this.state.attachments\r\n .sort((a, b) => { return a.filename.localeCompare(b.filename); })\r\n .map((attachment, index) => {\r\n return (
\r\n {attachment.filename} \r\n ({attachment.filesize})\r\n {!(this.state.isSubmitting || this.state.isSubmitted) &&\r\n { this.onDeleteFileClicked(attachment.filename); }} href=\"javascript:void(0);\" style={{ float: \"right\", \"marginRight\": \"15px\" }}>\r\n \r\n }\r\n
);\r\n });\r\n return (
\r\n \r\n
);\r\n }\r\n static showInDialog(application) {\r\n let containerId = \"nato-sp-nas-changerequest\";\r\n let container = document.getElementById(containerId);\r\n if (!container) {\r\n container = document.createElement('DIV');\r\n container.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(container);\r\n }\r\n ReactDOM.render( { SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK); }} onClose={() => { container.parentElement.removeChild(container); }}/>, document.getElementById(containerId));\r\n }\r\n}\r\n//# sourceMappingURL=ChangeRequestComponent.jsx.map","import { Component } from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { DetailsList, DetailsListLayoutMode, SelectionMode } from 'office-ui-fabric-react/lib/DetailsList';\r\nimport { DivisionEnum, User, ChangeRequest, ApprovalDialogComponent, RequestMoreInformationComponent, WorkflowManager } from \"../index\";\r\nexport class ChangeRequestHistoryComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this._updatedChangeRequestCodes = new Set();\r\n this.state = {\r\n hideDialog: false,\r\n changeRequest: new Array(),\r\n userCanApprove: false\r\n };\r\n this.OnConfirmClick = this.OnConfirmClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n this.onStatusRender = this.onStatusRender.bind(this);\r\n this.onApproveButtonClick = this.onApproveButtonClick.bind(this);\r\n this.onRequestMoreInformationClick = this.onRequestMoreInformationClick.bind(this);\r\n }\r\n componentWillMount() {\r\n }\r\n componentDidMount() {\r\n ChangeRequest.GetChangeRequests(this.props.application).then(changeRequests => {\r\n changeRequests = changeRequests.sort((a, b) => { return a.createdOn.getMilliseconds() - b.createdOn.getMilliseconds(); });\r\n this.setState({\r\n changeRequest: changeRequests\r\n });\r\n });\r\n let currentUserCanApprove = false;\r\n currentUserCanApprove = currentUserCanApprove || this.props.application.advisors.find(user => user.id == _spPageContextInfo.userId) != null;\r\n currentUserCanApprove = currentUserCanApprove || this.props.application.seniorAdvisors.find(user => user.id == _spPageContextInfo.userId) != null;\r\n currentUserCanApprove = currentUserCanApprove || this.props.application.grantAdministrators.find(user => user.id == _spPageContextInfo.userId) != null;\r\n if (currentUserCanApprove) {\r\n this.setState({\r\n userCanApprove: true\r\n });\r\n }\r\n else {\r\n let allowedGroups = [\"NAS Administrators\"];\r\n if (this.props.application.applicantDetails.division == DivisionEnum.ESC) {\r\n allowedGroups.push(\"ESC Grant Administrators\");\r\n }\r\n else if (this.props.application.applicantDetails.division == DivisionEnum.PDD) {\r\n allowedGroups.push(\"PDD Grant Administrators\");\r\n }\r\n User.isMemberOfGroup(allowedGroups).then(isMember => {\r\n if (isMember) {\r\n this.setState({\r\n userCanApprove: true\r\n });\r\n }\r\n });\r\n }\r\n }\r\n OnConfirmClick() {\r\n this.saveChangeRequestStatus().then(() => {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onConfirm) {\r\n this.props.onConfirm();\r\n }\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n });\r\n }\r\n saveChangeRequestStatus() {\r\n let allSavePromises = new Array();\r\n this.state.changeRequest.forEach(cr => {\r\n if (this._updatedChangeRequestCodes.has(cr.changeRequestCode)) {\r\n let saveCrPromise = cr.SaveStatus(cr.status, cr.approvalComments);\r\n allSavePromises.push(saveCrPromise);\r\n }\r\n });\r\n if (allSavePromises.length == 0) {\r\n return Promise.resolve();\r\n }\r\n else {\r\n return new Promise((resolve, reject) => {\r\n Promise.all(allSavePromises).then((values) => {\r\n let wf = new WorkflowManager();\r\n wf.StartWorklow(\"Grant Applications\", this.props.application.id, \"Notification\", { \"Type\": \"ChangeRequestUpdated\" }, true).then(() => {\r\n resolve();\r\n });\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n }\r\n OnCancelClick() {\r\n this.setState({ hideDialog: true });\r\n if (this.props.onCancel) {\r\n this.props.onCancel();\r\n }\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n }\r\n onApproveButtonClick(cr) {\r\n if (this.state.userCanApprove) {\r\n let containerId = \"nato-sp-nas-approvereject\";\r\n let approveRejectContainer = document.getElementById(containerId);\r\n if (!approveRejectContainer) {\r\n approveRejectContainer = document.createElement('DIV');\r\n approveRejectContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(approveRejectContainer);\r\n }\r\n let changeCrStatus = (cr, state, comments) => {\r\n this._updatedChangeRequestCodes.add(cr.changeRequestCode);\r\n let currentChangeRequests = this.state.changeRequest;\r\n let index = currentChangeRequests.indexOf(cr);\r\n currentChangeRequests[index].status = state;\r\n currentChangeRequests[index].approvalComments = comments;\r\n this.setState({\r\n changeRequest: currentChangeRequests\r\n });\r\n };\r\n ReactDOM.render(( { changeCrStatus(cr, \"Approved\", comment); }} onReject={(comment, attachment) => { changeCrStatus(cr, \"Rejected\", comment); }} onPending={(comment, attachment) => { changeCrStatus(cr, \"Pending\", comment); }} onClose={() => {\r\n approveRejectContainer.parentElement.removeChild(approveRejectContainer);\r\n }}>\r\n {this.requestMoreInformationElement(cr)}\r\n ), document.getElementById(containerId));\r\n }\r\n }\r\n onRequestMoreInformationClick(event) {\r\n let containerId = \"nato-sp-nas-requestmoreinfo\";\r\n let requestMoreInfoContainer = document.getElementById(containerId);\r\n if (!requestMoreInfoContainer) {\r\n requestMoreInfoContainer = document.createElement('DIV');\r\n requestMoreInfoContainer.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(requestMoreInfoContainer);\r\n }\r\n let link = event.target;\r\n let crItemId = Number(link.getAttribute(\"data-cr-id\"));\r\n let currentCr = this.state.changeRequest.find(cr => cr.itemId == crItemId);\r\n ReactDOM.render( {\r\n currentCr.SaveStatus(\"Pending\", \"Waiting for more information\");\r\n SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK);\r\n }} onClose={() => { requestMoreInfoContainer.parentElement.removeChild(requestMoreInfoContainer); }}/>, document.getElementById(containerId));\r\n }\r\n requestMoreInformationElement(cr) {\r\n let helpText = String.format(\"Click here to request more information regarding this Change Request\");\r\n let moreInformationLink = (
\r\n {helpText}\r\n
);\r\n return moreInformationLink;\r\n }\r\n onStatusRender(cr) {\r\n let statusElement = Pending;\r\n if (cr.status && cr.status.toLocaleLowerCase() == \"approved\") {\r\n statusElement = Approved;\r\n }\r\n else if (cr.status && cr.status.toLocaleLowerCase() == \"rejected\") {\r\n statusElement = Rejected;\r\n }\r\n let commentsElement = null;\r\n if (cr.approvalComments && cr.approvalComments.trim().length > 0) {\r\n commentsElement = {cr.approvalComments};\r\n }\r\n let approvalElement = null;\r\n if (this.state.userCanApprove) {\r\n approvalElement = \r\n { this.onApproveButtonClick(cr); }} style={{ display: \"inline-block\", width: \"16px\", height: \"16px\", overflow: \"hidden\", verticalAlign: \"bottom\", marginLeft: \"15px\" }} href=\"#\">\r\n \r\n \r\n ;\r\n }\r\n return (
{statusElement}{approvalElement}{commentsElement}
);\r\n }\r\n render() {\r\n let title = this.props.title || \"Change Request History\";\r\n let subtitle = this.props.subText || this.state.userCanApprove ? \"Use this dialog to view and approve submitted change requests\" : \"Use this dialog to view your submitted change requests\";\r\n let emptyText = \"There are no change requests submitted for this application.\";\r\n let dataColumns = [\r\n { key: \"Request #\", name: \"Request #\", fieldName: \"changeRequestCode\", minWidth: 100, isResizable: true },\r\n {\r\n key: \"Date\", name: \"Date\", fieldName: \"createdOn\", minWidth: 150, isResizable: true,\r\n onRender: (cr) => { return cr.createdOn.format(\"dd MMM yyyy HH:mm\"); }\r\n },\r\n { key: \"By\", name: \"By\", fieldName: \"createdBy\", minWidth: 100, isResizable: true },\r\n { key: \"Description\", name: \"Description\", fieldName: \"description\", minWidth: 200, isResizable: true, isMultiline: true },\r\n { key: \"Justification\", name: \"Justification\", fieldName: \"justification\", minWidth: 200, isResizable: true, isMultiline: true },\r\n {\r\n //TODO: show text when there are no attachments\r\n key: \"Attachments\", name: \"Attachments\", fieldName: \"Attachments\", minWidth: 200, isResizable: true,\r\n onRender: (cr) => {\r\n if (cr.attachments.length == 0) {\r\n return
<No attachments>
;\r\n }\r\n else {\r\n return cr.attachments.sort((a, b) => { return a.filename.localeCompare(b.filename); }).map((file, index) => {\r\n return
{file.filename} ({file.filesize})
;\r\n });\r\n }\r\n }\r\n },\r\n { key: \"Status\", name: \"Status\", fieldName: \"Status\", minWidth: 200, isResizable: true, onRender: this.onStatusRender, isMultiline: true }\r\n ];\r\n //TODO: Show warning when there are no CRs\r\n return (
\r\n \r\n
);\r\n }\r\n static showInDialog(application) {\r\n let containerId = \"nato-sp-nas-changehistoryrequest\";\r\n let container = document.getElementById(containerId);\r\n if (!container) {\r\n container = document.createElement('DIV');\r\n container.id = containerId;\r\n let mainContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n mainContent.appendChild(container);\r\n }\r\n ReactDOM.render( { SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK); }} onClose={() => { container.parentElement.removeChild(container); }}/>, document.getElementById(containerId));\r\n }\r\n static ShowNotificationBannerIfNessecary(application) {\r\n ChangeRequest.GetPendingChangeRequests(application).then(pendingRequests => {\r\n if (pendingRequests.length > 0) {\r\n let showChangeRequestHistoryFunction = () => {\r\n ChangeRequestHistoryComponent.showInDialog(application);\r\n };\r\n window[\"showChangeRequestHistoryFunction\"] = showChangeRequestHistoryFunction;\r\n let html = \"There are pending Change Requests for this application. Click here to view these Change Requests\";\r\n var statusID = SP.UI.Status.addStatus(\"Pending Change Requests\", html);\r\n SP.UI.Status.setStatusPriColor(statusID, \"yellow\");\r\n }\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=ChangeRequestHistoryComponent.jsx.map","import { Component } from 'react';\r\nimport { SharePointRestService, User, ListNames, LogMessage, LogSeverityEnum, DivisionEnum } from \"../index\";\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nexport class AnsweredQuestionsComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.showQuestionDialog = () => {\r\n this.setState({\r\n hideQuestionDialog: false\r\n });\r\n };\r\n this.closeQuestionDialog = () => {\r\n this.setState({\r\n hideQuestionDialog: true,\r\n questionText: \"\",\r\n questionSubmitted: false\r\n });\r\n };\r\n this.state = {\r\n answeredQuestions: new Array(),\r\n hideQuestionDialog: true,\r\n disableSubmitQuestion: true,\r\n questionText: \"\",\r\n questionSubmitted: false\r\n };\r\n // Read all questions for a grant code\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.QUESTIONS_ANSWERS + \"')/items?$select=Title,natoQuestion,natoAnswer&$filter=natoCode eq '\" + this.props.grantCode + \"'\";\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n if (odata.value.length > 0) {\r\n let allQA = new Array();\r\n for (let i = 0; i < odata.value.length; i++) {\r\n // Show only questions with answers\r\n if (odata.value[i].natoAnswer) {\r\n allQA.push({\r\n question: odata.value[i].natoQuestion,\r\n answer: odata.value[i].natoAnswer\r\n });\r\n }\r\n }\r\n this.setState({\r\n answeredQuestions: allQA\r\n });\r\n }\r\n });\r\n });\r\n this.onQuestionTextChanged = this.onQuestionTextChanged.bind(this);\r\n this.showQuestionDialog = this.showQuestionDialog.bind(this);\r\n this.closeQuestionDialog = this.closeQuestionDialog.bind(this);\r\n this.onSubmitQuestion = this.onSubmitQuestion.bind(this);\r\n }\r\n // Update question text and submit button state in dialog\r\n onQuestionTextChanged(newValue) {\r\n this.setState({\r\n questionText: newValue,\r\n disableSubmitQuestion: !(newValue && newValue.trim() != '')\r\n });\r\n }\r\n // Save submitted question\r\n onSubmitQuestion() {\r\n if (!this.state.questionText || this.state.questionText.trim() == \"\" || this.state.questionText.trim().length > 255) {\r\n return;\r\n }\r\n let questionText = this.state.questionText.trim();\r\n let item = {\r\n \"Title\": (questionText.length <= 50) ? questionText : questionText.substr(0, 50) + \"...\",\r\n \"ContentTypeId\": \"0x01008076F85853BFE3479BFC0184BF2128E4\",\r\n \"natoCode\": this.props.grantCode,\r\n \"natoQuestion\": questionText,\r\n \"__metadata\": { \"type\": \"SP.Data.QuestionsAnswersListItem\" }\r\n };\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.QUESTIONS_ANSWERS + \"')/items\";\r\n let headers = {};\r\n SharePointRestService.fetch(url, \"POST\", item, headers)\r\n .then(response => {\r\n this.setState({\r\n questionSubmitted: true\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"An error occured saving the question: \" + reason, this, LogSeverityEnum.Error);\r\n });\r\n }\r\n render() {\r\n // List questions with answers\r\n let answeredQuestions = (Object.keys(this.state.answeredQuestions).map((index) => {\r\n return (\r\n {this.state.answeredQuestions[index].question}\r\n
\r\n {this.state.answeredQuestions[index].answer}\r\n
\r\n
\r\n
);\r\n }));\r\n // New question dialog\r\n let questionDialog = (
\r\n \r\n
);\r\n return (
\r\n {this.state.answeredQuestions &&\r\n this.state.answeredQuestions.length > 0 &&\r\n
\r\n Questions & Answers\r\n
\r\n
\r\n\r\n {answeredQuestions}\r\n\r\n \r\n\r\n
\r\n
}\r\n\r\n {questionDialog}\r\n
);\r\n }\r\n // Show notification to Grant Administrators for any unanswered questions\r\n static ShowUnansweredQuestionsNotificationBanner(division) {\r\n let adminGroupName = DivisionEnum[division] + \" Grant Administrators\";\r\n // Show notification only to Grant Administrators\r\n //User.isGrantAdministrator(division).then(isAdmin => {\r\n User.isMemberOfGroup([adminGroupName, 'NAS Administrators']).then(isAdmin => {\r\n if (isAdmin) {\r\n let unansweredQuestionsCount = 0;\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.QUESTIONS_ANSWERS + \"')/GetItems\";\r\n let headers = {};\r\n // Get only items with no answer\r\n let body = {\r\n 'query': {\r\n '__metadata': { 'type': 'SP.CamlQuery' },\r\n 'ViewXml': \"\"\r\n }\r\n };\r\n SharePointRestService.fetch(url, \"POST\", body, headers)\r\n .then(response => {\r\n response.json().then(odata => {\r\n if (odata.value.length > 0) {\r\n for (let i = 0; i < odata.value.length; i++) {\r\n if (!odata.value[i].natoAnswer || odata.value[i].natoAnswer.trim() == '') {\r\n unansweredQuestionsCount++;\r\n }\r\n }\r\n // Show notification with link to the Unanswered questions view\r\n if (unansweredQuestionsCount > 0) {\r\n let urlUQ = _spPageContextInfo.webAbsoluteUrl + \"/Lists/QuestionsAnswers/Unanswered%20questions.aspx\";\r\n let html = (unansweredQuestionsCount == 1) ? \"There is 1 unanswered question. Click here to view this question.\"\r\n : \"There are \" + unansweredQuestionsCount + \" unanswered questions. Click here to view these questions.\";\r\n var statusID = SP.UI.Status.addStatus(\"Unanswered questions\", html);\r\n SP.UI.Status.setStatusPriColor(statusID, \"yellow\");\r\n }\r\n }\r\n });\r\n });\r\n }\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=AnsweredQuestionsComponent.jsx.map","import { Component } from 'react';\r\nimport { SharePointRestService, ListNames, LogMessage, LogSeverityEnum, GrantStatus, PublishableGrant, SPUtil } from \"../index\";\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton, ActionButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { Dropdown } from 'office-ui-fabric-react/lib/Dropdown';\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { TooltipHost, TooltipDelay } from 'office-ui-fabric-react/lib/Tooltip';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport { Checkbox } from 'office-ui-fabric-react/lib/Checkbox';\r\nexport class StudyGroupSubSiteCreatorComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.onRenderNIAGEventOption = (option) => {\r\n let event = option.data;\r\n let iconType = (event.spItem.natoExternalStatus == GrantStatus.PUBLISHED) ? \"Completed\" : \"Blocked\";\r\n let iconColour = (event.spItem.natoExternalStatus == GrantStatus.PUBLISHED) ? \"Green\" : \"Red\";\r\n let iconTooltip = (event.spItem.natoExternalStatus == GrantStatus.PUBLISHED) ? \"Published\" : \"Not published\";\r\n return (
\r\n\t\t\t\r\n\t\t\t{event.title} ({event.code})
\r\n\t\t\t{event.synopsis}\r\n\t\t
);\r\n };\r\n this.onEventChanged = this.onEventChanged.bind(this);\r\n this.onTemplateChanged = this.onTemplateChanged.bind(this);\r\n this.onCodeChanged = this.onCodeChanged.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n this.OnCreateClick = this.OnCreateClick.bind(this);\r\n this.onAdvancedPropertiesClick = this.onAdvancedPropertiesClick.bind(this);\r\n this.onIndependentSubsiteCheckboxChange = this.onIndependentSubsiteCheckboxChange.bind(this);\r\n this.onMasterpageChanged = this.onMasterpageChanged.bind(this);\r\n this.onCustomCssChanged = this.onCustomCssChanged.bind(this);\r\n this.state = {\r\n hideDialog: false,\r\n niagEvents: new Array(),\r\n webTemplates: new Array(),\r\n selectedNiagEvent: null,\r\n selectedWebTemplate: null,\r\n showAdvancedSettings: false,\r\n createIndependentSubsite: false,\r\n subsiteCode: '',\r\n masterpage: '',\r\n masterpages: new Array(),\r\n customCss: ''\r\n };\r\n }\r\n componentDidMount() {\r\n // Retrieve the events\r\n SPUtil.isLoggedIn().then(isLoggedIn => {\r\n if (isLoggedIn) {\r\n //Retrieve all NIAG events\r\n this.retrieveNiagEvents().then(events => {\r\n this.setState({\r\n niagEvents: events\r\n });\r\n });\r\n //Retreive all WebTemplates\r\n this.retrieveWebTemplates().then(templates => {\r\n this.setState({\r\n webTemplates: templates\r\n });\r\n });\r\n //Retreive all Masterpages\r\n this.retrieveMasterpages().then(masterpages => {\r\n this.setState({\r\n masterpages: masterpages\r\n });\r\n });\r\n }\r\n });\r\n }\r\n /**\r\n * Retrieves the NIAG events\r\n * @return {Promise>} A Promise with a dictionary containing all NIAG events\r\n */\r\n retrieveNiagEvents() {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANTS + \"')/items?$filter=natoExternalStatus ne '\" + GrantStatus.ARCHIVED + \"' and natoCode ne ''\";\r\n //let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANTS + \"')/items?$select=ID,Title,natoDescription,natoCode,natoGrantStatus,natoNIAGEventType,natoNIAGEvents,natoNIAGSocialEvents,natoDescription\";\r\n return new Promise((resolve, reject) => {\r\n // Retrieve the events\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n let events = new Array();\r\n //The list is empty, resolve null\r\n if (odata.value.length == 0) {\r\n resolve(null);\r\n }\r\n else {\r\n //Transform the odata objects into key-object paris\r\n for (let i = 0; i < odata.value.length; i++) {\r\n let event = new PublishableGrant(odata.value[i]);\r\n if (event.spItem.FileSystemObjectType != SP.FileSystemObjectType.folder) {\r\n events.push(event);\r\n }\r\n }\r\n resolve(events);\r\n }\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n retrieveWebTemplates() {\r\n //Load the ClientContext and retrieve all WebTemplates\r\n let context = SP.ClientContext.get_current();\r\n let web = context.get_web();\r\n context.load(web);\r\n let webTemplates = web.getAvailableWebTemplates(1033, false);\r\n context.load(webTemplates);\r\n return new Promise((resolve, reject) => {\r\n context.executeQueryAsync((sender, args) => {\r\n let allTemplates = new Array();\r\n let templateEnumerator = webTemplates.getEnumerator();\r\n while (templateEnumerator.moveNext()) {\r\n let webTemplate = templateEnumerator.get_current();\r\n if (webTemplate.get_name().toLocaleLowerCase() == \"STS#0\".toLocaleLowerCase()) {\r\n allTemplates.push(webTemplate);\r\n }\r\n }\r\n resolve(allTemplates);\r\n }, (sender, args) => {\r\n //There was an error retrieving the WebTemplates\r\n reject(args.get_message());\r\n });\r\n });\r\n }\r\n retrieveMasterpages() {\r\n //Load the ClientContext and retrieve all WebTemplates\r\n let context = SP.ClientContext.get_current();\r\n let masterpageGallery = context.get_site().getCatalog(SP.ListTemplateType.masterPageCatalog);\r\n //Create a CAML query to retrieve only the masterpages\r\n let query = new SP.CamlQuery();\r\n query.set_viewXml(\"master\");\r\n let masterpages = masterpageGallery.getItems(query);\r\n context.load(masterpages, \"Include(Id, FileLeafRef, FileRef, ContentType)\");\r\n return new Promise((resolve, reject) => {\r\n context.executeQueryAsync((sender, args) => {\r\n let masterpageNames = new Array();\r\n let listItemEnumerator = masterpages.getEnumerator();\r\n while (listItemEnumerator.moveNext()) {\r\n let masterpage = listItemEnumerator.get_current();\r\n if (masterpage.get_item(\"FileLeafRef\").toLocaleLowerCase().endsWith(\".master\")) {\r\n masterpageNames.push(masterpage.get_item(\"FileLeafRef\"));\r\n }\r\n }\r\n resolve(masterpageNames);\r\n }, (sender, args) => {\r\n //There was an error retrieving the masterpages\r\n reject(args);\r\n });\r\n });\r\n }\r\n onEventChanged(option, index) {\r\n this.setState({\r\n selectedNiagEvent: option.data,\r\n subsiteCode: option.data.code\r\n });\r\n }\r\n onTemplateChanged(option, index) {\r\n this.setState({\r\n selectedWebTemplate: option.data\r\n });\r\n }\r\n onMasterpageChanged(option, index) {\r\n this.setState({\r\n masterpage: option.data\r\n });\r\n }\r\n onCustomCssChanged(newValue) {\r\n this.setState({\r\n customCss: newValue\r\n });\r\n }\r\n onIndependentSubsiteCheckboxChange(ev, checked) {\r\n this.setState({\r\n createIndependentSubsite: checked\r\n });\r\n }\r\n onCodeChanged(newValue) {\r\n this.setState({\r\n subsiteCode: newValue\r\n });\r\n }\r\n onAdvancedPropertiesClick() {\r\n this.setState({\r\n showAdvancedSettings: !this.state.showAdvancedSettings\r\n });\r\n }\r\n OnCancelClick() {\r\n this.setState({\r\n hideDialog: true\r\n });\r\n if (this.props.onCancel)\r\n this.props.onCancel();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n OnCreateClick() {\r\n this.setState({\r\n hideDialog: true\r\n });\r\n this.ShowProgress(\"Creating sub-site\");\r\n let siteTitle = (this.state.subsiteCode).trim();\r\n let siteDescription = this.state.createIndependentSubsite ? this.state.subsiteCode : this.state.selectedNiagEvent.synopsis + \" Subsite\";\r\n let webURL = (this.state.subsiteCode).trim();\r\n let code = this.state.createIndependentSubsite ? undefined : this.state.selectedNiagEvent.code;\r\n this.createSubsite(siteTitle, siteDescription, webURL, this.state.selectedWebTemplate, code).then(subSite => {\r\n this.ShowProgress(\"Creating security groups\");\r\n this.createSubsiteSecurityGroups(subSite).then(() => {\r\n //let permissionsUrl: string = subSite.get_url() + '/_layouts/permsetup.aspx'\r\n let siteUrl = subSite.get_url();\r\n window.location.href = siteUrl;\r\n if (this.props.onCreate)\r\n this.props.onCreate();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }).catch(reason => {\r\n this.HideProgress();\r\n LogMessage.Log(\"Unable to create security groups for subsite: \" + reason, this, LogSeverityEnum.Error);\r\n });\r\n }).catch(reason => {\r\n this.HideProgress();\r\n LogMessage.Log(\"Unable to create a new subsite: \" + reason, this, LogSeverityEnum.Error);\r\n });\r\n }\r\n ShowProgress(message, progressImageVisibility = true) {\r\n if (this._progressDialog) {\r\n this._progressDialog.get_dialogElement().getElementsByClassName(\"nato-dialog-content\")[0].innerHTML += \" ✔
\" + message;\r\n this._progressDialog.autoSize();\r\n }\r\n else {\r\n this._progressDialog = SP.UI.ModalDialog.showWaitScreenWithNoClose(\"Please wait...\", \"\" + message + \"\");\r\n }\r\n this._progressDialog.get_dialogElement().getElementsByTagName(\"IMG\")[1].style.display = progressImageVisibility ? \"\" : \"none\";\r\n }\r\n HideProgress() {\r\n if (this._progressDialog) {\r\n this._progressDialog.close(SP.UI.DialogResult.OK);\r\n this._progressDialog = null;\r\n }\r\n }\r\n createSubsiteSecurityGroups(subweb) {\r\n let context = SP.ClientContext.get_current();\r\n let siteGroups = subweb.get_siteGroups();\r\n let roleAssignments = subweb.get_roleAssignments();\r\n let diAdminGroup = siteGroups.getByName(\"DI Grant Administrators\");\r\n context.load(siteGroups);\r\n context.load(roleAssignments);\r\n context.load(diAdminGroup);\r\n let permissions = [\r\n {\r\n groupName: \"DI \" + subweb.get_title() + \" Visitors\",\r\n groupObject: null,\r\n description: \"Visitors group for DI subsite \" + subweb.get_title() + \". Members of this group have contribute permissions on \" + subweb.get_title(),\r\n permissions: SP.RoleType.contributor,\r\n owner: diAdminGroup\r\n },\r\n {\r\n groupName: \"DI \" + subweb.get_title() + \" Contributors\",\r\n groupObject: null,\r\n description: \"Contributors group for DI subsite \" + subweb.get_title() + \". Members of this group have design permissions on \" + subweb.get_title(),\r\n permissions: SP.RoleType.webDesigner,\r\n owner: diAdminGroup\r\n }\r\n ];\r\n permissions.forEach(permissionData => {\r\n let newGroupInfo = new SP.GroupCreationInformation();\r\n newGroupInfo.set_title(permissionData.groupName);\r\n newGroupInfo.set_description(permissionData.description);\r\n let newGroup = siteGroups.add(newGroupInfo);\r\n context.load(newGroup);\r\n permissionData.groupObject = newGroup;\r\n });\r\n //Execute the ClientContext\r\n return new Promise((resolve, reject) => {\r\n context.executeQueryAsync((sender, args) => {\r\n permissions.forEach(permissionData => {\r\n let roles = new SP.RoleDefinitionBindingCollection(context);\r\n roles.add(subweb.get_roleDefinitions().getByType(permissionData.permissions));\r\n roleAssignments.add(permissionData.groupObject, roles);\r\n permissionData.groupObject.set_owner(diAdminGroup);\r\n permissionData.groupObject.update();\r\n });\r\n //Set DI Admin group\r\n let roles = new SP.RoleDefinitionBindingCollection(context);\r\n roles.add(subweb.get_roleDefinitions().getByType(SP.RoleType.administrator));\r\n roleAssignments.add(diAdminGroup, roles);\r\n subweb.update();\r\n context.executeQueryAsync((sender, args) => {\r\n resolve();\r\n }, (sender, args) => {\r\n //There was a problem assigning Contribute permissions to the default groups\r\n reject(args.get_message());\r\n });\r\n }, (sender, args) => {\r\n //There was an error creating the default groups\r\n reject(args.get_message());\r\n });\r\n });\r\n }\r\n createSubsite(title, description, webUrl, template, code) {\r\n let context = SP.ClientContext.get_current();\r\n let web = context.get_web();\r\n //Create the WebCreationInfo object to create the new subweb from the template\r\n let webCreationInformation = new SP.WebCreationInformation();\r\n webCreationInformation.set_title(title);\r\n webCreationInformation.set_description(description);\r\n webCreationInformation.set_language(1033);\r\n webCreationInformation.set_url(webUrl);\r\n webCreationInformation.set_useSamePermissionsAsParentSite(false);\r\n webCreationInformation.set_webTemplate(template.get_name());\r\n let quicklaunch = web.get_navigation().get_quickLaunch();\r\n let masterpageGallery = context.get_site().getCatalog(SP.ListTemplateType.masterPageCatalog);\r\n let newWeb = web.get_webs().add(webCreationInformation);\r\n context.load(newWeb);\r\n context.load(quicklaunch);\r\n context.load(masterpageGallery, \"RootFolder\");\r\n //Execute the ClientContext create the web\r\n return new Promise((resolve, reject) => {\r\n context.executeQueryAsync((sender, args) => {\r\n //Set the NIAG Event code as a webProperty\r\n if (code && code.trim().length > 0) {\r\n newWeb.get_allProperties().set_item(\"NIAG_Event\", code);\r\n }\r\n //Register the CustomAction for all DI components\r\n //let siteCollectionRelativeUrl: string = _spPageContextInfo.siteServerRelativeUrl == \"/\" ? \"\" : _spPageContextInfo.siteServerRelativeUrl\r\n let nasDiCustomAction = newWeb.get_userCustomActions().add();\r\n nasDiCustomAction.set_name(\"ScriptLink.DI.Init\");\r\n nasDiCustomAction.set_sequence(100);\r\n nasDiCustomAction.set_location(\"ScriptLink\");\r\n nasDiCustomAction.set_title(\"ScriptLink.DI.Init\");\r\n nasDiCustomAction.set_scriptSrc(\"~sitecollection/SiteAssets/Scripts/Components/NATO.SP.PreAwardPortal.DI.Init.js\");\r\n nasDiCustomAction.update();\r\n //Register the CustomAction to generate document templates\r\n let manageWebPermissions = new SP.BasePermissions();\r\n manageWebPermissions.set(SP.PermissionKind.manageWeb);\r\n let templatesCustomAction = newWeb.get_userCustomActions().add();\r\n templatesCustomAction.set_name(\"Study Group templates\");\r\n templatesCustomAction.set_sequence(1001);\r\n templatesCustomAction.set_title(\"Study Group templates\");\r\n templatesCustomAction.set_location(\"Microsoft.SharePoint.StandardMenu\");\r\n templatesCustomAction.set_group(\"SiteActions\");\r\n templatesCustomAction.set_rights(manageWebPermissions);\r\n templatesCustomAction.set_url(\"javascript: window['GrantRendering'].generateStudyOrderAnnex();\");\r\n templatesCustomAction.update();\r\n //Set a custom Masterpage\r\n if (this.state.showAdvancedSettings && this.state.masterpage && this.state.masterpage.trim().length > 0) {\r\n let masterpageUrl = masterpageGallery.get_rootFolder().get_serverRelativeUrl() + \"/\" + this.state.masterpage;\r\n newWeb.set_masterUrl(masterpageUrl);\r\n }\r\n if (this.state.showAdvancedSettings && this.state.customCss && this.state.customCss.trim().length > 0) {\r\n let setAlternteCssUrlFunction = web[\"set_alternateCssUrl\"];\r\n setAlternteCssUrlFunction.call(web, this.state.customCss.trim());\r\n }\r\n newWeb.get_navigation().set_useShared(true);\r\n let parentNode = null;\r\n let quickLaunchEnumerator = quicklaunch.getEnumerator();\r\n while (quickLaunchEnumerator.moveNext()) {\r\n let quickLaunchLink = quickLaunchEnumerator.get_current();\r\n if (quickLaunchLink.get_title().toLocaleLowerCase() == \"subsites\") {\r\n parentNode = quickLaunchLink;\r\n }\r\n }\r\n if (parentNode != null) {\r\n let quickLaunchCreationInfo = new SP.NavigationNodeCreationInformation();\r\n quickLaunchCreationInfo.set_url(webUrl);\r\n quickLaunchCreationInfo.set_title(title);\r\n quickLaunchCreationInfo.set_isExternal(false);\r\n quickLaunchCreationInfo.set_asLastNode(true);\r\n parentNode.get_children().add(quickLaunchCreationInfo);\r\n parentNode.update();\r\n }\r\n newWeb.update();\r\n context.load(newWeb);\r\n context.executeQueryAsync((sender, args) => {\r\n if (this._progressDialog)\r\n this._progressDialog.close;\r\n resolve(newWeb);\r\n }, (sender, args) => {\r\n //There was an error updating the webProperties\r\n reject(args.get_message());\r\n });\r\n }, (sender, args) => {\r\n //There was an error retrieving the WebTemplates\r\n reject(args.get_message());\r\n });\r\n });\r\n }\r\n render() {\r\n // NIAG events\r\n let eventOptions = this.state.niagEvents.sort((a, b) => {\r\n return a.code < b.code ? -1 : 1;\r\n }).map(event => {\r\n return { key: event.id, text: event.code, data: event };\r\n });\r\n let templateOptions = this.state.webTemplates.sort((a, b) => {\r\n return a.get_title() < b.get_title() ? -1 : 1;\r\n }).map(template => {\r\n return { key: template.get_title(), text: template.get_title(), data: template };\r\n });\r\n let masterpageOptions = this.state.masterpages.sort((a, b) => {\r\n return a.localeCompare(b);\r\n }).map(masterpage => {\r\n return { key: masterpage, text: masterpage, data: masterpage };\r\n });\r\n let createButtonEnabled = (this.state.selectedNiagEvent || this.state.createIndependentSubsite) &&\r\n this.state.selectedWebTemplate &&\r\n (this.state.subsiteCode != null && this.state.subsiteCode.trim().length > 0);\r\n let advancedPropertiesExpandCollapseIcon = this.state.showAdvancedSettings ? 'CollapseContentSingle' : 'ExploreContentSingle';\r\n let advancedPropertiesText = this.state.showAdvancedSettings ? 'Hide advanced settings' : 'Show advanced settings';\r\n return (
\r\n \r\n
);\r\n }\r\n}\r\n//# sourceMappingURL=StudyGroupSubSiteCreatorComponent.jsx.map","import { Component } from 'react';\r\nimport { SharePointRestService, ListNames, LocalStorageCache, PublishableGrant, SPUtil, ExploratoryGroupRegistration, PlenaryMeetingRegistration, SeminarRegistration, ReleasableTo } from \"../index\";\r\nimport { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog';\r\nimport { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { DatePicker } from 'office-ui-fabric-react/lib/DatePicker';\r\nimport { Dropdown } from 'office-ui-fabric-react/lib/Dropdown';\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { TooltipHost, TooltipDelay } from 'office-ui-fabric-react/lib/Tooltip';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport { DocumentGenerator } from \"../index\";\r\nexport class StudyGroupDocumentCreatorComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.onSubsiteChanged = this.onSubsiteChanged.bind(this);\r\n this.loadSubsiteValues = this.loadSubsiteValues.bind(this);\r\n this.onDocumentTemplateChanged = this.onDocumentTemplateChanged.bind(this);\r\n this.OnCreateClick = this.OnCreateClick.bind(this);\r\n this.OnCancelClick = this.OnCancelClick.bind(this);\r\n this.setChairman = this.setChairman.bind(this);\r\n this.onChairmainCompanyChanged = this.onChairmainCompanyChanged.bind(this);\r\n this.onChairmainCountryChanged = this.onChairmainCountryChanged.bind(this);\r\n this.onChairmainNameChanged = this.onChairmainNameChanged.bind(this);\r\n this.onClassificationChanged = this.onClassificationChanged.bind(this);\r\n this.onReleasableToChanged = this.onReleasableToChanged.bind(this);\r\n this.onStudyOrderDateChanged = this.onStudyOrderDateChanged.bind(this);\r\n this.onStudyOrderReferenceChanged = this.onStudyOrderReferenceChanged.bind(this);\r\n this.onSgNumberChanged = this.onSgNumberChanged.bind(this);\r\n this.onStudyTitleChanged = this.onStudyTitleChanged.bind(this);\r\n this.onStudyCompletionDateChanged = this.onStudyCompletionDateChanged.bind(this);\r\n this.onStudyBudgetChanged = this.onStudyBudgetChanged.bind(this);\r\n this.state = {\r\n hideDialog: false,\r\n subsites: new Array(),\r\n documentTemplates: new Array(),\r\n selectedSubsite: null,\r\n selectedDocumentTemplate: -1,\r\n grant: null,\r\n participants: new Array(),\r\n chairman: { name: '', company: '', country: '' },\r\n selectedClassification: 'NATO Unclassified',\r\n releasableTo: new Array(),\r\n studyOrderDate: new Date(Date.now()),\r\n studyOrderReference: '',\r\n sgNumber: '',\r\n studyTitle: '',\r\n studyCompletionDate: '',\r\n studyBudget: ''\r\n };\r\n }\r\n componentDidMount() {\r\n let context = SP.ClientContext.get_current();\r\n this._diWeb = context.get_web();\r\n let relativeWebUrl = _spPageContextInfo.webServerRelativeUrl.replace(_spPageContextInfo.siteServerRelativeUrl, \"\");\r\n if (!relativeWebUrl.startsWith(\"/\"))\r\n relativeWebUrl = \"/\" + relativeWebUrl;\r\n let subsiteDepth = relativeWebUrl.split(\"/\").length - 1;\r\n if (subsiteDepth > 1) {\r\n this._diWeb = context.get_site().openWeb(relativeWebUrl.split(\"/\")[1]);\r\n }\r\n context.load(this._diWeb);\r\n context.executeQueryAsync((sender, args) => {\r\n // Retrieve the events\r\n SPUtil.isLoggedIn().then(isLoggedIn => {\r\n if (isLoggedIn) {\r\n this.retrieveSubwebs(this._diWeb).then(subsites => {\r\n let defaultSelectedSubWeb = subsites.find(web => web.get_serverRelativeUrl().toLocaleLowerCase() == _spPageContextInfo.webServerRelativeUrl.toLocaleLowerCase());\r\n this.setState({\r\n subsites: subsites,\r\n selectedSubsite: defaultSelectedSubWeb\r\n });\r\n this.loadSubsiteValues(defaultSelectedSubWeb);\r\n });\r\n this.retrieveTemplates(this._diWeb).then(templates => {\r\n this.setState({\r\n documentTemplates: templates\r\n });\r\n });\r\n }\r\n });\r\n }, (sender, args) => {\r\n });\r\n }\r\n retrieveSubwebs(web) {\r\n //Load the ClientContext and retrieve all WebTemplates\r\n //let context: SP.ClientContext = SP.ClientContext.get_current();\r\n //let web: SP.Web = context.get_web();\r\n let context = web.get_context();\r\n let subwebs = web.getSubwebsForCurrentUser(null);\r\n context.load(subwebs, \"Include(Id,Url,ServerRelativeUrl,Title,AllProperties)\");\r\n return new Promise((resolve, reject) => {\r\n context.executeQueryAsync((sender, args) => {\r\n let allSubwebs = new Array();\r\n let webEnumerator = subwebs.getEnumerator();\r\n while (webEnumerator.moveNext()) {\r\n let subweb = webEnumerator.get_current();\r\n var props = subweb.get_allProperties();\r\n var propNameValues = props.get_fieldValues();\r\n if (propNameValues[\"NIAG_Event\"] && propNameValues[\"NIAG_Event\"].toString() != '') {\r\n allSubwebs.push(subweb);\r\n }\r\n }\r\n resolve(allSubwebs);\r\n }, (sender, args) => {\r\n //There was an error retrieving the WebTemplates\r\n reject(args.get_message());\r\n });\r\n });\r\n }\r\n /**\r\n * Retrieves the letter templates for the current site from the DocumentLibrary\r\n */\r\n retrieveTemplates(web) {\r\n // Set cache expiration to 4 hours\r\n let cacheExpirationDate = new Date(Date.now() + (4 * 60 * 60 * 1000));\r\n let cacheKey = \"Templates:\" + _spPageContextInfo.webAbsoluteUrl;\r\n let cachedTemplates = LocalStorageCache.tryGetFromCache(cacheKey, null, cacheExpirationDate);\r\n if (cachedTemplates != null) {\r\n return Promise.resolve(cachedTemplates);\r\n }\r\n let url = web.get_serverRelativeUrl() + \"/_api/web/lists/GetByTitle('\" + ListNames.DOCUMENT_TEMPLATES + \"')/items?$select=ID,FileLeafRef,FileRef,natoTemplateIcon,natoTemplateDescription,ContentType/Name&$expand=ContentType&$filter=natoTemplateDescription ne ''\";\r\n return new Promise((resolve, reject) => {\r\n //Retrieve the temlates from the 'DocumentTemplates' library using a REST call\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n let templates = {};\r\n //The list is empty, resolve null\r\n if (odata.value.length == 0) {\r\n resolve(null);\r\n }\r\n else {\r\n //Transform the odata objects into key-object pairs\r\n for (let i = 0; i < odata.value.length; i++) {\r\n if ((\"\" + odata.value[i].ContentType.Name).toLocaleUpperCase() == \"LETTER TEMPLATE\" &&\r\n ((\"\" + odata.value[i].FileLeafRef).toLocaleUpperCase().endsWith(\".DOCX\") ||\r\n (\"\" + odata.value[i].FileLeafRef).toLocaleUpperCase().endsWith(\".XLSX\"))) {\r\n let itemId = Number(odata.value[i].ID);\r\n templates[itemId] = {\r\n title: odata.value[i].FileLeafRef,\r\n siteRelativeUrl: odata.value[i].FileRef,\r\n iconPath: (odata.value[i].natoTemplateIcon != null) ? odata.value[i].natoTemplateIcon.Url : \"\",\r\n description: \"\" + odata.value[i].natoTemplateDescription\r\n };\r\n }\r\n }\r\n LocalStorageCache.tryStoreInCache(cacheKey, templates);\r\n resolve(templates);\r\n }\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n getGrantData(code) {\r\n let url = this._diWeb.get_serverRelativeUrl() + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANTS + \"')/items?$filter=natoCode eq '\" + code + \"'&$select=ID,Title,natoCode,natoSynopsis,natoEndDate,natoDivision,Modified\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n if (odata.value.length > 0) {\r\n let jsonObject = odata.value[0];\r\n resolve(new PublishableGrant(jsonObject));\r\n }\r\n resolve(null);\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n getParticipants(code) {\r\n let urlDrafts = this._diWeb.get_serverRelativeUrl() + \"/_api/web/lists/GetByTitle('\" + ListNames.EVENT_REGISTRATIONS + \"')/items?$filter=natoCode eq '\" + code + \"'\";\r\n let urlSubmitted = this._diWeb.get_serverRelativeUrl() + \"/_api/web/lists/GetByTitle('\" + ListNames.EVENT_REGISTRATIONS_SUBMITTED + \"')/items?$filter=natoCode eq '\" + code + \"'\";\r\n let draftRegistrationsPromise = SharePointRestService.fetch(urlDrafts);\r\n let submittedRegistrationsPromise = SharePointRestService.fetch(urlSubmitted);\r\n let participantParsing = (objects) => {\r\n if (objects.length > 0) {\r\n let participants = objects.map((odataObject, index) => {\r\n let registrationObject = null;\r\n let contentTypeId = odataObject.ContentTypeId;\r\n if (contentTypeId.toLocaleUpperCase().startsWith(\"0x0100726FF052898002408F696B215FADF03C\".toLocaleUpperCase())) {\r\n registrationObject = new ExploratoryGroupRegistration(odataObject);\r\n }\r\n else if (contentTypeId.toLocaleUpperCase().startsWith(\"0x0100FD5571D868C6B840B415A4E771F1A353\".toLocaleUpperCase())) {\r\n registrationObject = new PlenaryMeetingRegistration(odataObject);\r\n }\r\n else if (contentTypeId.toLocaleUpperCase().startsWith(\"0x0100851C6E04655A4B709E90172A8EBD6AA4\".toLocaleUpperCase())) {\r\n registrationObject = new SeminarRegistration(odataObject);\r\n }\r\n return registrationObject;\r\n });\r\n return participants.sort((a, b) => { return a.lastname.localeCompare(b.lastname); });\r\n }\r\n else {\r\n return new Array();\r\n }\r\n };\r\n let allParticipants = new Array();\r\n return new Promise((resolve, reject) => {\r\n Promise.all([draftRegistrationsPromise, submittedRegistrationsPromise]).then((allResponses) => {\r\n let draftRegistrationsParsePromise = allResponses[0].json();\r\n let submittedRegistrationsParsePromise = allResponses[1].json();\r\n Promise.all([draftRegistrationsParsePromise, submittedRegistrationsParsePromise]).then((allParsedResponses) => {\r\n let draftParticipants = participantParsing(allParsedResponses[0].value);\r\n let submittedParticipants = participantParsing(allParsedResponses[1].value);\r\n let allParticipants = draftParticipants.concat(submittedParticipants).sort((a, b) => { return a.lastname.localeCompare(b.lastname); });\r\n resolve(allParticipants);\r\n });\r\n });\r\n });\r\n }\r\n onClassificationChanged(option, index) {\r\n this.setState({\r\n selectedClassification: option.key.toString()\r\n });\r\n }\r\n onSubsiteChanged(option, index) {\r\n let selectedWeb = option.data;\r\n this.setState({\r\n selectedSubsite: selectedWeb\r\n });\r\n this.loadSubsiteValues(selectedWeb);\r\n }\r\n loadSubsiteValues(selectedWeb) {\r\n if (!selectedWeb) {\r\n return;\r\n }\r\n let props = selectedWeb.get_allProperties();\r\n let propNameValues = props.get_fieldValues();\r\n if (propNameValues[\"NIAG_Event\"] && propNameValues[\"NIAG_Event\"].toString() != '') {\r\n let code = propNameValues[\"NIAG_Event\"];\r\n this.getGrantData(code).then(grant => {\r\n this.setState({\r\n grant: grant\r\n });\r\n });\r\n let previousFieldValues = propNameValues[\"NIAG_Fields\"];\r\n if (previousFieldValues) {\r\n let keyValuePairs = JSON.parse(previousFieldValues);\r\n try {\r\n this.setState({\r\n chairman: { name: keyValuePairs[\"chairmanName\"], country: keyValuePairs[\"chairmanCountry\"], company: keyValuePairs[\"chairmanCompany\"] },\r\n selectedClassification: keyValuePairs[\"classification\"],\r\n releasableTo: keyValuePairs[\"releasableTo\"].split(\", \"),\r\n sgNumber: keyValuePairs[\"sgNumber\"],\r\n studyCompletionDate: keyValuePairs[\"studyCompletionDate\"],\r\n studyOrderDate: (new Date(Number(keyValuePairs[\"studyOrderDate.Timestamp\"]))),\r\n studyOrderReference: keyValuePairs[\"studyOrderReference\"],\r\n studyTitle: keyValuePairs[\"studyTitle\"],\r\n studyBudget: keyValuePairs[\"studyBudget\"]\r\n });\r\n }\r\n catch (e) { }\r\n }\r\n this.getParticipants(code).then(participants => {\r\n this.setState({\r\n participants: participants\r\n });\r\n });\r\n }\r\n }\r\n onDocumentTemplateChanged(option, index) {\r\n this.setState({\r\n selectedDocumentTemplate: Number(option.key)\r\n });\r\n }\r\n OnCreateClick() {\r\n this.setState({\r\n hideDialog: true\r\n });\r\n let documentTemplate = this.state.documentTemplates[this.state.selectedDocumentTemplate];\r\n let selectedWeb = this.state.selectedSubsite.get_serverRelativeUrl();\r\n this.generateStudyOrderDoc(selectedWeb, documentTemplate.siteRelativeUrl).then((destinationUrl) => {\r\n if (this.props.onCreate)\r\n this.props.onCreate();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n window.location.href = destinationUrl;\r\n });\r\n }\r\n OnCancelClick() {\r\n this.setState({\r\n hideDialog: true\r\n });\r\n if (this.props.onCancel)\r\n this.props.onCancel();\r\n if (this.props.onClose)\r\n this.props.onClose();\r\n }\r\n onChairmainNameChanged(newValue) {\r\n this.setState({\r\n chairman: { name: newValue, company: this.state.chairman.company, country: this.state.chairman.country }\r\n });\r\n }\r\n onChairmainCompanyChanged(newValue) {\r\n this.setState({\r\n chairman: { name: this.state.chairman.name, company: newValue, country: this.state.chairman.country }\r\n });\r\n }\r\n onChairmainCountryChanged(newValue) {\r\n this.setState({\r\n chairman: { name: this.state.chairman.name, company: this.state.chairman.company, country: newValue }\r\n });\r\n }\r\n setChairman(name, company, country) {\r\n this.setState({\r\n chairman: {\r\n name: name,\r\n company: company,\r\n country: country\r\n }\r\n });\r\n }\r\n onReleasableToChanged(option, index) {\r\n let arrayIndex = this.state.releasableTo.indexOf(option.key.toString());\r\n let alreadyInArray = arrayIndex >= 0;\r\n let newArrayValue = [...this.state.releasableTo];\r\n if (alreadyInArray) {\r\n let removedItem = newArrayValue.splice(arrayIndex, 1); //Remove a selected value\r\n }\r\n else {\r\n newArrayValue.push(option.key.toString()); //Add the selected value\r\n }\r\n this.setState({\r\n releasableTo: newArrayValue\r\n });\r\n }\r\n onStudyOrderDateChanged(date) {\r\n this.setState({\r\n studyOrderDate: date\r\n });\r\n }\r\n onStudyOrderReferenceChanged(newValue) {\r\n this.setState({\r\n studyOrderReference: newValue\r\n });\r\n }\r\n onSgNumberChanged(newValue) {\r\n this.setState({\r\n sgNumber: newValue\r\n });\r\n }\r\n onStudyTitleChanged(newValue) {\r\n this.setState({\r\n studyTitle: newValue\r\n });\r\n }\r\n onStudyCompletionDateChanged(newValue) {\r\n this.setState({\r\n studyCompletionDate: newValue\r\n });\r\n }\r\n onStudyBudgetChanged(newValue) {\r\n this.setState({\r\n studyBudget: newValue\r\n });\r\n }\r\n generateStudyOrderDoc(webURL, templateUrl) {\r\n //let templateUrl = _spPageContextInfo.siteServerRelativeUrl + \"/DI-NIAG/DocumentTemplates/StudyOrder.docx\";\r\n let filename = templateUrl.split(\"/\").reverse()[0];\r\n //Transform the application object to a flat propertylist\r\n let standardProperties = DocumentGenerator.getStandardProperties();\r\n let applicationProperties = this.toPropertyList();\r\n let destination = webURL + \"/Shared Documents\";\r\n Object.keys(standardProperties).forEach(key => {\r\n applicationProperties[key] = standardProperties[key];\r\n });\r\n let template = new DocumentGenerator(templateUrl, true, \"Site\");\r\n let web = this.state.selectedSubsite;\r\n let context = SP.ClientContext.get_current();\r\n web.get_allProperties().set_item(\"NIAG_Fields\", JSON.stringify(applicationProperties));\r\n web.update();\r\n context.load(web);\r\n return new Promise((resolve, reject) => {\r\n context.executeQueryAsync((sender, args) => {\r\n template.merge(applicationProperties).then(() => {\r\n //Save the template in the current document set\r\n template.saveAs(destination, filename, true, webURL).then(serverRelativeUrl => {\r\n return resolve(destination);\r\n });\r\n });\r\n }, (sender, args) => {\r\n //There was an error save the properties to the Subweb\r\n reject(args.get_message());\r\n });\r\n });\r\n }\r\n toPropertyList() {\r\n let list = {};\r\n list[\"grantCode\"] = this.state.grant ? this.state.grant.code : \"\";\r\n list[\"grantSynopsis\"] = this.state.grant ? this.state.grant.synopsis : \"\";\r\n list[\"grantTitle\"] = this.state.grant ? this.state.grant.title : \"\";\r\n list[\"chairmanName\"] = this.state.chairman.name;\r\n list[\"chairmanCompany\"] = this.state.chairman.company;\r\n list[\"chairmanCountry\"] = this.state.chairman.country;\r\n list[\"releasableTo\"] = this.state.releasableTo.join(\", \");\r\n list[\"studyOrderDate\"] = this.state.studyOrderDate.toLocaleDateString();\r\n list[\"studyOrderDate.Timestamp\"] = Number(this.state.studyOrderDate).toString();\r\n list[\"studyOrderReference\"] = this.state.studyOrderReference;\r\n list[\"sgNumber\"] = this.state.sgNumber;\r\n list[\"studyTitle\"] = this.state.studyTitle;\r\n list[\"studyCompletionDate\"] = this.state.studyCompletionDate;\r\n list[\"classification\"] = this.state.selectedClassification;\r\n list[\"studyBudget\"] = this.state.studyBudget;\r\n return list;\r\n }\r\n render() {\r\n let subsiteOptions = this.state.subsites.sort((a, b) => {\r\n return a.get_title() < b.get_title() ? -1 : 1;\r\n }).map(webInfo => {\r\n return { key: webInfo.get_id().toString(), text: webInfo.get_title(), data: webInfo };\r\n });\r\n let templateOptions = Object.keys(this.state.documentTemplates).sort((a, b) => {\r\n return this.state.documentTemplates[a].title < this.state.documentTemplates[b].title ? -1 : 1;\r\n }).map(itemId => {\r\n return { key: Number(itemId), text: this.state.documentTemplates[itemId].title, data: this.state.documentTemplates[itemId] };\r\n });\r\n let classificationOptions = [\r\n { key: \"NATO Unclassified\", text: \"NATO Unclassified\", disabled: false },\r\n { key: \"NATO Restricted\", text: \"NATO Restricted\", disabled: false },\r\n { key: \"NATO Secret\", text: \"NATO Secret\", disabled: false }\r\n ];\r\n let releasableToOptions = ReleasableTo.asOptions();\r\n let createButtonEnabled = this.state.selectedSubsite && this.state.selectedDocumentTemplate >= 0 &&\r\n this.state.chairman.name && this.state.chairman.name.trim().length >= 0 &&\r\n this.state.chairman.company && this.state.chairman.company.trim().length >= 0 &&\r\n this.state.chairman.country && this.state.chairman.country.trim().length >= 0 &&\r\n this.state.selectedClassification && this.state.selectedClassification.trim().length >= 0;\r\n let participantElements = this.state.participants.map((p, index) => {\r\n let name = p.firstname + ' ' + p.lastname;\r\n let company = p.company;\r\n let country = p.country;\r\n //let role: string = (p as Object).hasOwnProperty('role') ? (p as ExploratoryGroupRegistration).role : ''\r\n return (\r\n {name}\r\n {company}\r\n {country}\r\n \r\n \r\n { this.setChairman(name, company, country); }} title=\"Chairman\">\r\n \r\n );\r\n });\r\n return (
\r\n \r\n
);\r\n }\r\n}\r\n//# sourceMappingURL=StudyGroupDocumentCreatorComponent.jsx.map","import { Component } from 'react';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport { IconButton } from 'office-ui-fabric-react/lib/Button';\r\nexport class ExchangeRateComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.onRateChange = this.onRateChange.bind(this);\r\n this.onReverseRate = this.onReverseRate.bind(this);\r\n this.state = {\r\n reversed: false,\r\n rate: \"1\"\r\n };\r\n }\r\n componentWillMount() {\r\n }\r\n componentDidMount() {\r\n }\r\n onRateChange(newValue) {\r\n let rate = this.parseRate(newValue);\r\n if (!isNaN(rate)) {\r\n this.setState({\r\n rate: newValue\r\n });\r\n }\r\n else {\r\n this.setState({\r\n rate: this.state.rate\r\n });\r\n }\r\n }\r\n onReverseRate() {\r\n let inverseRate = 1 / this.Rate;\r\n this.setState({\r\n rate: inverseRate.toString(),\r\n reversed: !this.state.reversed\r\n });\r\n }\r\n parseRate(rateStr) {\r\n if (!rateStr)\r\n rateStr = \"0\";\r\n if (rateStr.endsWith(\".\") || rateStr.endsWith(\",\")) {\r\n rateStr = rateStr + \"0\";\r\n }\r\n return Number(rateStr);\r\n }\r\n get Rate() {\r\n return !this.state.reversed ? this.parseRate(this.state.rate) : 1 / this.parseRate(this.state.rate);\r\n }\r\n updateBudgetBreakdown() {\r\n let projectBudget = this.props.application.projectBudget;\r\n let breakdown = JSON.parse(projectBudget.budgetBreakdown);\r\n let newBreakdown = new Array();\r\n breakdown.forEach(row => {\r\n let amountStr = row[\"ammount\"]; //I know... ammount is misspelled :(\r\n let amount = Number(amountStr);\r\n row[\"ammount\"] = amount * this.Rate;\r\n row[\"currency\"] = \"EUR\";\r\n newBreakdown.push(row);\r\n });\r\n return this.props.application.projectBudget.updateProjectBudgetEurField(JSON.stringify(newBreakdown));\r\n }\r\n render() {\r\n return (
\r\n\t\t\t
\r\n\t\t\t\tThe application was submitted using the currency: {this.props.application.projectBudget.budgetCurrency}
\r\n\t\t\t\tBefore you award this application you must supply an exchange rate to convert '{this.props.application.projectBudget.budgetCurrency}' to 'EUR'\r\n\t\t\t
\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\r\n\t\t\t\tExample: 100 {this.state.reversed ? \"EUR\" : this.props.application.projectBudget.budgetCurrency} is {(this.Rate * 100).toFixed(2)} {this.state.reversed ? this.props.application.projectBudget.budgetCurrency : \"EUR\"}\r\n\t\t\t\r\n\t\t
);\r\n }\r\n}\r\n//# sourceMappingURL=ExchangeRateComponent.jsx.map","import { Component, Fragment } from 'react';\r\nimport { ComboBox, SelectableOptionMenuItemType } from 'office-ui-fabric-react/lib/ComboBox';\r\nimport { LogMessage, LogSeverityEnum, ListNames, KeyPriority, SharePointRestService } from \"../index\";\r\nexport class KeyPrioritiesSelectorComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n keyPriorities: new Array(),\r\n selectedKeyPriorities: props.initialValue\r\n };\r\n this.onSelectedKeyPrioritiesChanged = this.onSelectedKeyPrioritiesChanged.bind(this);\r\n }\r\n onSelectedKeyPrioritiesChanged(option, index) {\r\n let arrayIndex = this.state.selectedKeyPriorities.indexOf(Number(option.key));\r\n let alreadyInArray = arrayIndex >= 0;\r\n let newArrayValue = [...this.state.selectedKeyPriorities];\r\n if (alreadyInArray) {\r\n let removedItem = newArrayValue.splice(arrayIndex, 1); //Remove a selected value\r\n }\r\n else {\r\n newArrayValue.push(Number(option.key)); //Add the selected value\r\n }\r\n this.setState({\r\n selectedKeyPriorities: newArrayValue\r\n });\r\n if (this.props.onSelectionChanged) {\r\n let selectedKeyPrioritiesArray = newArrayValue.map(id => this.state.keyPriorities.find(k => k.id == id));\r\n this.props.onSelectionChanged(selectedKeyPrioritiesArray);\r\n }\r\n }\r\n componentWillMount() {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.KEY_PRIORITIES + \"')/items\";\r\n if (this.props.onStartLoad) {\r\n this.props.onStartLoad();\r\n }\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n let keyPriorities = new Array();\r\n if (odata && odata.value && odata.value.length > 0) {\r\n for (let i = 0; i < odata.value.length; i++) {\r\n keyPriorities.push(new KeyPriority(odata.value[i]));\r\n }\r\n }\r\n this.setState({\r\n keyPriorities: keyPriorities\r\n });\r\n if (this.props.onEndLoad) {\r\n this.props.onEndLoad(true);\r\n }\r\n }).catch(error => {\r\n LogMessage.Log(\"There was an error parsing the Key Priorities\", this, LogSeverityEnum.Error);\r\n if (this.props.onEndLoad) {\r\n this.props.onEndLoad(false);\r\n }\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"There was an error loading the Key Priorities\", this, LogSeverityEnum.Error);\r\n if (this.props.onEndLoad) {\r\n this.props.onEndLoad(false);\r\n }\r\n });\r\n }\r\n get keyPriorityOptions() {\r\n let grouped = {};\r\n if (this.state.keyPriorities) {\r\n this.state.keyPriorities.forEach((keyPriority) => {\r\n let level1 = keyPriority.level1;\r\n let level1Number = '';\r\n let level1NumberMatch = keyPriority.level1.match(/\\d+/g);\r\n if (level1NumberMatch && level1NumberMatch != null && level1NumberMatch.length > 0) {\r\n level1Number = level1NumberMatch[0];\r\n }\r\n let level2 = keyPriority.level2;\r\n if (level2 == \"\" || level2 == null || level2 == undefined) {\r\n level2 = \"-\";\r\n }\r\n let header = level1Number + level2;\r\n if (!grouped[header]) {\r\n grouped[header] = new Array();\r\n }\r\n grouped[header].push(keyPriority);\r\n });\r\n }\r\n let keyPriorityOptions = new Array();\r\n Object.keys(grouped).sort((a, b) => a.localeCompare(b)).forEach(level2 => {\r\n keyPriorityOptions.push({ key: level2, text: level2, itemType: SelectableOptionMenuItemType.Header });\r\n grouped[level2].sort((a, b) => a.description.localeCompare(b.description)).forEach((keyPriority) => {\r\n let description = keyPriority.description.replace(/(<([^>]+)>)/ig, \"\");\r\n keyPriorityOptions.push({\r\n key: keyPriority.id,\r\n text: description,\r\n itemType: SelectableOptionMenuItemType.Normal,\r\n });\r\n });\r\n keyPriorityOptions.push({ key: level2 + \"_Divider\", text: \"-\", itemType: SelectableOptionMenuItemType.Divider });\r\n });\r\n return keyPriorityOptions;\r\n }\r\n get keyPriorityAsText() {\r\n let grouped = {};\r\n if (this.state.keyPriorities) {\r\n this.state.keyPriorities.forEach((keyPriority) => {\r\n if (this.state.selectedKeyPriorities.indexOf(keyPriority.id) >= 0) {\r\n let level1 = keyPriority.level1;\r\n let level1Number = '';\r\n let level1NumberMatch = keyPriority.level1.match(/\\d+/g);\r\n if (level1NumberMatch && level1NumberMatch != null && level1NumberMatch.length > 0) {\r\n level1Number = level1NumberMatch[0];\r\n }\r\n let level2 = keyPriority.level2;\r\n if (level2 == \"\" || level2 == null || level2 == undefined) {\r\n level2 = \"-\";\r\n }\r\n let header = level1Number + level2;\r\n if (!grouped[header]) {\r\n grouped[header] = new Array();\r\n }\r\n grouped[header].push(keyPriority);\r\n }\r\n });\r\n }\r\n return (
    \r\n\t\t\t{Object.keys(grouped).sort((a, b) => a.localeCompare(b)).map(level2 => {\r\n return (
  • \r\n\t\t\t\t\t\t{level2}\r\n\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t{grouped[level2].sort((a, b) => a.description.localeCompare(b.description)).map(keyPriority => {\r\n return (
    • {keyPriority.description.replace(/(<([^>]+)>)/ig, \"\")}
    • );\r\n })}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
  • );\r\n })}\r\n\t\t
);\r\n }\r\n render() {\r\n return (\r\n\r\n\t\t\t\t{!this.props.disabled &&\r\n }\r\n\r\n\t\t\t\t{this.props.disabled &&\r\n
\r\n\t\t\t\t\t\t{this.keyPriorityAsText}\r\n\t\t\t\t\t
}\r\n\r\n\t\t\t\t{this.props.showAsText && this.keyPriorityAsText}\r\n\r\n\t\t\t
);\r\n }\r\n}\r\n//# sourceMappingURL=KeyPrioritiesSelectorComponent.jsx.map","import { Component } from 'react';\r\nimport { LogMessage, LogSeverityEnum } from \"../index\";\r\nexport class DivisionFieldTemplate extends Component {\r\n constructor(props) {\r\n super(props);\r\n LogMessage.Log(\"Initializing field '\" + this.props.ctx.CurrentFieldSchema.Name + \"' as 'DivisionFieldTemplate'\", this, LogSeverityEnum.Verbose);\r\n if (props.ctx.ControlMode == SPClientTemplates.ClientControlMode.View) {\r\n }\r\n else {\r\n let formContext = SPClientTemplates.Utility.GetFormContextForCurrentField(props.ctx);\r\n formContext.registerGetValueCallback(formContext.fieldName, this.getValue.bind(this));\r\n }\r\n let value = this.props.ctx.CurrentFieldValue;\r\n if (value == null || value == \"\") {\r\n this.props.ctx.CurrentFieldValue = _spPageContextInfo.webTitle;\r\n }\r\n }\r\n getValue() {\r\n return this.props.ctx.CurrentFieldValue;\r\n }\r\n render() {\r\n return
{this.props.ctx.CurrentFieldValue}
;\r\n }\r\n}\r\n//# sourceMappingURL=DivisionFieldTemplate.jsx.map","import { Component } from 'react';\r\nexport class ContentTypeFieldTemplate extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n render() {\r\n return
\r\n
Hello world!
\r\n
;\r\n }\r\n}\r\n//# sourceMappingURL=ContentTypeFieldTemplate.jsx.map","import { Component } from 'react';\r\nimport { LogMessage, LogSeverityEnum } from \"../index\";\r\nexport class ReadOnlyFieldTemplate extends Component {\r\n constructor(props) {\r\n super(props);\r\n LogMessage.Log(\"Initializing field '\" + this.props.ctx.CurrentFieldSchema.Name + \"' as 'ReadOnlyFieldTemplate'\", this, LogSeverityEnum.Verbose);\r\n this.state = {\r\n value: this.props.ctx.CurrentItem[this.props.ctx.CurrentFieldSchema.Name]\r\n };\r\n if (props.ctx.ControlMode == SPClientTemplates.ClientControlMode.View) {\r\n }\r\n else {\r\n let formContext = SPClientTemplates.Utility.GetFormContextForCurrentField(props.ctx);\r\n formContext.registerGetValueCallback(formContext.fieldName, () => { return this.value; });\r\n }\r\n }\r\n get value() {\r\n return this.state.value;\r\n }\r\n set value(value) {\r\n this.setState({\r\n value: value\r\n });\r\n }\r\n render() {\r\n return
{this.state.value}
;\r\n }\r\n}\r\n//# sourceMappingURL=ReadOnlyFieldTemplate.jsx.map","import { Component } from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { ListNames, SPPreSaveAction, ApprovalEnum, SharePointRestService, ApprovalDialogComponent, Attachment, LogMessage, LogSeverityEnum } from \"../index\";\r\nimport 'whatwg-fetch';\r\nexport class ApprovalFieldTemplate extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.approvalDataPerField = {\r\n //\"natoBudgetApproval\": {\r\n // Folder: \"Budget Approvals\", Text: \"Approve budget\", Subtext: \"Please approve or reject this proposal's budget\"\r\n //},\r\n \"natoHeadOfSectionApproval\": {\r\n Folder: \"Head of Section Approvals\", Text: \"Approve grant\", Subtext: \"Please approve or reject this grant\"\r\n },\r\n \"natoPlanningOfficerApproval\": {\r\n Folder: \"Planning Officer Approvals\", Text: \"Approve grant\", Subtext: \"Please approve or reject this grant\"\r\n }\r\n };\r\n this.approvalItemExists = false;\r\n this._additionalElements = new Array();\r\n LogMessage.Log(\"Initializing field '\" + this.props.ctx.CurrentFieldSchema.Name + \"' as 'ApprovalFieldTemplate'\", this, LogSeverityEnum.Verbose);\r\n this.state = {\r\n comments: \"\",\r\n status: ApprovalEnum[ApprovalEnum.Pending],\r\n changedBy: \"\",\r\n changedOn: new Date(1970, 1, 1),\r\n needsUpdate: false,\r\n hasPermissions: false,\r\n hasPermissionsQueried: false,\r\n enabled: true,\r\n internalFieldValue: this.props.ctx.CurrentFieldValue,\r\n attachment: null,\r\n oldAttachment: null\r\n };\r\n if (props.ctx.ControlMode == SPClientTemplates.ClientControlMode.View) {\r\n }\r\n else {\r\n let formContext = SPClientTemplates.Utility.GetFormContextForCurrentField(props.ctx);\r\n formContext.registerGetValueCallback(formContext.fieldName, () => { return this.getValue(); });\r\n let preSave = SPPreSaveAction.getInstance();\r\n preSave.registerPreSaveAction(() => { return this.onPreSave(); });\r\n }\r\n this.onApproveButtonClick = this.onApproveButtonClick.bind(this);\r\n }\r\n onPreSave() {\r\n return new Promise((resolve, reject) => {\r\n //No approval item exists yet, create a new Item\r\n if (!this.approvalItemExists && this.state.hasPermissions && this.state.needsUpdate) {\r\n this.createApprovalItem().then(() => {\r\n resolve();\r\n }).catch((reason) => {\r\n LogMessage.Log(\"Unable to create a new Approval Item: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n }\r\n //There is already an approval item, update this item\r\n else if (this.approvalItemExists && this.state.hasPermissions && this.state.needsUpdate) {\r\n this.updateApprovalItem().then(() => {\r\n resolve();\r\n }).catch((reason) => {\r\n LogMessage.Log(\"Unable to update the Approval Item: \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n }\r\n else {\r\n resolve();\r\n }\r\n });\r\n }\r\n //Executed just before the React component mounts\r\n componentWillMount() {\r\n //Check if an approvalItem already exists\r\n if (this.state.internalFieldValue != \"\" && this.state.internalFieldValue != undefined) {\r\n //Retrieve the ID from the fields value. The value has the following format \"ID;#Value\"\r\n let approvalIdStr = this.state.internalFieldValue.split(\";#\")[0];\r\n let approvalId = Number(approvalIdStr);\r\n //Retrieve the approvalItem by ID\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANT_APPROVALS + \"')/items(\" + approvalId + \")?$select=Title,natoApprovalStatus,natoGrantDetails,Modified,Attachments,AttachmentFiles,Editor/Title&$expand=Editor,AttachmentFiles\";\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n this.approvalItemExists = true;\r\n let attachment = odata.Attachments ? new Attachment(odata.AttachmentFiles[0].FileName, new Uint8Array(0), false, odata.AttachmentFiles[0].ServerRelativeUrl) : null;\r\n //Update the internal state to reflect all metadata in the UserInterface\r\n this.setState({\r\n comments: (odata.Title) ? odata.Title : \"\",\r\n status: odata.natoApprovalStatus,\r\n changedBy: odata.Editor.Title,\r\n changedOn: new Date(odata.Modified),\r\n attachment: attachment,\r\n oldAttachment: attachment\r\n });\r\n });\r\n })\r\n .catch(reason => {\r\n this.approvalItemExists = false;\r\n });\r\n }\r\n //Run an async request to check if this user has permissions to create/update the ApprovalItem\r\n this.hasPermissions().then(userHasPermissions => {\r\n this.setState({\r\n hasPermissions: userHasPermissions,\r\n hasPermissionsQueried: true\r\n });\r\n });\r\n }\r\n get enabled() {\r\n return this.state.enabled;\r\n }\r\n set enabled(enabled) {\r\n this.setState({\r\n enabled: enabled\r\n });\r\n }\r\n get approvalValue() {\r\n if (this.state.status == ApprovalEnum[ApprovalEnum.Approved])\r\n return ApprovalEnum.Approved;\r\n else if (this.state.status == ApprovalEnum[ApprovalEnum.Rejected])\r\n return ApprovalEnum.Rejected;\r\n else\r\n return ApprovalEnum.Pending;\r\n }\r\n componentDidUpdate(prevProps, prevState) {\r\n //We use a plain JavaScript event for opening the Approval Dialog\r\n //Using the Synthetic React event causes some weird behaviour when used in combination with Ribbon button events\r\n if (this.approveButtonElement != null && !this.approveButtonElement.onclick) {\r\n this.approveButtonElement.onclick = (event) => {\r\n event.preventDefault();\r\n this.showApprovalDialog();\r\n };\r\n }\r\n }\r\n //The \"GetValue\" callback for this form. If the form is saves, this function is called\r\n getValue() {\r\n return this.state.internalFieldValue;\r\n }\r\n //Generate a link to the current item. The item is a link to the DispForm.aspx\r\n getLinkToCurrentItem() {\r\n let currentItemId = this.props.ctx.FormContext.itemAttributes.Id;\r\n if (currentItemId == 0) {\r\n return null;\r\n }\r\n else {\r\n let listUrl = this.props.ctx.FormContext.itemAttributes.Url.split(\"/\").slice(0, -1).join(\"/\");\r\n return listUrl + \"/DispForm.aspx?ID=\" + currentItemId;\r\n }\r\n }\r\n //Checks if the current user has permissions to approve this item\r\n hasPermissions() {\r\n if (this.state.hasPermissionsQueried) {\r\n return Promise.resolve(this.state.hasPermissions);\r\n }\r\n else {\r\n let folderPath = _spPageContextInfo.webServerRelativeUrl + \"/Lists/\" + ListNames.GRANT_APPROVALS + \"/\" + this.approvalDataPerField[this.props.ctx.CurrentFieldSchema.Name].Folder;\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/getFolderByServerRelativeUrl('\" + folderPath + \"')/?$expand=ListItemAllFields/EffectiveBasePermissions\";\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"GET\", undefined, undefined, false)\r\n .then(response => {\r\n response.json().then(odata => {\r\n let manageListsPerms = new SP.BasePermissions();\r\n manageListsPerms.initPropertiesFromJson(odata.ListItemAllFields.EffectiveBasePermissions);\r\n let currentUserCanEditListItems = manageListsPerms.has(SP.PermissionKind.editListItems);\r\n resolve(currentUserCanEditListItems);\r\n });\r\n })\r\n .catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n }\r\n //Create a new ApprovalItem\r\n createApprovalItem() {\r\n //We use the ClientContext for this, because the REST service cannot create items in a folder\r\n let context = SP.ClientContext.get_current();\r\n let list = context.get_web().get_lists().getByTitle(ListNames.GRANT_APPROVALS);\r\n let folderPath = _spPageContextInfo.webServerRelativeUrl + \"/Lists/\" + ListNames.GRANT_APPROVALS + \"/\" + this.approvalDataPerField[this.props.ctx.CurrentFieldSchema.Name].Folder;\r\n //Make sure we create the ApprovalItem in the correct folder\r\n let itemCreateInfo = new SP.ListItemCreationInformation();\r\n itemCreateInfo.set_folderUrl(folderPath);\r\n //Add the rest of the metadata\r\n var newListItem = list.addItem(itemCreateInfo);\r\n newListItem.set_item(\"Title\", \"\" + this.state.comments);\r\n newListItem.set_item(\"natoApprovalStatus\", this.state.status);\r\n newListItem.set_item(\"natoGrantDetails\", this.getLinkToCurrentItem());\r\n newListItem.update();\r\n return new Promise((resolve, reject) => {\r\n context.executeQueryAsync((sender, args) => {\r\n let newValue = newListItem.get_id() + \";#\" + this.state.status;\r\n this.setState({\r\n internalFieldValue: newValue\r\n });\r\n this.uploadAttachment().then(() => {\r\n resolve(newValue);\r\n }).catch((reason) => {\r\n //Something went wrong saving the attachment\r\n LogMessage.Log(\"Unable to save the attachment with Approval Item '\" + newListItem.get_id() + \"': \" + reason, this, LogSeverityEnum.Error);\r\n });\r\n }, (sender, args) => {\r\n LogMessage.Log(\"Error creating approval item in '\" + folderPath + \"': \" + args.get_message(), this, LogSeverityEnum.Error);\r\n reject(args);\r\n });\r\n });\r\n }\r\n uploadAttachment() {\r\n if (this.state.attachment != null && this.state.attachment.isNew) {\r\n return new Promise((resolve, reject) => {\r\n let approvalIdStr = this.state.internalFieldValue.split(\";#\")[0];\r\n let approvalId = Number(approvalIdStr);\r\n let promises = new Array();\r\n if (this.state.oldAttachment != null) {\r\n let deleteOldAttachmentPromise = this.state.oldAttachment.Delete(ListNames.GRANT_APPROVALS, approvalId);\r\n promises.push(deleteOldAttachmentPromise);\r\n }\r\n let uploadAttachmentPromise = this.state.attachment.Upload(ListNames.GRANT_APPROVALS, approvalId);\r\n promises.push(uploadAttachmentPromise);\r\n Promise.all(promises).then(() => {\r\n resolve();\r\n });\r\n });\r\n }\r\n else {\r\n return Promise.resolve(true);\r\n }\r\n }\r\n updateApprovalItem() {\r\n let approvalIdStr = this.state.internalFieldValue.split(\";#\")[0];\r\n let approvalId = Number(approvalIdStr);\r\n let item = {\r\n \"Title\": \"\" + this.state.comments,\r\n \"natoApprovalStatus\": this.state.status,\r\n \"natoGrantDetails\": {\r\n \"Description\": \"Details\",\r\n \"Url\": this.getLinkToCurrentItem()\r\n },\r\n \"__metadata\": { \"type\": \"SP.Data.GrantApprovalsListItem\" }\r\n };\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.GRANT_APPROVALS + \"')/items(\" + approvalId + \")\";\r\n let headers = { \"X-HTTP-Method\": \"MERGE\", \"If-Match\": \"*\" };\r\n return new Promise((resolve, reject) => {\r\n SharePointRestService.fetch(url, \"POST\", item, headers)\r\n .then(response => {\r\n this.setState({\r\n internalFieldValue: approvalId + \";#\" + this.state.status\r\n });\r\n this.uploadAttachment().then(() => {\r\n resolve();\r\n }).catch((reason) => {\r\n LogMessage.Log(\"Unable to save the attachment with Approval Item '\" + approvalId + \"': \" + reason, this, LogSeverityEnum.Error);\r\n reject(reason);\r\n });\r\n }).catch(reason => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n onApproveButtonClick(ev) {\r\n this.showApprovalDialog();\r\n }\r\n set onChange(callback) {\r\n this._onChangeCallback = callback;\r\n }\r\n get additionalDialogElements() {\r\n return this._additionalElements;\r\n }\r\n showApprovalDialog() {\r\n return new Promise((resolve, reject) => {\r\n let spContentRow = document.getElementById('contentRow');\r\n let dialogContainer = document.createElement('DIV');\r\n dialogContainer.id = 'natoDialogContainer';\r\n spContentRow.insertAdjacentHTML('beforeend', dialogContainer.outerHTML);\r\n ReactDOM.render( {\r\n this.setState({\r\n comments: comment,\r\n attachment: attachment,\r\n status: 'Approved',\r\n changedBy: _spPageContextInfo.userLoginName.split('\\\\').slice(-1)[0],\r\n changedOn: new Date(Date.now()),\r\n needsUpdate: true\r\n });\r\n RefreshCommandUI();\r\n if (this._onChangeCallback) {\r\n this._onChangeCallback(this.state.status, this.state.changedBy, this.state.changedOn, this.state.comments);\r\n }\r\n resolve(true);\r\n }} onReject={(comment, attachment) => {\r\n this.setState({\r\n comments: comment,\r\n attachment: attachment,\r\n status: 'Rejected',\r\n changedBy: _spPageContextInfo.userLoginName.split('\\\\').slice(-1)[0],\r\n changedOn: new Date(Date.now()),\r\n needsUpdate: true\r\n });\r\n RefreshCommandUI();\r\n if (this._onChangeCallback) {\r\n this._onChangeCallback(this.state.status, this.state.changedBy, this.state.changedOn, this.state.comments);\r\n }\r\n resolve(true);\r\n }} onClose={() => {\r\n spContentRow.removeChild(document.getElementById('natoDialogContainer'));\r\n resolve(false);\r\n }}>\r\n {this._additionalElements}\r\n , document.getElementById('natoDialogContainer'));\r\n });\r\n }\r\n render() {\r\n let returnElement;\r\n let approveButton = null;\r\n if (this.state.enabled && this.state.hasPermissions) {\r\n approveButton =\r\n this.approveButtonElement = elm}>\r\n \r\n \r\n \r\n ;\r\n }\r\n let attachmentElement = null;\r\n if (this.state.attachment != null) {\r\n if (this.state.attachment.isNew) {\r\n attachmentElement = (
{this.state.attachment.filename} ({this.state.attachment.filesize})
);\r\n }\r\n else {\r\n attachmentElement = ();\r\n }\r\n }\r\n returnElement = (\r\n {(this.state.status == \"Pending\") && Pending{approveButton}}\r\n {(this.state.status == \"Rejected\") && Rejected{approveButton}
by {this.state.changedBy} on {this.state.changedOn.format(\"dd MMM yyyy HH:mm\")}{(this.state.comments != null && this.state.comments.length > 0) && ( with comment {this.state.comments})}{attachmentElement}
}\r\n {(this.state.status == \"Approved\") && Approved{approveButton}
by {this.state.changedBy} on {this.state.changedOn.format(\"dd MMM yyyy HH:mm\")}{(this.state.comments != null && this.state.comments.length > 0) && ( with comment {this.state.comments})}{attachmentElement}
}\r\n
);\r\n return returnElement;\r\n }\r\n}\r\n//# sourceMappingURL=ApprovalFieldTemplate.jsx.map","import { SPUtil, DivisionEnum, PublishedGrantData, User, ListNames, ApplicationStatus, ApplicationFieldCollections, SharePointRestService, DocumentGenerator, Application, GrantDetailsComponent, ChangeRequestHistoryComponent, ChangeRequestComponent, EventRegistrationComponent, ReadOnlyFieldTemplate, GrantApplicationWizardComponent, LogMessage, LogSeverityEnum, WorkflowManager } from \"../index\";\r\nimport { IconButton } from 'office-ui-fabric-react/lib/Button';\r\n//This class is used to render the 'natoCode' field as a HyperLink. Depending on the view, the hyperlink will either \r\n// (1) Open the Grant details, or\r\n// (2) Open the Application Wizard\r\nexport class CodeFieldTemplate extends ReadOnlyFieldTemplate {\r\n constructor(props) {\r\n super(props);\r\n this._iconsLoaded = false;\r\n LogMessage.Log(\"Initializing field '\" + this.props.ctx.CurrentFieldSchema.Name + \"' as 'CodeFieldTemplate'\", this, LogSeverityEnum.Verbose);\r\n //If the ControlMode is either Newform or Editform, register the GetValue callback so that we can save the (modified) value of this field\r\n if (props.ctx.ControlMode == SPClientTemplates.ClientControlMode.NewForm || props.ctx.ControlMode == SPClientTemplates.ClientControlMode.EditForm) {\r\n let formContext = SPClientTemplates.Utility.GetFormContextForCurrentField(props.ctx);\r\n formContext.registerGetValueCallback(formContext.fieldName, () => { return this.getValue(); });\r\n }\r\n this.onCodeClick = this.onCodeClick.bind(this);\r\n this.onBeneficiaryRequestClick = this.onBeneficiaryRequestClick.bind(this);\r\n this.onChangeRequestClick = this.onChangeRequestClick.bind(this);\r\n this.onChangeRequestHistoryClick = this.onChangeRequestHistoryClick.bind(this);\r\n this.beneficiaryRequestDialogCallback = this.beneficiaryRequestDialogCallback.bind(this);\r\n }\r\n componentDidMount() {\r\n //If the user just performed a successfull login from the GrantDetails dialog page, the current page will reload and it will contain the 'openGrantDetails' querystring parameter\r\n //If this paramter is present, and if the ID matches the ID of the current item, than immediately open the Grant Details dialog.\r\n let params = SPUtil.parseQuerystring(location.search);\r\n let grantDetailsIdStr = params[\"openGrantDetails\"] || params[\"d\"] || undefined;\r\n let applicationIdStr = params[\"openApplication\"] || params[\"a\"] || undefined;\r\n if (grantDetailsIdStr != undefined) {\r\n let id = Number(grantDetailsIdStr);\r\n if (this.props.ctx.CurrentItem.ID == id) {\r\n if (applicationIdStr != undefined) {\r\n SPUtil.isLoggedIn().then(isLoggedIn => {\r\n if (isLoggedIn) {\r\n //If an invited user is opening the grant application, show the Application Wizard\r\n this.openGrantWizardInDialog(Number(applicationIdStr));\r\n }\r\n else {\r\n //If an invited user is opening the grant application, but the user is not yet signed in\r\n this.openGrantDetailsInDialog(id, Number(applicationIdStr));\r\n }\r\n });\r\n }\r\n else {\r\n //Default opening of the grant details from the grants list\r\n this.openGrantDetailsInDialog(id, null);\r\n }\r\n }\r\n }\r\n SPUtil.iconsLoaded().then(() => {\r\n this._iconsLoaded = true;\r\n this.forceUpdate();\r\n });\r\n }\r\n getValue() {\r\n return this.props.ctx.CurrentFieldValue;\r\n }\r\n //User pressed the hyperlink\r\n onCodeClick(evt) {\r\n if (_spPageContextInfo.serverRequestPath && _spPageContextInfo.serverRequestPath.toLocaleLowerCase().indexOf(\"/lists/grants/\") >= 0) {\r\n this.showSharePointForm();\r\n }\r\n //If this field is rendered as part of the 'Grant Applications' list then open the 'Grant Application Wizard'\r\n else if ((this.props.ctx[\"ListTitle\"] + \"\").toLocaleLowerCase() == \"grant applications\".toLocaleLowerCase()) {\r\n let grantCode = this.props.ctx.CurrentItem.natoCode;\r\n this.openGrantWizardInDialog(this.props.ctx.CurrentItem.ID);\r\n }\r\n //If this field is rendered as part of the 'Grant Publications' list then open the 'Grant details'\r\n else if ((this.props.ctx[\"ListTitle\"] + \"\").toLocaleLowerCase() == \"grant publications\".toLocaleLowerCase()) {\r\n this.openGrantDetailsInDialog(this.props.ctx.CurrentItem.ID, null);\r\n }\r\n }\r\n showSharePointForm() {\r\n let GetPermMaskH = window[\"GetPermMaskH\"];\r\n let GetPermMaskL = window[\"GetPermMaskL\"];\r\n let stsNavigateFunc = window[\"STSNavigate\"];\r\n let perms = new SP.BasePermissions();\r\n perms.initPropertiesFromJson({\r\n High: GetPermMaskH(this.props.ctx.CurrentItem.PermMask),\r\n Low: GetPermMaskL(this.props.ctx.CurrentItem.PermMask),\r\n });\r\n let userEditPermissions = perms.has(SP.PermissionKind.editListItems);\r\n let formType = userEditPermissions ? \"editFormUrl\" : \"displayFormUrl\";\r\n let editForUrl = this.props.ctx[formType] + \"&ID=\" + this.props.ctx.CurrentItem.ID;\r\n stsNavigateFunc(editForUrl);\r\n }\r\n onChangeRequestClick(evt) {\r\n let applicationId = this.props.ctx.CurrentItem.ID;\r\n Application.getById(applicationId).then(application => {\r\n ChangeRequestComponent.showInDialog(application);\r\n });\r\n }\r\n onBeneficiaryRequestClick(evt) {\r\n this.openBeneficiaryRequestFormInDialog();\r\n }\r\n onChangeRequestHistoryClick(evt) {\r\n let applicationId = this.props.ctx.CurrentItem.ID;\r\n Application.getByIdWithFields(applicationId, new ApplicationFieldCollections(\"URL_ONLY\")).then(application => {\r\n ChangeRequestHistoryComponent.showInDialog(application);\r\n });\r\n }\r\n openGrantWizardInDialog(applicationId) {\r\n //Get the both the Application and the PublishedGrantData, then open the 'Grant Application Wizard'\r\n Application.getByIdWithFields(applicationId, new ApplicationFieldCollections(\"APPLICATION_WIZARD\"), false).then(application => {\r\n PublishedGrantData.getByCode(application.applicantDetails.code).then(publishedGrant => {\r\n GrantApplicationWizardComponent.ShowInDialog(publishedGrant, application);\r\n });\r\n }).catch(reason => {\r\n ExecuteOrDelayUntilScriptLoaded(() => {\r\n LogMessage.Log(\"Could not open the application. You don't have the permissions to open this application or the application has been deleted\", SharePointRestService, LogSeverityEnum.Error);\r\n }, 'sp.js');\r\n });\r\n }\r\n openGrantDetailsInDialog(publishedGrantId, applicationId) {\r\n //Get all metadata for this Published Grant. Because the CodeFieldTemplate is a FieldRendering, we might now have all nessacary fields in the current view\r\n PublishedGrantData.getById(publishedGrantId).then(publishedGrant => {\r\n //Show the published Grant data in a dialog. Note that the dialog will\r\n //1) Check permissions for the user\r\n //2) Load the Grant Details if the user has sufficient permissions\r\n GrantDetailsComponent.ShowInDialog(publishedGrant, applicationId).then((result) => {\r\n if (result.dialogResult == SP.UI.DialogResult.OK) {\r\n User.isApplicant(publishedGrant.division).then(isApplicant => {\r\n if (isApplicant || publishedGrant.division == DivisionEnum.DI) {\r\n //The user pressed 'Apply', so open the Application Wizard\r\n if (publishedGrant.division == DivisionEnum.DI) {\r\n EventRegistrationComponent.ShowInDialog(publishedGrant);\r\n }\r\n else {\r\n GrantApplicationWizardComponent.ShowInDialog(publishedGrant, result.application);\r\n }\r\n }\r\n else if (result.application.hasOwnProperty(\"createAsGrantAdmin\")) {\r\n GrantApplicationWizardComponent.ShowInDialog(publishedGrant, null);\r\n }\r\n else {\r\n LogMessage.Log(\"You are not registered as a valid applicant\", this, LogSeverityEnum.Error);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n openBeneficiaryRequestFormInDialog() {\r\n let formUrl = \"/BeneficiaryRequest/NewForm.aspx?IsDlg=1&fromApplicationList=1\";\r\n //Construct the URL for the NewForm.aspx of the BeneficiaryRequest form\r\n let requestUrl = _spPageContextInfo.webAbsoluteUrl + formUrl;\r\n //Specify options for the dialog\r\n let options = new SP.UI.DialogOptions();\r\n options.title = \"Beneficiary Request Form\";\r\n options.allowMaximize = true;\r\n options.showClose = true;\r\n options.autoSize = true;\r\n options.url = requestUrl;\r\n options.dialogReturnValueCallback = this.beneficiaryRequestDialogCallback;\r\n //Show the dialog\r\n let dialog = SP.UI.ModalDialog.showModalDialog(options);\r\n }\r\n beneficiaryRequestDialogCallback(result, args) {\r\n let docTemplateUrl = \"/SiteAssets/Templates/BeneficiaryRequestForm.docx\";\r\n if (result == SP.UI.DialogResult.OK) { //User pressed 'OK' in the form\r\n //Get the application associated with the row in which the hyperlink was pressed\r\n Application.getByIdWithFields(this.props.ctx.CurrentItem.ID, new ApplicationFieldCollections(\"URL_ONLY\")).then(application => {\r\n //Get the 'BENEFICIARY_REQUEST'-item. We retrieve the item that was last created by the current-user as the dialog does not return an ID unfortunately\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.BENEFICIARY_REQUEST + \"')/items?$filter=AuthorId eq \" + _spPageContextInfo.userId + \"&$orderby=Created%20desc&$top=1&$select=*\";\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n let lastCreatedRequest = odata.value[0];\r\n let itemId = Number(lastCreatedRequest.Id);\r\n //Get a list of all default (system) properties from the DocumentGenerator\r\n let docProperties = DocumentGenerator.getStandardProperties();\r\n //Get all properties from the 'BENEFICIARY_REQUEST'-item. All all fields that starts with \"nato\" to the list\r\n Object.keys(lastCreatedRequest).filter(property => property.toLocaleLowerCase().startsWith(\"nato\")).forEach(property => {\r\n let key = property.replace(\"nato\", \"\");\r\n let value = (lastCreatedRequest[property] && (lastCreatedRequest[property] + \"\").length > 0) ? lastCreatedRequest[property] : \"\";\r\n docProperties[key] = value;\r\n });\r\n let templateUrl = _spPageContextInfo.siteServerRelativeUrl + docTemplateUrl; //The URL for the template\r\n let filename = \"BeneficiaryRequestForm_\" + lastCreatedRequest.ID + \".docx\"; //The filename for the new document\r\n let docsetUrl = application.serverRelativeUrl + '/BeneficiaryRequests'; //The location where to save the new document\r\n let template = new DocumentGenerator(templateUrl, true, \"Site\");\r\n this.setPermissionsForSubmittedBeneficiaryRequestForm(itemId).then(() => {\r\n //Merge the template with the properties in the application\r\n template.merge(docProperties).then(() => {\r\n //Save the template in the current document set\r\n template.saveAs(docsetUrl, filename, true).then(serverRelativeUrl => {\r\n let wf = new WorkflowManager();\r\n wf.StartWorklow(\"Grant Applications\", this.props.ctx.CurrentItem.ID, \"Notification\", { \"Type\": \"BeneficiaryRequest\" }, true).then(() => {\r\n //Do nothing..\r\n });\r\n });\r\n });\r\n });\r\n //TODO: Create link + view for Beneficiary Request form (my items)\r\n }); //End-promise: Parse BeneficiaryRequest object as JSON\r\n }) //End-promise: Get BeneficiaryRequest object\r\n .catch(reason => {\r\n LogMessage.Log(\"Error retrieving the 'Beneficiary Request data'\" + reason, this, LogSeverityEnum.Error);\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"There was an error retrieving the application: '\" + this.props.ctx.CurrentItem.ID + \"'\" + reason, this, LogSeverityEnum.Error);\r\n }); //End-promise: Get Application By ID\r\n } //End-if: User pressed OK and not Cancel\r\n }\r\n setPermissionsForSubmittedBeneficiaryRequestForm(itemId) {\r\n let clientContext = SP.ClientContext.get_current();\r\n let web = clientContext.get_web();\r\n let list = web.get_lists().getByTitle(ListNames.BENEFICIARY_REQUEST);\r\n let item = list.getItemById(itemId);\r\n let roleAssignments = item.get_roleAssignments();\r\n let currentUser = web.get_currentUser();\r\n item.breakRoleInheritance(true, true);\r\n //Load the current item and the roleAssignments\r\n clientContext.load(item, \"HasUniqueRoleAssignments\");\r\n clientContext.load(roleAssignments, \"Include(PrincipalId, Member, RoleDefinitionBindings)\");\r\n clientContext.load(currentUser);\r\n return new Promise((resolve, reject) => {\r\n clientContext.executeQueryAsync((sender, args) => {\r\n //Grant the current user 'Read' permissions to the submitted beneficiary request form\r\n let userRoles = new SP.RoleDefinitionBindingCollection(clientContext);\r\n userRoles.add(web.get_roleDefinitions().getByType(SP.RoleType.reader));\r\n item.get_roleAssignments().add(currentUser, userRoles);\r\n //Set the title\r\n item.set_item(\"Title\", \"Beneficiary Request form \" + (new Date(Date.now())).toLocaleDateString());\r\n item.update();\r\n let applicantAssignments = new Array();\r\n let permissionCount = roleAssignments.get_count();\r\n for (let i = 0; i < permissionCount; i++) {\r\n let assignment = roleAssignments.get_item(i);\r\n if (!assignment.isPropertyAvailable(\"PrincipalId\")) {\r\n //Do nothing, we just added this permission\r\n }\r\n else if (assignment.get_member().get_principalType() == SP.Utilities.PrincipalType.user && assignment.get_principalId() != currentUser.get_id()) {\r\n //Remove all individual user permissions\r\n assignment.get_roleDefinitionBindings().removeAll();\r\n assignment.update();\r\n }\r\n else if (assignment.get_member().get_principalType() == SP.Utilities.PrincipalType.sharePointGroup && assignment.get_member().get_loginName().toLocaleLowerCase().endsWith(\"applicants\".toLocaleLowerCase())) {\r\n //We want to remove the assignments for the current user last, to avoid UnauthorizedExceptions\r\n applicantAssignments.push(assignment);\r\n }\r\n }\r\n //Remove the permissions for the ESC/PDD applicants\r\n applicantAssignments.forEach(assignment => {\r\n assignment.get_roleDefinitionBindings().removeAll();\r\n assignment.update();\r\n });\r\n clientContext.executeQueryAsync((sender, args) => {\r\n resolve();\r\n }, (sender, args) => {\r\n //There was a problem updating the permissions\r\n reject(args.get_errorDetails());\r\n });\r\n }, (sender, args) => {\r\n //There was an error retrieving the item and/or its permissions\r\n reject(args.get_errorDetails());\r\n });\r\n });\r\n }\r\n renderInDefaultMode() {\r\n let html = '';\r\n if (this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.NewForm) {\r\n html = window[\"SPFieldText_Edit\"](this.props.ctx);\r\n }\r\n else if (this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.EditForm) {\r\n html = window[\"SPFieldText_Edit\"](this.props.ctx);\r\n }\r\n else if (this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.DisplayForm) {\r\n html = window[\"SPField_FormDisplay_Default\"](this.props.ctx);\r\n }\r\n return
;\r\n }\r\n render() {\r\n if (this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.NewForm ||\r\n this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.EditForm ||\r\n this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.DisplayForm) {\r\n return this.renderInDefaultMode();\r\n }\r\n let actionsButton;\r\n if (this._iconsLoaded &&\r\n (this.props.ctx[\"ListTitle\"] + \"\").toLocaleLowerCase() == \"grant applications\".toLocaleLowerCase() &&\r\n (this.props.ctx[\"ViewTitle\"] + \"\") == \"undefined\" //On the landing page, the ListViewWebparts have an empty ListTitle...\r\n ) {\r\n let status = this.props.ctx.CurrentItem[\"natoApplicationStatus\"] ? this.props.ctx.CurrentItem[\"natoApplicationStatus\"] : ApplicationStatus.INVALID;\r\n let changeRequestButtonAvailable = (status == ApplicationStatus.SUBMITTED ||\r\n status == ApplicationStatus.AWARDED ||\r\n status == ApplicationStatus.UNDER_REVIEW);\r\n actionsButton = \r\n ;\r\n }\r\n //Show the 'new-icon' for applications less than 2 days old\r\n let newIcon = (\r\n\t\t\t\"new\"\r\n\t\t);\r\n let isNew = false;\r\n let startDateStr = this.props.ctx.CurrentItem[\"natoStartDate\"];\r\n if (startDateStr) {\r\n let startDate = Date.parseLocale(startDateStr);\r\n let timeDifference = Date.now() - Number(startDate);\r\n if (timeDifference < (2 * 24 * 60 * 60 * 1000)) {\r\n isNew = true;\r\n }\r\n }\r\n let codeElement = {this.props.ctx.CurrentItem[this.props.ctx.CurrentFieldSchema.Name]};\r\n if (this.props.ctx[\"ViewTitle\"] == undefined || this.props.ctx[\"ViewTitle\"] + \"\" == \"\" || _spPageContextInfo.serverRequestPath.toLocaleLowerCase().indexOf(\"/lists/grants/\") >= 0) {\r\n codeElement = {this.props.ctx.CurrentItem[this.props.ctx.CurrentFieldSchema.Name]};\r\n }\r\n ;\r\n return (\r\n\t\t\t{codeElement}\r\n\t\t\t{isNew && newIcon}\r\n {actionsButton}\r\n );\r\n }\r\n}\r\n//# sourceMappingURL=CodeFieldTemplate.jsx.map","import { Component } from 'react';\r\n//import { default as SignaturePad, IOptions } from \"signature_pad\";\r\nimport \"../../node_modules/signature_pad/dist/signature_pad.js\";\r\nimport { IconButton } from 'office-ui-fabric-react/lib/Button';\r\nimport { initializeIcons } from '@uifabric/icons';\r\nimport { LogMessage, LogSeverityEnum } from \"../index\";\r\nexport class SignatureFieldTemplate extends Component {\r\n constructor(props) {\r\n super(props);\r\n LogMessage.Log(\"Initializing field '\" + this.props.ctx.CurrentFieldSchema.Name + \"' as 'SignatureFieldTemplate'\", this, LogSeverityEnum.Verbose);\r\n //If the ControlMode is either Newform or Editform, register the GetValue callback so that we can save the (modified) value of this field\r\n if (props.ctx.ControlMode == SPClientTemplates.ClientControlMode.NewForm || props.ctx.ControlMode == SPClientTemplates.ClientControlMode.EditForm) {\r\n let formContext = SPClientTemplates.Utility.GetFormContextForCurrentField(props.ctx);\r\n formContext.registerGetValueCallback(formContext.fieldName, () => { return this.getValue(); });\r\n }\r\n this.resize = this.resize.bind(this);\r\n initializeIcons(_spPageContextInfo.siteServerRelativeUrl + \"/SiteAssets/Branding/\");\r\n }\r\n componentDidMount() {\r\n if (this._canvas != null) {\r\n window.addEventListener('resize', this.resize);\r\n let options = {};\r\n this._signature = new SignaturePad(this._canvas, options);\r\n if (this.props.ctx.CurrentFieldValue != \"\") {\r\n this._signature.fromDataURL(this.props.ctx.CurrentFieldValue);\r\n }\r\n }\r\n }\r\n publicomponentWillUnmount() {\r\n if (this._signature != null) {\r\n window.removeEventListener('resize', this.resize);\r\n this._signature.off();\r\n }\r\n }\r\n getValue() {\r\n return this._signature.toDataURL(); //Save as PNG (default)\r\n }\r\n resize() {\r\n if (this._signature != null && this._canvas != null) {\r\n let data = this._signature.toDataURL();\r\n var ratio = Math.max(window.devicePixelRatio || 1, 1);\r\n this._canvas.width = this._canvas.offsetWidth * ratio;\r\n this._canvas.height = this._canvas.offsetHeight * ratio;\r\n this._canvas.getContext(\"2d\").scale(ratio, ratio);\r\n this._signature.clear();\r\n this._signature.fromDataURL(data);\r\n }\r\n }\r\n render() {\r\n if (this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.NewForm || this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.EditForm) {\r\n return (
\r\n this._canvas = ref}/>\r\n\r\n { this._signature.clear(); }}>\r\n \r\n
);\r\n }\r\n else {\r\n let base64EncodedImage = \"\";\r\n if (this.props.ctx.CurrentFieldValue && this.props.ctx.CurrentFieldValue != \"\") {\r\n let regex = new RegExp(/data:.*(?=<\\/div>)/gi);\r\n let match = regex.exec(this.props.ctx.CurrentFieldValue);\r\n if (match) {\r\n base64EncodedImage = match[0];\r\n }\r\n }\r\n else if (this.props.ctx.CurrentItem.natoSignature && this.props.ctx.CurrentItem.natoSignature != \"\") {\r\n base64EncodedImage = this.props.ctx.CurrentItem.natoSignature;\r\n }\r\n return (
\r\n \r\n
);\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=SignatureFieldTemplate.jsx.map","import { Component } from 'react';\r\nimport { LogMessage, LogSeverityEnum, Application } from \"../index\";\r\nexport class AutoNumberFieldTemplate extends Component {\r\n constructor(props) {\r\n super(props);\r\n LogMessage.Log(\"Initializing field '\" + this.props.ctx.CurrentFieldSchema.Name + \"' as 'AutoNumberFieldTemplate'\", this, LogSeverityEnum.Verbose);\r\n this.state = {\r\n value: this.props.ctx.CurrentItem[this.props.ctx.CurrentFieldSchema.Name]\r\n };\r\n if (props.ctx.ControlMode == SPClientTemplates.ClientControlMode.View) {\r\n }\r\n else {\r\n let formContext = SPClientTemplates.Utility.GetFormContextForCurrentField(props.ctx);\r\n formContext.registerGetValueCallback(formContext.fieldName, () => { return this.value; });\r\n }\r\n }\r\n componentDidMount() {\r\n let contentType = this.props.ctx.CurrentItem.ContentType + \"\";\r\n //Only proceed if the current item is an 'application'\r\n if (contentType.toLocaleLowerCase() == \"application\" && (!this.state.value || this.state.value.length == 0)) {\r\n //Make sure that the SP.ClientContext is loaded\r\n SP.SOD.executeFunc('sp.js', 'SP.ClientContext', () => {\r\n //Retrieve the application that corresponds to the current row\r\n Application.getById(this.props.ctx.CurrentItem.ID).then(application => {\r\n //Get the ProjectNumber for the current application\r\n application.projectNumber.then(val => {\r\n //Update the internal value, this will also force a re-render\r\n this.setState({\r\n value: val\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"Cannot retrieve the Project Number for application '\" + this.props.ctx.CurrentItem.ID + \"': \" + reason, this, LogSeverityEnum.Error);\r\n });\r\n });\r\n });\r\n }\r\n }\r\n get value() {\r\n return this.state.value;\r\n }\r\n set value(value) {\r\n this.setState({\r\n value: value\r\n });\r\n }\r\n render() {\r\n let contentType = this.props.ctx.CurrentItem.ContentType + \"\";\r\n //The current item is not an application\r\n if (contentType.toLocaleLowerCase() != \"application\") {\r\n return
-
;\r\n }\r\n //This application already has a ProjectNumber generated earlier and we are in a view\r\n else if (this.state.value && this.state.value.length > 0 && this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.View) {\r\n ///Render a hyperlink with the ProjectNumber the redirects the user to the DocumentSet HomePage\r\n let docsetHomePageUrl = _spPageContextInfo.webAbsoluteUrl + \"/\" + _spPageContextInfo.layoutsUrl + \"/DocSetHome.aspx?id=\" + STSHtmlEncode(this.props.ctx.CurrentItem[\"FileRef\"]);\r\n return ;\r\n }\r\n //This application already has a ProjectNumber generated earlier, but we are not in a view (most likely a NewForm.aspx, EditForm.aspx, or DocSetHomePage.aspx)\r\n else if (this.state.value && this.state.value.length > 0 && this.props.ctx.ControlMode != SPClientTemplates.ClientControlMode.View) {\r\n return
{this.state.value}
;\r\n }\r\n //The ProjectNumber still needs to be generated\r\n else {\r\n return
To be generated
;\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=AutoNumberFieldTemplate.jsx.map","import { Component } from 'react';\r\nimport { LogMessage, LogSeverityEnum, Application, SharePointRestService, ListNames, DocumentGenerator } from \"../index\";\r\n//This class is used to render a 'Beneficiary Request' hyperlink in the 'My Applications' view. Using this hyperlink\r\n//an applicant can generate Beneficiary Requests. The form is shown in a dialog, and after the user saves the form, a document is generated from a template\r\nexport class BeneficiaryRequestFieldTemplate extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.TEMPLATE_URL = \"/SiteAssets/Templates/BeneficiaryRequestForm.docx\";\r\n this.FORM_URL = \"/BeneficiaryRequest/NewForm.aspx?IsDlg=1\";\r\n LogMessage.Log(\"Initializing field '\" + this.props.ctx.CurrentFieldSchema.Name + \"' as 'BeneficiaryRequestFieldTemplate'\", this, LogSeverityEnum.Verbose);\r\n this.onLinkClick = this.onLinkClick.bind(this);\r\n this.dialogCallback = this.dialogCallback.bind(this);\r\n }\r\n onLinkClick() {\r\n //User pressed the hyperlink so open the dialog\r\n this.openBeneficiaryRequestFormInDialog(this.props.ctx.CurrentItem.ID);\r\n }\r\n openBeneficiaryRequestFormInDialog(applicationId) {\r\n //Construct the URL for the NewForm.aspx of the BeneficiaryRequest form\r\n let requestUrl = _spPageContextInfo.webAbsoluteUrl + this.FORM_URL;\r\n //Specify options for the dialog\r\n let options = new SP.UI.DialogOptions();\r\n options.title = \"Beneficiary Request Form\";\r\n options.allowMaximize = true;\r\n options.showClose = true;\r\n options.autoSize = true;\r\n options.url = requestUrl;\r\n options.dialogReturnValueCallback = this.dialogCallback;\r\n //Show the dialog\r\n let dialog = SP.UI.ModalDialog.showModalDialog(options);\r\n }\r\n dialogCallback(result, args) {\r\n if (result == SP.UI.DialogResult.OK) { //User pressed 'OK' in the form\r\n //Get the application associated with the row in which the hyperlink was pressed\r\n Application.getById(this.props.ctx.CurrentItem.ID).then(application => {\r\n //Get the 'BENEFICIARY_REQUEST'-item. We retrieve the item that was last created by the current-user as the dialog does not return an ID unfortunately\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('\" + ListNames.BENEFICIARY_REQUEST + \"')/items?$filter=AuthorId eq \" + _spPageContextInfo.userId + \"&$orderby=Created%20desc&$top=1&$select=*\";\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n let lastCreatedRequest = odata.value[0];\r\n //Get a list of all default (system) properties from the DocumentGenerator\r\n let docProperties = DocumentGenerator.getStandardProperties();\r\n //Get all properties from the 'BENEFICIARY_REQUEST'-item. All all fields that starts with \"nato\" to the list\r\n Object.keys(lastCreatedRequest).filter(property => property.toLocaleLowerCase().startsWith(\"nato\")).forEach(property => {\r\n let key = property.replace(\"nato\", \"\");\r\n let value = (lastCreatedRequest[property] && (lastCreatedRequest[property] + \"\").length > 0) ? lastCreatedRequest[property] : \"\";\r\n docProperties[key] = value;\r\n });\r\n let templateUrl = _spPageContextInfo.siteServerRelativeUrl + this.TEMPLATE_URL; //The URL for the template\r\n let filename = \"BeneficiaryRequestForm_\" + lastCreatedRequest.ID + \".docx\"; //The filename for the new document\r\n let docsetUrl = application.serverRelativeUrl; //The location where to save the new document\r\n let template = new DocumentGenerator(templateUrl, true, \"Site\");\r\n //Merge the template with the properties in the application\r\n template.merge(docProperties).then(() => {\r\n //Save the template in the current document set\r\n template.saveAs(docsetUrl, filename, true).then(serverRelativeUrl => {\r\n //Do nothing..\r\n });\r\n });\r\n }); //End-promise: Parse BeneficiaryRequest object as JSON\r\n }) //End-promise: Get BeneficiaryRequest object\r\n .catch(reason => {\r\n LogMessage.Log(\"Error retrieving the 'Beneficiary Request data'\" + reason, this, LogSeverityEnum.Error);\r\n });\r\n }).catch(reason => {\r\n LogMessage.Log(\"There was an error retrieving the application: '\" + this.props.ctx.CurrentItem.ID + \"'\" + reason, this, LogSeverityEnum.Error);\r\n }); //End-promise: Get Application By ID\r\n } //End-if: User pressed OK and not Cancel\r\n }\r\n render() {\r\n return Beneficiary Request;\r\n }\r\n}\r\n//# sourceMappingURL=BeneficiaryRequestFieldTemplate.jsx.map","import { Component } from 'react';\r\nimport { LogMessage, LogSeverityEnum, SharePointRestService } from \"../index\";\r\nimport { TooltipHost, TooltipDelay } from 'office-ui-fabric-react/lib/Tooltip';\r\nexport class SharedWithFieldTemplate extends Component {\r\n constructor(props) {\r\n super(props);\r\n LogMessage.Log(\"Initializing field '\" + this.props.ctx.CurrentFieldSchema.Name + \"' as 'SharedWithFieldTemplate'\", this, LogSeverityEnum.Verbose);\r\n this.state = {\r\n value: this.props.ctx.CurrentItem[this.props.ctx.CurrentFieldSchema.Name],\r\n permissions: new Array(),\r\n permissionsLoaded: false\r\n };\r\n this.onRenderTooltip = this.onRenderTooltip.bind(this);\r\n this.onTooltipToggle = this.onTooltipToggle.bind(this);\r\n }\r\n onTooltipToggle(isTooltipVisible) {\r\n if (isTooltipVisible && !this.state.permissionsLoaded) {\r\n let listId = this.props.ctx[\"listName\"].replace(\"{\", \"\").replace(\"}\", \"\");\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists(guid'\" + listId + \"')/items(\" + this.props.ctx.CurrentItem.ID + \")?$select=RoleAssignments/Member/LoginName,RoleAssignments/Member/Title,RoleAssignments/RoleDefinitionBindings/Name&$expand=RoleAssignments/Member,RoleAssignments/RoleDefinitionBindings\";\r\n SharePointRestService.fetch(url, \"GET\")\r\n .then(response => {\r\n response.json().then(odata => {\r\n if (odata.RoleAssignments && odata.RoleAssignments.length > 0) {\r\n let roles = odata.RoleAssignments.map(roleAssignment => {\r\n let username = roleAssignment.Member.Title;\r\n let permissions = roleAssignment.RoleDefinitionBindings.filter(roleDefinition => {\r\n return (\"\" + roleDefinition.Name).toLocaleLowerCase() != (\"Limited Access\").toLocaleLowerCase();\r\n }).map(roleDefinition => {\r\n return roleDefinition.Name;\r\n });\r\n return { Username: username, Permissions: permissions };\r\n });\r\n roles = roles.filter(role => role.Permissions.length > 0);\r\n this.setState({\r\n permissions: roles,\r\n permissionsLoaded: true\r\n });\r\n }\r\n }).catch(reason => {\r\n //Could not parse the response\r\n })\r\n .catch(reason => {\r\n //Could not retrieve the permissions\r\n });\r\n });\r\n }\r\n }\r\n onRenderTooltip() {\r\n if (this.state.permissionsLoaded) {\r\n let roleRows = this.state.permissions.map((role, index) => {\r\n return (\r\n {role.Username}:\r\n {role.Permissions.join(\", \")}\r\n );\r\n });\r\n let roleTable = ({roleRows}
);\r\n return roleTable;\r\n }\r\n else {\r\n return Loading...;\r\n }\r\n }\r\n render() {\r\n return (
\r\n \r\n \r\n \"\"\r\n \r\n \r\n
);\r\n }\r\n}\r\n//# sourceMappingURL=SharedWithFieldTemplate.jsx.map","import { Component } from 'react';\r\nimport { LogMessage, LogSeverityEnum } from \"../index\";\r\nexport class AssignedHeadOfSectionFieldTemplate extends Component {\r\n constructor(props) {\r\n super(props);\r\n LogMessage.Log(\"Initializing field '\" + this.props.ctx.CurrentFieldSchema.Name + \"' as 'AssignedHeadOfSectionFieldTemplate'\", this, LogSeverityEnum.Verbose);\r\n // Register a callback to get the value of the people picker\r\n //formCtx.registerGetValueCallback(\"Reporter\", function () {\r\n // var userKey = getUserInfoFromPeoplePicker().replace('\\\\', '\\\\\\\\');\r\n // return '[{\"Key\":\"' + userKey + '\"}]';\r\n // });\r\n //If the ControlMode is either Newform or Editform, register the GetValue callback so that we can save the (modified) value of this field\r\n if (props.ctx.ControlMode == SPClientTemplates.ClientControlMode.NewForm || props.ctx.ControlMode == SPClientTemplates.ClientControlMode.EditForm) {\r\n let formContext = SPClientTemplates.Utility.GetFormContextForCurrentField(props.ctx);\r\n formContext.registerGetValueCallback(formContext.fieldName, () => { return this.getValue(); });\r\n }\r\n this.state = {\r\n value: this.props.ctx.CurrentItem[this.props.ctx.CurrentFieldSchema.Name],\r\n selectedUser: null,\r\n users: new Array(),\r\n usersLoaded: false\r\n };\r\n this.onChangeUser = this.onChangeUser.bind(this);\r\n }\r\n getValue() {\r\n if (this.state.selectedUser != null) {\r\n return '[{\"Key\":\"' + this.state.selectedUser.get_loginName().replace(\"\\\\\", \"\\\\\\\\\") + '\"}]';\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n set onChange(callback) {\r\n this._onChangeCallback = callback;\r\n }\r\n get selectedUserId() {\r\n return this.state.selectedUser ? this.state.selectedUser.get_id() : -1;\r\n }\r\n componentDidMount() {\r\n SP.SOD.executeFunc(\"sp.js\", \"SP.ClientContext\", () => {\r\n setTimeout(() => {\r\n //Get the basic SharePoint information from the ClientContext\r\n let context = SP.ClientContext.get_current();\r\n let web = context.get_web();\r\n //Load the members of the PDD Head of Section group\r\n let headOfSectionGroup = web.get_siteGroups().getByName(\"PDD Head of Section\");\r\n let headOfSectionGroupMembers = headOfSectionGroup.get_users();\r\n //context.load(headOfSectionGroup);\r\n context.load(headOfSectionGroupMembers, \"Include(Id, Title, LoginName)\");\r\n context.executeQueryAsync((sender, args) => {\r\n let initialSelection = null;\r\n let userCollectionToGroup = (userCollection) => {\r\n let users = new Array();\r\n let enumerator = userCollection.getEnumerator();\r\n while (enumerator.moveNext()) {\r\n let currentUser = enumerator.get_current();\r\n if (this.state.value && currentUser.get_id() == this.state.value[0].EntityData.SPUserID) {\r\n initialSelection = currentUser;\r\n }\r\n users.push(enumerator.get_current());\r\n }\r\n return users;\r\n };\r\n let users = userCollectionToGroup(headOfSectionGroupMembers);\r\n this.setState({\r\n users: users,\r\n usersLoaded: true,\r\n selectedUser: initialSelection\r\n });\r\n this._onChangeCallback(this.state.selectedUser);\r\n }, (sender, args) => {\r\n LogMessage.Log(\"Error retrieving list for 'Head of Section: \" + args.get_message(), this, LogSeverityEnum.Error);\r\n });\r\n }, 1000);\r\n });\r\n }\r\n onChangeUser(event) {\r\n let selectedUserId = Number(event.target.value);\r\n let selectedUser = this.state.users.find(user => user.get_id() == selectedUserId);\r\n if (this._onChangeCallback) {\r\n this._onChangeCallback(selectedUser);\r\n }\r\n this.setState({\r\n selectedUser: selectedUser\r\n });\r\n }\r\n render() {\r\n if (this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.NewForm || this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.EditForm) {\r\n if (this.state.usersLoaded) {\r\n let selectedUserId = -1;\r\n if (this.state.selectedUser != null) {\r\n selectedUserId = this.state.selectedUser.get_id();\r\n }\r\n else if (this.state.value && this.state.value.length > 0) {\r\n selectedUserId = this.state.value[0].EntityData.SPUserID;\r\n }\r\n let userOptions = this.state.users.map(user => {\r\n return ();\r\n });\r\n return (
\r\n \r\n
);\r\n }\r\n return (
);\r\n }\r\n else {\r\n let username = \"\";\r\n if (this.state.value && this.state.value.length > 0) {\r\n username = this.state.value[0].title;\r\n }\r\n let defaultFieldRenderer = new window[\"UserFieldRenderer\"](this.props.ctx.CurrentFieldSchema.Name);\r\n let defaultFieldHtml = defaultFieldRenderer.RenderField(this.props.ctx, this.props.ctx.CurrentFieldSchema, this.props.ctx.CurrentItem, this.props.ctx.ListSchema);\r\n return
;\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=AssignedHeadOfSectionFieldTemplate.jsx.map","import { Component } from 'react';\r\nimport { LogMessage, LogSeverityEnum, SPUtil, User, InternalApplicationStatusEnum } from \"../index\";\r\nexport class ApplicationApprovalStatusFieldTemplate extends Component {\r\n constructor(props) {\r\n super(props);\r\n LogMessage.Log(\"Initializing field '\" + this.props.ctx.CurrentFieldSchema.Name + \"' as 'DivisionFieldTemplate'\", this, LogSeverityEnum.Verbose);\r\n this.state = {\r\n decodedValue: ''\r\n };\r\n }\r\n componentWillMount() {\r\n if (this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.View || this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.DisplayForm) {\r\n SPUtil.isLoggedIn().then(isLoggedIn => {\r\n if (isLoggedIn) {\r\n User.isApplicant().then(isApplicant => {\r\n let status = (isApplicant) ? \"-\" : ApplicationApprovalStatusFieldTemplate.decode(this.props.ctx.CurrentItem[this.props.ctx.CurrentFieldSchema.Name]);\r\n this.setState({\r\n decodedValue: status\r\n });\r\n });\r\n }\r\n });\r\n }\r\n }\r\n renderInDefaultMode() {\r\n let html = '';\r\n if (this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.NewForm) {\r\n html = window[\"SPFieldNumber_Edit\"](this.props.ctx);\r\n }\r\n else if (this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.EditForm) {\r\n html = window[\"SPFieldNumber_Edit\"](this.props.ctx);\r\n }\r\n else if (this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.DisplayForm) {\r\n html = window[\"SPField_FormDisplay_Default\"](this.props.ctx);\r\n }\r\n return
;\r\n }\r\n static generateInternalValue(status) {\r\n //let seed: number = Math.round(2147483647 - 128);\r\n let seed = Math.round(Math.random() * (2147483647 - 128));\r\n while (ApplicationApprovalStatusFieldTemplate.decode(seed.toString()) != status) {\r\n seed++;\r\n }\r\n return seed;\r\n }\r\n static decode(val) {\r\n let status = InternalApplicationStatusEnum.PENDING;\r\n let valueStr = \"\" + (val || \"\");\r\n if (valueStr.length == 0) {\r\n return InternalApplicationStatusEnum.PENDING;\r\n }\r\n try {\r\n valueStr = valueStr.replace(/[^0-9.]/g, \"\"); //Remove all non-numeric values\r\n let value = valueStr\r\n .split(\"\")\r\n .reverse()\r\n .map((val, index) => {\r\n return (index % 2 === 1) ? 0 : Number(val);\r\n })\r\n .reduce((sum, val) => {\r\n return sum + val;\r\n });\r\n let statusArray = Object.keys(InternalApplicationStatusEnum);\r\n let modulus = value % statusArray.length;\r\n let statusStr = statusArray[modulus];\r\n let statusVal = InternalApplicationStatusEnum[statusStr];\r\n return statusVal;\r\n }\r\n catch (e) {\r\n throw e;\r\n }\r\n }\r\n render() {\r\n if (this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.NewForm ||\r\n this.props.ctx.ControlMode == SPClientTemplates.ClientControlMode.EditForm) {\r\n return this.renderInDefaultMode();\r\n }\r\n let color = \"blue\";\r\n switch (this.state.decodedValue) {\r\n case InternalApplicationStatusEnum.APPROVED: {\r\n color = \"green\";\r\n break;\r\n }\r\n case InternalApplicationStatusEnum.APPROVED_READY_FOR_INTERFACE: {\r\n color = \"green\";\r\n break;\r\n }\r\n case InternalApplicationStatusEnum.REJECTED: {\r\n color = \"red\";\r\n break;\r\n }\r\n case InternalApplicationStatusEnum.PENDING: {\r\n color = \"black\";\r\n break;\r\n }\r\n }\r\n let title = this.state.decodedValue;\r\n if (_spPageContextInfo.isSiteAdmin) {\r\n title = this.props.ctx.CurrentItem[this.props.ctx.CurrentFieldSchema.Name];\r\n }\r\n return
\r\n\t\t\t{this.state.decodedValue}\r\n\t\t
;\r\n }\r\n}\r\n//# sourceMappingURL=ApplicationApprovalStatusFieldTemplate.jsx.map","import \"babel-polyfill\";\r\nimport * as ReactDOM from 'react-dom';\r\nimport { SPUtil, BaseGrant, User, Grant, SharePointRestService, PublishedGrantComponent, SPRibbonControl, AutoNumberFieldTemplate, ApprovalFieldTemplate, ContentTypeFieldTemplate, DivisionFieldTemplate, ReadOnlyFieldTemplate, SignatureFieldTemplate, CodeFieldTemplate, AssignedHeadOfSectionFieldTemplate, ApplicationApprovalStatusFieldTemplate, LogMessage, LogSeverityEnum, SharedWithFieldTemplate } from \"../index\";\r\nimport \"es6-object-assign/auto\";\r\nimport \"whatwg-fetch\";\r\nexport class BaseGrantRendering {\r\n constructor() {\r\n this.renderContextPerElement = {};\r\n this.componentsPerField = {};\r\n this._grant = null;\r\n SPRibbonControl.getInstance().then((ribbon) => {\r\n ribbon.executeOrDelayUntilRibbonLoaded(() => {\r\n let perms = new SP.BasePermissions();\r\n perms.initPropertiesFromJson(_spPageContextInfo.webPermMasks);\r\n let showRibbon = perms.has(SP.PermissionKind.manageWeb);\r\n if (!showRibbon) {\r\n //ribbon.Hide();\r\n }\r\n else {\r\n ribbon.Show();\r\n }\r\n });\r\n });\r\n }\r\n toString() {\r\n return \"BaseGrantRendering\";\r\n }\r\n static SetPageTitle() {\r\n ExecuteOrDelayUntilBodyLoaded(() => {\r\n let header = document.querySelector(\".o365cs-nav-brandingText\");\r\n if (header) {\r\n header.innerText = _spPageContextInfo.webTitle;\r\n header.style.visibility = \"visible\";\r\n header.style.marginLeft = \"25px\";\r\n header.style.fontFamily = \"'Segoe UI Light','Segoe UI','Segoe',Tahoma,Helvetica,Arial,sans-serif\";\r\n header.style.fontSize = \"26px\";\r\n }\r\n });\r\n }\r\n static SetUiComponentVisibility() {\r\n //Delegate method for creating a menu-item in the UserMenu that shows the cached user roles\r\n let createRoleMenuItem = () => {\r\n //Show the Cached Groups for the current user in the 'My Account' menu\r\n let cachedUserGroupsKey = Object.keys(localStorage).find(key => key.endsWith(\"UserGroups:\" + _spPageContextInfo.userId));\r\n let cachedUserGroups = cachedUserGroupsKey ? localStorage.getItem(cachedUserGroupsKey) : null;\r\n if (cachedUserGroups) {\r\n let cachedGroups = JSON.parse(cachedUserGroups).obj;\r\n let memberOfGroup = Object.keys(cachedGroups).filter(groupName => cachedGroups[groupName] == \"Yes\").sort((a, b) => a.localeCompare(b));\r\n let memberofGroupStr = memberOfGroup.length > 0 ? memberOfGroup.map(groupname => \"
  • \" + groupname + \"
  • \").join(\"\") : \"
  • -
  • \";\r\n let menu = document.getElementById(\"O365_MainLink_Me\").nextSibling;\r\n let seperator = document.createElement('DIV');\r\n seperator.className = \"o365cs-contextMenuSeparator ms-bcl-nl\";\r\n menu.appendChild(seperator);\r\n let groupMenuItem = document.createElement('A');\r\n groupMenuItem.className = \"o365button o365cs-contextMenuItem ms-fcl-b\";\r\n groupMenuItem[\"role\"] = \"link\";\r\n groupMenuItem.style.textDecoration = \"none\";\r\n groupMenuItem.innerHTML = \"You are a member of:
      \" + memberofGroupStr + \"
    Click to refresh\";\r\n groupMenuItem.href = \"#\";\r\n groupMenuItem.onclick = () => {\r\n localStorage.removeItem(cachedUserGroupsKey);\r\n window.location.reload(true);\r\n };\r\n menu.appendChild(groupMenuItem);\r\n }\r\n };\r\n //Delegate method to modify the SignOut button to also clear the cache\r\n let createProperSignoutButton = () => {\r\n let signoutButton = document.getElementById(\"O365_SubLink_ShellSignout\");\r\n signoutButton.onclick = () => {\r\n Object.keys(localStorage).filter(key => key.indexOf(\"NATO_NAS\") >= 0).forEach(key => {\r\n localStorage.removeItem(key);\r\n });\r\n return true;\r\n };\r\n };\r\n //First wait until sp.js is laoded\r\n ExecuteOrDelayUntilScriptLoaded(() => {\r\n //Retrieve the permissionf for the current user\r\n let perms = new SP.BasePermissions();\r\n perms.initPropertiesFromJson(_spPageContextInfo.webPermMasks);\r\n let userHasManageWebPerm = perms.has(SP.PermissionKind.manageWeb);\r\n //Check if the user is logged in\r\n SPUtil.isLoggedIn().then(isLoggedIn => {\r\n if (!isLoggedIn) {\r\n //If the user is not logged in, hide the ribbon\r\n SP.SOD.executeOrDelayUntilScriptLoaded(() => {\r\n SPRibbonControl.getInstance().then((ribbon) => {\r\n ribbon.executeOrDelayUntilRibbonLoaded(() => {\r\n ribbon.Hide();\r\n });\r\n });\r\n }, \"sp.ribbon.js\");\r\n }\r\n else {\r\n createRoleMenuItem();\r\n createProperSignoutButton();\r\n User.isApplicant().then(isApplicant => {\r\n //Control the quicklaunch items for the GrantApplication-list\r\n let applicationLinksInQuicklaunch = document.getElementById(\"sideNavBox\").querySelectorAll(\"a[href*='/GrantApplications/Forms/']\");\r\n if (isApplicant) {\r\n for (let i = 0; i < applicationLinksInQuicklaunch.length; i++) {\r\n applicationLinksInQuicklaunch[i].style.display = \"none\";\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < applicationLinksInQuicklaunch.length; i++) {\r\n applicationLinksInQuicklaunch[i].style.display = \"block\";\r\n }\r\n }\r\n //Control the ribbon visibility for logged in users\r\n SP.SOD.executeOrDelayUntilScriptLoaded(() => {\r\n SPRibbonControl.getInstance().then((ribbon) => {\r\n ribbon.executeOrDelayUntilRibbonLoaded(() => {\r\n if (userHasManageWebPerm) {\r\n ribbon.Show();\r\n }\r\n else {\r\n if (isApplicant) {\r\n ribbon.Hide();\r\n }\r\n else {\r\n ribbon.Show();\r\n }\r\n }\r\n });\r\n });\r\n }, \"sp.ribbon.js\");\r\n }); //End: get isApplicant status for user\r\n } //End-if: user is logged in\r\n }); //End: get logged-in status for user \r\n }, 'sp.js'); //End: Wait until sp.js is loaded\r\n }\r\n static ControlRibbonVisibility() {\r\n SP.SOD.executeOrDelayUntilScriptLoaded(() => {\r\n SPRibbonControl.getInstance().then((ribbon) => {\r\n ribbon.executeOrDelayUntilRibbonLoaded(() => {\r\n let perms = new SP.BasePermissions();\r\n perms.initPropertiesFromJson(_spPageContextInfo.webPermMasks);\r\n let userHasManageWebPerm = perms.has(SP.PermissionKind.manageWeb);\r\n if (userHasManageWebPerm) {\r\n ribbon.Show();\r\n return;\r\n }\r\n SPUtil.isLoggedIn().then(isLoggedIn => {\r\n if (!isLoggedIn) {\r\n ribbon.Hide();\r\n }\r\n else {\r\n User.isApplicant().then(isApplicant => {\r\n let applicationLinksInQuicklaunch = document.getElementById(\"sideNavBox\").querySelectorAll(\"a[href*='/GrantApplications/Forms/']\");\r\n if (isApplicant) {\r\n ribbon.Hide();\r\n for (let i = 0; i < applicationLinksInQuicklaunch.length; i++) {\r\n applicationLinksInQuicklaunch[i].style.display = \"none\";\r\n }\r\n }\r\n else {\r\n ribbon.Show();\r\n for (let i = 0; i < applicationLinksInQuicklaunch.length; i++) {\r\n applicationLinksInQuicklaunch[i].style.display = \"block\";\r\n }\r\n }\r\n });\r\n //Show the Cached Groups for the current user in the 'My Account' menu\r\n let cachedUserGroupsKey = Object.keys(localStorage).find(key => key.endsWith(\"UserGroups:\" + _spPageContextInfo.userId));\r\n let cachedUserGroups = cachedUserGroupsKey ? localStorage.getItem(cachedUserGroupsKey) : null;\r\n if (cachedUserGroups) {\r\n let cachedGroups = JSON.parse(cachedUserGroups).obj;\r\n let memberOfGroup = Object.keys(cachedGroups).filter(groupName => cachedGroups[groupName] == \"Yes\").sort((a, b) => a.localeCompare(b));\r\n let memberofGroupStr = memberOfGroup.length > 0 ? memberOfGroup.map(groupname => \"
  • \" + groupname + \"
  • \").join(\"\") : \"
  • -
  • \";\r\n let menu = document.getElementById(\"O365_MainLink_Me\").nextSibling;\r\n let seperator = document.createElement('DIV');\r\n seperator.className = \"o365cs-contextMenuSeparator ms-bcl-nl\";\r\n menu.appendChild(seperator);\r\n let groupMenuItem = document.createElement('A');\r\n groupMenuItem.className = \"o365button o365cs-contextMenuItem ms-fcl-b\";\r\n groupMenuItem[\"role\"] = \"link\";\r\n groupMenuItem.style.textDecoration = \"none\";\r\n groupMenuItem.innerHTML = \"You are a member of:
      \" + memberofGroupStr + \"
    Click to refresh\";\r\n groupMenuItem.href = \"#\";\r\n groupMenuItem.onclick = () => {\r\n localStorage.removeItem(cachedUserGroupsKey);\r\n window.location.reload(true);\r\n };\r\n menu.appendChild(groupMenuItem);\r\n }\r\n let signoutButton = document.getElementById(\"O365_SubLink_ShellSignout\");\r\n signoutButton.onclick = () => {\r\n Object.keys(localStorage).filter(key => key.indexOf(\"NATO_NAS\") >= 0).forEach(key => {\r\n localStorage.removeItem(key);\r\n });\r\n return true;\r\n };\r\n }\r\n });\r\n });\r\n });\r\n }, \"sp.ribbon.js\");\r\n }\r\n get grant() {\r\n return this._grant;\r\n }\r\n RegisterRenderingTemplates() {\r\n // Create object that has the context information about the field that we want to render differently\r\n var registrationContext = {};\r\n registrationContext.Templates = {};\r\n registrationContext.ViewStyle;\r\n var fieldRendering = {};\r\n let fieldsWithCustomTemplates = [\r\n \"ContentType_OLD\",\r\n \"natoDivision\",\r\n //\"natoCode\",\r\n //\"natoBudgetApproval\",\r\n \"natoGrantStatus\",\r\n \"natoExternalStatus\",\r\n \"natoHeadOfSectionApproval\",\r\n \"natoPlanningOfficerApproval\",\r\n \"natoSignature\",\r\n \"natoProjectNumber\",\r\n \"SharedWithUsers\",\r\n \"natoAssignedHeadOfSection\",\r\n \"natoApplicationApprovalStatus\"\r\n ];\r\n fieldsWithCustomTemplates.forEach((fieldInternalName) => {\r\n let fieldRenderOverride = {};\r\n fieldRenderOverride.View = (ctx) => { return this.generateContextDiv(ctx, ctx.CurrentFieldSchema.Name); };\r\n fieldRenderOverride.DisplayForm = (ctx) => { return this.generateContextDiv(ctx, ctx.CurrentFieldSchema.Name); };\r\n fieldRenderOverride.NewForm = (ctx) => { return this.generateContextDiv(ctx, ctx.CurrentFieldSchema.Name); };\r\n fieldRenderOverride.EditForm = (ctx) => { return this.generateContextDiv(ctx, ctx.CurrentFieldSchema.Name); };\r\n fieldRendering[fieldInternalName] = fieldRenderOverride;\r\n });\r\n registrationContext.Templates.Fields = fieldRendering;\r\n registrationContext.OnPostRender = (ctx) => {\r\n let fieldHashmap = {};\r\n fieldHashmap = ctx.ListSchema.Field.reduce((map, obj) => {\r\n map[obj.Name] = obj;\r\n return map;\r\n }, fieldHashmap);\r\n let elementIds = Object.keys(this.renderContextPerElement).filter((elementId) => {\r\n let fieldName = this.renderContextPerElement[elementId].CurrentFieldSchema.Name;\r\n return fieldHashmap[fieldName] != null;\r\n //return this.renderContextPerElement[elementId].CurrentFieldSchema.Name == ctx.ListSchema.Field[0].Name\r\n });\r\n elementIds.forEach((elementId) => {\r\n let context = this.renderContextPerElement[elementId];\r\n switch (context.CurrentFieldSchema.Name) {\r\n case \"ContentType\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n case \"natoDivision\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n case \"natoCode\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n case \"natoGrantStatus\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n case \"natoExternalStatus\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n //case \"natoBudgetApproval\": this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId)); break;\r\n case \"natoHeadOfSectionApproval\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n case \"natoPlanningOfficerApproval\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n case \"natoSignature\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n case \"natoProjectNumber\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n case \"SharedWithUsers\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n case \"natoAssignedHeadOfSection\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n case \"natoApplicationApprovalStatus\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n }\r\n });\r\n this.onPostRender(ctx);\r\n };\r\n SPClientTemplates.TemplateManager.RegisterTemplateOverrides(registrationContext);\r\n }\r\n onPostRender(ctx) {\r\n //Make the ContenType field read-only on the EditForm and NewForm\r\n if (ctx.ControlMode == SPClientTemplates.ClientControlMode.EditForm || ctx.ControlMode == SPClientTemplates.ClientControlMode.NewForm) {\r\n if (!(new RegExp(/DocumentTemplates/gi).test(ctx.FormContext.itemAttributes.Url))) {\r\n let contentTypeDropDown = document.querySelector(\"SELECT[id$='ContentTypeChoice']\");\r\n if (contentTypeDropDown && !contentTypeDropDown.hasAttribute(\"disabled\")) {\r\n contentTypeDropDown.setAttribute(\"disabled\", \"disabled\");\r\n contentTypeDropDown.style.visibility = \"hidden\";\r\n contentTypeDropDown.setAttribute(\"visibility\", \"hidden\");\r\n let selectedContentType = contentTypeDropDown.selectedOptions[0].text;\r\n var contentTypeSpan = document.createElement(\"span\");\r\n contentTypeSpan.innerText = selectedContentType;\r\n contentTypeDropDown.parentElement.insertBefore(contentTypeSpan, contentTypeDropDown);\r\n }\r\n }\r\n }\r\n //Couple the natoSynopsis and the Title field. If the user enters a (new) title, while the code is empty than copy the title value to the synopsis\r\n if (ctx.ControlMode == SPClientTemplates.ClientControlMode.EditForm || ctx.ControlMode == SPClientTemplates.ClientControlMode.NewForm) {\r\n let titleField = document.querySelector(\"INPUT[id^='Title'][id$='TextField']\");\r\n let synopsisField = document.querySelector(\"INPUT[id^='natoSynopsis'][id$='TextField']\");\r\n if (titleField && synopsisField) {\r\n if (titleField.hasAttribute(\"data-nas\"))\r\n return;\r\n titleField.onblur = (e) => {\r\n if (synopsisField.value == \"\") {\r\n synopsisField.value = titleField.value;\r\n }\r\n };\r\n titleField.setAttribute(\"data-nas\", \"true\");\r\n }\r\n }\r\n //Make the Code field read-only on the Edit form if the Grant is already published. Code should be unique, if still editable users can change it \r\n // and when synchonize with the published events a new event is created instead o updating the existing one\r\n if (ctx.ControlMode == SPClientTemplates.ClientControlMode.EditForm) {\r\n let externalStatusDiv = document.querySelector(\".nato-natoExternalStatus-customfieldrendering\");\r\n let externalStatusValue = '';\r\n if (externalStatusDiv) {\r\n externalStatusValue = externalStatusDiv.firstElementChild.innerHTML;\r\n }\r\n let codeField = document.querySelector(\"INPUT[id^='natoCode'][id$='TextField']\");\r\n if (externalStatusValue.toLowerCase().indexOf(\"published - open for applications\") !== -1 && codeField && !codeField.hasAttribute(\"disabled\")) {\r\n codeField.setAttribute(\"disabled\", \"disabled\");\r\n codeField.style.visibility = \"hidden\";\r\n codeField.setAttribute(\"visibility\", \"hidden\");\r\n let codeFieldValue = codeField.value;\r\n var contentTypeSpan = document.createElement(\"span\");\r\n contentTypeSpan.innerText = codeFieldValue;\r\n codeField.parentElement.insertBefore(contentTypeSpan, codeField);\r\n }\r\n }\r\n //For the 'Grants Office Work List' view, highlight all Applications that are assigned to the current user\r\n //This is mark-up only (looks nice), it doens't do anything else...\r\n if (ctx.ControlMode == SPClientTemplates.ClientControlMode.View) {\r\n if (ctx[\"wpq\"] && ctx[\"viewTitle\"] && (ctx[\"viewTitle\"] + \"\").toLocaleLowerCase() == \"Grants Office Work List\".toLocaleLowerCase()) {\r\n let webpartId = \"WebPart\" + ctx[\"wpq\"];\r\n let webpart = document.getElementById(webpartId);\r\n let allUserSpans = webpart.getElementsByClassName(\"ms-imnSpan\");\r\n let hrefExpression = \"ID=\" + _spPageContextInfo.userId;\r\n for (let i = 0; i < allUserSpans.length; i++) {\r\n let span = allUserSpans[i];\r\n let allUserLinks = span.getElementsByTagName(\"A\");\r\n for (let j = 0; j < allUserLinks.length; j++) {\r\n let userLink = allUserLinks[j];\r\n if (userLink && userLink.href.endsWith(hrefExpression)) {\r\n userLink.style.backgroundColor = \"#00e7ff38\";\r\n userLink.style.fontWeight = \"bold\";\r\n }\r\n }\r\n }\r\n }\r\n }\r\n //For the 'Director Search' view, render an additional search box to search for all applications given a director name\r\n //This search box in only available on the DocLib itself, not in views in WebPart pages\r\n if (ctx.ControlMode == SPClientTemplates.ClientControlMode.View && ctx[\"SiteTitle\"] === \"ESC/SPS\") {\r\n if (ctx[\"wpq\"] && ctx[\"listUrlDir\"] && window.location.href.toLocaleLowerCase().indexOf(ctx[\"listUrlDir\"].toLocaleLowerCase()) >= 0) {\r\n //Retrieve all applications from the 'Grant Applications' list and get the natoProjectCoDirectorsDetails field\r\n const applicationDocumentSetContentTypeID = \"0x0120D52000ECEF8712FAB50C419F9E57F98F87E9E8\";\r\n const url = _spPageContextInfo.webAbsoluteUrl + \"/_api/web/lists/GetByTitle('Grant%20Applications')/items?$select=id,natoProjectCoDirectorsDetails&$filter=startswith(ContentTypeId,'\" + applicationDocumentSetContentTypeID + \"')\";\r\n SharePointRestService.fetch(url)\r\n .then(response => {\r\n response.json().then(odata => {\r\n //Find the ControlBar above the ListView\r\n let controlDivId = \"CSRListViewControlDiv\" + ctx[\"wpq\"];\r\n let controlDiv = document.getElementById(controlDivId);\r\n //Create a label 'Co-director'\r\n let coDirectorSearchLabel = document.createElement(\"label\");\r\n coDirectorSearchLabel.innerHTML = \"Co-director:\";\r\n //Create a select-element where the user can select a single Co-director from\r\n let coDirectorSelectElement = document.createElement(\"select\");\r\n coDirectorSelectElement.name = \"codirector-filter\";\r\n coDirectorSelectElement.id = \"codirector-filter\";\r\n coDirectorSelectElement.style.maxWidth = '200px';\r\n coDirectorSelectElement.style.marginLeft = '5px';\r\n coDirectorSelectElement.onchange = function () {\r\n //The user selected a co-director\r\n //Construct a URL with query-string filters to only display the applications where this co-director was found\r\n const htmlSelectElement = document.getElementById(coDirectorSelectElement.id);\r\n const selectedValue = htmlSelectElement.value;\r\n let url = [location.protocol, '//', location.host, location.pathname].join('');\r\n if (selectedValue !== null && selectedValue !== undefined && selectedValue !== '') {\r\n const selectedText = htmlSelectElement.selectedOptions[0].text;\r\n url = url + '?FilterField1=ID&FilterValue1=' + encodeURIComponent(selectedValue) + '&codirector=' + encodeURIComponent(selectedText);\r\n }\r\n window[\"STSNavigate\"](url);\r\n };\r\n //Create an object to hold our co-director data\r\n let coDirectorOptions = {};\r\n //Loop over the data retrieve using the REST api\r\n if (odata && odata.value && odata.value.length > 0) {\r\n for (let i = 0; i < odata.value.length; i++) {\r\n //The co-director data is stored as JSON, but could also be empty or null\r\n let parsedCodirectorData = JSON.parse(odata.value[i].natoProjectCoDirectorsDetails);\r\n if (parsedCodirectorData && parsedCodirectorData.length > 0) {\r\n //Loop over all co-director. There can be 0, 1, or multiple co-directors per application\r\n for (let j = 0; j < parsedCodirectorData.length; j++) {\r\n //Retrieve the co-director name and institution. Furthermore, push the itemId (of the application) into a list.\r\n //We use the combined list of ItemIds for the filter\r\n const codirectorName = parsedCodirectorData[j].name;\r\n const institution = parsedCodirectorData[j].institution;\r\n const option = codirectorName + \" (\" + institution + \")\";\r\n if (!coDirectorOptions[option]) {\r\n coDirectorOptions[option] = new Array();\r\n }\r\n coDirectorOptions[option].push(odata.value[i].Id);\r\n }\r\n }\r\n ;\r\n }\r\n }\r\n //Create an empty option to clear any filters\r\n var emptyOption = document.createElement(\"option\");\r\n emptyOption.value = '';\r\n emptyOption.text = '';\r\n coDirectorSelectElement.appendChild(emptyOption);\r\n //Create an option for every co-director found\r\n const selectedCodirector = decodeURIComponent(window[\"GetUrlKeyValue\"](\"codirector\"));\r\n Object.keys(coDirectorOptions)\r\n .sort((a, b) => {\r\n return a.localeCompare(b);\r\n }).forEach((c, index) => {\r\n const option = document.createElement(\"option\");\r\n const value = coDirectorOptions[c].sort((a, b) => a - b).join(\";#\");\r\n option.value = value;\r\n option.text = c;\r\n option.selected = c === selectedCodirector;\r\n coDirectorSelectElement.appendChild(option);\r\n });\r\n //Add the label and the select element to the ControlBar\r\n controlDiv.appendChild(coDirectorSearchLabel);\r\n controlDiv.appendChild(coDirectorSelectElement);\r\n });\r\n });\r\n }\r\n }\r\n //If we are on the DocSetHomePage (Application page) there is also a WebPart with the DocumentSet Properties\r\n //Unfortunately, this WebPart doesn't use CSR (Client Side Rendering)\r\n //To overcome this problem, we manually search for the 'Application Approval Status' internal system value and replace the innerHTML of the corresponding TableCell\r\n if (ctx.ControlMode == SPClientTemplates.ClientControlMode.View && document.getElementById(\"idDocSetPropertiesWebPart\")) {\r\n SPUtil.isLoggedIn().then(isLoggedIn => {\r\n if (isLoggedIn) {\r\n User.isApplicant().then(isApplicant => {\r\n let docSetPropertiesWebPart = document.getElementById(\"idDocSetPropertiesWebPart\");\r\n let allFields = docSetPropertiesWebPart.querySelectorAll(\"H3.ms-standardheader\");\r\n const labelTranslations = {\r\n 'Code': 'Code',\r\n 'Project Number': 'Activity Number',\r\n 'Application description': 'Activity Title',\r\n 'Project type': 'Activity Type',\r\n 'Key Priorities': 'Key prioritities',\r\n 'Application Status': 'Application Status',\r\n 'Application Approval Status': 'Internal Application Status',\r\n 'Grant Administrators': 'Grant Administrator',\r\n 'Senior Advisors': 'Senior Advisors',\r\n 'Advisors': 'Advisors',\r\n 'Reviewers': 'Reviewers ',\r\n 'Meeting Number': 'ISEG Number',\r\n 'Contact person': 'NPD Name',\r\n 'Alternative contact person': 'PPD Name',\r\n };\r\n //Loop over all fields\r\n for (let i = 0; i < allFields.length; i++) {\r\n let elm = allFields[i];\r\n //Decode the internal application approval status\r\n if (elm.innerHTML.toLocaleLowerCase() == \"Application Approval Status\".toLocaleLowerCase()) {\r\n let tableCellElement = elm.parentElement;\r\n let tableRow = tableCellElement.parentElement;\r\n let tableData = tableRow.children[2];\r\n let approvalStatusValue = tableData.innerHTML;\r\n let approvalStatusText = isApplicant ? \"-\" : ApplicationApprovalStatusFieldTemplate.decode(approvalStatusValue);\r\n tableData.innerHTML = approvalStatusText;\r\n }\r\n //Replace the field label\r\n if (labelTranslations[elm.innerHTML]) {\r\n elm.innerHTML = labelTranslations[elm.innerHTML];\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n //We don't want applicants entering new data in the Beneficiary Request directly. \r\n //New Beneficiary Request should always be initiated from an application\r\n if (ctx.ControlMode == SPClientTemplates.ClientControlMode.NewForm\r\n && ctx[\"ListData\"] && ctx[\"ListData\"].Items[0].ContentType.toLocaleLowerCase() == \"Beneficiary Request\".toLocaleLowerCase()\r\n && window.document.location.search.toLocaleLowerCase().indexOf(\"fromApplicationList=1\".toLocaleLowerCase()) < 0) {\r\n let stsNavigateFunc = window[\"STSNavigate\"];\r\n let params = SPUtil.parseQuerystring(window.document.location.search);\r\n if (params[\"Source\"]) {\r\n stsNavigateFunc(params[\"Source\"]);\r\n }\r\n else {\r\n stsNavigateFunc(_spPageContextInfo.webAbsoluteUrl);\r\n }\r\n }\r\n return;\r\n }\r\n generateContextDiv(ctx, fieldName) {\r\n try {\r\n if (ctx.CurrentItem.hasOwnProperty(fieldName + \".groupHeader\")) {\r\n //is groupHeader\r\n return ctx.CurrentItem[fieldName];\r\n }\r\n if (this._grant == null) {\r\n let contentType = \"\" + ctx.CurrentItem.ContentType;\r\n if (contentType.toLocaleLowerCase() == \"grant\") {\r\n this._grant = new Grant(ctx.CurrentItem);\r\n }\r\n else if (contentType.toLocaleLowerCase() == \"beneficiary request\") {\r\n this._grant == null;\r\n }\r\n else {\r\n try {\r\n this._grant = new BaseGrant(ctx.CurrentItem);\r\n }\r\n catch (e) {\r\n LogMessage.Log(\"Error constructing Grant object: '\" + e.get_message() + \"'\", this, LogSeverityEnum.Error);\r\n }\r\n }\r\n }\r\n this.grant.id = ctx.CurrentItem.ID || ctx.FormContext.itemAttributes.Id; //The ctx.CurrentItem.ID is available on a field, while the ctx.FormContext.itemAttributes.Id is available on a form\r\n this.grant.url = this.grant.url || (ctx.FormContext ? ctx.FormContext.itemAttributes.Url : ctx.CurrentItem.FileRef);\r\n let id = Math.round(Math.random() * Math.pow(2, 32)) - 1;\r\n let className = 'nato-' + fieldName + '-customfieldrendering';\r\n let clonedContext = Object.assign({}, ctx);\r\n this.renderContextPerElement[id] = clonedContext;\r\n return '
    ';\r\n }\r\n catch (e) {\r\n return '
    There was a problem rendering a field
    ' + e.stack + '
    ';\r\n }\r\n }\r\n showPublishedGrantData() {\r\n if (document.getElementById(\"natoPublishedGrantDataContainer\") != null || this.grant == null)\r\n return;\r\n LogMessage.Log(\"Rendering PublishedGrantData component\", this, LogSeverityEnum.Verbose);\r\n let mainForm = document.getElementById(\"onetIDListForm\");\r\n if (!mainForm) {\r\n return;\r\n }\r\n mainForm.style.display = \"inline-block\";\r\n let currentFormTable = mainForm.getElementsByClassName(\"ms-formtable\")[0];\r\n let header = document.createElement(\"SPAN\");\r\n header.innerHTML = \"

    Internal view

    \";\r\n currentFormTable.parentElement.insertBefore(header, currentFormTable);\r\n let publishedGrantDataElement = document.createElement('SPAN');\r\n publishedGrantDataElement.style.display = \"inline-block\";\r\n publishedGrantDataElement.style.marginLeft = \"50px\";\r\n publishedGrantDataElement.style.paddingLeft = \"50px\";\r\n publishedGrantDataElement.style.borderLeft = \"1px solid lightgray\";\r\n publishedGrantDataElement.style.position = \"absolute\";\r\n publishedGrantDataElement.id = 'natoPublishedGrantDataContainer';\r\n mainForm.parentElement.insertAdjacentHTML('beforeend', publishedGrantDataElement.outerHTML);\r\n this._grant.getPublishedGrantData().then((publishedGrantData) => {\r\n ReactDOM.render( this._publishedGrantComponent = elm} publishedGrant={publishedGrantData}/>, document.getElementById('natoPublishedGrantDataContainer'));\r\n });\r\n }\r\n UpdatePublishedGrantExternalView(publishedGrantData) {\r\n if (this._publishedGrantComponent != null) {\r\n this._publishedGrantComponent.publishedGrant = publishedGrantData;\r\n }\r\n }\r\n SynchronizeEnabled(listId, itemId) {\r\n this.updateGrantStatus();\r\n return this._grant.isPublished;\r\n }\r\n Synchronize(listGuidStr, itemIdStr) {\r\n let itemId = Number(itemIdStr);\r\n let listGuid = new SP.Guid(listGuidStr);\r\n this.grant.Synchronize(itemId, listGuid);\r\n }\r\n PutOnHold(listId, itemId, onhold) {\r\n this._grant.onHold = onhold;\r\n this.updateGrantStatus();\r\n }\r\n PutOnHoldEnabled(listId, itemId) {\r\n this.updateGrantStatus();\r\n let isEnabled = this._grant.isPublished;\r\n return isEnabled;\r\n }\r\n ArchiveEnabled(listId, itemId) {\r\n this.updateGrantStatus();\r\n return this._grant.isPublished;\r\n }\r\n Archive(listGuidStr, itemIdStr) {\r\n let itemId = Number(itemIdStr);\r\n let listGuid = new SP.Guid(listGuidStr);\r\n this.grant.Archive(itemId, listGuid);\r\n }\r\n updateGrantStatus() {\r\n if (this._grant.isPublished) {\r\n let externalStatusField = this.componentsPerField[\"natoExternalStatus\"];\r\n let statusField = this.componentsPerField[\"natoGrantStatus\"];\r\n statusField.value = this._grant.status;\r\n externalStatusField.value = this._grant.status;\r\n }\r\n }\r\n}\r\n//Wait for the SPClientTemplate object to be available\r\nExecuteOrDelayUntilScriptLoaded(() => {\r\n //BaseGrantRendering.ControlRibbonVisibility();\r\n BaseGrantRendering.SetUiComponentVisibility();\r\n BaseGrantRendering.SetPageTitle();\r\n}, \"NATO.SP.PreAwardPortal.Init.js\");\r\n//# sourceMappingURL=BaseGrantRendering.jsx.map","import \"babel-polyfill\";\r\nimport * as ReactDOM from 'react-dom';\r\nimport { CodeFieldTemplate, SPUtil } from \"../index\";\r\nimport \"es6-object-assign/auto\";\r\nexport class PublishedGrantRendering {\r\n constructor() {\r\n this.renderContextPerElement = {};\r\n this.componentsPerField = {};\r\n }\r\n RegisterRenderingTemplates() {\r\n // Create object that has the context information about the field that we want to render differently\r\n var registrationContext = {};\r\n registrationContext.Templates = {};\r\n var baseViewId = Math.round(Math.random() * 1000) + 1000;\r\n registrationContext.BaseViewID = baseViewId;\r\n var oldRenderListView = window.RenderListView;\r\n window.RenderListView = function (ctx, webPartID) {\r\n let hashCode = SPUtil.getViewHash(ctx.ListSchema.Field);\r\n if (hashCode == -200661198 || hashCode == -651846839)\r\n ctx.BaseViewID = baseViewId;\r\n oldRenderListView(ctx, webPartID);\r\n };\r\n var fieldRendering = {};\r\n let fieldsWithCustomTemplates = ['natoCode'];\r\n fieldsWithCustomTemplates.forEach((fieldInternalName) => {\r\n let fieldRenderOverride = {};\r\n fieldRenderOverride.View = (ctx) => { return this.generateContextDiv(ctx, ctx.CurrentFieldSchema.Name); };\r\n fieldRenderOverride.DisplayForm = (ctx) => { return this.generateContextDiv(ctx, ctx.CurrentFieldSchema.Name); };\r\n fieldRenderOverride.NewForm = (ctx) => { return this.generateContextDiv(ctx, ctx.CurrentFieldSchema.Name); };\r\n fieldRenderOverride.EditForm = (ctx) => { return this.generateContextDiv(ctx, ctx.CurrentFieldSchema.Name); };\r\n fieldRendering[fieldInternalName] = fieldRenderOverride;\r\n });\r\n registrationContext.OnPreRender = (ctx) => {\r\n this.renderContextPerElement = {};\r\n };\r\n registrationContext.OnPostRender = (ctx) => {\r\n for (let elementId in this.renderContextPerElement) {\r\n let context = this.renderContextPerElement[elementId];\r\n switch (context.CurrentFieldSchema.Name) {\r\n case \"natoCode\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n }\r\n }\r\n };\r\n registrationContext.Templates.Fields = fieldRendering;\r\n SPClientTemplates.TemplateManager.RegisterTemplateOverrides(registrationContext);\r\n }\r\n generateContextDiv(ctx, fieldName) {\r\n let id = Math.round(Math.random() * Math.pow(2, 32)) - 1;\r\n let className = 'nato-' + fieldName + '-customfieldrendering';\r\n let clonedContext = Object.assign({}, ctx);\r\n this.renderContextPerElement[id] = clonedContext;\r\n return \"
    \";\r\n }\r\n}\r\n//Wait for the SPClientTemplate object to be available\r\nSP.SOD.executeFunc('clienttemplates.js', 'SPClientTemplates', function () {\r\n let g_MinimalDownload = window['g_MinimalDownload'];\r\n let asyncDeltaManager = window['asyncDeltaManager'];\r\n //Test if MDS is enabled for this site\r\n if (typeof g_MinimalDownload != 'undefined' && g_MinimalDownload && (window.location.pathname.toLowerCase()).endsWith(\"/_layouts/15/start.aspx\") && typeof asyncDeltaManager != 'undefined') {\r\n //MDS is enabled, so instruct it to load this JavaScript file on every page, and call the JsLinkExample.Register function once the file has been loaded\r\n RegisterModuleInit(_spPageContextInfo.siteServerRelativeUrl + '/SiteAssets/Scripts/DisplayTemplates/NATO.SP.CommitteeSites.CommitteeSearchView.js', function () {\r\n var publishedGrantRendering = new PublishedGrantRendering();\r\n publishedGrantRendering.RegisterRenderingTemplates();\r\n window['PublishedGrantRendering'] = publishedGrantRendering;\r\n });\r\n }\r\n var publishedGrantRendering = new PublishedGrantRendering();\r\n publishedGrantRendering.RegisterRenderingTemplates();\r\n window['PublishedGrantRendering'] = publishedGrantRendering;\r\n});\r\n//# sourceMappingURL=PublishedGrantRendering.jsx.map","import \"babel-polyfill\";\r\nimport * as ReactDOM from 'react-dom';\r\nimport { CodeFieldTemplate, BeneficiaryRequestFieldTemplate, SPUtil, User } from \"../index\";\r\nimport \"es6-object-assign/auto\";\r\nexport class MyApplicationsRendering {\r\n constructor() {\r\n this.renderContextPerElement = {};\r\n this.componentsPerField = {};\r\n }\r\n RegisterRenderingTemplates() {\r\n // Create object that has the context information about the field that we want to render differently\r\n var registrationContext = {};\r\n registrationContext.Templates = {};\r\n var baseViewId = Math.round(Math.random() * 1000) + 1000;\r\n registrationContext.BaseViewID = baseViewId;\r\n var oldRenderListView = window.RenderListView;\r\n window.RenderListView = function (ctx, webPartID) {\r\n let hashCode = SPUtil.getViewHash(ctx.ListSchema.Field);\r\n if (hashCode == 1794905877 || hashCode == -1846704966 || hashCode == -1)\r\n ctx.BaseViewID = baseViewId;\r\n oldRenderListView(ctx, webPartID);\r\n };\r\n var fieldRendering = {};\r\n let fieldsWithCustomTemplates = ['natoCode', 'natoBeneficiaryRequest'];\r\n fieldsWithCustomTemplates.forEach((fieldInternalName) => {\r\n let fieldRenderOverride = {};\r\n fieldRenderOverride.View = (ctx) => { return this.generateContextDiv(ctx, ctx.CurrentFieldSchema.Name); };\r\n fieldRenderOverride.DisplayForm = (ctx) => { return this.generateContextDiv(ctx, ctx.CurrentFieldSchema.Name); };\r\n fieldRenderOverride.NewForm = (ctx) => { return this.generateContextDiv(ctx, ctx.CurrentFieldSchema.Name); };\r\n fieldRenderOverride.EditForm = (ctx) => { return this.generateContextDiv(ctx, ctx.CurrentFieldSchema.Name); };\r\n fieldRendering[fieldInternalName] = fieldRenderOverride;\r\n });\r\n registrationContext.OnPreRender = (ctx) => {\r\n this.renderContextPerElement = {};\r\n //Hide the WebPart at first, and show it when the user is LoggedIn\r\n let webpartQualifier = ctx[\"wpq\"];\r\n webpartQualifier = \"MSOZoneCell_WebPart\" + webpartQualifier;\r\n let webpartDiv = document.getElementById(webpartQualifier);\r\n webpartDiv.parentElement.parentElement.style.display = \"none\";\r\n SPUtil.isLoggedIn().then(isLoggedIn => {\r\n if (isLoggedIn) {\r\n User.isApplicant().then(isApplicant => {\r\n webpartDiv.parentElement.parentElement.style.display = (isApplicant && isLoggedIn) ? \"\" : \"none\";\r\n });\r\n }\r\n });\r\n };\r\n registrationContext.OnPostRender = (ctx) => {\r\n for (let elementId in this.renderContextPerElement) {\r\n let context = this.renderContextPerElement[elementId];\r\n switch (context.CurrentFieldSchema.Name) {\r\n case \"natoCode\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n case \"natoBeneficiaryRequest\":\r\n this.componentsPerField[context.CurrentFieldSchema.Name] = ReactDOM.render(, document.getElementById(elementId));\r\n break;\r\n }\r\n }\r\n };\r\n registrationContext.Templates.Fields = fieldRendering;\r\n SPClientTemplates.TemplateManager.RegisterTemplateOverrides(registrationContext);\r\n }\r\n generateContextDiv(ctx, fieldName) {\r\n let id = Math.round(Math.random() * Math.pow(2, 32)) - 1;\r\n let className = 'nato-' + fieldName + '-customfieldrendering';\r\n let clonedContext = Object.assign({}, ctx);\r\n this.renderContextPerElement[id] = clonedContext;\r\n return \"
    \";\r\n }\r\n}\r\n//Wait for the SPClientTemplate object to be available\r\nSP.SOD.executeFunc('clienttemplates.js', 'SPClientTemplates', function () {\r\n var myApplicationsRendering = new MyApplicationsRendering();\r\n myApplicationsRendering.RegisterRenderingTemplates();\r\n window['MyApplicationsRendering'] = myApplicationsRendering;\r\n});\r\n//# sourceMappingURL=MyApplicationsRendering.jsx.map","import \"whatwg-fetch\";\r\nimport \"es6-object-assign/auto\";\r\nimport \"es6-promise/auto\";\r\nimport { LogMessage, LogSeverityEnum } from \"../index\";\r\n//Class for performing REST calls against the SharePoint REST API\r\nexport class SharePointRestService {\r\n //Execute a REST call\r\n static fetch(url, method, body, headers, logExceptionOnError = true) {\r\n return SharePointRestService.fetchRaw(url, method, JSON.stringify(body), headers, logExceptionOnError);\r\n }\r\n //Execute a REST call\r\n static fetchRaw(url, method, data, headers, logExceptionOnError = true) {\r\n let UpdateFormDigest = window[\"UpdateFormDigest\"];\r\n let _spFormDigestRefreshInterval = 15 * 60 * 1000;\r\n UpdateFormDigest(_spPageContextInfo.webServerRelativeUrl, _spFormDigestRefreshInterval);\r\n //The default headers to use when calling the SharePoint REST API\r\n let defaultHeaders = {\r\n \"Accept\": \"application/json, text/plain, */*\",\r\n \"Content-Type\": \"application/json;odata=verbose\",\r\n \"X-RequestDigest\": document.getElementById(\"__REQUESTDIGEST\").value\r\n };\r\n //Merge the default headers with any additional headers provided in this method call\r\n headers = Object.assign(defaultHeaders, headers);\r\n //The default method is \"GET\", but if any HTTP Verb was provided we use that one\r\n method = method || \"GET\";\r\n //Because we want to execute all REST calls async, we return a Promise\r\n return new Promise((resolve, reject) => {\r\n let fetchParams = {\r\n credentials: \"include\",\r\n method: method,\r\n headers: headers,\r\n body: data\r\n };\r\n //if (method.toLocaleUpperCase() != \"get\" || method.toLocaleUpperCase() != \"head\"\r\n fetch(url, fetchParams).then(res => {\r\n if (!res.ok) { //Status-code is not 200\r\n try {\r\n res.clone().text().then(parsedText => {\r\n let error = res.statusText + \" (\" + res.status + \"): \" + parsedText;\r\n if (logExceptionOnError) {\r\n LogMessage.Log(error, SharePointRestService, LogSeverityEnum.Error);\r\n }\r\n });\r\n }\r\n catch (e) {\r\n }\r\n finally {\r\n reject(res);\r\n }\r\n }\r\n else {\r\n resolve(res); //Success! Let's resolve the promise\r\n }\r\n }).catch(error => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n static sendMail(fromAddress, toAccountName, body, subject) {\r\n let url = _spPageContextInfo.webAbsoluteUrl + \"/_api/SP.Utilities.Utility.SendEmail\";\r\n let mail = {\r\n properties: {\r\n \"__metadata\": { \"type\": \"SP.Utilities.EmailProperties\" },\r\n \"From\": fromAddress,\r\n \"To\": { \"results\": [toAccountName] },\r\n \"Body\": body,\r\n \"Subject\": subject\r\n }\r\n };\r\n let headers = {\r\n \"Accept\": \"application/json;odata=verbose\",\r\n \"content-type\": \"application/json;odata=verbose\",\r\n \"X-RequestDigest\": document.getElementById(\"__REQUESTDIGEST\").value\r\n };\r\n return SharePointRestService.fetch(url, \"POST\", mail, headers);\r\n }\r\n}\r\n//# sourceMappingURL=SharePointRestService.jsx.map","import { initializeIcons } from '@uifabric/icons';\r\nwindow[\"IconsLoaded\"] = false;\r\nSP.SOD.executeOrDelayUntilScriptLoaded(() => {\r\n let loadIcons = () => {\r\n if (_spPageContextInfo == undefined) {\r\n setTimeout(() => { loadIcons(); }, 100);\r\n }\r\n else {\r\n var rootUrl = _spPageContextInfo.siteServerRelativeUrl == '/' ? '' : _spPageContextInfo.siteServerRelativeUrl;\r\n initializeIcons(rootUrl + \"/SiteAssets/Branding/\", {\r\n disableWarnings: false,\r\n warnOnMissingIcons: true\r\n });\r\n window[\"IconsLoaded\"] = true;\r\n }\r\n };\r\n loadIcons();\r\n}, \"sp.js\");\r\n//A class with static re-usable Utility functions\r\nexport class SPUtil {\r\n //Search for a querystring parameter and modify the value of that single querystring parameter\r\n static modifyQueryStringParameter(url, param, value) {\r\n return url.replace((new RegExp(\"([?|&]\" + param + \"=)[^\\&]+\")), '$1' + value);\r\n }\r\n static iconsLoaded() {\r\n if (window[\"IconsLoaded\"] == true)\r\n return Promise.resolve();\r\n return new Promise((resolve, reject) => {\r\n let waitForIcons = () => {\r\n if (window[\"IconsLoaded\"] == true) {\r\n resolve();\r\n }\r\n else {\r\n setTimeout(() => { waitForIcons(); }, 100);\r\n }\r\n };\r\n waitForIcons();\r\n });\r\n }\r\n //Parse the querystring and return a associative array with all key-value pairs\r\n static parseQuerystring(queryString) {\r\n let query = {};\r\n var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');\r\n for (var i = 0; i < pairs.length; i++) {\r\n var pair = pairs[i].split('=');\r\n query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');\r\n }\r\n return query;\r\n }\r\n static getViewHash(fieldCollection) {\r\n if (!fieldCollection) {\r\n return -1;\r\n }\r\n var fieldIds = fieldCollection.map((field) => {\r\n return field.ID;\r\n }).join(\",\");\r\n var hashCode = fieldIds.split(\"\").reduce((a, b) => {\r\n a = ((a << 5) - a) + b.charCodeAt(0);\r\n return a & a;\r\n }, 0);\r\n return hashCode;\r\n }\r\n static isLoggedIn() {\r\n if (_spPageContextInfo.userLoginName && _spPageContextInfo.userLoginName.length > 0) {\r\n return Promise.resolve(true);\r\n }\r\n if (window[\"sp.nato.isLoggedIn\"] && window[\"sp.nato.isLoggedIn\"] == \"1\") {\r\n return Promise.resolve(true);\r\n }\r\n if (window[\"sp.nato.isLoggedIn\"] && window[\"sp.nato.isLoggedIn\"] == \"0\") {\r\n return Promise.resolve(false);\r\n }\r\n return new Promise((resolve, reject) => {\r\n SP.SOD.executeOrDelayUntilScriptLoaded(() => {\r\n let context = SP.ClientContext.get_current();\r\n let currentWeb = context.get_web();\r\n let user = currentWeb.get_currentUser();\r\n context.load(currentWeb);\r\n context.load(user);\r\n context.executeQueryAsync((sender, args) => {\r\n let isValidUser = false;\r\n try {\r\n isValidUser = user.get_id() > 0;\r\n }\r\n catch (ex) {\r\n isValidUser = false;\r\n }\r\n window[\"sp.nato.isLoggedIn\"] = (isValidUser) ? \"1\" : \"0\";\r\n resolve(isValidUser);\r\n }, (sender, args) => {\r\n if (args.get_message().indexOf(\"404\") >= 0) {\r\n window[\"sp.nato.isLoggedIn\"] = \"0\";\r\n resolve(false);\r\n }\r\n else {\r\n reject(args);\r\n }\r\n });\r\n }, \"sp.js\");\r\n });\r\n }\r\n static parseDateFromString(dateStr) {\r\n let retValue = Date.parseLocale(dateStr.replace(/-/g, '/'));\r\n return retValue;\r\n }\r\n static strictDoPostback(action) {\r\n let currentDoPostback = Sys.WebForms.PageRequestManager.prototype[\"_doPostBack\"];\r\n Sys.WebForms.PageRequestManager.prototype[\"_doPostBack\"] = function (a, k) {\r\n var f = window.event;\r\n //if (!f) {\r\n // var d = arguments.callee ? arguments.callee.caller : null;\r\n // if (d) {\r\n // var j = 30;\r\n // while (d.arguments.callee.caller && --j)\r\n // d = d.arguments.callee.caller;\r\n // f = j && d.arguments.length ? d.arguments[0] : null;\r\n // }\r\n //}\r\n this._additionalInput = null;\r\n var h = this._form;\r\n if (a === null || typeof a === \"undefined\" || this._isCrossPost) {\r\n this._postBackSettings = this._createPostBackSettings(false);\r\n this._isCrossPost = false;\r\n }\r\n else {\r\n var c = this._masterPageUniqueID, l = this._uniqueIDToClientID(a), g = document.getElementById(l);\r\n if (!g && c)\r\n if (a.indexOf(c + \"$\") === 0)\r\n g = document.getElementById(l.substr(c.length + 1));\r\n if (!g)\r\n if (Array.contains(this._asyncPostBackControlIDs, a))\r\n this._postBackSettings = this._createPostBackSettings(true, null, a);\r\n else if (Array.contains(this._postBackControlIDs, a))\r\n this._postBackSettings = this._createPostBackSettings(false);\r\n else {\r\n var e = this._findNearestElement(a);\r\n if (e)\r\n this._postBackSettings = this._getPostBackSettings(e, a);\r\n else {\r\n if (c) {\r\n c += \"$\";\r\n if (a.indexOf(c) === 0)\r\n e = this._findNearestElement(a.substr(c.length));\r\n }\r\n if (e)\r\n this._postBackSettings = this._getPostBackSettings(e, a);\r\n else {\r\n var b;\r\n try {\r\n b = f ? f.target || f.srcElement : null;\r\n }\r\n catch (n) {\r\n }\r\n b = b || this._activeElement;\r\n var m = /__doPostBack\\(|WebForm_DoPostBackWithOptions\\(/;\r\n function i(b) {\r\n b = b ? b.toString() : \"\";\r\n return m.test(b) && b.indexOf(\"'\" + a + \"'\") !== -1 || b.indexOf('\"' + a + '\"') !== -1;\r\n }\r\n if (b && (b.name === a || i(b.href) || i(b.onclick) || i(b.onchange)))\r\n this._postBackSettings = this._getPostBackSettings(b, a);\r\n else\r\n this._postBackSettings = this._createPostBackSettings(false);\r\n }\r\n }\r\n }\r\n else\r\n this._postBackSettings = this._getPostBackSettings(g, a);\r\n }\r\n if (!this._postBackSettings.async) {\r\n h.onsubmit = this._onsubmit;\r\n this._originalDoPostBack(a, k);\r\n h.onsubmit = null;\r\n return;\r\n }\r\n h.__EVENTTARGET.value = a;\r\n h.__EVENTARGUMENT.value = k;\r\n this._onFormSubmit();\r\n };\r\n action();\r\n Sys.WebForms.PageRequestManager.prototype[\"_doPostBack\"] = currentDoPostback;\r\n }\r\n static parseSharePointDate(s) {\r\n //\"25/11/2018 0:0\"\r\n let datetimeparts = s.split(\" \");\r\n let datestring = datetimeparts[0];\r\n let timestring = datetimeparts[1];\r\n let dateparts = datestring.split(\"/\");\r\n let day = Number(dateparts[0]);\r\n let month = Number(dateparts[1]) - 1; //Months are zero-based...\r\n let year = Number(dateparts[2]);\r\n let hour = 0;\r\n let minutes = 0;\r\n if (timestring) {\r\n let timeparts = timestring.split(\":\");\r\n hour = Number(timeparts[0]);\r\n minutes = Number(timeparts[1]);\r\n }\r\n return new Date(year, month, day, hour, minutes);\r\n }\r\n static copyTextToClipboard(s) {\r\n let fallbackCopyTextToClipboard = (s) => {\r\n let textArea = document.createElement(\"textarea\");\r\n textArea.value = s;\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n let success = false;\r\n try {\r\n success = document.execCommand('copy');\r\n }\r\n catch (err) {\r\n console.error('Fallback: Oops, unable to copy', err);\r\n }\r\n document.body.removeChild(textArea);\r\n return success;\r\n };\r\n let nativeCopyTextToClipboard = (s) => {\r\n if (!navigator[\"clipboard\"]) {\r\n let success = fallbackCopyTextToClipboard(s);\r\n if (success) {\r\n return Promise.resolve();\r\n }\r\n else {\r\n return Promise.reject(\"Unable to copy text to clipboard\");\r\n }\r\n }\r\n else {\r\n return new Promise((resolve, reject) => {\r\n navigator[\"clipboard\"].writeText(s).then(function () {\r\n resolve();\r\n }, function (err) {\r\n reject(\"Unable to copy text to clipboard\");\r\n });\r\n });\r\n }\r\n };\r\n return nativeCopyTextToClipboard(s);\r\n }\r\n}\r\n//# sourceMappingURL=SPUtil.jsx.map","//Wrapper class for the SharePoint PreSaveAction functionality.\r\n//This class lets you register multiple actions for PreSaveAction which will be queued,\r\n//Furthermore, it can handle Promises and execute a callback function\r\nimport { SPUtil, LogMessage, LogSeverityEnum } from \"../index\";\r\nexport class SPPreSaveAction {\r\n constructor() {\r\n //All actions to be executed in the PreSaveAction call\r\n this.preSaveActionQueue = new Array();\r\n this.attachPreSaveAction();\r\n }\r\n attachPreSaveAction() {\r\n //If there already was a PreSaveAction defined, add it to the top of our list\r\n if (typeof (PreSaveAction) == \"function\") {\r\n this.preSaveActionQueue.push(PreSaveAction);\r\n }\r\n //Register this function to be the global PreSaveAction\r\n window['PreSaveAction'] = () => {\r\n this.internalPreSaveAction();\r\n };\r\n }\r\n //This is the main method that SharePoint will call just before saving the item\r\n //Returning false will stop the save action\r\n internalPreSaveAction() {\r\n //If there was no callback defined, create our own callback which will imitate the original event\r\n if (this._callback == null) {\r\n let orignalOnclickCall = (window.event.srcElement || window.event.target).onclick;\r\n let orignalOnclickTargetId = (window.event.srcElement || window.event.target).id;\r\n this._callback = () => {\r\n this._callback = null;\r\n SPUtil.strictDoPostback(() => {\r\n orignalOnclickCall.apply(document.getElementById(orignalOnclickTargetId));\r\n });\r\n };\r\n }\r\n //Execute all actions in the preSaveActionQueue, it the action returns a Promise add it to our lists of Promises we want to wait for\r\n let promises = new Array();\r\n this.preSaveActionQueue.forEach(queuedFunction => {\r\n var returnVal = queuedFunction();\r\n if (returnVal instanceof Promise) {\r\n promises.push(returnVal);\r\n }\r\n });\r\n //If we executed at least one action which returns a promise, we stop the save action (by returning false)\r\n //and wait for all promise to complete. Then we execute the callback, either a custom one or the default\r\n if (promises.length > 0) {\r\n Promise.all(promises).then(() => {\r\n window['PreSaveAction'] = null;\r\n this._callback();\r\n }).catch(reason => {\r\n LogMessage.Log(reason, this, LogSeverityEnum.Error);\r\n });\r\n return false;\r\n }\r\n else {\r\n //No promises, clear the PreSaveAction and proceed\r\n window['PreSaveAction'] = null;\r\n this._callback();\r\n return true;\r\n }\r\n }\r\n //Returns the Singleton instance of this class\r\n static getInstance() {\r\n if (SPPreSaveAction.instance == null) {\r\n SPPreSaveAction.instance = new SPPreSaveAction();\r\n }\r\n return SPPreSaveAction.instance;\r\n }\r\n //Gets the custom callback function\r\n get callback() {\r\n return this._callback;\r\n }\r\n //Sets the custom callback function\r\n set callback(callback) {\r\n this._callback = callback;\r\n if (window['PreSaveAction'] == null) {\r\n this.attachPreSaveAction();\r\n }\r\n }\r\n //Register a new action to be executed in the PreSaveAction queue\r\n //Actions will be executed in the order in which they were added\r\n registerPreSaveAction(action) {\r\n this.preSaveActionQueue.push(action);\r\n }\r\n}\r\n//# sourceMappingURL=SPPreSaveAction.jsx.map","export class SPRibbonControl {\r\n constructor() {\r\n this._ribbon = null;\r\n this._ribbonTabId = \"\";\r\n this._actionListToExecuteAfterRibbonLoaded = new Array();\r\n var pageManager = SP.Ribbon.PageManager.get_instance();\r\n let afterRibbonLoadedAction = () => {\r\n this._ribbon = pageManager.get_ribbon();\r\n if (this._ribbon && this._ribbonTabId != \"\") {\r\n this._ribbon.selectTabById(this._ribbonTabId);\r\n }\r\n while (this._actionListToExecuteAfterRibbonLoaded.length > 0) {\r\n let action = this._actionListToExecuteAfterRibbonLoaded.shift();\r\n action();\r\n }\r\n };\r\n pageManager.add_ribbonInited(() => {\r\n afterRibbonLoadedAction();\r\n });\r\n try {\r\n this._ribbon = pageManager.get_ribbon();\r\n if (this._ribbon != null) {\r\n afterRibbonLoadedAction();\r\n }\r\n }\r\n catch (e) {\r\n //Ribbon is not yet available on the page\r\n }\r\n if (!this._ribbon) {\r\n try {\r\n if (typeof (_ribbonStartInit) == \"function\") { }\r\n if (!window._ribbon.initialTabId) {\r\n _ribbonStartInit(\"Ribbon.Read\", false, null);\r\n }\r\n else {\r\n _ribbonStartInit(window._ribbon.initialTabId, false, null);\r\n }\r\n }\r\n catch (e) {\r\n //Ribbon could not be initialized\r\n }\r\n }\r\n else {\r\n //Do custom stuff\r\n }\r\n }\r\n executeOrDelayUntilRibbonLoaded(action) {\r\n if (this._ribbon != null) {\r\n action();\r\n }\r\n else {\r\n this._actionListToExecuteAfterRibbonLoaded.push(action);\r\n }\r\n }\r\n selectTabById(tabId) {\r\n this._ribbonTabId = tabId;\r\n if (this._ribbon != null) {\r\n this._ribbon.selectTabById(this._ribbonTabId);\r\n }\r\n }\r\n Hide() {\r\n this._ribbon.get_element().style.display = \"none\";\r\n document.getElementById(\"s4-ribbonrow\").style.display = \"none\";\r\n }\r\n Show() {\r\n this._ribbon.get_element().style.display = \"\";\r\n document.getElementById(\"s4-ribbonrow\").style.display = \"\";\r\n }\r\n addGroupToTab(tabTitle, groupDefinition) {\r\n let tabObject = this._ribbon.getChildByTitle(tabTitle);\r\n if (tabObject != null) {\r\n tabObject.addChild(groupDefinition);\r\n this._ribbon.refresh();\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n //The SharePoint ItemId\r\n get spRibbon() {\r\n return this._ribbon;\r\n }\r\n //Returns the Singleton instance of this class\r\n static getInstance() {\r\n return new Promise((resolve) => {\r\n SP.SOD.executeOrDelayUntilScriptLoaded(() => {\r\n if (SPRibbonControl._instance == null) {\r\n SPRibbonControl._instance = new SPRibbonControl();\r\n }\r\n resolve(SPRibbonControl._instance);\r\n }, \"sp.ribbon.js\");\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=SPRibbonControl.jsx.map","export class FormValidator {\r\n static validateCurrency(value, allowEmpty) {\r\n //let currencyRegex: RegExp = /^([^\\d\\s]{1,}\\s?[+-]?)(([1-9]\\d{0,2}(.\\d{3 })*)|0)+(\\,\\d{1,2})?$/\r\n let currencyRegex = /^(?:[\\D]\\s*){0,5}(?:(?:\\d{0,3}(?:[,. ]\\d{0,3})*[,. ])+\\d{3}|\\d+)(?:[,. ]\\d*)?(?:\\s*\\$)?$/;\r\n return FormValidator.validateUsingRegex(value, allowEmpty, currencyRegex, (\"'\" + value + \"' is not a valid amount\"));\r\n }\r\n static isEmailAddress(value, allowEmpty) {\r\n let isValid;\r\n /*\r\n Proposed regular expression:\r\n\r\n //^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n */\r\n let emailRegex = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;\r\n value = \"\" + value.toLocaleLowerCase();\r\n if (!allowEmpty && value.trim() == \"\") {\r\n isValid = false;\r\n }\r\n else if (allowEmpty && value.trim() == \"\") {\r\n isValid = true;\r\n }\r\n else {\r\n isValid = emailRegex.test(value);\r\n }\r\n return isValid;\r\n }\r\n static validateEmailAddress(value, allowEmpty) {\r\n let emailRegex = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;\r\n return FormValidator.validateUsingRegex(value.toLocaleLowerCase(), allowEmpty, emailRegex, (\"'\" + value + \"' is not a valid e-mail address\"));\r\n }\r\n static validateIBAN(value, allowEmpty) {\r\n let ibanRegex = /^[A-Za-z]{2}[0-9]{2}([ ]?[0-9]{4}){4}([ ]?[0-9]{1,2})?$/;\r\n return FormValidator.validateUsingRegex(value, allowEmpty, ibanRegex, (\"'\" + value + \"' is not a valid IBAN\"));\r\n }\r\n static isPhoneNumber(value, allowEmpty) {\r\n let isValid;\r\n let phoneNumberRegex = /^\\+\\d+$/;\r\n if (value == null || value.trim() == \"\") {\r\n isValid = allowEmpty;\r\n }\r\n else {\r\n value = value.toLocaleLowerCase();\r\n isValid = phoneNumberRegex.test(value);\r\n }\r\n return isValid;\r\n }\r\n static validatePhoneNumber(value, allowEmpty) {\r\n let phoneNumberRegex = /^\\+\\d+$/;\r\n return FormValidator.validateUsingRegex(value, allowEmpty, phoneNumberRegex, (\"'\" + value + \"' is not a valid phone number\"));\r\n }\r\n static validateUsingRegex(value, allowEmpty, expression, errorMessage) {\r\n let isValid;\r\n //value = \"\" + value;\r\n if (value == null || value.trim() == \"\") {\r\n isValid = allowEmpty;\r\n }\r\n else {\r\n isValid = expression.test(value);\r\n }\r\n if (!isValid) {\r\n return Promise.resolve(errorMessage);\r\n }\r\n else {\r\n return Promise.resolve(\"\");\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=FormValidator.jsx.map","export class LocalStorageCache {\r\n static tryGetFromCache(cacheKey, constructorMethod, maxAge) {\r\n if (!cacheKey.startsWith(LocalStorageCache.GLOBAL_CACHE_KEY)) {\r\n cacheKey = LocalStorageCache.GLOBAL_CACHE_KEY + cacheKey;\r\n }\r\n if (_spPageContextInfo.userId) {\r\n cacheKey = _spPageContextInfo.userId + \":\" + cacheKey;\r\n }\r\n else {\r\n cacheKey = \"?:\" + cacheKey;\r\n }\r\n if (typeof (Storage) === \"undefined\") {\r\n return null;\r\n }\r\n else {\r\n let cachedContent = localStorage.getItem(cacheKey);\r\n if (cachedContent) {\r\n let cachedObject = JSON.parse(cachedContent);\r\n if (maxAge != null) {\r\n let expiration = new Date(new Date(cachedObject.cacheTimestamp).getTime() + maxAge.getTime());\r\n if (expiration.getTime() < Date.now()) {\r\n return null;\r\n }\r\n }\r\n let newObject;\r\n if (constructorMethod) {\r\n try {\r\n newObject = constructorMethod(cachedObject.obj);\r\n }\r\n catch (e) {\r\n console.error(\"Error: \", e);\r\n return null;\r\n }\r\n }\r\n else {\r\n newObject = cachedObject.obj;\r\n }\r\n return newObject;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n static tryStoreInCache(cacheKey, obj) {\r\n if (!cacheKey.startsWith(LocalStorageCache.GLOBAL_CACHE_KEY)) {\r\n cacheKey = LocalStorageCache.GLOBAL_CACHE_KEY + cacheKey;\r\n }\r\n if (_spPageContextInfo.userId) {\r\n cacheKey = _spPageContextInfo.userId + \":\" + cacheKey;\r\n }\r\n else {\r\n cacheKey = \"?:\" + cacheKey;\r\n }\r\n if (typeof (Storage) !== \"undefined\") {\r\n let objectToCache = {\r\n cacheTimestamp: new Date(Date.now()),\r\n obj: obj\r\n };\r\n localStorage.setItem(cacheKey, JSON.stringify(objectToCache));\r\n }\r\n }\r\n}\r\nLocalStorageCache.GLOBAL_CACHE_KEY = \"NATO_NAS_0.1_\";\r\n//# sourceMappingURL=LocalStorageCache.jsx.map","export { ApprovalEnum } from \"./Classes/ApprovalEnum\";\r\nexport { DivisionEnum } from \"./Classes/DivisionEnum\";\r\nexport { BaseGrant } from \"./Classes/BaseGrant\";\r\nexport { Grant } from \"./Classes/Grant\";\r\nexport { GrantStatus } from \"./Classes/GrantStatus\";\r\nexport { ApplicationStatus } from \"./Classes/ApplicationStatus\";\r\nexport { PublishableGrant } from \"./Classes/PublishableGrant\";\r\nexport { PublishedGrantData } from \"./Classes/PublishedGrantData\";\r\nexport { PublishedEventData } from \"./Classes/PublishedEventData\";\r\nexport { ListNames } from \"./Classes/ListNames\";\r\nexport { User } from \"./Classes/User\";\r\nexport { Attachment } from \"./Classes/Attachment\";\r\nexport { LogMessage } from \"./Classes/LogMessage\";\r\nexport { LogSeverityEnum } from \"./Classes/LogSeverityEnum\";\r\nexport { Proposal } from \"./Classes/Proposal\";\r\nexport { SpecialCall } from \"./Classes/SpecialCall\";\r\nexport { PotentialStudy } from \"./Classes/PotentialStudy\";\r\nexport { ExploratoryGroupRegistration } from \"./Classes/ExploratoryGroupRegistration\";\r\nexport { PlenaryMeetingRegistration } from \"./Classes/PlenaryMeetingRegistration\";\r\nexport { SeminarRegistration } from \"./Classes/SeminarRegistration\";\r\nexport { Application } from \"./Classes/Application\";\r\nexport { ApplicantDetails } from \"./Classes/ApplicantDetails\";\r\nexport { ProjectDetails } from \"./Classes/ProjectDetails\";\r\nexport { Budget } from \"./Classes/Budget\";\r\nexport { ApplicationAttachments } from \"./Classes/ApplicationAttachments\";\r\nexport { DocumentGenerator } from \"./Classes/DocumentGenerator\";\r\nexport { DocumentGeneratorRibbon } from \"./Classes/DocumentGeneratorRibbon\";\r\nexport { ManageGrantsRibbon } from \"./Classes/ManageGrantsRibbon\";\r\nexport { AgreementsDetails } from \"./Classes/AgreementsDetails\";\r\nexport { BudgetDetails } from \"./Classes/BudgetDetails\";\r\nexport { ProjectTimeline } from \"./Classes/ProjectTimeline\";\r\nexport { AdditionalQuestions } from \"./Classes/AdditionalQuestions\";\r\nexport { ManageApplicationsRibbon } from \"./Classes/ManageApplicationsRibbon\";\r\nexport { ApplicationAsyncDefaultValues } from \"./Classes/ApplicationAsyncDefaultValues\";\r\nexport { Nationalities } from \"./Classes/Nationalities\";\r\nexport { Nations } from \"./Classes/Nations\";\r\nexport { Titles } from \"./Classes/Titles\";\r\nexport { LinkedApproval } from \"./Classes/LinkedApproval\";\r\nexport { ChangeRequest } from \"./Classes/ChangeRequest\";\r\nexport { ApplicationFieldCollections } from \"./Classes/ApplicationFieldCollections\";\r\nexport { ReleasableTo } from \"./Classes/ReleasableTo\";\r\nexport { InternalApplicationStatusEnum } from \"./Classes/InternalApplicationStatusEnum\";\r\nexport { KeyPriority } from \"./Classes/KeyPriority\";\r\nexport { WorkflowManager } from \"./Classes/WorkflowManager\";\r\nexport { ApprovalDialogComponent } from \"./Components/ApprovalDialogComponent\";\r\nexport { ConfirmDialogComponent } from \"./Components/ConfirmDialogComponent\";\r\nexport { PublishedGrantComponent } from \"./Components/PublishedGrantComponent\";\r\nexport { GrantDetailsComponent } from \"./Components/GrantDetailsComponent\";\r\nexport { GrantApplicationWizardComponent } from \"./Components/GrantApplicationWizardComponent\";\r\nexport { ErrorMessageComponent } from \"./Components/ErrorMessageComponent\";\r\nexport { EventRegistrationComponent } from \"./Components/EventRegistrationComponent\";\r\nexport { SetKeyPrioritiesComponent } from \"./Components/SetKeyPrioritiesComponent\";\r\nexport { ChangeAdvisorsComponent } from \"./Components/ChangeAdvisorsComponent\";\r\nexport { AssignSpecialistComponent } from \"./Components/AssignSpecialistComponent\";\r\nexport { ReviewCommentsComponent } from \"./Components/ReviewCommentsComponent\";\r\nexport { ReviewEvaluationsComponent } from \"./Components/ReviewEvaluationsComponent\";\r\nexport { ReviewSummaryComponent } from \"./Components/ReviewSummaryComponent\";\r\nexport { AssignReviewersComponent } from \"./Components/AssignReviewersComponent\";\r\nexport { RequestMoreInformationComponent } from \"./Components/RequestMoreInformationComponent\";\r\nexport { NotifyBudgetOfficersComponent } from \"./Components/NotifyBudgetOfficersComponent\";\r\nexport { StudyOrderGroupComponent } from \"./Components/StudyOrderGroupComponent\";\r\nexport { Wizard1ApplicantComponent } from \"./Components/Wizard1ApplicantComponent\";\r\nexport { Wizard2ProjectDetailsComponent } from \"./Components/Wizard2ProjectDetailsComponent\";\r\nexport { Wizard3BudgetComponent } from \"./Components/Wizard3BudgetComponent\";\r\nexport { Wizard4AudienceComponent } from \"./Components/Wizard4AudienceComponent\";\r\nexport { Wizard5ProjectStructureTimelineComponent } from \"./Components/Wizard5ProjectStructureTimelineComponent\";\r\nexport { Wizard6PreviousGrantsComponent } from \"./Components/Wizard6PreviousGrantsComponent\";\r\nexport { Wizard7AttachmentsComponent } from \"./Components/Wizard7AttachmentsComponent\";\r\nexport { Wizard9FinancialRulesComponent } from \"./Components/Wizard9FinancialRulesComponent\";\r\nexport { Wizard10OverviewComponent } from \"./Components/Wizard10OverviewComponent\";\r\nexport { AmmendApplicationComponent } from \"./Components/AmmendApplicationComponent\";\r\nexport { ApplicationApprovalHistoryComponent } from './Components/ApplicationApprovalHistoryComponent';\r\nexport { InvitationDialogComponent } from './Components/InvitationDialogComponent';\r\nexport { SubmitDialogComponent } from './Components/SubmitDialogComponent';\r\nexport { ChangeRequestComponent } from './Components/ChangeRequestComponent';\r\nexport { ChangeRequestHistoryComponent } from './Components/ChangeRequestHistoryComponent';\r\nexport { AnsweredQuestionsComponent } from './Components/AnsweredQuestionsComponent';\r\nexport { StudyGroupSubSiteCreatorComponent } from './Components/StudyGroupSubSiteCreatorComponent';\r\nexport { StudyGroupDocumentCreatorComponent } from './Components/StudyGroupDocumentCreatorComponent';\r\nexport { ExchangeRateComponent } from './Components/ExchangeRateComponent';\r\nexport { KeyPrioritiesSelectorComponent } from './Components/KeyPrioritiesSelectorComponent';\r\nexport { DivisionFieldTemplate } from './DisplayTemplates/DivisionFieldTemplate';\r\nexport { ContentTypeFieldTemplate } from './DisplayTemplates/ContentTypeFieldTemplate';\r\nexport { ReadOnlyFieldTemplate } from './DisplayTemplates/ReadOnlyFieldTemplate';\r\nexport { ApprovalFieldTemplate } from './DisplayTemplates/ApprovalFieldTemplate';\r\nexport { CodeFieldTemplate } from './DisplayTemplates/CodeFieldTemplate';\r\nexport { SignatureFieldTemplate } from './DisplayTemplates/SignatureFieldTemplate';\r\nexport { AutoNumberFieldTemplate } from './DisplayTemplates/AutoNumberFieldTemplate';\r\nexport { BeneficiaryRequestFieldTemplate } from './DisplayTemplates/BeneficiaryRequestFieldTemplate';\r\nexport { SharedWithFieldTemplate } from './DisplayTemplates/SharedWithFieldTemplate';\r\nexport { AssignedHeadOfSectionFieldTemplate } from './DisplayTemplates/AssignedHeadOfSectionFieldTemplate';\r\nexport { ApplicationApprovalStatusFieldTemplate } from './DisplayTemplates/ApplicationApprovalStatusFieldTemplate';\r\nexport { BaseGrantRendering } from \"./RenderingDefinitions/BaseGrantRendering\";\r\nexport { PublishedGrantRendering } from \"./RenderingDefinitions/PublishedGrantRendering\";\r\nexport { MyApplicationsRendering } from \"./RenderingDefinitions/MyApplicationsRendering\";\r\nexport { SharePointRestService } from './Services/SharePointRestService';\r\nexport { SPUtil } from './Services/SPUtil';\r\nexport { SPPreSaveAction } from './Services/SPPreSaveAction';\r\nexport { SPRibbonControl } from './Services/SPRibbonControl';\r\nexport { FormValidator } from './Services/FormValidator';\r\nexport { LocalStorageCache } from './Services/LocalStorageCache';\r\n//# sourceMappingURL=index.jsx.map","import \"babel-polyfill\";\r\nimport * as ReactDOM from 'react-dom';\r\nimport { BaseGrantRendering, PotentialStudy, LogMessage, LogSeverityEnum, SPRibbonControl, DocumentGeneratorRibbon, ManageGrantsRibbon, InvitationDialogComponent, StudyGroupSubSiteCreatorComponent, StudyGroupDocumentCreatorComponent, SPUtil } from \"../index\";\r\nimport \"es6-object-assign/auto\";\r\nimport \"whatwg-fetch\";\r\nimport \"element-closest\";\r\nclass DIGrantRendering extends BaseGrantRendering {\r\n constructor() {\r\n super();\r\n LogMessage.Log(\"Initializing DI Grant Rendering logic\", this, LogSeverityEnum.Verbose);\r\n }\r\n toString() {\r\n return \"DIGrantRendering\";\r\n }\r\n onPostRender(ctx) {\r\n super.onPostRender(ctx);\r\n if (this._potentialStudy == null && super.grant != null && super.grant.spItem != null) {\r\n LogMessage.Log(\"Object 'PotentialStudy' loaded from context\", this, LogSeverityEnum.Verbose);\r\n this._potentialStudy = new PotentialStudy(super.grant.spItem);\r\n }\r\n if (ctx.ControlMode == SPClientTemplates.ClientControlMode.EditForm || ctx.ControlMode == SPClientTemplates.ClientControlMode.NewForm) {\r\n //We hide the 'natoNIAGEvents' and the 'natoNIAGSocialEvents' when the user selects \"Exploratory Group\"\r\n this.setNiagEventTypeListener();\r\n }\r\n super.showPublishedGrantData();\r\n }\r\n setNiagEventTypeListener() {\r\n //Search for the SELECT-element\r\n let niagEventTypeDropdown = document.querySelector(\"SELECT[id^='natoNIAGEventType']\");\r\n if (niagEventTypeDropdown != null) {\r\n //Make sure we only add the vent once\r\n if (niagEventTypeDropdown.getAttribute(\"nato-event-added\") == null) {\r\n //Hook the onchange eventlistener\r\n niagEventTypeDropdown.addEventListener(\"change\", (e) => {\r\n //Determine the display style (none or \"\")\r\n let displayStyle = \"none\";\r\n if (e.srcElement.value.toLocaleLowerCase() == \"plenary meeting\") {\r\n displayStyle = \"\";\r\n }\r\n //Show or hide the rows\r\n document.querySelector(\"TEXTAREA[id^='natoNIAGEvents']\").closest(\"TR\").style.display = displayStyle;\r\n document.querySelector(\"TEXTAREA[id^='natoNIAGSocialEvents']\").closest(\"TR\").style.display = displayStyle;\r\n });\r\n let queryStringParam = SPUtil.parseQuerystring(location.search);\r\n let source = queryStringParam[\"Source\"];\r\n if (source) {\r\n let view = decodeURIComponent(source.split(\"/\").slice(-1)[0]);\r\n if (view.toLocaleLowerCase() == \"Plenary Meetings.aspx\".toLocaleLowerCase()) {\r\n niagEventTypeDropdown.querySelector(\"OPTION[value='Plenary Meeting']\").selected = true;\r\n }\r\n else if (view.toLocaleLowerCase() == \"Exploratary Groups.aspx\".toLocaleLowerCase()) {\r\n niagEventTypeDropdown.querySelector(\"OPTION[value='Exploratory Group']\").selected = true;\r\n }\r\n else if (view.toLocaleLowerCase() == \"SeminarsWorkshopsRoundtables.aspx\".toLocaleLowerCase()) {\r\n niagEventTypeDropdown.querySelector(\"OPTION[value='Seminar/Workshop/Roundtable']\").selected = true;\r\n }\r\n }\r\n //Add a specific attribute to ensure we only add the listener once\r\n niagEventTypeDropdown.setAttribute(\"nato-event-added\", \"true\");\r\n }\r\n //If all fields are ready and loaded on the DOM, fire the event to make sure the initial configuration is okay\r\n let natoNiagEvents = document.querySelector(\"TEXTAREA[id^='natoNIAGEvents']\");\r\n let natoSocialNiagEvents = document.querySelector(\"TEXTAREA[id^='natoNIAGSocialEvents']\");\r\n if (niagEventTypeDropdown != null && natoNiagEvents != null && natoSocialNiagEvents != null) {\r\n niagEventTypeDropdown.dispatchEvent(new CustomEvent(\"change\"));\r\n }\r\n }\r\n let additionalQuestionsCandidates = document.querySelector(\"SELECT[id^='natoAdditionalQuestions']\");\r\n if (additionalQuestionsCandidates) {\r\n let renderFilterDropDown = () => {\r\n if (Object.keys(additionalQuestionsCandidates).length == 0) {\r\n setTimeout(() => {\r\n renderFilterDropDown();\r\n }, 1000);\r\n }\r\n else if (additionalQuestionsCandidates.getAttribute(\"nato-filter-added\") == null) {\r\n let startingLetters = new Set(Object.keys(additionalQuestionsCandidates).map(index => {\r\n return additionalQuestionsCandidates[index].text.slice(0, 1).toUpperCase();\r\n }).sort((a, b) => { return a.localeCompare(b); }));\r\n let parentElement = additionalQuestionsCandidates.parentElement;\r\n while (parentElement.tagName.toLocaleLowerCase() != \"span\") {\r\n parentElement = parentElement.parentElement;\r\n }\r\n let captionSpan = document.createElement(\"SPAN\");\r\n captionSpan.innerText = \"Filter: \";\r\n let firstLetterSelect = document.createElement(\"SELECT\");\r\n firstLetterSelect.style.width = \"250px\";\r\n firstLetterSelect.style.marginBottom = \"5px\";\r\n parentElement.insertAdjacentElement('afterbegin', firstLetterSelect);\r\n parentElement.insertAdjacentElement('afterbegin', captionSpan);\r\n let blankOption = document.createElement(\"OPTION\");\r\n blankOption.text = \"\";\r\n blankOption.value = \"\";\r\n firstLetterSelect.options.add(blankOption);\r\n startingLetters.forEach(letter => {\r\n let option = document.createElement(\"OPTION\");\r\n option.text = letter;\r\n option.value = letter;\r\n firstLetterSelect.options.add(option);\r\n });\r\n firstLetterSelect.onchange = (ev => {\r\n let selectedLetter = firstLetterSelect.selectedOptions.length > 0 ? firstLetterSelect.selectedOptions[0].value : '';\r\n for (let i = 0; i < additionalQuestionsCandidates.options.length; i++) {\r\n additionalQuestionsCandidates.options[i].style.display = additionalQuestionsCandidates.options[i].text.toLocaleUpperCase().startsWith(selectedLetter) ?\r\n \"\" : \"none\";\r\n }\r\n });\r\n additionalQuestionsCandidates.setAttribute(\"nato-filter-added\", \"true\");\r\n }\r\n };\r\n renderFilterDropDown();\r\n }\r\n }\r\n Publish(listGuidStr, itemIdStr) {\r\n let itemId = Number(itemIdStr);\r\n let listGuid = new SP.Guid(listGuidStr);\r\n this._potentialStudy.Publish(itemId, listGuid);\r\n }\r\n PublishEnabled(listId, itemId) {\r\n this.updatePotentialStudyStatus();\r\n return !this._potentialStudy.isPublished;\r\n }\r\n updatePotentialStudyStatus() {\r\n let statusField = this.componentsPerField[\"natoGrantStatus\"];\r\n statusField.value = this._potentialStudy.status;\r\n }\r\n createStudyOrderSubsite() {\r\n let containerId = \"nato-sp-nas-studyordergroup\";\r\n let container = document.getElementById(containerId);\r\n if (!container) {\r\n container = document.createElement('DIV');\r\n container.id = containerId;\r\n let sogContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n sogContent.appendChild(container);\r\n }\r\n SP.SOD.executeFunc(\"sp.js\", \"SP.ClientContext\", () => {\r\n ReactDOM.render( { }} onClose={() => { container.parentElement.removeChild(container); }}/>, document.getElementById(containerId));\r\n });\r\n }\r\n generateStudyOrderAnnex() {\r\n let containerId = \"nato-sp-nas-studyordergrouptemplates\";\r\n let container = document.getElementById(containerId);\r\n if (!container) {\r\n container = document.createElement('DIV');\r\n container.id = containerId;\r\n let sogContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n sogContent.appendChild(container);\r\n }\r\n SP.SOD.executeFunc(\"sp.js\", \"SP.ClientContext\", () => {\r\n ReactDOM.render( { }} onClose={() => { container.parentElement.removeChild(container); }}/>, document.getElementById(containerId));\r\n });\r\n }\r\n showInvitationDialog() {\r\n let containerId = \"nato-sp-nas-invitationdialog\";\r\n let container = document.getElementById(containerId);\r\n if (!container) {\r\n container = document.createElement('DIV');\r\n container.id = containerId;\r\n let sogContent = document.getElementById(\"DeltaPlaceHolderMain\");\r\n sogContent.appendChild(container);\r\n }\r\n SP.SOD.executeFunc(\"sp.js\", \"SP.ClientContext\", () => {\r\n ReactDOM.render( { container.parentElement.removeChild(container); }}/>, document.getElementById(containerId));\r\n });\r\n }\r\n}\r\n//Wait for the SPClientTemplate object to be available\r\nExecuteOrDelayUntilScriptLoaded(() => {\r\n SP.SOD.registerSod('clienttemplates.js', '\\u002f_layouts\\u002f15\\u002fclienttemplates.js');\r\n SP.SOD.executeFunc('clienttemplates.js', 'SPClientTemplates', function () {\r\n let g_MinimalDownload = window['g_MinimalDownload'];\r\n let asyncDeltaManager = window['asyncDeltaManager'];\r\n let initialize = () => {\r\n let grantRendering = new DIGrantRendering();\r\n grantRendering.RegisterRenderingTemplates();\r\n window['GrantRendering'] = grantRendering;\r\n SPRibbonControl.getInstance().then((ribbon) => {\r\n ribbon.selectTabById(\"CustomAction.DiRibbon.Tab\");\r\n let manageGrantsRibbonGroup = new ManageGrantsRibbon();\r\n let documentGeneratorRibbonGroup = new DocumentGeneratorRibbon();\r\n });\r\n };\r\n //Test if MDS is enabled for this site\r\n if (typeof g_MinimalDownload != 'undefined' && g_MinimalDownload && (window.location.pathname.toLowerCase()).endsWith(\"/_layouts/15/start.aspx\") && typeof asyncDeltaManager != 'undefined') {\r\n //MDS is enabled, so instruct it to load this JavaScript file on every page, and call the JsLinkExample.Register function once the file has been loaded\r\n RegisterModuleInit(_spPageContextInfo.siteServerRelativeUrl + '/SiteAssets/Scripts/Components/NATO.SP.PreAwardPortal.ESC.Init.js', function () {\r\n initialize();\r\n });\r\n }\r\n initialize();\r\n });\r\n}, \"NATO.SP.PreAwardPortal.DI.Init.js\");\r\n//# sourceMappingURL=DIGrantRendering.jsx.map","import \"babel-polyfill\";\r\nimport { BaseGrantRendering, Proposal, LinkedApproval, ApprovalEnum, LogMessage, LogSeverityEnum, SPRibbonControl, ManageGrantsRibbon, DocumentGeneratorRibbon, ManageApplicationsRibbon, AnsweredQuestionsComponent, DivisionEnum } from \"../index\";\r\nimport \"es6-object-assign/auto\";\r\nimport \"whatwg-fetch\";\r\nclass PDDGrantRendering extends BaseGrantRendering {\r\n constructor() {\r\n super();\r\n this._proposal = null;\r\n this._linkedApproval = null;\r\n this._headOfSectionApprovalInitialized = false;\r\n this._questionsChecked = false;\r\n LogMessage.Log(\"Initializing PDD Grant Rendering logic\", this, LogSeverityEnum.Verbose);\r\n }\r\n toString() {\r\n return \"PDDGrantRendering\";\r\n }\r\n onPostRender(ctx) {\r\n super.onPostRender(ctx);\r\n if (this._proposal == null && super.grant != null && super.grant.spItem != null) {\r\n this._proposal = new Proposal(super.grant.spItem);\r\n this._proposal.id = super.grant.id;\r\n this._proposal.url = super.grant.url;\r\n }\r\n super.showPublishedGrantData();\r\n //If the user performs the \"Head of Section\"-approval, and that same user has also \"Planning Officer\"-approval permissions\r\n //The \"Planning Officer\"-approval should also immediately be approved\r\n //So using this class we can link 2 approval actions\r\n if (this._linkedApproval == null) {\r\n let headOfSectionApprovalField = this.componentsPerField[\"natoHeadOfSectionApproval\"];\r\n let planningOfficerApprovalField = this.componentsPerField[\"natoPlanningOfficerApproval\"];\r\n if (headOfSectionApprovalField && planningOfficerApprovalField) {\r\n this._linkedApproval = new LinkedApproval(headOfSectionApprovalField, planningOfficerApprovalField);\r\n }\r\n }\r\n if (!this._headOfSectionApprovalInitialized) {\r\n let headOfSectionApprovalField = this.componentsPerField[\"natoHeadOfSectionApproval\"];\r\n let assignedHeadOfSectionField = this.componentsPerField[\"natoAssignedHeadOfSection\"];\r\n if (headOfSectionApprovalField && assignedHeadOfSectionField) {\r\n this._headOfSectionApprovalInitialized = true;\r\n assignedHeadOfSectionField.onChange = (selectedUser) => {\r\n setTimeout(() => {\r\n RefreshCommandUI();\r\n }, 50);\r\n };\r\n }\r\n }\r\n // Show the unanswered questions notification if necessary\r\n if (!this._questionsChecked) {\r\n this._questionsChecked = true;\r\n SP.SOD.executeFunc(\"sp.js\", \"SP.ClientContext\", () => {\r\n AnsweredQuestionsComponent.ShowUnansweredQuestionsNotificationBanner(DivisionEnum.PDD);\r\n });\r\n }\r\n }\r\n ApproveHeadOfSection(listId, itemId) {\r\n let approvalField = this.componentsPerField[\"natoHeadOfSectionApproval\"];\r\n approvalField.showApprovalDialog().then(updated => {\r\n if (updated) {\r\n this.updateProposalStatus();\r\n RefreshCommandUI();\r\n }\r\n });\r\n }\r\n ApproveHeadOfSectionEnabled(listId, itemId) {\r\n this.updateProposalStatus();\r\n let approvalField = this.componentsPerField[\"natoHeadOfSectionApproval\"];\r\n let assignedHeadOfSectionField = this.componentsPerField[\"natoAssignedHeadOfSection\"];\r\n let isEnabled = !this._proposal.isPublished && approvalField.state.hasPermissions;\r\n isEnabled = isEnabled && (assignedHeadOfSectionField.selectedUserId == _spPageContextInfo.userId);\r\n approvalField.enabled = isEnabled;\r\n return isEnabled;\r\n }\r\n ApprovePlanningOfficer(listId, itemId) {\r\n let approvalField = this.componentsPerField[\"natoPlanningOfficerApproval\"];\r\n approvalField.showApprovalDialog().then(updated => {\r\n if (updated) {\r\n this.updateProposalStatus();\r\n RefreshCommandUI();\r\n }\r\n });\r\n }\r\n ApprovePlanningOfficerEnabled(listId, itemId) {\r\n this.updateProposalStatus();\r\n let approvalField = this.componentsPerField[\"natoPlanningOfficerApproval\"];\r\n let isEnabled = this._proposal.headOfSectionApproval == ApprovalEnum.Approved && !this._proposal.isPublished && approvalField.state.hasPermissions;\r\n approvalField.enabled = isEnabled;\r\n return isEnabled;\r\n }\r\n ApproveBudget(listId, itemId) {\r\n //let approvalField: ApprovalFieldTemplate = this.componentsPerField[\"natoBudgetApproval\"] as ApprovalFieldTemplate\r\n //approvalField.showApprovalDialog();\r\n }\r\n ApproveBudgetEnabled(listId, itemId) {\r\n return false;\r\n //this.updateProposalStatus();\r\n //let approvalField: ApprovalFieldTemplate = this.componentsPerField[\"natoBudgetApproval\"] as ApprovalFieldTemplate\r\n //let isEnabled = this._proposal.headOfSectionApproval == ApprovalEnum.Approved && this._proposal.planningOfficerApproval == ApprovalEnum.Approved && this._proposal.isPublished && approvalField.state.hasPermissions\r\n //approvalField.enabled = isEnabled;\r\n //return isEnabled;\r\n }\r\n Publish(listGuidStr, itemIdStr) {\r\n let itemId = Number(itemIdStr);\r\n let listGuid = new SP.Guid(listGuidStr);\r\n this._proposal.Publish(itemId, listGuid);\r\n }\r\n PublishEnabled(listId, itemId) {\r\n this.updateProposalStatus();\r\n return !this._proposal.isPublished && this._proposal.headOfSectionApproval == ApprovalEnum.Approved && this._proposal.planningOfficerApproval == ApprovalEnum.Approved;\r\n }\r\n renderNewProposalLink(elm) {\r\n Proposal.renderNewProposalLink(elm);\r\n }\r\n updateProposalStatus() {\r\n let approvalFieldPlanningOfficer = this.componentsPerField[\"natoPlanningOfficerApproval\"];\r\n let approvalFieldHeadOfSection = this.componentsPerField[\"natoHeadOfSectionApproval\"];\r\n //let approvalFieldBudget: ApprovalFieldTemplate = this.componentsPerField[\"natoBudgetApproval\"] as ApprovalFieldTemplate\r\n this._proposal.planningOfficerApproval = approvalFieldPlanningOfficer.approvalValue;\r\n this._proposal.headOfSectionApproval = approvalFieldHeadOfSection.approvalValue;\r\n let statusField = this.componentsPerField[\"natoGrantStatus\"];\r\n statusField.value = this._proposal.status;\r\n }\r\n}\r\n//Wait for the SPClientTemplate object to be available\r\nExecuteOrDelayUntilScriptLoaded(() => {\r\n SP.SOD.executeFunc('clienttemplates.js', 'SPClientTemplates', function () {\r\n let g_MinimalDownload = window['g_MinimalDownload'];\r\n let asyncDeltaManager = window['asyncDeltaManager'];\r\n let initialize = () => {\r\n let grantRendering = new PDDGrantRendering();\r\n grantRendering.RegisterRenderingTemplates();\r\n window['GrantRendering'] = grantRendering;\r\n SPRibbonControl.getInstance().then((ribbon) => {\r\n let manageGrantsRibbonGroup = new ManageGrantsRibbon();\r\n let documentGeneratorRibbonGroup = new DocumentGeneratorRibbon();\r\n let manageApplicationRibbonGroup = new ManageApplicationsRibbon();\r\n });\r\n };\r\n //Test if MDS is enabled for this site\r\n if (typeof g_MinimalDownload != 'undefined' && g_MinimalDownload && (window.location.pathname.toLowerCase()).endsWith(\"/_layouts/15/start.aspx\") && typeof asyncDeltaManager != 'undefined') {\r\n //MDS is enabled, so instruct it to load this JavaScript file on every page, and call the JsLinkExample.Register function once the file has been loaded\r\n RegisterModuleInit(_spPageContextInfo.siteServerRelativeUrl + '/SiteAssets/Scripts/Components/NATO.SP.PreAwardPortal.PDD.Init.js', function () {\r\n initialize();\r\n });\r\n }\r\n initialize();\r\n });\r\n}, \"NATO.SP.PreAwardPortal.PDD.Init.js\");\r\n//# sourceMappingURL=PDDGrantRendering.jsx.map","import \"babel-polyfill\";\r\nimport { BaseGrantRendering, LogMessage, LogSeverityEnum, SPRibbonControl, SpecialCall, ManageGrantsRibbon, DocumentGeneratorRibbon, ManageApplicationsRibbon, AnsweredQuestionsComponent, DivisionEnum } from \"../index\";\r\nimport \"es6-object-assign/auto\";\r\nimport \"whatwg-fetch\";\r\nclass ESCGrantRendering extends BaseGrantRendering {\r\n constructor() {\r\n super();\r\n this._questionsChecked = false;\r\n LogMessage.Log(\"Initializing ESC Grant Rendering logic\", this, LogSeverityEnum.Verbose);\r\n }\r\n toString() {\r\n return \"ESCGrantRendering\";\r\n }\r\n onPostRender(ctx) {\r\n super.onPostRender(ctx);\r\n if (this._specialCall == null && super.grant != null && super.grant.spItem != null) {\r\n this._specialCall = new SpecialCall(super.grant.spItem);\r\n this._specialCall.id = super.grant.id;\r\n this._specialCall.url = super.grant.url;\r\n }\r\n super.showPublishedGrantData();\r\n // Show the unanswered questions notification if necessary\r\n if (!this._questionsChecked) {\r\n this._questionsChecked = true;\r\n SP.SOD.executeFunc(\"sp.js\", \"SP.ClientContext\", () => {\r\n AnsweredQuestionsComponent.ShowUnansweredQuestionsNotificationBanner(DivisionEnum.ESC);\r\n });\r\n }\r\n }\r\n Publish(listGuidStr, itemIdStr) {\r\n let itemId = Number(itemIdStr);\r\n let listGuid = new SP.Guid(listGuidStr);\r\n this._specialCall.Publish(itemId, listGuid);\r\n }\r\n PublishEnabled(listId, itemId) {\r\n this.updateSpecialCallStatus();\r\n return !this._specialCall.isPublished;\r\n }\r\n updateSpecialCallStatus() {\r\n let statusField = this.componentsPerField[\"natoGrantStatus\"];\r\n statusField.value = this._specialCall.status;\r\n }\r\n}\r\n//Wait for the SPClientTemplate object to be available\r\nExecuteOrDelayUntilScriptLoaded(() => {\r\n SP.SOD.executeFunc('clienttemplates.js', 'SPClientTemplates', function () {\r\n let g_MinimalDownload = window['g_MinimalDownload'];\r\n let asyncDeltaManager = window['asyncDeltaManager'];\r\n let initialize = () => {\r\n let grantRendering = new ESCGrantRendering();\r\n grantRendering.RegisterRenderingTemplates();\r\n window['GrantRendering'] = grantRendering;\r\n SPRibbonControl.getInstance().then((ribbon) => {\r\n ribbon.selectTabById(\"CustomAction.EscRibbon.Tab\");\r\n let manageGrantsRibbonGroup = new ManageGrantsRibbon();\r\n let documentGeneratorRibbonGroup = new DocumentGeneratorRibbon();\r\n let manageApplicationRibbonGroup = new ManageApplicationsRibbon();\r\n });\r\n };\r\n //Test if MDS is enabled for this site\r\n if (typeof g_MinimalDownload != 'undefined' && g_MinimalDownload && (window.location.pathname.toLowerCase()).endsWith(\"/_layouts/15/start.aspx\") && typeof asyncDeltaManager != 'undefined') {\r\n //MDS is enabled, so instruct it to load this JavaScript file on every page, and call the JsLinkExample.Register function once the file has been loaded\r\n RegisterModuleInit(_spPageContextInfo.siteServerRelativeUrl + '/SiteAssets/Scripts/Components/NATO.SP.PreAwardPortal.ESC.Init.js', function () {\r\n initialize();\r\n });\r\n }\r\n initialize();\r\n });\r\n}, \"NATO.SP.PreAwardPortal.ESC.Init.js\");\r\n//# sourceMappingURL=ESCGrantRendering.jsx.map","module.exports = ReactDOM;"],"sourceRoot":""}